Imundo e Único

26

Nesta pergunta, falarei de programas como strings, são strings de bytes, não caracteres. Como o programa resultante é renderizado ou exibido não é importante para esse desafio, apenas como ele aparece na memória é importante.

Um programa primitivo é um programa que, quando executado, não comete erros, no entanto, sempre que uma substring contínua de tamanho n , quando 1 n < | S | , é removido.Sn1n<|S|

Um programa imundo é o oposto, é um programa que, quando executado , com erro, no entanto, sempre que uma substring contínua de tamanho n , onde 1 n < | S | , é removido, não comete erro.Sn1n<|S|

Para este desafio, um erro é uma saída não vazia para STDERR.

Seu desafio é escrever um programa imundo que use o máximo possível de bytes únicos. Isso significa que você receberá um ponto por cada byte exclusivo que aparecer no seu código, com uma pontuação maior sendo melhor. A pontuação máxima é, portanto, 256.

Assistente de Trigo
fonte
É possível responder isso em idiomas que envolvem parênteses / parênteses? Seria possível remover alguma substring do código para que houvesse colchetes incompatíveis.
JungHwan min
@JungHwanMin Se o idioma aplicar parênteses equilibrados, eu suspeitaria que seria impossível.
Assistente de trigo
@ CatWizard para que um programa imundo não ocorra quando uma subsequência contínua de caracteres (ou seja, um conjunto não contínuo de bytes) for removida, correto?
JungHwan min
@JungHwanMin Desculpe. Pode ser que sim ou que não. Nós nos preocupamos apenas com seqüências contínuas.
Assistente de trigo

Respostas:

18

Unário , 14 bytes

123456789ABCDE

Isso codifica o programa brainfuck [, que erros devido a colchetes incomparáveis.

Remoção de bytes irá resultar em >, <, +, -, ., ,ou o programa vazio, que são programas brainfuck válidos.

Dennis
fonte
Esta é a solução ideal, uma vez que qualquer solução de longo poderia ser reduzida a esta solução, que erros
Jo Rei
Essa também é a única solução.
precisa saber é o seguinte
13

R , 3 bytes

qrt

Experimente online!

O nome de um objeto é um programa válido em R.

qrt não é o nome de nada, portanto, ele retorna um erro.

q é a função sair

qr é a função de decomposição QR

rt é a função de amostragem da distribuição t

qt é o CDF inverso da distribuição t

t é a função de transposição

ngm
fonte
2
@pajonk, mas "r" é uma substring contínua. Removendo isso deixa "qt"
Orphevs
3
Existe exatamente um programa imundo em R de comprimento 3, e é isso! (os programas válidos único single caracteres são 0-9cqtCDFIT, qualquer programa deve, portanto, começar com cm, qf, qr, qt, tsou Im. O comprimento três possibilidades são qrf, qrm, qrt, qtse tsde apenas uma delas é imundo (os outros não pode ser estendido tanto para torná-los imundo como não há funções rm*, rf*, ts*, sd*)
JPL
@Orphevs meu mal, interpretou mal o desafio.
Pajonk
10

Gelatina , 4 5 6 7 8 10 11 bytes

“a”;⁽PFð+µU

Experimente online!

Verifique isso.

Tenta adicionar uma sequência com um número inteiro.

Alguns dos possíveis subprogramas:

“a” é uma string literal.

“a é a mesma string literal.

é a string vazia.

“a”; concatena "a" consigo mesmo.

... muitos para enumerar todos eles.

dylnan
fonte
1
Felizmente, o Jelly ainda permite que você cometa erros.
precisa saber é o seguinte
6

Poliglota, 3 bytes

1 2

Trabalha em:

  • Javascript
  • Rubi
  • R
  • Oitava
  • GHCi
  • Julia

Em JavaScript, lança SyntaxError: token inesperado: literal numérico ou um erro semelhante.

Todas as outras strings são literais numéricos válidos ( 1 , 2 ou 12 ).


No GHCi isso lança

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

Isso é porque ele tenta aplicar 1a 2como uma função, no entanto, não pode. Quando qualquer parte disso é removida, ela simplesmente se torna um literal numérico.

Arnauld
fonte
Poliglota: R, oitava, Ruby, os Pythons ...
ngm
1
@ngm GHCi também, no entanto, erros `2` em python.
Wheat Wizard
Eu suspeitava que fosse muito genérico. Transformei isso em wiki da comunidade, portanto, fique à vontade para editar com todos os idiomas para os quais isso funciona!
Arnauld
5

Python 2/3 , 3 bytes

4\f2

OU

4\x0c2

Experimente online!

No python, "\ f" é igual a "\ x0c" e é um caractere de feed de formulário . Isso significa que indica uma impressora para a próxima linha.

Se uma expressão python começa ou termina com \f, ela é basicamente ignorada, assim \f2como uma expressão válida.

O 4e 2pode ser qualquer número de 0 a 9. No entanto, para o primeiro byte a ser 0válido apenas no Python 2.7.15, como 02foi feita uma declaração legal de 2.

Portanto, a própria expressão falha com um erro de sintaxe, porque há dois números separados por um espaço em branco. No entanto, qualquer encurtamento coloca \fno começo ou no fim, onde não importa, ou cria 42qual é válido.

(Vale a pena notar que no IDLE esse arquivo é aberto com a aparência "42".)

Fonte da explicação do feed de formulário: /programming//a/26184126

The Matt
fonte
3
Isso seria mais fácil de entender se você usasse o código real na fonte sem o \f. Aqui está um link do try it online, no qual você pode obter uma resposta pré-formatada.
Assistente de trigo
1
Eu o adicionei como uma variante para esclarecimentos. Além disso, obrigado pela sugestão do link.
The Matt