คำนวณค่าเบี่ยงเบนมาตรฐาน


19

ท้าทาย

รับรายการตัวเลขคำนวณค่าเบี่ยงเบนมาตรฐานประชากรของรายการ

ใช้สมการต่อไปนี้เพื่อคำนวณค่าเบี่ยงเบนมาตรฐานของประชากร:

อินพุต

อินพุตจะเป็นรายการจำนวนเต็มในรูปแบบใด ๆ (รายการสตริง ฯลฯ ) ตัวอย่างบางส่วน:

56,54,89,87
67,54,86,67

ตัวเลขจะเป็นจำนวนเต็มเสมอ

อินพุตจะเป็น STDIN หรืออาร์กิวเมนต์ของฟังก์ชัน

เอาท์พุต

ผลลัพธ์จะต้องเป็นตัวเลขทศนิยม

กฎระเบียบ

คุณอาจใช้ฟังก์ชันในตัวเพื่อค้นหาส่วนเบี่ยงเบนมาตรฐาน

คำตอบของคุณอาจเป็นโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น

ตัวอย่าง

10035, 436844, 42463, 44774 => 175656.78441352615

45,67,32,98,11,3 => 32.530327730015607

1,1,1,1,1,1 => 0.0

การชนะ

โปรแกรมหรือฟังก์ชันที่สั้นที่สุดชนะ

ลีดเดอร์บอร์ด


1
คุณหมายถึงการส่งออกจะต้องเป็นทศนิยมหรือจำนวนเต็ม?
Mutador

3
ฉันคิดว่าฟังก์ชันเบี่ยงเบนมาตรฐานแบบบิวด์อินส่วนใหญ่คำนวณค่าเบี่ยงเบนมาตรฐานตัวอย่าง
Mutador

ถ้ารายการอินพุทเป็นโมฆะจะเป็นอย่างไร 175656.78441352615 ส่งผลให้ฉัน 175656.78441352614
RosLuP

@RosLuP คุณไม่ต้องกังวลกับเรื่องนั้น
Beta Decay

1
@ a13a22 ตามกฎมาตรฐานของ PPCG คุณไม่จำเป็นต้องป้อนข้อมูลผ่านอาร์กิวเมนต์ของฟังก์ชัน
Beta Decay

คำตอบ:


18

คลิป 3

.sk

.sเป็นส่วนเบี่ยงเบนมาตรฐานแยกวิเคราะห์การป้อนข้อมูลในรูปแบบk{1,2,3}


สูตรใดที่ใช้สำหรับค่าเบี่ยงเบนมาตรฐาน ฉันไม่สามารถหามันเขาอ้างอิง
ข้อบกพร่อง

@flawr นี่คือแผนภูมินี้ไปทางด้านล่าง
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴฉันเห็นแล้ว แต่ไม่มีสูตรให้
ข้อบกพร่อง

@ flawr โอ้ฉันเห็น บางทีมันก็ขึ้นอยู่กับล่ามหากมีสิ่งนั้นอยู่
Conor O'Brien

2
@ CᴏɴᴏʀO'Bʀɪᴇɴฉันพบว่าที่นี่ในบรรทัด 493 ดูเหมือนว่าจะ ok!
ข้อบกพร่อง

11

Mathematica, 24 22 ไบต์

Nice, Mathematica มี built-in StandardDevi...oh ... ที่คำนวณค่าเบี่ยงเบนมาตรฐานตัวอย่างไม่ใช่ค่าเบี่ยงเบนมาตรฐานประชากร

แต่ถ้าเราใช้Variance... โอ้ ... ข้อตกลงเดียวกัน

แต่ยังมีอีกในตัวที่เกี่ยวข้อง:

CentralMoment[#,2]^.5&

เย้. :)

วิธีนี้ใช้ได้กับ 22 ไบต์:

