প্রতিবিম্ব পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক বাইনারি ম্যাট্রিক্স


14

এখানে সমস্ত 2x2 বাইনারি ম্যাট্রিক রয়েছে

#0  #1  #2  #3  #4  #5  #6  #7  #8  #9  #10 #11 #12 #13 #14 #15
--  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
00  00  00  00  01  01  01  01  10  10  10  10  11  11  11  11  
00  01  10  11  00  01  10  11  00  01  10  11  00  01  10  11  

দুটি বাইনারি বর্গক্ষেত্র ম্যাট্রিক্স সম্পর্কের অধীনে সমতুল্য হয় ~যদি একটি অনুভূমিক বা উল্লম্ব অক্ষের মধ্যে সংখ্যার প্রতিচ্ছবি দ্বারা অন্যটিতে ম্যাপ করা যায় ।

#1 ~ #2উল্লম্ব অক্ষের মধ্যে প্রতিবিম্বের অধীনে যাতে আমাদের কেবল এটির একটি রাখা প্রয়োজন (এটি কোনও বিষয় নয়)। তেমনিভাবে #3 ~ #12, #6 ~ #9এবং অন্যান্য।

লক্ষ্যটি এমন একটি প্রোগ্রাম তৈরি করা হয় যা একটি একক ইনপুট নেয় Nএবং যতগুলি N x Nবাইনারি ম্যাট্রিকগুলি বিদ্যমান তার প্রিন্ট করে যে আউটপুটে সমস্ত ম্যাট্রিকগুলি উপরের সম্পর্কের অধীনে পৃথক।

হ্যান্ড-ওয়েভ সিউডোকোডে, একটি গ্রহণযোগ্য সমাধান হবে

define M[i] = N by N matrix with bit pattern equal to i

for i = 0 to (2^(N^2)) - 1
    valid = true
    for j = i+1 to (2^(N^2)) - 1
        if (equivalent(M[i], M[j]))
            valid = false
            break
    if (valid)
        print (M[i])

ইনপুট জন্য N=2একটি বৈধ আউটপুট হবে

00  00  00  01  10  01  11
00  01  11  01  01  11  11

কিন্তু একই সমতুল্য শ্রেণী থেকে বিভিন্ন ম্যাট্রিক নির্বাচন করে অন্য বৈধ আউটপুট হবে

00  10  11  11  11  10  01
00  00  00  10  11  10  10

ম্যাট্রিক্সের ক্রমটি কোনও ব্যাপার নয়, সমমানের ম্যাট্রিকগুলির থেকে বিশেষ পছন্দটি কোনও বিষয় নয়, এবং হোয়াইটস্পেসের কোনও ব্যাপার নেই, ম্যাট্রিকগুলি আউটপুট করুন তবে যতক্ষণ না এটি মানব-পাঠযোগ্য।

আউটপুট অবশ্যই অবসন্ন হতে হবে।

সংক্ষিপ্ততম কোড জিতেছে।

সম্পাদনা: এটি আমার প্রথম গল্ফ পোস্ট এবং আমি জয়ের মানদণ্ডে আমার মন পরিবর্তন করেছি।

একটি ভাষার সংক্ষিপ্ততা / গল্ফিং জয়ের জন্য বিশেষভাবে ডিজাইন করা হয়নি এমন সংক্ষিপ্ততম কোড ।

আমি আশা করি এই মানদণ্ডটি উত্তরোত্তর পরবর্তী সময়ে বদলাতে খারাপ শিষ্টাচার নয়, তবে আমি মনে করি এটি একটি "সাধারণ" ভাষায় করা আরও অনেক আকর্ষণীয় প্রস্তাব।


