Considere cómo se podría organizar una palabra en una cuadrícula Boggle arbitrariamente grande si se ignora la regla sobre no usar el mismo cubo de letras más de una vez . También suponga que tiene un número ilimitado de cubos de letras (con todas las letras presentes), y Qu
es justo Q
.
La palabra se MISSISSIPPI
podría arreglar usando solo 6 cubos. Aquí hay un posible arreglo:
S
MIS
PP
Comenzando en el M
, repetidamente damos un paso horizontal, vertical o diagonal hasta que se deletrea toda la palabra.
Sorprendentemente, una frase más larga como AMANAPLANACANALPANAMA
también solo necesita 6 cubos:
MAN
PLC
Sin embargo, el número mínimo de cubos necesarios para cadenas más largas y complejas no siempre es obvio.
Desafío
Escriba un programa que tome una cadena y la organice de manera similar a Boggle, de modo que se use el número mínimo de cubos . (Las dimensiones de la cuadrícula resultante y el número de celdas vacías son irrelevantes).
Suponga que tiene un número ilimitado de cubos para cada carácter ASCII imprimible, excepto el espacio (códigos hexadecimales 21 a 7E), ya que se utiliza como una celda de cuadrícula vacía. Solo se ingresarán cadenas ASCII imprimibles (sin espacios).
La entrada debe tomarse de stdin o la línea de comando. La salida debe ir a stdout (o la alternativa más cercana).
Las nuevas líneas y espacios iniciales o finales en la salida están bien (pero es de esperar que no haya una cantidad excesiva).
El espacio de búsqueda explota exponencialmente a medida que la cadena se alarga, pero no es necesario que intente hacer que su algoritmo sea eficiente (aunque eso sería bueno :)). Este es el código de golf, por lo que gana la solución más corta en bytes .
Ejemplo
Si la entrada fuera Oklahoma!
(mínimo de 8 caracteres), todas estas serían salidas válidas porque todas tienen exactamente 8 celdas rellenas y siguen el patrón de lectura (revisado) de Boggle:
Oklaho
!m
o
!
Oamo
klh
o
lkO
!amo
h
etc.
Respuestas:
Python 342
355398La sangría en cuatro espacios es en realidad un carácter de tabulación.
AMANAPLANACANALPANAMA
:MISSISSIPPI
:Oklahoma!
:Llanfairpwllgwyngyll
es letal ;)fuente
import sys
y reemplazándolosys.argv[1]
conraw_input()
.elif
deelif not c and (not A or len(b)<len(A[-1])):
y se ejecuta mucho más rápido"Oklahoma!"
está bien, puede usar eninput()
lugar deraw_input()
.