пятница, 25 декабря 2020 г.

Ни одной бабки не пострадало


Сначала была пристрелка метров на 15 в свободном режиме. Я был не очень аккуратен и тренер мне сказал повторить её пару раз - сначала по одному выстрелу, затем двойками.


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


Закончили тренировку стрельбой на 15 метров - самовзводом в металл, перенос в мишень под бабкой, потом - над бабкой. Я даже было подумал, что подстрелил бабку, но это оказался рикошет. За него тоже нет штрафных баллов. А вот попадать самовзводом в металл с 15-ти метров - очень сложно. Особенно, когда пальцы устали под конец тренировки.

Собрание оркестра

Прислали фото с последнего собрания. Жаль, что в этом году поездка сорвалась, но им и без неё весело:

четверг, 24 декабря 2020 г.

Неожиданно

А вы знаете, почему одни дорожные знаки перечёркнуты слева направо, а другие - справа налево? Я тут прочитал, что это из-за латинской N в слове No, обозначающем в данном случае запрет какого-либо действия. Во всех остальных случаях, когда дорожный знак перечёркнут справа налево, это обозначает лишь отмену ранее установленных ограничений соответствующим знаком.

среда, 23 декабря 2020 г.

Справедливые числа

У нас с Мишкой на прошедшем соревновании вторая задача прошла претесты, но в зачёт не попала, так как какие-то тесты упали по времени. Сегодня мы с ним её разбирали.

Основные две оптимизации проверки делимости числа:
1. Сначала я собрал все цифры в Set, который ещё дополнительно уменьшил по следующим правилам:
    val set = mutableSetOf<Char>()
    string.forEach { set.add(it) }
    if (set.contains('9')) set.remove('3')
    if (set.contains('8')) set.remove('2' и '4')
    if (set.contains('6')) set.remove('2' и '3')
    if (set.contains('4')) set.remove('2')
    set.remove('1')
    set.remove('0')
2. Потом я оптимизировал проверку делимости BigInteger, используя признаки делимости на 2, 4, 5 и 8. Но эта оптимизация уже не дала сильный прирост, как предыдущая. И всё равно решение задачи не принимали из-за 11-го теста.

Пришлось долго думать над условием, что же я пропустил и понял, что количество проверяемых чисел в одном тесте может быть большим, но туда могут передавать одинаковые или близкие числа. И я добавил кэш Map<Ref>, чтобы не пробегать второй раз для записи в него.
  data class Ref(var value: BigInteger)
  ...
  val dividend = readLine()!!.toBigInteger()
  val applicable = map[dividend] ?: Ref(dividend).also {
    while (true) {
      map[it.value] = it
      if (test(it.value)) break
      it.value = map[++it.value]?.value ?: continue
      break
    }
  }
В результате решение задачи приняли с временем прохождения 1715 мс. Подумав над условием задачи, я понял, что для неё можно не использовать BigInteger, а достаточно использовать Long. Это позволило сократить время исполнения до 1169 мс, а использование памяти - в два раза (с 130000 до 60000 кб)

вторник, 22 декабря 2020 г.

SmartStool KW02B

Коллега предложил забрать его коленный стул и я успел среагировать быстрее всех - минуты не прошло. Пацанам очень понравилось - Миша с Лёшей его поделить не могут. Чувствую, что конкуренция только усилится, когда Катя из садика вернётся.

Дикие пробки

Сегодня с утра надо было съездить на Василевский остров. Ничто не предвещало - Yandex показывал 4. В результате, туда-обратно я провёл за рулём более трёх часов. Такое ощущение, что весь город самоизолируется по машинам и катается по центру.

воскресенье, 20 декабря 2020 г.

Первый блин комом

Поучаствовали сегодня с Мишкой в рейтинговом соревновании по программированию. Оба решили по две задачи, которые прошли претесты, но на рейтинг повлияла только первая, ибо вторая провалилась по времени на основных тестах. Я тупо забыл использовать BigInteger и за 10 минут до конца бросил решать третью задачу, чтобы поправить вторую, но не успел. Теперь у меня рейтинг 386, а у Мишки - 380. Забавный опыт!

