Usando a tabela a seguir ( fonte ), escreva um código que pegue os nomes de dois planetas e retorne a distância entre eles:
+-------------------+---------------+
| Planets | Distance (km) |
+-------------------+---------------+
| Mercury -> Venus | 50290000 |
| Venus -> Earth | 41400000 |
| Earth -> Mars | 78340000 |
| Mars -> Jupiter | 550390000 |
| Jupiter -> Saturn | 646270000 |
| Saturn -> Uranus | 1448950000 |
| Uranus -> Neptune | 1627450000 |
| Neptune -> Pluto | 1405380000 |
+-------------------+---------------+
Exemplos, entrada e saída:
Mercury, Mars
170030000
Neptune, Jupiter
-3722670000
Earth, Earth
0
Observe o sinal negativo lá, pois Júpiter vem antes de Netuno. Eles também são todos os números inteiros.
Plutão não precisa ser incluído (principalmente por causa de uma órbita estranha que dificulta o cálculo da distância - essa distância é o meu próprio cálculo, mas como Plutão é famoso agora ...).
Por distâncias entre planetas, quero dizer órbitas - não espero um encontro e descubro onde estão.
Este é o código de golfe, o código mais curto vence.
Mercury, Mars -> 170030000.0
?Respostas:
CJam,
545144 bytesExperimente on-line no intérprete CJam .
Idéia
Usamos uma função simples de hash para identificar todos os oito planetas. Considerando cada nome como a matriz de seus pontos de código, convertendo-os da base 26 para inteiro e obtendo o resultado módulo 93 e depois módulo 8, Mercúrio , Vênus , Terra , etc., mapear para 2 , 4 , 0 , 1 , 3 , 5 , 6 e 7 .
Agora, escolhemos um ponto que fica 320.000 km atrás de Netuno e calculamos as distâncias dos oito planetas até esse ponto. Depois de eliminar quatro zeros à direita e reordenar os planetas para que eles se ajustem aos 8 índices acima, obtemos a matriz
que, se codificarmos cada número inteiro na base 70, produzirá o seguinte:
Lembrando que dois dígitos adjacentes
(A B)
podem ser substituídos por((A-1) (B+70))
, podemos modificar a matriz de cima para que todos os números inteiros possam ser codificados como caracteres ASCII imprimíveis:Código
fonte
Python 2,
149147142138128123119 BytesApenas usa uma pesquisa simples para descobrir quais distâncias usar :) Isso define uma função anônima; portanto, para usá-la, você precisará dar um nome a ela.
Agradecemos ao Sp3000 pelas ideias que economizaram muitos bytes!
Recuado adequadamente e não-golpeado ligeiramente para facilitar a leitura:
Ligue assim:
fonte
Prolog,
190174151 bytesAgradecemos a Fatalize pela orientação.
fonte
s(A, B, R)
vez de escreverR
? Nada é especificado para saídas, portanto, um retorno predicado deve ser bom.g
parag(A,X):-sub_atom(A,2,2,_,B),member(B:X,[rc:0,nu:5029,rt:9169,rs:17003,pi:72042,tu:136669,an:281564,pt:444309]).
e remoção de todos os fatos de planetas. É menos legal do que=..
mas é mais curto para obter um mapeamento de valor-chaveJavaScript (ES6),
115110 bytesEsta é uma função anônima; portanto, você precisará armazená-la em uma variável (
f=...; f("Earth", "Mercury")
) ou usá-la como uma expressão entre parênteses ((...)("Earth", "Mercury")
.Essa corda bagunçada são as duas primeiras letras de cada planeta, seguidas pela distância desse planeta a Mercúrio (dividido por 10000, para economizar espaço). A função interna
g
faz o seguinte:k
),k[0]+k[1]
),Ea(\d*)
),1e4
) e retorna o resultado.Subtraindo uma distância de Mercúrio da outra, obtemos a distância entre os planetas.
fonte
btoa
possuem pontos de código abaixo de 256, portanto, a ISO 8859-1 codifica cada caractere usando um único byte.Java,
274272264 bytes (inclui Pluto!)Entrada / Saída:
Espaçados e com guias:
fonte
int
eint[]
em uma linha se a matriz chegar por último: Likeint i=0,j=1,k[]={};
10000
por1e4
.e > w
que você pode cortar um caractere usando o operador vai para:while(e-->w)
que é de 12 caracteres, em vez defor(;e--!=w;)
que é 13.Python, 118 bytes
n
é uma função que retorna a distância de Mercúrio.A string
"VeEaMaJuSaUrNe"
é os dois primeiros caracteres de todos os nomes de planetas, exceto Mercúrio .find
como não encontra Mercúrio, retornará -1. -1/2 ainda é -1, então este é o último elemento da tupla, que é 0.Código de teste simples:
fonte
APL,
979585 bytesIsso cria uma função diádica sem nome que leva o planeta de origem como argumento à esquerda e o planeta de destino como o direito.
Você pode experimentá-lo online !
fonte
J-- , 226 bytes
Eu não acho que isso conta, pois eu estava criando a linguagem enquanto a pergunta estava fora, mas era principalmente um teste de quão pequeno eu conseguia comprimir o código Java. Isso é total e completamente baseado na resposta da DeadChex .
Veja como usá-lo:
fonte
Pitão -
5953 bytesCodifica a distância em pontos de código unicode.
A pesquisa de nome é legal porque circula por aí. Obrigado a @Dennis por sugerir o índice 14 como uma pesquisa sem colisão!
Experimente aqui online .
fonte
Bash, 140 bytes
fonte
CoffeeScript,
183180 bytesDesminificado:
fonte
Ruby, 168 bytes
Ele foi projetado como um script para ser executado a partir da linha de comando, portanto, usa
ARGV
. Correr comofonte
Haskell,
160158157 bytesExemplo de uso:
Como funciona: defino um novo tipo de dados em
P
que os nomes dos construtores são os nomes dos planetas. Eu também o coloco naEnum
classe, ou seja, obtenho um mapeamento para números inteiros viafromEnum
(em ordem de definição, começando comMercury
->0
). Esse número inteiro pode ser usado como um índice para a lista de distâncias.Edit: @Kritzefitz encontrou dois bytes para salvar e @Alchymist outro. Obrigado!
fonte
fromEnum x
e salvar dois bytes.Julia,
206203190 bytesIsso cria uma função sem nome que aceita duas cadeias e retorna um número inteiro. Para chamá-lo, dê um nome.
Ungolfed + explicação:
fonte
Java,
257228 bytesstatic long d(String...s){...}
resolve o desafio. A entrada requer que os nomes dos planetas correspondam exatamente aos nomes das constantes da enumeração. Eu amo como java fornece uma string para enum método de conversão para mim <3Uso:
Z.d("Mercury","Pluto")
retorna5848470000
Z.d("Pluto","Mercury")
retorna-5848470000
Z.d("Uranus","Neptune")
retorna1627450000
Z.d("Mars","Pluto")
retorna5678440000
fonte
Macro pré-processador C (gcc) , 146 bytes
Experimente online!
fonte