Escreva um programa ou função que receba entrada: todos os resistores disponíveis e um valor de resistência e emita um valor verdadeiro se é possível ou não obter a resistência usando esses resistores.
Regras:
Qualquer formato para entrada serve.
Haverá pelo menos 1 resistor disponível e seu programa deve gerar pelo menos 10 resistores disponíveis.
A resistência de todos os resistores disponíveis e a resistência necessária serão números inteiros positivos.
Para resistores disponíveis, se também for possível um valor fracionário, a resistência necessária pode ser o valor aproximado (veja o exemplo)
A saída deve ter 2 valores exclusivos para Possível e Não possível.
Os resistores podem ser conectados de qualquer maneira.
Resistência em série : Para n resistências em série: Resultado = R1 + R2 + R3 + .... Rn
Resistência Paralela : Para n resistências em paralelo: Resultado = 1 / (1 / R1 + 1 / R2 + 1 / R3 + .... + 1 / Rn)
O circuito pode não exigir que todos os resistores obtenham a resistência necessária (saída True, se for esse o caso).
Vencedora:
Isso é código-golfe, então o código mais curto vence.
Exemplos:
R List
110 220,220 -> True
440 220,220 -> True
550 400,300 -> False
3000 1000,3000 -> True
750 1000,3000 -> True
333 1000,1000,1000 -> True (1000||1000||1000=333.333)
667 1000,1000,1000 -> True ((1000+1000)||1000=666.6666)
8000 1000,1000,7000 -> True
190 100,200,333,344,221 -> True
193 105,200,333,344,221 -> True
400 200,100 -> False
Explicação para os dois últimos exemplos: /physics/22252/resistor-circuit-that-isnt-parallel-or-series
fonte
3 3 1
,3 3 2
?Respostas:
Python 3 , 253 bytes
Pego o conjunto de potências de todos os valores do resistor e, em seguida, calculo as somas para séries e 1 / soma (1 / valores) para o paralel e, em seguida, pego um conjunto de potências desses dois conjuntos. Quando você pega a soma de todos os subconjuntos e os coloca em um conjunto, esse conjunto eiter contém o valor ou não. -> retornar Verdadeiro / Falso
@stephen thanks :)
fonte
b != 0
->b!=0
.Japonês , 52 bytes
Tente!
Essa foi uma pergunta difícil, e eu tive que fazer algumas coisas estranhas para fazer funcionar. Não posso provar matematicamente que isso funciona para tudo, mas funciona para todos os casos de teste e para o meu caso de teste extra proposto . Especificamente, eu sei que a função que eu defino chamada
W
fornece resultados diferentes, dependendo da ordem dos resistores em sua entrada, então eu o executo em cada ordem possível de cada combinação possível de resistores. Eu também sei que ele produzirá uma lista de resistências que são possíveis de serem criadas usando os resistores de entrada. Não sei com 100% de certeza que essas duas coisas juntas acabam com todas as resistências possíveis.Explicação:
fonte
Ruby , 153 bytes
Experimente online!
Força bruta. Quero dizer.
fonte