ডোনাট শপ ™


19

নগদ অর্থের অভাবে আপনি বিশ্বের বৃহত্তম ডিজিটাল ডোনাট সংস্থা ডোনট শপ for এর জন্য ডোনাট তৈরির জন্য সাইন আপ করেছেন, বেশিরভাগ কারণেই তারা প্রতিটি আকারের ডোনাট কল্পনাপ্রসূতভাবে বিক্রি করে।

এখন, ট্রেডিং স্ট্যান্ডার্ড যেহেতু আজকাল খুব শক্ত, আপনি এই ডোনাটগুলি তৈরি করার জন্য যতটা সম্ভব সংক্ষিপ্ত কোড লিখতে হবে যাতে তাদের তৈরি করা উত্স কোডটি প্যাকেটের বাইরের অংশে স্থাপন করা যায়।

চ্যালেঞ্জ

চারটি ইনপুট দেওয়া হয়েছে, বাইরের আংটির ব্যাসার্ধ, অভ্যন্তরের আংটির ব্যাসার্ধ, সম্ভাব্য ছিটানো এবং একটি ছিটিয়ে থাকা কোনও কোষের সম্ভাবনা, সেই ছিটিয়ে থাকা একটি ডোনাট আউটপুট দেয় যা সঠিক অভ্যন্তরীণ এবং বাহ্যিক রেডিয়ি রয়েছে।

  • আপনি কীভাবে ইচ্ছা (ইনপুটটি কোনও ফাংশন, স্টিডিন, প্রোগ্রাম আর্গুমেন্ট) এবং যে কোনও ক্রমে গ্রহণ করা যেতে পারে The
    • স্প্রিংলগুলি প্রতিটি স্প্রিংল টাইপের জন্য 1 টি চরিত্রের আকারে দেওয়া হবে
    • ^+*-যেমন ছিটিয়ে ইনপুট 4 সিঁচিত একটি তালিকা হবে, ^, +, *,-
    • একটি ছিটিয়ে সম্ভাবনা 0 এবং 1 এর উদাঃ মধ্যে একটি ফ্লোটিং পয়েন্ট মান হিসাবে প্রবেশ করানো হবে: 0.1,0.23
  • আপনাকে আউটপুটটি স্টাডআউট বা সমমানের প্রিন্ট করতে হবে।
  • ছিটানো ডোনাটের কিনারে থাকতে পারে না।
  • প্রতিটি ধরণের ছিটিয়ে প্রতিটি কোষে থাকার সম্ভাবনা সমান সম্ভাবনা থাকতে হবে।
  • রেডিয়ি 1-সেল ইউনিটে দেওয়া হয়।
  • যদি অভ্যন্তরীণ ব্যাসার্ধ 0 বা বাহ্যিক ব্যাসার্ধের সমান হয় তবে ডোনাটের কোনও রিং নেই বলে জানা যায়।
  • উভয় রাশিই অ-নেতিবাচক পূর্ণসংখ্যা হবে।
  • ডোনের অভ্যন্তরীণ এবং বাহ্যিক প্রান্তগুলি হ্যাশগুলি ব্যবহার করে প্রতিনিধিত্ব করতে হবে ( #)
  • একটি বিন্দুটি একটি বৃত্তে রয়েছে কিনা তা পরীক্ষা করে একটি ব্যাসার্ধ দেওয়া হয় এবং বৃত্তের কেন্দ্র হয়:

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

আউটপুট সহ উদাহরণস্বরূপ ইনপুট

(বাইরের ব্যাসার্ধ, অভ্যন্তরের ব্যাসার্ধ, ছিটিয়ে দেওয়া, ছিটিয়ে দেওয়ার সম্ভাবনা)

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

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

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

এটি কোড গল্ফ, বাইট জেতে সংক্ষিপ্ত উত্তর


স্পার্কলসের সমান বিতরণ হওয়া উচিত, বা অ-ইউনিফর্ম বিতরণও করবে।
কিশান কুমার

ছিটিয়ে একটি সমান বিতরণ করা উচিত।
নীল

কোন অবস্থানগুলি চেনাশোনাগুলির সীমানার সাথে সামঞ্জস্যপূর্ণ তা আমার পক্ষে স্পষ্ট নয়।
ডেনিস

@ ডেনিস আমি বরং এটিকে পরিবর্তন করব না এবং একমাত্র উত্তরটিকে অযোগ্য ঘোষণা করব না (এটিও খুব সুন্দর উত্তর) তবে আমি বোঝাতে চাইছি এমন একটি সীমানা যেখানে বৃত্তটি নন-সার্কিটের সাথে মিলিত হয় (পয়েন্টটি বৃত্তে থাকে তবে সমস্ত প্রতিবেশী নয়)
ব্লু

আপনার উদাহরণস্বরূপ আউটপুট এটি ইতিমধ্যে অকার্যকর করেছে, কারণ আকারগুলি 10, 4এবং 5, 2বেশ আলাদা। আমি উত্তরের উপর একটি মন্তব্য করতে যাচ্ছি, তবে আমি বুঝতে পেরেছিলাম যে আউটপুটটি কোনও মাত্রার জন্য দেখতে কেমন হওয়া উচিত তবে উদাহরণগুলির মতো really আপনি যদি উত্তরটি থেকে আউটপুটটির সাথে আপনার মূল ধারণাটি পরিবর্তন করতে চান তবে এটি আপনার উপর নির্ভর করে, তবে চ্যালেঞ্জটি স্পষ্টভাবে সংজ্ঞায়িত করা উচিত যে কীভাবে কোনওভাবে সীমানা আঁকতে হবে।
ডেনিস

উত্তর:


2

ম্যাটল্যাব, 231 বাইট

এখানে একটি মতলব সমাধান:

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)
   #####   
  #*^:* #  
 #^::*:^*# 
