9 Delikli Kod Golf - Başlangıç


12

Zaten 9 Delikli bir Meydan Okuma (ve burada başka bir tane ) vardı, ama bu geçen yıl soooo idi. Ayrıca, sadece 2 aydır kaldım (sonsuza kadar görünmesine rağmen). Ve oldukça farklı.

Lider Kurulu: (delikler için ağırlıklandırma henüz oluşturulmamıştır)

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

Diğer Delikler:

Son zamanlarda buralarda yavaş oldu, bu yüzden (sınırlı da olsa) deneyimimde gördüğüm her şeyin dağılmasını içeren bir sonraki 9 delikli golf sahasını başlatmak için buradayım. Bu şunları gerektirecektir:

  • Ascii Sanatı
  • Grafik Çıktı
  • Conway'in Yaşam Oyunu
  • tepenin Kralı
  • Kolmogorov karmaşıklığı
  • Quines
  • Görüntü işleme
  • Matematik
  • Klasik kod golf.

Gerçekten ne yapabileceğinizi görmek için sabırsızlanıyorum!

Yarışma Kuralları

  • Tüm delikler için 1 dil seçeceksiniz (katıldığınız ... daha fazla bilgi için 4. maddeye bakın).
  • Tüm delikler için - standart boşluklar (hala) komik değil.
  • Makul bir süre için yeterli sayıda başvuru olduğunu gördüğümde bir sonraki zorluk ortaya çıkacaktır. Örneğin tepenin kralı daha uzun sürecek.
  • Sen yok deliklerin her katılmaya var. Özellikle zorlu bir delik bulursanız, bunu yapmak için zamanınız yok, vb. En düşük puanın 2 katı kadar puan alırsınız. Lütfen 12 karakterli 1 golfscript cevabı bırakarak ve 24 puan alarak bu kuraldan yararlanmayın.

puanlama

  • Puanınız tüm deliklerden alınan puanların sonucuna dayanır
  • En düşük puan kazanır (gerçek golf başına)
  • Skor tablosu bu sayfanın en üstüne yerleştirilecektir

Hiçbir sorunun yinelenmediğinden, tüm soruların nesnel ölçütlere sahip olduğundan, iyi yazılmış olduğundan ve hepsinin tüm yarışma bağlamında (nispeten) eşit ağırlığa sahip olduğundan emin olmak için elimden geleni yapacağım.

Ancak, başarısız olduğumda lütfen sabırlı olun.

Ve daha fazla uzatmadan, ilk meydan okuma!

Plazma Küre

Bir plazma lambası herkesin en sevdiği oyuncak:

resim açıklamasını buraya girin

Senin görevin bir tane çizmek.

Bir taban çizmelisiniz:

resim açıklamasını buraya girin

bir küre:

resim açıklamasını buraya girin

Bir tesla şey (?)

resim açıklamasını buraya girin

Ve elbette, serin plazma filizleri:

resim açıklamasını buraya girin

