Herausforderung
Schreiben Sie eine Funktion oder ein Programm, das eine Eingabezeile akzeptiert, eine sehr spezifische und seltsam vertraute Zufallswiedergabe für ihre Zeichen ausführt und das Ergebnis ausgibt.
Das erforderliche Mischen kann mit dem folgenden Algorithmus beschrieben werden:
- Beschriften Sie jedes Zeichen in der Eingabe mit einem 1-basierten Index.
- Schreiben Sie das Zeichen Nummer 1 als Ausgabe.
- Schreiben Sie beginnend mit Zeichen Nummer 2 alle anderen Zeichen der Reihe nach in die Ausgabe, mit Ausnahme von Zeichen 2 selbst. Mit anderen Worten, schreiben Sie die Zeichen 4, 6, 8, 10 usw. als Ausgabe.
- Beginnen Sie mit der nächsten Zeichennummer n, die noch nicht als Ausgabe geschrieben wurde, und schreiben Sie jedes n-te Zeichen in die Ausgabe, ausgenommen Zeichen n selbst und alle anderen Zeichen (mit numerischer Bezeichnung), die Sie möglicherweise bereits in die Ausgabe geschrieben haben.
- Wiederholen Sie Schritt 4, solange der Ausgabe weitere Zeichen hinzugefügt werden.
- Schreiben Sie die restlichen auszugebenden Zeichen der Reihe nach.
Beispiel
- Beschriften Sie die Zeichen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 OLDDOCYAK 'SBEAUTYCORNER
2. Schreiben Sie das erste auszugebende Zeichen:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27OLDDOCYAK 'SBEAUTYCORNER O.
3. Schreiben Sie alle anderen Zeichen beginnend mit 2, ausgenommen 2.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNER. O OA 'EUYCRE
4. Das nächste noch nicht geschriebene Zeichen ist das Zeichen Nummer 3; Schreiben Sie jedes dritte Zeichen beginnend mit 3, jedoch ohne das Zeichen 3 selbst und alle bereits geschriebenen Zeichen.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCRE YB R.
5. Wiederholen Sie Schritt 4 mit dem nächsten Zeichen, Zeichen 5.
4. Das nächste noch nicht geschriebene Zeichen ist das Zeichen Nummer 5; Schreiben Sie jedes fünfte Zeichen, beginnend mit 5, aber ohne das Zeichen 5 selbst und alle bereits geschriebenen Zeichen. (Dies entspricht nur Zeichen 25).
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA 'EUYCREYB R N.
5. Das nächste Zeichen ist 7; Da jedoch 14, 21 bereits geschrieben wurden, werden keine weiteren Zeichen ausgegeben, wenn wir Schritt 4 wiederholen. Damit sind wir mit 5 fertig.
6. Schreiben Sie die restlichen Zeichen der Reihe nach aus.
12 3456789101112131415161718192021222324252627OLD DOCYAK'SBEAUTYCORNEROOA 'EUYCREYB RN LDDCKSATO
Regeln
Die Eingabe und Ausgabe kann über Standardeingabe / Standardausgabe, Zeichenfolgen oder Arrays von Zeichen erfolgen.
Wenn Sie als Standardeingabe einlesen, können Sie nach Belieben davon ausgehen, dass eine nachgestellte neue Zeile vorhanden ist oder dass die gesamte Eingabe die Zeile enthält. Newline-Zeichen nehmen nicht am Shuffle teil.
Ebenso kann Ihre Ausgabe nach Belieben einen nachgestellten Zeilenumbruch haben oder nicht.
Standardlücken sind nicht zulässig.
Dies ist ein Code-Golf-Wettbewerb. Der kleinste Code in Bytes gewinnt.
Testfälle
123456789ABCDEF -> 1468ACE9F2357BD
OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO
Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.
Antworten:
Gelee , 10 Bytes
TryItOnline
Wie?
quelle
Mathematica, 61 Bytes
Unbenannte Funktion, die eine Liste von Zeichen als Eingabe verwendet und eine Liste von Zeichen zurückgibt.
FactorInteger[#][[1,1]]
ergibt den kleinsten Primfaktor von#
(und gibt zurück,1
wenn#
gleich1
). DaherFactorInteger[#][[1,1]]PrimeQ@#
ergibt sich ein seltsamer Ausdruck: [#
's kleinster Primfaktor]False
wenn#
nicht Primzahl ist und# True
wenn#
Primzahl ist (dies sind nicht bewertete Produkte einer Zahl und eines Booleschen Werts).Range@Length@#
liefert eine Liste der Zahlen bis zur Länge der Eingabe. DannSortBy
sortiert diese Zahlen durch die lustige Funktion oben beschrieben. Mathematica ist in vielerlei Hinsicht sehr typsensitiv, mischt sie aber fröhlich auf andere Weise: Ausdrücke der Form [Zahl]False
werden vor Ausdrücken der Form [Zahl] alphabetisch sortiertTrue
, während Bindungen durch numerisches Sortieren der Zahlen unterbrochen werden. Das erzeugt genau die Permutation, die wir hier wollen, und#[[...]]
permutiert die Zeichen der Eingabe entsprechend.quelle
C 164 Bytes
Dies nimmt die Eingabe als ersten Befehlsparameter und druckt zurück zu stdout. Während wir jedes Zeichen verarbeiten, löschen wir es und erlauben den endgültigen Durchgang.
quelle