#* :###+*:#
#:*#   #+:#
#::#   #+ #
#+:#   #*:#
#^^:###::^#
 # + :*^ # 
  # *:+*#  
   #####   
>>> 

আমি অত্যন্ত সন্দেহ করি যে এটি সবচেয়ে সংক্ষিপ্ততম সমাধান, তবে আমি মনে করি যে এটি একটি স্ব-শিক্ষিত কিশোরের সময়কে হত্যা করার চেষ্টা করার জন্য এটি বেশ ভালভাবে কার্যকর হয়েছিল। যেহেতু এটি যতটা সম্ভব ছোট হওয়ার জন্য ডিজাইন করা হয়েছিল, তাই আমি মন্তব্যগুলি অন্তর্ভুক্ত করি না এবং প্রতিটি পরিবর্তনশীল নামের উপর শর্টকাট নিয়েছি এবং যেমন, এই প্রোগ্রামটি পাঠযোগ্যতার চেয়ে ব্যবহারের পক্ষে বেশি।

আপনি যদি আমার অজানা কারণে এই কোডটি ব্যবহার করতে চান তবে কেবল এটি আইডিএল-এ চালান এবং কমান্ডটি টাইপ করুন

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

উপরে বর্ণিত বিন্যাসে।


2
পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি ভাল প্রথম উত্তর, তবে উন্নতির জন্য অনেক জায়গা রয়েছে। প্রারম্ভিকদের জন্য, অপ্রয়োজনীয় সাদা স্থান সরানো এবং একক বর্ণগুলিতে সমস্ত পরিবর্তনগুলি সংক্ষিপ্ত করা absকলটি সরিয়ে ফেলতে সহায়তা করবে , যেহেতু রেডিয়াই অ-নেতিবাচক হওয়ার গ্যারান্টিযুক্ত। আমি অতিরিক্ত পয়েন্টারগুলির জন্য পাইথনে গল্ফ করার টিপসও পরীক্ষা করে দেখার পরামর্শ দিই । আবার, স্বাগতম!
অ্যাডমবর্কবার্ক

2
এটি একটি সুন্দর প্রথম উত্তর!
বিড়াল

1
টিপ:, ফাংশন D এবং ডোনাট নেই, এই 4 অক্ষর সংরক্ষণ করুন N=False if I==0 or I>=O else Trueহতে পারে not (I==0 or I>=O)এবং ফাংশন সি একটি ল্যামডা হতে পারে। তবে এটি সত্যিই প্রথম প্রথম প্রবেশ!
মেগা ম্যান

1
আপনি সেমিকোলনগুলির সাথে একই লাইনে একাধিক বিবৃতি স্থানান্তরিত করে ইনডেন্টেশনে সংরক্ষণ করতে পারেন।
মাল্টেসেন

1
অতিরিক্ত হিসাবে, আমি মনে করি না আপনি Pএকবারের বেশি ব্যবহার করেন , সুতরাং কোনও *100ভেরিয়েবলের মধ্যে সঞ্চয় করার কোনও মানে নেই ।
মাল্টেসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.