Défi Code-Bowling
Écrivez un programme ou une fonction qui produit la même sortie, peu importe la façon dont vous réorganisez le code source. (La sortie ne peut pas être une erreur)
Pangram Scoring
Votre score est le nombre de caractères uniques dans votre code source.
Un programme avec le code source
AJB
aurait un score de3
Un programme avec le code sourceAAJ
aurait un score de2
Un programme avec le code source111
aurait un score de1
Il s'agit d'une variante de bowling de code . Le programme avec le score le plus élevé gagne!
(Pour votre commodité, un outil de notation automatisé a été créé ici )
Règles du défi
Entrée
Le programme / fonction peut prendre une entrée, ce qui est tout à fait facultatif cependant.Sortie
Cette sortie peut être tout ce que vous voulez, mais elle doit être non nulle, non nulle, non vide et sans erreur. (La sortie doit donc être d'au moins 1 octet)- Réarrangement
Peu importe la façon dont le code source est réorganisé, la sortie doit être la même.
Exemple:
programme:ABJ
sortieshello world
, tout comme les programmes: [AJB
,JAB
,JBA
, etc.]
Il s'agit d'une variante de bowling de code . Le programme avec le plus grand nombre de personnages gagne!
la source
0
pour toujours?)Réponses:
Lenguage, 1.112.064 points si UTF-8
Mon programme se compose de tous les caractères UTF-8 possibles. Il imprime "Bonjour tout le monde" et utilise 1,75 * 1076 yottaoctets d'espace.
(Pour générer le programme, vous devez simplement créer un fichier avec 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 caractères, en vous assurant que chaque caractère UTF-8 possible se trouve dans le fichier)
la source
Plusieurs langues, 2 points
Produit
0.0
comme0.
ou.0
. Nécessite une analyse des nombres libérale qui est OK avec un point décimal au début ou à la fin, en supposant 0 pour la partie intégrale ou décimale manquante.0000000.
donnerait le même score.Cela fonctionne également dans les langues suivantes (dans certains cas avec une sortie différente, comme indiqué):
ans = 0
)ans = 0
)0
)0
)0
)Pour Python, je pense que c'est le seul moyen d'obtenir un score supérieur à 1, car les possibilités peuvent être épuisées.
[](){}
nécessite un match et échouera si celui de clôture vient en premier,
ne peut pas être le premier personnage#
premier placé commenterait tout et ne produirait pas de sortie\
est une continuation de ligne invalide$
,!
,?
Et@
ne peut être utilisé sans d' autres caractères inutilisablesCe lettres feuilles, chiffres,
_
,.
et citations._
fait des noms de variables, dont une certaine permutation n'existe toujours pas.Les chiffres des feuilles et
.
. Permuter des chiffres différents donne un numéro différent à moins que tous les chiffres ne le soient0
. Donc, je pense que les zéros et.
c'est le seul moyen d'obtenir un score au-dessus1
. Mais, je ne connais pas bien le lexer Python, donc je pourrais manquer quelque chose.la source
CJam , score 15
Essayez-le en ligne!
Imprime toujours
0000
:0
pousse juste un zéro.T
,U
,V
Sont des variables qui sont pré-initialisé à zéro.L
,M
,O
,Q
,R
Sont des variables qui sont pré-initialisés à une liste vide, donc ils ne se présentent pas dans la sortie.[
et]
peut ou non envelopper les choses dans une liste, mais il n'est pas nécessaire de les faire correspondre correctement et la sortie est aplatie pour l'impression de toute façon.q
lit l'entrée qui est vide et n'apparaît donc pas non plus dans la sortie.la source
r
être ajouté pour accomplir quelque chose de similaire au minusculeq
?MATL ,
356 pointsL'idée d'ajouter des espaces a été tirée de la réponse de Bijan .
Le code, ou toute permutation de celui-ci, génère trois codes séparés par des retours à la ligne.
Essayez-le en ligne!
Explication
l
par défaut pousse le numéro un à la pile.1
fait de même.T
poussetrue
, qui est affiché comme numéro un.v
concatène jusqu'à présent la pile entière dans un vecteur de colonne. Ainsi, par exemple,v
aprèsT
concaténerait les deux premiers nombres dans une colonne (puis le nombre suivant serait poussé). Une initialev
produirait un tableau vide.À la fin du code, la pile est implicitement affichée, avec les règles suivantes:
Ainsi, toute permutation des caractères d'entrée produit
1
trois fois sur des lignes différentes.la source
Removing any part of the source code however should cause that specific output to not be produced.
au moment où vous avez posté, je ne voulais pas l'ajouter et il a été supprimé. Peut-être que cela vous aidera à augmenter le score un peu peutJelly , le score
53101Utiliser uniquement des caractères qui font partie de la page de codes de Jelly .
Jelly a une entrée implicite
0
et la première moitié (jusqu'à et y comprisạị«»
) de la chaîne de code ci-dessus se compose principalement d'atomes monadiques (majuscules) et dyadiques (minuscules et symboles) qui, lorsqu'ils reçoivent un zéro ou une liste contenant un seul zéro ( ou deux de ces entrées dans le cas des dyades) renvoient un zéro ou une liste contenant un seul zéro.Les exceptions sont:
L'espace: il est ignoré (même s'il est dans la page de code).
Le pilcrow,
¶
sépare les liens (comme le fait un saut de ligne - mais c'est vraiment le même octet), mais aucun autre octet ne référencera le code avant lui de toute façon.le scarabée
¤
,, demande à l'analyseur de tout traiter pour qu'il reste à partir d'une nilade (ou constante) comme constante (et fonctionne comme un premier atome).le dollar
$
,, demandez à l'analyseur de traiter les deux liens vers celui-ci comme une monade (et, ce qui est assez surprenant, fonctionne comme un premier atome)le Yen
¥
,, ordonne également à l'analyseur de traiter les deux liens vers celui-ci comme une dyade.Le recommandé,
®
rappelle la valeur du registre, initialement0
(c'est le droit d'auteur de contrepartie©
, se casse lorsqu'il est utilisé comme le tout premier atome car il est trouvé à partir de l'arité du lien vers sa gauche, qui n'est pas encore définie).Le code entre parenthèses,
(
et)
ainsi de suite, sont actuellement des points de code inutilisés, ils sont tous analysés et chacun provoque une nouvelle chaîne (un peu comme une nouvelle ligne, bien qu'ils n'aient pas pour effet de créer des liens appelables comme une nouvelle ligne, mais ce n'est pas un problème ici car rien ne tente de le faire).la source
TI-Basic (série 83), 93 points (99 sur une TI-84 Plus)
Tous les chiffres, toutes les variables à un octet (y compris θ et n , les variables indépendantes pour les graphiques polaires et séquentiels), les constantes π, e et i , certaines variables pas tout à fait (
Ans
,rand
etgetKey
), et 59 différents variables de fenêtre (toutes celles dont la définition est garantie).La multiplication implicite garantit que le résultat sera 0 lorsque nous prenons cela dans n'importe quel ordre. Si cela fonctionne sur une nouvelle calculatrice, toutes les variables seront à 0; même si ce n'est pas le cas,
getKey
sera 0 car il n'y a pas de temps pour appuyer sur une touche avant que le programme retourne une valeur.Sur une TI-84 Plus ou plus, nous pouvons obtenir 6 points en ajoutant les jetons
getDate
,getTime
,startTmr
,getDtFmt
,getTmFmt
,isClockOn
. Le résultat sera désormais toujours{0 0 0}
cargetDate
etgetTime
retournera des listes de longueur 3 et la multiplication implicite sera distribuée sur les éléments.Je pense que ce sont tous les jetons possibles à utiliser: toutes les commandes réelles sont préfixes, infixes ou postfixes (ce qui signifie qu'elles ne fonctionneront pas au début ou à la fin du programme) et toutes les autres variables peuvent être indéfinies (et provoquer une erreur lorsque utilisé).
la source
(non concurrent) Brainf-ck, 63 octets
Eh bien, je ne sais pas si cela est considéré comme de la triche, mais ...
Le point imprime le caractère actuel (0x00) et les autres caractères ne font rien. Techniquement, cela pourrait être étendu à l'infini, alors faites-moi savoir si cela est considéré comme de la triche.
la source
Haskell, 3 points
Peu importe comment réarrangé ce code retourne toujours une fonction qui incrémente l'entrée. Exemples d'utilisation en repl:
la source
√ å ı ¥ ® Ï Ø ¿ , 128 234 (?) Points
Je suis arrivé à 128 234 avec l'aide de @DestructibleLemon. Ce programme utilise tous les caractères Unicode (128 237) sauf
o
,O
etł
. Curieusement, deux d'entre elles sont des commandes de sortie.Certes, cependant, aucune langue ne pourrait utiliser tous ces caractères, non? Eh bien, ce langage ignore simplement les commandes qu'il ne reconnaît pas. Problème résolu.
Cette langue affichera par défaut les éléments suivants:
qui est non nul, non nul, non vide et sans erreur.
Remarque: si cela viole une règle non écrite, prévenez-moi dans les commentaires et je changerai cela. Si vous connaissez mon score (en supposant que cela soit autorisé), postez également dans les commentaires.
la source
J, 3 octets
Les caractères 1, l'espace et la nouvelle ligne afficheront toujours 1.
la source
/// ,
12 pointsEssayez-le en ligne!
Je ne sais pas comment le faire dans une autre langue complète de Turing. Bien sûr, il y a HQ9, mais cela semble juste tricheur.
1 octet grâce à @Martin Ender.
la source
Points , 1 114 111 caractères (si vous utilisez unicode).
<87 dots here> Every Unicode character except NUL and . here
Explication:
Donc, la chaîne binaire résultante est
1010111
, qui est convertie en décimale est 87, nous avons donc besoin de 87 points.Chaque autre caractère est un commentaire, nous utilisons donc tous les caractères sauf un NUL, car Python3 arrête alors la lecture du fichier, et un point, car les points ne sont pas des commentaires.
la source
Prélude , score 1.112.051
(Lorsque l'on considère uniquement l'ASCII imprimable
[\t\n -~]
, le score est de 84. Si l'on considère tous les points de code Unicode , le score est de 1 112 051. )(puis ajoutez tous les caractères
[\u{7f}-\u{10ffff}]
après.)Imprimez toujours
0
.Prelude est un langage basé sur une pile parallèle, où la pile est pré-remplie avec un nombre infini de 0.
+
: Pop deux valeurs (toujours 0), ajoutez-les (0) et appuyez pour empiler.-
: Pop deux valeurs (toujours 0), soustrayez-les (0) et appuyez pour empiler.#
: Ajoutez une valeur et supprimez-la.!
: Pop une valeur et sortie sous forme de nombre (toujours 0) (spécification dit "caractère" mais l'interprète dit "nombre"; dans les deux cas, un octet est imprimé)0
: Pousse 0.^
,v
,V
: Pousse la valeur supérieure du précédent / suivant des programmes parallèles ( les « voix »), mais les piles de toutes les « voix » sont remplis de 0, donc ils poussent toujours 0.Il ne faut donc éviter que 13 caractères:
(
,)
: Une parenthèse non appariée provoquera une erreur1
-9
: Nous voulons seulement sortir 0.?
: Nous ne voulons rien saisir.*
: Provoque une vérification de cohérence très compliquée pour le code avant et après une ligne composée d'un seul*
. Nous devons donc supprimer la nouvelle ligne ou supprimer le*
. L'implémentation de référence utilise Python 2.readline()
que pourrait signifier une "nouvelle ligne"\r
ou\n
. Il est donc préférable de simplement supprimer le*
.la source
Deadfish , score 86
Si c'est illégal, il y a aussi
(score 1)
la source