Guten Nachmittag Golfer,
Unsere heutige Herausforderung ist von den XKCD-Comics 356 und 370 inspiriert . Wir werden ein Programm schreiben, um den Widerstand einer Gruppe von Widerständen zu berechnen. Eine Warnung, dass dies fast schwierig genug ist, um eine Code-Herausforderung zu rechtfertigen, aber ich denke, dass es eine gewisse Kunst ist, etwas komplexere Programme in einem Golfformat zu schreiben. Die niedrigste Anzahl von Charakteren gewinnt.
Die Berechnung des Widerstands basiert auf den folgenden zwei Formeln:
- Wenn die Widerstände in Reihe geschaltet sind, ist der Widerstand die Summe des Widerstands jedes Widerstands
- Wenn die Widerstände parallel sind, ist der Widerstand die Umkehrung der Summe der Umkehrung des Widerstands jedes Widerstands
Also - zum Beispiel:
Ihre Herausforderung besteht darin, mit möglichst wenigen Zeichen den Widerstand einer Gruppe von bis zu 64 Widerständen zu berechnen. Ich entschuldige mich für die Komplexität, insbesondere der Eingaberegeln. Ich habe versucht, sie so zu definieren, dass jede Sprache verwendet werden kann.
Jeder Widerstand wird mit 2 oder mehr anderen Widerständen verbunden.
Die Eingabe ist garantiert gültig, mit nur einem Eingangs- und einem Austrittspunkt, die eine Verbindung herstellen
Das Netzwerk wird serienparallel sein, um zu verhindern, dass mehr Mathematik erforderlich ist als dargestellt
Die Eingabe erfolgt über Datei, Argument oder Standard, je nachdem, was für Ihre Sprache geeignet ist.
Der Eingang besteht aus einer Reihe von Zeilenumbrüchen, die aus einer Ganzzahl des Widerstands des Widerstands bestehen, und Leerzeichen, die die IDs der Widerstände trennen, mit denen eine Seite des Widerstands verbunden ist.
Die ID des ersten Widerstands ist 1 und wird für jeden aufeinanderfolgenden Widerstand um eins erhöht
Der Start hat immer eine ID von 0
Der Endwiderstand hat immer einen Widerstand von 0 Ohm und nur die in seiner Leitung definierten Anschlüsse
Zum Beispiel:
Könnte dargestellt werden als
3 0
6 1
1 0
5 0
0 2 3 4
- Die Ausgabe kann in Standard oder Datei erfolgen. Es kann auf eine der folgenden Arten dargestellt werden:
- Eine Zahl mit mindestens 2 Dezimalstellen, gefolgt von einer neuen Zeile
- Ein Bruch, der aus einer Ganzzahl (dem Zähler), einem Schrägstrich und einer weiteren Ganzzahl (dem Nenner) besteht, gefolgt von einer neuen Zeile. Die Fraktion muss nicht diejenige sein, die in ihrer niedrigsten Form vorliegt - 4/4 oder 10/8 sind beispielsweise akzeptabel. Der Bruch muss innerhalb von 1/100 genau sein. Es gibt keinen Bonus für die perfekte Genauigkeit - dies ist eine Krücke, mit der Sprachen ohne Fest- oder Gleitkommaoperationen miteinander konkurrieren können.
Ich hoffe, das deckt alle Punkte ab. Viel Glück!
/
ist kein Backslash. Meinten Sie "\" oder einen Schrägstrich?1 2/1 0/0 1
gültig?Antworten:
APL 190
Indexursprung 1. Die erste (n) Schleife (n) kombiniert alle in Reihe geschalteten Widerstände, die zweite (p) die parallel geschalteten Widerstände und die Wiederholung zur ersten Schleife, um alle jetzt in Reihe geschalteten parallelen Widerstände zu kombinieren. Die Spezifikation des endgültigen Nullwiderstands scheint redundant zu sein.
Getestet über die Beispiele in der Frage sowie ein etwas komplizierteres:
quelle
o←⊃↑¨r←¯1↓⍎¨(c≠'/')⊂c
. Dieses Muster ist an einigen Stellen anwendbar.Python, 329 Zeichen
Berechnet den Widerstand durch Spannungsrelaxation an der Schaltung. Zuerst wird ein 1-Ohm-Widerstand an den Start angeschlossen und der letzte Widerstand von 0 Ohm auf 1 Ohm geändert. Dann setzt es die Eingangsspannung auf 0 und die Ausgangsspannung auf 1 Volt. Nach der Simulation des Stromflusses durch das Netzwerk wird der Netzwerkwiderstand anhand des Spannungsabfalls am ersten 1-Ohm-Widerstand berechnet.
Jeder Widerstand erhält zwei Nummern, die Nummer für seinen linken Anschluss und die Nummer für seinen rechten Anschluss. Der linke Anschluss des Widerstands r ist 2 * r und sein rechter Anschluss ist 2 * r + 1. Der Eingang wird verwendet, um
S
die Sätze von Klemmen zu berechnen , die miteinander verbunden sind. Jeder Klemme erhält eine SpannungV[t]
und eine Entspannung erfolgt durch Erhöhen der Spannung, wenn der Strom netto in einen Klemmensatz fließt, und Verringern der Spannung, wenn der Strom netto fließt.quelle
(Dies ist ein Kommentar, aber ich kann keine ASCII-Kunst in einem echten Kommentar machen ...)
Wie wird so etwas eingegeben?
Womit sind insbesondere 3 und 4 verbunden? 1 oder 2 oder sowohl 1 als auch 2?
quelle