deRpiFy the sTriNg! [geschlossen]


8

Sie werden eine Entscheidung treffen, die sich auf die Druckbarkeit bezieht.

SIE MÜSSEN DIE STEUERUNG BEI DER ÄNDERUNG DES RANDES (UNTERSCHIEDLICHE, 50% KANAL-UPPERATUR) BEHANDELN, UM ANDERE ZU LÖSCHEN.

das ist es.

(Entschuldigung für die Zeichensetzung, es war für das Konzept der Frage)

Lesbare Version:

Sie erhalten eine Zeichenfolge, die aus druckbaren ASCII-Zeichen besteht.

Sie durchlaufen die Zeichenfolge und ändern zufällige (einheitliche Großbuchstaben mit einer Wahrscheinlichkeit von 50%) in Großbuchstaben und alles andere in Kleinbuchstaben.

das ist es.

Beispiele

iNpuT => pOssiBle oUtPUt
Programming puzzles and Code Golf => pRogRaMMiNg pUzzlEs aNd coDe goLf
dErpity deRp derP => deRpiTy dErp DerP
CAAAPSLOOOCK => cAAapslOoocK
_#$^&^&* => _#$^&^&*

2
Was bedeutet "zufällig" genau? Kann es zwei aufeinanderfolgende Großbuchstaben geben (Ihre Testfälle haben keine solchen Konfigurationen)? Ich würde sagen, diese Frage ist im aktuellen Zustand nicht genau spezifiziert, aber ich werde noch nicht darüber abstimmen. Bitte spezifizieren Sie diese beiden Dinge.
HyperNeutrino

Ist Zeit% 2 für Pseudozufälligkeit zulässig?
fəˈnɛtɪk

@ fəˈnɛtɪk Sicher (wenn es einheitlich ist)
Matthew Roh

2
Sie sagen druckbares ASCII, aber Ihre Testfälle enthalten nur alphabetische Zeichen. Sollte das Programm in der Lage sein, mit nicht alphabetischen Zeichen umzugehen, oder können wir erwarten, dass die Eingabe rein alphabetisch ist?
MildlyMilquetoast

5
Ich denke, die meisten der vorhandenen Antworten gehen auch davon aus, dass die Entscheidung für jeden Buchstaben unabhängig ist , aber das ist nirgends in Frage. Gegenwärtig denke ich, dass es technisch mit der Spezifikation kompatibel wäre, etwas in der Art von (Pseudocode) zu schreibens=>rand()%2?s.upper():s.lower()
Peter Taylor

Antworten:


10

C - 65 Bytes

Ziemlich gut für eine Mainstream-Sprache!

main(c){while((c=getchar())>0)putchar(isalpha(c)?c^rand()&32:c);}

Verwendet XOR, um das Bit 0x20für jedes alphabetische Zeichen zufällig umzudrehen . Das Programm geht von einem ASCII-Zeichensatz aus EOF < 0.

Probelauf aus eigener Quelle!

$ main < main.c
MaIN(c){WhILe((C=GETChAr())>0)pUtCHaR(iSALpha(C)?C^rANd()&32:C);}

Sehr derpy.


1
"Ziemlich gut für eine Mainstream-Sprache!" - C ist oft überraschend gut zum Golfen.
Steadybox

7

JavaScript, 87 Bytes

function(s){return s.replace(/./g,c=>Math.random()<.5?c.toLowerCase():c.toUpperCase())}

68 Bytes in ES6:

f=
s=>s.replace(/./g,c=>c[`to${Math.random()<.5?`Low`:`Upp`}erCase`]())
<input oninput=o.textContent=f(this.value)><pre id=o>


