Geléia , 37 34 bytes
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Experimente online!
Recebe entrada em minúscula.
-2 graças a Jonathan Allan .
-1, pois isso é válido como uma função :)
Graças a Jonathan Allan (e Dennis), agora você pode remover o €
. Infelizmente, isso não seria competitivo aqui.
Explicação detalhada do algoritmo :
Geralmente começamos a explicar a partir do link inferior (principal), descendo, mas aqui acho que é mais apropriado explicar a partir do topo.
Primeiro, simplesmente carregamos a lista [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Parece números aleatórios né? Bem, na verdade, essa é uma lista de números compactados com base 5, portanto, descompactamos com base 5. Agora parece [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Ainda são coisas de aparência aleatória, mas essa é realmente uma NESW
lista mapeada das dezesseis coordenadas, por isso não estamos longe de concluir a lista (Jelly é indexada em 1). Ao fazer o mapeamento final, obtemos [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
, que é a lista completa que queremos (as strings Jelly estão no formulário [char1, char2, char3, ...]
).
Como agora criamos a lista de coordenadas, trabalhamos com ela. O link principal entra em jogo. Primeiro, carregamos a lista que construímos e, em seguida, pegamos o índice no qual a entrada (como argumento da linha de comando) reside. Em seguida, associamos seu predecessor e seu sucessor a uma lista e os usamos como modulares na mesma lista de coordenadas para levar a coordenada à esquerda e à direita da entrada, respectivamente. Você pensaria agora que finalmente terminamos, mas na verdade há mais uma coisa, o separador. Isso é válido como uma função, pois 1) Você pode chamá-lo usando <integer>Ŀ
2) Você também pode definir outras funções (como importar módulos). Agora terminamos. Como um programa completo, isso não tem um separador, mas tudo bem, pois funciona como uma função.
Explicação do código link a link :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.
Mathematica,
118112 bytesAgradecemos a Martin Ender por economizar 6 bytes!
Função sem nome (uma associação, na verdade) que recebe uma string como entrada e retorna um par ordenado de strings. Basicamente, apenas codifica a resposta.
fonte
Python 2,
116115103 bytes-12 bytes graças a Neil
Experimente Online!
fonte
d[n-15]
para evitar a condição.JavaScript ES6,
106102 bytesExperimente online!
fonte
let
vez deconst
.05AB1E ,
4443 bytes (Agradecimentos a Adnan)Experimente online!
Saída exemplar:
Versão que empurra
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
:Também tem 44 bytes, houve 0 motivo para o meu refator e 0 motivo para divisão nos 4's.
fonte
4
s?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
acontece que, não, não há nenhuma razão. Usar 0 como delimitador é a mesma taxa de compactação, pois não diminui o comprimento do número na conversão de base 5 para base 214. Poderia jurar que assim me salvou um byte.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
para salvar 4 bytes.Javascript -
234154156152120106 106102 bytesApenas minha segunda vez fazendo código de golfe !!
Revisão mais recente:
Obrigado a @ fəˈnɛtɪk por este puro truque de variável!
Antes disso: Ok, a revisão mais recente: Input é uma string e output é uma string que está nas regras, então eu a transformei em uma função e, com reduções, fiquei ainda menor (também a função é anônima, o que agora significa que a minha de alguma forma, mesclado com o outro js answer oops! Ele (powelles) teve primeiro !!):
Pode ser usado por:
Reformado (não funciona) com Saída - 120:
Observe que cometi um erro originalmente, tendo o mesmo a.length em vez de a.length-1 no primeiro índice. Obrigado @Neil por apontar que não funcionou para a NNW.
Nota 2: Obrigado a @Neil e @ETHProductions por me ajudarem a reduzir o código!
Original:
fonte
NNW
.,
, i = a.indexOf (p), [a [i-1 & 15], a [i + 1 & 15]])Lote, 196 bytes
Passa por cada par de pontos da bússola, imprimindo um quando o outro corresponde. Por exemplo, para um parâmetro de
ENE
, quando o loop atingeENE
, a variávels
contém oNE
que é impresso, quando o loop avança paraE
, a variávels
contémENE
e, portanto,E
é impressa. Um par precisa ser de caixa especial para evitar que os pontos da bússola sejam impressos na ordem errada.fonte
Geléia ,
4038 bytesExperimente online! (adicionado o rodapé para mostrar a saída é uma lista de dois itens) ... ou veja todos os casos .
(Não sei ao certo por que,
1323DRẋ4
no lugar de“¢)`)’ḃ3R
, não funciona no momento.)Quão?
fonte
Haskell ,
10099 bytesExperimente online! Chamando
(s#) "N"
retornos("NNW","NNE")
.s
é uma repetição infinita da lista de direções; portanto, não precisamos adicionar um extraN
e,NNE
como algumas das outras respostas, para lidar corretamente com as bordas da lista.Agradecemos a @nimi por salvar um byte!
fonte
(a:b:c:r)!x| ... =r!x;(s!)
.SOGL , 33 bytes
A primeira parte
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
é uma string compactada que écompactado com um dicionário personalizado com
ENSW
O restante do programa:
fonte
bytes
no título tem um link para a página de códigosPHP, 122 bytes
fonte
$argv[1]
com$argn
e usando a opção -R. se você usar funções obsoletas se poderia estar terminando emereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Ruby - 94 bytes
Um riff na resposta de Blue Okiris , apenas para tirar proveito de uma boa abreviação de Ruby (a
%w[]
sintaxe ep
especificamente):fonte
Japt ,
6652 bytesEconomizou 14 bytes graças a @ETHproductions
Experimente online!
Explicação:
fonte
'
noq'o
e ele vai funcionar exatamente o mesmo :-)[J1]£VgX+VaU
salvar alguns bytesCJam, 41
Experimente online
fonte
PHP, 115 bytes
-2 bytes usando a função reprovada em
split
vez deexplode
PHP, 128 bytes
PHP, 134 bytes
fonte
PHP,
110109 bytesGuardado 1 byte graças a Jörg Hülsermann .
fonte
preg_replace
porpreg_filter
para salvar 1 bytePython 3 -
112107 bytesBaseei isso na minha resposta Javascript:
Remade:
Use como diz
Original:
fonte
MATL , 43 bytes
Experimente online!
Explicação
fonte
c,
222216211 bytesExperimente online
fonte
Javascript (ES6), 189 bytes
Apenas pega a entrada, procura e retorna.
fonte
JavaScript (ES6), 94 bytes
Espera uma sequência em maiúsculas, como
"ENE"
. Retorna uma string separada por vírgula, como"NE,E"
.Como funciona
A expressão
0+s+0
é coagida a uma string quandosplit()
é chamada. Por exemplo, se a entrada for"ENE"
, a sequência será dividida em"0ENE0"
:Isso leva à seguinte matriz:
Novamente, esse array é coagido a uma string quando
exec()
é chamado. Portanto, a expressão regular é realmente aplicada em:Procuramos caracteres não numéricos consecutivos (
\D+
) seguidos por vírgula, seguidos por caracteres não numéricos consecutivos. Isso retorna a matriz[ "NE,E" ]
. Sem dúvida, poderíamos parar por aí e retornar exatamente isso. Mas o desafio é solicitar uma sequência delimitada ou uma matriz de dois elementos. Então, extraímos a string com[0]
.Demo
Mostrar snippet de código
fonte
Pitão , 39 bytes:
onde
❤
representa letras imprimíveis.Experimente online!
Hexdump:
fonte