Это было вдохновлено математической проблемой, которую я видел где-то в Интернете, но не помню, где (ОБНОВЛЕНИЕ: оригинальная проблема была найдена в subreddit математических загадок с доказательством при условии, что это возможно, также см. Этот пост Math SE ), прося доказательство того, что следующий процесс возможен для любой произвольной пары целых чисел (насколько я помню, это было возможно для любой данной пары):
Для пары целых чисел j и k удвоьте одно из них и добавьте одно к другому, в результате чего получится пара новых целых чисел, т. Е. (J, k) -> (j + 1, k * 2) или (j * 2, к + 1). Затем повторите этот процесс с этими целыми числами с целью получения равных пары целых чисел.
Эти приведенные примеры не обязательно являются оптимальными, но показывают, как этот процесс может быть выполнен для любых целых чисел, положительных, отрицательных или нулевых:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
Вызов
Создайте программу, которая дает два целых числа, выводит список шагов, необходимых для того, чтобы сделать эти числа равными, многократно увеличивая одно и удваивая другое
Характеристики
- Решение не обязательно должно быть оптимальным, но оно должно решать конечное число шагов для любой произвольной пары
Ввод должен быть двух целых
Выходными данными могут быть любые разумные выходные данные, которые четко обозначают результирующие целые числа каждого шага, например:
- строка с двумя различными разделителями (любой символ, пробел и т. д.), один для каждого целого числа в паре и один для каждой пары
- например, вход j, k: 2, 5 -> выход: 3,10; 6,11; 12,12
- список списков целых чисел
- например, вход j, k: 2, 5 -> выход: [[3, 10], [6, 11], [12, 12]]
- строка с двумя различными разделителями (любой символ, пробел и т. д.), один для каждого целого числа в паре и один для каждой пары
Если вход представляет собой пару равных чисел, вы можете вывести что угодно, если это согласуется с другими нетривиальными ответами
- например
- если вход [2, 5] имеет выход [[3, 10], [6, 11], [12, 12]], который не включает входную пару, то вход [4, 4] ничего не должен выводить.
- если вход [2, 5] имеет выход [[2, 5], [3, 10], [6, 11], [12, 12]], который включает входную пару, то вход [4, 4] должен вывод [[4, 4]].
- например
Применяются стандартные методы ввода-вывода и запрещаются стандартные лазейки
Это код гольф, поэтому самый короткий ответ в байтах выигрывает
[(12,12),(6,11),(3,10),(2,5)]
для ввода (2,5)
?