UPDATE: Pengumuman untuk peserta .
UPDATE 2: Hasil sementara dan pengumuman .
Hola Mengumumkan Kontes Pemrograman Lagi! Pemenang diharapkan hadiah:
- Tempat pertama: 3000 USD.
- Tempat kedua: 2000 USD.
- Tempat ketiga: 1000 USD.
- Juri dapat dengan kebijaksanaannya memberikan hadiah khusus sebesar 400 USD.
- Jika Anda mengirim seseorang tautan ke kontes ini dengan memasukkan alamat kami di CC, dan orang ini menerima hadiah, Anda akan menerima setengah dari jumlah hadiah (tentu saja, tidak merusak penghargaan pemenang). Untuk satu pemenang, hanya satu orang yang dapat menerima penghargaan seperti itu - orang yang mengirim tautan terlebih dahulu.
Penulis keputusan menarik akan diundang untuk wawancara.

Aturannya
Ketentuan kompetisi dalam bahasa Inggris tersedia
di GitHub . Di bawah ini adalah terjemahan ke bahasa Rusia.
- Kirim solusi menggunakan formulir ini . Tidak ada keputusan yang dibuat melalui email.
- Keputusan diambil hingga 20 Juli 2018 , 23:59:59 UTC.
- Hasil awal akan dipublikasikan 27 Juli 2018 , dan pengumuman final para pemenang - 3 Agustus 2018 .
- Anda dapat mengirim keputusan beberapa kali, tetapi dari masing-masing peserta hanya keputusan terbaru yang akan dipertimbangkan, dikirim sebelum batas waktu untuk menerima pekerjaan.
- Untuk pengujian, kami akan menggunakan Node.js v10.4.1 (versi saat ini pada saat publikasi). Anda dapat menggunakan fitur bahasa apa pun yang didukung oleh juru bahasa dalam konfigurasi standar.
- Semua kode solusi harus dalam satu file JS .
- Solusinya harus di JS. Jika Anda lebih suka CoffeeScript atau bahasa serupa, Anda harus menerjemahkan solusinya dalam JS sebelum mengirimkan.
- Jika file JS Anda merupakan produk generasi, minifikasi, dan / atau kompilasi dari bahasa lain seperti CoffeeScript, silakan lampirkan arsip dengan kode sumber, serta, lebih disukai, deskripsi pendekatan. Isi arsip ini akan dipublikasikan, tetapi kami tidak akan mengujinya.
- Anda tidak dapat memuat modul apa pun , bahkan yang termasuk dalam Node.js. standar
- Satu peserta dapat menggunakan hanya satu alamat email untuk mengirim keputusan. Mengirim beberapa keputusan secara kolusi dari alamat yang berbeda dilarang; Semua keputusan yang berpartisipasi dalam skema semacam itu akan didiskualifikasi.
- Kami perlu tahu nama lengkap Anda, tetapi jika Anda mau, kami akan menerbitkan alias. Kami akan menjaga kerahasiaan alamat email Anda.
- Karyawan Hola saat ini dan mantan dan anggota keluarga dekat mereka hanya dapat berpartisipasi di luar kompetisi, tanpa mengklaim hadiah.
- Ajukan pertanyaan tentang kondisi tugas dalam komentar di publikasi ini atau melalui email .
Perdagangan
Katakanlah kita punya buku, dua topi dan tiga bola. Anda dan peserta lain harus memutuskan bagaimana membagikan barang ini di antara Anda berdua. Bagi Anda, buku memiliki nilai $ 4, setiap bola adalah $ 2, dan topi tidak memiliki nilai. Untuk pasangan, objek yang sama ini mungkin memiliki nilai yang berbeda, tetapi Anda tahu bahwa semua objek bersama baginya sama berharganya dengan Anda - dalam hal ini $ 10.
Anda dan mitra bergiliran menyarankan bagian untuk item. Pada gilirannya, salah satu dari Anda dapat menerima tawaran sebelumnya (kecuali itu adalah tahap pertama), atau melakukan penawaran balasan. Negosiasi dibatasi hingga 5 putaran, secara total, kedua peserta dapat mengajukan hingga 10 proposal. Jika kesepakatan tercapai selama waktu ini, maka masing-masing dari Anda akan menerima nilai total dari barang yang meninggalkannya (masing-masing sesuai dengan faktor nilainya sendiri). Jika kesepakatan tidak tercapai, yaitu, kata terakhir di babak terakhir adalah tawaran balasan, dan bukan persetujuan, maka tidak ada yang mendapatkan apa pun. Hal yang sama terjadi jika salah satu mitra menyela negosiasi.
Berikut adalah contoh bagaimana negosiasi dapat berjalan:
- Anda: Saya ingin buku dan dua bola; Anda akan mendapatkan satu bola dan kedua topi.
- Mitra: Saya tidak setuju. Saya ingin semua bola dan satu topi; Anda akan mendapatkan buku dan satu topi.
- Anda: Saya tidak setuju. Saya ingin buku dan satu bola; Anda akan mendapatkan dua bola dan kedua topi.
- Mitra: Saya setuju.
Anda tidak mengetahui hal ini, tetapi bagi mitra nilai barang adalah sebagai berikut: $ 2 per bola, $ 2 per topi, buku tidak memiliki nilai. Perjanjian tersebut membawa $ 6 kepada Anda dan $ 8 kepada mitra.
Secara umum, ada dua atau lebih jenis objek dan bilangan bulat positif dari setiap jenis objek. Nilai setiap jenis objek untuk masing-masing mitra adalah bilangan bulat non-negatif. Nilai total semua objek adalah sama untuk kedua mitra, meskipun nilai objek individual berbeda-beda. Proposal untuk divisi harus mendistribusikan di antara mitra semua objek tanpa jejak; objek individual tidak terfragmentasi.
Tugas Anda adalah menulis skrip yang berupaya menyimpulkan kesepakatan dengan nilai setinggi mungkin (untuk Anda sendiri).
Solusi
Solusinya adalah modul Node.js tanpa dependensi. Ekspor modul harus berupa kelas:
module.exports = class {
constructor(me, counts, values, max_rounds, log){
..
}
offer(o){
...
}
}
. :
me
— 0, , 1, .counts
— , . 2 10 .values
— , counts
, .max_rounds
— ( ).log
— , (console.log
).
offer
, .
o
— ,
counts
. , . , ,
o
undefined
.
offer
undefined
, ( ,
o
undefined
). ,
counts
, , . ,
o
,
offer
.
1 . , , , , .
, , .
example.js , . , ; , .
log
.
haggle.js -, .
--help
, . ( ,
npm install
src
.)
, . , , , , , , . . , «» «», , .
: 3 , 6 , $10, 5 . , , .
c3.large (. ) Amazon AWS Ubuntu 14.04 (amd64). .
, ; (
). , , , (
--log
).
, . -: «», .
(3 , 6 , $10, 5 ). 1 , . :
wss://hola.org/challenges/haggling/arena/standard
haggle.js
, - .
--id
: , .
.
. «» ,
.
— . , . - , .
, , -, , UNIX shell:
while true; do node haggle.js --id me@example.com:1234abcd myscript.js wss://hola.org/challenges/haggling/arena/standard; done
. !
, , . , ; , ; CoffeeScript , , . README (-). tar.gz, tar.bz2 zip. , ( JS-, ).
JS- 64 . , , - «» . 64 , , .
, , ,
.
!