Escriba un programa o función que tome entrada: todas las resistencias disponibles y un valor de resistencia y genera un valor verdadero de si es posible o no obtener la resistencia usando esas resistencias.
Reglas:
Cualquier formato de entrada servirá.
Habrá al menos 1 resistencia disponible y su programa debería generar al menos 10 resistencias disponibles.
La resistencia de todas las resistencias disponibles y la resistencia requerida serán enteros positivos.
Para resistencias disponibles si también es posible un valor fraccional, la resistencia requerida puede ser el valor aproximado (ver ejemplo)
La salida debe ser cualquier 2 valores únicos para Posible y No posible.
Las resistencias pueden conectarse de cualquier manera.
Resistencia en serie : Para n resistencias en serie: Resultado = R1 + R2 + R3 + .... Rn
Resistencia paralela : Para n resistencias en paralelo: Resultado = 1 / (1 / R1 + 1 / R2 + 1 / R3 + .... + 1 / Rn)
Es posible que el circuito no requiera que todas las resistencias obtengan la resistencia requerida (salida True si ese es el caso).
Ganador:
Este es el código de golf, por lo que el código más corto gana.
Ejemplos:
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
Explicación de los dos últimos ejemplos: /physics/22252/resistor-circuit-that-isnt-parallel-or-series
fuente
3 3 1
,3 3 2
?Respuestas:
Python 3 , 253 bytes
Tomo el conjunto de potencias de todos los valores de resistencia y luego calculo las sumas para series y 1 / suma (1 / valores) para paralelas y luego tomo un conjunto de potencias de estos dos conjuntos. Cuando toma la suma de todos los subconjuntos y los coloca en un conjunto, este conjunto de valores contiene el valor o no. -> volver verdadero / falso
@stephen gracias :)
fuente
b != 0
->b!=0
.Japt , 52 bytes
¡Intentalo!
Fue difícil y tuve que hacer un par de cosas extrañas para que funcionara. No puedo demostrar matemáticamente que esto funcione para todo, pero funciona para todos los casos de prueba, así como para mi caso de prueba adicional propuesto . Específicamente, sé que la función que defino llamada
W
da resultados diferentes dependiendo del orden de las resistencias en su entrada, por lo que la ejecuto en cada orden posible de cada combinación posible de resistencias. También sé que producirá una lista de resistencias que son posibles de crear usando las resistencias de entrada. No sé con 100% de certeza que esas dos cosas juntas terminan con todas las resistencias posibles.Explicación:
fuente
Ruby , 153 bytes
Pruébalo en línea!
Fuerza bruta. Lo digo en serio.
fuente