모든 제노 드롬


15

소개

베이스에 xenodrome N은 기지국에서의 모든 숫자의 정수이고 , n은 다르다. 다음 은 xenodrome의 일부 OEIS 시퀀스입니다.

예를 들어, 기지국 (16)에서 FACE, 42FEDCBA9876543210(일부 xenodromes있다 64206, 66그리고 18364758544493064720베이스 (10)에서), 그러나 11DEFACED하지가.

도전

입력 기수 n이 주어지면 기수 10에서 해당 염기 대한 모든 이종 체가 출력됩니다 .

출력은 최소에서 최대 순이어야합니다. 순서의 용어가 끝나고 새로운 용어가 시작 [0, 1, 2]되는 곳 012이 분명해야 합니다 (예 : 그렇지 않은 곳 이 분명 합니다).

n 은 0보다 큰 정수입니다.

설명

이 과제는 정수와 그 밑을 문자열로 처리하는 것을 피하기 위해 특히 밑 10에서 IO를 수행합니다. 문제는 추상적으로 모든 기반을 처리하는 것입니다. 따라서이 규칙을 추가하고 있습니다.

10 진수 이외의 다른베이스에는 정수를 문자열로 저장할 수 없습니다.

언어 구현에 시간, 메모리, 정밀도 또는 기타 기술적 제한이 없다면 프로그램은 이론적으로 상당히 높은 n을 처리 할 수 ​​있어야합니다 .

이것은 이므로 가장 짧은 프로그램 (바이트)이 이깁니다.

입력 및 출력 예

1  # Input
0  # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228

1
n에 제한이 있습니까?
FlipTack

@ Flp.Tkc 아니오. 상당히 높은 n을 처리 할 수 ​​있어야합니다. 언어의 내장 기본 변환이 얼마나 높은 기본을 처리 할 수 ​​있는지에 따라 문제가 제한되는 것을 원하지 않습니다.
Artyer

@Artyer 그때 도전 텍스트의 일부 였을 것입니다. 이미 답변이 진행되고있는 것 같습니다.
Luis Mendo

나는 Pyth의 기본 변환 이 36보다 큰 값을 처리 할 수 ​​있다는 것을 알고 있지만, 이것이 모든 xenodrome을 원하기 때문에 목록이 너무 커지면 기본 파이썬이 중단되어 a의 값에 맞지 않습니다 ssize_t. 이 방법으로 허용됩니까?
FryAmTheEggman

2
누군가가 내장 된 정밀 한계로 인해 더 큰 염기를 처리 할 수없는 모든 답변을 다운 보증 한 것으로 보이며, 이는 알고리즘 문제보다는 구현처럼 보입니다. 당신은 명확히 할 수 있습니까?
Dennis

답변:


10

Pyth , 8 바이트

