এএসসিআইআই ডুডলিং: একটি বাক্সে লেজার


31

কখনও কখনও আমি যখন ডুডলিং করছি, আমি একটি আয়তক্ষেত্র আঁকবো, কোনও কোনও কোণ থেকে একটি ত্রিভুজ দিয়ে শুরু করব এবং তারপরে যখনই আমি আয়তক্ষেত্রের কোনও দিকটি আঘাত করি তখন কেবল এটি "প্রতিবিম্বিত" করে একটি লাইন আঁকুন। আমি আয়তক্ষেত্রের অন্য কোণে আঘাত না করা পর্যন্ত আমি এটি চালিয়ে যাচ্ছি (এবং আশা করি যে আমার আয়তক্ষেত্রের অনুপাতটি যুক্তিযুক্ত ছিল না;))। এটি কোনও বাক্সে চকচকে লেজারের পথ সন্ধান করার মতো। আপনি ASCII শিল্পের সাথে এর ফলাফল উত্পাদন করতে পারেন।

উদাহরণস্বরূপ, প্রস্থ 5এবং উচ্চতার একটি বাক্স বিবেচনা করুন 3। আমরা সর্বদা উপরের বাম কোণে শুরু করব। #চিহ্ন বাক্সের সীমানা। নোট করুন যে প্রস্থ এবং উচ্চতা অভ্যন্তরীণ মাত্রা বোঝায়।

#######    #######    #######    #######    #######    #######    #######
#\    #    #\    #    #\   \#    #\  /\#    #\  /\#    #\/ /\#    #\/\/\#
# \   #    # \  /#    # \  /#    # \/ /#    # \/ /#    #/\/ /#    #/\/\/#
#  \  #    #  \/ #    #  \/ #    # /\/ #    #\/\/ #    #\/\/ #    #\/\/\#
#######    #######    #######    #######    #######    #######    #######

চ্যালেঞ্জ

বাক্সের (ধনাত্মক) প্রস্থ এবং উচ্চতা প্রদত্ত, আপনার লেজারটি সন্ধানের চূড়ান্ত ফলাফল পাওয়া উচিত। আপনি STDIN (বা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট, ফাংশন আর্গুমেন্ট এবং ফলাফলটি STDOUT (বা নিকটতম বিকল্প) এর মাধ্যমে আউটপুট, বা ফাংশন রিটার্ন মান বা তর্ক দিয়ে মাধ্যমে কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন।

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

আউটপুট এর যে কোনও লাইনে অবশ্যই সাদা বা স্পেস স্পেস থাকতে হবে না। আপনি allyচ্ছিকভাবে একটি একক পেছনের নতুন লাইন আউটপুট করতে পারেন।

আপনার অবশ্যই স্থান /, \এবং ব্যবহার করতে হবে# পরীক্ষার কেসগুলি ঠিক যেমন প্রদর্শিত হয়েছে তা পুনরুত্পাদন করতে হবে।

পরীক্ষার মামলা

2 2
####
#\ #
# \#
####

3 2
#####
#\/\#
#/\/#
#####

6 3
########
#\    /#
# \  / #
#  \/  #
########

7 1
#########
#\/\/\/\#
#########

1 3
###
#\#
#/#
#\#
###

7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########

22 6
########################
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
# /\  /\  /\  /\  /\  /#
#/  \/  \/  \/  \/  \/ #
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
########################

1
সম্ভবত একটি সুন্দর ফলো-আপ প্রশ্ন, একবার এটি একবার চলে গেলে, এই চ্যালেঞ্জটি নির্বিচারে আকারের বাক্সগুলি এবং সূচনা পয়েন্টগুলি দিয়ে করা।
715

@ সানচাইজস আমি আসলে এটি বিবেচনা করেছি (এবং এটি এখনও পোস্ট করতে পারে) তবে আমি প্রত্যাবর্তনের সাথে এই সিদ্ধান্ত নিয়ে সিদ্ধান্ত নিয়েছিলাম যে কেউ একটি সুস্পষ্ট সূত্র নিয়ে আসতে পারেন। আমি একাধিক প্রারম্ভিক পয়েন্টগুলিও বিবেচনা করছিলাম যা Xক্রসিংয়ের জন্য প্রয়োজনীয়। সম্ভবত পরের বার. ;)
মার্টিন এন্ডার

