Estou construindo um robô lego gigante e preciso gerar algumas relações de engrenagem específicas usando um conjunto de engrenagens. Eu tenho muitas artes com os tamanhos comuns de artes lego: 8, 16, 24 ou 40 dentes. Escreva um programa que eu possa usar onde insira uma taxa de engrenagem e o programa me diga qual combinação de engrenagens devo usar para obter a taxa solicitada.
A taxa de entrada será especificada na entrada padrão (ou equivalente no seu idioma) com dois números inteiros separados por dois pontos. Uma proporção a:b
significa que o eixo de saída deve girar a/b
vezes mais rápido que o eixo de entrada.
A saída para saída padrão deve ser uma única linha que contém uma lista de relações de transmissão separada por espaço, na forma de x:y
onde x
é o tamanho da engrenagem no eixo de entrada e y
o tamanho da engrenagem no eixo de saída. Você deve usar o número mínimo possível de marchas para a proporção especificada. Cada um x
e y
deve ser um dos 8,16,24,40
.
exemplos:
1:5 -> 8:40
10:1 -> 40:8 16:8
9:4 -> 24:16 24:16
7:1 -> IMPOSSIBLE
7:7 ->
6:15 -> 16:40
Se a relação de transmissão desejada for impossível, imprima "IMPOSSÍVEL". Se nenhuma engrenagem for necessária, imprima a corda vazia.
Este é o código de golfe, a resposta mais curta vence.
1:5 -> 8:40
e10:1 -> 40:8
faz sentido, mas os outros nem tanto.1:5
significa que o eixo de saída gira 5 vezes mais devagar, e uma engrenagem de 8 dentes na entrada e uma engrenagem de 40 dentes na saída fazem isso acontecer.10:1 -> 40:8 16:8
não o que você disse. E os outros confunde você?9:4
é implementado fazendo3:2
duas vezes.3:2
é implementado usando24:16
.7:7
é o mesmo que1:1
, portanto, não requer engrenagens para implementar.Respostas:
Python - 204
Ok, eu vou primeiro:
editar:Para 'otimizar' a saída, isso pode ser adicionado antes da
print
declaração,elevando o total até 266 caracteres , acredito.
fonte
<1
pode substituir==0
. Além disso,if b:a=...return a
pode serreturn b and...or a
.23:12
,.elif i!=1:return[]
ao original resolve o problema, mas apresenta outro.$ python gears.py <<< 21:28
=>24:16
.. eu vou investigar. Parece que o problema não era tão simples, afinal: DI Acho que o código precisa ser ainda mais longo ou preciso de outra abordagem.6:15
pode ser feito com,16:40
mas seu código retorna24:40 16:24
.Perl -
310 306 294 288272Estou um pouco enferrujado com perl e nunca joguei golfe de código ... mas não tenho desculpas. A contagem de caracteres é sem quebras de linha. Usando o perl v5.14.2.
Estou ansioso por críticas e sugestões. Não é tão fácil encontrar dicas e truques para o código-golfe (em perl).
fonte
$1:$2 ->
, não é necessário na saída.$a[$_]=8 if!$a[$_];
a$a[$_]||=8;
($v,$n)=split/:|\s/,<>;
(não testada).swi-prólogo,
324250248204 bytesProlog faz muito bem em resolver um problema como este.
A entrada é passada como um parâmetro de termo para predicado
m
. A saída é gravada em stdout. Desculpe pelo "verdadeiro" à direita; essa é apenas a maneira do intérprete de me informar que estava tudo bem.fonte
C,
246216213 bytesEm uma tentativa (fútil) de vencer minha própria solução Prolog, reescrevi completamente a solução C.
Minha solução C original (246 bytes):
Foi um bom exercício para provar que isso pode ser feito sem criar listas.
fonte
Pitão, 101 bytes
(Quase certamente não concorrente no concurso, pois usa um idioma mais recente que set / 2012)
Uma implementação da resposta python do @daniero ', mas semi-otimizada para Pyth.
Experimente aqui
Ou teste todos os casos
fonte
ES6, 230 bytes
Um dos meus campos mais longos, então eu devo ter feito algo errado ... Ungolfed:
fonte