모든 제노 드롬


15

소개

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

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

도전

입력 기수 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에서 1에 13부동 소수점 정밀도를 죽이기 전에.
— 닐

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

2

펄 6 , 47 바이트

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

반환 서열을 . ( Seq 는 Iterator 의 기본 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.