현금이 부족하여 세계에서 가장 큰 디지털 도넛 회사 인 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
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
이것은 코드 골프입니다. 바이트 단위의 최단 답변
답변
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##
#############
답변
파이썬, 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)
위에서 설명한 형식으로.