9ホールのコードゴルフ-キックオフ


12

すでに9ホールチャレンジ(およびここでもう1つ)がありましたが、昨年はすっごくやりました。それに加えて、はたった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ホールのゴルフコースをキックオフするためにここに来ました。これは、私の経験で(限られたものではありますが)見たことのあるものすべてを含んでいます。これには以下が伴います。

  • アスキーアート
  • グラフィカル出力
  • コンウェイの人生のゲーム
  • キングオブザヒル
  • コルモゴロフの複雑さ
  • クイン
  • 画像処理
  • 数学
  • クラシックコードゴルフ。

あなたにできることを楽しみにしています!

競争ルール

  • すべてのホールに1つの言語を選択します(参加する...詳細はポイント4を参照)。
  • すべての穴について- 標準的な抜け穴は(まだ)面白くありません。
  • 次の課題は、妥当な時間内に十分な提出物があることを確認したときに表示されます。たとえば、キングオブザヒルには時間がかかります。
  • すべてのホールに参加する必要はありません。あなたが特に難しいホールを見つけた場合、それをする時間がないなど、あなたは最低スコアの2倍のポイントを獲得します。1つのgolfscript回答に12文字を残し、24をスコアとしてこのルールを利用しないでください。

得点

  • あなたのスコアは、すべてのホールのスコアの最高点に基づいています
  • 最低スコアの勝ち(実際のゴルフごと)
  • リーダーボードはこのページの上部に配置されます

質問が重複していないこと、すべての質問が客観的な基準を持っていること、よく書かれていること、コンテスト全体の文脈で(比較的)同等の重みを持つように最善を尽くします。

ただし、失敗した場合は我慢してください。

そして、さらに苦労せずに、最初の挑戦!

プラズマグローブ

プラズマ世界はみんなのお気に入りのおもちゃです。

ここに画像の説明を入力してください

あなたの仕事はそれを描くことです。

ベースを描く必要があります:

ここに画像の説明を入力してください

地球儀:

ここに画像の説明を入力してください

テスラのもの(?)

ここに画像の説明を入力してください

そして、もちろん、クールなプラズマ撮影:

ここに画像の説明を入力してください

ただし、プラズマグローブ(またはWikipediaに書かれているように導電性の物体)の近くに手を置くと、プラズマが引き付けられます。

あなたの地球はそれを反映すべきです。

定量的に言えば、グローブには最大16のシュートがあります(上の写真を参照)。ラジアン単位の角度で与えられる地球の表面上の「オブジェクト」には、「伝導力」、つまり、それが引き付けるビームの量が含まれます。したがって、5のべき乗を持つオブジェクトは、5本のビーム(太さ5の1本の線)を引き付け、11を残りの地球全体に均等広げます

ここに画像の説明を入力してください


1.真ん中の黒い円はプラズマの上に残っていることに注意してください
2.この例では、角度はpi / 2です。

複数の導電性オブジェクトが存在する場合があり、その場合、シュートが等間隔である必要はありません。ただし、それらは比較的間隔が空いています。たとえば、これは2つのオブジェクトで問題ありません。1つは角度pi / 4の累乗5、もう1つは角度5pi / 3の累乗3です。

ここに画像の説明を入力してください

(プラズマの)シュートの各エンドポイントが見えるはずです。

ただし、16を超えるパワーを持つオブジェクト(またはオブジェクトの合計)が与えられた場合、グローブは「破損」します。

ここに画像の説明を入力してください

ノート

  • グローブの直径は、ベ​​ースの長さ(正方形)の1.5倍です
  • 地球が壊れると、地球は右側にあります。ベースと地面の右側に接しています。プラズマグローブが破損した場合、プラズマは存在しないはずです(もちろん、安全機能が必要です!そもそもどのように破損したかについての説明はありません。)
  • シュート以外のすべての色は黒で、1ピクセルの厚さでなければなりません。プラズマの色は、色相245-280、彩度/値100です。私が何を話しているのかわからない場合は、「HSV」の下でこれを使用します。

入力

入力は、STDIN /コマンドラインargs / whateverを使用するか、関数の引数を使用できます。

2つの入力が必要です-プラズマグローブのベースの長さ(ベクトルグラフィックスを使用している場合は軸を含む)、および次のようなオブジェクトの配列:

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

したがって、オブジェクトがない場合(16行の最初の図を参照)、入力は次のようになります。

100,[]

次の(1つのオブジェクト、パワー5)では、次のようになります。

100,[[1.570796,5]]

最後の例:

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

これはコードゴルフなので、バイト単位の最短コードが優先されます


@MartinBüttner基線の長さが短くなっても画像が小さくならない場合は、軸を含める
ストレッチマニア

2番目の例では。2番目のオブジェクトがあった場合はどうなります-3/8πか?その場合、他のビームの1つと正確に重なります。このような場合、すべてのビームを回転させる必要がありますか?その場合、個々のビームがオブジェクト誘導ビームからどれだけ離れている必要があるかを指定する必要があると思います。
マーティンエンダー14年

1
えー...答えがなくても、なぜボードの「穴2」の列がすでに埋められているのですか
xem 14年

2
:より良いこれを可視化するために少しの助けinear.se/plasmaball
CSᵠ

1
@xem um、2番ホールには答えがあるので、投稿してみませんか?これは必ずしも...順番に行く必要はありません
ストレッチマニアック

回答:


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

ここに画像の説明を入力してください


これにより、オブジェクト誘導ビームとフリービームが重複しないようになります。
マーティンエンダー14年

ビームが少なくとも0.1ラジアンの間隔を空ける方向を見つけるまで、等間隔のビームを少しだけ回転させます
キャメロン14年

ああ、そうですね。明確にしてくれてありがとう!
マーティンエンダー14年

Np、オブジェクト誘導ビームとフリービーム間の最小距離を最大化する方法を解決しようとしてきましたが、難しい質問のようです
キャメロン14年

1
A,B=zip(*C)数バイトを節約する必要があります
ニブラー14年

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


これをテストすることはできませんでしたが、ここで少しゴルフをしました:repl.it/E52i
0WJYxW9FMN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.