স্বয়ংক্রিয় গৃহ-নির্মাতা


15

স্বয়ংক্রিয় ঘর নির্মাণ ন্যানোবোটগুলি বানোয়াট করা হয়েছে এবং সেগুলি কোড করা আপনার কাজ।

এখানে ইনপুট দ্বারা তৈরি ঘর 7 4 2

  /-----/|
 /     / |
|-----|  |
|     |  |
|     | /
|_____|/

ইনপুটটি এমন একটি স্ট্রিং যা বাড়ির মাত্রা যুক্ত করে।

7 প্রস্থ হয়।

|_____|

---7---

4 উচ্চতা হয়।

|
|
|
|

2 গভীরতা হয়

 / 
/

এই ইনপুট দেওয়া হয়েছে, আপনি ঘর তৈরি করতে পারেন?

আপনার কোডটি যথাসম্ভব ছোট হওয়া উচিত যাতে এটি রোবোটগুলিতে ফিট করতে পারে।

মন্তব্য

ইনপুট হিসাবে আপনাকে দেওয়া হবে সবচেয়ে ছোট মাত্রা 3 2 2। আপনার প্রোগ্রামটি এর চেয়ে কম মাত্রার সাথে কিছু করতে পারে 3 2 2

Testcases

3 2 10

          /-/|
         / / |
        / / /
       / / /
      / / /
     / / /
    / / /
   / / /
  / / /
 / / /
|-| /
|_|/


এটি কিউব নয়, তাই আমি মনে করি আমার প্রশ্নটি যথেষ্ট আলাদা। যদিও অক্ষর পরিবর্তন করতে পারে।

2
আরও টেস্টকেস দয়া করে?
ফাঁস নুন

1
এছাড়াও, এটি একটি দুর্দান্ত প্রশ্ন। আমি মনে করি না যে আমাদের এখনও একটি আছে।
আর

1
আউটপুট কি জন্য হবে 3 2 10?
ডাউনগোট

উত্তর:


3

পাইথন 2, 128 বাইট

w,h,d=input();i=d
while-i<h:c='|/'[i>0];print' '*i+c+'- _'[(d>i!=0)+(h+i<2)]*(w-2)+c+' '*min(d-i,h-1,w+1,h-1+i)+'/|'[d-i<h];i-=1

সারি সারি প্রিন্ট করে। সারি সূচকগুলি iথেকে নিচে গণনা করা dহয় -h+1


আপনি প্রতিস্থাপন 3 বাইট ছাঁটা পারেন ' '*min(d-i,h-1,w+1,h-1+i)সঙ্গে(' '*d)[max(0,i):h-1+i]
RootTwo

1

রুবি, 145 বাইট

স্ট্রিংগুলির একটি তালিকা ফেরত দেয়। তালিকার প্রতিটি উপাদান একটি লাইনের সাথে মিলে যায়। যদি কোনও মাল্টলাইন স্ট্রিংটি অবশ্যই ফিরে আসতে হয়, *$/শেষ বন্ধনীটির ঠিক আগে যুক্ত করতে 3 বাইট যুক্ত করুন ।

->w,h,d{s=' ';(0..m=d+h-1).map{|i|(i<d ?s*(d-i)+?/:?|)+(i<1||i==d ??-:i==m ??_ :s)*(w-2)+(i<d ? ?/:?|)+(i<h ?s*[i,d].min+?|:s*[m-i,h-1].min+?/)}}

1

জাভাস্ক্রিপ্ট (ES6), 169 বাইট

(w,h,d)=>[...Array(d+h--)].map((_,i)=>` `[r=`repeat`](i<d&&d-i)+(c=`|/`[+(i<d)])+` _-`[i&&i-d?h+d-i?0:1:2][r](w-2)+c+` `[r]((i<d?i:d)-(i>h&&i-h))+`|/`[+(i>h)]).join`\n`

যেখানে \nএকটি আক্ষরিক নিউলাইন চরিত্র উপস্থাপন করে। ব্যাখ্যা:

(w,h,d,)=>                          Parameters
[...Array(d+h--)].map((_,i)=>       Loop over total height = d + h
 ` `[r=`repeat`](i<d&&d-i)+         Space before roof (if applicable)
 (c=`|/`[+(i<d)])+                  Left wall/roof edge
 ` _-`[i&&i-d?h+d-i?0:1:2][r](w-2)+ Space, floor or eaves between walls
 c+                                 Right wall/roof edge (same as left)
 ` `[r]((i<d?i:d)-(i>h&&i-h))+      Right wall
 `|/`[+(i>h)]                       Back wall/floor edge
).join`                             Join everything together
`

সম্পাদনা: 2 জ্যাকেট ধন্যবাদ বাইট সংরক্ষণ করা হয়েছে।


,r='repeat'সামনের দিক থেকে অপসারণ করার চেষ্টা করুন এবং প্রথমটির [r]সাথে প্রতিস্থাপন করুন[r='repeat']

@ জরিখ ধন্যবাদ, আমি প্রথমে ছিলাম ,r=(n,c=` `)=>c.repeat(n)এবং যখন আমি ট্যাক পরিবর্তন করলাম তখন পুনর্বিন্যাসের সম্ভাবনাটি আমি এড়িয়ে গেলাম।
নিল

1

পাইথন 224 301 297 বাইট

(এখন 1x1x1 সহ সমস্ত বাক্সের জন্য কাজ করে)

l,w,h=input()
s,r,d,v,R,x=" "," - ","/","|",range,(l*3-1)
print s*(w+1)+r*l
for n in R(w):
    if n<h:e,c=v,n
    else:e,c=d,h
    print s*(w-n)+d+s*x+d+s*c+e
if h-w>=1:e,c=v,w
elif w>h:e,c=d,h
else:e,c=d,w
print s+r*l+s*c+e
for n in R(h):
    if h>w+n:e,c=v,w
    else:e,c=d,h-n-1
    print v+s*x+v+s*c+e
print r*l

ব্যাখ্যা:

তিনটি স্থানে লাগে: l (দৈর্ঘ্য), এইচ (উচ্চতা), ডাব্লু (প্রস্থ)।

যদি আমরা কয়েকটি দম্পতি নমুনা বাক্সগুলি দেখি তবে আমরা ব্যবধানগুলিতে নিদর্শনগুলি খুঁজে পেতে পারি।

3 x 4 x 3 বাক্সের জন্য, আমরা বিভাগগুলির মধ্যে ব্যবধানের প্রতিনিধিত্ব করতে সংখ্যাগুলি ব্যবহার করব।

1234 -  -  - 
123/12345678/|
12/12345678/1|
1/12345678/12|
1 -  -  - 123|
|12345678|123/
|       8|12/
|       8|1/
|       8|/
 -  -  - 

উপরের সারিতে 4 টি স্পেস রয়েছে যা ডাব্লু + 1। পরবর্তী তিনটি লাইনে ডাব্লু - (1 * x) রয়েছে। এক্স লাইন হচ্ছে।

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

এখানে একটি 5 এক্স 5 এক্স 2 বাক্সের জন্য একটি নমুনা দেওয়া হয়েছে।

 123 -  -  -  -  -
 12/12345678912345/|
 1/              /1|
 1 -  -  -  -  - 12|
 |              |12|
 |              |12|
 |              |12|
 |              |1/
 |12345678912345|/
  -  -  -  -  -

আপনি সম্ভবত গল্ফ করা উচিত।
আর

এছাড়াও, আপনি হয় একটি নির্ধারণ w,h,l=input()বা এটি একটি ফাংশন করা প্রয়োজন।
আর

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! আমাদের সমস্ত সাবমিশনগুলির প্রয়োজন হয় সম্পূর্ণ প্রোগ্রাম যা STDIN থেকে পড়ে এবং STDOUT এ লিখতে বা ফাংশনগুলি যা আর্গুমেন্ট এবং রিটার্ন মানগুলি স্বীকার করে। আমাদের পোস্টিংয়ের সময় বিজয়ী হওয়ার জন্য গুরুতর প্রতিযোগী হওয়ার জন্য সাবমিশনগুলিও প্রয়োজন, যার অর্থ আমরা কোড গল্ফের জন্য অসম্পূর্ণ বা আংশিকভাবে অমঙ্গলযুক্ত সমাধানের অনুমতি দিই না।
অ্যালেক্স এ।

আমি যখন এই কোডটি এখানে চালাচ্ছি তখন আউটপুটটিতে অতিরিক্ত স্থান রয়েছে।
জেমস