Лента меняется

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

суббота, 19 декабря 2020 г.

Шахтёрство не предлагать

Вернулся в Пузырь, а тут дорогие миссии раздают. В принципе, чтобы заработать 50M надо ещё и потратить 20-30M. Но это только тому, кто закупает и везёт товар. А те, кто в Крыле, получают все 50M только за участие.
Так я на основном аккаунте заработал ещё 150M для второго.

Devs (Ex)

Посмотрели мини-сериал Программисты. Очень затянутый, очень запутанный, но очень красивый. В последней серии всё стало ещё запутанней. В результате, послевкусие такое: мы придумали клёвую идею, но не придумали, как её закончить.

Вечернее Рыбацкое

Что такое осень из Японии?

пятница, 18 декабря 2020 г.

Праздничный концерт

Как у нас принято, после новогоднего шоу устроили концерт. Как обычно, никто не знал, кто будет выступать. Сегодня это оказалась немецкая рокабилли-группа The Baseballs. Мне такое нравится - послушал с большим удовольствием. До Stray Cats может и не дотягивает, но до The Brian Setzer Orchestra или каких-нибудь Red Elvises - вполне. Прикольной фишкой мне показалось троеголосие. В какой-то момент они мне напомнили Van Canto. Им тоже подарили пижамы от JetBrains, а барабанщик вообще оказался фанатом PyCharm. Коллеги предлагают подарить ему лицензию.

Подарки - в студию!

Сегодня у нас новогодний корпоратив. Сижу - смотрю, как русские люди треплются между собой на английском. Вначале было веселее, когда коллеги из Индии, Японии и других необычных мест про их традиции рассказывали. И тут приходит доставка с подарками от JetBrains. Неожиданно приятно!

четверг, 17 декабря 2020 г.

Упражнение 4

На последнем упражнении я оторвался - всего лишь одно "чарли" за 28 секунд. Но это было самое лёгкое упражнение. Единственное, что я лопухнулся со сменой магазина, но по времени - не сильно. Хит-фактор - 3.6759 (41.07%).

Посмотреть прохождение: пистолет и карабин.

Упражнение 3

Третье упражнение обстрелял совсем плохо. Тут я чуть ли не половину времени потратил на стрельбу по хитро заныканному металлу, который всё никак не хотел падать. Пришлось даже доставать третий магазин. Хит-фактор - 1.3106 (23.27%). А в самом начале шёл вполне неплохо, несмотря на "мисс". Если бы не достреливал, то хит-фактор был бы заметно выше.

Посмотреть прохождение: пистолет и карабин.

Упражнение 2

Первое упражнение обстрелял похуже - на одно "чарли" больше, да ещё и "мисс" добавился. Там мишень была снизу прикрыта "бабкой" и я слишком задрал прицел. Хит-фактор - 2.5301 (47.43%). То есть, результаты выше, чем на первом упражнении, так как я тут не тратил лишнее время на стрельбу по металлу.

Посмотреть прохождение: пистолет и карабин.

Упражнение 1

Первое упражнение обстрелял неплохо, но долго, ибо замешкался при стрельбе по металлу. Хит-фактор - 1.9860 (44.31%).

Посмотреть прохождение: пистолет и карабин.

Миниматч

Сегодня у нас очередной миниматч на новом месте. Прошлый я пропустил из-за внезапного COVID. Пристрелялся нормально, пистолет не клинит. Осталось только вспомнить, как оптимально проходить упражнения.

Пример кода

среда, 16 декабря 2020 г.

Гафт - гений!

Pushnoy - I'm all you needed

Я, конечно, понимаю, что needed вместо need - для рифмы, но всё-таки надо было как-то по другому перевести Сюткина:

Звуки офиса

Коллеги нашли ссылку, по которой можно себе настроить звуки, как в каком-то странном офисе какого-та стартапа. Не, у нас не так...

вторник, 15 декабря 2020 г.

Пересмотрели

