Tất cả các Xenodromes


15

Giới thiệu

Một xenodrom trong cơ sở n là một số nguyên trong đó tất cả các chữ số của nó trong cơ sở n là khác nhau. Dưới đây là một số trình tự OEIS của xenodromes.

Ví dụ, trong cơ sở 16, FACE, 42FEDCBA9876543210là một số xenodromes (Nào là 64206, 6618364758544493064720cơ số 10), nhưng 11DEFACEDkhông.

Thử thách

Cho một cơ sở đầu vào, n , xuất ra tất cả các xenodromes cho cơ sở đó trong cơ sở 10 .

Đầu ra phải theo thứ tự từ ít nhất đến lớn nhất. Cần phải rõ ràng khi một thuật ngữ trong chuỗi kết thúc và một thuật ngữ mới bắt đầu (ví dụ: [0, 1, 2]rõ ràng ở đâu 012không.)

n sẽ là một số nguyên lớn hơn 0.

Làm rõ

Thử thách này thực hiện IO cụ thể trong cơ sở 10 để tránh xử lý các số nguyên và cơ sở của chúng dưới dạng chuỗi. Thách thức là trong việc xử lý trừu tượng bất kỳ cơ sở. Như vậy, tôi đang thêm quy tắc bổ sung này:

Các số nguyên không thể được lưu trữ dưới dạng các chuỗi trong một cơ sở khác với cơ sở 10.

Về mặt lý thuyết, chương trình của bạn sẽ có thể xử lý n cao một cách hợp lý nếu không có thời gian, bộ nhớ, độ chính xác hoặc các hạn chế kỹ thuật khác trong việc thực hiện ngôn ngữ.

Đây là , vì vậy chương trình ngắn nhất, tính bằng byte, sẽ thắng.

Ví dụ đầu vào và đầu ra

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
Có giới hạn cho n?
FlipTack

@ Flp.Tkc Không. Nó có thể xử lý n cao hợp lý. Tôi không muốn thách thức bị giới hạn bởi mức độ chuyển đổi cơ sở dựng sẵn của ngôn ngữ có thể xử lý cao đến mức nào.
Artyer

@Artyer Đó phải là một phần của văn bản thách thức, sau đó. Có vẻ như một số câu trả lời đã được thực hiện
Luis Mendo

Tôi biết chuyển đổi cơ sở trong Pyth có thể xử lý các giá trị lớn hơn 36 , nhưng vì điều này muốn tất cả các xenodromes, con trăn cơ bản bị phá vỡ khi danh sách quá lớn, nói rằng nó không thể phù hợp với giá trị trong a ssize_t. Là nó phá vỡ theo cách này có thể chấp nhận?
FryAmTheEggman

2
Ai đó dường như đã hạ thấp tất cả các câu trả lời không thể xử lý các cơ sở lớn hơn do giới hạn chính xác tích hợp, có vẻ như là một triển khai hơn là một vấn đề thuật toán. Bạn có thể làm rõ?
Dennis

Câu trả lời:


10

Bình thường , 8 byte

f{IjTQU^

Lọc các số trong [0, n ^ n - 1] khi không có phần tử trùng lặp trong cơ sở n . Chuyển đổi cơ sở trong Pyth sẽ hoạt động với bất kỳ cơ sở nào, nhưng vì điều này xem xét một danh sách các số tăng rất nhanh, cuối cùng nó sẽ không thể lưu trữ các giá trị trong bộ nhớ.

Hãy thử trực tuyến!

Giải trình:

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

Wow, một giải pháp ngắn hơn giải pháp Jelly mà Dennis đã thực hiện! : 'P
HyperNeutrino

3
Không ai đánh bại Jelly. :
Roman Gräf

5

Python 2, 87 byte

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`

In thêm các dòng trống cho không xenodromes:

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

5
6
7



11



15



19

21

5

Thạch , 9 8 byte

ð*ḶbQ€Qḅ

Cảm ơn @Jonathan ALLan vì đã chơi golf 1 byte!

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

ð*Ḷ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

Thạch , 12 byte

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

Dùng thử trực tuyến!

Sẽ hoạt động cho bất kỳ n, được cung cấp đủ bộ nhớ, chuyển đổi cơ sở của Jelly không bị hạn chế.

Làm sao?

*`Ḷ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

JavaScript (ES7), 86 byte

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}

Thất bại cho 1(Nên xuất [0], nhưng RangeErrors.)
Artyer

Chính xác những gì tôi đã có, nhưng về mặt lý thuyết sẽ thất bại 37nếu độ chính xác không phải là vấn đề, mà tôi nghĩ làm cho nó không hợp lệ ...
ETHproductions

@Artyer Tôi đã chuyển phiên bản Batch của mình, vì vậy bây giờ nó sẽ hoạt động ntừ trước 1đến 13khi độ chính xác của dấu phẩy động giết chết nó.
Neil

Tôi thích cách các giải pháp bắt đầu thực sự ngắn, và sau đó đột nhiên nhảy một thứ tự cường độ.
Nissa

2

Perl 6 , 47 byte

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

Trả về một Seq . ( Seq là một trình bao bọc Iterable cơ bản cho các Iterator )

Với đầu vào của 16nó, phải mất 20 giây để tính phần tử thứ 53905 của Seq ( 87887).

Mở rộng:

{       # 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

Hàng loạt, 204 200 byte

@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%

Không hoạt động với n> 9 vì Batch chỉ có số học 32 bit. Thuận tiện, Batch đánh giá f &= b ^= f = 1 << j % nf = 1 << j % n, b = b ^ f, f = f & bhơn f = f & (b = b ^ (f = 1 << j % n)).


2

Toán học, 59 48 byte

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

Chứa ký tự "Sử dụng riêng" của U + F4A1

Giải trình

Range[#^#]-1

Tạo {1, 2, ..., n^n}. Trừ 1. (sản lượng {0, 1, ..., n^n - 1})

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

Hàm Boolean: Truenếu mỗi chữ số xuất hiện nhiều nhất một lần trong cơ sở n.

Select[ ... ]

Từ danh sách {0, 1, ..., n^n - 1}, chọn những cái đưa ra Truekhi hàm Boolean ở trên được áp dụng.

Phiên bản 59 byte

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

2

Toán học, 48 55 byte

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

(Không gian ba giữa các xs cần được thay thế bằng ký tự 3 byte \ uF4A1 để làm cho mã hoạt động.)

Hàm không tên của một đối số duy nhất. Thay vì kiểm tra các số nguyên cho tính xenodrom, nó chỉ đơn giản tạo ra tất cả các hoán vị có thể có của các tập hợp con số cho phép (tự động tránh sự lặp lại) và chuyển đổi các số nguyên tương ứng thành cơ sở 10. Mỗi xenodrom được tạo hai lần, cả có và không có 0; Unionloại bỏ các bản sao và sắp xếp danh sách để khởi động.


1
Thất bại cho 2. Các chức năng cho {0, 1}. Tôi tin rằng bạn cần Permutations[Range@#-1, #]thay vì Subsets[Range@#-1].
JungHwan Min

Gah, thật là một sai lầm xương đầu. Cảm ơn bạn đã quan sát nó, và đã sửa chữa hoàn hảo!
Greg Martin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.