เลขชี้กำลังจำนวนน้อยที่สุด


20

จำนวน Pandigitalเป็นจำนวนเต็มซึ่งมีหลักจาก 0 ถึง 9 ทุกอย่างน้อยครั้งหนึ่งเคยเป็น 1234567890, 1902837465000000 และ 9023289761326634265 ล้วนเป็นแบบดิจิตอล สำหรับจุดประสงค์ของการท้าทายนี้ตัวเลขเช่น 123456789 ไม่ใช่ pandigital เนื่องจากไม่มี 0 แม้ว่า 123456789 = 0123456789

หลากหลายคู่ของจำนวนเต็มคือคู่ของจำนวนเต็ม(a,b)เช่นว่าเป็น Pandigital เรียกว่าเลขชี้กำลังเป็นจำนวนมากabb

ท้าทาย:ป.ร. ให้ไว้เป็นจำนวนเต็มหาที่เล็กที่สุดที่สอดคล้องกันกระจายตัวแทนขนี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะab

(คุณอาจคิดว่ามีเลขชี้กำลังเช่นนั้นนั่นคือโปรแกรมของคุณจะไม่ได้รับอินพุตที่ไม่ถูกต้องเช่นกำลัง 10)

วิธีการแก้ปัญหาของคุณจะต้องสามารถจัดการกับกรณีทดสอบอย่างน้อยที่สุด แต่ในทางทฤษฎีควรจัดการอินพุตที่ถูกต้องทั้งหมด

นี่คือA090493ใน OEIS

กรณีทดสอบ

2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1

3
1234567890 -> 1ผมอยากจะชี้ให้เห็นเป็นกรณีพิเศษ
Bubbler

@Bubbler เพิ่มแล้ว
Conor O'Brien

exponents เชิงลบนอกขีด จำกัด คืออะไร
sudo rm -rf slash

1
สิ่งที่ชอบ123456789นับเป็น pandigital หรือไม่? มันเท่ากับ0123456789ซึ่งเป็น pandigital อย่างแน่นอน
กำจัด

1
@ สูญเปล่าไม่มันไม่
Conor O'Brien

คำตอบ:


9

Brachylog (v2), 9 ไบต์

;.≜^dl10∧

ลองออนไลน์!

นี่คือการส่งฟังก์ชั่น ลิงค์ TIO มีกระดาษห่อที่ทำให้ฟังก์ชั่นเป็นโปรแกรมแบบเต็ม

คำอธิบาย

;.≜^dl10∧
 .≜        Brute-force all integers, outputting the closest to 0
;  ^         for which {the input} to the power of the number
    d        has a list of unique digits
     l10     of length 10
        ∧  (turn off an unwanted implicit constraint)



4

JavaScript (Node.js) ,  51 46  43 ไบต์

ใช้อินพุตเป็นตัวอักษร BigInt ผลตอบแทนที่แท้จริงแทน 1

f=(n,k=n)=>new Set(n+'').size>9||1+f(n*k,k)

ลองออนไลน์!


2
ฉันลืมไปแล้วว่า JS มีข่าวใหญ่ตอนนี้: D
Conor O'Brien

ผมสงสัยเล็กน้อยเกี่ยวกับการกลับมาจริงแทน 1. นั่นดูเหมือนจะไม่ตรงกับสิ่งที่อธิบายไว้ที่codegolf.meta.stackexchange.com/questions/9263/...
SPARR

3
@Sparr นี่คือฉันทามติปัจจุบัน
Arnauld

ขอบคุณ ฉันใส่คำตอบใหม่ลงในลิงก์ที่อ้างถึง
Sparr



3

J , 25 ไบต์

>:@]^:(10>#@~.@":@^)^:_&1

ลองออนไลน์!

คำกริยาเดี่ยว อินพุตควรเป็นจำนวนเต็มที่มีความแม่นยำสูง (เช่น2x)

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

>:@]^:(10>#@~.@":@^)^:_&1    Monadic verb. Input: base a
    ^:              ^:_      Good old do-while loop.
                       &1    Given 1 as the starting point for b,
>:@]                         increment it each step
      (            )         and continue while the condition is true:
               ":@^          Digits of a^b
            ~.@              Unique digits
          #@                 Count of unique digits
       10>                   is less than 10

(]+10>#@=@":@^)^:_*
FrownyFrog


2

แร็กเก็ต , 110 96 ไบต์

-14 ไบต์ขอบคุณ UltimateHawk!

(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))

ลองออนไลน์!


