ক্ষুদ্রতম গড় সহ সাবম্যাট্রিক্স সন্ধান করুন


21

আপনাকে পূর্ণসংখ্যার n-by-m ম্যাট্রিক্স দেওয়া হয়েছে, যেখানে n, m> 3 । আপনার কাজটি হ'ল 3-বাই -3 সাব-ম্যাট্রিক্সের সর্বাধিক গড় এবং এটির মান আউটপুট পাওয়া।

বিধি এবং ব্যাখ্যা:

  • পূর্ণসংখ্যাগুলি অ-নেতিবাচক হবে
  • .চ্ছিক ইনপুট এবং আউটপুট ফর্ম্যাট
  • আউটপুট অবশ্যই কমপক্ষে 2 দশমিক পিন অবধি সঠিক হতে হবে (যদি এটি অ-পূর্ণসংখ্যার হয়)
  • সাবম্যাট্রিকগুলি অবশ্যই একটানা সারি এবং কলাম দ্বারা গঠিত

পরীক্ষার কেস:

35    1    6   26   19   24
 3   32    7   21   23   25
31    9    2   22   27   20
 8   28   33   17   10   15
30    5   34   12   14   16
 4   36   29   13   18   11 

Minimum mean: 14

100    65     2    93
  3    11    31    89
 93    15    95    65
 77    96    72    34

Minimum mean: 46.111

1   1   1   1   1   1   1   1
1   1   1   1   1   1   1   1
1   1   1   1   1   1   1   1
1   1   1   1   1   1   1   1

Minimum mean: 1

4   0   0   5   4
4   5   8   4   1
1   4   9   3   1
0   0   1   3   9
0   3   2   4   8
4   9   5   9   6
1   8   7   2   7
2   1   3   7   9

Minimum mean: 2.2222

এটি তাই প্রতিটি ভাষার সংক্ষিপ্ততম কোড জিততে পারে। আমি লোকদের আগে থেকেই ব্যবহৃত ভাষাগুলিতে উত্তর পোস্ট করতে উত্সাহিত করি, যদিও এটি প্রথমটির চেয়ে কম নয়।


অবিচ্ছিন্নভাবে সারি এবং কলামগুলির সাথে চ্যালেঞ্জ থাকাও আকর্ষণীয় হবে
লুইস মেন্ডো

না, নিজেকে এগিয়ে যান :-)
লুইস মেন্ডো

আপনি কি এটি বলতে কি পূর্ণসংখ্যার গাণিতিক বা ডাটা টাইপ অর্থে, অর্থাত, আমরা অবিচ্ছেদ্য ভাসে একটি ম্যাট্রিক্স নিতে পারবে?
ডেনিস

গাণিতিক অর্থে। আমি এখানে শিখেছি এটি কি এক জিনিস, আপনি হ'ল বিভিন্ন ভাষায় ডেটা ধরণের সম্পর্কে ধারণা তৈরি করতে পারেন ...
স্টিভি গ্রিফিন

মিষ্টি, এটি একটি বাইট সংরক্ষণ করে। স্পষ্ট করার জন্য ধন্যবাদ।
ডেনিস

উত্তর:



11

জেলি , 11 9 বাইট

+3\⁺€F÷9Ṃ

@ ডেনিসকে 2 বাইট সংরক্ষণ করা হয়েছে ।

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

ব্যাখ্যা

+3\⁺€F÷9Ṃ  Main link. Input: 2d matrix
+3\        Reduce overlapping sublists of size 3 by addition
   ⁺€      Repeat previous except over each row
     F     Flatten
      ÷9   Divide by 9
        Ṃ  Minimum

1
ওহ,> _ <অবশ্যই: ডি
জোনাথন অ্যালান

আমি জেলি একটি নিরবচ্ছিন্ন সংস্করণে আগ্রহী হবে, যেহেতু এটির অনেক দরকারী কার্যকারিতা রয়েছে।
জে আতকিন

1
+3\⁺€F÷9Ṃকয়েকটা বাইট সাশ্রয় করে।
ডেনিস

