Это все в заголовке ...
Возьмите в качестве входных данных положительное целое число n>=12
и ... делайте то, что говорит заголовок.
Да, это на OEIS A187924 .
Некоторые тестовые случаи
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
Это код-гольф . Самый короткий код в байтах побеждает!
Ответы:
Befunge, 81 байт
Попробуйте онлайн!
Может обрабатывать как минимум до n = 70, после чего некоторые значения начнут переполняться размером ячейки стека в большинстве реализаций, а в тех, которые этого не делают, это займет так много времени, что не стоит ждать, чтобы выяснить это.
Учитывая эти ограничения, мы даже не пытаемся обрабатывать значения n больше 99, что означает, что мы можем легче проверить, заканчивается ли значение на n с помощью простого сравнения значения по модулю 100 с n .
Ниже приведена более подробная разбивка кода.
Чтение п из стандартного ввода и сохранения в памяти.
Инициализируйте тестовое значение v равным 0 и запустите основной цикл, увеличивая v вперед.
Проверьте
v%n == 0
, а если нет, вернитесь к началу основного цикла.Проверьте
v%100 == n
, а если нет, вернитесь к началу основного цикла.Суммируйте цифры в v путем многократного добавления v по модулю 10 и деления v на 10.
Проверьте, равна ли сумма n , и если нет, вернитесь к началу основного цикла.
В противном случае выведите v и выйдите.
источник
05AB1E , 14 байтов
Попробуйте онлайн!
объяснение
Решения, требующие больших префиксов, будут задерживаться на TIO
источник
JavaScript (ES6),
5554 байтаПринимает ввод в виде строки. Требуется браузер с поддержкой хвостовой рекурсии для больших результатов. Редактировать: 1 байт сохранен благодаря @Arnauld.
источник
eval([s,...a].join`-`)?
будет также работать, хотя это не короче ...||
.Brachylog v2,
1210 байтПопробуйте онлайн!
Это отправка функции, которая принимает ввод через
.
и производит вывод через?
(в противоположность обычному соглашению; все функции брахилога имеют ровно два аргумента, которые могут быть аргументами ввода или вывода, но язык не требует применения какого-либо конкретного аргумента). Обычно мы не считаем соглашения об использовании аргументов актуальными в PPCG .объяснение
В предыдущей версии этого решения был специальный случай (
Ḋ|
т. Е. «Буквально возвращать цифры») для однозначных чисел, но вопрос, по-видимому, гласит, что вам не нужно проверять это (спасибо @DLosc за это), поэтому я удалил Это. (Написанное решение не будет работать с однозначными числами, поскольку Brachylog не будет рассматривать 1 как возможность для неизвестного в умножении предотвратить бесконечные циклы; его умножения произвольной арности.)Таким образом, этот ответ теперь относится к прямому переводу спецификации. Начиная с
?
(выход / число, которое мы пытаемся найти; предикат брахилога всегда неявно начинается с?
), мы используем,a₁.
чтобы утверждать, что он имеет.
(вход) в качестве суффикса. Тогда;A×?
означает, что мы можем умножить (×
) результат на что-то (;A
), чтобы произвести?
(вывод). Наконец,ẹ+
sums (+
) для digits (ẹ
)?
, и по умолчанию в конце каждой программы на брахилоге создается неявное утверждение, которое дает конечный результат.
. Другими словами, эта программа ".
является суффиксом?
,.
умноженным на что-то?
,.
является цифрой суммы?
", что очень близко к буквальному переводу оригинальной программы.Это
≜
необходимо для выполнения требования о сумме цифр. Я предполагаю, что кое-что оẹ
не любит неизвестных, поэтому он≜
говорит Brachylog использовать метод грубой силы для этой части программы, а не алгебры.источник
Haskell , 72 байта
Попробуйте онлайн!
Обратите внимание, что найденное число минус n должно быть кратным как n, так и 10 ^ длина (n).
Вдохновленный Лайкони и полностью человеком
источник
lcm n(10^length(show n))
вlcm(10^length(show n))n
1 байтАлиса , 35 байт
Попробуйте онлайн!
объяснение
Эта программа имеет действительно хорошее сочетание и взаимодействие между режимами Cardinal (целочисленная обработка) и Ordinal (обработка строк).
Обычная структура для задач с десятичным вводом / выводом, которые работают в основном в кардинальном режиме:
И актуальная программа:
источник
Java (OpenJDK 8) ,
13611010392 байта-26 благодаря JollyJoker
-7 еще раз благодаря JollyJoker
-11 благодаря Оливеру Грегуару
Попробуйте онлайн!
Должен любить Яву! Вполне возможно, что я использую неэффективный подход, но у меня нет встроенной функции контрольной суммы и двойного преобразования в String, чтобы проверить конец числа, стоит байтов ...
Ungolfed:
источник
(""+i).endsWith(""+a)
должно сработать.n/=10
вместоn=n/10
тоже. Такжеi+=a
в цикле for вы можете пропустить проверку делимости.Mathematica, 72 байта
-18 байт от @MartinEnder
Попробуйте онлайн!
Вот еще одна версия от Мартина Эндера.
Этот подход может доходить до
n=40
(41 превышает предел итерации по умолчанию)Mathematica, 65 байт
Попробуйте онлайн!
источник
Python 2 , 74 байта
Это решение предполагает это
n <= sys.maxint
.Попробуйте онлайн!
источник
str(x)
сx
в бэк-тики два раза , чтобы сохранить 6 байт (как вы бежите обратно клещ в бэк-тики?).`
обратной косой черты внутри спины.L
что может испортить алгоритм.C (GCC)
7169 байт, отказывает на 100Я пытался с длинным и% 1000, но тайм-аут
-2 байта благодаря устойчивой коробке
Попробуйте онлайн
источник
шелуха ,
20 1917 байтСпасибо @Zgarb за -2 байта!
Попробуйте онлайн!
источник
C # (.NET Core) ,
90 8483 + 18 = 101 байтПопробуйте онлайн!
(""+n)
в некоторых местах иn.ToString()
в других.источник
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
экономит 20 байтов.n%100
? Что еслиn>100
?Юлия, 70 байт
источник
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Вы можете сэкономить 5 байтов с этим. Попробуйте онлайн!Ом v2 , 16 байт
Попробуйте онлайн!
источник
Пип , 18 байт
Алгоритм, вдохновленный ответом Эмигны .Попробуйте онлайн!
Как это работает
источник
JavaScript REPL (ES5),
6059 байтисточник
Haskell , 75 байт
Попробуйте онлайн!
Объяснение:
Интересно,
n
можно ли сократить часть «заканчивается »? Я тоже пыталсяshow n`elem`scanr(:)""(show x)
, но это дольше.источник
Рубин ,
65 63 5453 байтаПопробуйте онлайн!
источник
Pyth ,
2221 байтПопробуй это здесь!
источник
Haskell , 75 байт
Попробуйте онлайн!
источник
PowerShell , 84 байта
Попробуйте онлайн!
Простая конструкция, но длинные команды. Тайм-аут на TIO для
n=100
, но если мы явно настроеныi
быть близко, он выводит правильно.Это простой
for
цикл, который продолжается до тех пор, пока выполняется одно из условий. Три условия: 1)$i%$n
, то есть у нас есть остаток; 2)$i-notmatch"$n$"
, то есть, оно не соответствует регулярному выражению последней пары цифр; и 3)([char[]]"$i"-join'+'|iex)-$n
, т. е. объединенные цифры не равны$n
(здесь проверяется простым вычитанием, поскольку ненулевые значения являются достоверными). Внутри цикла мы просто увеличиваем$i
.Таким образом, если у нас нет остатка, регулярное выражение совпадает, а числа равны, все три условия равны,
$false
и мы выходим из цикла. В результате мы просто можем оставить$i
на конвейере, и вывод неявный.источник
PHP, 73 + 1 байт
Беги как труба с
-R
.петли
$i
через кратные<input>
доsum_of_digits-<input>
иtail_of_i-$n
являются falsy; затем печатаетi
.источник
м4, 210 байт
Определяет макрос
f
который вычисляет ответ. Это немного медленно - необычно так - но я обещаю, что это работает.Я думал, что m4 было бы хорошо, потому что он рассматривает целые числа как строки по умолчанию, но это довольно плохо.
источник
Скала, 120 байт
Это работает до
n = 70
, после чего целые числа переполняются. Для одного дополнительного символа переменнаяInt
может измениться на aLong
и разрешитьn > 100
вычисление значений .Вот немного более длинная версия без гольфа:
источник
R , 115 байт
Попробуйте онлайн!
Ужасная функция R. Увеличивается
F
(начинается с0
) на,n
пока не будет найдено значение, удовлетворяющее требуемым свойствам, которое затем возвращается. Применениеany
наdouble
выражения отправляет предупреждение для каждой итерации цикла, но не влияет на правильность.Тайм-аут на TIO для достаточно больших входов (n = 55 или выше), но должен правильно вычислить решение, учитывая достаточно времени / пространства.
источник
Perl 5,
4644 + 1 (-p) = 45 байт2 байта сохранены благодаря Xcali, не могли найти лучше
первый ответ
Попробуйте онлайн
источник
Желе ,
2221 байтПопробуйте онлайн!
Редактировать: сжатый в одну строку
объяснение
Мне понадобилось много часов, чтобы написать, потому что я изучаю желе, но теперь, когда я закончил, я так доволен. Долгое время я не понимал, что мне нужно,
¤
и я просто не мог заставить его работать. Глядя на [этот] [1] хорошо объясненный код помог мне заключить сделку. Множество других ответов Jelly в PPCG тоже меня наставили.источник
Javascript, 224 байта
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-golf:Использование: 1. getNumber (12) 2. getNumber (13) 3. ....
источник
getNumber
илиsumDigits
.J ,
3733 байтаПопробуйте онлайн!
Предварительный счетчик итераций ~ в 5 раз быстрее, но на 5 байт длиннее:
Попробуйте онлайн!
Увеличение на 100, 27 байтов :
Попробуйте онлайн!
источник
Python 2 , 70 байт
Попробуйте онлайн!
источник