Doblo la fuente, ¡doblas la salida!

127

Su tarea, si desea aceptarlo, es escribir un programa que genere un número entero positivo (mayor que 0). La parte difícil es que si duplico su código fuente, la salida debe ser el doble del entero original.

Reglas

  • Debes construir un programa completo . Es decir, su salida debe imprimirse en STDOUT.

  • La fuente inicial debe tener al menos 1 byte de longitud.

  • Ambos enteros deben estar en la base 10 (está prohibido emitirlos en cualquier otra base o con notación científica).

  • Su programa no debe tomar entrada (o tener una entrada vacía no utilizada).

  • La salida de los enteros con espacios finales / iniciales está permitida.

  • No puede asumir una nueva línea entre copias de su fuente.

  • Este es el , por lo que gana el código más corto (original) en cada idioma .

  • Se aplican las lagunas predeterminadas .

Ejemplo

Digamos que su código fuente es ABCy su salida correspondiente es 4. Si escribo en su ABCABClugar y lo ejecuto, la salida debe ser 8.

Tabla de clasificación

Esto usa el diseño de @ manatwork .

Sr. Xcoder
fuente
2
@ Mr.Xcoder Entonces tendré que incluir uno en mi propia fuente.
steenbergh
3
@ Mr.Xcoder Creo que debería haber evitado leer su propio código fuente.
caird coinheringaahing
1
¿Solo necesita funcionar cuando se duplica una vez ? ¿No necesitamos soportar n muchas duplicaciones?
Cody Gray
66
@Daniel Digamos que su fuente es `` (programa vacío) y produce 5. Si lo duplica, su fuente es `` (programa vacío) y eso también produce 5, sin importar lo que haga. Dicho esto, un programa vacío duplicado sigue siendo el programa vacío, y siempre produce la misma salida, excepto en el caso en que el programa vacío significa algo más (un generador de números aleatorios, por ejemplo), que de todos modos no podría ser válido.
Sr. Xcoder
1
Esto no debería ser difícil para esolangs que descargan automáticamente la parte superior de la pila al finalizar el programa.
MD XF

Respuestas:

152

Python 2 , 33 bytes

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

Pruébalo en línea!

Pruébalo doblado

Python 3 , 28 bytes

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

Pruébalo en línea!

Pruébalo doblado

Explicación

Esto abre el código fuente usando open(__file__)y obtiene su longitud usando lenlos #evita que cualquier código adicional de ser leída. Cuando la fuente se duplica, también lo hace la longitud.

Sriotchilism O'Zaic
fuente
28
Wow, estoy asombrado ... ¡Eso es genial!
Sr. Xcoder
2
32 bytes . Funciona utilizando el modo agregar, estableciendo la posición actual al final del archivo. tell()devuelve la posición actual en el archivo
Halvard Hummel
@HalvardHummel Nice. Sin embargo, no tengo intención de actualizar esta respuesta. Si desea publicarlo por su cuenta, es sustancialmente diferente en mi opinión.
Sriotchilism O'Zaic
@WheatWizard Eso es comprensible, hice una respuesta por
Halvard Hummel
96

Gelatina , 1 byte

Pruébalo en línea!

o Pruébalo doble!

No tengo idea de cómo funciona esto, pero aparentemente lo hace.

DJMcMayhem
fuente
55
Ese momento cuando no tienes idea de lo que has escrito ...
Sr. Xcoder
2
Maldición, solo pensé en estos 8 minutos demasiado tarde.
HyperNeutrino
17
Todos los enlaces necesitan un argumento. Si el primer elemento de la cadena es un nilad, su resultado se convierte en el argumento y el enlace se ejecuta de forma monádica. Si no hay nilad principal, se usa 0 en su lugar.
Dennis
65

Hojas de cálculo de Google, 11 5 bytes

Fórmula de hoja de trabajo anónima que no toma entradas y salidas en la celda que contiene la fórmula

