আসুন টেসেললেট!


18

ভূমিকা

উইকিপিডিয়া থেকে :

সমতল পৃষ্ঠের একটি টেসেললেশন হ'ল একটি বা একাধিক জ্যামিতিক আকার ব্যবহার করে বিমানের টাইলিং, যার নাম টাইলস, কোনও ওভারল্যাপ থাকে না এবং কোনও ফাঁক ছাড়াই।

একটি মোটামুটি সুপরিচিত tessellation নীচে প্রদর্শিত হয়:

এখানে চিত্র বর্ণনা লিখুন

রোম্বি এমন একটি ফ্যাশনে টাইলসযুক্ত রয়েছে যার ফলস্বরূপ কোনও ওভারল্যাপ বা ফাঁক পাওয়া যায় না এবং কিউবগুলির আন্তঃবিবাহ কলামগুলি অনুকরণ করে।

কার্য

আপনার টাস্কটি এমন একটি প্রোগ্রাম লিখতে হবে যা চিত্রের উপরে যেমনভাবে রোম্বি টেস্টলেট করে। প্রোগ্রামটির ইনপুটটি পরীক্ষার মাত্রা হবে: height x widthযেখানে প্রস্থটি কলামের পরিমাণ এবং উচ্চতা সারিগুলির পরিমাণ।

একক ঘনক্ষেত্র যা 1 x 1(রোম্বির 3 টাইল) ঠিক তেমনভাবে উপস্থাপিত হয়:

    _____
  /\      \
 /  \      \
/    \ _____\ 
\    /      /
 \  /      /  
  \/_____ /   

সুতরাং যদি ইনপুট / মাত্রা হয় তবে এটি 3 x 2হওয়া উচিত:

    _____
  /\      \
 /  \      \
/    \ _____\ _____
\    /      /\      \
 \  /      /  \      \
  \/_____ /    \ _____\
  /\      \    /      /
 /  \      \  /      /
/    \ _____\/_____ /
\    /      /\      \
 \  /      /  \      \
  \/_____ /    \ _____\
  /\      \    /      /
 /  \      \  /      /
/    \ _____\/_____ /
\    /      /\      \
 \  /      /  \      \
  \/_____ /    \ _____\
          \    /      /
           \  /      /
            \/_____ /

আপনি দেখতে পাচ্ছেন যে এখানে 3 টি সারি (উচ্চতা) এবং 2 টি কলাম (প্রস্থ) রয়েছে। কলামগুলি নীচে এবং নীচে বিনিময় করছে। আপনার প্রোগ্রামটিও এটি করা উচিত এবং উচ্চতর শুরু করা উচিত। উদাহরণস্বরূপ, 3 x 3হবে:

    _____               _____
  /\      \           /\      \
 /  \      \         /  \      \
/    \ _____\ _____ /    \ _____\
\    /      /\      \    /      /
 \  /      /  \      \  /      /
  \/_____ /    \ _____\/_____ /
  /\      \    /      /\      \
 /  \      \  /      /  \      \
/    \ _____\/_____ /    \ _____\
\    /      /\      \    /      /
 \  /      /  \      \  /      /
  \/_____ /    \ _____\/_____ /
  /\      \    /      /\      \
 /  \      \  /      /  \      \
/    \ _____\/_____ /    \ _____\
\    /      /\      \    /      /
 \  /      /  \      \  /      /
  \/_____ /    \ _____\/_____ /
          \    /      /
           \  /      /
            \/_____ /

বিধি

  • ফলাফল আউটপুট করা আবশ্যক, ইনপুট আপনি যেভাবে চান গ্রহণ করা যেতে পারে তবে উচ্চতা এবং প্রস্থের সাথে সামঞ্জস্য করতে হবে
  • চলমান নিউলাইনগুলি অনুমোদিত are
  • টেসলেসেশন কলামগুলি সর্বদা উপর থেকে শুরু হয় তারপরে পর্যায়ক্রমে উপরে এবং নীচে
  • টেসলেশনগুলির পাশগুলি অবশ্যই ভাগ করে নেওয়া উচিত এবং টেসলেলেশনগুলি অবশ্যই অন্য কলামগুলির মধ্যে কোনও ফাঁক ছাড়াই সঠিকভাবে স্থাপন করতে হবে
  • আপনার জমা কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম হতে পারে
  • তোমার প্রোগ্রাম প্রিন্ট আবশ্যক ঠিক প্রদত্ত একই ইনপুট উপরে আউটপুট; অন্য কথায় আউটপুট অবশ্যই কিউবস / টেসেললেশনগুলির জন্য একই ফর্ম্যাটটি অনুসরণ করবে