নিবন্ধন করুন এটি h, ডাব্লু এবং এল এর নির্দিষ্ট প্যাটার্নের জন্য অ্যাকাউন্ট করে নি তাই বিবৃতি দিলে আমি কিছু যুক্ত করেছি।
জোশক

0

পাইথন 3.5, 328 326 313 305 295 248 বাইট

( ত্রৈমাসিক বিবৃতিগুলির আকার হ্রাস সম্পর্কে টিপসটির জন্য কেভিন লউকে ধন্যবাদ ! )

def s(w,h,d):R,M=range,max;S,V,L=' |/';O=w-2;D=d-M(0,d-h);Q=h-M(0,h-d);print('\n'.join([S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]+[V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)]))

এর ক্রমে 3 সংখ্যার হিসাবে ইনপুট নেয় width, height, depth। আমি যেখানেই পারছি সময়ের সাথে সাথে আরও গল্ফ দেবে।

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

ব্যাখ্যা:

এই ব্যাখ্যার উদ্দেশ্যে, ধরে নিন যে ফাংশনটি আর্গুমেন্টের সাথে সম্পাদিত হয়েছিল (3,2,3)যেখানে 3 প্রস্থ ( w), 2 উচ্চতা ( h), এবং 3 গভীরতা ( d)। বলা হচ্ছে, আমাকে পুরো ফাংশনের মূল অংশটি দেখিয়ে শুরু করা যাক:

'\n'.join([S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]+[V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)])

