Sua tarefa, se você deseja aceitá-la, é escrever um programa que produza um número inteiro positivo (maior que 0). Se o código fonte for duplicado, a saída deve permanecer a mesma. A parte complicada é que, se o código fonte for digitado três vezes (triplicado?), A saída será multiplicada por 3.
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.
Os zeros à esquerda são permitidos apenas se o número de dígitos for consistente, por exemplo: 001 - 001 - 003 ou 004 - 004 - 012
Você não pode assumir uma nova linha entre cópias da sua fonte.
Isso é código-golfe , 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 Abc
e sua saída correspondente seja 4
. Se eu escrever AbcAbc
e executá-lo, a saída ainda deve ser 4
. No entanto, se eu escrever AbcAbcAbc
e executá-lo, a saída deve ser 12
.
Roubado descaradamente Derivado do desafio do Sr. Xcoder
fonte
int i=1;print i;
), o código duplicado de (int i=1;print i;int i=1;print i;
) deve gerar o mesmo número que o código original e, quando o código é triplicado para (int i=1;print i;int i=1;print i;int i=1;print i;
), deve mostrar o número multiplicado por 3Respostas:
Wumpus , 6 bytes
Experimente online!
Experimente dobrou!
Experimente triplicou!
Imprime
1
e3
.Explicação
Encontrei uma tonelada de soluções de 6 bytes por pesquisa de força bruta, mas nenhuma por 5 bytes. Isso não significa necessariamente que não existem 5 bytes, mas eles provavelmente usariam caracteres estranhos ou algo assim.
Acabei escolhendo esta solução porque ela não imprime nenhum zeros à esquerda (a maioria deles faz) e possui algum fluxo de controle interessante. Vamos começar com o programa único:
Portanto, o código executado é:
Bastante fácil. Agora, o programa duplicado. Como a primeira linha é anexada à segunda linha, a grade se estende à largura 5 (e altura 3), o que altera significativamente o fluxo de controle:
O IP percorre esse loop exatamente uma vez, então o código executado é:
Finalmente, o programa triplicado é bastante semelhante ao duplicado, mas temos alguns comandos mais importantes nessa terceira linha:
Portanto, o código executado é:
fonte
Casca , 5 bytes
Experimente online!
Repetido duas vezes!
Repetido três vezes!
Explicação
É muito difícil construir um programa repetível no Husk. Como o sistema de tipos proíbe uma função que possa ser aplicada a si próprio, tenho que, de alguma forma, permitir que a primeira parte avalie uma função e o restante avalie um valor, e os tipos de built-ins existentes são projetados para evitar isso. tipo de ambiguidade. Os tokens do programa são
K
, que constrói uma função constante.K a b
é equivalente aa
.Σ
, Que leva um número inteiro n e retorna a n th número triangular.+
, que adiciona dois números.1
, que é o literal 1.O programa original é interpretado assim:
A
(K+)
é uma função sem sentido que é comida pela primeiraK
.O programa repetido duas vezes é interpretado da seguinte maneira:
A função entre parênteses é novamente consumida pela primeira
K
.O programa repetido três vezes é interpretado da seguinte maneira:
fonte
K
em um programa, a inferência de tipos torna-se muito lento, porque cada um deles poderia "comer" qualquer número de fichas e o intérprete vai tentar todas as combinações ...Geléia ,
75 bytesExperimente online!
Experimente dobrou!
Experimente triplicou!
Como funciona
fonte
Haskell , 24 bytes
Impressões
1
: Experimente online!Também imprime
1
: Experimente online!Impressões
3
: Experimente online!fonte
Cubix , 5 bytes
Experimente online: uma vez , duas vezes , três vezes .
Explicação
Cubix é uma linguagem baseada em pilha cujas instruções são colocadas ao redor da parte externa de um cubo. Importante notar é que a pilha é inicialmente preenchida com zeros infinitos, o que nos permite "extrair valores do nada" com os operadores, em vez de empurrá-los explicitamente.
Devo admitir que isso foi encontrado por um brutador; Eu nunca teria encontrado isso sozinho. De fato, @MartinEnder foi quem me pediu para tentar forçar brutos, pois estava procurando essa solução sem sorte. Essa é a única solução que o bruto encontrou, e acredito que seja a única solução mais curta do Cubix.
Programa único
Assista correr!
O programa original cabe em um cubo de unidade. Aqui está a rede desdobrada:
O IP (ponteiro de instrução) inicia na face mais à esquerda (a
<
) na direção leste. O<
imediatamente aponta para o oeste e envolve oP
.P
é exponenciação e, como não há nada na pilha, o intérprete obtém dois 0 se calcula 0 0 , que é 1 de acordo com o JavaScript.O
depois imprime esse valor e@
termina o programa.Programa duplo
Assista correr!
O programa de 10 bytes é muito longo para caber em um cubo de unidade e, portanto, é expandido para um cubo de tamanho 2:
Como antes, o IP começa no canto superior esquerdo da face mais à esquerda. Desta vez, a primeira instrução é
P
, que empurra um 1 como antes. A seguir)
, incrementa o item superior, transformando-o em um 2 . Em seguida,<
vira o IP e ele atinge)
novamente, transformando o 2 em um 3 .Aqui é onde fica interessante.
P
aumenta o segundo item do topo ao poder do primeiro item, que fornece 0 3 = 0 . Em seguida, o IP passa para a face mais à direita e passa por dois no-ops.
antes de atingir outroP
. Aqui vemos outra peculiaridade do Cubix: operadores binários (comoP
) não removem seus operandos da pilha. Portanto, como a pilha está agora[3, 0]
, calculamos 3 0 = 1 , queO
gera e@
finaliza o programa.Programa triplo
Assista correr!
Como no programa duplo, o triplo pode caber em um cubo tamanho 2:
Este programa inicia da mesma maneira que o anterior:
P
empurra 1 ,)
incrementa,<
aponta o IP oeste,)
incrementa novamente eP
agora empurra 0 . O IP é então enrolado<
na face mais à direita, o que não faz nada, pois o IP já está apontado para o oeste.Aqui está a única diferença do programa duplo: o
)
incrementa o 0 no topo da pilha para 1 . QuandoP
executa sua mágica novamente, desta vez calcula 3 1 = 3 .O
produz e@
termina, e provamos conclusivamente que a terceira vez é de fato o charme.fonte
Flak cerebral , 10 bytes
Experimente online!
Experimente dobrou!
Experimente triplicou!
Explicação:
Quando executamos isso uma vez, ele será colocado
(0 + 0 + 1) == 1
na pilha alternativa. Executou uma segunda vez, coloca o mesmo na pilha principal. Executar uma terceira vez, no entanto, ele avalia(1 + 1 + 1) == 3
e envia isso para a pilha alternativa e imprime implicitamente.fonte
SQL,
252423 bytes( -1 Byte Removido um caráter digitado incorretamente que sempre foi comentado e não fazer nada )
( -1 Byte Mudou
SELECT
aPRINT
como recomendado por Razvan Socol )Como funciona:
no SQL, você pode comentar as tags de comentário, assim:
vs
Código em 1 linha com comentários excluídos:
Primeira iteração:
SELECT 2-1
Saída:1
Segunda iteração:
SELECT 2-1*2+1
Saída:1
Terceira iteração:
SELECT 2-1*2+1*2+1
Saída:3
fonte
PRINT
em vez deSELECT
salvar um byte extra.SOGL V0.12 ,
754 bytesExperimente aqui!
Experimente dobrou!
Experimente triplicou!
Explicação:
fonte
ē1|
, mas aparentemente não há nenhum comando para bit a bit OU ...ē:2\+
: /05AB1E ,
65 bytesExperimente online! ou Tente dobrar! ou tente triplicar!
Explicação
Individual:
0 + (0 % 2 == 0) -> 1
Duplo:
1 + (1 % 2 == 0) -> 1
Triplo:
2 + (2 % 2 == 0) -> 3
fonte
% 2
na explicação tripla?2%_
certo?2 + (2 % 2 == 0) -> 2
mas2 + !(2 % 2 == 0) -> 3
(para sua explicação).2%_
é o mesmo queÈ
sim. Não sei o que você quer dizer sobre a explicação.2+(2%2==0) = 2+(0==0) = 2+1 = 3
. Provavelmente teria ficado mais claro se eu tivesse expandido os cálculos.> <> , 9 bytes
Experimente online!
Experimente dobrou!
Experimente triplicou!
Achei isso por sorte, usando a filosofia de que "se você fizer o caminho do peixe complicado o suficiente, eventualmente algo funcionará". As versões original e duplicada imprimem um 5, e a versão tripla imprime 1 e 5 para produzir 15 = 3 × 5. Aqui estão as versões multiplicadas, para sua leitura:
fonte
Python 2 ,
46 4539 bytesInspirado pela resposta de Halvard . Fico feliz que meu desafio tenha inspirado um novo, o que acho ainda mais interessante. Guardado 6 bytes graças a Kevin Cruijssen .
Experimente online!
Experimente dobrou!
Experimente triplicou!
Como funciona (desatualizado)
Quando é dobrado, o comprimento se torna 90 , mas o novo código é ignorado graças ao
#
, então ék==90
avaliado comoTrue
. Booleanos são subclasses de números inteiros em Python, entãok>>True
é equivalente ak>>1
, que é essencialmente k / 2 = 45 . Quando é triplicou, o novo código é novamente ignorado, portanto, o novo comprimento é de 135 , o que não se mudou porquek==90
avalia aFalse
, entãok>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k
, e k é impresso tal como está.Python 2 , 36 bytes
Essa foi uma sugestão de Aidan F. Pierce, com 38 bytes, e eu a joguei com 2 bytes. Não estou publicando isso como minha principal solução, porque não o criei sozinho.
Experimente online! Experimente dobrou! Experimente triplicou!
fonte
print open(__file__,"a").tell()/79*3|1#
possivelmente?R ,
373128 bytesObrigado a Giuseppe por jogar fora os 3 bytes finais.
(com uma nova linha à direita).
Experimente uma vez!
Experimente duas vezes!
Experimente três vezes!
Isso usa o
readLines()
truque da resposta de Giuseppe ao desafio de 8 bolas , onde éstdin
redirecionado para o arquivo de origem. Este código basicamente conta quantas linhas existem abaixo da primeira linha e produz1
se houver 1 ou 3 linhas (ou seja, o código é único ou duplicado), ou3
se houver 5 linhas (ou seja, o código é triplicado).fonte
s
para que isso funcione corretamente, mas você deve ser capaz de golf para 28 bytes por re-trabalhar alguns dos cálculos.%/%2
ele deve funcionarPerdido , 38 bytes
Experimente online!
Experimente online!
Experimente online!
Explicação
Lost é uma linguagem muito interessante para esse desafio. A técnica usual de Lost é construir uma "armadilha". Uma armadilha é uma seção do programa projetada para capturar todos os ips em um único local, de modo que suas pilhas possam ser limpas e controladas para seguir uma direção específica. Isso torna os programas de gravação em Lost muito mais gerenciáveis. No entanto, como o programa é duplicado, também precisamos evitar a duplicação de armadilhas. Isso exige que projetemos uma nova armadilha que funcione corretamente, mas quando duplicada, apenas uma das armadilhas funciona. Minha idéia básica aqui é a seguinte
Enquanto a pilha estiver vazia,
?
ele removerá um item e fará com que volte ao início, se esse item for diferente de zero. A chave aqui é que, quando isso empilha a^^
linha sSignificando que não importa como você entra, você sempre sai no mesmo local.
A partir daqui, podemos tentar implementar a mesma idéia na minha resposta Klein .
A espinha dorsal do nosso programa é o lado esquerdo que empurra um número de
2
s. Cada vez que adicionamos uma cópia do programa, outra2
é adicionada à espinha dorsal do programa, o que significa que outros 2 são enviados à pilha. Depois que sai do fundo, ele salta\\>
e executa o códigoIsso remove os 2 primeiros itens da pilha, adiciona um ao que resta e sai. Uma vez que nosso backbone tenha 3 2s, adicionaremos 1 e obteremos 3, se tivermos menos de 3 itens, apenas descartamos a pilha inteira e retornamos 1.
Agora, o único problema que resta é que o
!
programa pode causar um loop infinito. Se o ip começar a!
subir, ele pulará e pousará de volta onde estava. Isso significa que precisamos adicionar outra linha abaixo para impedir o loop.Isso tem o pequeno problema de colocar algumas barras entre nossos
^
s na armadilha. No entanto, milagrosamente, tudo dá certo. Nossos ips se movimentam adequadamente para que não faça diferença.fonte
Stax , 5 bytes
Execute e depure online! · Dobrado · Triplicado
Explicação
fonte
C (gcc) ,
959185 bytesExperimente online!
fonte
Japonês ,
865 bytes-1 byte graças a @ETHproductions
Explicação:
Isso avalia como
1-0 = 1
O dobro é avaliado para
2-1 = 1
Triplicado avalia para
3-0 = 3
fonte
°U-v
(além da nova linha) para economizar no segundoU
.v
é perfeito para este desafio :-)Pure Bash (nenhum
wc
ou outros utilitários externos), 27fonte
EXIT
por0
Perl 5 ,
1815131211 bytes-3 bytes graças a nwellnhof
Uma vez Experimente online!
Experimente duas vezes online!
Experimente três vezes online!
fonte
n;$_=$a++|1;say
(15 bytes)> <> ,
10 98 bytesExperimente online!
Experimente dobrou!
Experimente triplicou!
Tenho certeza de que há uma solução de 8 bytes em algum lugar por aí.O não imprimível no final possui o valor ASCII 1 e é buscado apenas pelo
g
comando et na terceira iteração. Nos dois primeiros, imprime05
e depois imprime15
.fonte
C (gcc) , 107 bytes
Minha primeira submissão em C (gcc). Muito tempo ...
Links TIO: simples , duplos , triplos .
fonte
Labirinto ,
12119 bytesTIO (1x) , TIO (2x) , TIO (3x)
fonte
JavaScript,
81 77 7470 bytesGuardado 4 bytes graças a Shaggy
Solução JS muito ruim. Consome os valores da
[3,1,1]
matriz da direita (pop()
). Registra um tempo limite para exibir o valor atual no futuro. Se um tempo limite já estiver registrado, cancele-o. Baseia-se na natureza suja devar
, que eleva declarações variáveis.Duas vezes:
Mostrar snippet de código
Três vezes:
Mostrar snippet de código
fonte
a
como o terceiro argumentosetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 bytesObserve o espaço depois
#endif
.Experimente online!
fonte
Carvão , 12 bytes
Experimente online! Link é um código detalhado.
Experimente dobrou!
Experimente triplicou!
Explicação
fonte
MapAssignRight(Plus, 1, i)
economiza um byte, o que leva você ao mesmo tamanho de uma porta da minha resposta para @Mr. Desafio do XCoder:PI∨›³L⊞Oυω³
PI⊕⊗÷L⊞Oυω³
é uma outra versão da minha resposta, mas ainda 11 bytes ...MapAssign(Incremented, i)
JavaScript,
4340 bytes2x:
Mostrar snippet de código
3x:
Mostrar snippet de código
fonte
PowerShell ,
54484544 bytesExperimente online!
Experimente dobrou!
Experimente triplicou!
Obtém o seu próprio caminho de invocação com
$PSCOMMANDPATH
e executa umag
et-c
onteúdo no arquivo.If
a contagem de caracteres desse arquivo é menor que99
(verificado viawc -c
coreutils), então produzimos1
eexit
(ou seja, paramos a execução). Isso explica o código original e o código dobrado. Caso contrário, saímos3
e saímos . O código real que está nas seções dobrada ou triplicada não tem sentido, pois ouexit
antes de chegarmos a ele, ou está por trás de um comentário#
.Economizou 6 bytes graças a Mr. Xcoder
Economizou
34 bytes graças a Pavelfonte
-lt99
para a99-gt
para que a transmissão funcione corretamente, mas isso é de fato um byte mais curto. Obrigado!C # (178 bytes)
solução C # louca, mas estou feliz que seja possível em uma linha em C #. :)
Para mim, a parte mais difícil foi ter C # válido que inicializaria ou incrementaria a mesma variável, então acabei abusando do ConfigurationManager porque precisava de um NameValueCollection estático global e ConfigurationManager estático global e o único que consegui pensar que poderia atualizar na memória. EnvironmentVariables foi outra opção que eu escolhi, mas ele não possui um indexador, portanto não sei como fazer isso em uma linha que pode ser copiada e colada para produzir a saída necessária conforme a especificação.
fonte
Encantos Rúnicos , 35 bytes
Experimente online!
Trabalhar nesse caso me permitiu encontrar um erro no analisador ao lidar com os novos caracteres do modificador de atraso, embora o resultado final acabe não sendo afetado por ele, pois acabei não precisando deles.
Funções devido ao fato de a linha final não ter uma nova linha à direita (ou, na verdade, espaços à direita), permitindo que os IPs duplicados gerem em um local diferente. O canto superior esquerdo acaba fazendo um loop grande ao redor da grade, enquanto o segundo IP executa uma operação de reflexão para substituir o
\
na 6ª linha por a. Esse IP, então, fará um loop para sempre e não fará nada.
O terceiro IP também faz essa mesma substituição ao mesmo tempo, mas como está localizado na 13ª linha, sua cópia desse refletor o envia para cima e executa a
1f'3w
sequência presente no canto superior direito, que substitui1
por um3
no 14º linha, pouco antes do PI inicial executa-lo, fazendo com que o programa triplicou para saída3
em vez de1
(valores também poderia ser2
e6
,3
e9
,4
e12
, ou5
e15
devido à disponibilidade dea-f
constantes numéricas;1
e3
foram escolhidos arbitrariamente). Em seguida, ele é deixado em um loop sem fim, executando mais comandos de reflexão que não fazem nada.Experimente em triplicado!
fonte
Perl 5,
2825 bytes-3 bytes graças a @neil!
Move o cursor para trás (não faz nada no início da linha) e imprime o valor da
$a
primeira e da terceira vez (ou seja, a terceira vez que um 1 é impresso, o cursor se move e um 3 é impresso na posição do 1).fonte
print"\e[D$a"if(++$a!=2);
possivelmente?QBasic, 19 bytes
A fonte deve incluir uma nova linha à direita.
Explicação
Queremos saída
1
,1
,3
. Observe que esses números são um a menos que potências de 2. Portanto:fonte