9 Hole of Code Golf - เขี่ย


12

มีการแข่งขัน9 Hole Challenge (และรายการอื่นที่นี่ ) แต่นั่นเป็นปีที่แล้ว และนอกจากนี้ฉันได้รับรอบเพียง 2 เดือน (แม้ว่ามันจะดูเหมือนตลอดไป) และมันก็แตกต่างกันมาก

กระดานผู้นำ: (โปรดทราบว่ายังไม่ได้กำหนดน้ำหนักสำหรับหลุม)

+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|Competitor     | Language   | Hole 1 | Hole 2 | Hole 3 | Hole 4 | Hole 5 | Hole 6 | Hole 7 | Hole 8 | Hole 9 | Total  |
+----------------------------------------------------------------------------------------------------------------------+
|Dennis         |CJam        |        | 31     |        |        |        |        |        |        |        | 31     |
+----------------------------------------------------------------------------------------------------------------------+
|Optimizer      |CJam        |        | 35     |        |        |        |        |        |        |        | 35     |
+----------------------------------------------------------------------------------------------------------------------+
|Martin Büttner |Mathematica |        | 222    |        |        |        |        |        |        |        | 222    |
+----------------------------------------------------------------------------------------------------------------------+
|Cameron        |Python      | 878    |        |        |        |        |        |        |        |        | 878    |
+----------------------------------------------------------------------------------------------------------------------+
|bubalou        |Processing 2| 717    |        |        |        |        |        |        |        |        | 717    |
+----------------------------------------------------------------------------------------------------------------------+
|Doorknob       |Python 2    |        |        |0.079711|        |        |        |        |        |        |0.079711|
+----------------------------------------------------------------------------------------------------------------------+
|Vulcan         |Java        |        |        |0.6949  |        |        |        |        |        |        |0.6949  |
+----------------------------------------------------------------------------------------------------------------------+
|Eli            |C++         |        |        |1.42042 |        |        |        |        |        |        |1.42042 |
+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

หลุมอื่น ๆ :

มันช้าไปแล้วที่นี่ดังนั้นฉันมาที่นี่เพื่อเริ่มต้นสนามกอล์ฟ 9 หลุมถัดไปซึ่งเกี่ยวข้องกับสิ่งที่ประจบประแจงทุกอย่างที่ฉันได้เห็นที่นี่จากประสบการณ์ของฉัน (แม้ว่ามี จำกัด ) สิ่งนี้จะนำมาซึ่ง:

  • ศิลปะ Ascii
  • เอาท์พุทแบบกราฟิก
  • เกมแห่งชีวิตของคอนเวย์
  • ราชาแห่งขุนเขา
  • ความซับซ้อนของ Kolmogorov
  • Quines
  • การประมวลผลภาพ
  • คณิตศาสตร์
  • รหัสคลาสสิกกอล์ฟ

ฉันหวังเป็นอย่างยิ่งว่าจะได้เห็นสิ่งที่คุณสามารถทำได้!

กฎการแข่งขัน

  • คุณจะเลือก1 ภาษาสำหรับทุกหลุม (ที่คุณเข้าร่วม ... ดูจุดที่ 4 สำหรับข้อมูลเพิ่มเติม)
  • สำหรับทุกหลุม - ช่องโหว่มาตรฐาน (นิ่ง) ไม่ตลก
  • ความท้าทายต่อไปจะปรากฏขึ้นเมื่อฉันเห็นว่ามีการส่งที่เพียงพอในระยะเวลาที่เหมาะสม ตัวอย่างเช่น King of the Hill จะใช้เวลานานกว่า
  • คุณไม่จำเป็นต้องเข้าร่วมทุกหลุม หากคุณพบว่าหลุมมีความท้าทายเป็นพิเศษไม่ต้องมีเวลาทำ ฯลฯ คุณจะได้รับคะแนนมากถึง 2 เท่าของคะแนนที่ต่ำที่สุด โปรดอย่าใช้ประโยชน์จากกฏนี้โดยทิ้งคำตอบ 1 ข้อที่มี 12 ตัวอักษรและ 24 คะแนน

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

  • คะแนนของคุณขึ้นอยู่กับจุดสูงสุดของคะแนนจากทุกหลุม
  • ชนะคะแนนต่ำสุด (ตามจริงกอล์ฟ)
  • กระดานแต้มนำจะอยู่ที่ด้านบนของหน้านี้