@ ডেনিস ওয়াও, এটি কি সত্যই +3\প্রথম প্রক্রিয়াজাতকরণ এবং নকল হিসাবে +3\€?
মাইল

1
পার্সারটি মূলত স্ট্যাক-ভিত্তিক; \পপ 3এবং +এবং quicklink পাহাড় জমে +3\, quicklink পপ এবং দুই কপি পাহাড় জমে, তাহলে আগ কপি পপ আপ এবং একটি ম্যাপিং সংস্করণ push কর্মের।
ডেনিস


8

এমএটিএল , 13 9 বাইট

3thYCYmX<

@ Rahnema1 এর উত্তর পোর্ট ।

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

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

ইনপুট বিবেচনা করুন

[100 65  2 93;
   3 11 31 89;
  93 15 95 65;
  77 96 72 34]

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

3th   % Push [3 3]
      % STACK: [3 3]
YC    % Input matrix implicitly. Convert 3x3 sliding blocks into columns
      % STACK: [100   3  65  11;
                  3  93  11  15;
                 93  77  15  96;
                 65  11   2  31;
                 11  15  31  95;
                 15  96  95  72;
                  2  31  93  89;
                 31  95  89  65;
                 95  72  65  34]
Ym    % Mean of each column
      % STACK: [46.1111 54.7778 51.7778 56.4444]
X<    % Minimum of vector. Display implicitly
      % STACK: [46.1111]

7

গণিত, 37 35 বাইট

2 মার্টিনের জন্য @ মার্টিনইেন্ডারকে ধন্যবাদ!

