이것은 3 자리 숫자로 끝나는가?


27

음수가 아닌 정수가 주어지면, 일관된 정수베이스에서 1로 끝나는 3 자리 숫자인지 여부를 리턴하십시오. 즉, 숫자는 base-N으로 표시되어야하며 N은 0보다 큰 정수입니다.

규칙

  • 이것은 이므로 가장 짧은 답변이 이깁니다.
  • 단항은 이상하게 동작하기 때문에 입력 3 10 의 동작 은 정의되지 않습니다.
  • 표준 허점 은 금지되어 있습니다.

참된:

5   
73  
101 
1073
17
22
36
55
99  

그릇된:

8
18
23
27
98
90
88
72
68

소수의 큰 숫자 :

46656 true
46657 true
46658 true
46659 true
46660 true
46661 false
46662 false
46663 true
46664 false
46665 true
46666 true
46667 false
46668 false
46669 false
46670 true
46671 true

1
이상하게 단항 동작합니다 때문에 아니, 음이 아닌 정수의 단항 표현은, 이상하게 작동하지 않습니다 n그냥 n 1, 예를 들면이야 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁, 등
에릭 Outgolfer

6
@EriktheOutgolfer 그것은 상당히 다르게 행동합니다; 예를 들어 1을 n-itshift로 나눌 수 없습니다.
wizzwizz4

3
무엇을 않는 일관성있는 정수베이스는 말인가요? (또한 규칙에서 단항을 제외하는 대신 N ≥ 2 만 지정할 수 있습니다.)
Lynn

1
@Lynn 영국식 단위 또는 시간에서 볼 수 있듯이 위치 종속 기수와 달리 단일 기수 (예 : 기수 10)를 사용한 위치 표기법입니다.
HAEM

1
부록으로 @Lynn, 나는 또한 합리적, 부정적, 복잡한 등의 기초를 배제하려고했습니다. 두 번째 요점은 단항에 관한 규칙은 단항을 포함하거나 배제하지 않는 것입니다. 언어 변호사에 대한 나의 이해가 내가 생각했던 것보다 더 미숙하지 않은 한, "정의되지 않은 행동"은 "구현자가 원하는 것이 무엇이든"을 의미합니다.
HAEM

답변:


10

젤리 , 7 바이트

bRṫ€3ċJ

입력 값이 1로 끝나는 3 자리 숫자 인 기준 수 (0이 아닌 값은 0, 거짓 임)를 반환합니다.

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

작동 원리

bRṫ€3ċJ  Main link. Argument: n

 R       Range; yield [1, ..., n].
b        Base; convert n to bases 1, ..., n.
  ṫ€3    Tail each 3; remove the first two elements of each digit array.
      J  Indices of [n]; yield [1].
     ċ   Count the number of times [1] appears in the result to the left.

10

자바 스크립트 (ES7), 43 40 39 바이트

f=(n,b)=>n<b*b?0:n%b==1&n<b**3|f(n,-~b)

테스트 사례

댓글

f = (n,           // given n = input
        b) =>     // and using b = base, initially undefined
  n < b * b ?     // if n is less than b²:
    0             //   n has less than 3 digits in base b or above -> failure
  :               // else:
    n % b == 1 &  //   return a truthy value if n is congruent to 1 modulo b
    n < b**3 |    //   and n is less than b³ (i.e. has less than 4 digits in base b)
    f(n, -~b)     //   or the above conditions are true for some greater value of b










2

APL (Dyalog Unicode) , 21 20 14 바이트 SBCS

@ngn 덕분에 -5.

순수한 산술 솔루션 (실제로 기본 변환을 수행하지는 않음) 및 매우 빠릅니다.

3∊⊢(|×∘⌈⍟)⍨1↓⍳

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

⊢(... )⍨1↓⍳ 하나가에서 제외에 ɩ 1 개 ... 인수 및 인수를 ndices 적용 :

| 부서 나머지

×∘⌈ 반올림 시간

 로그 N 인수

3∊ 3 명이 그 멤버입니까?


인수를 바꾸는 표준 트릭으로 1을 절약 할 수 있습니다.⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn

@ngn 감사합니다. 다음에는 마음에 드는 경우 편집하십시오.
Adám

승인. 여기에 내가 처리 할 수 ​​있도록 좀 더 복잡한 개선 사항이 있습니다-다른 솔루션만큼 짧게 만듭니다.(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn

1
3∊⊢(|×|×∘⌈⍟)⍨1↓⍳
ngn

2
@ngn 1=⌈a⍟b, a≤ba=b0=a|b0=b|b
Adám


1

껍질 , 15 바이트

V§&o=1→o=3LṠMBḣ

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

설명

V§&(=1→)(=3L)ṠMBḣ  -- implicit input, for example: 5
             ṠMB   -- map "convert 5 to base" over..
                ḣ  --   range [1..5]
                   -- [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
V                  -- does any of the elements satisfy the following
 §&( 1 )( 2 )      --   apply functions 1,2 and join with & (logical and)
         =3L       --     is length equals to 3?
    =1→            --     is last digit 1?


1

C, 60 바이트

인수를 1로 끝나는 3 자리 숫자로 표시 할 수있는 경우 0이 아닌 값을 반환하는 함수

i,j;f(n){for(j=0,i=sqrt(n);i>cbrt(n);)j+=n%i--==1;return j;}

참고 : 이것은 기능이 내장 된 GCC와 함께 작동합니다. 다른 컴파일러의 경우 인수 및 반환 유형을 알고 있어야합니다.

#include<math.h>

설명

이는 가장 낮은베이스 n3 진수로 표현되어있다 ⌊∛n⌋하고있는 최저베이스 n2 진수로 표현되고있다 ⌊√n⌋(1)가 3 자리의 범위에있는베이스 모듈로까지의 숫자가 합동인지 우리 때문에 단순히 시험. 조건을 만족하는 염기의 수를 반환하여 적절하게 0이 아닌 값 (거짓) 또는 0 (거짓) 값을 제공합니다.

테스트 프로그램

위치 매개 변수로 여러 입력을 전달하십시오.

#include<stdio.h>
int main(int c,char**v)
{
    while(*++v)
        printf("%s => %d\n", *v, f(atoi(*v)));
}



0

Pyt , 35 33 바이트

←ĐĐ3=?∧∧:ŕĐ2⇹Ř⇹Ľ⅟⌊⁺3=⇹Đ2⇹Ř%*ž1⇹∈;

설명:

←ĐĐ                                             Push input onto stack 3 times
   3=?  :                       ;               If input equals 3, execute code after the question mark;otherwise, execute code after the colon. In either case, afterwards, execute the code after the semicolon
      ∧∧                                        Get 'True'
        :                                       Input not equal to 3
         ŕ                                      Remove 'False'
          Đ2⇹Ř                                  Push [2,3,...,n]
              ⇹Ľ⅟⌊⁺                             Push [floor(log_2(n))+1,floor(log_3(n))+1,...,floor(log_n(n))+1]
                   3=                           Is each element equal to 3
                     ⇹                          Swap the top two elements on the stack (putting n back on top)
                      Đ2⇹Ř                      Push [2,3,...,n]
                          %                     Push [n%2,n%3,...,n%n]
                           *                    Multiply [n%x] by the other array (i.e. is floor(log_x(n))+1=3?)
                            ž                   Remove all zeroes from the array
                             1⇹∈                Is 1 in the array?
                                ;               End conditional
                                                Implicit print

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


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