डोनट शॉप ™


19

नकदी की कमी के कारण, आपने डोनट शॉप ™ के लिए डोनट्स बनाने के लिए साइन अप किया है, जो दुनिया की सबसे बड़ी डिजिटल डोनट कंपनी है, ज्यादातर इसलिए कि वे डोनट के हर आकार की कल्पना करते हैं।

अब, यह देखते हुए कि आजकल ट्रेडिंग मानक बहुत कठिन हैं, आपको इन डोनट्स को बनाने के लिए यथासंभव कम से कम एक कोड लिखना होगा ताकि जो सोर्स कोड उन्हें बनाया गया है उसे पैकेट के बाहर रखा जा सके।

चुनौती

4 आदानों को देखते हुए, बाहरी रिंग की त्रिज्या, आंतरिक रिंग की त्रिज्या, संभव स्प्रिंकल्स और एक सेल के होने की संभावना है, उन स्प्रिंकल में कवर एक डोनट आउटपुट करता है जिसमें सही आंतरिक और बाहरी त्रिज्या होती है।

  • यह इनपुट लिया जा सकता है कि आप कैसे चाहते हैं (किसी फ़ंक्शन, स्टडिन, प्रोग्राम आर्गुमेंट्स के तर्क) और किसी भी क्रम में।
    • स्प्रिंकल्स को 1 कैरेक्टर प्रति स्प्रिंकल टाइप के रूप में दिया जाएगा
    • ^+*-के रूप में छिड़क इनपुट 4 sprinkles की एक सूची होगा, ^, +, *,-
    • एक छिड़क का मौका 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

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

यह कोड गोल्फ है, बाइट्स जीत में सबसे छोटा जवाब


क्या स्पार्कल्स का समान वितरण होना चाहिए, या गैर-समान वितरण भी होगा।
किशन कुमार

स्प्रिंकल्स का समान वितरण होना चाहिए।
ब्लू '

यह मेरे लिए स्पष्ट नहीं है कि कौन सी स्थिति मंडलियों की सीमाओं के अनुरूप है।
डेनिस

@ डेनिस मैं इसे नहीं बदलूंगा और केवल एक ही उत्तर को अयोग्य घोषित कर दूंगा (यह भी एक अच्छा जवाब है) लेकिन मेरा मतलब एक सीमा के लिए है जहां सर्कल नॉन-सर्कल से मिले (बिंदु सर्कल में है, लेकिन सभी पड़ोसी नहीं हैं)
ब्लू

आपका उदाहरण उत्पादन पहले से ही काफी अमान्य कर देता है यह, के लिए आकार के बाद से 10, 4और 5, 2बहुत अलग हैं। मैं उत्तर पर एक टिप्पणी छोड़ने जा रहा था, लेकिन मुझे एहसास हुआ कि मुझे वास्तव में समझ नहीं आया कि आउटपुट को किसी भी आयाम के लिए कैसा दिखना चाहिए, लेकिन उदाहरणों में। यदि आप अपने मूल विचार को उत्तर से आउटपुट से बदलना चाहते हैं, तो यह आपके ऊपर है, लेकिन चुनौती को स्पष्ट रूप से परिभाषित करना चाहिए कि सीमाओं को कैसे आकर्षित किया जाए।
डेनिस

जवाबों:


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कॉल को हटाने में मदद मिलेगी , क्योंकि रेडी को गैर-नकारात्मक होने की गारंटी है। मैं अतिरिक्त पॉइंटर्स के लिए पायथन में गोल्फ के लिए टिप्स की जांच करने की भी सलाह देता हूं । फिर से, स्वागत है!
AdmBorkBork

2
यह एक अच्छा पहला जवाब है!
बिल्ली

1
सुझाव: समारोह डी और डोनट नहीं, तो इस 4 वर्ण की बचत होती है कॉल N=False if I==0 or I>=O else Trueकिया जा सकता है not (I==0 or I>=O)और समारोह सी एक लैम्ब्डा हो सकता है। लेकिन यह वास्तव में अच्छी पहली प्रविष्टि है!
मेगा मैन

1
अर्धविराम के साथ एक ही पंक्ति में कई कथनों को आगे बढ़ाकर आप इंडेंटेशन को बचा सकते हैं।
माल्टसेन

1
इसके अलावा, मुझे नहीं लगता है कि आप Pएक से अधिक बार उपयोग करते हैं , इसलिए इसका कोई मतलब नहीं है कि *100एक चर में बचत हो ।
माल्टेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.