담당자 숫자 찾기


21

렙 디지트들은 동일한 디지트를 반복만으로 기록 할 수있는 자연수이다. 예를 들어, 세 번 반복 777된 숫자로만 구성되므로 repdigit 7입니다.

그러나 이것은 단순히 10 진수 (기본 10)로 제한되지 않습니다.

  • 모든 Mersenne 번호 ( M n = 2 n -1 형식 )는 이진수 (기본 2)로 쓰여질 때의 숫자입니다.
  • 단항으로 쓰여진 모든 숫자는 사소한 숫자입니다 (기본 1).
  • 각 번호는 n또한 사소 렙 디지트으로 작성 가능 11자료 n-1(예 17진수 (기지국 16)에 기록 할 때이다 11하고 3이진 (기지국 2)에 기록 된 경우에도 11).

여기서 도전 과제 는 입력 번호가 다른 숫자 일 수있는 다른 기반 을 찾는 것입니다.

입력

x > 3편리한 형식 의 양의 정수 입니다.

산출

양의 정수 b(x-1) > b > 1표현 여기서 x베이스는 b렙 디지트이다.

  • 그러한 것이 b존재 하지 않으면 , 출력 0또는 일부 잘못된 값.
  • 그러한 것이 여러 개 b존재하는 경우 일부 또는 전부를 출력 할 수 있습니다.

규칙

  • (x-1) > b > 1제한은 단항에 사소한 변환 또는 "빼기 하나"기본을 방지하는 것입니다. 출력 수는 단항 또는 편리한베이스에 기록 할 수 있지만, 기본 자체는 사소한 변환 중 하나가 될 수 없습니다.
  • 입 / 출력은 적절한 방법을 통해 가능합니다 .
  • 표준 허점 제한이 적용됩니다.

In --> Out
11 --> 0            (or other falsey value)
23 --> 0            (or other falsey value)
55 --> 10           (since 55 is 55 in base 10)
90 --> 14           (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9            (since 91 is 111 in base 9 ... 12 also allowed)

가정 할 수 있습니까 b ≤ 36(많은 언어의 내장 기본 변환 기능이 더 높지 않음)?
Doorknob

2
@Doorknob 이 문제의 범위를 b ≤ 36 심각하게 제한 한다고 가정하면 기존의 모든 답변이 더 큰 염기를 올바르게 처리하므로 아니오라고 말할 것 b입니다.
AdmBorkBork

대부분의 숫자는 일부 기준에서 대표 숫자입니다. 예를 들어 91 = 13 * 7이므로 12의 77입니다.
Neil

@Neil ... 그것은 거기 ..., 당신이 뭔가에있어 거의 같다
AdmBorkBork

답변:


11

젤리, 11 9 바이트

bRI¬P€TḊṖ

기준이없는 경우 비어있는 (거짓) 목록을 반환합니다. 온라인으로 사용해보십시오!

작동 원리

bRI¬P€TḊṖ  Main link. Argument: x (number)

 R         Range; yield [1, ..., x].
b          Base; convert x to base n, for each n in the range.
  I        Compute the increment (differences of successive values) of each array
           of base-n digits. This yields only 0's for a repdigit.
   ¬       Apply logical NOT to each increment.
    P€     Compute the product of all lists of increments.
      T    Get the indices of all truthy products.
       Ḋ   Discard the first index (1).
        Ṗ  Discard the last index (x - 1).

9

피스, 11 10

fqjQT)r2tQ

분명히 피스의 단항 q 은 약 10 일 전의 모든 고유 값을 가진 목록을 검사합니다. 분명히 Pyth 버그를 조사하면 골프 점수가 향상됩니다.

목록을 필터링합니다 [2..input-1)해당 기준에있는 입력의 고유 한 숫자 세트가 길이 1 인 경우 을 .

테스트 스위트

설명:

r2tQ     ##  generate the python range from 2 to the input (Q) - 1
         ##  python range meaning inclusive lower and exclusive upper bounds
f        ##  filter that list with lambda T:
  jQT    ##  convert the input to base T
 q    )  ##  true if the resulting list digits has all equal elements

5

루비, 87 69 63 바이트

->x{(2..x-2).find{|b|y=x;a=y%b;a=0if a!=y%b while(y/=b)>0;a>0}}

루비의 내장은 기본 36까지만 올라 가기 때문에 수동으로 기본 변환을 구현해야했습니다 ...

nil찾을 수 없음을 반환 합니다.

