Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Логические задачи
Flash Zone Forum > Общие форумы > Флейм
chingachgoog
Собственно вспомнилось мне несколько задач на логику и смекалку.
Кто вспомнит еще - присоединяйтесь.
Ответы чур давать в виде прикрепленных файлов.
chingachgoog
Простая задача, решается в уме минут за 10 точно.

Есть две веревки. И зажигалка.
Если поджечь первую веревку, то она будет гореть ровно 1 час. Вторая - полчаса.
Как отмерить 45 минут, если веревки горят НЕРАВНОМЕРНО?

Ответ тут
Нажмите для просмотра прикрепленного файла
chingachgoog
Есть 12 монет и аптекарские весы.
Одна из монет фальшивая - у нее другой вес, чем у остальных. Но неизвестно, больший или меньший.
Как за три взвешивания определить фальшивку?

Юнит-тест на мой алгоритм тут:
Нажмите для просмотра прикрепленного файла

NB!

Эту задачу очень давно задал мне друг. А ему препод. И сказал, что тот кто решит, получит зачет автоматом. Интернета тогда практически не было и мы решали эту задачу целый день сами. И решили! Но вовсе не так, как сейчас решал ее я и как ожидал препод. Но тот алгоритм работал. И как не старался препод его сломать - все работало, что он был вынужден признать, что решить можно и так. К сожалению, тот алгоритм я не помню.
MustLive
chingachgoog

Логические задачи - это интересно. И это то, что я люблю smile.gif. Как и логические игры (пазлы).

И к обеим предложенным тобою задачам у меня есть решения. Но "живые решения" - то как бы я в живую их решал (т.е. без учёта возможных ограничений, о которых ты не упомянул в описании задачи).

К примеру, в первом случая я бы разрезал обе верёвки... (деталей алгоритма в своём сообщении не раскрываю по просьбе chingachgoog-а - ответы лишь прикреплёнными файлами). Во втором случае, я бы специальным образом взвешивал. Было бы интересно подобные головоломки сделать в виде флеш игр wink.gif.
chingachgoog
Цитата(MustLive @ 9.11.2011 - 01:56) *
К примеру, в первом случая я бы разрезал обе верёвки...


Честно говоря, свое решение я тоже начал с разрезаний, но меня сильно обломали тем, что неравномерное горение - оно вообще неравномерное. Т.е. абсолютно непредсказуемое. Например, треть часовой веревки горит 34 минуты, потом треть - 1 минуты и оставшееся по синусоиде - 25 минут ))) И неравномерность горения у обеих веревок не коррелирует.
Так что если ты знаешь как справиться разрезанием - прикрепляй файл с описанием.

Цитата(MustLive @ 9.11.2011 - 01:56) *
Во втором случае, я бы специальным образом взвешивал. Было бы интересно подобные головоломки сделать в виде флеш игр wink.gif.


Да, вторую задачу я думаю сделать на флеше.
chingachgoog
А вот классика жанра оператора if:

Есть два города: город Врунов и город Честных. Соответственно вруны всегда врут, а честные всегда говорят правду.
Мы оказались в одном из городов, как одним вопросом к прохожему определить в каком мы городе находимся?
Загвоздка в том, что вруны и честные постоянно ходят в гости к друг другу и мы не знаем, кто перед нами, кому мы зададим вопрос.

Ответ тут:
Нажмите для просмотра прикрепленного файла


PS

Мне не посчастливилось самому решить эту задачу. Мне было многое непонятно в условии - невнятно оно задано было.
Поэтому я уточню: вопрос очень простой (не составной и многогранный), ответ на него тоже простой: да или нет. Как я сказал - эта задача на булевую логику и классика оператора if. Удачи )))
chingachgoog
Разновидность задачи про города врунов и честных.

Есть два племени аборигенов. Дружелюбные и честные (говорят только правду) и злые вруны-людоеды (всегда врут).
Вы стоите на перепутье: одна дорога ведет к одному племени, другая - к другому. У перепутья сидит кто-то из какого-то племени.
Как узнать дорогу к дружелюбному племени за одно предложение?