Mean[(#-Mean@#)^2]^.5&

และนี่สำหรับ 27:

N@RootMeanSquare[#-Mean@#]&

10

อ็อกเทฟ, 14 ไบต์

g=@(a)std(a,1)

ลองบนideone


2
คุณสามารถบันทึกสองไบต์ด้วยการลบg=เนื่องจากตัวจัดการฟังก์ชันไม่จำเป็นต้องใช้ชื่อเพื่อการส่งที่ถูกต้อง
Alex A.

10

kdb + , 3 ไบต์

dev

หนึ่งใน derviates APL ต้องมีนี้เป็นในตัว

ทดสอบการทำงาน

q)dev 56, 54, 89, 87
16.53028
q)f:dev
q)f 10035, 436844, 42463, 44774
175656.8
q)f 45,67,32,98,11,3
32.53033

8

Dyalog APL, 24 23 21 20 19 17 ไบต์

*∘.5∘M×⍨-M×M←+/÷≢

สิ่งนี้จะกำหนดฟังก์ชั่นรถไฟที่ไม่มีชื่อและ monadic ซึ่งเทียบเท่ากับฟังก์ชั่นต่อไปนี้

{.5*⍨M(×⍨⍵)-M⍵×(M←{(+/⍵)÷≢⍵})⍵}

ลองพวกเขาออนไลน์บนTryAPL

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

รหัสประกอบด้วยรถไฟหลายขบวน

M←+/÷≢

สิ่งนี้กำหนด monadic 3-train (fork) Mที่ดำเนินการ+/(ผลรวมขององค์ประกอบทั้งหมด) และ(ความยาว) สำหรับอาร์กิวเมนต์ที่ถูกต้องจากนั้นนำไปใช้÷(การหาร) กับผลลัพธ์โดยส่งคืนค่าเฉลี่ยเลขคณิตของอินพุต

M×M

นี่คือส้อมที่ใช้อีกMอาร์กิวเมนต์ขวาซ้ำนี้เป็นครั้งที่สองและนำไปใช้×(ผลิตภัณฑ์) เพื่อผลลัพธ์ที่ได้กลับมาμ 2

×⍨-(M×M)

นี่เป็นอีกทางเลือกหนึ่งที่คำนวณค่าเฉลี่ยของเลขคณิตตามที่อธิบายไว้ก่อนหน้านี้ใช้×⍨(ผลิตภัณฑ์ที่มีตัวเอง) กับอาร์กิวเมนต์ที่ถูกต้องและนำไปใช้กับผล-ต่าง ( ในที่สุด)

สำหรับการป้อนข้อมูล(x 1 , ... , x N ) , ฟังก์ชั่นนี้ผลตอบแทน(x 1 - μ 2 , ... , x N - μ 2 )

*∘.5∘M

ฟังก์ชั่นนี้ประกอบไปคือนำไปใช้ในการโต้แย้งสิทธิของมันแล้วM *∘.5หลังใช้การโต้แย้งที่ถูกต้องเพื่อนำแผนที่ไปใช้aกับa*0.5(รากที่สองของa)

(*∘.5∘M)(×⍨-(M×M))

สุดท้ายเรามี monadic 2-train (atop) ซึ่งใช้ฟังก์ชั่นที่เหมาะสมก่อนจากนั้นทางซ้ายไปยังผลลัพธ์โดยคำนวณค่าเบี่ยงเบนมาตรฐานดังนี้

สูตร


5

R, 41 40 39 36 30 28 ไบต์

รหัส

ขอบคุณบีกเกอร์ , Alex A.และMickyTเป็นจำนวนมาก

cat(sd(c(v=scan(),mean(v))))   

รหัสเก่า

v=scan();n=length(v);sd(v)/(n/(n-1))**0.5
m=scan();cat(sqrt(sum(mean((m-mean(m))^2))))
m=scan();cat(mean((m-mean(m))^2)^.5) 

นี่ควรจะทำให้ค่าเบี่ยงเบนมาตรฐานของประชากร