=4/(2

Como una fórmula única, esto se evalúa como una pila de llamadas que se parece un poco a

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

Sin embargo, cuando esta fórmula de hoja de trabajo se duplica, esta pila de llamadas se evalúa como

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

Por supuesto, una implicación de usar este método es que una vez que se repite más de una vez, en la tercera y todas las siguientes iteraciones del problema, la pila de llamadas alcanzará =4/(2=4)y, por lo tanto, evaluará =4/0y arrojará un #DIV/0!error

-6 bytes cambiando a álgebra lejos de la =DIVIDE(4,2fórmula

Taylor Scott
fuente
18
Nunca esperé que Google Sheets hubiera tenido uso en el código de golf. Solución inteligente
hucancode
11
@hucancode lo realmente interesante de esto es que, debido a que Excel arroja un error si excluye el seguimiento ), esta respuesta es la única respuesta de Google Sheets que he visto que no se traduce en una respuesta de Excel
Taylor Scott
45

05AB1E , 2 bytes

Original

XO

Pruébalo en línea!

Doblado

XOXO

Pruébalo en línea!

Explicación

X empuja 1 a la pila.
O suma la pila.

Emigna
fuente
48
XOXO, buena solución.
Sr. Xcoder
44
¡Lo hiciste a propósito, mientras sabías que también podrías haberlo usado 1O!
Erik the Outgolfer
12
¿Dónde encuentran ustedes estos idiomas ridículos?
DavidB
77
@DavidB Por lo general, los escriben.
Federico Poloni
3
@DavidB Sí, las personas inventan idiomas para codegolf, y sí, pueden obtener puntajes impresionantemente bajos, pero hacer cosas tontas como inventar un idioma después del desafío de resolverlo en 1 byte no está permitido, y la programación en estos idiomas generalmente está lejos de ser fácil.
Esolanging Fruit
43

C (gcc), 37 bytes

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

El archivo no contiene una nueva línea final.

Versión duplicada, para resaltar la sintaxis:

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

Enlaces TIO: simple , doble .

Pomo de la puerta
fuente
3
¿Puedes explicar cómo funciona esto? ¿Por qué el comentario nunca sería comentado?
phil294
10
Cuando dobla el código fuente, el /*comentario lo hace //, lo que significa que no se comenta lo siguiente i=1. Esto es más fácil de ver si coloca la versión duplicada del código en un resaltador de sintaxis
musicman523
1
Whoa, un truco tentativo de definición. Agradable.
aschepler
39

Hexagonía , 7 bytes.

/)!@.).

Imprime 1 regularmente y luego 2 duplicados.

Pruébalo en línea! o Pruébelo duplicado en línea!

Versiones ampliadas:

Regular:

 / )
! @ .
 ) .

Doblado:

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

El programa normal sigue la ruta: /)!.@que incrementa el borde de la memoria (todos se inicializan a cero) y luego imprime su valor numérico. Sigue el programa duplicado: en su lugar, /.)/)!@incrementa el borde dos veces antes de imprimir.

FryAmTheEggman
fuente
66
Wow buen trabajo. ¿Supongo que lo encontraste a mano? Como 6 bytes están en el rango de fuerza bruta, pensé en probarlo, y en realidad hay una solución de 4 bytes: [@!)(y algunas soluciones de 570 de 5 bytes). Dado que en realidad se tomó la molestia de encontrar una solución a mano, me complace que publique la solución de 4 bytes.
Martin Ender
1
Si está interesado, aquí está la lista completa que incluye el número impreso: pastebin.com/TtRujjA4
Martin Ender
36

Braingolf , 1 byte

+

Pruébalo en línea!

¡Ahora estamos hablando!

Salidas 20, o 40cuando la fuente se duplica.

Explicación

+ es, por supuesto, el operador "suma", "agregar" o "más", en Braingolf, sin embargo, tiene funciones diádicas, monádicas y niládicas.

Cuando hay al menos 2 elementos en la pila, es diádico y sumará los 2 elementos superiores de la pila.

Cuando solo hay 1 elemento en la pila, es monádico y duplicará el elemento.

Cuando no hay elementos en la pila, ¡es niládico y empuja 20!

¿Por qué empuja 20? Bueno, porque un programa Braingolf vacío simplemente imprime una nueva línea, y el valor ASCII de una nueva línea es 10, así que pensé que haría un +impulso niládico 20, por lo que es como si fuera monádico en la nueva línea implícita (aunque no esté en todas)

Por lo tanto:

+   No input
+   Niladic sum, Push 20
    Implicit output

Y cuando se duplicó:

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

Haskell , 26 18 bytes

main=print$0
 +1--

Pruébalo en línea!

Doblado:

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

Pruébalo en línea!

Encontré esta versión mientras respondía la versión triple del desafío .


Versión de 26 bytes sin abuso de comentarios:

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

Pruébalo en línea! Impresiones 1.

En el patrón de vigilancia del identificador nse establece en 1y nmainpara 2, a continuación, print nimprime 1.

Programa doble:

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

Pruébalo en línea! Impresiones 2.

En el primer guardia patrón nuevamente nse establece en 1y nmainpara 2, sin embargo, la sentencia de impresión se ha convertido print nmain, por lo que 2se imprime. Debido a que las declaraciones de identificador en un protector de patrón se evalúan como verdaderas, nunca se puede alcanzar el segundo protector de patrón.

Laikoni
fuente
23

Mathematica, 5 bytes

(1+1)

salidas 2 y (1 + 1) (1 + 1) salidas 4

y por supuesto (como muchos de ustedes preguntaron)

Mathematica, 3 bytes

(2)
J42161217
fuente
1
Funciona (2)?
geokavel
99
@geokavel 2y un espacio funcionarían, como lo haría, +1pero debe tenerse en cuenta que todos estos suponen el entorno del cuaderno de Mathematica
Martin Ender
1
Si lo ejecuta en OpenCloud Mathematica Sandbox, se convierte en un solo espacio x, de modo que se 2 genera 2y se 2 2 convierte en 2x2 impresiones 4. Puede agregarlo como una solución alternativa.
Sr. Xcoder
2
(2)funciona igual de bien
Sr. Xcoder
66
2 funciona igual de bien
alephalpha
17

Brain-Flak , 6 bytes

({}())

Pruébalo en línea!

Explicación

Lo que esto hace debe quedar bastante claro. {}toma un valor de la pila, que implícitamente es cero para empezar, le ()agrega uno y (...)empuja el valor. En la segunda ejecución, dado que ya hay un 1 en la pila, esto solo agrega otro 1 para formar dos. De hecho, si copia el código nveces, siempre saldrá n.

Sriotchilism O'Zaic
fuente
17

> <> , 7 6 bytes

-1 byte gracias a Teal pelican

\ln;
0

Pruébalo en línea!
¡Pruébalo doblado!

Explicación

Usé un 0pero podría también haber usado 1- 9, a- fporque todos empujan un solo valor en la pila.

No doblado:

\ 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

Doblado:

\ 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
fuente
55
Bienvenido a PPCG! Esta es una excelente primera respuesta, con una explicación muy bien pensada y un buen código. ¡Te ganaste mi voto!
Sr. Xcoder
1
¡Acabo de ver esta respuesta y es genial! Muy buena mejora en la pareja> <> respuestas (¡incluida la mía!) - Echa un vistazo al enlace TIO aquí; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Todo lo que he hecho es mover el 0 al espacio y ahorra 1 byte. :)
Teal pelican
1
@Tealpelican ¡Gracias! No puedo creer que me perdí una mejora tan simple. (En realidad puedo, ¡no uso mucho> <> y soy nuevo en el golf!) Para ser honesto, realmente no miré las otras soluciones en detalle, vi que eran relativamente grandes y decidí intente jugar al golf ya que sería más fácil competir.
Borka223
1
¡Buena respuesta! Solo quería señalar que esto usa el mismo método que mi respuesta de Klein . (No te
acuso de copiarme
14

Retina , 3 bytes


1

Pruébalo en línea!

Impresiones 2. Doblarlo imprime 4.

El 1puede ser reemplazado por casi cualquier otra cosa.

Explicación


1

Reemplaza la entrada vacía con 1.


Cuenta el número de coincidencias vacías en las 1que hay dos (una antes 1y otra después).

Si duplicamos el programa, obtenemos una etapa adicional como la primera. Esta vez inserta un 1antes y un después del inicial, dando 111. Cuando ahora contamos el número de coincidencias de la expresión regular vacía, obtenemos cuatro de ellas.

Martin Ender
fuente
14

Python REPL, 2 bytes

También funciona en Pip, Dyalog APL, JavaScript, J y R

+1

Estoy haciendo un TIO en este momento No pude obtener respuestas de Python para trabajar en TIO

Sriotchilism O'Zaic
fuente
1
+1es exactamente lo que haré: P pero maldita sea, me ninja por un minuto> <
HyperNeutrino
1
Esto también funciona en Dyalog APL.
Kritixi Lithos
Polygolt
Mr. Xcoder
1
¿No podrías usar esto y esto para una REPL?
totalmente humano
1
Tienes mi +1.
Federico Poloni
12

Neim , 1 byte

>

Simplemente incrementa la parte superior de la pila.

La pila se puede imaginar como una cantidad infinita de ceros para comenzar, por lo que esto incrementa cero para obtener uno, y duplicado, lo incrementa nuevamente para obtener dos.

Pruébalo en línea!

Una solución alternativa:

Agrega 2, en lugar de 1.

Okx
fuente
12

JavaScript, 38 bytes

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


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

Benoit Esnard
fuente
1
¡Buena esa! ¿Podrías hacer i++?
Arnauld
@Arnauld: de hecho, ¡gracias por la sugerencia!
Benoit Esnard
12

Java8, 135 118 110 bytes

Single , imprime 8

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

Doblado , impresiones 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;}/**///

Vista previa de respuestas, 118 bytes

Single , imprime 1

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

Doblado , impresiones 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{}/**///

Como funciona esto

El compilador de Java crea un único archivo para cada clase en el archivo fuente. Por lo tanto, simplemente puedo verificar si existe un recurso con el nombre B.class.


Respuesta original, 135 bytes

Single , imprime 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{}/**///

Doblado , impresiones 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
fuente
Lo que hiciste con el comentario es realmente genial. ¿Pero realmente necesitas la nueva línea?
vikarjramun
Oh nvm, no noté el comentario de una sola línea en la segunda línea
vikarjramun
11

Python 2 , 32 bytes

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

Pruébalo en línea!

Doble código fuente

Explicación

Esto abre el archivo de código fuente en modo agregar

open(__file__,"a")

Luego encontramos la posición actual en el archivo, esto será al final del archivo debido a la apertura en modo de agregar

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

Imprimimos esta longitud

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

Y agregue un comentario, para que duplicar el código fuente no ejecute más código

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

Excel VBA, 12 bytes

Función de ventana inmediata anónima VBE que toma entradas y salidas al rango [A1]. El valor predeterminado del rango [A1]es ""(cadena vacía) y después de una ejecución, lo siguiente establece esto 1e incrementa 1con todas las ejecuciones posteriores.

[A1]=[A1+1]:

De entrada y salida

Versión única

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

Versión duplicada

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

Casco , 3 bytes

|1"

Pruébalo en línea!

Una idea original, por lo que he visto en otras respuestas.

Explicación

|en Husk es un operador "o" que devuelve su segundo argumento si es verdadero, de lo contrario el primer argumento. Cuando se aplica a argumentos de diferentes tipos, primero los transforma a todos en números: la transformación de cadenas (y listas en general) se realiza calculando su longitud.

En el programa original aplicamos |a 1 y una cadena vacía, que se convierte a 0: el resultado es 1.

En el programa duplicado aplicamos |a 1 y la cadena "| 1", que se convierte a 2: el resultado es 2.

León
fuente
7

CJam, 3 bytes

5],

