ডিসক্রিট বেকারের মানচিত্র


15

ভূমিকা

বেকার এর মানচিত্রে একটি গুরুত্বপূর্ণ গতিশীলতার সিস্টেম বিশৃঙ্খল আচরণ প্রদর্শণ করা হয়। এটি ইউনিট স্কোয়ার থেকে নিজের মতো করে স্বজ্ঞাতভাবে সংজ্ঞায়িত করা একটি ফাংশন।

  • অর্ধেক উল্লম্বভাবে বর্গ কাটা, আকার দুই আয়তক্ষেত্র ফলে 0.5×1
  • বাম দিকের ডান অর্ধেকটি স্ট্যাক করুন, যার ফলে আকারের একটি আয়তক্ষেত্র হয় 0.5×2
  • আয়তক্ষেত্রটি আবার একটি 1×1স্কোয়ারে সঙ্কুচিত করুন ।

এই চ্যালেঞ্জে আপনি এই রূপান্তরটির একটি পৃথক সংস্করণ প্রয়োগ করবেন।

ইনপুট এবং আউটপুট

আপনার ইনপুট মুদ্রণযোগ্য ASCII অক্ষর ও মাপ এর হোয়াইটস্পেস একটি 2D অ্যারে 2m×2nকিছু m, n > 0। আপনার আউটপুটটি অ্যারে ব্যবহার করে নীচে প্রাপ্ত অনুরূপ 6×4অ্যারে

ABCDEF
GHIJKL
MNOPQR
STUVWX

উদাহরণ হিসাবে। প্রথমে, বাম অর্ধের উপরে অ্যারের ডান অর্ধেকটি স্ট্যাক করুন:

DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU

তারপরে, কলামগুলি অক্ষরের জোরে বিভক্ত করুন এবং প্রতিটি জুটিকে স্বাধীনভাবে 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘুরিয়ে লম্বা আয়তক্ষেত্রটি মূল আকারে ফিরে "সংকুচিত" করুন:

JDKELF
VPWQXR
GAHBIC
SMTNUO

এটি উপরের অ্যারের জন্য সঠিক আউটপুট।

বিধি

ইনপুট এবং আউটপুট ফর্ম্যাটগুলি নমনীয়। আপনি নিউলাইন-সীমাবদ্ধ স্ট্রিংগুলি, স্ট্রিংগুলির তালিকা বা অক্ষরের 2D অ্যারে ব্যবহার করতে পারেন। যাইহোক, ইনপুট এবং আউটপুট অবশ্যই আবশ্যক একই ফর্ম্যাট থাকতে হবে: আপনাকে অবশ্যই কোনও কোনও বৈধ ইনপুটটিতে নিজের জমাটি পুনরাবৃত্তি করতে সক্ষম হতে হবে।

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার কেস

Input:
12
34

Output:
42
31

Input:
Hell
!  o
d  -
lroW

Output:
 lol
o W-
!H e
ldr 

Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX

Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO

Input:
*___  ___  o
o|__) |__) *
*|    |    o
o __   __  *
*|    | _  o
o|__  |__| *

Output:
|_____)   *o
 |_ _     *o
||_ __|   *o
o*|_____)   
o* |_ _     
o*||_ _     

উত্তর:


11

পাইথ, 25 19 18 বাইট

msC_dcs_Cmck/lk2Q2

অনলাইন বিক্ষোভ । এটি অক্ষরের 2D-অ্যারে ব্যবহার করে।

স্ট্রিংগুলির অ্যারে একটি চর দীর্ঘতর (19 বাইট)। অনলাইন বিক্ষোভ

