Bei einem gegebenen Eingangskette, Ausgabe , die Zeichenfolge mit allen Vokalen a
, e
, i
, o
und nach u
dem Zufallsprinzip zwischen miteinander vertauscht.
Zum Beispiel in der Zeichenfolge this is a test
gibt es 4 Vokale: [i, i, a, e]
. Ein gültiges Mischen dieser Vokale könnte [a, i, e, i]
daher die Ausgabe ergeben thas is e tist
.
Über das Mischen
Alle Vermischungen sind gleich wahrscheinlich, wenn wir gleiche Vokale als verschieden betrachten . Für das obige Beispiel sind diese 24 Mischen möglich:
[i 1 , i 2 , a, e] [i 1 , i 2 , e, a] [i 1 , a, i 2 , e] [i 1 , a, e, i 2 ] [i 1 , e, i 2 , a] [i 1 , e, a, i 2 ] [i 2 , i 1 , a, e] [i 2 , i 1 , e, a] [i 2 , a, i 1 , e] [i 2 , a, e, i 1 ] [i 2 , e, i 1 , a] [i 2 , e, a, i 1 ] [a, i 1 , i 2 , e] [a, i 1 , e, i 2 ] [a, i 2 , i 1 , e] [a, i 2 , e, i 1 ] [a, e, i 1 , i 2 ] [a, e, i 2 , i 1 ] [e, i 1 , i 2 , a] [e, i 1 , a, i 2 ] [e, i 2 , i 1 , a] [e, i 2 , a, i 1 ] [e, a, i 1 , i 2 ] [e, a, i 2 , i 1 ]
Jeder sollte gleich wahrscheinlich sein.
Sie können keine zufällige Mischung der gesamten Zeichenfolge versuchen, bis Sie eine gefunden haben, bei der sich alle Vokale an der richtigen Stelle befinden. Kurz gesagt, die Laufzeit Ihres Codes muss konstant sein, wenn die Eingabe konstant ist.
Eingänge und Ausgänge
Sie können davon ausgehen, dass alle Buchstaben in der Eingabe Klein- oder Großbuchstaben sind. Sie können auch gemischte Gehäuse unterstützen, obwohl dies keinen Bonus gibt.
Die Eingabe besteht immer aus druckbaren ASCII-Zeichen. Alle Zeichen, die in der Eingabe sind, müssen in der Ausgabe sein, nur die Vokale müssen gemischt werden und sonst nichts.
Die Eingabe kann leer sein. Es gibt keine Garantie dafür, dass die Eingabe mindestens einen Vokal oder mindestens einen Nicht-Vokal enthält.
Sie können die Eingabe von
STDIN
, als Funktionsparameter oder etwas Ähnliches nehmen.Sie können die Ausgabe an drucken
STDOUT
, von einer Funktion zurückgeben oder etwas Ähnliches.
Testfälle
Die erste Zeile ist die angegebene Eingabe. Die zweite Zeile ist eine der möglichen Ausgaben.
<empty string>
<empty string>
a
a
cwm
cwm
the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.
abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz
programming puzzles & code golf
pregromming pezzlos & coda gulf
fatalize
fitaleza
martin ender
mirten ander
Wertung
Das ist Code-Golf , das hat der Shirtist en bytes gewonnen .
quelle
y
als Vokal ..;)y
, ein Vokal zu sein, aber die letzte Herausforderung, bei der ich sagte, esy
sei ein Vokal, wurde ich gefragt, warum ich das gewählt habe!Antworten:
Gelee , 15 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
/usr/share/dict/words
von meinem Computer verwendet und sie in den Jelly-Interpreter aufgenommen.R
9291Ich kann noch keinen Kommentar abgeben, daher füge ich meine eigene Antwort hinzu, obwohl sie der Antwort von @ Andreï Kostyrka sehr ähnlich ist (ob Sie es glauben oder nicht, aber ich habe sie unabhängig gefunden).
Ungolfed
Dank @Vlo ein Byte gespeichert
quelle
s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
el()
anstelle von verwenden[[1]]
.R
999889 BytesScheint die erste für Menschen lesbare Lösung zu sein! Danke an Giuseppe für das Speichern von 9 Bytes!
Testfälle:
Es scheint, als gäbe es keine Möglichkeit, eine interne Variablenzuweisung vorzunehmen (inside, like,
cat
), und wieder werden einige Leute beweisen, dass ich falsch liege ...quelle
letters[c(1,5,9,15,21)]
ist 1 Byte länger und OEIS A161536 und A215721 scheinen ebenfalls wenig oder gar keine Hilfe zu sein.z=grepl("[aeiou]",x)
kürzer?CJam, 23 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 17 Bytes
Erläuterung
Probieren Sie es online!
quelle
Python 3, 109 Bytes
Unterstützt nur Vokale in Kleinbuchstaben.
Vielen Dank an @Alissa für das Speichern eines zusätzlichen Bytes.
Ideone es!
quelle
a.pop(random.randrange(0,len(a)))
eineTSQL, 275 Bytes
Golf gespielt:
Ungolfed:
Geige
quelle
Perl, 38 Bytes
Beinhaltet +1 für
-p
Führen Sie mit dem Satz auf STDIN
vawols.pl
:quelle
Java 7,
243241 BytesJa, das kann man wahrscheinlich ein bisschen Golf spielen, aber Java hat keine praktischen Einbauten für diesen Afaik. Außerdem habe ich irgendwie die codegolfed Array-Variante für
Collections.shuffle
... vergessen .Ungolfed & Testfälle:
Probieren Sie es hier aus.
Mögliche Ausgabe:
quelle
i
in der zweiten Schleife?Arrays.shuffle
hat mich genau dort aufgehalten ...import java.util.*;String c(char[]z){List l=new ArrayList();int i=0,j=z.length;for(;i<j;i++)if("aeiou".indexOf(z[i])>=0){l.add(z[i]);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<j;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}
Perl 6 , 65 Bytes
Anonyme Funktion. Übernimmt die Eingabe in Kleinbuchstaben.
( online ausprobieren )
quelle
Ruby 45 + 1 = 46 Bytes
+1 Byte für
-p
Flagquelle
Brachylog , 39 Bytes
Probieren Sie es online!
Erläuterung
Hauptprädikat:
Prädikat 1:
Prädikat 2:
quelle
Javascript (ES6),
7876 Bytes2 Bytes dank Apsillers gespart
Alternative Version von Apsillers vorgeschlagen (auch 76 Bytes)
Prüfung
quelle
l=...
und verwenden Sie die gebundene Funktion[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))
als zweites Argument fürreplace
(anstelle einer Pfeilfunktion). Vielleicht gibt es eine Verbesserung auf diesem Weg, aber ich habe noch keine gefunden. Wenn Sie eine JS-Superset-Sprache mit dem Bind-Operator verwendet haben::
, könnten Sie dies wahrscheinlich tun(s.match(r).sort(_=>Math.random()-.5)))::pop
.MATL , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Japt v2.0a0,
1413 BytesVersuch es
Erläuterung
quelle
Pyth, 26 Bytes
Ein Programm, das die Eingabe einer Zeichenfolge in Anführungszeichen akzeptiert und die gemischte Zeichenfolge druckt.
Probieren Sie es online aus
Wie es funktioniert
quelle
PHP,
144129 BytesVerwenden von Kleinbuchstaben
Erläuterung:
quelle
Eigentlich 24 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Bash, 75 Bytes
Nimmt den String als Argument und gibt das Ergebnis an stdout aus.
Z.B
druckt
quelle
Bash, 89
Nimmt an, dass alle Eingaben in Kleinbuchstaben erfolgen.
quelle
PowerShell v3 +,
155 bis99 ByteGroße Requisiten an @ Ben Owen für das 56-Byte-Golf
Nimmt Eingaben entgegen
$n
, erwartet Kleinbuchstaben undchar
wandelt sie sofort in ein -array um.Wir Rohr , das in eine
Where-Object
Klausel jene Elemente zu ziehen , dass-match
ein Vokal, Rohr sieSort-Object
mit{Get-Random}
als Sortiermechanismus. Wenn SieGet-Random
ohne Qualifizierer aufrufen, wird eine Ganzzahl zwischen0
und[int32]::MaxValue
- zurückgegeben, dh, Sie weisen jedem Element spontan eine zufällige Gewichtung zu. Wir speichern die zufälligen Vokale in$a
.Schließlich schleifen wir durch
$n
.|%{...}
Wenn sich das aktuelle Zeichen irgendwo befindet-in
$a
, geben wir für jedes Element das nächste Element in$a
nachträglicher Inkrementierung$i
aus. Ansonsten geben wir das aktuelle Zeichen aus. Das ist alles in Parens gekapselt und-join
zu einer Schnur zusammengefasst. Diese Zeichenfolge verbleibt in der Pipeline, und die Ausgabe ist beim Programmabschluss implizit.Testfälle
quelle
$n
Zeichen durchlaufen und für jeden Vokal einen Abgleichchar
durchführen, um stattdessen das -array der Vokale auszugeben. So etwas wie:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
$a
.Python 3, 106 Bytes
Nur Kleinbuchstaben.
quelle
PHP> = 5.3 ,
139136 Bytes (und keine Fehler geworfen)quelle
K (oK) , 29 Bytes
Lösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Finden Sie die Positionen der Vokale und ersetzen Sie sie durch die gezeichneten Vokale in zufälliger Reihenfolge.
quelle
APL (Dyalog Unicode) , 21 Byte
Probieren Sie es online!
Nimmt Großbuchstaben an.
quelle
{⍵∊'AEIOU'}
→∊∘'AEIOU'
funktionieren?({⍵[?⍨≢⍵]}@∊)∘'AEIOU'
.Kotlin ,
122118 BytesProbieren Sie es online!
quelle