5
পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি দুর্দান্ত প্রথম চ্যালেঞ্জ, তবে আমি লোকদের ফলাফলকে একটি নমনীয় ফর্ম্যাটে আউটপুট করার অনুমতি দেওয়ার পরামর্শ দেব (উদাহরণস্বরূপ প্রতিটি ম্যাট্রিক্স তালিকাগুলির তালিকা হিসাবে)। এইভাবে লোকেরা আউটপুট ফর্ম্যাট করার বিষয়ে চিন্তা করার পরিবর্তে (চ্যালেঞ্জের খুব আকর্ষণীয় মূল প্রতিসাম্য পর্যন্ত অনন্য ম্যাট্রিকগুলি সন্ধান করতে) ফোকাস করতে পারে (যা সহজেই অনেকগুলি বাইট নিতে পারে এবং মূল চ্যালেঞ্জের গল্ফিংকে কম করে তুলতে পারে) গুরুত্বপূর্ণ)।
মার্টিন ইন্ডার

মতামতের জন্য ধন্যবাদ, আপনি উভয়, আমি সেই অনুযায়ী প্রশ্নটি সম্পাদনা করেছি।
spraff

2
আমি একটি সমতা হিসাবে ঘূর্ণন অন্তর্ভুক্ত প্রলুব্ধ হয়েছিল। আমি প্রতিটি বিটকে সমতুল্য হিসাবে অন্তর্ভুক্ত করার জন্যও প্রলুব্ধ হয়েছিলাম। আমি সারি / কলামগুলির সমপরিমাণকে সমতা হিসাবে অন্তর্ভুক্ত করার জন্যও প্রলুব্ধ হয়েছিলাম। শেষ পর্যন্ত, প্রয়োজনীয়তাগুলি মোটামুটি সহজ রাখার জন্য আমি একটি স্বেচ্ছাসেবী সিদ্ধান্ত নিয়েছি। একটি ভিন্নতা পোস্ট নির্দ্বিধায়।
spraff

1
আমরা অতীতে এটি নিয়ে আলোচনা করেছি এবং কোড গল্ফ প্রতিযোগিতায় নির্দিষ্ট ভাষাগুলি বাদ দেওয়া বা শাস্তি দেওয়ার বিরুদ্ধে রায় দিয়েছি , যার অর্থ এমন চ্যালেঞ্জ যে বিষয়টি করে তা বিবেচ্য বিষয় হিসাবে বিবেচনা করা উচিত নয়। তদ্ব্যতীত, গৃহীত উত্তর হ'ল উত্তর যা চ্যালেঞ্জ জয় করে , যার অর্থ কোড গল্ফ প্রশ্নের সংক্ষিপ্ততম কোড। সারমর্ম: আপনি কোনো উত্তর গ্রহণ করতে না চান, তাহলে এ সব , তারপর না। তবে আপনি যদি কোনও উত্তর গ্রহণ করেন তবে এটি সবচেয়ে কম হওয়া উচিত।
ডেনিস

1
অবশেষে, জে ভাষা হয় না একটি golfing ভাষা, কিন্তু একটি উচ্চ পর্যায়ের, সাধারণ, উচ্চ ক্ষমতা সম্পন্ন প্রোগ্রামিং ভাষা যে 25 বছর জন্য অস্তিত্ব হয়েছে। এমনকি আপনার বর্তমান বিধিগুলি সহ, আপনি এখনও ভুল উত্তর গ্রহণ করেছেন।
ডেনিস

উত্তর:


1

জে, 66 56 53 বাইট

