ฐานที่ดีที่สุดคือ 10 ... มาถึงกันแล้ว!


40

การป้อนข้อมูล:

เป็นจำนวนเต็มบวกnซึ่งประกอบด้วยตัวเลขในช่วง0-9

ท้าทาย:

ถ้าdเป็นหลักที่สูงที่สุดในจำนวนเต็มสมมติฐานของตัวเลขคือ1 + d เช่นถ้าจำนวนเต็ม1256คุณจะถือว่ามันอยู่ในbase-7ถ้ามันคือ10110คุณก็จะสมมุติว่ามันคือbase-2 (ไบนารี) และถ้ามันเป็น159ก็จะเป็นทศนิยม

ทีนี้ทำสิ่งต่อไปนี้จนกว่าคุณจะ 1: ถึงจำนวนเต็ม10 ฐานหรือ 2: ถึงจำนวนเต็มหลักเดียว

  1. แปลงจำนวนเต็มจากbase- (d + 1)เป็นbase-10
  2. ค้นหาฐานของจำนวนเต็มใหม่นี้ (อีกครั้งฐาน - (d + 1)โดยที่dคือตัวเลขสูงสุดในจำนวนใหม่)
  3. ไปยังขั้นตอนที่ 1

ตัวอย่าง:

สมมติใส่เป็นn = 413574 ตัวเลขสูงสุดd = 7ดังนั้นนี่คือเบส -8 (ฐานแปด) แปลงนี้เพื่อทศนิยมและได้รับ137,084 หลักสูงสุดd = 8ดังนั้นนี้เป็นฐาน-9 แปลงนี้เพื่อทศนิยมและได้รับ83,911 ตัวเลขสูงสุดคือ9ดังนั้นนี่คือตัวเลขทศนิยมและเราหยุด การส่งออกจะเป็น83,911

สมมติใส่เป็นn = 13552 หลักสูงสุดคือd = 5ดังนั้นนี้เป็นฐาน-6 แปลงนี้เพื่อทศนิยมและได้รับ2156 หลักสูงสุดd = 6ดังนั้นนี้เป็นฐาน-7 แปลงนี้เพื่อทศนิยมและได้รับ776 หลักสูงสุดคือd = 7ดังนั้นนี้เป็นฐาน-8 แปลงนี้เพื่อทศนิยมและได้รับ510 หลักสูงสุดคือd = 5ดังนั้นนี้เป็นฐาน-6 แปลงนี้เพื่อทศนิยมและได้รับ186 หลักที่สูงที่สุดคือ8ดังนั้นนี้เป็นฐาน-9 แปลงเป็นทศนิยมและรับ159. ตัวเลขสูงสุดคือ9ดังนั้นนี่คือตัวเลขทศนิยมและเราหยุด การส่งออกจะเป็น159

สมมติใส่เป็นn = 17 นี้จะช่วยให้เรา15แล้ว11แล้ว3ซึ่งเราจะออกเนื่องจากเป็นตัวเลขหลักเดียว


กรณีทดสอบ:

5
5

17
3

999
999

87654321  (base-9 -> 42374116 in decimal -> base-7 -> 90419978 in decimal) 
9041998

41253  (5505 -> 1265 -> 488 -> 404 -> 104 -> 29)
29

หมายเหตุ:

  • กฎมาตรฐานเกี่ยวกับ I / O ช่องโหว่ ฯลฯ คุณสามารถรับอินพุตเป็นสตริงได้
  • คำอธิบายได้รับการสนับสนุน
  • คุณสามารถใช้คำสั่งการแปลงฐานในตัว
    • โซลูชั่นที่ไม่ใช้ฟังก์ชั่นการแปลงฐานในภาษา (ถ้ามี) ยินดีต้อนรับแม้ว่าจะจบลงนานกว่าวิธีที่ชัดเจนโดยใช้ฟังก์ชัน builtin

เห็นได้ชัดว่านี่คือOEIS A091047


2
เห็นได้ชัดว่าฉันรักเมทริกซ์ดังนั้นฉันจึงคิดว่าฉันจะท้าทายการแปลงฐานแทน
Stewie Griffin

34
"ฐานที่ดีที่สุดคือ 10" ... "10" เขียนในฐานใด
Olivier Grégoire

