Concept
De quelles manières pouvez-vous brouiller l'alphabet anglais pour qu'il puisse toujours être chanté sur l'air Twinkle Twinkle Little Star sans ruiner l'air?
Règles
Échange
Supposons simplement que les lettres contenues dans chacun des ensembles suivants puissent être échangées librement par défaut sans ruiner la mélodie:
- {A, J, K}
- {B, C, D, E, G, P, T, V, Z}
- {I, Y}
- {Q, U}
- {S, X, F}
- {M, N}
- Par conséquent, H, L, O, R et W sont verrouillés en place
Sortie
Le programme doit sortir une seule chaîne RANDOM (ou liste de caractères) contenant l'alphabet anglais complet dans n'importe quel ordre à condition que cet ordre satisfasse aux conditions ci-dessus. Il ne devrait y avoir aucun moyen de prédire quelle chaîne votre programme générera (si nous ignorons l'amorçage), ce qui signifie que vous ne pouvez pas simplement le coder en dur.
Votre programme doit avoir une probabilité positive (pas nécessairement uniforme) de générer chacun des sorties.
Il n'y a pas de restrictions de formatage particulières concernant l'espacement, les délimiteurs ou la casse, soyez juste cohérent.
Objectif
Le moins d'octets gagne!
Exemples:
- 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
Non exemple:
- HLWROABCDEFZXYGIJKMNPQTSVU
Preuve de concept: (Python3, 529 octets)
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
être «enfermé», ça ne rime pas avec les autres?Réponses:
05AB1E , 28 octets
Sorties sous forme d'une seule chaîne en minuscules.
Explication:
Voir cette astuce de mes 05AB1E (section Comment chaînes Compresser ne font pas partie du dictionnaire? ) Pour comprendre pourquoi
.•¬=©ƶÓÄûkTVã”ØζÞ•
est"ajk bcdegptvz iy qu sxf mn"
.la source
Python 3 ,
140133124123 octetsEssayez-le en ligne!
-1 octet, merci à Jo King
Python 2 ,
174170158 octetsEssayez-le en ligne!
la source
Rubis , 102 octets
Essayez-le en ligne!
la source
Pyth ,
595756 octetsEssayez-le en ligne!
La sortie est un tableau de lettres minuscules.
la source
R ,
9391 octetsEssayez-le en ligne!
la source
Perl 6 , 76 octets
Essayez-le en ligne!
Bloc de code anonyme ne prenant aucun argument et renvoyant une liste de caractères.
Explication:
la source
JavaScript -
421344328320306280277276... 176 octets-77 octets - à moi seul
-18 octets - merci à @tsh et @Geza Kerecsenyi qui m'ont fait voir ce que @tsh avait initialement signalé aussi
-8 octets - grâce à @Geza Kerecsenyi
-14 octets - avec l'aide de @Geza Kerecsenyi
- 28 octets - à moi seul
-3 octets - encore une fois avec l'aide de @Geza Kerecsenyi
-1 octets - comment cela a-t-il pu arriver ...
...
-100 octets - @Kaiido l'a tué et via quelques étapes avant que tout cela ne tombe en panne à 176 octets
Golfé:
ou essayez-le en ligne !
la source
'BCDEGPTVZ'.split``
au lieu de.split('')
-2.y=q=>q.split``
en haut de votre code et créer toutes les chaînes de tableaux dans lesquelles vous passezy()
- par exemplea=['A','J','K']
devienta=y("AJK")
'BCDEGPTVZ'.split('')
pary('BCDEGPTVZ')
'abcdef'.includes(s)?r(eval(s)):l[i]
Enchantements runiques , 210 octets
Essayez-le en ligne!
La randomisation n'est pas uniforme car il n'y a pas de bon moyen de le faire dans Runic. Au lieu de cela, il fait tourner aléatoirement chaque collection de lettres (par exemple,
[BCDEGPTVZ]
un groupe) d'une certaine quantité (par exemple, en faisant tourner l'ensemble ci-dessus de 4, où le haut de la pile est à droite, le résultat serait[BCDEGZPTV]
), puis décide au hasard s'il doit ou non inverser la pile. Il effectue ces opérations 15 fois. En conséquence, toutes les commandes possibles sont possibles mais pas aussi probables. (Dans le cas où cela ne suffirait pas, son augmentation coûte encore zéro octet , jusqu'à 15 000 boucles de lecture aléatoire).C'est la section du code qui gère le brassage:
Le reste du code se déroule dans ceci:
Si les lettres ne sont pas mélangées (mais inversées une fois) en modifiant deux octets, l'alphabet est imprimé normalement , ce qui peut être utilisé pour vérifier que tous les groupes de lettres s'impriment aux bons endroits. L'espace blanc décalant les
B
commandes hors phase est de sorte que toutes les adresses IP puissent utiliser la boucle de fonction en même temps sans entrer en collision, puis les remettre à nouveau en phase.Pour jouer au golf, tout espace pouvant être supprimé sur toutes les lignes a d'abord été coupé, puis chacun des deux espaces a été converti en a
y
, et chaque séquence de ayyyy
été convertie en̤
car̤
etyyyy
représente le même délai, mais 2 octets moins cher. La sortie de boucle a également été combinée avec leHLORW
segment de programme principal afin d'économiser sur les octets d'espacement (12 octets).la source
Perl 5 ,
103 9185 octetsEssayez-le en ligne!
Ce code (ab) utilise le fait que la sortie de Perl des clés de hachage (
%l
) est aléatoire pour créer un mappage (%k
) de toutes les lettres modifiables à l'un de leurs homologues possibles. Au moment de la sortie, toute clé qui n'existe pas est supposée être inchangée.la source
keys
est certainement une bonne approche, mais vous pouvez économiser 6 octets en utilisant à lasort rand 2,...
place :( Essayez-le en ligne!Gelée , 34 octets
Essayez-le en ligne!
la source
Python 3 , 149 octets
Essayez-le en ligne!
Randomisation en utilisant pop () pour le jeu de lettres
la source
APL (Dyalog Extended) , 55 octets
Programme complet. Imprime en majuscules avec un espace de début et de fin, mais pas d'espaces intermédiaires.
Essayez-le en ligne!
⎕A
l'alphabet majuscule'AjkBcdegptvzIyQuSxfMn'(
…)
Appliquez la fonction tacite anonyme suivante avec cela comme argument de droite et la chaîne indiquée comme argument de gauche:⊣
pour l'argument de gauche,⊂
le partitionner, en commençant un nouveau segment où∊
les caractères des arguments de gauche sont membres de l'argument de droite (c'est-à-dire sur les lettres majuscules),⍨
ajouter⊂
joindre (pour le traiter comme un seul élément)⍤
le⊢
bon argument⌈
tout en majuscules{
…}/
Réduire par le lambda anonyme suivant, en donnant…"QU"λ("SXF"λ("MN"λ"A-Z"))
:⊢⍵
sur le bon argument (l'alphabet de brouillage en cours)(
…)@(∊∘⍺)
Appliquer la fonction tacite anonyme suivante au sous-ensemble qui est membre de l'argument de gauche (un groupe de rimes)⊢
sur ce sous-ensemble⊇
réorganiser pour être?⍨
une permutation aléatoire∘
de la longueur≢
des lettres dans le sous-ensemblela source
Fusain , 43 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Le charbon de bois n'a pas d'opérateurs de brassage, mais j'ai trouvé une méthode d'échantillonnage sans remplacement. Explication:
Faites une boucle sur chaque lettre de l'alphabet.
Fractionnez la chaîne
AJK BCDEGPTVZ IY QU SXF MN H L O R W
sur les espaces et bouclez sur les sous-chaînes.Faites une boucle sur le nombre de fois où la lettre actuelle apparaît dans la sous-chaîne. (J'utilise une boucle parce qu'un conditionnel aurait besoin d'un
else
caluse. Sinon, j'aurais pu filtrer sur la sous-chaîne contenant la lettre actuelle pour le même nombre d'octets.)Imprimez un caractère aléatoire mais excluez ceux qui ont déjà été imprimés.
la source
Rétine , 80 octets
Essayez-le en ligne!
Ce n'est probablement pas la méthode la plus utilisée, mais je la soumettrai quand même.
Explication:
Définissez la chaîne de travail sur
1A2B2C2D2E5F2GH3I1J1KL6M6NO2P4QR5S2T4U2VW5X3Y2Z
. Il y a un numéro avant chaque lettre dans un groupe, par exempleA
,J
etK
tous ont1
devant eux.Marquez une section de code qui produira du code rétine, puis exécutez-la ensuite.
Définissez la chaîne de travail sur
123456
Remplacez chaque caractère par
?O`{character}.¶
Supprimez la nouvelle ligne de fin et terminez le groupe pour générer le code. Le groupe va générer le code:
{n}.
correspond à toutes les instances du numéro n suivi d'un caractère.?O
trie chaque instance de façon aléatoire, ce qui est fait pour tous les jeux de caractères.Enfin, supprimez tous les nombres et affichez implicitement la chaîne générée.
la source