এখানে, দুটি "দুটি ঘর" তৈরি করে যা পুরো "ঘর" তৈরি করে এবং তারপরে আক্ষরিক নতুন লাইনে ( \n) যুক্ত হয়। আসুন যথাক্রমে তাদের তালিকা aএবং তালিকা বলুন bএবং তাদের প্রতিটি বিশ্লেষণ করুন:

  • এখানে তালিকা aতৈরি করা হয়েছে:

    [S*(d-i)+L+' -'[i<1]*O+L+S*[h-1,i][i<=D-1]+'/|'[i<=D-1]for i in R(D+M(0,d-h))]
    

    এই তালিকায় dবাড়ির প্রথম লাইন রয়েছে । এখানে, iব্যাপ্তির প্রতিটি সংখ্যা 0=>(d-(d-h))+d-hযেখানে d-h=0নেতিবাচক বা শূন্য হয়। শুরু করার d-iজন্য, তালিকায় স্পেস যুক্ত করা হয়, তারপরে একটি /এবং তারপরে সংক্ষেপিত শর্তাধীন বিবৃতি দিয়ে যা কিছু ফিরিয়ে দেওয়া হয়। এই শর্তাধীন বিবৃতিতে, w-2স্পেসের সংখ্যা যদি ফিরে আসে i>1। অন্যথায় একই সংখ্যা -ফিরে আসে returned তারপরে, এগুলি অনুসরণ করে আরেকটি /এবং তারপরে ফাঁকা স্থানগুলি, যেখানে এখন স্পেসের সংখ্যা নির্ভর করে যে না তা নির্ভর করে i<=d-(d-h)-1। যদি এটি হয় তবে iস্পেস যুক্ত করা হবে। অন্যথায়, h-1স্পেস যুক্ত করা হয়। অবশেষে, এগুলি সমস্তই হয় একটি /বা এ দ্বারা টপ অফ হয় |, যেখানে |যুক্ত করা হয় i<=d-(d-h)-1, অন্যথায় যদি এ/যোগ করা হলো. ক্ষেত্রে3x2x3প্রিজম, এটি তালিকা দ্বারা ফিরে আসবে a:

          /-/|
         / / |
        / / /
    
  • এখানে তালিকা bতৈরি করা হয়েছে:

    [V+[' -'[i==h],'_'][i<2]*O+V+S*[i-1,d][i>Q]+'/|'[i>Q]for i in R(Q+M(0,h-d),0,-1)]`
    

    এই তালিকায় প্রিজমের বাকী রেখাগুলি রয়েছে। এই তালিকায়, iপ্রতিটি পূর্ণসংখ্যাটি এমন ব্যাপ্তি (h-(h-d))+h-d=>0যেখানে h-d=0negativeণাত্মক বা শূন্য হয়। এই তালিকাটি বন্ধ করতে, প্রথমে একটি |যুক্ত করা হয় কারণ এই রেখাগুলি সর্বদা একটি দিয়ে শুরু হয় |। তারপর, হয় একটি স্থান, -বা _হোক বা না হোক তার উপর নির্ভর করে যোগ করা হয় i=hবা i<2। যদি i<2, তবে একটি _যোগ করা হয়। তা না হলে, একটি -যদি যোগ করা হয় i=h, অথবা একটি স্থান যদি যোগ করা হয় i>hবা i<hবা i>2। এই সিদ্ধান্ত নেওয়ার পরে, তারপরে w-2নির্বাচিত চরিত্রের সংখ্যা যুক্ত করা হবে। এর পরে, আরেকটি |যুক্ত করা হয় এবং তারপরে হয় হয় i-1বা dসংখ্যক স্পেস যুক্ত হয়। যদি i>h-(h-d), তবে কdস্থান সংখ্যা যুক্ত করা হয়। অন্যথায়,i-1স্থান সংখ্যা যুক্ত করা হয়। শেষ অবধি, এগুলি সমস্তই হয় একটি |বা এ এর সাথে শীর্ষে রয়েছে /, যেখানে একটি |যোগ করা হয় i>h-(h-d), বা /যদি যোগ করা হয় i<=h-(h-d)3x2x3প্রিজমের ক্ষেত্রে , তালিকাটি bফিরে আসে:

        |-| /
        |_|/
    

2 টি তালিকা তৈরি হওয়ার পরে শেষ পর্যন্ত এগুলি \nব্যবহার করে আক্ষরিক নতুন লাইন ( ) ব্যবহার করে যোগ দেওয়া হবে '\n'.join()। এটি আপনার সম্পূর্ণ প্রিজম, এবং এই ক্ষেত্রে, এটি দেখতে দেখতে আসবে:

       /-/|
      / / |
     / / /
    |-| /
    |_|/

1
পাইথন বুলিয়ানগুলি পূর্ণসংখ্যার সাথে মূল্যায়ন করে, যার অর্থ আপনার বেশিরভাগ অঞ্চলগুলি এই জাতীয় জিনিসগুলিতে সংকুচিত হতে পারে '-_'[f<2]। পরিশেষে, R=range;S,V,L=' |/'আপনার প্রাথমিক ভেরিয়েবলগুলি নির্ধারণের জন্য কাজ করে কারণ স্ট্রিংগুলি সেই পরিস্থিতিতে আপনার জন্য আনন্দের সাথে আনপ্যাক করবে।
মান কালি

কিছু মনে করবেন না, আমি ভুলে গিয়েছিলাম যে পাইথনে অপারেটরটির অস্তিত্ব নেই ... তবে বাকী কাজ করা উচিত!
মান কালি

@ কেভিনলউ-নোট কেনি বাহ, টিপসের জন্য ধন্যবাদ! :) আমি জানতাম না যে ত্রিমাত্রিক ভাবগুলি সেইভাবে প্রকাশ করা যেতে পারে!
আর কাপ,

আপনি যতক্ষণ পর্যন্ত এর অভ্যন্তরে ভেরিয়েবলগুলি পরিবর্তন করছেন না ততক্ষণ আপনি সেই কৌশলটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, a=1 if b<9 else c=5প্রকাশ করা যায় না [a=1,c=5][b<9]কারণ আপনি aএবং উভয়কেই সংশোধন করে শেষ করবেন c। পিপিসিজি পাইথন গল্ফিং টিপসের পৃষ্ঠাটি এখানে: কোডগল্ফ.স্ট্যাকেক্সেঞ্জার
মান কালি

আপনার কাছে এখনও একটি ত্রিনিদী রয়েছে যা এখনও রয়েছে '_'if f<2else' -'[f==h],। মনে রাখবেন Booleans ইন্টিজার যেমন মূল্যায়ন যাতে আপনি "শৃঙ্খল" এই অন্যটি আপনি পেতে সংশোধন করা হয়েছে তিন পারা [' -'[f==h],'_'][f<2]। এছাড়াও, আপনি S,V,L=' |/'এখনও আমার টিপটি ব্যবহার করেন নি।
মান কালি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.