আমার ম্যাট্রিক্সের ডেল্টাস যোগ করুন


17

পটভূমি

বদ্বীপ পূর্ণসংখ্যার একটি অ্যারের অ্যারের পরপর উপাদানের পার্থক্য পেয়ে দ্বারা গঠিত হয়। উদাহরণস্বরূপ, [1, 2, 4, 7, 3, 9, 6]: নিম্নলিখিত বদ্বীপ হয়েছে [1, 2, 3, -4, 6, -3]

আমরা এখন প্রতিটি সারি এবং এটিতে থাকা প্রতিটি কলামের ডেল্টাস হিসাবে পূর্ণসংখ্যার একটি ম্যাট্রিক্সের ডেল্টা সংজ্ঞায়িত করব।

উদাহরণ হিসাবে:

Row deltas:

1 2 3 4 │ => [1, 1, 1]
4 5 6 7 │ => [1, 1, 1]
7 1 8 2 │ => [-6, 7, -6]

Column deltas (the matrix' columns have been rotated into rows for simplicity):

1 4 7 │ => [3, 3] 
2 5 1 │ => [3, -4]
3 6 8 │ => [3, 2]
4 7 2 │ => [3, -5]

যা আমাদের ম্যাট্রিক্স ডেল্টাসের নিম্নলিখিত তালিকা দেয়:

[[1, 1, 1], [1, 1, 1], [-6, 7, -6], [3, 3], [3, -4], [3, 2], [3, -5]]

এবং আমরা তাদের বাসাতে চাই না, আমরা সেই তালিকাটি সমতল করি:

[1, 1, 1, 1, 1, 1, -6, 7, -6, 3, 3, 3, -4, 3, 2, 3, -5]

কার্য

আপনার কাজটি হ'ল ইনপুট হিসাবে দেওয়া ম্যাট্রিক্সের সমস্ত ডেল্টা যোগফল । দ্রষ্টব্য যে ম্যাট্রিক্সটি কেবল অ-নেতিবাচক পূর্ণসংখ্যা নিয়ে গঠিত।

বিধি

  • সমস্ত মান নিয়ম প্রযোজ্য।

  • আপনি ধরে নিতে পারেন ম্যাট্রিক্সে প্রতিটি সারি এবং কলামে কমপক্ষে দুটি মান রয়েছে, তাই সর্বনিম্ন আকারটি 2x2 হবে

  • আপনি যেকোন যুক্তিসঙ্গত ফর্ম্যাটে ম্যাট্রিক্স নিতে পারেন, যতক্ষণ আপনি এটি নির্দিষ্ট করেছেন।

  • আপনি ধরেই নিতে পারেন না যে ম্যাট্রিক্সটি বর্গক্ষেত্র।

  • যদি সাহায্য করতে পারে আপনি আপনার বাইট গণনা কমাতে, আপনি পারে ঐচ্ছিকরূপে সারির সংখ্যা এবং ইনপুট হিসাবে কলামের সংখ্যা হিসাবে ভাল নিতে (যদি আপনি সি এ খুঁজছি!)।

  • এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোড (বাইটে), প্রতিটি ভাষায় জয়!

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

ইনপুট => আউটপুট

[[১, ২], [১, ২]] => ২
[[8, 7, 1], [4, 1, 3], [5, 5, 5]] => -9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => 24
[[9, 9, 9, 9, 9], [9, 9, 9, 9, 9]] => 0
[[1, 3, 14], [56, 89, 20], [99, 99, 99]] => 256
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 1, 8, 2]] => 9
[[13, 19, 478], [0, 12, 4], [45, 3, 6], [1, 2, 3]] => -72

উত্তর:


12

পাইথন 2 , 42 বাইট

lambda m:sum(r[-1]-r[0]for r in m+zip(*m))

একটি তালিকাবিহীন ফাংশন তালিকার একটি তালিকা নিচ্ছে mএবং ফলাফলটি দেখায়।

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

কিভাবে?

একটি তালিকার ডেল্টাসের যোগফলটি সর্বশেষ বিয়োগকে প্রথম বিয়োগ করে, বাকি সমস্ত কিছুই বাতিল করে:
(আরআর [এন] -আর [এন -1]) + (আর [এন -১] -আর [এন -২]) + ... + (আরআর [2] -আর [1]) = আর [এন] -আর [1]

