Considera come una parola potrebbe essere disposta su una griglia Boggle arbitrariamente grande se la regola di non usare lo stesso cubo di lettere più di una volta viene ignorata . Supponi anche di avere un numero illimitato di cubetti di lettere (con tutte le lettere presenti) ed Qu
è giusto Q
.
La parola MISSISSIPPI
potrebbe essere organizzata usando solo 6 cubi. Ecco una possibile disposizione:
S
MIS
PP
A partire dal M
ripetiamo ripetutamente qualsiasi passo in senso orizzontale, verticale o diagonale fino a quando l'intera parola non viene scritta.
Sorprendentemente, una frase più lunga come AMANAPLANACANALPANAMA
richiede anche solo 6 cubi:
MAN
PLC
Tuttavia, il numero minimo di cubi necessari per stringhe più lunghe e complesse non è sempre evidente.
Sfida
Scrivi un programma che accetta una stringa e la organizza in questo modo simile a Boggle in modo tale che venga utilizzato il numero minimo di cubi . (Le dimensioni della griglia risultante e il numero di celle vuote sono irrilevanti.)
Supponiamo di avere un numero illimitato di cubi per ogni carattere ASCII stampabile ad eccezione dello spazio (codici esadecimali da 21 a 7E), poiché viene utilizzato come cella di griglia vuota. Verranno immesse solo stringhe ASCII stampabili (senza spazi).
L'input deve essere preso da stdin o dalla riga di comando. L'output dovrebbe andare su stdout (o alternativa più vicina).
Le nuove righe e spazi iniziali o finali nell'output vanno bene (ma si spera che non ci sia una quantità eccessiva).
Lo spazio di ricerca esplode esponenzialmente man mano che la stringa si allunga, ma non è necessario tentare di rendere efficiente l'algoritmo (anche se sarebbe bello :)). Questo è code-golf, quindi vince la soluzione più breve in byte .
Esempio
Se l'input fosse Oklahoma!
(minimo 8 caratteri), questi sarebbero tutti output validi perché tutti hanno esattamente 8 celle della griglia riempite e seguono il modello di lettura Boggle (rivisto):
Oklaho
!m
o
!
Oamo
klh
o
lkO
!amo
h
eccetera.