MISE À JOUR: Annonces pour les participants .
MISE À JOUR 2: Résultats intermédiaires et annonces .
Hola annonce à nouveau un concours de programmation! Les gagnants sont attendus:
- Première place: 3000 USD.
- Deuxième place: 2000 USD.
- Troisième place: 1000 USD.
- Le jury peut à sa discrétion décerner un prix spécial de 400 USD.
- Si vous envoyez à quelqu'un un lien vers ce concours en mettant notre adresse dans CC et que cette personne remporte le prix, vous recevrez la moitié du montant du prix (bien sûr, au détriment de la récompense du gagnant). Pour un gagnant, une seule personne peut recevoir une telle récompense - celle qui a envoyé le lien en premier.
Les auteurs de décisions intéressantes seront invités à des entretiens.

Les règles
Les conditions du concours en anglais sont disponibles
sur GitHub . Ci-dessous, une traduction en russe.
- Soumettez des solutions en utilisant ce formulaire . Aucune décision n'est prise par e-mail.
- Les décisions sont prises jusqu'au 20 juillet 2018 , 23:59:59 UTC.
- Les résultats préliminaires seront publiés le 27 juillet 2018 et l'annonce finale des gagnants - le 3 août 2018 .
- Vous pouvez envoyer des décisions plusieurs fois, mais pour chaque participant, seule la décision la plus récente sera prise en compte, envoyée avant la date limite d'acceptation du travail.
- Pour les tests, nous utiliserons Node.js v10.4.1 (la version actuelle au moment de la publication). Vous pouvez utiliser toutes les fonctionnalités linguistiques prises en charge par l'interpréteur dans la configuration standard.
- Tout le code de solution doit être dans un seul fichier JS .
- La solution devrait être sur JS. Si vous préférez CoffeeScript ou des langages similaires, vous devez traduire la solution dans JS avant de soumettre.
- Si votre fichier JS est un produit de génération, de minification et / ou de compilation à partir d'autres langages comme CoffeeScript, veuillez joindre une archive avec les codes source, ainsi que, de préférence, une description de l'approche. Le contenu de cette archive sera publié, mais nous ne le testerons pas.
- Vous ne pouvez pas charger de modules , même ceux inclus dans le Node.js. standard
- Un participant ne peut utiliser qu'une seule adresse e-mail pour soumettre une décision. L'envoi de plusieurs décisions en collusion à partir d'adresses différentes est interdit; Toutes les décisions participant à un tel programme seront disqualifiées.
- Nous devons connaître votre nom complet, mais si vous le souhaitez, nous publierons un alias à la place. Nous garderons votre adresse e-mail confidentielle.
- Les employés actuels et anciens de Hola et les membres de leur famille immédiate ne peuvent participer que hors compétition, sans réclamer de prix.
- Posez des questions sur l'état de la tâche dans les commentaires sur cette publication ou par email .
Commerce
Disons que nous avons un livre, deux chapeaux et trois balles. Vous et un autre participant devez décider comment partager ce bien entre vous deux. Pour vous, le livre a une valeur de 4 $, chaque balle est de 2 $ et les chapeaux n'ont aucune valeur. Pour un partenaire, ces mêmes objets peuvent avoir une valeur différente, mais vous savez que tous les objets ensemble pour lui sont aussi précieux qu'ils le sont pour vous - dans ce cas, 10 $.
Vous et le partenaire, tour à tour, suggérez une section pour les articles. À son tour, l'un de vous peut soit accepter l'offre précédente (sauf s'il s'agit de la toute première étape), soit faire une contre-offre. Les négociations sont limitées à 5 tours, au total, les deux participants peuvent présenter jusqu'à 10 propositions. Si un accord est conclu pendant cette période, chacun de vous recevra la valeur totale des articles qui le quitteront (chacun selon ses propres facteurs de valeur). Si aucun accord n'est trouvé, c'est-à-dire que le dernier mot du dernier tour est une contre-offre et non un consentement, alors personne n'obtient rien. La même chose se produit si l'un des partenaires interrompt les négociations.
Voici un exemple de la façon dont les négociations peuvent se dérouler:
- Vous: je veux un livre et deux balles; Vous obtiendrez une balle et les deux chapeaux.
- Partenaire: je ne suis pas d'accord. Je veux toutes les boules et un chapeau; vous obtiendrez un livre et un chapeau.
- Vous: je ne suis pas d'accord. Je veux un livre et une balle; vous obtiendrez deux balles et les deux chapeaux.
- Partenaire: je suis d'accord.
Vous ne le saviez pas, mais pour le partenaire la valeur des articles était la suivante: à 2 $ par balle, à 2 $ par chapeau, le livre n'a aucune valeur. L'entente vous a rapporté 6 $ et 8 $ au partenaire.
En général, il existe deux types d'objets ou plus et un nombre entier positif d'objets de chaque type. La valeur de chaque type d'objet pour chacun des partenaires est un entier non négatif. La valeur totale de tous les objets est la même pour les deux partenaires, bien que les valeurs des objets individuels varient. La proposition de division devrait répartir entre les partenaires tous les objets sans trace; les objets individuels ne sont pas fragmentés.
Votre tâche consiste à écrire un script qui cherche à conclure un accord avec la valeur la plus élevée possible (pour vous-même).
Des solutions
La solution est un module Node.js sans dépendances. L'export du module doit être une classe:
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 , , .
, , ,
.
!