Escreva um bloco quadrado de código com N caracteres de largura e N caracteres de altura, para algum número inteiro positivo N.
Por exemplo, seu N pode ser 5 e o bloco fica assim:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Esse bloco precisa se comportar da seguinte maneira:
Quando a linha superior é extraída e executada como um programa, o texto exato
row
precisa ser impresso no stdout.Por exemplo,
ThisI
imprimiriarow
.Quando a coluna da esquerda é extraída e executada como um programa, o texto exato
col
precisa ser impresso no stdout.Por exemplo,
Tsyek
imprimiriacol
.Quando a diagonal principal dos cantos superior esquerdo e inferior direito é extraída e executada como um programa, o texto exato
dia
precisa ser impresso em stdout.Por exemplo,
TMCoy
imprimiriadia
.Quando o bloco inteiro é executado como um programa, incluindo as novas linhas (com uma nova linha opcional à direita), o texto exato
blk
precisa ser impresso em stdout.Por exemplo,
ThisI sMy5B y5Cod eBloc kOkay
iria imprimir
blk
.
Detalhes
- Todos os quatro programas são executados na mesma linguagem de programação.
- Os caracteres N 2 no bloco original podem ser qualquer coisa, exceto terminadores de linha .
- Se seu idioma não possui um stdout, você pode usar outro método de saída comum. Ele deve ser o mesmo método nos quatro programas.
A submissão cujo bloco original contém o menor número de caracteres distintos (sem contar as novas linhas) vence. O desempatador vai para a finalização com o N. menor
fonte
Respostas:
> <> (Peixe) , 3 caracteres únicos (N = 2000)
O código usa
1
e-
para colocar números arbitrários na pilha ep
(auto) modificar o código com base nos 3 principais números da pilha. Por exemplo, colocar uma!
posição em0 0
seria semelhante a003b*p
normal> <> e comp1-
ela se tornará111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.Após a modificação, o ponteiro de instrução (IP) envolve o código e executa a parte modificada. No caso de "bloco", o IP é redirecionado para modificações adicionais (depois redirecionadas novamente) para diferir do caso de "linha". No caso de "linha", o mesmo redirecionamento ocorre, mas não há código entre eles, portanto eles não têm efeito.
Os códigos finais gerados para os 4 casos (omitindo as
p1-
partes inalteradas ):O tamanho do código é de 4 MB e o código pode ser acessado aqui . (Não há dificuldade em executá-lo.)
O programa gerador python3 pode ser acessado aqui .
fonte
CJam,
1312 caracteres únicos, N = 5Tão simples quanto possível
UPDATE : espaço convertido para
a
(no-op neste caso), como apontado por Runner112Experimente online aqui
fonte
a
reduz a contagem de caracteres únicos até 12, certo?Bash, 19 caracteres únicos, N = 19
trap echo\ row exit
. Isso fazecho row
com que seja executado quando o script sair (apenas a primeira linha)ttt=t echo col
t=tt echo dia
echo blk
, sai.fonte
exit
para reduzir caracteres únicos em 4. Você também pode mover oexit
comando para a próxima linha e substituir todos os pontos e vírgulas por espaços.> <> , 14 caracteres únicos, N = 10
Bem simples em uma linguagem 2D. A única parte complicada é que precisamos
\
distinguir entrerow
eblk
.fonte
p1-
daria uma solução de três caracteres, mas seria muito chato de gerar (e provavelmente não vai ganhar).Brainfuck, 2 caracteres únicos, N = 378
Com possível ligeira flexão de regras.
O programa é um pouco grande, então aqui está um link para ele no Pastebin .
Os programas
row
,col
edia
são diretos. Eles simplesmente incrementam a célula de bytes até que o código ASCII correto seja atingido e depois seja gerado. Se a letra já tiver passado, ela será incrementada até a célula estourar, para que possa recomeçar em 0.O
blk
programa é onde ocorre a ligeira flexão da regra. Para imprimir o "texto exatoblk
", conforme solicitado no desafio, são usados backspaces (código ASCII 8), que requerem o console / terminal de exibição para suportá-lo. Sempre que valores errados dos programasrow
/col
/dia
são impressos, garanto que eles são removidos, emitindo alguns códigos de controle de backspace. Para simplificar, assegurei que todos os valores errados emitidos em um ponto façam parte do intervalo ASCII imprimível.fonte
C (gcc) , 26 caracteres únicos, N = 29
Experimente online!
fonte
Ruby, 24 caracteres únicos, N = 17
Experimente online!
fonte