1
ฉันไม่รู้ R แต่จะเป็นไปได้ไหมที่จะเพิ่มอาร์เรย์อินพุตด้วยค่าเฉลี่ยของอาร์เรย์ ดูเหมือนว่าอาจจะสั้นกว่านี้
บีกเกอร์

1
ในเว็บไซต์นี้เราไม่สามารถสมมติสภาพแวดล้อม REPL ได้เว้นแต่จะได้รับอนุญาตจากคำถาม ดังนั้นในกรณีนี้คุณจะต้องใช้catเพื่อพิมพ์ไปยังคอนโซล
Alex A.

1
นอกจากนี้ R ใช้สำหรับการยกกำลังซึ่งเป็นไบต์สั้นกว่า^ **
Alex A.

1
คุณไม่จำเป็นต้องหาค่าเฉลี่ยตั้งแต่meanคืนสเกลาร์ sumไม่มีผล 36 ไบต์:x=scan();cat(mean((x-mean(x))^2)^.5)
Alex A.

1
@ AndréMutaขอโทษเมื่อฉันทดสอบมันฉันมี X ห้อยอยู่รอบ ๆ
MickyT

5

Pyth, 20 19 17 13 ไบต์

@.O^R2-R.OQQ2

ขอบคุณ @FryAmTheEggman สำหรับการตีกอล์ฟขนาด 4 ไบต์!

ลองออนไลน์

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

        .OQ    Compute the arithmetic mean of the input (Q).
      -R   Q   Subtract the arithmetic mean of all elements of Q.
   ^R2         Square each resulting difference.
 .O            Compute the arithmetic mean of the squared differences.
@           2  Apply square root.

ฉันชอบที่การสลายตัวของโปรแกรม Pyth ดูเหมือนพาราโบลาที่เบ้
Conor O'Brien

5

CJam, 24 22 21 bytes

q~_,_@_:+d@/f-:mh\mq/

ขอบคุณ @aditsu สำหรับการเล่นกอล์ฟ 1 ไบต์!

ลองใช้ออนไลน์ในล่าม CJam

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

q~                    e# Read all input and evaluate it.
  _,                  e# Copy the array and push its length.
    _@                e# Copy the length and rotate the array on top.
      _:+d            e# Copy the array and compute its sum. Cast to Double.
          @/          e# Rotate the length on top and divide the sum by it.
            f-        e# Subtract the result (μ) from the array's elements.
              :mh     e# Reduce by hypotenuse.
                      e# a b mh -> sqrt(a^2 + b^2)
                      e# sqrt(a^2 + b^2) c mh -> sqrt(sqrt(a^2 + b^2)^2 + c^2)
                      e#                           = sqrt(a^2 + b^2 + c^2)
                      e# ⋮
                 \mq/ e# Divide the result by the square root of the length.

ฉันคิดว่าคุณสามารถแปลงความยาวเป็นสองเท่าได้
aditsu

@aditsu แน่นอน ขอบคุณ!
Dennis

5
:mhคืออัจฉริยะ btw :)
aditsu

2
Reduce by hypotenuse.ไม่ใช่สิ่งที่คุณเห็นทุกวัน
lirtosiast

4

APL, 24 ไบต์

{.5*⍨+/(2*⍨⍵-+/⍵÷≢⍵)÷≢⍵}

วิธีการที่แตกต่างกันเล็ก ๆ น้อย ๆ มากกว่าเดนนิสแก้ปัญหา Dyalog APL สิ่งนี้ควรใช้กับการติดตั้ง APL ใด ๆ

สิ่งนี้จะสร้างฟังก์ชัน monadic ที่ไม่มีชื่อซึ่งคำนวณเวกเตอร์ ( x - µ ) 2ในขณะที่2*⍨⍵-+/⍵÷≢⍵หารสิ่งนี้ด้วยN ( ÷≢⍵) รับผลรวมของเวกเตอร์นี้โดยใช้+/แล้วใช้สแควร์รูท ( .5*⍨)

