Sua tarefa é escrever um programa de computador não vazio composto por alguma sequência de bytes. Se escolhermos um byte específico no programa e removermos todas as instâncias do programa, o programa modificado deverá gerar o byte removido.
Por exemplo, se nosso programa fosse
aabacba
Então bcb
iria produzir a
, aaaca
precisaria produzir b
e aababa
produziria c
.
Não importa o que o programa não modificado faz.
As respostas serão pontuadas em bytes, com o objetivo de minimizar o número de bytes.
code-golf
source-layout
radiation-hardening
Assistente de Trigo
fonte
fonte
Respostas:
zsh,
603594566561548440415399378370 bytesDepende do coreutils +
dc
.Experimente online!
Isso foi ... uma jornada.
Esta resposta tem três partes. As 4 primeiras linhas lidam com certos casos especiais para simplificar o código a seguir. As próximas 2 linhas e a última linha realizam essencialmente a mesma coisa, mas exatamente uma é executada com qualquer remoção de caractere. Eles são escritos com conjuntos de caracteres principalmente complementares, para que a remoção de qualquer caractere quebre apenas um, permitindo que o outro continue funcionando.
Olhando para a primeira parte, primeiro lidamos com
ec\nho \\n
ca t<<<$'\x20'
(seguido deexi t
para evitar a execução de código posterior, o que resultaria em saída estranha)$
remoção comd$c -e8BC6P
(8BC6
=9226
is36*256 + 10
e 36 e 10 são os valores de bytes dos$
caracteres newline e respectivamente; usamos dígitos hexadecimais em decimal para evitar a necessidade de incluí-los no grande comentário da linha 6)0
remoção comd0c -eKp
(K
obtém a precisão decimal, que é0
por padrão)Na próxima parte, os únicos caracteres usados (além do lixo no final da segunda linha) são
$'\01234567v;
espaço e nova linha. Destas, quatro foram contabilizadas, portanto o restante ('\1234567v
) não pode ocorrer na última linha. Expandindo as fugas octais ($'\123'
representa o caractere ASCII com o valor 123 8 ), obtemos:A primeira linha percorre todos os caracteres usados no programa e procura cada um em seu próprio código-fonte (
$0
é o nome do arquivo do script que está sendo executado), imprimindo qualquer caractere que não seja encontrado.A segunda linha parece um pouco estranha e parece fazer a mesma coisa que
exit
com um monte de nops. No entanto, a codificaçãoexit
como octal resulta diretamente em$'\145\170\151\164'
, que não contém2
ou3
. Na verdade, precisamos tornar isso menos resistente a remoções. Isso ocorre porque, se algum'\014567v
deles for removido, quebrando a primeira linha, a segunda linha também será interrompida, permitindo a execução do restante do código. No entanto, precisamos também quebrar se2
ou3
forem removidos para que as linhas 3 e 4 possam ser executadas. Isso é conseguido pela calçadeira em:
e;
, que tem 2 e 3 em sua representação octal, respectivamente.O lixo eletrônico no final da linha 2 está simplesmente lá para garantir que todos os caracteres ASCII imprimíveis apareçam pelo menos uma vez, pois a maneira como a verificação é feita percorrendo cada um deles exige isso.
Se
exit
não foi chamado na primeira seção (isto é, foi mutilado pela remoção de uma'\01234567v
), passamos para a segunda, na qual devemos realizar a mesma coisa sem usar nenhum desses caracteres. A última linha é semelhante à primeira linha decodificada, exceto que podemos contratar o intervalo do loop para salvar alguns bytes, porque já sabemos que todos os caracteres, exceto os'\01234567v
, foram cobertos. Ele também tem0# $#
antes, o que comenta e impede que produza uma saída estranha se0
ou$
foi removido.fonte
Retina , 1 byte
Experimente online!
Quando todas as instâncias do byte único (
1
) são removidas, a saída é1
. Simples o suficiente.fonte
1
para o programa vazio? Independentemente disso, acho que as respostas em questão utilizam diferentes abordagens e comportamentos. Na OMI, uma resposta poliglota só é garantida se a abordagem permanecer a mesma. (Objetivamente, isso não é poliglota, pois o código real é diferente, para as respostas abaixo.) Sinta-se à vontade para votar como quiser, mas uma resposta válida é uma resposta válida. Vou manter minha resposta como ela é, não desejo incluir uma coleção de respostas nela.Idiomas, 216173027061157310 bytes
216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2
. Há216173027061157310 - 144115617572598740
$
s,216173027061157310 - 144115241762960340
#
s e216173027061157310 - 144115194786755540
espaços.Os 144115617572598740 se
#
espaços codificam o seguinte programa BF:Experimente online!
Os 144115241762960340 se
$
espaços codificam o seguinte programa BF:Experimente online!
Os 144115194786755540
$
s e#
s codificar o seguinte programa BF:Experimente online!
Edit: Saved 72057832274401770 bytes graças a @Nitrodon.
fonte
U
e byte 127? Experimente online! Ou mesmo apenas o nul byte e soh?U
era o menor byte ASCII imprimível que poderia ser produzido. Eu não queria usar bytes não imprimíveis.Geléia , 1 byte
Completamente diferente da resposta da Retina. assobios
Experimente online!
fonte
Poliglota * , 1 byte ( aguardando confirmação )
Experimente online! (usando triangularidade)
*: Isso funciona em uma variedade (bastante ampla) de idiomas (exceto para esolangs como 4,> <> e similares e algumas outras exceções). Idêntico à resposta Jelly no código fonte, mas o método de E / S é diferente - a saída é via código de saída. Quando alguém é removido
0
do código-fonte, ele fica com um programa vazio, que geralmente não gera erros e gera o código de saída 0 na maioria dos idiomas.fonte
sed , 1 byte
Experimente online!
Completamente diferente da resposta da retina ou da resposta da geléia.
fonte
Unário (não competitivo), 96 bytes
Aqui está
xxd
despejo.Uma definição mais ampla da linguagem Unary permite qualquer caractere em seu código-fonte. Mas não encontrei um compilador ou intérprete que funcionasse para isso. Então marquei esta resposta como não competitiva. Se você encontrar um que postou antes desta pergunta, eu irei linká-lo.
fonte