zip(*m)ব্যবহারসমূহ আন-প্যাক ( *) এর mসারি পাস mকরার পৃথক আর্গুমেন্ট হিসাবে zip(ইন্টারলিভ) এবং অত: পর ম্যাট্রিক্স transposes। অজগর 2 এ এটি একটি তালিকার ফলস্বরূপ (টিপলগুলির, তবে এটি দুর্দান্ত) রয়েছে, তাই আমরা এটিকে (সহ) যুক্ত করতে পারি m, আমাদের সমস্ত সারি এবং কলামের মধ্য দিয়ে যেতে পারি r, প্রতিটিটির জন্য উপরের কৌশলটি সম্পাদন করতে পারি এবং ফলাফলগুলি যোগ করতে পারি ( sum(...))।


8

আর , 34 বাইট

function(m)sum(diff(m),diff(t(m)))

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

বেনামে ফাংশন। মূলত, আমি apply(m,1,diff)সারি দিকের ডিফসগুলি পেয়েছিলাম (এবং কলামগুলির 2পরিবর্তে 1) তবে স্টিভি গ্রিফিনের উত্তরের দিকে তাকিয়ে আমি এটি চেষ্টা করেছিলাম diffএবং এটি কার্যকর হয়েছে।


8

অক্টাভা , 33 বাইট

