টপ্পল স্যান্ডপাইল


12

( অসীম স্যান্ডপাইলস , এবং স্যান্ডপাইলগুলির সনাক্তকরণ উপাদানগুলি সম্পর্কিত সম্পর্কিত প্রশ্ন রয়েছে ))

অ-নেতিবাচক পূর্ণসংখ্যার একটি ম্যাট্রিক্স দেওয়া, একই মাত্রার একটি ম্যাট্রিক্স ফিরে আসুন , তবে টপলড :

  1. যদি ম্যাট্রিক্সে 4 এর চেয়ে বেশি মান থাকে না তবে এটি ফিরিয়ে দিন।
  2. 3 এর চেয়ে বড় প্রতিটি "ঘর" 4 দ্বারা হ্রাস পায় এবং সমস্ত সরাসরি প্রতিবেশী কক্ষগুলি (উপরে, নীচে, বাম এবং ডানদিকে) উপস্থিত থাকলে তাদের বৃদ্ধি করা হয়।
  3. গোটো ১।

উদাহরণ:

0 1 0        0 2 0
2 4 0   ->   3 0 1
0 0 3        0 1 3

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

(আপনাকে কেবল চূড়ান্ত ফলাফলটিই ফিরিয়ে আনতে হবে you আপনি যে পথে পৌঁছেছেন তা এখানে প্রদর্শিত দেখানো পথের চেয়ে আলাদা হতে পারে: আপনি টপলিং ক্রিয়াকলাপগুলি কোন ক্রমটি সম্পাদন করেন তা বিবেচ্য নয়) তারা সকলেই একই ফলাফলের দিকে নিয়ে যায়))

আরও গভীর ব্যাখ্যা এবং কিছু অনুপ্রেরণার জন্য এই নম্বরফিলি ভিডিওটি বা অ্যাবেলিয়ান স্যান্ডপাইল মডেলের উইকিপিডিয়া নিবন্ধটি দেখুন ।

