Fila, colonna, diagonale, blocco


13

Scrivi un blocco quadrato di codice con N caratteri larghi e N caratteri alti, per un numero intero positivo N.

Ad esempio, la tua N può essere 5 e il blocco è simile al seguente:

ThisI
sMy5B
y5Cod
eBloc
kOkay

Questo blocco deve comportarsi come segue:

  1. Quando la riga superiore viene estratta ed eseguita come programma, il testo esatto rowdeve essere stampato su stdout.

    Ad esempio, ThisIstampa row.

  2. Quando la colonna di sinistra viene estratta ed eseguita come programma, il testo esatto coldeve essere stampato su stdout.

    Ad esempio, Tsyekstampa col.

  3. Quando la diagonale principale dagli angoli in alto a sinistra in basso a destra viene estratta ed eseguita come programma, il testo esatto diadeve essere stampato su stdout.

    Ad esempio, TMCoystampa dia.

  4. Quando l'intero blocco viene eseguito come programma, comprese le nuove righe (con una nuova riga finale facoltativa), il testo esatto blkdeve essere stampato su stdout.

    Per esempio,

    ThisI
    sMy5B
    y5Cod
    eBloc
    kOkay
    

    stamperebbe blk.

Dettagli

  • Tutti e quattro i programmi vengono eseguiti nello stesso linguaggio di programmazione.
  • I caratteri N 2 nel blocco originale possono essere tutt'altro che terminatori di riga .
  • Se la tua lingua non ha uno stdout, puoi usare un altro metodo di output comune. Deve essere lo stesso metodo in tutti e quattro i programmi.

Vince l'invio il cui blocco originale contiene il minor numero di caratteri distinti (senza contare le nuove righe). Tiebreaker va alla presentazione con il più piccolo N.


Dato che c'è sicuramente una soluzione in qualche linguaggio esoterico a due simboli, penso che questa diventerà una soluzione per comprimerlo nel più piccolo N.
xnor

@xnor Probabilmente. Anche se un 1-distinto Lenguage risposta non è fuori del regno delle possibilità. Tuttavia, questo metodo di punteggio è più interessante che avere prima la N più piccola.
Calvin's Hobbies,

Come può funzionare Lenguage dato che i programmi di riga e colonna hanno la stessa lunghezza?
xnor

@xnor Ah, hai ragione. Non funzionerebbe.
Calvin's Hobbies,

I programmi non bloccati possono anche terminare con una nuova riga finale?
jimmy23013,

Risposte:


6

> <> (Pesce) , 3 caratteri unici (N = 2000)

Il codice usa 1e -per mettere numeri arbitrari nello stack e pper (auto-) modificare il codice in base ai primi 3 numeri nello stack. Ad esempio, mettere una !posizione at 0 0sembrerebbe 003b*pnormale> <> e con p1-essa diventa 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.

Dopo la modifica, il puntatore dell'istruzione (IP) avvolge il codice ed esegue la parte modificata. Nel caso "blocco" l'IP viene reindirizzato per ulteriori modifiche (quindi reindirizzato indietro) in modo che differisca dal caso "riga". Nel caso "row" si verificano gli stessi due reindirizzamenti, ma non è presente alcun codice tra loro, quindi non hanno alcun effetto.

I codici generati finali per i 4 casi (omettendo le p1-parti invariate ):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

La dimensione del codice è di 4 MB e il codice è accessibile qui . (Non è difficile eseguirlo.)

Il programma python3 del generatore è accessibile qui .


14

CJam, 13 12 caratteri unici, N = 5

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

Il più diretto possibile

AGGIORNAMENTO : spazio convertito in a(no-op in questo caso) come indicato da Runner112

Provalo online qui


2
Ogni spazio può essere trasformato in un personaggio come aportare il conto alla rovescia del personaggio unico a 12, giusto?
Runer112,

@ Runer112 Accidenti! Grazie per il consiglio!
Ottimizzatore

8

Bash, 19 personaggi unici, 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                  
  • La prima fila è trap echo\ row exit. Questo fa sì echo rowche venga eseguito quando esce lo script (solo la prima riga)
  • La prima colonna è ttt=t echo col
  • La diagonale è t=tt echo dia
  • L'intero blocco funziona annullando il gestore EXIT impostato nella prima riga, echo blkquindi esce.

1
È possibile utilizzare lettere minuscole exitper ridurre i caratteri univoci di 4. È inoltre possibile spostare il exitcomando sulla riga successiva e sostituire tutti i punti e virgola con spazi.
jimmy23013,

6

> <> , 14 caratteri unici, N = 10

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

Abbastanza semplice in un linguaggio 2D. L'unica parte difficile è che abbiamo bisogno \di distinguere tra rowe blk.


Note randomra che p1-darebbero una soluzione a tre caratteri, ma sarebbe davvero fastidioso da generare (e probabilmente non vincerà).
Sp3000,

3

Brainfuck, 2 personaggi unici, N = 378

Con possibile leggera flessione delle regole.

Il programma è un po 'grande, quindi ecco un link ad esso su Pastebin .

I row, colei diaprogrammi sono semplici. Semplicemente incrementano la cella di byte fino a quando non viene raggiunto il codice ASCII giusto e quindi vengono emessi. Se la lettera è già passata, aumenta fino a quando la cella trabocca in modo da poter ricominciare da 0.

Il blkprogramma è dove si verifica la leggera flessione della regola. Per stampare il "testo esatto blk" come richiesto nella sfida, vengono utilizzati i backspaces (codice ASCII 8), che richiede la console / terminale di visualizzazione per supportarlo. Ogni volta che vengono stampati valori errati dai programmi row/ col/ dia, mi assicuro che vengano rimossi emettendo alcuni codici di controllo del backspace. Per semplificare le cose, ho assicurato che tutti i valori erranti emessi in un punto fanno parte dell'intervallo ASCII stampabile.


2

C (gcc) , 26 caratteri univoci, 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";

Provalo online!


1

Rubino, 24 caratteri unici, 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;{}

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.