Você deve escrever um programa ou função que, quando é dada uma nonempty seqüência S de N caracteres ASCII imprimíveis † , gera um programa que vai sair com código de saída C , onde C é o codepoint ASCII na posição 0 em S . Este programa que você escreve, adicionalmente, a saída de um programa de P , de tal forma que, quando executado, ele sai com código de saída C " , onde C ' é o ponto de código ASCII na posição 1 em S . O programa P produzirá outro programa P ' . Esse processo se repete até que não haja mais caracteres em S. Depois disso, você não deve produzir nada, seguido por uma nova linha opcional; e deve sair com o código de saída 0.
† Os caracteres entre 0x20
e 0x7e
inclusive.
Mais algumas regras:
- Programas de modificação automática não são permitidos: você deve enviar a fonte para STDOUT (ou, retornar o valor inicialmente)
- Você não pode ler seu próprio código-fonte.
O menor programa desse tipo em bytes vencerá.
Para alguns testes rudimentares, esse script ruby pode ser usado. (O primeiro argumento é a maneira como você invoca o script, o segundo é o programa e o terceiro é a sequência de entrada.)
Exemplo hipotético
Digamos que o programa seja FOO
. Quando recebe a string "ABC", ela gera BARA
. Este programa sai com código 65
e saídas BARB
. Por sua vez, sai com código 66
e saídas BARC
. Este programa sai com código 67
e saídas BAR!
. Isso não gera nada e sai com o código 0
.
0
é sucesso. tio.run/nexus/…33 throw
lançar um número arbitrário. Você usa negativos para o nível do sistema operacional e o deslocamento é -512. Idk muito quer, mas eu estou olhando aqui: complang.tuwien.ac.at/forth/gforth/Docs-html/...Respostas:
Python 2,
12610194 bytesNo processo de fazer isso, descobri que o código Python pode não conter bytes NUL literais.
Experimente online (mostra o código de saída nas informações de depuração)
Observe que cada um dos programas não vazios abaixo possui um avanço de linha à direita.
Para entrada
Hello
, as saídas acima:que imprime
...
que imprime
que imprime
que não imprime nada (o programa vazio)
que imprime nada e sai com o código 0.
fonte
Python 3, 77 bytes
Este código recebe a entrada de STDIN e envia o primeiro programa para STDOUT.
Se a entrada for
ABCDE
, os resultados serãoonde cada linha contém o código de saída e a saída do programa executado anteriormente (a primeira linha é o primeiro programa).
fonte
Python 3 ,
115108100 bytesExperimente online!
Para a entrada
Hello
, o programa imprime:O programa acima imprime:
e sai com o código
72
.Experimente online!
O programa acima imprime
e sai com o código
101
.Experimente online!
O programa acima imprime:
e sai com o código
108
.Experimente online!
O programa acima imprime:
e sai com o código
108
.Experimente online!
O programa acima imprime nada e sai com o código
111
.Experimente online!
O programa vazio imprime nada e sai com o código
0
.Experimente online!
fonte
C, 156 bytes
Experimente online! (Abra a guia de depuração para ver o código de saída.)
Recebe entrada como um argumento de linha de comando.
Para a entrada "ABC", isso gera o programa
que retorna 65 e produz
que retorna 66 e produz
que retorna 67 e produz
que não gera nada e retorna 0.
fonte
Python 2, 67 bytes
Com base nesta resposta , mas modificado para usar o Python 2, com um programa trivial
0
para imprimir nada e sair.Experimente online
fonte
RPL, 73 bytes
Com a página de código hp8.
Ligue o HP48 ou similar, ou atire o droid48 . Não se esqueça de
-52 SF
para uma melhor visualização da pilha. Suponho que você já tenha empurrado a corda, por exemplo"ABC"
, na pilha. Em seguida, digite a seguinte função:(Por conveniência, sugiro pressionar a tecla α duas vezes antes de digitar qualquer coisa, portanto, bloqueie o modo de entrada alfa. Mais tarde, basta usar a tecla DEL para cancelar os delimitadores de fechamento inseridos automaticamente. Basta usar a tecla ENTER para validar. Não esqueça o espaço após o facada.)
Essa função envia imediatamente para a pilha um programa auto-modificador, sob a forma de uma lista. (Mas a função acima não se modifica). Como o L no RPL significa originalmente LISP, pressionar a tecla EVAL realmente avaliará esse programa. Ele retorna o código de saída no nível dois da pilha e sai, modificado (sim, aqui é questionável), para um último EVAL. Portanto, pressione EVAL repetidamente até que o programa finalmente pare para cair no nível um da pilha. O código de saída final 0 aparece assim no nível um, com os códigos de saída anteriores acima. Se você esqueceu
-52 SF
, poderá navegar na pilha após cada EVAL pressionando a tecla ((saia deste modo de navegação com a tecla ON). A função acima aceita cadeias com caracteres 0x0 dentro, para criar essas cadeias0 CHR
e+
são seus amigos. A auto-modificação consiste em remover o caractere usado da string incorporada (aSUB 2 SWAP PUT
ramificação). Portanto, o programa descartado é mais curto após cada EVAL. A4 DROPN
ramificação garante que nenhuma instrução do OP seja respeitada, descartando, entre outros, o próprio programa. Claro que tudo isso pressupõe sua nota como um-55 SF
adepto. Usuários de-55 SF
serão banidos. Para sempre.Presumo que exista uma solução RPL / 2 e que possa apresentar um código de saída unix real, mas o RPL / 2 tem uma introspecção limitada e não pode avaliar listas.
fonte
sed ,
467461 bytesOs códigos de caracteres são difíceis:
Experimente online!
Caso contrário, a lógica é bastante direta: (1) escape de caracteres especiais (existem dois), (2) envolva em uma
s/^/…/;q\1
camada adicional , (3) repita.Aqui está a saída para
hello
:E um pequeno script que eu usei:
fonte
PowerShell,
172156 bytes.A
h3l}'{l0
entrada resultará na próxima saídaExperimente online!
Que, por sua vez, produzirá
Experimente online!
A última execução não produzirá nada e o código de saída será 0.
Experimente online!
fonte