Wprowadzenie
Jest 2600 pne i ludzie budują teraz piramidy. Stanowili już podstawę piramidy, ale nie wiedzą, jak kontynuować. Wołali cię o pomoc.
Zasady tworzenia piramidy są dość proste. W przypadku warstwy powyżej poprzedniej warstwy wystarczy postępować zgodnie z poniższym przewodnikiem:
Odetnij krawędzie poprzedniej warstwy.
Nad
/
postacią musi znajdować się\
postać i na odwrót. Dotyczy to każdego znaku z wyjątkiem krawędzi.Najbardziej wysunięta na lewo postać jest zawsze
/
a najbardziej na prawo jest zawsze\
.
Weźmy przykład podstawy piramidy:
//\/\/\\
Odcinamy krawędzie, pozostawiając:
/\/\/\
Zmieniamy ukośniki z ukośnikami i odwrotnie:
\/\/\/
Znakiem najbardziej na lewo jest zawsze /
a skrajnym prawym jest zawsze a \
, dlatego zmieniamy to:
//\/\\
Kładziemy tę warstwę na poprzedniej warstwie:
//\/\\
//\/\/\\
Kontynuujemy, aż do osiągnięcia szczytu (który wygląda /\
). Ostatecznie otrzymujemy:
/\
//\\
//\/\\
//\/\/\\
Właśnie tego potrzebujesz.
Zadanie
Biorąc pod uwagę podstawę piramidy (o długości większej niż 3), wypisz pełną piramidę. Możesz bezpiecznie założyć, że najbardziej wysunięta na lewo postać jest, /
a najbardziej na prawo jest to \
. Możesz również założyć, że długość podstawy jest zawsze równa . Użycie spacji końcowych jest dozwolone. Dozwolone jest również używanie wiodących miejsc , o ile piramida pozostaje na swoim miejscu. Dozwolone jest użycie 1 końcowej i 1 wiodącej nowej linii.
Przypadki testowe
Input: /\\\
Output:
/\
/\\\
Input: //\\///\/\
Output:
/\
/\\\
/\///\
///\\\/\
//\\///\/\
Input: /////////////\
Output:
/\
/\\\
/////\
/\\\\\\\
/////////\
/\\\\\\\\\\\
/////////////\
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
Galaretka ,
28 26 2524 bajty-4 bajty dzięki Dennisowi
Przepis:
(podawaj z lemoniadą, te piramidy robią dla spragnionych robotników)
Przygotuj swoją własną piramidę cięcia w TryItOnline lub wypróbuj wszystkich sugerowanych degustatorów OP
źródło
Retina ,
59565452 bajtówWypróbuj online!
Próbka wyjściowa
źródło
Pyth -
2726 bajtówZmniejsza się o operację podaną w OP, dopóki się nie powtórzy, co ma miejsce w przypadku pustej linii.
Pakiet testowy .
źródło
Python 2, 78 bajtów
Funkcja rekurencyjna, która generuje ciąg. Każda warstwa piramidy jest dołączana do rekurencyjnego wezwania z warstwą nad nią. Prefiks
p
, który zaczyna się od znaku nowej linii, zyskuje jeszcze jedno miejsce na trójkąt. Następna warstwa jest tworzona przez zamianę ukośników, odcięcie pierwszego i ostatniego dwóch symboli i umieszczenie ich w lewym i prawym ukośniku.Python 3 może zapisać bajt, wykonując
*99
wtranslate
, ponieważ wymóg długości-256 został usunięty.źródło
Haskell,
98949085 bajtówPrzykład użycia (uwaga: w Haskell odwrotne ukośniki w dosłownym ciągu muszą być poprzedzone znakami
\\
):Proste podejście rekurencyjne:
#
działa poprzez mapowanies
, które odwraca/
i\
na elementach wewnętrznych. Dodatkowy parametrt
śledzi poziom wcięcia i jest powiększany o spację w każdym wywołaniu rekurencyjnym.Uwaga: drugie wywołanie rekurencyjne
#
(->l#""
) przeskakuje bezpośrednio do przypadku podstawowego i jest tylko krótkim sposobem na dodaniel
,\
i znak nowej linii, czyli zastępuje++l++"\\\n"
.Edycja: @xnor zapisał 5 bajtów. Dzięki!
źródło
l++"\\\n"
wyglądal#""
.s
jest[c|x<-s,c<-"ab",c/=x]
.++"\\\n"
, ale przegapiłem ten. Dzięki!Python 3,
108 104 101 94 91 8988 bajtów-7 bajty dzięki XNOR (pozwalając mi znać, że nie mamy do wydrukowania!)
-3 bajty dzięki XNOR (biorąc deklaracji poza deklaracji funkcji [D'oh])
-1 bajt dzięki Dennis (Replace
f,b='/\\'
zb,f='\/'
)Przetestuj na ideonie . Uwaga: dane wejściowe dostosowane do podwójnego ukośnika odwrotnego (nawet ciągi surowe nie będą działać, jeśli zakończą się nieparzystą liczbą odwrotnych ukośników).
źródło
f,b='/\\'
poza funkcją.JavaScript (ES6),
9186 bajtówWynik zawiera wiodący znak nowej linii.
źródło
Rubinowy, 80 bajtów
Nie golfił
Zobacz na ideone: http://ideone.com/HN0l0Y
źródło
f
w cielePartia, 137 bajtów
Dogodnie moje użycie
%~2
i%1
oznacza, że unikam konieczności wydawania bajtówsetlocal
. Objaśnienie: Ponieważ Batch nie wykona zamiany pustego łańcucha, musimy ustawić następną warstwę z „złymi” krawędziami, które następnie zostaną poprawione w ramach zamiany łańcucha.źródło
BASH (sed + sort)
7166 bajtówdane wejściowe pochodzą ze standardowego wejścia.
Przykład:
Wyjaśnienie:
-n
- wstrzymywanie automatycznego druku:l
- itl
oddział z powrotem do początku, jeśli linia ta była czymś innym niż/\
p
- wydrukować tę linięy|\\/|1\\|;y|1|/|
- wymienić\
z1
,/
z\
, a następnie1
z/
th;:h
- test i skakać na to samo miejsce, tak że dopiero następny podstawienie zostanie przetestowany późniejs|\\.(.*)./| /\1\\|
- zamień dwa zewnętrzne nacięcia z każdej strony na{space}/
i\
sort
-space
pojawia się wcześniej,/
więc wszystko układa się we właściwej kolejnościźródło
05AB1E,
423836 bajtówWypróbuj online!
Wyjaśnienie:
(Podziękowania dla Emigny za zwrócenie na to uwagi
DD -> Ð
iDR -> Â
).źródło
Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»
oszczędza 7 bajtów.Idź,
300276 bajtówDługa wersja:
źródło
import(."regexp";."os")
oszczędza 2 bajtyPerl,
5352 bajtyObejmuje +1 dla
-p
Uruchom z wejściem na STDIN, np
pyramid.pl
:źródło
05AB1E , 31 bajtów
Wyjaśnienie
Wypróbuj online
źródło
> <> ,
186179175171 bajtówoooh człowieku, to zdecydowanie moja największa jak dotąd odpowiedź.
Prawdopodobnie zostało jeszcze trochę golfa (dolna część jest dość marnotrawna)
Wypróbuj online
źródło
PowerShell, 142 bajty
źródło
C #, 250 bajtów
Zdecydowanie można dalej grać w golfa, ale mój mózg padł, więc postanowiłem go na chwilę zostawić.
źródło