Еженедельный вызов 176
Задача, Мои решения
Задача 1: Переменные кратные
Задача
Напишите скрипт для нахождения наименьшего положительного целого числа x
такого, что x
, 2x
, 3x
, 4x
, 5x
и 6x
являются перестановочными кратными друг друга.
Мое решение
Это одна из задач, где мы могли бы переработать решение, чтобы сделать его быстрее. Учитывая, что решение может быть найдено за доли секунды, в этом нет необходимости.
Например, после 1 666 следующее возможное решение — 100 000. В результате 1667 × 6 получится пятизначное число, которое не может быть перестановкой исходного числа.
Самый простой способ выяснить, является ли число перестановкой, — просто отсортировать числа по порядку. В Python мы можем сделать это с помощью ''.join(sorted(str(num)))
. В то время как join '', sort split //, $num
сделает аналогичную вещь в Perl.
Как и во многих других задачах, у меня есть счетчик, который начинается с единицы и увеличивается до тех пор, пока мы не найдем решение. Для каждого числа мы выясняем, является ли число, умноженное от 2 до 6, перестановкой исходного числа, и выходим из внутреннего цикла, если это не так.
Наконец, когда решение найдено, я вывожу его на печать и выхожу из функции main()
.
Знаете ли вы? Решение (142 857) имеет свою собственную страницу в Википедии.
Примеры
$ ./ch-1.py
142857
$ ./ch-1.pl
142857
Задача 2: Обратимые числа
Задание
Напишите скрипт для поиска всех обратимых чисел меньше 100. Число считается обратимым, если сумма этого числа и его обратной части состоит только из нечетных цифр.
Мое решение
Это относительно простая задача. Считайте от 1 до 99 и добавляйте в список solutions
, если число является обратимым.
Поскольку в python нет простого способа обратить целое число, я преобразовываю его в строку и обратно в целое число с помощью int(str(num)[::-1])
. В Perl это просто делается с помощью метода reverse
. Чтобы проверить, является ли число нечетным, я сравниваю его с регулярным выражением ^[13579]+$
.
Затем я вывожу все числа в списке solutions
.
Примеры
$ ./ch-2.py
10, 12, 14, 16, 18, 21, 23, 25, 27, 30, 32, 34, 36, 41, 43, 45, 50, 52, 54, 61, 63, 70, 72, 81, 90
$ ./ch-2.pl
10, 12, 14, 16, 18, 21, 23, 25, 27, 30, 32, 34, 36, 41, 43, 45, 50, 52, 54, 61, 63, 70, 72, 81, 90