Codegolf – Найдите Соответствующие Группы Цифр

  • Автор темы Horin_s
  • Обновлено
  • 22, Oct 2024
  • #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
 
. I noticed that each digit grouping (i.e. the numbers separated by commas) was a perfect square.

Ваша задача состоит в том, чтобы, учитывая неотрицательное целое число Н и унарное логическое значение Функция черного ящика ж : З*Б , дают истинное значение, если каждое значение ж применяется к группам цифр Н правдиво, а в противном случае ложно.

Группы цифр можно найти, разделив число на группы по 3, начиная с правой стороны. Крайняя левая группа может содержать 1, 2 или 3 цифры. Несколько примеров:

sqrt(3) == 1

Дополнительные правила

  • Эта функция может сопоставляться с любыми логическими значениями (например, n -> n == 0 and n -> f(n) ), 0 s and 1 s или любое истинное/ложное значение. Укажите, какой формат(ы) поддерживается вашим ответом.
  • В качестве входных данных вы можете взять целое число или целочисленную строку (т. е. строку, состоящую из цифр).
  • Вы можете написать программу или функцию.
  • При передаче цифровых групп в функцию ж, вам следует обрезать все ненужные ведущие нули. Например., ж, применительно к Н = 123 000 должно быть выполнено как ж(123) и ж(0).

Тестовые случаи

Обозначение функции false , e.g., true . Все операторы предполагают целочисленную арифметику. (Например., 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) )

25,121

#код-гольф #число #задача принятия решения #функциональное программирование

Horin_s


Рег
04 Jun, 2007

Тем
68

Постов
180

Баллов
560
  • 26, Oct 2024
  • #2

Брахилог, 8 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 n -> n == n                           X{X==X}
n -> n != n                           X{X!=X}
n -> n > 400                          X{X>400}
n -> n > 0                            X{X>0}
n -> n -> 0                           X{X{0}}
n -> sqrt(n) ** 2 == n                X{Xq v1}
n -> mod(n, 2) == 0                   X{X%2==0}
n -> n % 10 > max(digits(n / 10))     X{X>Xz10 ì rw}
 

Попробуйте онлайн!

Функция черного ящика располагается во второй строке (или в нижнем колонтитуле TIO), а целое число считывается из STDIN. Принты V or ò3n)mn eV соответственно.

n=0 ||answer||

АПЛ (Диалог), 16 13 байт

Сэкономлено 3 байта благодаря @Adám

n=>n>0

Попробуйте онлайн!

Как?