ব্যাখ্যা:

         m      Q    map each string k in input:
            /lk2        calculate half the line-length: len(k)/2
          ck/lk2        chop k into pieces of length len(k)/2
                        results in two pieces
        C            zip the resulting list
                     results in a tuple ([first half of strings], [second half of strings])
       _             invert the order ([second half of strings], [first half of strings])
      s              sum (combine the two lists to a big one
     c           2   chop them into tuples
m                          for each tuple of strings: 
 sC_d                        invert, zip, and sum

শেষ অংশটি প্রথমে কিছুটা বিভ্রান্তিকর। আসুন ধরে নিই আমাদের কাছে টিপল রয়েছে ['DEF', 'JKL'](আমি ওপি থেকে উদাহরণটি ব্যবহার করি)।

    d  (('D', 'E', 'F'), ('J', 'K', 'L'))   just the pair of strings
   _d  (('J', 'K', 'L'), ('D', 'E', 'F'))   invert the order
  C_d  [('J', 'D'), ('K', 'E'), ('L', 'F')] zipped
 sC_d  ('J', 'D', 'K', 'E', 'L', 'F')       sum (combine tuples)

4
আমি আপনাকে কৌতুক করছি না, আমি ঠিক যেমনটি ঠিক তেমন সমাধান লিখেছি independ আমি একটি ধারণা পেতে সমস্ত উত্তর উপর চকচকে করেছি, কিন্তু বিস্তারিত কিছুই।
orlp

@ অরলপ হ্যাঁ, প্রায়শই এটি প্রায়শই যে পাইথের সরলতম পদ্ধতিটি সবচেয়ে কম। তাই একাধিক ব্যক্তি এটি সহজেই খুঁজে পান।
জাকুবে

@ অরল্প বিটিডব্লিউ, পাইথ রেপোতে কেবল একবার টানতে অনুরোধ করেছেন (এখনও স্বীকৃত হয়নি)। ভবিষ্যতে আপনি কেবল c2kপরিবর্তে এটি করতে পারেন ck/lk2c2kস্ট্রিংকে দুটি সমান ভাগে বিভক্ত করে।
জাকুবে

9

জুলিয়া, 136 বাইট

খুব সরল বাস্তবায়ন implementation বিশেষভাবে প্রতিযোগিতামূলক এন্ট্রি নয়, তবে মজাদার ছিল!

A->(s=size(A);w=s[2];u=2;C=vcat(A[:,u+1:w],A[:,1:u]);D=cell(s);j=1;for i=1:2:size(C,1) D[j,:]=vec(flipdim(C[i:i+1,:],1));j+=1end;D)

এটি একটি ল্যাম্বডা ফাংশন তৈরি করে যা 2-মাত্রিক অ্যারেটিকে ইনপুট হিসাবে গ্রহণ করে এবং একটি রূপান্তরিত 2-মাত্রিক অ্যারে প্রদান করে।

অবহেলিত + ব্যাখ্যা:

function f(A)

    # Determine bounds
    s = size(A)          # Store the array dimensions
    w = s[2]             # Get the number of columns
    u = w ÷ 2            # Integer division, equivalent to div(w, 2)

    # Stack the right half of A atop the left
    C = vcat(A[:, u+1:w], A[:, 1:u])

    # Initialize the output array with the appropriate dimensions
    D = cell(s)

    # Initialize a row counter for D
    j = 1

    # Loop through all pairs of rows in C
    for i = 1:2:size(C, 1)

        # Flip the rows so that each column is a flipped pair
        # Collapse columns into a vector and store in D
        D[j, :] = vec(flipdim(C[i:i+1, :], 1))

        j += 1
    end

    return D
end

এটি কল করার জন্য, ফাংশনটির একটি নাম দিন f=A->(...)

উদাহরণ আউটপুট:

julia> A = ["A" "B" "C" "D" "E" "F";
            "G" "H" "I" "J" "K" "L";
            "M" "N" "O" "P" "Q" "R";
            "S" "T" "U" "V" "W" "X"]
julia> f(A)

4x6 Array{Any,2}:
 "J"  "D"  "K"  "E"  "L"  "F"
 "V"  "P"  "W"  "Q"  "X"  "R"
 "G"  "A"  "H"  "B"  "I"  "C"
 "S"  "M"  "T"  "N"  "U"  "O"

julia> B = ["H" "e" "l" "l";
            "!" " " " " "o";
            "d" " " " " "-";
            "l" "r" "o" "W"]
julia> f(B)

4x4 Array{Any,2}:
 " "  "l"  "o"  "l"
 "o"  " "  "W"  "-"
 "!"  "H"  " "  "e"
 "l"  "d"  "r"  " "

এবং প্রমাণ যে এটি নির্বিচারে বেঁধে রাখা যেতে পারে:

julia> f(f(B))

4x4 Array{Any,2}:
 "W"  "o"  "-"  "l"
 "r"  " "  " "  "e"
 "o"  " "  " "  "l"
 "l"  "!"  "d"  "H"

পরামর্শগুলি বরাবরের মতো স্বাগত জানাই, এবং আমি আরও কোনও ব্যাখ্যা দেওয়ার জন্য খুশি হব।


8

সিজেম, 25 24 বাইট

qN/_0=,2/f/z~\+2/Wf%:zN*

স্ট্রেট ফরোয়ার্ড স্পেক বাস্তবায়ন। ব্যাখ্যা:

qN/                       "Split input by rows";
   _0=,2/                 "Get half of length of each row";
         f/               "Divide each row into two parts";
           z              "Convert array of row parts to array of half columns parts";
            ~\+           "Put the second half of columns before the first half and join";
               2/         "Group adjacent rows";
                 Wf%      "Flip the row pairs to help in CW rotation";
                    :z    "Rotate pairwise column elements CW";
                      N*  "Join by new line";

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


7

জাভাস্ক্রিপ্ট (ES6), 104 141

সম্পাদনা করুন বৈশিষ্ট পর্যালোচনার পরে, আমি দেখেছি যে সারির সংখ্যা এমনকি হতে হবে (আমি এর আগে মিস)। সুতরাং একক পদক্ষেপে আউটপুটে প্রতিটি চরের সঠিক উত্সের অবস্থানটি খুঁজে পাওয়া খুব জটিল নয়।

F=a=>a.map((r,i)=>
  [...r].map((c,k)=>
     a[l=i+i]?a[(j=l+1)-k%2][(k+r.length)>>1]:a[l-j-k%2][k>>1]
  ).join('')
)

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;[["ABCDEF","GHIJKL","MNOPQR","STUVWX"]
 ,["12","34"], ["Hell","!  o","d  -","lroW"]
 ,["*___  ___  o","o|__) |__) *","*|    |    o","o __   __  *","*|    | _  o","o|__  |__| *"]
].forEach(v=>console.log(v.join('\n')+'\n\n'+F(v).join('\n')))

আউটপুট

ABCDEF
GHIJKL
MNOPQR
STUVWX

JDKELF
VPWQXR
GAHBIC
SMTNUO

12
34

42
31

Hell
!  o
d  -
lroW

 lol
o W-
!H e
ldr 

*___  ___  o
o|__) |__) *
*|    |    o
o __   __  *
*|    | _  o
o|__  |__| *