->x{      # anonymous lambda that takes one argument
(2..x-2)  # range of the possible bases to search over
.find{    # return the first element that satisfies the block, or nil if none
|b|       # b represents the base currently being tested
y=x;      # a temporary value to avoid mutating the original value of x
a=y%b;    # the first (well, last) digit in base b, which will be compared to

                   y/=b      # divide the number by the base
   if a!=y%b                 # if this digit does not match (is different)...
a=0                          # set a to a value representing "failure"
             while(    )>0;  # keep doing this until we get zero (no digits left)

a>0       # return whether a has maintained its original value (no digit change)
}}        # find then returns the first element for which this is true (or nil)

5

파이썬, 71 72 78 바이트

lambda x:{b for b in range(2,x-1)for d in range(x)if x*~-b==x%b*~-b**d}

재귀하지 않고 모든 기지를 시도하고 작동하는 일련의 결과를 출력합니다.

인코딩 b하고 d단일 숫자로 유혹하고 있지만 추출하기에는 너무 많은 괄호로 묶인 표현식이 필요합니다. 77 바이트 :

lambda x:{k/x for k in range(2*x,x*x-x))if x*~-(k/x)==x%(k/x)*~-(k/x)**(k%x)}

72 바이트 :

f=lambda x,b=2:b*any(x*~-b==x%b*~-b**d for d in range(x))or f(x,b+1)%~-x

b작동 하는 첫 번째 출력 또는0 없는 경우 .

담당자 단위 xd자릿수 c자료는 b값을 갖는다 x==c*(b**d-1)/(b-1). 마찬가지로 x*(b-1)==c*(b**d-1).

cx%b마지막 숫자 여야합니다 . d산술적 으로 결정하는 방법을 보지 못 하므로 코드는 모든 가능성을 확인하려고 시도합니다.

출력 모듈러스를 가져 와서 도달 했을 때 잘못된 출력을주는 Dennis의 트릭 을 복사하여 5 바이트를 절약했습니다 . 데니스에서 구한 또 다른 바이트는 지수가 불가피하게 높은 우선 순위를 가지고 있음을 상기시켜줍니다 .bx-1x-1~

in대신 길이가 같은 솔루션 입니다 any.

f=lambda x,b=2:b*(x*~-b in[x%b*~-b**d for d in range(x)])or f(x,b+1)%~-x

4

루비, 50 바이트

->n{(2..n-2).find{|b,i=n|i%b==(i/=b)%b ?redo:i<1}}

나는 그 성가신 공간을 정말로 제거하고 싶지만 루비의 새로운 이민자로서, 나는 여전히 문법적 요점에 익숙하지 않습니다.


이 경우 문제가되는 단점은 b?유효한 메소드 이름이므로 공백을 제거 할 수 없습니다.
요르단

4

이모티콘 , 214 바이트

(77 자) :

🐇🐹🍇🐇🐖🏁➡🚂🍇🍦b🍺🔲🗞🔷🔡😯🔤🔤🚂🍮i 2🍮n 0🔁◀i➖b 1🍇🍦v🔷🔡🚂b i🍊▶🐔🔫v🔪v 0 1📏v🍇🍮n i🍉🍫i🍉😀🔷🔡🚂n 9🍎0🍉🍉

기본 9의 결과를 인쇄합니다.

나는 몇 주 동안 emojicode로 코드 골프를하는 것을 의미했지만, 언어는 최근에 실제로 😉에서 작동하기에 충분히 안정적이되었습니다. 보너스 로이 질문은 emojicode가 실제로 실제로 잘 사용하는 한 가지 기능을 사용합니다. 다른베이스의 정수를 나타냅니다.

Ungolfed (👴는 emojicode의 줄 설명입니다)

🐇🐹🍇         👴 define main class "🐹"
  🐇🐖🏁➡🚂🍇  👴 define main method

    👴 read an integer from stdin, store it in frozen variable "b"
    🍦 b 🍺 🔲 🗞 🔷🔡😯🔤🔤 🚂

    🍮 i 2  👴 i = 2
    🍮 n 0  👴 n = 0

    🔁◀i➖b 1🍇     👴 while i < b - 1
      🍦 v 🔷🔡🚂b i  👴 v = the string representation of b in base i

      👴 Split v on every instance of the first character of v.
      👴 If the length of that list is greater than the actual length of v,
      👴 n = i
      🍊▶🐔🔫v🔪v 0 1📏v🍇
        🍮 n i
      🍉

      🍫 i  👴 increment i
    🍉
    😀 🔷🔡🚂 n 9  👴 represent n in base 9 instead of 10, to save a byte 😜
    🍎 0          👴 return error code 0
  🍉
