Guie o alfabeto
Dada uma matriz de direções, onde as direções são definidas da seguinte maneira:
NW N NE
W . E
SW S SE
Ou como índices (você pode usar esses índices para obter instruções em vez das strings acima):
0 1 2
3 . 4
5 6 7
Você pode escolher qualquer formato, pois o suporte a ambos não é exigido pelo desafio. Gere a sequência de caracteres do alfabeto correspondente que representa o caminho desenhado, começando com A. O número de direções nunca excederá 25, o que significa que nunca poderá passar Z
, portanto, você não precisa lidar com esse cenário. Nenhum outro formato de entrada será aceito, a menos que você possa explicar por que esses formatos não funcionam devido a uma limitação de idioma. Isso é mais fácil de explicar usando um exemplo detalhado.
Então, vamos ver um exemplo rápido:
[E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1]
Sempre comece com A.
A
Vá para o leste até B.
A-B
Vá para o sudeste até C.
A-B
\
C
Vá para o norte até D.
A-B D
\|
C
Volte para o sul até E, substituindo C.
A-B D
\|
E
Continue para o sul por 2 ciclos para F e G.
A-B D
\|
E
|
F
|
G
Vá para o noroeste para H.
A-B D
\|
E
|
H F
\|
G
Vá para o oeste para I.
A-B D
\|
E
|
I-H F
\|
G
Fim para o norte no ponto J.
A-B D
\|
J E
| |
I-H F
\|
G
O valor final que você retornaria é lendo o gráfico final da esquerda para a direita, de cima para baixo:
ABD
JE
IHF
G
Resultando em:
ABDJEIHFG
Isso é código-golfe , vitórias mais baixas na contagem de bytes.
A
tal queA
não será o primeiro resultado impresso?Respostas:
MATL ,
64585750464037363530 bytesExperimente no MATL Online
Explicação
fonte
JavaScript (ES6),
1081079487 bytesEconomizou 13 bytes, graças a Titus!
Economizou mais 7 bytes, graças ao edc65!
Como funciona
A fórmula
(d += d > 3) * 9 - d % 3 * 8 - 28
traduz as instruções0..7
nos seguintes deslocamentos:Usamos essas compensações para mover o ponteiro
p
para a matriz unidimensionalr
e escrever as letras nas posições resultantes.Nós iteramos em
[i = 9, ...a]
vez de apenasa
inserir a letra inicial 'a'. Como inicializamosi
ao9
mesmo tempo, introduzimos um deslocamento especial de 54 (o resultado da fórmula acima parad = 9
). Após a primeira iteração,p
é igual646 + 54 = 700
, o que deixa espaço suficiente para suportar até 25 desloca-se para Noroeste:25 * -28 = -700
. É por isso quep
é inicializado646
.Então, apenas precisamos nos juntar à matriz para obter nossa string final. Valores indefinidos entre letras são simplesmente ignorados por
join()
.fonte
d+=d>3,p+=d*9-d%3*8-28
salva 11 bytes.i
na definição de matriz, poupando mais 2 bytes)(++i).toString(36)
(ainda não tentar compreender a sua matemática, mas parece ao trabalho)Oitava,
145138131123105103908785 bytesExperimente Online
Graças a Suever 2 bytes salvos!
Resposta anterior 103 bytes:
Experimente Online!
Primeira tentativa: 145 bytes
Algumas explicações
fonte
image
parte do pacote do seu bytecount tem que ser carregar o pacote de imagempkg load image
pkg load *
no início. ideone.com pode ser uma escolha melhorpkg install -auto image-1.0.0.tar.gz
para que possa carregar automaticamente Por favor, consulte o manualMATLAB,
8785 byteseconomizou 2 bytes graças a Luis Mendo
fonte
'%&''?AYZ['-64
truque legal ... na verdade 66 bytes se você reescrever na oitavaPHP, 93 bytes
Operando em uma única matriz como a resposta de Kodos Johnson .
Mas isso tem tantas outras idéias que eu postei por conta própria.
recebe números dos argumentos da linha de comando. Corra com
-nr
.movendo o cursor
cálculo inicial:
golfe:
mesclar as atribuições não salva nada, mas melhora a legibilidade:
demolir
fonte
Python 2,
180 178176 bytesfonte
PHP, 121 bytes
Isso é executado na linha de comando com o
-r
sinalizador e aceita um array de caracteres (string) de índices como argumento.fonte
""<$n=$argv[1][$i]
vez de($n=$argv[1][$i])!=null
R, 160 bytes
fonte