Il puzzle scorrevole più riconoscibile è il quindici puzzle . Ha una griglia 4 per 4, 15 tessere e uno spazio griglia vuoto. Le tessere possono muoversi solo nello spazio vuoto e devono essere sempre in linea con la griglia.
Definiamo un puzzle a scorrimento generalizzato come una griglia W bidimensionale per H alta ( W , H entrambi interi positivi) che contiene un numero di tessere identiche non marcate (tra 0 e W × H di esse) agganciate alla griglia, disposte in in ogni caso (senza sovrapposizioni), con spazi della griglia vuoti che riempiono il resto dell'area.
Ad esempio, se W e H sono 3 e una tessera è T
e uno spazio vuoto è E
una delle molte possibili disposizioni di puzzle schierandosi
TTT
TET
EET
Per questi puzzle ci sono 4 possibili mosse: spingere tutto in alto , spingere tutto in basso , spingere tutto a sinistra o spingere tutto a destra . La "spinta" in una direzione fa avanzare il più possibile tutte le tessere in quella direzione fino a quando non colpiscono un'altra tessera o il limite della griglia. A volte spingere non cambia il layout della griglia,
Se la griglia di esempio viene spostata correttamente, il risultato è
TTT
ETT
EET
Spinto a sinistra il risultato è
TTT
TTE
TEE
Spinto in basso il risultato è
EET
TET
TTT
(nota che entrambi T
sono spostati all'estrema sinistra )
Spingere in alto non cambia il layout della griglia in questo caso.
Nota che, poiché le tessere sono indistinguibili, questi puzzle non hanno stati "risolti". Si noti inoltre che un puzzle può iniziare in un layout a cui è impossibile tornare dopo che è stata effettuata una spinta (ad esempio una tessera nel mezzo di una griglia 3 per 3).
Sfida
Usando solo ASCII stampabile scrivi due blocchi rettangolari di codice, entrambi caratteri M larghi e N caratteri alti (per qualsiasi numero intero positivo M , N ). Un blocco di codice rappresenterà una tessera di un puzzle scorrevole, l'altro blocco di codice rappresenterà uno spazio di griglia vuoto.
Disporre questi due blocchi di codice in una griglia W per H creerà un puzzle scorrevole rappresentato da codice che può essere salvato come file di testo ed eseguito come un normale programma. Durante l'esecuzione, questo tipo di programmi dovrebbe richiedere all'utente tramite stdin un numero compreso tra 1 e 4; 1 è per su, 2 in basso, 3 a sinistra, 4 a destra . Quando l'utente digita il suo numero e inserisce i risultati, il programma calcola come spostare i riquadri del codice sorgente in quella direzione e salva il nuovo layout del puzzle in un file (un nuovo file o nello stesso file), quindi termina.
Questo processo può essere ripetuto indefinitamente con il nuovo file di codice a scorrimento scorrevole generato dopo ogni spinta.
Esempio
Supponiamo che il mio blocco di codice del riquadro sia simile a questo
// my
// tile
e il mio blocco di codice dello spazio griglia vuoto è simile al seguente
//empty
//space
( M = 7, N = 2, questo ovviamente non è un codice reale)
Qualsiasi disposizione di puzzle scorrevole valida di questi due blocchi dovrebbe creare un programma nella lingua che sto usando che può essere eseguito per consentire all'utente di spostarsi in una certa direzione.
La rappresentazione del codice della griglia di esempio è:
// my// my// my
// tile// tile// tile
// my//empty// my
// tile//space// tile
//empty//empty// my
//space//space// tile
Quindi eseguendolo e premendo 2 (per il basso), quindi Invio scriverlo su un altro file (o sullo stesso file):
//empty//empty// my
//space//space// tile
// my//empty// my
// tile//space// tile
// my// my// my
// tile// tile// tile
Il file potrebbe quindi essere eseguito e inserito nello stesso esatto modo.
Appunti
Qualsiasi rappresentazione in codice di un puzzle scorrevole W by H dovrebbe essere eseguibile e essere in grado di inserirsi correttamente. Questo include tutti i formati di griglia da 1 da 1 a un valore massimo ragionevole (2 16 da 2 a 16 o più).
Un programma può leggere il proprio codice sorgente. Non ci sono restrizioni basate su quine. Anche i commenti di qualsiasi tipo vanno bene.
Il programma deve richiedere una direzione in cui spingere anche se non ci sono tessere da spingere o nessuna tessera può essere spinta. Il prompt è semplicemente un posto dove digitare un numero, non è richiesto alcun messaggio.
È possibile supporre che l'input sia sempre valido (1, 2, 3 o 4).
Riempire i blocchi di codice con spazi va bene. Ricorda che possono essere solo ASCII stampabili, questo significa nessuna scheda e nessuna nuova riga (oltre alle nuove righe che aiutano a formare i blocchi di codice).
Se la tua lingua non supporta stdin, utilizza il metodo di input più vicino.
Puoi richiedere che una nuova riga sia alla fine dei tuoi file di puzzle di codice. (O richiede che non sia lì.)
Il modo in cui assegni nuovi file non è importante.
f.txt
o semplicementef
va bene.I due blocchi di codice potrebbero non essere identici.
punteggio
L'obiettivo è farlo con la dimensione del codice più piccola (motivo per cui questo è taggato code-golf). La presentazione con l'area del blocco di codice più piccola ( M × N ) è il vincitore. Il demolitore va alla risposta più votata.
Correlati: Codice che esegue il Gioco della vita su se stesso
f.txt
? Sì.