Tâche
Encodez une chaîne entièrement composée d'alphabets majuscules ( A-Z
) utilisant uniquement des zéros et des uns, en utilisant votre propre schéma préféré. Mais la règle n'est pas si simple!
Règles
- Votre programme / fonction doit gérer correctement toute chaîne d'entrée valide de longueur 8 .
- Les résultats doivent avoir la même longueur pour toutes les entrées.
- Les résultats doivent être distincts pour des entrées distinctes.
- Les résultats doivent être aussi courts que possible.
- Les résultats doivent être équilibrés à zéro (avoir un nombre similaire à celui des zéros). Ils ne doivent pas nécessairement être égaux (c'est-à-dire parfaitement équilibrés), mais votre score sera pénalisé pour cela.
Vous n'êtes pas obligé de fournir un programme / une fonction qui décode votre encodage.
Entrée et sortie
- Vous pouvez décider d'accepter tout ensemble de 26 caractères ASCII imprimables distincts au lieu de
A-Z
. - Vous pouvez décider de sortir n'importe quelle paire de caractères ASCII imprimables distincts au lieu de
0
et1
. - Vous n'êtes pas autorisé à générer un entier au lieu d'une chaîne de bits, car il peut avoir des zéros non significatifs et il n'est pas clair si vous avez réellement respecté la règle 2.
- Si vous décidez de vous écarter de la valeur par défaut (
A-Z
entrée et01
sortie), vous devez spécifier les jeux de caractères d'entrée / sortie dans votre soumission.
Notation
- Score de base: taille du code, ou 1 si votre programme est vide.
- Sanctions
- Pénalité pour la durée: multiplier
1.5 ** (encoded length - 42)
- Il n'y a aucun bonus pour être plus court; 42 est la longueur minimale pour un encodage parfaitement équilibré de chaînes de 8 longueurs avec une taille d'alphabet 26.
- Pénalité pour déséquilibre: multipliez
2 ** max(abs(ones - zeros) for every valid input of length 8)
, oùones
etzeros
sont les comptes de 1 et 0 dans chaque sortie, respectivement. - Votre soumission doit montrer un exemple du pire des cas (entrée / sortie) ou une explication théorique sur la valeur de la pénalité.
- Pénalité pour la durée: multiplier
- Le score le plus bas l'emporte.
Exemple de soumission
Esolang hypothétique, 0 octet, score 74733.8906
Voici un esolang hypothétique, où un programme vide imprime tous les codes ASCII des caractères d'entrée en binaire.
Par exemple, si vous donnez AAAAAAAA
en entrée, le programme imprimera 1000001
8 fois de suite, c'est-à-dire 10000011000001100000110000011000001100000110000011000001
.
L'alphabet saisi est choisi pour être CEFGIJKLMNQRSTUVXYZabcdefh
. De cette façon, tous les caractères sont convertis en sept chiffres en binaire, et le nombre de zéro ne diffère que d'un par caractère (ils ont tous trois 1 et quatre 0 ou vice versa lorsqu'ils sont convertis en binaire).
La longueur de sortie est toujours de 56 et le pire déséquilibre se produit sur les entrées comme CCCCCCCC
, où les zéros apparaissent 8 fois plus que les uns.
Par conséquent, le score de cette soumission est 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
.
Réponses:
Stax , 11 octets, 0 pénalité, Score 11
Ce programme utilise
[0-9A-P]
pour l'entrée et[01]
pour la sortie.Exécutez-le et déboguez-le en ligne - cliquez sur le bouton Exécuter pour commencer. Les quatre premiers cas de test s'exécutent en millisecondes. Le cinquième en quelques secondes. Le sixième en millénaires.
La représentation ascii correspondante de ce programme est la suivante.
Il s'appuie fortement sur l'
|N
instruction, qui obtient la permutation ultérieure d'un tableau.Toutes les sorties sont des permutations de la chaîne initiale. Il a 21 zéros et 21 uns. Par conséquent, toutes les sorties sont de 42 caractères et parfaitement équilibrées.
la source
Gelée , 19 octets
Essayez-le en ligne!
Explication
la source
Pyth,
201914 octets, Diff Max: 0, Longueur: 64, Score:149636.5528142154.7251104745.5869Essayez-le en ligne!
Utilise l'alphabet en minuscules (
[a-z]
) au lieu de majuscules. Peut utiliser des majuscules en les remplaçantG
parrG1
, au prix de 2 octets.J'aurais pu traduire la réponse Python 3 d' HyperNeutrino pour un meilleur score, mais franchement, je veux une réponse qui fonctionne réellement.
la source
Python 2 ,
779645 octets, Max (Diff) = 0, Longueur = 48, Score = 7346,95Essayez-le en ligne!
Le nombre magique
4lnk28t9vtqgfrpfda9uyfrjhcjwjvno6aec2nwegi0g4mnublc05dher8fjm4s5gh55lu87a4itmc74t6tozcsfdbxkg82frwljy0wam1jht98g2j0bma021v5d48pwq0fklv0n1ltrxft1fpk5gt5mx5fj4p2mjqqpvcylt1xayxf1iwdmyoxgfvl7oui1oo6147bm9rqpqut9ns8hhjc77t3pqy48otovrsm1t4mmleumspkuef66ma1vi0l4mtkwaeeizuvvds9fro3vhc0mrn6ox17rdpk7xw747qf28934u5jci5q1qj81i7dyf7rf0x7hb19xm93xhxsgh4w8ifs6fhynsddbo9j938ewfvhjlbpiz50n5hanmno6c89blyx50e89z7vjq2ho2r2u2wwyu4q18kv4fi1nhmfbgjbnkdayr5kblaped4fo5u97bi9a67d89irxa0r9cinmnohfgjmh5fhkcr33
(en base 36), ou son équivalent décimal382136276621246556626597379364678993894472503063952720559883124988542417847157286833446006767955087631166943136913765901237281892296575754126024183763829277879554548743231384272055945084065681774297483130020386641869860456147616177702938121538230311395513497506285733567467605871232294046704309941152721616618474501854355102646152223338484615876165254236449912858255665248186687952137487016925761633237335983620006273901509768720506129789443353730706676483647298576692613113269388239830925662977837917272690235355742330377154505179476767457756888107428475384947712227312747517748632498691058764154580934614231152483398774630508576533263098942260213967880819240793990219283490212843120923539516962682466148372296338428497778127570401190309339992457562121354271
, code les 252 permutations de 50
s et 51
s.L'algorithme se convertit d'abord
A-Z
en0-25
et le traite comme un nombre en base 26, puis ajoute56*252**4
.Ensuite, le nombre est converti en un nombre à 25 chiffres en base 252 et remplacé par la permutation correspondante de 5
0
s et 51
s.Après cela, supprimez les 2 premiers bits, ce qui est garanti
01
. Ensuite, nous avons codé la chaîne en une chaîne de 48 bits, qui se compose exactement de 240
s et 241
s.la source
7346.953125
).JavaScript (ES8), score 22186.623779296875
Pour une entrée de longueur égale, émet toujours 3,5 * de zéros et de uns, donc il ne paie que la pénalité de 1,5 ** 14. Caractères pris en charge:
'+-.3569:<GKMNSUVYZ\cefijlqrtx
.la source
Gelée , 16 octets
Utilise la
+,-./0123456789:;<=>?@ABCD
saisie et renvoie une liste de uns et de zéros.Cela tente de créer une liste de 538 257 874 440 combinaisons en mémoire, vous aurez donc besoin d'une grande quantité de RAM pour l'exécuter telle quelle ...
Essayez-le en ligne! (testable; longueur d'entrée 3, longueur de sortie 18)
Comment ça fonctionne
la source
Python 3 ,
985135 octets, Max Diff 0, Longueur 42, score 135Essayez-le en ligne!
Gracieuseté de Bubbler
Code non golfé:
Étant donné que d'autres approches semblent assez inefficaces, j'ai essayé d'en faire une optimale dans le temps. Il s'agit clairement de O (N) en N bits de codage, ce qui est optimal en big-O.
Astuce: essayez de penser au triangle de Pascal pour celui-ci ( ce diagramme le révèle)
Exemples de sorties:
Temps d'exécution: <0,013 s (à peu près constant pour toutes les entrées)
la source
Perl 5 , 55 octets, max diff 0, longueur 42, score
5655Cela fonctionne mais prendra un temps long mais réalisable (a
ZZZZZZZZ
pris 2,5 jours sur mon ordinateur). La mémoire n'est pas un problème.Utilise
A-Z
comme entrée et1
etA
comme caractères d'encodage. Ils sont toujours parfaitement équilibrés. Saute les premières26^7 = 8031810176
combinaisons équilibrées représentant une chaîne de moins de 8 caractères, mais c'est OK car il y en a538257874440
et j'utilise208827064575
et208827064575 + 8031810176 < 538257874440
.Cependant, il "compte" jusqu'à la combinaison cible qui prendra très longtemps. C'est pourquoi dans le lien TIO, j'ai uniquement utilisé une chaîne d'entrée trop courte (qui est également prise en charge) pour démontrer que la sortie est correcte. Fonctionne jusqu'à un peu plus
AAAAAA
qu'avant l'expiration de TIO.ZZZZZZZZ
devrait être environ26^3 = 17576
plus lent.Essayez-le en ligne!
Le décodeur est presque le même:
Essayez-le en ligne!
la source
> <> , 75 octets, Max Diff 0, Longueur 42, score 75
Essayez-le en ligne!
Juste avertissement, cela prendra très très très longtemps, même pour le
AAAAAAAA
cas trivial . Parcourt chaque représentation binaire d'un compteur jusqu'à ce que le (nombre 26 de base de l'entrée) du e nombre binaire avec 211
s soit atteint. Si vous voulez tester un peu le programme, vous pouvez remplacer leab+
sur la troisième ligne par1
laquelle retournera le nième nombre binaire avec un seul1
, essayez-le en ligne!la source
Python 3 , 75 octets, Diff Max 0, Longueur 42, Score 112
Essayez-le en ligne!
Cela ne fonctionne qu'en théorie à cause des contraintes de mémoire. Il existe
538257874440
des chaînes nulles et équilibrées distinctes de longueur 42 et208827064575
des entrées possibles, de sorte que certaines des sorties possibles ne seront pas utilisées.-37 octets grâce à @recursive
la source
int(s,26)
pour votre valeur d'index plutôt quesum(...)
si vous modifiez votre jeu de caractères d'entrée.[0-9A-P]
, n'est-ce pas? Sur ma machine,int("123ABC",26) == 12855114
C ++, 146 octets, 42 maxlength, 0 déséquilibre, score 146
Fonctionne pour tout caractère continu de 26 caractères, mais avertissement qu'il s'exécute un temps inacceptable
la source
#include<algorithm>
par#import<regex>
.