2
প্রাসঙ্গিক: i.imgur.com/6tXrIfw.webm
orlp

এটি কোনও অ্যানিমেশন পয়েন্টের জন্য উপযুক্ত। "অ্যানিমেট 1 বিস্ফোরণ (এক স্ল্যাশ) 1 চক্র / অন্তহীন)"
মার্টিজন

উত্তর:


20

পাইথ, 43 41 39 বাইট

K*\#+2QKVvzp<*QXX*dyivzQN\\_hN\/Q\#\#)K

এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক । নিম্নলিখিত ক্রমে সংখ্যাগুলি ইনপুট করুন: উচ্চতা প্রথম লাইন, প্রস্থের দ্বিতীয় লাইন।

আইস্যাককে ধন্যবাদ, যিনি দুটি বাইট সংরক্ষণে সহায়তা করেছিলেন।

ব্যাখ্যা:

আমার সমাধান লেজারটি ট্রেস করে না, এটি একটি সাধারণ প্যাটার্ন ব্যবহার করে যাতে জিসিডি অন্তর্ভুক্ত থাকে। যদি m, nবাক্সের মাত্রা থাকে তবে আসুন d = gcd(m, n)। প্যাটার্নটির আকার হুবহু 2*d x 2*d

যেমন পুনরাবৃত্তি প্যাটার্ন 7 5

#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########

হয়

\/
/\

