พหุนามพิมพ์สวย


38

บทนำ

มนุษย์เป็นเผ่าพันธุ์ที่น่าทึ่ง แต่เราก็อาจจะเข้าใจได้ยากในบางครั้ง - โดยเฉพาะอย่างยิ่งสำหรับคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งเราดูเหมือนจะชอบเขียนชื่อพหุนามในรูปแบบที่ซับซ้อนมากและมีกฎเกณฑ์ที่ไม่เจาะจง

โปรแกรมสั้นที่สุดที่คุณสามารถเขียนเพื่อจัดรูปแบบพหุนามถูกต้องโดยใช้กฎเหล่านี้คืออะไร

ท้าทาย

อินพุต

รายการจำนวนเต็มระหว่าง -1000 ถึง 1,000 (รวม) แสดงถึงค่าสัมประสิทธิ์ของพหุนามกับรายการสุดท้ายเป็นค่าสัมประสิทธิ์ของ x ^ 0 (ค่าคงที่) ครั้งที่สองเป็นค่าสัมประสิทธิ์ของ x ^ 1 เป็นต้น

เอาท์พุต

สตริงที่แสดงพหุนามนี้ในรูปแบบทางคณิตศาสตร์ที่จัดรูปแบบอย่างถูกต้องของมนุษย์

กฎ:

  • เครื่องหมายบนสัมประสิทธิ์นำจะแสดงเฉพาะเมื่อมันเป็นลบ

Right: -x^2+3

Wrong: +x^2+3

  • ส่วนประกอบที่มีค่าสัมประสิทธิ์เป็น 0 จะไม่ถูกพิมพ์ (ยกเว้นกรณีมุมซึ่งค่าสัมประสิทธิ์ทั้งหมดเป็น 0 *)

Right: x^5-x^2+3

Wrong: x^5+0x^4+0x^3-x^2+0x+3

  • ค่าสัมประสิทธิ์-1และ+1จะแสดงโดยไม่ต้อง 1 ยกเว้นว่าเป็นค่าคงที่

Right: x^5-x^2+1

Wrong: 1x^5-1x^2+1

  • เลขชี้กำลังจะแสดงก็ต่อเมื่อมันมีค่ามากกว่า 1 และตัวแปรจะแสดงก็ต่อเมื่อเลขชี้กำลังมีค่ามากกว่า 0

Right: 3x^3-7x^2+2x+1

Wrong: 3x^3-7x^2+2x^1+1x^0

  • * ตัวเรือนมุม: ในขณะที่ค่าศูนย์มักส่งผลให้ไม่พิมพ์องค์ประกอบนั้นหากค่าสัมประสิทธิ์ทั้งหมดเป็นศูนย์จะต้องพิมพ์ค่าคงที่ 0

Right: 0

Wrong: 0x+0

Wrong: (nothing)

  • นี่คือโค้ดกอล์ฟดังนั้นผู้ชนะจะเป็นโปรแกรมที่มีจำนวนไบต์น้อยที่สุด

ตัวอย่างอินพุตและเอาต์พุต

Input:                  Output:
      [0]                      0
      [0,0]                    0
      [0,-1,35,0]             -x^2+35x
      [5,1,7,-9]               5x^3+x^2+7x-9
      [100,0,0,-1]             100x^3-1
      [931,21,-11,1]           931x^3+21x^2-11x+1

ฉันหวังว่าจะเห็นทางออกของคุณ มีความสุข!

แก้ไข:

  • คุณสามารถล้อมรอบการดำเนินงานโดยช่องว่างหากคุณต้องการ ดังนั้น3x+5และ3x + 5ทั้งคู่ก็ดี 3x+ 5และ3x +5ไม่ใช่
  • หากคุณต้องการสร้างตัวอักษรเลขชี้กำลังจริง (พูดเป็นเท็กซ์) ที่ได้รับอนุญาตเนื่องจากใกล้เคียงกับที่มนุษย์เขียนมากขึ้น
  • ค่าสัมประสิทธิ์จะต้องปรากฏขึ้นโดยไม่มีทศนิยมเช่น9x^2ถูกต้อง9.0x^2ไม่ใช่

