Siguiendo el consejo de la Sra. Pac-Man, que está preocupada por el sobrepeso, Pac-Man ha decidido realizar un seguimiento de su consumo diario de Pac-Dot. ¡Ayúdalo a contar el número de Pac-Dots en un camino dado en el laberinto!
El laberinto
Para ayudarlo a construir su propia codificación del laberinto, puede obtener algunos datos sin procesar aquí .
El viaje de Pac-Man
En el contexto de este desafío, se aplican las siguientes reglas:
- Primero, las buenas noticias: los fantasmas no están allí.
- Pac-Man siempre comienza su carrera en la posición indicada en la imagen de arriba, en dirección a Oriente. No hay Pac-Dot en la posición inicial.
- Mientras siga un camino recto, seguirá avanzando a los siguientes cuadrados.
- Cuando se encuentra con un giro de 90 ° sin ningún otro camino disponible (cuadrados naranjas en el mapa), toma el turno automática y sistemáticamente.
- Cuando se encuentra con un cruce donde hay varios caminos disponibles (cuadrados verdes en el mapa), puede continuar en la misma dirección, si corresponde, o elegir otra dirección (incluido un giro en U).
- Cuando Pac-Man pasa por una de las salidas en el lado medio izquierdo o medio derecho del laberinto, reaparece inmediatamente en el lado opuesto.
- Pac-Man se come todos los Pac-Dots en el camino que está siguiendo. Una vez que se ha comido un Pac-Dot, se retira del laberinto.
El reto
Entrada
Se le dará una cadena que describe el comportamiento de Pac-Man en los cruces que va a llegar. Esta cadena estará compuesta por los siguientes caracteres:
L
: gire 90 ° a la izquierdaR
: gire 90 ° a la derechaF
: ir hacia adelante (sin cambio de dirección)B
: ir hacia atrás (hacer un cambio de sentido)
Cuando todos los personajes han sido procesados, Pac-Man se detiene en el siguiente cruce que encuentra.
Salida
Debe imprimir o imprimir el número de Pac-Dots consumidos a lo largo de la ruta de entrada.
Reglas
- Puede escribir un programa completo o una función.
- Puede tomar la entrada en mayúsculas o minúsculas, ya sea como una cadena o una matriz de caracteres. También puede usar otros caracteres (pero solo un carácter por dirección) o números enteros
[0 .. 9]
. Si lo hace, especifíquelo claramente en su respuesta. - Puede suponer que la entrada siempre es válida. (El jsFiddle a continuación detectará errores, pero se supone que no debes hacerlo).
- Este es el código de golf, por lo que gana el código más corto en bytes.
- Las lagunas estándar están prohibidas.
Insinuación
Es posible que no sea necesario ni óptimo almacenar la forma exacta del laberinto.
Casos de prueba y demostración
Los siguientes casos de prueba, o cualquier otra entrada, se pueden probar en este jsFiddle .
1. Input : ""
Output : 1
Comment: Pac-Man just advances to the first junction, eats the Pac-Dot on it and stops.
2. Input : "L"
Output : 7
3. Input : "FFR"
Output : 13
4. Input : "LFLR"
Output : 17
Comment: Pac-Man will exit on the middle right side and re-appear on the left side.
5. Input : "BBBB"
Output : 2
6. Input : "BRRFFFL"
Output : 15
7. Input : "LFFRLFFFFRF"
Output : 50
8. Input : "BRFRLRFRLFR"
Output : 54
Comment: Pac-Man will exit on the middle left side and re-appear on the right side.
9. Input : "FFLRLFFLLLLFFBFLFLRRRLRRFRFLRLFFFLFLLLLFRRFBRLLLFBLFFLBFRLLR"
Output : 244
Comment: All cleared!
fuente
Respuestas:
Pyth,
356345 + 1 = 346 bytesEl código contiene algunos no imprimibles, así que aquí está el
xxd
hexdump reversible .Requiere la
-M
bandera para deshabilitar la memorización. Desafortunadamente, esto no se puede hacer en ningún ejecutor en línea que yo sepa.Aquí hay una versión ASCII
legible eimprimible:Explicación
Esto es mucho trabajo en progreso, por lo que aún no publicaré una explicación completa.
Básicamente, el programa representa el tablero como un gráfico (algo extraño) que utiliza cinco tablas de búsqueda: 2 para conectividad, 1 para direcciones de unión y 2 para recuento de puntos. Esto fue construido por un script de Python de 200 líneas en el que pasé demasiadas horas. Luego, el programa simplemente recorre la entrada y cuenta los puntos, actualizando las tablas de puntos a cero a medida que se recopilan los puntos.
QUE HACER:
fuente
k, 264 bytes
Volcado hexadecimal:
Los datos binarios al final codifican dos matrices:
a
consiste en pares de bytes, cada uno representando (64 * dirección) + junctionIdb
es el número de puntos Pacman entre cada par de cruces ena
El programa lee su propio archivo fuente (
p.k
) y decodifica los datos.La entrada proviene de stdin y usa 0x00,0x01,0x02,0x03 (también conocido como NUL, SOH, STX, ETX, los primeros cuatro códigos ASCII) en lugar de FLBR.
Uso mi propia implementación de k, que es limitada, hinchada, accidentada y lenta en comparación con la realidad . Pruebo con el siguiente programa:
fuente