Учитывая положительное целое число, найдите его наименьшее положительное целое число, которое является серией 9, за которой следует необязательный прогон 0. Другими словами, найдите его наименьшее положительное целое число, которому соответствует регулярное выражение /^9+0*$/
.
Например, если заданное положительное целое число равно 2, верните 90, так как 90 является положительным целым числом, кратным 2 и является наименьшим, которому соответствует регулярное выражение /^9+0*$/
.
Тестовые случаи:
n f(n)
1 9
2 90
3 9
4 900
5 90
6 90
7 999999
8 9000
9 9
10 90
11 99
12 900
13 999999
14 9999990
15 90
16 90000
Это код-гольф . Кратчайший ответ в байтах побеждает. Применяются стандартные лазейки .
code-golf
arithmetic
Дрянная Монахиня
источник
источник
Ответы:
Желе ,
1311 байтПопробуйте онлайн!
Как это работает
источник
9
или0
в вашем кодеPython 2 ,
5554 байтаПопробуйте онлайн!
источник
Python 2 , 51 байт
Попробуйте онлайн!
источник
JavaScript (ES6),
474342 байта-4 байта благодаря @Arnauld
-1 байт благодаря @Luke
тесты
Рекурсивное решение (не для 7, 13 и 14), 38 байт
Называется как
f(5)()
. Достигает максимальный размер стека вызовов в Chrome и Firefox дляn=7
,n=13
иn=14
.Показать фрагмент кода
источник
n=>eval('for(i=0;!/^9+0*$/.test(i);)i+=n')
Рубин , 36 байт
Брутфорсинг - вечность для х = 17.
Попробуйте онлайн!
источник
Java 8,
6157 байт-4 байта (и более быстрое выполнение) благодаря @JollyJoker .
Объяснение:
Попробуй это здесь.
источник
r%n
проверки,n->{int r=0;for(;!(""+(r+=n)).matches("9+0*"););return r;}
for(;!(""+r).matches("9+0*");r+=n)
Python 3 , 56 байт
Попробуйте онлайн!
источник
Брахилог , 16 байт
Попробуйте онлайн!
Это довольно медленно
объяснение
источник
05AB1E , 10 байтов
Попробуйте онлайн!
Он просто продолжает добавлять входные данные к 0, пока результат минус первые 9 не будет равен 0.
источник
RProgN 2 , 18 байт
Разъяснения
Попробуйте онлайн!
источник
Математика , 71 байт
Попробуйте онлайн!
Не очень интересное решение для грубой силы, но оно превосходит другой ответ Mathematica, в котором используются некоторые хитрые уловки.
Единственное искупительное качество, которое Mathematica имеет в отношении этой задачи, - это тот факт, что
StringMatchQ
требуется полное совпадение, поэтому я могу это сделать,9+0*
а не^9+0*$
.источник
"9"..~~"0"...
вместоRegularExpression@"9+0*"
.Пакет, 175 байтов
Принимает участие в STDIN. Не решение грубой силы, но на самом деле основано на моем ответе на дробь с точностью до десятичного знака, поэтому оно будет работать для 17, 19 и т. Д., Которые в противном случае превысили бы его целочисленный предел в любом случае.
источник
Mathematica, 127 байт
вход
Выход
вот первые 20 терминов
источник
Haskell , 53 байта
f
принимает и возвращает целое числоПопробуйте онлайн!
Это время ожидания 17, что удобно только за пределами тестовых случаев. Более быстрая версия в 56 байт:
Попробуйте онлайн!
Как это работает
f
генерирует все кратныеn
, преобразует каждый в строку, отфильтровывает те, которые имеют правильный формат, а затем берет первый.Чем быстрее версия вместо этого использует , что требуемые номера имеют вид
10^a-10^b
,a>=1
,a>b>=0
. Для целей игры в гольф он также использует тот факт, что для минимума может работатьa
только одинb
, что позволяет ему генерироватьb
буквы в несколько более коротком «неправильном» порядке.источник
Рубин , 38 + 1 = 39 байт
Использует
-p
флаг.-p
окружает программу:gets
сохраняет свой результат в$_
.eval
используется для преобразования его в число, так как оно короче, чем.to_i
используется грубая сила, увеличивая $ _, пока оно не совпадет с регулярным выражением."#{}"
Строковая интерполяция, она короче, чем.to_s
вызов, так как для этого потребуются парантезы$_+=y
. В заключение,$_
печатается.Попробуйте онлайн!
Попробуйте все тестовые случаи!
источник
Дьялог АПЛ, 34 байта
Рекурсивные dfns, основанные на решении Python Денниса .
источник
C ++, 106 байт
Подробная форма:
Попробуйте онлайн!
источник
[](int n){int T=9,j=10,m;while(t%n)if(t/j){t+=m/j;j*=10;}else{t=(t+1)*9;j=10;m=t;}return t;}}
занимает 94 байта. По сути, рассматривайте это как функциональную задачу для сохранения байтов, экономии на ненужных скобках, использования лямбда-функции для сохранения имен и типов.Python 2 , 79 байт
Попробуйте онлайн!
Некоторые объяснения Он находит наименьшее натуральное формы
10**n-10**b
с ,n>b>=0
который делит входной сигнал.Некоторые IO
источник
PHP , 39 байт
Попробуйте онлайн!
PHP , 52 байта
Попробуйте онлайн!
источник
Swift 3.0, байт: 121
Попробуйте онлайн!
источник
let r=
? Я не вижуr
нигде упомянутыхPython 3 , 62 байта
Эта функция принимает целое число
n
и инициализируетсяm
нулем. Затем он удаляет все нули с концовm
и проверяет, содержит ли результат только 9, и возвращает,m
если это так. Если нет, то это добавляетn
кm
и снова проверяет, и т.д.Попробуйте онлайн!
источник
Java (OpenJDK 8) , 66 байт, не давится 17
Попробуйте онлайн!
Дольше, чем решение @ KevinCruijssen но может обрабатывать немного большие числа. Он рассчитывает числа кандидатов, такие как 10 ^ 6 - 10 ^ 3 = 999000. 64-битные значения по-прежнему являются пределом, ломая для n = 23.
Может быть, можно немного поиграть в гольф, но уже слишком много времени, чтобы заставить его работать ...
источник
> <> 35 байт
Попробуйте онлайн или посмотрите на рыбной площадке !
Предполагается, что вход уже находится в стеке. Работает, ища числа вида 10 a - 10 b , с a <b (да, это знак меньше, чем - байт занимает меньше!), Пока это не делится на ввод, затем выведите 10 b - 10 a . Это намного быстрее, чем метод грубой силы (который в любом случае будет трудным в> <>).
источник
V ,
1914 байтПопробуйте онлайн!
объяснение
источник
JavaScript (ES6),
5149 байтНе самый короткий подход, но он быстро порочный.
источник
Mathematica, 82 байта
Используя образец представления из ответа @Jenny_mathy ...
Входные данные:
Выход:
И относительно аргумента в комментариях при ответе @ Jenny_mathy с @Phoenix ...
RepeatedTiming[]
приложения на вход[17]
даеттак пол миллисекунды. Переходя к немного большему вводу
[2003]
:чуть меньше 4 секунд.
Тестовая таблица: по первым 30 положительным целым числам результаты
Объяснение: Единственное волшебство здесь - это пользовательский итератор («итератор» в смысле CS, а не M'ma)
который воздействует на глобальные переменные
x
, количество ведущих "9",y
количество конечных "0" иd
общее количество цифр. Мы хотим перебрать количество цифр и, для каждого выбора количества цифр, начать с наибольшего числа «0» и наименьшего числа «9». Таким образом, первое, что делает код, это инициализируетd
в 1, форсируетx
в 1 и является желаемым значением .)y
0. Пользовательский итератор проверяет, может ли строка «0» быть сокращена. Если это так, он сокращает строку «0» на единицу и увеличивает строку «1» на единицу. Если нет, он увеличивает число цифр, устанавливает число «0» на единицу меньше числа цифр и устанавливает число «9» на 1.d
y
источник
Ti-Basic (TI-84 Plus CE),
4841 байтВвод
Prompt
-ed во время программы; выход сохраняется вAns
.Объяснение:
Пытается числа вида (10 n ) (10 m -1) = 10 k -10 m , где m + n = k начинается с 1 и увеличивается, и для каждого значения k он пытается m = 1, n = k -1; т = 2, п = к-2; ... m = k, n = 0; пока он не найдет кратное
X
.Это работает до 16; 17 выдает ошибку домена, поскольку
remainder(
может принимать дивиденды только до 9999999999999 (13 девяток), а 17 должно выдавать 9999999999999999 (16 девяток).источник
QBIC , 53 байта
объяснение
источник
C (gcc) , 126 байт
Попробуйте онлайн!
Некоторые объяснения Он находит наименьшее натуральное формы
10**n-10**b
с ,n>b>=0
который делит входной сигнал.Некоторые IO
источник
Perl 5 , 23 + 2 (-pa) = 25 байт
Метод грубой силы
Попробуйте онлайн!
Это медленно, но крошечно.
Более эффективный метод:
41 + 2 (-pa) = 43 байта
Попробуйте онлайн!
Он хорошо работает для любого ввода, но это более длинный код.
источник