Como é sabido ,
Chuck Norris contava até o infinito. Duas vezes
Chuck Norris pode contar até o infinito para trás.
Além disso, embora talvez menos conhecido, Chuck Norris pode falar um pouco de espanhol , além do inglês.
O desafio
Escreva um programa (ou função) que possa ser executado em dois idiomas diferentes. Em um idioma, o programa deve exibir a sequência
1, 1, 2, 2, 3, 3, 4, 4, ...
e no outro idioma deve produzir a sequência (incluindo zeros à esquerda)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Regras
- Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
- Versões diferentes do mesmo idioma (como Python 2/3) não contam como idiomas diferentes. Idiomas relacionados (como C / C ++ ou Matlab / Octave) contam como diferentes.
- Nenhuma entrada será aceita.
- O programa deve continuar a emitir termos da sequência até que seja interrompido pelo usuário. Como o programa não para por si só, a saída não pode ser produzida no final. Ele deve ser produzido enquanto o programa é executado, continuamente ou em lotes.
- A saída pode usar STDOUT ou equivalente, ou pode ser exibida em uma janela gráfica. Qualquer separador não numérico entre os termos da sequência é permitido, desde que cada termo possa ser claramente distinguido dos termos vizinhos. Também é aceitável se a tela for limpa entre os termos.
- Qualquer sequência pode começar em
0
vez de1
. Nesse caso, na sequência "duas vezes",0
deve ser repetido, assim como os outros números. - Os zeros à esquerda são significativos na sequência "para trás". Por exemplo, o décimo termo é
01
; nem1
nem001
são aceitáveis. - Se os dois idiomas usarem codificações de caracteres diferentes, o programa será definido por seus bytes , não por seus caracteres. Ou seja, os bytes devem ser os mesmos nos dois idiomas.
- O menor código em bytes vence.
Respostas:
05AB1E / Jelly ,
1413 bytes-1 byte graças a Adnan (evite triplicar com impressão que não se abre)
Bytes brutos (hexadecimal):
Em 05AB1E 's código-página :
Experimente online!
Em Jelly 's código-página :
Experimente online!
Quão?
O programa 05AB1E imprime a contagem dupla com cada entrada separada por novas linhas:
O programa Jelly imprime a contagem revertida com cada entrada separada por novas linhas.
O analisador tratará um literal válido entre
[
e]
como o literal incluso; caso contrário, esses bytes serão tokens indefinidos e, como tal, se tornarão equivalentes aos tokens que separam o código em linhas.==>
não analisa como literal, portanto, o código é efetivamente:fonte
Ð,,
por==
.Python 2 / C (clang) ,
10910710084958889888784 bytesPython: Experimente online!
C: Experimente online!
OL no código Python faz parte do delimitador.
Explicação:
No código C, ele primeiro define i como 0. Em seguida, ele inicia um comentário (
#
é um código válido em C para#include
instruções) para onde o código Python vai. No final do comentário, define uma função que incrementa para sempre uma variável e a imprime duas vezes, delimitada por espaço. Em seguida, começa um comentário.No código Python,
i=0;
define i como zero. Python ignora a próxima linha porque#
inicia um comentário de linha única. Em seguida, ele o incrementa para sempre e o transforma em um número longo e imprime sua representação de sequência invertida. O 'L' do long faz parte do delimitador. Depois disso, ele inicia uma string de várias linhas para comentar o código C, que termina mais tarde.-2 bytes graças a @LuisMendo. -7 bytes graças a @ZacharyT. -6 mais bytes graças a @ZacharyT. +11 bytes para corrigir um erro, graças a @ mbomb007. -7 bytes graças a @Doorknob. +1 byte para corrigir um erro, graças a @Doorknob. -1 byte graças a @yoann. -1 byte a mais, graças a @yoann. -3 bytes graças a @Cyoce.
fonte
a(i){printf("%i %i ",i,i);a(i+1)}
while
loop para código C?`i`
vez destr(i)
for(;;)printf("%i %1$i ",i++);
para salvar um byte. O1$
é um argumento posicional que indicaprintf
para exibir o primeiro argumento (após a string de formato).Gelatina / Pyth, 15 bytes
Os imprimíveis são mutilados pelo software SE, então aqui está um hexdump:
Corra com
jelly f file
epyth file
respectivamente.Explicação
Primeiro vem a parte Pyth.
.V
executa um loop infinito sobre a sequência incremental iniciando em sua entrada, que está aqui1
. Em seguida, invertemos (_
) o`
índice de loop stringified ( ) (b
) e o produzimos implicitamente. O;
que há para terminar o loop, e"
é necessário tratar o resto do programa como uma string literal para que o analisador não sufocá-lo.A parte Jelly será explicada traduzindo primeiro o restante do programa da página de códigos Jelly:
Ele
¶
atua como um feed de linha, ignorando efetivamente a primeira parte do programa, tornando-o um link que nunca é chamado. Então começamos1
e executamos um loop while (¿
) que usaṄṄ$
(imprime duas vezes) como sua condição e incrementa (‘
) o valor como o corpo do loop.Aliás, substituindo a parte Pyth com
1[DR,>]
iria criar uma submissão Jelly / 05AB1E válida em 14 bytes, mas o interpeter atual contém um bug que impede isso.fonte
Perl / JavaScript, 87 bytes
Perl
Um mecanismo que eu usei muito em polyglots JS / Perl é abusar do fato de que a substituição pode aceitar praticamente qualquer delimitador, utilizando
=
meios que podem utilizar as substituições iniciais inúteis (substituindo primeiro0;print
comconsole.log;m
com uma bandeira de/s
em$_
, que é actualmenteundef
) , definindo$_
o resultado da substituiçãos
pors
no modo multilinha (/m
), que é0
. Agora$_
é0
e inicio owhile
loop, isso então é incrementado$_
. Em seguida, chamoprint
, passando uma expressão regular que corresponde (devido ao||
final que corresponde a uma string vazia) e uso o&&
operador para enviar o inverso de$_
concatenado com uma nova linha ($/
é pré-inicializado para"\n"
). Isso conta para o infinito para trás.Javascript
Muitas atribuições de variáveis aqui, mascaradas nas
s///
chamadas Perl . Eu configurar variáveiss
em
como0
, aliásconsole.log
paraprint
, executar alguma divisão inútil, definir$_
para0
e iniciar owhile
incremento de loop$_
, chameprint
passando em0
(m/s
, este começa a chamada param
em Perl, mas é tratado como divisão padrão em JS) e nossa cadeia de destino ($_+"\n"+$_
) via operador de vírgula, que retorna o último item da lista. Evito a última parte do código Perl (&&reverse.$/
) porque$_+"\n"+$_
será verdadeira e, portanto, posso usar||
para produzir umRegExp
objeto contendo o final do código Perl que nunca é avaliado.Testado usando Perl 5 e Nó 6.
fonte
NodeJS / PHP,
131106 bytes-25 bytes graças a @Titus
Usando o NodeJS em vez do JS do navegador para melhor formatação de saída e melhor manipulação de loop infinito.
Experimente o JavaScript online
Experimente o PHP online
Observe que a saída TIO é cortada após 128 KB.
fonte
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 bytes (mas não tão bom quanto a sua abordagem):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
ou<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
repetição do número, mas tive que alterar awrite(i)
para incluir um espaço e porquewrite()
não aceita um número. E você teve um erro de digitação (strrev=i=i>>1
->strrev=i=>i>>1
) que adicionou outro byte. Acabou sendo mais curto de fazerwrite(i+i)
estrrev=i=>i+" "
.V / Brain-flak Classic ,
27, 26 bytesHexdump:
Experimente online! em V (modificado levemente para terminar, para que você possa ver a saída. No TIO, V sai apenas se o programa terminar)
Experimente online! no clássico Brain-flak
Esta não é a poliglota mais interessante, já que o código V não tem efeito no clássico contra ataques cerebrais e vice-versa, no entanto, é realmente divertido usar meus dois idiomas em um desafio, e as duas soluções são bem interessantes por conta deles.
V Explicação:
Explicação BFC:
fonte
Retina / Python 2, 61 bytes
retina | Python 2
fonte
str()
por ``, mas aparentemente perturbou o código da Retina. Não sei porque?str
, caso contrário, você obteráL
os resultados. Mas ele realmente não trabalhar em Retina. Você deve ter mudado mais do que disse que fez, como mover algo para uma linha diferente.R / Oitava ,
83807871 bytes-3 bytes graças a Luis Mendo
#{ }#
é um comentário em bloco de oitava e#
é o comentário para R. O intérprete R vê apenas a próxima linha como o corpo dowhile
loop, e o intérprete Oitava pula para o código OitavaA parte R imprime pares de números começando em 1 e a parte Octave imprime os números anteriores começando em 0.
Espero totalmente ser derrotado (mesmo pela mesma combinação de idiomas); Acabei de escrever tanto código Matlab e R recentemente que pensei em tentar.
Experimente online! - Link de oitava
fonte
i=i+1
?+=
não funciona em R, então sim, tem que ser assim.end
necessário?while(1)
), você poderia salvar esses bytes.Ruby / Python2:
6864 bytesPerspectiva Ruby
init simples da variável:
"#{}"
é uma sintaxe para interpolação de cadeias. Eu o uso para executar a expressão em vez disso.p
é uma abreviação deputs
.loop
cria um loop infinito.Em seguida, existe a
exec
coisa, mas ela nunca é avaliada, pois o loop infinito é, por definição, infinito. Necessárioexec
para não gerar erro de sintaxe com o código Python.Perspectiva do Python
Da perspectiva do Python, existe um comum
i=0
. Em seguida, o Python possui uma sintaxe diferente para a interpolação de strings; portanto, essa linha é simplesmente descartada. Em seguida, há um loop infinito semelhante ao que os outros postaram.fonte
Bash / Check ,
5028 bytesAgradecemos ao @Doorknob por salvar um monte de bytes alternando de Python para Bash
Agredir:
Estes são apenas alguns comentários, que são ignorados.
Inicie uma sequência que vai de 1 ao infinito e depois canalize o resultado para
rev
.Checar:
Isso muda imediatamente para o modo 2D, indo para a direita.
>
direciona o IP certo, o que não tem efeito. Ele volta para o início da linha e acerta#
novamente, o que sai do modo 2D. Em seguida, ele atinge o>
modo 1D, que empurra 0 para a pilha. Por estar no modo 1D, o IP passa para a próxima linha.#
alterna o IP para o modo 2D novamente e ov
direciona para baixo.O primeiro
#
volta ao modo 1D novamente.p
gera os TOS como um número (mas não o<
exibe ) e imprime uma nova linha. Isso é feito duas vezes e, em seguida, o número é incrementado)
.#
alterna para o modo 2D novamente, então o IP passa para o início da linha,#
pressiona para alternar para o modo 1D, etc.fonte
#
para comentários e pode executar o "invertido números" tarefa com muita facilidade:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
é um byte mais curtoCJam /> <>,
2723 bytesPara CJam:
Experimente online! - observe que você precisa aguardar o limite de 60 segundos para ver a saída, mas funciona offline.
Isso define um literal de seqüência de caracteres de várias linhas que nunca é usado.
A segunda linha é assim:
Para> <>:
Inicia uma string literal.
Conteúdo da cadeia literal. Cada um dos códigos de caracteres é enviado individualmente para a pilha.
O IP se aproxima para alcançar
"
novamente, o que termina o modo de sequência.l
pega o comprimento da pilha,a
empurra 10 e,
divide. Isso nos dá o comprimento da pilha / 10.:
duplica,n
imprime como um número,a
pressiona 10 eo
imprime como um código de caractere (uma nova linha).Mesma coisa. Imprima o número seguido por uma nova linha. A pilha agora tem o tamanho 10 novamente (o conteúdo do literal da string original está na pilha).
O IP então volta para o
"
novo, levando a mais 10 elementos a serem enviados. Próxima vez,l
retorna 20, então 2 é impresso, etc.A segunda linha nunca é tocada pelo IP.
fonte
Röda / C (gcc) , 90 bytes
Röda: Experimente online!
C: Experimente online!
Explicação
Isso abusa do fato de que
//
é int divison em Röda, mas um comentário de linha em C.Nos dois idiomas,
main(){}
denota o programa principal e ambos chamam funçãof
com um argumento fictício de0
.Em Röda,
a=1//1
faz divisão int e atribui o resultado1
aa
. C vêa=1
e faz a mesma coisa, mas tudo depois dessa atribuição é um comentário para C. A partir daí, os dois idiomas se ramificam.Röda
Temos um loop infinito com
while[]
( uma condição vazia é verdadeira ). Dentro disso,` $a`
converte o número inteiroa
em uma seqüência de caracteres (com um espaço à esquerda), após o qual o[::-1]
reverte (e gera um espaço à direita). Então o valor dea
é incrementado em um.Fora do loop while, um comentário multilinha é iniciado
/*
e finalizado imediatamente antes do final da função.C
Depois de ter ignorado o restante da linha, o programa passa para a segunda linha. Começamos com um ponto-e-vírgula porque a
a=1
instrução precisa ser encerrada. Depois disso, encontramos um loop for simples que imprime a variável de iteração,,a
duas vezes em cada iteração.Fora do loop for,
/*
existe apenas para ignorar o*/
comentário final de Röda .fonte
QBIC / QBasic 4.5 , 58 bytes
Isso abusa bastante do fato de que todas as letras minúsculas são vistas como código QBasic literal pelo interpretador QBIC e, portanto, são repassadas para a camada QBasic do QBIC. Como os dois idiomas veem esse código lado a lado:
fonte
laserLANG / > <> , 163 bytes
Golfe pela primeira vez, por isso é um pouco maior do que provavelmente poderia ser. Eu queria usar> <>, mas como algumas pessoas já o usavam para criar a segunda sequência, decidi que queria criar a primeira sequência.
Experimente> <> online!
Para o laserLANG, é necessário um intérprete offline para experimentá-lo. Pode ser encontrado aqui .
laserLANG
começa a execução na
!
qual é completamente ignorado. então ele alcança o\
e começa a viajar por vários caracteres que ignora completamente. Finalmente chega a outro\
e começa a diversão. Basicamente, aceitei a ideia por trás do "Olá, mundo!" loop e condensou o melhor que pude. Foi um grande desafio lidar com o fato de que o laserLANG está prestes a diminuir / incrementar o contador de memória quando o contador do programa está indo para a esquerda / direita, respectivamente. Eu sinto que a maioria dos bytes poderia ser salva aqui, fazendo alguns truques em que não pensei.> <>
A execução é iniciada, fazendo com
!
que ela ignore o arquivo\
. Em seguida, continua como se o código laserLANG não estivesse lá. Eu não sabia que> <> só tinha suporte para a divisão de flutuação, então um truncamento curto e simples era um pouco confuso no começo.fonte
Befunge-98 / > <> , 32 bytes
Escrevi isso antes de ver quantas
><>
respostas havia. Alguns antecedentes:\
é um operador de mudança de direção em> <>, nesse caso, pressionando-o para baixo, enquanto no Befunge ele troca os dois itens principais da pilha. O código Befunge se parece com:Experimente online!
Imprime os números anteriores, separados por novas linhas. O Befunge imprime um espaço automaticamente após cada número, para que cada dígito seja separado por espaços. Obtém repetidamente o último dígito, imprime e divide o número por 10 até chegar a 0. Em seguida, aumente e repita.
O código> <> desce imediatamente para a segunda linha.
Experimente online!
E é bem simples. Obtenha o comprimento da pilha, imprima duas vezes com novas linhas e deixe uma cópia do comprimento na pilha para o próximo loop.
fonte
Ruby / Stacked , 37 bytes
Experimente online!
Isso imprime
1 1 2 2
... em Ruby e1 2 3 ... 01 11 21...
em Stacked.Explicação
Em Ruby:
Depois de remover o comentário, isso se torna:
A única linha relevante aqui é a última.
p
retorna seu argumento, entãop p
imprime seu argumento duas vezes.$.
começa em0
, então$.+=1
incrementa$.
, retornando o valor incrementado. Portanto, isso imprime cada número1
duas vezes.Em empilhados:
Isso é equivalente aos seguintes tokens:
Os dois primeiros não são relevantes (basicamente, transformando-se
0
em uma fração reduzida). Em seguida,0
é enviado para a pilha. Depois, a função[1+:tostr rev out]
é enviada para a pilha.loop
aparece essa função e a executa infinitamente.A parte interna da função incrementa a parte superior da pilha (
1+
), a duplica (:
), a converte em uma string (tostr
), a inverte (rev
) e a gera (out
). Este processo é repetido infinitamente. Como o loop é infinito, tudo o que vem depois desse token é essencialmente ignorado pelo intérprete.fonte
> <> / Jelly , 37 bytes (25 na página de códigos do Jelly)
Experimente> <> online!
Experimente o Jelly online!
> <> imprime a sequência até o infinito duas vezes, Jelly conta para trás.
> <> preocupa-se apenas com a linha superior:
E obrigado ao @ Challenger5 por salvar alguns bytes aqui no avanço de linha
Jelly executa seu código de baixo para cima. Apenas as duas últimas linhas são relevantes.
fonte
><>
código têm pontos de código ASCII que correspondem à página de código Jelly. Não sei muito sobre esse negócio de páginas de códigos, mas acho que isso resultaria nos mesmos bytes usados para representar o código. Os caracteres nas linhas inferiores são ignorados por><>
isso, não importa se são exatamente os mesmos entre as páginas de código. A contagem de bytes foi obtida no><>
link TIO.","
apenas envia o valor ASCII de,
para a pilha, para que você possa usara
um separador de nova linha.C (gcc) / PHP ,
1028680 bytesProduz a sequência dupla em C e a sequência reversa em PHP.
Experimente em C!
Experimente em PHP!
Explicações
C
Em C, o
#
material do pré-processador de formulários. Eu realmente não sei muito sobre C, mas não reclamo quando há alguma linha vazia para essas coisas. O//
formulário forma um comentário de linha. UMA\
no final de uma linha está essencialmente "escapando" da nova linha e fazendo com que as duas linhas sejam tratadas como uma. Isso também funciona para comentários de linha; portanto, a segunda linha é vista como um comentário em C. A terceira linha faz o trabalho de emitir os números com um loop for simples. Depois, há simplesmente um comentário.PHP
No PHP,
#
forma um comentário de linha, portanto a primeira linha é totalmente ignorada. A segunda linha imprime os números invertidos com um loop for e os separa com\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(o código C envolto em uma string).fonte