অনুমিতি

  • আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা এর চেয়ে বেশি হবে 1 x 1, সুতরাং শূন্য ইনপুট করা ক্ষেত্রে আপনার প্রয়োজন নেই

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। স্ট্যান্ডার্ড লুফোলগুলিও নিষিদ্ধ।

উত্তর:


4

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

f=
(h,w)=>[...Array(h*6+4)].map((_,i)=>[...Array(w*9+3)].map((_,j)=>i&&(i+j+3)%6==0&&j%9<(i>3?6:3)&&(i>3|j<w*9)&&(j>2|i<h*6)?'/':i&&(i-j+2)%6==0&&j%9<(i>h*6?j<w*9?3:0:6)?'\\':i%3==0&&j>2&&(i*3+j+14)%18%(!i|i>h*6?18:12)<4?'_':' ').join``).join`
`
<div oninput=o.textContent=+h.value&&+w.value?f(h.value,w.value):''><input id=h type=number min=1><input id=w type=number min=1><pre id=o>

সরাসরি সমস্ত কাঙ্ক্ষিত অক্ষর গণনা করে। এর জন্য /:

i&&                         Not on first row of output
(i+j+3)%6==0&&              Backward diagonals
j%9<                        Not on top (right) diamond of hexagons or
    (i>3?6:3)&&             empty spaces on top half row
(i>3|j<w*9)&&               Not on top right corner of output
(j>2|i<h*6)                 Not on bottom left corner of output

এর জন্য \:

i&&                         Not on first row of output
(i-j+2)%6==0&&              Forward diagonals
j%9<                        Not on bottom (right) diamond of hexagons or
    (i>h*6?                 empty spaces on bottom half row or
        j<w*9?3:0:6)        bottom right corner of output

এর জন্য _:

i%3==0&&                    Every third line
j>2&&                       Not on left two columns
(i*3+j+14)%18%              Every 18 characters
    (!i|i>h*6?18:12)<4      One or two groups

3

বেফুঞ্জ, 277 269 ​​বাইট

&6*4+00p&:55+*3+10p2%20pv@
6+5:g03%*54:::<<0+55p03:<<v%*54++55:\p04:**`+3g03g00`\g01+*3!g02\-*84g+3+!\%
48*+,1+:10g`!#^_$,1+:00g-|>30g:2+6%\3-!+3+g48*-\:2`\20g3*+10g\`*30g2`**40g!*+
  /\      \
 /  \      \
/    \ _____\
\    /      /
 \  /      /
  \/_____ /
    _____

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

এই প্রশ্নটি ছদ্মবেশী সহজ দেখায়, তবে প্রান্তের ঘটনাগুলি আমি প্রাথমিকভাবে প্রত্যাশার চেয়ে আরও জটিল হতে দেখি। আমি যে সর্বোত্তম পন্থাটি নিয়ে আসতে পারি তা হ'ল বিজোড় এবং এমনকি কলামগুলি পৃথক রেন্ডারিং হিসাবে পরিচালনা করা এবং তারপরে ফলাফলগুলি মার্জ করে।

সুতরাং প্রতিটি x, y স্থানাঙ্কের জন্য আউটপুট হতে হবে, প্রথমে নির্ধারিত হওয়া উচিত যে কোন অক্ষরটি একটি বিজোড় কলামের জন্য রেন্ডার করা উচিত, x , y আউটপুটটি ইউ , ভি , ভিউ স্থানাঙ্কগুলিতে নিম্নরূপে ম্যাপিং করে:

u = x%20
v = (y+5)%6 + (y==0)

যোগে (y==0)প্রথম লাইন বিশেষ মামলায় হ্যান্ডেল হয়। তবে আমাদের এটিও নিশ্চিত করতে হবে যে আমরা কলামের নীচে শেষ কয়েকটি লাইন এবং প্রতিটি সারির শেষে শেষ কয়েকটি অক্ষর রেন্ডার করছি না। এটি এক্সপ্রেশন দিয়ে আউটপুট চরিত্রের গুণ দ্বারা অর্জিত হয়:

