Weź dwie listy nieujemnych liczb całkowitych i wyślij pole ASCII, jak zdefiniowano poniżej.
- Narożniki i skrzyżowania są plusami:
+
(kod ASCII 43) - Pionowe linie to słupki
|
(kod ASCII 124) - Poziome linie to minusy
-
(kod ASCII 45)
Pierwsza lista danych wejściowych określa liczbę minusów między każdym znakiem plus w kierunku poziomym.
Druga lista wejściowa określa liczbę słupków między każdym znakiem plus, w kierunku pionowym.
Łatwiej to wyjaśnić kilkoma przykładami:
0 // No minuses between each + sign
0 // No bars between + signs
++
++
------------------
1 2 // First a single minus, then two minuses
1 2 // First one bar, then two bars
+-+--+
| | |
+-+--+
| | |
| | |
+-+--+
------------------
1 0 3 0 2 0
2 1 0 0
+-++---++--++
| || || ||
| || || ||
+-++---++--++
| || || ||
+-++---++--++
+-++---++--++
+-++---++--++
Wyjaśnienia:
- Kolejność wprowadzania i format są opcjonalne
- Tylko pola powinny być drukowane / wyświetlane, ale spacja lub znaki nowej linii są akceptowane.
- Opcjonalnie możesz dodać 1 do wszystkich wartości wejściowych, jeśli jest to wygodniejsze. Drugim przykładem wówczas:
2 3; 2 3
.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
MATL ,
252221 bajtówWykorzystuje dane wejściowe z
1
dodanymi (dozwolone przez wyzwanie).Wypróbuj online!
Wyjaśnienie
Kod początkowo buduje tablicę zawierającą
1
indeksy kolumn znaków spacji w wyniku końcowym i w0
przeciwnym razie. Więc jeśli pierwszym wejściem będzie[2 1 4 1 3 1]
(miałby[1 0 3 0 2 0]
format 0), ta tablica będzieZwróć uwagę, jak długość przebiegów zer jest związana z danymi wejściowymi. W szczególności tablica ta jest zbudowana w następujący sposób:
1
.1
. W przykładzie daje to[3 4 8 9 12 13]
.1
do pozycji indeksy (oparte na 1) podane w kroku 2. Wpisy pośrednie są automatycznie ustawiane na0
.Podobna tablica jest budowana dla wierszy. Drugie wejście
[3 2 1 1]
(lub[2 1 0 0 ]
) dajeTeraz druga tablica jest mnożona przez
2
, transponowana i dodawana z emisją do pierwszej. To daje tablicę 2DIndeksowanie w ciągu
'|-+ '
daje końcowy wynik w postaci tablicy znaków 2D. Ponieważ indeksowanie jest modułowe i oparte na 1, indeks0
odpowiada ostatniemu elementowi (spacji).źródło
Python 2, 117 bajtów
Wypróbuj na ideone.
Nie oczekuję po tym zbyt wiele. Naprawdę proste, po prostu używa sprzężeń Pythona i mnożenia ciągów, aby wszystko połączyć.
źródło
JavaScript (ES6), 83 bajty
Dane wyjściowe obejmują dwie końcowe znaki nowej linii.
źródło
CJam, 50 bajtów
Wypróbuj online!
źródło
Pyth, 45 bajtów
Program, który pobiera dane z dwóch oddzielonych przecinkami list na STDIN i drukuje wynik.
Prawdopodobnie jest tu jeszcze trochę golfa.
Wypróbuj online
Wyjaśnienie nastąpi później
źródło
Haskell, 55 bajtów
Definiuje funkcję,
g
która pobiera dwie listy danych wejściowych i zwraca listę zawierającą linie danych wyjściowychźródło
PowerShell v2 +, 89 bajtów
Cholera, nie sądzę, że mogę całkiem złapać JavaScript.
Pobiera dane wejściowe
$a
i$b
jako jawne tablice. Ustawia zmienną$x
na górny rząd pól na podstawie zapętlania$a
i konkatenacji ciągów. To jest zamknięte w parens, więc jest umieszczane na rurociągu. Następnie przechodzimy przez pętlę$b
, a każda iteracja nakłada na ciąg dwa ciągi - ciąg tego samego stylu, ale ze spacjami i|
zamiast łączników oraz+
, i$x
. Wszystkie te ciągi znaków są zbierane z potoku z domniemanymWrite-Output
zakończeniem programu, z domyślną nową linią między nimi.Przykłady
źródło
Rubin, 66 bajtów
źródło
Galaretka ,
3026 bajtówPrzetestuj w TryItOnline
W jaki sposób?
Pobrane dane wejściowe są listą dwóch list
[vertical, horizontal]
i wykorzystują opcję przyrostową- więc przykład 3 bierze
[[3,2,1,1], [2,1,4,1,3,1]]
Każda z nich jest następnie przekształcana w tablicę boolowską wskazującą odpowiednio rowType lub rowCharacterType, np
[[1,0,0,1,0,1,1,1], [1,0,1,1,0,0,0,1,1,0,0,1,1]]
. Pola są następnie konstruowane przez utworzenie wierszy z znaki identyfikowane przez kombinacje rowType i rowCharacterType - tzn. rowType identyfikuje jeden
"+-"
lub"| "
a rowCharacterType identyfikuje jeden z tych dwóch znaków.źródło