Закончили пересматривать все 12 сезонов Теории Большого Взрыва. В связи с тем, что понравившийся мне перевод сейчас не найти, а доступный всюду перевод от Кураж Бамбей - полная фигня, мы его пересмотрели полностью на английском. С помощью субтитров, конечно, ибо в сериале много терминов, за которыми не уследить. Правда, во многих местах русские титры заметно отходили от английского текста. При просмотре в оригинале много шуток стали понятнее и смешнее - bazinga.

На Кинопоиск HD в конце предлагается бонус, в котором актёры показывают как снимался сериал. Стало понятно, что такое ситком и почему там есть закадровый смех. На самом деле каждая серия снималась вживую в декорациях перед зрителями, включая езду на машине. А закадровый смех - это эмоции зрителей в зале.

РЖД бонус

У меня есть карта от этого сайта, на которую регулярно капают баллы с купленных на семью билетов. На днях от них пришло письмо (т.е. они знают мой email), что была попытка взлома и надо бы сменить пароль. Однако, при попытке авторизации меня направляют на страницу восстановления пароля, где нужно ввести номер карты и всякие данные, типа фамилии матери и другой информации, ранее используемых для банков. Восстановления через email нет, поэтому всё выглядит как-то стрёмно...

понедельник, 14 декабря 2020 г.

Потоп

Сегодня на нас опять наехала соседка, что у неё звонок постоянно звонит. Оказалось, что сверху нас заливают прямо по стояку с проводами, где электрощиток.

Поставил в известность соседей сверху и позвонил по 004, чтобы решили проблему.

Вот это да!

Где-то полчаса назад отрубились сервера Google - поросли все рабочие митинги через Google Meet, отвалилась почта... Даже youtube не посмотреть!

Что это такое было?

суббота, 12 декабря 2020 г.

Токио-City

Пошли к метро Мишку встречать, который сегодня в ЮМШ занимался один одинёшенек. Решили зайти поужинать, а там - аншлаг! Минут 15 пришлось толпиться в предбаннике.

Бесплатный аккаунт

Пока мой основной аккаунт болтается в центре галактики я решил присоединиться к нашей эскадрилье и немного повоевать на втором аккаунте. Начальный Sidewinder снарядил для боя и полетел в зону конфликта высокого уровня. Корветы лопались один за одним! А всё потому, что в крыле со мной были дружественные Anaconda и Federal Corvette. Вначале у меня было заработано около 2M кредитов, так на одних ваучерах я поднял 5М, а ещё связанную с боёвкой миссию выполнил - ещё 11М. Это, конечно, неплохой старт, но потом соратники поделились парой миссий по 50М каждая и я решил прикупить боевой Alliance Challenger.

пятница, 11 декабря 2020 г.

Сидячая тренировка


На пристрелке рука дёрнулась один раз, но, в целом, результаты неплохие. Сегодня тренировали стрельбу сидя - на второй мишени видно, что так результаты гораздо лучше. Потом отрабатывали серии - переносы, вставание и т.д. Но самое главное, что сегодня тренировали - восстановление темпа стрельбы после казуса. Нам выдали такие Викинги, что каждые 10 выстрелов его клинило. Очень полезное упражнение, ибо когда сталкиваешься с такой ситуацией во время матча, то можно потерять кучу времени. У меня раза с десятого стало получаться вполне неплохо.


Ну а под конец мы пытались на время обстрелять металл сидя, а бумагу - стоя. У меня получилось около 12 секунд.

Pillars of Eternity

У меня уже давно в списке желаемого на Steam лежит эта игра. Но сейчас её бесплатно раздают в Epic Games и есть шанс попробовать. По отзывам - должна быть добротная RPG.

четверг, 10 декабря 2020 г.

JetBrains Space

У нас вчера официально представили новый продукт для обустраивания командной работы. Всё находится внутри одной вкладки браузера. На мой взгляд, у такого подхода только один минус - дизайн рассчитан на большие мониторы. На моём 15" ноуте не очень комфортно - приходиться мышкой всё делать.

Sagittarius A*