5
@ OlivierGrégoireนั่นคือสิ่งที่ฉลาด ... ไม่ว่าเราจะอยู่ที่ไหนก็ตามมันจะยังคงเป็นคำสั่งที่ถูกต้อง!
Stewie Griffin

@StewieGriffin แต่คุณจะอ่านได้อย่างไร? "10" มีชื่อแตกต่างกันในแต่ละฐาน
11153

10
ดีขึ้นอยู่กับฐาน ... หรือเป็น Meghan จะพูดว่า"มันเกี่ยวกับฐานที่ 'ฐานนั้นไม่มีปัญหา" ;-)
Stewie Griffin

คำตอบ:


20

Mathematica, 56 ไบต์

#//.x_/;(b=Max[d=IntegerDigits@x]+1)<11:>d~FromDigits~b&

ลองออนไลน์! (ใช้คณิตศาสตร์)

ฉันคิดว่าฉันจะตรวจสอบลำดับที่ดูเหมือน:

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือพล็อตของจำนวนขั้นตอนที่ใช้ในการค้นหาผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่

(คลิกเพื่อดูรุ่นที่ใหญ่ขึ้นดูประวัติการแก้ไขของพล็อตได้สูงสุดn = 1,000 )

ดูเหมือนว่าการผสมผสานที่น่าสนใจของโครงสร้างขนาดใหญ่และความวุ่นวายในระดับดี ฉันสงสัยว่าเกิดอะไรขึ้นกับช่องว่างที่กว้างขึ้นประมาณ 30,000 และ 60,000


4
@StewieGriffin ควรอยู่ทางซ้าย ช่องว่างเล็ก ๆ อยู่ที่นั่นเพราะตัวเลขที่นำไปสู่พหุคูณของพลังของ 10 ประกอบด้วย a 9ดังนั้นพวกเขาจึงอยู่ในฐาน 10 แต่สำหรับ 30k และ 60k ดูเหมือนว่าตัวเลขที่มี 8 หรือ 7 (จะต้อง ตรวจสอบ) แทนที่ 9 กลายเป็นฐาน 10 หลังจากมากที่สุดในขั้นตอนเดียว
Martin Ender

@StewieGriffin เพื่อความแม่นยำตัวเลขทั้งหมดในช่วง [28051, 28888] เป็นฐาน 9 และแปลเป็นตัวเลขของรูปแบบ 19xxx ดังนั้นจึงเพิ่มช่องว่างเป็นสองเท่า
cmaster

อ่าเข้าใจแล้ว ... :) สำหรับบันทึก: ฉันรู้ว่าทำไมมีช่องว่างทางด้านซ้ายของพลังของ 10 ... มันเป็นเพียงช่องว่างสองเท่าที่แปลก (ทำไม 30/60 ไม่ใช่ 20 / 40/50) ตอนนี้ฉันเห็นแล้วว่าตัวเลขนั้นอยู่ในช่วง 28xxx -> 19xxx แต่ 38xxx -> 26xxx ไม่ใช่ 29xxx
Stewie Griffin

10

Java 8, 172 166 163 152 151 140 138 116 114 99 ไบต์

s->{for(Integer b=0;b<10&s.length()>1;s=""+b.valueOf(s,b=s.chars().max().getAsInt()-47));return s;}

Stringจะเข้าเป็น

-64 ไบต์ขอบคุณที่@ OlivierGrégoire และที่นี่ฉันคิดว่าครั้งแรกที่ฉัน 172 ไม่เลวเกินไป .. ;)

ลองที่นี่

คำอธิบาย:

s->{                    // Method with String as parameter and return-type
  for(Integer b=0;b<10  //  Loop as long as the largest digit + 1 is not 10
      &s.length()>1;    //  and as long as `s` contains more than 1 digit
    s=""+               //   Replace `s` with the String representation of:
         b.valueOf(s,   //    `s` as a Base-`b` integer
          b=s.chars().max().getAsInt()-47)
                        //     where `b` is the largest digit in the String + 1
  );                    //  End of loop
  return s;             //  Return result-String
}                       // End of method

1
สัญญาที่จะสงบสติอารมณ์? : p ตกลง ... ไปกันเถอะ: s->{for(Integer b=0;b<10&s.length()>1;)s=""+b.valueOf(s,b=s.chars().max().getAsInt()-47);return s;}. นอกจากนี้ฉันได้ลบความคิดเห็นส่วนใหญ่ของฉันเนื่องจากพวกเขาไม่เกี่ยวข้องทั้งหมดในขณะนี้ ( bเป็นฐานของคุณaและsเป็นหมายเลขที่เรากำลังดำเนินการอยู่)
Olivier Grégoire