Der zweite Code funktioniert, aber der erste: Ungefangener Syntaxfehler: Unerwartetes Token (
Felo Vilches

@FeloVilches Sie müssen es in einem Ausdruckskontext verwenden, damit es funktioniert. Andernfalls versucht die Engine, es als Funktionsanweisung zu analysieren.
Neil

Kann mit ES6 gekürzt werden.
CalculatorFeline

@CalculatorFeline Ohne Zweifel auf 68 Bytes?
Neil

5

Gelee , 6 Bytes

,ŒsXµ€

Probieren Sie es online aus!

Wie?

Wenn Sie alle Zeichen der Eingabe senken und dann jeweils mit einer Wahrscheinlichkeit von 50% in Großbuchstaben setzen, entspricht dies der Auswahl eines der ursprünglichen Zeichen und des Zeichens mit getauschten Groß- und Kleinschreibung mit gleicher Wahrscheinlichkeit ...

,ŒsXµ€ - Main link: string s
    µ  - monadic chain separation
     € - for each char c in s
,      -     pair c with
 Œs    -     swapped case of c
   X   -     choose a random item from the list (of the two chars)
       - implicit print

Ohh. Kluge Interpretation der Herausforderung.
Matthew Roh

Übrigens: Ist das Uniform?
Matthew Roh

@SIGSEGV Wenn mit "einheitlich" gemeint ist, dass jedes Zeichen eine 50% ige Chance hat, jeweils ein Fall zu sein, dann wird ja - Xwird mit Pythons implementiert. random.choiceWenn also eine Liste mit 2 Zeichen angezeigt wird, wird jedes Zeichen mit einer Wahrscheinlichkeit von 50% ausgewählt - jedes Zeichen in der Eingabe erzeugt eine solche Liste (nicht alphabetische Zeichen sind eine Liste von 2 gleichen Zeichen, aber das spielt keine Rolle, wenn die Interpretation von "Uniform" oben korrekt ist).
Jonathan Allan

Hier ist ein Beispiel für durch Zeilenvorschub getrennte Listen, aus denen jeweils ein Zeichen ausgewählt wird.
Jonathan Allan

5

PowerShell , 64 60 Byte

-join([char[]]"$args".ToLower()|%{"$_".ToUpper(),$_|random})

Probieren Sie es online aus!(Stellen Sie sicher, dass "Ausgabecache deaktivieren" aktiviert ist, wenn Sie zufällige Ergebnisse wünschen.)

Genaue Übersetzung der Herausforderung. Nimmt die Eingabezeichenfolge ToLower(), konvertiert sie in ein charArray, durchläuft jedes Zeichen |%{...}und wählt zufällig zwischen dem vorhandenen Zeichen oder der Variante in Großbuchstaben aus. Dann werden -joinsie alle wieder zu einer einzigen Zeichenfolge zusammengefügt. Das funktioniert weil ToUpperundToLower nur alphabetische Zeichen beeinflussen, Zeichensetzung und dergleichen unverändert bleibt.

(Dennis hat die Alias-Liste auf TIO korrigiert, Randomdamit Linux nicht ausprobiert wird, randomsondern korrekt Get-Randomals PowerShell-Befehl aliasiert wird, wie es sollte. Danke, Dennis!)


4

MATL , 13 12 Bytes

"@ktXkhlZr&h

Probieren Sie es bei MATL Online aus

Erläuterung

        % Implicitly grab input as a string
"       % For each character...
  k     % Convert to lowercase
  tXk   % Make a copy and convert to uppercase
  h     % Horizontally concatenate these two characters
  lZr   % Randomly select one of them
  &h    % Horizontal concatenate the entire stack
        % Implicit end of for loop and implicit display

4

Japt , 10 Bytes

®m"uv"gMq2

Probieren Sie es online aus!

Erläuterung

Das ist also eine Art kitschiger Hack, aber es funktioniert. In JavaScript können Sie so etwas tun

x[`to${Math.random()<.5?"Upp":"Low"}erCase`]()

zufällig xin Groß- oder Kleinbuchstaben konvertieren . In Japt sind die entsprechenden Funktionen ufür toUpperCaseund vfür toLowerCase. In Japt gibt es jedoch keine direkte Möglichkeit, einen berechneten Eigenschaftswert zu erhalten (x[expression] in JavaScript) .

Eine meiner Lieblingsfunktionen von Japt ist, dass Sie, wenn Sie eine Funktion haben, die aus einem einzelnen Methodenaufruf besteht (z. B. mX{Xq}oder .m(X=>X.q())in JS), alles außer dem Namen der Methode weglassen können, z mq. Der Compiler wandelt dies dann in eine Zeichenfolge um, die an den ursprünglichen Methodenaufruf ( .m("q")) übergeben wird, und die Methode wandelt dies wieder in eine Funktion um. Es gibt also keinen Unterschied zwischen mqundm"q" ; beide erzeugen die gleiche Ausgabe.

Nun, wo ich damit hingegangen bin: Während wir eine zufällige Methode für eine Zeichenfolge nicht direkt aufrufen können , können wir mdiese Zeichenfolge mit einem zufälligen Methodennamen aufrufen . Also zur Erklärung:

®m"uv"gMq2
®           // Replace each char in the input by this function:
 m          //   Replace each char in this char by this function:
      g     //     the char at index
       Mq2  //       random integer in [0,2)
  "uv"      //     in "uv".
            //   This randomly calls either .u() or .v() on the char.
            // Implicit: output result of last expression

MqStandardmäßig nicht 2? Oder wurde das kürzlich hinzugefügt?
Oliver

@obarakon Ich denke, das war jünger. Eine schnelle Suche auf GitHub sagt, es war der 5. Mai
ETHproductions

4

PHP, 53 Bytes

for(;a&$c=$argn[$i++];)echo(lu[rand()&1].cfirst)($c);

1
Schöner Trick mit dem strto.*.er. :)
Alex Howansky

1
Speichern Sie ein Byte w /rand()&1
Alex Howansky

