आइए Tessellate!


18

परिचय

से विकिपीडिया :

एक चौकोर एक सपाट सतह के एक विमान में एक या अधिक ज्यामितीय आकार, टाइल्स कहा जाता है कोई ओवरलैप और कोई अंतराल के साथ, का उपयोग करने का टाइलिंग है।

एक अच्छी तरह से ज्ञात tessellation नीचे दिखाया गया है:

यहाँ छवि विवरण दर्ज करें

रंबी को एक फैशन में बाँधा जाता है, जिसके परिणामस्वरूप ओवरलैप या अंतराल नहीं होता है, और क्यूब्स के इंटरचेंजिंग कॉलम को अनुकरण करता है।

कार्य

आपका कार्य एक प्रोग्राम लिखना है जो rhombi को tessellates उसी तरह से करता है जैसे छवि ऊपर करती है। कार्यक्रम के लिए इनपुट tessellation के आयाम होंगे: height x widthजहां चौड़ाई स्तंभों की मात्रा और ऊंचाई पंक्तियों की मात्रा है।

एक घन 1 x 1( जो कि रोम्बी की ३ टाइलें है) को ठीक उसी प्रकार दर्शाया गया है:

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

इसलिए यदि इनपुट / आयाम हैं 3 x 2, तो यह आउटपुट होना चाहिए:

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

जैसा कि आप देख सकते हैं, 3 पंक्तियाँ (ऊंचाई), और 2 कॉलम (चौड़ाई) हैं। स्तंभ ऊपर और नीचे इंटरचेंज कर रहे हैं। आपके कार्यक्रम को भी ऐसा करना चाहिए और उच्चतर शुरुआत करनी चाहिए। उदाहरण के लिए, 3 x 3यह होगा:

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

नियम

  • परिणाम को आउटपुट किया जाना चाहिए, जो भी आपको पसंद हो उसमें इनपुट लिया जा सकता है लेकिन ऊंचाई और चौड़ाई के अनुरूप होना चाहिए
  • अनुगामी newlines की अनुमति है
  • टेसलेशन कॉलम हमेशा ऊपर से शुरू होता है और फिर वैकल्पिक रूप से ऊपर और नीचे होता है
  • Tessellations की साइड्स को साझा किया जाना चाहिए और बिना किसी अंतराल के अन्य कॉलम के बीच Tessellations को सही ढंग से रखा जाना चाहिए
  • आपका सबमिशन एक फंक्शन या फुल प्रोग्राम हो सकता है
  • आपके प्रोग्राम को बिल्कुल उसी इनपुट के ऊपर दिए गए आउटपुट को प्रिंट करना होगा ; दूसरे शब्दों में आउटपुट को क्यूब्स / टेसेलेशन के लिए समान प्रारूप का पालन करना चाहिए

मान्यताओं

  • आप मान सकते हैं कि इनपुट हमेशा से अधिक होगा 1 x 1, इसलिए आपको उन मामलों की आवश्यकता नहीं है जहां एक शून्य इनपुट किया गया है

स्कोरिंग

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है। मानक कमियां भी निषिद्ध हैं।

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 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

Befunge, 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!*+
  /\      \
 /  \      \
/    \ _____\
\    /      /
 \  /      /
  \/_____ /
    _____

इसे ऑनलाइन आज़माएं!

यह सवाल भ्रामक रूप से आसान लग रहा था, लेकिन किनारे के मामले अधिक जटिल हो गए थे, जैसा कि मैंने मूल रूप से अनुमान लगाया था। सबसे अच्छा तरीका मैं अलग-अलग रेंडरिंग के रूप में अजीब और यहां तक ​​कि कॉलम को संभाल सकता था, और फिर परिणामों को मर्ज कर सकता था।

इसलिए प्रत्येक एक्स के लिए, वाई समन्वय है कि उत्पादन हो सकता है, हम पहले यह जांच करने के लिए क्या चरित्र, एक अजीब स्तंभ के लिए रेंडर किया जाना चाहिए मैप करके जरूरत एक्स , वाई के उत्पादन निर्देशांक यू , वी घन चित्र में निर्देशांक इस प्रकार है:

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

इसके अलावा (y==0)पहली पंक्ति के विशेष मामले को संभालना है। लेकिन हमें यह भी सुनिश्चित करने की आवश्यकता है कि हम कॉलम के नीचे अंतिम कुछ पंक्तियों और प्रत्येक पंक्ति के अंत में अंतिम कुछ वर्णों को प्रस्तुत नहीं कर रहे हैं। यह अभिव्यक्ति के साथ आउटपुट चरित्र गुणा करके प्राप्त किया जाता है:

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

!(columns%2)चौड़ाई में गणना क्योंकि राशि हम अंत बंद ट्रिम करने के लिए की जरूरत है कि क्या कुल स्तंभ संख्या सम या विषम है पर निर्भर है।

हम फिर एक दूसरी गणना करते हैं कि यह निर्धारित करने के लिए कि किस अक्षर को एक समान कॉलम के लिए प्रस्तुत किया जाना चाहिए, यू को मैप करना , v निर्देशांक निम्नानुसार है:

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

यह वही मूल गणना है जिसका उपयोग विषम कॉलम के लिए किया जाता है, लेकिन थोड़ा ऑफसेट होता है। और पहले की तरह, हमें यह सुनिश्चित करने की आवश्यकता है कि हम कुछ पात्रों को सीमाओं पर प्रस्तुत नहीं करते हैं - इस बार कॉलम के शीर्ष पर पहली कुछ पंक्तियाँ, साथ ही प्रत्येक पंक्ति के आरंभ और अंत में कुछ अक्षर। इस मामले में हम जो अभिव्यक्ति करते हैं वह है:

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

इन दो संभावित आउटपुट वर्णों की गणना करने के बाद, अंतिम मूल्य का उपयोग किया जाता है:

char1 + (char2 * !char1) + 32

दूसरे शब्दों में, यदि char1 शून्य है तो हमें char2 आउटपुट करने की आवश्यकता है , अन्यथा हम 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%3आदि।


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 के लिए एक उदाहरण शामिल करने के लिए प्रश्न को संपादित किया है।
एंड्रयू ली

फिर भी, बहुत बढ़िया जवाब!
एंड्रयू ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.