Следующий день знаменитой серии Пришествие кода. Мои попытки решить головоломки в Go.

Предыдущие части:
День 1

Проблема первая:

Когда вы проходите через дверь, в вашем направлении кричит светящаяся гуманоидная фигура. "Вы там! Ваше состояние похоже на бездействие. Приходите, помогите нам исправить искажение в этой электронной таблице — если мы потратим еще миллисекунду, нам придется отобразить курсор в виде песочных часов!»

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

Например, при наличии следующей электронной таблицы:

5 1 9 5
7 5 3
2 4 6 8

Наибольшее и наименьшее значения первой строки — 9 и 1, а их разница — 8.

Наибольшее и наименьшее значения второй строки — 7 и 3, а их разница — 4.

Разница в третьей строке равна 6.

В этом примере контрольная сумма электронной таблицы будет 8 + 4 + 6 = 18.

Какова контрольная сумма для электронной таблицы во входных данных головоломки?

Проблема вторая:

"Отличная работа; похоже, мы все-таки на правильном пути. Вот звезда за ваши усилия». Однако программа кажется немного обеспокоенной. Могут ли программы быть обеспокоенными?

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

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

Например, при наличии следующей электронной таблицы:

5 9 2 8
9 4 7 3
3 8 6 5

В первой строке единственные два числа, которые делятся без остатка, — это 8 и 2; результат этого деления 4.

Во второй строке два числа: 9 и 3; результат 3.

В третьей строке результат равен 2.

В этом примере сумма результатов будет 4 + 3 + 2 = 9.

Какова сумма результатов каждой строки во входных данных головоломки?

Решение:

Примечания:

  • В Go нет встроенной функции «min» или «max» для массивов или срезов, поэтому вам придется написать ее.
  • Я поместил входные данные головоломки в отдельный файл, поэтому сначала вам нужно прочитать входные данные из файла и преобразовать их в соответствии с вашими потребностями. До того, как я увидел вторую часть, я думал, что задание может быть таким же, как и в первой части, а не по столбцам. Поэтому я решил построить двумерный массив. В этом не было необходимости.

Если у вас есть какие-либо предложения, не стесняйтесь комментировать!

SR.