(z przeprosinami dla Jima Westa za tytuł i losowo zainspirowany tekstową reprezentacją ich logo Cisco: .:|:.:|:.
za koncepcję)
Biorąc pod uwagę liczbę całkowitą wejściową 1 <= n <= 255
, wyślij reprezentację ASCII wiszącego mostu odległości n
zgodnie z poniższymi zasadami budowy:
- Początek i koniec mostu (nie liczone w
n
odległości) są zawsze-|
i|-
, dzięki czemu most może odpowiednio łączyć się z autostradami obok niego. - Most nie rozciąga się w dół (poziom jezdni, złożony z
-
rzędu, jest rzędem dolnym). - Mogą występować maksymalnie dwa elementy jezdni
--
z rzędu, każda dłuższa rozpiętość wymaga podwieszenia lin do podparcia. - Kable zawieszenia
\
biegną od jezdni do wież|
w linii prostej. - Wieże
|
muszą być wystarczająco wysokie, aby utrzymać sąsiednie kable zawieszenia, ale nie mogą być wyższe. - Most musi być zrównoważony od lewej do prawej wokół środkowego punktu, faworyzując środkowe sekcje, gdy tylko jest to możliwe.
- Wszystkie powyższe powinny skutkować minimalizacją kabli, ale dla jasności liczba lin zawieszenia musi być zminimalizowana przy jednoczesnym przestrzeganiu powyższych zasad.
Aby zapewnić wizualną reprezentację, oto oczekiwane wyniki dla n = 1, 2, 3, ... 15
-
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
Wejście
Pojedyncza dodatnia w dowolnym, wygodnym formacie , n > 9
.
Wynik
Most ASCII-art zgodny z powyższą techniką konstrukcyjną.
Zasady
- Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki pomostu są odpowiednio ustawione w linii.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby ludzie mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Odpowiedzi:
05AB1E ,
795958 bajtówWypróbuj online! .
Wyjaśnienie:
Znalazłem lepsze rozwiązanie, kluczem było zwrócenie następujących tablic dla każdej liczby w następujący sposób:
źródło
Python 2, 173 bajtów
Odbicie lustrzane wartości b i dodanie środkowego
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
wzoru podstawowego „-” (prawa połowa dolnej linii)
b=(i*'/--')[:~-i/2]
Pętla dla warstw nie-dolnych
for x in range(1,~-i/2):
Uzyskaj pierwsze x znaków wzoru podstawowego i uzupełnij „-”
(len(b)-x)*'-'+b[:x]
Zastąp wszystko - spacjami do wydrukowania wszystkie warstwy (oprócz dolnej)
print f().replace('-',' ')
Wydrukuj dolną warstwę
print f(b)
źródło
Befunge, 150 bajtów
Wypróbuj online!
Udostępniłem także niepoznawaną wersję kodu, która lepiej pokazuje architekturę zastosowaną w konstrukcji mostu.
Wypróbuj online!
Wieże obsługują inicjalizację danych wejściowych i parametrów. Pokład składa się z dwóch pętli obliczających części mostka, które należy wyprowadzić dla każdej współrzędnej x, y. A podstawa zawiera tabelę znaków dla tych części mostka, a także jakiś inny całkowicie niezwiązany kod.
Szczegółowe wyjaśnienie
Zaczynamy od obliczenia szerokości i wysokości obszaru wyjściowego, który będzie wymagał iteracji w celu renderowania mostu.
Zauważ, że zakres y nie jest zerowy. Wartość początkowa jest
5 - (h<5)
i jest iterowana do h (aktualna wartość jest zapisywana jako 2,0). Wartość x jest iterowana od w do 0 i jest przechowywana na stosie.Pętla wewnętrzna to po prostu szereg warunków boolowskich określających, czy dana współrzędna x , y pasuje do któregokolwiek z miejsc wymagających znaku spacji. Obliczenia te opierają się na dwóch przesunięciach przesuwających się wzdłuż ścieżki kabli zawieszenia.
Różne warunki są następnie określane w następujący sposób:
Aby przełożyć te warunki na prawidłowe przesunięcie znaków, wystarczy pomnożyć każdy z nich przez odpowiednie przesunięcie i zsumować wynik. Obliczenia wykonuje się w miarę oceny warunków. Wygląda to mniej więcej tak:
Zauważ, że wartość bridge_deck jest łączona w zależności od tego, czy którykolwiek z pozostałych warunków został spełniony, ponieważ postać zawieszenia lub wieży ma pierwszeństwo przed talią.
Rezultatem końcowym jest przesunięcie w tabeli znaków w ostatnim wierszu pola gry. Po prostu wyprowadzamy ten znak i powtarzamy pętlę.
źródło
Partia, 241 bajtów
Uwaga: Końcowe miejsce na linii 5. Zaczyna się od zbudowania rzędu spacji, a następnie dodania kabli w razie potrzeby, powtarzając, aby budować wieże na pożądanej wysokości, a kończąc na zamianie pozostałych miejsc na drogę.
źródło
WinDbg, 312 bajtów
Wprowadzanie odbywa się poprzez ustawienie pseudorejestru
$t0
.Wydaje mi się, że powinien istnieć sposób na połączenie dwóch
for
pętli w jedną ... może także inne możliwości gry w golfa ...Ten działa, wypełniając cały obszar drogą, a następnie zastępując wszystkie oprócz ostatniego rzędu spacją, i wreszcie budując kolumny i kable.
Przykładowe wyjście 1-15:
źródło
Java 8,
423, 412 bajtów11 bajtów zaoszczędzonych dzięki Kritixi Lithos
grał w golfa:
bez golfa:
źródło
int i,j,k,t=n/2+n%2,u=t-2,q=0
i zamiast tegochar v="-";
możesz użyćchar v=45;
i możesz zmienićabc%xyz==0
s naabc%xyz<1
(nie przetestowałem)