Палички для їжі мутовані з крапками KoTH


13

Основні правила (відмінні від моїх)

Історія

Це 4579 рік, зараз люди мають 2 руки зі 1001 пальцем у кожній. Палички для їжі стали основою поза балами. І у @Dennis є більше представників, ніж @Martin ... Ручні намальовані червоні кола тепер неприйнятні ... Джон Скіт потрапив по 2 трлн. Повторень на кожному веб-сайті SE ... Так страшно, я знаю

Палички для їжі - це ручна гра, яку вирішили. Отже, щоб обійти це, я створив його мутованим. Я збільшила кількість пальців.

Правила гри

Те, як це відтворюється

Усі починаються з 2-х рук. Кожна рука має 1001 пальця. Кожна рука починається з 1 (одного) пальця вгору на кожній руці. Під час своєї черги ви можете "вдарити" рукою інших гравців. Для удару вибираєте 1 з рук, щоб вдарити, і 1 з рук для удару. Рука, яку вдарили зараз, має кількість пальців, яка була їх спочатку І кількість пальців, яку ти мав на руці, в яку ти потрапив.

EX

P1: 1,1 P2: 1,1. P1[0]хіти P2[1]. Тепер пальці є P1:1,1 P2:1,2. Зараз P2[1]хіти p1[0]. Пальці тепер P1: 3,1P2 1,2.

Якщо одна рука піднімається на 1001 пальця вгору або більше, ця рука виявляється поза. Тоді гравець, який вивів руку (на свою чергу), може "розколотися". Розщеплення - це коли ви берете за руку, що знаходиться, і вдвічі зменшуєте кількість пальців (округлюйте їх) і даєте ці пальці іншій руці, отримуючи її назад.

EX

Р1: 1000,2Р2 7,7. P2[0]хіти P1[0]. Оцінка P1: 0,2P2 1,1. P1[1]розбивається на свою чергу і оцінка P1: 1,1і P2 7,7.

Гра закінчується, коли один гравець має дві руки. Очки набираються за кількістю пальців, які має переможець. Більше балів = краще. Невдача не набирає балів.

Є інші правила, які використовуються, але це ті, які тут використовуються.

Усі грають у всіх (круглої робіни)

Кінцева гра

Загальна кількість балів за кожен виграний раунд. Тоді середні бали кожного. Розділіть свою загальну суму на середні бали та отримайте свій остаточний бал. Перемагає більшість очок.

Фактичні правила

Стандартні лазівки

Будь ласка, не намагайтеся вирішити гру. Я насправді повинен мати можливість це запустити: P

Переконайтесь, що бот може швидко працювати. Якщо судити про тривалість раундів, це займе певний час

Усі бібліотеки, необхідні у вашій програмі, повинні знаходитись у бібліотеці python за замовчуванням. Також перерахуйте ті, які вам потрібно імпортувати. Імпорт буде тільки основний імпорт (з математики я: import math)

Відповіді повинні працювати в Python 3.x

Обробник

Ваш бот буде власним файлом Python 3 з playфункцією.

playбудуть передані два списки по два числа кожен. Це число вказує, скільки пальців у кожної руки. Перший список - це ваша власна рука.

Якщо ви вирішите вдарити руку іншого гравця, поверніть список з двох біт. Перший біт - це покажчик руки, яку ви використовуєте для удару ( 0для першого,1 для останнього), а другий біт - індекс руки, яку ви б'єте по супротивнику.

Якщо ви вирішите розділити, поверніть будь-яке інше значення truthy.

Тада!

Контролер можна знайти тут . Збережіть кожного бота у власному файлі та перелічіть ім’я файлу кожного бота (без .py) у botnames.

Заключна примітка:

Ви та інший бот будете по черзі йти першими. Якщо гра не закінчиться за 100 000 (сто тисяч) раундів, гра буде припинена і жоден бот не виграє.

Контролер не захищений від ходу, що приймається назавжди, але зайві накладні витрати будуть сильно нахмурені.



Чи можуть "Стандартні правила KOTH" бути посиланням? І, можливо, "Стандартні лазівки" теж.
трихоплакс

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!Що, значить, ми робимо обчислення для KoTH?
HyperNeutrino

@HyperNeutrino оптимізує виправлення.
Крістофер

4
Денніс має більше , ніж репутацію Мартін прямо зараз . О боже мій, звідки взялися ці зайві 996 пальців ?!
caird coinheringaahing

Відповіді:


6

КодуванняAndAlgorithms

Ця відповідь фактично використовує кодування та алгоритми, на відміну від інших поки що! посилання: imgur (також перемагає всі відповіді, розміщені до цього)

def play(A, B):
    if sum(A) == 1:
        return [A.index(1), B.index(max(B))]
    elif max(A) + max(B) > 1000:
        return [A.index(max(A)), B.index(max(B))]
    elif 0 in A:
        return 1
    elif 0 in B:
        return [A.index(min(A)), 1-B.index(0)]
    else:
        return [A.index(min(A)), B.index(min(B))]

Я отримав цю посилання XD
Крістофер

Це щойно виграло. Він ніколи не втрачав.
Крістофер