1
ฉันพยายามที่จะเรียกคืนสิ่งนี้เพื่อกำจัดบาง bytes ด้วย: Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:c(""+b.valueOf(s,b));(88) แต่ฉันใหม่เอี่ยมกับ code golf นี่คือตัวอย่างโค้ดใช่มั้ย มีวิธีที่จะประกาศว่านี่เป็นวิธีการโดยไม่ต้องเพิ่มpublic String c(String s)หรือไม่?
ลอร์ด Farquaad

1
@ LordFarquaad คุณไม่ต้องการpublicแต่ฉันกลัวว่าคุณจะต้องใช้String c(String s){}recursive-call แม้ใน Java 8 เมื่อคุณสร้างแลมบ์ดาโดยใช้java.util.function.Function<String, String> c=s->{Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:c‌.apply​(""+b.valueOf(s,b));}หรืออินเตอร์เฟสที่ใช้interface N{String c(String s);}N n = s->{Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:n.c‌​(""+b.valueOf(s,b));};มันจะให้ " การอ้างอิงตนเองใน initializer ข้อผิดพลาด "ในทั้งสองกรณี แต่วิธีการที่ดีมากถึงกระนั้น!
Kevin Cruijssen

อ่าฉันเดาว่าฉันไม่ได้รังเกียจมันสักสองสามไบต์แล้ว แต่ขอบคุณสำหรับความช่วยเหลือ! ฉันจะจำเรื่องนี้ไว้ก่อน
ลอร์ด Farquaad

8

Pyth, 9 ไบต์

ui`GhseS`

ชุดทดสอบ

คำอธิบาย:

ui`GhseS`
ui`GhseS`GQ    Implicit variable introduction
u         Q    Repeatedly apply the following function until the value repeats,
               starting with Q, the input.
        `G     Convert the working value to a string.
      eS       Take its maximum.
     s         Convert to an integer.
    h          Add one.
 i`G           Convert the working value to that base

มันค่อนข้างแปลกที่คุณใช้แลมบ์ดาสองตัวแปรที่จบลงด้วยการใช้ตัวแปรเดียว ... และมันก็ไม่ได้เกิดข้อผิดพลาด โอ้ตัวแปรทั้งสองเป็นQและQฉันเข้าใจแล้ว
Erik the Outgolfer

@EriktheOutgolfer ไม่ตรง uโดยไม่ต้องใช้อินพุตที่สามจนกว่าจะมีการทำซ้ำในขณะที่อินพุตที่สามจะใช้จำนวนครั้งที่แน่นอน uแลมบ์ดามีGและแต่คุณไม่จำเป็นต้องใช้H H
isaacg

จริงๆแล้วการแทนที่Gด้วยHจะได้ผลลัพธ์เหมือนกัน ... ตัวแปร btw โดยนัยคือGอะไร
Erik the Outgolfer

@EriktheOutgolfer ตัวแปรโดยนัยคือGใช่ Hนับจาก 0 ด้วยการวนซ้ำแต่ละครั้งดังนั้นจึงแตกต่างกันโดยสิ้นเชิง ฉันไม่แน่ใจจริงๆว่าคุณกำลังพูดถึงเรื่องอะไร นี่คือตัวอย่างโปรแกรมที่จะแสดงให้คุณเห็นว่าเกิดอะไรขึ้น: pyth.herokuapp.com/ ..
isaacg

6

JavaScript (ES6), 63 57 54 53 ไบต์

f=a=>a>9&(b=Math.max(...a+""))<9?f(parseInt(a,b+1)):a

บันทึก 8 ไบต์ด้วย Shaggy และ Dom Hastings

f=a=>a>9&(b=Math.max(...a+""))<9?f(parseInt(a,b+1)):a;

console.log(f("413574"))


เอาชนะฉันให้ได้ ฉันคิดว่าคุณสามารถบันทึกไม่กี่ไบต์ด้วย+a>9||b<9และย้อนกลับสามภาค
Shaggy

1
@Shaggy แก้ไข: ฉันเป็นใบ้
Tom

