مسابقة البرمجة: التجارة

تحديث: إعلانات للمشاركين .
تحديث 2: النتائج والإعلانات المؤقتة .

Hola تعلن عن مسابقة البرمجة مرة أخرى! الفائزون بالجوائز المتوقعة:

  1. المركز الأول: 3000 دولار أمريكي.
  2. المركز الثاني: 2000 دولار أمريكي.
  3. المركز الثالث: 1000 دولار أمريكي.
  4. يجوز للجنة التحكيم حسب تقديرها أن تمنح جائزة خاصة بقيمة 400 دولار أمريكي.
  5. إذا أرسلت شخصًا رابطًا إلى هذه المسابقة من خلال وضع عنواننا في نسخة ، وقد حصل هذا الشخص على الجائزة ، فستتلقى نصف مبلغ الجائزة (بالطبع ، ليس على حساب جائزة الفائز). لفائز واحد ، يمكن لشخص واحد فقط الحصول على هذه الجائزة - الشخص الذي أرسل الرابط أولاً.

سيدعى مؤلفو القرارات المثيرة للاهتمام لإجراء مقابلات.



القواعد


تتوفر شروط المسابقة باللغة الإنجليزية على GitHub . فيما يلي ترجمة إلى الروسية.
  • إرسال الحلول باستخدام هذا النموذج . لا يتم اتخاذ قرارات عن طريق البريد الإلكتروني.
  • يتم اتخاذ القرارات حتى 20 يوليو 2018 ، 23:59:59 UTC.
  • سيتم نشر النتائج الأولية في 27 يوليو 2018 ، والإعلان النهائي عن الفائزين - 3 أغسطس 2018 .
  • يمكنك إرسال قرارات عدة مرات ، ولكن من كل مشارك سيتم النظر في القرار الأخير فقط ، يتم إرساله قبل الموعد النهائي لقبول العمل.
  • للاختبار ، سنستخدم Node.js v10.4.1 (الإصدار الحالي في وقت النشر). يمكنك استخدام أي ميزات لغة يدعمها المترجم في التكوين القياسي.
  • يجب أن يكون كل رمز الحل في ملف JS واحد .
  • يجب أن يكون الحل على JS. إذا كنت تفضل CoffeeScript أو لغات مشابهة ، يجب عليك ترجمة الحل في JS قبل الإرسال.
  • إذا كان ملف JS الخاص بك نتاجًا للإنشاء و / أو التصغير و / أو التجميع من لغات أخرى مثل CoffeeScript ، فيرجى إرفاق أرشيف يحتوي على رموز المصدر ، ويفضل وصف المنهج. سيتم نشر محتويات هذا الأرشيف ، لكننا لن نختبره.
  • لا يمكنك تحميل أي وحدات ، حتى تلك المدرجة في Node.js.
  • قد يستخدم مشارك واحد عنوان بريد إلكتروني واحد فقط لتقديم قرار. يحظر إرسال قرارات متعددة بالتواطؤ من عناوين مختلفة ؛ سيتم استبعاد جميع القرارات المشاركة في مثل هذا المخطط.
  • نحتاج إلى معرفة اسمك الكامل ، ولكن إذا أردت ، فسننشر اسمًا مستعارًا بدلاً من ذلك. سنحافظ على سرية عنوان بريدك الإلكتروني.
  • يمكن لموظفي Hola الحاليين والسابقين وأفراد أسرهم المباشرين المشاركة فقط خارج المنافسة ، دون المطالبة بجوائز.
  • اطرح أسئلة حول حالة المهمة في التعليقات على هذا المنشور أو عبر البريد الإلكتروني .

التجارة


لنفترض أن لدينا كتابًا وقبعتين وثلاث كرات. يجب عليك أنت ومشارك آخر تحديد كيفية مشاركة هذا الخير بينكما. بالنسبة لك ، الكتاب يحتوي على قيمة 4 دولارات ، كل كرة 2 دولار ، والقبعات ليس لها قيمة. بالنسبة للشريك ، قد يكون لهذه الأشياء نفسها قيمة مختلفة ، لكنك تعلم أن جميع الأشياء معًا له قيمة مثلها بالنسبة لك - في هذه الحالة 10 دولارات.

تتناوب أنت والشريك على اقتراح قسم للعناصر. في المقابل ، يمكن لأحدكم قبول العرض السابق (ما لم يكن المرحلة الأولى) ، أو تقديم عرض مضاد. تقتصر المفاوضات على 5 جولات ، في المجموع ، يمكن للمشاركين تقديم ما يصل إلى 10 مقترحات. إذا تم التوصل إلى اتفاق خلال هذه الفترة ، فسيحصل كل واحد منكم على القيمة الإجمالية للعناصر التي تركته (كل منها وفقًا لعوامل القيمة الخاصة به). إذا لم يتم التوصل إلى اتفاق ، أي أن الكلمة الأخيرة في الجولة الأخيرة هي عرض مضاد ، وليس موافقة ، فلا أحد يحصل على أي شيء. يحدث الشيء نفسه إذا قام أحد الشركاء بقطع المفاوضات.

فيما يلي مثال لكيفية سير المفاوضات:

  1. أنت: أريد كتابا وكرتين. ستحصل على كرة واحدة وكلا القبعات.
  2. الشريك: لا أوافق. أريد كل الكرات وقبعة واحدة ؛ ستحصل على كتاب وقبعة واحدة.
  3. أنت: لا أوافق. أريد كتابا وكرة واحدة. ستحصل على كرتين وكلا القبعات.
  4. الشريك: أوافق.

لم تكن تعرف هذا ، ولكن بالنسبة للشريك كانت قيمة العناصر كما يلي: بسعر 2 دولار للكرة ، بسعر 2 دولار للقبعة ، الكتاب ليس له قيمة. جلبت الاتفاقية 6 دولارات لك و 8 دولارات للشريك.

بشكل عام ، هناك نوعان أو أكثر من الكائنات وعدد صحيح موجب من الكائنات من كل نوع. قيمة كل نوع كائن لكل من الشركاء عدد صحيح غير سالب. القيمة الإجمالية لجميع الكائنات هي نفسها لكلا الشريكين ، على الرغم من اختلاف قيم الكائنات الفردية. يجب أن يوزع اقتراح التقسيم بين الشركاء جميع الأشياء بدون أثر ؛ الأشياء الفردية ليست مجزأة.

مهمتك هي كتابة سيناريو يسعى إلى إبرام صفقة بأعلى قيمة ممكنة (لنفسك).

الحلول


الحل هو وحدة Node.js بدون تبعيات. يجب أن يكون تصدير الوحدة النمطية فئة:

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 , , .

, , , .

!

Source: https://habr.com/ru/post/ar414723/


All Articles