Sehen Sie sich jemals 3D-Formen an und denken, dass wir zwei verschiedene Dimensionen haben? Lassen Sie uns 3D in 1D verwandeln! (Siehst du was ich dort gemacht habe?)
Aufgabe
Wenn Sie eine 2D-Darstellung eines Würfels (Layout unten) haben, reduzieren Sie diese auf der Grundlage von Zeigern in eine einzelne Zeichenfolge.
Der Würfel
Dies ist das Layout des Würfels, das mit No-Ops ( ,
) und Zeigern an den Ecken ( <>v^/
) gefüllt ist . Der Navigationszeiger (NP) startet das Programm an der angezeigten Stelle.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
Der NP bewegt sich von Anfang an weiter, bis er auf eine Ecke trifft. Jede Ecke hat eine Standardrichtung, die den NP in eine neue Richtung weist, sofern sie nicht an der Ecke von einem Zeiger überschrieben wird. Sie sind im obigen Diagramm dargestellt. Die Zeiger im Programm sind v^<>/
(die /
Punkte entweder nach unten oder nach oben, aufgrund des Layouts wird es nie eine Verwechslung zwischen den beiden geben)
Der NP bleibt stehen, wenn er das ¶
Symbol erreicht (Ja, ich weiß, dass es sich um ein Mehrbyte-Zeichen handelt, gehen Sie damit um). Jedes Zeichen, über das es geht, wird bis auf die Zeiger, das no-op ( ,
) und das ¶
Symbol zur endgültigen Ausgabezeichenfolge hinzugefügt .
Eingang
Bei der Eingabe handelt es sich um eine mehrzeilige Zeichenfolge, die dem Layout des CUBE entspricht, wobei die Nicht-Leerzeichen-Zeichen durch beliebige Zeichen im Bereich 0x21
von 0x7E
und mindestens einer Instanz des EOF ersetzt werden.
Sie können Eingaben vornehmen als:
- Eine mehrzeilige Zeichenfolge
- Eine Liste von Zeichenfolgen, bei denen jede Zeile ein neues Element in der Liste ist
- Eine 2D-Liste von Zeichenfolgen, in der jede Zeile in eine Liste unterteilt ist
Ausgabe
Der Würfel, abgeflacht zu einer einzigen Zeile.
Bedingter Zeiger
Der NP hat einen Booleschen Wert, der für einen so genannten "bedingten" Zeiger verwendet wird, der bei beginnt true
.
Der "bedingte" Zeiger ( ?
) ist ein Zeiger, der den NP-Wert zwischen true
und bei false
jeder Verwendung abwechselt . Bedingte Zeiger werden nur dann wirksam, wenn sie an den Ecken verwendet werden, an denen 3 Spuren (3-Punkt-Ecke) aufeinander treffen. Wenn der Wert ist, true
wenn der NP den bedingten Zeiger erreicht, bewegt sich der NP im CUBE-Bild in die Standardrichtung und der NP-Wert wird umgeschaltet , nachdem er angewiesen wurde. Wenn diese false
Option aktiviert ist , folgt der NP der nicht standardmäßigen Richtung.
Es wird niemals einen Fall geben, in dem der NP in Richtung einer Bedingung geht und die Standardrichtung die Richtung ist, aus der er gerade gekommen ist. Stellen Sie sich vor, dass dies die linke Ecke der Vorderseite ist und der NP-Wert aktuell ist true
:
NP direction
/
,
,
,,,?
,
,
Dies wird niemals passieren, da die Standardrichtung es wieder in den ursprünglichen Zustand zurückführt.
Wenn sich der bedingte Zeiger auf einer 3-Punkt-Ecke befindet:
- Es wird nicht zur endgültigen Zeichenfolge hinzugefügt
- Der NP-Wert wird zwischen
true
undfalse
nach dem Anweisen des NP umgeschaltet . - Wenn der NP-Wert gleich ist
true
, wird der NP in die Standardrichtung umgeleitet . Andernfalls wird es in die nicht standardmäßige Richtung umgeleitet .
Wenn es sich auf einer Strecke oder einer 2-Punkt-Kurve befindet:
- Es wird zur letzten Zeichenfolge hinzugefügt
- Der Wert wird umgeschaltet
- Die IP wird nicht gerichtet
Etwas, auf das man achten muss
Wenn sich ein Zeiger auf einer Spur befindet und nicht auf Leerzeichen zeigt, wird der NP in die neue Spur geleitet, fügt der letzten Zeichenfolge das nächste Zeichen hinzu und dreht den NP um 90 Grad nach rechts.
abcd
>e
g f
/
NP direction
würde abflachen
(...) gef (...)
NICHT
(...) g>def (...)
Ein /
Zeiger leitet den NP in diesem Fall nicht um, da er möglicherweise in ein Leerzeichen umleitet
f
e
> ab/d
würde werden ab/def
Regeln
- Die Breite, Höhe und Tiefe des Würfels können sich ändern
- Die Höhe und Tiefe des Würfels ist immer gleich und halb so breit, sodass die Breite immer gleichmäßig ist.
- Die Breite liegt zwischen (einschließlich) 6 und 60.
- Es wird immer eine EOF (
¶
) geben, die vom NP erreicht werden kann.<¶>
Zum Beispiel wird es niemals so etwas im Würfel geben: Der NP würde niemals in der Lage sein, den Würfel zu erreichen. - Da ein Leerzeichen nicht in die Spuren des Cubes eingefügt werden kann, sollte die letzte Zeichenfolge niemals ein Leerzeichen enthalten.
- Wenn sich ein Zeiger in einer der Spuren befindet (nicht an einer Ecke) und den NP in Leerzeichen lenken würde, bleibt der NP konstant und das Zeichen wird zur endgültigen Zeichenfolge hinzugefügt.
- Wenn der Zeiger ihn jedoch auf der Spur hält, wird der NP gerichtet und das Zeigerzeichen wird nicht hinzugefügt
- Da
,
der endgültigen Zeichenfolge keine no-ops ( ) hinzugefügt werden, sollte die endgültige Zeichenfolge keine enthalten,
. - Sie können davon ausgehen, dass die Eingabe korrekt ist.
- Dies ist ein Code-Golf, so dass der kürzeste Code in Bytes gewinnt!
Beispiele
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
Antworten:
Python 3 ,
155815531419141713471258 BytesProbieren Sie es online!
5 Bytes dank @sagiksp gespeichert
Dank @ Mr.Xcoder und @totallyhuman im Chat wurden 20 Byte gespeichert
128 Bytes gespart dank verschiedener Golftricks
Dank @JonathanFrech 72 Byte gespeichert
Weitere 89 Bytes dank @ Mr.Xcoder gespeichert
quelle
not(p[0] == 0)
, könnte es einfach seinp[0]!=0
.space
dann tatsächlich\t
(Tab) dannspace\t
usw. Es ist genau so, wie SE Beiträge formatiert