নিয়মাবলী:

  • আপনি যে কোনও মানক উপায়ে ইনপুট এবং আউটপুট নিতে পারেন
  • লুফোলগুলি নিষিদ্ধ
  • ইনপুট এবং আউটপুট হতে পারে:
    • নেস্টেড তালিকা: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    • একটি সাধারণ তালিকা: [1, 2, 3, 4, 5, 6, 7, 8, 9]এবং আকৃতি
    • কিছু ধরণের দেশীয় ম্যাট্রিক্স টাইপ
    • একটি স্ট্রিং, যেমন 1 2 3\n4 5 6\n7 8 9
    • বা আপনার ভাষাতে যা কিছু কাজ করে।
  • ইনপুট এবং আউটপুট একই ফর্ম হতে হবে
  • ইনপুটটিতে এখানে প্রদর্শিত চিত্রের চেয়ে বেশি সংখ্যক সংখ্যা থাকতে পারে তবে আকারটি আপনার ভাষার সীমাতে আবদ্ধ হতে পারে (প্রযোজ্য ক্ষেত্রে MAXINT সমতুল্য)
  • ম্যাট্রিক্সের কোনও আকার থাকতে পারে (উদাঃ 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
  • আকৃতি 0xN বা Nx0 যেখানে আপনার কেসটি হ্যান্ডেল করার দরকার নেই।

Testcases

[[2, 5, 4], [8, 6, 4], [1, 2, 3]] -> [[3, 3, 0], [1, 2, 2], [1, 3, 2]]
[[0, 0, 2], [1, 3, 3], [0, 0, 0]] -> [[0, 0, 2], [1, 3, 3], [0, 0, 0]]
[[9, 9, 9], [9, 9, 9], [9, 9, 9]] -> [[1, 3, 1], [3, 1, 3], [1, 3, 1]]
[[4, 5], [2, 3]] -> [[2, 3], [0, 1]]
[[2, 3, 5], [2, 2, 0]] -> [[3, 0, 2], [2, 3, 1]]
[[7]] -> [[3]]

এটি , সংক্ষিপ্ততম কোড (প্রতি ভাষা) জিতেছে।


সমস্ত মধ্যবর্তী ফলাফল প্রদর্শন করা ঠিক আছে?
feersum

@ ফেয়ারসাম আমি অনুমান করি, যতক্ষণ না এটি চূড়ান্ত ফলাফল কী তা পরিষ্কার।
L3viathan

উত্তর:


8

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

tss:"t3>t1Y6Z+w4*-+

এমএটিএল অনলাইনে এটি ব্যবহার করে দেখুন ! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

প্রোগ্রামটি ইনপুটটির যোগফল হিসাবে যতবার পুনরাবৃত্তি করে। এটি পুনরাবৃত্তির প্রয়োজনীয় সংখ্যার উপর একটি আলগা উপরের আবদ্ধ।

প্রতিটি পুনরাবৃত্তির জন্য, স্যান্ডপাইল ম্যাট্রিক্স অতিক্রমকারী এন্ট্রিগুলি 3সনাক্ত করা হয় 1এবং একটি ম্যাট্রিক্স দেয় এবং 0যা 4-প্রতিবেশী মাস্কের সাথে মিলিত হয়। 3স্যান্ডপাইল ম্যাট্রিক্সের অতিক্রম করা এন্ট্রিগুলি হ্রাস পেয়েছে 4, এবং সমঝোতার ফলাফল যুক্ত হয়।

শেষ পুনরাবৃত্তির জন্য, যেখানে স্যান্ডপাইল ম্যাট্রিক্সের কোনও সংখ্যা অতিক্রম করে না 3, জিরোগুলি বিয়োগ করা হয় এবং এতে যুক্ত করা হয়, সুতরাং এটি প্রভাবিত হয় না।

t       % Implicit input (matrix). Duplicate
ss      % Sum of matrix entries
:"      % Repeat that many times
  t     %   Duplicate
  3>    %   True for matrix entries that exceed 3
  t     %   Duplicate
  1Y6   %   Push predefined literal [0, 1, 0; 1, 0, 1; 0, 1, 0]
  Z+    %   2D convolution, keeping size
  w     %   Swap
  4*    %   Multiply by 4
  -     %   Subtract
  +     %   Add
        % Implicit end. Implicit display

3
কনভলিউশন উচ্চ পাঁচ।
মার্টিন ইন্ডার

@ মার্টিনএন্ডার আহ, আপনিও এটি ব্যবহার করেছেন :-) সহকর্মী দেখলে খুব ভাল লাগল! আমি নিশ্চিত flawr শীঘ্রই আমাদের সাথে যোগ দেবেন
লুইস মেন্ডো

2
@LuisMendo Convolutionista
Suever

4

গণিত, 65 বাইট

#//.s_:>s+ListConvolve[{v={0,1,0},1-v,v},x=UnitStep[s-4],2,0]-4x&

ব্যাখ্যা

#//.s_:>...&

3 টিরও বেশি বড় পাইলগুলি টপল করে বারবার ইনপুটটিকে রূপান্তরিত করুন যখন প্রক্রিয়াটি ম্যাট্রিক্স পরিবর্তন করতে ব্যর্থ হয় তখন স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় (অর্থাত্ যখন বড় পাইলগুলির আর কোনও অস্তিত্ব থাকে না)। নিম্নলিখিত অভিব্যক্তিটিতে ম্যাট্রিক্স বলা হয় s

...x=UnitStep[s-4]...

একটি ম্যাট্রিক্স তৈরি করুন 1যা বর্তমান ম্যাট্রিক্সের যখনই এক 4বা তার বেশি হয় এবং অন্যথায় শূন্য থাকে। এটি মূলত একটি মুখোশ যা নির্দেশ করে যে কোন পাইলগুলি টপল করা দরকার need মুখোশ ডাকুন x

ListConvolve[{v={0,1,0},1-v,v},x=UnitStep[s-4],2,0]

প্রথমে আমরা প্রতিবেশী পাইলগুলি টপকে যাওয়ার কারণে প্রতিটি স্তূপে যে পরিমাণ বালু যোগ করা হয়েছে তা গণনা করি। এটি নিম্নলিখিত ম্যাট্রিক্সের ওপরে একটি সমঝোতার মাধ্যমে করা হয় x:

0 1 0
1 0 1
0 1 0

