สลายจำนวน!


16

งานของคุณคือการแยกตัวเลขโดยใช้รูปแบบด้านล่าง

นี้จะคล้ายกับการแปลงฐานยกเว้นที่แทนของรายชื่อdigitsในฐานคุณรายการvaluesเช่นว่ารายการเพิ่มขึ้นเพื่อป้อนข้อมูล

หากฐานที่กำหนดคือnแต่ละหมายเลขในรายการจะต้องอยู่ในรูปแบบของk*(n**m)ที่ไหน0<=k<nและmไม่ซ้ำกันทั่วทั้งรายการ

รายละเอียด

  • รูปแบบอินพุต / เอาท์พุตที่สมเหตุสมผล โปรแกรม / ฟังก์ชั่นของคุณใช้ 2 อินพุทและเอาท์พุทรายการ
  • รายการเอาท์พุทสามารถอยู่ในลำดับใด ๆ
  • 0 สามารถยกเว้นหรือรวมไว้ได้
  • 0อนุญาตให้นำหน้า
  • Built-in จะได้รับอนุญาต

Testcases

number base   converted list
input1 input2 output
123456 10     [100000,20000,3000,400,50,6] or [6,50,400,3000,20000,100000]
11     2      [8,2,1] or [0,0,0,0,8,0,2,1]
727    20     [400,320,7]
101    10     [100,1] or [100,0,1]

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ

code-golf  number  sequence  number-theory  base-conversion  code-golf  bitwise  hashing  code-golf  string  ascii-art  whitespace  code-golf  math  code-golf  code-golf  image-processing  counting  code-golf  math  arithmetic  checksum  code-golf  code-golf  math  arithmetic  number-theory  code-golf  array-manipulation  random  code-golf  string  code-golf  math  ascii-art  base-conversion  code-golf  graphical-output  geometry  3d  code-golf  math  linear-algebra  matrix  code-golf  math  number  sequence  code-golf  array-manipulation  code-golf  math  matrix  linear-algebra  code-golf  number  sequence  counting  code-golf  string  code-golf  string  restricted-source  quine  sorting  code-golf  string  geometry  code-golf  string  code-golf  networking  code-golf  base-conversion  code-golf  math  matrix  code-golf  arithmetic  linear-algebra  matrix  code-golf  number  arithmetic  grid  code-golf  number  source-layout  code-golf  string  bitwise  checksum  code-golf  array-manipulation  code-golf  string  probability-theory  code-golf  tips  code-golf  sequence  code-golf  string  math  sequence  calculus  code-golf  string  palindrome  bioinformatics  code-golf  math  combinatorics  counting  permutations  code-golf  parsing  logic-gates  code-golf  arithmetic  number-theory  combinatorics  code-golf  math  sequence  polynomials  integer  code-golf  string  ascii-art  chess  code-golf  string  code-golf  number  code-golf  string  ascii-art  parsing  code-golf  code-golf  number  natural-language  conversion  code-golf  arithmetic  code-golf  string  code-golf  ascii-art  decision-problem 

คำตอบ:


5

เยลลี่ขนาด 7 ไบต์

lr0⁹*×b

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

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

lr0⁹*×b  Main link. Arguments: x (integer), n (base)

l        Compute the logarithm of x to base n.
 r0      Range; yield all non-negative integers less than the logarithm, in
         decreasing order.
   ⁹*    Elevate n to all integers in that range.
      b  Yield the list of base-n digits of x.
     ×   Multiply each digit by the corresponding power of n.

อาย้อนกลับช่วง ...
Leun Nun

มันเป็นเรื่องที่น่าประทับใจมากที่สามารถทำได้ด้วยตัวละครน้อยมาก
t-clausen.dk


3

เยลลี่ 12 ไบต์

bLR’*@€U
b×ç

สามารถ waaaay สั้นกว่า ...

ลองออนไลน์!



3
lḞr0⁴*×bควรทำงาน.
Dennis

ในทางเทคนิค0r⁴*³%Iทำงานได้ดี
Dennis

เกานั้น lr0⁴*×bมีจำนวนไบต์เดียวกันโดยไม่มีศูนย์พิเศษทั้งหมด
Dennis

@Dennis แตกต่างกันมากพอที่จะโพสต์เป็นคำตอบที่แยกต่างหาก
Doorknob

3

Pyth - 12 11 ไบต์

เพียง FGITW เท่านั้นที่สามารถสั้นกว่านี้ได้

.e*b^Qk_jEQ

Test Suite


ลบ the _forte :)
Leaky Nun

@KennyLau แปลว่า FGITW มันหมายถึง "ปืนที่เร็วที่สุดในโลกตะวันตก" ซึ่งเป็นปรากฏการณ์ที่ผู้คนตอบรับเป็นอันดับแรกมากกว่าคำตอบที่ดีกว่า
Maltysen

@ KennyLau โอ้ที่ได้รับอนุญาต derp
Maltysen

3

J, 20 19 ไบต์

