असतत बेकर का नक्शा


15

परिचय

बेकर नक्शा एक महत्वपूर्ण गतिशील प्रणाली है कि अराजक व्यवहार दिखाता है। यह इकाई वर्ग से स्वयं के लिए एक फ़ंक्शन है जो निम्नानुसार सहज रूप से परिभाषित है।

  • वर्ग को आधा में लंबवत काटें, जिसके परिणामस्वरूप आकार के दो आयताकार होते हैं 0.5×1
  • बाईं ओर के शीर्ष पर दाएं आधा भाग को ढेर करें, जिसके परिणामस्वरूप आकार का एक आयत होगा 0.5×2
  • एक 1×1वर्ग में वापस आयत को संपीड़ित करें ।

इस चुनौती में, आप इस परिवर्तन का असतत संस्करण लागू करेंगे।

इनपुट और आउटपुट

आपका इनपुट मुद्रण योग्य ASCII वर्णों का 2 डी सरणी है और 2m×2nकुछ के लिए आकार का व्हाट्सएप m, n > 0। आपका आउटपुट एरे का उपयोग करके प्राप्त की गई समान 6×4सरणी है

ABCDEF
GHIJKL
MNOPQR
STUVWX

उदाहरण के तौर पे। सबसे पहले, बाएँ आधे के शीर्ष पर स्थित सरणी के दाहिने आधे को ढेर करें:

DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU

फिर, स्तंभों को वर्णों के जोड़े में विभाजित करें, और स्वतंत्र रूप से प्रत्येक जोड़ी को 90 डिग्री पर दक्षिणावर्त घुमाएं, "आयताकार" मूल आकार में लंबा आयत: "

JDKELF
VPWQXR
GAHBIC
SMTNUO

यह उपरोक्त सरणी के लिए सही आउटपुट है।

नियम

इनपुट और आउटपुट प्रारूप लचीले हैं। आप न्यूलाइन-सीमांकित स्ट्रिंग्स, स्ट्रिंग्स की सूची या वर्णों के 2 डी सरणियों का उपयोग कर सकते हैं। हालांकि, इनपुट और आउटपुट चाहिए ठीक उसी प्रारूप है: यदि आप अपने प्रस्तुत करने के लिए किसी भी मान्य इनपुट पर समय की एक मनमाना संख्या तेज़ी से दोहराने में सक्षम होना चाहिए।

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।

परीक्षण के मामलों

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

ऑनलाइन प्रदर्शन । यह वर्णों के 2 डी-सरणी का उपयोग करता है।

स्ट्रिंग्स का ऐरे एक चार लंबा (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
मैं आप मजाक कर नहीं कर रहा हूँ, मैं सिर्फ स्वतंत्र रूप से लिखा सटीक एक ही समाधान के रूप में तुमने किया था। मैंने एक विचार प्राप्त करने के लिए सभी उत्तरों को चमक दिया, लेकिन कुछ भी विस्तृत नहीं किया।
orlp

@orlp हाँ, यह काफी बार है कि पाइथ में सबसे सरल दृष्टिकोण सबसे छोटा है। इसलिए कई लोग इसे आसानी से खोज लेते हैं।
जकुबे

@orlp Btw, बस पायथ रेपो (अभी तक स्वीकार नहीं) के लिए एक पुल अनुरोध किया। भविष्य में आप c2kइसके बजाय बस कर सकते हैं ck/lk2c2kस्ट्रिंग को दो समान भागों में विभाजित करता है।
याकूब

9

जूलिया, 136 बाइट्स

एक बहुत ही सरल कार्यान्वयन। विशेष रूप से प्रतिस्पर्धी प्रविष्टि नहीं, लेकिन यह मजेदार था!

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

जावास्क्रिप्ट (ईएस 6), 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

चुनौती में हल करने के लिए एक और तरीके के लिए मेरा जवाब देखें जे
फूज़लक्ल

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"]  

संपादित करें: @Zgarb को बचाने के लिए एक बाइट मिला।


अच्छा! g x=xखाली सूची मामले के लिए आप 1 बाइट बचा सकते हैं ।
जर्बर्ग

3

GNU sed -r, 179 बाइट्स

स्कोर में -rsed के लिए arg के लिए +1 शामिल है ।

मुझे यह पता लगाने में थोड़ा समय लगा कि मुझे यह कैसे करना है 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

जे, ३३ ३२ अक्षर

एक संज्ञा क्रिया।

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

व्याख्या

चलो Yहमारे नमूना इनपुट होने को परिभाषित करके शुरू करते हैं ।

   ] 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'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.