Большинство квадратных чисел имеют по крайней мере 1 другое квадратное число, с которым их расстояние Левенштейна равно 1. Для данного квадрата каждый квадрат, который удовлетворяет этому условию, называется соседом Левенштейна от . Например, является соседом Левенштейна из , так как требуется только 1 правка ( ). Однако не является соседом Левенштейна из , так как требует минимум 2 правок. Числа с начальными 0 ( ) не являются соседями Левенштейна.
Ваша задача - взять квадратное число в качестве входных данных и вывести в любом разумном формате полный список его соседей Левенштейна. Вы можете включить в список повторных соседей, если хотите, но не можете включать исходный ввод, поскольку он не является соседом Левенштейна.
Любой разумный формат должен включать в себя какой-то разделитель между выходами, например ,
или символ новой строки, и может выводить символы с соответствующим значением Unicode (например, brainfuck), а не сами цифры. Порядок вывода не имеет значения.
Этот вход всегда будет квадратным числом больше . Ваша программа не должна иметь никаких теоретических ограничений, но если она не подходит для больших чисел по практическим причинам (например, за пределами 32-разрядных чисел), это вполне нормально.
Если входные данные не имеют соседей Левенштейна, выходные данные должны четко отражать это, например, ничего не выводить, пустой массив / строка, отрицательное целое число, и т. Д.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Контрольные примеры
Вот результаты для квадратов от до :
1: 4, 9, 16, 81
4: 1, 9, 49, 64
9: 1, 4, 49
16: 1, 36, 169, 196
25: 225, 256, 625
36: 16, 361
49: 4, 9
64: 4
81: 1, 841
100: 400, 900, 1600, 8100
121: 1521
144: 1444
169: 16, 1369
196: 16, 1296, 1936
225: 25, 625, 1225, 2025, 4225, 7225
256: 25
289: 2809
324: 3249
361: 36, 961
400: 100, 900, 4900, 6400
Кроме того, 1024
не имеет никаких соседей, так что это хороший тестовый пример.
2025
.32 * 32 = 1024
у Левенштейна нет соседей.1024
не имеет соседей Левенштейн, я буду редактировать этот пример вОтветы:
05AB1E ,
11 106 байтов-4 спасибо грими !! (сначала квадрат вместо поиска квадратов сохраняет 3; используйте 10 ^ n сохраняет 1)
Принимает целое число, выводит, возможно, пустой, список
Попробуйте онлайн! - Это безумно-медленно из-за
°
, так что нет смысла пытаться это даже для9
.Или попробуйте немного более быструю версию - этот добавляет восемь вместо,
8+
затем использует тот же подход.Как?
источник
9s«
вашем 11-байт может быть9ì
. Хороший точный ответ, хотя! +1 от меня.т+Lnʒ.L
. Нелепо замедлит 6:°Lnʒ.L
. Бесконечно медленный 5:∞nʒ.L
.∞nʒ.L
это приемлемо в качестве ответа, потому что представления должны быть прекращены . Не связано: ваша ссылка TIO для 7-байтовой версии использует9ì
, что примерно в 100 раз медленнее, чемT+
для больших чисел. Мой комментарий использовалсят+
(добавьте 100), чтобы быть безопасным, но оказывается,8+
что этого достаточно во всех случаях.Сетчатка 0.8.2 ,
142138 байтПопробуйте онлайн! Объяснение:
Для каждой цифры попробуйте: а) удалить ее; б) поставить перед ней другую цифру; в) изменить ее на другую цифру. На данный момент другая цифра помечена знаком
#
.Для каждой потенциальной разной цифры подставьте каждую возможную цифру.
Удалите числа, которые теперь начинаются с нуля.
Удалить все дублированные номера. (Это просто оставляет строки пустыми.)
Преобразовать в одинарный.
Сохраните все квадратные числа, кроме последнего (который всегда является входным числом).
Преобразуйте оставшиеся числа обратно в десятичные.
источник
Р ,
4241 байтПопробуйте онлайн!
источник
Python 2 ,
173167149148147144139138 байтПопробуйте онлайн!
19 + 3 + 5 + 1 = 28! байты спасибо Джонатану Аллану .
источник
[p for p in...]
избыточно Мы можем вернуть набор (или дубликаты).'0'<v[:1]
может быть'1'<=v
. Это намного медленнее, ноrange(len(a)+1)
может бытьrange(n)
. Используйте переменную дляi
иi+1
ломтики, чтобы избежать суммы. Используйте лямбду. РЕДАКТИРОВАТЬ сохранить 48 от вашего предыдущего.Oracle SQL, 93 байта
Тест в SQL * PLus.
источник
PHP , 62 байта
Попробуйте онлайн!
Этот скрипт печатает соседние входные данные Левенштейна, разделенные
_
конечным разделителем, и, если соседей нет, ничего не печатает.К счастью, в PHP есть встроенное расстояние Левенштейна ! Этот сценарий проходит по всем квадратным числам от 1 до
input * 91
, поскольку все действительные соседи Левенштейна (расстояние 1) находятся в этом диапазоне. Затем печатает каждое число в этом диапазоне, у которого расстояние Левенштейна равно 1, с вводом.источник
JavaScript (V8) ,
129 125123 байтаПринимает ввод в виде строки. Печатает соседей Левенштейна в STDOUT.
Попробуйте онлайн!
комментарии
источник
print()
но я не понимал, что у Нода это тоже было ...Желе ,
5338 байтПопробуйте онлайн!
Там нет встроенного для расстояния Левенштейна, поэтому генерирует все возможные правки с 1-го расстояния, а затем исключает те, которые имеют начальный ноль, и сохраняет только идеальные квадраты. Не фильтрует дубликаты (как разрешено).
источник
Wolfram Language (Mathematica) ,
6259 байтПопробуйте онлайн!
Используя оценку из R ответа .
источник