|_____)   *o
 |_ _     *o
||_ __|   *o
o*|_____)   
o* |_ _     
o*||_ _     

5

জে, 45 39 বাইট

   $$[:,@;@|.@|:([:,:~2,2%~1{$)<@|:@|.;.3]

জে এর একটি টেসেলেলেশন ফাংশন (কাটা ;.) রয়েছে যা অনেক সাহায্য করে।

   ]input=.4 6$97}.a.
abcdef
ghijkl
mnopqr
stuvwx

   ($$[:,@;@|.@|:([:,:~2,2%~1{$)<@|:@|.;.3]) input
jdkelf
vpwqxr
gahbic
smtnuo

দেখুন আমার উত্তর জে চ্যালেঞ্জ সমাধানের জন্য অন্য উপায় জন্য
FUZxxl

4

হাস্কেল, 128 127 বাইট

import Control.Monad
f=g.ap((++).map snd)(map fst).map(splitAt=<<(`div`2).length)
g(a:b:c)=(h=<<zip b a):g c
g x=x
h(a,b)=[a,b]

ব্যবহার: f ["12", "34"]->["42","31"]

কিভাবে এটা কাজ করে:

                                 input list:
                                   ["abcdef", "ghijkl", "mnopqr", "stuvwx"]
==========================================================================

map(splitAt=<<(`div`2).length)   split every line into pairs of halves:
                                   -> [("abc","def"),("ghi","jkl"),("mno","pqr"),("stu","vwx")]
ap((++).map snd)(map fst)        take all 2nd elements of the pairs and
                                 put it in front of the 1st elements:
                                   -> ["def","jkl","pqr","vwx","abc","ghi","mno","stu"]
(    zip b a) : g c              via g: take 2 elements from the list and
                                 zip it into pairs (reverse order), 
                                 recur until the end of the list:
                                   -> [[('j','d'),('k','e'),('l','f')],[('v','p'),('w','q'),('x','r')],[('g','a'),('h','b'),('i','c')],[('s','m'),('t','n'),('u','o')]]
h=<<                             convert all pairs into a two element list
                                 and concatenate:
                                   -> ["jdkelf","vpwqxr","gahbic","smtnuo"]  

সম্পাদনা করুন: @ জগারব সংরক্ষণ করতে একটি বাইট খুঁজে পেয়েছে।


নিস! g x=xখালি তালিকার ক্ষেত্রে আপনি 1 বাইট সংরক্ষণ করতে পারেন ।
জাগারব

3

জিএনইউ সেড -r, 179 বাইট

স্কোর এর জন্য +1 অন্তর্ভুক্ত -rস্কোরটিতে আরডকে সেড করার ।

এটি কীভাবে করতে হবে তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল sedতবে আমি মনে করি এটি এখন আমার কাছে রয়েছে:

# Insert : markers at start and end of each row
s/  /:  :/g
s/(^|$)/:/g
# Loop to find middle of each row
:a
# Move row start and end markers in, one char at a time
s/:([^  :])([^  :]*)([^ :]):/\1:\2:\3/g
ta
# Loop to move left half of each row to end of pattern buffer
:b
s/([^   :]+)::(.*)/\2   \1/
tb
# remove end marker
s/$/:/
# double loop to merge odd and even rows
:c
# move 1st char of rows 2 and 1 to end of pattern buffer
s/^([^  :])([^  ]*) ([^ ])(.*)/\2   \4\3\1/
tc
# end of row; remove leading tab and add trailing tab 
s/^ +(.*)/\1    /
tc
# remove markers and trailing tab
s/(:|   $)//g

নোট করুন উপরের সমস্ত সাদা স্থান একক হওয়া উচিত tab অক্ষর । মন্তব্য গল্ফ স্কোর অন্তর্ভুক্ত করা হয় না।

এছাড়াও লক্ষ করুন যে এটি :চিহ্নিতকারী চরিত্রগুলির ব্যাপক ব্যবহার করে । যদি ইনপুট স্ট্রিমটি থাকে :তবে অপরিবর্তিত আচরণটি ঘটবে। সবগুলি প্রতিস্থাপন করে এটিকে প্রশমিত করা যায়:গল্ফ স্কোর বিনা ব্যয়ে কিছু মুদ্রণযোগ্য অক্ষর (যেমন বিইএল) দিয়ে সমস্তকে ।

ইনপুট এবং আউটপুট হ'ল স্ট্রিংগুলির একটি ট্যাব-বিভাজিত তালিকা:

$ echo 'Hell
!  o
d  -
lroW' | paste -s - | sed -rf baker.sed | tr '\t' '\n'
 lol
o W-
!H e
ldr 
$ 

3

জে, 33 32 টি অক্ষর

একটি monadic ক্রিয়া।

0 2,.@|:_2|.\"1-:@#@{.(}.,.{.)|:

ব্যাখ্যা

আসুন Yআমাদের নমুনা ইনপুট হতে সংজ্ঞা দিয়ে শুরু করুন begin

   ] Y =. a. {~ 65 + i. 4 6          NB. sample input
ABCDEF
GHIJKL
MNOPQR
STUVWX

প্রথম অংশ ( -:@#@{. (}. ,. {.) |:) অর্ধেকভাগে বিভক্ত Yহয় এবং সংযোজন পরে শেষ হয়:

   # {. Y                            NB. number of columns in Y
6
   -: # {. Y                         NB. half of that
3
   |: Y                              NB. Y transposed
AGMS
BHNT
CIOU
DJPV
EKQW
FLRX
   3 {. |: Y                         NB. take three rows
AGMS
BHNT
CIOU
   3 }. |: Y                         NB. drop three rows
DJPV
EKQW
FLRX
   3 (}. ,. {.) |: Y                 NB. stitch take to drop
DJPVAGMS
EKQWBHNT
FLRXCIOU

দ্বিতীয় অংশে ( _2 |.\"1) আমরা এটিকে দুটি জোড়ায় বিভক্ত করেছি এবং তাদের বিপরীত:

   R =. (-:@#@{. (}. ,. {.) |:) Y    NB. previous result
   _2 <\"1 R                         NB. pairs put into boxes
┌──┬──┬──┬──┐
│DJ│PV│AG│MS│
├──┼──┼──┼──┤
│EK│QW│BH│NT│
├──┼──┼──┼──┤
│FL│RX│CI│OU│
└──┴──┴──┴──┘
   _2 <@|.\"1 R                      NB. reversed pairs
┌──┬──┬──┬──┐
│JD│VP│GA│SM│
├──┼──┼──┼──┤
│KE│WQ│HB│TN│
├──┼──┼──┼──┤
│LF│XR│IC│UO│
└──┴──┴──┴──┘

অবশেষে ( 0 2 ,.@|:), আমরা ম্যাট্রিক্সটি প্রয়োজনীয় হিসাবে স্থানান্তর করেছি এবং পিছনের অক্ষটি ফেলে দিই:

   ] RR =. _2 |.\"1 R                NB. previous result
JD
VP
GA
SM

KE
WQ
HB
TN

LF
XR
IC
UO
   0 2 |: RR                         NB. transpose axes
JD
KE
LF

VP
WQ
XR

GA
HB
IC

SM
TN
UO
   ($ RR) ; ($ 0 2 |: RR)            NB. comparison of shapes
┌─────┬─────┐
│3 4 2│4 3 2│
└─────┴─────┘
   ,. 0 2 |: RR                      NB. discard trailing axis
JDKELF
VPWQXR
GAHBIC
SMTNUO

শ্বেত স্পেস সহ পুরো এক্সপ্রেশন:

0 2 ,.@|: _2 |.\"1 -:@#@{. (}. ,. {.) |:

এবং একটি স্পষ্ট ক্রিয়া হিসাবে:

3 : ',. 0 2 |: _2 |.\"1 (-: # {. y) (}. ,. {.) |: y'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.