Ви коли-небудь дивитесь на 3D форми і думаєте, що у нас є 2 багато виміру. Тож давайте зробимо 3D в 1D! (Бачите, що я там зробив?)
Завдання
З огляду на двовимірне подання куба (макет нижче), розрівняйте його в єдиний рядок на основі покажчиків.
КУБА
Це компонування куба, заповненого no-ops ( ,
) та покажчиками на кутах ( <>v^/
). Навігаційний покажчик (NP) починає програму, де показано.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
НП продовжує рухатися прямо з самого початку, поки не зустріне кутовий. Кожен кут має напрямок за замовчуванням, який, якщо його не перекреслити в куті покажчиком, буде вказувати NP у новому напрямку. Вони показані на наведеній діаграмі. Покажчики в програмі є v^<>/
( /
точки, це або вниз, або вгору, через макет між ними ніколи не буде плутанини)
NP перестає рухатися, коли він досягне ¶
символу (Так, я знаю, що це багатобайтовий символ, вирішуйте це). Кожен символ, який він переходить, додається до кінцевого рядка виводу, за винятком покажчиків, no-op ( ,
) та ¶
символу.
Вхідні дані
Введенням буде багаторядковий рядок, який відповідає макеті CUBE з символами, що не пробілюються, заміненими будь-якими символами в діапазоні 0x21
до 0x7E
і принаймні одним екземпляром EOF.
Ви можете приймати дані як:
- Багаторядковий рядок
- Список рядків, де кожен рядок є новим елементом у списку
- 2D список рядків, де кожен рядок розбивається на список
Вихідні дані
Куб, сплющений вниз, в єдиний рядок.
Умовний покажчик
NP має булеве значення, яке використовується для чогось, що називається "умовним" покажчиком, що починається з true
.
"Умовний" покажчик ( ?
) - це покажчик, який буде чергувати значення NP між true
та false
щоразу, коли воно використовується. Умовні покажчики спрацьовують лише тоді, коли використовуються на кутах, де зустрічаються 3 доріжки (3-кратний кут). Якщо значення досягається, true
коли NP досягає умовного вказівника, NP переходить у напрямок за замовчуванням на зображенні CUBE і після його направлення значення NP змінюється. Тому, якщо він увімкнено false
, NP слідує не за замовчуванням.
Ніколи не буде випадку, коли NP йде в умовному напрямку, а за замовчуванням - напрям, з якого він щойно прийшов. Уявіть, що це лівий кут передньої поверхні та значення NP зараз true
:
NP direction
/
,
,
,,,?
,
,
Це ніколи не відбудеться, оскільки напрямок за замовчуванням відобразить його назад до того, яким воно було.
Якщо умовний вказівник знаходиться на 3-точковому куті:
- Він не додається до остаточного рядка
- Значення NP перемикається між
true
таfalse
після направлення NP. - Якщо значення NP дорівнює
true
, NP переспрямовується на напрямок за замовчуванням . В іншому випадку він буде переспрямований у напрямок, що не використовується за замовчуванням .
Якщо він знаходиться на доріжці або двоточковому куті:
- Він додається до завершального рядка
- значення буде переключено
- IP-адреса не спрямована
Щось, на що слідкувати
Якщо вказівник знаходиться на доріжці, і він не вказує на пробіли, NP спрямовується у новий трек, додає наступний символ до остаточного рядка та обертає NP на 90 градусів праворуч.
abcd
>e
g f
/
NP direction
приплющився б до
(...) gef (...)
НЕ
(...) g>def (...)
/
Курсор не перенаправляти NP в даному випадку , як це може перенаправити в простір так
f
e
> ab/d
став би ab/def
Правила
- Ширина, висота та глибина куба можуть змінюватися
- Висота і глибина куба завжди будуть однаковими і становитимуть половину ширини, тому ширина завжди буде рівною.
- Ширина буде між (включно) 6 і 60.
- Завжди буде EOF (
¶
), до якого може дійти НП. Наприклад, у кубі ніколи не буде подібного:<¶>
як NP ніколи не зможе дістатися до куба. - Оскільки простір не можна вставити в доріжки куба, остаточний рядок ніколи не повинен містити пробілу в ньому.
- Якщо вказівник розміщується в одному з треків (а не на куті), і він би направляв NP в пробіли, NP залишається постійним і символ додається до остаточного рядка.
- Однак якщо вказівник тримає його на доріжці, NP спрямовується, і символ вказівника не додається
- Оскільки no-ops (
,
) не додаються до остаточного рядка, остаточний рядок не повинен містити,
його. - Ви можете припустити, що введення буде правильним.
- Це кодовий гольф, тому найкоротший код у байтах виграє!
Приклади
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