Eu duplico a fonte, você duplica a saída!

127

Sua tarefa, se você deseja aceitá-la, é escrever um programa que produza um número inteiro positivo (maior que 0). A parte complicada é que, se eu duplicar seu código-fonte, a saída deve ser o dobro do número inteiro original.

Regras

  • Você deve criar um programa completo . Ou seja, sua saída deve ser impressa em STDOUT.

  • A fonte inicial deve ter pelo menos 1 byte de comprimento.

  • Ambos os números inteiros devem estar na base 10 (é proibido produzi-los em qualquer outra base ou com notação científica).

  • Seu programa não deve receber entrada (ou ter uma entrada vazia não utilizada).

  • É permitida a saída de números inteiros com espaços à direita / à direita.

  • Você não pode assumir uma nova linha entre cópias da sua fonte.

  • Isso é , então o código mais curto (original) em cada idioma vence!

  • Aplicam-se lacunas padrão .

Exemplo

Digamos que seu código fonte seja ABCe sua saída correspondente seja 4. Se eu escrever ABCABCe executá-lo, a saída deve ser 8.

Entre os melhores

Isso usa o layout do @ manatwork .

Mr. Xcoder
fonte
2
@ Mr.Xcoder Então vou ter que incluir um na minha própria fonte.
steenbergh
3
@ Mr.Xcoder Acho que você deveria ter impedido a leitura do seu próprio código-fonte.
caird coinheringaahing
1
Ele só precisa funcionar quando dobrado uma vez ? Nós não precisamos de apoio n muitas duplicações?
Cody Gray
6
@ Daniel Digamos que sua fonte é `` (programa vazio) e produz 5. Se você dobrar, sua fonte é `` (programa vazio) e isso também produz 5, não importa o que você faça. Dito isto, um programa vazio duplicado ainda é o programa vazio e sempre produz a mesma saída, exceto no caso em que o programa vazio significa outra coisa (um gerador de números aleatórios, por exemplo), que não poderia ser válido de qualquer maneira.
Mr. Xcoder
1
Isso não deve ser difícil para esolangs que despejam automaticamente o topo da pilha após o término do programa.
MD XF

Respostas:

152

Python 2 , 33 bytes

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

Experimente online!

Tente dobrar

Python 3 , 28 bytes

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

Experimente online!

Tente dobrar

Explicação

Isso abre o código fonte usando open(__file__)e obtém seu comprimento usando leno #impede que qualquer código adicional seja lido. Quando a fonte é duplicada, também é o comprimento.

Sriotchilism O'Zaic
fonte
28
Uau, estou atordoado ... Isso é tão brilhante!
Mr. Xcoder
2
32 bytes . Funciona usando o modo de acréscimo, definindo a posição atual no final do arquivo. tell()retorna a posição atual no arquivo
Halvard Hummel 29/08
@HalvardHummel Nice. No entanto, não tenho intenção de atualizar esta resposta. Se você gostaria de publicá-lo por conta própria, é substancialmente diferente na minha opinião.
Sriotchilism O'Zaic
@WheatWizard Isso é compreensível, eu fiz uma separada resposta
Halvard Hummel
96

Geléia , 1 byte

Experimente online!

ou tente duas vezes!

Não tenho ideia de como isso funciona, mas aparentemente funciona.

DJMcMayhem
fonte
55
O momento em que você não tem idéia o que você escreveu ...
Mr. Xcoder
2
Droga, eu pensei nisso 8 minutos tarde demais.
HyperNeutrino
17
Todos os links precisam de um argumento. Se o primeiro elemento da cadeia for um nilad, seu resultado se tornará o argumento e o link será executado monadicamente. Se não houver nilad à esquerda, 0 será usado.
Dennis
65

Planilhas Google, 11 5 bytes

Fórmula de planilha anônima que não recebe nenhuma entrada e sai na célula que contém a fórmula