🍉

4

파이썬 2, 79 바이트

f=lambda x,b=2:~-b*x in[i%b*~-b**(i/b)for i in range(b*x)]and b or f(x,-~b)%~-x

Ideone에서 사용해보십시오 .

생각

밑수 b> 1 및 숫자 d <b 의 모든 repdigit x 는 다음을 충족합니다.

조건

d <b 이므로 지도 (b, d) ↦ cb + d 는 주입식입니다.

또한, 이후 B, x> 1 , 우리가 C <x를 따라서 CB + D <CB + B = (c + 1) B ≤ XB .

이는 주어진 b에 대해 cd 에 적합한 값을 찾기 위해 [0,…, bx) 에서 모든 i 를 반복 하고 (b-1) x == (i % b) (b i / b -1) .

암호

명명 람다 F의 시험 여부 (b - 1) x는 세트 인 {(I %의 b) (b I / B - 1) | 0 ≤ I <BX} 값부터 시작하여 B = 2 .

  • 테스트가 성공하면 b 를 반환 합니다.

  • 그렇지 않으면 동일한 xb1 씩 증가 하면서 f를 다시 호출 합니다 .

이후 B는 결국 도달 할 수 X - 1 , 우리는 최종 결과 모듈 받아 1 -을 X 반환하는 0 이 경우. b = 2 가 되풀이없이 반환되기 때문에 조건을 만족하면 이런 일이 발생하지 않습니다 . 그러나이 경우 b = 2 <x-1 임을 보장합니다 .


3

펄 6, 45 43 42 바이트

{grep 2..$^x-2: {[==] $x.polymod($_ xx*)}}

설명 (정렬)

참고로 변수 $^xin { ... }-> $x { ... }

{grep 2..$^x-2: {[==] $x.polymod($_ xx*)}}
{                                          # Anonymous function taking $x
 grep                                      # Return the all values in
      2..$^x-2: {                          # Range from 2 to $x - 2 satisfying:
                 [==]                      #     Reduce with ==:
                      $x.polymod(          #         (See below for polymod)
                                 $_ xx*    #         An infinite list containing
                                           #         the current value
                                       )}}

Polymod (TL; DR) : 기본 $n.polymod($b xx *)으로 자리수 / '자리수'를 반대로 표시$n$b

Polymod (실제) : polymod 메소드는 더 강력한 파이썬 divmod함수 버전과 거의 같습니다 . $n.polymod(*@args)$ n을 * @ args의 각 값으로 나누고 $n mod $x반환되는 목록에 나머지 ( )를 추가 하고 다음 나누기에 대한 몫을 사용합니다. 나는 그것을 잘못 설명했기 때문에 여기에 몇 가지 예가 있습니다 (perl 6으로 작성되었지만 대부분의 사람들이 이해할 수있을 정도로 깨끗합니다).

12.polymod(7)    # returns (5, 1)
# Roughly equivalent to:
(12 mod 7, 12 div 7)

86400.polymod(60,60,24) # returns (0, 0, 0, 1)
# Roughly equivalent to (this will give you an array rather than a list):
my $n = 86400;
my @remainders; # Here lies the end result
for (60, 60, 24) -> $divisor {
    @remainders.push( $n mod $divisor );
    $n div= $divisor;
}
@remainders.push($n)

# This is essentially the base conversion algorithm everyone
# knows and loves rolled into a method.
# Given an infinite list of divisors, polymod keeps going until
# the remainder given is 0.     
0xDEADBEEF.polymod(16 xx *) # returns (15 14 14 11 13 10 14 13)
# Roughly equivalent to (but gives an array rather than a list):
my $n = 0xDEADBEEF;
my @remainders; # Here lies the end result
while $n > 0 {
    @remainders.push( $n mod 16 );
    $n div= 16;
}

1
실제로 " 모든 또는 모든 "유효한 값 을 출력 할 수 있으므로 grep메소드 대신 메소드를 사용할 수 있습니다 first.
Brad Gilbert b2gills

오, 잘 잡았
Hotkeys

3

Dyalog APL , 28 바이트

 {b/⍨⍵{1=≢∪⍵⊥⍣¯1⊢⍺}¨b←1+⍳⍵-3}

