아스키 아트 파이 차트


16

당신의 목표는 ASCII 아트 파이 차트를 출력하는 것입니다. 이것은 코드 골프이므로 문자가 아닌 소스 코드의 바이트 수를 계산하는 가장 짧은 프로그램이 승리합니다.

외부 소프트웨어 나 API는 허용되지 않습니다. 각 언어의 모국어 만

원의 시작 각도와 방향 (시계 방향 / 시계 반대 방향)은 중요하지 않습니다. 문자의 높이가 항상 너비보다 우수하기 때문에 출력이 타원형으로 보일 수 있습니다.

"배경"(파이의 왼쪽 또는 오른쪽 문자)은 공백이어야합니다.

입력으로 세 가지 변수가 있습니다 (초기화 코드를 게시하십시오. 이러한 변수의 초기화는 점수에 포함되지 않습니다).

  • k: 문자 배열. 각 문자는 원형 차트에서 사용해야하는 문자입니다.
  • v: 수레 배열. 각 문자의 백분율입니다. 의 길이는의 길이와 v같습니다 k. 요소의 합은 항상 1.0입니다
  • r : 정수> 1. 원형 차트의 반지름입니다.

보너스 : 불완전한 파이를 출력 할 수있는 경우 점수의 20 %를 뺍니다 ( (나는=1|V|V나는)<1

답변:


6

파이썬 : 255 자-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

예 :

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

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

이는 람다와 함수들로 대체함으로써 231 바이트로 감소 될 수있는 s=lambda k,v,a:' 'if not v else k[0]if a<v[0]else s(k[1:],v[1:],a-v[0])한 줄에 if 문 넣어 세미콜론 사용if x*x+y*y<r*r:a=atan2(y,x)/pi/2+.5;t=t+s(k,v,a)
익명 없음 종신형

7

자바 스크립트, 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 스크래치 패드에서 작동합니다.

첫 번째 예

입력 :

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

출력 :

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

두 번째 예 :

입력 :

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

출력 :

   BBCCC  
  BBBCCCC 
 BBBBCCCCC
 BBBBCCCCC
 BBBBCCCCC
 AAAAAAAAA
 AAAAAAAAA
  AAAAAAA 
   AAAAA  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.