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 홀 골프 코스를 시작하려고 여기에 있습니다 (제한적이지만). 이것은 다음을 수반합니다 :

  • 아스키 아트
  • 그래픽 출력
  • 콘웨이의 인생 게임
  • 언덕의 왕
  • 콜 모고 로프의 복잡성
  • 퀸즈
  • 이미지 처리
  • 수학
  • 클래식 코드 골프.

나는 당신이 할 수있는 일을 정말로 기대하고 있습니다!

경쟁 규칙

  • 당신은 모든 구멍에 대해 1 개의 언어 를 선택할 것입니다 (참여할 수있는 ... 자세한 내용은 4 장을보십시오).
  • 모든 구멍에 대해 – 표준 허점 은 (아직도) 재미 있지 않습니다.
  • 충분한 시간이 주어지면 제출이 충분하다는 것을 알면 다음 과제가 나타납니다. 예를 들어 언덕의 왕은 더 오래 걸릴 것입니다.
  • 당신은 하지 않는 구멍 모두에 참여해야합니다. 특히 어려운 홀을 발견 할 시간이 없다면, 가장 낮은 점수보다 2 배 많은 점수를받습니다. 1 개의 골프 스크립트 답변을 12 자로 남겨두고 24 점을 점수로 사용하여이 규칙을 이용하지 마십시오.

채점

  • 당신의 점수는 모든 홀에서 점수의 정점을 기준으로합니다
  • 최저 점수 승리 (실제 골프 기준)
  • 리더 보드는이 페이지 상단에 배치됩니다

나는 중복되는 질문이없고, 모든 질문에 객관적인 기준이 있고, 잘 쓰여졌으며, 모든 콘테스트에서 (상대적으로) 같은 가중치를 갖도록 최선을 다할 것입니다.

그러나, 실패했을 때는 기다려주십시오.

그리고 더 이상 고민하지 않고 첫 번째 도전!

플라즈마 글로브

플라즈마 세계는 모두가 좋아하는 장난감 :

여기에 이미지 설명을 입력하십시오

당신의 직업은 하나를 그리는 것입니다.

베이스를 그려야합니다.

여기에 이미지 설명을 입력하십시오

지구본 :

여기에 이미지 설명을 입력하십시오

테슬라 물건 (?)

여기에 이미지 설명을 입력하십시오

그리고 물론 멋진 플라즈마 촬영 :

여기에 이미지 설명을 입력하십시오

그러나 손을 플라즈마 지구 근처 (또는 Wikipedia에서 알려주는 전도성 물체) 근처에 놓으면 플라즈마를 끌어 당깁니다 .

당신의 지구는 그것을 반영해야합니다.

정량적으로 표현하기 위해 지구본은 최대 16 장의 사진을 촬영합니다 (위 그림 참조). 지구 표면의 "물체"(라디안 각도로 표시)에는 "도전 력", 즉 그것이 끌어 당기는 빔의 양이 포함됩니다. 따라서 5의 거듭 제곱을 가진 물체는 5 개의 빔 (두께가 5 인 단일 선)을 끌어 당겨 11 개의 지구에 고르게 퍼지게됩니다 .

여기에 이미지 설명을 입력하십시오

참고
1 플라즈마 상기 중간 남아있는 흑점
이 예에서, 각도가 PI / 2 것이라고 2.

전도성 물체가 두 개 이상있을 수 있으며이 경우 싹의 간격이 동일 할 필요는 없습니다. 그러나 그것들은 비교적 이격되어있다. 예를 들어, 이것은 각도 pi / 4의 힘 5에서 1, 각도 5pi의 3의 힘 3에서 2 개의 물체에 대해서는 정상입니다.

여기에 이미지 설명을 입력하십시오

당신은 (혈장의) 싹의 각 종점을 볼 수 있어야합니다.

그러나 힘이 16보다 큰 물체 (또는 물체의 합)가 주어지면 지구는 "깨질 것"입니다.

여기에 이미지 설명을 입력하십시오

노트

  • 지구의 지름은 밑면의 길이보다 1.5 배 더 큽니다.
  • 지구가 끊어지면 지구는 오른쪽에 있습니다. 바닥뿐만 아니라 바닥의 오른쪽에도 접합니다. 플라즈마 지구가 파손되었을 때 플라즈마가 없어야합니다 (물론 안전 기능은 물론 처음부터 어떻게 파산했는지에 대한 말은 없습니다).
  • 촬영을 제외한 모든 색상은 검은 색이어야하며 두께는 1 픽셀이어야합니다. 사용 (280), 채도 / 값 (100) - 플라즈마의 색상은 색상 (245)을 가지고 이 내가 무슨 말을하고 무슨 생각이없는 경우 "HSV"에서.

입력

STDIN / 명령 줄 인수 / 무엇이든 또는 함수 인수를 통해 입력 할 수 있습니다.

플라즈마 글로브의 밑면 길이 (벡터 그래픽을 사용하는 경우 축 포함)와 다음과 같은 객체 배열이 있어야합니다.

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

따라서 객체가 없으면 (16 줄의 첫 번째 그림 참조) 입력은

100,[]

다음 (하나의 대상, 검정력 5)의 경우 다음과 같습니다.

100,[[1.570796,5]]

마지막 예 :

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

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드 가 이깁니다.


@ MartinBüttner 기본 길이가 작아 질 때 이미지가 작아지지 않으면 축을 포함 시키십시오
— Stretch Maniac

두 번째 예에서. 두 번째 물체가 있었다면 -3/8π? 이 경우 다른 빔 중 하나와 정확히 겹칩니다. 이 경우 모든 빔을 회전시켜야합니까? 그렇다면 개별 빔이 객체로 유도 된 빔으로부터 얼마나 멀리 떨어져 있어야하는지 지정해야한다고 생각합니다.
— Martin Ender

1
.. 응답이 없는데도 보드의 "홀 2"열이 이미 채워져있는 이유는 무엇입니까?
— xem

2
이것을 더 잘 시각화하는 데 도움이됩니다 : inear.se/plasmaball
— CSᵠ

1
@ xem 음, 구멍 2에 대한 답변이 있으므로 게시하지 않는 이유는 무엇입니까? 이것은 반드시 순서대로 갈 필요는 없습니다 ...
— Stretch 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)을 읽어 입력을 가져옵니다. 나는 자유 빔이 겹치지 않을 때까지 이동하는 Camerons 아이디어를 사용했습니다.

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

파이썬, 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

파이썬 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


나는 이것을 테스트 할 수 없었지만 약간 골프를 쳤다
— 0WJYxW9FMN
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.