ฉันจะพยายามทำให้ดีที่สุดเพื่อให้แน่ใจว่าไม่มีคำถามใดซ้ำซ้อนคำถามทั้งหมดมีเกณฑ์วัตถุประสงค์เขียนได้ดีและพวกเขาทั้งหมดมีน้ำหนักเท่ากัน (ค่อนข้าง) ในบริบทของการแข่งขันทั้งหมด

อย่างไรก็ตามโปรดอดทนเมื่อฉันล้มเหลว

และโดยไม่ต้องกังวลใจต่อความท้าทายครั้งแรก!

โลกพลาสม่า

โลกพลาสม่าเป็นของเล่นที่ชื่นชอบของทุกคน:

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

งานของคุณเพื่อวาด

คุณต้องวาดฐาน:

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

โลก:

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

เทสลา thingy (?)

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

และแน่นอนยอดพลาสมาพลาสม่า:

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

แต่เมื่อคุณใส่มือของคุณที่อยู่ใกล้โลกพลาสม่า (หรือวัตถุที่เป็นสื่อกระแสไฟฟ้าวิกิพีเดียบอกฉัน) มันดึงดูดพลาสม่า

โลกของคุณควรสะท้อนถึงสิ่งนั้น

ในการคำนวณเชิงปริมาณลูกโลกของคุณมีการยิงสูงสุด 16 ครั้ง (ดูภาพด้านบน) "วัตถุ" บนพื้นผิวโลก (ที่กำหนดโดยมุมเป็นเรเดียน) จะมี "พลังนำไฟฟ้า" นั่นคือปริมาณของลำแสงที่ดึงดูด ดังนั้นวัตถุที่มีกำลัง 5 จะดึงดูด 5 ลำ (เส้นเดี่ยวที่มีความหนา 5) ปล่อยให้ 11 กระจายอย่างสม่ำเสมอในส่วนอื่น ๆ ของโลก :

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

โปรดทราบว่า
1. วงกลมสีดำที่อยู่ตรงกลางยังคงอยู่เหนือพลาสมา
2. ในตัวอย่างนี้มุมจะเป็น pi / 2

คุณอาจมีวัตถุที่เป็นสื่อกระแสไฟฟ้ามากกว่าหนึ่งวัตถุและในกรณีนั้นไม่จำเป็นต้องเว้นระยะห่างให้เท่ากัน อย่างไรก็ตามพวกมันค่อนข้างเว้นระยะ ตัวอย่างเช่นนี่เป็นสิ่งที่ใช้ได้สำหรับ 2 วัตถุ 1 ที่มุม pi / 4 กำลัง 5 และอีกชิ้นที่มุม 5pi / 3 กำลัง 3:

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

คุณควรจะเห็นจุดสิ้นสุดของการยิง (ของพลาสมา) แต่ละจุด

อย่างไรก็ตามด้วยวัตถุ (หรือผลรวมของวัตถุ) ที่มีกำลังมากกว่า 16 โลกจะ "แตก":

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

