Desafio:
Escreva um código que, quando executado, produza o código fonte de um segundo programa que possa ser executado em outro idioma. O segundo programa deve gerar o código fonte de um terceiro programa que pode ser executado em um terceiro idioma e assim por diante. O último programa deve sair PPCG
com uma nova linha opcional à direita.
O vencedor será a inscrição com mais idiomas. O comprimento do código do primeiro programa será o desempatador.
Regras importantes:
- Nenhum programa pode ser idêntico
- Cada idioma deve funcionar apenas em um dos códigos-fonte. Deveria ser impossível usar o mesmo idioma em dois lugares da cadeia sem quebrá-lo (veja exemplos) .
- Uma corrente encurtada não é uma corrente quebrada. Se você pode usar um idioma em um local diferente do pretendido e o resultado final ainda for PPCG, é inválido.
- Todas as versões de um idioma contam como idiomas únicos (mas lembre-se da regra número 2)
Exemplos:
Um envio inválido:
print("""print'disp("PPCG")'""")
- Python 3:
print("""print'disp("PPCG")'""")
impressõesprint'disp("PPCG")'
- Python 2:
print'disp("PPCG")'
impressõesdisp("PPCG")
- Oitava:
disp("PPCG")
impressõesPPCG
Isso funciona corretamente, mas: você pode executar o primeiro e o segundo código no Python 2 sem quebrar a cadeia, portanto isso viola a regra número 2.
Um envio válido com a pontuação 3:
print("""print'disp("PPCG")'""")
- Python 3:
print("""print'disp("PPCG")'""")
impressõesprint'disp("PPCG")'
- Perl:
print'disp("PPCG")'
impressõesdisp("PPCG")
- Oitava:
disp("PPCG")
impressõesPPCG
Este é exatamente o mesmo código que o exemplo inválido. A diferença é que escolhemos idiomas que aderem à regra número 2: você não pode executar o primeiro código no Perl / Octave, o segundo código no Python 3 / Octave nem o último código no Python 3 / Perl. Isso é válido mesmo que o Python 2 possa executar os dois primeiros programas, porque não usamos o Python 2 como uma das linguagens.
fonte
Respostas:
12 idiomas, 64 bytes
Carvão -> tinylisp -> Python 3 -> /// -> Python 2 -> Perl -> QBasic -> Pip -> V -> Retina -> Pyth -> GolfScript
Carvão
Qualquer execução de ASCII imprimível é uma string literal em Charcoal.
P
pode ser usado para impressão multidirecional, mas, neste caso, simplesmente imprime a sequência indo para a direita.tinylisp
Os únicos caracteres reservados no tinylisp (no momento em que este artigo foi escrito) são parênteses e espaços em branco. Qualquer outra série de caracteres é um símbolo, até algo parecido
+"\'PPCG\'`">"""'*1
. Parênteses definem listas. Oq
(aspas) builtin retorna seu argumento sem avaliação - nesse caso, a lista aninhada(print ('/x/print/x"""x q<?"`i.*":?CHR$ (34) +"\'PPCG\'`">"""'*1))
. (Os parênteses ausentes no final são preenchidos automaticamente.)Python 3
Como
print
é uma função no Python 3, podemos envolvê-la entre parênteses sem nenhum problema. No Python 2, onde é uma declaração, este é um erro de sintaxe. Infelizmente, Perl está bem com parênteses, assim também fazemos*1
(repetição de string em Python, convertida para int e multiplicada em Perl).///
/x/print/
mudax
paraprint
no restante do programa, que não possui barras e, portanto, é produzido sem outras alterações.Python 2
Sem parênteses depois
print
, não funciona no Python 3. O Perl não gosta das aspas triplas.Perl
As várias formas de citar uma string do Perl são úteis e distintas de outros idiomas. Aqui nós usamos
q<...>
.QBasic
Algumas instruções de impressão (abreviadas como
?
), usandoCHR$(34)
para obter aspas duplas.Pip
Um único padrão Pattern (regex) literal em backticks.
V
Alterne para o modo de inserção, adicione algum texto.
Retina
Combine qualquer coisa e substitua-a pela segunda linha.
Pyth
As aspas de Pyth não precisam ser correspondidas (o que torna esse programa não válido no Pip).
GolfScript
fonte
echo '…'
ao inícioJava -> C -> Ruby -> /// -> Python 3 -> Lote -> JavaScript -> BrainFuck (8 idiomas)
Clique nos nomes dos idiomas do código em cada execução, exceto em Lote, porque não consegui encontrar um intérprete online para ele.
Explicação:
fonte
print()
funcione em JavaScript, ele não produz nada e, na verdade, tenta imprimir a página, então eu não acho que isso conta..
noconsole.log
.Java -> BotEngine -> Treehugger -> Carregador -> Lote -> Thue -> Microscript II -> BF -> ForceLang -> Javascript, 10 idiomas
Programa Java:
Programa BotEngine:
Programa Treehugger:
Programa carregador:
Programa em lote:
Programa:
Programa Microscript II:
Programa BF:
Programa ForceLang:
Programa Javascript:
fonte
11 idiomas, 536 bytes
Bash -> Python 3 -> Ir -> Lua -> Ferrugem -> Java -> C99 -> Python 2 -> JavaScript -> Ruby -> Lote
Bater:
A
p
função reduz o tamanho do código em 497 bytes, em comparação com a digitação manual de todas as barras invertidas.Python 3:
A obrigatória diferenciação Python 2/3.
Ir:
Lua:
O uso
if 1 == 1 then
evita a compatibilidade com o Python.Ferrugem:
Java:
C99:
Python 2:
JavaScript:
Rubi:
Lote:
fonte
Befunge (5 versões)
Começamos com a versão mais recente, Befunge-109 (executada com
cfunge -s 109
):Que gera o seguinte código Befunge-98 ( Experimente online! ):
Que produz o seguinte código Befunge-97 ( Experimente online! ):
Que gera o seguinte código Befunge-96 ( Experimente online! ):
Que produz o seguinte Befunge-93 ( Experimente online! ):
Qual saída da string:
PPCG
Cada programa será executado apenas na versão do Befunge que está sendo direcionada. Se você tentar executá-los em outra versão, eles sairão imediatamente sem gerar nada.
Graças a Dennis , quase todas as versões do Befunge estão agora disponíveis online no TIO . A única exceção é o Befunge-109, para o qual você precisará do cfunge , que pode ser encontrado aqui .
fonte
11 idiomas (102 bytes)
Vou adicionar mais em breve.
Jelly -> Ruby ->> <> -> /// -> Lote -> Python 3 -> JavaScript -> J -> FOG -> Jolf -> Empilhados
Jelly ( Experimente online! )
Saídas Ruby ( Experimente online! ):
> <> (use esse intérprete; ele gera espaços em vez de bytes nulos para espaços)
/// ( Experimente online! ) Gera:
Saídas em lote:
Saídas do Python 3 ( Experimente on-line! ):
Saídas JavaScript ( Experimente online! ):
J ( Experimente online! - apenas uma aproximação) produz:
NÉVOA impressões:
Jolf ( Experimente aqui! ) :
Por fim, o Stacked ( Experimente aqui! ) Gera:
fonte
Lote do Windows -> PowerShell -> Ruby -> Python 3 -> JavaScript -> SQL -> CJam : 7 idiomas
Lote do Windows
Powershell
Rubi
Python 3
Javascript
SQL
CJam
fonte
/// para Jelly para Javascript para MS-SQL para QBasic para QBIC, 39 bytes, 6 idiomas
Explicação:
QBIC e QBasic têm muitas semelhanças. No entanto, essas linhas de código não são compatíveis: O QBasic aceita o
?
atalho paraPRINT
, mas não sabe o que fazer com@
o backtick. O QBIC interpretará aPRINT
linha como uma referência a 5 variáveis de sequência diferentes eP$R$I$N$T$
não é uma instrução válida.fonte
blert
;-)9 idiomas: Processamento -> Java -> C -> Python 3 -> JavaScript (ES6) -> Octave -> Bash -> sed -> V, 160 bytes
No momento, meu objetivo é encontrar e adicionar idiomas nos quais não preciso escapar de citações e outras coisas.
Processando saídas (observe que o programa Java não é executado em Processing e vice-versa)
Saídas Java:
Saídas C:
O Python 3 (observe que o programa python não funcionará no Processing por causa do comentário e vice-versa) gera:
Saídas JavaScript:
Saídas de oitava:
Saídas Bash:
saídas sed:
Saídas V:
PPCG
fonte
Python 2 -> Bash -> MySQL -> PHP
int score = 4;
Mesmo que isso não seja código de golfe, o número de bytes é 49.
Saídas Python:
Saídas Bash:
Saídas MySQL:
Saídas PHP:
Ai está!
fonte
Novo no codegolf, apenas tentando fazer uma entrada. Não tentando ganhar. Estou fazendo isso certo?
Bash -> Lote - 23 bytes
Isso produzirá "echo PPCG" para um .bat que pode ser executado no Windows.
fonte