@(x)sum([diff(x)(:);diff(x')(:)])

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

ব্যাখ্যা:

এটি xইনপুট হিসাবে গ্রহণ করে একটি বেনামে ফাংশন । এটি সমস্ত কলামের মধ্যে পার্থক্য গ্রহণ করে এবং ট্রান্সপোজড কলামগুলির মধ্যে পার্থক্য সহ এটি যুক্ত করে x। এটি তখন দ্বিতীয় মাত্রার সাথে এই ভেক্টরটির যোগফল দেয়।



5

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

m=>m.map(r=>s+=[...l=r].pop()-r[0],s=0)|m[0].map(v=>s+=l.pop()-v)|s

বিন্যাসিত এবং মন্তব্য

m =>                              // given a matrix m
  m.map(r =>                      // for each row r of m
    s += [...l = r].pop() - r[0], //   add to s: last value of r - first value of r
    s = 0                         //   starting with s = 0
  ) |                             //
  m[0].map(v =>                   // for each value v in the first row of m:
    s += l.pop() - v              //   add to s: last value of last row of m - v
  ) |                             //
  s                               // return s

কারণ ইনপুট ম্যাট্রিক্সের সর্বনিম্ন আকার 2x2, m.map(...)|m[0].map(...)জোর করে গ্যারান্টিযুক্ত 0। এ কারণেই চূড়ান্ত ফলাফলটি ফিরিয়ে দেওয়া নিরাপদ|s

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


5

এমএটিএল , 7 বাইট

dG!dhss

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

ব্যাখ্যা:

ধরুন ইনপুটটি হ'ল

[8 7 1; 4 1 3; 5 5 5]

d        % Difference between rows of input
         % Stack:
         % [-4 -6  2; 1  4  2]
 G       % Grab the input again. Stack:
         % [-4 -6  2; 1  4  2]
         % [8 7 1; 4 1 3; 5 5 5]]
  !      % Transpose the bottom element. Stack:
         % [-4 -6  2; 1  4  2]
         % [8 4 5; 7 1 5; 1 3 5]
   d     % Difference between rows. Stack:
         % [-4 -6  2; 1  4  2]
         % [-1 -3  0; -6  2  0]
    h    % Concatenate horizontally. Stack:
         % [-4 -6  2 -1 -3  0; 1  4  2 -6  2  0]
     ss  % Sum each column, then sum all column sums. Stack:
         % -9



3

কাস্তে , 7 বাইট

ΣṁẊ-S+T

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

-1 ধন্যবাদ জনাব Xcoder থেকে দূরে আমার ফোকাস গ্রহণ Sএবং ¤এবং প্রতি m(যা চলেছি উচিত )।
-1 জগারবকে গালি দেওয়ার জন্য ধন্যবাদS

ব্যাখ্যা:

ΣṁẊ-S+T 3-function composition
    S   (x -> y -> z) (f) -> (x -> y) (g) -> x (x) (implicit): f x g x
     +    f: [x] (x) -> [x] (y) -> [x]: concatenate two lists
      T   g: [[x]] (x) -> [[x]]: transpose x
 ṁ      (x -> [y]) (f) -> [x] (x) -> [y]: map f on x and concatenate
  Ẋ       f: (x -> y -> z) (f) -> [x] (x) -> [z]: map f on splat overlapping pairs of x
   -        f: TNum (x) -> TNum (y) -> TNum: y - x
Σ       [TNum] (x) -> TNum: sum x


8 টি বাইটও , পরিবর্তে আপনার পদ্ধতির ব্যবহার করে।
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার ওয়াও সে সম্পর্কে ভুলে গিয়েছিলেন
এরিক দ্য আউটগল্ফার


3

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

e=[]:e
z=zipWith
f s=sum$(z(-)=<<tail)=<<(s++foldr(z(:))e s)

এটি অনলাইন চেষ্টা করুন! খাটো ট্রান্সপোজ ব্যবহার করেছি কিছুক্ষণ আগে।

ব্যাখ্যা

eখালি তালিকার একটি অসীম তালিকা এবং ট্রান্সপোর্টিংয়ের জন্য ব্যবহৃত হয়। zএটি zipWithফাংশনের জন্য একটি শর্টহ্যান্ড , কারণ এটি দুটিবার ব্যবহৃত হয়।

f s=                                        -- input s is a list of lists
                            foldr(z(:))e s  -- transpose s
                         s++                -- append the result to the original list s
                     =<<(                 ) -- map the following function over the list and concatenate the results
        (z(-)=<<tail)                       -- compute the delta of each list by element-wise subtracting its tail
    sum$                                    -- compute the sum of the resulting list

3

ব্র্যাচল্যাগ , 13 বাইট

অরিজিনালি @ সানডারের ডিজাইনের ভিত্তিতে

⟨≡⟨t-h⟩ᵐ²\⟩c+ 

ব্যাখ্যা

⟨≡      \⟩          #   Take the original matrix and it's transpose 
      ᵐ             #       and execute the following on both
       ²            #           map for each row (this is now a double map "ᵐ²")
  ⟨t h⟩             #               take head and tail
   -                #               and subtract them from each other (sum of deltas in a row)
         c+         #       and add all the values 
                    #           (we have two arrays of arrays so we concat them and sum them)

দ্য ⟨⟩ফর্ম্যাটিং গণ্ডগোল করছে, দুঃখিত

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


2

পাইথ, 7 বাইট

ss.+M+C

এখানে চেষ্টা করুন।

গল্ফের ভাষায় আমার প্রথম উত্তর! -1 বাইটের জন্য @ এরিকথ আউটগলফারকে ধন্যবাদ !

ব্যাখ্যা

ss.+M+C    ~ This is a full program with implicit input (used twice, in fact)

      C    ~ Matrix transpose. Push all the columns;
     +     ~ Concatenate with the rows;
  .+M      ~ For each list;
  .+       ~ Get the deltas;
 s         ~ Flatten the list of deltas;
s          ~ Get the sum;
           ~ Print Implicitly;

.tC-1 এর জন্য হতে পারে ।
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার ওহ, বাহ!

2

ব্র্যাচল্যাগ , 22 16 বাইট

⟨≡{s₂ᶠc+ᵐ-}ᵐ\⟩+ṅ

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

(-K ক্রপ্পের পরামর্শ দ্বারা অনুপ্রাণিত বাইটস।)

?⟨≡{s₂ᶠc+ᵐ-}ᵐ\⟩+ṅ.       Full code (? and . are implicit input and output)
?⟨≡{       }ᵐ\⟩          Apply this on both the input and its transpose:
    s₂ᶠ                  Get pairs of successive rows, [[row1, row2], [row2, row3], ...]
       c                 Flatten that: [row1, row2, row2, row3, row3, row4, ...]
        +ᵐ               Sum the elements within each row [sum1, sum2, sum2, sum3, ...]
          -              Get the difference between even-indexed elements (starting index 0)
                         and odd-indexed elements, i.e. sum1+sum2+sum3+... - (sum2+sum3+sum4+...)
                         This gets the negative of the usual difference i.e. a-b instead of b-a
                         for each pair of rows
               +         Add the results for the input and its transpose
                ṅ        Negate that to get the sign correct
                 .       That is the output

ডেল্টাসের যোগফল শেষ উপাদানটির সমান - প্রথমটি ⟨t-h⟩কৌশলটি করে। ফলাফল {⟨t-h⟩ᵐ+}R&\↰₁;R+যা 5 বাইট সংক্ষিপ্ত। এটি অনলাইন চেষ্টা করুন!
ক্রপবেব

⟨≡{...}ᵐ\⟩+পরিবর্তে {...}R&\↰₁;R+2 বাইট সংরক্ষণ করুন ব্যবহার করে । ⟨≡{⟨t-h⟩ᵐ+}ᵐ\⟩+ অনলাইনে এটি চেষ্টা করে
ক্রপবেব

একটি ডাবল মানচিত্রে মানচিত্রের ম্যাপিং পরিবর্তন করা এবং সংকেতযুক্ত এবং স্মমিং করা এবং অতিরিক্ত 2 বাইট সরিয়ে দেয় ⟨≡⟨t-h⟩ᵐ²\⟩c+এটি অনলাইন চেষ্টা করুন!
ক্রপবেব

@ ক্রপপিব এটির চেয়ে আলাদা এবং উন্নতির যথেষ্ট বড়, এটি আপনাকে নিজের নতুন উত্তর হিসাবে পোস্ট করা উচিত। আপনার পরামর্শগুলি দেখে আমাকে একটি ভিন্ন পদ্ধতি ব্যবহার করে 16-বাইট সমাধানের জন্য একটি ধারণা দেওয়া হয়েছে ⟨≡{s₂ᶠc+ᵐ-}ᵐ\⟩+ṅ এটি অনলাইনে চেষ্টা করে দেখুন! , সুতরাং আমি পরিবর্তে এই সংস্করণটি দিয়ে উত্তরটি আপডেট করব।
সূন্দর - মনিকা পুনরায় ইনস্টল করুন


1

এসওজিএল ভি0.12 , 9 বাইট

:⌡-≤H⌡-¹∑

এখানে চেষ্টা করুন! ( যুক্ত হয়েছে কারণ এটি স্ট্যাকের ইনপুট নেয়)

ব্যাখ্যা:

:          duplicate ToS
 ⌡         for each do
  -          get deltas
   ≤       get the duplicate ontop
    H      rotate it anti-clockwise
     ⌡     for each do
      -      get deltas
       ¹   wrap all of that in an array
        ∑  sum

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

@ Mr.Xcoder হুম .. আমি যে ডিফল্ট ইনপুট দ্বারা অনুমতি দেওয়া হয়েছিল, কিন্তু আমি সেখানে কেবল অনুমান এই জন্য ফাংশন .. তারপর আবার, আমি পারে হিসাবে ব্যবহার এই একটি নামহীন ফাংশন কল এই (একটি "ফাংশন" গুলি SOGL মধ্যে সংজ্ঞা নেই functionNameSingleChar\n)
dzaima

সবঠিক আছে. এটি তখন পুরোপুরি বৈধ।
মিঃ এক্সকডার

1

গণিত, 45 বাইট

Tr@Flatten[Differences/@#&/@{#,Transpose@#}]&

ইনপুট

[{{13, 19, 478}, {0, 12, 4}, {45, 3, 6}, {1, 2, 3}}]


প্রতিটি অ্যারেতে {#,Transpose@#}(আমার পাইথন উত্তরের মতো) সর্বশেষ থেকে প্রথমটি বিয়োগ করা কি আরও ছোট হবে ?
জোনাথন অ্যালান

Total[Differences/@{#,Thread@#},3]&
আলেফাল্ফ

1

সিজেম , 19 বাইট

0q~_z+2few:::-:+:+-

ইনপুট হল সংখ্যার তালিকার একটি তালিকা। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

0       e# Push 0
q~      e# Evaluated input. 
_       e# Duplicate
z       e# Zip (transpose)
+       e# Concatenate. This gives a lists of lists of numbers, where the
        e# inner lists are the original rows and the columns
2few    e# Replace each inner list of numbers by a list of overlapping
        e# slices of size 2. We not have three-level list nesting
:::-    e# Compute difference for each of those size-two slices. We now
        e# have the deltas for each row and column
:+      e# Concatenate all second-level lists (de-nest one level)
:+      e# Sum all values
-       e# Subtract from 0, to change sign. Implicitly display

4
এই উত্তরের আরও কলোন প্রয়োজন। আছে 2fewকোলন।
ফল

0

এমওয়াই, 9 বাইট

ωΔω⍉Δ ḟΣ↵

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

যেহেতু আমি এমওয়াই টানতে আড্ডায় ডেনিসকে পিং করতে পারি না (স্থগিতের কারণে), এটি বর্তমানে কাজ করবে না। (Δ বিয়োগের সময় পূর্বে ভ্যাকিফাই করা হয়নি) Thanks to whomever got Dennis to pull MY!

কিভাবে?

  • ωΔ, প্রথম কমান্ড লাইন আর্গুমেন্টের বৃদ্ধি
  • ω⍉Δ, প্রথম কমান্ড লাইন আর্গুমেন্টের স্থানান্তরের বৃদ্ধি incre
  • , একক তালিকায়
  • , সমতল
  • Σযোগফল
  • , আউটপুট


0

পাইট , 11 বাইট

Đ⊤ʁ-⇹ʁ-áƑƩ~

ব্যাখ্যা:

          Implicit input (as a matrix)
Đ         Duplicate the matrix
⊤         Transpose the matrix
ʁ-        Get row deltas of transposed matrix
⇹         Swap top two elements on the stack
ʁ-        Get row deltas of original matrix
á         Push the stack into an array
Ƒ         Flatten the array
Ʃ         Sum the array
~         Flip the sign (because the deltas are negative, as subtraction was performed to obtain them)
          Implicit output
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.