Pruébalo en línea

Encapsula 5 en la matriz. Longitud de retorno de la matriz. Cuando duplica el código, la longitud devuelta anteriormente, 1, ya está en la pila, por lo que obtiene una matriz de [1,5], que devuelve la longitud 2.

geokavel
fuente
7

Wumpus , 4 bytes

" O@

Pruébalo en línea!

" O@" O@

Pruébalo en línea!

Se imprime el código normal 32y se imprime el duplicado 64.

Explicación

"funciona como lo hace en muchos otros Fungeoids: alterna el modo de cadena, donde cada código de carácter individual se inserta en la pila, en lugar de ejecutar el comando. Sin embargo, en contraste con la mayoría de los otros Fungeoids, el campo de juego de Wumpus no se ajusta, por lo que la IP se reflejará en el extremo y rebotará de un lado a otro a través del código.

Entonces, para el programa único, el siguiente código se ejecuta realmente:

" O@O " O@

La cuerda empuja 32, 79, 64, 79, 32. Entonces el espacio no hace nada, Oimprime 32y @termina el programa.

Para el programa duplicado, la cadena se termina antes de que la IP se recupere, por lo que el código solo se recorre una vez:

" O@" O@

Esta vez, la cadena empuja 32, 79, 64, Oimprime 64y @termina el programa.