1
อย่ามัว แต่อยู่กับทอมตัวเอง! คุณไม่ได้โง่ แต่คุณไม่ฉลาดเท่า @Shaggy!
Stewie Griffin

1
ทางเลือกสำหรับ 55 ไบต์f=n=>n>9&&(k=Math.max(...n+"")+1)<10?f(parseInt(n,k)):n
Dom Hastings

@ DomHastings ขอบคุณสำหรับการปรับปรุง! :)
Tom

5

Python 3 , 91 78 76 75 73 ไบต์

@Emigna โกน 5 ไบต์ @FelipeNardiBatista บันทึก 1 ไบต์ @ RomanGräfบันทึก 2 ไบต์

i=input()
while'9'>max(i)and~-len(i):i=str(int(i,int(max(i))+1))
print(i)

ลองออนไลน์!


คำอธิบาย

i=input()                                  - takes input and assigns it to a variable i
while '9'>max(i)and~-len(i):               - repeatedly checks if the number is still base-9 or lower and has a length greater than 1
    i=str(...)                             - assigns i to the string representation of ...
          int(i,int(max(i))+1)             - converts the current number to the real base 10 and loops back again
print(i)                                   - prints the mutated i

5

05AB1E , 10 5 ไบต์

บันทึก 5 ไบต์ด้วยMagic Octopus Urn

F§Z>ö

เนื่องจากสิ่งนี้เติบโตช้ามากอย่างรวดเร็วสำหรับอินพุตขนาดใหญ่ฉันปล่อยรุ่นเก่าที่เร็วกว่านี้ไว้เพื่อทดสอบ อัลกอริทึมเหมือนกันจำนวนการทำซ้ำจะแตกต่างกันเท่านั้น

