Cubically è troppo noioso per scrivere manualmente qualsiasi codice. La tua sfida è tradurre il testo ASCII in codice cubicamente sorgente.
cubica
Questo è solo un breve riassunto di Cubically; il repository ha una guida e dettagli più completi.
Cubically è un esolang che ho scritto qualche tempo fa, progettato per essere doloroso da usare. Contiene due pezzi di memoria, un cubo di Rubik 3x3x3 e un registro chiamato "blocco note".
Memoria
Il cubo di Rubik interno è inizializzato in questo modo:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Dopo aver eseguito una rotazione di 90 ° in senso orario sulla faccia destra, il cubo di memoria sarebbe simile al seguente:
002
002
002
111225333044
111225333044
111225333044
554
554
554
comandi
Un carattere non intero imposta il comando predefinito. Per ogni numero intero prima che il comando predefinito venga nuovamente impostato, il comando viene eseguito con quel numero intero. Ad esempio, x524y312
esegui il comando x
con 5, quindi con 2, quindi con 4, quindi esegue il comando y
con 3, quindi con 1, quindi con 2.
I numeri interi che utilizzano i comandi rappresentano gli indici dei volti. Quindi x0
si esibirà x
sulla faccia UP (indicizzata 0). x1
si esibirà x
sulla faccia SINISTRA (1-indicizzata) e così via.
L'esecuzione di qualsiasi comando con 6
eseguirà quel comando sul valore del blocco note. L'esecuzione di qualsiasi comando con un numero intero superiore a 6 comporterà un errore.
Ecco alcuni comandi di esempio:
R1
- ruotare la faccia DESTRA di 90 ° in senso orario in modo che il cubo interno sia simile al secondo esempio sopraR11
- ruotare la faccia DESTRA di 90 ° in senso orario due volte, identico aR2
+0
- aggiungi tutti i valori della faccia SU al blocco note+000
- aggiungi tre volte tutti i valori della faccia SU al blocco note@6
- stampa la faccia (memoria) inesistente del 6 ° indicizzato come carattere%4
- stampa la somma di tutti i valori sulla faccia INDIETRO come un numero intero
Un elenco completo di comandi e sintassi è disponibile nel repository .
Sfida
Prenderai il testo ASCII come input e stamperai un programma cubico come output.
Esempi (rubati da qui e qui ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Regole
- Il tuo programma potrebbe non contenere un dizionario contenente le traduzioni per le 100 prove.
- Il programma deve terminare in meno di 180 secondi (nessun programma di forza bruta che richiede settimane).
- Il programma deve generare un codice cubico valido che termina in meno di 180 secondi.
- Il tuo programma prenderà l'input tramite l'input standard, a meno che tu non voglia fare confusione con il driver di test.
- Il tuo programma deve generare codice cubico che non produce altro che l'input del tuo programma quando eseguito. ಠ_ಠ
punteggio
Testerai il tuo programma con 100 stringhe pseudocasuali di lunghezza pseudocasuale. (Viene fornito uno script bash che farà questo per te.) Ecco come segnerai:
- Lascia che la lunghezza del programma di output sia o .
- Lascia che la lunghezza della stringa di input sia l .
- Lascia che una variabile r sia il risultato di o / l .
- Trova la media di tutti r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Prova con questo script. Dovrai modificarlo secondo le istruzioni. Si noti che il programma non verifica se l'output è un codice cubico valido. Se non riesci a far funzionare la sceneggiatura, posso aiutarti. Fai un rumore metallico nella chat room cubica .
@6
- stampa la somma della faccia inesistente del 6 ° indicizzato (blocco note) come carattere" sarebbe più precisa? È %4
anche una somma? I +
comandi sommano la faccia quindi lo aggiungono a tutti i valori o ...?
@6
/ %6
stampa direttamente il valore del blocco note come carattere / intero. @x
/ %x
(dove x è una faccia esistente) aggiunge tutti i valori sulla x
faccia non indicizzata e stampa la somma come carattere / intero. +
aggiunge tutti i valori sulla faccia specificata al registro.