ASCII Art Pasta Grafiği


16

Amacınız bir ASCII sanat pasta grafiği çıkarmaktır. Bu kod golfüdür, bu nedenle en kısa program (karakterlerin değil kaynak kodun baytlarını sayarak) kazanır.

Harici yazılımlara veya API'lara izin verilmez. Her dilin yalnızca ana dilleri.

Dairenin başlangıç ​​açısı ve yönü (saat yönünde / saat yönünün tersine) önemli değildir. Çıktı oval görünebilir, çünkü bir karakterin yüksekliği her zaman genişliğinden daha üstündür.

"Arka plan" (pastanın solundaki veya sağındaki karakterler) boşluk olmalıdır.

Giriş olarak üç değişkeniniz var (lütfen kodu başlatmak için gönderin. Bu değişkenlerin başlatılması puanınıza dahil edilmez):

  • k: Karakter dizisi. Her karakter, pasta grafikte kullanılması gereken karakterdir
  • v: Şamandıra dizisi. Her karakterin yüzdesidir. Uzunluğu, uzunluğuna veşittir k. Elemanlarının toplamı her zaman 1.0
  • r : Tamsayı> 1. Pasta grafiğin yarıçapı.

Bonus: Eksik bir pasta çıkarırsanız puanınızın% 20'sini çıkarın ( (Σben=1|v|vben)<1 ).

Yanıtlar:


6

Python: 255 karakter -% 20 = 204

from math import*
def s(k,v,a):
 if not v:return ' '
 if a<v[0]:return k[0]
 return s(k[1:],v[1:],a-v[0])
def p(k,v,r):
 d=range(-r,r)
 for y in d:
  t=""
  for x in d:
   if x*x+y*y<r*r:
    a=atan2(y,x)/pi/2+.5
    t=t+s(k,v,a)
   else:t=t+" "
  print t

Örnekler:

>>> pie.p("ABCD", [0.25,0.125,0.125,0.125],8)

     AAABBBB    
   AAAAABBBBBB  
  AAAAAABBBBBCC
  AAAAAABBBBCCC
 AAAAAAABBBCCCCC
 AAAAAAABBCCCCCC
 AAAAAAABCCCCCCC
        DDDDDDDD
          DDDDDD
           DDDDD
            DDDD
             DD
              D


>>>


>>> pie.p(".$!@", [0.3,0.3,0.3,0.1],6)

   .....$$  
  ......$$$
 ......$$$$$
 ......$$$$$
 ......$$$$$
 @@@@@$$$$$$
 @@@@!!!$$$$
 @@@!!!!!$$$
 @!!!!!!!!!$
  !!!!!!!!!
   !!!!!!!  
>>>

Bu, işlevlerin bir lambda ile değiştirilmesiyle s=lambda k,v,a:' 'if not v else k[0]if a<v[0]else s(k[1:],v[1:],a-v[0])ve if ifadesini bir satıra koymak için noktalı virgül kullanılarak 231 bayta düşürülebilir.if x*x+y*y<r*r:a=atan2(y,x)/pi/2+.5;t=t+s(k,v,a)
noktalı

7

JavaScript, 259

d=r*2;M=Math;R=M.round;p=[];for(y=0;y<d;y++){p[y]=[];for(x=0;x<d;x++)p[y][x]=" "}t=0;i=-1;for(f=0;f<1;f+=1/(r*20)){if(f>t)t+=v[++i];a=M.PI*2*f;for(j=0;j<r;j++)p[R(M.sin(a)*j)+r][R(M.cos(a)*j)+r]=k[i]}s="";for(y=0;y<d;y++){for(x=0;x<d;x++)s+=p[y][x];s+="\n";}s

Firefox karalama alanında çalışır.

İlk örnek

Giriş:

var k = ["#", "+",  "$",  "X"];
var v = [0.2, 0.4, 0.15, 0.25];
var r = 10;

Çıktı :

       $$$XXXX      
     $$$$$XXXXXX    
    $$$$$$XXXXXXX   
   $$$$$$$XXXXXXXX  
  +$$$$$$$XXXXXXXXX 
  ++$$$$$$XXXXXXXXX 
 +++++$$$$XXXXXXXXXX
 ++++++$$$XXXXXXXXXX
 +++++++$$XXXXXXXXXX
 +++++++++XXXXXXXXXX
 ++++++++++#########
 +++++++++++########
 +++++++++++########
  ++++++++++####### 
  +++++++++++###### 
   ++++++++++#####  
    +++++++++####   
     ++++++++###    
       +++++++      

İkinci örnek:

Giriş:

var k = ["A",  "B", "C" ];
var v = [0.5, 0.25, 0.25];
var r = 5;

Çıktı :

   BBCCC  
  BBBCCCC 
 BBBBCCCCC
 BBBBCCCCC
 BBBBCCCCC
 AAAAAAAAA
 AAAAAAAAA
  AAAAAAA 
   AAAAA  
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.