( gcd(7, 5) = 1, প্যাটার্নের আকারটি হ'ল 2 x 2)

এবং জন্য পুনরাবৃত্তি প্যাটার্ন 22 6

########################
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
# /\  /\  /\  /\  /\  /#
#/  \/  \/  \/  \/  \/ #
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
########################

হয়

\  /
 \/ 
 /\
/  \

( gcd(22, 6) = 2, প্যাটার্নের আকারটি হ'ল 4 x 4)

আমার দ্রষ্টব্য প্রতিটি লাইনের জন্য নিম্নলিখিত জিনিসগুলি করে: এটি কেবল প্যাটার্নের একটি লাইন উত্পন্ন করে, কয়েকবার পুনরাবৃত্তি করে এবং শেষে এটি কাটা যাতে এটি বাক্সে ফিট হয়।

K*\#+2QK   implicit: Q is the second input number (=width)
K          K = 
 *\#+2Q        "#" * (2 + Q)
       K   print K (first line)

Vvzp<*QXX*dyivzQN\\_hN\/Q\#\#)K  implicit: vz is the first input number (=height)
VQ                               for N in [0, 1, ..., vz-1]:
           ivzQ                             gcd(vz,Q)
          y                               2*gcd(vz,Q)
        *d                           string with 2*gcd(vz,Q) space chars
       X       N\\                   replace the Nth char with \
      X           _hN\/              replace the -(N+1)th char with /
    *Q                               repeat Q times
   <                   Q           only use the first Q chars
  p                     \#\#       print "#" + ... + "#"
                            )    end for
                             K   print K

যেহেতু Xসমর্থন স্ট্রিং থেকে "বরাদ্দ", আপনি পরিবর্তন করতে পারেন m\ করতে *dএবং সরাতে s
isaacg

@ আইসাকগ শুভ কল। আমি শীঘ্রই *\ পরিবর্তে ব্যবহারের কথা ভেবেছিলাম m\ , তবে এটিকে ফেলে দিন কারণ এটির আকার একই। পরিবর্তনশীল dএবং অপ্রয়োজনীয় সম্পর্কে ভাবেন নি s
জাকুবে

11

সি, 256 বাইট

f(w,h){int i,j,x=1,y=1,v=1,u=1;char b[h+2][w+3];for(i=0;i<w+3;i++)for(j=0;j<h+2;j++)b[j][i]=!i||!j||i>w||j>h?i>w+1?0:35:32;while((x||y)&&(x<=w||y<=h))v=x&&w+1-x?v:(x-=v,-v),u=y&&h+1-y?u:(y-=u,-u),b[y][x]=v/u<0?47:92,x+=v,y+=u;for(i=0;i<h+2;i++)puts(b[i]);}

আমি সম্ভবত এটি ২০০ এর অধীনে পেতে পারি এবং আমি পরে একটি ব্যাখ্যা যুক্ত করব, তবে এর পরিবর্তে আমার কিছু কাগজ থাকতে পারে hours


27
ভুয়া ইন্টারনেট পয়েন্টগুলি একটি শিক্ষামূলক ডিগ্রির চেয়ে বেশি মূল্যবান, আমি এটি সম্পর্কে নিশ্চিত।
অ্যাডাম ডেভিস


5

জে, 85 বাইট

যাক g = gcd(w,h)। ফাংশন একটি উপাদান পূরণ w/g by h/gসঙ্গে ম্যাট্রিক্স g by gটাইলস, জমিদারি /'s এবং \' তাহাদের তির্যক এবং অ্যান্টি-তির্যক মধ্যে গুলি। ফলস্বরূপ 4D অ্যারে 2D এক (বাক্সের অভ্যন্তরে) এর মধ্যে ছড়িয়ে দেওয়া হয় এবং #এর সাথে ঘিরে থাকে । ( 0 1 2 3পরিবর্তে সংখ্যাগুলি ব্যবহৃত হয় [space] / \ #এবং সংখ্যাগুলি অক্ষরে পরিবর্তিত হয়))

অভ্যন্তরীণ স্থানাঙ্কের একটি সরাসরি অবস্থান ভিত্তিক গণনা সম্ভবত কিছুটা সংক্ষিপ্ত সমাধান পেতে পারে।

' \/#'echo@:{~3,.~3,.3,~3,,$[:,[:,"%.0 2 1 3|:((,:2*|.)@=@i.@+.){~[:(2&|@+/&:i.)/,%+.

ব্যবহার:

   6 (' \/#'echo@:{~3,.~3,.3,~3,,$[:,[:,"%.0 2 1 3|:((,:2*|.)@=@i.@+.){~[:(2&|@+/&:i.)/,%+.) 22
########################
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
# /\  /\  /\  /\  /\  /#
#/  \/  \/  \/  \/  \/ #
#\  /\  /\  /\  /\  /\ #
# \/  \/  \/  \/  \/  \#
########################

এটি এখানে অনলাইনে চেষ্টা করুন।


0

ডেসমাস ক্যালকুলেটর - আরও জ্ঞান সহায়তা করার জন্য প্রতিযোগিতামূলক নয়

এটি অনলাইন চেষ্টা করুন!

ইনপুট:

h as height of box, with 0-indexing
w as width of box, with 0-indexing

Intermediates:

Let b = gcd(h,w),
Let c = |b-h%2b| Or |b-mod(h,2b)|

সূত্র, সংক্ষিপ্ত:

(|b-(x+y)%2b|-c)(|b-(x-y)%2b|-c)=0

আউটপুট:

x as x position, 0-indexed, where the ball will land when released
y as y position, 0-indexed, where the ball will land when released

কিভাবে এটা কাজ করে:

(|b-(x+y)%2b|-c)*(|b-(x-y)%2b|-c)=0
                ^ OR operation - |b-(x+y)%2b|-c=0 or |b-(x-y)%2b|-c=0
|b-(x+/-y)%2b|-c = 0
|b-(x+/-y)%2b| = c
|b-(x+/-y)%2b| = c means (b-(x+/-y))%2b = + or -c 
b-(x+/-y)%2b = +/- c -> b +/- c = (x+/-y)%2b -> (x+/-y) = n*2*b + b +/- c 
Where n is integer.  This will force patterns to repeat every 2b steps in x and y.  
Initial pattern n=0: (x +/- y) = b +/- c -> y = +/- x + b +/- c
In the x positive and y positive plane only, these correspond to lines of positive and 
negative slope, set at intercept b, offset by c on either side.

প্রোগ্রাম চূড়ান্ত মানদণ্ড পূরণ করতে ব্যর্থ হয় - বাক্স এবং লাইনের ASCII শিল্প তৈরি করে, তাই অন্যদের চ্যালেঞ্জটি সম্পূর্ণ করতে সহায়তা করার জন্য তথ্যের জন্য আমি অপ্রতিযোগিতামূলক হিসাবে জমা দিচ্ছি। নোট করুন যে সি = 0 বা সি = বি যখন ডেসমোসকে কাজ করার জন্য, 0.01 এর একটি ছোট অফসেট ফ্যাক্টর চালু করা হয়েছিল, কারণ ডেসমোসের মনে হয় [0, বি এর পরিবর্তে (0, বি) এর মোড (এ, বি) এর সীমা রয়েছে )

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.