Вы когда-нибудь смотрели на 3D-фигуры и думаете, что у нас есть 2 много измерений. Итак, давайте сделаем 3D в 1D! (Видите, что я там делал?)
задача
Учитывая двумерное представление куба (схема ниже), сведите его в одну строку на основе указателей.
Куб
Это макет куба, заполненного no-ops ( ,
) и указателями на углы ( <>v^/
). Навигационный указатель (NP) начинает программу, где показано.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
НП продолжает двигаться с самого начала, пока не дойдет до угла. Каждый угол имеет направление по умолчанию, которое, если оно не будет переопределено указателем в углу, будет указывать NP в новом направлении. Они показаны на приведенной выше диаграмме. Указатели в программе v^<>/
( /
точки вниз или вверх, из-за расположения между ними никогда не будет путаницы)
НП перестает двигаться, когда достигает ¶
символа (да, я знаю, что это многобайтовый символ, разберитесь с ним). Каждый символ, который он перебирает, добавляется в окончательную строку вывода, за исключением указателей, 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 остается постоянным, и символ добавляется в последнюю строку.
- Однако, если указатель держит его на дорожке, 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