tło
Kiedy byłem młodszy, nauczyłem się metody rysowania dziwnego kształtu litery „S”, który mnie (wraz z kolegami z klasy) był fascynujący. Dziś odkryłem go na nowo, a ze względu na jego formalne podejście do rysowania, pomyślałem, że może to prowadzić do interesującego wyzwania: P
Rysowanie litery „S”
Litera S może być narysowana w następujący sposób:
Najpierw narysuj 2 rzędy trzech pionowych linii
| | |
| | |
Następnie połącz górną lewą linię z dolną środkową linią i górną środkę z dolną prawą linią, aby wytworzyć
| | |
\ \
| | |
Na koniec narysuj górę i dół na aktualnie narysowanym obrazie, aby wyglądał tak
^
/ \
| | |
\ \
| | |
\ /
v
Jak widać, daje to kształt litery „S”. Po rozszerzeniu (rysując go z więcej niż 2 rzędami) tworzy bardzo interesujący wzór. Twoim zadaniem jest odtworzenie tego interesującego wzoru.
Zadanie
Biorąc pod uwagę liczbę całkowitą n >= 2
, wyprowadzić literę S z n
wierszami, które zostaną z niej wykonane. Dane wyjściowe mogą być zwracane z funkcji, a dane wejściowe mogą być pobierane standardowymi metodami. Końcowe / wiodące białe znaki zarówno dla całego obrazu, jak i dla każdej linii, są w porządku. Jednak odstępy między wierszami muszą być spójne, aby znak „nie był łamany. Możesz wyprowadzać dane jako listę wierszy.
Przypadki testowe
input
output
---
2
^
/ \
| | |
\ \
| | |
\ /
v
---
8
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
---
10
^
/ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ \
| | |
\ /
v
To jest golf golfowy, więc wygrywa najkrótszy kod! Powodzenia,
S
się super S i zwraca nieskończoną wersję AnS Chain
Odpowiedzi:
Python 2 , 47 bajtów
Wypróbuj online!
źródło
C # (.NET Core) ,
7369666462 bajtówDwa mniej bajtów i wygląd podobny do perla dzięki Barodusowi. Nie myślałeś o użyciu int? dla zer.
Wypróbuj online!
źródło
new string[n+1]
robi? Nigdy wcześniej tego nie widziałem.new string[n+1]
był to jakiś podstępny konstruktor ciągów, a nie deklaracja tablicowa.Python 3 , 48
56 59 61bajtówWypróbuj online!
źródło
\ \
.05AB1E ,
2726 bajtówWypróbuj online!
Alternatywna wersja 27-bajtowa
Wypróbuj online!
Wyjaśnienie
źródło
'^…/ \©IF„| ûû„\ û}\®R'v).C
nie patrząc.Japt ,
342523 bajtówPrzetestuj online! Dane wyjściowe jako tablica linii;
-R
dodano flagę, aby dołączyć do nowej linii. (Dzięki @Shaggy)Pierwszadruga próba może być możliwa do poprawy ...Jak to działa
źródło
SOGL V0.12 ,
262518 bajtówWypróbuj tutaj!
Używa tej samej strategii, co odpowiedź Japt ETHproductions
Wyjaśnienie:
źródło
push "|" and " "
co do cholery jest wbudowaneJavaScript (ES6), 60 bajtów
Test Snippet
Pokaż fragment kodu
źródło
n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'
(przy użyciuWęgiel drzewny ,
272625 bajtów-1 bajt dzięki Carlos Alejo. -1 bajt dzięki tylko ASCII.
Wypróbuj online! Link jest do pełnej wersji. # charcoal-verbose-obfucation
źródło
\r
: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Pełna wersja .\r
o sposobie, by uzyskać nowe linie rozsądnym sposobem. Dzięki!Perl 5 ,
3937 bajtówWypróbuj online!
Ogolono dwa bajty z sugestią @DomHastings
źródło
Właściwie 49 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
05AB1E , 38 bajtów
Wypróbuj online!
źródło
C (gcc) , 82 bajty
Wypróbuj online!
źródło
C # (.NET Core) ,
1017773 bajtówZaoszczędziłem 24 bajty dzięki i cri everytim !
Zaoszczędzono 4 bajty dzięki Kevinowi Cruijssenowi !
Wypróbuj online!
Jak zwykle ciąg powtarzający się w C # jest uciążliwy.
źródło
--n>=0
, abyn-->0
is+="/\n v";return s;
doreturn s+"/\n v";
zaoszczędzić kilka bajtów.Siatkówka , 38 bajtów
Wypróbuj online!
Drukuje kolumnę początkowych spacji i końcowych spacji w każdej linii.
Wyjaśnienie
Główne oszczędności w bajtach wynikają z pominięcia spacji we wszystkich dosłownych częściach i wstawienia ich na końcu. Figura ma taką strukturę, że nigdy nie ma obok siebie dwóch spacji, więc jeśli usuniemy je wszystkie, możemy prawie naprawić kształt, wstawiając spację w każdej pozycji na końcu:
staje się:
To prawie poprawne, z wyjątkiem wcięć. W
^
iv
brakuje dwóch spacji. W rzeczywistości jest to łatwiejsze do naprawienia, ponieważ jeśli po prostu wstawimy wyraźne spacje przed każdym z nich, spowoduje to dodanie dwóch dodatkowych spacji na końcu. Linie z ukośnikami są trudniejsze, ponieważ wymagają tylko jednego dodatkowego miejsca. Aby to naprawić, wstawiamy tam znak zastępczy (x
). Kiedy wstawiamy spacje na końcu, nie wstawiamy ich tylko dla każdego pustego dopasowania, ale opcjonalnie dopasowujemy tox
. Oznacza to, że zamiast wstawiać spację przedx
,x
sam zostaje zastąpiony. A potem będzie nadal pusty mecz zaraz pox
. To znaczy, każdyx
dodaje dokładnie jedną spację bez zmiany czegokolwiek innego. Więc chcemy to skonfigurować:co da nam pożądany rezultat. Oto kod:
Przekształć dane wejściowe w jednoargumentowe.
Przekształć każdą
1
z nich w dwie linie za pomocą|||
ix\\
(i wiodącego podawania linii).Wstaw pierwsze dwie linie za pomocą
^
ix/\
.Napraw finał
x\\
, zamieniając ostatni\
w/
i dodając linię za pomocąv
.Zamień każde
x
lub puste dopasowanie spacją.źródło
Pyth, 46 bajtów
Zestaw testowy.
źródło
%" ^\n / %s/\n v"*Q"\\\n| | |\n \
Pyth, 40 bajtów
Dość podobny do Stevena Hewitta, ale rozwijał się niezależnie.
Wypróbuj online
Wyjaśnienie
źródło
Pyth,
333231 bajtówDzięki panu Xcoder za jeden bajt.
Wypróbuj online: pakiet demonstracyjny lub testowy
źródło
Siatkówka , 45 bajtów
To dość proste rozwiązanie.
Wypróbuj online
Jeśli sztuka mogłaby być zamiast tego indeksowana 1, byłaby nieco krótsza (44 bajty):
źródło
Pip ,
454233 bajtówWypróbuj online!
Wyjaśnienie
Kod jest naprawdę prosty, choć nowe wiersze utrudniają czytanie. Oto lepszy sposób, aby zobaczyć strukturę:
Powtarzającym się elementem w łańcuchu S jest
Weź to jako dosłowny ciąg i powtórz go
a
razy (gdziea
jest pierwszym argumentem wiersza poleceń). Następnie dodaj prefiks:i dodaj przyrostek:
i wydrukuj.
(Podoba mi się, jak to wyglądało trochę jak program> <>.)
źródło
MATL ,
474443 bajty-3 bajty dzięki Giuseppe
Wypróbuj online!
źródło
' ^' ' / \ 'XK'| | |'XJ`' \ \'JGq@-]KP' v'
ma 44 bajty.Haskell, 53 bajty
Wypróbuj online!
źródło
Excel, 60 bajtów
źródło
PowerShell ,
83, 57 bajtówWypróbuj online!
Per @ AdmBorkBork sugestie,
for
dzięki zakresowi liczb.;
i połączone ciągi znaków.źródło
for
dużo zagrać w golfa1..--$args[0]|%{ }
.";"
a taniej$s
całkowicie się go pozbyć . 57 bajtów1..$args
okazję. Nie jestem pewien, jaka etykieta znajduje się na tej stronie. Czy wprowadzę zmiany w mojej odpowiedzi i uznam cię, czy publikujesz swoje rozwiązanie jako osobną odpowiedź?AsciiDots , 88 bajtów
Wypróbuj online!
źródło
Galaretka , 32 bajty
Nudny port rozwiązania Python Lynna .
Wypróbuj online!
Wyjaśnienie:
źródło
Właściwie 30 bajtów
Działa to na tej samej zasadzie, co odpowiedź Japt ETHproductions , w której dodatkowe spacje są dodawane później, a cały ciąg jest dzielony na rzędy po 5 w celu niejawnego drukowania. Wypróbuj online!
Ungolfing
źródło
Galaretka ,
2523 bajtówDziała to na tej samej zasadzie, co odpowiedź Japt ETHproductions , w której dodatkowe spacje są dodawane później, a cały łańcuch jest przed drukowaniem dzielony na łańcuchy o długości 5. Wypróbuj online!
Edycja: Wiedziałem, że istnieje sposób na połączenie górnej i dolnej części łańcucha S w golfistyczny sposób. Dzięki Erikowi Outgolfer za -2 bajty.
Ungolfing
źródło
“\|||\”ẋ“ ^ /“/ v”jKs5Y
Węgiel , 25 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu.
źródło
↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
bash, 67 bajtów
Wypróbuj online
źródło
Java 8,
9376 bajtówPort @IanH. Odpowiedź w języku C # .NET po tym, jak trochę bardziej grałem w golfa.
Wypróbuj tutaj.
źródło
string
vs.var
n->
vsn=>
;)