A história desnecessária e complicada
Estou andando por manhattan, quarteirão por quarteirão, e meus pés se cansaram e querem voltar para casa.
O tráfego é muito ruim, mas felizmente sou muito rico e tenho um helicóptero em espera no hotel. Mas preciso que eles saibam quanto combustível levar para o voo e para isso precisam saber a minha distância direta do hotel. Lembrei-me de quais quarteirões andei e posso dizer a eles qual caminho eu segui. Porém, essa distância precisa ser precisa; se forem muito curtas, não voltaremos por muito tempo e comprei combustível que não posso usar.
Você pode me escrever um programa para converter isso na distância que eles terão que viajar no voo para me buscar?
Especificação:
Escreva-me uma função que:
- Aceita uma lista ou sequência de blocos percorridos em relação a uma grade arbitrária:
- L p, D próprio, L eft e R ight.
- Pode ser maiúscula ou minúscula - por exemplo. se for mais curto para usar em
u
vez deU
seguir em frente. - Uma direção inválida tem um comportamento indefinido - por exemplo. uma direção de X pode causar uma falha.
- Retorna um ponto flutuante / decimal / duplo que é o dobro da distância da linha reta do ponto de origem.
Para ilustração e esclarecimento:
Minha viagem pode ter sido tão facilmente gravada quanto "luluu..."
ou, ['l','u','l'...]
mas deve ser gravada como Cima, Baixo, Esquerda, Direita.
Respostas:
J, 17 caracteres
Usa o fato de que os poderes de
j
representam as direções apropriadas.'urdl'i.
pegue a string e calcule os índices (0 para 'u', 1 para 'r', ...)0j1^
transforma na direção no plano complexo usando a potência correspondente dej
.+/
resume as etapas únicas2*|
duas vezes o móduloExemplo:
fonte
Python 2.7
5658565148Com o número dez centavos roubado de Scrooge McDuck , fiz minha fortuna e agora tenho mais riqueza do que Scrooge.
Python 2.7 -
615350 (não diferencia maiúsculas de minúsculas)Implementação
fonte
IndexError: list index out of range
. Que forma a entrada deve ter?%5
não%8
. Ok, faz mais sentido agora :)APL (29)
por exemplo
Explicação:
+/'URDL'∘.=⍵
: veja com que frequência os caracteresURDL
ocorrem no argumento-⌿2 2⍴
: subtraia oU
valor doD
valor e oR
valor doL
valor2 0j2×
: multiplique o valor vertical por2
e o valor horizontal por2i
+/
: soma|
: magnitudefonte
Ruby 1.9+ (67)
Exemplo
fonte
caracteres perl6: 44
get.comb
obtém uma linha de entrada e se divide em caracteres<U R L D>
é uma lista de palavras, caracteres neste caso(1,2,3) Z (4,5,6)
==(1,2), (2,5), (3,6)
, para que ele junte 2 listas, criando uma lista de pacotes que se%()
transformam em hash<<**>>
emparelhado**
, estendendo a lista mais curta para caber mais. A lista mais curta passa a ser apenasi
[+]
soma todos os elementos de uma lista,abs
pega o módulo para números complexosSim, removi todos os espaços possíveis.
fonte
Python 2.7 - 65
Bom e curto, ele usa números complexos para percorrer o avião:
Adereços para DSM e Abhijit em outras perguntas que me mostraram o uso de
1j
para calcular isso.fonte
1j
ser escrito comoj
,-1j
como-j
? Além disso, isso lida com as entradas superior e inferior, ou apenas superior?j
e a unidade imagináriaj
2
vez de multiplicar o resultado final.Mathematica
9249Calle merece todo o crédito pela otimização do código.
Exemplo
fonte
f@l_ := 2 N@Norm[Tr[l /. {"r" -> 1, "l" -> -1, "u" -> I, "d" -> -I}]]
será suficiente.2 Norm[(2. + 2. I) + "U" + "X"]
como saída para o seu código.@
s, obtém outros dois caracteres a menos.PHP, 67
Exemplo:
fonte
Julia, 45
Roubou o
i
truque dos poderes. Todos os caracteres, exceto d, também possuem valores que funcionam como poderes aceitáveisi
.fonte
J, 29 caracteres
Só funciona com direções minúsculas e quaisquer outros do que personagens
r
,u
,l
, ed
fará com que ele para dar uma resposta errada.Uso:
Explicação:
'ruld'i.'uuuudrrrl'
A forma diádica dei.
localiza o índice de itens do argumento correto no argumento esquerdo. Nesse caso:/:~
classifica esta lista em ordem crescente:#/.~
conta o número de ocorrências de cada número:_2[\
divide em 2 linhas:-/
subtrai a parte inferior do topo+&.*:
pede emprestado um truque de outra resposta J que vi hoje de manhã , encaixa os itens, soma os itens e executa uma raiz quadrada. Veja na&.
documentação:+:
duplica o resultado:fonte
R,
867456 caracteresOk, é realmente muito mais curto com números imaginários:
Uso:
Solução antiga com 74 caracteres com xy coords:
Uso:
Toma a entrada como stdin, precisa ser minúscula e separada por espaço. Use coordenadas xy iniciando em (0,0).
fonte
k (
5049)Exemplo
fonte
Java, 185,
203,204,217,226Eu assumi que cada "U" era "1 up", então duas unidades acima seriam "UU"
Edit: troca de switch para ifs
Movido para o iterador
Não recebe mais a entrada como string, mas sim como um conjunto de direções
fonte
T-SQL, 158
O @s é a sequência de entrada do tipo varchar (max)
fonte
ES6,
7769Definição:
Uso:
(Inspirado parcialmente pela resposta de Boann.)
fonte
for
declaração por alguma expressão (um corpo da função seta que contém instruções exigem os suportes e o retorno explícita, órgãos que são apenas expressões não) ..JavaScript - 142 caracteres - sem avaliação ()
onde a é uma string como 'uudrrl'
use assim -
Teste no console do navegador.
fonte
C # - 90 caracteres
Recém-vindo do LINQPad.
Onde input é uma sequência válida.
fonte
Befunge-93 (65)
Possui 65 caracteres que não são espaços em branco (217 com espaços em branco, embora isso possa ser reduzido por um layout mais compacto (para 69/176 caracteres)). É preciso alguma liberalidade com o formato de saída, mas é inegavelmente preciso. Não parece valer o esforço para implementar / roubar uma implementação de raiz quadrada.
echo 'UUDLLUU' | ./befungee.py ../man
resultados 2√13 (na verdade, a implementação parece ter problemas com o ASCII estendido).fonte
Matlab, 51 caracteres
Minha inscrição no Matlab, funciona apenas com letras maiúsculas. Essa foi engraçada! A parte mais difícil foi converter a string em uma matriz de números complexos a serem somados.
Função:
Uso:
fonte
Javascript, 136
fonte
JavaScript, 89
Exemplo:
fonte
C, 120
d("LULUURRRRURD")
->8.485281
fonte
JavaScript (sem ES6, sem avaliação) - 131
Teste:
fonte