9洞标准高尔夫-开球


12

已经有一个9洞挑战赛这里还有另一个挑战),但是去年真是太糟糕了。而且,只待了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艺术
  • 图形输出
  • 康威的人生游戏
  • 山丘之王
  • 柯尔莫哥罗夫的复杂性
  • 奎因
  • 图像处理
  • 数学
  • 经典代码高尔夫。

我非常期待看到您能做什么!

比赛规则

  • 你会选择1种语言所有的孔(你参与......见点4的更多信息)。
  • 对于所有孔- 标准漏洞都是(仍然)不好笑。
  • 当我看到在合理的时间内有足够的提交内容时,将出现下一个挑战。例如,山丘之王将花费更长的时间。
  • 不必参与所有漏洞。如果您发现一个孔特别具有挑战性,没有时间去做,等等,您将获得最低分数的2倍。请不要利用此规则,即将1个golfscript答案留给12个字符,以24分作为分数。

计分

  • 您的分数是基于所有漏洞的分数之高
  • 最低分获胜(根据实际高尔夫)
  • 排行榜将放置在此页面的顶部

我将尽力确保所有问题都不重复,所有问题都有客观标准,写得很好,并且在整个比赛中它们都(相对)相等。

但是,当我失败时请耐心等待。

而且,事不宜迟,第一个挑战!

等离子地球仪

一个等离子球是大家最喜欢的玩具:

在此处输入图片说明

你的工作就画一个。

您必须绘制一个基准:

在此处输入图片说明

地球仪:

在此处输入图片说明

特斯拉(())

在此处输入图片说明

当然,还有等离子射出的凉爽:

在此处输入图片说明

但是,当您将手放在等离子地球仪(或维基百科告诉我的导电物体)附近时,它会吸引等离子

您的地球应该反映出这一点。

从数量上说,您的地球仪最多有16张笋(请参见上图)。地球表面上的“物体”(以弧度表示的角度)将包含“传导功率”,即它吸引的光束数量。因此,功率为5的物体将吸引5束光束(一条厚度为5的单线),从而使11束光束均匀分布在地球的其余部分

在此处输入图片说明

注意:
1.中间的黑圈保持在等离子体
2. 上方。在此示例中,角度将为pi / 2。

您可能有多个导电物体,在这种情况下,不需要将芽均匀地隔开。但是,它们相对隔开。例如,这对于2个对象都是可以的,其中1个在pi / 4幂5角度,另一个在5pi / 3幂3角度:

在此处输入图片说明

您应该能够看到(等离子的)新芽的每个端点。

但是,如果给定一个对象(或对象的总和)的功率大于16,则地球将“破裂”:

在此处输入图片说明

笔记

  • 地球的直径是底座长度(正方形)的1.5倍
  • 当地球仪破裂时,地球仪在右侧。它与底座的右侧以及地面相切。当等离子地球仪破裂时,应该没有等离子(为什么?当然是安全功能!一开始它没有破裂的说法。)
  • 除枝条外,所有物体的颜色都必须为黑色,且像素厚度为1像素。等离子体的颜色为245-280,饱和度/值为1​​00。如果不知道我在说什么,请在“ HSV”下使用颜色。

输入值

输入可以通过STDIN /命令行args /任何方式或通过函数参数输入。

应该有2个输入-等离子地球仪的基座长度(如果使用矢量图形,则包括一个轴),以及类似这样的对象数组:

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

因此,对于没有物体(请参见第16行的图片),输入为

100,[]

对于下一个(一个对象,幂为5),它将是:

100,[[1.570796,5]]

对于最后一个示例:

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

这是代码高尔夫球,因此以字节为单位的最短代码获胜。


@MartinBüttner如果基本长度变小时图像没有变小,请添加一个轴
Stretch Maniac 2014年

在第二个示例中。如果第二个物体在该-3/8π怎么办?在这种情况下,它将与其他光束之一精确重叠。在这种情况下,是否必须旋转所有光束?如果是这样,我认为您需要指定各个光束与物体感应光束之间的距离。
Martin Ender 2014年

1
er ....即使没有答案,为什么板上的“孔2”列已经被填充?
xem 2014年

2
到好一点的帮助,这个可视化:inear.se/plasmaball
CSᵠ

1
@xem嗯,第2孔有答案,那么为什么不发布它们呢?这不必一定
要按

Answers:


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]])

在此处输入图片说明


这如何确保物体感应光束和自由光束不会重叠?
马丁·恩德2014年

我将等距的光束旋转一小段,直到找到确保光束至少相隔0.1弧度的方向
Cameron

啊,对,我期望这样的事情。感谢您的澄清!
马丁·恩德

Np,我一直在尝试解决如何使任何物体感应光束与任何自由光束之间的最小距离最大化的问题,但这似乎是一个困难的问题
Cameron

1
A,B=zip(*C)应该保存一些字节
gnibbler 2014年

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,[]

特斯拉2

(参数= 100,[[1.72398,12],[5.23598,5]]

特斯拉3


我无法对此进行测试,但是在这里有点
高尔夫球
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.