আমার পাশা ম্যাট্রিক্স মূল্য কত?


21

ইনপুট

3x3 সাব-ম্যাট্রিক্স সমন্বিত একটি খালি খালি বাইনারি ম্যাট্রিক্স পাশাপাশি রাখে।

কার্য

আপনার কাজটি 3x3 সাব-ম্যাট্রিক্সের মধ্যে বৈধ ডাইস প্যাটার্নগুলি (নীচে বর্ণিত হিসাবে) সনাক্ত করা। প্রতিটি বৈধ প্যাটার্ন সংশ্লিষ্ট পাশা এর মূল্য মূল্য। অবৈধ নিদর্শনগুলি 0 মূল্যবান।

আউটপুট

বৈধ ডাইস মানগুলির যোগফল।

পাশা নিদর্শন

1:(0,0,00,1,00,0,0)2:(1,0,00,0,00,0,1)অথবা(0,0,10,0,01,0,0)3:(1,0,00,1,00,0,1)অথবা(0,0,10,1,01,0,0)4:(1,0,10,0,01,0,1)5:(1,0,10,1,01,0,1)6:(1,0,11,0,11,0,1)অথবা(1,1,10,0,01,1,1)

উদাহরণ

নিম্নলিখিত ম্যাট্রিক্সের জন্য প্রত্যাশিত আউটপুটটি 14 হয় কারণ এতে ডাইস 5 , 6 এবং 3 রয়েছে এবং এর পরে একটি অবৈধ প্যাটার্ন থাকে (বাম থেকে ডানে এবং উপরে থেকে নীচে)।

(1,0,1,1,1,10,1,0,0,0,01,0,1,1,1,11,0,0,0,0,00,1,0,0,1,00,0,1,0,1,0)

বিধি

  • ম্যাট্রিক্সের প্রস্থ এবং উচ্চতা উভয়ই 3 এর গুণক হওয়ার গ্যারান্টিযুক্ত।
  • আপনাকে অবশ্যই সেই সাব-ম্যাট্রিকগুলি উপেক্ষা করতে হবে যা গ্রিডে সঠিকভাবে প্রান্তিক নয় (তৃতীয় পরীক্ষার কেস দেখুন)। আরও আনুষ্ঠানিকভাবে এবং 0-সূচককে ধরে নিচ্ছেন: বিবেচিত প্রতিটি উপ-ম্যাট্রিক্সের উপরের-বাম কক্ষের স্থানাঙ্কগুলি ফর্মের ।(3এক্স,3Y)
  • এটি

পরীক্ষার মামলা

// 0
[ [ 1,0,0 ],
  [ 0,0,1 ],
  [ 1,0,0 ] ]

// 2
[ [ 0,0,1 ],
  [ 0,0,0 ],
  [ 1,0,0 ] ]

// 0 (0 + 0)
[ [ 0,0,1,0,1,0 ],
  [ 0,0,0,1,0,0 ],
  [ 0,0,1,0,1,0 ] ]

// 9 (3 + 3 + 3)
[ [ 1,0,0,0,0,1,1,0,0 ],
  [ 0,1,0,0,1,0,0,1,0 ],
  [ 0,0,1,1,0,0,0,0,1 ] ]

// 6 (6 + 0)
[ [ 1,0,1 ],
  [ 1,0,1 ],
  [ 1,0,1 ],
  [ 1,0,1 ],
  [ 1,0,0 ],
  [ 1,0,1 ] ]

// 14 (5 + 6 + 3 + 0)
[ [ 1,0,1,1,1,1 ],
  [ 0,1,0,0,0,0 ],
  [ 1,0,1,1,1,1 ],
  [ 1,0,0,0,0,0 ],
  [ 0,1,0,0,1,0 ],
  [ 0,0,1,0,1,0 ] ]

// 16 (1 + 2 + 3 + 4 + 0 + 6)
[ [ 0,0,0,1,0,0,1,0,0 ],
  [ 0,1,0,0,0,0,0,1,0 ],
  [ 0,0,0,0,0,1,0,0,1 ],
  [ 1,0,1,1,1,1,1,0,1 ],
  [ 0,0,0,1,0,1,1,0,1 ],
  [ 1,0,1,1,1,1,1,0,1 ] ]

উত্তর:


5

পাইথন 3 , 1959 189 বাইট

-6 বাইটস @ জো কিংকে ধন্যবাদ