ลองออนไลน์


ไม่ใช่ว่าทุกคนดำเนินการ APL สนับสนุน{dfns }, หรือ อย่างไรก็ตามทุกรุ่นสนับสนุนR←F Y R←(+/((Y-+/Y÷⍴Y)*2)÷⍴Y)*.5
อดัม

4

Julia, 26 19 ไบต์

x->std([x;mean(x)])

สิ่งนี้จะสร้างฟังก์ชั่นที่ไม่มีชื่อที่ยอมรับอาร์เรย์และส่งกลับค่าลอย

Ungolfed ฉันเดา:

function f(x::Array{Int,1})
    # Return the sample standard deviation (denominator N-1) of
    # the input with the mean of the input appended to the end.
    # This corrects the denominator to N without affecting the
    # mean.
    std([x; mean(x)])
end

4

TI-BASIC ขนาด 7 ไบต์

stdDev(augment(Ans,{mean(Ans

ผมยืมขั้นตอนวิธีการที่จะได้รับค่าเบี่ยงเบนมาตรฐานของประชากรจากส่วนเบี่ยงเบนมาตรฐานตัวอย่างจากที่นี่

ทางออกที่สั้นที่สุดที่ฉันสามารถค้นหาได้augment(คือ 9 ไบต์:

stdDev(Ans√(1-1/dim(Ans

ฉันเห็นด้วยกับAndréMutaนี่ไม่ได้ผลลัพธ์ที่ต้องการดูที่นี่
ข้อบกพร่อง

1
@ AndréMuta @flawr TI builtin stdDev(คำนวณ SD ตัวอย่าง; stdDev(augment(Ans,{mean(Ansคำนวณ SD ประชากร นั่นคือหน้าที่คุณลิงค์ไป
lirtosiast

3

Haskell, 61 ไบต์

d n=1/sum(n>>[1])
f a=sqrt$d a*sum(map((^2).(-)(d a*sum a))a)

ตรงไปตรงมายกเว้นฟังก์ชั่นความยาวที่ฉันกำหนดเองsum(n>>[1])เพื่อหลอกลวงระบบประเภทที่เข้มงวดของ Haskell


คุณสามารถใช้sum(1<$n)และสำหรับ<$> map
Laikoni

มันเกิดขึ้นกับฉันว่าฟังก์ชั่นเหล่านั้นอาจไม่ปรากฏเนื่องจากรุ่น GHC ที่เก่ากว่า ณ เวลาที่คำตอบนี้ แต่ตามคำแนะนำนี้พวกเขาได้รับการแนะนำให้รู้จักกับโหมโรงในเดือนมีนาคม 2015 และนโยบายเว็บไซต์ได้เปลี่ยนไป คุณสมบัติ
Laikoni

3

Python 3.4+, 30 ไบต์

from statistics import*;pstdev

นำเข้าฟังก์ชั่น builtin pstdevเช่น

>>> pstdev([56,54,89,87])
16.53027525481654

ฉันคิดว่าpstdevหลังจากบรรทัดแรกก็โอเค? ผมเชื่อว่า XNOR sumได้ว่าในขณะที่ที่ผ่านมากับ มันทำให้รู้สึกว่ามันจะใช้ lambdas นิรนามเช่นp=pstdevหรือmap(pstdev, [...])
FryAmTheEggman

ฉันจะพูดในสิ่งเดียวกัน โพสต์ Meta ดูเหมือนจะสนับสนุนเพียงแค่ใส่ฟังก์ชั่นที่แท้จริง
xnor

ฉันคิดว่าคุณยังคงต้องการที่จะเขียนตัวอักษรแต่เช่นpstdev from statistics import*;pstdevมิฉะนั้นอาจเป็นฟังก์ชันใดก็ได้จากไลบรารีนั้น
xnor

@xnor แก้ไขแล้ว TBH ฉันไม่ได้จริงๆแน่ใจเกี่ยวกับการพิจารณาคดีในสถานการณ์เหล่านี้ ...
SP3000

บางทีคำถามเมตาจะมีประโยชน์ไหม :)
Beta Decay

2

JavaScript (ES6), 73 ไบต์

a=>Math.sqrt(a.reduce((b,c)=>b+(d=c-eval(a.join`+`)/(l=a.length))*d,0)/l)

@BetaDecay เกี่ยวกับความแม่นยำของผลผลิตหรือไม่ จริง ๆ แล้วต้นฉบับของฉันไม่ถูกต้องและฉันแก้ไขหลังจากนั้นเท่านั้นที่จะค้นพบจุดลอยตัวก็โอเคฮิฮิ ... ดังนั้นตอนนี้มันดีหรือไม่?
Mwr247

ใช่นั่นเป็นเรื่องดี :)
สลายตัวของเบต้า

7
Psst ... คุณสามารถโกน 5 ไบต์โดยใช้วิธีการรวมนี้eval(a.join`+`)แทน a.reduce((e,f)=>e+f)
George Reith

@ GeorgeReith เคล็ดลับดี! ฉันจะต้องจำไว้ว่าหนึ่งในภายหลัง ...
Mwr247

2

เยลลี่ไม่ใช่การแข่งขัน

11 ไบต์ คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากใช้ภาษาที่โพสต์ความท้าทาย

S÷L
Dz_²ÇN½

นี่คือการแปลโดยตรงของคำตอบ APL ของฉันไปที่ Jelly ลองออนไลน์!

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

S÷L        Helper link. Argument: z (vector)

S          Compute the sum of z.
  L        Compute the length of z.
 ÷         Divide the former by the latter.
           This computes the mean of z.

Dz_²ÇN½    Main link. Argument: z (vector)

Ç          Apply the previous link, i.e., compute the mean of z.
 ²         Square the mean.
   ²       Square all number in z.
  _        Subtract each squared number from the squared mean.
    Ç      Take the mean of the resulting vector.
     N     Multiply it by -1.
      ½    Take the square root of the result.

2

J, 18 ไบต์

[:%:@M*:-M*M=:+/%#

นี่เป็นการแปลโดยตรงของคำตอบ APL ของฉันต่อ J

ลองออนไลน์!


ฉันไม่มีความคิดเลยว่าMเป็นสิ่งที่กำหนดไว้ล่วงหน้าแล้ว
Conor O'Brien

มันไม่ใช่ M=:+/%#เป็นคำนิยามฟังก์ชั่นแบบอินไลน์
เดนนิส

แต่มันถูกกำหนดไว้ล่วงหน้าใช่มั้ย บางทีบิวอินอาจเป็นคำที่ผิด
คอนเนอร์โอไบรอัน

ไม่มันไม่ได้กำหนดไว้ล่วงหน้า M=:+/%#บันทึกคำกริยา+/%#ในMจากนั้นเรียกมันว่า
เดนนิส

ฉันขอโทษ XD ฉันไม่เห็นส่วนสุดท้าย
Conor O'Brien

1

Simplex v.0.5 , 43 ไบต์

เพียงแค่เพราะว่า ฉันต้องการเล่นกอล์ฟนี้อีกหนึ่งไบต์

t[@u@RvR]lR1RD@wA@T@{j@@SR2ERpR}u@vR@TR1UEo   
t[      ]                                     ~~ Applies inner function to entire strip (left-to-right)
  @                                           ~~ Copies current value to register
   u                                          ~~ Goes up a strip level
    @                                         ~~ Dumps the register on the current byte
     R                                        ~~ Proceeds right (s1)
      v                                       ~~ Goes back down
       R                                      ~~ Proceeds right (s0)
                                              ~~ Go right until an empty byte is found
         lR1RD                                ~~ Push length, 1, and divide.
              @                               ~~ Store result in register (1/N)
               wA                             ~~ Applies A (add) to each byte, (right-to-left)
                 @T@                          ~~ Puts 1/N down, multiplies it, and copies it to the register
                    {          }              ~~ Repeats until a zero-byte is met
                     j@@                      ~~ inserts a new byte and places register on it
                        SR                    ~~ Subtract it from the current byte and moves right
                          2E                  ~~ Squares result
                            RpR               ~~ Moves to the recently-created cell, deletes it, and continues
                                u@v           ~~ takes 1/N again into register
                                   R@T        ~~ multiplies it by the new sum
                                      R1UE    ~~ takes the square root of previous
                                          o   ~~ output as number

1

Prolog (SWI) 119 ไบต์

รหัส:

q(U,X,A):-A is(X-U)^2.
p(L):-sumlist(L,S),length(L,I),U is S/I,maplist(q(U),L,A),sumlist(A,B),C is sqrt(B/I),write(C).

คำอธิบาย:

q(U,X,A):-A is(X-U)^2.   % calc squared difference of X and U
p(L):-sumlist(L,S),      % sum input list
      length(L,I),       % length of input list
      U is S/I,          % set U to the mean value of input list
      maplist(q(U),L,A), % set A to the list of squared differences of input and mean
      sumlist(A,B),      % sum squared differences list
      C is sqrt(B/I),    % divide sum of squares by length of list
      write(C).          % print answer

ตัวอย่าง:

p([10035, 436844, 42463, 44774]).
175656.78441352615

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


1

Perl5, 39 38


 16 สำหรับสคริปต์
+22 สำหรับMสวิตช์
+ 1 สำหรับEสวิตช์
= 39

perl -MStatistics::Lite=:all -E"say stddevp@ARGV" .1 .2 300

ทดสอบในสตรอเบอร์รี่ 5.20.2


โอ้ แต่แล้วฉันก็ตระหนักว่าคุณตอบว่าคำตอบของเราสามารถทำงานได้แทนโปรแกรม ในกรณีนั้น,

{use Statistics::Lite":all";stddevp@_}

มีเพียง 38. การทดสอบในสตรอเบอร์รี่ 5.20.2 เป็น

print sub{use Statistics::Lite":all";stddevp@_}->( .1, .2, 300)

0

Python ขนาด 57 ไบต์

lambda l:(sum((x-sum(l)/len(l))**2for x in l)/len(l))**.5

รับอินพุตเป็นรายการ

ขอบคุณ @xnor


ฉันคิดว่าคุณสามารถทำ.5แทน0.5การบันทึกไบต์ นอกจากนี้คุณหมายถึงlen(x)แทนlen(l)?
Alex A.

@AlexA อืมฉันไม่คิดอย่างนั้น ...
Beta Decay

1
ขออภัยสับสน ไม่สนใจxและlไร้สาระ แต่คุณยังสามารถทำได้.5เพื่อบันทึกไบต์
Alex A.

1
@BetaDecay มันสั้นเพื่อใช้รายการ-Comp กว่าที่จะ map sum((x-sum(l)/len(l))**2for x in l)แลมบ์ดา:
xnor

1
สูตรที่แตกต่างกันให้ความยาวเท่ากัน: lambda l:(sum(x*x*len(l)for x in l)-sum(l)**2)**.5/len(l).
xnor

0

PowerShell, 122

:\>type stddev.ps1
$y=0;$z=$args -split",";$a=($z|?{$_});$c=$a.Count;$a|%{$y+=$_};$b=$y/$c;$a|%{$x+
=(($_-$b)*($_-$b))/$c};[math]::pow($x,0.5)

คำอธิบาย

<#
$y=0                            init
$z=$args -split","              split delim ,
$a=($z|? {$_})                  remove empty items
$c=$a.Count                     count items
$a|%{$y+=$_}                    sum
$b=$y/$c                        average
$a|%{$x+=(($_-$b)*($_-$b))/$c}  sum of squares/count
[math]::pow($x,0.5)             result
#>

ผลลัพธ์

:\>powershell -nologo -f stddev.ps1 45,67,32,98,11,3
32.5303277300156

:\>powershell -nologo -f stddev.ps1 45,  67,32,98,11,3
32.5303277300156

:\>powershell -nologo -f stddev.ps1 45,  67,32, 98 ,11,3
32.5303277300156

:\>powershell -nologo -f stddev.ps1 10035, 436844, 42463, 44774
175656.784413526

:\>powershell -nologo -f stddev.ps1 1,1,1,1,1,1
0

0

Fortran, 138 ไบต์

เพียงนำสมการไปใช้ในสมการใน Fortran:

double precision function std(x)
integer,dimension(:),intent(in) :: x
std = norm2(dble(x-sum(x)/size(x)))/sqrt(dble(size(x)))
end function

0

SmileBASIC ขนาด 105 ไบต์ (เป็นฟังก์ชัน)

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

DEF S(L)N=LEN(L)FOR I=0TO N-1U=U+L[I]NEXT
U=1/N*U FOR I=0TO N-1T=T+POW(L[I]-U,2)NEXT RETURN SQR(1/N*T)END

ในฐานะโปรแกรม 212 ไบต์

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

DIM L[0]LINPUT L$@L I=INSTR(O,L$,",")IF I>-1THEN PUSH L,VAL(MID$(L$,O,I-O))O=I+1GOTO@L ELSE PUSH L,VAL(MID$(L$,O,LEN(L$)-O))
N=LEN(L)FOR I=0TO N-1U=U+L[I]NEXT
U=1/N*U FOR I=0TO N-1T=T+POW(L[I]-U,2)NEXT?SQR(1/N*T)

Ungolfed และอธิบาย:

DIM L[0]  'define our array
LINPUT L$ 'grab string from input

'parse list
'could've used something cleaner, like a REPEAT, but this was shorter
@L
I=INSTR(O,L$,",")                 'find next comma
IF I>-1 THEN                      'we have a comma
 PUSH L,VAL(MID$(L$,O,I-O))       'get substring of number, parse & store
 O=I+1                            'set next search location
 GOTO @L                          'go again
ELSE                              'we don't have a comma
 PUSH L,VAL(MID$(L$,O,LEN(L$)-O)) 'eat rest of string, parse & store
ENDIF                             'end

N=LEN(L) 'how many numbers we have

'find U
'sum all of the numbers, mult by 1/N
FOR I=0 TO N-1
 U=U+L[I]
NEXT
U=1/N*U

'calculate our popstdev
'sum(pow(x-u,2))
FOR I=0 TO N-1
 T=T+POW(L[I]-U,2)
NEXT
PRINT SQR(1/N*T) 'sqrt(1/n*sum)

0

ความจริง 137 ไบต์

m(a:List Float):Complex Float==(#a=0=>%i;reduce(+,a)/#a)
s(a:List Float):Complex Float==(#a=0=>%i;n:=m(a);sqrt(m([(x-n)^2 for x in a])))

ฟังก์ชั่น m () จะคืนค่าเฉลี่ยของรายการในอินพุต ทั้งฟังก์ชั่นที่มีข้อผิดพลาดจะคืนค่า% i ให้กับ sqrt จินตภาพคงที่ (-1) รหัสสำหรับการทดสอบและผลลัพธ์ [แต่ผลลัพธ์ถ้ามันโอเคมันเป็นส่วนจริงของจำนวนเชิงซ้อน]

(6) -> s([45,67,32,98,11,3])
   (6)  32.5303277300 15604966

(7) -> s([10035,436844,42463,44774])
   (7)  175656.7844135261 4035

(8) -> s([1,1,1,1,1,1])
   (8)  0.0


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