Czy kiedykolwiek patrzysz na kształty 3D i myślisz, że mamy 2 wiele wymiarów. Zróbmy 3D w 1D! (Widzisz co zrobiłem?)
Zadanie
Biorąc pod uwagę dwuwymiarową reprezentację sześcianu (układ poniżej), spłaszcz go do pojedynczego łańcucha na podstawie wskaźników.
Sześcian
To jest układ kostki wypełnionej no-ops ( ,
) i wskaźnikami w rogach ( <>v^/
). Wskaźnik nawigacyjny (NP) uruchamia program tam, gdzie pokazano.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
NP kontynuuje ruch od samego początku, aż do rogu. Każdy narożnik ma domyślny kierunek, który, o ile nie zostanie zastąpiony wskaźnikiem, będzie wskazywał NP w nowym kierunku. Są pokazane na powyższym schemacie. Wskaźniki w programie to v^<>/
( /
punkty, które są albo w dół, albo w górę, ze względu na układ nigdy nie będzie żadnych pomyłek między nimi)
NP przestaje się poruszać, gdy osiągnie ¶
symbol (Tak, wiem, że to postać wielobajtowa, radzimy sobie z tym). Każdy znak, który przechodzi, jest dodawany do końcowego ciągu wyjściowego, z wyjątkiem wskaźników, no-op ( ,
) i ¶
symbolu.
Wejście
Wejście będzie ciąg multi-line, który odpowiada układ CUBE ze znaków spoza białych zastąpić dowolnym charakterze w zakresie 0x21
do 0x7E
i co najmniej jednej instancji EOF.
Możesz wziąć dane jako:
- Ciąg wielowierszowy
- Lista ciągów, w których każda linia jest nowym elementem na liście
- 2D lista ciągów, w których każda linia jest podzielona na listę
Wynik
Sześcian, spłaszczony w jeden ciąg linii.
Wskaźnik warunkowy
NP ma wartość logiczną, która jest używana dla czegoś zwanego wskaźnikiem „warunkowym”, który zaczyna się od true
.
Wskaźnik „warunkowy” ( ?
) to wskaźnik, który będzie zmieniał wartość NP pomiędzy true
i za false
każdym razem, gdy zostanie użyty. Wskaźniki warunkowe działają tylko wtedy, gdy są używane w narożnikach, w których spotykają się 3 ścieżki (3-punktowy narożnik). Jeśli wartością jest, true
gdy NP osiągnie wskaźnik warunkowy, NP przesunie się do domyślnego kierunku na obrazie CUBE, a po skierowaniu wartość NP zostanie przełączona. Dlatego jeśli jest włączonyfalse
, NP postępuje w kierunku innym niż domyślny.
Nigdy nie będzie instancji, w której NP zmierza w kierunku warunkowym, a domyślnym kierunkiem jest kierunek, z którego właśnie pochodzi. Wyobraź sobie, że jest to lewy róg przedniej ściany, a wartość NP wynosi obecnie true
:
NP direction
/
,
,
,,,?
,
,
Tak się nigdy nie stanie, ponieważ domyślny kierunek odzwierciedla go z powrotem.
Jeśli wskaźnik warunkowy znajduje się w 3-punktowym rogu:
- Nie jest dodawany do końcowego ciągu
- Wartość NP jest przełączana pomiędzy
true
ifalse
po skierowaniu NP. - Jeśli wartością NP jest
true
, NP jest przekierowywany do domyślnego kierunku. W przeciwnym razie jest przekierowywany w kierunku innym niż domyślny .
Jeśli jest na torze lub 2-punktowym narożniku:
- Jest dodawany do końcowego ciągu
- wartość jest przełączana
- Adres IP nie jest ukierunkowany
Coś, na co trzeba uważać
Jeśli wskaźnik znajduje się na ścieżce i nie wskazuje na spacje, NP jest kierowane na nową ścieżkę, dodaje następny znak do końcowego ciągu i obraca NP o 90 stopni w prawo.
abcd
>e
g f
/
NP direction
spłaszczyłoby się do
(...) gef (...)
NIE
(...) g>def (...)
/
Wskaźnik nie przekierować NP w tym przypadku, ponieważ może przekierować do przestrzeni tak
f
e
> ab/d
stanie się ab/def
Zasady
- Szerokość, wysokość i głębokość sześcianu mogą ulec zmianie
- Wysokość i głębokość sześcianu zawsze będzie taka sama i będzie równa połowie szerokości, więc szerokość będzie zawsze równa.
- Szerokość będzie zawierać się między (włącznie) 6 a 60.
- Zawsze będzie EOF (
¶
), do którego NP może dotrzeć. Np. Nigdy nie będzie czegoś takiego w kostce:<¶>
ponieważ NP nigdy nie będzie w stanie dotrzeć do kostki. - Ponieważ nie można wstawić spacji do ścieżek sześcianu, w ostatnim łańcuchu nie powinno być nigdy spacji.
- Jeśli wskaźnik zostanie umieszczony na jednym z torów (nie na rogu) i skieruje NP w spacje, NP pozostanie stały, a znak zostanie dodany do końcowego ciągu.
- Jeśli jednak wskaźnik utrzymuje go na ścieżce, NP jest kierowany, a znak wskaźnika nie jest dodawany
- Ponieważ no-ops (
,
) nie są dodawane do końcowego ciągu, końcowy ciąg nie powinien zawierać żadnego,
w nim . - Możesz założyć, że dane wejściowe będą prawidłowe.
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach !
Przykłady
Input
Output
-----
Input
Output
abcdef
¶ ,g
q,,,,, h
p ,i
onmlkj
abcdefghijklmnopq
-----
>,,,,,,,,,,,,,,,,,,v
¶ ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
nothing
-----
Mr/~gm,Vc!r,0cbmPC@Zg9jb)7=m^ppwN*Nuk){r
c ¶Z
J ; #
e j 8
] b "
# ` 4
h $ -
p n 2
L S P
B ; R
@ J D
E N <
O \ p
B y =
| 9 ;
T x [
6 o k
! L =
E K ~
>mjmz6,?A*Q)^.a:IpGP"^bK}DSXL)2F!BV|"m6/ T
a A 6
5 = p
1 i R
4 / ?
- Z (
1 " `
' 0 {
N p M
O * K
Z J $
" ( d
4 + o
f U g
i v b
U ~ L
U M h
g ^ D
2 (g
5]u*n<Ldn</9/XQyC444Va\m}W3Rf,rp"a@5cZB0
(Newlines added for readability)
Mr/~gmVc!r0cbmPC@Zg9jb)7=m^ppwN*Nuk){rZ#8"4-2PRD<p=;[k=~T
6pR?(`{MK$dogbLhDg0BZc5@a"prfR3W}m\aV444CyQX/9/ndLn*u]52g
UUif4"ZON'1-415amjmz6?A*Q)^.a:IpGP"^bK}DSXL)2F!BV|"m6KLox9
y\NJ;Sn$`bj;
-----
NEWYORKCITYBABY!
¶ ,,
, , ,
, , ,
, , ,
, , ,
, , ,
,,,,,,,,,,,,,,,, ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
,,,,,,,,,,,,,,,,
NEWYORKCITYBABY!
-----
/{Y!_(=-)s<e!D^<+<+1o30d>QOx9kfu?3X2I:8],t>Ye~,Y9/6;u@
] >Y
! 1 )
c 7 8
^ K &
f K 9
M } O
s _ ?
h N e
? u ,
g = s
> Q M
a 0 9
b c (
h { c
[ m *
I R %
K E >
u 5 n
W f ]
} | y
F E q
) < ;
X L S
F M |
u * Z
>XZpJ=L`+8ONRk?T7$qVr6-U^f14{>>ABEEP`Mjx&T[/&o*F=*qq{/ e
¶ < ^
+ P C
. x m
; ^ >
y 4 b
5 v `
Q B c
2 e r
a x I
3 1 Y
Q v `
w ; o
* S h
E b S
r 6 P
M ` l
% M A
- ` "
j \ s
} ~ J
$ h c
% p O
I Z Z
] N E
` 3<
x^}}SI"-a3[%7U5EV}"UM?Aov|E_yjrMt<HAQ@}QAABO&y//R0$\2p
(Newlines added for readability)
]!c^fMsh?g>abh[IKuW}F)XFuXZpJ=L`+8ONRk?T7$qVr6-U^f14{ABEE
P`Mjx&T[/&o*F=*qq{*ML<E|f5ERm{c0Q=uN_}KK71Y)8&9O?esM9(c*%
>n]yq;S|Ze^Cm>b`crIY`ohSPlA"sJcOZE3NZph~\`M`6bS;;Sb6`M`\~
hpZN3p2\$0R//y&OBAAQ}@QAHtMrjy_E|voA?MU"}VE5U7%[3a-"IS}}^
x`]I%$}j-%MrE*wQ3a2Q5y;.+
-----
%:biv+|?
¶ \+
T c ,
?{yX<//v "
i [ @
Q Tj
U8sUNl.?
%:biv+|+"@jT[[T.lNUs8UQi{yXXy{T
-----
FCf2hoYA)&*j
F ¶#
3 p (
& ~ w
; * t
39Hq{F'MmmO/ 9
5 \ D
- | }
8 c l
a 25
GKa"<0/7MG[?
FCf2hoYA)&*j#(wt9D}l5[GM7/0"aKGa8-53;&3FFCf2hoYA)&*j#(wt9D}l52c|\*~p
-----
#S^[WNk3;9v;e2\h!@CI#Il?
G g`
$ 2 \
V 9 S
m Y b
6 ) *
U ' V
[ g V
I 8 X
< T U
K ¶ C
?ozMt+xxxxutvQgkx&D9I/<v '
w K p
V y h
( R y
e P i
] ! x
Z / s
y w '
# X 4
c ~ W
Z E,
~IdXPYS.Lc49lC~vjULUBv.?
(Newlines added for readability)
#S^[WNk3;9v;e2\h!@CI#Il`\Sb*VVXUC'phyixs'4WE~Xw/!PRyKKyRP!/wX~E
.vBULUjv~Cl94cL.SYPXdI~Zc#yZ]e(VwozMt+xxxxutvQgkx&D9I//I9D&xkgQ
vtuxxxx+tMzoK<I[U6mV$G#S^[WNk3;9v;e2\h!@CI#Ilg29Y)'g8T
Odpowiedzi:
Python 3 ,
155815531419141713471258 bajtówWypróbuj online!
Zaoszczędź 5 bajtów dzięki @sagiksp
Zaoszczędzono 20 bajtów dzięki @ Mr.Xcoder i @totallyhuman na czacie
Zaoszczędzono 128 bajtów dzięki różnym sztuczkom golfowym
Zaoszczędź 72 bajty dzięki @JonathanFrech
Zaoszczędzono kolejne 89 bajtów dzięki @ Mr.Xcoder
źródło
not(p[0] == 0)
, może być po prostup[0]!=0
.space
wtedy\t
(tab) potemspace\t
itd. To jest po prostu sposób, w jaki SE formatuje posty