[©Z>öD®Q#§

ลองออนไลน์!

คำอธิบาย

[             # start a loop
 ©            # store a copy of the current value in the register
  Z>          # get the maximum (digit) and increment
    ö         # convert the current value to base-10 from this base
     D        # duplicate
      ®Q#     # break loop if the new value is the same as the stored value
         §    # convert to string (to prevent Z from taking the maximum int on the stack)

นอกจากนี้คุณไม่สามารถใช้тFZ>ö§? การเห็นว่าจำนวนการวนซ้ำ ( เท่าที่เห็นที่นี่ ) ดูเหมือนจะเป็นที่ราบสูงหรือไม่ หากคุณต้องการที่จะได้รับทางเทคนิคอัตราที่ซ้ำเพิ่มขึ้นอาจจะเป็นลอการิทึม ... ดังนั้นคุณก็สามารถใช้สิ่งที่ชอบและรัฐจะไม่ทำงานขนาดใหญ่DFZ>ö§ nหรืออาจT.n>FZ>ö§เท่ากับ: เพื่อคำนวณจำนวนการวนซ้ำlog_10(n)โดยตรงเป็น
Magic Octopus Urn

@ MagicOctopusUrn: ใช่ตอนนี้คุณพูดถึงมันแล้วเนื่องจากลำดับดูเหมือนช้ากว่าเชิงเส้นแน่นอนF§Z>öควรทำเคล็ดลับ
Emigna

§ฉันคิดว่าคุณสามารถลบ
Erik the Outgolfer

@EriktheOutgolfer: น่าเสียดายที่ไม่มี ถ้าเราเอา§, Zจะใช้เวลาจำนวนมากที่สุดในกองแทนที่จะเป็นหลักสูงสุดในจำนวนที่ด้านบนของสแต็ค
Emigna


3

APL (Dyalog) , 20 16 ไบต์

รับและส่งคืนสตริง

((⍕⊢⊥⍨1+⌈/)⍎¨)⍣≡

()⍣≡ ใช้ฟังก์ชั่นต่อไปนี้จนกว่าคำสองคำติดต่อกันจะเหมือนกัน

⍎¨ ดำเนินการแต่ละตัวละคร (เปลี่ยนสตริงเป็นรายการของตัวเลข)

(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้กับสิ่งนั้น:

  ⌈/ หาอาร์กิวเมนต์สูงสุด

  1+ เพิ่มหนึ่ง

  ⊢⊥⍨ ประเมินค่าอาร์กิวเมนต์ในฐานนั้น

   รูปแบบ (stringify ในการเตรียมการสำหรับการใช้งานของฟังก์ชั่นด้านนอกอื่น)

ลองออนไลน์!



3

Mathematica, 52 ไบต์

FromDigits[s=IntegerDigits@#,Max@s+1]&~FixedPoint~#&

ฟังก์ชั่นที่บริสุทธิ์รับจำนวนเต็มไม่ใช่ค่าลบเป็นอินพุตและส่งคืนจำนวนเต็มที่ไม่ใช่ค่าลบ ใช้กลไกหลักเดียวกันFromDigits[s=IntegerDigits@#,Max@s+1]กับคำตอบของ Jenny_mathyแต่หาประโยชน์จากFixedPointการทำซ้ำ


3

Perl 6 , 49 ไบต์

{($_,{.Str.parse-base(1+.comb.max)}...*==*).tail}

ทดสอบมัน

ขยาย:

{
  (

    $_,                 # seed the sequence with the input

    {
      .Str
      .parse-base(      # parse in base:
        1 + .comb.max   # largest digit + 1
      )
    }

    ...                 # keep generating values until

    * == *              # two of them match (should only be in base 10)

  ).tail                # get the last value from the sequence
}


2

Pip , 17 ไบต์

Wa>9>YMXaaFB:1+ya

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลองออนไลน์!

คำอธิบาย

สนุกมาก - ฉันต้องดึงโอเปอเรเตอร์การเปรียบเทียบออกมา

เราต้องการวนซ้ำจนกว่าตัวเลขจะเป็นตัวเลขหลักเดียวหรือมี 9 เท่ากันเราต้องการวนซ้ำในขณะที่ตัวเลขเป็นตัวเลขหลายหลักและไม่มีตัวเลข 9 เท่ากับวนซ้ำในขณะที่ตัวเลขมากกว่า 9 และหลักสูงสุดคือ น้อยกว่า a>9>MXa9:

Wa>9>YMXaaFB:1+ya
                   a is 1st cmdline arg (implicit)
     YMXa          Yank a's maximum digit into the y variable
Wa>9>              While a is greater than 9 and 9 is greater than a's max digit:
         aFB:1+y    Convert a from base 1+y to decimal and assign back to a
                a  At the end of the program, print a

2

Python 2 , 60 59 56 53 ไบต์

บันทึก 4 ไบต์ขอบคุณFelipe Nardi Batista
บันทึกแล้ว 3 ไบต์ขอบคุณovs

f=lambda x,y=0:x*(x==y)or f(`int(x,int(max(x))+1)`,x)

ลองออนไลน์!

ใช้แลมบ์ดาแบบเรียกซ้ำโดยเปรียบเทียบผลลัพธ์ของการแปลงพื้นฐานกับการคำนวณซ้ำก่อนหน้านี้


ทำไมไม่ใช้x==y and x or ...อย่างที่xเคยเป็น0(ฐาน 1) หรือแม้กระทั่ง(x==y)*x or ...
เฟลิเป้นาร์ดีบาติสตา

@FelipeNardiBatista: ขอบคุณ! ฉันพยายามx and x==y or ...ที่ไม่ได้ผล แต่ฉันก็ไม่เก่งกับเทคนิคเหล่านี้ดังนั้นฉันจึงไม่ทราบว่าฉันสามารถย้อนกลับได้ :)
Emigna

@ovs: ใช่คุณ ขอบคุณ!
Emigna

@FelipeNardiBatista "อินพุต: จำนวนเต็มบวก n ประกอบด้วยตัวเลขในช่วง 0-9" 0 ยังคงเป็นอินพุตที่ถูกต้องและตอนนี้โค้ดก็ปฏิเสธ
เสา

@Mast: โชคดีสำหรับเรา0ไม่ใช่จำนวนเต็มบวกดังนั้นมันจะไม่ถูกป้อนเข้า
Emigna

2

C #, 257 244 243 244 233 222 ไบต์

using System.Linq;z=m=>{int b=int.Parse(m.OrderBy(s=>int.Parse(s+"")).Last()+""),n=0,p=0;if(b<9&m.Length>1){for(int i=m.Length-1;i>=0;i--)n+=int.Parse(m[i]+"")*(int)System.Math.Pow(b+1,p++);return z(n+"");}else return m;};

C # มักจะใช้ไบต์จำนวนมาก แต่มันก็ไร้สาระ ไม่มีบิวด์อินใดที่สามารถจัดการกับฐานโดยพลการได้ดังนั้นฉันจึงต้องคำนวณการแปลงด้วยตนเอง Ungolfed:

using System.Linq;
z = m => {
int b = int.Parse(m.OrderBy(s => int.Parse(s + "")).Last()+""), n = 0, p = 0; //Get the max digit in the string
if (b < 9 & m.Length > 1) //if conditions not satisfied, process and recurse
{
    for (int i = m.Length - 1; i >= 0; i--)
        n += int.Parse(m[i] + "") * (int)System.Math.Pow(b+1, p++); //convert each base-b+1 representation to base-10
    return z(n + ""); //recurse
}
else return m; };


1

Javascript (ES6) พร้อมฟังก์ชันลูกศร 0, 74 ไบต์

function f(a){a>9&&b=Math.max(...a)<9&&f(parseInt(a,b+1));alert(a)}f('11')

3
ยินดีต้อนรับสู่ PPCG! :) นี่อาจเป็นคำตอบที่ดีมาก แต่ฉันบอกไม่ได้หากไม่มีคำอธิบาย ฉัน (และอาจเป็นคนอื่น ๆ ) ไม่เคยถอนคำตอบที่ไม่มีคำอธิบาย
Stewie Griffin

1
ทำไมคุณโทรf('11')หลังจากฟังก์ชั่น? ถ้าฉันไม่มีสิ่งที่ดูเหมือนว่าจะใช้งานไม่ได้เป็นส่วนหนึ่งของการส่ง ถ้าเป็นเช่นนั้นคุณควรนำมันออกจากส่วนของรหัสและใส่ไว้ในคำอธิบายของคุณ (เมื่อคุณเพิ่ม) และอัปเดตจำนวนไบต์เป็น 67
PunPun1000

1

K4 , 19 ไบต์

วิธีการแก้:

{(1+|/x)/:x:10\:x}/

ตัวอย่าง:

q)\
  {(1+|/x)/:x:10\:x}/413574
83911
  {(1+|/x)/:x:10\:x}/13552
159
  {(1+|/x)/:x:10\:x}/17
3
  {(1+|/x)/:x:10\:x}/41253
29    

คำอธิบาย:

ใช้/:บิวด์อินเพื่อแปลงฐาน

{(1+|/x)/:x:10\:x}/ / the solution
{                }/ / converge lambda, repeat until same result returned
            10\:x   / convert input x to base 10 (.:'$x would do the same)
          x:        / store in variable x
 (     )/:          / convert to base given by the result of the brackets
    |/x             / max (|) over (/) input, ie return largest
  1+                / add 1 to this

1

Kotlin , 97 ไบต์

fun String.f():String=if(length==1||contains("9"))this else "${toInt(map{it-'0'}.max()!!+1)}".f()

เชิดชู

fun String.f(): String = if (length == 1 || contains("9")) this else "${toInt(map { it - '0' }.max()!! + 1)}".f()

ทดสอบ

fun String.f():String=if(length==1||contains("9"))this else "${toInt(map{it-'0'}.max()!!+1)}".f()
val tests = listOf(
        5 to 5,
        17 to 3,
        999 to 999,
        87654321 to 9041998,
        41253 to 29
)

fun main(args: Array<String>) {
    tests.forEach { (input, output) ->
        val answer = input.toString().f()
        if (answer != output.toString()) {
            throw AssertionError()
        }
    }
}

TIO

TryItOnline




0

C, 159 157 ไบต์

#include <stdlib.h>
char b[99];i=0;m=-1;c(n){do{m=-1;sprintf(b,"%d",n);i=0;while(b[i]){m=max(b[i]-48,m);i++;}n=strtol(b,0,++m);}while(b[1]&&m<10);return n;}

0

สกาลา , 119 ไบต์

if(x.max==57|x.length==1)x else{val l=x.length-1
f((0 to l).map(k=>(((x(k)-48)*math.pow(x.max-47,l-k))) toInt).sum+"")}

ลองออนไลน์!

สกาลา , 119 ไบต์

if(x.max==57|x.length==1)x else f((0 to x.length-1).map(k=>(((x(k)-48)*math.pow(x.max-47,x.length-1-k))) toInt).sum+"")

ลองออนไลน์!

ทั้งสองวิธีใช้วิธีเดียวกัน แต่ในอันแรกฉันใส่x.length-1ตัวแปรและในอันที่สองฉันไม่

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