ক্রিসমাস উপহার স্ট্যাক


21

কেউ হুট করে ক্রিসমাসের উপহারগুলি স্ট্যাক করে চলেছেন এবং এটি বেশ গণ্ডগোল:

           ========================
           |                      |
           ========================
     =============
     |           |
     |           |
     |           |
     |           |
     |           |
     |           |
     =============
        =======
        |     |
        |     |
        |     |
        =======
  ===================
  |                 |
  |                 |
  |                 |
  ===================
=================
|               |
|               |
|               |
|               |
=================
   =======
   |     |
   |     |
   =======

পছন্দ করুন, গুরুত্ব সহকারে, কীভাবে শীর্ষস্থানীয় এমনকি ভারসাম্য রাখে। এটি সম্ভবত একটি হাতুড়ি। এই উপহারের টাওয়ারটি ক্রমবর্ধমান থেকে রোধ করতে, আপনাকে উপহারগুলি পুনরায় অর্ডার করতে হবে যাতে তারা খুব সুন্দরভাবে স্ট্যাক করে:

        =======
        |     |
        |     |
        =======
        =======
        |     |
        |     |
        |     |
        =======
     =============
     |           |
     |           |
     |           |
     |           |
     |           |
     |           |
     =============
   =================
   |               |
   |               |
   |               |
   |               |
   =================
  ===================
  |                 |
  |                 |
  |                 |
  ===================
========================
|                      |
========================

নিয়ম

  • প্রতিটি উপস্থিত =অক্ষরের উপরে এবং নীচে এবং এক বা একাধিক মাঝারি সারি থাকে যা দুটি |ফাঁক দিয়ে পৃথক করে। বর্তমানের প্রস্থটি তার সমস্ত সারিতে সমান।
  • কোনও খালি লাইন নেই।
  • ধারাবাহিকভাবে উপহারগুলি কমপক্ষে একটি কলামে ওভারল্যাপ হবে।
  • প্রস্থ হ্রাস করার জন্য উপহারগুলি স্ট্যাক করা হবে। টাই হওয়ার সময় লম্বা উপস্থিত লোকের চাটুকারের নিচে যেতে হবে।
  • উপহারগুলি নীচে বর্তমানকে কেন্দ্র করে করা উচিত। যদি বর্তমানকে ঠিক ঠিক কেন্দ্রে স্থাপন করা না যায় (কারণ প্রস্থের পার্থক্যটি বিজোড়), আপনি কেন্দ্রের বাইরে অর্ধেক অক্ষরের একটি অবস্থান বেছে নিতে পারেন।
  • আপনি অনুমান করতে পারেন বা নাও পারেন যে ইনপুটটির একটি একক ট্রেলিং নিউলাইন রয়েছে তবে দয়া করে আপনার অনুমানটি জানান।
  • আপনার সমাধানটি খালি ইনপুটটির জন্য কাজ করতে হবে না, তবে অবশ্যই একটি উপস্থিত উপস্থিতি পরিচালনা করতে সক্ষম হবে।
  • আপনি এমন কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন যা STDIN বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নেয় এবং ফলাফলটি ফেরত দেয় বা এটি প্রিন্ট করে STDOUT এ।
  • এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

উত্তর:


15

সিজেম, 81 70 বাইট

