렙 디지트들은 동일한 디지트를 반복만으로 기록 할 수있는 자연수이다. 예를 들어, 세 번 반복 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
없는 경우 .
담당자 단위 x
의 d
자릿수 c
자료는 b
값을 갖는다 x==c*(b**d-1)/(b-1)
. 마찬가지로 x*(b-1)==c*(b**d-1)
.
값 c
은 x%b
마지막 숫자 여야합니다 . d
산술적 으로 결정하는 방법을 보지 못 하므로 코드는 모든 가능성을 확인하려고 시도합니다.
출력 모듈러스를 가져 와서 도달 했을 때 잘못된 출력을주는 Dennis의 트릭 을 복사하여 5 바이트를 절약했습니다 . 데니스에서 구한 또 다른 바이트는 지수가 불가피하게 높은 우선 순위를 가지고 있음을 상기시켜줍니다 .b
x-1
x-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에 대해 c 와 d 에 적합한 값을 찾기 위해 [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 를 반환 합니다.
-
그렇지 않으면 동일한 x 와 b 가 1 씩 증가 하면서 f를 다시 호출 합니다 .
이후 B는 결국 도달 할 수 X – 1 , 우리는 최종 결과 모듈 받아 1 -을 X 반환하는 0 이 경우. b = 2 가 되풀이없이 반환되기 때문에 조건을 만족하면 이런 일이 발생하지 않습니다 . 그러나이 경우 b = 2 <x-1 임을 보장합니다 .