


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



Ёлка на Дворцовой, похоже, живая, но более щуплая, чем в Таллинне. Мишка даже рассмотрел арматуру в просветах. Ряженые проходу не дают - пришлось осадить пару раз. Ну что это у них за Пётр I ниже 2 метров?
По сложившейся традиции мне Дед Мороз подарил настольную игру Билет по Европе. Сегодня я выиграл, но Мишка был близок к победе. Прикольная игра!
Дошли за полтора месяца. Хорошо, что почта сегодня работает.





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

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 кб)
Вернулся в Пузырь, а тут дорогие миссии раздают. В принципе, чтобы заработать 50M надо ещё и потратить 20-30M. Но это только тому, кто закупает и везёт товар. А те, кто в Крыле, получают все 50M только за участие.

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




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



