Choisissez cinq caractères que votre langue prend en charge. Il y en a 5! = 5 × 4 × 3 × 2 × 1 = 120 façons de les organiser en une chaîne de 5 caractères contenant chaque caractère une fois; 120 permutations .
Choisissez vos caractères de telle sorte que, lorsque chacune des 120 chaînes est exécutée dans votre langue, les 120 sorties générées seront autant d'entiers uniques que possible, allant de 1 à 120 inclus.
Autrement dit, pour chacune des 120 permutations de vos 5 caractères produisant du code exécutable produisant un seul nombre, vous voulez que l'ensemble de tous ces nombres corresponde autant que possible à l'ensemble des entiers compris entre 1 et 120.
Donc, idéalement, votre première permutation produirait 1
, la suivante 2
, la suivante 3
, jusqu’à 120
. Mais cet idéal est probablement impossible pour la plupart des langues et des personnages.
Les chaînes de 5 caractères peuvent être exécutées comme suit:
- un programme sans entrée
- une fonction sans argument
- une commande REPL
Différentes chaînes peuvent être exécutées de différentes manières si vous le souhaitez
Pour que la sortie compte, il doit s'agir d'une sortie entière unique de manière normale , telle que:
- en cours d'impression sur la sortie standard
- retourné par la fonction
- le résultat de l'expression REPL
Le code doit se terminer normalement (ce qui peut impliquer une erreur tant que le numéro a été sorti en premier). Le code qui ne fonctionne pas du tout va bien, juste la sortie (inexistante) ne compte pas. La sortie numérique doit être en décimal, sauf si une base différente est la norme pour votre langue.
La soumission qui génère les nombres les plus distincts de 1 à 120 gagne. La soumission précédente l'emporte en cas d'égalité.
Remarques
- Vos 5 caractères ne doivent pas tous être différents, mais le fait de dupliquer les caractères réduit bien entendu le nombre de permutations.
- Les sorties float telles que
32.0
count et plain32
. (Mais32.01
ne serait pas.) - Les zéros non significatifs tels que
032
count et plain32
. - Les sorties valides doivent être déterministes et invariantes dans le temps.
- Nous traitons avec des caractères , pas des octets.
Exemple
Les caractères 123+*
sont un premier choix raisonnable pour le REPL de Python (ou de nombreux langages). Les 120 permutations et sorties résultantes sont:
123+* n/a
123*+ n/a
12+3* n/a
12+*3 n/a
12*3+ n/a
12*+3 36
132+* n/a
132*+ n/a
13+2* n/a
13+*2 n/a
13*2+ n/a
13*+2 26
1+23* n/a
1+2*3 7
1+32* n/a
1+3*2 7
1+*23 n/a
1+*32 n/a
1*23+ n/a
1*2+3 5
1*32+ n/a
1*3+2 5
1*+23 23
1*+32 32
213+* n/a
213*+ n/a
21+3* n/a
21+*3 n/a
21*3+ n/a
21*+3 63
231+* n/a
231*+ n/a
23+1* n/a
23+*1 n/a
23*1+ n/a
23*+1 23
2+13* n/a
2+1*3 5
2+31* n/a
2+3*1 5
2+*13 n/a
2+*31 n/a
2*13+ n/a
2*1+3 5
2*31+ n/a
2*3+1 7
2*+13 26
2*+31 62
312+* n/a
312*+ n/a
31+2* n/a
31+*2 n/a
31*2+ n/a
31*+2 62
321+* n/a
321*+ n/a
32+1* n/a
32+*1 n/a
32*1+ n/a
32*+1 32
3+12* n/a
3+1*2 5
3+21* n/a
3+2*1 5
3+*12 n/a
3+*21 n/a
3*12+ n/a
3*1+2 5
3*21+ n/a
3*2+1 7
3*+12 36
3*+21 63
+123* n/a
+12*3 36
+132* n/a
+13*2 26
+1*23 23
+1*32 32
+213* n/a
+21*3 63
+231* n/a
+23*1 23
+2*13 26
+2*31 62
+312* n/a
+31*2 62
+321* n/a
+32*1 32
+3*12 36
+3*21 63
+*123 n/a
+*132 n/a
+*213 n/a
+*231 n/a
+*312 n/a
+*321 n/a
*123+ n/a
*12+3 n/a
*132+ n/a
*13+2 n/a
*1+23 n/a
*1+32 n/a
*213+ n/a
*21+3 n/a
*231+ n/a
*23+1 n/a
*2+13 n/a
*2+31 n/a
*312+ n/a
*31+2 n/a
*321+ n/a
*32+1 n/a
*3+12 n/a
*3+21 n/a
*+123 n/a
*+132 n/a
*+213 n/a
*+231 n/a
*+312 n/a
*+321 n/a
Il y a 36 numéros générés, tous heureusement entre 1 et 120:
36, 26, 7, 7, 5, 5, 23, 32, 63, 23, 5, 5, 5, 7, 26, 62, 62, 32, 5, 5, 5, 7, 36, 63, 36, 26, 23, 32, 63, 23, 26, 62, 62, 32, 36, 63
Cependant, seuls 8 d'entre eux sont uniques:
36, 26, 7, 5, 23, 32, 63, 62
Donc, une telle soumission ne marquerait que 8 sur un maximum de 120.
la source
c
langages similaires !!!Réponses:
Python3,
2127 valeursPersonnages:
3479%
Numéros uniques:
[1,2,3,4,5,6,7,8,9,11,12,19,20,21,24,29,34,35,36,37,39,43,46,47,49,73,74]
Comme il était demandé, voici les permutations qui se situent dans la plage [1, 120] . Essayez-le en ligne!
la source
/
trouve la division entière?5679%
et5789%
5679%
et5789%
ceux) est probablement aussi optimal pour PowerShell.5679%
et5798%
) également grâce à une recherche exhaustive de toutes les combinaisons de0123456789+-*/&|^#%
remplacement. Je conviens que ce sont probablement optimales.05AB1E ,
273841 numérosGénère les numéros uniques:
[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 25, 27, 32, 33, 34, 35, 36, 37, 38, 49, 50, 52, 54, 64, 65, 66, 67, 72, 73, 74, 81, 83, 98, 100, 101, 102]
Utilise la constante
4
avec les opérations+1
,+2
,*2
et^2
.la source
-
au lieu de+
produire une plus grande variété de résultats basés sur sa propriété non commutative?-
, mais jamais plus de 30 numéros uniques. L'un des problèmes est que vous obtenez également des valeurs négatives qui sont en dehors de la plage. Peut-être qu'avec des opérateurs remplacés, cela pourrait être mieux, mais je n'ai pas trouvé d'amélioration à ce jour.Python, 18 chiffres
Produit des résultats valides:
EDIT: Je peux attester que la solution de TuukkaX est optimale pour Python. J'ai exécuté le code suivant pour renforcer toutes les combinaisons possibles de 5 caractères ASCII imprimables:
Les résultats (après avoir fonctionné pendant près de 7 heures) ont montré que la solution est en fait 27 numéros différents, produits par trois solutions différentes tout en utilisant quatre chiffres et mod (
%
):%3479
,%5679
et%5789
.la source
Java 8,
24 chiffresVous n'attendiez pas de réponse Java, n'est-ce pas?
C'est un lambda qui ne peut être arrangé que de deux manières (et avec deux chiffres différents!) Pour un total de deux numéros uniques. Tout le reste n'est pas un lambda valide.
En fait, la réponse a été améliorée grâce à l'aide de commentaires! Je n'ai pas vu que 0 n'était pas valide et j'ai oublié que les variables pouvaient, vous savez, être plus d'un caractère. Nous en avons 4!
Une solution encore pire
()->1
Mais du côté positif, deux réponses uniques en Java!
la source
n->12
. Cela vous donne quatre réponses distinctes qui sont toutes dans la plage:n->12
,n->21
,n1->2
,n2->1
.Gelée,
263032 numérosCeci (et ses anagrammes) sont des programmes complets, qui ne prennent aucune entrée et produisent une sortie sur une sortie standard.
Les résultats des 120 programmes sont, dans l'ordre que Jelly les génère si vous lui demandez de générer des permutations du programme:
Si vous prenez simplement les sorties uniques dans l'ordre numérique, vous obtenez:
Beaucoup d'entre eux sont trop petits et 135 sont trop grands, mais il en reste 32 qui sont dans la gamme.
L'idée de base est d'utiliser principalement des instructions monadiques (dans un programme contenant uniquement des monades et des nilads, celles-ci ne faisant que transformer la sortie précédente), ainsi que celles permettant à la valeur de diverger rapidement. L'exception est avec
3
, qui est un nilad (la valeur constante 3). S'il apparaît au début du programme, toutes les opérations seront effectuées à partir de 3. S'il apparaît au milieu, le programme est divisé en deux moitiés, chacune générant un entier (et imprimant chacune sur une sortie standard, les résultats finissent par être concaténés, nous donnant ainsi la "concaténation" en tant qu’opération supplémentaire pour générer des nombres).Les opérations que nous avons ici, dans le contexte dans lequel le programme les génère, sont les suivantes: incrémentation; décrémenter; constante 3; carré; et double. Incrémenter et décrémenter sont malheureusement des opposés, et décrémenter a une fâcheuse tendance à produire -1 ou -2 dans la première section (conduisant ainsi à un nombre global négatif), mais cela a tout de même donné une plus grande étendue de sorties que les autres choses que j'ai essayées . En particulier, nous obtenons une assez bonne dispersion des première et deuxième moitiés du nombre (notez que la première moitié peut être la chaîne vide, si
3
est le premier caractère du programme).la source
Œ¿
et le dyadiqueœ¿
(voir au bas de la page des atomes du wiki ), mais ce sont deux dyades à deux octets qui réduiront les permutations de code qui font ce que vous voulez, plus vous aurez besoin toutes vos entrées sont des listes (12
n'est pas une liste).JavaScript, 27 chiffres
Très similaire à la réponse de TuukkaX , avec un autre ensemble de chiffres.
Les 27 valeurs distinctes sont:
la source
~
, aider du tout? C'est une opération unaire qui peut être utile.~
est celui257&~
qui produit onze valeurs distinctes.Brachylog , 26 chiffres
Cela génère les nombres suivants:
[2,3,4,5,6,7,8,9,10,16,17,18,19,20,25,26,30,31,32,35,36,37,48,49,63,64]
Explication
3
est le nombre entier 3, évidemment.+
est incrément*
est double^
est carré-
est décrémentIl y a beaucoup de situations où le programme commet simplement des erreurs: par exemple
*+^3-
, parce qu'il demande «Prends 0, double-le, incrément, carré, le résultat de ce carré est 3, décrément», ce qui est évidemment faux.Tout programme qui se termine avec
3
soit sortie3
ou ne fonctionne pas.Tout programme qui commence par
*3
sera bouclé indéfiniment à cause d’un bogue (Brachylog tente de trouver une liste de sous-listes dont le produit produit 3, ce qui n’est pas possible).la source
Vim, 16 chiffres
impression
la source
3
et le4
va? Vous avez besoin de toutes les permutations de longueur 5.i1234
imprime "1234", est-ce une sorte de script ou de frappe? Si vous appuyez sur les touches, cela ne fonctionne pas.IA-32 code machine, 8 chiffres
Valeurs d'octet hexadécimales:
Le code est exécuté en tant que fonction renvoyant la valeur dans
al
.Permutations valables:
J'ai effectué une recherche en force brute, avec les contraintes suivantes:
b0
- pour initialiser leal
registrec3
- return; les octets suivants sont supprimésadd
or
and
sub
xor
aad
inc
dec
Cela ne laisse que 3 octets modifiables avec un maximum de 15 résultats possibles. Parmi ceux-ci, un maximum de 9 peut être distinct (en fait, cela se produit pour un seul jeu d'octets!). Une des valeurs est en dehors des limites, il reste donc 8 valeurs. Il y a une autre série d'octets
qui donne également 8 valeurs distinctes - les programmes sont les mêmes, à l’exception de ceux qui sont
sub
remplacés parxor
, ce qui rend deux des sorties possibles identiques.Tous les autres ensembles d'octets donnent 7 résultats possibles ou moins.
la source
Gelée , 33 numéros
Ḥ
double (gauche);2
littéral 2;3
littéral 3;+
ajouter (gauche, droite); etc
choisissez (gauche, droite), c’est-à-dire le nombre de façons de choisir les objets de droite dans une collection d’objets de gauche.Nombre de résultats fournis avec un exemple de programme:
J'ai essayé de choisir facile à analyser ceux, mais certains sont rares et un peu étrange à analyser, par exemple
23
est:... et
72
et13
utiliser l' impression implicite:Notez que
Ḥ34+c
produit également des33
valeurs uniques dans[1,120]
.la source
Brain-Flak 1
Brain-Flak nécessite des accolades équilibrées, de sorte qu'un programme de 5 caractères n'est valide que si l'un des caractères commence un commentaire. Cela nous laisse avec 4 personnages avec qui travailler. Parmi ceux-ci, 2 doivent être
(
et)
sinon rien ne serait mis sur la pile. Ceux-ci doivent aller en premier et 4ème avec le commentaire last ((..)#
). Maintenant , nous pouvons mettre()
,{}
,<>
ou à l'[]
intérieur.{}
,<>
et[]
chaque valeur est évaluée à 0, mais()
vaut 1. Cela signifie que(())#
c'est la seule chaîne de 5 caractères qui produit un programme Brain-Flak valide.Essayez-le en ligne!
Si la question était plutôt "quels sont les 6 personnages les plus puissants", la réponse serait
(){}[]
que Brain-Flak est complètement terminé en utilisant uniquement ce sous-ensemble.la source
@ij
indicateur de mise au point met le programme en pause et permet à l'utilisateur de saisir le code de la flak-brain à exécuter là où l'@ij
indicateur est apparu dans le code. Assez puissant, mais nécessite malheureusement une intervention de l'utilisateur et n'est donc pas utile ici.(){}[]
marquerait 0. Vous avez oublié la règle des permutations;)Hexagonie , 13 chiffres
Ce sont les 13 numéros imprimables avec un programme possible pour chacun d'eux:
Les programmes devraient être assez explicites.
@
termine le programme,!
affiche la valeur actuelle, l’)
incrémente2
et4
s’ajoute à la valeur actuelle (où la valeur initiale est0
). La disposition hexagonale réelle du code source est sans importance ici, les programmes peuvent simplement être lus de gauche à droite.Cela devrait être optimal, bien qu'au lieu de
2
et que4
vous puissiez choisir n'importe quelle paire de chiffresx
ety
telle que2 ≤ x ≤ y-2
.La solution ci-dessus a été trouvée par force brute (presque exhaustive), en exigeant une
!
(sinon elle n’imprimerait rien), une@
(sinon le programme ne se terminera pas) et en remplissant les trois caractères restants avec toute combinaison (répétée) du ensemble de caractères suivant:Je ne vois pas comment les autres commandes pourraient éventuellement générer plus de variété.
la source
Perl, 27 chiffres
3479%
Perl n'a pas de REPL intégré, vous pouvez donc utiliser à
re.pl
partir de Devel :: REPL .Résultats:
Brute-forcé en utilisant le programme suivant:
la source
perl -de 1
peu de temps. Techniquement, cela ouvre le débogueur sur un programme vide, mais le débogueur a une structure similaire à celle de REPL. Malheureusement, vous devez écrirep
au début de chaque ligne pour que le résultat soit réellement imprimé.R,
1518 numérosCe n’est pas un nombre énorme, mais c’est peut-être ce qui se fait de mieux avec R. J’ai recherché toutes les combinaisons de chiffres
0..9
, d’opérateurs+ - * / ^
et de caractères de commentaire#
, et les huit suivants ont tous généré 18 entiers uniques compris entre 1 et 120.À titre d'exemple, prenons
-#146
. Voici les 18 entiers que nous pouvons obtenir:Si vous êtes curieux de connaître le code (laid) utilisé pour tester toutes les combinaisons possibles, le voici. Il génère le nombre d'entiers uniques compris entre 1 et 120 pour chaque combinaison de caractères de longueur 5 dans un fichier appelé "fichier de données" dans le répertoire de travail en cours.
la source
Octave, 18
Cela a été trouvé en utilisant une recherche bruteforce sur les symboles
*+-/0123456789:;<\^|~%
. Mais il a fallu beaucoup trop de temps pour calculer ...Sorties possibles:
la source
Octave, 15 numéros
Pas grand chose à se vanter, mais c'est le meilleur que je puisse avoir dans Octave:
Il donne les chiffres:
J'ai aussi 16 ans, mais il semble que cela soit identique à la réponse de Sefa ...
la source
0123456789+-*.%
d'octave est139-%
, qui produit un tableau de 18:1 2 3 4 6 8 9 13 16 19 22 31 38 39 88 91 92 93
. Vous pouvez donc gagner 3 autres chiffres :)PHP, 15 chiffres
Utilise le fait que php imprime quoi que ce soit en dehors de ses balises verbatim (sans l'utiliser, vous pouvez faire exactement 1 chiffre avec quelque chose comme
<?=1;
). Utilise également un caractère de retour chariot réel plutôt que\r
.Crée (trie, supprime les 0 premiers):
dont les numéros uniques valides sont:
la source
12\r30
impressions12\r30
, le terminal écrase simplement les deux premiers caractères.\r
n'est pas imprimable, le résultat de12\r30
est30
.Cubix , 7 chiffres
Sorties ces nombres:
Tout programme Cubix valide pour ce défi doit avoir la possibilité
O
de générer un entier et@
de terminer le programme (Cubix n'a jamais entendu parler d '"erreurs"). Cela nous donne 3 caractères à jouer pour générer le plus grand nombre de sorties. De plus, en raison de la manière dont Cubix organise le code sur un cube, le premier caractère sera inutile si l'un des autres n'est pas un caractère directionnel.Le moyen le plus efficace que j'ai trouvé pour générer plusieurs nombres consiste à utiliser
"
une chaîne de codes de caractères dans la pile. Avec un réarrangement soigneux, nous pouvons insérer plusieurs caractères dans la dernière position et simplement sortir leurs codes. En utilisant)
pour incrémenter le premier élément, nous pouvons créer des sorties supplémentaires à partir de plusieurs de ces arrangements.Deux types de programmes de base sont utilisés ici. La première est la suivante:
qui s'étend à
Le programme résultant pousse
2
dans la pile, l'incrémente avec)
, affiche avecO
et se termine avec@
.La seconde est la suivante:
qui s'étend à
Le programme résultant pousse les codes de caractères de
)
,O
et@
incrémente le dernier avec)
, sort avecO
, et termine avec@
.la source
> <> , 6 chiffres
Gagné 2 numéros grâce à Teal Pelican
Produit les numéros uniques
[1, 4, 5, 49, 59, 108]
Nous devons
n
imprimer un numéro.Nous devons
;
terminer.Cela ne nous laisse que 3 personnages avec lesquels travailler.
Quelques combinaisons différentes de
value
&operator
avec ont"
confirmé produire 6 valeurs uniques, mais je n'ai rien trouvé de mieux que ça.la source
Groovy, 10 numéros
Les solutions JVM Man sont BAD pour cela ... Qui le savait?
Résulte en:
Attends quoi? Comment diable cela vous fait-il demander?
Le secret commercial, dans les entiers Groovy / Java précédés d'un 0 sont des octaux. Code que j'ai utilisé pour tester les réponses Groovy au cas où quelqu'un voudrait me battre:
la source
MATL, 15 numéros
%
est l'opérateur de commentaires, donc il "coupera" à tous les endroits possibles une fois, contribuant ainsi à créer toutes les combinaisons possibles des chiffres donnés et de leurs sous-ensembles:la source
J, 16 numéros
Rien d'extraordinaire, juste testé
1234
avec tous les verbes à un caractère qui étaient raisonnables.]
sélectionne son bon argument.Les numéros uniques produits sont
dont 16:
Sont dans la gamme [1.120].
Testé avec
la source
Japt , 41 numéros
Pratiquement des essais et des erreurs, il pourrait donc y avoir une meilleure solution. Utilise les entiers
3
&4
et les raccourcis Japt pour la quadrature, l’ajout1
et la multiplication par2
. Les 120 programmes affichent tous un entier,>0
mais seulement 78 le sont<=120
et 41 seulement sont uniques.Génère les nombres:
Afficher la liste des numéros ou la collection de programmes valides
Explication
Quelques points à noter à propos de Japt qui sont pertinents ici sont:
U
, définie par défaut0
, est automatiquement insérée au début,3Ä4 = 3+14 = 17
et de la même manière4Ѳ = 4*2**2 = 16
), et²
alors le²
et tout ce qui le précède est essentiellement ignoré.Explications pour quelques programmes (production
1
,3
,37
et93
, respectivement):la source
Befunge, 11 chiffres
Befunge est un peu limité car il ne supporte que les littéraux à un chiffre. Donc, le mieux que j'ai pu trouver était 11 chiffres, en supposant que le calcul doit nous laisser un et un seul nombre sur la pile.
Meilleurs personnages:
358*%
Nombre généré: (juste un exemple de chaque)
la source
Python, 16 chiffres
Utilise # pour mettre en commentaire tous les nombres inutiles.
la source
dc, 19 numéros
La sortie se trouve en haut de la pile et les erreurs (y compris le dépassement de capacité de la pile) sont ignorées. Les permutations valables sont:
Voici le programme Python que j'ai utilisé pour montrer ces résultats:
Deux autres chaînes qui donnent le même score de 19 sont
32d+*
et*4zO+
.la source
Smalltalk, 26 chiffres
Explication: 12r35 est une notation pour utiliser la base 12, et est donc 3 * 12 + 5.
Cela peut être vérifié dans Squeak:
donne:
Si nous remplaçons la dernière ligne par:
on obtient alors les expressions:
Je voulais tricher et définir une méthode r dans Integer comme
Malheureusement, le compilateur opte pour 1235r car il reconnaît un nombre inachevé avec radix plutôt qu'un message envoyé à 1235 ...
Je pourrais facilement changer de compilateur aussi, mais c'est un peu trop un tricheur à mon goût.
la source
Mathematica, 16 chiffres
Pas très intéressant, mais je n'arrive pas à trouver quoi que ce soit de mieux en arithmétique. La seule chose qui pourrait fonctionner est d'utiliser
!
factorielle ou double factorielle, mais cela est tellement enclin à générer des nombres énormes qu'il est impossible de recourir à la force brutale.Les 16 chiffres (dans la plage) pouvant être générés à partir des 5 caractères ci-dessus sont:
la source
Enchantements runiques, 19 numéros
Essentiellement 3 littéraux, l'opérateur pow et une commande "imprimer toute la pile et se terminer".
234p@
estampes 812 (3 ^ 4 jointes avec un 2). Liste de permutation complète , note qui@
a été remplacée parak@
afin de générer une nouvelle ligne entre chaque résultat et>
a été ajoutée pour assurer que chaque ligne s'exécute indépendamment. Notez également que les sorties ne sont pas dans le même ordre que les programmes qui les ont générées (certains programmes pouvant se terminer plus rapidement).Beaucoup de permutations n'impriment rien (par exemple
@234p
oup234@
), mais 19 aboutissent à une sortie dans la plage autorisée.Nombres possibles (et un programme possible qui en résulte;
.
indique que ces positions peuvent être n'importe quel caractère restant car elles ne sont pas exécutées):la source
TI-BASIC, 12 chiffres
Il y a probablement une meilleure combinaison, mais je n'ai pas réussi à la trouver.
la source