[(]*(^<:@#\.))#.inv

การใช้

   f =: [(]*(^<:@#\.))#.inv
   10 f 123456
100000 20000 3000 400 50 6
   2 f 11
8 0 2 1
   20 f 727
400 320 7
   10 f 101
100 0 1

คำอธิบาย

[(]*(^<:@#\.))#.inv
              #.      Given a base and list of digits in that base,
                      converts it to an integer in base 10
                inv   Power conjunction by -1, creates an inverse
                      Now, this becomes a verb that given a base and an integer in base 10,
                      creates a list of digits in that base representing it
[                     Select the base and pass it along
         #\.          Tally each suffix of the list of base digits,
                      Counts down from n to 1
      <:              Decrements each value
        @             More specifically, decrement is composed with the tally and applied
                      together on each suffix
     ^                Raises each value x using base^x
  ]                   Selects the list of base digits
   *                  Multiply elementwise between each base power and base digit

2

CJam, 16 ไบต์

{1$b\1$,,f#W%.*}

บล็อกที่ไม่มีชื่อที่คาดว่าจะมีฐานและหมายเลขอยู่ด้านบนสุดของสแต็ก (ตามลำดับ) และแทนที่ด้วยรายการหลัก (รวมถึงศูนย์ภายในโดยไม่มีศูนย์นำหน้า)

ทดสอบที่นี่

คำอธิบาย

1$  e# Copy base b.
b   e# Compute base-b digits of input number.
\   e# Swap digit list with other copy of b.
1$  e# Copy digit list.
,   e# Get number of digits M.
,   e# Turn into range [0 1 ... M-1].
f#  e# Map b^() over this range, computing all necessary powers of b.
W%  e# Reverse the list of powers.
.*  e# Multiply each digit by the corresponding power.


1

Python 2, 44 ไบต์

lambda n,b:[n/b**i%b*b**i for i in range(n)]

ส่งออกอย่างมีนัยสำคัญจากน้อยไปหามากที่สุดด้วยศูนย์พิเศษมากมาย

ในการแสดงผลที่สำคัญที่สุดถึงน้อยที่สุด:

f=lambda n,b,c=1:n*[1]and f(n/b,b,c*b)+[n%b*c]

recurse ซ้ำการตัวเลขออกจากnกับ divmod cในขณะที่ปรับขึ้นคูณค่าสถานที่


สำหรับรุ่นที่สองคุณไม่สามารถทำrange(-n,1)แทนrange(n,-1,-1)?
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀขอบคุณฉันไม่เห็นว่าการย้อนกลับเป็นตัวเลือก range(n)มันก็พอเพียงที่จะทำ
xnor

1

Ruby, 35 34 ไบต์

นี่คือพอร์ตของXNOR คำตอบของงูหลามแต่มันพิมพ์nครั้งดังนั้นกรณีทดสอบ727 20การพิมพ์7, 320, 400และ 724 0s ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ

แก้ไข: 1 ไบต์ขอบคุณจอร์แดน

->n,b{n.times{|i|p n/b**i%b*b**i}}

n.times{|i|p ...}คุณสามารถบันทึกไบต์ด้วย
จอร์แดน

1

Mathematica ขนาด 12 ไบต์ (ไม่มีการแข่งขัน)

ฉันสงสัยว่า Wolfram Research สร้างฟังก์ชันนี้หลังจากเห็นความท้าทายของ OP หรือไม่!

NumberExpand

สิ่งนี้ได้รับการแนะนำในรุ่น 11.0 (สิงหาคม 2559)


1
ฉันแก้ไขเพื่อทำให้สิ่งนี้ไม่แข่งขันเพราะ Mathematica 11.0 เปิดตัวเมื่อวันที่ 8 ส.ค.
Leaky Nun

1

Mathematica ขนาด 46 ไบต์

DiagonalMatrix@IntegerDigits@##~FromDigits~#2&

คำอธิบาย:

ใน [1]: = IntegerDigits [123456,10]                                                

ออก [1] = {1, 2, 3, 4, 5, 6}

ใน [2]: = DiagonalMatrix @ IntegerDigits [123456,10] // MatrixForm                   

Out [2] // MatrixForm = 1 0 0 0 0 0

                    0 2 0 0 0 0

                    0 0 3 0 0 0

                    0 0 0 4 0 0

                    0 0 0 0 5 0

                    0 0 0 0 0 6 6

ใน [3]: = DiagonalMatrix @ IntegerDigits [123456,10] ~ FromDigits ~ 10                   

ออก [3] = {100000, 20000, 3000, 400, 50, 6}

การใช้ที่ไม่คาดคิดมากDiagonalMatrixๆ โปรดอธิบายวิธีการทำงานในกรณีนี้
DavidC

0

แร็กเก็ต, 82 ไบต์

(define(d n b[a'()])(if(< n 1)a(d(/ n b)b(cons(*(modulo(floor n)b)(length a))a))))

ฉันเป็นผู้ชนะ (!)


1
ช่องว่างมากมาย ... ใช้<n 1งานไม่ได้? (ฉันไม่รู้ไม้เลย)
Leun Nun

1
ไม่ว่าจะไม่ทำงาน - ตัวบ่งชี้จะถูกคั่นด้วยโดยเฉพาะช่องว่างวงเล็บ / วงเล็บ / วงเล็บปีกกาและบางสัญลักษณ์อื่น ๆ 'เช่น มันเป็นคำถามที่ดี
Winny

(และ<เป็นเพียงตัวแปรที่มีฟังก์ชั่นเชื่อมโยงกับมัน)
Winny

0

JavaScript (ES7), 68 ไบต์

n=>b=>(c=[...n.toString(b)]).map(d=>b**--p*parseInt(d,b),p=c.length)

ทดสอบ

ทดสอบใช้Math.powเพื่อความเข้ากันได้ของเบราว์เซอร์

f=n=>b=>(c=[...n.toString(b)]).map(d=>Math.pow(b,--p)*parseInt(d,b),p=c.length)
document.write("<pre>"+
[ [ 123456, 10 ], [ 11, 2 ], [ 727, 20 ], [ 101, 10 ] ]
.map(c=>c+" => "+f(c[0])(c[1])).join`\n`)


**ไม่ใช่ตัวดำเนินการ JavaScript ที่ถูกต้อง แต่ใช่ไหม
ericw31415

@ ericw31415 มันเป็นผู้ประกอบการยกกำลัง ES7
user81655

โอ้มันเป็นการทดลอง นั่นเป็นสาเหตุที่เบราว์เซอร์ของฉันไม่รองรับ
ericw31415

0

JavaScript, 75 ไบต์

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>Math.pow(b,_)*parseInt($,b))

เพื่อความสนุก :) มันสามารถตีกอล์ฟได้มากกว่านี้ แต่ฉันก็ไม่แน่ใจเหมือนกัน

ES7, 66 ไบต์

ถ้าอนุญาต ES7 แล้ว:

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>b**_*parseInt($,b))

0

O , 17 ไบต์

jQb`S/l{#Qn^*p}d

หมายเหตุสองประการ:

  1. กรณีทดสอบที่สามไม่ทำงานเนื่องจากข้อบกพร่องที่มีการแปลงฐาน ดูขั้นตอน / o # 68

  2. สิ่งนี้ไม่ทำงานในล่ามออนไลน์ bยังไม่ได้ใช้งาน


0

> <>, 28 ไบต์

:&\
&*>:{:}$%:n$}-:0=?;ao$&:

คาดว่าค่าอินพุตจะแสดงบนสแต็กเมื่อเริ่มต้นโปรแกรม

ในขณะที่> <> ไม่มีรายการวัตถุผลลัพธ์จะถูกแสดงเป็นรายการค่าคั่นด้วยบรรทัดใหม่โดยมี 'units' ในบรรทัดแรก ตัวอย่างการเรียกใช้:

Input: 
11 2

Ouput:
1
2
0
8

@OP หากนี่ไม่ใช่รูปแบบผลลัพธ์ที่ยอมรับได้โปรดแจ้งให้เราทราบและฉันจะแก้ไขคำตอบตามนั้น


0

PHP, 55 ไบต์

ใช้การเข้ารหัส Windows-1252

for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó;

ทำงานแบบนี้ ( -dเพิ่มเพื่อความสวยงามเท่านั้น):

php -d error_reporting=30709 -r 'for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó; echo"\n";' 123056 10


0

จริงแล้ว 17 ไบต์ (ไม่ใช่การแข่งขัน)

;a¡;lrR(♀ⁿ@♂≈♀*;░

ลองออนไลน์!

การส่งข้อมูลนี้ไม่สามารถแข่งขันได้เนื่องจาก คำสั่งถูกเพิ่มหลังจากการท้าทายนี้

คำอธิบาย:

;a¡;lrR(♀ⁿ@♂≈♀*;░
                   initial stack: [b n] (b = base, n = number)
;                  dupe b
 a                 invert stack
  ¡                n as a base-b integer
   ;lrR            dupe, length, range, reverse
       (♀ⁿ         raise b to each power in range
          @♂≈      create list of integers from base-b string
             ♀*    pairwise multiplication
               ;░  filter out zeroes


0

Pipขนาด 13 ไบต์

Wa-:Pa%oo*:b

การทำแบบเก่า ๆ นั้นสั้นกว่าการใช้ตัวTBแปลงฐาน รหัสวิ่งห่วงขณะจนกว่าa(จำนวน) 0เป็น ที่ซ้ำกันจะพิมพ์และหักได้จากa%o ถูกกำหนดค่าเริ่มต้นล่วงหน้าและได้รับการคูณด้วย(ฐาน) การวนซ้ำแต่ละครั้ง (วิธีนี้จะช่วยให้ทุกคนและยังเพิ่มความเป็นผู้นำ)ao1b00

ลองออนไลน์!

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