(y > h-3) && (x > w-3*!(columns%2))

!(columns%2)প্রস্থ মধ্যে হিসাব কারণ পরিমাণ আমরা শেষ বন্ধ ছাঁটা প্রয়োজন কিনা মোট কলাম গণনা জোড় না বিজোড় উপর নির্ভরশীল হয়।

এরপরে, ইউ , ভি সমন্বয়কে নিম্নরূপে ম্যাপিং করে একটি কলামের জন্য কোন অক্ষরটি রেন্ডার করা উচিত তা নির্ধারণের জন্য আমরা একটি দ্বিতীয় গণনা করি :

u = (x+10)%20
v = (y+2)%6 + (y==3)

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

(y > 2) && (x > 2) && (x < w-3*(columns%2))

এই দুটি সম্ভাব্য আউটপুট অক্ষর গণনা করে, চূড়ান্ত মান ব্যবহৃত হয়:

char1 + (char2 * !char1) + 32

অন্য কথায়, যদি Char1 শূন্য হয় তবে আমাদের চার্ট আউটপুট নিতে হবে , অন্যথায় আমরা চার্ট আউটপুট । যদি উভয়ই শূন্য-না হয়, আমরা কেবল আউটপুট Char1 এ যাচ্ছি তবে এটি ঠিক আছে কারণ তারা উভয়ই একই মান হতে পারে। এছাড়াও মনে রাখবেন যে এই অক্ষরটির মানগুলি 32 দ্বারা অফসেট হয় (অতএব 32 যোগ করে) যাতে শূন্যটি সর্বদা একটি স্থান হিসাবে শেষ হয়।


2

ব্যাচ, 590 বাইট

@echo off
set c=call:c 
set b=\      \
set f=%b:\=/%
set s=       
set u=_____
set w=%2
%c%"   " " %u%" "%s%%s%"
%c%"  " "/%b%" "%s%    "
%c%" " "/  %b%" "%s%  "
%c%"" "/    \ %u%\" " %u% "
for /l %%i in (1,1,%1)do %c%"\" "    %f%" "%b%"&%c%" \" "  %f%" "  %b%"&%c%"  \" "/%u% /" "    \ %u%\"&if %%i lss %1 %c%"  /" "%b%" "    %f%"&%c%" /" "  %b%" "  %f%"&%c%"/" "    \ %u%\" "/%u% /"
%c%"   " "" "%s%\    %f%"
%c%"  " "" "  %s%\  %f%"
%c%" " "" "    %s%\/%u% /"
exit/b
:c
set o=%~1
for /l %%j in (%w%,-2,1)do call set o=%%o%%%~2&if %%j gtr 1 call set o=%%o%%%~3
echo(%o%

:cসাবরুটিন তিন পরামিতি নেয়; %31 এবং 2 কলামের %2মধ্যে পার্থক্য, 2 এবং 3 কলামের মধ্যে পার্থক্য, %1এটি প্রথম কলামের অতিরিক্ত উপসর্গ, সুতরাং একটি কলাম হয় %1%2, দুটি কলাম হয় %1%2%3, তিনটি কলাম হয় %1%2%3%2, চারটি কলাম রয়েছে %1%2%3%2%3etc.


2

পাইথন 2 , 329 326 319 বাইট

h,w=input()
a,R=[' '*10]*3,range
b='  /\      \  # /  \      \ #/    \ _____\#\    /      /# \  /      / #  \/_____ /  '.split('#')
c=['    _____    ']+b*h
e,o=c+a,a+c
k=len(e)
f=e[:]
o[3]=o[3][:10]
for x in R(1,w):
 for y in R(k):f[y]+=((e[y][3:],e[y])[y in R(4)],(o[y][3:],o[y])[y in R(k-3,k)])[x%2]
print'\n'.join(f)

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

আসলে আমার আগের ভুল পোস্টের চেয়ে 21 24 31 বাইট কম। বিজোড় এবং এমনকি কলামগুলির জন্য তালিকা তৈরি করে তারপরে প্রস্থের প্রতিটি কলামের জন্য তাদের সংযুক্ত করে।


দুর্দান্ত কাজ, গল্ফের জন্য শুভকামনা
অ্যান্ড্রু লি

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

1
আমি 3x3 এর উদাহরণ অন্তর্ভুক্ত করতে প্রশ্নটি সম্পাদনা করেছি।
অ্যান্ড্রু লি

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