Pegolf Sore yang Baik,
Tantangan kami untuk hari ini terinspirasi oleh komik XKCD 356 dan 370 . Kita akan menulis sebuah program untuk menghitung resistansi sekelompok resistor. Sebuah peringatan bahwa ini hampir cukup sulit untuk menjamin menjadi tantangan kode, namun saya pikir ada seni tertentu untuk menulis program yang sedikit lebih kompleks dalam format golf. Jumlah karakter terendah menang.
Menghitung hambatan bergantung pada dua rumus berikut:
- Jika resistor dalam seri, resistansi adalah jumlah dari resistansi masing-masing resistor
- Jika resistor secara paralel, resistansi adalah kebalikan dari jumlah kebalikan dari resistansi masing-masing resistor
Jadi - misalnya:
Tantangan Anda adalah, dalam jumlah karakter seminimal mungkin, menghitung hambatan grup hingga 64 resistor. Saya minta maaf atas kerumitannya, terutama aturan input. Saya telah berusaha mendefinisikannya sedemikian rupa sehingga setiap bahasa dapat digunakan.
Setiap resistor akan terhubung ke 2 atau lebih resistor lainnya.
Input dijamin valid, dengan hanya satu entri dan satu titik keluar, yang akan terhubung
Jaringan akan seri-paralel untuk mencegah membutuhkan lebih banyak matematika dari apa yang disajikan
Masukan akan melalui file, argumen atau stdin, tergantung pada apa yang sesuai untuk bahasa Anda.
Input akan terdiri dari serangkaian pernyataan terpisah garis baru atau garis miring ke depan yang terdiri dari bilangan bulat dari resistor, dan spasi yang memisahkan ID dari resistor yang terhubung dengan satu sisi resistor.
ID dari resistor pertama adalah 1, bertambah satu untuk setiap resistor berturut-turut
Awal akan selalu memiliki ID 0
Resistor terakhir akan selalu memiliki hambatan 0 ohm, dan hanya memiliki koneksi yang ditentukan pada garisnya
Sebagai contoh:
Dapat direpresentasikan sebagai
3 0
6 1
1 0
5 0
0 2 3 4
- Output bisa ke stdout atau file. Itu dapat diwakili dalam salah satu cara berikut:
- Angka dengan minimal 2 tempat desimal, diikuti oleh baris baru
- Sebagian kecil yang terdiri dari integer (pembilang), garis miring ke depan dan bilangan bulat lainnya (penyebut), diikuti oleh baris baru. Fraksi tidak harus dalam bentuk terendah - 4/4 atau 10/8, misalnya dapat diterima. Fraksi harus akurat dalam 1/100. Tidak ada bonus untuk menjadi sangat akurat - ini disediakan adalah penopang untuk memungkinkan bahasa tanpa operasi fixed atau floating point untuk bersaing.
Saya harap itu mencakup semua poin. Semoga berhasil!
/
bukan backslash. Apakah maksud Anda `\` atau garis miring?1 2/1 0/0 1
validJawaban:
APL 190
Asal indeks 1. Loop pertama menggabungkan semua resistor yang terhubung seri, kedua (p) yang terhubung secara paralel dan mengulang ke loop pertama untuk menggabungkan resistor paralel yang sekarang dalam seri. Spesifikasi dari resistor nol akhir nampak berlebihan.
Diuji atas contoh-contoh dalam pertanyaan plus yang sedikit lebih rumit:
sumber
o←⊃↑¨r←¯1↓⍎¨(c≠'/')⊂c
. Pola ini berlaku di beberapa tempat.Python, 329 karakter
Hitung resistansi dengan melakukan relaksasi tegangan pada sirkuit. Pertama, ia menekan resistor 1 ohm ke awal dan mengubah resistor terakhir dari 0 ohm menjadi 1 ohm. Kemudian mengatur tegangan input ke 0 dan tegangan output ke 1 volt. Setelah mensimulasikan aliran arus melalui jaringan, resistansi jaringan dihitung menggunakan penurunan tegangan pada resistor 1 ohm pertama.
Setiap resistor diberi dua angka, nomor untuk terminal kiri dan nomor untuk terminal kanannya. Terminal kiri resistor r adalah 2 * r dan terminal kanannya adalah 2 * r + 1. Input digunakan untuk menghitung
S
, set terminal yang terhubung bersama. Setiap terminal diberi teganganV[t]
dan relaksasi dilakukan dengan menaikkan tegangan jika arus mengalir ke terminal dan menurunkan tegangan jika arus mengalir keluar.sumber
(Ini komentar, tapi aku tidak bisa melakukan ascii art dalam komentar sungguhan ...)
Bagaimana hal seperti ini diinput?
Secara khusus, apa yang terhubung dengan 3 dan 4? 1 atau 2, atau keduanya 1 dan 2?
sumber