Apakah Anda pernah melihat bentuk 3D dan berpikir kami memiliki 2 banyak dimensi. Jadi mari kita buat 3D menjadi 1D! (Lihat apa yang saya lakukan di sana?)
Tugas
Diberikan representasi 2D dari sebuah kubus (tata letak di bawah), ratakan menjadi string tunggal, berdasarkan pointer.
Kubus
Ini adalah tata letak kubus yang diisi dengan no-ops ( ,
) dan pointer di sudut-sudut ( <>v^/
). Navigasi Pointer (NP) memulai program di mana ditampilkan.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
NP terus bergerak dari awal sampai bertemu sudut. Setiap sudut memiliki arah default yang, kecuali diganti di sudut oleh pointer, akan mengarahkan NP ke arah yang baru. Mereka ditunjukkan pada diagram di atas. Pointer dalam program ini adalah v^<>/
( /
poinnya turun atau naik, karena tata letak tidak akan pernah ada kebingungan di antara keduanya)
NP berhenti bergerak ketika mencapai ¶
simbol (Ya saya tahu ini adalah karakter multi-byte, atasi). Setiap karakter yang ditambahkan ditambahkan ke string hasil akhir kecuali untuk pointer, no-op ( ,
) dan ¶
simbol.
Memasukkan
Input akan berupa string multi-baris yang cocok dengan tata letak CUBE dengan karakter non-spasi putih diganti dengan karakter apa pun dalam rentang 0x21
ke 0x7E
dan setidaknya satu instance dari EOF.
Anda dapat mengambil input sebagai:
- String multiline
- Daftar string di mana setiap baris adalah elemen baru dalam daftar
- Daftar 2D string di mana setiap baris dipecah menjadi daftar
Keluaran
Kubus, diratakan menjadi string baris tunggal.
Pointer Bersyarat
NP memiliki nilai boolean yang digunakan untuk sesuatu yang disebut pointer "kondisional" yang dimulai pada true
.
Pointer "kondisional" ( ?
) adalah sebuah pointer yang akan mengganti nilai NP antara true
dan false
setiap kali digunakan. Pointer bersyarat hanya berlaku ketika digunakan di sudut-sudut tempat 3 trek (sudut 3 titik) bertemu. Jika nilainya true
ketika NP mencapai penunjuk kondisional, NP bergerak ke arah default pada gambar CUBE dan, setelah diarahkan, nilai NP diubah. Oleh karena itu, jika aktif false
, NP mengikuti arah non-default.
Tidak akan pernah ada contoh di mana NP menuju conditional dan arah default adalah arah dari mana asalnya. Bayangkan bahwa ini adalah sudut kiri muka depan dan nilai NP saat ini true
:
NP direction
/
,
,
,,,?
,
,
Ini tidak akan pernah terjadi karena arah default akan mencerminkannya kembali ke keadaan semula.
Jika penunjuk kondisional berada di sudut 3 titik:
- Itu tidak ditambahkan ke string terakhir
- Nilai NP diubah antara
true
danfalse
setelah NP diarahkan. - Jika nilai NP adalah
true
, NP dialihkan ke arah default . Kalau tidak, itu diarahkan ke arah non-default .
Jika berada di trek atau sudut 2 poin:
- Itu ditambahkan ke string terakhir
- nilai yang toggle
- IP tidak diarahkan
Sesuatu yang harus diwaspadai
Jika sebuah pointer berada di trek dan tidak mengarah ke spasi, NP diarahkan ke trek baru, menambahkan karakter berikutnya ke string terakhir dan memutar NP sebesar 90 derajat ke kanan.
abcd
>e
g f
/
NP direction
akan rata
(...) gef (...)
TIDAK
(...) g>def (...)
Sebuah /
pointer tidak mengarahkan NP dalam hal ini karena dapat mengarahkan ke ruang angkasa sehingga
f
e
> ab/d
akan menjadi ab/def
Aturan
- Lebar, tinggi dan kedalaman kubus dapat berubah
- Tinggi dan kedalaman kubus akan selalu sama dan akan menjadi setengah lebar, sehingga lebarnya akan selalu genap.
- Lebar akan antara (inklusif) 6 dan 60.
- Akan selalu ada EOF (
¶
) yang bisa dijangkau oleh NP. Misalnya tidak akan pernah ada sesuatu seperti ini di kubus:<¶>
karena NP tidak akan pernah bisa mencapai kubus. - Karena spasi tidak dapat dimasukkan ke trek kubus, string terakhir seharusnya tidak memiliki ruang di dalamnya.
- Jika pointer ditempatkan di salah satu trek (bukan di sudut) dan itu akan mengarahkan NP ke spasi, NP tetap konstan dan karakter ditambahkan ke string terakhir.
- Namun, jika pointer menyimpannya di trek, NP diarahkan dan karakter pointer tidak ditambahkan
- Karena no-ops (
,
) tidak ditambahkan ke string terakhir, string terakhir tidak boleh berisi apa pun,
di dalamnya. - Anda dapat berasumsi bahwa input akan benar.
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Contohnya
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
Jawaban:
Python 3 ,
155815531419141713471258 byteCobalah online!
Disimpan 5 byte berkat @sagiksp
Disimpan 20 byte berkat @ Mr.Xcoder dan @totallyhuman dalam obrolan
Disimpan 128 byte berkat berbagai trik golf
Disimpan 72 byte berkat @JonathanFrech
Menyimpan 89 byte lagi berkat @ Mr.Xcoder
sumber
not(p[0] == 0)
, itu bisa saja adilp[0]!=0
.space
kemudian\t
(tab) laluspace\t
dll. Hanya dengan cara SE memformat posting