Bạn có bao giờ nhìn vào hình dạng 3D và nghĩ rằng chúng ta có 2 chiều. Vì vậy, hãy biến 3D thành 1D! (Xem những gì tôi đã làm ở đó?)
Bài tập
Đưa ra một biểu diễn 2D của một khối (bố trí bên dưới), làm phẳng nó thành một chuỗi, dựa trên các con trỏ.
CUBE
Đây là cách bố trí của khối lập phương chứa đầy no-ops ( ,
) và con trỏ ở các góc ( <>v^/
). Con trỏ Điều hướng (NP) bắt đầu chương trình được hiển thị.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
NP tiếp tục di chuyển ngay từ đầu cho đến khi gặp một góc. Mỗi góc có một hướng mặc định, trừ khi được ghi đè ở góc bởi một con trỏ, sẽ trỏ NP theo hướng mới. Chúng được hiển thị trên sơ đồ trên. Các con trỏ trong chương trình là v^<>/
(các /
điểm đó xuống hoặc lên, do cách bố trí sẽ không bao giờ có bất kỳ sự nhầm lẫn nào giữa hai)
NP dừng di chuyển khi đến ¶
biểu tượng (Có tôi biết đây là ký tự nhiều byte, xử lý nó). Mỗi ký tự mà nó đi qua được thêm vào chuỗi đầu ra cuối cùng ngoại trừ các con trỏ, no-op ( ,
) và ¶
ký hiệu.
Đầu vào
Đầu vào sẽ là một chuỗi nhiều dòng khớp với bố cục của CUBE với các ký tự không phải khoảng trắng được thay thế bằng bất kỳ ký tự nào trong phạm vi 0x21
đến 0x7E
và ít nhất một phiên bản của EOF.
Bạn có thể lấy đầu vào là:
- Một chuỗi nhiều dòng
- Danh sách các chuỗi trong đó mỗi dòng là một thành phần mới trong danh sách
- Danh sách các chuỗi 2D trong đó mỗi dòng được chia thành một danh sách
Đầu ra
Các khối lập phương, san phẳng thành một chuỗi dòng duy nhất.
Con trỏ có điều kiện
NP có giá trị boolean được sử dụng cho một thứ gọi là con trỏ "có điều kiện" bắt đầu từ true
.
Con trỏ "có điều kiện" ( ?
) là một con trỏ sẽ thay thế giá trị NP giữa true
và false
mỗi lần nó được sử dụng. Con trỏ có điều kiện chỉ có hiệu ứng khi được sử dụng trên các góc nơi 3 rãnh (góc 3 điểm) gặp nhau. Nếu giá trị là true
khi NP đến con trỏ có điều kiện, NP sẽ di chuyển đến hướng mặc định trong hình ảnh CUBE và sau khi được hướng dẫn, giá trị NP được bật. Do đó, nếu nó bật false
, NP theo hướng không mặc định.
Sẽ không bao giờ có trường hợp NP đi theo hướng có điều kiện và hướng mặc định là hướng mà nó vừa xuất phát. Hãy tưởng tượng rằng đây là góc bên trái của mặt trước và giá trị NP hiện tại là true
:
NP direction
/
,
,
,,,?
,
,
Điều này sẽ không bao giờ xảy ra vì hướng mặc định sẽ phản chiếu nó trở lại như cũ.
Nếu con trỏ có điều kiện ở góc 3 điểm:
- Nó không được thêm vào chuỗi cuối cùng
- Giá trị NP được chuyển đổi giữa
true
vàfalse
sau khi NP được định hướng. - Nếu giá trị NP là
true
, NP được chuyển hướng đến hướng mặc định . Mặt khác, nó được chuyển hướng đến hướng không mặc định .
Nếu nó nằm trên đường đua hoặc góc 2 điểm:
- Nó được thêm vào chuỗi cuối cùng
- giá trị được bật
- IP không được định hướng
Một cái gì đó để coi chừng
Nếu một con trỏ nằm trên rãnh và nó không trỏ vào khoảng trắng, NP sẽ được dẫn vào rãnh mới, thêm ký tự tiếp theo vào chuỗi cuối cùng và xoay NP 90 độ sang phải.
abcd
>e
g f
/
NP direction
sẽ san phẳng để
(...) gef (...)
KHÔNG PHẢI
(...) g>def (...)
Một /
con trỏ không chuyển hướng NP trong trường hợp này vì nó có thể chuyển hướng vào một không gian vì vậy
f
e
> ab/d
sẽ trở thành ab/def
Quy tắc
- Chiều rộng, chiều cao và chiều sâu của khối có thể thay đổi
- Chiều cao và chiều sâu của khối sẽ luôn giống nhau và sẽ bằng một nửa chiều rộng, vì vậy chiều rộng sẽ luôn bằng nhau.
- Chiều rộng sẽ nằm trong khoảng (bao gồm) 6 đến 60.
- Sẽ luôn có một EOF (
¶
) mà NP có thể đạt được. Ví dụ, sẽ không bao giờ có một cái gì đó như thế này trong khối:<¶>
vì NP sẽ không bao giờ có thể tiếp cận khối. - Vì một không gian không thể được chèn vào các rãnh của khối, chuỗi cuối cùng không bao giờ có khoảng trắng trong đó.
- Nếu một con trỏ được đặt vào một trong các rãnh (không nằm trên một góc) và nó sẽ hướng NP vào khoảng trắng, NP không đổi và ký tự được thêm vào chuỗi cuối cùng.
- Tuy nhiên, nếu con trỏ giữ nó trên đường đua, NP được điều hướng và ký tự con trỏ không được thêm vào
- Vì no-ops (
,
) không được thêm vào chuỗi cuối cùng, chuỗi cuối cùng không nên chứa bất kỳ chuỗi nào,
trong chuỗi đó. - Bạn có thể giả định rằng đầu vào sẽ chính xác.
- Đây là một mã golf để mã ngắn nhất trong byte thắng!
Ví dụ
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