Je double la source, vous doublez la sortie!

127

Votre tâche, si vous souhaitez l'accepter, consiste à écrire un programme générant un entier positif (supérieur à 0). La difficulté réside dans le fait que si je duplique votre code source, la sortie doit être le double de l’entier original.

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.

  • Vous ne pouvez pas supposer de saut de ligne entre les copies de votre source.

  • C'est du , donc le le plus court (original) dans chaque langue gagne!

  • Les failles par défaut s'appliquent.

Exemple

Disons que votre code source est ABCet que la sortie correspondante est 4. Si j'écris à la ABCABCplace et l'exécute, le résultat doit être 8.

Classement

Ceci utilise la mise en page de @ manatwork .

M. Xcoder
la source
2
@ Mr.Xcoder Ensuite, il me suffira d'en inclure un dans ma propre source.
Steenbergh
3
@ Mr.Xcoder Je pense que vous auriez dû empêcher de lire votre propre code source.
Caird coinheringaahing
1
Cela ne doit fonctionner qu'une fois doublé ? Nous ne devons soutenir n beaucoup doublements?
Cody Grey
6
@ Daniel Disons que votre source est `` (programme vide) et il produit 5. Si vous doublez, votre source est `` (programme vide) et cela produit 5aussi, peu importe ce que vous faites. Cela étant dit, un programme vide dupliqué est toujours le programme vide et produit toujours la même sortie, sauf dans le cas où le programme vide signifie autre chose (un générateur de nombres aléatoires, par exemple), qui ne pourrait de toute façon pas être valide.
M. Xcoder
1
Cela ne devrait pas être difficile pour les esolangs qui vident automatiquement le haut de la pile à la fin du programme.
MD XF

Réponses:

152

Python 2 , 33 octets

print len(open(__file__).read())#

Essayez-le en ligne!

Essayez-le doublé

Python 3 , 28 octets

print(len(*open(__file__)))#

Essayez-le en ligne!

Essayez-le doublé

Explication

Cela ouvre le code source à l' aide open(__file__)et obtient sa longueur à l' aide lenles #empêche tout code supplémentaire d'être lu. Lorsque la source est doublée, la longueur l'est aussi.

Sriotchilisme O'Zaic
la source
28
Wow, je suis abasourdi ... C'est tellement brillant!
M. Xcoder
2
32 octets . Fonctionne en utilisant le mode Ajout, en définissant la position actuelle à la fin du fichier. tell()renvoie la position actuelle dans le fichier
Halvard Hummel
@HalvardHummel Nice. Cependant, je n'ai aucune intention de mettre à jour cette réponse. Si vous souhaitez le publier vous-même, à mon avis, il en va tout autrement.
Sriotchilism O'Zaic
@WheatWizard Cela est compréhensible, j'ai fait une réponse
Halvard Hummel
96

Gelée , 1 octet

Essayez-le en ligne!

ou essayez le double!

Je ne sais pas du tout comment cela fonctionne, mais apparemment, c'est le cas.

DJMcMayhem
la source
55
Ce moment où vous n'avez aucune idée de ce que vous avez écrit ...
M. Xcoder
2
Bon sang, je viens de penser à ces 8 minutes trop tard.
HyperNeutrino
17
Tous les liens ont besoin d'un argument. Si le premier élément de la chaîne est un nilad, son résultat devient l'argument et le lien est exécuté de manière monadique. S'il n'y a pas de nilad de tête, 0 est utilisé à la place.
Dennis
65

Feuilles Google, 11 5 octets

Formule anonyme de la feuille de calcul qui n'utilise ni entrée ni sortie dans la cellule contenant la formule

