У каждого игрока есть номер. Может быть, ваш самый дальний из них?
Требования
Напишите именованную функцию Java, Python 2 или Ruby, choose()
которая принимает три аргумента:
- целое число - количество завершенных раундов
- целое число - количество игроков
- массив строк - результаты каждого предыдущего раунда
- каждая строка представляет собой разделенный пробелами список целых чисел, отсортированный по убыванию
Например, choose(2, 4, ["4 93 93 174", "1 84 234 555"])
означает:
- было уже два раунда (это третий тур)
- в общей сложности четыре игрока
- в первом туре были выбраны 4, 93, 93, 174
- во втором туре были выбраны номера 1, 84, 234, 555
Вы должны вернуть целое число от 1 до 999 (включительно).
Для каждого другого игрока ваш счет является квадратным корнем расстояния между вашим числом и их числом. Ваша оценка за раунд является суммой всех этих оценок.
Будет сыграно 100 раундов. Самый высокий общий балл выигрывает!
правила
- Ваш код не может использовать любые операции ввода-вывода, включая консоль, файлы, сеть и т. Д.
- Вы не можете вмешиваться в программу управления или любых других игроков.
- Программы, которые выглядят так, как будто они нарушают вышеуказанные правила, будут исключены.
- Каждый вызов функции должен занимать на моем компьютере менее пяти секунд (Intel Core i5 2450M с 8 ГБ ОЗУ).
- Если программа выдает исключение или возвращает недопустимое значение, оно будет обрабатываться так, как будто оно вернуло 1.
- Каждый пользователь может представить не более одной программы.
Разнообразный
- Управляющая программа есть на GitHub .
- Есть три встроенных игрока. Их можно найти в этом ответе .
- Победитель будет выбран 28 января.
Leaderboard
Победитель - консерватор .
Похвальная грамота Густаву , игроку с самым высоким счетом и непостоянной стратегией.
- Консерватор - 36226
- Высокий - 36115
- FloorHugger - 35880
- NumberOne - 35791
- Завышенный показатель - 35791
- Густав - 35484
- Историк - 35201
- Пробоотборник - 34960
- Инкрементатор - 34351
- JumpRightIn - 34074
- Викри - 34020
- Подросток - 33907
- Ранду - 33891
- Тяжелоатлет - 33682
- Посредник - 33647
- BounceInwards - 33529
- Настя Математик - 33292
- Джемпер - 33244
- Подражатель - 33049
Полные результаты можно найти здесь . (Я рекомендую отключить перенос текста.)
king-of-the-hill
Ypnypn
источник
источник
Ответы:
Питон, консерватор
Так как каждое исключение выбрасывает 1, оно как можно дальше от него. Делает свое состояние за счет слабых.
Забавный факт: я думал об улучшении этого, но не мог найти лучший способ чем просто скрыться в углу.
источник
Номер один, Java
Название объясняет это полностью.
источник
Питон, древнеисторический
Твердо верит, что будущее будет точно таким же, как и прошлое, но верит, что последний раунд слишком недавний, чтобы быть его историческим, поэтому он просто перебирает 1 - 999 и выбирает то, что было бы лучшим в предыдущих раундах, кроме последнего. Первые 2 раунда возвращают 500.
источник
Питон, Викри
Составляет список чисел, которые часто игрались, предполагает, что все остальные будут играть оптимально, и выбирает второй лучший выбор, учитывая список.
Например, если наиболее распространенными являются числа
[1, 990, 999]
, то Викри вставляет оптимальную игру 200, чтобы дать[1, 200, 990, 999]
, а затем выбирает лучший вариант для нового массива (который 556).источник
Ява, Заверитель
Как следует из названия, эта программа предполагает, что все другие программы будут пытаться играть «хорошо», выбирая лучший ответ на основе последнего раунда - так что этот «переоценщик» всегда выбирает наихудшую возможную позицию на основе предыдущего раунда.
источник
Ява - Тяжелоатлет
Выполните циклы по 1-999, чтобы выяснить, что будет лучшим для каждого раунда. Взвешивает их в соответствии с последним значением (последние раунды имеют больший вес) и возвращает его наилучшее общее предположение. Будем надеяться, что если в последующем раунде будут сформированы паттерны, это будет возможно.
Изменить: теперь с + Inf% больше рекурсии! Неспособность сохранить / сохранить / посмотреть то, что вы выбрали в предыдущих раундах, является проблемой. Принимая свои собственные входы во внимание столовых вас при попытке выяснить , что другие будут делать. Итак, давайте вычислим это! Теперь он будет повторяться, чтобы выяснить, что он выбрал в предыдущем раунде, и игнорировать это при расчете следующего хода.
Обратите внимание, что он действительно игнорирует свой собственный вход из последнего хода, но, так как он взвешен на самый высокий, кажется, что он работает нормально. Это можно исправить с помощью немного больше работы, но я подожду, пока таблица лидеров не выяснит, нужно ли это.
источник
Ruby, Copycat
Просто возвращает тот номер, который выиграл в прошлый раз.
источник
Рубин, JumpRightIn
Это, наверное, самая простая стратегия. Он находит самый большой разрыв в последнем раунде и выбирает число прямо в середине этого разрыва.
источник
Густав (Питон 2)
Это довольно прямая мета-стратегия, бесстыдно скопированная из одного из моих старых ответов в аналогичном вызове KotH. Он рассматривает несколько простых стратегий, смотрит, как они выполнили бы все предыдущие раунды, а затем следует наивысшую оценку в следующем раунде.
Теперь я понимаю, что алгоритм все еще имеет некоторые недостатки. Например, он может продолжать «преследовать себя», потому что он не отличает свои собственные движения от движений противников. Однако пока я оставлю это так.
источник
Питон, Ранду
Числа, выбранные самым непродуманным генератором случайных чисел .
источник
Следующие три программы являются встроенными.
Высокий (Рубин)
Инкремент (Java)
FloorHugger (Python)
источник
Python, Sampler
Из списка мест выберите тот, который находится дальше всего от недавно использованных номеров, игнорируя предыдущий ход.
источник
Java, BounceInwards
Начиная с 1, он постепенно приближается к 500, прыгая между верхним и нижним опциями.
источник
НастяМатематик (Ява)
Исследует последние два раунда (если лучшие числа были 70 и 80, он выведет 90). Это противно, потому что он пытается взять как можно больше цифр, чтобы победить своих противников.
источник
Python - я не хочу думать об имени ...
Если среднее число чисел, выбранных в прошлых раундах, меньше 500, выбирается 999. В противном случае выбирается 1.
источник
Питон, посредник (по материалам консерватора @clabacchio)
После того, как я заметил, что верхний край получил высокие баллы (и превзошел нижний), я подумал, может ли быть что-нибудь хуже, чем просто попасть в середину.
источник
Джемпер (Рубин)
Чередуется между нижней, средней и верхней. (5500995)
источник