Недавно моя репутация была 25,121
. Я заметил, что каждая группа цифр (то есть числа, разделенные запятыми) была идеальным квадратом.
Ваша задача состоит в том, чтобы, учитывая неотрицательное целое число N и унарную булеву функцию черного ящика f : Z * → B , получить истинное значение, если каждое значение f, примененное к группировкам цифр N , истинно, и ложно в противном случае.
Можно найти группировку цифр, разбив число на группы по 3, начиная с правой стороны. Крайняя левая группа может иметь 1, 2 или 3 цифры. Несколько примеров:
12398123 -> 12,398,123 (3 digit groupings)
10 -> 10 (1 digit grouping)
23045 -> 23,045 (2 digit groupings)
100000001 -> 100,000,001 (3 digit groupings)
1337 -> 1,337 (2 digit groupings)
0 -> 0 (1 digit grouping)
Дополнительные правила
- Эта функция может отображать либо логическое значение (например,
true
иfalse
),1
s и0
s, либо любое значение truey / falsey. Пожалуйста, укажите, какой формат (ы) поддерживаются вашим ответом. - В качестве входных данных вы можете взять целое число или целочисленную строку (то есть строку, состоящую из цифр).
- Вы можете написать программу или функцию.
- При передаче цифровых групп в функцию f вы должны обрезать все ненужные начальные нули. Например, f при применении к N = 123 000 должно выполняться как f (123) и f (0).
Контрольные примеры
Функция обозначения n -> f(n)
, например, n -> n == 0
. Все операторы предполагают целочисленную арифметику. (Например, sqrt(3) == 1
)
function f
integer N
boolean result
n -> n == n
1230192
true
n -> n != n
42
false
n -> n > 400
420000
false
n -> n > 0
0
false
n -> n -> 0
1
true
n -> sqrt(n) ** 2 == n
25121
true
n -> sqrt(n) ** 2 == n
4101
false
n -> mod(n, 2) == 0
2902414
true
n -> n % 10 > max(digits(n / 10))
10239120
false
n -> n % 10 > max(digits(n / 10))
123456789
true
code-golf
number
decision-problem
functional-programming
Конор О'Брайен
источник
источник
n -> n > 0
применить к0
) к тестам, потому что большинство ответов на него не удаются.[0]
.Ответы:
Желе , 5 байт
Попробуйте онлайн!
Аргумент командной строки - это число. Строка над строкой, в которой находится эта функция, является основной строкой остальной части программы, то есть кода, который вызывается для каждой из групп. Будьте осторожны, чтобы не ссылаться на строку
bȷÇ€Ạ
в! Пример, используемый здесь, является 5-м тестом.источник
n -> n != 0
заявления0
0
, и его список группы цифр есть[0]
, и затем онṆ
сопоставляется с каждым элементом (0
здесь единственным ), превращая список в[1]
и, поскольку все элементы этого списка верны,1
возвращается. Обратите внимание, что если бы[]
вместо этого был список групп цифр, результат не изменился бы, так как все элементы[]
являются правдивыми (бессмысленная истина). Тем не менее, результат может быть разным для разных программ, и правила не совсем ясны по этому поводу ( спросил OP ).Брахилог , 8 байт
Попробуйте онлайн!
Функция черного ящика идет во второй строке (или «Нижний колонтитул» на TIO), и целое число читается из STDIN. Отпечатки
true.
илиfalse.
соответственно.источник
APL (Dyalog) ,
1613 байтов3 байта сохранены благодаря @ Adám
Попробуйте онлайн!
Как?
1e3⊥⍣¯1⊢⎕
- введите число и закодируйте в базе 1000⎕¨
- введите функцию и примените к каждому∧/
- уменьшить с логическим иисточник
Python 2 , 46 байт
Попробуйте онлайн!
источник
*
вместоand
.Haskell,
424038 байтФункция черного ящика должна возвращать
True
илиFalse
.Попробуйте онлайн!
Изменить:
-2-4 байта благодаря @ovs.источник
&&
вместоand
C (gcc) ,
665848 байтов-10 байт благодаря @Neil!
Попробуйте онлайн!
источник
g(f,i)int f();{i=!i||f(i%1000)&&g(f,i/1000);}
f(n){return n > n;}
к0
Wolfram Language (Mathematica) , 30 байтов
Попробуйте онлайн!
источник
JavaScript (ES6),
4036 байтПринимает функцию и значение с помощью карри и возвращает 0 или 1. Редактировать: 4 байта сохранены благодаря @Shaggy.
источник
1000
->1e3
чтобы сохранить пару байтов. И вы могли бы заменить&&
с&
еще байт?function_name(n=>n>0)(0)
(возвращаетсяtrue
)Pyth , 9 байт
Попробуйте онлайн! (использует третий контрольный пример)
Предполагается, что функция черного ящика названа
y
. Вы можете объявить такую функцию, используяL
(аргументb
:), как показано на TIO. Я выполню все контрольные примеры позже, если у меня будет время.источник
Stax , 8 байт
Программы Stax не имеют вызовов функций или аргументов, поэтому мы храним в
Y
регистре блок, который потребляет и выдает единственное значение. Это можно сделать перед кодом программы.Вот пример использования идеальной квадратной функции.
источник
Чисто , 54 байта
Попробуйте онлайн!
Определяет функцию
$ :: Int -> Bool
, ожидая, что функцияf :: Int -> Bool
будет определена в другом месте.источник
n -> n > 0
заявления0
Java (OpenJDK 9) , 94 байта
Попробуйте онлайн!
источник
n -> n > 0
к0
Common Lisp ,
7372 байтаПопробуйте онлайн!
источник
05AB1E , 8 байтов
Попробуйте онлайн!
объяснение
Принимает число в качестве первой строки ввода и функцию в качестве второй.
Выходы 1 для правдивых и 0 для ложных.
источник
Q
иÊ
хотя. Я вернусь к 8-байтовой версии..V
то, что векторизация, это даже не принимает список в качестве самого аргумента для начала..V
векторизация. В примере по моей ссылке этоÈ
.Q
иÊ
будет работать с векторизацией, в отличие от того, о чем я говорил ранее, но использование автоматической векторизации заставит эти команды отображаться во всем списке, что не соответствует духу задачи, поэтому нам это нужноε
.Excel VBA, 79 байт
Анонимная функция непосредственного окна VBE, которая принимает входные данные
n
в виде целочисленного типа из диапазона[A1]
и имя публично определенной функции VBA из диапазона[B1]
.Пример использования
В общедоступном модуле в этом случае
f()
определяется функция ввода .Входные переменные установлены.
Затем вызывается непосредственная оконная функция.
источник
Рубин , 37 байт
Попробуйте онлайн!
Рекурсивная лямбда, получающая функцию и целое число и возвращающая логическое значение.
36 байтов (только положительные n)
Эта версия возвращается
1
для правды,false
для фальси. К сожалению, это может потерпеть неудачу, когдаn = 0
Попробуйте онлайн!
источник
g=
если это рекурсивно1
как истинное значениеg[->n{n>0},0]
(возвращаетсяtrue
).0
Яблочное семя , 51 байт
Анонимная лямбда-функция, которая принимает число и функцию и возвращает логическое значение.
Попробуйте онлайн!
источник
Добавить ++ , 15 байт
Попробуйте онлайн!
Требуется функция
f
была объявлена в заголовке TIO.Как это устроено
источник