Good Afternoon Golfers,
La nostra sfida per oggi è ispirata ai fumetti XKCD 356 e 370 . Scriveremo un programma per calcolare la resistenza di un gruppo di resistori. Un avvertimento che questo è quasi abbastanza difficile da giustificare una sfida al codice, tuttavia penso che ci sia una certa arte nello scrivere programmi leggermente più complessi in un formato golf. Vince il minor numero di personaggi.
Il calcolo della resistenza si basa sulle seguenti due formule:
- Se i resistori sono in serie, la resistenza è la somma della resistenza di ciascun resistore
- Se i resistori sono in parallelo, la resistenza è l'inverso della somma dell'inverso della resistenza di ciascun resistore
Quindi - ad esempio:
La tua sfida è, nel minor numero possibile di personaggi, calcolare la resistenza di un gruppo di un massimo di 64 resistori. Mi scuso per la complessità, in particolare per le regole di input. Ho tentato di definirli in modo tale che ogni lingua fosse utilizzabile.
Ciascun resistore sarà collegato a 2 o più altri resistori.
L'ingresso è garantito per essere valido, con una sola entrata e un punto di uscita, che si collegherà
La rete sarà parallela in serie per evitare di richiedere più calcoli di ciò che viene presentato
L'input avverrà tramite file, argomento o stdin, a seconda di ciò che è appropriato per la tua lingua.
L'input consisterà in una serie di istruzioni separate newline o forward slash costituite da un numero intero della resistenza del resistore e spazi che separano gli ID dei resistori a cui è collegato un lato del resistore.
L'ID del primo resistore sarà 1, incrementando di uno per ciascun resistore successivo
L'inizio avrà sempre un ID di 0
Il resistore finale avrà sempre una resistenza di 0 ohm e avrà solo i collegamenti definiti nella sua linea
Per esempio:
Potrebbe essere rappresentato come
3 0
6 1
1 0
5 0
0 2 3 4
- L'output può essere su stdout o file. Può essere rappresentato in uno dei seguenti modi:
- Un numero con un minimo di 2 cifre decimali, seguito da una nuova riga
- Una frazione costituita da un numero intero (il numeratore), una barra e un altro numero intero (il denominatore), seguito da una nuova riga. La frazione non deve necessariamente essere quella nella sua forma più bassa - 4/4 o 10/8 sono, per esempio, accettabili. La frazione deve essere accurata entro 1/100. Non ci sono bonus per essere perfettamente precisi - questo è fornito come una stampella per consentire alle lingue senza operazioni a virgola fissa o mobile di competere.
Spero che copra tutti i punti. In bocca al lupo!
1 2/1 0/0 1
valido?
/
non è una barra rovesciata. Intendevi "\" o una barra?