Tüm Ksenodromlar


15

Giriş

Temel bir xenodrome n bir tam sayı olduğu bir baz ile olan tüm rakamlarını n birbirinden farklıdır. İşte ksenodromların bazı OEIS dizileri.

Örneğin, baz 16'da, FACE, 42ve FEDCBA9876543210bazı xenodromes (vardır 64206, 66ve18364758544493064720 tabanın 10), ancak 11ve DEFACEDdeğillerdir.

Meydan okuma

Bir giriş tabanı verildiğinde, n , bu baz için tüm ksenodromları çıkarır taban 10'daki .

Çıktı en azdan en büyüğe doğru olmalıdır. Sekanstaki bir terimin nerede bittiği ve yeni bir terimin nerede başladığı açık olmalıdır (ör.[0, 1, 2] açık olmalıdır , nerede 012olmadığı açıktır ).

n , 0'dan büyük bir tam sayı olacaktır.

Açıklamalar

Bu zorluk, tamsayıların ve tabanlarının dize olarak ele alınmasını önlemek için özellikle temel 10'da GÇ yapar. Zorluk herhangi bir üssü soyut olarak ele almaktır. Bu nedenle, bu ek kuralı ekliyorum:

Tamsayılar, taban 10 dışında bir tabanda dize olarak saklanamaz.

Programınız teorik makul yükseklikte idare gerekir n hiçbir zaman, bellek, hassas ya da dilin uygulanmasında diğer teknik kısıtlamalar olsaydı.

Bu , yani bayt cinsinden en kısa program kazanır.

Örnek Giriş ve Çıkış

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 için bir sınır var mı?
FlipTack

@ Flp.Tkc Hayır. Oldukça yüksek n ile başa çıkabilmelidir. Zorluğun, bir dilin yerleşik temel dönüşümünün ne kadar yüksek bir tabanla başa çıkabileceğini sınırlamak istemiyorum.
Artyer

@Artyer O zaman bu meydan okuma metninin bir parçası olmalıydı. Bazı cevaplar zaten bunu yapıyor
Luis Mendo

Pyth temel dönüşüm 36 daha büyük değerleri işleyebilir biliyorum , ama bu tüm xenodromlar istediği için, liste çok büyük olduğunda, bir değere sığamayacağını söyleyerek temel python kırılır ssize_t. Bu şekilde kırılması kabul edilebilir mi?
FryAmTheEggman

2
Birisi, bir algoritma probleminden ziyade bir uygulama gibi görünen yerleşik bir hassas sınır nedeniyle daha büyük tabanları işleyemeyen tüm cevapları indirdi. Açıklığa kavuşturabilir misiniz?
Dennis

Yanıtlar:


10

Pyth , 8 bayt

f{IjTQU^

Temelde yinelenen öğe bulunmadığında [0, n ^ n - 1] içindeki sayıları filtreler n'de . Pyth'teki taban dönüşümü herhangi bir tabanla çalışacaktır, ancak bu çok hızlı bir şekilde artan sayı listesine baktığından, değerleri bellekte saklayamayacaktır.

Çevrimiçi deneyin!

Açıklama:

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

Vay canına, Dennis'in yaptığı Jelly çözümünden daha kısa bir çözüm! : 'P
HyperNeutrino

3
Kimse Jelly'i yenemez. ¶:
Roman Gräf

5

Python 2, 87 bayt

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`

Ksenodrom olmayanlar için ekstra boş satırlar yazdırır:

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

5
6
7



11



15



19

21

5

Jöle , 9 8 bayt

ð*ḶbQ€Qḅ

@JonathanAllan'a 1 baytlık golf için teşekkürler!

Çevrimiçi deneyin! veya tüm test senaryolarını doğrulayın .

Nasıl çalışır

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

Jöle , 12 bayt

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

TryItOnline!

Herhangi biri için çalışacak n, yeterli bellek verildiğinde, Jelly'in temel dönüşümü kısıtlayıcı değildir.

Nasıl?

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

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}

Başarısız 1(Çıktı gerekir [0], ancak RangeErrors.)
Artyer

Tam olarak ne vardı, ama bu 37hassas bir sorun olmasa teorik olarak başarısız olurdu , ki bence bu geçersiz kılıyor ...
ETHproductions 26:16

Benim Toplu versiyonunu taşıdınız @Artyer, şimdi bunun için çalışacaktır ngelen 1etmek 13kayan nokta hassas onu öldürmeden önce.
Neil

Çözümlerin gerçekten kısa bir sürede nasıl başlayacağını ve sonra aniden bir büyüklük sırasını atlamayı seviyorum.
Nissa

2

Perl 6 , 47 bayt

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

Bir Sıra döndürür . ( Sıra , Yineleyiciler için temel bir Yinelenebilir sarıcıdır )

Bir giriş ile 16DİZİ arasında 53905 elemanının hesaplamak için 20 saniye sürer ( 87887).

Expanded:

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

Toplu, 204200 bayt

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

N> 9 için çalışmaz, çünkü Batch yalnızca 32 bit aritmetiğe sahiptir. Rahatça, Batch yerine f &= b ^= f = 1 << j % nolarak değerlendirir .f = 1 << j % n, b = b ^ f, f = f & bf = f & (b = b ^ (f = 1 << j % n))


2

Mathematica, 59 48 bayt

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

U + F4A1 "Özel Kullanım" karakteri içeriyor

açıklama

Range[#^#]-1

Oluşturun {1, 2, ..., n^n}. Çıkarma 1. (verim {0, 1, ..., n^n - 1})

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

Bir Boole işlevi: Trueher basamak tabanda en fazla bir kez oluşursa n.

Select[ ... ]

Listeden {0, 1, ..., n^n - 1}, Trueyukarıdaki Boole işlevi uygulandığında verilenleri seçin .

59 baytlık sürüm

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

2

Mathematica, 48 55 bayt

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

( xKodun çalışması için , s arasındaki üç boşluk yerine 3 baytlık karakter kullanılmalıdır \ uF4A1.)

Tek bir argümanın isimsiz işlevi. Tamsayıları ksenodromisite açısından test etmek yerine, sadece izin verilen basamakların alt kümelerinin tüm olası permütasyonlarını üretir (bu otomatik olarak tekrardan kaçınır) ve karşılık gelen tam sayıları 10 tabanına dönüştürür. Unionkopyaları kaldırır ve önyükleme yapmak için listeyi sıralar.


1
İçin başarısız 2. Fonksiyon verir {0, 1}. İhtiyacın olduğuna inanıyorumPermutations[Range@#-1, #] yerineSubsets[Range@#-1] .
JungHwan Min

Gah, ne şahane bir hata. Gözlemlediğiniz ve mükemmel düzeltmeyi önerdiğiniz için teşekkür ederiz!
Greg Martin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.