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.