Você já viu formas 3D e acha que temos duas dimensões? Então, vamos transformar 3D em 1D! (Veja o que eu fiz lá?)
Tarefa
Dada uma representação 2D de um cubo (layout abaixo), alise-o em uma única sequência, com base em ponteiros.
O cubo
Esse é o layout do cubo preenchido com no-ops ( ,
) e ponteiros nos cantos ( <>v^/
). O ponteiro de navegação (NP) inicia o programa onde mostrado.
| NP begins here, moving right.
V
>,,,,,,,,,,,,,,,,,,v
, ,,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
/,,,,,,,,,,,,,,,,,,/ /
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, , ,
, ,,
^,,,,,,,,,,,,,,,,,,<
O NP continua se movendo desde o início até encontrar um canto. Cada canto tem uma direção padrão que, a menos que seja substituída no canto por um ponteiro, apontará o NP para uma nova direção. Eles são mostrados no diagrama acima. Os ponteiros do programa são v^<>/
(os /
pontos em baixo ou em cima, devido ao layout, nunca haverá confusão entre os dois)
O NP para de se mover quando atinge o ¶
símbolo (Sim, eu sei que esse é um caractere de vários bytes, lide com ele). Cada caractere sobreposto é adicionado à sequência de saída final, exceto os ponteiros, o no-op ( ,
) e o ¶
símbolo.
Entrada
A entrada será uma sequência de várias linhas que corresponda ao layout do CUBO com os caracteres que não sejam espaços em branco substituídos por qualquer caractere no intervalo 0x21
para 0x7E
e pelo menos uma instância do EOF.
Você pode receber informações como:
- Uma sequência multilinha
- Uma lista de cadeias em que cada linha é um novo elemento na lista
- Uma lista 2D de cadeias em que cada linha é dividida em uma lista
Resultado
O cubo foi achatado em uma única linha.
Ponteiro condicional
O NP possui um valor booleano usado para algo chamado ponteiro "condicional" que começa em true
.
O ponteiro "condicional" ( ?
) é um ponteiro que alternará o valor NP entre true
e false
toda vez que for usado. Ponteiros condicionais só têm efeito quando usados nos cantos onde 3 faixas (canto de 3 pontos) se encontram. Se o valor for true
quando o NP atingir o ponteiro condicional, o NP se moverá para a direção padrão na imagem CUBE e, após ser direcionado, o valor do NP será alternado. Portanto, se estiver ativado false
, o NP segue a direção não padrão.
Nunca haverá um caso em que o NP vá em direção a uma condição e a direção padrão é a direção de onde veio. Imagine que este é o canto esquerdo da face frontal e o valor NP seja atualmente true
:
NP direction
/
,
,
,,,?
,
,
Isso nunca acontecerá, pois a direção padrão o espelhará de volta a como era.
Se o ponteiro condicional estiver em um canto de 3 pontos:
- Não é adicionado à sequência final
- O valor do NP é alternado entre
true
efalse
após o NP ter sido direcionado. - Se o valor NP for
true
, o NP será redirecionado para a direção padrão . Caso contrário, ele será redirecionado para a direção não padrão .
Se estiver em uma pista ou em uma esquina de 2 pontos:
- É adicionado à sequência final
- o valor é alternado
- O IP não é direcionado
Algo a observar
Se um ponteiro estiver em uma trilha e não apontar para espaços, o NP é direcionado para a nova trilha, adiciona o próximo caractere à sequência final e gira o NP 90 graus para a direita.
abcd
>e
g f
/
NP direction
achataria para
(...) gef (...)
NÃO
(...) g>def (...)
Um /
ponteiro não redireciona o NP nesta instância, pois pode redirecionar para um espaço para que
f
e
> ab/d
se tornaria ab/def
Regras
- A largura, altura e profundidade do cubo podem mudar
- A altura e a profundidade do cubo sempre serão as mesmas e terão metade da largura, portanto a largura será sempre uniforme.
- A largura estará entre (inclusive) 6 e 60.
- Sempre haverá um EOF (
¶
) que pode ser alcançado pelo NP. Por exemplo, nunca haverá algo assim no cubo:<¶>
como o NP nunca seria capaz de alcançá-lo. - Como um espaço não pode ser inserido nas faixas do cubo, a sequência final nunca deve ter um espaço nele.
- Se um ponteiro for colocado em uma das faixas (não em um canto) e direcionar o NP para espaços, o NP permanecerá constante e o caractere será adicionado à sequência final.
- No entanto, se o ponteiro o mantiver na faixa, o NP será direcionado e o caractere do ponteiro não será adicionado.
- Como no-ops (
,
) não é adicionado à sequência final, a sequência final não deve conter nenhum,
. - Você pode assumir que a entrada estará correta.
- Este é um código de golfe, e o código mais curto em bytes vence!
Exemplos
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
Respostas:
Python 3 ,
155815531419141713471258 bytesExperimente online!
Guardado 5 bytes graças a @sagiksp
Economizou 20 bytes graças a @ Mr.Xcoder e @totallyhuman no chat
Economizou 128 bytes graças a vários truques de golfe
Guardado 72 bytes graças a @JonathanFrech
Guardou outros 89 bytes graças a @ Mr.Xcoder
fonte
not(p[0] == 0)
, poderia ser justop[0]!=0
.space
em seguida,\t
(guia), em seguida,space\t
etc. Seus do jeito SE formatos mensagens