Две недели назад мы были на Java-конференции в Питере — Joker 2017. Уже традиционно пришли туда не с пустыми руками, а с веселыми и сложными задачами, над которыми можно посмеяться и/или поломать голову. Спасибо всем, кто в эти два дня решал задачи, задавал вопросы и предлагал свои оригинальные решения. Поздравляем победителей!
Все задачи верно решили целых три человека:
— Рюрик Крылов (который к тому же сдал корешок из буклета с верными ответами самым первым)
— Евгений Крутень
— Василий Бригинец
Публикуем, как обещали, развернутые решения. Вынесли под спойлер, чтобы свои силы могли попробовать и те, кто пропустил конференцию.
![](https://habrastorage.org/r/w1560/webt/0h/gj/ix/0hgjix9sib7b1hdjhx2gzurz01g.png)
![](https://habrastorage.org/r/w1560/webt/kk/es/h7/kkesh7ffgympoyxtpvrhkqhln78.png)
![](https://habrastorage.org/r/w1560/webt/nf/rq/04/nfrq04bbz7xehqr-van5uowf6ke.png)
![](https://habrastorage.org/r/w1560/webt/h3/89/8e/h3898ermyjvyp7yfv6dy6ikl7os.png)
Пока ждем появления на канале конференции видео с докладом Вовы Озерова про сериализацию, можно скачать слайды или посмотреть интервью Якова Жданова про то, зачем GridGain поддерживать открытый код, и кто придумывает нам задачи.
Все задачи верно решили целых три человека:
— Рюрик Крылов (который к тому же сдал корешок из буклета с верными ответами самым первым)
— Евгений Крутень
— Василий Бригинец
Публикуем, как обещали, развернутые решения. Вынесли под спойлер, чтобы свои силы могли попробовать и те, кто пропустил конференцию.
![](https://habrastorage.org/webt/0h/gj/ix/0hgjix9sib7b1hdjhx2gzurz01g.png)
Задача №1
![](https://habrastorage.org/webt/kk/es/h7/kkesh7ffgympoyxtpvrhkqhln78.png)
Решение
t — длительность происходящего действия в минутах,
r — количество написанных строк кода за время t,
k — количество кивков за время t.
![$t < 60$](https://habrastorage.org/getpro/habr/formulas/dea/635/30e/dea63530e7d524f4c0de3f9066e5160c.svg)
![$r = 100$](https://habrastorage.org/getpro/habr/formulas/f13/f4b/05e/f13f4b05efaa837027d9246f2672fc5e.svg)
![$k = 243$](https://habrastorage.org/getpro/habr/formulas/2e5/0c9/310/2e50c9310166a3fec7cab5ddcbda9f10.svg)
![$f(x) = r / t$](https://habrastorage.org/getpro/habr/formulas/6f9/d1b/384/6f9d1b384c65f42f0418281baf18409d.svg)
![$x = k / t$](https://habrastorage.org/getpro/habr/formulas/42b/c4e/a1a/42bc4ea1a3087fa72899c8bb5d3da784.svg)
![$r / t = 1 + sqrt(k / t)$](https://habrastorage.org/getpro/habr/formulas/4bf/afe/cce/4bfafecce7c7b4624cbca7fa727ccead.svg)
Произведем замену![$1 / t = y$](https://habrastorage.org/getpro/habr/formulas/27b/2c0/3b2/27b2c03b22f2ef87bcefd6d6d7cd04d4.svg)
![$ry = 1 + sqrt(ky)$](https://habrastorage.org/getpro/habr/formulas/244/994/27b/24499427b63fbfc6a568b14f4c47d22f.svg)
![$ry - 1 =sqrt(ky)$](https://habrastorage.org/getpro/habr/formulas/6b2/925/fae/6b2925faedbb0d40138da62924d2777c.svg)
![$r^2 * y^2 - 2ry +1 = ky$](https://habrastorage.org/getpro/habr/formulas/a3b/72a/8cf/a3b72a8cf5e8f8024f538bc7924d7b75.svg)
![$r^2 * y^2 - (2r +k)y +1=0$](https://habrastorage.org/getpro/habr/formulas/8b2/4ac/6dc/8b24ac6dc040469d72e302e27d5d3ca8.svg)
Решаем обычное квадратное уравнение: дискриминант, корень, два возможных решения:
![$D = (2r + k)^2 – 4r^2 = 156249$](https://habrastorage.org/getpro/habr/formulas/82d/dbe/678/82ddbe67850fe7d1e4e6ffe54b8adcad.svg)
![$sqrt(D) = 395,2834426$](https://habrastorage.org/getpro/habr/formulas/d63/968/896/d639688965c2658abb522e064b0869bb.svg)
![$y = ((2r + k) ± sqrt(D)) / 2r^2$](https://habrastorage.org/getpro/habr/formulas/600/b7f/0bb/600b7f0bbba35bff07a0dce4f45f931b.svg)
![$y1 = 0,041914172$](https://habrastorage.org/getpro/habr/formulas/b6b/259/264/b6b259264cff0f0b5587cdce10ef5edc.svg)
![$y2 = 0,002385828$](https://habrastorage.org/getpro/habr/formulas/bf8/cc0/af8/bf8cc0af8d5bbb7003bd510f9bbf4cb5.svg)
Производим обратную замену:
![$t1 = 23,8582787$](https://habrastorage.org/getpro/habr/formulas/f50/133/722/f50133722aaf02a60bc02a768bdc8570.svg)
![$t2 = 419,1417213$](https://habrastorage.org/getpro/habr/formulas/7c8/02e/f56/7c802ef56f53c452fa92ab62e6b15e57.svg)
и выбираем один корень, удовлетворяющий условию t1 < 60, который подставляем в уравнение:
![$x = k / t1 = 10,18514383$](https://habrastorage.org/getpro/habr/formulas/1a9/164/f8a/1a9164f8ad6e6d286ec48115bae7f222.svg)
Ответ: 10,185
r — количество написанных строк кода за время t,
k — количество кивков за время t.
Произведем замену
Решаем обычное квадратное уравнение: дискриминант, корень, два возможных решения:
Производим обратную замену:
и выбираем один корень, удовлетворяющий условию t1 < 60, который подставляем в уравнение:
Ответ: 10,185
Задача №2
![](https://habrastorage.org/webt/nf/rq/04/nfrq04bbz7xehqr-van5uowf6ke.png)
Решение
Имеем систему счисления с основанием 10 + 33 = 43
![](https://habrastorage.org/r/w1560/webt/ez/tv/3x/eztv3xrtwddfli6nb50oia1afxs.png)
Приводим кириллические числа к десятичному представлению:
ПОСТ = {26, 25, 28, 29} = (((26 * 43) + 25) * 43 + 28) * 43 + 29 = 2114640
Аналогично:
ПОКАЙСЯ = {26, 25, 21, 10, 20, 28, 42} = 168103278466
МОЛИТВА = {23, 25, 22, 19, 29, 12, 10} = 149143339604
ПОКАЙСЯ + МОЛИТВА * ПОСТ = 315384639763481026
Приводим десятичный результат к кириллическому представлению, для этого ищем первый старший разряд, который будет нулевым:
![$43^{11} = 929293739471222707 > 315384639763481026$](https://habrastorage.org/getpro/habr/formulas/80b/283/b4a/80b283b4adb43f559a5409aeec334d1c.svg)
![$43^{10} = 21611482313284249 < 315384639763481026$](https://habrastorage.org/getpro/habr/formulas/d4c/48f/f8c/d4c48ff8c1fc7bddadb17916349703b9.svg)
Последовательно делим остаток на 43 в степени от 10 до 0:
![$315384639763481026 / 43^{10 }= 14$](https://habrastorage.org/getpro/habr/formulas/d36/71f/e03/d3671fe038e6870ea159c0e244b33c58.svg)
![$12823887377501540 / 43^9 = 25$](https://habrastorage.org/getpro/habr/formulas/f72/683/835/f72683835784e28cd2daacf41863ca7a.svg)
![$259072079080465 / 43^8 = 22$](https://habrastorage.org/getpro/habr/formulas/74e/d81/9a1/74ed819a148abe48361570e3f5251775.svg)
![$1931672973243 / 43^7 = 7$](https://habrastorage.org/getpro/habr/formulas/a87/103/c1a/a87103c1a827c775cfa52bc717ccdde4.svg)
![$28942695494 / 43^6 = 4$](https://habrastorage.org/getpro/habr/formulas/a24/79c/a64/a2479ca64b52cf047a497fbb243bcd88.svg)
![$3657243298 / 43^5 = 24$](https://habrastorage.org/getpro/habr/formulas/dfa/e63/b5c/dfae63b5cb25a7fa398aa6d107e42ca1.svg)
![$129040666 / 43^4 = 37$](https://habrastorage.org/getpro/habr/formulas/531/c19/15d/531c1915df7708d157f130bbddfdfb18.svg)
![$2545029 / 43^3 = 32$](https://habrastorage.org/getpro/habr/formulas/74d/93a/af2/74d93aaf2046ba6c4a32675c0bd8da16.svg)
![$805 / 43^2 = 0$](https://habrastorage.org/getpro/habr/formulas/9a9/a69/96d/9a9a6996d153d2e756e0a0cd29a1f70c.svg)
![$805 / 43^1 = 18$](https://habrastorage.org/getpro/habr/formulas/83e/05c/db5/83e05cdb5328ff21c01b1d0f7db1730d.svg)
![$31 / 43^0 = 31$](https://habrastorage.org/getpro/habr/formulas/eb8/5dd/80d/eb85dd80d64da6361aa4c5527b264ac5.svg)
{14, 25, 22, 7, 4, 24, 37, 32, 0, 18, 31} = ДОЛ74НЪХ0ЗФ
Ответ: ДОЛ74НЪХ0ЗФ
![](https://habrastorage.org/webt/ez/tv/3x/eztv3xrtwddfli6nb50oia1afxs.png)
Приводим кириллические числа к десятичному представлению:
ПОСТ = {26, 25, 28, 29} = (((26 * 43) + 25) * 43 + 28) * 43 + 29 = 2114640
Аналогично:
ПОКАЙСЯ = {26, 25, 21, 10, 20, 28, 42} = 168103278466
МОЛИТВА = {23, 25, 22, 19, 29, 12, 10} = 149143339604
ПОКАЙСЯ + МОЛИТВА * ПОСТ = 315384639763481026
Приводим десятичный результат к кириллическому представлению, для этого ищем первый старший разряд, который будет нулевым:
Последовательно делим остаток на 43 в степени от 10 до 0:
{14, 25, 22, 7, 4, 24, 37, 32, 0, 18, 31} = ДОЛ74НЪХ0ЗФ
Ответ: ДОЛ74НЪХ0ЗФ
Задача №3
![](https://habrastorage.org/webt/h3/89/8e/h3898ermyjvyp7yfv6dy6ikl7os.png)
Решение
С учетом начальных условий подсчитаем количество возможных сочетаний:
Герман: 2 туза из 4 =
= 6.
Старуха: 2 пики из 9 числовых =
= 36.
Флоп: 3 карты из оставшихся 48 в колоде =
= 17296.
Всего подходят 6 * 36 * 17296 = 3735936 комбинаций.
Теперь рассмотрим подходящие варианты.
У Германа во всех вариантах также: 2 туза из 4 =
= 6.
Варианты с рукой старухи:
1) нет 3 и 7 в руке, остается 2 из 7 =
= 21.
2) одна 3 или 7 в руке, это 2 * 7 сочетаний = 14.
3) и 3 и 7 в руке = 1.
Проверяем, что мы рассмотрели все комбинации 21 + 14 + 1 = 36.
Теперь находим количество подходящих сочетаний для флопа:
1) в колоде осталось 2 туза, 4 тройки и 4 семерки = 2 * 4 * 4 = 32 сочетания.
2) в колоде осталось 2 туза, 3 карты одного числа и 4 другой = 2 * 3 * 4 = 24 сочетания.
3) в колоде осталось 2 туза, 3 тройки и 3 семерки = 2 * 3 * 3 = 18 сочетаний.
Общее количество подходящих сочетаний:
6 * 21 * 32 + 6 * 14 * 24 + 6 * 1 * 18 = 6156
Искомая вероятность 6156 / 3735936 = 0,00164777983348751156336725254394
Ответ: 0,00165 или 0,165 %
Герман: 2 туза из 4 =
Старуха: 2 пики из 9 числовых =
Флоп: 3 карты из оставшихся 48 в колоде =
Всего подходят 6 * 36 * 17296 = 3735936 комбинаций.
Теперь рассмотрим подходящие варианты.
У Германа во всех вариантах также: 2 туза из 4 =
Варианты с рукой старухи:
1) нет 3 и 7 в руке, остается 2 из 7 =
2) одна 3 или 7 в руке, это 2 * 7 сочетаний = 14.
3) и 3 и 7 в руке = 1.
Проверяем, что мы рассмотрели все комбинации 21 + 14 + 1 = 36.
Теперь находим количество подходящих сочетаний для флопа:
1) в колоде осталось 2 туза, 4 тройки и 4 семерки = 2 * 4 * 4 = 32 сочетания.
2) в колоде осталось 2 туза, 3 карты одного числа и 4 другой = 2 * 3 * 4 = 24 сочетания.
3) в колоде осталось 2 туза, 3 тройки и 3 семерки = 2 * 3 * 3 = 18 сочетаний.
Общее количество подходящих сочетаний:
6 * 21 * 32 + 6 * 14 * 24 + 6 * 1 * 18 = 6156
Искомая вероятность 6156 / 3735936 = 0,00164777983348751156336725254394
Ответ: 0,00165 или 0,165 %
Пока ждем появления на канале конференции видео с докладом Вовы Озерова про сериализацию, можно скачать слайды или посмотреть интервью Якова Жданова про то, зачем GridGain поддерживать открытый код, и кто придумывает нам задачи.