ответ
Нажмите для просмотра прикрепленного файла

PS

Тут то же условие: предложение должно быть крайне простым, без всяких составных условий. В принципе, это совсем не обязательно должен быть вопрос (но можно и вопросом). Цель - узнать дорогу к нужному племени.
chingachgoog
Суровая задача )))

Есть две двери из тюрьмы: одна на свободу, другая к палачу. У дверей сидит охранник, который отвечает, естественно, только "Да" либо "Нет". Надо за два вопроса понять в какую дверь выходить.
Загвоздка в том, что охранники работают в три смены и неизвестно, из какой смены этот охранник:
- честный (всегда говорит только правду)
- врун (всегда врет)
- хитрый (поочередно говорит то правду, то ложь, но неизвестно с чего в данный момент начинается очередь)

Ответ
Нажмите для просмотра прикрепленного файла
chingachgoog
Мегасуровая задача )))

Опять две двери из тюрьмы и опять одна к палачу, а другая - на свободу.
Но теперь у каждой из двери сидит по охраннику. Один из них врун, другой - честный.
Неизвестно где какая дверь и кто у какой двери сидит. Но надо за один вопрос найти правильную. )))

Ответ:
Нажмите для просмотра прикрепленного файла

PS

Эту задачу, признаюсь, я не решил - нетерпеливость перевесила и я подсмотрел ответ.
И что я там увидел? ))) Вопрос, оказывается, не то, чтобы составной или сложный, но на сложное использование оператора "!" (logical NOT)
MustLive
Ты, я смотрю, любитель суровых задач smile.gif.

Исходя из приведённых тобою задач, не все из них легко можно будет реализовать в виде флеш-игр (например, "задачи про вопрос", где вопрос может быть в произвольной форме), о чём я писал ранее. То вторую задачу, про весы, вполне несложно реализовать в виде игры.

Цитата
Честно говоря, свое решение я тоже начал с разрезаний, но меня сильно обломали тем, что неравномерное горение - оно вообще неравномерное. Т.е. абсолютно непредсказуемое.

Ясно, тогда мой алгоритм не подойдёт (при этих условиях). Т.к. я думал, что неравномерно одна верёвка по отношению к другой (ведь первая горит час, вторая - полчаса, и если они, к примеру, одинаковой длины, то и горят неравномерно). Значит нужен другой алгоритм.
chingachgoog
Есть три сосуда: 12, 8 и 5 литров. 12 литров полный, остальные пустые. Надо отлить в 8 литровый сосуд 6 литров. (проливать нельзя!)

Решил за 10 переливов, скорее всего это избыточно
Нажмите для просмотра прикрепленного файла
MustLive
Цитата
Решил за 10 переливов, скорее всего это избыточно

Я решил задачу с сосудами за 6 переливов.
chingachgoog
Забавно, приходили на собеседование ребята с неплохим флеш-портфолио, но никто не смог решить простую задачку на AS1:

Код
a=10

function b (a) {
trace( ... тут надо вывести значение внешней переменной а, которое равно 10 ... )
}

b(20)

Что это? Страх собеседования? Или задача слишком сложная?
Jox
Задачи не понял и может нафиг этот as1/2 ? А парни на каком языке прогали в своём портфолио и они ли прогали?

CODE
private var _a:uint = 10;
private var _c:uint = _a;

private function b (_a:uint) {
      trace(_c);
}

b(20);
chingachgoog
На самом деле не важно AS1 или AS3 - код надо расположить внутри трейса, там где мой комментарий и многоточия smile.gif )
Jox
Тогда я тоже не прошел собеседование) хотя сделал 2 игры на as3 и работал над 4 соц.играми программистом)
chingachgoog
Хм. Значит, действительно, сложновато...

PS

