এএসসিআইআই আর্ট থ্রিডি স্ট্রিটভিউ


29

ইনপুট:

  1. আপনি পূর্ণসংখ্যার একটি সিরিজ পাবেন (স্টিডিন বা প্রম্পটের মাধ্যমে খাওয়ানো)।
  2. এই সিরিজের প্রতিটি জোড়া পূর্ণসংখ্যার একটি বিল্ডিংয়ের প্রশস্ততা [বৈধ ব্যাপ্তি: 1..10] এবং উচ্চতা [বৈধ ব্যাপ্তি: 0..10]
  3. ধরে নিন ইনপুটটি সুগঠিত হবে।

নমুনা ইনপুট (দ্বিতীয় লাইনটি কেবল প্রদর্শনের উদ্দেশ্যে)

1 2 1 1 1 0 2 4 1 3 1 2 2 1
WHWHWHWHWHWHWH

সংশ্লিষ্ট নমুনা আউটপুট:

                 ______
               / ______ / |
              | | | __
              | | / __ / |
     __ | | | | __
   / __ / | | | | / __ / |  
  | | | __ | | | | | ______
  | | / __ / | | | | | / ______ / |
  | | | |: _ | | | | | |
  | _O_ | _o_ | / __ | _o _____ | _o_ | _o_ | _o _____ | /
  -------------------------------------  
 - - - - - - - - - - - - - - 
-------------------------------------

নিয়মাবলী:

ভবন

  1. একটি মৌলিক বিল্ডিং ব্লক এর মতো দেখায় (1 ডাব্লু, 1 এইচ)
   __
 / __ / | (এই প্রশ্নটিতে বেস কিউবটি ধার করা হয়েছে:
| | | http://stackoverflow.com/questions/1609702/code-golf-playing-cubes)
| ___ | /
  1. আমাদের দৃষ্টিভঙ্গি (আহুম) ~ থ্রি তাই প্রতিবেশী বিল্ডিংগুলি অন্যের কিছু অংশ লুকিয়ে রাখতে পারে। বিল্ডিংগুলি 'যৌক্তিকভাবে' বাম থেকে ডানে রেন্ডার করা হয়।

  2. প্রথম বিল্ডিংয়ের আগে এটির বাকি দুটি স্থান রয়েছে left

  3. বেস ঘনক্ষেত্রের মাত্রাগুলির সাথে WIDTH এবং উচ্চতা প্রয়োগ করে আপনি প্রতিটি বিল্ডিং রেন্ডার করেন (প্রদত্ত নমুনা আউটপুটটি একবার দেখুন)। রেফারেন্সের জন্য: বাম থেকে ডান 'প্রাচীর' পর্যন্ত অক্ষরের সংখ্যা (ডাব্লু> 1 দিয়ে একটি বিল্ডিংয়ের জন্য): (ডাব্লু * 5) - (ডাব্লু -1)।

  4. উচ্চতা সহ 0 টি বিল্ডিংগুলির একটি দরজা রয়েছে (যা চরিত্র দ্বারা চিত্রিত হয়েছে oএবং 'নীচে' সারিটির 'বাম' প্রাচীর থেকে দুটি অক্ষরে অবস্থিত)।

রাস্তাটি:

  1. রাস্তায় তিনটি অংশ রয়েছে যা আমরা 'শীর্ষ', 'মাঝারি' এবং 'নীচে' বলব।
  2. 'শীর্ষ' অংশ এবং 'নীচে' অংশটি 'শীর্ষ' অংশটি দুটি স্পেসের আগে রয়েছে তার বাইরেও অভিন্ন।
  3. মাঝের অংশটি একটি স্থানের আগে এবং নিম্নলিখিত প্যাটার্নটির পুনরাবৃত্তি নিয়ে গঠিত:
    '-'
  4. সম্মিলিত বিল্ডিংয়ের মোট প্রস্থ দ্বারা দৈর্ঘ্য নির্ধারণ করা হবে: রাস্তার সবচেয়ে ডান দিকটি 'শেষ' বিল্ডিংয়ের 'ডান' দেয়ালের অবস্থানের সাথে মিলে যায়।

বিজয়ী:

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

উইন্ডোজ, গাড়ি বা পথচারীদের জন্য ক্যালেন্ডার বোনাস পয়েন্ট।

স্পেসিফিকেশন পরিষ্কার না হলে মন্তব্য নির্দ্বিধায়!


@ ব্যবহারকারীর অজানা: নিয়মে প্রকৃতপক্ষে একটি ছোট টাইপ ছিল। এখনই স্থির করা উচিত, ধন্যবাদ!
ক্রিস্টোফিড

চলাচলের সাদা স্থানের অনুমতি আছে? আপনি উদাহরণে কিছু আছে বলে মনে হয়, তাই আমি তাই অনুমান।
পিটার টেলর

@ পিটার টেলর: শ্বেত স্পেস অনুসরণ করার অনুমতি দেওয়া হয়েছে।
ক্রিস্টোফিড

রাস্তার অংশ 3, এটি '-  '(দুটি স্থান সহ) হওয়া উচিত ? সম্পাদনা : আহ, দুটি স্পেস দেখায় না: পি। আপনি ASCII 255 (নন-ব্রেকিং স্পেস, নামপ্যাডে ALT + 255) ব্যবহার করে বা আমার মন্তব্যটি অনুলিপি করে এবং এখানে আটকানোর মাধ্যমে একাধিক স্পেস প্রদর্শন করতে পারেন। অর ... আপনি পরিবর্তে কেবল এটি বলতে পারেন ' - ':) এর পুনরাবৃত্তি :)
মেল্লামোকব