{... ... }익명 함수에 적용되는 x(로 표시 )
b←1+⍳⍵-32의 정수 - ⍵ -2- 저장 b
⍵{... B (각 요소 ) 함수를 적용 {... }좌측 인자로서 X가
⍵⊥⍣¯1⊢⍺그베이스로 변환하는 X를
1=≢∪집계 1 같다 고유 한 숫자?
b/⍨b의 요소가 true 인 경우 (단 하나의 고유 숫자 만 있음).

사례

베이스가 존재하지 않으면이 프로그램에서 보여줄 수 있듯이 출력이 비어 있습니다 (거짓).

 WhatIsEmpty
 →''/TRUE ⍝ goto (→) TRUE: if (/) emptystring ('')
 'False'
 →END       
TRUE:       
 'True'     
END:        

이것은 '거짓'을 인쇄합니다



2

MATL , 15 14 바이트

3-:Q"G@:YAd~?@

이것은 함께 작동 현재 버전 (14.0.0)에서언어 / 컴파일러의 에서 .

밑이 없으면 출력이 비어 있습니다 (거짓).

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

3-:Q    % take input x implicitly. Generate range of possible bases: [2,3,...,x-2]
"       % for each base b
  G     %   push input again
  @:    %   generate vector of (1-based) digits in base b: [1,2,...,b]
  YA    %   convert to that base
  d~    %   differences between consecutive digits; negate
  ?     %   if all values are true (that is, if all digits were equal)
    @   %     push that base
        %   end if implicitly
        % end for each implicitly
        % display implicitly

2

수학, 55 바이트

Cases[4~Range~#-2,a_/;Equal@@#~IntegerDigits~a]/.{}->0&

너무 복잡하지 않은 익명의 기능. repdigit-ness에 따라 기준을 필터링하면됩니다.


2

파이썬 2, 75 바이트

n=input()
b=1
while b<n-2:
 i=n;b+=1
 while i%b==i/b%b:i/=b
 if i<b:print b

내 루비 답변의 포트. 존재하는 모든 유효한 기준을 인쇄합니다.


2

줄리아, 45 바이트

n->filter(b->endof(∪(digits(n,b)))<2,2:n-2)

이것은 정수를 허용하고 정수 배열을 반환하는 익명 함수입니다. 호출하려면 변수에 지정하십시오. 적용 가능한 모든 기준 또는 빈 배열을 반환합니다. 큰 기지에는 문제가 없습니다.

먼저 포함 범위 [2, n -2]를 생성합니다 . 여기서 n 은 입력입니다. 우리는 filter단지 정수로 목록이 있는 N 베이스 (B) 미만이 개 고유 한 숫자가 있습니다. 이를 위해 범위의 각 정수 b 에 대해을 사용하여 기본 bn 자릿수를 배열로 사용하고을 사용하여 고유 항목을 가져오고을 사용 하여 마지막 요소의 인덱스 (예 : 길이)를 가져옵니다 .digitsendof


1

Brachylog , 12 바이트

>>.ℕ₂≜&ḃ↙.=∧

온라인으로 사용해보십시오! (발전기로서!)

가능한 경우 입력 변수를 통해 입력을 취하고 출력 변수를 통해 기준을 출력합니다. 그렇지 않으면 실패합니다. 동시에 발전기 로도 작동합니다. 모든베이스의 목록을 출력하는 ,이 목록은 비어있을 수 있습니다.

이상적으로는 ḃ↙.=&>>아마도 그 형태 또는 유사한 형태의 발전기 기능을 희생시키는 것처럼 보일 수 있지만 (결국 단항에 부딪 치므로) 12 바이트가 가장 짧은 방법입니다.

     ≜          Assign an integer value to
  .             the output variable
   ℕ₂           which is greater than or equal to 2
 >              and less than a number
>               which is less than the input.
      &         The input
       ḃ↙.      in base-(the output)
          =     is a repdigit.
           ∧    (which is not necessarily the output)


0

05AB1E , 7 바이트

ÍL¦ʒвÙg

가능한 모든 값 또는 빈 목록을 잘못된 값으로 출력합니다 (기술적으로 유효한 출력도 잘못된 값이지만, 1 05AB1E에서는 진실 있고 다른 모든 것은 거짓 임).

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

Í        # Decrease the (implicit) input-integer by 2
 L       # Create a list in the range [1, input-2]
  ¦      # Remove the first value to make the range [2, input-2]
   ʒ     # Filter this list by:
    в    #  Convert the (implicit) input to the base of the number we're filtering
     Ù   #  Uniquify it, leaving only distinct digits
      g  #  Get the length of this, which is truthy (1) if all digits were the same
         # (and then output the filtered list implicitly as result)

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