골프 스크립트-26 바이트
{:i.)+.,{;10*i%.}%i>|,}:f;
편집 : 1
소수점 표현의 길이가 아닌 소수점이 종료되면 출력으로 업데이트되었습니다 .
상당히 효율적인 버전입니다. 값 67890 은 약 10 초, 99991은 약 20 초 동안 실행됩니다. 반복되는 범위가 두 배가되었으므로 전반이 무시되기 때문에 이전보다 약간 느립니다 (대략 절반 정도 빠름).
대안, 또한 26 바이트
{:i.)+.n*{*i%.}%i>)^^,}:f;
이것은 문자열을 반복하여 작동합니다 "\n"*(2*i+1)
. 여기서 i
값은 함수에 전달됩니다. 블록마다에 전달 된 값의 서수 값 "\n"
이다 (10) .
는 )^^
작업 주위의 비트입니다. 이 때 uncons 문자열에서 문자를 위에서 언급 한 바와 같이, 결과는 제거 된 문자의 순서 값이다. 그러나 그 값을 다시 추가 하면 문자가 아닌 해당 숫자 의 문자열 표현 이 추가됩니다 -상당히 비대칭적인 행동이며 제 생각에는 디자인 결함이 있습니다. 실제로 그렇게하고 싶다면 먼저 문자열을 지정하는 데 1 바이트가 필요합니다.
최종 값의 추가 사본이 이미 스택에 있으므로 최종 값을 다시 제거 )
하고 문자열로 xor 값을 제거한 다음 다시 xor 값을 제거하여 첫 번째 xor에 의해 추가되거나 제거 된 문자가 복원됩니다. int op string
문자열 표현이 아닌 문자로 처리 된 경우 )^^
로 대체 될 수 있습니다 |
.
문자열 (골프 스크립트에서 int 배열로 저장 됨)에는 각 문자 mod 256 의 값이 표시 되지만 각 문자 값 자체는이 범위를 벗어날 수 있습니다. 고유성 (설정된 작업을 통해) 또는 포함도 (를 통해 ?
) 를 테스트 할 때 표시 값이 아닌 비교되는 실제 값입니다.
현재 Golfscript 인터프리터 의 패치 파일 :
61c61
< to_gs
---
> Gstring.new([self])
위의 동작 중 하나에 만 영향을 미치며 string op int
그 반대의 경우도 마찬가지 op
입니다
+-|&^
. 의 동작을 포함하여 다른 모든 사항은 영향을받지 않습니다 Gint`
.
그러면 다음 24 바이트 솔루션이 유효 해집니다.
{:i.)+.n*{*i%.}%i>|,}:f;
그리고 이것은 또한 다른 많은 추악한 해결 방법을 수정합니다 .
파이썬-48 바이트
f=lambda n:len(set(10**-~i%n for i in range(n)))
가장 효율적인 솔루션은 아니지만 100000 미만의 값에 적합합니다 .
FWIW, 핵심 요소는 십진수로 순환 숫자 생성에 대한 솔루션과 동일합니다 .
동일한 코드의보다 효율적인 버전 ( 70 바이트 ) :
def f(n):
a=[];i=10%n
while i not in a:a+=i,;i=i*10%n
return len(a)
99991 값 은 1 초 미만입니다.