Вот я и долетел до центра нашей галактики. Черная дыра тут гораздо больше, чем там, но обе они не такие уж и чёрные. В игре эта система представлена двойной системой, где в противовес сверхмассивной чёрной дыре присутствует массивная звезда, но в реальности там всё сложнее.

Поснимал видео, как я там летаю:


В соседней системе построили станцию для путешественников, куда я залетел починиться и сдать данные об исследованных системах и планетах. В сумме заработал около 100М, а исследовательский ранг у меня и так Elite.

среда, 9 декабря 2020 г.

Сули Гули

В честь дня рождения пошли сегодня за халявным тортиком, который приносят имениннику. Поднялись на четвёртый этаж, где вход напротив кинотеатра, а там перекрыто и сказано, что надо подниматься по отдельной лестнице. В Токио-City, где мы были недавно, так же. Выяснилось, что это постановление правительства о закрытии блоков питания, не имеющих отдельного входа с улицы. На мой взгляд, это такой же идиотизм, как и всё остальное, связанное с коронавирусом. Мне по-любому пришлось зайти в торговый центр, подняться на лифте, вернуться на улицу, а потом подниматься по отдельной лестнице, задыхаясь в маске.

Тут мы ему подарили новый телефон и потом сидели, настраивали, переносили данные со старого.

15 лет стукнуло


Как молоды мы были! С этого года Мишке разрешается посещать врачей без присутствия родителей.

Код - это сила!

Чтобы проникнуться динамическим программированием, один из друзей порекомендовал сайт CodeForces. Там можно зарегистрироваться с сыном и выполнять различные задачи из архива. Ну и проверять решение тоже можно. Поддерживается куча языков, даже Kotlin! Хорошая возможность прокачать навыки ещё и в нём.

Я не удержался и сходу решил несколько самых лёгких задач, чтобы опробовать возможности системы:


Судя по всему мне придётся привыкать, что всякие проверки - от лукавого. Для олимпиадного програмирования не нужно проверять входные данные, что позволяет писать код короче:
fun main() {
    val index = readLine()!!.split(' ').map { it.toInt() }[1] - 1
    val list = readLine()!!.split(' ').map { it.toInt() }
    val min = list[index].coerceAtLeast(1)
    println(list.filter { it >= min }.count())
}
Это пример решения задачи Следующий раунд. Как можно заметить, я игнорирую нулевой результат readLine(), а из первого массива беру только второе число, так как первое понадобилось бы только для проверки длины второго массива. Не уверен, нужно ли задавать нижнее значение min как 1, но решение приняли:

понедельник, 7 декабря 2020 г.

Политическая шутка

Fallout - вообще нереалистичная игра. Сотни высокотехнологичных убежищ, в которых люди могут жить в изоляции на протяжении десятков лет? Ага, ЩАЗ. На следующий же день после атомной бомбардировки двери убежищ будут сломаны с криками: "У нас есть права!", "Не могу дышать этой норе!", "Я хочу чизбургер и диетическую ядерколу!" (отсюда)

воскресенье, 6 декабря 2020 г.

Подготовка

Мишу из школы направляют на региональную олимпиаду по информатике и выдали примеры задач для подготовки. Он их делает на Питоне, а потом мы сложные случаи разбираем. Задачи проверяются на сервере, который работает с 9 утра до 9 вечера. Ограничения для всех задач: по времени - 2 секунды, по памяти - 256 мегабайт. Задачи очень разные! Есть элементарные:
Задано четыре числа. Требуется разбить их на две пары, чтобы сумма произведений в этих парах была максимальной. Например, для чисел 2,3,4,5 надо вывести 26 (2*3+4*5).

А бывают архисложные, требующие подключения серьёзного математического аппарата:
Для целого положительного числа от 1 до 1000 требуется найти число способов представить его в виде суммы нечётных слагаемых. Порядок слагаемых неважен. Например, для числа 6 надо вывести 4. Сами разбиения выводить не надо:
[1+1+1+1+1+1], [3+1+1+1], [3+3], [5+1]