lambda m:sum({16:1,257:2,68:2,273:3,84:3,325:4,341:5,455:6,365:6}.get(int(''.join(str(e)for c in m[3*i:][:3]for e in c[3*j:][:3]),2),0)for i in range(len(m)//3)for j in range(len(m[0])//3))

এটি অনলাইন চেষ্টা করুন! (189) এটি অনলাইনে চেষ্টা করে দেখুন! (195)

মানব পাঠযোগ্য সংস্করণ:

# 3x3 part matrix to dice, beginning at coordinates 3*i, 3*j
def single_matrix_to_dice(matrix, i, j):
    # Example: matrix = [[0, 0, 0], [0, 1, 0], [0, 0, 0]], i=0, j=0 (result is 1)

    matrix_string = ''.join(
        str(e) for column in matrix[3*i:3*i+3] 
        for entry in column[3*j:3*j+3]
    ) # Slicing the matrix so that only the valid entries remain, here '000010000'

    # Interpreting the matrix string as binary number, here 16
    binary_number = int(matrix_string,2)

    # binary representations of all valid dice rolls
    dct = {16:1,257:2,68:2,273:3,84:3,325:4,341:5,455:6,365:6}

    return dct.get(binary_number, 0)

def f(matrix):
    return sum(
        single_matrix_to_dice(matrix, i, j) for i in range(len(m)//3) 
        for j in range(len(m[0])//3))
    ) # len(m)/3 would generate a float, so len(m)//3 is used

আমি অবাক হয়েছি আপনি যদি ম্যাট্রিক্সের ট্রান্সপোজের উপরও একই ক্রিয়াকলাপটি করে সামান্য ছোট করতে পারেন। এইভাবে আপনি আপনার মানচিত্রে সমস্ত সদৃশ এন্ট্রি মুছে ফেলতে পারেন যা প্রত্যেকে each বাইট যুক্ত করে। শুধু <18 বাইটে TRANSPOSE পদক্ষেপ যোগ করতে হবে
ইস্টন Bornemeier


উভয় উদাহরণ থেকে মুক্তি পান //3এবং '0'+''.join...দুটি বাইট সংরক্ষণ করতে ব্যবহার করুন :)
জোনাথন অ্যালান

... আরও দুটিকে বাঁচাতে গণনার সাথে এটিকে একত্রিত করুন: এখানে
জোনাথন অ্যালান


5

আর , 134 বাইট

function(m,d=dim(m)/3-1){for(a in 0:d)for(b in 0:d[2])F=F+sum(y<-m[1:3+a*3,1:3+b*3])*sum(y*2^(8:0))%in%utf8ToInt("āDđTŅŕLJŭ");F}

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

আমি লক্ষ্য করেছি আমার @ হিটিরার সম্পর্কেও একই ধারণা ছিল

ইতিহাস:

  • 171 : -10 বাইট @ জাইসিকে ধন্যবাদ!
  • 161 : -3 বাইটস @ জিউজেপ্পকে ধন্যবাদ!
  • 158 : -13 বাইট সংরক্ষিত!
  • 145 : -2 বাইটস @ জিউজেপ্পকে ধন্যবাদ!
  • 143 : -6 বাইট সংরক্ষণ!
  • 137 : -3 বাইট @ জাইসিকে ধন্যবাদ!


1
আরও 3 টি বাইট ব্যবহার করছেdim
জয়সি


1
চারপাশে একটি অতিরিক্ত জুটি বন্ধনী রয়েছে (2^(8:0))যা সরানো যেতে পারে।
জিউসেপ

1
আমি catআউটপুটটিতে ভুলে যাওয়া যুক্ত করেছি intToUtf8: 3 বাইট সংরক্ষণ করুন
জাইসি

4

পার্ল 6 , 113 105 97 94 বাইট

{sum (|@_[*;^3+3*$_]for ^@_[0]).rotor(9).map:{"@āđŅŕLJ@@DT@@ŭ".ords.first(:2[$_],:k)%7}}

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

ম্যাট্রিক্সকে 3x3 এর সাব ম্যাট্রিকগুলিতে বিভক্ত করে, নয় 1 এবং 0 এর দশকে বেস 2 তে রূপান্তরিত করে এবং পরে মানটির জন্য পূর্ণসংখ্যার তালিকায় এটি সূচক করে।

ব্যাখ্যা:

{  #Start anonymous code block
  sum   # Sum of all
     (|@_[*;^3+3*$_]   # Get the n*3 to n*3+3th elements in every sub-list
           for ^@_[0]) # For n in the range 0 to width (divide by 3 to avoid warnings)
     .rotor(9)  # Split this list into groups of 9 (split the dice up)
     .map:{     # And map each die to 
        "@āđŅŕLJ@@DT@@ŭ".ords  # In the list of integers
           .first(      # The first appearance of 
               :2[$_],  # The dice converted from a list of 0s and 1s to base 2
                 :k     # Returning the index
             )%7        # And modulo by 7 to get the alternate versions of 2, 3 and 6
          }
}

4

জেলি ,  29 28 বাইট

-১ মিঃ এক্সকোডারকে ধন্যবাদ ( প্রতিস্থাপনের জন্য ব্যবহার করুন ṢṪ)

s€3ZẎs3µZU,ƊṀṙ1FḄ“°€⁼-Ḍ?‘i)S

একটি monadic লিঙ্ক।

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

কিভাবে?

s€3ZẎs3µZU,ƊṀṙ1FḄ“°€⁼-Ḍ?‘i)S - Link: list of lists of 1s and 0s
s€3                          - split each into threes
   Z                         - transpose
    Ẏ                        - tighten
     s3                      - split into threes -> the sub-matrices in column-major order
       µ                  )  - for each sub-matrix, say D:
           Ɗ                 -   last three links as a monad:
        Z                    -     transpose D
         U                   -     reverse each -> D rotated a quarter turn clockwise
          ,                  -     pair with D
            Ṁ                -   get the maximum of the two orientations
             ṙ1              -   rotate left by one (to ensure FḄ will yield integers <256 for all non-zero valued D)
               F             -   flatten
                Ḅ            -   convert from binary
                         i   -   first 1-based index in (0 if not found):
                 “°€⁼-Ḍ?‘    -     code-page indices list = [128,12,140,45,173,63]
                           S - sum

উদাহরণস্বরূপ যখন একটি সাব-ম্যাট্রিক্স হয়:

[[1,0,1],
 [1,0,1],
 [1,0,1]]

তারপরে ZU,Ɗফলন:

[[[1, 1, 1],
  [0, 0, 0],
  [1, 1, 1]],   ...which has maximum (Ṁ):    ...and after ṙ1:
 [[1, 0, 1],                   [[1, 1, 1],         [[0, 0, 0],
  [1, 0, 1],                    [0, 0, 0],          [1, 1, 1],
  [1, 0, 1]]]                   [1, 1, 1]]          [1, 1, 1]]

... যা চ্যাপ্টা [0, 0, 0, 1, 1, 1, 1, 1, 1], যা, বাইনারি থেকে রূপান্তর হয় 63যা কোড পৃষ্ঠার সূচক তালিকায় ষষ্ঠ এন্ট্রি “°€⁼-Ḍ?‘( ?বাইট হচ্ছে 3Fমধ্যে জেলি এর কোড পৃষ্ঠার )


ṢṪ-1 এর পরিবর্তে কাজ করতে পারে ।
মিঃ এক্সকোডার

... হ্যাঁ এটি হবে (আমি ভেবেছিলাম আমি>> M< ব্যবহার করে সঞ্চয় করে যাচ্ছি )। ŒṪআমি অবাক হয়ে কিছু চালাক হয়ে যেতে পারি ...
জোনাথন অ্যালান


2

রেটিনা 0.8.2 , 90 বাইট

+`(...)(.+¶)(...)(.+¶)(...)
$1¶$3¶$5¶$2$4
¶

M!`.{9}
G`111000111|(101){3}|(.)0(.0).0\3\2
1

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

+`(...)(.+¶)(...)(.+¶)(...)
$1¶$3¶$5¶$2$4

3×33×এন

¶

M!`.{9}

সমস্ত ব্লক একসাথে যোগ দিন এবং তারপরে আবার 9 কলামের সারিগুলিতে বিভক্ত করুন।

G`111000111|(101){3}|(.)0(.0).0\3\2

কেবল বৈধ ডাইস নিদর্শন রাখুন (এর জন্য দুটি প্যাটার্ন 6, তারপরে একটি থেকে 0যে কোনও সংখ্যার সাথে মেলে 5যদিও 0অবশ্যই নীচের গণনায় অবদান রাখবে না))

