Twoim zadaniem jest odtworzenie tego dzieła sztuki:
_____
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
Odpowiedź musi go odtworzyć i wydrukować. Wszystkie języki dozwolone, nie wymaga bezpośredniego drukowania dzieł sztuki, ofc, wymagany jest pewien poziom manipulacji. Odpowiedź z najmniej bajtami wygrywa.
Zamknięte w czwartek o 6:30 lub mniej więcej UTC.
Oryginalna rzecz została mi pokazana przez mojego przyjaciela, który zrobił to z Javą, odmówił pokazania mi kodu źródłowego, a teraz oszołomię go błyskotliwością innych języków. :RE
Nie możesz użyć żadnej alternatywnej postaci (ułatwia to?).
Obecna tablica wyników
- Pyth - 28 bajtów - isaacg
- CJam - 30 bajtów - Runer112
- CJam - 32 bajty - Martin Büttner
Najwyższe głosy: C - 73 bajty - Paul R.
isaacg przejmuje koronę za zaliczenie wyzwania schodowego z Pyth. Uważaj na więcej takich wyzwań w PPCG!
code-golf
ascii-art
kolmogorov-complexity
do tego kawa
źródło
źródło
Odpowiedzi:
Pyth,
2928Wypróbuj tutaj.
Całkiem proste rozwiązanie z trikiem „dodaj pięć spacji lub pięć znaków podkreślenia” z rozwiązania @ xnor, ale z pętlą od 0 do 20, a nie od 20 do 0.
źródło
C,
8680767573 bajtówźródło
for(i=25;i--;)
i=26
. Poza tym' '
można go zmienić na32
na dodatkową postać. Moje rozwiązanie ma 2 znaki dłużej po tych optymalizacjach :(main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}
Jeszcze więcej optymalizacji: 1. Uprość formułę dla długości 2. Jak mówi @Allbeert, możesz użyć kodu ascii,' '
ale po co zatrzymywać się na ASCII 32, gdy ASCII 0 zrobi. Również działa mi dobrze z""
zamiast" "
'|'
drukowania?c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Java,
198158156146 bajtówPrawdopodobnie można to znacznie skrócić. Jak zwykle sugestie są mile widziane.
Wcięte (trochę):
Dzięki Martin Büttner, Rainbolt i Geobits.
źródło
Brainfuck (1065 bajtów)
To nie jest ładne, nie jest krótkie ... ale zoptymalizuję później!
źródło
CJam,
3630 bajtówWypróbuj online.
Moje początkowe 36-bajtowe rozwiązanie wygenerowało wynik w orientacji wyjściowej. Mimo moich prób wyciśnięcia większej ilości bajtów z algorytmu, nie mogłem. Potem zobaczyłem genialną strategię Martina, polegającą na generowaniu kolumn zamiast wierszy i transponowaniu wyniku. Zdałem sobie sprawę, że to prawdopodobnie lepsze podejście, więc postanowiłem stworzyć rozwiązanie oparte na transpozycji.
Moje podejście do wdrażania tej strategii jest jednak dość zróżnicowane. Zamiast generować pełne kolumny, używam iteracyjnego rozwiązania, które wcina wszelkie już wygenerowane „kroki” i dodaje nowy krok przy każdej iteracji. Tak więc pierwsza iteracja głównej pętli generuje to:
Druga iteracja głównej pętli wcina istniejący krok i dodaje nowy po nim:
A pełne pięć iteracji głównej pętli generuje to:
Po tym wszystkim, co trzeba zrobić, to wyeliminować pierwszą linię, która w przeciwnym razie stałaby się niechcianym pionem dla dolnego stopnia i transponowała.
źródło
Python 2,
807774 bajtówPozbyłem się podwójnego
exec
i zmieściłeś wszystko w jednymprint
!źródło
Klip, 46
Wyjaśnienie
źródło
CJam,
3632 bajtówSprawdź to tutaj.
Próbowałem także użyć jawnej formuły, ale jest ona dłuższa w CJam ... może pomaga komuś innemu:
Wyjaśnienie
Odkryłem, że schody można zbudować o wiele łatwiej, jeśli a) transponujesz siatkę i b) odwrócisz linie:
Najpierw buduję to, potem odwracam, a następnie transponuję.
źródło
Python 2, 59
W 21 linie są indeksowane
n
w[20,19,...,1,0]
. Najpierw wypisuje 6 spacji dla każdego „kroku”, który osiągamy (minus 1), obliczonego jakon/5*6
. Następnie drukuje pięć spacji, ale zamiast nich są to podkreślenia dla wielokrotności pięciu. Na koniec drukuje linię pionową, z wyjątkiem górnej liniin=20
.źródło
JavaScript,
1151079694898783 bajtówTo zbyt długo, aby wygrać, ale po raz pierwszy wymyśliłem odpowiedź na PCG.SE i jestem dumny, że stworzyłem coś do wysłania.
Z kilkoma przydatnymi radami składniowymi znacznie skróciłem kod - nawet poniżej progu paska przewijania!
źródło
alert
. Jeśli uruchomisz go w konsoli, będzie działał bez niego. Również średnik w ostatnim nawiasie klamrowym nie jest konieczny. Możesz zapisać 1 bajt, używając(y/5-.2)
zamiast((y-1)/5)
s+='\n'
zay--
i pozbyć się nawiasów klamrowych, aby wyglądało to takfor(s='',y=21;y>0;y--,s+='\n')
.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'
jeśli odwrócisz swoje trójkowe wyrażenie, które możesz przetestować, dlanumber - x
którego jest 0, jeśli oba warunki są równe, oszczędzając ci jeszcze 2 bajty.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
to 83ECMAScript 6,
14213812991 bajtówSpecjalne podziękowania dla @ edc65 za naprawę tego.
Pokaż fragment kodu
Logika oryginalnej wersji sprawdź komentarz @ edc65, jak się zmieniła.
źródło
new
konstruktor przedArray
zapisaniem kilku bajtów.new
konieczny.repeat
[1,2,3,4].map((a,b)
i używając tylko b =>[0,1,2,3].map(b
(-4)MATLAB, 68 bajtów
Mam silne przeczucie, że MATLAB powinien być w stanie radzić sobie lepiej, ale nie mogę wymyślić żadnego sposobu.
Tworzy schody do góry nogami i przewraca je. Mój taumometr zepsuł się z powodu wszystkich magicznych stałych wokół.
'|'
jest celowo pozostawiony w stanie, w jakim się znajduje (zamiast ascii codepoint) w celu zainicjowaniap
iw
jako tablica char.źródło
'|' = 124
tak czy inaczej, więc nie kosztuje to żadnych dodatkowych znaków.Ruby, 48
Stare podejście, 68
źródło
'_'
można zapisać jako?_
. 3. Nowe linie mogą być osadzone bezpośrednio w ciągach znaków (możesz to zrobić"<linebreakhere>|"
). 4. Nawiasy wokół tego nie są konieczne. Finałputs
można zastąpić$><<
(co pozwala pozbyć się miejsca, nawet po użyciu?_
). Tak trzymaj! :)(1..4).map
przez,4.times
a następnie użyć4-i
zamiast5-i
.Julia, 83 bajty
W Julii konkatenację łańcuchów wykonuje się za pomocą
*
operatora, a powtarzanie łańcuchów wykonuje się za pomocą^
.źródło
> <> ,
108104100 bajtówProste rozwiązanie> <>, wykorzystujące tę samą strategię, co moja odpowiedź w języku Python . Główną różnicą jest to, że> <> nie ma mnożenia łańcuchów (ani nawet łańcuchów), więc wszystko to odbywa się za pomocą pętli.
Wyjaśnienie
źródło
Groovy,
9871 bajtówJestem całkiem pewien, że można to jakoś zmniejszyć :) skrócone o @Score_Under
źródło
' '*(i-(i-1)%5)
, wsporniki Usuń z całego('_____'+(i==25?'':'|'))
, wymienić'_____'
się'_'*5
, a jeśli odwrócić ostatni warunkowy można użyć% jako niekonwencjonalny operatora nierówność:(i%25?'|':'')
. To powinno doprowadzić cię do 71.Perl, 50
Spróbuj mnie .
źródło
T-SQL, 276 bajtów
źródło
Visual FoxPro 9.0, 261 bajtów
n = liczba kroków
w sumie 175 znaków, ale musiał poprawnie wyświetlać dane wyjściowe do pliku, więc minus 43 znaki dla operacji na plikach = 132 znaki.
Uwaga dla odpowiadającego: Liczba bajtów dotyczy absolutnie działającego kodu źródłowego, a licznik bajtów mówi, że jest to 261 bajtów, więc tak jest.
źródło
Bash (+ tac z coreutils): 110 bajtów
Można to wkleić bezpośrednio do terminala.
źródło
|tac
tego nie całkiem działa. I uruchomiłem to na Git Bash, więc powinienem się zabić.kod maszynowy x86, 48 bajtów
Odpowiednik kodu zestawu:
Wynik:
Przepraszam, że wynik jest inny; Mam nadzieję, że jest to do przyjęcia.
Zostało to uruchomione w DOSBOX
źródło