একটি চীনা চেকবোর্ড ঘোরান


19

একটি চীনা চেকারবোর্ড দেখতে এই রকম দেখাচ্ছে ( এই প্রশ্নের উপর ভিত্তি করে , তবে এবার এটির একটি নির্দিষ্ট আকার রয়েছে):

            G
           . G
          G G G
         G G . G
B B B B . . Y G . Y . Y Y
 B B B . . G . . . Y Y Y
  B . B . . . . . Y . Y
   B . . . . . . . . Y
    . . . . . . . . .
   . P . . . . . O O .
  P P . . . . . . . O O
 P P P . . . R . . O O .
P P P P . . R . . O O O O
         R . R R
          R R R
           R .
            R

এই উদাহরণে প্রতিটি অ-স্পেস অক্ষর ইনপুটটিতে কোনও অ-স্থান মুদ্রণযোগ্য ASCII অক্ষর দ্বারা প্রতিস্থাপন করা যেতে পারে, যখন ফাঁকা স্থান কখনও পরিবর্তন হয় না। নোট করুন যে এটির জন্য চীনা চেকারে একটি বৈধ বিন্যাস হওয়ার গ্যারান্টি নেই (যেমন এটির ঠিক 7 টি বিভিন্ন ধরণের অক্ষর নাও থাকতে পারে)।

আপনার কাজটি এটি 60 ডিগ্রির একাধিক দ্বারা ঘোরানো।

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

            B
           B B
          B B B
         B . B B
P P P . . . B . . G G . G
 P P P P . . . . . G G G
  P P . . . . . G Y . G
   P . . . . . . . G G
    . . . . . . . . .
   R . . . . . . . . Y
  R . R R . . . . Y Y .
 R R R . . . O . . . Y Y
R . R R . . . O . Y Y Y Y
         O O O .
          O O O
           O .
            O

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

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

উত্তর:


16

সিজেম, 61 59 43 40 38 36 বাইট

