ভাঁজ কিছু তোয়ালে!


19

আমি কোথাও শুনেছি যে একটি জিনিস যা প্রযুক্তি এখনও করতে পারে না তা হ'ল ভাঁজ 1 । সুতরাং সেই বিবৃতিটি মিথ্যা প্রমাণ করা এখন আপনার কাজ!

ইনপুট হিসাবে একটি স্ট্রিং দেওয়া হয়েছে, নীচের মতো আয়তক্ষেত্রগুলি (তোয়ালে) দিয়ে তৈরি প্রতিটি তোয়ালে অর্ধেক ভাঁজ করুন twice উদাহরণ স্বরূপ:

+------+    +------+        +--+
|      |    |      |        |  |
|      |    |      |        |  |
|      | -> +------+ ->     +--+
|      |    
|      |    
|      |    
+------+    

লক্ষ্য করুন যে কোনও গামছাটি ভাঁজ করা হলে প্রথমে এটি ভাঁজ করা হয়, তারপরে বাম থেকে ডানে। আপনার প্রোগ্রামটিও অবশ্যই এই আচরণটি নকল করতে হবে। এছাড়াও লক্ষ করুন যে পরীক্ষার ক্ষেত্রে তোয়ালেগুলি একই জায়গায় থাকে তবে ভাঁজ হয়।

নিয়মাবলী:

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

  • , তাই সংক্ষিপ্ততম কোড জয়!

পরীক্ষার কেস:

Input:
+------+
|      |
|      |
|      |
|      |
|      |
|      |
+------+
Output:
    +--+
    |  |
    |  |
    +--+




Input:
+--+ +--+ +--+
|  | |  | |  |
|  | |  | |  |
+--+ +--+ +--+

Output:
  ++   ++   ++
  ++   ++   ++


Input:
+----+
|    |
|    |
|    |
|    | ++
+----+ ++

Output:

   +-+
   | |
   +-+

        +

Input:
+--+
+--+     ++
         ||
         ||
         ++
Output:
  ++
          +
          +

1: এটি জিওবিটস এবং লাইকনি দ্বারা অসম্মতি জানানো হয়েছে। যাইহোক, আমি এটি কোথাও শুনেছি।


ডাউনভোট কেন? যদি এমন কিছু থাকে যা স্থির করা যায় তবে দয়া করে আমাকে বলুন।
কমরেড স্পার্কলপনি


@ লাইকোনি দেখে মনে হচ্ছে টেক কিছু করতে পারে :-)
মিঃ এক্সকোডার

@ লুইস মেন্ডো সম্পাদিত, তোয়ালেগুলির মধ্যে সর্বদা স্থান থাকবে।
কমরেড স্পার্কলপনি

দেওয়া তোয়ালে সবসময় দিগন্তের লাইনে থাকবে? আমি বোঝাতে চাইছি অন্যটির নিচে কোনও তোয়ালে থাকবে না?
ডেড পসসাম

উত্তর:


5

রেটিনা , 245 বাইট

m1+`^((.)*(?!\+ )[+|]([- ])*[+|].*¶(?<-2>.)*)([+|][- ]*[+|])
$1$.4$* 
m+`^((.)*) ( *) (.*¶(?<-2>.)*)(?(2)(?!))\|\3\|
$1|$3|$4 $3 
m+`^((.)*)\|( *)\|(?=.*¶(?<-2>.)*(?(2)(?!)) )
$1+$.3$*-+
([+|])\1
 $1
(?!\+ )([+|])([- ])\2(\2*)\3\1
$.3$*   $1$3$1

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

দ্রষ্টব্য: কিছু লাইন ফাঁকা জায়গায় শেষ। ব্যাখ্যা:

m1+`                    Repeatedly search from the beginning of input
    ^((.)*              Optional indentation
      (?!\+ )           Towel does not start with a plus and a space
      [+|]([- ])*[+|]   A row of towel
      .*¶               Rest of the line
      (?<-2>.)*         Some indentation on the next line
     )
     ([+|][- ]*[+|])    Another row of towel
$1$.4$*                 Replace the second row with blanks

প্রতিটি তোয়ালের প্রতিটি অন্যান্য লাইন মুছুন (এটি কাজ করে কারণ সমস্ত তোয়ালেগুলির উচ্চতাও রয়েছে),

m+`             Repeatedly search
   ^((.)*)      Optional indentation
    ( *)        Find some space
    (.*¶        Rest of the line
     (?<-2>.)*) Matching indentation on the next line
    (?(2)(?!))  Ensure that the indentation exactly matches
    \|\3\|      Piece of towel
$1|$3|$4 $3     Swap the piece into the space above

সমস্ত বিচ্ছিন্ন তোয়ালে টুকরা উপরে সরান,

m+`                 Repeatedly search
   ^((.)*)          Optional indentation
    \|( *)\|        Piece of towel
    (?=             Followed by
       .*¶          Rest of the line
       (?<-2>.)*    Matching indentation on the next line
       (?(2)(?!))   Ensure that the indentation exactly matches
        )           Nothing on the next line
