Ваша задача - написать программу или функцию, которая определяет, делится ли число на другое. Подвох в том, что он должен дать ответ как можно скорее , даже если не все цифры номера были даны.
Ваша программа должна принимать целое число D ≥ 2 и затем последовательность цифр в качестве входных данных. Они представляют собой цифры другого целого числа N ≥ 1, начиная с наименее значащей цифры. В первой точке , что N либо должен или не должен быть divisble на D , ваша программа должна вывести соответствующий ответ и выход. Если достигнут конец ввода, он должен вывести, делится ли полное N на D .
Вот список допустимых форматов ввода для N (оставьте комментарий, если вы считаете, что то, что не включено, должно быть разрешено):
Стандартный ввод : цифры даны в отдельных строках; конец ввода - EOF или специальное значение; Выход означает, что функция возвращается или программа завершается.
Аналоговый ввод : например, нажатием клавиш или десятью кнопками, представляющими каждую цифру; конец ввода является специальным значением; Выход означает, что функция возвращается или программа завершается.
Функция с глобальным состоянием : вызывается повторно с последовательными цифрами; конец ввода является специальным значением; Выход означает, что функция возвращает ненулевое значение. Обратите внимание, что если вы используете глобальное состояние, оно должно быть очищено после того, как значение возвращено, или иначе сброшено , чтобы функция работала несколько раз .
Curried function : возвращает либо другую функцию, которая будет вызвана со следующей цифрой, либо значением; конец ввода - это специальное значение или вызов функции без аргумента; Выход означает, что функция возвращает ответ, а не другую функцию.
Приглашение GUI или подобное : отображается повторно; конец ввода «отмена» или эквивалентный, или специальное значение; Выход означает, что запросы перестают появляться.
Функция итератора : input - это объект или функция с состоянием, который возвращает следующую цифру при вызове, end of input - исключение или специальное значение; Выход означает, что итератор перестает вызываться.
Ввод для D и вывод может быть через любой приемлемый стандартный метод .
Тестовые случаи:
2; 6 => true
5; 6 => false
20; 0 3 => false
20; 0 4 => true
100; 1 => false
100; 0 0 => true
100; 0 2 => false
4; 2 4 => false
4; 2 5 => true
4; 2 [eof] => false
4; 4 [eof] => true
625; 5 5 => false
625; 5 7 2 => false
625; 5 7 3 6 => false
625; 5 7 3 4 => true
7; 9 3 4 [eof] => false
7; 9 3 4 5 [eof] => true
140; 0 3 => false
140; 0 4 5 [eof] => false
140; 0 4 5 1 [eof] => true
14; 4 5 1 4 [eof] => false
14; 4 5 1 4 1 [eof] => true
источник
digits
входных данных со специальным значением для EOF?[]
и[2]
возвращение ничего, кромеfalse
илиtrue
( в том числе и самой функции и т.д. ...) в то время как[2,3]
,[2,3,1]
и[2,3,1,EOF]
возвращениеtrue
. Мне кажется, что это близко к глобальному состоянию.Ответы:
JavaScript (ES6), 70 байт
Формат ввода: функция Curried
Попробуйте онлайн!
Как?
Therefore, if(1) is equal to 0 for all 0≤k<p , it will also be equal to 0 for any k≥p and the answer is true.
For the same reason, if(1) is greater than 0 for all 0≤k<p , the answer is false.
If the results of(1) are mixed, we can't decide yet and need either more digits of q или уведомление EOF.
комментарии
источник
Пакет,
177169 байтПринимает
d
в качестве параметра командной строки и считывает цифры вn
отдельных строках-
как маркер EOF. Выходы1
делятся,0
если нет. Объяснение:Инициализируйте
n
пустую строку.g
являетсяgcd(d, 10**len(n))
Начните цикл чтения цифр.
Прочитайте следующую цифру.
Остановить обработку в EOF.
Добавьте следующую цифру к
n
.Обновите
g
сейчас, чтоlen(n)
увеличилось и рассчитатьn%g
.Если
r
не ноль, тоd
определенно не делитn
, потому чтоg
, факторd
, не делит . Еслиr
ноль, то мы знаем только,d
делит ли,n
еслиg
равенd
, поэтому, если это не так, продолжайте цикл.Вырваться из цикла чтения цифр здесь, на EOF.
Рассчитать и неявно вывести результат.
источник