Вітаємо! Я думаю, мені доведеться влаштуватися на друге місце. Ваше кодування та алгоритми були сильнішими за мої
Value Ink

3

Увага!

def play(s,o):
 if max(s)+max(o)>1000 and (all(s) or max(s)+min(o)<1001):
  return [s.index(max(s)),o.index(max(o))]
 else:
  return [s.index(min(s)),o.index(min(filter(bool,o)))]if all(s) else 'split'

Застереження не хоче завдавати зайвих клопотів, тому він меншою рукою б'є меншу руку суперника, якщо у нього обидві руки, інакше розщеплюється. Однак CautionBot не дурень, тому, якщо він може вийняти руку супротивника, не одразу ж програючи наступний хід, він зробить це замість свого звичайного ходу.


Неофіційно це перемога
Крістофер

Класно! Ми побачимо, як справи йдуть звідси, тому що я не здивуюсь, коли хтось розробить кращу стратегію. Я просто застосував те, що я розумів як стратегію ванільної палички (будь боягузом і часто розбивайтеся, щоб не бути вбитим) таким чином, щоб найкращим чином відповідати новим правилам (будьте боягузом і низьким ударом, щоб уникнути вбивства, оскільки розбиваєтесь / зливаєтесь, поки ви у обох ваших рук незаконне) lol
Value Ink

3

Еквалайзер

def play(s, o):
    if not all(s):
        return 1
    else:
        return [s.index(max(s)), o.index(min(filter(bool, o)))]

Якщо в еквалайзері відсутня рука, вона розщепиться. В іншому випадку він б’є своїми опонентами найменшу руку своєю найбільшою рукою.


Відповідно до цих мутованих правил, AFAIK ви можете розділити, лише якщо одна рука вийде.
Значення чорнила

О так, я це виправлю.
LyricLy

"Якщо у еквалайзера немає рук ..." ну я маю на увазі, якщо у нього немає рук, то він уже втратив? Але це просто запорожці, візьміть мій +1, щоб компенсувати
Value Ink

3

Агресор

def play(s, o):
    return [s.index(max(s)),o.index(max(o))]if all(s)else 1

Ще один початковий бот - Агресор вдарить по більших руках суперника, чим більшими - своїми руками, якщо обидві руки не порожні; інакше вона розбивається.


2

RandomBot

import random

def play(s, o):
    return [random.randint(0,1)for i in'  ']if all(s)else 1

Для того, щоб почати все, ось бот, який робить випадковий удар, якщо його руки обидва не порожні; інакше розщеплюється.

Гольф, бо чому б ні: 3


Я це виправляв
Крістофер

@Christopher Вибачте, ваш коментар не побачив. --- Щойно ви виправте це, я
видалю

@Christopher Примітка. Я відредагував це у дійсній поданні. Я теж додам ще одне рішення; скажіть, якщо контролер не працює належним чином :)
HyperNeutrino

Приємно випробувати їх
Крістофер

@Christopher Чи правильно працює контролер?
HyperNeutrino

2

Помилка

Так, це ім’я бота.

def play(s, o):
    if max(s)+max(o)>1000:
        return [s.index(max(s)),o.index(max(o))]
    if 0 in s:return ''
    return [s.index(max(s)),o.index(min(o))]

Я прийшов до цього, тестуючи з іншими ботами. Однак він незмінно другий-останній у своїх моделюваннях. Так що з часом я буду робити іншого бота.

Редагувати: Я, здається, не можу написати жодного бота, який перемагає CautionBot, і моє додаткове тестування, схоже, свідчить про те, що це друге найкраще, а не друге найгірше.


1

Марафон

Я підробив код Агресора, наданий "HyperNeutrino", щоб просто вдарити менший з противників двома руками, меншою - його руками. Це звичайно дуже дурна стратегія, але я не можу відмовитись бути у верхній частині діаграми! (Незважаючи на те, що ця діаграма буде втратами)

Я не впевнений, чи буде цей код працювати без помилок, оскільки я не зміг його протестувати через роботу. Однак він повинен працювати бездоганно.

def play(s, o):
     return [s.index(min(s)),o.index(min(o))]if all(s)else 1

Приємна перша відповідь! Ви вибрали чудове запитання: P (без упереджень)
Крістофер

Дякую :) Я був досить нервовий, тому що не був впевнений, чи дозволено чи налаштовувати чужий код, як я, чи ні. Я припускаю, що поки ви зробите це очевидним. І я хотів би спробувати зробити той, який би просто зіграв найбільшу руку проти найбільших супротивників, але HyperNeutrino точно мене побив! ха-ха
Йорданія

Так. На цьому SE часто використовується код настроювання: P
Крістофер

Класна відповідь! Одне, про що я хвилююся (не можу перевірити це зараз), - це те, що я не знаю, як контролер реагуватиме, якщо ви спробуєте вдарити порожню руку, або як це враховує правила.
Значення чорнила

1
Це дуже схоже на Еквалайзер, але Еквалайзер перевірить, чи не потрапить у порожню руку суперника, якщо він присутній. @LyricLy
HyperNeutrino
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.