Min@BlockMap[Mean@*Mean,#,{3,3},1]&

ব্যাখ্যা

Min@BlockMap[Mean@*Mean,#,{3,3},1]&
    BlockMap[                    ]&  (* BlockMap function *)
                        #            (* Divide the input *)
                          {3,3}      (* Into 3x3 matrices *)
                                1    (* With offset 1 *)
             Mean@*Mean              (* And apply the Mean function twice to
                                        each submatrix *)
Min                                  (* Find the minimum value *)

খুব চতুর!
গ্রেগ মার্টিন

5

পাইথন 2 , 93 81 80 79 বাইট

f=lambda M:M[2:]and min(sum(sum(zip(*M[:3])[:3],()))/9,f(M[1:]),f(zip(*M)[1:]))

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

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

একটি recursive ফাংশন যে tuples একটি তালিকা লাগে (অথবা অন্য কোন সূচিযোগ্য 2D iterable যে একটি ম্যাট্রিক্স প্রতিনিধিত্ব করে এম ) এবং যাও recursively গড় ন্যূনতম নির্ণয় 3 × 3 উপরের বাম কোণে submatrix এবং করতে যাও recursively প্রয়োগ এম ছাড়া এটির প্রথম সারি এবং এম এর প্রথম কলাম ছাড়াই।

f(M) নিম্নলিখিত না।

  • যদি এম এর তিনটি কম সারি থাকে M[2:]তবে একটি খালি তালিকা, যা f দেয়।

    মনে রাখবেন, প্রথম দৌড়ে এন> 3 থেকে প্রাথমিকটি খালি তালিকাটি ফেরত দিতে পারে না।

  • যদি এম এর তিনটি সারি বা তার বেশি থাকে তবে M[2:]তা খালি নয় এবং এইভাবে সত্য হয়, সুতরাং ডানদিকে ডান কোডটি andকার্যকর হয় এবং নিম্নলিখিত তিনটি মানের সর্বনিম্ন ফিরিয়ে দেয়।

    min(sum(sum(zip(*M[:3])[:3],()))/9

    M[:3]এম এর প্রথম তিনটি সারি পাওয়া যায় , zip(*...)সারি এবং কলামগুলি স্থানান্তরিত করে (টিউপসগুলির একটি তালিকা উপস্থাপন করে), sum(...,())সমস্ত টিপলসকে সম্মিলিত করে (এটি কাজ করে কারণ +এটি সংক্ষিপ্তকরণ), এবং sum(...)/9নয়টি পূর্ণসংখ্যার ফলাফলের তালিকার গড়ের গণনা করে।

    f(M[1:])

    যাও recursively প্রযোজ্য করার এম তার প্রথম সারিতে সরিয়ে।

    f(zip(*M)[1:])

    সারি এবং কলামগুলি স্থানান্তর করে, ফলাফলের প্রথম সারিটি সরিয়ে দেয় (সুতরাং এম এর প্রথম কলামটি , এবং পুনরাবৃত্তভাবে ফলাফলের সাথে প্রয়োগ করে।

মনে রাখবেন যে পুনরাবৃত্তির কলটিতে পূর্বে সরানো স্তরটি সর্বদা একটি সারি হবে, সুতরাং এমের কাছে পর্যাপ্ত সারি রয়েছে কিনা তা পরীক্ষা করা সর্বদা পর্যাপ্ত হবে ..

শেষ পর্যন্ত, কেউ আশা করতে পারে যে কিছু পুনরাবৃত্ত কলগুলি ফিরে আসার []সমস্যা হবে। যাইহোক, পাইথন মধ্যে 2 , যখনই এন একটি সংখ্যা এবং একটি একটি iterable, তুলনা হয় n < Aআয় সত্য , তাই এক বা একাধিক নম্বর এবং এক বা একাধিক iterables ন্যূনতম কম্পিউটিং সবসময় সর্বনিম্ন সংখ্যা ফিরে আসবে।


3

জে , 21 বাইট

[:<./@,9%~3+/\3+/\"1]

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

জে মধ্যে subarrays কাজ করার সঠিক পথ তৃতীয় (ব্যবহার করা _3কেটে) ফর্ম ;.যেখানে x (u;._3) yমানে ক্রিয়া প্রয়োগ করতে uআকারের প্রতিটি পূর্ণ subarray উপর xঅ্যারের y। এমন একটি সমাধান ব্যবহারের জন্য যা কেবলমাত্র আরও 1 বাইট প্রয়োজন তবে এটি বৃহত্তর অ্যারেতে আরও কার্যকর হবে।

[:<./@,9%~3 3+/@,;._3]

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

ব্যাখ্যা

[:<./@,9%~3+/\3+/\"1]  Input: 2d array M
                    ]  Identity. Get M
                  "1   For each row
              3  \       For each overlapping sublist of size 3
               +/          Reduce by addition
          3  \         For each overlapping 2d array of height 3
           +/            Reduce by addition
       9%~             Divide by 9
[:    ,                Flatten it
  <./@                 Reduce by minimum

1
আমি দেখতে []দেখতে দেখতে এগুলি দেখতে কেমন মিলছে তবে তারা আসলে তা নয়।
লিন

1
@ লিন এক সেকেন্ড অপেক্ষা করুন, এটি ঠিক নয়। জে একাধিক ভারসাম্যহীন বন্ধনী দিয়ে দর্শকদের মনযোগবিভক্ত করার কথা is একটি [বা |:) ব্যবহার করা উচিত ছিল
মাইল

2

জেলি , 18 বাইট

তাদের উত্তরে মাইল হিসাবে চালিত কৌতুকটি মিস করেছেন, সংযোজন হ্রাস করার জন্য এন-বুদ্ধিমান সংখ্যক ব্যবহারের - পুরো প্রথম লাইনটি +3\11 এর সাথে প্রতিস্থাপন করা যেতে পারে ।

ẆµL=3µÐfS€
ÇÇ€FṂ÷9

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

সমস্ত সংক্ষিপ্ত সাবলিস্টগুলি সন্ধান করে, কেবলমাত্র দৈর্ঘ্য 3 এবং যোগফলগুলি রাখার জন্য ফিল্টারগুলি (যা ভেক্টরাইজ করে) তারপরে প্রতিটি ফলাফলের তালিকার জন্য পুনরাবৃত্তি করে, 3 টি 3 সাব-ম্যাট্রিকের সমস্ত সংখ্যার যোগফল পেতে এবং সর্বশেষে একটি তালিকাতে সমতল করে, সর্বনিম্ন নেয় এবং 9 দ্বারা বিভক্ত হয় (এই সর্বনিম্ন যোগফলের উপাদানগুলির সংখ্যা)।


আমি ফিল্টারিং সাবলিস্ট ধারণাটি পছন্দ করি। যদি সেই সাবলিস্ট আকারটি একটি গণিত মানের উপর নির্ভর করে।
মাইল

2

পাইথ, 19 বাইট

chSsMsMs.:R3C.:R3Q9

এমন একটি প্রোগ্রাম যা তালিকার তালিকার একটি ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

পরীক্ষা স্যুট

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

[ব্যাখ্যা পরে আসছে]



1

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

h=lambda a:[map(sum,zip(*s))for s in zip(a,a[1:],a[2:])]
lambda a:min(map(min,h(zip(*h(a)))))/9.

Repl.it এ পরীক্ষার মামলা

তালিকার তালিকা নিয়ে একটি নামহীন ফাংশন a- ম্যাট্রিক্সের সারি।

সহায়ক ফাংশনটি hতিনটি সংলগ্ন টুকরো টুকরো করে জিপ করে এবং zip(*s)প্রতিটির ট্রান্সপোস জুড়ে যোগফলটি ম্যাপ করে । এর ফলে একক কলামগুলির সমস্ত উচ্চতা তিনটি স্লাইস যোগ করে।

নামবিহীন ফাংশন সাহায্যকারী ফাংশনটিকে কল করে, ফলাফলের উপর পুনরায় সহায়ক ফাংশনটিকে সংক্রমণ করে এবং কল করে, তারপরে প্রতিটিের সর্বনিম্ন এবং ফলাফলের ন্যূনতম সন্ধান করে, যা এটির 9.গড় ফলনের জন্য ভাগ করে দেয়।


1

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

একটি ফাংশন যা সারিগুলির উপরে তিনবারের যোগগুলির পরিমাণ গণনা করে এবং তারপরে ন্যূনতম মানের উপর নজর রেখে কলামগুলিতে একই কাজ করার জন্য নিজেকে কল করে M

f=m=>m.map((r,y)=>r.map((v,x)=>M=(z[x<<9|y]=v+=r[x+1]+r[x+2])<M?v:M),z=[M=1/0])&&m[1]?f([z]):M/9

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

অ-পুনরাবৃত্ত সংস্করণ, 103 বাইট

নীলের সাহায্যে 2 বাইট সংরক্ষণ করেছেন

m=>m.map((r,y)=>y>1?r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)):M=1/0)&&M/9

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


আমি আপনার তথাকথিত নির্বোধ পদ্ধতির প্রতি কিছুটা আগ্রহী, যেহেতু যুক্তিসঙ্গত বিশুদ্ধ পদ্ধতির সাথে আমি সবচেয়ে ভাল করতে পারি 113 বাইট:(a,b=a.map(g=a=>a.slice(2).map((e,i)=>a[i]+a[i+1]+e)))=>eval(`Math.min(${b[0].map((_,i)=>g(b.map(a=>a[i])))})`)/9
নিল

@ নীল আমি মনে করি এটি খুব কাছাকাছি ছিল m=>m.map((r,y)=>r.map((v,x)=>[..."12345678"].map(i=>v+=(m[y+i/3|0]||[])[x+i%3])&&(M=v<M?v:M)),M=1/0)&&M/9, যদিও আমি মনে করি আমার প্রথম প্রচেষ্টাটি আসলে এর চেয়ে বড় ছিল।
আর্নল্ড

নাইস, যদিও আমি একটি বাইট বন্ধ শেভ করতে সক্ষম ছিল: m=>m.map((r,y)=>y>1&&r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)),M=1/0)&&M/9
নীল

নিল কুল এটি এর সাথে আরও একটি বাইট সংরক্ষণ করতে দেয়m=>m.map((r,y)=>y>1?r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)):M=1/0)&&M/9
আর্নল্ড


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