Votre tâche, si vous souhaitez l'accepter, consiste à écrire un programme générant un entier positif (supérieur à 0). Si le code source est dupliqué, la sortie doit rester la même. La difficulté réside dans le fait que si le code source est saisi trois fois (triplé?), Le résultat sera multiplié par 3.
Règles
Vous devez construire un programme complet . C'est-à-dire que votre sortie doit être imprimée sur STDOUT.
La source initiale doit avoir au moins 1 octet de long.
Les deux nombres entiers doivent être en base 10 (leur sortie dans une autre base ou avec une notation scientifique est interdite).
Votre programme ne doit pas prendre d’entrée (ou avoir une entrée vide, non utilisée).
La sortie des entiers avec des espaces de fin / fin est autorisée.
Les zéros en tête ne sont autorisés que si le nombre de chiffres est cohérent, par exemple: 001 - 001 - 003 ou 004 - 004 - 012
Vous ne pouvez pas supposer de saut de ligne entre les copies de votre source.
C'est du code-golf , donc le code le plus court (original) dans chaque langue gagne!
Les failles par défaut s'appliquent.
Exemple
Disons que votre code source est Abc
et que la sortie correspondante est 4
. Si j'écris à la AbcAbc
place et l'exécute, la sortie doit toujours l'être 4
. Cependant, si j'écris AbcAbcAbc
et l'exécute, la sortie doit l'être 12
.
Effrontément Stolen Dérivé de M. Xcoder défi
la source
int i=1;print i;
), le code dupliqué de (int i=1;print i;int i=1;print i;
) doit générer le même numéro que le code d'origine. Lorsque le code est tripliqué dans (int i=1;print i;int i=1;print i;int i=1;print i;
), il doit afficher le nombre multiplié par 3Réponses:
Wumpus , 6 octets
Essayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Impressions
1
et3
.Explication
J'ai trouvé une tonne de solutions de 6 octets par la recherche par force brute, mais aucune pour 5 octets. Cela ne signifie pas nécessairement qu’il n’ya pas d’octets à 5 octets, mais ils utiliseraient probablement des caractères étranges ou quelque chose du genre.
J'ai fini par choisir cette solution car elle n'imprimait pas de zéros non significatifs (la plupart le font) et son flux de contrôle était intéressant. Commençons par le programme unique:
Le code exécuté est donc:
Assez facile. Maintenant, le programme doublé. Comme la première ligne est ajoutée à la seconde ligne, la grille s'étend jusqu'à la largeur 5 (et la hauteur 3), ce qui modifie considérablement le flux de contrôle:
L'IP tourne autour de cette boucle exactement une fois, donc le code exécuté est:
Enfin, le programme triplé est assez similaire au programme doublé, mais nous avons quelques commandes plus importantes sur cette troisième ligne:
Le code exécuté est donc:
la source
Husk , 5 octets
Essayez-le en ligne!
Répété deux fois!
Répété trois fois!
Explication
Il est assez difficile de construire un programme reproductible dans Husk. Comme le système de types interdit l'utilisation d'une fonction pouvant s'appliquer à elle-même, je dois autoriser d'une manière ou d'une autre la première partie à évaluer une fonction et le reste à évaluer une valeur, et les types de fonctions intégrées existantes sont conçues pour empêcher cela sorte d'ambiguïté. Les jetons du programme sont
K
, qui construit une fonction constante.K a b
est équivalent àa
.Σ
, Ce qui prend un nombre entier n , et renvoie la n ième nombre triangulaire.+
, qui ajoute deux nombres.1
, qui est le littéral 1.Le programme original est interprété comme ceci:
Le
(K+)
est une fonction absurde qui est mangé par le premierK
.Le programme répété deux fois est interprété comme ceci:
La fonction entre parenthèses est à nouveau mangée par le premier
K
.Le programme répété trois fois est interprété comme ceci:
la source
K
dans un programme, l'inférence de type devient très lente, car chacune d'elles pourrait potentiellement "manger" un nombre quelconque de jetons et l'interprète essaiera toutes les combinaisons ...Gelée ,
75 octetsEssayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Comment ça fonctionne
la source
Haskell , 24 octets
Prints
1
: Essayez-le en ligne!Imprime également
1
: essayez-le en ligne!Prints
3
: Essayez-le en ligne!la source
Cubix , 5 octets
Essayez-le en ligne: une fois , deux fois , trois fois .
Explication
Cubix est un langage basé sur une pile dont les instructions sont encadrées à l’extérieur d’un cube. Il est important de noter que la pile est initialement remplie de zéros infinis, ce qui nous permet de "tirer les valeurs de nulle part" avec les opérateurs plutôt que de les pousser explicitement.
Je dois admettre que cela a été trouvé par un brute-forcer; Je ne l'aurais jamais trouvé par moi-même. En fait, @MartinEnder est celui qui m'a demandé d'essayer de forcer brutalement, car il cherchait cette solution sans succès. C'est la seule solution que Brute-Forcer ait trouvée, et je pense que c'est la seule et la plus courte solution de Cubix.
Programme unique
Regardez le courir!
Le programme d'origine s'adapte sur un cube unitaire. Voici le net déplié:
L'IP (pointeur d'instruction) commence sur la face la plus à gauche (la
<
) en direction est. La<
pointe immédiatement vers l'ouest, et elle tourne autour de laP
.P
C'est une exponentiation, et comme il n'y a rien sur la pile, l'interprète sort deux 0 et calcule 0 0 , ce qui donne 1 selon JavaScript.O
affiche ensuite cette valeur et@
termine le programme.Programme double
Regardez le courir!
Le programme de 10 octets est trop long pour tenir sur un cube d'unité et est donc étendu à un cube de taille 2:
Comme auparavant, l’IP commence en haut à gauche de la face la plus à gauche. Cette fois, la toute première instruction est
P
, ce qui pousse un 1 comme avant. Next est)
ce qui incrémente l’élément supérieur en le transformant en 2 . Ensuite,<
l'adresse IP est retournée et il frappe à)
nouveau en transformant le 2 en 3 .Voici où ça devient intéressant.
P
élève le deuxième élément en partant du haut à la puissance du premier élément, ce qui donne 0 3 = 0 . Ensuite, l’IP s’enroule sur le visage le plus à droite et passe par deux interdictions.
avant d’en frapper une autreP
. Nous voyons ici une autre bizarrerie de Cubix: les opérateurs binaires (tels queP
) ne suppriment pas leurs opérandes de la pile. Donc, puisque la pile est maintenant[3, 0]
, nous calculons 3 0 = 1 , ce quiO
sort et@
termine le programme.Triple programme
Regardez le courir!
Comme pour le programme double, le triple peut être placé sur un cube de taille 2:
Ce programme démarre de la même manière que le précédent:
P
appuie sur 1 ,)
incrémente,<
pointe l’IP Ouest,)
augmente à nouveau, puisP
appuie sur 0 . L'adresse IP est ensuite enroulée<
sur la face la plus à droite, ce qui ne fait rien car l'adresse IP est déjà dirigée vers l'ouest.Voici une différence par rapport à la double programme: le
)
incrémente le 0 sur le dessus de la pile à un 1 . Quand ilP
reprend sa magie, il calcule cette fois 3 1 = 3 .O
sorties et se@
termine, et nous prouvons de manière concluante que la troisième fois est en effet le charme.la source
Brain-Flak , 10 octets
Essayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Explication:
Lorsque nous courons cette fois, il sera mis
(0 + 0 + 1) == 1
sur la pile alternative. Couru une deuxième fois, il met la même chose sur la pile principale. Exécuté une troisième fois, il évalue(1 + 1 + 1) == 3
puis, le transfère sur la pile alternative et l’imprime implicitement.la source
SQL,
252423 octets( -1 octet Suppression d' un caractère erroné qui a toujours été commenté et ne rien faire )
( -1 octet modifié
SELECT
àPRINT
tel que recommandé par Razvan Socol )Comment ça marche:
En SQL, vous pouvez commenter les balises de commentaire, comme ceci:
contre
Code sur 1 ligne avec les commentaires exclus:
Première itération:
SELECT 2-1
Sortie:1
Deuxième itération:
SELECT 2-1*2+1
Sortie:1
Troisième itération:
SELECT 2-1*2+1*2+1
Sortie:3
la source
PRINT
au lieu deSELECT
sauver un octet supplémentaire.SOGL V0.12 ,
754 octetsEssayez-le ici!
Essayez-le doublé!
Essayez-le triplé!
Explication:
la source
ē1|
, mais apparemment, il n'y a pas d'ordre pourē:2\+
: /05AB1E ,
65 octetsEssayez-le en ligne! ou essayez-le doublé! ou essayez-le triplé!
Explication
Simple:
0 + (0 % 2 == 0) -> 1
Double:
1 + (1 % 2 == 0) -> 1
Triple:
2 + (2 % 2 == 0) -> 3
la source
% 2
dans la triple explication?2%_
vrai?2 + (2 % 2 == 0) -> 2
mais2 + !(2 % 2 == 0) -> 3
(pour votre explication).2%_
est identique àÈ
oui. Vous ne savez pas ce que vous voulez dire à propos de l'explication.2+(2%2==0) = 2+(0==0) = 2+1 = 3
. Il aurait probablement été plus clair si j'avais explandu les calculs.> <> , 9 octets
Essayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
J'ai trouvé cette sorte de chance, en utilisant la philosophie suivante: "Si le chemin du poisson est assez compliqué, il finira par arriver à un résultat". Les versions originale et doublée impriment un 5, et la version triplée imprime 1 puis 5 pour obtenir 15 = 3 × 5. Voici les versions multipliées, pour votre lecture:
la source
Python 2 ,
46 4539 octetsInspiré par la réponse de Halvard . Je suis heureux que mon défi en ait inspiré un nouveau, que je trouve encore plus intéressant. Enregistré 6 octets grâce à Kevin Cruijssen .
Essayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Comment ça marche (obsolète)
Quand il est doublé, la longueur devient 90 , mais le nouveau code est ignoré grâce à
#
,k==90
évalue doncTrue
. Booléens sont des sous - classes d'entiers en Python, donck>>True
est équivalent àk>>1
, qui est essentiellement k / 2 = 45 . Lorsqu'il est triplé, le nouveau code est à nouveau ignoré. La nouvelle longueur est donc 135 , elle n'est pas décalée car elle estk==90
évaluée àFalse
, donck>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
, et k est imprimé tel quel .Python 2 , 36 octets
Il s’agissait d’une suggestion de Aidan F. Pierce à 38 octets, et j’ai joué au golf par 2 octets. Je ne poste pas ceci comme ma solution principale parce que je ne l'ai pas inventé moi-même.
Essayez-le en ligne! Essayez-le doublé! Essayez-le triplé!
la source
print open(__file__,"a").tell()/79*3|1#
peut-êtreR ,
373128 octetsMerci à Giuseppe pour avoir joué aux 3 derniers octets.
(avec une nouvelle ligne de fuite).
Essayez une fois!
Essayez-le deux fois!
Essayez-le trois fois!
Cela utilise l'
readLines()
astuce de la réponse de Giuseppe au défi 8 balles , où lesstdin
redirections vers le fichier source. En gros, ce code ne compte que le nombre de lignes sous la première ligne et est affiché1
s'il y a 1 ou 3 lignes (le code est simple ou doublé) ou3
s'il y a 5 lignes (le code est triplé).la source
s
cela pour que cela fonctionne correctement, MAIS vous devriez être en mesure de jouer au jeu à 28 octets en retravaillant une partie des calculs.%/%2
cela devrait fonctionnerLost , 38 octets
Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
Explication
Lost est une langue très intéressante pour ce défi. La technique habituelle de Lost consiste à construire un "piège". Un piège est une section du programme conçue pour capturer toutes les IPS en un seul endroit, de manière à ce que leurs piles puissent être effacées et qu’elles puissent être contrôlées pour aller dans une direction spécifique. Cela rend les programmes d'écriture dans Lost beaucoup plus faciles à gérer. Cependant, étant donné que le programme est dupliqué, nous devons également éviter la duplication des interruptions. Cela nous oblige à concevoir un nouveau piège qui fonctionne correctement, mais lorsqu'il est dupliqué, un seul des pièges fonctionne. Mon idée de base ici est la suivante
Tant que la pile est non vide,
?
elle supprimera un élément et le ramènera au début si cet élément est différent de zéro. La clé ici est que lorsque cela empile la^^
ligne sCe qui signifie que peu importe la façon dont vous entrez, vous sortez toujours au même endroit.
À partir de là, nous pouvons essayer de mettre en œuvre la même idée à partir de ma réponse de Klein .
La colonne vertébrale de notre programme est le côté gauche qui pousse plusieurs
2
s. Chaque fois que nous ajoutons une copie du programme, un autre2
est ajouté à la colonne vertébrale du programme, ce qui signifie qu'un 2 supplémentaire est placé dans la pile. Une fois en bas, il rebondit\\>
et exécute le codeCela supprime les 2 premiers éléments de la pile, ajoute un à ce qui reste et quitte. Une fois que notre colonne vertébrale a 3 2s, nous allons ajouter 1 et obtenir 3, si nous avons moins de 3 éléments, nous allons simplement rejeter la pile entière et renvoyer 1.
Maintenant, le seul problème est que
!
dans notre programme peut provoquer une boucle infinie. Si l'IP commence à!
monter, il sautera et atterrira là où il était. Cela signifie que nous devons ajouter une autre ligne en dessous pour empêcher la boucle.Cela a le léger problème de mettre quelques barres obliques entre nos
^
s dans le piège. Cependant, assez miraculeusement, tout se passe bien. Nos ips rebondissent correctement pour que cela ne fasse aucune différence.la source
Stax , 5 octets
Exécuter et déboguer en ligne! · Doublé · Triplé
Explication
la source
C (gcc) ,
959185 octetsEssayez-le en ligne!
la source
Japt ,
865 octets-1 octet grâce à @ETHproductions
Explication:
Ceci évalue à
1-0 = 1
Doubled évalue à
2-1 = 1
Triplé évalue à
3-0 = 3
la source
°U-v
(plus newline) pour économiser sur la secondeU
.v
est parfait pour ce défi :-)Pure Bash (aucun
wc
ou autre utilitaire externe), 27la source
EXIT
par0
Perl 5 ,
1815131211 octets-3 octets grâce à nwellnhof
Une fois l' essayer en ligne!
Deux fois Essayez-le en ligne!
Thrice Essayez-le en ligne!
la source
n;$_=$a++|1;say
(15 bytes)> <> ,
10 98 octetsEssayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Je suis sûr qu'il y a une solution de 8 octets quelque part.Le non imprimable à la fin a la valeur ASCII 1 et n'est récupéré que par la
g
commande et à la troisième itération. Pour les deux premiers, il imprime05
, puis imprime15
.la source
C (gcc) , 107 octets
Ma première soumission en C (gcc). Bien trop long ...
Liens TIO: simple , double , triple .
la source
Labyrinth ,
12119 octetsTIO (1x) , TIO (2x) , TIO (3x)
la source
JavaScript,
81 77 7470 octets4 octets sauvés grâce à Shaggy
Jolie solution JS boiteuse. Consomme les valeurs du
[3,1,1]
tableau de droite (pop()
). Enregistre un délai d'attente pour afficher la valeur actuelle dans le futur. Si un délai a déjà été enregistré, annulez-le. S'appuie sur la nature sale devar
, qui lève des déclarations variables.Deux fois:
Afficher l'extrait de code
Trois fois:
Afficher l'extrait de code
la source
a
comme 3ème argument desetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 octetsNotez l'espace après
#endif
.Essayez-le en ligne!
la source
Charbon de bois , 12 octets
Essayez-le en ligne! Le lien est en code verbeux.
Essayez-le doublé!
Essayez-le triplé!
Explication
la source
MapAssignRight(Plus, 1, i)
vous enregistre un octet, ce qui vous ramène à la même longueur qu'un port de ma réponse à @Mr. Le défi de XCoder:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
est une autre version de ma réponse, mais il reste 11 octets ...MapAssign(Incremented, i)
JavaScript,
4340 octets2x:
Afficher l'extrait de code
3x:
Afficher l'extrait de code
la source
PowerShell ,
54484544 octetsEssayez-le en ligne!
Essayez-le doublé!
Essayez-le triplé!
Obtient son propre chemin d'appel avec
$PSCOMMANDPATH
et effectue uneg
et-c
ontenu sur le fichier.If
le nombre de caractères de ce fichier est inférieur à99
(vérifié viawc -c
coreutils), puis nous produisons1
etexit
(c'est-à-dire, nous arrêtons l'exécution). Cela représente le code d'origine et le code doublé. Sinon, nous sortons3
et sortons. Le code qui se trouve dans les sections doublées ou triplées n'a pas de sens, car nous allons le prendreexit
avant, ou c'est derrière un commentaire#
.Sauvegardé 6 octets grâce à M. Xcoder
Sauvegardé
34 octets grâce à Pavella source
-lt99
pour que99-gt
le casting fonctionne correctement, mais c'est en fait un octet plus court. Merci!C # (178 octets)
solution folle en C #, mais je suis heureux que cela soit possible en une ligne en C #. :)
Pour moi, le plus difficile était d'avoir un C # valide qui initialiserait ou incrémenterait la même variable. J'ai donc abusé de ConfigurationManager car j'avais besoin d'un NameValueCollection statique global et ConfigurationManager était le seul auquel je pouvais penser que je pouvais mettre à jour en mémoire. EnvironmentVariables est une autre option à laquelle j’ai pensé mais il n’a pas d’indexeur et je ne sais pas comment le faire sur une ligne qui peut être copiée-collée pour produire la sortie requise conformément à la spécification.
la source
Enchantements runiques , 35 octets
Essayez-le en ligne!
Travailler sur celui-ci m'a permis de trouver une erreur dans mon analyseur traitant des nouveaux caractères modificateurs de délai, bien que le résultat final ne soit pas affecté par cela, car je n'en ai plus eu besoin.
Fonctionne en raison du fait que la dernière ligne n'a pas de nouvelle ligne de fin (ni d'espaces de fin), ce qui permet aux IP dupliquées de se créer à un endroit différent. La partie supérieure gauche finit par créer une grande boucle autour de la grille, tandis que la deuxième adresse IP effectue une opération de réflexion pour remplacer
\
la 6ème ligne par a. Cette adresse IP sera alors bouclée pour toujours et ne fera rien.
La troisième adresse IP effectue également le même remplacement en même temps, mais comme il est situé sur la 13ème ligne, sa copie de ce réflecteur l’envoie vers le haut et il exécute la
1f'3w
séquence présente dans le coin supérieur droit, qui remplace le1
avec un3
14 line, juste avant que l'IP d'origine ne l'exécute, entraînant la sortie du programme triplé au3
lieu de1
(les valeurs peuvent également être2
et6
,3
et9
,4
et12
,5
et ou et en15
raison de la disponibilité desa-f
constantes numériques;1
et3
ont été choisies arbitrairement). Il est ensuite laissé dans une boucle sans fin en effectuant plus de commandes de réflexion qui ne font rien.Essayez-le en trois exemplaires!
la source
Perl 5,
2825 octets-3 octets grâce à @neil!
Déplace le curseur en arrière (ne fait rien au début de la ligne) et imprime la valeur de la
$a
première et de la troisième fois (c.-à-d. La troisième fois qu'un 1 est imprimé, le curseur se déplace et un 3 est imprimé sur la position du 1).la source
print"\e[D$a"if(++$a!=2);
peut-êtreQBasic, 19 octets
La source devrait inclure une fin de ligne.
Explication
Nous voulons sortie
1
,1
,3
. Notez que ces nombres sont un moins que les puissances de 2. Donc:la source