'"qN/{__Sm0=#>}%N*"=
="/"=\"\"="*'"++~]$_W='=/,f{1$'=/,m4/\N/\f{S*\N}}

সুতরাং আমরা ক্রিসমাস উপহার স্ট্যাক করতে হবে? এই কোডটি এমন করে যেমন কোনও আসল ব্যক্তি * করেন

প্রথমত , এই কোডটি ব্যবহার করে সহজেই উপরে এবং নীচে সরানোর জন্য আমরা সমস্ত উপহার একটি প্রাচীরের বিরুদ্ধে স্ট্যাক করি:

'"qN/{__Sm0=#>}%N*

তারপরে , আমরা প্রতিটি উপস্থিতকে এই কোডটি ব্যবহার করে একটি পৃথক আইটেম হিসাবে চিহ্নিত করি:

"=
="/"=\"\"="*'"++~]

তারপরে , আমরা এই কোডটি ব্যবহার করে তাদের উচ্চতা এবং প্রস্থের উপর ভিত্তি করে উপহারগুলি সাজান:

$

এখন পর্যন্ত , সমস্ত উপহার একে অপরের সাথে নিখুঁত প্রান্তিককরণের জন্য দেয়ালের বিপরীতে স্ট্যাক করা আছে। তবে এটি ক্রিসমাস হওয়ায় আমরা উপহারগুলি ক্রিসমাস ট্রিের মতো করে রেখে দিতে চাই! এই কোডটি এটি করে:

_W=Af{1$Am4/\N/\f{S*\N}}

এখানে প্রশ্নের উদাহরণস্বরূপ কোডের একটি ধাপে ধাপে দেওয়া হল:

"Step 1 - Stack the presents against a wall";
========================
|                      |
========================
=============
|           |
|           |
|           |
|           |
|           |
|           |
=============
=======
|     |
|     |
|     |
=======
===================
|                 |
|                 |
|                 |
===================
=================
|               |
|               |
|               |
|               |
=================
=======
|     |
|     |
=======

"Step 2 - Identify the presents as a collection of presents";
["========================
|                      |
========================" "=============
|           |
|           |
|           |
|           |
|           |
|           |
=============" "=======
|     |
|     |
|     |
=======" "===================
|                 |
|                 |
|                 |
===================" "=================
|               |
|               |
|               |
|               |
=================" "=======
|     |
|     |
======="]

"Step 3 - Sort on height & width, with presents stacked against a wall to help sort them";
=======
|     |
|     |
=======
=======
|     |
|     |
|     |
=======
=============
|           |
|           |
|           |
|           |
|           |
|           |
=============
=================
|               |
|               |
|               |
|               |
=================
===================
|                 |
|                 |
|                 |
===================
========================
|                      |
========================

"Final step - stack them like a Christmas Tree";
        =======
        |     |
        |     |
        =======
        =======
        |     |
        |     |
        |     |
        =======
     =============
     |           |
     |           |
     |           |
     |           |
     |           |
     |           |
     =============
   =================
   |               |
   |               |
   |               |
   |               |
   =================
  ===================
  |                 |
  |                 |
  |                 |
  ===================
========================
|                      |
========================

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

* ব্যক্তি থেকে পৃথক পৃথক পৃথক হতে পারে: পি


এটি দুর্দান্ত যে স্ট্যান্ডার্ড লিক্সিকোগ্রাফিক অর্ডারটি বাছাইয়ের প্রয়োজনীয়তাগুলি পূরণ করতে ঘটে! আমার স্নাতকের.
wchargin

@WChargin হ্যাঁ আমাকে এক টন বাইট বাঁচিয়েছে!
অপ্টিমাইজার

3

জাপট , 18 বাইট

mx óÈíY b'=²Ãn c û

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

আমি অন্য জাপ উত্তরের থেকে যথেষ্ট আলাদা কৌশল ব্যবহার করি যা আমি মনে করি এটির নিজের উত্তরের মূল্য রয়েছে। লাইনগুলির একটি অ্যারে হিসাবে ইনপুট এবং আউটপুট নেয়

ব্যাখ্যা:

mx                    #Trim leading whitespace from each line
   ó        Ã         #Split the array between lines where:
    ÈíY               # The lines interleaved (e.g. "abc","def" => "adbecf")
        b'=²          # starts with "=="
             n        #Default sorting for "array of arrays of strings"
               c      #Flatten to a single array of lines
                 û    #Pad each line so they are centered

"ডিফল্ট বাছাই" কেন এমনভাবে কাজ করে তা আমি ঠিক জানি না, তবে আমি পরীক্ষিত করেছি যে একই প্রস্থের সাথে দুটির লম্বা বাক্সটি নীচে রয়েছে যা নির্বিশেষে ইনপুটটিতে আসে।


1
মনে করুন যে সংক্ষিপ্ত স্ট্রিংটি একটি দীর্ঘ কালকের দৈর্ঘ্যে কোড পয়েন্ট -1 সহ একটি কাল্পনিক চরিত্রের সাথে ডান-প্যাড করবে।
এরিক আউটগল্ফার

1
বাইট সংরক্ষণ করতে এর "=="সাথে প্রতিস্থাপন করুন '=²
শেগি

2

রুবি, 164

ঝরঝরে চ্যালেঞ্জ! এটিকে আরও অনেক নিচে নামানো যায়নি।

f=->x{y=x.scan(/\s+=+[\s|]+\s+=+/).sort_by{|p|-p.count(?|)}.sort_by{|p|p.count ?=}
y.map{|p|p.gsub(/^\s+/,'').each_line{|l|puts l.strip.center(y[-1].count(?=)/2)}}}

ব্যাখ্যা

ইনপুটটি Stringএমনভাবে কাটা হয় Arrayযেখানে প্রতিটি উপস্থিতি একটি উপাদান। তারপরে অ্যারেটি পাইপের অক্ষরের সংখ্যা অনুসারে বাছাই করা হয় এবং আবার সমান চিহ্নগুলির সংখ্যা অনুসারে বাছাই করা হয়

এরপরে এটি সমস্ত নেতৃস্থানীয় সাদা স্থান সরিয়ে দেয় এবং প্রতিটি লাইনকে পৃথকভাবে প্রিন্ট করে, বৃহত্তম উপস্থিতির প্রস্থকে কেন্দ্র করে।

এটি ইনপুটটিতে ট্রেলিং করা নতুন লাইনের সাথে বা ছাড়াই একই আচরণ করে।

পঠনযোগ্য সংস্করণ

f = lambda do |x|
  y = x.scan(/\s+=+[\s|]+\s+=+/)
       .sort_by { |p| -p.count("|") }
       .sort_by { |p|  p.count("=") }

  y.map do |p|
    p.gsub(/^\s+/,'').each_line do |l|
      puts l.strip.center(y.last.count("=") / 2 )
    end
  end
end

1

05 এ বি 1 ই , 23 20 বাইট

|ðδÛ»…=
=…=0=:0¡{».c

-3 ধন্যবাদ বাইট @ErikTheOutgolfer

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

ব্যাখ্যা:

|         # Take the input split by newlines
 ðδÛ      # Remove leading spaces from each line
    »     # And join everything back together again with a newline delimiter
…=
=         # Push string "=\n="
 …=0=     # Push string "=0="
     :    # Replace all "=\n=" with "=0="
0¡        # Now split on "0"
          # (We now have our list of presents without any leading spaces)
  {       # Sort this list (with default string-wise sorting)
   »      # Join the list of presents by newlines
    .c    # Left-focused centralize the string (and output implicitly)

নোট:

  • বিজোড় প্রস্থের উপহারগুলি বাম-কেন্দ্রিক কেন্দ্রীভূত। Trailing ছোট হাতের পরিবর্তন করে এই পরিবর্তন করা যাবে ডান-দৃষ্টি নিবদ্ধ করা cএকটি বড় হাতের থেকে C
  • আমাদের |যদি স্ট্রিং-লাইনের একটি তালিকা হিসাবে ইনপুট নিতে দেওয়া হয় তবে নেতৃস্থানীয় বাদ দেওয়া যেতে পারে।
  • ধরে নিই ইনপুটটিতে কোনও উপহারের জন্য কোনও পিছনের জায়গা নেই (চ্যালেঞ্জের বর্ণনার ইনপুটের মতো); চলমান নিউলাইনগুলি ঠিক আছে, যেহেতু সেগুলি |মুছে ফেলে।

1
20 বাইটðδÛপরিবর্তে ব্যবহার করা যেতে পারে εðÛ}এখানে ¶'=.øহিসাবে একই …=\n=( \n, মানে সম্পর্কে newline) 0'=.øহিসাবে একই …=0=
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার আহ, আমি আক্ষরিক 3-চর স্ট্রিংয়ের পরিবর্তে ব্যবহার করার জন্য একটি বোকা .. এবং ধন্যবাদ ðδÛ। প্রকৃতপক্ষে এর δআগে কখনও ব্যবহার করা হয়নি এবং এ জাতীয় কাজ করার কোনও ধারণা নেই।
কেভিন ক্রুজসসেন

1

সংযুক্তি , 91 বাইট

Join&lf@{Center&#(_@-1@0)@>_}@{SortBy[&{#_'#__},Strip@>Lines=>Split[_,/"(?<==)\\s+(?==)"]]}

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

Ungolfed

?? returns [length of first entry, number of entries]
revDim := &{#_'#__}

?? regex
SPLIT_ON_BARRIERS := /"(?<==)\\s+(?==)"

splitPresents[str] := (
    chopped .= Split[str, SPLIT_ON_BARRIERS];;
    normalized .= Strip @> Lines => chopped
)

orderPresents[presents] :=
    SortBy[revDim, presents]

fixPresents[ordered] := (
    ?? number of columns of bottom-most present
    pad_size .= Size[Last[ordered][0]];;
    ?? center each line of each present
    Center&pad_size @> _
)

joinNewlines := Join&lf

stackPresents := joinNewlines@fixPresents@orderPresents@splitPresents


0

পাইথন 2 , 221 196 বাইট

s,a,b,i=[c.strip()for c in input().split("\n")]+["="],[],[],0
exec"a+=[s[i].center(max(map(len,s)))]\nif s[i][0]==s[i+1][0]=='=':b+=[a];a=[]\ni+=1;"*(len(s)-1)
for c in sorted(b):print"\n".join(c)

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

ইনপুট হিসাবে নতুন লাইনগুলি অনুসরণ না করে একটি উদ্ধৃত স্ট্রিং আশা করে।

দুর্দান্ত নয়, তবে এটি আমি সবচেয়ে ভাল করতে পারি।


0

জাপট , 23 20 19 বাইট

কেভিনের সমাধানের অনুরূপ পন্থা । আমরা যদি লাইনের অ্যারে হিসাবে ইনপুট নিতে পারি তবে প্রথম বাইট সরানো যেতে পারে।

·mx ·r¥¬·È·Ãq, n ·û

চেষ্টা করে দেখুন

·mx ·r¥¬·È·Ãq, n ·û     :Implicit input of string
·                       :Split on newlines
 m                      :Map
  x                     :  Trim
    ·                   :Join with newlines
     r                  :Global replace
      ¥                 :  Shortcut for the == operator. Passing an operator as the first argument of a method in Japt implicitly converts it to a string
       ¬                :  Split
        ·               :  Join with newlines, giving the string "=\n=" to be replaced
         È              :  Pass each match through a function
          ·             :    Split on newlines. As we're working within a string, the resulting array gets cast to a string (i.e., "=\n=" -> ["=","="] -> "=,="
           Ã            :End replace
            q,          :Split on ","
               n        :Sort
                 ·      :Join with newlines
                  û     :Centre pad each line with spaces to the length of the longest

0

জাভাস্ক্রিপ্ট 279 বাইট 275 বাইট

আমি কোড-গল্ফের একজন নবজাতকের কিছু, এবং জাভাস্ক্রিপ্টের বিশেষজ্ঞের মতো কিছুই না তবে চ্যালেঞ্জটি আকর্ষণীয় এবং মজাদার। আমি দেখতে চাই যে জেএসের একজন বিশেষজ্ঞ বিশেষজ্ঞ কী কৌশল ব্যবহার করবেন।

অনুমিতি

  • ইনপুট এবং আউটপুট স্ট্রিংগুলির অ্যারে হয়
  • কোথাও কোনও ফাঁকা লাইন নেই
  • একটি বাক্সের উচ্চতা <= 99 লাইন (এটি কি আমাকে অযোগ্য ঘোষণা করে)?
  • ইনপুট এবং আউটপুট ভেরিয়েবলগুলি পূর্বনির্ধারিত, আউটপুট প্রাথমিকভাবে একটি খালি অ্যারে হয়ে থাকে

কোড

ইনপুট রয়েছে g[]। আউটপুট ইন m[]

a=[];s='';b=0;c=0;o=[];g.forEach((t,x)=>{t=t.trim(),c=Math.max(c,t.length);o.push(t);if(s==''){s=t;b=x}else{if(t==s){a.push({"K":s.length*100+x-b,"O":o});s='';o=[]}}});a.sort((p,q)=>{return p.K-q.K});a.forEach((t)=>{t.O.forEach((q)=>{m.push(" ".repeat((c-q.length)/2)+q)})});

কোড দ্বারা কাজ করে

  1. দুটি সদস্য বিশিষ্ট প্রতিটি বস্তু একটি বাক্সকে উপস্থাপন করে একটি বস্তু বিন্যাস তৈরি করে: কে, একটি সাজানোর কী (প্রস্থ x 100 + উচ্চতা) এবং হে, বাক্সটি তৈরি করে (ছাঁটা) স্ট্রিংগুলির একটি অ্যারে। অ্যারে তৈরি করার সময় কোডটি প্রশস্ত বাক্সের প্রস্থের কথা মনে রাখে।

  2. বক্স বস্তুর অ্যারে কী দ্বারা ক্রম অনুসারে বাছাই করা হয় boxes যেখানে বাক্সগুলির একই প্রস্থ থাকে কীগুলি নিশ্চিত করে যে তারা উচ্চতা অনুসারে বাছাই করেছেন।

  3. বাক্সগুলি বাছাইয়ের পরে, প্রতিটি বাক্সের স্ট্রিংগুলি আউটপুট অ্যারেতে ঠেলে দেওয়া হয় শীর্ষস্থানীয় স্পেস যুক্ত করে, যা বাক্সটিকে আরও বিস্তৃতের উপরে রাখে।

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

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