Wraz z wielkim kryzysem gospodarki uniwersalnej spadł również popyt na planety na zamówienie. Magratheanie musieli dbać o bardziej stabilne przychody także od szerszej klasy klientów. Dlatego wymyślili własny łańcuch górski (lub krótkie spustoszenie gór) dla ludzi o mniejszym budżecie, których nie stać na kompletną planetę.
Góry są budowane zgodnie z planem klienta (aka ciągi cyfr i kropek) i dostarczane za pomocą ASCII-art (składające się z ,
/
, \
, ^
i v
).
Zadanie
Napisz kompletny program, który pobiera dane wejściowe (pojedynczy ciąg) ze STDIN lub jako argument i dane wyjściowe do STDOUT. Ta łamigłówka to gra w golfa kodowego, więc proszę pokazać trochę gry w golfa.
Wejście
Ciąg kropek i cyfr stanowiących podstawę łańcucha górskiego. Każdy łańcuch jest dokładnie tak długi, jak to konieczne, aby podeprzeć góry, a każdy szczyt jest oznaczony cyfrą zamiast kropki, wskazując wysokość szczytu.
Wynik
Ascii wersja łańcucha górskiego.
- Każda cyfra na wejściu reprezentuje dokładnie jeden pik (
^
) na dokładnie wysokości wskazanej przez cyfrę (tj. 9 to najwyższa wysokość). - Na wyjściu nie mogą występować dodatkowe piki (tj. W miejscach, gdzie na wejściu jest kropka).
- Góry mają kształt trójkąta, tzn. Stoki są tworzone za pomocą znaków
/
i\
. - Przepustki, w których dwie góry zachodzą na siebie, są kształtowane za pomocą postaci
v
. - Żadnych zbędnych nowych linii ani pustych linii.
- Linie dopełniające ze spacjami są opcjonalne.
Możesz założyć, że podane dane wejściowe są prawidłowe, tzn. Zawsze istnieje rozwiązanie zgodne z regułami (np. Dane wejściowe 13..
nie spowodowałyby prawidłowej konfiguracji i mogą zostać zignorowane). Co więcej, po każdej stronie znajduje się dokładnie tyle kropek, że nie można przycinać gór.
Przykłady
Pierwszy wiersz pokazuje wejście, wszystkie pozostałe wiersze stanowią pożądany wynik. (W rzeczywistości góry wyglądają znacznie lepiej na mojej konsoli niż tutaj.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
jest\n\n\n\n\n\n\n\n^
?Odpowiedzi:
JavaScript:
272268233232201192189188178180 znakówDzięki @Sam za zmniejszenie go z 268 do 233 znaków oraz za @manatwork za kolejny 1 znak. @VadimR za wskazanie błędu.
Prawidłowo zidentyfikowana i nieco niepoznana wersja z komentarzami:
Jak można zauważyć z kodu, działa to jako automat komórkowy, w którym każda komórka sprawdza liczbę na wejściu, patrzy na siebie i swoich dwóch sąsiadów, aby zdecydować, jaka będzie następna iteracja. W każdej chwili komórka może być
^
,/
,\
,v
lub. Dane wejściowe podane w przypadkach testowych dają oczekiwany wynik.
Zauważ, że używanie tego
alert
pola jest do bani, ponieważ zwykle nie ma czcionki o stałej szerokości. Możesz skopiować i wkleić tekst zalert
pola, aby gdzie indziej dla lepszego wzrostu wartości produkcji, czy może zastąpić ostatnią linięalert
przezconsole.log
, ale ponieważ jest to kod-golf,alert
jest krótszy.Ponadto nie sprawdza niczego w danych wejściowych. Po prostu traktuje nierozpoznane znaki jako spacje w taki sam sposób, jak robi to
.
(w rzeczywistości.
jest także nierozpoznaną postacią).źródło
prompt()
parametrem .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
aby upewnić się, że nie został on zanieczyszczony.q.trim()?q+'\n':''
może byćq.trim()&&q+'\n'
, oszczędzając dwa. Ponadto,i<p.length
może po prostu byćp[i]
.Rubin,
208201189Bardzo fajne wyzwanie! Oto alternatywne rozwiązanie Ruby.
Jako bonus, oto Rubinowa implementacja bardzo sprytnego algorytmu „automatu komórkowego” Victora, składającego się z 162 znaków:
Przykładowe dane wyjściowe:
źródło
$/
do nowej linii.C # - 588 znaków - nie tak dobre jak 321 Raya!
Przykładowe dane wyjściowe:
Lub dłuższy, bardziej złożony ...
Genialna łamigłówka ... nie tak prosta, jak się wydaje ... uwielbiała!
źródło
3
są tam. Jeśli mówisz o pierwszym, jest to część stoku.APL, 65 bajtów
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
ten symbol zwraca surowe (nieocenione) dane wejściowe jako tablicę znaków.Rozwiązywanie interaktywnie w sesji APL:
źródło
Ruby, 390 znaków
Uff, ten był trudny.
Skończyło się na tym, że musiałem dołączyć nowy ciąg dla każdego znaku, używając zmiennej
s
oznaczającej „pomiń następny znak”, która była potrzebna do przetworzenia^
i\
.To daje dokładnie dane wyjściowe próbki dla wszystkich przypadków testowych.
Wykres znaczenia zmiennych:
Jestem pewien, że mógłbym zagrać w golfa o wiele bardziej, ale muszę już iść. Poprawi się później!
źródło
.2.2.
i nie mogę zrozumieć, dlaczego to nie działa.Java,
377407Edycja: @Victor zwrócił uwagę, że musi to być kompletny program, dlatego dodałem kilkadziesiąt znaków, aby był kompatybilny i działał. Wystarczy przekazać „zamówienie” jako pierwszy parametr podczas wykonywania programu, tak jak:
java M ..3.4..6..4.3..
Myślę, że jest to podobne w duchu do innych odpowiedzi, w zasadzie po prostu przemierza „porządek górski” wielokrotnie dla każdej możliwej wysokości i buduje góry ze szczytów w dół. W ten sposób mam do czynienia tylko z czterema warunkami, jeśli nie buduję szczytu - albo zbocze w górę / /, zbocze w dół \, połączenie „v” lub puste ”. Mogę to odkryć, patrząc na trzy przestrzenie wyśrodkowane „powyżej” mojej obecnej pozycji w moim odgórnym zestawie.
Pamiętaj, że podobnie jak inne zgłoszenia traktuję wszystko inne niż liczbę jako równoważne „.” w danych wejściowych, dla zwięzłości.
Wersja golfowa:
Forma czytelna dla człowieka (i bez niektórych równoważnych transmisji do uzyskania formy golfa):
Cieszyć się.
Przykładowe dane wyjściowe:
źródło
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 bajtówDzięki @JoKing za pokazanie jako rozwiązanie ///. Gra jest nieco bardziej zaawansowana po naprawieniu błędu tr /// w Perlu 6.
Moje oryginalne rozwiązanie z subst:
Nie golfowany:
Wynik:
źródło
s///
itr///
. Myślę, że ten ostatni można użyćtr
zamiast,s
ale nie jestem w stanie wymyślić tłumaczenia odwrotnych ukośników. Być może pierwszy teżPerl,
254 218212Edycja: w rzeczywistości poprawka błędu działa na
..3..4...6...5....1
przykładzie ProgrammerDan , ale w tym czasie niektóre bajty były wyłączone. I test online: https://ideone.com/P4XpMUźródło
C # -
321319Nie golfił i skomentował:
Przykład:
Myślę jednak, że generuje dodatkowe miejsce przed każdą linią.
źródło
CJam,
128117112106104 bajtówCJam jest nieco młodszy od tego wyzwania, więc ta odpowiedź nie konkuruje. To było jednak bardzo miłe wyzwanie! Z tego, co wiem o J i APL, wiem, że przesłanie ich byłoby imponująco krótkie.
Oto przypadek testowy, który moim zdaniem zawiera wszystkie możliwe kombinacje stoków, szczytów i dolin:
co daje
Sprawdź to tutaj.
Wyjaśnię kod później.
źródło
Pyton,
297234218-63 bajty dzięki Jo King
-16 bajtów
r=s.replace
zamiast zamiast lambdaPobiera dane wejściowe ze STDIN. Nie golfowy, uproszczony:
źródło
s.replace
metodę, ale nie działa. Po prostu wykonujesz zamiany oryginalnego łańcucha, ponieważ łańcuchy są niezmiennePowerShell,
148145 bajtówTo miłe wyzwanie!
Skrypt testu mniej golfowego:
Wynik:
źródło
Pip
-l
, 100 bajtów(Język jest nowszy niż pytanie, ale prawdopodobnie i tak nie przebije zgłoszenia APL. Chociaż mam nadzieję, że będzie znacznie krótszy.)
Pobiera dane wejściowe za pomocą argumentu wiersza polecenia. Wypróbuj online!
źródło