Napisz program (lub funkcję), który przyjmuje dodatnią liczbę całkowitą.
Jeśli dane wejściowe są 1
, wydrukuj (lub zwróć) dwa diamenty sąsiadujące obok siebie, każdy o boku długości 1 ukośnika:
/\/\
\/\/
Dla każdego wejścia N
większego niż 1, spójrz na wynik dla N-1
każdej pary sąsiednich diamentów, włóż między nimi nowy diament, którego długość boku jest sumą długości boku dwóch sąsiadów. Wydrukuj (lub zwróć) ten nowy wzór diamentu.
Kiedy 2
jest wprowadzany, patrzymy na wynik 1
i widzimy, że są dwa sąsiednie diamenty, oba o długości boku 1. Więc wstawiamy między nimi diament długości 2 (1 + 1):
/\
/\/ \/\
\/\ /\/
\/
3
Jako dane wejściowe patrzymy na wynik 2
i dodajemy dwa diamenty o długości boku 3 (1 + 2 i 2 + 1) pomiędzy dwiema parami sąsiednich diamentów:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Kontynuując wzorzec, wynikiem 4
jest:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
I tak dalej.
Twoje dane wyjściowe mogą mieć końcowe spacje w dowolnych wierszach, ale tylko do jednej nowej linii (bez żadnych nowych linii).
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Pyth,
5049 bajtówDemonstracja
Wyjaśnienie:
źródło
u.iGsM.:G2tQjT9
w roztworze moim (częściowego). Nigdy nie spojrzałem na twoją odpowiedź ...Common Lisp, 425
Przykład
Nie golfił
źródło
CJam,
595857 bajtówDzięki @ MartinBüttner za grę w golfa na 1 bajcie.
Wypróbuj online w interpretatorze CJam .
Pomysł
Na przykład dla danych wejściowych 3 generujemy
obracając strunę
\
i zastępując niektóre ukośniki odwrotne ukośnikami.Następnie skompresujemy wynikową tablicę (transponujemy wiersze i kolumny), aby uzyskać dolną połowę pożądanego wyniku.
Górna połowa to bajt na bajt równy dolnej połowie w odwrotnej kolejności.
Kod
źródło
Rev 1: Ruby 170
Nowa metoda unikania tworzenia dużego diamentu i zmniejszania.
Rev 0: Ruby, 187
Rozmiary diamentów są obliczane zgodnie z relacją powtarzalności z https://oeis.org/A002487 W ten sposób tworzymy tablicę
a
zawierającą wszystkie elementy dla wszystkich wierszy od 1 don
. Interesują nas tylko ostatnie1<<n-1
elementy (Ruby pozwala nam pobrać je z tablicy przy użyciu indeksów ujemnych, gdzie -1 jest ostatnim elementem w tablicy), a także inital1
z pozycji 0.Linia po linii i diament za diamentem, rysujemy rząd znaków dla największego diamentu, a następnie wycinamy środkowe kolumny, aby uzyskać rząd wymaganego diamentu. Wersja 1 jest krótsza, ale podobała mi się ta metoda.
Arytmetyka modułowa służy do zawijania, dzięki czemu to samo wyrażenie dodaje wszystko
/
bezpośrednio, a także jedno wyrażenie dodaje wszystko\
bezpośrednio.Niegolfowany w programie testowym
źródło