Eres un empleado de la nueva tienda de comestibles Half Foods, y es el día antes del Día de Acción de Gracias Navidad Pascua. Dado que la tienda estará repleta de clientes que se apresuran a conseguir sus alimentos, la tienda necesita un administrador de tráfico para enviar a todos a las líneas apropiadas. Siendo perezoso, te gustaría automatizar esto para que puedas ir a la tienda de delicatessen antes de que todos tomen todo el jamón de pavo . Sin embargo, todo lo que tiene con usted es su teléfono, y codificar programas largos en él es un verdadero dolor, por lo que debe desarrollar sus habilidades de golf de código ninja .
Desafío
Visualicemos el supermercado en una cuadrícula bidimensional. Aquí hay una cuadrícula de muestra para diseccionar:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
La cuadrícula comienza con un e
, que representa una "salida" para el resto de la tienda. Cada generación, todos los puntos de venta en la red generan un comprador ( s
) directamente debajo. Los compradores se mueven hacia abajo cada generación hasta que te alcanzan ( Y
). Cuando un comprador llega a la misma fila que usted, debe teletransportarse al comienzo de la línea con la menor cantidad de compradores. Un comprador se mueve inmediatamente a la línea cuando se movería a la fila con el Y
, no hay generación intermedia. Las líneas están representadas por la #
s: la columna después de la #
s es una línea. Los compradores bajan hasta el final de la línea (representado por una salida x
), y luego se convierten en un número aleatorio entre 1
y5
. Cada generación, debe disminuir los compradores numerados por 1
: cuando un comprador llega 0
, terminan de pagar y salen de la tienda.
Dada una entrada de una cuadrícula como esta, envíe la próxima generación de la tienda de comestibles (mueva a todos los compradores hacia abajo simultáneamente, redirija a los compradores y haga que se vayan si ya han terminado).
Muestras
Entrada:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Salida:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Entrada:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Salida
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Entrada:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Posible) Salida:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Entrada:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Salida:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Entrada:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Salida:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Este es el código de golf , por lo que gana el código más corto.
Respuestas:
Python 2 ,
477463453449423402397396393 bytesPruébalo en línea!
Todavía estoy trabajando en jugar golf pero resuelve el problema por ahora
fuente
C ++,
898896885841 bytesMuy largo para codificar ... pero está ahí
-2 bytes gracias a Conor O'Brien
-45 bytes gracias a Zacharý
Entonces ... algunos detalles:
Debe pasar un
std::vector<std::string>
(se redimensionará a la misma longitud que la cadena más larga)Todas las líneas de
#
inicio en las mismas coordenadas y (vertical), tienen la misma longitud y terminan en las mismas coordenadas y (vertical)Suponga que la cuadrícula tiene al menos 1
#
línea o más, tiene una letrae
(una salida) en la parte superior, una letraY
Suponga que la entrada es una salida válida, por lo que los compradores que esperan ser redirigidos siempre serán uno tras otro.
Editar: Acabo de ver en los comentarios de la respuesta del Asistente de trigo que debe admitir múltiples entradas, continuaré trabajando en eso
fuente
#define C(e)i[j].find(e)!=string::npos
?C(e)
ser#define C(e)if(i[j].find(e)!=string::npos
y cambiar las llamadas en consecuencia.length()
que solo se aplicaa
, puede cambiarL
para que se defina comoa.length()
, modificando las llamadas en consecuencia. Además, puede moverusing namespace std;
hacia abajo, ahorrando un byte eliminando la nueva línea