Sie sind Angestellter im angesagten neuen Lebensmittelgeschäft Half Foods, und es ist der Tag vor Thanksgiving, Weihnachten, Ostern. Da der Laden mit Kunden gefüllt sein wird, die schnell nach Lebensmitteln suchen, benötigt der Laden einen Verkehrsmanager, der alle an die entsprechenden Leitungen weiterleitet. Faulenzen, möchten Sie diese so automatisieren , dass Sie die deli treffen gehen kann , bevor alle die ganze nimmt Truthahn Schinken was auch immer. Sie haben jedoch nur Ihr Telefon dabei, und das Codieren langer Programme ist ein echtes Problem - Sie müssen also Ihre Ninja- Code-Golf- Fähigkeiten unter Beweis stellen.
Herausforderung
Stellen wir uns das Lebensmittelgeschäft in einem zweidimensionalen Raster vor. Hier ist ein Mustergitter zum Zerlegen:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
Das Raster beginnt mit einem e
, das eine "Steckdose" für den Rest des Geschäfts darstellt. Jede Generation, alle Verkaufsstellen im Raster, bringt einen Käufer ( s
) direkt darunter hervor. Die Käufer bewegen sich jede Generation nach unten, bis sie Sie erreichen ( Y
). Wenn ein Käufer dieselbe Reihe wie Sie erreicht, müssen Sie den Käufer an den Anfang der Zeile mit der geringsten Anzahl von Käufern teleportieren. Ein Käufer bewegt sich sofort zu der Linie, wenn er mit in die Reihe ziehen würde Y
, es gibt keine Generation dazwischen. Die Zeilen werden durch das #
s dargestellt - die Spalte nach dem #
s ist eine Zeile. Die Käufer gehen bis zum Ende der Linie (dargestellt durch einen Ausgang x
) und verwandeln sich dann in eine Zufallszahl zwischen 1
und5
. In jeder Generation müssen Sie die Anzahl der Käufer verringern 1
- wenn ein Käufer sie erreicht 0
, sind sie mit dem Auschecken fertig und verlassen den Laden.
Wenn Sie ein solches Raster eingegeben haben, geben Sie die nächste Generation des Lebensmittelladens aus (bewegen Sie alle Käufer gleichzeitig nach unten, leiten Sie die Käufer weiter und lassen Sie sie gehen, wenn sie fertig sind).
Proben
Eingang:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Ausgabe:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Eingang:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Ausgabe
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Eingang:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Mögliche) Ausgabe:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Eingang:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Ausgabe:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Eingang:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Ausgabe:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Das ist Code-Golf , also gewinnt der kürzeste Code.
Antworten:
Python 2 ,
477463453449423402397396393 BytesProbieren Sie es online!
Ich arbeite immer noch am Golfen, aber es löst das Problem im Moment
quelle
C ++,
898896885841 BytesSehr lange zu codieren ... aber es ist da
-2 Bytes dank Conor O'Brien
-45 Bytes dank Zacharý
Also ... einige Details:
Sie müssen ein übergeben
std::vector<std::string>
(die Größe wird auf die gleiche Länge wie die längste Zeichenfolge geändert).Alle
#
Startlinien an denselben y-Koordinaten (vertikal) haben dieselbe Länge und enden an denselben y-Koordinaten (vertikal)Angenommen, das Gitter besteht aus mindestens einer
#
Zeile, einem Buchstabene
(einer Steckdose) oben und einem BuchstabenY
Angenommen, die Eingabe ist eine gültige Ausgabe, sodass die Käufer, die auf eine Umleitung warten, immer eine nach der anderen sein werden
Bearbeiten: Gerade in den Kommentaren von Wheat Wizard's Antwort gesehen, dass es mehrere Eingänge unterstützen sollte, werde ich weiter daran arbeiten
quelle
#define C(e)i[j].find(e)!=string::npos
?C(e)
sein#define C(e)if(i[j].find(e)!=string::npos
ändern und die Aufrufe entsprechend ändern.length()
nur angewendet wirda
, können SieL
die Definition ändern unda.length()
Anrufe entsprechend ändern . Darüber hinaus können Sie dieusing namespace std;
nach unten verschieben, um ein Byte zu sparen, indem Sie die neue Zeile