Вам дается неотрицательное (основание 9) неотрицательное целое число, состоящее из цифр от 0 до 8, как обычно. Однако число цифр в этом числе (без начальных нулей) является квадратом префекта.
Из-за этого число может быть расположено в квадратной сетке (с сохранением порядка чтения).
Пример с 1480 (1125 основание 10):
14
80
Теперь пусть каждая цифра в такой неариальной сетке указывает движение в другое пространство сетки (с периодическими граничными условиями ):
432
501
678
Это говорит о том, что
0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down
Итак, если в сетке 1480 вы начинаете с 4, вы затем двигаетесь вверх (помните pbc) и влево до 8, что означает, что вы двигаетесь вправо и вниз обратно к 4, начиная цикл с периода 2.
В общем, этот процесс продолжается до тех пор, пока вы не достигнете 0 или не будет замечен цикл. (А 0 считается циклом с периодом 1.)
В случае 1480 период, в конечном итоге достигнутый для каждой из 4 начальных цифр, равен 2 2 2 1
соответственно.
Для более крупной сетки эти числа могут быть больше 8, но мы все равно можем использовать их в качестве «цифр» в новом неариальном номере (просто коэффициенты 9 ^ n, как если бы они были цифрами):
2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)
Мы назовем это силой оригинального числа. Таким образом, сила 1480 составляет 1639 (база 10) или, что эквивалентно, 2221 (база 9).
Вызов
Напишите самую короткую программу, которая сообщает, является ли сила ненарного числа больше, меньше или равна самому числу. (Вам не обязательно вычислять силу.)
Входными данными будет неотрицательное ненарное число, которое содержит квадратное число цифр (и не содержит начальных нулей, кроме особого случая 0). Это должно прийти из командной строки или стандартного ввода.
Вывод должен идти в стандартный вывод как:
G if the strength is larger than the original number (example: 1480 -> strength = 2221)
E if the strength is equal to the original number (example: 1 -> strength = 1)
L if the strength is less than the original number (example: 5 -> strength = 1)
Fun Bonus Challenge:
Какой самый высокий вклад, который вы можете найти, равен его силе? (Есть ли предел?)
Ответы:
Python 2,
213209202Редактировать: Удалено короткое замыкание, которое иногда некорректно. См. ниже.
(Во многом) Тот же алгоритм, что и у @KSab, но очень сильно в гольфе.
Гольфы:
213: короткое замыкание, ошибочное решение.
209: Первый рабочий раствор.
202: Объединение двух строк поиска в один.
Редактировать: я только что понял, что эта программа, и, следовательно, KSab, были недостатки в том, что они игнорируют длины многозначных циклов. Пример неудачи:
В то время как 3 имеет длину цикла 2, и, следовательно, вышеприведенный алгоритм замыкает на «L», на самом деле это должно возвращать «G», потому что длина цикла 14 на второй цифре более чем преодолевает это. Поэтому я изменил программу. Это также стало короче, как ни странно. Чтобы проверить свою программу, используйте
3117275531177455
. Это должно вернутьсяG
.источник
Python 296
На самом деле не слишком неэффективно, он проверяет столько цифр, сколько нужно.
Что касается чисел, равных их силе, я думаю, что единственными решениями являются, для каждого квадрата N x N вплоть до N = 8 квадрат, содержащий N в каждом пространстве. Я думаю, что, поскольку каждое число в цикле должно быть одинаковым числом (длина цикла), каждый цикл должен быть все в одном направлении. Это, конечно, означает, что размер цикла должен быть N (и каждый элемент должен быть N). Я почти уверен, что эту логику можно применить к квадратам и петлям любого размера, то есть нет квадратов, равных их силе, кроме первых 8.
источник
3117275531177455
, потому что размеры цикла больше 8. Смотрите мой пост.cmp
.CJam - 81
Попробуйте это на http://cjam.aditsu.net/
Это может быть, возможно, еще немного.
источник
Луа - пока не играл в гольф
Просто положить сюда на хранение. Я буду играть в гольф (и реализую «Для более крупной сетки эти числа могут быть больше 8, но мы все равно можем использовать их как« цифры »» позже). Работает хоть.
источник