9 lỗ golf Code - Kickoff


12

Đã có một Thử thách 9 lỗ (và một thử thách khác ở đây ), nhưng đó là rất nhiều vào năm ngoái. Và bên cạnh đó, tôi mới chỉ được khoảng 2 tháng (mặc dù có vẻ như là mãi mãi). Và nó là khác nhau đáng kể.

Ban lãnh đạo: (lưu ý rằng trọng số cho các lỗ chưa được thiết lập)

+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|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 |
+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

Các lỗ khác:

Gần đây ở đây rất chậm, vì vậy tôi ở đây để khởi động sân golf 9 lỗ tiếp theo, liên quan đến việc đập tan tất cả những gì tôi đã thấy ở đây theo kinh nghiệm (mặc dù có giới hạn). Điều này sẽ đòi hỏi:

  • Nghệ thuật
  • Đầu ra đồ họa
  • Trò chơi cuộc sống của Conway
  • Vua đồi
  • Độ phức tạp Kolmogorov
  • Quines
  • Đang xử lý hình ảnh
  • môn Toán
  • Golf mã cổ điển.

Tôi thực sự mong muốn được nhìn thấy những gì bạn có thể làm!

Thể lệ cuộc thi

  • Bạn sẽ chọn 1 ngôn ngữ cho tất cả các lỗ hổng (mà bạn tham gia ... xem điểm 4 để biết thêm thông tin).
  • Đối với tất cả các lỗ - sơ hở tiêu chuẩn là (vẫn) không buồn cười.
  • Thử thách tiếp theo sẽ xuất hiện khi tôi thấy rằng có đủ bài nộp trong một khoảng thời gian hợp lý. Vua của ngọn đồi, ví dụ, sẽ mất nhiều thời gian hơn.
  • Bạn không phải tham gia vào tất cả các lỗ. Nếu bạn thấy một lỗ hổng đặc biệt thách thức, đừng có thời gian để làm điều đó, v.v., bạn sẽ nhận được số điểm gấp 2 lần số điểm thấp nhất. Vui lòng không tận dụng quy tắc này bằng cách để lại 1 câu trả lời bằng golf với 12 ký tự và lấy 24 điểm làm điểm số.

Chấm điểm

  • Điểm của bạn dựa trên đỉnh điểm của tất cả các lỗ
  • Chiến thắng điểm thấp nhất (theo golf thực sự)
  • Bảng xếp hạng sẽ được đặt ở đầu trang này

Tôi sẽ cố gắng hết sức để đảm bảo rằng không có câu hỏi nào trùng lặp, tất cả các câu hỏi đều có tiêu chí khách quan, được viết tốt và tất cả chúng đều có trọng lượng tương đối bằng nhau trong bối cảnh của toàn bộ cuộc thi.

Tuy nhiên, hãy kiên nhẫn khi tôi thất bại.

Và, không có thêm ado, thử thách đầu tiên!

Quả cầu plasma

Một đèn plasma là đồ chơi yêu thích của mọi người:

nhập mô tả hình ảnh ở đây

Công việc của bạn là vẽ một.

Bạn phải vẽ một cơ sở:

nhập mô tả hình ảnh ở đây

một quả địa cầu:

nhập mô tả hình ảnh ở đây

Một điều tesla (?)

nhập mô tả hình ảnh ở đây

Và, tất nhiên, bắn plasma mát mẻ:

nhập mô tả hình ảnh ở đây

Tuy nhiên, khi bạn đặt bàn tay của bạn gần một quả cầu plasma (hoặc một vật dẫn điện như Wikipedia nói với tôi), nó sẽ thu hút plasma .

Quả cầu của bạn nên phản ánh điều đó.

Nói một cách định lượng, quả cầu của bạn có tối đa 16 lần chụp (xem hình trên). Một "vật thể" trên bề mặt địa cầu (được cho bởi một góc tính bằng radian) sẽ chứa "năng lượng dẫn", nghĩa là lượng chùm tia mà nó thu hút. Vì vậy, một vật thể có sức mạnh 5 sẽ thu hút 5 chùm tia (một đường đơn có độ dày 5) để lại 11 để trải đều giữa các phần còn lại của địa cầu :

nhập mô tả hình ảnh ở đây

Lưu ý rằng
1. vòng tròn màu đen ở giữa vẫn ở trên plasma
2. trong ví dụ này, góc sẽ là pi / 2.

Bạn có thể có nhiều hơn một đối tượng dẫn điện, và trong sự kiện đó, không bắt buộc các chồi phải cách nhau như nhau. Tuy nhiên, chúng tương đối cách nhau. Ví dụ, điều này là ổn đối với 2 đối tượng, 1 ở góc pi / 4 công suất 5 và một đối tượng khác ở góc 5pi / 3 công suất 3:

nhập mô tả hình ảnh ở đây

Bạn sẽ có thể nhìn thấy từng điểm cuối của chồi (của plasma).

Tuy nhiên, với một đối tượng (hoặc tổng số đối tượng) có sức mạnh lớn hơn 16, quả cầu sẽ "vỡ":

nhập mô tả hình ảnh ở đây

