Cenário
Um de seus amigos está lutando para fazer uma tarefa de casa. Ele precisa de um programa simples que imprima os primeiros 404 números naturais:
1 2 3 4 5 6 7 8 9 10 11 ... 401 402 403 404
Seu desafio é simples: escreva este programa para ele.
No entanto, sua conexão é terrível, portanto, 1 caractere aleatório é perdido toda vez que você envia o programa. Para impedir que isso interrompa seu programa, você deve fazer isso para que remover qualquer caractere único não tenha efeito: o programa funciona, independentemente. (O programa original também deve funcionar.)
Como a conexão é muito ruim para enviar arquivos grandes, seu código deve ser o mais curto possível.
TL: DR - faça um programa endurecido por radiação para emitir os números de 1 a 404
Regras / Detalhes
- A saída pode ser uma lista de números inteiros em qualquer formato razoável (separados por espaços, novas linhas, vírgulas, etc.). No entanto, sua saída deve ser consistente e não ser alterada quando o programa for modificado.
- Os sinalizadores de linha de comando que contêm lógica, executam código real, geram a lista de números etc. são proibidos.
- Isso é código-golfe , então a submissão mais curta (em bytes) vence!
Respostas:
05AB1E , 12 bytes
Código:
Explicação normal do código:
Isso leva ao seguinte código de golfe:,
X404Ÿ
que é o que queremos alcançar.O número 404 é gerado por qualquer uma destas variantes:
O intervalo inclusivo funciona da seguinte maneira em dois números:
O que sempre faz do segundo
Ÿ
um não-op .Usa a codificação CP-1252 . Experimente online!
fonte
JavaScript, 228 bytes
Explicação
A avaliação do código em a
setInterval
permite que o programa continue mesmo se houver um erro. Garantimos que o código transmitido terá erro se um único caractere for removido. A sintaxe da string do modelo pode ser abusada para chamarsetInterval
com uma string constante sem parênteses. Felizmente, mesmo que a string do modelo esteja na próxima linha, ela ainda será analisada como uma chamada de função com essa sintaxe.O primeiro problema que encontramos é que
setInterval
é uma função e, portanto, se um caractere for removido e o programa tentar chamarsetInteval
, ele errará. Obviamente, como existem duas invocações indenticassetInterval
, não precisamos nos preocupar com o fato de funcionar corretamente, desde que evitemos o erro. Portanto, a primeira linha define todos os "erros ortográficos" possíveis desetTimeout
uma função válida.A primeira linha funciona atribuindo todos esses "erros de ortografia" à função
top=>4
. Observe a sintaxe do ES6; isso simplesmente pega um paramater chamado "top" e retorna 4. Por que "top"? Bem, a primeira linha nunca deve gerar um erro, mesmo que um caractere seja removido. Se um=
for removido para criartop>4
, essa expressão booleana será válida, poistop
é predefinida nos navegadores, simplesmente produzindofalse
. Se o 4 for removido, o corpo da função simplesmente se torna o primeirosetInterval
segmento e o segundo será executado ileso.Agora, tudo o que resta para se preocupar é se um `é removido.
Se removido desde o início,
setInterval
simplesmente não faz nada, avaliando a si próprio como sua própria expressão. Em seguida, o restante da segunda linha simplesmente executa uma única iteração do loop, deixando a outrasetInterval
fragmento termine o trabalho. Se removido do final, o backtick restante é retirado do final do comentário.As novas linhas são colocadas para que a remoção 1 não afete o comportamento do programa, mas evitam erros no caso de algumas remoções de caracteres, como o backtick principal.
fonte
405
fosse removido, mas então percebi: nada, porque todos os 404 números já foram impressos ou o segundo loop imprime os que faltam. Trabalho espetacular.this
?Pitão - 16 bytes
A idéia básica por trás disso é que, quando você retira um dígito
404
, ele só diminui o número; portanto, precisamos obter o máximo de dois404
para garantir que tenhamos o número certo. Obviamente, existem muitas redundâncias.Explicação:
Experimente online aqui .
fonte
Befunge-98 , 37 bytes
Experimente online!
Explicação
Criar código reforçado por radiação no Befunge-98 não é tão ruim, porque você pode definir manualmente o "delta" (ou seja, o tamanho da etapa do ponteiro da instrução)
x
. Portanto, se definir o delta como(2,0)
, a partir de então todos os outros caracteres serão ignorados e podemos simplesmente duplicar todos os comandos. O difícil é ficar2 0
no topo da pilha de maneira confiável. Na verdade, precisamos0 2 0
que o programa funcione corretamente, mas faremos isso de graça. Aqui está como fazemos isso:Observe que cada dígito pressiona a si próprio; portanto, no programa completo, haverá um início
2 0
que simplesmente ignoraremos.Conseqüentemente, a remoção do primeiro ou do segundo caractere do programa é irrelevante, porque não usaremos esses dígitos de qualquer maneira. Da mesma forma, remover o terceiro caractere é idêntico ao remover o segundo, portanto, também não precisamos nos preocupar com isso.
Vamos considerar o que acontece nos outros dois casos. Soltando o quarto caractere:
Observe que o delta está definido como
(0,0)
. Mas isso não move o ponteiro de instruções, então o mesmox
é executado novamente imediatamente e desta vez aparece(2,0)
tudo e está bem (existem zeros implícitos na parte inferior da pilha para nossos propósitos posteriores).Vamos largar o quinto caractere:
Agora o delta está definido como
(0,2)
. No entanto, como ainda não há movimento horizontal, o IP volta imediatamente parax
e novamente, o delta correto é definido.A partir deste ponto, podemos basicamente ignorar a duplicação de caracteres, bem como esta parte inicial, porque ela sempre será ignorada:
O
;
é um tipo de comando de comentário que pula tudo até que o próximo;
seja encontrado. No entanto, pulamos o primeiro;
com#
apenas a parte entre o;
será executada a partir desse ponto.fonte
> <> ,
1036051 bytesTestado aqui.
Usa a mesma tática que este programa . Se um caractere for excluído na primeira linha, a segunda linha ainda será executada. Se um caractere na 2ª linha for excluído, a
v
execução será movida para a 3ª linha, uma vez que a 2ª linha é menor. Uma exclusão na 3ª linha não afeta o controle do programa, pois só é executada após uma exclusão na linha 2.O programa também funcionará no caso de uma quebra de linha ser excluída:
Caso 1:
A segunda linha será executada.
Caso 2:
Ambas as linhas se tornam uma linha com o dobro das instruções.
Explicação:
O núcleo do programa é o seguinte. Observe que a já
1
está pressionada na pilha pela primeira linha.fonte
o" e"
?+1
você pode usarl
. Além disso, o intérprete fishlanguage.com é um pouco estranho (e chato de usar, embora o recurso de depuração seja útil, é claro). O TIO usa o intérprete de Python um tanto mais saudável1
s na primeira linha.> <> ,
42 3834 bytesExperimente Online!
Agradecemos a @Martin Ender e @Teal Pelican por reduzir 8 bytes!
Semelhante à resposta do mbomb007 , mas usa apenas 2 linhas.
Em vez de contar de 1 a 404 usando um único valor de memória, empurrei continuamente o comprimento da pilha. Isso fez com que eu não precisasse colocar nada na pilha antes do início do loop, facilitando muito as coisas.
O código original
Eles
<
mudam o IP, e o/
é um não-op, pois o IP envolve e continua ao longo de seu caminho normal. Assim, o código relevante é:E isso se repete.
A exclusão
A grande chave aqui é o espelho
/
. Não faz nada se a segunda linha é modificada - apenas volta para si mesma e é essencialmente um não-op. Mas se um caractere da primeira linha for removido, a linha mudará para baixo, de modo que o espelho acerte a flecha<
, levando a um loop idêntico e não modificado.A única outra exclusão significativa seria o
\n
personagem. Isso também é considerado, pois produz este código:Agora, acabamos de anexar uma cópia do loop original
;?=*4o" e"lnll
a si próprio. Como esse é um loop, não faz diferença para a execução e é executado como se nada tivesse mudado.fonte
:+1
e o outro:
por uml
.;?=*4o" e"n:ll
funciona tambémUma pereira , 34 bytes
O programa contém caracteres de controle, então aqui está um
xxd
despejo:Uma árvore de pera é basicamente um derivado de Perl, com algumas características "interessantes". Joguei tudo junto como uma piada (para que eu pudesse dizer que meu poliglota imprimiu
a partridge
em A Pear Tree; de fato, quase todos os programas o fazem). No entanto, é Turing completo e realmente bom nesse tipo de desafio.O recurso com o qual nos preocupamos principalmente aqui é que o A Pear Tree só executará um programa se alguma substring do código tiver um CRC-32
00000000
. O código é rotacionado para colocar a substring em questão no início. Por acaso, as duas metades (idênticas) do código têm o CRC-32 em questão (devido a esse comentário binário de aparência suspeita no final), portanto, se você excluir um caractere da fonte (quebrando o CRC), a outra metade é girada para o início e o#
sinal próximo ao final comentará a metade danificada, além do lixo binário.Outro recurso torna o programa um pouco menor: embora A Pear Tree seja principalmente interpretado como Perl, ele tem algumas pequenas alterações para fazê-lo funcionar mais como o Python. Um ponto relevante aqui é que, diferentemente da
print
declaração de Perl (que apenas une os números), aprint
declaração de A Pear Tree separa argumentos com espaços e imprime uma nova linha final. Isso nos dá uma saída bem separada do espaço, o que significa que não precisamos desperdiçar bytes na formatação. (Observe que você não deverá fornecer entrada ao programa; se o idioma receber entrada, ele assume por padrão que deve fazer algo com ele.)Obviamente, isso não pode competir com os idiomas reais do golfe (nem eu esperava), mas achei que as pessoas poderiam achar interessante.
fonte
Entre 98 , 34 bytes
Experimente Online!
Isso funciona de maneira muito semelhante à minha >> resposta , mas, em vez do espelho
/
, eu uso a operação vire à esquerda[
e inverto a direção do IP, que neste caso é funcionalmente equivalente a um espelho.O código original
A exclusão
Se algo na segunda linha for excluído, ele mudará de posição e não afetará a parte superior.
Se alguma coisa na primeira linha for excluída, o
[
IP será enviado para o<
, que inicia um loop idêntico (com a exceção do2j^^
que evita os^
s usados em conjunto com o[
)Como existem 2 novas linhas, não faz diferença para o código se uma for excluída (graças a @ masterX244 por isso!)
fonte
Befunge-93,
5451 bytesObrigado a Mistah Figgins por me salvar 3 bytes.
Experimente online!
Esse é essencialmente o mesmo truque usado no desafio Hello World tolerante a falhas . A primeira linha começa certificando-se de que exista 1 no topo da pilha para o início da sequência e, em seguida, uma das
v
setas no final da linha redireciona o caminho do código para o início da rotina principal na linha 2 , executando da direita para a esquerda.Remover um caractere da primeira linha apenas deslocará as
v
setas em uma, mas isso ainda permite que o código seja redirecionado para a segunda linha com êxito. A remoção de um caractere da segunda linha faz com que a<
seta no final da linha mude para fora do caminhov
acima, portanto o caminho do código será redirecionado para a rotina de backup na linha 3.Remover a primeira quebra de linha não faz mal, porque isso apenas move a terceira linha no lugar para substituir a segunda linha. E remover qualquer coisa após o final da segunda linha não terá efeito, porque esse é apenas o código de backup.
fonte
The first line starts by making sure there is a 1 on the top of the stack...
A primeira linha é bastante segura a esse respeito. Além disso, você pode reduzir o <code> _ @ #!</code> to
_ @ # - `e coloque-o antes da impressão para economizar 3 bytes.JavaScript + HTML + Snippets de pilha,
167158154 bytesAbusar do fato de que o JavaScript nos Snippets de pilha é colocado em uma página da Web dentro de um
<script>
elemento.fonte
Na verdade , 18 bytes
Na verdade, é uma linguagem de golfe baseada em pilhas.
Explicação dos comandos envolvidos (como eles funcionam no contexto acima):
fonte