[:~.,~{.@/:~@(2:_&(][:,(;|.;|."1)&>)<)@$"#.2#:@i.@^*:

নিষ্ঠুর বল অনুসন্ধান।

ব্যবহার

   f =: [:~.,~{.@/:~@(2:_&(][:,(;|.;|."1)&>)<)@$"#.2#:@i.@^*:
   f 2
┌───┬───┬───┬───┬───┬───┬───┐
│0 0│0 0│0 0│0 1│0 1│0 1│1 1│
│0 0│0 1│1 1│0 1│1 0│1 1│1 1│
└───┴───┴───┴───┴───┴───┴───┘
   # f 3
168
   # f 4
16576

ব্যাখ্যা

[:~.,~{.@/:~@(2:_&(][:,(;|.;|."1)&>)<)@$"#.2#:@i.@^*:  Input: integer n
                                                   *:  Square n
                                           2      ^    Compute m = 2 ^ (n ^ 2)
                                               i.@     Make a range [0, m)
                                            #:@        Convert each to binary digits
    ,~                                                    Pair, make [n, n]
                                       $"#.            Reshape each binary list
                                                          to a matrix with size [n, n]
             (                       )@                Operate on each
                                    <                    Box it, call x
              2:                                         The constant 2
                _&(                )                     Repeat that many times on x
                       (        )&>                        For each box
                            |."1                             Reverse by column
                         |.                                  Reverse by row
                           ;                                 Join them
                        ;                                    Join with initial
                    [:,                                    Flatten
                   ]                                       Return that as the new x
         /:~@                                          Sort each
      {.@                                              Take the head of each
[:~.                                                   Unique and return

4

জেলি , 19 বাইট

Ṛ€;U;
2ḶṗṗµWdz¡Ṃµ€Q

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

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

2ḶṗṗµWdz¡Ṃµ€Q  Main link. Argument: n (integer)

2Ḷ             Unlength 2; yield [0, 1].
  ṗ            Cartesian product; construct all vectors of {0, 1}^n.
   ṗ           Cartesian product; construct all vectors of ({0, 1}^n)^n.
               This yields A, the array of all binary n×n matrices.
    µ     µ€   Begin a new, monadic chain and apply it to all matrices M in A.
     W           Wrap; yield [M].
      dz¡        Call the helper link n times, initially with argument [M], then
                 on the previous return value.
         Ṃ       Take the minimum of the results.
               This replaces all matrices with the lexicographical minimum of their
               equivalence classes, mapping equivalent matrices to the same matrix.
            Q  Unique; deduplicate the resulting array of matrices.

Ṛ€;U;          Helper link. Argument: L (array of matrices)

Ṛ€             Reverse the order of the rows of each M in L.
   U           Reverse the order of the columns of each M in L.
  ;            Concatenate the resulting matrix arrays.
    ;          Concatenate the result with L.

2

পাইথ - 24 23 21 বাইট

সমস্ত প্রতিচ্ছবি পাওয়ার আরও ভাল উপায় খুঁজছেন।

আমাকে 2 বাইট গল্ফ করার জন্য @ পিটু 1998 কে ধন্যবাদ!

hM.gS+K_Bk_MMKcRQ^`T*

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

পুরো ব্যাখ্যা দেওয়ার আগে গল্ফিংয়ের জন্য অপেক্ষা করতে যাওয়া, তবে এটি মূলত সমস্ত সম্ভাব্য বাইনারি ম্যাট্রিক্স তৈরি করে, তারপরে .gসমস্ত সম্ভাব্য প্রতিচ্ছবিগুলির তালিকা অনুসারে বাছাই করে, তারপরে প্রতিটি গ্রুপ থেকে কেবল একটি করে নেয়।


যদি আমি এটি আর্গুমেন্ট দিয়ে চালিত করি 3তবে আউটপুটটি শুরুতে [['000', '000', '00'],অনুপস্থিত শূন্যটি নোট করুন।
21

@ স্প্রাফ ওহফস, আমি এর ^2Qপরিবর্তে করলাম Q^2। ফিক্স আমাকে একটি
বাইটও

@ স্প্রাফ এটি ঠিক করে দিয়েছে।
মালটিসেন 21

আমি নিশ্চিত আপনি _MMপরিবর্তে করতে পারেন mC_Cd
পূর্কাকুডারী

@ পিটু 1998 ওহ হ্যাঁ, ধন্যবাদ!
মালটিসেন

1

হাস্কেল, 100 বাইট

import Data.List
r=reverse
e#n=mapM id$e<$[1..n]
f n=nubBy(\a b->elem a[r b,r<$>b,r$r<$>b])$"01"#n#n

ব্যবহারের উদাহরণ: f 2-> [["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]

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

e#n=mapM id$e<$[1..n]        -- helper function: creates a list of all combinations
                             -- of the elements of e of length n
                             -- "01" # 2 -> ["00","01","10","11"]

                   "01"#n#n  -- creates all binary n x n matrices
nubBy                        -- remove duplicates according to the equivalence
                             -- relation
   \a b ->                   -- a equals b if
       a elem                -- a is an element of
         [r b,r<$>b,r$r<$>b] -- the list of reflections of b 

1

জাভাস্ক্রিপ্ট (ES6), 195 বাইট

n=>[...Array(p=1<<n*n)].map(_=>(p++).toString(2).slice(1)).filter((s,i,a)=>![1,0,1].some(c=>a.indexOf((c?b.reverse():b=b.map(s=>[...s].reverse().join``)).join``)<i,b=s.match(eval(`/.{${n}}/g`))))

কনটেনটেটেড সমস্ত ম্যাট্রিক্স এন্ট্রি উপস্থাপন করে স্ট্রিংগুলি প্রদান করে যেমন মাঝের সাথে একটি 1111011113 × 3 ম্যাট্রিক্স উপস্থাপন করে। ব্যাখ্যা:10

n=>[...Array(p=1<<n*n)].map(            Enumerate all binary matrices
 _=>(p++).toString(2).slice(1)          Convert to padded binary
).filter((s,i,a)=>![1,0,1].some(        Check reflections of each matrix
 c=>a.indexOf((c?b.reverse():           Reverse the order of lines
  b=b.map(s=>[...s].reverse().join``    Or reverse each line
  )).join``)<i,                         Has this been seen before?
 b=s.match(eval(`/.{${n}}/g`))))        Reshape string into a square

একটি পুনরাবৃত্ত সংখ্যা থেকে বাইনারি ফাংশন হুবহু একই দৈর্ঘ্য:.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
ETH প্রোডাকশন

1

গণিত, 94 বাইট

DeleteDuplicatesBy[{0,1}~Tuples~{#,#},Sort@Join[Join@@Outer[Reverse,{#},{1,2,{1,2}},1],{#}]&]&

1
হাই জেএইচএম! উত্তরের জন্য ধন্যবাদ. আমি ম্যাথামেটিকাকে খুব ভাল করে বুঝতে পারি না, তাই আপনি কী চলছে তা সম্পর্কে কিছুটা ব্যাখ্যা যোগ করতে পারবেন? (আমি আপনার অন্যান্য সাম্প্রতিক উত্তরে একই জিনিস পোস্ট করেছি some কিছু ব্যাখ্যা দেওয়া এই সাইটে উত্তরের জন্য
দৃ

0

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

এটি নীলের সাথে বেশ অনুরূপ হতে পারে, তবে জাভাস্ক্রিপ্টে সমস্ত কৌশলগুলির ব্যাগের মধ্যে এত বিচিত্র নয়।

n=>eval("r=x=>[...x].reverse();for(l='',i=m=1<<n*n;i<m+m;i++)a=i.toString(2).slice(1).match(eval(`/.{${n}}/g`)),[b=a.map(x=>r(x).join``),r(a),r(b)].some(x=>~l.search(x))?0:l+=a+`\n`")

কম গল্ফড

n=>{
  r = x =>[...x].reverse();
  for(l = '', i = m = 1<<n*n; i < m+m; i++)
    a = i.toString(2).slice(1).match(eval(`/.{${n}}/g`)), // base matrix as an array of strings
    b = a.map(x => r(x).join``), // horizontal reflection
    c = r(a), // vertical reflection
    d = r(b), // both reflections
    // check if already found 
    [b, c, d].some(x => ~l.search(x)) // using search, arrays are converted to comma separated strings 
      ? 0 
      : l += a+`\n` // add new found to list (again as a comma separated string)
  return l
}

টেস্ট সাবধান, এমনকি ইনপুট 4 এর জন্য চলমান সময় অত্যধিক দীর্ঘ

f=n=>eval("r=x=>[...x].reverse();for(l='',i=m=1<<n*n;i<m+m;i++)a=i.toString(2).slice(1).match(eval(`/.{${n}}/g`)),[b=a.map(x=>r(x).join``),r(a),r(b)].some(x=>~l.search(x))?0:l+=a+`\n`")

function update() {
  var i=+I.value;
  
  result = f(i)
  count = result.split('\n').length
  O.textContent = count+'\n'+result
}

update()
Input <select id=I onchange="update()"><option>2<option>3<option>4<option>5</select>
<pre id=O></pre>

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