1

বৈধ পাশা উপর পিপস গণনা করুন।


1

রুবি , 151 বাইট

->m{m.each_slice(3).flat_map{|r|r.transpose.each_slice(3).map{|d|" \x10āđŅŕLJ  DT  ŭ".chars.map(&:ord).index(d.flatten.join.to_i 2)&.%7}-[p]}.sum}

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

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

Ungolfed:

->m{
  m.each_slice(3).flat_map{|r|             # Split into groups of 3 rows
    r.transpose.each_slice(3).map{|d|      # Split into groups of 3 columns
      " \x10āđŅŕLJ  DT  ŭ".chars.map(&:ord) # [0,16,257,273,325,341,455,0,0,68,84,0,0,365]
        .index(                            # Find in that array
          d.flatten.join.to_i 2            #   the die flattened into a bitstring (nil if not found)
        )&.%7                              # Safe-modulo 7 (leaves nils as nil)
    }-[p]                                  # Remove nils
  }.sum                                    # Add 'em up
}

1

Clojure, 197 বাইট

#(apply +(for[R[range]i(R 0(count %)3)j(R 0(count(% 0))3)](case(apply +(map *(iterate(partial * 2)1)(for[x(R 3)y(R 3)]((%(+ i x))(+ j y)))))16 1 257 2 68 2 273 3 84 3 325 4 3 4 1 5 455 6 365 6 0)))

আমার কিছু স্মার্ট জিনিস নিয়ে আসা উচিত ছিল।


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