관련 숫자 그룹 찾기


14

최근에 나의 명성은이었습니다 25,121. 각 숫자 그룹화 (즉, 쉼표로 구분 된 숫자)가 완벽한 정사각형임을 알았습니다.

음수가 아닌 정수 N 과 단항 부울 블랙 박스 함수 f : Z *B 가 주어지면 N 의 숫자 그룹에 적용되는 f의 각 값이 진실이면 거짓 값을 산출하고 그렇지 않으면 거짓입니다.

숫자를 오른쪽에서 시작하여 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)

추가 규칙

  • 이 함수는 부울 (예 : truefalse), 1s 및 0s, 또는 진실 / 거짓 값에 매핑 할 수 있습니다. 답변에서 지원하는 형식을 지정하십시오.
  • 정수를 입력으로 사용하거나 정수 문자열 (숫자로 구성된 문자열)을 사용할 수 있습니다.
  • 프로그램이나 함수를 작성할 수 있습니다.
  • 디지털 그룹을 함수 f 로 전달할 때 불필요한 모든 선행 0을 다듬어야합니다. 예를 들어, N = 123,000에 적용될 때 ff (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

함수를 인수로 사용할 수없는 경우 함수가 변수로 정의되었다고 가정하고 프로그램에서이를 참조 할 수 있습니까?
caird coinheringaahing

@cairdcoinheringaahing 블랙 박스 기능 에 대한 참조, 특히 해당 게시물의 끝에 있는 참조를 읽으십시오 . 요약하면, 당신의 언어가 함수를 인수 (afaict)로 받아 들일 수 있다고해도
Conor O'Brien

입력이 음수 일 수 있습니까? 제로? 정수에 대해 이야기하지만 모든 예제는 긍정적입니다. 또한 000 그룹을 처리 해야하는 테스트 사례를 포함시키는 것이 좋습니다.
xnor

1
@ ConorO'Brien이 경우 대부분의 답변이 실패하기 때문에 테스트 사례 에 ( n -> n > 0적용 0)을 추가해야 합니다.
Asone Tuhid

1
@EriktheOutgolfer 그들은 있습니다 [0].
Conor O'Brien

답변:


4

젤리 , 5 바이트

bȷÇ€Ạ

온라인으로 사용해보십시오!

명령 줄 인수는 숫자입니다. 이 함수가있는 라인 위의 라인은 나머지 프로그램의 메인 라인, 즉 각 그룹에 대해 호출되는 코드입니다. 라인 bȷÇ€Ạ이 언급되지 않도록주의하십시오 ! 여기에 사용 된 예는 다섯 번째 테스트 사례입니다.



@AsoneTuhid 아닙니다; 숫자는 0이고 숫자 그룹 목록은 [0]이므로 각 요소 ( 0여기서는 단일 항목 )에 매핑되어 [1]목록이 바뀌고이 목록의 모든 요소가 사실 1이므로 반환됩니다. 숫자 그룹 목록이 있으면 []대신 모든 요소가 []진실 (진실한 진실)이므로 결과가 변경되지 않습니다 . 그러나 결과는 프로그램마다 다를 수 있으며 규칙은 명확하지 않습니다 ( OP 요청 ).
Outgolfer Erik

미안, 젤리를 간신히 이해합니다. 좋은 해결책.
Asone Tuhid

7

Brachylog , 8 바이트

ḃ₁₀₀₀↰₁ᵐ

온라인으로 사용해보십시오!

블랙 박스 기능은 두 번째 줄 (또는 TIO의 "Footer")에서 진행되며 STDIN에서 정수를 읽습니다. 인쇄 true.하거나 false.그에 따라.

ḃ₁₀₀₀      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.

5

APL (Dyalog) , 16 13 바이트

@ Adám 덕분에 3 바이트 절약

∧/⎕¨1e3⊥⍣¯1⊢⎕

온라인으로 사용해보십시오!

어떻게?

1e3⊥⍣¯1⊢⎕ -숫자를 입력하고 기본 1000으로 인코딩

⎕¨ -기능을 입력하고 각각에 적용

∧/ -논리적으로 줄이고


명시 적으로 이동하여 3 바이트를 절약하십시오. 온라인으로 시도하십시오!
Adám

@ Adám 감사합니다! 나는 알파-알파를 좋아했지만 ...
Uriel

내가 틀렸다면 바로 고치지 만 이것이 실패
Asone Tuhid





3

자바 스크립트 (ES6), 40 36 바이트

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

카레를 사용하여 함수와 값을 가져와 0 또는 1을 반환합니다. 편집 : @Shaggy 덕분에 4 바이트가 저장되었습니다.


1000-> 1e3몇 바이트를 저장합니다. 그리고 당신은 대체 할 수 &&&다른 바이트?
얽히고 설킨

@Shaggy 네, 충분히 안전하다고 생각합니다. 내기의 대답도 마찬가지입니까?
Neil

실패 function_name(n=>n>0)(0)(반환 true)
Asone Tuhid

@AsoneTuhid 감사합니다.
Neil

2

Pyth , 9 바이트

.AyMjQ^T3

온라인으로 사용해보십시오!(세번째 테스트 사례 사용)

블랙 박스 함수의 이름이이라고 가정합니다 y. TIO에 표시된대로 L(인수 b:)를 사용하여 이러한 함수를 선언 할 수 있습니다 . 시간이 있으면 나중에 모든 테스트 사례를 구현할 것입니다.


2

Stax , 8 바이트

Vk|Eym|A

Stax 프로그램에는 함수 호출이나 인수가 없으므로 Y단일 값을 소비하고 생성하는 블록을 레지스터 에 저장 합니다. 이것은 프로그램 코드 전에 수행 할 수 있습니다.

{...}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?

다음 은 완벽한 사각형 함수 사용 하는 예 입니다.





1

05AB1E , 8 바이트

₄вεI.V}P