Ghi chú

  • Đường kính của quả cầu lớn hơn 1,5 lần so với chiều dài của đế, là một hình vuông
  • Khi quả cầu vỡ, quả cầu nằm ở phía bên phải. Nó tiếp tuyến với phía bên phải của căn cứ cũng như mặt đất. Không nên có plasma khi quả cầu plasma bị phá vỡ (tại sao? Tất nhiên là các tính năng an toàn! Không có thông tin gì về cách nó bị vỡ ở nơi đầu tiên.)
  • Màu sắc của mọi thứ trừ các chồi phải là màu đen và dày 1 pixel. Màu của plasma có màu 245 - 280 và độ bão hòa / giá trị 100. Sử dụng màu này trong "HSV" nếu bạn không biết tôi đang nói về cái gì.

Đầu vào

Đầu vào có thể thông qua STDIN / đối số dòng lệnh / bất cứ điều gì hoặc thông qua các đối số chức năng.

Cần có 2 đầu vào - chiều dài cơ sở của quả cầu plasma (bao gồm một trục nếu sử dụng đồ họa vector) và một mảng các đối tượng như thế này:

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

Vì vậy, đối với không có đối tượng (xem hình đầu tiên với 16 dòng), đầu vào sẽ là

100,[]

Đối với tiếp theo (một đối tượng, sức mạnh 5) sẽ là:

100,[[1.570796,5]]

Ví dụ cuối cùng:

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

Đây là mã golf, vì vậy mã ngắn nhất tính bằng byte thắng.


@ MartinBüttner Nếu hình ảnh không nhỏ hơn khi chiều dài cơ sở nhỏ hơn, bao gồm một trục
Kéo dài Maniac

Trong ví dụ thứ hai của bạn. Nếu đối tượng thứ hai ở -3/8πđâu thì sao? Trong trường hợp đó, nó sẽ trùng lặp chính xác với một trong các chùm khác. Chúng ta có phải xoay tất cả các chùm trong trường hợp như vậy không? Nếu vậy, tôi nghĩ rằng bạn cần xác định các chùm tia riêng lẻ cần cách xa các chùm cảm ứng.
Martin Ender

1
er .... tại sao cột "lỗ 2" của bảng đã được lấp đầy ngay cả khi không có câu trả lời?
xem

2
Một chút trợ giúp để hình dung rõ hơn về điều này: inear.se/plasmaball
CSᵠ

1
@xem um, đã có câu trả lời cho lỗ 2, vậy tại sao không đăng chúng? Điều này không nhất thiết phải đi theo thứ tự ...
Stretch Maniac

Câu trả lời:


4

Xử lý 2 - 717 ký tự

Vì xử lý là một ngôn ngữ được tạo ra cho các nghệ sĩ và tôi là một lập trình viên rất mới, tôi không mong đợi sẽ làm rất tốt trong nhiều thử thách này. Điều đó đã được nói, tôi thực sự thích cách đơn giản để vẽ mọi thứ trong quá trình xử lý, và tôi đã có ý định chơi xung quanh với nó nhiều hơn, vì vậy những thử thách này sẽ rất thú vị.

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);}

Tôi chắc chắn rằng điều này có thể được đánh xuống đáng kể và tôi có thể cố gắng làm điều đó khi tôi có nhiều thời gian hơn, nhưng bây giờ tôi hài lòng với nó.

đọc trong một tệp (f.txt) nằm trong thư mục dữ liệu của bản phác thảo để lấy đầu vào của nó. Tôi đã sử dụng ý tưởng của hãng quay phim về việc dịch chuyển các chùm tia tự do cho đến khi chúng không trùng nhau.

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);
}

Ví dụ:

100, [0,785398,3], [5.23598,5]]

quả cầu huyết tương 1

100, []

quả cầu huyết tương 2

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

quả cầu huyết tương 3

xử lý ở đây


3

Python, 878 ký tự

Không có nghĩa là đây là golf tốt, nhưng tôi muốn thấy một câu trả lời cho lỗ này.

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

Và một số kết quả đầu ra mẫu

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

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây


Làm thế nào để đảm bảo rằng các chùm tia do vật thể và tự do không bao giờ trùng nhau?
Martin Ender

Tôi xoay các chùm tia cách đều nhau một lượng nhỏ cho đến khi tôi tìm thấy một hướng đảm bảo các chùm tia cách nhau ít nhất 0,1 radian
Cameron

Ah, phải, tôi mong đợi một cái gì đó như thế. Cảm ơn đã làm rõ!
Martin Ender

Np, tôi đã cố gắng giải quyết làm thế nào để tối đa hóa khoảng cách tối thiểu giữa bất kỳ chùm tia cảm ứng nào và bất kỳ chùm tia tự do nào, nhưng dường như đó là một câu hỏi khó
Cameron

1
A,B=zip(*C)nên lưu một vài byte
gnibbler

1

Con trăn 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')

Nó đọc các tham số của nó từ đối số dòng lệnh.

Hình ảnh mẫu:

(tham số = 100,[[0.785398,5],[5.23598,3]])

tesla

(tham số = 100,[])

tesla2

(tham số = 100,[[1.72398,12],[5.23598,5]])

tesla3


Tôi không thể kiểm tra điều này, nhưng nó đã đánh gôn một chút ở đây: repl.it/E52i
0WJYxW9FMN
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.