Comme on le sait ,
Chuck Norris a compté à l'infini. Deux fois
En plus ,
Chuck Norris peut compter à l'infini à l'envers.
Aussi, bien que peut-être moins connu, Chuck Norris peut parler un peu espagnol en plus de l'anglais.
Le défi
Ecrivez un programme (ou une fonction) pouvant être exécuté dans deux langues différentes. Dans une langue, le programme doit sortir la séquence
1, 1, 2, 2, 3, 3, 4, 4, ...
et dans l'autre langue, la séquence doit être produite (y compris les zéros non significatifs)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Règles
- Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les échappatoires standard sont interdites.
- Différentes versions d'une même langue (telle que Python 2/3) ne comptent pas comme des langues différentes. Les langages associés (tels que C / C ++ ou Matlab / Octave) sont considérés comme différents.
- Aucune entrée ne sera prise.
- Le programme doit continuer à afficher les termes de la séquence jusqu'à ce qu'il soit arrêté par l'utilisateur. Comme le programme ne s'arrête pas tout seul, la sortie ne peut pas être produite à la fin. Il doit être produit pendant l'exécution du programme, de manière continue ou par lots.
- La sortie peut utiliser STDOUT ou équivalent, ou peut être affichée dans une fenêtre graphique. Tout séparateur non numérique entre les termes de la séquence est autorisé, à condition que chaque terme puisse être clairement distingué des termes voisins. Il est également acceptable que l’écran soit effacé entre les termes.
- Chaque séquence peut commencer par au
0
lieu de1
. Dans ce cas, dans l'ordre "deux fois",0
il convient de répéter l'opération, tout comme les autres chiffres. - Les zéros en tête sont significatifs dans la séquence "arrière". Par exemple, le dixième terme est
01
; ni1
ni001
sont acceptables. - Si les deux langues utilisent des codages de caractères différents, le programme est défini par ses octets et non par ses caractères. C'est-à-dire que les octets devraient être les mêmes dans les deux langues.
- Le code le plus court en octets gagne.
Réponses:
05AB1E / Jelly ,
14 à13 octets-1 octet grâce à Adnan (évitez les doublons avec une impression non éclatante)
Octets bruts (hexadécimaux):
Dans la page de code de 05AB1E :
Essayez-le en ligne!
Dans la page de code de Jelly :
Essayez-le en ligne!
Comment?
Le programme 05AB1E imprime le double compte avec chaque entrée séparée par des nouvelles lignes:
Le programme Jelly imprime le nombre inversé avec chaque entrée séparée par des nouvelles lignes.
L'analyseur traitera un littéral valide entre
[
et]
comme le littéral inclus, sinon ces octets sont des jetons non définis et, en tant que tels, deviennent équivalents à des jetons séparant le code en lignes.==>
n’analyse pas littéralement, le code est donc:la source
Ð,,
par==
.Python 2 / C (clang) ,
10910710084958889888884 octetsPython: essayez-le en ligne!
C: Essayez-le en ligne!
Le L dans le code Python fait partie du délimiteur.
Explication:
Dans le code C, il met d'abord i à 0. Ensuite, il commence un commentaire (
#
code valide en C pour les#include
instructions) où le code Python va. À la fin du commentaire, il définit une fonction qui incrémente pour toujours une variable et l’imprime deux fois, délimitée par des espaces. Il commence alors un commentaire.Dans le code Python,
i=0;
met i à zéro. Python ignore la ligne suivante car#
commence un commentaire d'une seule ligne. Il l'incrémente ensuite pour toujours, le transforme en un nombre long et affiche sa représentation sous forme de chaîne inversée. Le «L» du long fait partie du délimiteur. Après cela, il commence une chaîne de plusieurs lignes pour commenter le code C, qui se termine plus tard.-2 octets grâce à @LuisMendo. -7 octets grâce à @ZacharyT. -6 plus d'octets grâce à @ZacharyT. +11 octets pour corriger un bug grâce à @ mbomb007. -7 octets grâce à @Doorknob. +1 octet pour corriger un bug grâce à @Doorknob. -1 octet grâce à @yoann. -1 octet supplémentaire grâce à @yoann. -3 octets grâce à @Cyoce.
la source
a(i){printf("%i %i ",i,i);a(i+1)}
while
boucle pour le code C?`i`
au lieu destr(i)
for(;;)printf("%i %1$i ",i++);
pour sauvegarder un octet. Le1$
est un argument de position qui indiqueprintf
d'afficher le premier argument (après la chaîne de format).Gelée / Pyth, 15 octets
Les logiciels non imprimables sont endommagés par le logiciel SE, voici donc un hexdump:
Courez avec
jelly f file
etpyth file
respectivement.Explication
Vient d’abord la partie Pyth.
.V
exécute une boucle infinie sur la séquence incrémentante à partir de son entrée, qui est ici1
. Ensuite, nous_
inversons (`
) l'index de boucle stringified ( ) et le sortonsb
implicitement. Il;
y a là pour terminer la boucle et il"
est nécessaire de traiter le reste du programme comme un littéral afin d'éviter que l'analyseur ne s'étouffe.La partie Jelly sera expliquée en traduisant d’abord le reste du programme à partir de la page de code Jelly:
Le
¶
agit comme un saut de ligne, ignorant effectivement la première partie du programme en en faisant un lien jamais appelé. Ensuite, nous commençons à1
et exécutons une boucle while (¿
) qui utiliseṄṄ$
(print deux fois) comme condition et incrémente (‘
) la valeur comme corps de la boucle.Soit dit en passant, en remplacement de la partie Pyth avec
1[DR,>]
serait de créer une soumission Jelly / 05AB1E valable dans 14 octets, mais le interpeter actuel contient un bug qui empêche cela.la source
Perl / JavaScript, 87 octets
Perl
Un mécanisme que je l' ai utilisé beaucoup dans polyglottes JS / Perl est d'abuser du fait que la substitution peut accepter à peu près tout delimiter, en utilisant des
=
moyens que je peux utiliser les substitutions inutiles initiales (remplaçant tout d' abord0;print
avecconsole.log;m
un drapeau/s
dans$_
, qui est actuellementundef
) , puis définissant$_
le résultat du remplacements
pars
en mode multiligne (/m
), qui est0
. Maintenant$_
est0
et je commence lawhile
boucle, cela incrémente alors$_
. J'appelle ensuiteprint
, en passant une expression régulière qui correspond (en raison de||
la fin qui correspond à une chaîne vide) et utilise l'&&
opérateur pour envoyer l'inverse de la$_
concaténation avec une nouvelle ligne ($/
est pré-initialisé à"\n"
). Cela compte à l'infini à l'envers.JavaScript
Beaucoup d'assignations de variables ici, masquées dans les
s///
appels Perl . Je mis en place des variabless
etm
que0
, aliasconsole.log
pourprint
, exécutez une division inutile, ensemble$_
à0
et commence lawhile
boucle incrémenter$_
, appel enprint
passant0
(m/s
, cela commence l'appel àm
Perl, mais est traité comme division standard JS) et notre chaîne cible ($_+"\n"+$_
) via l’opérateur virgule, qui renvoie le dernier élément de la liste. J'évite le dernier morceau de code Perl (&&reverse.$/
) car ce$_+"\n"+$_
sera une vérité et je pourrai ainsi utiliser||
pour produire unRegExp
objet contenant la fin du code Perl qui ne sera jamais évalué.Testé avec Perl 5 et Node 6.
la source
NodeJS / PHP,
131106 octets-25 octets grâce à @Titus
Utiliser NodeJS au lieu du navigateur JS pour un meilleur formatage de sortie et une meilleure gestion des boucles infinies.
Essayez le JavaScript en ligne
Essayez le PHP en ligne
Notez que la sortie TIO est coupée après 128 Ko.
la source
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 octets (mais pas aussi agréables que votre approche):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
ou<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
pour répéter le numéro, mais j'ai dû changer lewrite(i)
pour inclure un espace, et parce quewrite()
n'accepte pas de numéro. Et vous avez eu une faute de frappe (strrev=i=i>>1
->strrev=i=>i>>1
) qui a ajouté un autre octet. A fini par être plus court pour fairewrite(i+i)
etstrrev=i=>i+" "
.V / Brain-Flak Classic ,
27, 26 octetsHexdump:
Essayez-le en ligne! dans V (légèrement modifié pour qu'il se termine afin que vous puissiez voir la sortie. Sur TIO, V ne sort que si le programme se termine)
Essayez-le en ligne! dans Brain-Flak Classic
Ce n'est pas le plus intéressant des polyglottes, car le code V n'a aucun effet sur brain-flak classic, et inversement, mais c'est vraiment amusant d'utiliser mes deux langues sur un challenge, et les deux solutions sont très intéressantes. par eux-même.
V Explication:
Explication de BFC:
la source
Retina / Python 2, 61 octets
Rétine | Python 2
la source
str()
par «», mais apparemment j'ai perturbé le code de la rétine. Je ne sais pas pourquoi?str
vous voulez arriver à un grand nombre et que cela fonctionne correctement, vous devez le faire , sinon vous obtiendrezL
les résultats. Mais il fait fait le travail dans Retina. Vous avez dû changer plus que ce que vous avez dit, comme déplacer quelque chose sur une ligne différente.R / Octave ,
83807871 octets-3 octets grâce à Luis Mendo
#{ }#
est un commentaire de bloc Octave et#
se trouve être le commentaire de R. L'interprète R ne voit que la ligne suivante comme corps de lawhile
boucle et l'interprète Octave passe directement au code Octave.La partie R imprime des paires de nombres commençant à 1 et la partie octave imprime les nombres arrière commençant à 0.
Je m'attends vraiment à être sur-joué (même par la même combinaison de langues); Je viens d'écrire tellement de code Matlab et R récemment que j'ai décidé de tenter le coup.
Essayez-le en ligne! - lien octave
la source
i=i+1
?+=
ça ne marche pas en R, alors oui, ça doit être comme ça.end
nécessaire?while(1)
), vous pouvez sauvegarder ces octets.Ruby / Python2:
6864 octetsRuby perspective
simple init de variable:
"#{}"
est la syntaxe pour l'interpolation de chaîne. Je l'utilise pour exécuter l'expression à la place.p
est un raccourci pourputs
.loop
crée une boucle infinie.Ensuite, il y a la
exec
chose, mais elle n'est jamais évaluée, car la boucle infinie est par définition infinie. Nécessaireexec
pour ne pas générer d'erreur de syntaxe avec le code Python.Perspective python
Du point de vue de Python, il y a un point commun
i=0
. Ensuite, Python a une syntaxe différente pour l’interpolation de chaîne, cette ligne est donc simplement ignorée. Ensuite, il y a une boucle infinie semblable à celle affichée par les autres.la source
Bash / Check ,
50 à28 octetsMerci à @Doorknob d’avoir économisé de nombreux octets en passant de Python à Bash
Pour Bash:
Ce ne sont que quelques commentaires, qui sont ignorés.
Commencez une séquence allant de 1 à l'infini, puis transmettez le résultat à
rev
.Vérifier:
Ceci bascule immédiatement en mode 2D en allant à droite.
>
dirige le droit de propriété intellectuelle, qui n'a aucun effet. Il retourne au début de la ligne et frappe à#
nouveau, ce qui permet de sortir du mode 2D. Il frappe ensuite>
en mode 1D, ce qui pousse 0 dans la pile. Comme il est en mode 1D, l’IP passe à la ligne suivante.#
fait basculer l’IP en mode 2D et lev
dirige vers le bas.Le premier
#
repasse en mode 1D.p
renvoie le TOS sous forme de nombre (mais ne le saute pas), puis<
imprime une nouvelle ligne. Ceci est fait deux fois, puis le nombre est incrémenté de)
.#
bascule à nouveau en mode 2D, de sorte que l'adresse IP retourne au début de la ligne, clique#
pour passer en mode 1D, etc.la source
#
pour commentaires et peuvent effectuer très facilement la tâche « nombres renversées »:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
est un octet plus courtCJam /> <>,
2723 octetsÀ CJam:
Essayez-le en ligne! - Notez que vous devez attendre la limite de 60 secondes pour voir la sortie, mais cela fonctionne hors ligne.
Ceci définit un littéral de chaîne multiligne qui n'est jamais utilisé.
La deuxième ligne est la suivante:
Pour> <>:
Commence un littéral de chaîne.
Contenu de la chaîne littérale. Chacun des codes de caractères est poussé individuellement dans la pile.
L'adresse IP tourne autour pour atteindre à
"
nouveau, ce qui met fin au mode chaîne.l
prend la longueur de la pile,a
pousse 10 et se,
divise. Cela nous donne la longueur de la pile / 10.:
duplique,n
imprime sous forme de nombre,a
appuie sur 10 eto
imprime sous forme de code de caractère (nouvelle ligne).Même chose. Imprimer le numéro suivi d'une nouvelle ligne. La pile a maintenant à nouveau la longueur 10 (le contenu du littéral de chaîne d'origine est sur la pile).
Ensuite, l’IP
"
revient à nouveau, ce qui conduit à 10 éléments supplémentaires à pousser. La prochaine fois,l
retourne 20, donc 2 est imprimé, etc.La deuxième ligne n'est jamais touchée par l'IP.
la source
Röda / C (gcc) , 90 octets
Röda: Essayez-le en ligne!
C: Essayez-le en ligne!
Explication
Cela abuse du fait qu’il
//
s’agit d’un int divison dans Röda mais d’un commentaire de ligne dans C.Dans les deux langues,
main(){}
désigne le programme principal et tous deux appellent functionf
avec un argument factice de0
.En Röda,
a=1//1
fait division int et affecte le résultat1
àa
. C voita=1
et fait la même chose, mais tout ce qui suit est un commentaire pour C. À partir de là, les deux langues se séparent.Röda
Nous avons une boucle infinie avec
while[]
( une condition vide est la vérité ). À l'intérieur de celui-ci,` $a`
convertit l'entiera
en chaîne (avec un espace de tête) après quoi l'[::-1]
inverse (et le produit avec un espace de fin). Ensuite, la valeur dea
est incrémentée de un.En dehors de la boucle while, un commentaire multiligne commence
/*
et se termine juste avant la fin de la fonction.C
Après avoir ignoré le reste de la ligne, le programme passe à la deuxième ligne. Nous commençons par un point-virgule car l'
a=1
instruction doit être terminée. Après cela, nous rencontrons une simple boucle for qui affiche la variable itérativea
, deux fois à chaque itération.En dehors de la boucle for, the
/*
est juste là pour ignorer le dernier*/
commentaire de Röda .la source
QBIC / QBasic 4.5 , 58 octets
Cela abuse fortement du fait que toutes les lettres minuscules sont considérées comme du code QBasic littéral par l'interpréteur QBIC et sont donc simplement transmises à la couche QBasic de QBIC. Comment les deux langues voient ce code, côte à côte:
la source
laserLANG / > <> , 163 octets
Première fois au golf, il est donc un peu plus grand qu'il pourrait l'être. Je voulais utiliser> <>, mais comme quelques personnes l'utilisaient déjà pour créer la deuxième séquence, j'ai décidé de tenter de créer la première séquence.
Essayez> <> en ligne!
Pour laserLANG, un interprète hors ligne est nécessaire pour l’essayer. On peut le trouver ici .
laserLANG
l'exécution commence à
!
laquelle est complètement ignorée. il atteint ensuite le\
et commence à descendre plusieurs personnages qu’il ignore complètement. Finalement, on en atteint un autre\
et le plaisir commence. J'ai essentiellement pris l'idée derrière le "Hello, World!" boucle et condensé aussi bien que je pouvais. Le fait que laserLANG n’est sur le point de décrémenter / d’augmenter le compteur de mémoire que lorsque le compteur de programme va respectivement vers la gauche et la droite représente un défi. Je pense que la plupart des octets pourraient être sauvegardés ici en effectuant des astuces auxquelles je n'avais pas pensé.> <>
L’exécution commence,
!
ce qui le fait sauter le\
. Il continue ensuite comme si le code laserLANG n'était pas là. Je n'avais pas réalisé que> <> ne disposait que d' un support pour la division float, donc une troncature courte et simple était un peu déroutante au début.la source
Befunge-98 / > <> , 32 octets
A écrit ceci avant de voir combien de
><>
réponses il y avait. Un peu d’arrière-plan:\
c’est un opérateur qui change de direction dans> <>, dans ce cas, il le pousse vers le bas, alors que dans Befunge, il échange les deux premiers éléments de la pile. Le code Befunge ressemble à:Essayez-le en ligne!
Imprime les nombres en arrière séparés par des nouvelles lignes. Befunge imprime automatiquement un espace après chaque nombre, de sorte que chaque chiffre est séparé par des espaces. Obtient à plusieurs reprises le dernier chiffre, l’imprime et le divise par 10 jusqu’à ce qu’il soit égal à 0. Puis incrémentez et répétez.
Le code> <> descend immédiatement à la deuxième ligne.
Essayez-le en ligne!
Et c'est assez simple. Obtenez la longueur de la pile, imprimez deux fois avec des nouvelles lignes et laissez une copie de la longueur sur la pile pour la prochaine boucle.
la source
Ruby / Stacked , 37 octets
Essayez-le en ligne!
Cela imprime
1 1 2 2
... en rubis et1 2 3 ... 01 11 21...
en empilé.Explication
En rubis:
Après avoir supprimé le commentaire, cela devient:
La seule ligne pertinente ici est la dernière.
p
renvoie son argument, doncp p
affiche son argument deux fois.$.
commence à0
, donc$.+=1
incrémente$.
en renvoyant la valeur incrémentée. Par conséquent, cela imprime chaque nombre de1
deux fois.En empilés:
Ceci est équivalent aux jetons suivants:
Les deux premiers ne sont pas pertinents (essentiellement, transformation
0
en une onction réduite). Ensuite,0
est poussé dans la pile. Après, la fonction[1+:tostr rev out]
est poussée dans la pile.loop
fait apparaître cette fonction et l'exécute à l'infini.L'intérieur de la fonction incrémente le haut de la pile (
1+
), le duplique (:
), le convertit en chaîne (tostr
), l'inverse (rev
) et le renvoie (out
). Ce processus est répété indéfiniment. Comme la boucle est infinie, tout ce qui vient après ce jeton est essentiellement ignoré par l'interpréteur.la source
> <> / Jelly , 37 octets (25 dans la page de codes de Jelly)
Essayez> <> en ligne!
Essayez Jelly en ligne!
> <> imprime deux fois la séquence à l'infini, Jelly décompte en arrière.
> <> ne concerne que la ligne supérieure:
Et merci à @ Challenger5 d’avoir économisé quelques octets ici sur le saut de ligne
Jelly exécute son code de bas en haut. Seules les deux dernières lignes sont pertinentes.
la source
><>
code ont des points de code ASCII qui correspondent à Jelly Codepage. Je ne connais pas grand chose à propos de cette entreprise de pages de codes, mais je pense que les mêmes octets seraient utilisés pour représenter le code. Les caractères sur les lignes inférieures sont ignorés par les autres><>
; peu importe si ce sont exactement les mêmes entre les pages de codes. Le nombre d'octets provient du><>
lien TIO.","
applique simplement la valeur ASCII de,
à la pile, de sorte que vous pouvez utiliser à laa
place un séparateur de nouvelle ligne.C (gcc) / PHP ,
1028680 octetsAffiche la double séquence en C et la séquence inverse en PHP.
Essayez-le en C!
Essayez-le en PHP!
Des explications
C
En C, le
#
trucs du préprocesseur de formulaires. Je ne connais pas vraiment grand chose à propos de C mais il ne se plaint pas quand il y a une ligne vide pour ce genre de choses. Le//
forme un commentaire de ligne. UNE\
en fin de ligne est essentiellement "échappé" de la nouvelle ligne et fait en sorte que les deux lignes soient traitées comme une seule. Cela fonctionne également pour les commentaires de ligne. La deuxième ligne est donc considérée comme un commentaire en C. La troisième ligne effectue le travail de sortie des nombres avec une simple boucle for. Ensuite, il y a simplement un commentaire.PHP
En PHP,
#
forme un commentaire de ligne, la première ligne est donc totalement ignorée. La deuxième ligne imprime les nombres inversés avec une boucle for et les sépare avec\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(le code C enveloppé dans une chaîne).la source