Buenas tardes golfistas,
Nuestro desafío para hoy está inspirado en los cómics XKCD 356 y 370 . Vamos a escribir un programa para calcular la resistencia de un grupo de resistencias. Una advertencia de que esto es lo suficientemente difícil como para justificar ser un desafío de código, sin embargo, creo que hay cierto arte en escribir programas ligeramente más complejos en un formato de golf. La menor cantidad de personajes gana.
Calcular la resistencia se basa en las siguientes dos fórmulas:
- Si las resistencias están en serie, la resistencia es la suma de la resistencia de cada resistencia
- Si las resistencias están en paralelo, la resistencia es la inversa de la suma de la inversa de la resistencia de cada resistencia
Así por ejemplo:
Su desafío es, en la menor cantidad de caracteres posible, calcular la resistencia de un grupo de hasta 64 resistencias. Mis disculpas por la complejidad, particularmente de las reglas de entrada. He intentado definirlos de tal manera que todos los idiomas sean utilizables.
Cada resistencia se conectará a 2 o más resistencias más.
Se garantiza que la entrada sea válida, con solo una entrada y un punto de salida, que se conectará
La red será paralela en serie para evitar que se requieran más matemáticas de las que se presentan.
La entrada será vía archivo, argumento o stdin, dependiendo de lo que sea apropiado para su idioma.
La entrada consistirá en una serie de declaraciones separadas de línea nueva o cortadas hacia adelante que consisten en un número entero de la resistencia de la resistencia y espacios que separan las ID de las resistencias a las que está conectado un lado de la resistencia.
La ID de la primera resistencia será 1, incrementándose en uno para cada resistencia sucesiva
El inicio siempre tendrá un ID de 0
La resistencia final siempre tendrá una resistencia de 0 ohmios y solo tendrá las conexiones definidas en su línea.
Por ejemplo:
Podría ser representado como
3 0
6 1
1 0
5 0
0 2 3 4
- La salida puede ser stdout o file. Se puede representar de una de las siguientes maneras:
- Un número con un mínimo de 2 decimales, seguido de una nueva línea
- Una fracción que consiste en un número entero (el numerador), una barra diagonal y otro número entero (el denominador), seguido de una nueva línea. No es necesario que la fracción esté en su forma más baja: 4/4 o 10/8 son, por ejemplo, aceptables. La fracción debe ser precisa dentro de 1/100. No hay bonificación por ser perfectamente preciso: se proporciona una muleta para permitir que los idiomas sin operaciones de punto fijo o flotante compitan.
Espero que cubra todos los puntos. ¡Buena suerte!
/
No es una barra invertida. ¿Quiso decir `\ 'o una barra diagonal?1 2/1 0/0 1
valido?Respuestas:
APL 190
Origen del índice 1. El primer bucle (s) combina todas las resistencias conectadas en serie, la segunda (p) las conectadas en paralelo y la repetición al primer bucle para combinar cualquier resistencia paralela ahora en serie. La especificación de la resistencia cero final parece ser redundante.
Probado sobre los ejemplos en la pregunta más uno un poco más complicado:
fuente
o←⊃↑¨r←¯1↓⍎¨(c≠'/')⊂c
. Este patrón es aplicable en un par de lugares.Python, 329 caracteres
Calcula la resistencia haciendo una relajación de voltaje en el circuito. Primero, agrega una resistencia de 1 ohm al comienzo y cambia la última resistencia de 0 ohm a 1 ohm. Luego establece el voltaje de entrada a 0 y el voltaje de salida a 1 voltio. Después de simular el flujo de corriente a través de la red, la resistencia de la red se calcula utilizando la caída de voltaje en la primera resistencia de 1 ohm.
Cada resistencia recibe dos números, el número de su terminal izquierdo y el número de su terminal derecho. El terminal izquierdo de la resistencia r es 2 * r y su terminal derecho es 2 * r + 1. La entrada se usa para calcular
S
los conjuntos de terminales que están conectados entre sí. A cada terminal se le asigna un voltajeV[t]
y se realiza una relajación aumentando el voltaje si la corriente fluye neta hacia un conjunto de terminales y bajando el voltaje si la corriente fluye neta.fuente
(Este es un comentario, pero no puedo hacer arte ascii en un comentario real ...)
¿Cómo se introduce algo como esto?
En particular, ¿a qué están conectados 3 y 4? 1 o 2, o ambos 1 y 2?
fuente