Bons golfeurs,
Notre défi d'aujourd'hui est inspiré des bandes dessinées XKCD 356 et 370 . Nous allons écrire un programme pour calculer la résistance d'un groupe de résistances. Un avertissement que cela est presque assez difficile pour justifier d'être un défi de code, mais je pense qu'il y a un certain art à écrire des programmes légèrement plus complexes dans un format golfique. Le plus petit nombre de personnages gagne.
Le calcul de la résistance repose sur les deux formules suivantes:
- Si les résistances sont en série, la résistance est la somme de la résistance de chaque résistance
- Si les résistances sont en parallèle, la résistance est l'inverse de la somme de l'inverse de la résistance de chaque résistance
Donc - par exemple:
Votre défi est de calculer, dans le moins de caractères possible, la résistance d'un groupe de jusqu'à 64 résistances. Mes excuses pour la complexité, en particulier des règles d'entrée. J'ai essayé de les définir de manière à ce que chaque langue soit utilisable.
Chaque résistance sera connectée à 2 ou plusieurs autres résistances.
L'entrée est garantie pour être valide, avec seulement une entrée et un point de sortie, qui se connecteront
Le réseau sera parallèle en série pour éviter d'exiger plus de maths que ce qui est présenté
L'entrée se fera par fichier, argument ou stdin, selon ce qui est approprié pour votre langue.
L'entrée consistera en une série d'instructions séparées par des sauts de ligne ou des virgules avant constituées d'un entier de la résistance de la résistance et d'espaces séparant les ID des résistances auxquelles un côté de la résistance est connecté.
L'ID de la première résistance sera 1, incrémentant de un pour chaque résistance successive
Le départ aura toujours un ID de 0
La résistance finale aura toujours une résistance de 0 ohms et n'aura que les connexions définies dans sa ligne
Par exemple:
Pourrait être représenté comme
3 0
6 1
1 0
5 0
0 2 3 4
- La sortie peut être vers stdout ou fichier. Il peut être représenté de l'une des manières suivantes:
- Un nombre avec un minimum de 2 décimales, suivi d'une nouvelle ligne
- Une fraction composée d'un entier (le numérateur), d'une barre oblique et d'un autre entier (le dénominateur), suivie d'une nouvelle ligne. Il n'est pas nécessaire que la fraction soit dans sa forme la plus basse - 4/4 ou 10/8 sont, par exemple, acceptables. La fraction doit être précise au 1/100. Il n'y a aucun bonus pour être parfaitement précis - cela est fourni est une béquille pour permettre aux langues sans opérations à virgule fixe ou flottante de rivaliser.
J'espère que cela couvre tous les points. Bonne chance!
/
n'est pas une barre oblique inverse. Voulez-vous dire `\ 'ou une barre oblique?1 2/1 0/0 1
valide?Réponses:
APL 190
Origine de l'index 1. La première boucle (s) combine toutes les résistances câblées en série, la seconde (p) celles câblées en parallèle et la répétition à la première boucle pour combiner toutes les résistances parallèles maintenant en série. La spécification de la résistance finale zéro semble être redondante.
Testé sur les exemples de la question plus un peu plus compliqué:
la source
o←⊃↑¨r←¯1↓⍎¨(c≠'/')⊂c
. Ce modèle est applicable à quelques endroits.Python, 329 caractères
Calcule la résistance en faisant une relaxation de tension sur le circuit. Tout d'abord, il claque une résistance de 1 ohm au début et change la dernière résistance de 0 ohm à 1 ohm. Il règle ensuite la tension d'entrée sur 0 et la tension de sortie sur 1 volt. Après avoir simulé le flux de courant à travers le réseau, la résistance du réseau est calculée en utilisant la chute de tension aux bornes de la première résistance de 1 ohm.
Chaque résistance reçoit deux numéros, le numéro de sa borne gauche et le numéro de sa borne droite. La borne gauche de la résistance r est 2 * r et sa borne droite est 2 * r + 1. L'entrée est utilisée pour calculer
S
les ensembles de terminaux qui sont connectés ensemble. Chaque borne reçoit une tensionV[t]
et une relaxation est effectuée en augmentant la tension si le courant circule net dans un ensemble de bornes et en abaissant la tension si le courant s'écoule net.la source
(Ceci est un commentaire, mais je ne peux pas faire de l'art ascii dans un vrai commentaire ...)
Comment quelque chose comme ça est-il entré?
En particulier, à quoi sont connectés 3 et 4? 1 ou 2, ou les deux 1 et 2?
la source