реклама
разместить

Advent of Code 2022: Day 8

После седьмого дня — решение восьмого было, в некотором роде, отдыхом. Хотя «усладой для глаз» его точно не назовёшь — вид оно имеет весьма портяночный.

Когда-то развлекался — делал «крестики-нолики» с полем свободного размера. И для среднего уровня сложности позиция следующего хода компьютера вычислялась сканированием этого самого поля.

Не то, чтобы это всё пригодилось мне в задаче восьмого дня. Но с тех пор, помучившись с отладкой, я крепко запомнил необходимость тщательной проверки границ массивов. Благодаря чему поймал ArrayIndexOutOfBoundsException лишь единожды ¯\_(ツ)_/¯.

static void day8(String puzzleInputUri) throws IOException, InterruptedException { int[][] forest = client.send( request.uri((URI.create(puzzleInputUri))).build(), HttpResponse.BodyHandlers.ofLines() ).body() .map(line -> line.chars().map(cCode -> cCode - '0').toArray()) .toArray(int[][]::new); int mapHeight = forest.length; int mapWidth = forest[0].length; AtomicInteger visibilityCount = new AtomicInteger(mapWidth * mapHeight); TreeSet<Integer> scenicScores = new TreeSet<>(); for (int j = 1; j < mapHeight - 1; j++) { //j down for (int i = 1; i < mapWidth - 1; i++) { //i -> List<Boolean> visibilities = new ArrayList<>(); int scenicScore = 1; //look left for (int k = i - 1; k >= 0; k--) { if (forest[j][k] >= forest[j][i]) { visibilities.add(false); scenicScore *= (i - k); break; } else if (k == 0) { visibilities.add(true); scenicScore *= i; } } //look right for (int k = i + 1; k < mapWidth; k++) { if (forest[j][k] >= forest[j][i]) { visibilities.add(false); scenicScore *= (k - i); break; } else if (k == mapWidth - 1) { visibilities.add(true); scenicScore *= (mapWidth - 1) - i; } } //look top for (int k = j - 1; k >= 0; k--) { if (forest[k][i] >= forest[j][i]) { visibilities.add(false); scenicScore *= (j - k); break; } else if (k == 0) { visibilities.add(true); scenicScore *= j; } } //look bottom for (int k = j + 1; k < mapHeight; k++) { if (forest[k][i] >= forest[j][i]) { visibilities.add(false); scenicScore *= (k - j); break; } else if (k == (mapHeight - 1)) { visibilities.add(true); scenicScore *= (mapHeight - 1) - j; } } visibilities.stream().reduce(Boolean::logicalOr).ifPresent(isVisible -> { if (!isVisible) visibilityCount.decrementAndGet(); }); scenicScores.add(scenicScore); } } System.out.println(visibilityCount); System.out.println(scenicScores.last()); }
11
реклама
разместить
реклама
разместить
Начать дискуссию
реклама
разместить
Путин подписал закон, который обязывает маркетплейсы размещать ссылку на сертификат качества в описании товара

Он вступит в силу с 1 сентября 2026 года.

2121
55
давно обкатанная на алике тема: первая партия товара хорошая, появляется куча отзывов, далее вываливается гора шлака. что мешает продавцу купить 1шт реального товара, получить сертификат и дальше толкать паль, не ясно
OpenAI представила план перехода к коммерческой структуре управления

Некоммерческая организация сохранит долю в бизнесе но потеряет свою надзорную функцию.

OpenAI представила план перехода к коммерческой структуре управления
99
33
11
11
11
Антитайм-менеджмент: почему трудоголики зарабатывают меньше ленивых

Расскажу про подход, который позволил мне построить успешную карьеру, никогда не засиживаясь в офисе допоздна.

Антитайм-менеджмент: почему трудоголики зарабатывают меньше ленивых
66
11
11
11
Владимир Путин подписал закон о праве инвесторов выводить дивиденды с ИИС-3 на банковские счета

За исключением купонных и других выплат по ценным бумагам.

99
22
11
11
11
11
11
Правительство решило ограничить звонки через интернет на мобильные и стационарные телефоны с 1 сентября 2025 года

Решение не коснётся звонков через мессенджеры.

Дополнено в 15:33 мск. Минцифры прокомментировало решение правительства. В ведомстве отметили, что услуги связи с использованием IP-телефонии не запрещаются и будут продолжать оказываться, но для этого потребуется лицензия на оказание услуг телефонной связи. У большинства операторов она уже есть. Для остальных предусмотрен «переходный период», чтоб…

3939
2121
1111
55
22
11
11
11
Надо запретить еще тем кому пишешь чтобы они голосом не отвечали на текст. Вызвать наряд полиции к ним не помешало бы.
Как компания «ПИК» привлекла более 100.000 клиентов при помощи рекламы в Telegram?
Как компания «ПИК» привлекла более 100.000 клиентов при помощи рекламы в Telegram?

Как маркетинговый отдел компании ПИК искал новые, эффективные методы продвижения, и пришел к Telegram... Действительно ли эта соц сеть - лучший вариант продвижения бизнеса в 2025 году? Сегодня разберемся.

66
11
Владимир Путин подписал закон о зачислении доходов иноагентов на рублёвые спецсчета

Воспользоваться деньгами можно будет только после снятия статуса.

6666
1616
55
22
11
11
Ни одного противоречия с действующей конституцией.
[]