Vous êtes un employé de la nouvelle épicerie branchée Half Foods, et c'est la veille de Thanksgiving Christmas Easter. Étant donné que le magasin sera rempli de clients se précipitant pour obtenir leurs denrées alimentaires, le magasin a besoin d'un gestionnaire de trafic pour envoyer tout le monde aux lignes appropriées. Étant paresseux, vous aimeriez automatiser cela afin de pouvoir aller à la charcuterie avant que tout le monde ne prenne tout le jambon de dinde . Cependant, tout ce que vous avez avec vous est votre téléphone, et coder de longs programmes dessus est une vraie douleur - vous devez donc vous défaire de vos compétences de ninja -golf .
Défi
Visualisons l'épicerie sur une grille à deux dimensions. Voici un exemple de grille à disséquer:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
La grille commence par un e
, qui représente une "sortie" pour le reste du magasin. Chaque génération, tous les points de vente de la grille génèrent un client ( s
) directement en dessous. Les acheteurs descendent chaque génération jusqu'à ce qu'ils vous atteignent ( Y
). Lorsqu'un acheteur atteint la même ligne que vous, vous devez le téléporter au début de la ligne avec le moins de clients. Un acheteur passe immédiatement à la ligne lorsqu'il se déplacerait dans la rangée avec le Y
, il n'y a pas de génération entre les deux. Les lignes sont représentées par le #
s - la colonne après le #
s est une ligne. Les acheteurs descendent jusqu'à la fin de la ligne (représentée par une sortie x
), puis se transforment en un nombre aléatoire entre 1
et5
. Chaque génération, vous devez décrémenter les acheteurs numérotés de 1
- lorsqu'un acheteur atteint 0
, il a fini de vérifier et quitte le magasin.
Étant donné l'entrée d'une grille comme celle-ci, sortez la prochaine génération de l'épicerie (déplacez tous les acheteurs vers le bas simultanément, redirigez les acheteurs et faites-les partir s'ils ont terminé).
Échantillons
Contribution:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Production:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Contribution:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Production
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Contribution:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Possible) Sortie:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Contribution:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Production:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Contribution:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Production:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
C'est le code-golf , donc le code le plus court l'emporte.
Réponses:
Python 2 ,
477463453449423402397396393 octetsEssayez-le en ligne!
Je travaille toujours sur le golf, mais cela résout le problème pour l'instant
la source
C ++,
898896885841 octetsTrès long à coder ... mais c'est là
-2 octets grâce à Conor O'Brien
-45 octets grâce à Zacharý
Alors ... quelques détails:
Vous devez passer un
std::vector<std::string>
(ils seront redimensionnés à la même longueur que la chaîne la plus longue)Toutes les lignes de
#
départ aux mêmes coordonnées y (verticales), ont la même longueur et se terminent aux mêmes coordonnées y (verticales)Supposons que la grille ait au moins 1
#
ligne ou plus, a une lettree
(une sortie) en haut, une lettreY
Supposons que l'entrée est une sortie valide, de sorte que les acheteurs en attente de redirection seront toujours l'un après l'autre.
Edit: Je viens de voir dans les commentaires de la réponse de Wheat Wizard qu'il devrait prendre en charge plusieurs entrées, je continuerai à travailler sur cela
la source
#define C(e)i[j].find(e)!=string::npos
?C(e)
être#define C(e)if(i[j].find(e)!=string::npos
et modifier les appels en conséquence.length()
n'est appliqué que sura
, vous pouvez changerL
pour être défini commea.length()
, en modifiant les appels en conséquence. De plus, vous pouvez déplacer leusing namespace std;
vers le bas, économisant un octet en supprimant la nouvelle ligne