Ada "permainan" yang ada di mana bajak laut secara rasional membagi koin emas sesuai aturan tertentu. Mengutip dari Wikipedia :
Ada 5 perompak yang rasional, A, B, C, D, dan E. Mereka menemukan 100 koin emas. Mereka harus memutuskan bagaimana cara mendistribusikannya.
Perompak memiliki urutan senioritas yang ketat: A lebih unggul dari B, yang lebih tinggi dari C, yang lebih tinggi dari D, yang lebih tinggi dari E.
Aturan distribusi dunia bajak laut adalah: bahwa bajak laut paling senior harus mengusulkan distribusi koin. Perompak, termasuk pengusul, kemudian memilih apakah akan menerima distribusi ini. Dalam hal suara seri, pengusul memiliki suara casting. Jika distribusi diterima, koin dicairkan dan permainan berakhir. Jika tidak, pengusul dilempar ke laut dari kapal bajak laut dan mati, dan bajak laut paling senior berikutnya membuat proposal baru untuk memulai sistem lagi.
Bajak laut mendasarkan keputusan mereka pada tiga faktor. Pertama-tama, setiap bajak laut ingin bertahan hidup. Kedua, mengingat kelangsungan hidup, setiap bajak laut ingin memaksimalkan jumlah koin emas yang diterima masing-masing. Ketiga, masing-masing bajak laut akan lebih suka membuang yang lain ke laut, jika semua hasil lainnya akan sama. Perompak tidak saling mempercayai, dan tidak akan membuat atau menghormati janji antara perompak selain dari rencana distribusi yang diusulkan yang memberikan sejumlah koin emas untuk masing-masing perompak.
Tantangan
Ambil sebagai bilangan bulat n
, 1 <= n <= 99, di mana n
jumlah bajak laut - dan output distribusi koin, dimulai dengan bajak laut pertama.
Kasus uji (baris pertama adalah input; output kedua):
1
100
2
100 0
3
99 0 1
5
98 0 1 0 1
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
n < 100
? Kapal bajak laut yang terlalu banyak staf dan kurang disepuh membutuhkan bantuan distribusi juga.Jawaban:
Jelly ,
1110 byteCobalah online! atau verifikasi semua kasus uji sekaligus .
Bagaimana itu bekerja
Untuk input n , tugas bermula untuk membuat daftar x, 0, 1, 0,… panjang n yang jumlahnya 100 .
sumber
Python, 33 byte
Menghitung nilai pertama, menambahkan beberapa
0, 1, 0, 1...
, memotong panjangn
.Catatan yang
-n/2+101
tidak dapat disingkat menjadi101-n/2
karena unary dan binary-
memiliki prioritas yang berbeda: yang pertama diuraikan sebagai(-n)/2
dan yang terakhir sebagai101-(n/2)
.Rekursi jauh lebih lama (45):
sumber
MATL , 12 byte
Ini menggunakan versi saat ini (9.2.2) dari bahasa / kompiler, yang lebih awal dari tantangan ini.
Contoh
Penjelasan
sumber
Pyth, 13 byte
Suite uji .
sumber
Python,
6258 byteEDIT: Senang saya membuatnya satu-liner. Tapi saya kalah untuk Python. Karena itu, ini hanya untuk referensi. Terima kasih @Zgarb
Dibutuhkan input, membuat paritas daftar semua angka dari 1 hingga i. Kemudian atur elemen pertama di i ke 101-sum (n) dan cetak.
Coba di sini
sumber
Javascript ES6, 45 byte
Terima kasih kepada @Neil selama 1 byte yang disimpan!
sumber
202-a>>1
menghemat satu byte.𝔼𝕊𝕄𝕚𝕟, 14 karakter / 26 byte
Try it here (Firefox only).
Tidak buruk, tapi juga tidak baik ...
Penjelasan
sumber
Serius,
2317 byteEDIT : Terima kasih @quintopia
Menggunakan pendekatan yang sama dengan jawaban Python saya, tetapi saya melakukan modulo 2 menggunakan pemetaan, dan beberapa kali, saya memutar tumpukan saya.
Penjelasan :
Kode ini mendorong input (saya akan menyebutnya
i
). Selanjutnya mendorongrange(1,i+1)
dan membuat suatu fungsi. Kemudian mendorong 2, memutar tumpukan, dan akhirnya mengambil modulo.Selanjutnya, petakan fungsi ini ke rentang yang dapat diubah. Ini memberikan paritas dari setiap elemen dalam daftar.
Akhirnya, duplikat tumpukan, jumlah daftar paritas, tekan 2, 10 ^ 2, dan 100 + 1, dan kurangi jumlahnya (saya sebut nilai ini
n
). Selanjutnya kode mendorong 0, memutar tumpukan dengan 1, dan menetapkan elemen indeks 0 daftar ke n. Daftar yang dihasilkan dicetak secara implisit.sumber
,R`2@%`M;Σ2╤u-0(T
Japt, 14 byte
Namun tantangan lain di mana saya menemukan diri saya berharap untuk built-in yang baru saja saya pertimbangkan untuk menambahkan ...
Cobalah online!
sumber
Actionscript 3, 87 byte
function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}
Ini bukan bahasa golf terbaik, tapi saya senang memposting jawaban as3.
sumber
05AB1E , 12 byte (Tidak kompatibel )
Cobalah online!
sumber
s)˜
bisa¸ì
.Perl
514944 bytePerlu opsi perlrun berikut
-E
sumber
QBIC ,
2825 bytePenjelasan
sumber