`ΛmrC_3 - input the number and encode in base 1000

D,f,@,0.5^i2^A= ; Declares a function 'f' to check if a perfect square ; E.g. 25 -> 1; 26 -> 0 L, ; Declare the main lambda function ; Example argument: [25121] 1000$bb ; Convert to base 1000 STACK = [[25 121]] bUª{f} ; Is 'f' true for all? STACK = [1] - input the function and apply on each

f - reduce with logical and

 

Rakusha7


Рег
22 Sep, 2011

Тем
69

Постов
202

Баллов
567
  • 26, Oct 2024
  • #3

Желе, 5 байт

L,1000$bbbUª{f}

Попробуйте онлайн!

Аргументом командной строки является число. Строка над строкой, в которой находится эта функция, является основной строкой остальной части программы, то есть кода, который вызывается для каждой из групп. Будьте осторожны, не ссылайтесь на строку (lambda (n f) ; Function with parameters n and f (all ; Return true if all elements of this list are truthy: (map f ; Map the function f to each element of (or ; This list if it is nonempty: (to-base 1000 n) ; Convert n to a list of "digits" in base 1000 (q (0)) ; Or if that list is empty (when n=0), then use the list (0) instead )))) is in! Используемый здесь пример — это пятый тестовый пример.

 

Hatah1


Рег
26 Dec, 2005

Тем
69

Постов
192

Баллов
537
  • 26, Oct 2024
  • #5

Хаскель, 42 40 38 байт

n = 0

Функция черного ящика должна вернуть false or 1 .

Попробуйте онлайн!

Изменить: -2 -4 байта благодаря @ovs.

 

Jorewal


Рег
11 Nov, 2019

Тем
77

Постов
204

Баллов
609
  • 26, Oct 2024
  • #8

JavaScript (ES6), 40 36 байт

t=1:n=[A1]:While n:t=t*-Application.Run(""&[B1],n Mod 1E3):n=Int(n/1E3):Wend:?t 1 '' Function output (truthy)

Принимает функцию и значение путем каррирования и возвращает 0 или 1. Изменить: сэкономлено 4 байта благодаря @Shaggy.

 

Сергей 14


Рег
06 Jul, 2011

Тем
73

Постов
156

Баллов
531
  • 26, Oct 2024
  • #9

Пиф, 9 байт

[A1]=2902414 '' Input Integer [B1]="f" '' input function

Попробуйте онлайн! (использует третий тестовый пример)

Предполагается, что функция черного ящика имеет имя Public Function f(ByVal n As Integer) As Boolean Let f = (n Mod 2 = 0) End Function . You can declare such a function using f() (аргумент: t=1:n=[A1]:While n:t=t*-Application.Run(""&[B1],n Mod 1E3):n=Int(n/1E3):Wend:?t ), as shown on TIO. I will implement all the test cases later, if I have time.

 

Freizer


Рег
30 Jan, 2008

Тем
74

Постов
186

Баллов
586
  • 26, Oct 2024
  • #10

Стакс, 8 байт

[B1]

Программы Stax не имеют вызовов функций или аргументов, поэтому мы сохраняем блок в [A1] register that consumes and produces a single value. This can be done before the program code.

n

Вот пример используя функцию идеального квадрата.

 

Алинусик


Рег
03 Nov, 2010

Тем
62

Постов
218

Баллов
578
  • 26, Oct 2024
  • #11

Чистый, 54 байта

₄в # convert first input to base-1000 ε } # apply to each element I.V # execute second input as code P # product of the resulting list

Попробуйте онлайн!

Определяет функцию ₄вεI.V}P , expecting a function (defun g(x f)(and(funcall f(mod x 1000))(or(< x 1e3)(g(floor x 1e3)f)))) быть определены в другом месте.

 

Продленка61


Рег
11 Jan, 2012

Тем
69

Постов
180

Баллов
535
  • 26, Oct 2024
  • #14

05AB1E, 8 байт

$ :: Int -> Bool

Попробуйте онлайн!

Объяснение

import StdEnv $n=if(n<1)True($(n/1000))&&f(n rem 1000)

Принимает число в качестве первой строки ввода, а функцию — во второй.
Выходы 1 за правдивость и 0 за ложь.

 

Oligi


Рег
01 Apr, 2020

Тем
84

Постов
228

Баллов
668
  • 26, Oct 2024
  • #15

Excel VBA, 79 байт

Анонимная оконная функция VBE, которая принимает входные данные, {...}Yd store a block in the Y register that executes ... Vk|E get "digits" of input using base 1000 ym map "digits" to array using y as mapping function |A all elements are truthy? as type integer from range Y и имя общедоступной функции VBA из диапазона Vk|Eym|A .

b

Пример использования

В общедоступном модуле функция ввода в данном случае L is defined.

y

Входные переменные установлены.

.AyMjQ^T3

Затем вызывается непосредственная оконная функция.

f=>g=i=>f(i3)&(i<1e3||g(i/1e3|0)) ||answer||

Руби, 37 байт

And@@#/@#2~IntegerDigits~1000&

Попробуйте онлайн!

Рекурсивная лямбда, принимающая функцию и целое число и возвращающая логическое значение.

36 байт (только положительное n)

t=1000;g(f,i)int f();{i=f(i%t)&(i<t||g(f,i/t));}

Эта версия возвращает False for truthy, True для фейси. К сожалению, это может потерпеть неудачу, когда f#n=f(mod n 1000)&&(n<1||f#div n 1000)

Попробуйте онлайн!

 

Dutsneeniasaw25


Рег
25 Oct, 2024

Тем
81

Постов
217

Баллов
672
  • 26, Oct 2024
  • #16

Яблочное семя, 51 байт

g=lambda f,n,k=1000:f(n%k)and(n<k or g(f,n/k))

Анонимная лямбда-функция, которая принимает число и функцию и возвращает логическое значение.

Попробуйте онлайн!

bȷÇ€Ạ ||answer||

Добавить++, 15 байт

bȷÇ€Ạ

Попробуйте онлайн!

Требуется функция ∧/ to be declared in the TIO header.

Как это работает

⎕¨ ||answer||

Шелуха, 7 байт

1e3⊥⍣¯1⊢⎕

Попробуйте онлайн! Берет Н как строка и ж как функциональный объект. Учитывая число, ж может возвращать любое истинное или ложное значение.

 

Bedeaxioxia


Рег
19 Dec, 2013

Тем
74

Постов
224

Баллов
634
  • 26, Oct 2024
  • #17

Япт, 9 байты

Пришлось пожертвовать 3 байтами и принять ввод в виде строки, чтобы обработать ∧/⎕¨1e3⊥⍣¯1⊢⎕ test case when ḃ₁₀₀₀ Compute the base-1000 digits of the input. ↰₁ᵐ Map the blackbox predicate over each digit. We don't care about the result of the map, but the predicate must succeed for each digit, otherwise the entire map fails. . Я мог бы вернуть их, если бы было разрешено передавать группировки в функцию в виде строк и при необходимости преобразовывать их в целые числа внутри функции.

false.

Попробуйте это

Функция, как это разрешено консенсусом, заранее присваивается переменной true. on the second line of the header - the empty first line is essential.

Вот все функции тестовых примеров, переписанные для Japt.

ḃ₁₀₀₀↰₁ᵐ
 

Sanya767


Рег
18 Mar, 2013

Тем
70

Постов
187

Баллов
557
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно