9 лунок Code Golf - Kickoff


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 Art
  • Графический вывод
  • Игра жизни Конвея
  • царь горы
  • Колмогоровская сложность
  • Quines
  • Обработка изображений
  • математический
  • Классический код гольф.

Я действительно с нетерпением жду возможности увидеть!

Правила конкурса

  • Вы выберете 1 язык для всех лунок (в которых вы участвуете ... см. Пункт 4 для получения дополнительной информации).
  • Для всех отверстий - стандартные лазейки (все еще) не смешные.
  • Следующая проблема появится, когда я увижу, что достаточно заявок, предоставленных в течение разумного периода времени. Король горы, например, займет больше времени.
  • Вам не обязательно участвовать во всех лунках. Если вы находите дыру особенно сложной, у вас нет времени на это и т. Д., Вы получите в 2 раза больше очков, чем наименьшее количество баллов. Пожалуйста, не пользуйтесь этим правилом, оставив 1 ответ на сценарий гольфа с 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 и насыщенность / значение 100. Используйте это в поле «HSV», если вы не понимаете, о чем я говорю.

вход

Ввод может быть через STDIN / аргументы командной строки / что угодно или через аргументы функции.

Должно быть 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

В вашем втором примере. Что, если второй объект был в -3/8π? В этом случае он будет перекрываться точно с одним из других лучей. Нужно ли вращать все балки в таком случае? Если это так, я думаю, вам нужно указать, как далеко должны быть отдельные лучи от лучей, вызванных объектами.
Мартин Эндер

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), расположенный в папке данных эскиза, чтобы получить его ввод. Я использовал идею Кэмерона о смещении свободных лучей, пока они не перекрываются.

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

введите описание изображения здесь


Как это гарантирует, что объектно-индуцированные и свободные лучи никогда не перекрываются?
Мартин Эндер

Я немного поворачиваю равномерно распределенные лучи, пока не нахожу ориентацию, обеспечивающую расстояние лучей не менее 0,1 радиана
Камерон

Ах, да, я ожидал чего-то подобного. Спасибо за разъяснение!
Мартин Эндер

Np, я пытался решить, как максимизировать минимальное расстояние между любым вызванным объектом лучом и любым свободным лучом, но это, кажется, трудный вопрос
Камерон

1
A,B=zip(*C)следует сохранить несколько байтов
gnibbler

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

tesla2

(параметры = 100,[[1.72398,12],[5.23598,5]])

tesla3


Я не смог проверить это, но здесь немного поиграл
0WJYxW9FMN
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.