7
คำถามที่ฉันควรถามในกล่องทราย แต่ไม่ได้เราสามารถพิมพ์ด้วยช่องว่างระหว่างตัวดำเนินการได้หรือไม่ ดังนั้น3x^2 + 4เมื่อเทียบกับ3x^2+4?
Giuseppe

1
เราจำเป็นต้องใช้ exponents โดยใช้คาเร็ตหรือไม่? หรือจะอนุญาตให้ใช้อักขระตัวยกที่แท้จริง (เช่นคำตอบใน TeX)
Tutleman

3
@KevinCruijssen ฉันไม่ใช่ OP แต่ฉันจะไม่พูดเพราะคนส่วนใหญ่ไม่เขียนอย่างนั้น
ShreevatsaR

2
@ManishKundu ใช่แน่นอนคุณสามารถใช้อินพุตเป็นสตริงได้
Oisín Moran

1
@ OisínMoranไม่มีอะไรขี้ขลาดเพียงการทำให้แน่ใจว่าง่าย1x-> xการเปลี่ยนไม่เปลี่ยนเข้าไป21x^2 2x^2
DLosc

คำตอบ:


10

เรติน่า 0.8.2 , 56 ไบต์

(?=( \S+)+)
x^$#1
\b0x.\d+ 

\b1x
x
x.1 
x 
 0

 -
-
 
+

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย:

(?=( \S+)+)
x^$#1

ใส่ทั้งหมดของอำนาจของxรวมถึงแต่ไม่x^1x^0

\b0x.\d+ 

ลบอานุภาพทั้งหมดของxด้วยสัมประสิทธิ์ศูนย์ แต่ไม่ได้ต่อท้าย0(ยัง)

\b1x
x

ลบตัวคูณของ1(แต่ไม่ใช่ค่าคงที่1)

x.1 
x 

ลบของ^1x^1

 0

ลบค่าคงที่ 0 ยกเว้นว่าเป็นสิ่งเดียวที่เหลืออยู่

 -
-

-ลบพื้นที่มาก่อน

 
+

เปลี่ยนช่องว่างที่เหลือเป็น+s


6

JavaScript (ES6), 107 106 ไบต์

a=>a.map(c=>c?s+=(c>0&&s?'+':_)+(!--e|c*c-1?c:c<0?'-':_)+(e?e-1?'x^'+e:'x':_):e--,e=a.length,_=s='')&&s||0

ลองออนไลน์!

อย่างไร?

เอาท์พุทที่ถูกสร้างขึ้นโดยการใช้สูตรต่อไปนี้ให้กับแต่ละค่าสัมประสิทธิ์ของการป้อนข้อมูลอาร์เรย์a []ขณะที่การติดตามของตัวแทนปัจจุบันอี

สูตรที่ 1: เครื่องหมายบวก

+ถ้าค่าสัมประสิทธิ์เป็นบวกอย่างเคร่งครัดและนี้ไม่ได้เป็นวาระแรกในการแสดงออกของการส่งออกที่เราผนวก มิฉะนั้นเราจะไม่มีการต่อท้าย

c > 0 && s ? '+' : _

สูตรที่ 2: เครื่องหมายลบและค่าสัมประสิทธิ์

หากเลขชี้กำลังเป็นศูนย์หรือค่าสัมบูรณ์ของสัมประสิทธิ์ไม่เท่ากับ 1 เราจะผนวกค่าสัมประสิทธิ์ (ซึ่งอาจรวมถึงการนำหน้าด้วย-) มิฉะนั้นเราจะต่อท้าย a -(ถ้าสัมประสิทธิ์เป็นลบ) หรือไม่มีอะไรเลย

!--e | c * c - 1 ? c : c < 0 ? '-' : _

สูตรที่ 3: ตัวแปรและเลขชี้กำลัง

หากเลขชี้กำลังเป็น 0 เราจะไม่มีการต่อท้าย หากสัญลักษณ์เป็น 1 xเราผนวก มิฉะนั้นเราจะต่อท้ายx^ด้วยเลขชี้กำลัง

