introduzione
Scrivi un programma completo che ruota un blocco rettangolare di caratteri ASCII di 90 gradi in senso orario. Quando il programma stesso viene ruotato di 90 gradi in senso orario, ruota un blocco di caratteri ASCII di 90 in senso antiorario.
Regole
- Molti non usano built-in che ruotano o traspongono matrici. Ad esempio, in MATLAB / Octave
rot90
e l'operatore di trasposizione'
non sono consentiti. - È necessario scrivere un programma completo che utilizza STDIN e STDOUT o l'equivalente più vicino.
- Il programma deve essere rettangolare e supporre che anche l'input sia rettangolare.
- L'input e l'output sono stringhe separate da una nuova riga e non avranno nuove righe finali.
Se eseguito con il suo codice sorgente come input, il programma deve ruotare di 90 gradi in senso orario. L'output deve essere un secondo programma nella stessa lingua che ruota il suo input di 90 gradi in senso antiorario. Quando al programma ruotato viene assegnato il suo codice sorgente come input, dovrebbe generare il codice sorgente del programma originale.
Nota: entrambi i programmi devono funzionare per qualsiasi input, non solo per il proprio codice sorgente, quindi non è consentito un quine di un carattere.
Esempio
Supponiamo che il seguente sia un programma valido che ruota il suo input di 90 gradi in un linguaggio ipotetico ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
Se eseguito con se stesso come input, genera un altro programma valido che ruota il suo input in senso antiorario:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Questo secondo programma, se dato a se stesso come input, emette il programma originale. Si noti che la linea vuota dovrebbe avere quattro spazi e che c'è uno spazio finale sulla penultima riga che non può essere renderizzato in markdown. Chiarire:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
Vince il programma più breve. Le scappatoie standard sono vietate.
:.+
essere suddiviso su più righe?