Rosetta Stone Challenge: วาดรูปเป็นพล็อต


10

เป้าหมายของการท้าทาย Rosetta Stone คือการเขียนวิธีแก้ปัญหาในภาษาต่างๆให้ได้มากที่สุด แสดงการเขียนโปรแกรมได้หลายภาษาของคุณ!

ความท้าทาย

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

พล็อตบ็อกซ์คืออะไร

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

ก่อนอื่นใช้ค่ามัธยฐานของข้อมูล จากนั้นใช้จุดข้อมูลทั้งหมดที่น้อยกว่าค่ามัธยฐานโดยเคร่งครัดและคำนวณค่ามัธยฐานของชุดนี้ให้เป็นควอไทล์แรก (Q1) ใช้จุดข้อมูลทั้งหมดที่มากกว่าค่ามัธยฐานและคำนวณค่ามัธยฐานของชุดนี้ให้เป็นควอไทล์ที่สาม (Q3) R = 1.5*(Q3 - Q1)หาค่าของ ตัวเลขที่น้อยกว่าQ1 - Rนี้เป็นค่าผิดปกติ ตัวเลขใด ๆ ที่มากกว่าQ3 + Rค่าผิดปกติ ใช้ชุดของจุดข้อมูลทั้งหมดที่ไม่ใช่ค่าผิดปกติและค่าต่ำสุดและสูงสุดของชุดนี้จะกำหนดจุดสิ้นสุดของเคราทั้งสอง

อินพุต

อินพุตจะเริ่มต้นด้วยn=หมายเลข จากนั้นจะมีnตัวเลขหนึ่งรายการต่อบรรทัด ตัวเลขทั้งหมดจะเป็นจำนวนเต็มตั้งแต่ 0 ถึง 63 โดยรวม

n=8
29
1
22
18
12
16
16
22

เอาท์พุต

เอาท์พุทจะเป็นการกระทำของพล็อตกล่อง วิธีหนึ่งที่เป็นไปได้ในการวาดพล็อตคือการแสดงผลใน ASCII คุณสามารถแสดงผลพล็อตของกล่องได้หลายวิธีนอกเหนือจาก ASCII แต่ข้อกำหนดหลักคือมีขนาดใหญ่พอที่จะบอกตำแหน่งที่แน่นอนของคุณสมบัติที่สำคัญได้ พล็อตกล่องควรมีสเกลประกอบด้วยประมาณ 5-10 หมายเลขเว้นระยะเท่ากัน นี่คือตัวอย่างหนึ่งพล็อตของข้อมูลข้างต้น:

              +--+----+        
              |  |    |        
 X          +-+  |    +------+ 
              |  |    |        
              +--+----+        

0    0    1    1    2    2    3
0    5    0    5    0    5    0

เกณฑ์การชนะอย่างมีวัตถุประสงค์

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

กฎข้อ จำกัด และหมายเหตุ

โปรแกรมของคุณสามารถเขียนในภาษาใด ๆ ที่มีอยู่ก่อนวันที่ 11 เมษายน 2013 ฉันจะต้องพึ่งพาชุมชนเพื่อตรวจสอบคำตอบบางอย่างที่เขียนในภาษาที่แปลกประหลาด / ลึกลับมากกว่าเนื่องจากฉันไม่สามารถทดสอบได้ พวกเขา


กระดานแต้มนำปัจจุบัน

ส่วนนี้จะได้รับการปรับปรุงเป็นระยะเพื่อแสดงจำนวนภาษาและผู้ที่เป็นผู้นำในแต่ละภาษา

  • จูเลีย (604) - plannapus
  • Mathematica (71) - chyanog
  • Python2.X (85) - อภิสิทธิ์
  • R (34) - plannapus

อันดับผู้ใช้ปัจจุบัน

  1. plannapus - 2
  2. อภิสิทธิ์ - 1
  3. chyanog - 1

2
ฉันรักมัน! การกำหนดค่ากฎที่ดีมาก ตอนนี้เพื่อเรียนรู้ภาษาต่างๆ ...
luser droog

คำตอบ:


6

R: 34 ตัวอักษร

แน่นอน R เป็นภาษาที่ใช้สำหรับสถิติมันมาพร้อมกับฟังก์ชั่นboxplotในการทำสิ่งนี้ (ซึ่งต้องการ wrapper ที่นี่เพื่อรองรับสไตล์การป้อนข้อมูล):

f=function(x)boxplot(scan(x,sk=1))

การใช้งาน: รับไฟล์input1.txtที่มีดังต่อไปนี้:

n=10
29
1
22
19
9
13
15
22
63
2

จากนั้นf("input1.txt")ผลิต:

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

จูเลีย: 604 ตัวอักษร

นี่เป็นครั้งแรกที่ฉันทำหน้าที่ในจูเลียดังนั้นฉันขอโทษแฟน ๆ ของจูเลียถ้านี่เป็นงานเขียนที่แย่มาก

function g(f)
a=int(split(readall(open(f)),'\n')[2:])
b,c,d=int(quantile(a,[.25,.5,.75]))
w=1.5*(d-b)
o=a[a.<b-w]
O=a[a.>d+w]
t=int(b-w>0?b-w:0)
u=int(d+w<63?d+w:63)
S=s=""
if !isempty(o)
for i in 1:length(o)
s=s*lpad('x',[0,o][i+1]-[0,o][i]-1,' ')
end
end
if !isempty(O)
for i in 1:length(O)
S=S*lpad('x',[0,O][i+1]-[0,O][i]-u-1,' ')
end
end
x="0"
for i in 9:9:63
x=x*lpad(string(i),i-(i-9)," ")
end
v=isempty(o)?b-1:b-o[length(o)]-1
print(x*"\n"*lpad('+'*'-'^(d-b-1)*'+',d,' ')*'\n'*s*lpad('-'^(b-t-1),v,' ')*'|'*lpad('|',c-b,' ')*' '^(d-c-1)*'|'*'-'^(u-d)*S*'\n'*lpad('+'*'-'^(d-b-1)*'+',d,' '))
end

การใช้งาน:

g("input1.txt")
0        9       18       27       36       45       54       63
         +-----------+
---------|      |    |------------------                     x
         +-----------+

2

Python2.X 85 ตัวอักษรโดยใช้ matplotlib

import matplotlib.pylab as p
p.boxplot(map(input,['']*int(raw_input()[2:])))
p.show()

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


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