Avez-vous déjà regardé des formes 3D et pensez que nous avons 2 nombreuses dimensions. Alors faisons de la 3D en 1D! (Regarde ce que j'ai fait là?)
Tâche
Étant donné une représentation 2D d'un cube (disposition ci-dessous), aplatissez-le en une seule chaîne, basée sur des pointeurs.
Le cube
Il s'agit de la disposition du cube rempli de no-ops ( ,
) et de pointeurs aux coins ( <>v^/
). Le pointeur de navigation (NP) démarre le programme à l'endroit indiqué.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
Le NP continue de se déplacer dès le début jusqu'à ce qu'il rencontre un corner. Chaque coin a une direction par défaut qui, à moins d'être remplacée au coin par un pointeur, pointera le NP dans une nouvelle direction. Ils sont représentés sur le schéma ci-dessus. Les pointeurs du programme sont v^<>/
(les /
points vers le bas ou vers le haut, en raison de la disposition, il n'y aura jamais de confusion entre les deux)
Le NP s'arrête de bouger lorsqu'il atteint le ¶
symbole (Oui, je sais que c'est un caractère multi-octets, faites-le). Chaque caractère sur lequel il passe est ajouté à la chaîne de sortie finale à l'exception des pointeurs, du no-op ( ,
) et du ¶
symbole.
Contribution
L'entrée sera une chaîne de plusieurs lignes qui correspond à la disposition du CUBE avec les caractères non blancs remplacés par n'importe quel caractère de la plage 0x21
vers 0x7E
et au moins une instance de l'EOF.
Vous pouvez prendre des informations en tant que:
- Une chaîne multiligne
- Une liste de chaînes où chaque ligne est un nouvel élément de la liste
- Une liste 2D de chaînes où chaque ligne est décomposée en une liste
Production
Le cube, aplati en une seule chaîne de ligne.
Pointeur conditionnel
Le NP a une valeur booléenne qui est utilisée pour quelque chose appelé un pointeur "conditionnel" qui commence à true
.
Le pointeur "conditionnel" ( ?
) est un pointeur qui alternera la valeur NP entretrue
et false
chaque fois qu'il est utilisé. Les pointeurs conditionnels ne prennent effet que lorsqu'ils sont utilisés dans les coins où 3 pistes (coin à 3 points) se rencontrent. Si la valeur est true
lorsque le NP atteint le pointeur conditionnel, le NP se déplace dans la direction par défaut dans l'image CUBE et, après avoir été dirigé, la valeur NP est basculée. Par conséquent, s'il est activé false
, le NP suit la direction non définie par défaut.
Il n'y aura jamais d'instance où le NP va vers un conditionnel et la direction par défaut est la direction d'où il vient. Imaginez que c'est le coin gauche de la face avant et que la valeur NP est actuellement true
:
NP direction
/
,
,
,,,?
,
,
Cela ne se produira jamais car la direction par défaut la ramènera à ce qu'elle était.
Si le pointeur conditionnel est sur un coin à 3 points:
- Il n'est pas ajouté à la chaîne finale
- La valeur NP est basculée entre
true
etfalse
après que le NP a été dirigé. - Si la valeur NP est
true
, le NP est redirigé dans la direction par défaut . Sinon, il est redirigé vers la direction non définie par défaut .
S'il se trouve sur une piste ou un virage à 2 points:
- Il est ajouté à la chaîne finale
- la valeur est basculée
- L'IP n'est pas dirigée
Quelque chose à surveiller
Si un pointeur se trouve sur une piste et qu'il ne pointe pas vers des espaces, le NP est dirigé vers la nouvelle piste, ajoute le caractère suivant à la chaîne finale et fait pivoter le NP de 90 degrés vers la droite.
abcd
>e
g f
/
NP direction
s'aplatirait à
(...) gef (...)
NE PAS
(...) g>def (...)
Un /
pointeur ne redirige pas le NP dans ce cas car il peut rediriger vers un espace afin
f
e
> ab/d
deviendrait ab/def
Règles
- La largeur, la hauteur et la profondeur du cube peuvent changer
- La hauteur et la profondeur du cube seront toujours les mêmes et seront la moitié de la largeur, donc la largeur sera toujours égale.
- La largeur sera comprise entre (inclus) 6 et 60.
- Il y aura toujours un EOF (
¶
) accessible par le NP. Par exemple, il n'y aura jamais quelque chose comme ça dans le cube:<¶>
car le NP ne pourra jamais atteindre le cube. - Comme un espace ne peut pas être inséré dans les pistes du cube, la chaîne finale ne doit jamais contenir d'espace.
- Si un pointeur est placé dans l'une des pistes (pas sur un coin) et qu'il dirigerait le NP dans des espaces, le NP reste constant et le caractère est ajouté à la chaîne finale.
- Cependant, si le pointeur le maintient sur la piste, le NP est dirigé et le caractère du pointeur n'est pas ajouté
- Comme no-ops (
,
) n'est pas ajouté à la chaîne finale, la chaîne finale ne doit pas en contenir,
. - Vous pouvez supposer que l'entrée sera correcte.
- C'est un code-golf donc le code le plus court en octets gagne!
Exemples
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
Réponses:
Python 3 ,
155815531419141713471258 octetsEssayez-le en ligne!
5 octets enregistrés grâce à @sagiksp
20 octets enregistrés grâce à @ Mr.Xcoder et @totallyhuman dans le chat
128 octets enregistrés grâce à diverses astuces de golf
72 octets enregistrés grâce à @JonathanFrech
Encore 89 octets enregistrés grâce à @ Mr.Xcoder
la source
not(p[0] == 0)
, cela pourrait être justep[0]!=0
.space
ensuite\t
(onglet) puisspace\t
etc. C'est exactement la façon dont SE formate les messages