एक हीरे की टाइलिंग घुमाएँ


21

किसी भी नियमित षट्भुज को हीरे से टाइल किया जा सकता है, उदाहरण के लिए ऐसा ( इस प्रश्न से चुराया गया ):

   ______
  /_/_/\_\
 /_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
 \_\/_/\_\/
  \_\_\/_/

हम उपरोक्त आकार 1 की टाइलिंग पर विचार करेंगे (चूंकि हीरे की भुजाएँ एक / या प्रत्येक से बनी होती हैं)। आकार 2 का एक ही टाइलिंग जैसा दिखेगा:

      ____________
     /   /   /\   \
    /___/___/  \___\
   /   /\   \  /\   \
  /___/  \___\/  \___\
 /\   \  /   /\  /   /\
/  \___\/___/  \/___/  \
\  /   /\   \  /   /\  /
 \/___/  \___\/___/  \/
  \   \  /   /\   \  /
   \___\/___/  \___\/
    \   \   \  /   /
     \___\___\/___/

आपका कार्य हीरे की झुकाव को 60 डिग्री से अधिक से घूमना है। इनपुट में हीरे की टाइलिंग किसी भी आकार में हो सकती है (और आकार इनपुट में स्पष्ट रूप से निर्दिष्ट नहीं है)। लेकिन यह हमेशा एक मान्य टाइलिंग होगी, और षट्भुज के सभी पक्षों की लंबाई समान होगी।

ये उपरोक्त उदाहरण 60 डिग्री दक्षिणावर्त घुमाए गए हैं:

   ______
  /_/\_\_\
 /\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
 \/_/\_\_\/
  \_\/_/_/

      ____________
     /   /\   \   \
    /___/  \___\___\
   /\   \  /   /\   \
  /  \___\/___/  \___\
 /\  /   /\   \  /   /\
/  \/___/  \___\/___/  \
\  /\   \  /   /   /\  /
 \/  \___\/___/___/  \/
  \  /   /\   \   \  /
   \/___/  \___\___\/
    \   \  /   /   /
     \___\/___/___/

इनपुट एक गैर-नकारात्मक पूर्णांक और एक हीरा टाइलिंग है। आपके प्रोग्राम (या फ़ंक्शन) को पूर्णांक * 60 डिग्री से घुमा देना चाहिए। आप तय करते हैं कि जब तक यह सुसंगत है, तब तक दक्षिणावर्त या वामावर्त घुमाएं। इनपुट और आउटपुट दोनों में अतिरिक्त अग्रणी या अनुगामी स्थान नहीं होना चाहिए।

यह कोड-गोल्फ है। सबसे छोटा कोड जीतता है।

संबंधित सवाल:


12
मार्टिन कितना ईर्ष्यालु होगा!
ऑप्टिमाइज़र

जवाबों:


3

पायथ, 81 बाइट्स

ju.es.e.reh|@s.e.e[yYykZ)bGCa+LV,t-y+k*3Y*5J-+kY/lG2Jc2j406610 4K"_/\\_\\"dKbGQ.z

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

वामावर्त घुमाता है।

प्रत्येक 60 ° रोटेशन निम्न एल्गोरिथ्म का उपयोग करके किया जाता है। मान लीजिए कि इनपुट ऑर्डर k का षट्भुज है , इसलिए इसमें 2 + k + 1 पंक्तियाँ और 4⋅ k कॉलम हैं। पंक्ति i कॉलम j पर घुमाए गए वर्ण को खोजने के लिए , आइए

  • यू = आई + जे - के
  • v = j - 3 = i + 5⋅ k

फिर आउटपुट कैरेक्टर है

  • \, यदि इनपुट /में पंक्ति ( u + 1) / 2 कॉलम ( v + 1) / 2 है; अन्य
  • /, यदि इनपुट _में पंक्ति u / 2 स्तंभ v / 2 या पंक्ति u / 2 स्तंभ ( v + 2) / 2 है; अन्य
  • _, यदि इनपुट \में पंक्ति ( u + 2) / 2 कॉलम v / २ या पंक्ति ( u + १) / २ कॉलम / v है - 1) / 2 है; अन्य
  • अंतरिक्ष।

(हम आधे-पूर्णांक सूचकांकों में वर्णों की गणना नहीं करते हैं।)


मुझे लगता है कि आप गारंटी दे सकते हैं कि कौन से स्थान हैं \ , यह सिर्फ _एस है जिसे आपको दोनों स्थानों पर जांचना होगा।
नील

@ नील हां, आप जानते हैं कि एस कहां \ हैं, लेकिन आपको _प्रत्येक के लिए दो एस खींचना पड़ सकता है \
एंडर्स कासोर्ग

ओह, आप प्रत्येक अंडरस्कोर की अलग से जांच करते हैं?
नील

3

जावास्क्रिप्ट (ईएस 6), 452 356 315 बाइट्स

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। संपादित करें: 96 बाइट्स को यह महसूस करके सहेजा गया कि मेरे एल्गोरिथ्म को हीरे की संख्या और आकार को अलग-अलग जानने की जरूरत नहीं है, साथ ही कुछ मामूली गोल्फ भी जो मैंने पहली बार याद किए। कोड को पुनर्व्यवस्थित करके 41 बाइट्स सहेजे गए ताकि गंतव्य हमेशा पात्रों की एक ही जोड़ी हो, साथ ही एक मामूली गोल्फ जिसे मैंने अपने पिछले एल्गोरिथम में परिवर्तित करते समय याद किया।

स्पष्टीकरण: उत्पादन पात्रों में से प्रत्येक जोड़ी है, जो किया जा सकता है पर विचार __, /_, _\, /या \, इनपुट में उपयुक्त पात्रों जो उन उत्पादन पात्रों के लिए नक्शे के लिए जाँच। Ungolfed:

function rotate(str, num) {
  // Measure the size using the indent of the _ in the first row.
  var size = str.indexOf('_');
  var arr = str.split('\n');
  while (num--) {
    // We build a character array to represent the output by turning the
    // input into a nested array and replacing everything with spaces.
    // Note that the output will have any trailing spaces from the input.
    var res = arr.map(s => Array.from(s).fill(' '));
    // Loop over a diamond that encloses the hexagon.
    for (var destrow = 0; destrow <= size * 2; destrow++) {
      for (var col = 0; col <= size * 2; col++) {
        var destcol = size + col * 2 - destrow;
        var srcrow = size + destrow - col;
        var srccol = destrow + col;
        // Map / to __, \ to / and __ to \.
        // We write __ first in case it gets overwritten by / or \.
        if (arr[srcrow]) {
          if (arr[srcrow][srccol] == '/') {
            res[destrow][destcol] = res[destrow][destcol + 1] = '_';
          }
          if (arr[srcrow][srccol - 1] == '\\') {
            res[destrow][destcol] = '/';
          }
        }
        // Need to check both positions in case one was overwritten.
        if (arr[srcrow - 1] &&
            (arr[srcrow - 1][srccol] == '_' || arr[srcrow - 1][srccol - 1] == '_')) {
          res[destrow][destcol + 1] = '\\';
        }
      }
    }
    arr = res.map(a => a.join(''));
  }
  return arr.join('\n');
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.