{{_N/eeSf.*:sW%zsS-\{_' >{;(}&+}/}*}

এটি একটি বেনাম ফাংশন যা স্ট্যাকের একটি স্ট্রিং এবং একটি পূর্ণসংখ্যা আশা করে।

19 বাইট বন্ধ গল্ফ করার জন্য @ জিমি 23013 কে ধন্যবাদ।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

আমরা চেকবোর্ডগুলির মুদ্রণযোগ্য অক্ষরগুলিকে পূর্ব দিকে, তারপরে দক্ষিণ দিকে পাঠ করে একটি আদেশ অর্পণ করতে পারি।

এইভাবে, আসল এবং ঘোরানো চেকবোর্ড

            G                                  B            
           . G                                B B           
          G G G                              B B B          
         G G . G                            B . B B         
B B B B . . Y G . Y . Y Y          P P P . . . B . . G G . G
 B B B . . G . . . Y Y Y            P P P P . . . . . G G G 
  B . B . . . . . Y . Y              P P . . . . . G Y . G  
   B . . . . . . . . Y                P . . . . . . . G G   
    . . . . . . . . .                  . . . . . . . . .    
   . P . . . . . O O .                R . . . . . . . . Y   
  P P . . . . . . . O O              R . R R . . . . Y Y .  
 P P P . . . R . . O O .            R R R . . . O . . . Y Y 
P P P P . . R . . O O O O          R . R R . . . O . Y Y Y Y
         R . R R                            O O O .         
          R R R                              O O O          
           R .                                O .           
            R                                  O            

পরিণত

G.GGGGGG.GBBBB..YG.Y.YYBBB..G...YYYB.B.....Y.YB........Y..........P.....OO.PP.......OOPPP...R..OO.PPPP..R..OOOOR.RRRRRR.R

এবং

BBBBBBB.BBPPP...B..GG.GPPPP.....GGGPP.....GY.GP.......GG.........R........YR.RR....YY.RRR...O...YYR.RR...O.YYYYOOO.OOOO.O

যথাক্রমে।

আমরা প্রথম চেকবোর্ডে এর বর্ণগুলি উত্তর-পূর্বে, তারপরে দক্ষিণ-পূর্ব দিকে পড়ে দ্বিতীয় ক্রমটি খুঁজে পেতে পারি can

কোডে এটি অর্জনের জন্য, আমরা চেকবোর্ডের n তম সারিতে n - 1 স্পেস প্রিপেন্ড করে শুরু করি (বাম দিকে প্রদর্শিত)। তারপরে, আমরা সারিগুলির ক্রমটি বিপরীত করি (ডানদিকে দেখানো হয়েছে)।

            G                                                       R        
            . G                                                   R .        
            G G G                                               R R R        
            G G . G                                           R . R R        
    B B B B . . Y G . Y . Y Y                       P P P P . . R . . O O O O
      B B B . . G . . . Y Y Y                       P P P . . . R . . O O .  
        B . B . . . . . Y . Y                       P P . . . . . . . O O    
          B . . . . . . . . Y                       . P . . . . . O O .      
            . . . . . . . . .                       . . . . . . . . .        
            . P . . . . . O O .                   B . . . . . . . . Y        
            P P . . . . . . . O O               B . B . . . . . Y . Y        
            P P P . . . R . . O O .           B B B . . G . . . Y Y Y        
            P P P P . . R . . O O O O       B B B B . . Y G . Y . Y Y        
                      R . R R                       G G . G                  
                        R R R                       G G G                    
                          R .                       . G                      
                            R                       G                        

শেষ পর্যন্ত, আমরা কলামগুলি সহ সারিগুলি স্থানান্তর করি:

                 ​



            B    

           BB    

          BBB    

         B.BB    

    PPP...B..GG.G

    PPPP.....GGG

    PP.....GY.G

    P.......GG

    .........

   R........Y

  R.RR....YY.

 RRR...O...YY

R.RR...O.YYYY

OOO.

OOO

O.

O

শ্বেতক্ষেত্রটি পুরো জায়গা জুড়ে রয়েছে, তবে মুদ্রণযোগ্য অক্ষরগুলি সঠিক ক্রমে থাকে যদি আমরা সেগুলি পূর্ব দিকে, তারপরে দক্ষিণ দিকে পড়ি।

যে সমস্ত কিছু করার বাকি এর প্রতিস্থাপন করা হয় এন করে মূল চেকারবোর্ড এর মুদ্রণযোগ্য অক্ষর এন গত পরিবর্তনের মুদ্রণযোগ্য অক্ষর।

কোড

                                   e# Stack: String B, Integer A
{                               }* e# Repeat A times:
 _N/                               e#   Push a copy of B and split it at linefeeds.
    ee                             e#   Enumerate the lines of B.
      Sf.*:s                       e#   Execute S.*s for each line:
                                   e#     [4 "abc"] -> "    abc"
            W%                     e#   Reverse the order of line lines.
              z                    e#   Zip; transpose rows with columns.
               s                   e#   Flatten the arrays of strings.
                S-                 e#   Remove spaces.
                                   e#   This pushes a string L.
                  \{          }/   e#   For each character C in the unmodified B:
                    _' >           e#     Check if C is bigger than ' '.
                        {  }&      e#     If it is:
                         ;(        e#      Discard C and shift out a char from L.
                             +     e#     Append a char (C or from L) to L.
                                   e#  L is B rotated by 60 degrees. Set L := B.

_,,Sf*\.+W%ze_
জিমি 23013

@ জিমি ২৩০১৩: আমার বাছাই করার পদ্ধতির চেয়ে অনেক বেশি ভাল। ধন্যবাদ!
ডেনিস

liq{_N/eeSf.*W%:szsS-\{_' >{;(}&\}/;]}@*, তবে আমি যখন এই চ্যালেঞ্জটি লিখছিলাম তখন 45 ডিগ্রি নয়, 60 ডিগ্রি
ঘোরার কথা ভাবছিলাম

@ জিমি 23013: বাহ, ধন্যবাদ! আমি অন্য পদ্ধতির চেষ্টা করছিলাম, তবে qN/(i{_eeSf.*W%:szSf-{},.{' f+sW<\,' e[}}*N*আমার আগে যা ছিল তার চেয়ে দীর্ঘ ...
ডেনিস

11

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

def f(S,n):
 o="";E=enumerate;B=S.splitlines(1)
 for r,l in E(B):
  for c,q in E(l):z=r-8;y=6-(z+c)/2;x=-y-z;exec"x,y,z=-y,-z,-x;"*n;o+=q*(q<"!")or B[z+8][12-y+x]
 print o

এটি সম্ভবত আমি একবারই str.splitlinesদরকারী খুঁজে পেয়েছি - অন্যান্য সমস্ত সময়ের জন্য, .split("\n")সংক্ষিপ্ত।

মত ব্যবহার করুন f(S,10)

ব্যাখ্যা

ইনপুট প্রতিটি চরের জন্য, আমরা হয়:

  • এটি কোনও স্থান বা নিউলাইন হলে বা রাখুন
  • অন্যথায় এটি সঠিক চর দিয়ে প্রতিস্থাপন করুন

কোন চরটি প্রতিস্থাপন করতে হবে তা নির্ধারণ করার জন্য, আমরা গ্রিডটিকে কিউব স্থানাঙ্কে রূপান্তর করি , রূপান্তর করে সময় (x, y, z)ঘোরান , তারপরে ফিরে রূপান্তর করি।n(x, y, z) -> (-y, -z, -x)

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