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
_#$^&^&* => _#$^&^&*
Matthew Roh
quelle
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.


quelle
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>

Neil
quelle
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
Jonathan Allan
quelle
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!)

AdmBorkBork
quelle
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
Suever
quelle
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
ETH-Produktionen
quelle
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);
Jörg Hülsermann
quelle
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!

Oliver
quelle
1

05AB1E , 8 Bytes

vyDš‚.RJ

Probieren Sie es online aus!

Erläuterung

v          # for each char y in input
 yDš‚      # pair lower-case y with upper-case y
     .R    # pick one at random
       J   # join to string
Emigna
quelle
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)
Geschäftskat
quelle
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
Luis Mendo
quelle
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
isaacg
quelle
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.


quelle
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.

Markosmos
quelle
0

JavaScript + HTML, 115 Bytes

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

cnorthfield
quelle
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.

Feldspat15523
quelle
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"))

Mr. Xcoder
quelle