Para pemimpin dunia telah bertemu dan akhirnya mengakui bahwa cara terbaik (dan satu-satunya) untuk menyelesaikan kesengsaraan ekonomi global adalah dengan menghitung berapa banyak mereka berutang satu sama lain dan hanya membayar satu sama lain dengan cek besar. Mereka telah mempekerjakan Anda (ironisnya, dengan tarif kontrak serendah mungkin) untuk mencari cara terbaik untuk melakukannya.
Setelah banyak pertimbangan, dan meminta seseorang untuk menggambar contoh sederhana, mereka telah datang dengan spesifikasi berikut.
Setiap negara diwakili oleh kode ISO 3166-1 alpha-2 mereka : US
untuk AS, AU
untuk Australia, JP
untuk Jepang, CN
untuk Cina dan seterusnya ...
- Buku besar disusun sebagai serangkaian entri negara dan jumlah yang terutang ke masing-masing negara.
- Entri masing-masing negara dimulai dengan ID domain mereka titik dua, dan berapa banyak yang mereka miliki dalam surplus / defisit (dalam miliaran Euro), diikuti oleh tanda titik koma, kemudian daftar negara-negara yang dipisahkan koma, dan berapa banyak (dalam miliaran dolar AS) Euro) mereka berutang.
- Jika suatu negara tidak berutang apa pun kepada negara lain, tidak disebutkan negara itu dimasukkan setelah pemisah titik koma itu.
- Defisit diindikasikan sebagai angka negatif, surplus diindikasikan sebagai angka positif.
- Nilai juga bisa mengapung.
- Buku besar harus diambil dari STDIN. Ujung buku besar ditandai dengan carriage return pada baris kosong. Penghitungan harus dikirim ke STDOUT.
Contoh buku besar:
Input:
AU:8;US:10,CN:15,JP:3
US:14;AU:12,CN:27,JP:14
CN:12;AU:8,US:17,JP:4
JP:10;AU:6,US:7,CN:10
Sistem kemudian menghitung berapa banyak masing-masing negara berutang dan berutang serta menentukan surplus / defisit mereka, misalnya, untuk AU:
AU = 8 (surplus saat ini) -10 (ke AS) -15 (ke CN) -3 (ke JP) +12 (dari AS) +8 (dari CN) +6 (dari JP) = 6
Ketika semua komputasi dilakukan, penghitungan harus ditunjukkan:
Output:
AU:6
US:-5
CN:35
JP:8
Tugas Anda adalah menciptakan sistem ini, yang mampu mengambil sejumlah entri buku besar untuk sejumlah negara dan mampu menentukan seberapa banyak masing-masing negara memiliki defisit / surplus ketika semuanya dibayarkan.
Tes akhir adalah bagi Anda untuk menggunakan kode Anda untuk menyelesaikan utang yang terhutang antara negara-negara berikut dalam kasus uji di bawah ini. Angka-angka ini diambil dari BBC News pada Juni 2011. ( http://www.bbc.com/news/business-15748696 )
Untuk keperluan latihan ini, saya telah menggunakan PDB masing-masing sebagai surplus saat ini ... Harap diingat bahwa ini hanyalah latihan dalam penjaminan kualitas kode ... tidak akan ada pembicaraan mengenai resolusi ekonomi global di sini dalam pertanyaan ini ... Jika Anda ingin berbicara ekonomi, saya yakin ada subdomain lain di SE yang menanganinya ...
US:10800;FR:440.2,ES:170.5,JP:835.2,DE:414.5,UK:834.5
FR:1800;IT:37.6,JP:79.8,DE:123.5,UK:227,US:202.1
ES:700;PT:19.7,IT:22.3,JP:20,DE:131.7,UK:74.9,US:49.6,FR:112
PT:200;IT:2.9,DE:26.6,UK:18.9,US:3.9,FR:19.1,ES:65.7
IT:1200;JP:32.8,DE:120,UK:54.7,US:34.8,FR:309,ES:29.5
IE:200;JP:15.4,DE:82,UK:104.5,US:39.8,FR:23.8
GR:200;DE:15.9,UK:9.4,US:6.2,FR:41.4,PT:7.5,IT:2.8
JP:4100;DE:42.5,UK:101.8,US:244.8,FR:107.7
DE:2400;UK:141.1,US:174.4,FR:205.8,IT:202.7,JP:108.3
UK:1700;US:578.6,FR:209.9,ES:316.6,IE:113.5,JP:122.7,DE:379.3
Sekarang, jadilah penyelamat ekonomi dunia!
Aturan:
- Kode terpendek menang ... ini golf kode ...
- Harap berikan hasil uji kasus utama Anda dengan jawaban kode Anda ...
JP:4100
?Jawaban:
K, 66
.
sumber
Perl,
139137134119112Ini bagian lain dari kode yang berfungsi ... Saya akan mendokumentasikannya nanti.
Kode golf
Dengan kamus (112):
Tanpa kamus (137):
Keluaran
Lihat itu dalam aksi!
http://ideone.com/4iwyEP
sumber
Python,
211185183Output dengan uji kasus utama:
(uji di sini: http://ideone.com/CjWG7v )
sumber
C -
257253 jika tidak ada CR di ujung jalurTergantung pada sizeof (pendek) == 2.
Tidak ada pemeriksaan untuk buffer overflow.
Keluaran:
Kurang bermain golf:
sumber
PHP -
338, 280Harus bekerja dengan versi PHP 5 apa pun.
Golf :
Tidak golf :
Keluaran :
sumber
preg_match_all()
dan kemudian hanya dilingkarkan sekali?perl (184 karakter)
Kode
Keluaran
sumber
Perl -
116114112Keluaran:
Tidak Disatukan:
sumber
C ++ - 1254
Saya menyadari kodenya sangat panjang, tetapi menikmati kesenangannya. Ini adalah golf kode waktu pertama saya, dan saya baru mengenal C ++, jadi saran untuk meningkatkan kode saya sangat dihargai.
Hasil Tantangan Akhir
Kode Tidak Terkunci
sumber
cout << "Output:\n";
... Itu tabungan 20 byte di sana ...AWK -
138120Dan hasilnya
Tidak disatukan
(uji di sini: http://ideone.com/pxqc07 )
sumber
Ruby - 225
Pertama coba dalam tantangan seperti ini, tentu bisa jauh lebih baik ...
Dan hasilnya
sumber
JS,
254240245Yah..aku tahu ini cukup lama tapi ini golf kode kedua saya.
Saran dipersilahkan!
BTW, Javascript yang Menarik mempertahankan urutan elemen dalam hashmaps, jadi, bahkan jika p berisi array kamus, saya dapat mengulangi setiap kamus sebagai array dan saya yakin bahwa elemen pertama dari dikt adalah yang pertama kali dimasukkan. (nama negara yang dirujuk ke baris saat ini)
Tidak Disatukan:
Catatan: input adalah
prompt()
yang harus berupa satu baris. Tetapi jika Anda menyalin / menempelkan teks multi baris (seperti input yang diusulkan) diprompt()
jendela, makaJS
bacalah semuanya.Keluaran:
sumber
z='replace';r={};p=eval(('[{'+prompt()+'}]')[z](/\n/g,'},{')[z](/;/g,','));for(i in p){l=p[i];c=0;for(k in l){if(!c){c=k;r[c]=0;}else{r[c]-=l[k];}};for(j in p){w=p[j][c];if(w!=null)r[c]+=w}};alert(JSON.stringify(r)[z](/"|{|}/g,'')[z](/,/g,'\n'))
:?(w!=null)
sebagai(!w)
!w
bukan ide yang baik untuk memeriksaw!=null
dan skrip tidak berfungsi lagi: hlm. Sekarang saya akan memperbaruinya dengan hasilz="replace";r={};p=eval(("[{"+prompt()+"}]")[z](/\n/g,"},{")[z](/;/g,","));for(i in p){l=p[i];c=0;for(k in l)c?r[c]-=l[k]:(c=k,r[c]=0);for(j in p)w=p[j][c],null!=w&&(r[c]+=w)}alert(JSON.stringify(r)[z](/"|{|}/g,"")[z](/,/g,"\n"))
untuk 229 byte ... Apa yang saya lakukan di sini adalah mengurangiif(!c)
urutan ke operator ternary tunggal, dan saya juga memasukkannya ke dalamfor
loop induknya ... Saya juga telah melakukan sesuatu yang mirip denganfor
loop lainnya ... operator koma dapat bekerja luar biasa untuk bergabung dengan banyak pernyataan dalam satu lingkaran ...JavaScript (ES6)
175,166,161,156,153147Golf
Tidak disatukan
Keluaran
sumber
R[b] ? R[b] += +v : R[b] = +v
keR[b]=R[b]||0+ +v
i=0;i++%2==0?b=v
keb=isNaN(+v)?v:
isNaN(+v)
->!+v
Groovy 315
Tidak Disatukan:
sumber
PHP, 333
Versi tidak disatukan:
sumber