Konzept
Auf welche Weise können Sie das englische Alphabet verschlüsseln, damit es immer noch in der Melodie Twinkle Twinkle Little Star gesungen werden kann, ohne die Melodie zu ruinieren?
Regeln
Tauschen
Angenommen, die Buchstaben in den folgenden Sätzen können standardmäßig frei ausgetauscht werden, ohne die Melodie zu ruinieren:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {I, Y}
- {Q, U}
- {S, X, F}
- {M, N}
- Daher sind H, L, O, R und W an Ort und Stelle verriegelt
Ausgabe
Das Programm muss eine einzelne RANDOM-Zeichenfolge (oder eine Liste von Zeichen) ausgeben, die das vollständige englische Alphabet in einer beliebigen Reihenfolge enthält, sofern diese Reihenfolge die oben genannten Bedingungen erfüllt. Es sollte keine Möglichkeit für Sie geben, vorherzusagen, welche Zeichenfolge Ihr Programm ausgibt (wenn wir das Seeding ignorieren), was bedeutet, dass Sie es nicht einfach hart codieren können.
Ihr Programm muss eine positive Wahrscheinlichkeit (nicht unbedingt einheitlich) haben, jede der erzeugen Ausgänge.
Es gibt keine besonderen Formatierungsbeschränkungen in Bezug auf Abstand, Begrenzer oder Groß- / Kleinschreibung. Seien Sie einfach konsistent.
Tor
Wenigste Bytes gewinnt!
Beispiele:
- KCDBPSVHIAJLMNOZQRXGUEWFYT
- A, G, Z, V, P, X, C, H, Y, K, J, L, N, M, O, T, U, R, S, D, Q, B, W, F, I, E
- KVTDCFBHIJALNMOPURSZQGWXYE
- jcdebxthikalnmogursvq pwfyz
- ABCDEFGHIJKLMNOPQRSTUVWXYZ
Kein Beispiel:
- HLWROABCDEFZXYGIJKMNPQTSVU
Proof of Concept: (Python3, 529 Byte)
import random
g1 = ['A', 'J', 'K']
g2 = ['B', 'C', 'D', 'E', 'G', 'P', 'T', 'V', 'Z']
g3 = ['I', 'Y']
g4 = ['Q', 'U']
g5 = ['S', 'X', 'F']
g6 = ['M', 'N']
random.shuffle(g1)
random.shuffle(g2)
random.shuffle(g3)
random.shuffle(g4)
random.shuffle(g5)
random.shuffle(g6)
print(g1[0] + g2[0] + g2[1] + g2[2] + g2[3] + g5[0] + g2[4] + 'H' + g3[0] + g1[1] + g1[2] + 'L' + g6[0] + g6[1] + 'O' + g2[5] + g4[0] + 'R' + g5[1] + g2[6] + g4[1] + g2[7] + 'W' + g5[2] + g3[1] + g2[8])
Z
"verriegelt" sein, es reimt sich nicht mit den anderen?Antworten:
05AB1E , 28 Bytes
Ausgabe als einzelne Zeichenfolge in Kleinbuchstaben.
Erläuterung:
Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie Kompresse Strings nicht Teil des Wörterbuchs? ) Zu verstehen , warum
.•¬=©ƶÓÄûkTVã”ØζÞ•
ist"ajk bcdegptvz iy qu sxf mn"
.quelle
Python 3 ,
140133124123 BytesProbieren Sie es online!
-1 Byte, danke an Jo King
Python 2 ,
174170158 BytesProbieren Sie es online!
quelle
Ruby , 102 Bytes
Probieren Sie es online!
quelle
Pyth ,
595756 BytesProbieren Sie es online!
Die Ausgabe ist ein Array von Kleinbuchstaben.
quelle
R ,
9391 BytesProbieren Sie es online!
quelle
Perl 6 , 76 Bytes
Probieren Sie es online!
Anonymer Codeblock, der keine Argumente verwendet und eine Liste von Zeichen zurückgibt.
Erläuterung:
quelle
JavaScript -
421344328320306280277276... 176 Bytes-77 Bytes - alleine
-18 Bytes - danke an @tsh und @Geza Kerecsenyi , die mir gezeigt haben, worauf @tsh ursprünglich hingewiesen hat
-8 Bytes - danke an @Geza Kerecsenyi
-14 Bytes - mit Hilfe von @Geza Kerecsenyi
- 28 Bytes - alleine
-3 Bytes - wieder mit Hilfe von @Geza Kerecsenyi
-1 Bytes - wie konnte das passieren ...
...
-100 Bytes - @Kaiido hat es getötet und über ein paar Schritte, bevor das Ganze zusammenbrach bis 176 Bytes
Golf gespielt:
oder online ausprobieren !
quelle
'BCDEGPTVZ'.split``
statt.split('')
für -2.y=q=>q.split``
an der Spitze des Codes, und alle der Arrays Strings, dass Sie gehen iny()
- zBa=['A','J','K']
wirda=y("AJK")
'BCDEGPTVZ'.split('')
durchy('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Runenverzauberungen , 210 Bytes
Probieren Sie es online!
Die Randomisierung ist nicht einheitlich, da es in Runic keinen guten Weg gibt, dies zu tun. Stattdessen dreht es zufällig jede Sammlung von Buchstaben (z. B.
[BCDEGPTVZ]
eine Gruppierung) um einen bestimmten Betrag (z. B. wenn das oben gesetzte um 4 gedreht wird, wobei sich die Oberseite des Stapels rechts befindet, ist das Ergebnis[BCDEGZPTV]
) und entscheidet dann zufällig, ob dies der Fall ist oder nicht kehre den Stapel um. Diese Operationen werden 15 Mal ausgeführt. Infolgedessen sind alle möglichen Bestellungen möglich, aber nicht gleich wahrscheinlich. (Für den Fall, dass dies nicht ausreicht, kostet eine weitere Erhöhung 0 Byte , bis zu 15000 Shuffle-Schleifen).Dies ist der Abschnitt des Codes, der das Mischen behandelt:
Der Rest des Codes entfaltet sich darin:
Wenn die Buchstaben durch Ändern von zwei Bytes nicht gemischt (aber einmal umgekehrt) werden, wird das Alphabet normal gedruckt. Dies kann verwendet werden, um sicherzustellen , dass alle Buchstabengruppierungen an den richtigen Stellen gedruckt werden. Durch das Leerzeichen werden die
B
Befehle phasenverschoben, sodass alle IPs die Funktionsschleife gleichzeitig verwenden können, ohne zu kollidieren, und sie dann wieder in die Phase zurückbringen können.Zum Golfen wurde zuerst jegliches Leerzeichen, das in allen Zeilen entfernt werden konnte, abgeschnitten, dann wurden jeweils zwei Leerzeichen in ein konvertiert
y
, und jede Sequenz vonyyyy
wurde in̤
weil konvertiert̤
undyyyy
ist genauso verzögert, aber 2 Byte billiger. Der Loop-Exit wurde ebenfalls mit demHLORW
Hauptprogramm-Segment kombiniert , um die Abstandsbytes (12 Bytes) einzusparen.quelle
Perl 5 ,
103 9185 BytesProbieren Sie es online!
Dieser Code (ab) verwendet die Tatsache, dass Perls Ausgabe von Hash-Schlüsseln (
%l
) zufällig ist, um eine Zuordnung (%k
) aller veränderbaren Buchstaben zu einem ihrer möglichen Gegenstücke zu erstellen . Zum Zeitpunkt der Ausgabe wird angenommen, dass ein nicht vorhandener Schlüssel unverändert ist.quelle
keys
ist definitiv ein guter Ansatz, aber Sie könnensort rand 2,...
stattdessen 6 Bytes sparen, indem Sie Folgendes verwenden : ( Probieren Sie es online aus!Jelly , 34 Bytes
Probieren Sie es online!
quelle
Python 3 , 149 Bytes
Probieren Sie es online!
Randomisierung mit pop () als Buchstabensatz
quelle
APL (Dyalog Extended) , 55 Byte
Volles Programm. Druckt Großbuchstaben mit einem führenden und einem nachgestellten Leerzeichen, jedoch ohne Zwischenräume.
Probieren Sie es online!
⎕A
das Großbuchstaben'AjkBcdegptvzIyQuSxfMn'(
…)
Wende die folgende anonyme implizite Funktion als rechtes Argument und die angegebene Zeichenfolge als linkes Argument an:⊣
für das linke argument,⊂
partitionieren Sie es und beginnen Sie ein neues Segment, in dem∊
Die Zeichen für die linken Argumente sind Mitglieder des rechten Arguments (dh in Großbuchstaben).,⍨
anhängen⊂
Füge⍤
das⊢
richtige Argument ein (um es als ein einzelnes Element zu behandeln)⌈
alles in Großbuchstaben{
…}/
Reduzieren sich um das folgende anonyme Lambda, was… ergibt"QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
auf das richtige Argument (das Scrambling-in-Progress-Alphabet)(
...)@(∊∘⍺)
die folgende anonymous stillschweigende Funktion der Untergruppe gelten , die ein Mitglied des linken Argument ist (ein Reim Gruppe)⊢
auf dieser Untermenge⊇
nachbestellen?⍨
eine zufällige Permutation∘
der Länge≢
der Buchstaben in der Untermengequelle
Holzkohle , 43 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Charcoal hat keine Mischoperatoren, aber ich habe eine Methode für die ersatzlose Probenahme entwickelt. Erläuterung:
Schleife über jeden Buchstaben des Alphabets.
Teilen Sie die Zeichenfolge
AJK BCDEGPTVZ IY QU SXF MN H L O R W
auf Leerzeichen und ziehen Sie eine Schleife über die Teilzeichenfolgen.Wiederholen Sie, wie oft der aktuelle Buchstabe in der Teilzeichenfolge angezeigt wird. (Ich verwende eine Schleife, da eine Bedingung eine
else
Klausel erfordern würde . Alternativ hätte ich nach der Teilzeichenfolge filtern können, die den aktuellen Buchstaben für dieselbe Bytezahl enthält.)Drucken Sie ein zufälliges Zeichen, schließen Sie jedoch bereits gedruckte Zeichen aus.
quelle
Netzhaut , 80 Bytes
Probieren Sie es online!
Wahrscheinlich nicht die am meisten Golf spielende Methode, aber ich werde sie trotzdem einreichen.
Erläuterung:
Setzen Sie die Arbeitszeichenfolge auf
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Beispielsweise steht vor jedem Buchstaben in einer Gruppe eine ZahlA
,J
undK
alle haben eine1
vor sich.Markieren Sie einen Codeabschnitt, der Retina-Code erzeugt, und führen Sie ihn anschließend aus.
Setzen Sie die Arbeitszeichenfolge auf
123456
Ersetzen Sie jedes Zeichen durch
?O`{character}.¶
Entfernen Sie die nachgestellte Zeile und beenden Sie die Gruppe, um den Code zu generieren. Die Gruppe generiert den Code:
{n}.
stimmt mit allen Instanzen der Nummer n überein gefolgt von einem Zeichen.?O
sortiert jede Instanz nach dem Zufallsprinzip, und dies erfolgt für alle Zeichensätze.Entfernen Sie abschließend alle Zahlen und geben Sie den generierten String implizit aus.
quelle