1
ซึ่งสามารถย่อให้เหลือ 96 ไบต์โดยเรียกใช้ฟังก์ชันซ้ำ(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Ultimate Hawk

@UltimateHawk ขอบคุณ! ฉันลืมเกี่ยวกับพารามิเตอร์เริ่มต้น ... (แม้ว่าฟังก์ชั่นผู้ช่วยนอกจากนี้ยังใช้เป็นค่าเริ่มต้นพารามิเตอร์ข ... )
เลน Ivanov

2

Python 3 , 52 47 ไบต์

ขอบคุณ @BMO

f=lambda n,i=1:len({*str(n**i)})>9or 1+f(n,i+1)

ลองออนไลน์!


แค่หัวขึ้น แต่คุณสามารถลบรหัสเก่าและวาง "<s> 52 </s> 47" ในบรรทัดส่วนหัว บันทึกการแก้ไขจะยังคงเป็นเวอร์ชั่นเก่าถ้าใครอยากรู้อยากเห็น
Veskah

2

05AB1E (เดิม) , 10 9 ไบต์

บันทึก 1 ไบต์ต้องขอบคุณMr. Xcoder

XµINmÙgTQ

ลองออนไลน์!

คำอธิบาย

Xµ           # find the first positive integer N that
  INm        # when the input is raised to N
     Ù       # and duplicate digits are removed
      g      # has a length
       TQ    # equal to 10

1
Legacy บันทึก 1 byte: 1µINmÙgTQ- ลองออนไลน์!
Mr. Xcoder

@ Mr.Xcoder: ใช่แล้วเรามีผลลัพธ์โดยปริยายในNตอนนั้น ขอบคุณ!
Emigna

1

ถ่านขนาด 19 ไบต์

WΦχ¬№IXIθLυIκ⊞υωILυ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

WΦχ¬№IXIθLυIκ⊞υω

ดันสตริงว่าง ๆ ซ้ำ ๆ ไปยังรายการว่างเปล่าจนกว่าจะไม่มีตัวเลขที่กำลังของอินพุตเข้ากับความยาวของรายการไม่มี

ILυ

พิมพ์ความยาวของรายการ


ทำไมต้องลงคะแนน
Luis Mendo

1

K (ngn / k) , 76 ไบต์

{#{10>#?(+/|\0<|x)#x}{{+/2 99#,/|0 10\x,0}/+/99 99#,/a*\:x,0}\a::|(99#10)\x}

ลองออนไลน์!

{ } ฟังก์ชั่นที่มีข้อโต้แย้ง x

|(99#10)\x เราเป็นตัวแทนของตัวเลขเป็นรายการที่กลับรายการของตัวเลขทศนิยม 99 - ทำเพื่อโต้แย้ง

a::กำหนดให้กับตัวแปรทั่วโลกa(k ไม่มีการปิดเราจำเป็นต้องaเป็นโกลบอลเพื่อให้เราสามารถใช้ในการทำหน้าที่ย่อยได้)

{ }{ }\ ในขณะที่ฟังก์ชันแรกคืนค่าเท็จให้ใช้ฟังก์ชันที่สอง (aka ขณะที่ลูป) รักษาผลลัพธ์ระดับกลาง

a*\:xแต่ละa's ตัวเลขคูณด้วยแต่ละx' s ตัวเลข ( 'สินค้านอก')

99 99#a*\:x,0 เพิ่มคอลัมน์พิเศษของ 0s และปรับรูปร่างอีกครั้งเป็น 99x99 ซึ่งจะเปลี่ยนแถวที่ i โดยรายการ i ไปทางขวาแทรก 0s ทางด้านซ้าย (ใช้งานได้สำหรับการทดสอบสำหรับอินพุตที่มีขนาดใหญ่กว่า 99x99 อาจนำไปสู่การล้น)

+/ รวม

{+/2 99#,/|0 10\x,0}/ เผยแพร่พกพา:

  • { }/ ใช้ต่อไปจนกระทั่งบรรจบกัน

  • 0 10\x divmod คูณ 10 (รายการหนึ่งคู่)

  • |0 10\x moddiv 10

  • 2 99#,/|0 10\x,0 moddiv คูณ 10 โดยส่วน "div" เลื่อน 1 หลักไปทางขวา

  • +/ รวม

{10>#?(+/|\0<|x)#x} - ตรวจสอบ (ไม่ใช่) pandigital:

  • |x ถอยหลัง x

  • 0< ตัวเลขใดที่ไม่ใช่ศูนย์

  • |\ บางส่วนสูงสุด

  • +/ sum - จำนวนนี้จะนับจำนวน 0 ที่นำหน้า x

  • 10> พวกเขาน้อยกว่า 10 หรือไม่

# ความยาวของลำดับของพลัง - นี่คือผลลัพธ์


1

PowerShell , 107 ไบต์

param([bigint]$a)for([bigint]$b=1;-join("$([bigint]::pow($a,$b))"|% t*y|sort -u)-ne-join(0..9);$b=$b+1){}$b

ลองออนไลน์!

ตรงไปตรงมาสวยน่าเสียดายที่เราต้องใช้[bigint]ทุกที่ เราใช้การป้อนข้อมูล$aแล้วติดตั้งวงกับการเริ่มต้นfor$b=1

แต่ละซ้ำเราเพิ่มขึ้น$bหลังจากการตรวจสอบไม่ว่าจะเป็น$a ^ $b(ผ่านpow) ส่งtoCharArra y, sorted กับ-uธง nique แล้ว-joined เข้าด้วยกันเป็นสตริงเป็น-nOT equal ในช่วง0..9นี้ยัง-joined เป็นสตริง

นั่นเป็นคำหนึ่ง ตัวอย่างเช่นนี้จะเปรียบเทียบ7 ^ 5 = 16807 --> "01678"กับ"0123456789"กำหนดว่าพวกเขาไม่เท่ากันและดำเนินการวนรอบต่อไป

เมื่อเราออกจากวงเราได้พิจารณาแล้วว่า$bเหมาะสมกับข้อมูลของเราและปล่อยไว้บนท่อ เอาท์พุทเป็นนัย


1

Java, 108 ไบต์

a->{int b=0;while(new java.math.BigDecimal(a).pow(++b).toString().chars().distinct().count()<10);return b;};

ลองออนไลน์!

คำอธิบาย

กำลังดุร้ายวนลูป ^ b จนกระทั่งพบสตริงที่มี 10 (หรือมากกว่านั้น แต่เป็นไปไม่ได้เนื่องจากจะมีเพียง 0 ถึง 9) อักขระที่ไม่ซ้ำกัน

BigDecimalจำเป็นต้องมีทั้งคู่เนื่องจากMath.powไม่ถูกต้องเพียงพอ (ล้มเหลวในกรณี11) และเนื่องจากการแปลง a Doubleเป็นสตริงโดยค่าเริ่มต้นจะแสดงสัญลักษณ์ทางวิทยาศาสตร์ซึ่งแบ่งวิธีการค้นหาหมายเลข pandigital นี้


Java vars เริ่มต้นที่ 0 หรือไม่? สามารถบันทึก 2 ไบต์โดยกำจัดการเริ่มต้น
Darrel Hoffman

@DarrelHoffman อินสแตนซ์ตัวแปรทำใช่ ตัวแปรที่มีการกำหนดขอบเขตในเครื่องไม่
Hypino

เอาละ รับบางเวลาตั้งแต่ฉันทำงานใน Java ลืมเทคนิคนั้น
Darrel Hoffman

คุณสามารถบันทึก 6 ไบต์โดยเปลี่ยนnew java.math.BigDecimal(a).pow(++b).toString()เป็น(new java.math.BigDecimal(a).pow(++b)+"")(และเซมิโคลอนต่อท้ายไม่จำเป็นต้องนับสำหรับฟังก์ชันแลมบ์ดา) ลองใช้ออนไลน์
Kevin Cruijssen

1

Pyth, 10 8 ไบต์

fq;l{`^Q

ลองออนไลน์ได้ที่นี่

fq;l{`^QT   Implicit: Q=eval(input())
            Trailing T inferred
f           Return (and print) the first positive integer where the following is true:
      ^QT     Raise input to the current number-th power
     `        Convert to string
    {         Deduplicate
   l          Take the length
 q            Is the above equal to...
  ;           10

บันทึก 2 ไบต์ต้องขอบคุณ FryAmTheEggman, รหัสก่อนหน้า fq;l{j^QT;


คุณสามารถใช้ backtick เพื่อแปลงตัวเลขเป็นสตริงแทนที่จะทำการแปลงพื้นฐานซึ่งจะช่วยให้คุณไม่พลาดการTใช้พลังงาน
FryAmTheEggman

0

เจลลี่ , 12 11 ไบต์

1*@ṾØDfƑʋ1#

ลองออนไลน์!

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

1*@ṾØDfƑʋ1#  Main link. Argument: n

1            Set the return value to 1.
         1#  Call the link to the left for k = 1, 2, ... and with right argument n,
             until it returns a truthy value.
        ʋ      Combine the four links to the left into a dyadic chain.
 *@              Compute n**k.
   Ṿ             Convert it to its string representation.
    ØD           Yield "0123456789".
      fƑ         Filter and return 1 is the result is equal to the left argument.



0

Attacheขนาด 27 ไบต์

${Generate{#Unique[x^_]>9}}

ลองออนไลน์!

คำอธิบาย

${Generate{#Unique[x^_]>9}}
${                        }    lambda, input: x
  Generate{              }     first natural number _ satisfying...
                   x^_             the input to that number
            Unique[   ]          unique digits of ^
           #                   length of ^
                       >9      is greater than 9
                               i.e.: has 10 distinct digits

ทางเลือก

28 ไบต์: ${Generate{Unique@S[x^_]@9}}

29 ไบต์: ${Generate{Unique[S[x^_]]@9}}

30 ไบต์: ${Generate{#Unique[S[x^_]]>9}}

31 ไบต์: Generate@${{#Unique[S[x^_]]>9}}

32 ไบต์: ${Generate[{#Unique[S[x^_]]>9}]}

33 ไบต์: ${If[#Unique[x^y]>9,y,x&$!-~y]}&0

34 ไบต์: ${If[#Unique[x^y]>9,y,$[x,y+1]]}&0

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