Комментарии 155
//timeout sort
const array = [3, 1, 25, 7];
for(elem of array){
setTimeout(() => console.log(elem), elem);
}
const array = [3, 1, 25, 7];
for(elem of array){
(elem => setTimeout(() => console.log(elem), elem))(elem);
}
Зачем так сложно?
const array = [3, 1, 25, 7];
for(const elem of array){
setTimeout(() => console.log(elem), elem);
}
const- и let-переменные новые на каждой итерации цикла, их не нужно как-то дополнительно замыкать.
const array = [3, 1, 25, 7];
for(const elem of array){
setTimeout(console.log, elem, elem);
}
Задача просто немного непонятно сформирована: из начала следует, что оба игрока сидят за одним столом и видят друг друга, а потом говорится, что информацией нельзя меняться. Ну то есть после прочтения всей статьи смысл запрета понятен, а вот в момент решения ограничения выглядят не очень четкими. Возможно, лучше было бы как-то так указать, что каждый видит только стол и карты на нём, и это единственный канал связи.
Это как скорость света. Объекты могут двигаться быстрее, но передавать при этом информацию — нет.
После этих уточнений в статье возник вопрос:
Но нельзя меняться информацией между собой и показывать карту до момента, пока она не будет положена на стол. То есть нельзя говорить, стучать по столу, подмигивать и так далее — ничего нельзя.
А взять ту карту, которую я планирую выложить следующей, в руку, но не выкладывать на стол (и не показывать оппоненту), а меееедленно приближать к нему пропорционально ожидаемому времени выкладки? т.е., от карт в руке до карт на столе 30 см, моё число на 15 больше последнего выложенного, потому двигать карту к столу примерно по 2см/сек?
А с уверенным видом положить карту с числом 99 на стол рядом с собой (рубашкой вверх, конечно) и оперировать оставшимися двумя, чтобы показать, что я уверен, что это число ну уж очень большое и будет последним?
А чем, с-но, отсчет секунд и т.п. вещи отличается от постукивания по столу? Если можно первое, то можно и все остальное — вплоть до явного озвучивания чисел на руках.
Где здесь передача информации?
Они передают друг другу информацию при помощи задержек. Чем это отличается от того, чтобы просто озвучить карту?
Отказ от принятия информации сигнализирует партнеру, какая стратегия выбрана.
Демонстративное закрывание глаз достаточно информативно.
Вам надо развести игроков в разные комнаты и сделать невозможным передачу информации априори.
Что собственно так же говорит о том, какую стратегию выбрать.
Но люди не рациональны ;)
Как они могут передавать друг другу информацию, если в данной стратегии они не принимают информацию?
Как это не принимают? Они же видят задержку, с-но принимают. Вот если построить процесс так, чтобы игроки не знали с какой задержкой выкладывает карту партнер — тогда информация бы передавалась.
А так — ну проще сказать цифру на карте и не париться.
1. Игрок получает карты и смотрит их. На картах числа x, y, z.
2. В голове игрока стремительно проносятся те же рассуждения, что и в посте.
3. Игрок решает, что через x секунд он выложит карту с числом х, через y секунд он выложит карту с числом y, через z секунд он выложит карту с числом z.
4. После того, как он это решил, это решение не подлежит пересмотру независимо ни от каких действий второго игрока. Второй игрок может закрывать или не закрывать глаза (привет, 2PAE). Может танцевать ламбаду. Может орать первому игроку в ухо номера своих карт. Между любыми событиями, происходящими в мире с момента из пункта 3, и стратегией первого игрока не существует каузальной связи. (Исключая, конечно, события, которые физически помешают игроку воплотить в жизнь данную стратегию. Например, если второй игрок отгрызёт ему руки.)
Человек узнает какая будет игра.
Человек соглашается стать игроком.
Согласие стать игроком является сигналом другому игроку, что будет применена именно эта стратегия.
Информация передана до наступления момента t = 0.
И да, если вы выводите из игры второго игрока, то вы играете в другую игру.
Это я ещё не затронул пласт вариантов о нерациональности человека.
Давайте так: на расстоянии в сотню световых лет находятся две человеческих колонии. Тысячу лет назад их патриархи договорились о том, что в назначенный час их потомки сыграют в игру. И вот час настал. Ровно 50 лет назад генератор случайных чисел, находящийся ровно посередине между этими планетами, послал два сигнала. В сторону одной из планет полетели три числа, закодированные электромагнитными импульсами. В сторону другой — другие три числа. И вот наконец эти сигналы достигли своих целей. Два человека, которые никогда не видели друг друга и никогда друг друга не увидят, делают свои ходы. Лишь через сто лет сигнал от одной планеты долетит до другой. С величайшей точностью рассчитав время отправки этих сигналов и сравнив его с хронометражем ходов своего соотечественника, учёные узнают, была партия успешной или неуспешной. Сами игроки до этого момента, скорее всего, не доживут.
Итого: играют два человека, которые не могли обменяться информацией просто по законам физики. И стратегия работает.
Факт договорённости использования стратегии возникает ДО начала игры.
Информация передаётся ДО начала игры. Сам факт согласия на игру является фактом передачи информации.
В вашем примере информация была передана патриархами друг другу за тысячу лет до начала игры.
Всё остальное дело техники.
И да, мы не знаем возможно ли передача информации быстрее чем скорость света.
Физики говорят что вроде да. Мол два кванта запутываются и распутываются вне зависимости от расстояния между ними.
Может я конечно не так понял физиков. :(
Ну да ладно, приятно было пообщаться, но давайте на этом остановимся.
Физики говорят что вроде да. Мол два кванта запутываются и распутываются вне зависимости от расстояния между ними.
Физики уже устали повторять, что явление квантовой запутанности не позволяет передавать информацию быстрее скорости света.
И да, строкой ниже я упомянул, что возможно я не правильно понимаю физику.
Помнится физики и в теорию относительности не верили.
А вам не помнится — в специальную теорию относительности они не верили или же в общую теорию относительности? Потому что просто "теории относительности" на самом деле не существует.
В любом случае, давайте закруглятся.
Всего вам хорошего. :)
Бессмысленная — в том плане, что в принципе, да, мы можем определить обмен информацией таким образом. Но такое определение мешает сделать какие-либо конструктивные выводы.
А, получается, каждый действует независимо от действий партнера. Ну тогда ок. Меня смутили начальные рассуждения в тексте, где сама стратегия выводилась на основе реакции партнера (выложил он или не выложил).
Тут надо тогда отметить, что таких стратегий (которые работают, если оба игрока придерживаются нужной) можно, в общем, очень много придумать.
Даже два примера: 2PAE и Druu ;-)
А у вышеупомянутых товарищей вроде были претензии к условию, а не альтернативные решения.
Книга была времен холодной войны от каких-то экспертов по угражанию ядерным холокостом.
Я ничего умнее «после высадки ходить вправо-влево с увеличением амплитуды» не придумал, но видимо это далеко не оптимальное решение, т.к. оба могут синхронно совершать одни и те же движения параллельно и не встретиться.
Т.к. собеседование я провалил, правильного ответа я не знаю)
Мне сформулировали задачу как "время бесконечное", а поскольку я знал не только программирование, но и физику со случайным блужданием частиц, то предложил очевидный и формально подходящий ответ с блужданием. Но он собеседующую почему-то не устроил.
Я вообще не понял, какой смысл давать эту задачу, если откидывать все "нестандартные" ответы? Что я вынес от решения этой задачи или оттого что узнал ответ — да ничего, единственная польза в том, что на другом собеседовании смогу ответить на такой же вопрос.
Наверное, самое эффективное — если один стоит, а другой шарится туда-сюда на расстояния, соответствующие членам какой-нибудь экспоненциально возрастающей последовательности. Какой именно — зависит от распределения случайной величины, задающей расстояние между парашютистами.
По поводу «один стоит» — забыл упомянуть требование, что стратегия должна быть одинаковой для обоих парашютистов.
Тогда бы я предложил, скажем, случайные блуждания по степеням тройки. Кинул монетку, прошёл шаг в выбранном направлении. Снова кинул, прошёл три шага. Потом девять, и так далее. Степени тройки — потому что как только будет достигнуто количество шагов, превышающее расстояние между парашютистами, одной удачной пары бросков монеток будет достаточно, чтобы они встретились, независимо от того, сколько неудачных пар бросков было ранее.
Где-то там прозвучало условие, что стратегия у них должна быть одинаковая. Но это скорее не условие, а логичное следствие (из теории игр) того, что обмениваться информацией они не могут, и, видимо, должна быть какая-то одна оптимальная стратегия, придерживаясь которой оба «игрока» окажутся в выигрыше.
Ну об этом же вся статья, почитайте.
у нас есть 180 градусов на 100 чисел, можно расположить примерно,
Хотя бы можно класть параллельно/ортогонально (чётное/нечетное)
А так то, может он вообще ни о чём не догадается, даже если прямо сказать)
Напротив сидит землянин, а не ваша копия.
Окей, тогда 24:25:50. Вы пытаетесь какими-то странными способами обмануть неравенство треугольника.
Но совершенно точно, что своей положенной картой я должен сообщить партнёру размер своей следующей, при это не зная его карту. Первая карта не даёт никакой информации, кроме того, что она наименьшая, так что я пока остановлюсь на покрытии площади карты, ибо говорить, что игрок вдруг не догадается можно при любой стратегии.
Может быть у Вас есть решение?
Что такое «нетривиальные случаи»? Где-то 47.7% из случайно взятых троек карточек не удовлетворяют неравенству треугольника.
Для протокола, я вообще считаю, что вы решаете не ту задачу. Я просто обратил внимание на то, что вы даже её решаете неправильно)
Шестиугольник тоже не всегда можно) 1, 2, 3, 4, 5, 16.
Мы можем положить свою карту сверху/снизу/справа/слева от его и умножить на расположение нашей карты вдоль/поперёк, — уже 8 вариантов, можно дальше углы вводить, как я уже писал. А если можно трогать уже положенные карты, то кодирование упрощается.
Во-вторых, допустим, вы играете со мной. Я выложил карту чуть слева от вашей и повернул её набок. Угадаете, какое число я имел в виду?)
у вас тоже ошибка, вы уже посчитали повороты по диагонали когда получили 32
Ничего подобного. Когда получил 32, я посчитал повороты на 180 и 270 градусов.
кроме того 64 вполне достаточно, ведь свои то карты вы знаете.
У вас карты 2, 80, 90. У противника — 1, 79, 89. Противник выложил единицу, вы выкладываете двойку. Как вы сообщите ему числом от 1 до 64, что у вас именно 80, и он должен выложить 79 раньше?
И более интересный вопрос: допустим, вы сообщили партнёру информацию о своей следующей карте. А у него карта больше, и следующий ход должны делать вы. Как он сообщит об этом вам?
Я ему говорю у меня 79 или 80, тут то он и призадумается, конечно))
карта симметричная, повернув на 180 будет слабо отличаться
В общем, у меня нет времени продолжать этот разговор. Резюмирую: у вас три метаошибки.
Первая: вы решаете не ту задачу (в условии чётко сказано, что никакой дополнительной информации способом выкладывания карт не передаётся).
Вторая: вы решаете её неочевидными способами, которые правильно интерпретирует разве что ваш клон, да и то не точно.
Третья: даже эти решения вы не продумываете до конца.
Засим откланяюсь.
Сложить карты с пустым треугольником в центре с отношением сторон соответствующим, где например 100 — это целая длина карты
Сделаем таймер не на секунду, а на полсекунды — 100 карт выложить успеем.
После разговора про рациональные действия успел подумать, что из этого может выйти неплохая модель для куда более распространённого случая нерациональных действий. Приятно было увидеть соответствующую идею буквально в следующем абзаце :)
Первое что пришло в голову это некое кодирование порядком карт на руках и Little endian vs Big endian проблема записи байт в данных во вполне рациональных спецификациях.
Наверное, это очень креативный человек :).
Когда я понял, что в эту партию манчкина мне никак не выиграть, и решил ради интереса все усилия сосредоточить на том, чтобы выиграл определённый другой игрок, дошло чуть ли не до скандала)
«Нестандартный подход» такого типа ломает баланс. Человек получает удовольствие за счёт того, что лишает удовольствия других, которым этот баланс был важен. Помнится, я в детстве придумал хитрый план: звал маму играть в шашки, а сам играл в поддавки. И, что характерно, всегда выигрывал. До тех пор, пока мама со мной играть не перестала.
«Нестандартный подход» такого типа ломает баланс.Если баланс можно сломать просто нестандартным подходом, то не такой уж он и хороший там был.
Человек получает удовольствие за счёт того, что лишает удовольствия других, которым этот баланс был важен.Совсем необязательно. Ты не лишаешь удовольствия других, ты просто находишь удовольствие не в выигрыше, а в отыгрыше. При этом даже добавляя удовольствие сразу для нескольких типов игроков: для тех кто играет не очень, так как мешаешь профи просчитывать все что можно и для собственно профи, потому что им становится интереснее играть. Когда играет компания друзей, а не профессиональные игроки на турнире, то уровень игры у всех почти наверняка разный, а значит если все будут играть исключительно на победу и в игре не правит рандом, то в 9 из 10 случаев будут побеждать одни и те же один-два человека. Какой в этом кайф вообще для всех? Победители итак знают что они сильнее, им неинтересно, слабые игроки итак знают что шансов у них нет а значит и трепыхаться не имеет смысла. А вот игрок с отыгрышем мешает победителям и помогает слабым игрокам тем самым несколько уравнивая шансы. А заодно и показывает слабым игрокам как можно получать удовольствие от игры независимо от победы.
Возможно, подобное поведение подарит приятные минуты новичкам и другим любителям поставить альтернативные цели. Профи, которым бы от этого стало интереснее играть, я в жизни не встречал. Наоборот, все хорошие игроки, которых я знаю, от такого поведения ссали кипятком. Потому что оно превращает ту игру, которую они любят, в какую-то другую, в которую они играть не собирались.
Короче говоря, не надо лезть в чужой монастырь со своим уставом. Любителю отыгрыша нечего делать в партии манчкинов. Хардкорному игроку не стоит лезть к новичкам. Взрослому шахматисту, которому интересно играть в шахматы по правилам, не стоит садиться за доску с ребёнком, которому интереснее менять правила каждый ход.
Сверху/снизу, по бокам/по диагонали, а также крутить её \ / l _, плюс касание/некасание предыдущей карты и это даёт нам 8*4*2=64 варианта,
а нам вполне достаточно и 50-ти диапазонов по два значения
Главное не запороть первый ход)
нужно по очереди досчитать до ста (это примерно половина от участников). Каждый может кричать только одно число один раз. Если сбились или выкрикнули одновременно два голоса — надо начинать с самого начала. Потом выключить фонарь, крикнуть «один» и пойти выяснять, что происходит. Обычно питание удаётся восстановить куда раньше, чем игроки досчитают.Меня бы у вас сразу забанили как зануду, что портит всем удовольствие. Примерно полторы секунды потребовалось, чтобы найти решение: взяться всем за руки змейкой и просто называть числа по порядку. Второе решение ещё проще: включить телефон в режиме фонарика и передавать кому-то как эстафетную палочку, говорит только тот, кто с фонариком, остальные молчат.
2. Какие ещё хорошо видимые издалека в полной темноте предметы у вас обычно с собой?
3. У тех, кто молчит, должна быть вовлечённость в процесс, как вариант — держаться за руки или следить за перемещением светового пятна по залу.
— Не, — сказал Ахиллес, — Преферансом — начальный уровень разговорного андромедянского.
— Вистовать на шестерной при детях и скрудлях недопустимо, — заметила Черепаха."
И он с большой вероятностью уже пробовал играть в эту игру с другими людьми сегодня.Первый игрок может взять 3 карты и посмотреть оставшиеся. Если их 97 — значит он и есть первый, после чего он должен перетасовать колоду вслепую. Таким образом первый игрок не узнает достоверный список карт второго игрока. Второй после этого тоже берет себе 3 карты и смотрит оставшиеся. Т.к. он видит, что их 94, то он знает, что он второй. Ещё он знает, что 3 отсутствующие карты — это те, которые у первого.
Таким образом выполняются все условия: игроки информацией не меняются (т.к. первый на момент взятия карт не получает никакой явной информации от второго, хотя это может быть спорно), карты никому не показываются (игроки сами их смотрят). После этого второй игрок точно знает нужный порядок выкладывания карт.
Теперь этап выкладывания карт на стол: второй игрок на каждый ход, который ему нужно сделать, сразу выкладывает все свои карты, идущие по порядку. Первый игрок после каждой пачки карт второго игрока выкладывает одну свою карту и ждет некоторое время. Второй игрок всегда (даже в самом начале выкладывания) либо выкладывает нужные карты практически сразу (если нужная на этом этапе карта у него), либо не выкладывает до тех пор, пока первый не сделает свой ход (если нужно выкладывать первому игроку). У землян обычно ощущение течения времени в более-менее одинаковых условиях отличается меньше, чем нужно для невозможности различия между ситуациями «выложил нужные карты сразу» от «не выложил нужные карты сразу», поэтому проблем с последовательностью ходов быть не должно.
Альтернативные варианты стратегий, основанные на неточностях ТЗ и «удобных» интерпретациях фраз:
Есть колода из 100 карт с натуральными числами от 1 до 100, каждого по одному.Если взять колоду, в которой на одной карте натуральные числа от 1 до 100 в порядке возрастания, а на остальных картах натуральные числа вообще отсутствуют, то порядок выкладывания может быть произвольным: числа на картах будут в порядке возрастания в любом случае (если эти числа вообще там будут). Скользкий момент — сравнение пустой карты и карты с числами. Далее будут рассматриваться варианты, когда на каждой карте одно число.
Вы и второй игрок берёте по 3 карты из этой колоды.Порядок взятия карт однозначно не определен. Если принимается решение с отсчитыванием секунд, то можно аналогичным образом брать колоду, вытаскивать из неё карту, возвращать колоду на место через N секунд, где N — число на взятой карте. Тогда все числа числа на взятых картах будут известны обоим участникам, что приводит к тривиальному выкладыванию карт с целью победы.
Задача — одну за одной выложить их на стол в порядке возрастания.Если выложить 6 карт одну за одной (т.е. по очереди) в столбик (т.е. одну на одну), то это можно считать порядком возрастания. Высоты столбика.
Еще можно погнуть карты так, чтобы (условно) лежащая на столе карта образовывала горбик. Тогда эти горбики можно выложить «один за одним» (т.е. сначала один, потом второй, потом третий и т.д.) так, чтобы они лежали «в порядке возрастания» высоты горбика, если смотреть с какой-то одной стороны.
Но нельзя меняться информацией между собой и показывать карту до момента, пока она не будет положена на стол.В самом первом решении уже использовалось то, что под «меняться информацией между собой» не попадает односторонняя коммуникация без подтверждения доставки сообщения.
То, что один игрок не «показал карту» другому игроку не означает, что другой игрок не мог силой забрать карту, посмотреть и отдать обратно (это если рассматривать сильных игроков).
Если в конце игры 6 карт выложены правильно, оба игрока выигрывают.Используется понятие «конец игры», но из условий выше не следует, что игра заканчивается в момент выкладывания последней карты на стол. На этом можно попробовать сыграть (сделать сортировку карт на столе после выкладывания последней карты, но перед концом игры).
Еще критерий «правильно» основывается, скорее всего, на предложении с фразой «одну за одной», которое не такое уже и однозначное.
В момент, когда первая же карта ложится неправильно — оба игрока проигрывают.Критерий «неправильности» тоже явным и однозначным образом не определён. Могут быть ситуации «правильно», «неправильно», «а кто его знает, правильно или не правильно»
Ваша задача — выиграть в этой игре.Выиграть может быть невозможно, если задача оппонента — проиграть, и он целенаправленно идёт к этому. Это, кстати, условиям задачи совсем уж явно противоречить не будет.
С вами играет человекО, это вообще отлично. У человека, если он играет, практически со стопроцентной вероятностью есть пульс. Его можно использовать как более точное средство синхронизации отсчётов вместо вычисления примерного количества прошедших секунд.
«В текущем варианте условия нет ничего о том, что игроки не могут посмотреть другие карты из колоды. И нет ничего сильно запрещающего в процессе взятия карт.»— есть общая система умолчаний и сокращений, подразумевающая, что это запрещено. Точно так же я не описывал, что карты берутся в начале игры лицом к себе, что они не двусторонние и так далее. А всё остальное прекрасно )
Я рассуждал именно так, как вы описали в рациональном варианте. Но после построения всей цепочки вдруг подумал ну 100 это же много, партнер устанет ждать и переключится на другую стратегию. В итоге первая секунда у меня предназначалась на первый десяток карт, во вторую выкладывал бы карты с 20 по 29 и т.д.
И только потом, когда прочитал решение, рациональный «я» сказал, что 100 секунд это менее двух минут и усложнять было совсем необязательно.
P.S. Довольно давно читал про задачу о мудрецах и колпаках. Там даже не одна задача, а довольно много. Я читал разборы Мартина Гарднера, там было и про то, как квантовать время, и с большим количеством мудрецов. По-моему, ваша задача — вариация на тему. Довольно интересная, так как в нее просто начать играть — достаточно любой колоды карт и договоренности, как считается масть.
Например, у меня есть карты H1 = 10, H2 = 50 и H3 = 90.
У оппонента карты O1 = 20, O2 = 40 и O3 = 95.
Я выбираю минимальную карту H1 и кладу на стол.
Оппонент кладёт карту O1 перед моей H1 (это действие необходимо, и говорит мне о том, что O1 <= 97).
Я снова переклаываю H1 перед O1, сообщая ему, что H1 <= 96.
Таким образом мы поочерёдно меняем местами H1 и O1 суммарно ещё 76 раз. К этому моменту H1 окажется перед O1, что скажет моему оппоненту, что H1 <= 20.
На этот раз вместо перестановки H1 и O1 оппонент кладёт новую карту O2, что говорит мне о том, что O1 = 20.
Я кладу H2 перед O2, давая понять оппоненту, что H2 <= 98.
Мы снова поочерёдно меняем местами H2 и O2 49 раз, и последний ход оппонента говорит мне о том, что O2 < 50.
Это означает, что я должен положить H3.
Оппонент кладёт O3 перед H3. Это значит, что O3 <= 99.
Мы перекладываем карты еще 5 раз, после чего мой оппонент понимает, что H3 < 95 и объявляет о завершении игры.
Стратегия игры в телепатию