একটি হীরা টাইলিং ঘোরান


21

যে কোনও নিয়মিত ষড়ভুজ হীরা দিয়ে টাইলস করা যায়, উদাহরণস্বরূপ ( এই প্রশ্ন থেকে চুরি করা ):

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

আমরা উপরের আকারের 1 টি টাইলিং বিবেচনা করব (যেহেতু হীরার দিকগুলি এক / বা \ প্রতিটি দিয়ে তৈরি)। আকার 2 এর একই টাইলিংটি দেখতে পাবেন:

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

আপনার কাজ হ'ল ডায়ালিং টিলিংগুলি 60 ডিগ্রির একাধিক দ্বারা ঘোরানো। ইনপুটটিতে হীরা টাইলিং যে কোনও আকারের হতে পারে (এবং আকারটি ইনপুটটিতে স্পষ্টভাবে নির্দিষ্ট করা হয়নি)। তবে এটি সর্বদা একটি বৈধ টাইলিং হবে এবং ষড়জাগরের সমস্ত পক্ষের দৈর্ঘ্য একই হবে।

এগুলি উপরের উদাহরণগুলি হ'ল 60 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরানো:

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

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

ইনপুটটি একটি অ-নেতিবাচক পূর্ণসংখ্যা এবং একটি হীরক টাইলিং। আপনার প্রোগ্রাম (বা ফাংশন) এর পূর্ণসংখ্যার * 60 ডিগ্রি দ্বারা এটিকে ঘোরানো উচিত। আপনি যতক্ষণ না এটি ধারাবাহিকভাবে ঘড়ির কাঁটার দিকে বা ঘড়ির কাঁটার বিপরীতে ঘোরানোর সিদ্ধান্ত নিয়েছেন decide ইনপুট এবং আউটপুট উভয়েরই অতিরিক্ত নেতৃস্থানীয় বা পিছনের স্থান থাকা উচিত নয়।

এটি কোড-গল্ফ। সংক্ষিপ্ততম কোড জিতেছে।

সম্পর্কিত প্রশ্নগুলি:


12
মার্টিন এত jeর্ষা করবেন!
অপ্টিমাইজার

উত্তর:


3

পাইথ, 81 বাইট

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

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

ঘড়ির কাঁটার বিপরীতে ঘোরে।

প্রতিটি 60 ° ঘূর্ণন নিম্নলিখিত অ্যালগরিদম ব্যবহার করে সঞ্চালিত হয়। ধরুন ইনপুটটি অর্ডার কে এর একটি ষড়ভুজ , সুতরাং এতে 2⋅ কে + 1 সারি এবং 4⋅ কে কলাম রয়েছে। সারি i কলাম j এ ঘোরানো অক্ষর সন্ধান করতে , আসুন

  • u = i + j - কে
  • v = j - 3⋅ i + 5⋅ কে

তারপরে আউটপুট চরিত্রটি

  • \, যদি ইনপুটটির /সারি ( u + 1) / 2 কলাম ( v + 1) / 2 থাকে; আর
  • /, যদি ইনপুটটিতে _সারি u / 2 কলাম v / 2 বা সারি u / 2 কলামে ( v + 2) / 2 থাকে; আর
  • _, যদি ইনপুটটির \সারি ( u + 2) / 2 কলাম v / 2 বা সারি ( u + 1) / 2 কলাম ( v - 1) / 2 এ থাকে; আর
  • স্থান।

(আমরা অর্ধ-পূর্ণসংখ্যার সূচকগুলিতে অক্ষর গণনা করি না))


আমি মনে করি আপনি গ্যারান্টি দিতে পারবেন কোন পজিশনের রয়েছে \ , এটি কেবলমাত্র _দুটি জায়গাতেই আপনাকে চেক করতে হবে।
নীল

@ নীল হ্যাঁ, আপনি জানেন যে কোথায় \ রয়েছে, তবে আপনাকে _প্রত্যেকের জন্য দুটি এস আঁকতে হতে পারে \
অ্যান্ডারস কাসরগ

ওহ, আপনি প্রতিটি আন্ডারস্কোর আলাদাভাবে পরীক্ষা করেন?
নীল

3

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

যেখানে \nআক্ষরিক নিউলাইন চরিত্রের প্রতিনিধিত্ব করে। সম্পাদনা করুন: আমার অ্যালগরিদমকে হীরার সংখ্যা এবং আকার আলাদাভাবে জানা দরকার নয়, সেই সাথে কয়েকটি ছোট ছোট গল্ফ যা আমি প্রথমবারের মতো মিস করেছি Edit কোডটি পুনরায় সাজিয়ে 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');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.