Ancak, elinizi bir plazma küresinin (veya Wikipedia'nın söylediği gibi iletken bir nesnenin) yanına koyduğunuzda, plazmayı çeker .

Dünyanız bunu yansıtmalıdır.

Kantitatif olarak koymak için, kürenizin maksimum 16 çekimi vardır (yukarıdaki resme bakın). Yerkürenin yüzeyindeki bir "nesne" (radyan cinsinden bir açıyla verilir), "iletken güç", yani çektiği ışın miktarını içerir. Böylece 5 güce sahip bir nesne, 5 ışını (5 kalınlığında tek bir çizgi) çekecek ve 11'i dünyanın geri kalanına eşit olarak yayılacak :

resim açıklamasını buraya girin

Not bu
1. plazma üzerinde orta kalıntılarında siyah daire
, bu örnekte, açı pi / 2 olacağını 2..

Birden fazla iletken nesneniz olabilir ve bu durumda sürgünlerin eşit aralıklarla yerleştirilmesi gerekmez. Bununla birlikte, nispeten aralıklıdırlar. Örneğin, 1 nesne pi / 4 güç 5 açısında ve diğeri 5pi / 3 güç 3 açısında 2 nesne için uygundur:

resim açıklamasını buraya girin

Sürgünlerin (plazma) uç noktalarının her birini görebilmelisiniz.

Bununla birlikte, gücü 16'dan büyük olan bir nesne (veya nesnelerin toplamı) verildiğinde, dünya "kırılacaktır":

resim açıklamasını buraya girin

notlar

  • Dünyanın çapı, kare olan tabanın uzunluğundan 1.5 kat daha büyüktür.
  • Dünya kırıldığında, dünya sağ tarafta. Tabanın yanı sıra tabanın sağ tarafına teğettir. Plazma küresi kırıldığında plazma olmamalıdır (neden? Güvenlik özellikleri elbette! İlk etapta nasıl kırıldığı hakkında hiçbir kelime yok.)
  • Sürgünler dışındaki her şeyin rengi siyah ve 1 piksel kalınlığında olmalıdır. Kullanım 280 ve doygunluk / değer 100. - plazmanın renk tonu 245 sahiptir bu sen bahsediyorum ben hiçbir fikrim yok eğer "HSV" altında.

Giriş

Giriş, STDIN / komut satırı argümanları / her neyse veya işlev bağımsız değişkenleri aracılığıyla olabilir.

2 giriş olmalıdır - plazma küresinin tabanının uzunluğu (vektör grafikleri kullanılıyorsa bir eksen ekleyin) ve bunun gibi bir nesne dizisi:

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

Yani hiçbir nesne için (16 satırlı ilk resme bakın) giriş

100,[]

Bir sonraki (bir nesne, güç 5) için:

100,[[1.570796,5]]

Son örnek için:

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

Bu kod golf, bayt en kısa kod kazanır.


@ MartinBüttner Taban uzunluğu küçüldüğünde görüntü küçülmezse, bir eksen ekleyin
Stretch Maniac

İkinci örneğinizde. Ya ikinci nesne varken -3/8π? Bu durumda tam olarak diğer kirişlerden biriyle çakışır. Böyle bir durumda tüm kirişleri döndürmek zorunda mıyız? Eğer öyleyse, tek tek ışınların nesneye bağlı ışınlardan ne kadar uzakta olması gerektiğini belirtmeniz gerektiğini düşünüyorum.
Martin Ender

1
er .... neden cevap olmasa bile tahta sütun "delik 2" zaten dolu?
xem

2
Bunu daha iyi görselleştirmek için küçük bir yardım: inear.se/plasmaball
CSᵠ

1
@xem um, delik 2'ye cevaplar var, neden onları göndermiyorsun? Bu sırayla gitmek zorunda değil ...
Stretch Maniac

Yanıtlar:


4

2-717 karakter işleniyor

İşleme sanatçılar için yapılmış bir dil olduğundan ve çok acemi bir programcı olduğum için, bu zorlukların çoğunda çok iyi bir şey yapmayı beklemiyorum. Bununla birlikte, işlemde bir şeyler çizmenin ne kadar basit olduğunu gerçekten seviyorum ve onunla biraz daha oynamak için anlam ifade ettim, bu yüzden bu zorluklar ilginç olmalı.

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

Eminim bu önemli ölçüde golf edilebilir ve daha fazla zamanım olduğunda bunu yapmaya çalışabilirim, ama şimdilik bundan memnunum.

girişini almak için çizimin veri klasöründe bulunan bir dosyada (f.txt) okur. Camerons'u serbest kirişleri üst üste gelmeyene kadar kaydırma fikrini kullandım.

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

Örnekler:

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

plazma küre 1

100,[]

plazma küre 2

100, [[1.72398,12], [5.23598,5]]

plazma küre 3

işleme almak burada


3

Python, 878 karakter

Hiçbir şekilde bu iyi golf, ama bu delik için bir cevap görmek istedim.

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

Ve bazı örnek çıktılar

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

resim açıklamasını buraya girin

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

resim açıklamasını buraya girin

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

resim açıklamasını buraya girin


Bu, nesneye bağlı ve serbest ışınların asla örtüşmemesini nasıl sağlar?
Martin Ender

Kirişlerin en az 0,1 radyan aralıklı olmasını sağlayan bir yönelim bulana kadar eşit aralıklı kirişleri az miktarda
Cameron

Ah, öyle bir şey bekliyordum. Açıkladığınız için teşekkürler!
Martin Ender

Np, herhangi bir nesne kaynaklı ışın ve herhangi bir serbest ışın arasındaki minimum mesafeyi nasıl en üst düzeye çıkaracağımı çözmeye çalışıyorum, ancak zor bir soru gibi görünüyor
Cameron

1
A,B=zip(*C)birkaç bayt kurtarmalı
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')

Parametrelerini komut satırı argümanından okur.

Örnek görüntüler:

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

tesla

(parametreler = 100,[])

tesla2

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

tesla3


Bunu test edemedim, ama burada biraz golf
0WJYxW9FMN
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.