Я сначала решил "в лоб" - прямым перебором, используя Set для фильтрации. Потом ускорил в несколько сотен раз, отказавшись от Set. Это позволило мне обнаружить, что происходит переполнение для больших чисел. Посему мне пришлось заменить long на BigInteger, замедлив программу раза в два.
fun count(array: IntArray, size: Int): BigInteger {
  var count = BigInteger.ONE
  val size2 = size - 2
  if (size > 2 && array[size - 1] == 1 && array[size2] == 1) {
    array[0] += 2
    count = count.plus(count(list, array, size2))
    array[0] -= 2
    var index = 0
    while (++index < size2) {
      if (array[0] == array[index]) continue
      if (array[0] == array[index] + 2) {
        array[index] += 2
        count = count.plus(count(list, array, size2))
        array[index] -= 2
      }
      break
    }
  }
  return count
}
Тут стало очевидно, что после 170 мы перестаём укладываться в две секунды и подсчёт ответа для 400 занял более двух дней:
in: 100; out: 444793; time: 21 ms
in: 200; out: 487067746; time: 7958 ms
in: 300; out: 114872472064; time: 1873429 ms
in: 400; out: 11962163400706; time: 196301147 ms

Написал код для вывода комбинаций и пытаемся анализировать, чтобы для получившейся выше рекурсивной функции вывести формулу, ибо полный перебор - это уже перебор. 8)

суббота, 5 декабря 2020 г.

Genco Barbers

Недавно у нас рядышком открылась мужская парикмахерская и мы с Лёшкой решили в ней постричься. Как оказалось, зря. В салонах стригут заметно лучше, хотя дольше и дороже. В Часцах и то лучше стригут. А в Питере хорошая парикмахерская была у армян в какой-то подворотне на Василевском острове. У нас же только салоны красоты...

пятница, 4 декабря 2020 г.

И так бывает

Не прошло и шести лет, как я обнаружил, что у Stavic при длинном нажатии на кнопку запускается автоматическое опускание стекла. Причём работает это только с кнопкой для водительской двери и только на опускание.

У Scenic автоматическое опускание и поднимание стёкол работало для всех дверей и было более интуитивно понятным.

Тренировка

Сегодня фотографий не будет, ибо я оставил телефон в машине. Занимались короткими и широкими переносами, учились менять темп стрельбы в зависимости от расстояния до мишени и работали с таймером. У меня лучшее время - 6.6 секунды на 5 попперов.

Почта

У Мишки стал глючить его Galaxy A3 и мы решили подарить ему новый телефон на день рождения. Заказал ему новый на AliExpress. Оказалось, что там тоже пошлину надо платить.
Даже прислали формулу расчёта таможенного платежа:
15% * (18 712,82 - 18 046,28) рублей = 99,98 рублей.

Сегодня получал пакет на нашей почте. В предбанник набились пенсионеры, через которых туда-сюда администратор проводила людей, кто пришёл за посылкой. Я подумал было, почему они пенсию на дом не выписывают, но внутри услышал разговор. Одна из пенсионерок спросила, а где её знакомая почтальонша, чтобы поговорить, а ей ответили, что работает мобильная бригада, а обычные сотрудники на изоляции.

среда, 2 декабря 2020 г.

Мусорная реформа

У нас к клетке для пластика добавили контейнер для бутылок. Бутылка запихивается с трудом - дырка не разработана:

Подарок ко дню рождения

Прислали курьером из офиса подарок. Прикольная ветровка, чуть потеплее, чем предыдущая. У этой мне очень цвет нравится, гораздо позитивнее, чем у тёмной одежды, хотя и менее практично.

Жаль, что рукава коротковаты, но на меня вообще сложно найти пошив.

IntelliJ IDEA 2020.3

Встречайте новую версию!
А мы начинаем работы над следующим релизом...

вторник, 1 декабря 2020 г.

Тяжёлая техника

Продолжаю возиться в грязи. Так и не понял, как завершить миссию, когда всё сделал. Зато ни одного забора не раздавил:

воскресенье, 29 ноября 2020 г.

суббота, 28 ноября 2020 г.

MudRunner

Сейчас Epic Games раздаёт игру про езду по говнищу на советских внедорожниках. Я сегодня немного покатался:

Рыбка моя