=4/(2

En tant que formule unique, cela équivaut à une pile d'appels qui ressemble un peu à quelque chose comme

=4/(2
=4/(2)
=4/2
=2
2

Cependant, lorsque cette formule de la feuille de calcul est doublée, la pile d'appels est évaluée à

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

Bien sûr, l’utilisation de cette méthode implique qu’une fois que cela est répété plus d’une fois, à la troisième et à toutes les itérations suivantes du problème, la pile d’appels va atteindre =4/(2=4)et donc évaluer jusqu’à =4/0lancer une #DIV/0!erreur.

-6 octets en basculant en algèbre loin de la =DIVIDE(4,2formule

Taylor Scott
la source
18
Jamais prévu Google Sheets aurait utilisation dans le code de golf. Clever solution
hucancode
11
@hucancode le point vraiment intéressant à ce sujet est que, comme Excel renvoie une erreur si vous excluez les points suivants ), cette réponse est la seule réponse Google Sheets que j'ai jamais vue qui ne se traduise pas en réponse Excel
Taylor Scott
45

05AB1E , 2 octets

Original

XO

Essayez-le en ligne!

Doublé

XOXO

Essayez-le en ligne!

Explication

X pousse 1 à la pile.
O résume la pile.

Emigna
la source
48
XOXO, bonne solution.
M. Xcoder
4
Vous l'avez fait exprès, alors que vous saviez que vous auriez aussi pu l'utiliser 1O!
Erik the Outgolfer
12
Où trouvez-vous ces langues ridicules?
DavidB
7
@DavidB Généralement, ils les écrivent.
Federico Poloni
3
@DavidB Oui, les gens inventent des langues pour codegolf, et oui, ils peuvent obtenir de manière impressionnante les scores bas, mais faire des choses stupides comme inventer une langue après le défi de le résoudre dans 1 octet sont refusés, et la programmation dans ces langues est généralement loin de facile.
Esolanging Fruit
43

C (gcc), 37 octets

i;main(){putchar(i+49);}/*
i=1;//*///

Le fichier ne contient pas de nouvelle ligne de fin.

Version doublée, pour la coloration syntaxique:

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

Liens TIO: simple , double .

Poignée de porte
la source
3
Pouvez-vous s'il vous plaît expliquer comment cela fonctionne? pourquoi le commentaire serait-il jamais commenté?
phil294
10
Lorsque vous doublez le code source, le /*est mis en commentaire par le //, ce qui signifie que le i=1texte suivant est non commenté. Il est plus facile de voir si vous mettez la version doublée du code dans un surligneur de syntaxe
musicman523
1
Whoa, un truc de définition provisoire. Agréable.
Aschepler
39

Hexagonie , 7 octets

/)!@.).

Imprime 1 régulièrement puis 2 doublé.

Essayez-le en ligne! ou essayez-le doublé en ligne!

Versions étendues:

Ordinaire:

 / )
! @ .
 ) .

Doublé:

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

Le programme normal suit le chemin: /)!.@ce qui incrémente un bord de la mémoire (tous sont initialisés à zéro) puis imprime sa valeur numérique. Le programme doublé suit: /.)/)!@incrémente le bord deux fois avant l'impression.

FryAmTheEggman
la source
6
Wow beau travail. Je suppose que vous avez trouvé cela à la main? Étant donné que 6 octets se situent dans la plage de force brute, j'ai pensé tenter le coup. Il existe en fait une solution à 4 octets: [@!)(et quelque 570 solutions à 5 octets). Étant donné que vous avez réellement pris la peine de trouver une solution manuellement, je suis parfaitement heureux que vous publiiez la solution à 4 octets.
Martin Ender
1
Si cela vous intéresse, voici la liste complète avec le numéro imprimé: pastebin.com/TtRujjA4
Martin Ender
36

Braingolf , 1 octet

+

Essayez-le en ligne!

Maintenant nous parlons!

Sorties 20, ou 40lorsque la source est doublée.

Explication

+ est bien entendu l'opérateur "sum", "add" ou "plus" de Braingolf, mais il a des fonctions dyadiques, monadiques et niladiques.

Quand il y a au moins 2 objets sur la pile, c'est dyadique et la somme des 2 premiers articles de la pile est ajoutée.

Lorsqu'il n'y a qu'un seul élément sur la pile, il est monadique et le double.

Quand il n'y a pas d'objets sur la pile, c'est niladique et pousse 20!

Pourquoi ça pousse 20? Parce qu’un programme Braingolf vide imprime simplement une nouvelle ligne et que la valeur ASCII d’une nouvelle ligne est de 10, j’ai donc pensé que je ferais niladic +push 20, c’est comme si elle était en réalité monadique sur la nouvelle ligne implicite (même si ce n’est pas le cas). tout)

Donc:

+   No input
+   Niladic sum, Push 20
    Implicit output

Et quand doublé:

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output
Skidsdev
la source
28

Haskell , 26 à 18 octets

main=print$0
 +1--

Essayez-le en ligne!

Doublé:

main=print$0
 +1--main=print$0
 +1--

Essayez-le en ligne!

J'ai trouvé cette version en répondant à la version triple du défi .


Version de 26 octets sans abus de commentaires:

main|n<-1,nmain<-2=print n

Essayez-le en ligne! Impressions 1.

Dans la protection des motifs, l'identificateur nest défini sur 1et nmainsur 2, puis est print nimprimé 1.

Double programme:

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

Essayez-le en ligne! Impressions 2.

Dans le premier motif, la protection nest à nouveau définie sur 1et nmainsur 2. Toutefois, l'instruction d'impression est devenue print nmain, elle 2est donc imprimée. Étant donné que les déclarations d'identificateur dans un modèle de garde sont évaluées sur true, le deuxième modèle de garde ne peut jamais être atteint.

Laikoni
la source
23

Mathematica, 5 octets

(1+1)

sorties 2 et (1 + 1) (1 + 1) sorties 4

et bien sûr (comme beaucoup d'entre vous l'ont demandé)

Mathematica, 3 octets

(2)
J42161217
la source
1
Ça (2)marche?
geokavel
9
@geokavel 2et un espace fonctionneraient, comme +1il se doit, mais il convient de noter que tous ces éléments assument l'environnement de cahier de Mathematica
Martin Ender
1
Si vous l'exécutez dans Mathematica Sandbox opencloud, un seul espace devient xtel que les 2 sorties 2et 2 2 devient 2x2 celui qui imprime 4. Vous pouvez l'ajouter comme solution alternative.
M. Xcoder
2
(2)fonctionne aussi bien.
M. Xcoder
6
2 fonctionne aussi bien.
Alephalpha
17

Brain-Flak , 6 octets

({}())

Essayez-le en ligne!

Explication

Ce que cela devrait être assez clair. {}récupère une valeur de la pile, qui commence implicitement à zéro, ()ajoute une valeur à celle-ci et la (...)pousse. Lors de la deuxième manche, puisqu'il y a déjà un 1 sur la pile, cela ne fait qu'ajouter un autre 1 pour en faire deux. En fait, si vous copiez le code nfois, il sera toujours imprimé n.

Sriotchilisme O'Zaic
la source
17

> <> , 7 6 octets

-1 octet grâce au pélican de sarcelle

\ln;
0

Essayez-le en ligne!
Essayez-le doublé!

Explication

J'ai utilisé a 0mais j'aurais aussi pu utiliser 1- 9, a- fcar ils insèrent tous une seule valeur dans la pile.

Non doublé:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

Doublé:

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution
Borka223
la source
5
Bienvenue chez PPCG! C'est une excellente première réponse, avec une explication très bien pensée et un bon code. Vous avez gagné mon vote positif!
M. Xcoder
1
Je viens de voir cette réponse et c'est génial! Très belle amélioration sur le couple> <> réponses (y compris la mienne!) - Consultez le lien TIO ici; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Tout ce que j'ai fait est de déplacer le 0 dans l'espace et cela enregistre 1 octet. :)
Pélican sarcelle
1
@Tealpelican Merci! Je ne peux pas croire que j'ai raté une amélioration aussi simple. (En fait, je peux, je n’utilise pas beaucoup> <> et je suis novice en golf!) Pour être honnête, je n’ai pas vraiment regardé les autres solutions en détail, j’ai vu qu’elles étaient relativement grandes et j'ai décidé de essayez de résoudre le problème car il serait plus facile de rivaliser.
Borka223
1
Bonne réponse! Je voulais juste souligner que cela utilise la même méthode que ma réponse de Klein . (Ne vous accusez pas de m'avoir copié. Si quelqu'un a déjà souligné deux réponses semblables.)
Sriotchilism O'Zaic
14

Rétine , 3 octets


1

Essayez-le en ligne!

Impressions 2. En doublant les impressions 4.

Le 1peut être remplacé par à peu près tout le reste.

Explication


1

Remplace l'entrée vide par 1.


Compte le nombre de correspondances vides dans 1lequel est égal à deux (une avant 1et une après).

Si nous doublons le programme, nous obtenons une étape supplémentaire comme la première. Cette fois, il insère un 1avant et un après le premier, donnant 111. Lorsque nous comptons maintenant le nombre de correspondances de la regex vide, nous en obtenons quatre.

Martin Ender
la source
14

Python REPL, 2 octets

Fonctionne également en Pip, Dyalog APL, JavaScript, J et R

+1

Je fais un TIO en ce moment je ne pouvais pas obtenir de python repl pour travailler sur TIO

Sriotchilisme O'Zaic
la source
1
+1est exactement ce que je vais faire: P mais zut, tu m'as ninja par environ une minute> <
HyperNeutrino
1
Cela fonctionne également dans Dyalog APL.
Kritixi Lithos
Polygolt
M. Xcoder
1
Ne pourriez-vous pas utiliser ceci et cela pour un REPL?
totalement humain
1
Vous avez mon +1.
Federico Poloni
12

Neim , 1 octet

>

Incrémente simplement le haut de la pile.

La pile peut être imaginée comme une quantité infinie de zéros pour commencer. Cela incrémente donc zéro pour en obtenir un, et le double, l'incrémente à nouveau pour en obtenir deux.

Essayez-le en ligne!

Une solution alternative:

Ajoute 2, au lieu de 1.

Okx
la source
12

JavaScript, 38 octets

setTimeout('alert(i)',i=1)/*
i++//*///


setTimeout('alert(i)',i=1)/*
i++//*///setTimeout('alert(i)',i=1)/*
i++//*///

Benoit Esnard
la source
1
Joli! Pourriez-vous simplement faire i++?
Arnauld
@Arnauld: en effet, merci pour la suggestion!
Benoit Esnard
12

Java8, 135 118 110 octets

Single , empreintes 8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Doublé , empreintes 16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

Les aperçus répondent, 118 octets

Single , empreintes 1

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Doublé , empreintes 2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

Comment ça marche

Le compilateur Java crée un fichier unique pour chaque classe du fichier source. Par conséquent, je peux simplement vérifier si une ressource portant le nom B.class existe.


Réponse originale, 135 octets

Single , empreintes 1

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

Doublé , empreintes 2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///
Edwardth
la source
Ce que tu as fait avec le commentaire est vraiment cool. Mais avez-vous vraiment besoin de la nouvelle ligne?
vikarjramun
Oh nvm, je n'ai pas remarqué le commentaire d'une seule ligne sur la deuxième ligne
vikarjramun
11

Python 2 , 32 octets

print open(__file__,"a").tell()#

Essayez-le en ligne!

Double code source

Explication

Cela ouvre le fichier de code source en mode ajout

open(__file__,"a")

Nous trouvons ensuite la position actuelle dans le fichier, ce sera à la fin du fichier car elle est ouverte en mode append

open(__file__,"a").tell()

Nous imprimons cette longueur

print open(__file__,"a").tell()

Et ajoutez un commentaire, de sorte que doubler le code source n'exécute pas plus de code

print open(__file__,"a").tell()#
Halvard Hummel
la source
9

Excel VBA, 12 octets

Fonction de fenêtre immédiate VBE anonyme qui prend les entrées et les sorties à portée [A1]. La valeur par défaut de la plage [A1]est ""(chaîne vide) et après une exécution, ce qui suit le définit 1et l'incrémente 1avec toutes les exécutions suivantes.

[A1]=[A1+1]:

Entrée sortie

Version unique

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

Version doublée

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2
Taylor Scott
la source
8

Husk , 3 octets

|1"

Essayez-le en ligne!

Une idée originale, pour ce que j'ai vu dans d'autres réponses.

Explication

|dans Husk est un opérateur "ou" qui renvoie son deuxième argument s'il est thruthy, sinon le premier argument. Appliquée à des arguments de types différents, elle les convertit d’abord en nombres: la transformation des chaînes (et des listes en général) s’effectue en calculant leur longueur.

Dans le programme d'origine, nous appliquons |à 1 et à une chaîne vide convertie en 0: le résultat est 1.

Dans le programme doublé, nous appliquons |à 1 et la chaîne "| 1", qui est convertie en 2: le résultat est 2.

Leo
la source
7

CJam, 3 octets

5],

Essayez-le en ligne

Encapsuler 5 dans un tableau. Retourne la longueur du tableau. Lorsque vous dupliquez du code, la longueur précédemment renvoyée, 1, est déjà sur la pile. Vous obtenez donc un tableau de [1,5], qui renvoie la longueur 2.

geokavel
la source
7

Wumpus , 4 octets

" O@

Essayez-le en ligne!

" O@" O@

Essayez-le en ligne!

Le code normal est imprimé 32et le double est imprimé 64.

Explication

"fonctionne comme dans beaucoup d’autres Fungeoids: il bascule en mode chaîne, où chaque code de caractère est poussé dans la pile au lieu d’exécuter la commande. Cependant, contrairement à la plupart des autres Fungeoids, le champ de jeu de Wumpus n’est pas complet, de sorte que l’IP reflètera plutôt la fin et rebondira dans le code.

Donc, pour le programme unique, le code suivant est réellement exécuté:

" O@O " O@

La ficelle pousse 32, 79, 64, 79, 32. Ensuite, l'espace ne fait rien, les Oimpressions 32et le @termine le programme.

Pour le programme doublé, la chaîne est terminée à la place avant que l'adresse IP ne rebondisse. Le code n'est donc parcouru qu'une fois:

" O@" O@

Cette fois, la chaîne pousse 32, 79, 64, la Oimprime 64et la @termine le programme.

Cela semble être la seule solution à 4 octets.

Martin Ender
la source
6

,,, 2 octets

1∑

Explication

1∑

1   push 1
 ∑  pop everything and push the sum of the stack
totalement humain
la source
Est-ce que je manque quelque chose ou ne serait-ce pas 3 pour un code source doublé?
Taylor Scott
@TaylorScott Je suis désolé, j'aurais dû noter que tous les éléments de la pile apparaissent.
totalement humain
1
Cela a beaucoup plus de sens - merci pour la clarification
Taylor Scott
Sigma est deux octets, non?
nishantjr
1
@nishantjr ,,, utilise sa propre page de code, qui est liée dans l'en-tête.
totalement humain
6

Lot, 13 octets

@echo %~z0
:

Explication: %~z0s'étend à la longueur du fichier source. Doubler le fichier en double donc simplement la longueur. La deuxième ligne définit une étiquette vide, qui ne fait rien. Lorsque le fichier est doublé, il devient une étiquette nommée à la @echo %~z0place, tandis que la troisième ligne est une autre étiquette vide.

Neil
la source
6

QBasic,  44  28 octets

Il n'y a pas de nouvelle ligne à la fin. Sorties 4quand elles sont simples, 8quand doublées.

4
READ x,y
?x+y
END
DATA 4,0

Explication

Pour la version unique:

  • 4 est un numéro de ligne.
  • READ x,yprend les deux premières valeurs de l' DATAinstruction et les stocke dans xet y. Ainsi, xobtient 4et yobtient 0.
  • ?x+y ajoute les deux nombres et les imprime.
  • END quitte le programme.

Dans la version doublée, l' DATAénoncé devient DATA 4,04, ce qui attribue 4à tous les deux xet y, rendant ainsi x+yégal à la 8place.

DLosc
la source
6

Befunge-98 , 5 octets

90g.@

Essayez-le en ligne!

gobtient la valeur du caractère à la coordonnée (9, 0) dans Funge-Space; .l’imprime sous forme d’entier et @arrête le programme. Dans la version non doublée, (9, 0) est en dehors du programme et Funge-Space en dehors du programme est initialisé à la valeur par défaut d'un espace, nous en imprimons donc 32. Dans la version doublée, (9, 0) est le @caractère, nous imprimons donc 64.

betaveros
la source
Ce n'était pas ce à quoi je m'attendais, la meilleure réponse Befunge-98 ressemblerait à… réponse vraiment créative!
MildlyMilquetoast
J'ai parlé trop tôt ;)
MildlyMilquetoast