Napisz program (lub funkcję), który pobiera niepusty ciąg dowolnych drukowalnych znaków ASCII .
Wydrukuj (lub zwróć) zygzakowaty łańcuch znaków w ciągu z każdą sąsiadującą parą znaków połączoną przez:
/
jeśli pierwszy znak występuje przed drugim znakiem w normalnej kolejności ASCII. na przykładB / A
\
jeśli pierwszy znak występuje po drugim znaku w normalnej kolejności ASCII. na przykładB \ A
-
jeśli pierwszy i drugi znak są takie same. na przykładA-A
Więc wynik Programming Puzzles & Code Golf
byłby
o
/ \
r z-z o e G l
/ \ / \ / \ / \ / \
P o r m-m n u l s & C d f
\ / \ / \ / \ / \ / \ / \ /
g a i g P e
\ /
Jeśli w ciągu wejściowym jest tylko jeden znak, wynik będzie po prostu tym znakiem.
Twój program powinien traktować ,
/
, \
, i -
tak samo jak wszystkich innych znaków.
np. -\//-- \ //-
powinien produkować:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
Wyjściowe znaki nowej linii nie powinny zawierać żadnych dodatkowych znaków, z wyjątkiem jednej opcjonalnej nowej linii końcowej. (Zauważ, że pusta linia w powyższym przykładzie zawiera ostatnią spację w łańcuchu i dlatego nie jest obca). Mogą występować spacje końcowe w dowolnych liniach w dowolnym układzie.
Najkrótszy kod w bajtach wygrywa.
Jeszcze jeden przykład - dane wejściowe:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Wynik:
9 9 8 6 6
/ \ / \ / \ / \ / \
9 6 8 7 3 3 4 2 4 8 9 8-8
/ \ / \ / \ / \ / \ / \ / \
4 5 2 5 5 2 3-3 3 7 5 2 4 9 9 9-9 7
/ \ / \ / \ / \ / \ / \ / \ / \ / \
3 1 1 3 2 0 1 7 6 3 3 5 8 8 6
\ / \ / \ / \ / \ / \
. 1 1 5 2 9 9 3 7 1 4 6 8 9
\ / \ / \ / \ / \ / \ / \ / \ /
0 0 7 9 5 2 0 0 2 6 9-9 8 5 4 7
\ / \ / \ / \ / \ / \ / \ /
4 4-4 2 8 8 4 2 3 2 7 6
\ / \ / \ / \ /
0 6 8 3 1-1 0
\ / \ /
2 0
'\n'
go ciągiem szablonu takim jak tenfor
pętle mogą być bardzo zniszczone. Nie marnuj całego bloku wymaganego kodui++
. Zamiast tego uruchom tam większośćfor
kodu. Ponadto nie potrzebujesz nawiasów klamrowych wokół pojedynczych wierszy kodu.l
jest obliczanies.length*2-1
i robisz to dwa razy. Dlaczego zamiast tego nie zapisać tej wartości?<br>
Jest właśnie tam, więc pojawia się w wersji HTML; jeśli przyjrzysz się uważnie, użyję ciągu szablonu zamiast właściwego wpisu. Ponadto nie jest to wymagane: „Drukuj (lub zwróć) ...”Python, 393 bajty
Uruchom jako:
z("Zigzag")
źródło
JavaScript (ES6), 202
Używanie ciągów szablonów. Wcięcia i znaki nowego wiersza nie są liczone, z wyjątkiem ostatniego nowego wiersza wewnątrz kresek wstecznych, który jest znaczący i liczony.
Zwykła uwaga: przetestuj fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6 (w szczególności nie Chrome, a nie MSIE. Testowałem na Firefoxie, Safari 9 mogłaby działać)
źródło
CJam, 79 bajtów
Wypróbuj online
To buduje kolumnę wyjściową kolumna i transponuje wynik na końcu, aby uzyskać wynik wiersz po wierszu. To było dość bolesne.
Wyjaśnienie:
źródło
Perl 5,
230214Test
źródło
K, 86
.
Nie golfowany:
źródło
Ruby, 158
Zaoszczędzono 6 bajtów dzięki histocratowi . Dzięki!
źródło
->s,*i{
. A jeśli zastąpis[0]
sięs[/./]
, myślę, że można zastąpićs[1..-1]
z$'
.Python z Numpy: 218 bajtów
Warto zmarnować 19 bajtów na import numpy.
Gra w golfa:
Nie golfowany:
źródło