Golf 9 Lubang Kode - Kickoff

12

Sudah ada Tantangan 9 Lubang (dan satu lagi di sini ), tapi itu soooo tahun lalu. Dan selain itu, saya baru sekitar 2 bulan (meskipun sepertinya selamanya). Dan itu sangat berbeda.

Papan Pemimpin: (perhatikan bahwa pembobotan untuk lubang belum ditetapkan)

+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|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 |
+---------------+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

Lubang lainnya:

Akhir-akhir ini sangat lambat di sini, jadi saya di sini untuk memulai lapangan golf 9 hole berikutnya, yang melibatkan semua yang saya lihat di sini dalam pengalaman saya (walaupun terbatas). Ini akan memerlukan:

  • Seni Ascii
  • Output Grafis
  • Permainan Kehidupan Conway
  • Raja Bukit
  • Kompleksitas kolmogorov
  • Quines
  • Pengolahan citra
  • Matematika
  • Golf kode klasik.

Saya sangat menantikan untuk melihat apa yang dapat Anda lakukan!

Peraturan Persaingan

  • Anda akan memilih 1 bahasa untuk semua lubang (yang Anda ikuti ... lihat poin 4 untuk info lebih lanjut).
  • Untuk semua lubang - celah standar (masih) tidak lucu.
  • Tantangan berikutnya akan muncul ketika saya melihat bahwa ada cukup pengiriman yang diberikan dalam jumlah waktu yang wajar. Raja bukit, misalnya, akan lebih lama.
  • Anda tidak harus berpartisipasi dalam semua lubang. Jika Anda menemukan lubang yang sangat menantang, tidak punya waktu untuk melakukannya, dll, Anda akan menerima 2 kali lebih banyak poin daripada skor terendah. Tolong jangan mengambil keuntungan dari aturan ini dengan meninggalkan 1 jawaban skrip golf dengan 12 karakter dan mengambil 24 sebagai skor.

Mencetak gol

  • Skor Anda didasarkan pada kulminasi skor dari semua lubang
  • Kemenangan skor terendah (sesuai golf asli)
  • Papan peringkat akan ditempatkan di bagian atas halaman ini

Saya akan mencoba yang terbaik untuk memastikan bahwa tidak ada pertanyaan yang duplikat, semua pertanyaan memiliki kriteria objektif, ditulis dengan baik, dan bahwa mereka semua memiliki bobot yang relatif sama dalam konteks seluruh kontes.

Namun, harap bersabar ketika saya gagal.

Dan, tanpa basa-basi lagi, tantangan pertama!

Globe Plasma

Sebuah lampu plasma adalah mainan favorit semua orang:

masukkan deskripsi gambar di sini

Tugas Anda untuk menggambar satu.

Anda harus menggambar basis:

masukkan deskripsi gambar di sini

sebuah bola dunia:

masukkan deskripsi gambar di sini

Tesla thingy (?)

masukkan deskripsi gambar di sini

Dan, tentu saja, tunas plasma keren:

masukkan deskripsi gambar di sini

Namun, ketika Anda meletakkan tangan di dekat bola plasma (atau benda konduktif seperti yang dikatakan Wikipedia), itu menarik plasma .

Bola dunia Anda harus mencerminkan hal itu.

Untuk membuatnya secara kuantitatif, globe Anda memiliki maksimum 16 pemotretan (lihat gambar di atas). "Objek" di permukaan bola bumi (diberikan oleh sudut dalam radian) akan mengandung "daya konduktif", yaitu, jumlah sinar yang menarik. Jadi objek dengan kekuatan 5 akan menarik 5 balok (satu garis dengan ketebalan 5) meninggalkan 11 untuk menyebar secara merata di antara bagian dunia yang lain :

masukkan deskripsi gambar di sini

Perhatikan bahwa
1. lingkaran hitam di tengah tetap di atas plasma
2. bahwa dalam contoh ini, sudut akan menjadi pi / 2.

Anda mungkin memiliki lebih dari satu objek konduktif, dan dalam kejadian itu, tidak diperlukan rebung dengan jarak yang sama. Namun, mereka relatif berjarak. Misalnya, ini ok untuk 2 objek, 1 pada sudut pi / 4 daya 5 dan lainnya pada sudut 5pi / 3 daya 3:

masukkan deskripsi gambar di sini

Anda harus dapat melihat masing-masing titik ujung pucuk (plasma).

Namun, mengingat objek (atau jumlah objek) dengan kekuatan lebih besar dari 16, bola dunia akan "pecah":

masukkan deskripsi gambar di sini

