Mikołaj był w stanie zregenerować wszystkie prezenty, które elfy ukradły przez noc! Teraz musi wysłać je na linię montażową w celu pakowania. Zwykle ma aparat do nadzorowania linii montażowej, aby upewnić się, że elfy wykonują dobrą robotę, i ponieważ zdjęcia z linii montażowej wyglądają ładnie na plakatach reklamowych [potrzebne źródło]
Niestety jego kamera się zepsuła, więc chciałby, abyś wyciągnął symulację tego, jak wyglądałaby linia montażowa!
W celu utrzymania maksymalnej wydajności linii montażowej i zmniejszenia ryzyka błędu lub awarii wszystkie obecne pudełka mają tę samą szerokość, dzięki czemu idealnie pasują do taśmy przenośnika.
Wyzwanie
Biorąc pod uwagę listę prezentów reprezentowanych przez ich wymiary, wyjmij przenośnik taśmowy ze wszystkimi prezentami.
Prezent jest rysowany w taki sposób:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Ten prezent ma szerokość 1, wysokość 2 i długość 4. Zauważ, że znaki plus nie liczą się do długości boku, więc prezent o długości 4 w rzeczywistości obejmuje 6 pozycji.
Wszystkie prezenty są rysowane obok siebie, z jedną spacją między najbliższymi dwoma postaciami; to znaczy, lewe dolne rogi prezentów są rozmieszczone w taki sposób, że jeśli obecne pudełko ma długość l
i szerokość w
, lewy dolny róg następnego pudełka będzie dokładnie na l + w + 4
prawo od lewego dolnego rogu poprzedniego pudełka.
Po narysowaniu wszystkich obecnych pudełek, taśma przenośnika jest rysowana przez zastąpienie odstępu między pudełkami na każdej z ostatnich width + 2
linii podkreślnikami.
Ostateczne wyjście obecne pola (l, w, h)
z [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
byłoby:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Specyfikacja formatowania
Możesz wybrać albo wzięcie listy 3-krotek, w której jeden z elementów jest spójny na całej liście (czyli szerokość), albo możesz wziąć obecną szerokość, a następnie listę 2-krotek reprezentujących długość i wysokość każdego prezentu. Możesz przyjmować dane wejściowe w dowolnej kolejności i w dowolnym rozsądnym formacie, ale prezenty muszą być wyświetlane w tej samej kolejności, w jakiej zostały podane jako dane wejściowe.
Możesz wybrać dowolny rozsądny format wyjściowy dla sztuki ASCII (w tym powrót z funkcji).
Przypadki testowe
Te przypadki testowe podano w [(l, w, h), ...]
formacie.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:
+-+
/ /|
/ / |
+-----+ / / |
/ /| +-+ |
/ / | | | |
/ / | +--------+ | | |
+-----+ | / /| | | |
| | +___/ / +_| | +
| | /___/ / /__| | /
| | /___+--------+ /___| | /
| |/____| |/____| |/
+-----+_____+--------+_____+-+
[(0, 0, 0)] (this is the most interesting test case ever :P)
++
+++
++
[(8, 3, 0), (0, 3, 8)] (more zero cases)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
Zasady
- Obowiązują standardowe luki
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach
- Żadna odpowiedź nie zostanie zaakceptowana
Uwaga: Inspirację do tej serii wyzwań czerpałem z Advent Of Code . Nie mam powiązań z tą stroną
Możesz zobaczyć listę wszystkich wyzwań w serii, patrząc na sekcję „Połączone” pierwszego wyzwania tutaj .
Odpowiedzi:
Węgiel ,
9681 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Dane wejściowe to szerokość w pierwszym wierszu, a następnie pozostałe wymiary w kolejnych wierszach, kończące się pustą linią. Wyjaśnienie:
Wprowadź szerokość.
Pętlę nad pozostałymi liniami, aż do osiągnięcia pustej linii.
Narysuj pasek między prezentami.
u
Zmienna jest predefiniowany do pustej listy, które w związku z tym nic nie robi na pierwszym przejeździe, a potem kończy się z jednego elementu, co powoduje ten kod, aby uruchomić jeden raz. (Korzystanie zif
byłoby mniej golfa.)Podziel wymiary w przestrzeni, rzuć je na liczby całkowite i zapisz je
u
.Usuń ostatni wymiar i zapisz go
p
.Skopiuj pierwszy wymiar do
r
, ale pozostaw go,u
aby pasek został narysowany w następnej pętli.Wymaż wnętrze prezentu, na wypadek, gdyby pas go nachodził.
Narysuj wewnętrzne linie teraźniejszości.
Narysuj w połowie zewnętrznej części teraźniejszości, a następnie powtórz dla drugiej połowy.
źródło
Pip ,
160154 bajtów153 bajty kodu, +1 dla
-l
flagi.Jest to funkcja, która pobiera listę zawierającą
[width height length]
. Wypróbuj online!W jaki sposób?
Wyjaśnienie na najwyższym poziomie:
Zostaw komentarz, a dodam bardziej szczegółowe wyjaśnienie.
źródło
Python 2 , 508 bajtów
Wypróbuj online!
Pobiera listę list
[height, width, length]
źródło