หมายเหตุ

  • เส้นผ่านศูนย์กลางของโลกมีขนาดใหญ่กว่าความยาวฐานถึง 1.5 เท่าซึ่งเป็นรูปสี่เหลี่ยมจัตุรัส
  • เมื่อโลกแตกโลกก็อยู่ทางด้านขวา มันสัมผัสกันไปทางด้านขวาของฐานรวมทั้งพื้นดิน ไม่ควรมีพลาสมาเมื่อโลกพลาสมาเสียหาย (เพราะเหตุใดคุณลักษณะด้านความปลอดภัยของหลักสูตร!
  • สีของทุกอย่างยกเว้นการถ่ายจะต้องเป็นสีดำและหนา 1 พิกเซล สีของพลาสมามีสีอยู่ที่ 245 - 280 และความอิ่มตัว / ค่า 100 ใช้สิ่งนี้ภายใต้ "HSV" หากคุณไม่รู้ว่ากำลังพูดอะไรอยู่

อินพุต

อินพุตสามารถผ่าน STDIN / บรรทัดคำสั่ง args / อะไรก็ตามหรือผ่านอาร์กิวเมนต์ของฟังก์ชัน

ควรมี 2 อินพุต - ความยาวของฐานของโลกพลาสมา (รวมถึงแกนถ้าใช้กราฟิกแบบเวกเตอร์) และอาร์เรย์ของวัตถุเช่นนี้:

[[angle,power],[angle,power],[angle,power]]

ดังนั้นสำหรับวัตถุใด ๆ (ดูภาพแรกที่มี 16 บรรทัด) อินพุตจะเป็น

100,[]

สำหรับวัตถุถัดไป (หนึ่งวัตถุกำลัง 5) จะเป็น:

100,[[1.570796,5]]

สำหรับตัวอย่างสุดท้าย:

100,[[0.785398,5],[5.23598,3]]

นี่คือ code-golf ดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


@ MartinBüttnerหากภาพไม่เล็กลงเมื่อความยาวฐานน้อยลงให้รวมแกน
Stretch Maniac

ในตัวอย่างที่สองของคุณ เกิดอะไรขึ้นถ้าวัตถุที่สองอยู่ที่-3/8π? ในกรณีนั้นมันจะซ้อนทับกับคานอื่นอย่างใดอย่างหนึ่ง เราต้องหมุนคานทั้งหมดในกรณีเช่นนี้หรือไม่? ถ้าเป็นเช่นนั้นฉันคิดว่าคุณต้องระบุว่าคานแต่ละอันนั้นต้องอยู่ไกลแค่ไหนจากคานที่เกิดจากวัตถุ
Martin Ender

1
เอ้อ .... ทำไมคอลัมน์ "hole 2" ของบอร์ดถึงเต็มแล้วแม้ว่าจะไม่มีคำตอบล่ะ?
xem

2
ความช่วยเหลือเล็กน้อยในการมองเห็นสิ่งนี้ดีกว่า: inear.se/plasmaball
CSᵠ

1
@xem อืมมีคำตอบให้กับรูที่ 2 ดังนั้นทำไมไม่โพสต์พวกเขา? สิ่งนี้ไม่จำเป็นต้องเป็นไปตามลำดับ ...
ยืด Maniac

คำตอบ:


4

กำลังดำเนินการ 2 - 717 ตัวอักษร

เนื่องจากการประมวลผลเป็นภาษาที่สร้างขึ้นสำหรับศิลปินและฉันเป็นโปรแกรมเมอร์มือใหม่ฉันจึงไม่คาดหวังว่าจะสามารถทำได้ดีกับความท้าทายเหล่านี้ ที่ถูกกล่าวว่าฉันชอบที่จะวาดสิ่งต่าง ๆ ในการประมวลผลและฉันก็มีความหมายที่จะเล่นกับมันมากขึ้นดังนั้นความท้าทายเหล่านี้ควรจะน่าสนใจ

int j,m,b,k,d,l;float w,c,h,x,y,z;float v[],p[],g[];void setup(){j=m=d=0;c=z=0;String i[]= loadStrings("f.txt");i[0]=i[0].replace("[","").replace("]","");String o[]=split(i[0],',');v=new float[o.length];p=new float[o.length-1];for(String s:o){if(!s.equals("")){v[j]=Float.parseFloat(s);}j++;}w=v[0];size((int)w*3,(int)w*3);h=w*.75;l=v.length;noLoop();}void draw(){translate(w/2,height);scale(1,-1);rect(0,0,w,w);if(l>2){while(m<j-1){m+=2;c+=v[m];}}if(c>16){ellipse(w+h,h,2*h,2*h);rect(w/2,w,1,h);}else{ellipse(w/2,w+h,2*h,2*h);rect(w/2,w,1,h);b=16;m=1;stroke(#1500ff);if(l>2){while(m<j){p[m-1]=cos(v[m])*h;p[m]=sin(v[m])*h;strokeWeight(v[m+1]);line(w/2,w+h,p[m-1]+w/2,p[m]+w+h);b-=v[m+1];m+=2;}}strokeWeight(1);c=(PI*2)/b;k=b;g=new float[b+b];while(b>0){g[d]=cos(z+c*b)*h;g[d+1]=sin(z+c*b)*h;m=0;if(l>2){while(m<j-1){if(abs(g[d]-p[m])<.1 && abs(g[d+1]-p[m+1])<.1){b=k+1;z=z+.1;d=-2;break;}m+=2;}}b--;d+=2;}d--;while(d>0){line(w/2,w+h,g[d]+w/2,g[d-1]+w+h);d-=2;}}stroke(#000000);fill(#000000);ellipse(w/2,w+h,w/9,w/9);}

ฉันแน่ใจว่านี่สามารถลงเล่นกอล์ฟได้อย่างมากและฉันอาจลองทำเช่นนั้นเมื่อฉันมีเวลามากขึ้น แต่ตอนนี้ฉันมีความสุขกับมัน

อ่านในไฟล์ (f.txt) ที่อยู่ในโฟลเดอร์ข้อมูลของร่างเพื่อรับอินพุต ฉันใช้ความคิดของคาเมรอนในการขยับลำแสงฟรีจนกว่าพวกเขาจะไม่ทับซ้อนกัน

int j,m,b,k,d,l;
float w,c,h,x,y,z;
float v[],p[],g[];
void setup(){
j=m=d=0;
c=z=0;
String i[]= loadStrings("f.txt");
i[0]=i[0].replace("[","").replace("]","");
String o[]=split(i[0],',');
v=new float[o.length];
p=new float[o.length-1];
for(String s:o){if(!s.equals("")){v[j]=Float.parseFloat(s);}j++;}
w=v[0];
size((int)w*3,(int)w*3);
h=w*.75;
l=v.length;
noLoop();
}

void draw()
{
  translate(w/2,height);
  scale(1,-1);
  rect(0,0,w,w);
  if(l>2) 
  {
    while(m<j-1)
    {
      m+=2;
      c+=v[m];
    }
  }
  if(c>16)
  {
    ellipse(w+h,h,2*h,2*h);
    rect(w/2,w,1,h);
  }
  else
  {
    ellipse(w/2,w+h,2*h,2*h);
    rect(w/2,w,1,h);
    b=16;m=1;
    stroke(#1500ff);
    if(l>2)
    { 
      while(m<j)
      {
        p[m-1] = cos(v[m]) * h;
        p[m] = sin(v[m]) * h;
        strokeWeight(v[m+1]);
        line(w/2,w+h,p[m-1]+w/2,p[m]+w+h);
        b-=v[m+1];
        m+=2;
      }
    }
    strokeWeight(1);
    c=(PI*2)/b;
    k=b;
    g=new float[b+b];
    while(b>0)
    {
      g[d] = cos(z+c*b) * h;
      g[d+1] = sin(z+c*b) * h;
      m=0;
      if(l>2)
      {
        while(m<j-1)
        {
          if(abs(g[d]-p[m])<.1 && abs(g[d+1]-p[m+1])<.1)
          {
            b=k+1;
            z=z+.1;
            d=-2;
            break;
          }
          m+=2;
        }
      }
      b--;
      d+=2;
    }
    d--;
    while(d>0)
    {
      line(w/2,w+h,g[d]+w/2,g[d-1]+w+h);
      d-=2;
    }
  }
    stroke(#000000);
    fill(#000000);
    ellipse(w/2,w+h,w/9,w/9);
}

ตัวอย่าง:

100 [[0.785398,3], [5.23598,5]]

พลาสม่าลูกโลก 1

100 []

พลาสม่าลูกโลก 2

100 [[1.72398,12], [5.23598,5]]

พลาสม่าลูกโลก 3

รับการประมวลผลที่นี่


3

Python 878 ตัวอักษร

สนามกอล์ฟนี้ไม่ได้ดี แต่ฉันต้องการเห็นคำตอบสำหรับหลุมนี้

import matplotlib.pyplot as P
from math import *
L=len
M=min
Y=P.plot
K=P.Circle
Z=P.gcf().gca().add_artist
f=sin
g=cos
k={'color':(0,0,0)}
j={'color':(.16,0,1)}
def Q(S,C):
    P.axis([-S,S*2.5,0,S*3.5],**k)
    Y([0,S,S,0,0],[0,0,S,S,0],**k)
    Y([S/2,S/2],[S,7*S/4],**k)
    Z(K([S/2,7*S/4],S/20,**k))

    k['fill']=False

    A,B=zip(*C)

    N=16-sum(B)
    if N<0:
        Z(K([7*S/4,3*S/4],3*S/4,**k))

    else:
        Z(K([S/2,7*S/4],3*S/4,**k))
        if L(C)==0:
            D(16,0,S)
        elif L(C)==1:
            D(N,A[0],S)
            Y([S/2,S/2+3*S*g(A[0])/4],[7*S/4,7*S/4+3*S*f(A[0])/4],linewidth=B[0],**j)
        else:
            for c in C:
                Y([S/2,S/2+3*S*g(c[0])/4],[7*S/4,7*S/4+3*S*f(c[0])/4],linewidth=c[1],**j)
            D(N,J(N,A),S)
    P.show()


def J(N,A):
    T=d=0
    t=2*pi/N
    while d<0.1:
        T+=0.1
        d=M(M(a-T-floor((a-T)/t)*t for a in A),\
            M(T+ceil((a-T)/t)*t-a for a in A))
    return T


def D(N,I,S):
    a=I
    for i in range(N):
        Y([S/2,S/2+3*S*g(a)/4],[7*S/4,7*S/4+3*S*f(a)/4],**j)
        a+=2*pi/N

และตัวอย่างผลลัพธ์บางส่วน

Q(100,[[pi/4,6],[-4.2*pi/8,1]])

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

Q(100,[[0.785398,10],[5.23598,7]])

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

Q(100,[[pi/4,3],[pi/2,3],[3*pi/2,2],[5*pi/4,2]])

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


สิ่งนี้ทำให้มั่นใจได้อย่างไรว่าคานที่เกิดจากวัตถุและลำแสงอิสระไม่เคยทับซ้อนกัน?
Martin Ender

ฉันหมุนลำแสงที่เว้นระยะเท่ากันด้วยจำนวนเล็กน้อยจนกว่าฉันจะพบการวางแนวที่ทำให้มั่นใจได้ว่าลำแสงนั้นเว้นระยะอย่างน้อย 0.1 เรเดียน
Cameron

อืมใช่ฉันคิดว่าเป็นอย่างนั้น ขอบคุณสำหรับการชี้แจง!
Martin Ender

Np ฉันได้พยายามแก้ปัญหาเพื่อเพิ่มระยะห่างที่น้อยที่สุดระหว่างลำแสงวัตถุและลำแสงอิสระใด ๆ แต่ดูเหมือนว่ามันจะเป็นคำถามที่ยาก
Cameron

1
A,B=zip(*C)ควรบันทึกสองสามไบต์
gnibbler

1

Python 2.7, 378 375

from turtle import *;import sys
(s,P),A,B=eval(sys.argv[1]),90,180
n,S=sum([b for(a,b) in P]),.75*s;l=16-n
for i in 'abcd':fd(s);lt(A)
pu()
if l<0:goto(s+S,0)
else:goto(s/2,s)
pd();circle(S);pu();goto(s/2,s);lt(A);pd();fd(S)
def C():fd(S);fd(-S)
if n<16:
 color('blue')
 for i in range(l):rt(360/l);C()
 for a,p in P:pensize(p);rt(a*57.3);C()
color('black')
shape('circle')

มันอ่านพารามิเตอร์ของมันจากอาร์กิวเมนต์บรรทัดคำสั่ง

ภาพตัวอย่าง:

(พารามิเตอร์ = 100,[[0.785398,5],[5.23598,3]])

เทสลา

(พารามิเตอร์ = 100,[])

tesla2

(พารามิเตอร์ = 100,[[1.72398,12],[5.23598,5]])

tesla3


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