¿Alguna vez miras las formas 3D y crees que tenemos 2 muchas dimensiones? ¡Así que hagamos 3D en 1D! (¿Ves lo que hice ahí?)
Tarea
Dada una representación 2D de un cubo (diseño a continuación), aplánelo en una sola cadena, basada en punteros.
El cubo
Este es el diseño del cubo lleno de no-ops ( ,
) y punteros en las esquinas ( <>v^/
). El puntero de navegación (NP) comienza el programa donde se muestra.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
El NP continúa moviéndose desde el principio hasta que encuentra una esquina. Cada esquina tiene una dirección predeterminada que, a menos que sea anulada en la esquina por un puntero, apuntará el NP en una nueva dirección. Se muestran en el diagrama anterior. Los punteros en el programa son v^<>/
(los /
puntos hacia abajo o hacia arriba, debido al diseño, nunca habrá ninguna confusión entre los dos)
El NP deja de moverse cuando llega al ¶
símbolo (Sí, sé que este es un carácter de varios bytes, trata con él). Cada carácter que pasa se agrega a la cadena de salida final, excepto los punteros, el no-op ( ,
) y el ¶
símbolo.
Entrada
De entrada será una cadena de múltiples líneas que coincide con el trazado de la CUBO con los caracteres de espacio en blanco no sustituidos con cualquier carácter en el rango 0x21
de 0x7E
y al menos una instancia de la EOF.
Puede tomar la entrada como:
- Una cuerda multilínea
- Una lista de cadenas donde cada línea es un elemento nuevo en la lista
- Una lista 2D de cadenas donde cada línea se divide en una lista
Salida
El cubo, aplanado en una sola línea.
Puntero Condicional
El NP tiene un valor booleano que se usa para algo llamado puntero "condicional" que comienza en true
.
El puntero "condicional" ( ?
) es un puntero que se alternará el valor NP entre true
y false
cada vez que se utiliza. Los punteros condicionales solo tienen efecto cuando se usan en las esquinas donde se encuentran 3 pistas (esquina de 3 puntos). Si el valor es true
cuando el NP alcanza el puntero condicional, el NP se mueve a la dirección predeterminada en la imagen CUBE y, después de ser dirigido, el valor NP se alterna. Por lo tanto, si está activado false
, el NP sigue la dirección no predeterminada.
Nunca habrá una instancia en la que el NP vaya hacia un condicional y la dirección predeterminada es la dirección de la que acaba de llegar. Imagine que esta es la esquina izquierda de la cara frontal y el valor NP es actualmente true
:
NP direction
/
,
,
,,,?
,
,
Esto nunca sucederá, ya que la dirección predeterminada lo reflejará de nuevo a como era.
Si el puntero condicional está en una esquina de 3 puntos:
- No se agrega a la cadena final
- El valor de NP se alterna entre
true
yfalse
después de que se haya dirigido el NP. - Si el valor de NP es
true
, el NP se redirige a la dirección predeterminada . De lo contrario, se redirige a la dirección no predeterminada .
Si está en una pista o en una esquina de 2 puntos:
- Se agrega a la cadena final
- el valor se alterna
- La IP no está dirigida
Algo a tener en cuenta
Si un puntero está en una pista y no apunta a espacios, el NP se dirige a la nueva pista, agrega el siguiente carácter a la cadena final y gira el NP 90 grados a la derecha.
abcd
>e
g f
/
NP direction
aplanaría a
(...) gef (...)
NO
(...) g>def (...)
Un /
puntero no redirige el NP en este caso, ya que puede redirigir a un espacio
f
e
> ab/d
se convertiría ab/def
Reglas
- El ancho, la altura y la profundidad del cubo pueden cambiar.
- La altura y la profundidad del cubo siempre serán las mismas y serán la mitad del ancho, por lo que el ancho siempre será uniforme.
- El ancho será entre (inclusive) 6 y 60.
- Siempre habrá un EOF (
¶
) que puede ser alcanzado por el NP. Por ejemplo, nunca habrá algo como esto en el cubo:<¶>
ya que el NP nunca podrá alcanzar el cubo. - Como no se puede insertar un espacio en las pistas del cubo, la cadena final nunca debería tener un espacio.
- Si se coloca un puntero en una de las pistas (no en una esquina) y dirigiría el NP a espacios, el NP se mantiene constante y el carácter se agrega a la cadena final.
- Sin embargo, si el puntero lo mantiene en la pista, se dirige el NP y no se agrega el carácter del puntero
- Como no-ops (
,
) no se agregan a la cadena final, la cadena final no debe contener ninguna,
. - Puede suponer que la entrada será correcta.
- Este es un código de golf, ¡el código más corto en bytes gana!
Ejemplos
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
Respuestas:
Pitón 3 ,
155815531419141713471258 bytesPruébalo en línea!
Guardado 5 bytes gracias a @sagiksp
Ahorró 20 bytes gracias a @ Mr.Xcoder y @totallyhuman en el chat
Ahorro de 128 bytes gracias a varios trucos de golf.
Guardado 72 bytes gracias a @JonathanFrech
Ahorró otros 89 bytes gracias a @ Mr.Xcoder
fuente
not(p[0] == 0)
, podría ser justop[0]!=0
.space
luego\t
(pestaña) y luegospace\t
etc. Es la forma en que SE formatea las publicaciones