দেখে মনে হচ্ছে উচ্চতার বৈধ পরিসীমাটি আসলে [ 0 ..10]। এছাড়াও আপনি কি বলতে but you must not enforce thisচান 3)? আইএমও, কোনও ধারণা অনুমান করা যায় এটি যদি আপনার স্কোর বাড়িয়ে দেয়। সুতরাং আমি কোডটি লিখতে পারি যা কেবলমাত্র মোট প্রস্থ 80 এর চেয়ে কম হলে আমি কাজ করতে পারি যদি আমি একটি কম অক্ষর গণনা বের করতে পারি। উদাহরণস্বরূপ, 80 প্রস্থের ডিসপ্লে বাফার অ্যারেতে আউটপুট লেখার ফলে এটি কোনও উচ্চতর প্রস্থে ক্রাশ হবে। আপনি যদি কোনও প্রস্থ সমর্থিত চান, তবে অনুমান করবেন না - আপনার উভয়ই থাকতে পারে না: পি
মেল্লামোকব

উত্তর:


10

হাস্কেল, 396 টি অক্ষর

w&h=take h((3," /|"++(w-3)#'_'++"o_|"):c[(3,"| |"++(w-1)#s++"|")])++[(2,"|/ "++(w-2)#'_'++"/"),(0,"  "++(w-2)#'_')]++c[(0,w#s)]
p(w,h)=r.z take[sum w+k|k<-[1..]]$([c"-",s:c"-  ","  "++c"-"]++).map r.foldl(z(%))((2+maximum h)#(5#s))$z(&)w h
main=interact$unlines.p.q.map read.words;y%(d,x)=x++drop d y;q(x:y:z)=(4*x:a,2*y:b)where(a,b)=q z
q x=(x,x);(#)=replicate;c=cycle;r=reverse;z=zipWith;s=' '

উদাহরণ আউটপুট:

$ runghc Streetview.hs <<< "1 1 1 3 1 2 1 0 2 4 2 2 1 3 3 1"
                     ______                          
                   /______ /|                        
         __       |       | |        __              
       /__ /|     |       | |      /__ /|            
      |   | |__   |       | |_____|   | |            
      |   |/__ /| |       |/______|   | |            
     _|   |   | | |       |       |   | |__________  
   /__|   |   | | |       |       |   |/__________ /|
  |   |   |   | |_|       |       |   |           | |
  |_o_|_o_|_o_|/__|_o_____|_o_____|_o_|_o_________|/
  -------------------------------------------------
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-------------------------------------------------

5
কোডগলফ.সে আপনার সাম্প্রতিক হ্যাশেল জমাটি হ্যাকেল সম্পর্কে কিছুটা বেশি শিখার জন্য আমার আগ্রহ বাড়িয়ে তুলেছে। সমাধানগুলি সংক্ষিপ্ত আকারে হলেও তারা এখনও যথেষ্ট 'পঠনযোগ্য' ইমো রয়েছেন।
ক্রিস্টোফেড

8

পাইথন, ৪১৫ টি চর

I=eval(raw_input().replace(' ',','))
X=I[::2]
Y=I[1::2]
W=4*sum(X)+6
H=2*max(Y)+2
A=W*H*[' ']
p=W*H-W+2
for w,h in zip(X,Y):i=2*h;j=4*w;q=p-i*W;r=p+j;s=q+j;A[p+1:q+1:-W]=A[p+2:q+2:-W]=i*' ';A[p:q:-W]=A[r:s:-W]=A[r+2-W:s+2-W:-W]=i*'|';A[p+1:r]='_'*(j-1);A[q+2:s]=A[q+3-W:s+1-W]='_'*(j-2);A[q+1]=A[s+1]=A[r+1]='/';A[p+2]='_o'[h>0]; p+=j
A[W-1::W]='\n'*H
D=(W-5)*'-'
print''.join(A)+'  '+D+'\n'+(' - '*W)[:W-4]+'\n'+D

বিল্ডিংয়ের সমস্ত অংশ আঁকতে স্লাইস ব্যবহার করে।

$ echo "1 2 1 1 1 0 2 4 1 3 1 5 2 1" | ./streetview.py 
                             __          
                           /__ /|        
                 ______   |   | |        
               /______ /| |   | |        
              |       | |_|   | |        
              |       |/__|   | |        
     __       |       |   |   | |        
   /__ /|     |       |   |   | |        
  |   | |__   |       |   |   | |______  
  |   |/__ /| |       |   |   |/______ /|
  |   |   | |_|       |   |   |       | |
  |_o_|_o_|/__|_o_____|_o_|_o_|_o_____|/ 
  -------------------------------------
 -  -  -  -  -  -  -  -  -  -  -  -  -
-------------------------------------

+1 খুব সুন্দর। সমাধানটি ইতিমধ্যে বেশ গল্ফযুক্ত দেখাচ্ছে ;-)
ক্রিস্টোফেড

2
Lost p + = j` (@ দীর্ঘ লাইনের শেষে) -এ একটি হারিয়ে যাওয়া জায়গা রয়েছে। আপনি যদি এটিকে গণনা করেছেন কিনা তা নিশ্চিত নন ;-)
ক্রিস্টোফেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.