f{IjTQU^

밑수 n에 중복 된 요소가없는 경우 [0, n ^ n-1] 의 숫자를 필터링합니다 . Pyth의 기본 변환은 모든 기본에서 작동하지만 빠르게 증가하는 숫자 목록을 보므로 결국 값을 메모리에 저장할 수 없습니다.

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

설명:

f{IjTQU^QQ    - Auto-fill variables
      U^QQ    - [0, n^n-1]
f             - keep only those that ...
 {I           - do not change when deduplicated
   jTQ        - are converted into base n

와니스, 데니스가 만든 젤리 솔루션보다 짧은 솔루션! : 'P
HyperNeutrino

3
아무도 젤리를 이길 수 없습니다. ¶ :
Roman Gräf

5

파이썬 2, 87 바이트

n=input()
for x in range(n**n):
 s={n};a=x
 while{a%n}|s>s:s|={a%n};a/=n
 print-~-a*`x`

이종 현상이 아닌 경우 추가 빈 줄을 인쇄합니다.

golf % python2.7 xenodromes.py <<<3
0
1
2
3

5
6
7



11



15



19

21

5

젤리 , 9 8 바이트

ð*ḶbQ€Qḅ

1 바이트를 골프로 해준 @JonathanAllan에게 감사합니다!

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

ð*ḶbQ€Qḅ  Main link. Argument: n

ð         Make the chain dyadic, setting both left and right argument to n.
          This prevents us from having to reference n explicitly in the chain.
 *        Compute nⁿ.
  Ḷ       Unlength; yield A := [0, ..., nⁿ - 1].
   b      Convert each k in A to base n.
    Q€    Unique each; remove duplicate digits.
      Q   Unique; remove duplicate digit lists.
       ḅ  Convert each digit list from base n to integer.

4

젤리 , 12 바이트

*`ḶbµQ⁼$Ðfḅ³

TryItOnline!

n충분한 메모리가 있다면 젤리의 기본 변환은 제한적이지 않습니다.

어떻게?

*`ḶbµQ⁼$Ðfḅ³ - Main link: n
    µ        - monadic chain separation
*            - exponentiation with
 `           - repeated argument, i.e. n^n
  Ḷ          - lowered range, i.e. [0,1,2,...,n^n-1]
   b         - covert to base n (vectorises)
        Ðf   - filter keep:
       $     -     last two links as a monad
     Q       -         unique elements
      ⁼      -         equals input (no vectorisation)
           ³ - first program argument (n)
          ḅ  - convert from base (vectorises)

3

자바 스크립트 (ES7), 86 바이트

n=>{a=[];for(i=n**n;i--;j||a.unshift(i))for(j=i,b=0;(b^=f=1<<j%n)&f;j=j/n|0);return a}

실패 1(출력해야 [0]하지만 RangeErrors.)
Artyer

내가 가진 정확히 무엇인지, 그러나 이것은 이론적으로 실패 할 것 37정밀도 나는 그것이 유효하지 않게 생각하는 문제, ... 아니었다면
ETHproductions

내 배치 버전을 이식 한 @Artyer, 이제이 작동됩니다 n에서 113부동 소수점 정밀도를 죽이기 전에.

솔루션이 실제로 시작되는 방식이 마음에 들었다가 갑자기 급격히 증가했습니다.
Nissa

2

펄 6 , 47 바이트

{(0..$_**$_).grep: !*.polymod($_ xx*).repeated}

반환 서열을 . ( SeqIterator 의 기본 Iterable 래퍼입니다. )

입력 16하면 Seq ( 87887) 의 53905 번째 요소를 계산하는 데 20 초가 걸립니다 .

넓히는:

{       # bare block lambda with implicit parameter 「$_」

  ( 0 .. ($_ ** $_) )    # Range of values to be tested

  .grep:                 # return only those values

    !\                   # Where the following isn't true
    *\                   # the value
    .polymod( $_ xx * )  # when put into the base being tested
    .repeated            # has repeated values
  }
}

2

배치, 204200 바이트

@set/an=%1,m=1
@for /l %%i in (1,1,%1)do @set/am*=n
@for /l %%i in (0,1,%m%)do @set/ab=0,j=i=%%i&call:l
@exit/b
:l
@set/a"f&=b^=f=1<<j%%n,j/=n"
@if %f%==0 exit/b
@if %j% gtr 0 goto l
@echo %i%

일괄 처리에는 32 비트 산술 만 있기 때문에 n> 9에서는 작동하지 않습니다. 편리하게, 일괄 평가 f &= b ^= f = 1 << j % n로서 f = 1 << j % n, b = b ^ f, f = f & b가 아니라 f = f & (b = b ^ (f = 1 << j % n)).


2

Mathematica, 59 48 바이트

Select[Range[#^#]-1,xMax[x~DigitCount~#]==1]&

U + F4A1 "개인 사용"문자 포함

설명

Range[#^#]-1

을 생성하십시오 {1, 2, ..., n^n}. 빼기 1. (수율 {0, 1, ..., n^n - 1})

xMax[x~DigitCount~#]==1

Boolean 함수 True각 디지트가베이스 회만 발생하면 n.

Select[ ... ]

목록 에서 위의 부울 함수가 적용될 때 {0, 1, ..., n^n - 1}제공 True되는 것을 선택하십시오 .

59 바이트 버전

Select[Range[#^#]-1,xDuplicateFreeQ[x~IntegerDigits~#]]&

2

매스 매 티카, 48 55 바이트

Union[(x   x~FromDigits~#)/@Permutations[Range@#-1,#]]&

( x코드가 작동 하려면 s 사이의 3 중 공간 이 3 바이트 문자 \ uF4A1로 대체되어야합니다.)

단일 인수의 이름없는 기능. xenodromicity에 대한 정수를 테스트하는 대신, 허용 된 자릿수의 부분 집합에 대한 가능한 모든 순열을 생성하고 (반복을 자동으로 피함) 해당 정수를 밑이 10으로 변환합니다. 각 xenodrome은 앞에 0이 있거나없는 두 번 생성됩니다. Union중복을 제거하고 부팅 할 목록을 정렬합니다.


1
에 실패합니다 2. 이 기능은을 제공합니다 {0, 1}. 나는 당신이 Permutations[Range@#-1, #]대신 필요하다고 생각합니다 Subsets[Range@#-1].
JungHwan Min

가, 정말 큰 실수 야 그것을 관찰하고 완벽한 수정을 포기 해 주셔서 감사합니다!
Greg Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.