1
Speichern Sie eine Reihe von Bytes, indem Sie foreach(str_split($argv[1]as$c)...anstelle der Array-Indizierung verwenden.
Alex Howansky




2

Japt , 12 10 Bytes

£M¬?Xv :Xu

Erläuterung:

£M¬?Xv :Xu
£             // Iterate through the input. X becomes the iterative item
 M¬           // Return a random number, 0 or 1
    ?         // If 1:
     Xv       //   X becomes lowercase
        :     // Else:
         Xu   //   X becomes uppercase 

Probieren Sie es online aus!




1

CJam , 14 Bytes

qel{2mr{eu}&}%

Probieren Sie es online aus!

Erläuterung

q               e# Read the input
 el             e# Make it lowercase
   {            e# For each character in it
    2mr         e#  Randomly choose 0 or 1
       {eu}&    e#  If 1, make the character uppercase
            }%  e# (end of block)

1

MATL , 12 11 Bytes

1 Byte entfernt mit Jonathan Allans Idee , den Fall direkt zu ändern.

"@rEk?Yo]&h

Versuchen Sie es bei MATL online!

Erläuterung

"         % Implicit input. For each
  @       %   Push current char
  r       %   Random number uniformly distributed on (0,1)
  Ek      %   Duplicate, floor: gives 0 or 1 with the same probability
  ?       %   If nonzero
    Yo    %     Change case. Leaves non-letters unaffected
  ]       %   End
  &h      %   Horizontally concatenate evverything so far
          % Implicit end and display

1

Pyth, 5 Bytes

srLO2

Testsuite

srLO2
srLO2Q    Variable introduction
  L  Q    Map over the input
 r        Set the case of each character to 
   O2     Random number from [0, 1]. 0 means lowercase, 1 means uppercase.
s         Concatenate

1

Befunge , 136 Bytes

>~:0`!#@_:"@"`!#v_:"Z"`!#v_:"`"`!#v_:"z"`!#v_,
^,<    <        <                 <
 >?<                     <             -*84<
  >84*+^

Probieren Sie es online aus!

Es gibt viele Leerzeichen, die ich für möglich halte, um sie loszuwerden. Befunge hat keine Möglichkeit herauszufinden, was ein Brief ist und was nicht, also mache ich das in der ersten Reihe.


Dieses Snippet ist eine schnellere Methode, um zu überprüfen, ob der oberste Wert des Stapels ein Buchstabe ist. Wenn dies der Fall ist, wird eine 0 und eine nicht 1 gedrückt. Es ist viel kürzer zu "und" Bedingungen zusammen, indem man sie multipliziert, anstatt eine Reihe von if-Anweisungen zu verwenden, die an denselben Ort geleitet werden
MildlyMilquetoast

Ich verstehe nicht, wie das funktioniert. Wenn ich es ausführe, gibt es mir immer eine 0 und es akzeptiert keine Eingabe.

Entschuldigung, in diesem Programm setzen Sie den Wert in die ersten Anführungszeichen. Rückblickend ist dies ein wirklich dummer Weg, dies zu tun. Es sollte ziemlich einfach sein, die ersten drei Zeichen in a zu ändern~
MildlyMilquetoast

0

Bash , 64 Bytes

erster Versuch

a=$(shuf -e -n 13 {A..Z}|tr -d "\n");b=${a,,};tr $b $a <<<${1,,}

Probieren Sie es online aus!

mischt Großbuchstaben, nimmt die ersten 13, entfernt Zeilenumbrüche und speichert in $ a. $ b hält $ a in Kleinbuchstaben. Die Eingabe wird durch $ {1 ,,} auf Kleinbuchstaben gesetzt und als Heredoc an tr übergeben, der jedes Vorkommen von $ b durch $ a ersetzt

Dies ist etwas unkompliziert, da immer der gleiche Buchstabe groß geschrieben wird.


0

JavaScript + HTML, 115 Bytes

<input oninput="this.value=this.value.toLowerCase().split('').map(v=>Math.random()<.5?v.toUpperCase():v).join('')">


0

Bash, 162 Bytes

a=$1
b=1
c="echo $a|head -c$b|tail -c1"
while(($b<=${#a}))
do
r=$[RANDOM%2]
if [ $r = 1 ]
then d=$(eval $c);echo -n ${d^}
else echo -n $(eval $c)
fi
b=$[b+1]
done

Ziemlich selbsterklärend. Übernimmt Eingaben von der Befehlszeile arg und schreibt in stdout.

Lauf wie derpifier.sh "Derp this"

Mann, sobald ich anfange, das anzuwenden Tipps , schrumpft der Code schnell.


0

Schnell - viel zu viele Bytes ( 176 167)

uppercased(), lowercased(), arc4random_uniform()Töten wirklich die Partitur, außer für mich eine Funktion hinzuzufügen, die seit dem Swift keine Standard - Eingabemethode hat!

import Foundation
func g(x:String){var result="";for i in x.characters{let e=String(i);result+=(arc4random_uniform(2)>0 ?e.uppercased():e.lowercased())};print(result)}

Funktion mit Nutzung: print(g(x: "Your String Here"))

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.