Um programa reforçado por radiação é um programa em que, se algum caractere do código for removido, o programa continuará funcionando da mesma maneira. Para esta pergunta, escreveremos um programa que detecta quando é irradiado.
Escreva um programa ou função que, quando qualquer byte único for removido, o programa resultante produzirá esse byte e somente esse byte. ( Você pode gerar esse byte várias vezes, desde que não produza nenhum outro byte )
Regras:
- O programa deve conter pelo menos 2 bytes distintos. (Nenhuma solução de apenas 0s;)
- Não importa o que o programa original faz
- Não é possível ler seu próprio código-fonte.
- O código será pontuado no número de bytes distintos, onde a quantidade mais alta vencer. Por exemplo,
abc
= 3 pontos,ababba
= 2 pontos,abc
vence.- O desempatador é a menor contagem de bytes, seguida pelo tempo de envio anterior
Boa sorte!
code-challenge
radiation-hardening
Brincadeira
fonte
fonte
Respostas:
05AB1E ,
97 bytes (Pontuação 3)Experimente online!
Removendo um
'
Se
'
removido,22''rr
resultará em 22 sendo a primeira coisa na pilha e'
sendo a última coisa na pilha, que quando revertida duas vezes resulta em'
.Removendo um
r
Com qualquer
r
remoção,22'''r
resulta em 22 sendo a primeira coisa na pilha,'
sendo a segunda coisa na pilha er
sendo a última coisa na pilha. Nor
entanto, isso foi precedido por um'
que a torna a string literal"r"
(em oposição ao comandoreverse stack
), que é implicitamente impressa.Removendo um
2
Com qualquer
2
remoção,2'''rr
resultará em2
ser a primeira coisa na pilha,'
sendo a segunda coisa na pilha e finalmenter
a última coisa na pilha, que quando revertida uma vez resulta2
.Portanto, esta resposta é válida. Sem nada removido, o resultado
'
é irrelevante. Isso funciona para qualquer número diferente de 2 também.Criado um verificador de validade, você pode usá-lo para competir no 05AB1E *.
* Não tenho 100% de certeza de quantas soluções são possíveis no 05AB1E ...
Soluções mais válidas que são piores ou iguais
'
acima de 2 funcionará ...'''''''VV
,'''''''XX
ou'''''''<any command that pops a without pushing>x2
'
acima de 3 seguido de qualquer número pars
acima de 1 (EG'''''''''ssss
).'''..
com qualquer número de períodos acima de 1 e qualquer número ímpar'
acima de 2.'\\'''rr
- mesma ideia que22'''rr
mas\
é 'remover o último item da pilha'.fonte
'
é irrelevante pelas regras, como você diz. Mas invalida o objetivo nominal de detectar anomalias, o que é um pouco engraçado.Pontuação 3
Pode não ser competitivo, pois a saída é vista apenas através de um despejo de memória.
Supondo que a entrada esteja vazia e o EOF deixe a célula inalterada. Usa um intérprete que despeja a memória em uma saída, como esta .
Remova um sinal de adição e a memória é o valor unicode para "+", caso contrário, é o valor unicode para ",". É mais uma regra dobradora do que uma resposta. Praticamente o mesmo com "-". Abusa do fato de que esses três caracteres estão um após o outro no conjunto de caracteres unicode.
fonte
Uma árvore de pêra, 256 bytes distintos, 975 bytes
Infelizmente, a pergunta requer uma solução ótima para conter um byte NUL em algum lugar (pois precisa conter todos os 256 bytes em algum lugar). Isso significa que: a) não posso fornecer um link TIO (porque o TIO não gosta de NUL em programas ou, pelo menos, não descobri uma maneira de digitá-lo que meu navegador possa suportar) eb) Não é possível colar o programa no Stack Exchange literalmente. Em vez disso, coloquei um
xxd
hexdump reversível escondido atrás do link "snippet de código" abaixo.Mostrar snippet de código
Explicação
Este programa consiste em três partes idênticas. (Concatenar várias partes idênticas de um programa é um tema para mim em programas de proteção contra radiação .) Toda árvore A Pear requer uma soma de verificação em algum lugar para que o intérprete saiba quais partes do programa serão executadas; ele gira qualquer parte do programa para o qual a soma de verificação é bem-sucedida até o início antes de executá-la (ou imprime
a partridge
se nenhuma soma de verificação corresponder). Nesse caso, temos uma soma de verificação em cada uma das três partes e, portanto, uma parte não irradiada será movida para o início. Portanto, podemos assumir que o programa consiste em uma parte não modificada, seguida por duas outras partes (uma das quais pode ter sido modificada).Cada parte começa com uma nova linha e depois continua com o seguinte código (adicionamos espaços em branco e comentários abaixo):
Depois disso, vem uma cópia de todos os octetos que não foram usados no programa até agora (apenas para aumentar a pontuação) e, finalmente, a soma de verificação. (Não há nova linha final; as peças começam com uma nova linha, mas não terminam com uma.)
Existem três casos distintos aqui:
%z
um número ímpar de vezes, finalmente terminando na tabela de hash. Na verdade, será a única chave na tabela de hash (como a sequência será executada após a nova linha da segunda parte até o final da terceira parte e a tabela de hash começou com apenas uma única nova linha). apenas será impresso por conta própria.<DATA>
contém todos os caracteres um número par de vezes, portanto, a tabela de hash terá seu conteúdo original, uma única nova linha, e isso será impresso.<DATA>
só começa a ler a partir da linha abaixo__DATA__
, então só verá a terceira parte. Isso tem mais de cinco caracteres que aparecem um número ímpar de vezes, portanto, acionará o caso especial para imprimir uma nova linha.Verificação
Uma última coisa que deve ser verificada para praticamente qualquer programa A Pear Tree endurecido por radiação é se uma exclusão causa aleatoriamente uma seção indesejada do código para somar a soma de verificação corretamente e girar o código para o lugar errado; como estamos usando somas de verificação de 32 bits, isso é improvável, mas não impossível. Usei o seguinte script de força bruta para garantir que isso não ocorra com nenhuma exclusão:
O script de verificação confirma que este programa funciona corretamente.
fonte
Stax , 11 bytes (Pontuação 4)
Execute e depure online!
É minha honra ter a primeira resposta (cronologicamente) a esse desafio com uma pontuação maior ou igual a 4. Talvez a pontuação possa ser ainda maior.
No Stax, uma literal de string composta por um único caractere é escrita com
'
, assim'', 'c, 'd, '~
como todos os literais de string. Os comandosc
d
e~
meios correspondentes duplicam a parte superior da pilha principal, pop na parte superior da pilha principal, pop na parte superior da pilha principal e empurre para a pilha de entrada, respectivamente. Para esse desafio, a pilha de entrada não afeta a saída e não é importante; portanto, podemos dizerd
e~
somos idênticos.Explicação
É melhor dividir o código em várias partes e considerá-los separadamente.
Quando não é violado,
'''cc
empurra um literal'
e um literalc
para a pilha principal e duplica a parte superior, de modo que a pilha seria (de baixo para cima)c,c,'
.Quando não violado,
'~~
empurra o literal~
e o abre (e empurra para a pilha de entrada), o que é basicamente um não operacional para a pilha principal.Quando não adulterado,
'dd
empurra o literald
e, em seguida, abre, outro não-op para a pilha principal.No final do programa, como nenhuma saída explícita é feita, a parte superior da pilha principal será impressa implicitamente.
Se o programa estiver sendo executado como está, a pilha final ainda está
c,c,'
e será exibidac
.Se a primeira parte se tornar
''cc
, então temos'
instruções literais e duas cópias, a pilha final será',','
. Dado que as outras duas partes não são opcionais, o resultado será'
.Se a primeira parte se tornar
'''c
, o resultado será basicamente o mesmo com a não alterada, masc
não será duplicada. Então a pilha serác,'
. Depois de dois no-op's, o topo da pilha éc
.Para que possamos detectar radiação na primeira parte.
A segunda parte e a terceira parte funcionam exatamente da mesma maneira. Vou pegar a terceira parte como exemplo.
Se a terceira parte for violada, as duas primeiras serão mantidas como estão e a pilha antes de executar a terceira parte será
c,c,'
Se a terceira parte se tornar
'd
, um literald
é empurrado para o topo da pilha principal e nada mais é feito. O topo da pilha principal é agora od
que será produzido.Se a terceira parte se tornar
dd
, dois elementos serão exibidos na pilha principal e agora o topo da pilha é'
e é gerado.Portanto, podemos detectar radiação na terceira parte. Pela mesma razão, podemos detectar radiação na segunda parte.
fonte
05AB1E , pontuação 2, 6 bytes
Às vezes, imprime o dobro do caractere removido. Não contém
'
.Como funciona:
Removendo o primeiro
„
Experimente online!
Primeiro, colocamos uma string vazia literal na pilha. Em seguida, pressionamos
„„
, que é impresso implicitamente.Removendo um
"
Experimente online!
Primeiro, empurramos
""
para a pilha com as2-char string
instruções. Em seguida, tentamos obter outra sequência de 2 caracteres, mas isso é abortado (não sei exatamente por que) e o""
é impresso.Remoção do segundo ou terceiro
„
Experimente online!
Primeiro, empurramos
""
para a pilha com as2-char string
instruções. Em seguida, pressionamos„
, que é impresso implicitamente.fonte
Geléia , 5 bytes, pontuação 2
Experimente online!
Com qualquer um
”
removido:Experimente online!
O caractere
”
inicia um caractere de um byte literal. Este programa começa com o””
qual produz a string”
. Aḷ
díade leva seu argumento à esquerda. A cadeia”
apenas é passada pelas duas instâncias deḷ
.Com qualquer um
ḷ
removido:Experimente online!
Neste programa
””
yields o personagem”
, em seguida,”ḷ
produz o caráterḷ
e só esta é a saída.Outras soluções
a
ouo
teriam trabalhado no lugarḷ
dessa submissão.⁾⁾⁾⁾FFF
. Isso funciona de maneira semelhante.⁾
é como”
mas inicia uma string de dois bytes literal. Os programas "irradiados" produzem o byte excluído duas vezes, que foi considerado válido nos comentários.Aqui está uma versão Jelly (muito menos chique) do verificador de validade do Magic Octopus Urn. A coluna esquerda da saída é o caractere excluído e a coluna direita é a saída do programa resultante.
fonte