Catatan

  • Diameter bola dunia 1,5 kali lebih besar dari panjang pangkalan, yang merupakan bujur sangkar
  • Ketika bola dunia pecah, bola dunia ada di sisi kanan. Itu bersinggungan dengan sisi kanan pangkalan serta tanah. Seharusnya tidak ada plasma ketika bola dunia plasma rusak (mengapa? Fitur keamanan tentu saja! Tidak ada kata tentang bagaimana itu pecah di tempat pertama.)
  • Warna segalanya kecuali tunas harus hitam, dan tebal 1 piksel. Warna plasma memiliki rona 245 - 280, dan saturasi / nilai 100. Gunakan ini di bawah "HSV" jika Anda tidak tahu apa yang saya bicarakan.

Memasukkan

Input dapat melalui STDIN / baris perintah args / apa pun atau melalui argumen fungsi.

Harus ada 2 input - panjang dasar globe plasma (termasuk sumbu jika menggunakan grafik vektor), dan berbagai objek seperti ini:

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

Jadi tanpa objek (lihat gambar pertama dengan 16 garis) input akan

100,[]

Untuk yang berikutnya (satu objek, kekuatan 5) adalah:

100,[[1.570796,5]]

Untuk contoh terakhir:

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

Ini adalah kode-golf, jadi kode terpendek dalam byte menang.

Regangkan Maniac
sumber
@ MartinBüttner Jika gambar tidak bertambah kecil ketika panjang dasar semakin kecil, sertakan sumbu
Stretch Maniac
Dalam contoh kedua Anda. Bagaimana jika objek kedua berada di -3/8π? Dalam hal ini akan tumpang tindih persis dengan salah satu balok lainnya. Apakah kita harus memutar semua balok dalam kasus seperti itu? Jika demikian, saya pikir Anda perlu menentukan seberapa jauh jarak masing-masing balok dari balok yang diinduksi objek.
Martin Ender
1
er .... mengapa kolom "lubang 2" dari papan sudah diisi bahkan jika tidak ada jawaban?
xem
2
Sedikit bantuan untuk memvisualisasikan hal ini dengan lebih baik: inear.se/plasmaball
CSᵠ
1
@xem um, ada jawaban untuk lubang 2, jadi mengapa tidak mempostingnya? Ini tidak harus berjalan secara berurutan ...
Stretch Maniac

Jawaban:

4

Memproses 2 - 717 karakter

Karena pemrosesan adalah bahasa yang dibuat untuk seniman, dan saya adalah programmer yang sangat pemula, saya tidak berharap untuk melakukannya dengan baik pada banyak tantangan ini. Yang sedang berkata, saya sangat suka betapa sederhananya untuk menggambar hal-hal dalam pemrosesan, dan saya telah bermaksud untuk bermain-main dengannya lagi, jadi tantangan ini harus menarik.

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);}

Saya yakin ini bisa turun jauh dan saya dapat mencoba melakukan itu ketika saya memiliki lebih banyak waktu, tetapi untuk sekarang saya senang dengan itu.

membaca dalam file (f.txt) yang terletak di folder data sketsa untuk mendapatkan inputnya. Saya menggunakan gagasan Camerons untuk menggeser balok gratis hingga tidak tumpang tindih.

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);
}

Contoh:

100, [[0,785398,3], [5,23598,5]]

bola plasma 1

100, []

plasma orb 2

100, [[1,72398,12], [5,23598,5]]

bola plasma 3

dapatkan pemrosesan di sini

bubalou
sumber
3

Python, 878 karakter

Bukan berarti golf ini baik, tapi saya ingin melihat jawaban untuk lubang ini.

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

Dan beberapa output sampel

Q(100,[[pi/4,6],[-4.2*pi/8,1]])

masukkan deskripsi gambar di sini

Q(100,[[0.785398,10],[5.23598,7]])

masukkan deskripsi gambar di sini

Q(100,[[pi/4,3],[pi/2,3],[3*pi/2,2],[5*pi/4,2]])

masukkan deskripsi gambar di sini

Cameron
sumber
Bagaimana hal ini memastikan bahwa balok yang diinduksi objek dan bebas tidak pernah tumpang tindih?
Martin Ender
Saya memutar balok yang sama jaraknya dengan jumlah kecil sampai saya menemukan orientasi yang memastikan balok setidaknya 0,1 radian berjarak terpisah
Cameron
Ah, benar, aku mengharapkan sesuatu seperti itu. Terima kasih telah mengklarifikasi!
Martin Ender
Np, saya sudah mencoba untuk memecahkan bagaimana memaksimalkan jarak minimal antara setiap objek yang diinduksi objek dan setiap balok bebas, tetapi sepertinya itu adalah pertanyaan yang sulit
Cameron
1
A,B=zip(*C)harus menyimpan beberapa byte
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')

Bunyinya parameternya dari argumen commandline.

Contoh gambar:

(parameter = 100,[[0.785398,5],[5.23598,3]])

tesla

(parameter = 100,[])

tesla2

(parameter = 100,[[1.72398,12],[5.23598,5]])

tesla3

pelaku diet
sumber
Saya tidak dapat menguji ini, tetapi golf
0WJYxW9FMN