Donut Shop ™


19

Nakit sıkıntısı çekerek, dünyanın en büyük dijital donut şirketi olan Donut Shop ™ için çörek yapmak için kaydoldunuz, çünkü bunlar akla gelebilecek her tür donut satıyorlar.

Günümüzde ticaret standartlarının çok zor olduğu göz önüne alındığında, bu donutları oluşturmak için mümkün olduğunca kısa bir kod parçası yazmanız gerekir, böylece onları oluşturan kaynak kodu paketin dışına konabilir.

Meydan okuma

4 giriş, dış halkanın yarıçapı, iç halkanın yarıçapı, olası sprinkler ve bir hücrenin serpme şansı göz önüne alındığında, doğru iç ve dış yarıçaplara sahip olan serpintilerle kaplı bir çörek çıkarır.

  • Giriş istediğiniz şekilde (bir işleve, stdin'e, program bağımsız değişkenlerine) ve herhangi bir sırayla alınabilir.
    • Sprinkles, sprinkle tipi başına 1 karakter şeklinde verilecektir
    • ^+*-serpin girişi 4 fog listesi olacağı gibi, ^, +, *,-
    • Bir tutam şansı 0 ile 1 örn arasında bir kayan nokta değeri olarak girilecektir: 0.1,0.23
  • Çıkışı stdout veya eşdeğerine yazdırmanız gerekir.
  • Sprinkler çöreklerin kenarlarında olamaz.
  • Her bir serpme tipinin, her bir hücrede olma olasılığı aynı olmalıdır.
  • Yarıçaplar 1 hücreli birimlerde verilmiştir.
  • İç yarıçap 0 VEYA dış yarıçapa eşitse, çörekte halka olmadığı söylenir.
  • Her iki yarıçap da negatif olmayan tamsayılar olacaktır.
  • Çörek iç ve dış kenarları karma ( #) kullanılarak temsil edilmelidir
  • Yarıçap ve dairenin merkezi göz önüne alındığında, bir noktanın bir daire içinde olup olmadığını görmek için bir test:

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

Çıktı ile örnek giriş

(dış yarıçap, iç yarıçap, serpme, serpme şansı)

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

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

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

Bu kod golf, bayttaki en kısa cevap kazanıyor


Kıvılcımların eşit dağılımı varsa veya eşit olmayan dağıtım da yapılacaktır.
Kishan Kumar

Sprinkles eşit bir şekilde dağıtılmalıdır.
Mavi

Hangi pozisyonların dairelerin sınırlarına karşılık geldiği spesifikasyondan net değil.
Dennis

@Dennis değiştirmemeyi tercih ediyorum ve tek cevabı diskalifiye etmeyi tercih ederim (bu da güzel bir cevaptır), ancak bir dairenin daire ile bir araya gelmediği bir noktaya geldim (nokta daire içinde ama tüm komşular değil)
Blue

İçin şekiller beri senin örnek çıkışı zaten hemen hemen Geçersiz Kılmaktadır onu, 10, 4ve 5, 2oldukça farklıdır. Cevap üzerine bir yorum bırakacaktım, ancak çıktının örneklerdeki boyutlar dışında herhangi bir boyut için nasıl görünmesi gerektiğini gerçekten anlamadığımı fark ettim. Orijinal fikrinizi cevaptan elde edilen çıktıyla eşleştirmek istiyorsanız, bu size bağlıdır, ancak zorluk sınırların her iki şekilde nasıl çizileceğini açıkça tanımlamalıdır.
Dennis

Yanıtlar:


2

MATLAB, 231 bayt

İşte bir matlab çözümü:

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)=' ';

Bazı örnekler:

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

Python, 263 bayt

Bu yüzden nispeten kolay ama aynı zamanda ilginç görünen ve kendi kendime düşündüğüm cevapları olmayan bir zorluk gördüm:

Hmm ... Cevabı veren tek kişi ben olsam, daha iyi bir cevap kaçınılmaz olarak ortaya çıkana kadar kazanacağım.

Bu yüzden birkaç dakika Python ile oturdum ve topluluğun önerilerinin yardımıyla boyutunu azaltmak için ince ayar yaptığım kaba bir taslak buldum.

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)

Yukarıdaki örnekler için bu,

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

ve

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

Bunun mümkün olan en kısa çözüm olduğundan şüpheliyim, ancak kendi kendine öğretilen bir gencin zamanı öldürme girişimi için oldukça iyi çalıştığını düşünüyorum. Bu olabildiğince küçük olacak şekilde tasarlandığından, yorumları dahil etmedim ve her değişken adı hakkında kısayollar aldım ve bu nedenle, bu program kullanılabilirlik için kullanılabilirlikten daha fazla.

Bu kodu herhangi bir nedenle benden habersiz kullanmak isterseniz, sadece IDLE'de çalıştırın ve komutu yazın

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

yukarıda açıklanan biçimde.


2
PPCG'ye Hoşgeldiniz! Bu iyi bir ilk cevap, ancak iyileştirilmesi gereken çok şey var. Yeni başlayanlar için, gereksiz boşlukların kaldırılması ve tüm değişkenlerin tek harfe kısaltılması abs, yarıçapların negatif olmadığı garanti edildiğinden çağrının kaldırılmasına yardımcı olur . Ayrıca ek işaretçiler için Python golf için ipuçları kontrol etmenizi öneririz . Tekrar hoş geldiniz!
AdmBorkBork

2
Bu güzel bir ilk cevap!
kedi

1
İpucu: fonksiyon D olup Donut bu 4 karakter kazandırır Çağrı N=False if I==0 or I>=O else Trueolabilir not (I==0 or I>=O)ve fonksiyon C lambda olabilir. Ama bu gerçekten iyi bir ilk giriş!
Mega Man

1
birden çok ifadeyi noktalı virgülle aynı satıra taşıyarak girinti tasarrufu yapabilirsiniz.
Maltysen

1
Buna ek olarak, ben bir Pkereden fazla kullandığınızı sanmıyorum , bu yüzden *100bir değişken kaydediyor nokta yok .
Maltysen
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.