(zainspirowany tym pytaniem SO )
Jako dane wejściowe podano jedną dodatnią liczbę całkowitą n .
W jak najmniejszej liczbie postaci wyjmij rakietę w sztuce ASCII z głową, ogonem i ciałem złożonym z n segmentów. Nie powinno być żadnych spacji ani znaków nowej linii.
Głowa i ogon rakiety są zawsze takie same dla każdej wartości n . Ciało składa się z dwóch różnych rodzajów segmentów, które naprzemiennie. Przykłady powinny wyjaśnić strukturę rakiety.
Dane wyjściowe dla n = 1:
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
Dane wyjściowe dla n = 2:
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
+=*=*=*=*=*=*+
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
Dane wyjściowe dla n = 3:
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
/**\
//**\\
///**\\\
////**\\\\
/////**\\\\\
Odpowiedzi:
CJam,
6763 znakówPowinno to działać w tłumaczu online .
Jak to działa
Po wypchnięciu ciągu Unicode fragment kodu
konwertuje ciąg z bazy 60000 na bazę 127, rzutuje na ciąg i ocenia wynik.
Wykonany kod jest następujący:
źródło
CJam, 121 bajtów
Wypróbuj online
Pobiera dane wejściowe n przez STDIN.
W pewnym momencie dodam wyjaśnienie. Zasadniczo jest to tylko kilka pętli w bardzo naiwny sposób. Aby przełączyć się między dwiema różnymi częściami ciała, mam zagnieżdżoną pętlę nad częścią i pętlę nad
0
i1
. Następnie po prostu dodaję zewnętrzny i wewnętrzny iterator i używam ich parzystości, aby wybrać między trójkątem wskazującym w górę lub w dół.źródło
java.util.NoSuchElementException
kopię + wklejenie kodu (wskazując naLri
)Ruby, 203
Nie golfił
Myślę, że w tym przypadku warto mieć wersję bez gry w golfa.
Wyjaśnienie
Wątpię, czy jest to prawie skuteczne, ale mimo to było fajnie.
ARGV
.h
zawiera „głowę” i „ogon” rakiety,r
zawiera „grzbiety”, które oddzielają różne części rakietym
ip
są górną i dolną częścią „ciała” rakiety.Array
["ridge", "top of body", "bottom of body", "ridge", "bottom of body", "top of body"]
i biorąc pierwsze3*n
elementy.puts
upewnia się, że wszystko ma swoją własną linię.źródło
Python, 120 + 77 + 1 = 198 znaków
Skończyło się to niewłaściwym podejściem, ale skończyłem już, kiedy Martin opublikował swoją odpowiedź.
Wymaga pliku
R
(+1 dla nazwy pliku) o długości 77 bajtów, który można wygenerować w następujący sposób:źródło
Znaki JS, WIP, 252b lub 173
To nie jest funkcja, więc musisz ustawić wartość n na początku (tutaj 3), a następnie wykonać ją w konsoli lub w węźle JS.
Oto wersja 252b:
A oto wersja 173 znaków (przy użyciu http://xem.github.io/obfuscatweet/ )
źródło
JavaScript (E6) 252
257Nadużycie string.repeat
źródło
JavaScript (ES3): 243
219bajtówźródło
SyntaxError: function statement requires a name
:, 2: niepoprawny wynik, segmenty ciała nie powinny być wszystkie równe (nieparzyste i parzyste są różne)