Linha, Coluna, Diagonal, Bloco

13

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:

  1. Quando a linha superior é extraída e executada como um programa, o texto exato rowprecisa ser impresso no stdout.

    Por exemplo, ThisIimprimiria row.

  2. Quando a coluna da esquerda é extraída e executada como um programa, o texto exato colprecisa ser impresso no stdout.

    Por exemplo, Tsyekimprimiria col.

  3. Quando a diagonal principal dos cantos superior esquerdo e inferior direito é extraída e executada como um programa, o texto exato diaprecisa ser impresso em stdout.

    Por exemplo, TMCoyimprimiria dia.

  4. Quando o bloco inteiro é executado como um programa, incluindo as novas linhas (com uma nova linha opcional à direita), o texto exato blkprecisa 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

Passatempos de Calvin
fonte
Dado que não é certamente uma solução em algum de dois símbolo linguagem esotérica, eu acho que isso vai se tornar uma solução para espremer isso em menor N.
xnor
@xnor Provavelmente. Embora uma resposta distinta de um idioma não esteja fora do campo da possibilidade. Ainda assim, esse método de pontuação é mais interessante do que ter o menor N vencendo primeiro.
Calvin's Hobbies
Como o Lenguage pode funcionar, considerando que os programas de linha e coluna têm o mesmo comprimento?
Xnor
@ xnor Ah, você está certo. Isso não daria certo.
Calvin's Hobbies
Os programas não-bloco também podem terminar com uma nova linha à direita?
precisa saber é o seguinte

Respostas:

6

> <> (Peixe) , 3 caracteres únicos (N = 2000)

O código usa 1e -para colocar números arbitrários na pilha e p(auto) modificar o código com base nos 3 principais números da pilha. Por exemplo, colocar uma !posição em 0 0seria semelhante a 003b*pnormal> <> e com p1-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 ):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

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 .

randomra
fonte
14

CJam, 13 12 caracteres únicos, N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

Tão simples quanto possível

UPDATE : espaço convertido para a(no-op neste caso), como apontado por Runner112

Experimente online aqui

Optimizer
fonte
2
Todo espaço pode ser transformado em um personagem que areduz a contagem de caracteres únicos até 12, certo?
precisa saber é o seguinte
@ Runer112 Porra! Obrigado pela dica!
Optimizer
8

Bash, 19 caracteres únicos, N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • A primeira linha é trap echo\ row exit. Isso faz echo rowcom que seja executado quando o script sair (apenas a primeira linha)
  • A primeira coluna é ttt=t echo col
  • A diagonal é t=tt echo dia
  • O bloco completo funciona cancelando o manipulador EXIT configurado na primeira linha e, em seguida echo blk, sai.
Trauma Digital
fonte
1
Você pode usar letras minúsculas exitpara reduzir caracteres únicos em 4. Você também pode mover o exitcomando para a próxima linha e substituir todos os pontos e vírgulas por espaços.
precisa saber é o seguinte
6

> <> , 14 caracteres únicos, N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

Bem simples em uma linguagem 2D. A única parte complicada é que precisamos \distinguir entre rowe blk.

Sp3000
fonte
randomra observa que p1-daria uma solução de três caracteres, mas seria muito chato de gerar (e provavelmente não vai ganhar).
Sp3000 04/04
3

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, cole diasã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 blkprograma é onde ocorre a ligeira flexão da regra. Para imprimir o "texto exato blk", 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 programas row/ col/ diasã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.

DPenner1
fonte
2

C (gcc) , 26 caracteres únicos, N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

Experimente online!

gastropner
fonte
1

Ruby, 24 caracteres únicos, N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

Experimente online!

Lynn
fonte