Я не говорил, что они не прошли собеседование )))
HaWK
Цитата
Код
a=10

function b (a) {
trace( ... тут надо вывести значение внешней переменной а, которое равно 10 ... )
}

b(20)

Это не так случайно делается?
Код
a=10

function b (a) {
trace(_root.a)
}

b(20);

Интересно.
MustLive
Цитата
Это не так случайно делается?

HaWK

Именно так и делается. Что должно быть вполне очевидно wink.gif. Видимо Jox делал (и делает сейчас) более крутые вещи, а эта мелкая задача на ActionScript уж слишком проста для него.

Так что поздравляю HaWK, ты прошёл собеседование chingachgoog biggrin.gif. Как минимум этап с этой задачей. А т.к. весьма вероятно, что в этом собеседовании множество этапов, то можешь себе представить какие задачи на других этапах.
HaWK
Цитата
Именно так и делается. Что должно быть вполне очевидно

Ну проходящий собеседование человек всегда будет искать подвох в таких задачах, я думаю ) Поэтому иногда в таких случаях самое очевидное решение не воспринимается человеком, и он думает, что есть варианты получше.

Цитата
Так что поздравляю HaWK, ты прошёл собеседование chingachgoog biggrin.gif. Как минимум этап с этой задачей. А т.к. весьма вероятно, что в этом собеседовании множество этапов, то можешь себе представить какие задачи на других этапах.

Хах, тут гордиться конечно особо и нечем, но спасибо )
Раз уж так пошло, интересно было бы получить от chingachgoog-а другие задачи из этого собеседования.
Jox
 в as3 нет никакого _root ))) и так не прокатит. а as1/as2 я совсем забыл и вспоминать вообще не хочу.
в as3 конечно есть this, но фиг знает, прокатит или нет, вообще этим словом не пользуюсь практически.

поэтому лучше писать так всегда
CODE
private var _a:uint = 10;

private function b(a:uint):void
{
      trace(_a);
}

b(20);
chingachgoog
Ну в общем правильный ответ - this.a (ведь не сказано, что код на руте и сказано, что работает от AS1 до AS3), но ход мыслей был верный.

NB!

Еще вопрос может быть такой:

arr0=["раз", "два", "три"]
arrk=[]

Написать (ручкой на бумаге это все, без компов) код помещения элементов массива arr0 в массив arrk в случайном порядке. Ну если не код, то хотя бы алгоритм.
HaWK
Я бы сделал вот так:
Код
arr0 = ["раз", "два", "три"];
arrk = [];

index = 0;
for (i = 0; i < 3; i++) {
    index = arr0.length != 1 ? Math.round(Math.random() * (arr0.length - 1)) : 0;
    arrk.push(arr0[index]);
    arr0.splice(index, 1);    
}

Я конечно проверил всё на компе прежде, чем тут публиковать ) Но всё же старался не пользоваться компом пока думал как сделать.
Jox
 я и имел ввиду this.a) но это как-то... мб да, на мышление, но в реальном случаи в проектах вряд ли пригодится.

CODE
for (var i:uint = 0; i < arr0.length; i ++)
{
    var val:String = arr0[Math.random()* arr0.length];
    arrk.push(val);
    arrk.splice(Math.random()* arr0.length, 1);
}


как-то так, писал на память, скорей всего здесь косяк будет в цикле и нужно будет параметр обновляться, в общем скорей всего дополнительный метод надо будет создать, но механика примерно такая.
HaWK
Цитата(Jox)
for (var i:uint = 0; i < arr0.length; i ++)
{
var val:String = arr0[Math.random()* arr0.length];
arrk.push(val);
arrk.splice(Math.random()* arr0.length, 1);

}

Jox, массив arrk таким образом в итоге будет пустой по-моему. И к тому же могут быть повторы элементов.
chingachgoog
splice - хорошее решение
/forum/index.php?showto...ost&p=12538
Русская версия IP.Board © 2001-2013 IPS, Inc.