Poll

Считаете ли Вы, что игра «Pearls before swine» являтся игрой для интеллектуалов?

Да, эта игра требует определенного интеллектуального развития
1 (33.3%)
Да, но здесь играет свою роль не интеллект, а математические способности и память
0 (0%)
Не знаю, пробовал играть самостоятельно, но без подсказки быстро проигрываю
0 (0%)
Пробовал играть самостоятельно, но интересней смотреть как играет бот
1 (33.3%)
Нет, это совсем не игра, по сравнению со стрелялками это совершенно скучно
1 (33.3%)

Total Members Voted: 3

Author Topic: «Pearls before swine»  (Read 15312 times)

0 Members and 1 Guest are viewing this topic.

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
«Pearls before swine»
« on: November 23, 2018, 04:00:35 PM »
Вот занятная интеллектуальная игруха на сайте http://www.transience.com.au/pearl3.html.
Интересно, кто-нибудь пытался с помощью КМ создать достойного противника Хуану? Такого, чтоб сам играл с ним, не проигрывая.


Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: «Pearls before swine»
« Reply #1 on: November 27, 2018, 11:31:05 PM »
Задачка, конечно, оригинальная и занятная. Но только одна проблема - перед тем, как писать код, надо четко понимать логику игры. По большому счету, реально написать может лишь тот, кто превосходно в эту игру играет вживую (ну если речь не про сбор информации, проведение сотен неудачных игр со случайным результатом, и записывании под каждый уровень нескольких  -в зависимости от поведения противника- сработавших алгоритмов).
Первый вариант не смогу, хоть игра и математическая (т.е. один неверный ход  - и ты проиграл), но ближе чем за 3 хода до конца не могу предугадать, кто кого.  Стратегий увидела несколько - если 2 строки - то оставлять противнику поровну в строчках (доведение до ситуации 2-2). При трех строчках - если в 1 строке 1 шарик, то делать так, чтобы сумма его и второй строки была равна третьей. И перевод ситуации в 1-2-3, или 2-2, или 1-1-1. Ещё кучу правил понять не удалось - хотя и полчаса там провисела, дошла лишь до 7.
Второй вариант - поиск экспериментальным путем правильных решений  и их запись для каждого уровня. Если честно, немного лениво это делать... Но если хотите, начинайте, ошибки подправить поможем. А как соберете мозайку насчет выигрышной стратегии игры, расскажите нам  - глядишь и поймем, как выигрывать незнакомые раунды и сделать бот по первому варианту)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #2 on: November 28, 2018, 12:14:26 AM »
Ещё кучу правил понять не удалось - хотя и полчаса там провисела, дошла лишь до 7.

 :o  :o  :o  :(  :-[

Я сейчас тоже гдето пол часа как прочел твой пост и глянул что там за игруля.

Я с трудом смог пройти второй уровень, ито с помощью твоих подсказок.  >:( Мозг вспух, щяс не смогу уснуть...   :'(

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: «Pearls before swine»
« Reply #3 on: November 28, 2018, 12:29:34 AM »
 

 :o  :o  :o  :(  :-[

Я сейчас тоже гдето пол часа как прочел твой пост и глянул что там за игруля.

Я с трудом смог пройти второй уровень, ито с помощью твоих подсказок.  >:( Мозг вспух, щяс не смогу уснуть...   :'(

Понимаю и сочувствую) Почему-то тоже не смогла уснуть сразу после ответа, думала-гадала, ну и  решила, что раз математика, кто-то стратегию наверняка уже выложил. В общем, оказалось  ларчик открывается просто и со вкусом.
1. Прежде, чем дойти до позиций 1-2-3, 1-1-1, 2-2, надо считать жемчужины в двоичной системе счисления, написав числа друг под другом.
Как-то так: 
ч.1. https://youtu.be/Ajku3V0s6pU
ч.2. https://youtu.be/LcSZLtcUiE4

Теперь можно спать спокойно  ;D)

P.S. Ну может больше, чем полчаса. И зависала периодически на раундах, даже ранее пройденных. Просто сразу приняла за данность, что бота не переиграть, но он знает, что делать. Потому делала случайный ход, а после проигрыша, пыталась "съобезъянничать" его ходы (вернее подставить перед ним его же комбинацию), не считая особо ничего. С 5-10 раза обычно раунд поддавался. Сразу решила, что понимать там бессмысленно - для анализа попросту нет базы, а подсказать, в правильном ли направлении мыслю некому.  А так получился "китайский метод определения пола цыплят" или что-то в этом духе (пока не дошли до больших цифр, где он уже не сработал).
« Last Edit: November 28, 2018, 01:16:30 AM by Qwerry »

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: «Pearls before swine»
« Reply #4 on: November 28, 2018, 12:43:51 PM »
Вот занятная интеллектуальная игруха на сайте http://www.transience.com.au/pearl3.html.
Интересно, кто-нибудь пытался с помощью КМ создать достойного противника Хуану? Такого, чтоб сам играл с ним, не проигрывая.
Поиграла немного с правильной стратегией. Невозможно создать достойного противника Хуану, чтобы  всегда выигрывать. Периодически в раунде изначально нам предлагают заведомо проигрышное количество жемчуга: придется взять жемчужину и нажать на New game, записывают как поражение. Иногда и несколько раз подряд нерабочий раунд предлагают. Создать неплохо играющего моба, который выяснит заканчиваются ли у Хуана раунды или генерируются бесконечно - вполне можно, но в целом для игры калькулятора переводящего из двоичной в десятеричную (и наоборот)  вполне хватит.
https://prnt.sc/lnyizj
Code: (clickermann) [Select]
//Перевод числа в двоичную систему
SUB(binar, $par1)
   $num=$par1
   $str=""
   While($num>0)
      $a=  $num-(2*INT($num/2))
      $str= strconcat($a, $str)
      $num= INT($num/2)
   End_cyc
   Print($str)
END_SUB
// to ten
SUB(toten, $par1)
   $num=$par1
   $str=0
   For($a=0,$a<STRLEN($num))
      $str= $str+int(STRCUT($num,(STRLEN($num)-$a),1))*POW(2,$a)
   End_cyc
   Print("=====  ",$str)
END_SUB
binar(4)
binar(6)
binar(8)
binar(10)
Print("                                 "," * ")
Print("                                 "," * ")
toten(1100)
halt
« Last Edit: November 28, 2018, 02:13:28 PM by Qwerry »

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #5 on: November 28, 2018, 06:36:41 PM »
Поиграла немного с правильной стратегией. Невозможно создать достойного противника Хуану, чтобы  всегда выигрывать. Периодически в раунде изначально нам предлагают заведомо проигрышное количество жемчуга: придется взять жемчужину и нажать на New game, записывают как поражение. Иногда и несколько раз подряд нерабочий раунд предлагают. Создать неплохо играющего моба, который выяснит заканчиваются ли у Хуана раунды или генерируются бесконечно - вполне можно, но в целом для игры калькулятора переводящего из двоичной в десятеричную (и наоборот)  вполне хватит.

Молодец Qwerry! Правильной дорогой идете, товарищи!

 Начну с того, что этой игре уже несколько сотен лет. Родилась она в Китае и решение найдено довольно давно.
 Об алгоритме игры. Это чистая математика, в начале никаких стратегий нет.
 Правильно, надо в каждом ряду к-во шаров перевести в бинар и сложить их в столбик, как в 1-ом классе.  Например: 5  6  9
0101   5
0110   6
1001   9
----
1212
 После этого сумму переводим в т.н. ним-сумму(N). Все нечетные числа становятся 1, а четные - 0. Получается:
1010
 Чтобы выиграть, надо Хуану каждый раз возвращать N=0. То есть надо подобрать такое число в каком-то ряду, чтобы стало N=0. В нашем примере это 3 вместо 9 в третьем ряду.
0101   5
0110   6
0011   3
----
0222 ---> ним-сумма 0000
 Снимаем 6 шаров в третьем ряду.
Если в начале левела Хуан даёт комбинацию с N=0, жмем GO и передаем ход Хуану. Стоит один раз ошибиться и передать комбинацию N<>0, Хуан выиграет.
 Понятно, в уме это делать тяжеловато, надо писать прогу.
« Last Edit: November 28, 2018, 08:25:24 PM by Graubart »
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #6 on: November 28, 2018, 08:36:36 PM »
 На приведенном мною сайте я обнаружил эту игру 16 лет назад. Тогда я владел только Бейсиком и написал код помощника в игре. Надо было вводить в инпут к-во шаров в каждом ряду, а он выдавал где и сколько их снимать. Потом писал код на языках более высокого уровня. Но это было просто диалоговое общение с помощником. Когда я обнаружил КМ, перевел всё в код КМ, но не хватало некоторых процедур и функций, я ненавязчиво просил Johnny добавить кое-что.
 И вот в последней версии "Clickermann v4.14 x32" всё, что надо, есть. Я назвал свою прогу *Helper*.
Код работает в трех режимах:
1. «Автомат»     -   *Helper* играет самостоятельно
2. «Референт»   -   *Helper* считает шары и даёт подсказку
3. «Счетчик»     -   *Helper* считает шары без подсказки

Мой *Helper* прошел автоматом 105 уровней за 3 часа 38 минут. Прога делает скрин в начале каждого левела и ведет лог.
Сегодня бот прошел 58 левелов за 1 час 39 мин.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #7 on: November 28, 2018, 08:46:56 PM »
Что интересно после 99 level - scores остается, а level становится 00. Затем level становится 01, scores обнуляется, но количество шаров намного больше, чем в начале.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #8 on: November 28, 2018, 08:49:58 PM »
Так этож оператор XOR  :D ! С одной стороны вроде сложная задача, а решение в пару строк  ;D

Code: (clickermann) [Select]
$l[0] = 5
$l[1] = 6
$l[2] = 9

$i = 0
$l_mem = $l[$i]
WHILE($l[0] xor $l[1] xor $l[2])
   $l[$i] = $l[$i] - 1
   IF($l[$i] = -1)
      $l[$i] = $l_mem
      inc($i)
      $l_mem = $l[$i]
   END_IF 
END_CYC


print($l[0] , " ", $l[1], " ",$l[2])  // 5 6 3

halt

Щас попробую накидать код для использавания на автомате. Нужно еще добавить проигрышный вариант для пропуска.

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #9 on: November 28, 2018, 09:12:06 PM »
С одной стороны вроде сложная задача, а решение в пару строк  ;D
Щас попробую накидать код для использавания на автомате. Нужно еще добавить проигрышный вариант для пропуска.

Отлично! Я старался разжевать, как можно проще. Мне интересны любые решения. У вас оригинально, я сделал иначе... Может кто-нибудь ещё предложит разные решения
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #10 on: November 28, 2018, 10:07:15 PM »
Щас попробую накидать код для использавания на автомате. Нужно еще добавить проигрышный вариант для пропуска.

Главное, не забывать что рядов может быть 7, до трех операндов XOR ещё работает, а вот больше - буксует.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: «Pearls before swine»
« Reply #11 on: November 28, 2018, 10:34:48 PM »
Так это не проблема, самое простое, это дописать еще 4 ряда  :), и если их нет, то прописать их нулями.
Code: (clickermann) [Select]
$l[0] = 5     //вводим данные по рядам
$l[1] = 6
$l[2] = 9
$l[3] = 2
$l[4] = 0
$l[5] = 0
$l[6] = 0
 
$i = 0
$l_mem = $l[$i]
WHILE(((($l[0] xor $l[1] xor $l[2]) xor $l[3] xor $l[4]) xor $l[5]) xor $l[6])
   $l[$i] = $l[$i] - 1
   IF($l[$i] = -1)
      $l[$i] = $l_mem
      inc($i)
      $l_mem = $l[$i]
   END_IF 
END_CYC
 
 
print($l[0] , " ", $l[1], " ",$l[2], " ", $l[3], " ",$l[4], " ", $l[5], " ",$l[6])  // ответ 5 6 3 2 0 0 0
 
halt

Почему я всунул столько скобок в WHILE(((($l[0] xor $l[1] xor $l[2]) xor $l[3] xor $l[4]) xor $l[5]) xor $l[6]) ? Вот это вопрос. Кликерман без них выдает ошибку  :-\. Конечно врядли с операторами еще ктото будет так извращаться, но всеже, почему без них ошибка?
Сразу говорю, с таким кол-вом не тестил, дошел до пятого уровня вручную с помощью скрипта, и понял что задача выполнена.


Я начал писать автоматическую игру, и опустил руки в самом начале  на получении входных данных по количеству шаров в рядах и кол-ву рядов:(. Не потому, что это не реально, а потому что это геморно и не универсально. Графика какаято сложная, попробовал пару простых вариантов, не сработало, забил.
Должен сработать вариант с колормод 8 и подсчетом белых  пикселей по горизонту в каждом ряду и делении на ширину одного шара, но тут нужы точные входящие координаты, даже не начинал писать. Да и не комфортно на не домашнем глючном ноуте  :(.

Если кто предложит вариант попроще - можно попробовать.
« Last Edit: November 28, 2018, 10:37:19 PM by dramster »

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #12 on: November 28, 2018, 11:31:25 PM »
Не, не катит через ксор, 3 ряда еще рулит, а дальше пургу гонит.
Подожду пока Джонни компилятор сделает, тогда эксешку выложу на полный вариант. Щас, если хошь, выложу в диалоговом варианте.
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Graubart

  • Освоившийся
  • **
  • Posts: 44
  • Alles wird gut
    • View Profile
Re: «Pearls before swine»
« Reply #13 on: November 29, 2018, 05:11:44 PM »
А потом мальчики и девочки, будут постоянно ныть на форуме и ковыряя в носу, требовать обещанный компилятор, ссылаясь на данное провокационное сообщение.
Вы  твёрдо уверены, что компилятор обещан и его нужно ждать?

или нет. учитывая что вы вообще хотите ограничить запуск скрипта.
кароч ждите компиляции. хоть какой то
Просто объяснить сложное - сложно. Сложно объяснить сложное - просто.
• Альберт Эйнштейн

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: «Pearls before swine»
« Reply #14 on: November 29, 2018, 05:23:21 PM »
Ключевое слово здесь "ждите"  :) :D