Вы читаете журнал [info]_darkus_

 

Сундучок мыслей - Решение задачи о возрастах детей

About Решение задачи о возрастах детей

Previous Entry Решение задачи о возрастах детей 5 Авг, 2011 @ 11:12 Next Entry
Итак, вчера (а кто-то и сегодня ночью по московскому времени) мы занимались решением хитроумной задачи по матану. Я несколько удивлён, что моя публикация оной задачи вызвала такое оживление, но это и хорошо. Сегодня я хотел бы подвести итоги конкурса и определить победителей.

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

В связи с этим объявляю своё решение. Думаю, что будет справедливо и идеологически верно то, чтобы книга о годном языке программирования Haskell досталась камраду, написавшему программу для решения на негодном языке программирования Java. Надеюсь, что мои коллеги по цеху функционального программирования не будут оспаривать данное решение и согласятся с его правильностью. Итак, победитель — [info]licvidator. Чествуем!!!

Остальные, кто правильно решил задачу и доказал общность своих алгоритмов, также получают призы. Для каждого, кто перечислен ниже, я готов сгенерировать персональный электронный экземпляр одной из книг: «14 занимательных эссе о языке Haskell и функциональном программировании» или «Методы получения, представления и обработки знаний с НЕ-факторами» на выбор каждого поощряемого коллеги. Персональный экземпляр обозначает, что я пришлю вам файл PDF, в котором будет сделана дарственная надпись конкретно для вас.

Итак, следующих камрадов и коллег прошу прислать мне на почту darkus.14@gmail.com ваш выбор, свою контактную информацию, полные ФИО и пожелания по тексту надписи (если есть и чтобы удостовериться, что я буду каждому делать именно персональный экземпляр, а не вышлю всем один и тот же заготовленный файл): [info]boud, [info]cursed_in, [info]ajtkulov, Alexey G, Andrev Trofimov, Oleg Vershinin, Завьялов Дмитрий, [info]teegaar, Курносов Николай, [info]udpn, [info]jtraub, [info]zhectjahsik, [info]brainbench, [info]namash. Жду информацию, однако хочу сказать, что отреагирую и подготовлю всё не ранее, чем через полторы недели, так что наберитесь терпения.

Камрада [info]licvidator также прошу прислать мне на почту контактную информацию и всё остальное, что надо для оформления книги и отправки её почтой.

Ну и напоследок опубликую своё решение, которое написал, когда решал задачу у камрада [info]dm_kalashnikov. Вот оно (на языке Haskell, разумеется):

import Data.List
import Data.Function

ages n = map (filter (\([x, y, _], _) -> x < y)) $
         filter ((> 1) . length) $
         groupBy ((==) `on` snd) $
         sortBy (compare `on` snd) [([x, y, z], x + y + z) |
                                    x <- [1..n],
                                    y <- [x..(n `div` x) + 1],
                                    z <- [y..(n `div` (x * y)) + 1],
                                    x * y * z == n]

Дополнение: Также для тех коллег, которым положен персональный электронный экземпляр одной из книг, я могу договориться с издательством Самиздал о предоставлении скидки 10 % при заказе моих книг. Кому из перечисленных коллег это предложение интересно, также прошу написать мне в почту. Жду писем.
Оставить комментарий
[User Picture Icon]
From:[info]cursed_in
Date: Август, 5, 2011 08:31 (UTC)
(Link)
Попробовал сообразить такое на Erlang.
Не хватает нормальных генераторов списков и груп бай (или я что-то не знаю x_x).

do(A) ->
B = [{[X, Y, Z], X + Y + Z} ||
X <- lists:seq(1, A),
Y <- lists:seq(X, lists:max([X, A div X + 1])),
Z <- lists:seq(Y, lists:max([Y, A div (X * Y) + 1])),
X * Y * Z == A],
C = lists:filter(fun({_, S} = E) -> lists:keymember(S, 2, B -- [E]) end, B),
lists:filter(fun({[X, Y, _], _}) -> X < Y end, C).

Явно меньше буковок чем в моем оригинальном решении (:
[User Picture Icon]
From:[info]_darkus_
Date: Август, 5, 2011 08:46 (UTC)
(Link)
Меньше, да. Но Хаскел более крутъ :).
[User Picture Icon]
From:[info]lenstr
Date: Август, 5, 2011 09:15 (UTC)
(Link)
Очень красивое и выразительно решение. Я в восторге ")
[User Picture Icon]
From:[info]_darkus_
Date: Август, 5, 2011 15:58 (UTC)
(Link)
Я рад :).
[User Picture Icon]
From:[info]pingback_bot
Date: Август, 31, 2011 08:57 (UTC)

No title

(Link)
User [info]namash referenced to your post from No title saying: [...] Вчера получил поощрительный приз от за задачку [...]
[User Picture Icon]
From:[info]_darkus_
Date: Август, 31, 2011 09:00 (UTC)
(Link)
Жгёшь, камрадище. Давай ещё.
(Оставить комментарий)
Top of Page Разработано LiveJournal.com