태그 보관물: base-conversion

base-conversion

담당자 숫자 찾기 정수 b로 (x-1)

렙 디지트들은 동일한 디지트를 반복만으로 기록 할 수있는 자연수이다. 예를 들어, 세 번 반복 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)


답변

젤리, 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).

답변

피스, 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

답변

루비, 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)

답변

파이썬, 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

답변

루비, 50 바이트

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

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


답변

이모티콘 , 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
  🍉
🍉

답변

파이썬 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 임을 보장합니다 .