Xenodromes ทั้งหมด


15

บทนำ

ซีโนโดรมในฐานnเป็นจำนวนเต็มโดยที่ตัวเลขทั้งหมดในฐานnแตกต่างกัน นี่คือลำดับ OEIS ของ xenodromes

ยกตัวอย่างเช่นในฐานที่ 16 FACE, 42และFEDCBA9876543210มีบาง xenodromes (ซึ่งมี64206, 66และ18364758544493064720ในฐาน 10) แต่11และDEFACEDไม่ได้

ท้าทาย

ป.ร. ให้ไว้เป็นฐานการป้อนข้อมูลn , เอาท์พุทออก xenodromes ทั้งหมดของฐานที่อยู่ในฐาน 10

ผลลัพธ์ควรอยู่ในลำดับขั้นต่ำถึงมากที่สุด ควรมีความชัดเจนเมื่อคำศัพท์ในลำดับนั้นสิ้นสุดลงและคำใหม่เริ่มต้นขึ้น (เช่น[0, 1, 2]ชัดเจนที่012ไม่อยู่)

nจะเป็นจำนวนเต็มมากกว่า 0

ชี้แจง

ความท้าทายนี้ทำ IO เฉพาะในฐาน 10 เพื่อหลีกเลี่ยงการจัดการจำนวนเต็มและฐานเป็นสตริง ความท้าทายคือการจัดการฐานใด ๆ ที่เป็นนามธรรม ด้วยเหตุนี้ฉันจึงเพิ่มกฎเพิ่มเติมนี้:

จำนวนเต็มไม่สามารถจัดเก็บเป็นสตริงในฐานอื่นนอกเหนือจากฐาน 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

@ เลขที่ Flk.Tkc มันควรจะสามารถจัดการกับ n สูงพอสมควร ฉันไม่ต้องการความท้าทายที่จะถูก จำกัด โดยการแปลงฐานในตัวของภาษาที่สามารถจัดการได้
Artyer

@Artyer นั่นควรเป็นส่วนหนึ่งของข้อความท้าทายแล้ว ดูเหมือนว่าคำตอบบางอย่างกำลังทำเช่นนั้นแล้ว
Luis Mendo

ฉันรู้ว่าการแปลงฐานใน Pyth สามารถจัดการค่าขนาดใหญ่ที่ 36แต่ตั้งแต่นี้ต้องการทั้งหมดของ xenodromes ssize_tที่แบ่งหลามพื้นฐานเมื่อรายการได้รับมีขนาดใหญ่เกินไปบอกว่ามันไม่สามารถใส่ค่าใน วิธีนี้เป็นที่ยอมรับหรือไม่?
FryAmTheEggman

2
บางคนดูเหมือนว่าจะมีคำตอบที่ลดลงทั้งหมดที่ไม่สามารถจัดการกับฐานขนาดใหญ่ได้เนื่องจากข้อ จำกัด ด้านความแม่นยำในตัวซึ่งดูเหมือนว่าจะนำไปใช้มากกว่าปัญหาของอัลกอริทึม คุณช่วยอธิบายได้ไหม
Dennis

คำตอบ:


10

Pyth , 8 ไบต์

f{IjTQU^

กรองตัวเลขใน[0, n ^ n - 1]ที่มีองค์ประกอบไม่ซ้ำกันในฐานn การแปลงฐานใน 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

ว้าวโซลูชันที่สั้นกว่าโซลูชัน Jelly ที่เดนนิสทำขึ้น! : 'P
HyperNeutrino

3
ไม่มีใครชนะเจลลี่ ¶:
Roman Gräf

5

Python 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`

พิมพ์บรรทัดว่างพิเศษสำหรับ non-xenodromes:

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

5
6
7



11



15



19

21

5

เยลลี่ , 9 8 ไบต์

ð*ḶbQ€Qḅ

ขอบคุณ @JonathanAllan สำหรับการตีกอล์ฟ 1 ไบต์!

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

ð*Ḷ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หน่วยความจำเพียงพอการแปลงฐานของ Jelly ไม่ จำกัด

อย่างไร?

*`Ḷ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 ไบต์

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ก่อนที่จะมีความแม่นยำจุดลอยตัวฆ่ามัน
Neil

ฉันชอบวิธีการแก้ปัญหาที่เริ่มต้นสั้นจริงๆแล้วก็กระโดดลำดับความสำคัญ
Nissa

2

Perl 6 , 47 ไบต์

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

ส่งกลับลำดับ ( Seqเป็นwrapper Iterableขั้นพื้นฐานสำหรับIterator s)

ด้วยอินพุตของ16มันใช้เวลา 20 วินาทีในการคำนวณองค์ประกอบที่ 5,3905 ของ Seq ( 87887)

ขยาย:

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

แบตช์204 200 ไบต์

@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 เพราะแบทช์มีเลขคณิต 32 บิตเท่านั้น สิ่งอำนวยความสะดวก, Batch ประเมินf &= b ^= f = 1 << j % nเป็นมากกว่าf = 1 << j % n, b = b ^ f, f = f & bf = f & (b = b ^ (f = 1 << j % n))


2

มาติกา 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

ฟังก์ชั่นบูลีน: Trueหากตัวเลขแต่ละหลักเกิดขึ้นอย่างมากหนึ่งครั้งในฐานnถ้าแต่ละหลักที่เกิดขึ้นมากที่สุดครั้งหนึ่งในฐาน

Select[ ... ]

จากรายการ {0, 1, ..., n^n - 1}ให้เลือกที่ให้Trueเมื่อใช้ฟังก์ชันบูลีนด้านบน

รุ่น 59 ไบต์

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

2

Mathematica, 48 55 ไบต์

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

ช่องว่างระหว่างสาม x s ต้องถูกแทนที่ด้วยอักขระ 3 ไบต์ \ uF4A1 เพื่อให้โค้ดทำงานได้)

ฟังก์ชันที่ไม่มีชื่อของอาร์กิวเมนต์เดี่ยว แทนที่จะทำการทดสอบเลขจำนวนเต็มสำหรับ xenodromicity เพียงสร้างการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดของเซตย่อยของตัวเลขที่อนุญาต (ซึ่งจะหลีกเลี่ยงการซ้ำซ้อนโดยอัตโนมัติ) และแปลงจำนวนเต็มที่สอดคล้องกันเป็นฐาน 10 แต่ละ xenodrome จะถูกสร้างขึ้นสองครั้ง Unionลบรายการที่ซ้ำกันและเรียงลำดับรายการเพื่อบูต


1
2ล้มเหลว {0, 1}ฟังก์ชั่นให้ ผมเชื่อว่าคุณต้องแทนPermutations[Range@#-1, #] Subsets[Range@#-1]
JungHwan Min

Gah ช่างเป็นความผิดพลาด ขอบคุณสำหรับการสังเกตและการแก้ไขที่สมบูรณ์แบบ!
Greg Martin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.