온라인으로 사용해보십시오!

설명

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

숫자를 입력의 첫 번째 줄로, 기능을 두 번째 줄로 사용합니다.
출력 1 truthy 및 0 falsy합니다.


이것은 각 요소에서 코드를 실행하지 않고 전체 목록에서 실행합니다.
Outgolfer Erik

@EriktheOutgolfer : 05AB1E의 자동 벡터화로 대부분의 경우에 가능합니다. 난 그냥 작동하지 않습니다 실현 Q하고 Ê있지만. 8 바이트 버전으로 되돌아갑니다.
Emigna

여전히, 그것은 .V벡터화가 아니며, 목록을 인수 자체로 시작하지도 않습니다.
Outgolfer Erik

@EriktheOutgolfer : 나는 그것이 .V벡터화 한다고 말한 적이 없습니다 . 내 링크의 예에서는 È입니다.
Emigna

사실 QÊ내가 앞에서 언급하지만, 자동 벡터화를 사용하면이 명령은 우리가 필요로하므로 외부의 도전 정신을 느낀다 전체 목록에지도 할 것과는 달리 벡터화 작동합니다 ε.
Emigna

1

Excel VBA, 79 바이트

nrange [A1]에서 정수 유형으로 입력을 취하고 range 에서 공개적으로 정의 된 VBA 함수의 이름으로 입력을받는 익명의 VBE 즉시 창 함수 [B1].

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

사용 예

공용 모듈에서이 경우 입력 기능 f()이 정의됩니다.

Public Function f(ByVal n As Integer) As Boolean
    Let f = (n Mod 2 = 0)
End Function

입력 변수가 설정됩니다.

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

그런 다음 즉시 창 기능이 호출됩니다.

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

1

루비 , 37 바이트

g=->f,n{f[n%x=1000]&&(n<x||g[f,n/x])}

온라인으로 사용해보십시오!

재귀 람다, 함수와 정수를 취하고 부울을 반환합니다.

36 바이트 (양수 n 만)

g=->f,n{n>0?f[n%k=1000]&&g[f,n/k]:1}

이 버전은 1진실로, 거짓으로 돌아 false옵니다. 불행히도 그것은 실패 할 수 있습니다n = 0

온라인으로 사용해보십시오!


g=재귀인지 계산해야한다고 생각합니다
Asone Tuhid

@AsoneTuhid 오, 그 말이 맞습니다. 추가하겠습니다.
benj2240

또한 이것을 시도 (-1 바이트), 그것은 1진실한 값으로 반환 합니다
Asone Tuhid

뇌에 약간의 주름이 생겼는데 ... 감사!
benj2240

나는 틀렸다.이 버전은 g[->n{n>0},0](returns true)에서 작동하지 않는다 . 입력이 0맞지 않는 경우에만 실패 하지만 질문에 "음이 아닌"메시지가 표시되면 37로 돌아 가야합니다. 죄송합니다
Asone Tuhid

1

사과 씨 , 51 바이트

(lambda(n f)(all(map f(or(to-base 1000 n)(q(0))))))

숫자와 함수를 가져 와서 부울 값을 반환하는 익명 람다 함수

온라인으로 사용해보십시오!

(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
   ))))

1

추가 ++ , 15 바이트

L,1000$bbbUª{f}

온라인으로 사용해보십시오!

기능이 필요합니다 fTIO 헤더에 를 선언 .

작동 원리

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]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.