=4/(2

Como uma fórmula única, isso avalia uma pilha de chamadas que se parece um pouco com

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

No entanto, quando essa fórmula da planilha é duplicada, essa pilha de chamadas é avaliada em

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

Obviamente, uma implicação do uso desse método é que, uma vez repetido mais de uma vez, na terceira e em todas as iterações seguintes do problema, a pilha de chamadas alcançará =4/(2=4)e, assim, avaliará =4/0e lançará um #DIV/0!erro

-6 bytes mudando para álgebra longe da =DIVIDE(4,2fórmula

Taylor Scott
fonte
18
Nunca esperou que o Planilhas Google usasse no código de golfe. Solução inteligente
hucancode
11
@ hucancode A parte realmente interessante sobre isso é que, como o Excel gera um erro, se você excluir os últimos ), essa resposta é a única resposta do Google Sheets que eu vi que não se traduz em resposta do Excel
Taylor Scott
45

05AB1E , 2 bytes

Original

XO

Experimente online!

Dobrado

XOXO

Experimente online!

Explicação

X empurra 1 para a pilha.
O soma a pilha.

Emigna
fonte
48
XOXO, boa solução.
Mr. Xcoder
4
Você fez isso de propósito, enquanto sabia que também poderia ter usado 1O!
Erik the Outgolfer
12
Onde vocês encontram essas línguas ridículas?
DavidB
7
@ DavidDB Normalmente, eles escrevem.
Federico Poloni
3
@DavidB Sim, as pessoas inventam linguagens para codegolf, e sim, elas podem obter pontuações impressionantemente baixas, mas fazer coisas tolas como inventar uma linguagem após o desafio de resolvê-la em 1 byte não é permitido e a programação nessas linguagens geralmente está longe de fácil.
Esolanging Fruit
43

C (gcc), 37 bytes

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

O arquivo não contém uma nova linha à direita.

Versão dobrada, para realçar a sintaxe:

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

Links TIO: simples , duplos .

Maçaneta da porta
fonte
3
Você pode explicar como isso funciona? por que o comentário seria descomentado?
phil294
10
Quando você duplica o código-fonte, o /*comentário é comentado por //, o que significa que o seguinte não i=1é comentado. Isto é mais fácil de ver se você colocar a versão duplicada do código em uma sintaxe marcador
musicman523
1
Uau, um truque de definição provisório. Agradável.
aschepler
39

Hexagonia , 7 bytes

/)!@.).

Imprime 1 regularmente e depois duas vezes.

Experimente online! ou Experimente dobrar online!

Versões expandidas:

Regular:

 / )
! @ .
 ) .

Dobrado:

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

O programa regular segue o caminho: /)!.@que incrementa uma borda da memória (todas são inicializadas em zero) e depois imprime seu valor numérico. O programa duplicado é o seguinte: /.)/)!@que incrementa a borda duas vezes antes de imprimir.

FryAmTheEggman
fonte
6
Uau, bom trabalho. Eu suponho que você achou isso à mão? Como 6 bytes está na faixa de força bruta, pensei em tentar, e há realmente uma solução de 4 bytes: [@!)(e algumas soluções de 570 5 bytes). Como você realmente se deu ao trabalho de encontrar uma solução manualmente, estou perfeitamente feliz por você postar a solução de 4 bytes.
Martin Ender
1
Se você estiver interessado, aqui está a lista completa, incluindo o número impresso: pastebin.com/TtRujjA4
Martin Ender
36

Braingolf , 1 byte

+

Experimente online!

Agora estamos conversando!

Saídas 20ou 40quando a fonte é duplicada.

Explicação

+ é obviamente o operador "soma", "adição" ou "mais", em Braingolf, no entanto, possui funções diádicas, monádicas e niládicas.

Quando houver pelo menos 2 itens na pilha, é diádico e somará os 2 principais itens da pilha.

Quando houver apenas 1 item na pilha, é monádico e dobrará o item.

Quando não há itens na pilha, é niládico e empurra 20!

Por que ele empurra 20? Bem, porque um programa Braingolf vazio simplesmente imprime uma nova linha, e o valor ASCII de uma nova linha é 10, então eu pensei em fazer o niladic +push 20, então é como se estivesse sendo monádico na nova linha implícita (mesmo que não esteja em tudo)

Portanto:

+   No input
+   Niladic sum, Push 20
    Implicit output

E quando dobrado:

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

Haskell , 26 18 bytes

main=print$0
 +1--

Experimente online!

Dobrado:

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

Experimente online!

Encontrei esta versão ao responder a versão tripple do desafio .


Versão de 26 bytes sem abuso de comentário:

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

Experimente online! Imprime 1.

Na proteção de padrão, o identificador né definido como 1e nmainpara 2, em seguida, print nimprime 1.

Programa duplo:

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

Experimente online! Imprime 2.

No primeiro padrão, a proteção novamente né configurada para 1e nmainpara 2, no entanto, a declaração de impressão se tornou print nmain, e 2é impressa. Como as declarações de identificador em uma proteção de padrão são avaliadas como verdadeiras, a segunda proteção de padrão nunca pode ser alcançada.

Laikoni
fonte
23

Mathematica, 5 bytes

(1+1)

saídas 2 e (1 + 1) (1 + 1) saídas 4

e claro (como muitos de vocês pediram)

Mathematica, 3 bytes

(2)
J42161217
fonte
1
Funciona (2)?
geokavel
9
@geokavel 2e um espaço funcionaria, como seria +1, mas deve-se notar que todos estes assumem ambiente caderno de Mathematica
Martin Ender
1
Se você executá-lo no OpenCloud Mathematica Sandbox, um único espaço torna-se x, de tal forma que 2 as saídas 2e 2 2 torna-se 2x2 que as impressões 4. Você pode adicionar isso como uma solução alternativa.
Mr. Xcoder
2
(2)funciona também.
Mr. Xcoder
6
2 funciona também.
Alephalpha
17

Flak cerebral , 6 bytes

({}())

Experimente online!

Explicação

O que isso faz deve ser bem claro. {}pega um valor da pilha, que implicitamente zero para começar, ()adiciona um a ele e (...)empurra o valor. Na segunda execução, uma vez que já existe um 1 na pilha, apenas adiciona mais 1 para fazer dois. De fato, se você copiar o código nvezes, ele sempre será exibido n.

Sriotchilism O'Zaic
fonte
17

> <> , 7 6 bytes

-1 byte graças ao pelicano Teal

\ln;
0

Experimente online!
Experimente dobrou!

Explicação

Eu usei um 0mas também poderia ter usado 1- 9, a- fporque todos eles colocam um único valor na pilha.

Não dobrado:

\ 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

Dobrado:

\ 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
fonte
5
Bem-vindo ao PPCG! Esta é uma ótima primeira resposta, com uma explicação muito bem pensada e um bom código. Você ganhou meu voto!
Mr. Xcoder
1
Acabei de ver essa resposta e é ótimo! Melhoria muito boa no par> <> respostas (incluindo a minha!) - Dê uma olhada no link do TIO aqui; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A - Tudo o que fiz foi mover o 0 para o espaço e economizar 1 byte. :)
Teal pelican
1
@Tealpelican Thanks! Não acredito que perdi uma melhoria tão simples. (Na verdade, eu posso, não uso muito> e sou novo no golfe!) Para ser sincero, não olhei para as outras soluções em detalhes, vi que elas eram relativamente grandes e decidi tente resolver o problema, pois seria mais fácil competir.
Borka223
1
Boa resposta! Só queria ressaltar que isso usa o mesmo método da minha resposta Klein . (Não te acusando de me copiando Se alguém foi que apenas apontando duas respostas semelhantes.)
Sriotchilism O'Zaic
14

Retina , 3 bytes


1

Experimente online!

Imprime 2. Dobrar é impresso 4.

O 1pode ser substituído por praticamente qualquer outra coisa.

Explicação


1

Substitui a entrada vazia por 1.


Conta o número de correspondências vazias em 1que são duas (uma antes 1e uma depois).

Se dobrarmos o programa, obteremos um estágio adicional como o primeiro. Desta vez, ele insere um 1antes e depois do inicial, dando 111. Quando agora contamos o número de correspondências da regex vazia, obtemos quatro delas.

Martin Ender
fonte
14

REPL Python, 2 bytes

Também funciona em Pip, Dyalog APL, JavaScript, J e R

+1

Estou fazendo um TIO agora. Não consegui fazer o python repl funcionar no TIO

Sriotchilism O'Zaic
fonte
1
+1é exatamente o que vou fazer: P mas danado, você me ninja'd por cerca de um minuto> <
HyperNeutrino
1
Isso também funciona no Dyalog APL.
Vacas quack
Polygolt
Mr. Xcoder
1
Você não poderia usar isso e isso para um REPL?
totallyhuman
1
Você tem o meu +1.
Federico Poloni
12

Neim , 1 byte

>

Simplesmente incrementa a parte superior da pilha.

A pilha pode ser imaginada como uma quantidade infinita de zeros para começar, portanto, isso aumenta zero para obter um e dobrou, incrementa novamente para obter dois.

Experimente online!

Uma solução alternativa:

Adiciona 2, em vez de 1.

Okx
fonte
12

JavaScript, 38 bytes

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


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

Benoit Esnard
fonte
1
Agradável! Você poderia apenas fazer i++?
Arnauld
@ Arnauld: de fato, obrigado pela sugestão!
Benoit Esnard
12

Java8, 135 118 110 bytes

Individual , impressões 8

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

Dobrado , impressões 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;}/**///

Visualizações de resposta, 118 bytes

Único , imprime 1

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

Dobrado , impressões 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 isso funciona

O compilador java cria um único arquivo para cada classe no arquivo de origem. Portanto, posso simplesmente verificar se existe um recurso com o nome B.class.


Resposta original, 135 bytes

Único , 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{}/**///

Dobrado , impressões 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
fonte
O que você fez com o comentário é muito legal. Mas você realmente precisa da nova linha?
vikarjramun
Oh nvm, não notou o comentário de uma linha na segunda linha
vikarjramun
11

Python 2 , 32 bytes

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

Experimente online!

Código fonte duplo

Explicação

Isso abre o arquivo de código-fonte no modo de acréscimo

open(__file__,"a")

Em seguida, encontramos a posição atual no arquivo, que será no final do arquivo devido à abertura no modo de acréscimo

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

Nós imprimimos esse comprimento

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

E adicione um comentário, para que dobrar o código fonte não execute mais código

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

Excel VBA, 12 bytes

Função de janela imediata anônima do VBE, que recebe as entradas e saídas para o intervalo [A1]. O valor padrão do intervalo [A1]é ""(string vazia) e após uma execução, o seguinte define 1e incrementa 1com todas as execuções subseqüentes.

[A1]=[A1+1]:

Entrada / Saída

Versão Única

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

Versão dobrada

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

Casca , 3 bytes

|1"

Experimente online!

Uma ideia original, pelo que vi em outras respostas.

Explicação

|in Husk é um operador "ou" que retorna seu segundo argumento, se for válido, caso contrário, o primeiro argumento. Quando aplicada a argumentos de tipos diferentes, primeiro transforma todos eles em números: a transformação de strings (e listas em geral) é feita calculando seu comprimento.

No programa original, aplicamos |1 e uma string vazia, que é convertida em 0: o resultado é 1.

No programa duplicado, aplicamos |a 1 e a string "| 1", que é convertida em 2: o resultado é 2.

Leo
fonte
7

CJam, 3 bytes

5],

Experimente Online

Encapsula 5 na matriz. Retorna o comprimento da matriz. Quando você duplica o código, o comprimento retornado anteriormente, 1, já está na pilha, então você obtém uma matriz de [1,5], que retorna o comprimento 2.

geokavel
fonte
7

Wumpus , 4 bytes

" O@

Experimente online!

" O@" O@

Experimente online!

O código normal é impresso 32e o dobro é impresso 64.

Explicação

"funciona como em muitos outros Fungeoids: alterna o modo de sequência, em que cada código de caractere individual é enviado à pilha, em vez de executar o comando. No entanto, em contraste com a maioria dos outros Fungeoids, o campo de jogo de Wumpus não se destaca, então o IP refletirá no final e retornará pelo código.

Portanto, para o programa único, o seguinte código é realmente executado:

" O@O " O@

A corda empurra 32, 79, 64, 79, 32. Então o espaço não faz nada, Oimprime 32e @finaliza o programa.

Para o programa duplicado, a sequência é terminada antes que o IP retorne, portanto, o código é atravessado apenas uma vez:

" O@" O@

Desta vez, a string empurra 32, 79, 64, Oimprime 64e @encerra o programa.

Essa parece ser a única solução de 4 bytes.

Martin Ender
fonte
6

,,,, 2 bytes

1∑

Explicação

1∑

1   push 1
 ∑  pop everything and push the sum of the stack
totalmente humano
fonte
Estou faltando alguma coisa ou não seria 3 para um código-fonte duplicado?
Taylor Scott
@TaylorScott Sinto muito, eu deveria ter notado que aparece todos os elementos na pilha.
totallyhuman
1
Isso faz muito mais sentido - obrigado pelo esclarecimento #
Taylor Scott
Sigma é de dois bytes, não?
Nishantjr 21/07
1
@nishantjr ,,, usa sua própria página de código, que está vinculada no cabeçalho.
totallyhuman
6

Lote, 13 bytes

@echo %~z0
:

Explicação: se %~z0expande para o comprimento do arquivo de origem, portanto, a duplicação do arquivo simplesmente dobra o comprimento. A segunda linha define um rótulo vazio, que não faz nada. Quando o arquivo é duplicado, ele se torna um rótulo chamado @echo %~z0, enquanto a terceira linha é outro rótulo vazio.

Neil
fonte
6

QBasic,  44  28 bytes

Não nova linha no final. Saídas 4quando individuais, 8quando duplicadas.

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

Explicação

Para a versão única:

  • 4 é um número de linha.
  • READ x,ypega os dois primeiros valores da DATAinstrução e os armazena em xe y. Assim, xrecebe 4e yrecebe 0.
  • ?x+y adiciona os dois números e os imprime.
  • END sai do programa.

Na versão dobrada, a DATAdeclaração se torna DATA 4,04, que atribui 4a ambos xe y, portanto, torna-se x+yigual 8.

DLosc
fonte
6

Befunge-98 , 5 bytes

90g.@

Experimente online!

gobtém o valor do caractere na coordenada (9, 0) no Funge-Space; .imprime como um número inteiro e @interrompe o programa. Na versão não dobrada, (9, 0) está fora dos limites do programa, e o Funge-Space fora do programa é inicializado com o valor padrão de um espaço, então imprimimos 32. Na versão dobrada, (9, 0) é o @caractere, então imprimimos 64.

betaveros
fonte
Não era isso que eu esperava que a melhor resposta do Befunge-98 fosse ... resposta realmente criativa!
MildlyMilquetoast
Falei cedo demais ;)
MildlyMilquetoast