Opis zadania:
Narysuj sześcian w sztuce ASCII w przybliżeniu w rzucie szafki.
Monospaced fonts
często mają postacie, które są około dwa razy wyższe niż są szerokie. Ponieważ wejściem jest długość linii pionowych (z wyłączeniem narożników), linie poziome są rysowane z dwukrotnie większą liczbą znaków, dzięki czemu powstały obraz jest w przybliżeniu sześcianem. Cofające się linie są narysowane w połowie długości, jak nakazuje to rzut szafki.
Narożniki sześcianu są reprezentowane przez +
linie poziome, linie -
pionowe i linie |
ukośne /
.
Podsumowując: Niech będzie wejście n , a następnie
- Rysowana jest pozioma krawędź sześcianu
-
i składa się z 2 n znaków. - Rysowana jest pionowa krawędź sześcianu
|
i składa się z n znaków. - Rysowana jest ukośna krawędź sześcianu
/
i składa się z n / 2 znaków. - Rysowane są rogi sześcianu
+
. Narożniki nie są liczone dla długości krawędzi, jak wyszczególniono powyżej (patrz również przykłady poniżej).
Wkład:
Dane wejściowe podane na standardowym danych wejściowych to pojedyncza dodatnia, parzysta liczba n (2 ≤ n ≤ 30), która podaje długość pionowych linii sześcianu. Następnie następuje przerwa pojedynczej linii.
Wydajność:
Dane wyjściowe to sześcian na standardowym wyjściu zgodnie z powyższymi zasadami. Końcowe białe znaki w liniach są ignorowane.
Przykładowe wejście 1:
2
Przykładowy wynik 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Przykładowe wejście 2:
4
Przykładowe wyjście 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: Teraz zaakceptowałem najkrótsze rozwiązanie. Zaktualizuję przyjętą odpowiedź, gdy pojawi się krótsza.
Ponieważ niektóre osoby pytały, jak długo trwały zgłoszenia naszych uczestników:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Jak również nasze własne rozwiązania (niesklasyfikowane według innych):
140 - Golfscript
172 - Ruby
183 - PowerShell
Odpowiedzi:
Golfscript - 96 znaków
Większość zwartości pochodzi z agresywnego przechowywania prawie wszystkiego do zmiennej (chyba że uwzględnisz zapisywanie w golfa).
Kilka innych małych sztuczek tutaj.
'LR''str'*
->'LstrR'
.'/'
jedynymi muszą przejść obok dwóch elementów stosu (@
) zamiast 3 (@ .. \
).źródło
Python -
248243230227191Nieco niechlujny, ale w zasadzie drukuje sześcian linia po linii (używając bufora łańcuchów).
Dzięki @marcog za wskazanie pierwszej linii, @ThomasO za wskazanie drugiej linii i @Juan za uświadomienie mi, że mogę łączyć linie.
źródło
s=" ";p="+";b="|";f="/";n="\n"
nas,p,b,f,n=" +|/\n"
.Python - 179
Chciałbym zauważyć, że wziąłem kilka pomysłów z JPvdMerwe (użycie jednego ciągu do wydrukowania raz, a jeden wiersz dla tego, czego nie wiedziałem, był poprawną składnią w Pythonie).
źródło
fortran 77 - 484 znaków
Nie ma sensu oferowanie wersji „nieobsługiwanej”. I zauważ, że przecena nie zgadza się dobrze z wymaganiami dotyczącymi wcięć.
Próbowałem fortran ze względu na wbudowane pętle dla
write
instrukcji. Oczywiście pomagają, ale nie sumują się w wystarczającym stopniu, aby zabić słownictwo języka. Można to zmniejszyć za pomocą dowolnego wejścia.Uprawomocnienie:
Na szczęście specyfikacja nie mówi, jak powinien wyglądać rozmiar:
ale inne nieparzyste rozmiary są rozsądne:
źródło
Moje własne rozwiązanie, ponieważ zostało już pobite na śmierć przez Pythona:
Windows PowerShell, 183
źródło
PostScript, 237
Historia:
def
wydała jeszcze kilka rzeczy, które pojawiały się często.def
s.def
który oszczędza dwa kolejne bajty.[
i]
mają ładne właściwości, gdy są używane jako zmienne :-). Dzięki KirarinSnow .def
s. Jeszcze raz Thansk :-).źródło
Ruby 1.9,
172 165162 znakówźródło
Rubin - 423 znaków
Naprawdę nie chcę się tym dzielić, ponieważ jest to tak okropna liczba, ale odkąd napisałem, równie dobrze.
Prawdopodobnie można by to trochę zmniejszyć, ale wątpię, aby to podejście brutalnej siły miało miejsce gdziekolwiek w pobliżu przyzwoitej liczby postaci, więc nie mogę się tym przejmować.
źródło
PHP,
401392382363 znaków:Zrobiłem to początkowo, aby zobaczyć, jak krótko mogę to zrobić w PHP, ponieważ wiedziałem, że będzie to dość długie. Jestem pewien, że można to zmniejszyć, ale niewiele, biorąc pod uwagę, że PHP nie ma wielu skrótów.
Walidacja:
http://codepad.viper-7.com/ftYYz9.php53
Wersja Ungolfed: http://codepad.viper-7.com/4D3kIA
źródło
Perl, 163
Perl 5.10 lub nowszy, uruchom z
perl -E '<code here>'
Wersja Respaced:
źródło
Perl,
269 269 262 256 245 244 237 226 228 224217 znakówPodstawową ideą jest zrobienie wszystkiego z podstawieniami wyrażeń regularnych. Ponieważ dwa z używanych znaków (+ i /) są znakami specjalnymi i często pojawiają się w wyrażeniach regularnych, warto używać innych znaków i zastępować je drukiem.
Nieco bardziej czytelna wersja:
W pewnym sensie oszukuję, używając $ b jako licznika w pętli pośredniej - zamiast tego mogę dodać białe znaki w pętli powyżej $ a, a następnie użyć zamienników regularnych dla tej pętli - ale pozwolę na to niewielkie odchylenie z rozwiązania opartego wyłącznie na wyrażeniach regularnych.
Bez wątpienia przerażająca osoba może zmienić to w znacznie krótszy skrypt sed.
źródło
y
dlatr
nie jest oczywiste, a jeśli chodzi o drogę „while” może iść przed lub po ...Lua,
294302292 bajtówGra w golfa:
Nie golfowany:
źródło
or 6
poread()
, co oszczędza cztery bajty :-)(...)
nie działa już dla mnie na Lua 5.1.4.Płótno , 63 bajty
Wypróbuj tutaj!
źródło