Esta parece ser la única solución de 4 bytes.

Martin Ender
fuente
6

,,,, 2 bytes

1∑

Explicación

1∑

1   push 1
 ∑  pop everything and push the sum of the stack
totalmente humano
fuente
¿Me estoy perdiendo algo o no sería 3 para un código fuente duplicado?
Taylor Scott
@ TaylorScott Lo siento, debería haber notado que aparece todos los elementos en la pila.
totalmente humano
1
Eso tiene mucho más sentido - gracias por la aclaración
Taylor Scott
Sigma es de dos bytes, ¿no?
nishantjr
1
@nishantjr ,,, utiliza su propia página de códigos, que está vinculada en el encabezado.
totalmente humano
6

Lote, 13 bytes

@echo %~z0
:

Explicación: se %~z0expande a la longitud del archivo de origen, por lo que duplicar el archivo simplemente duplica la longitud. La segunda línea define una etiqueta vacía, que no hace nada. Cuando el archivo se duplica, se convierte en una etiqueta con nombre @echo %~z0, mientras que la tercera línea es otra etiqueta vacía.

Neil
fuente
6

QBasic,  44  28 bytes

No hay nueva línea al final. Salidas 4cuando es simple, 8cuando se duplica.

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

Explicación

Para la versión individual:

  • 4 es un número de línea
  • READ x,ytoma los dos primeros valores de la DATAdeclaración y los almacena en xy y. Así, xconsigue 4y yconsigue 0.
  • ?x+y agrega los dos números y los imprime.
  • END sale del programa

En la versión duplicada, la DATAdeclaración se convierte en DATA 4,04, que se asigna 4a ambos xy y, por lo tanto, es x+yigual en su 8lugar.

DLosc
fuente
6

Befunge-98 , 5 bytes

90g.@

Pruébalo en línea!

gobtiene el valor del carácter en la coordenada (9, 0) en Funge-Space; .lo imprime como un número entero y @detiene el programa. En la versión no duplicada, (9, 0) está fuera de los límites del programa, y ​​Funge-Space fuera del programa se inicializa al valor predeterminado de un espacio, por lo que imprimimos 32. En la versión duplicada, (9, 0) es el @personaje, entonces imprimimos 64.

betaveros
fuente
Esto no era lo que esperaba que fuera la mejor respuesta de Befunge-98 ... ¡respuesta realmente creativa!
MildlyMilquetoast
Hablé demasiado pronto ;)
MildlyMilquetoast