e ? e - 1 ? 'x^' + e : 'x' : _

สิ่งนี้ล้มเหลวในกรณีนี้: [0,1,35,0] มันจะนำไปสู่กับ + x ^ 2
Makotosan

2
@Makotosan ขอขอบคุณที่รายงานสิ่งนี้! ควรจะตกลงตอนนี้
Arnauld

5

Stax , 37 ไบต์

┴₧↕ê♦•Vªâÿσ9s╘dσ■à@@ⁿ■o─╦ñºº┌x╡ER▓ δ¿

เรียกใช้และตรวจแก้จุดบกพร่องออนไลน์

นี่คือเวอร์ชั่นที่ไม่ได้บรรจุและไม่ได้บรรจุ

r{          reverse the input and map using block ...
  |c        skip this coefficient if it's falsy (zero)
  0<.+-@    sign char; e.g. '+'
  _|aYv i!+ abs(coeff)!=1 || i>0
    y$      str(abs(coeff)); e.g. '7'
    z       ""
  ?+        if-then-else, concatenate; e.g. '+7'
  "x^`i"    string template e.g. 'x^3' or 'x^0'
  iJ(T+     truncate string at i*i and trim. e.g. 'x^3' or ''
mr$         re-reverse mapped array, and flatten to string
c43=t       if it starts with '+', drop the first character
c0?         if the result is blank, use 0 instead

เรียกใช้อันนี้


5

Python 3, 279 277 258 251 ไบต์

k=str.replace
def f(x):
 z=len(x)
 y='--'*(['-1']==[c for c in x if'0'!=c][:1])
 for i,v in enumerate(x):
  p=str(z+~i)
  if v in'-1'and~i+z:y+='+x^'+p
  elif'0'!=v:y+='+'+v+'x^'+p
 return y and k(k(k(k(y[1:],'+-','-'),'^1',''),'x^0',''),'-+','-')or 0

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

ลองออนไลน์!

ขอขอบคุณเป็นพิเศษ OVS และ NK1406


แก้ไขข้อผิดพลาดทั้งหมด
Manish Kundu

คุณสามารถเรียงลำดับคุณตรวจสอบความเท่าเทียมกันจะทำให้พวกเขาและif'0'!=i if'-1'==i
Zacharý


@ovs ขอบคุณมาก
Manish Kundu



4

APL (Dyalog Classic) , 114 113 109 107 106 ไบต์

{{⍵≡'':⍕0⋄⍵↓⍨'+'=⊃⍵}∊⍵{{'1x'≡2↑1↓⍵:¯1⌽1↓1⌽⍵⋄⍵}('-0+'[1+×⍺]~⍕0),∊(U/⍕|⍺),(U←⍺≠0)/(⍵>⍳2)/¨'x'('^',⍕⍵)}¨⌽⍳⍴⍵}

ลองออนไลน์!

-4 ไบต์ขอบคุณ @dzaima!

นี่สามารถลงเล่นกอล์ฟได้ไกลกว่านี้อย่างแน่นอน สิ่งนี้ต้องมี⎕IO←0


ในที่สุดฉันก็โกนสองไบต์เหล่านั้นออก ...
Zacharý

3

Pip , 78 ไบต์

(RV(B."x^"._MERVg)J'+)R[`\b0[^+]+``x.0|\^1|^\++|\++$``\b1x``\++-?`][xx'x_@v]|0

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

ใช้ME(การแจกแจงแผนที่) และJ(เข้าร่วม) เพื่อสร้างบางสิ่งบางอย่างของแบบฟอร์ม0x^3+-1x^2+35x^1+0x^0จากนั้นกลุ่มของการแทนที่ regex เพื่อแปลงเป็นรูปแบบที่เหมาะสม



3

Python 3, 161 162 ไบต์

แก้ไขข้อผิดพลาดด้วย ovs

l=len
lambda p:''.join(['+'*(i>0)*(c>0)+(str(c)[:-1],str(c))[abs(c)!=1or i==l(p)-1]+'x'*(i!=l(p)-1)+('^%d'%(l(p)+~i))*(i<l(p)-2)for i,c in enumerate(p)if c])or'0'

ขยาย:

l=len # Alias the len function since we use it a lot
lambda p: ''.join([ # Join a list of strings
    '+'*(i>0)*(c>0) # Prepend a + if this isn't the first term and the coefficient is positive
    + (str(c)[:-1], str(c))[abs(c) != 1 or i == l(p) - 1] # If the coefficient is 1 and this isn't the last term, delete the '1' from the string representation, otherwise just use the string representation
    + 'x' * (i != l(p) - 1) # If this isn't the last term, append an x
    + ('^%d' % (l(p) + ~i)) * (i < l(p) - 2) # If this isn't one of the last two terms, append the exponent
for i, c in enumerate(p) if c]) # Iterating over each coefficient with its index, discarding the term if the coefficient is zero
or '0' # If all of the above resulted in an empty string, replace it with '0'

3

C # , 237 ไบต์

c=>{var b=1>0;var r="";int l=c.Length;var p=!b;for(int i=0;i<l;i++){int n=c[i];int e=l-1-i;var o=p&&i>0&&n>0?"+":n==-1&&e!=0?"-":"";p=n!=0?b:p;r+=n==0?"":o+(e==0?$"{n}":e==1?$"{n}x":n==1||n==-1?$"x^{e}":$"{n}x^{e}");}return r==""?"0":r;}

1
ยินดีต้อนรับสู่ PPCG!
Martin Ender


3

ภาษา Wolfram / Mathematica, 39 ไบต์

TraditionalForm@Expand@FromDigits[#,x]&

ลองออนไลน์!

ปรากฎว่ามีในตัวที่จะได้รับในลำดับที่ถูกต้อง

โซลูชันก่อนหน้า:

ภาษา Wolfram / Mathematica, 93 ไบต์

StringReplace[StringRiffle[ToString/@InputForm/@MonomialList@FromDigits[#,x],"+"],"+-"->"-"]&

อย่างน้อยสำหรับฉันนี่เป็นเรื่องที่น่าประหลาดใจอย่างมากสำหรับภาษาที่ออกแบบมาสำหรับการจัดการทางคณิตศาสตร์ มันดูเหมือนExpand@FromDigits[#,x]&ควรจะทำงานได้ แต่การสั่งซื้อเริ่มต้นสำหรับชื่อแบบพหุนามเป็นแบบย้อนกลับของคำถามที่ต้องการดังนั้นจึงจำเป็นต้องมีการหาทุนเพิ่มเติม

คำอธิบาย

FromDigits[#,x]               converts input list to polynomial (technically converts to a number in base x)
MonomialList@                 gets list of terms of polynomial
InputForm/@                   converts each term to the form a*x^n
ToString/@                    then to a string version of that
StringRiffle[...,"+"]         joins using +'s
StringReplace[...,"+-"->"-"]& replaces +-'s with -'s

ไม่ควรSringReplaceจะเป็นStringReplace?
Scott Milner

@ScottMilner จะต้องมีข้อผิดพลาดเมื่อฉันคัดลอกมันไป ขอบคุณที่สังเกต!
DanTheMan

3

Python3: 150 146 ไบต์

f=lambda l:''.join('+-'[a<0]+str(a)[a<0:5*((abs(a)!=1)|(1>i))]+'x^'[:i]+str(i)[:i-1]for i,a in zip(range(len(l)-1,-1,-1),l)if a).lstrip('+')or '0'

(การใช้งานก่อนหน้านี้):

f=lambda l: ''.join('+-'[a<0]+str(a)[a<0:5*((abs(a)!=1)|(1>i))]+'x^'[:i]+str(i)[:i-1] for i,a in zip(range(len(l)-1,-1,-1),l) if a).lstrip('+') or '0'

คุณสามารถลองออนไลน์ได้

รุ่งโรจน์ถึง: @Benjamin


1
อ๊ะเข้าใจฉันแล้ว! คุณนำมาลง 4 โดยลบบางช่องว่าง:f=lambda l:''.join('+-'[a<0]+str(a)[a<0:5*((abs(a)!=1)|(1>i))]+'x^'[:i]+str(i)[:i-1]for i,a in zip(range(len(l)-1,-1,-1),l)if a).lstrip('+')or '0'
เบนจามิน

3

Perl 5 -a , 94 ไบต์

($_=shift@F)&&push@a,@a*!/-/>0&&'+',@F?s/\b1\b//r:$_,@F>0&&'x',@F>1&&'^'.@F while@F;say@a?@a:0

ลองออนไลน์!


ดูเหมือนจะทำงานไม่ถูกต้องหากสัมประสิทธิ์สุดท้าย (ค่าคงที่) คือ 1 หรือ -1
nwellnhof

แดง ต้องหักมันในขณะที่ฉันเล่นกอล์ฟอยู่ แก้ไขด้วยอีกสองสามไบต์
Xcali


2

Haskell , 166 163 bytes

g s|l<-length s,v:w:r<-id=<<["- +"!!(1+signum m):(id=<<[show$abs m|abs m>1||e==0]++["x"|e>0]++['^':show e|e>1])|(e,m)<-zip[l-1,l-2..]s,m/=0]=[v|v>'+']++w:r|1<3="0"

ลองออนไลน์! ตัวอย่างการใช้งาน: อัตราผลตอบแทนg [0,-1,35,0]"-x^2+35x"


โซลูชัน 166 ไบต์ก่อนหน้าซึ่งสามารถอ่านได้ดีขึ้นเล็กน้อย:

0#n=show n
m#n=id=<<[show n|n>1]++"x":['^':show m|m>1]
m%0=""
m%n|n<0='-':m#(-n)|1<3='+':m#n
g s|l<-length s,v:m:r<-id=<<zipWith(%)[l-1,l-2..]s=[v|v>'+']++m:r|1<3="0"

ลองออนไลน์!


2

Ruby , 111 ไบต์

->a{i=a.size;s=a.map{|x|i-=1;"%+d"%x+[?x,"x^#{i}",""][i<=>1]if x!=0}*'';s[0]?s.gsub(/(?<!\d)1(?=x)|^\+/,""):?0}

ลองออนไลน์!

การแก้ปัญหานี้ใน Ruby กลายเป็นเรื่องน่าหงุดหงิดส่วนใหญ่เนื่องจากความจริงที่ว่าไม่เหมือนภาษาส่วนใหญ่ใน Ruby (เกือบ) ทุกอย่างเป็นความจริงรวมถึง 0-s และสตริงว่างเปล่าดังนั้นแม้แต่การตรวจสอบศูนย์อย่างง่าย x?สั้นที่สุดเท่าที่

ฉันเล่นกับวิธีการต่าง ๆ ของการสร้างสายอักขระและท้ายที่สุดการผสมผสานหลายวิธี:

  • ข้อตกลงที่มีค่าสัมประสิทธิ์ 0 ตกโดยใช้เงื่อนไขง่าย ๆ
  • +และ-เครื่องหมายถูกสร้างขึ้นโดยการจัดรูปแบบไวยากรณ์ด้วยเครื่องหมายบังคับ:%+d
  • รูปแบบที่ถูกต้องหรือx^iถูกเลือกโดยใช้การทำดัชนีผู้ประกอบการจรวด[...][i<=>1]
  • เครื่องหมาย + + และ 1-s ที่ไม่จำเป็นจะถูกลบออกโดยการแทนที่ regex

2

Husk , 44 43 41 40 ไบต์

|s0Ψf¤|□ṁ`:'+f¹zμ+↓s²_&ε²¹↑□¹+"x^"s)¹m←ṡ

ลองออนไลน์!

รู้สึกแบบนี้เล็กน้อย Husk ไม่เหมาะสำหรับการจัดการสตริง ฉันยืมความคิดบางอย่างจากคำตอบที่แตกซ์

คำอธิบาย

         Implicit input, say L = [2,-3,0,-1].
         First we compute the exponents.
ṡ        Reversed indices: [4,3,2,1]
m←       Decrement each: [3,2,1,0]
         Then we format the individual terms of the polynomial.
zμ...)¹  Zip with L using two-argument lambda:
          Arguments are coefficient and index, say C = -3 and I = 2.
+"x^"s    Convert I to string and concatenate to "x^": "x^2"
↑□¹       Take first I*I characters (relevant when I = 0 or I = 1): "x^2"
_&ε²¹     Check if abs(C) <= 1 and I != 0, negate; returns -1 if true, 0 if false.
↓s²       Convert C to string and drop that many elements (from the end, since negative).
          Result: "-3"
          The drop is relevant if C = 1 or C = -1.
+         Concatenate: "-3x^2"
         Result of zipping is ["2x^3","-3x^2","x","-1"]
f¹       Keep those where the corresponding element of L is nonzero: ["2x^3","-3x^2","-1"]
         Next we join the terms with + and remove extraneous +s.
ṁ        Map and concatenate
`:'+      appending '+': "2x^3+-3x^2+-1+"
Ψf       Adjacent filter: keep those chars A with right neighbor B
¤|□       where at least one of A or B is alphanumeric: "2x^3-3x^2-1"
|s0      Finally, if the result is empty, return "0" instead.

2

Perl 6 , 97 ไบต์

{$!=+$_;.map({('+'x?($_&&$++&$_>0)~.substr(--$!&&2>.abs)~(<<''x>>[$!]//'x^'~$!))x?$_}).join||'0'}

ลองออนไลน์!

คำอธิบาย:

$!=+$_;

$! ติดตามเลขชี้กำลังปัจจุบัน

'+'x?($_&&$++&$_>0)

เพิ่ม+ก่อนค่าสัมประสิทธิ์เป็นบวกยกเว้นว่าเป็นค่าแรกที่ไม่เป็นศูนย์ การ$_&&ลัดวงจรทำให้แน่ใจว่าตัวแปรสถานะไม่ระบุตัวตน$จะเพิ่มขึ้นสำหรับค่าสัมประสิทธิ์ที่ไม่ใช่ศูนย์เท่านั้น &สนธิถูกยุบเมื่อบังคับให้ Bool ?กับ

.substr(--$!&&2>.abs)

ลด$!ลง สับ 1 หรือ -1 สัมประสิทธิ์เว้นแต่เป็นค่าคงที่

<<''x>>[$!]//'x^'~$!

กรณีพิเศษเชิงเส้นและเงื่อนไขคงที่ การใช้คำพูดปกป้อง<< >> โครงสร้างเป็นหนึ่งไบต์สั้นกว่าเทียบเท่าหรือ('','x')2>$!??'x'x$!!!'x^'~$!

x?$_

ซ่อนคำที่เป็นศูนย์ แต่ประเมินผลการแสดงออกก่อนหน้าสำหรับ--$!ผลข้างเคียงเสมอ

||'0'

ส่งคืน0ถ้าสัมประสิทธิ์ทั้งหมดเป็นศูนย์


2

Java 8, 202 176 174 173 ไบต์

a->{String r="";int j=a.length;for(int i:a)r+=i==0*j--?"":"+"+i+(j<1?"":j<2?"x":"x^"+j);return r.isEmpty()?"0":r.substring(1).replace("+-","-").replaceAll("(\\D)1x","$1x");}
  • 26 ไบต์ขอบคุณที่@Nevay

คำอธิบาย:

ลองออนไลน์

a->{                     // Method with String-array parameter and String return-type
  String r="";           //  Result-String, starting empty
  int j=a.length;        //  Power-integer, starting at the size of the input-array
  for(int i:a)           //  Loop over the array
    r+=i==0              //   If the current item is 0
           *j--?         //   (And decrease `j` by 1 at the same time)
        ""               //    Append the result with nothing
       :                 //   Else:
        "+"              //    Append the result with a "+",
        +i               //    and the current item,
        +(j<1?           //    +If `j` is 0:
           ""            //      Append nothing more
          :j<2?          //     Else-if `j` is 1:
           "x"           //      Append "x"
          :              //     Else:
           "x^"+j);      //      Append "x^" and `j`
  return r.isEmpty()?    //  If `r` is still empty
    "0"                  //   Return "0"
   :                     //  Else:
    r.substring(1)       //   Return the result minus the leading "+",
     .replace("+-","-")  //   and change all occurrences of "+-" to "-",
     .replaceAll("(\\D)1x","$1x");}
                         //   and all occurrences of "1x" to "x"

1
176 ไบต์:a->{String r="";int j=a.length;for(int u:a)r+=u==(j^j--)?"":"+"+u+(j<1?"":j<2?"x":"x^"+j);return r.isEmpty()?"0":r.substring(1).replace("+-","-").replaceAll("([+-])1x","$1x");}
Nevay

1
@Nevay ตอนนี้ฉันรู้แค่ว่าอินพุตทั้งหมดเป็นจำนวนเต็ม .. ฉันใช้ String-input เพราะฉันคิดว่าอนุญาตให้ป้อนทศนิยมได้เช่นกัน .. >.> อย่างไรก็ตามขอขอบคุณสำหรับ -26 ไบต์ และฉันได้รับสามารถที่จะเล่นกอล์ฟอีก 2 โดยการเปลี่ยนไป(j^j--) 0*j--
Kevin Cruijssen

2

Python ขนาด 165 ไบต์

lambda a:"".join([("+"if c>0 and i+1<len(a)else"")+(str(c)if i==0 or abs(c)!=1 else "")+{0:"",1:"x"}.get(i,"x^"+str(i))for i,c in enumerate(a[::-1])if c][::-1])or"0"

1

PHP, 213 ไบต์

$p=0;for($i=count($a=array_reverse(explode(',',trim($argv[1],'[]'))))-1;$i>=0;$i--)if(($b=(float)$a[$i])||(!$i&&!$p)){$k=abs($b);echo ($b<0?'-':($p?'+':'')).((($k!=1)||!$i)?$k:'').($i>1?'x^'.$i:($i?'x':''));$p=1;}

อาร์กิวเมนต์บรรทัดคำสั่งตามที่ร้องขอโดย OP (อาร์กิวเมนต์เดี่ยวพร้อมเครื่องหมายวงเล็บและเครื่องหมายจุลภาค)

พิมพ์สวยและคำอธิบายบางอย่าง:

$p = false; /* No part of the polynomial has yet been printed. */
for ($i = count($a = array_reverse(explode(',',trim($argv[1],'[]')))) - 1; $i >= 0; $i--)
{
    $b = (float)$a[$i]; /* Cast to float to avoid -0 and numbers like 1.0 */
    if (($b != 0) or (($i == 0) and !$p)) /* Print, if $b != 0 or the constant if there is no part until here. */
    {
        $k = abs($b);
        echo ($b < 0 ? '-' : ( $p ? '+' : '')); /* Sign. The first sign is suppressed (if $p is false) if $b positive. */
        echo ((($k != 1) || ($i == 0)) ? $k : '');  /* Coefficient */
        echo ($i > 1 ? 'x^' . $i : (($i != 0) ? 'x' : ''));  /* x^3, x^2, x, constant with empty string. */
        $p = true; /* Part of the polynomial has been printed. */
    }
}

1

PowerShell ขนาด 295 ไบต์

$c=$args[0]
$p=$c.length-1
$i=0
$q=""
while($p -ge 0){$t="";$e="";$d=$c[$i];switch($p){0{$t=""}1{$t="x"}Default{$t="x^";$e=$p}}if($d-eq 0){$t=""}elseif($d-eq 1){$t="+$t$e"}elseif($d-eq-1){$t="-$t$e"}elseif($d-lt 0 -or$i -eq 0){$t="$d$t$e"}else{$t="+$d$t$e"}$q+=$t;$i++;$p--}if($q -eq""){$q=0}
$q
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.