คุณเคยดูรูปร่าง 3 มิติและคิดว่าเรามี 2 มิติ ลองสร้าง 3D เป็น 1D กันเถอะ! (ดูสิ่งที่ฉันทำที่นั่น?)
งาน
ให้การเป็นตัวแทน 2D ของคิวบ์ (เลย์เอาต์ด้านล่าง) แบนมันให้เป็นสตริงเดียวโดยอิงตามพอยน์เตอร์
The CUBE
นี่คือเลย์เอาต์ของคิวบ์ที่เต็มไปด้วย no-ops ( ,
) และพอยน์เตอร์ที่มุม ( <>v^/
) Navigation Pointer (NP) เริ่มต้นโปรแกรมตามที่แสดง
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
NP เคลื่อนที่ต่อไปตั้งแต่เริ่มต้นจนกระทั่งเข้ามุม แต่ละมุมมีทิศทางเริ่มต้นที่ยกเว้นตัวชี้ตรงมุมโดยตัวชี้จะชี้ไปที่ NP ในทิศทางใหม่ พวกเขาจะแสดงในแผนภาพด้านบน พอยน์เตอร์ในโปรแกรมเป็นv^<>/
( /
จุดนั้นไม่ว่าจะขึ้นหรือลงเนื่องจากเลย์เอาต์จะไม่มีความสับสนระหว่างสอง)
NP หยุดเคลื่อนที่เมื่อถึง¶
สัญลักษณ์ (ใช่ฉันรู้ว่านี่เป็นตัวละครแบบหลายไบต์จัดการกับมัน) อักขระแต่ละตัวที่ผ่านไปจะถูกเพิ่มลงในเอาต์พุตสุดท้ายของสตริงยกเว้นพอยน์เตอร์, no-op ( ,
) และ¶
สัญลักษณ์
อินพุต
การป้อนข้อมูลจะเป็นสตริงหลายสายที่ตรงกับรูปแบบของCUBEกับตัวละครที่ไม่ใช่ช่องว่างแทนที่ด้วยตัวอักษรใด ๆ ในช่วง0x21
การ0x7E
และอย่างน้อยหนึ่งตัวอย่างของ EOF
คุณอาจจะใส่เป็น:
- สตริงหลายบรรทัด
- รายการสตริงที่แต่ละบรรทัดเป็นองค์ประกอบใหม่ในรายการ
- รายการ 2D ของสตริงที่แต่ละบรรทัดถูกแบ่งย่อยลงในรายการ
เอาท์พุต
คิวบ์แบนลงเป็นสตริงบรรทัดเดียว
ตัวชี้เงื่อนไข
มีปัญหามีค่าบูลีนที่ใช้สำหรับสิ่งที่เรียกว่า "เงื่อนไข" true
ชี้ว่าเริ่มต้นที่
ตัวชี้ "เงื่อนไข" ( ?
) เป็นตัวชี้ที่จะสลับค่า NP ระหว่างtrue
และfalse
ทุกครั้งที่มีการใช้ พอยน์เตอร์แบบมีเงื่อนไขจะมีผลเฉพาะเมื่อใช้กับมุมที่ 3 แทร็ก (มุม 3 จุด) พบ หากค่าคือtrue
เมื่อ NP ถึงตัวชี้แบบมีเงื่อนไข NP จะย้ายไปยังทิศทางเริ่มต้นในอิมเมจ CUBE และหลังจากถูกชี้นำแล้วค่า NP จะถูกสลับ ดังนั้นหากเปิดfalse
ใช้งาน NP จะทำตามทิศทางที่ไม่ใช่ค่าเริ่มต้น
จะไม่มีตัวอย่างที่ NP ไปสู่เงื่อนไขและทิศทางเริ่มต้นคือทิศทางที่เพิ่งมาจาก ลองจินตนาการว่านี่เป็นมุมซ้ายของด้านหน้าและค่า NP ตอนนี้true
:
NP direction
/
,
,
,,,?
,
,
สิ่งนี้จะไม่เกิดขึ้นเนื่องจากทิศทางเริ่มต้นจะสะท้อนกลับไปที่เดิม
หากตัวชี้แบบมีเงื่อนไขอยู่ที่มุม 3 จุด:
- มันไม่ได้ถูกเพิ่มไปยังสตริงสุดท้าย
- ค่า NP จะถูกสลับระหว่าง
true
และfalse
หลังจาก NP ถูกนำไปใช้ - หากค่า
true
NP คือ NP จะถูกเปลี่ยนเส้นทางไปยังทิศทางเริ่มต้น มิฉะนั้นจะถูกเปลี่ยนเส้นทางไปที่ไม่ใช่ค่าเริ่มต้นทิศทาง
หากอยู่บนลู่วิ่งหรือมุม 2 จุด:
- มันจะถูกเพิ่มไปยังสตริงสุดท้าย
- ค่าจะถูกสลับ
- 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