도넛 샵 ™


19

현금이 부족하여 세계에서 가장 큰 디지털 도넛 회사 인 Donut Shop ™의 도넛을 만들려고 서명했습니다. 대부분 도넛을 상상할 수있는 모든 크기로 판매하기 때문입니다.

이제는 오늘날 거래 표준이 매우 까다로워서 이러한 도넛을 만들려면 가능한 한 짧은 코드를 작성하여이를 생성 한 소스 코드를 패킷 외부에 배치해야합니다.

도전

4 개의 입력, 외부 링의 반경, 내부 링의 반경, 가능한 스프링 클 및 셀이 스프링 클을 가질 가능성이 주어지면 올바른 내외부 반경을 갖는 스프링 클에 덮인 도넛을 출력합니다.

  • 원하는 방식 (함수, 표준 입력, 프로그램 인수에 대한 인수) 및 순서에 상관없이 입력을받을 수 있습니다.
    • 뿌리는 뿌리 유형 당 1 문자의 형태로 제공됩니다
    • ^+*-뿌린 입력 4 뿌리의리스트되는 바와 같이, ^, +, *,-
    • 뿌릴 확률은 0과 1 사이의 부동 소수점 값으로 입력됩니다. 예 : 0.1,0.23
  • 출력을 stdout 또는 이와 동등한 것으로 인쇄해야합니다.
  • 뿌리는 도넛의 가장자리에있을 수 없습니다.
  • 각 유형의 뿌린 물은 각 세포에있을 가능성이 동일해야합니다.
  • 반지름은 1 셀 단위로 제공됩니다.
  • 내부 반경이 0 또는 외부 반경과 같으면 도넛에 링이 없다고합니다.
  • 두 반지름은 음이 아닌 정수입니다.
  • 도넛의 내부 및 외부 모서리는 해시 ( #)를 사용하여 표시해야합니다.
  • 반지름과 원의 중심이 주어지면 점이 원 안에 있는지 확인하는 테스트는 다음과 같습니다.

    (x-center)**2+(y-center)**2 < radius**2

출력이있는 입력 예

(외경, 내경, 뿌리, 뿌릴 확률)

  • 10, 4, "^ + *-", 0.1

         #########
        #         #
      ##  ++   *  *##
      #             #
     #       ^^ - *  #
    #      #####   ^  #
    #+    #     #     #
    #    #       #-   #
    #    #       #  * #
    #    #       #+   #
    #    #       #    #
    #^  +#       #    #
    #     #     #     #
    # *    #####      #
     #       +  -    #
      #        ^    #
      ##  ^  +     ##
        #       ^ #
         #########
    
  • 5, 2, ": ^ + *", 0.9

      #####
     #^^+ ^#
    #**###  #
    #:#   #^#
    #^#   #*#
    #:#   #*#
    #:+###* #
     # *:^:#
      #####
    

이것은 코드 골프입니다. 바이트 단위의 최단 답변


스파클이 균등하게 분포되어 있거나 균일하지 않은 분포도 있습니다.
Kishan Kumar

뿌리의 균등 분포가 있어야합니다.
Blue

어느 위치가 원의 경계에 해당하는지 사양에서 명확하지 않습니다.
Dennis

@Dennis 나는 그것을 바꾸지 않고 유일한 대답을 실격시키지 않을 것입니다.
블루

모양 10, 4과 모양 5, 2이 다르기 때문에 예제 출력이 이미 무효화되었습니다 . 대답에 대한 의견을 남기려고했지만 출력의 치수가 예제의 경우와 어떻게 달라야하는지 실제로 이해하지 못했다는 것을 깨달았습니다. 원래 아이디어를 변경하여 답변의 결과와 일치 시키려면 그것은 당신에게 달려 있지만, 도전은 경계를 그리는 방법을 명확하게 정의해야합니다.
Dennis

답변:


2

MATLAB, 231 바이트

여기에 MATLAB 솔루션 :

function g=z(r,q,s,p);[x,y]=meshgrid(1:2*r,1:2*r);d=(x-r).^2+(y-r).^2;h=size(d);e=zeros(h);e(d<r^2 & d>=q^2)=1;f=bwperim(e,4);k=rand(h);j=numel(s);l=changem(randi(j,h),s,1:j);g=char(e);g(:,:)=' ';g(k<=p)=l(k<=p);g(f)='#';g(~e)=' ';

몇 가지 예 :

>> z(10, 4, '^+*-', 0.1)

ans =

     #########      
    #         #     
  ##           ##   
  #    -       -#   
 #               #  
#   -  #####    ^ # 
#     #     #     # 
#   -#       #    # 
# *  #       #+   # 
#**  #       #    # 
#  * #       # -  # 
#+  *#       #    # 
#     #     #     # 
#      #####      # 
 #           ^   #  
  #     *       #   
  ##+          ##   
    #         #     
     #########      

>> z(5, 2, ':^+*', 0.9)

ans =

  #####   
 #++::*#  
#^^###++# 
# #   #+# 
#^#   #^# 
#*#   #*# 
#+:###^*# 
 #*:^+^#  
  #####   

>> z(20,6, 'erthhjjjjkjkk', 0.4)

ans =

             #############              
           ##jh  k  k  k  ##            
         ##  jjj    j khh   ##          
        #r kj h   k tjhj j    #         
      ##jk    t k  jh j       h##       
     #k       rre            k j #      
    # j   j j  j  khtkt jr     kj #     
    #  k   rk je    j      h   j  #     
   # j   k   k  jth e k j   j    j #    
  #h   h h e     t e ej  j  r k r e #   
  #    j   r  jh  jk     j  kk   j  #   
 #      k     k    h k  jk     k j   #  
 #  jjk   hh k hj  r  j  je rjj k j  #  
#  ek  j j jj  h#######          hke  # 
#hj      k j j #       #ke jhkt  jee  # 
#        jk  k#         # k    j   t  # 
#k        j  #           #khk  r     j# 
#   tj  j te #           # j  r j j   # 
#e   je   jhk#           #        t j # 
#jj    j  h  #           #     k jj e # 
# j j   hj j #           # jkt kjjjr e# 
#j k    e    #           #       r   k# 
#jj  k    ek #           # hj  j rtj  # 
#   k j   hk h#         #     j  h j  # 
#   h trt  jrht#       #   et        k# 
#j  ehjj      j #######ett  kh kjj k  # 
 #   r  jj    ekk jk    th k   kkk h #  
 #hj       khe kj hr  jj   kk  r j   #  
  #r t    k j  k r  j  jk k hh    jj#   
  #  kjj  h k j       j rrr j  r j  #   
   #j kej  jj    t       h  j   hh #    
    #  he   e  tje j  tjhkjk kj   #     
    #j kt rjk    j j  ee    rkj   #     
     #   jjr e  j jkt j   e  j  j#      
      ##k  thhjj je   kj  kh   ##       
        # hje  j     jj kk t j#         
         ## k       h     e ##          
           ## e jje   kkhj##            
             #############              

7

파이썬, 263 바이트

그래서 나는 비교적 쉬운 것처럼 보이지만 흥미롭고 자신에게 생각한 대답이없는 도전을 보았습니다.

흠 ... 내가 대답 할 수있는 유일한 사람이라면, 더 나은 대답이 필연적으로 나타날 때까지 이길 것입니다.

그래서 몇 분 동안 파이썬과 함께 앉아 커뮤니티의 제안에 따라 크기를 줄이기 위해 거친 초안을 만들었습니다.

from random import*
def D(O,I,S,P):
 a=range(-O,O+1);C=lambda x,y,z,n:(n-.5)**2<x*x+y*y<(z+.5)**2
 if I>=O:I=0
 for y in a:
  R=''
  for x in a:
   if C(x,y,O,O)+(C(x,y,I,I)&(I!=0)):R+='#'
   elif C(x,y,O,I)&(uniform(0,1)<P):R+=choice(s)
   else:R+=' '
  print(R)

위 예제의 경우

>>> D(10, 4, "^+*-", 0.1)
       #######       
     ##       ##     
    #         * #    
   #             #   
  #          + ^  #  
 # +               # 
 #   + +#####   -  # 
#      ##   ##    ^ #
#     ##     ##  *  #
#-    #       #     #
#     #       #  +  #
# +   #       #     #
#     ##     ##     #
#      ##   ##  *   #
 #+-    #####      # 
 #             - - # 
  #   -    -     +#  
   #      ^      #   
    # -    +    #    
     ## *     ##     
       #######       
>>> 

>>> D(5, 2, ":^+*", 0.9)
   #####   
  #*^:* #  
 #^::*:^*# 
#* :###+*:#
#:*#   #+:#
#::#   #+ #
#+:#   #*:#
#^^:###::^#
 # + :*^ # 
  # *:+*#  
   #####   
>>> 

이것이 가장 짧은 해결책이라는 것은 의심의 여지가 있지만, 독학 십대가 시간을 죽이려는 시도에는 꽤 효과적이라고 생각합니다. 이것은 가능한 한 작게 설계되었으므로 주석을 포함하지 않았고 모든 변수 이름에 대한 바로 가기를 가져 왔으므로이 프로그램은 가독성보다 유용성에 더 좋습니다.

내가 모르는 어떤 이유로이 코드를 사용하려면 IDLE에서 실행하고 명령을 입력하십시오.

D(Outer Radius, Inner Radius, Sprinkles, Chance of Sprinkle)

위에서 설명한 형식으로.


2
PPCG에 오신 것을 환영합니다! 이것은 좋은 첫 번째 대답이지만 개선의 여지가 많이 있습니다. 우선, 불필요한 공백을 제거하고 모든 변수를 단일 문자로 단축 abs하면 반경이 음이 아닌 것으로 보장되므로 호출 을 제거하는 것뿐만 아니라 호출 을 제거하는 데 도움이됩니다 . 또한 추가 포인터 에 대해서는 Python의 골프 팁을 확인하는 것이 좋습니다 . 다시 한번 환영합니다!
AdmBorkBork 2016 년

2
이것은 좋은 첫 번째 대답입니다!
고양이

1
팁 : 도넛이 아닌 함수 D를 호출하면 4자를 절약 N=False if I==0 or I>=O else True할 수 있고 not (I==0 or I>=O)함수 C는 람다 일 수 있습니다. 그러나 그것은 정말 좋은 첫 번째 항목입니다!
Mega Man

1
세미콜론을 사용하여 여러 줄을 같은 줄로 이동하면 들여 쓰기를 줄일 수 있습니다.
Maltysen

1
또한, P두 번 이상 사용하지 않는다고 생각 하므로 *100변수에 변수를 저장하는 것이 중요하지 않습니다 .
Maltysen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.