$1+$.3$*-+          Change the piece into a towel bottom

এবং তোয়ালেগুলির নীচের অংশটি কার্যকর করুন, কার্যকরভাবে এগুলি ভাঁজ করুন।

([+|])\1    Match a row of towel of width 2, which is just ++ or ||
 $1         Change the first column to a space, which folds it

ডানদিকে 2 প্রস্থের তোয়ালে ভাঁজ করুন।

(?!\+ )     Towel does not start with a plus and a space
([+|])      Start with a + or a |
([- ])\2    Then at least two -s or spaces
(\2*)\3     Then an even number of -s or spaces
\1          Then another + or |
$.3$*       Replace the left half with spaces
$1$3$1      Replace the first character of the right half

অবশিষ্ট তোয়ালে ডানদিকে ভাঁজ করুন।


আমি কীভাবে রেজেক্স কাজ করে তার আরও বিশদ ব্যাখ্যায় আগ্রহী
হব

নিবন্ধ
নীল

হ্যাঁ, আপনাকে ধন্যবাদ. এবং আমি <-2>এটি একটি নেট নেট ব্যালান্সিং গোষ্ঠী ধরে ধরে সঠিক ?
ক্রিটিকি লিথোস

@ ক্রিটিক্সিলিথোস এগুলি ব্যবহার করে: (?<-2>.)*প্রতিবার ক্যাপচারটি পপ করে, তাই এর চেয়ে বেশি বার পুনরাবৃত্তি করতে পারে না (.)*, যখন (?(2)(?!))পরীক্ষা করে যে কোনও ক্যাপচার বাকি নেই, যাতে এটি একই সংখ্যার বার পুনরাবৃত্তি করে।
নীল

3

চিত্র প্যাকেজ সহ অক্টেভ , 277 272 বাইট

function x=f(x)
[i,j,v]=find(bwlabel(x-32));a=@(w)accumarray(v,w,[],@max);r=-a(-i);R=a(i);s=-a(-j);S=a(j);x(:)=32;for k =1:nnz(r)
u=(r(k)+R(k)-1)/2;v=(s(k)+S(k)+1)/2;p=v:S(k);x(r(k),p)=45;x(u,p)=45;q=r(k):u;x(q,v)=124;x(q,S(k))=124;x(u,[v S(k)])=43;x(r(k),[v S(k)])=43;end

ইনপুট এবং আউটপুট হল 2 ডি চর অ্যারে ra

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন: 1 , 2 , 3 , 4 । (দ্রষ্টব্য যে endfunctionপরীক্ষার ক্ষেত্রে কেবলমাত্র পরবর্তী কোড থেকে ফাংশনটি পৃথক করা প্রয়োজন the ফাংশনটি যদি তার নিজস্ব ফাইলে সংরক্ষণ করা হয় তবে এটি প্রয়োজনীয় নয়))

পাঠযোগ্য সংস্করণ এবং ব্যাখ্যা

function x = f(x)
[i,j,v] = find(bwlabel(x-32)); % make background equal to 0 by subtracting 32.
% Then label each connected component (i.e. towel) with a unique integer
% Then get row indices (i) and column indices (j) of nonzero values (v)
a = @(w)accumarray(v,w,[],@max); % helper function. Gives the maximum of w for
% each group given by an integer label in v
r = -a(-i); % upper coordinate of each towel (minimum row index)
R = a(i); % lower coordinate of each towel (maximum row index)
s = -a(-j); % left coordinate of each towel (minimum column index)
S = a(j); % right coordinate of each towel (maximum column index)
x(:) = 32; % remove all towels: fill x with spaces
for k = 1:nnz(r) % for each original towel: create the new, folded towel 
    u = (r(k)+R(k)-1)/2; % new lower coordinate
    v = s(k)+S(k)+1)/2; % new left coordinate
    p = v:S(k); % column indices of horizontal edges
    x(r(k),p) = 45; % fill upper horizontal edge with '-'
    x(u,p) = 45; % fill lower horizontal edge with '-'
    q = r(k):u; % row indices of vertical edges
    x(q,v) = 124; % fill left vertical edge with '|'
    x(q,S(k)) = 124; % fill right vertical edge with '|'
    x(u,[v S(k)]) = 43; % fill lower corners with '+'
    x(r(k),[v S(k)]) = 43; % fill upper corners with '+'
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.