Nie chcesz płacić za kosztowny program architektoniczny, więc decydujesz się na własny projekt. Decydujesz się użyć ASCII do projektowania budynków. Twój program pobierze pojedynczy ciąg sformatowany w określony sposób, a program wygeneruje budynek.
Wejście
Dane wejściowe składają się z jednego wiersza znaków. Można założyć, że zawiera on tylko litery a-j
, cyfry 1-9
oraz symbole -
i +
.
Opis wyjścia
Dla każdej litery a-j
program wyświetli pionową linię w następujący sposób. Nazwiemy to kolumną.
.
..
...
****
*****
******
-------
--------
+++++++++
++++++++++
abcdefghij
Na przykład dane wejściowe abcdefgfedefghgfedc
wyprowadzałyby:
.
* ***
*** *****
***** *******
---------------
-----------------
++++++++++++++++++
+++++++++++++++++++
Litera może być poprzedzona dodatnią liczbą całkowitą n
, która doda n
białe znaki poniżej kolumny. Nazwiemy to przesunięciem. Na przykład, używając S
do zanotowania białych znaków, dane 3b2b3b
wyjściowe wyprowadzą:
+ +
+++
S+S
SSS
SSS
Litera może być również poprzedzona ujemną liczbą całkowitą -m
, która usunie dolne m
znaki spacji w kolumnie (nie zastąpi ich białymi spacjami, całkowicie je usunie). Nazwiemy to plasterkiem. Na przykład dane wejściowe -1j-2j-3j-4j-5j-6j-7j-8j
wyprowadzałyby:
.
..
...
*...
**...
***...
-***...
--***...
+--***..
Przesunięcie i plasterek można zastosować do tej samej linii, ale przesunięcie musi być pierwsze. Innymi słowy, litera może być poprzedzona prefiksem n-m
, gdzie n
jest rozmiarem przesunięcia i m
jest rozmiarem wycinka. Na przykład, używając S
do zanotowania białych znaków, wejście „2-4j” wyświetli:
.
.
.
*
*
*
S
S
Wreszcie +
operator użyty między dwiema kolumnami wskazuje, że powinny one być ułożone jedna na drugiej w tej samej kolumnie zamiast w osobnych kolumnach. Na przykład wejście „2-4ja” wyprowadza:
.
.
.
*
*
*
S
S+
Natomiast dane wejściowe 2-4j+a
:
+
.
.
.
*
*
*
S
S
Oto przykładowe dane wejściowe:
abiehef+ehfhabc
I wynikowa wydajność:
*
-
. -
. . +. .
* * +* *
* * ****
********
--------
-------- -
+++++++++ ++
+++++++++++++
Wygląda jak stara zniszczona wieża zamkowa.
Oto kolejne przykładowe dane wejściowe:
6b5b+a6b1-2d+3-4f1-2d+-2c+2-4f+1-2d+-2c2-2d+1-4g+1-2c+b+-2c+-4e2-7j+-4g+d+-2c+-4f2-7j+-5h+b+-2c+a+-3f2-7j+-7i+-4e+b+b+a+-4f2-7i+a+-7h+-4f+b+b+a+-4f2-7j+-7h+-4f+a+-7h+a+-7i+-4f2-7j+-7i+-6h+a+-7i+b+-4e3-7i+a+-7h+-4e+a+-7h+b+1-7h3-7j+1-4f+-7h+b+-4f+a3-7j+2-4f+a+-4f+b3-2d+-2d+3-4g+b3-2d+-2d+-2c
I wynikowa wydajność:
****** +++
******+.*++
---++.+ ***
-+-+++..++**
-+--+++.+++*
--++++.+..*
+++++.+**
+++****.****** -
+++*****.**.. --
+ ***....+..--
...+.....--
--.........--
---......
--
(Miał być Mario, ale nie okazał się bardzo dobry ...)
Jeśli specyfikacja nadal nie jest jasna, mam implementację bez golfa napisaną w Pythonie 2.7. Możesz go uruchomić i eksperymentować, aby przekonać się, jak działa specyfikacja. Możesz także śmiać się z moich umiejętności programistycznych.
To jest golf golfowy, więc wygrywa najkrótszy wpis. Zadawaj pytania w komentarzach, jeśli są niejasne.
a+a+a+a+a
wyprowadziłoby pięć znaków plus na siebie.Odpowiedzi:
Ruby,
223214 bajtówTo było zabawne. :)
Chociaż powinno to być dość oczywiste, odkryłem nowy sposób wykonywania tych wyzwań, w których ciągi znaków zostały zbudowane z kolumn: po prostu rób je w wierszach i transponuj tablicę znaków przed połączeniem wszystkiego.
źródło
puts (0..z=g.map(&:size).max-1).map{|i|g.map{|y|(v=y[z-i])?v:?\ }*''}
. Ale prawdopodobnie nie byłoby tak fajnie bez transpozycji.Kobra - 473
Nie sądzę, że Cobra kiedykolwiek wygra jedną z tych: /
Wszystko miłe i skomentowane:
EDYCJA: Właśnie zdałem sobie sprawę, że wygląda podejrzanie podobnie do rozwiązania Ruby. Wielkie umysły myślą podobnie?
źródło
Lua - 451
Nic specjalnego. Fajnie było choć raz zmienić nazwę zestawu funkcji. Wyedytuję później niepoznany kod.
Wypróbuj tutaj. Przykładowe dane wyjściowe:
źródło
PowerShell ,
214212209206200 bajtów-3 bajki dzięki @ Veskah
Wypróbuj online!
Wersja mniej golfowa:
źródło
(-?.)
powinny działać zbytPython 3, 268 bajtów
W większości nie golfistów:
źródło