Jesteś pracownikiem modnego nowego sklepu spożywczego Half Foods i to dzień przed Świętami Bożego Narodzenia w Święto Dziękczynienia . Ponieważ sklep będzie pełen klientów pędących po żywność, sklep potrzebuje menedżera ruchu, aby wysłać wszystkich na odpowiednie linie. Będąc leniwym, chcesz zautomatyzować to, abyś mógł przejść do delikatesów, zanim wszyscy wezmą całą szynkę z indyka . Jednak wszystko, co masz przy sobie, to telefon, a pisanie na nim długich programów jest prawdziwym bólem - więc musisz poćwiczyć swoje umiejętności gry w golfa ninja .
Wyzwanie
Wizualizujmy sklep spożywczy na dwuwymiarowej siatce. Oto przykładowa siatka do wycięcia:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
Siatka zaczyna się od znaku e
, który reprezentuje „wylot” do reszty sklepu. Z każdym pokoleniem wszystkie gniazda w sieci spawnują shopper ( s
) bezpośrednio poniżej. Kupujący przesuwają się w dół z każdym pokoleniem, aż do ciebie ( Y
). Kiedy klient osiągnie ten sam rząd co ty, musisz teleportować go na początek linii z najmniejszą liczbą kupujących. Klient natychmiast przenosi się na linię, gdy wprowadzi się do rzędu z Y
, nie ma między nimi generacji. Linie są reprezentowane przez #
s - kolumna po #
s jest linią. Kupujący schodzą na koniec linii (reprezentowanej przez wyjście x
), a następnie zamieniają się w losową liczbę między 1
i5
. Z każdym pokoleniem należy zmniejszyć numerowanych klientów o 1
- kiedy klient do 0
nich dotrze , kończy sprawdzanie i opuszcza sklep.
Biorąc pod uwagę taką siatkę, wypisz następną generację sklepu spożywczego (przesuń wszystkich kupujących jednocześnie, przekieruj kupujących i pozwól im odejść, jeśli są gotowe).
Próbki
Wejście:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Wynik:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Wejście:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Wynik
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Wejście:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Możliwe) Wyjście:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Wejście:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Wynik:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Wejście:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Wynik:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
To jest golf golfowy , więc wygrywa najkrótszy kod.
Odpowiedzi:
Python 2 ,
477463453449423402397396393 bajtówWypróbuj online!
Nadal pracuję nad golfem, ale na razie to rozwiązuje problem
źródło
C ++,
898896885841 bajtówBardzo długo koduję ... ale tam jest
-2 bajty dzięki
Conorowi O'Brienowi -45 bajtów dzięki Zacharýmu
Więc ... kilka szczegółów:
Musisz przekazać
std::vector<std::string>
(rozmiar zostanie zmieniony na tej samej długości, co najdłuższy ciąg)Wszystkie linie
#
początków o tych samych współrzędnych y (pionowych) mają tę samą długość i kończą się na tych samych współrzędnych y (pionowych)Załóżmy, że siatka ma co najmniej 1
#
linię lub więcej, ma jedną literęe
(jeden wylot) u góry, jedną literęY
Załóżmy, że dane wejściowe są prawidłowymi danymi wyjściowymi, więc klienci oczekujący na przekierowanie będą zawsze jeden po drugim
Edycja: Właśnie zobaczyłem w komentarzach odpowiedzi Kreatora pszenicy, że powinien obsługiwać wiele wejść, będę nadal nad tym pracował
źródło
#define C(e)i[j].find(e)!=string::npos
?C(e)
by#define C(e)if(i[j].find(e)!=string::npos
i odpowiednio zmienić połączenia.length()
jest on stosowany tylkoa
, można zmienićL
definicję odpowiednioa.length()
modyfikując połączenia. Ponadto możesz przesunąć nausing namespace std;
dół, oszczędzając bajt, usuwając nowy wiersz