Istnieje wiele różnych rodzajów zestawów pociągów, od drewnianych torów, takich jak Brio, po w pełni cyfrowe sterowanie doskonałymi malutkimi metalowymi replikami prawdziwych pociągów, ale wszystkie one wymagają zaprojektowania torów, idealnie wykorzystując jak najwięcej twoich elementów.
Zatem Twoim zadaniem jest ustalenie, czy przy danym wejściu dostępnych elementów możliwe jest zbudowanie pełnego obwodu zamkniętego przy użyciu wszystkich elementów, a jeśli nie, ile elementów pozostanie z maksymalnego możliwego obwodu.
Ponieważ jest to uproszczony zestaw pociągów, istnieją tylko 3 elementy: duża krzywa, mała krzywa i prosta. Wszystkie są oparte na kwadratowej siatce:
- „Big Curve” to narożnik 90 stopni, obejmujący 2 jednostki w każdym wymiarze
- „Mała krzywa” to narożnik 90 stopni, obejmujący jedną jednostkę w każdym kierunku
- „Prosto” to prosty element o długości 1 jednostki
Oznacza to, że minimalny możliwy obwód składa się z 4 małych krzywych - jest to okrąg o promieniu 1 jednostki. Można to rozszerzyć, dodając pary prostych elementów w celu utworzenia różnych owali. Możliwe są inne obwody, dodając więcej krzywych lub mieszając rodzaje krzywych.
Ten zestaw pociągów nie zawiera żadnych skrzyżowań ani metod krzyżowania torów, więc dwa elementy nie mogą łączyć się z tym samym końcem innego elementu (bez formacji Y) lub przecinać się nawzajem (bez formacji X) . Dodatkowo jest to zestaw pociągów, więc każda formacja, która nie pozwala na przejazd pociągu, nie jest ważna: przykłady obejmują proste spotykające się pod kątem 90 stopni (zawsze musi istnieć krzywa między prostopadłymi prostymi) i krzywe spotykające się pod kątem 90 stopni (krzywe muszą płynąć).
Chcesz również użyć jak największej liczby elementów, ignorując ich typ, więc zawsze wybierzesz obwód, który ma więcej bitów. Wreszcie masz tylko jeden ciąg, więc każde rozwiązanie, które powoduje wiele obwodów, jest niedopuszczalne .
Wkład
Albo tablica trzech liczb całkowitych, wszystkie większe lub równe 0, odpowiadające liczbie dostępnych dużych krzywych, małych krzywych i prostych lub parametrom przekazanym do programu, w tej samej kolejności.
Wydajność
Liczba odpowiadająca liczbie elementów pozostałych po zbudowaniu maksymalnego możliwego obwodu dla przewidzianych elementów.
Dane testowe
Minimal circuit using big curves
Input: [4,0,0]
Output: 0
Slightly more complicated circuit
Input: [3,1,2]
Output: 0
Incomplete circuit - can't join
Input: [3,0,0]
Output: 3
Incomplete circuit - can't join
Input: [3,1,1]
Output: 5
Circuit where big curves share a centre
Input: [2,2,0]
Output: 0
Bigger circuit
Input: [2,6,4]
Output: 0
Circuit where both concave and convex curves required
Input: [8,0,0] or [0,8,0]
Output: 0
Circuit with left over bit
Input: [5,0,0] or [0,5,0]
Output: 1
Uwagi
- 2 proste i mała krzywa są równoważne dużej krzywej, ale używaj większej liczby elementów, więc są preferowane - nigdy nie powinno być sytuacji, w której ta kombinacja jest pozostawiona, jeśli w obwodzie są jakieś duże krzywe
- 4 małe krzywe można zwykle zamienić na 4 proste, ale nie, jeśli spowodowałoby to przecięcie się obwodu
- Zestaw pociągu jest również idealizowany - elementy torów przyjmują pokazane szerokości, więc w niektórych przypadkach krzywe mogą przechodzić przez pojedynczy kwadrat siatki bez przecinania się. Siatka po prostu określa wymiary elementu. W szczególności można umieścić dwie duże krzywe, tak aby kwadrat siatki w lewym górnym rogu przykładowego diagramu byłby również prawym dolnym kwadratem innej dużej krzywej biegnącej od lewej do góry (z diagramem pokazującym jedną biegnącą od prawej do dołu)
- Mała krzywa może zmieścić się w pustej przestrzeni pod dużą krzywą (prawy dolny kwadrat siatki powyżej). Druga duża krzywa mogłaby również wykorzystać tę przestrzeń, przesunięta o jedną i drugą w dół od pierwszej
- Mała krzywa nie może zmieścić się na tej samej przestrzeni siatki, co zewnętrzna duża krzywa - głównie dlatego, że nie ma sposobu na połączenie się z nią, która nie przecina się nielegalnie
[5,0,0]
lub[0,5,0]
będzie1
. Czy to jest poprawne? Czy możesz dodać taki przypadek testowy?[8,0,0]
, z dwoma 2x2 elementy nakładające się na środku siatki?Odpowiedzi:
[JavaScript (Node.js)], 1220 bajtów
Wypróbuj online!
Uwaga: Dane wejściowe to tak naprawdę zmienna q na początku. [2,6,4] zajmie również sporo czasu, ponieważ jest to rozwiązanie brutalnej siły bez optymalizacji.
Zrobiłem to, ponieważ nie było odpowiedzi od ponad roku i byłem po prostu ciekawy, czy to możliwe.
Kod oryginalny:
najpierw powinienem dołączyć grafikę użytych kafelków.
Przepraszam, jeśli napis jest trudny do odczytania Nie jestem przyzwyczajony do wyjaśniania, jak działa mój kod.
PS Właściwie stworzyłem też kilka funkcji do rysowania map do png, ale oczywiście zostały one usunięte, aby zaoszczędzić przynajmniej trochę miejsca.
źródło
p[a.n]-=1
zamiastp[a.n]--
?q
ten sposób nie jest dozwoloną metodą wprowadzania . Najczęściej należy uczynić z niego argument funkcji lub odczytać go ze standardowego wejścia.