মূলত, এটি মুখোশের প্রতিটি ভন-নিউম্যান পাড়ার প্রতিবেশীর জন্য এটি বর্তমান কক্ষে যুক্ত করে।

s+...-4x

আমরা পূর্ববর্তী ফলাফলটি যুক্ত করি sএবং তারপরে টপলড পাইলস হ্রাস করতে আমরা এর থেকে চারবার মুখোশ বিয়োগ করি।


3

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

এটি খুব ভাল বলে মনে হচ্ছে না, আমি অবশ্যই কিছু কৌশল মিস করছি ...

m=input(0);do;m+=conv2(m>3,[0 1 0;1 -4 1;0 1 0],"same")
until m<4

অক্টোটাভের কোন সংস্করণ আপনি এটি ব্যবহার করতে পারবেন input(0)?
সোয়েভার

@Suever>> version ans = 4.0.1
feersum

2

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

ম্যাট্রিক্সের প্রস্থ wএবং aবাক্য গঠন বাক্য গঠনে মানগুলির একটি অ্যারে নেয় (w)(a)। মানগুলির একটি অ্যারে প্রদান করে।

w=>g=a=>(b=a.map((n,i)=>n%4+(F=d=>~m|i%w&&a[i+d]>>2)(m=w)+F(-w)+F(m=-1)+F(!++i)))+0==a+0?a:g(b)

ফর্ম্যাট এবং মন্তব্য

w =>                      // main function: takes w as input, returns g
  g = a =>                // recursive function g: takes a as input
    (                     //
      b = a.map((n, i) => // for each element n at position i in a:
        n % 4 + (         //   keep only n MOD 4
          F = d =>        //   define F(): function that takes d as input
            ~m |          //     if m is not equal to -1
            i % w &&      //     or i MOD w is not null:
            a[i + d] >> 2 //       return a fourth of the value of the cell at i + d
        )(m = w) +        //   test the cell below the current cell
        F(-w) +           //   test the cell above
        F(m = -1) +       //   test the cell on the left
        F(!++i)           //   test the cell on the right
      )                   // end of map(): assign the result to b
    ) + 0 == a + 0 ?      // if b is equal to a:
      a                   //   stop recursion and return a
    :                     // else:
      g(b)                //   do a recursive call with b

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


1

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

সংরক্ষিত 2 বাইট @ নীলকে ধন্যবাদ

f=a=>a.find(b=>++y&&b.find(c=>++x&&c>3,x=0),y=0)?f(a.map(b=>b.map(c=>c+=--i|y?i*i+y*y==1:-4,i=x,--y))):a

নেই (i-=x)|y-j?i*i+সহায়তা প্রয়োজন?
নিল

@ নীল এটি সত্যই ধন্যবাদ, ধন্যবাদ!
ETH প্রোডাকশনগুলি

... আমি ফোনে ছিলাম তবে আমিও বিবেচনা করছি a.find(...b.find(...c>3&&a.map(...)))&&f(a)
নীল

@ নীল আমি ভাবছি না যে এটি কার্যকর হবে, যেহেতু .mapমিউটেট করে না ...
ইটিএইচ প্রোডাকশনস

দেখে মনে হচ্ছে এটি পরিবর্তনের জন্য মানচিত্রটি f=a=>a.find((b,x)=>b.find((c,y)=>c>3&&a.map(b=>b.map((_,j)=>b[j]+=x|(j-=y)?x*x+j*j==1:-4)&x--)))&&f(a)
নীল

1

সি ++, 261 258 250 বাইট

#import<vector>
#define S size()
void f(std::vector<std::vector<int>>&m){s:int i,j,r;for(i=r=0;i<m.S;++i)for(j=0;j<m[i].S;++j){if(m[i][j]>3){r=1;m[i][j]-=4;j>0&&m[i][j-1]++;i>0&&m[i-1][j]++;j<m[i].S-1&&m[i][j+1]++;i<m.S-1&&m[i+1][j]++;}}if(r)goto s;}

ভেক্টরের ভেক্টরের রেফারেন্স হিসাবে ইনপুট নেয় এবং এটিকে সরাসরি সংশোধন করে।

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

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