পিজ্জা মেলা কি?


27

এই প্রশ্নের দ্বারা অনুপ্রাণিত হয়, এবং বিপরীত হয় এই এক

ডেনিস ( E), ডুরকনব ( D), মার্টিন ( M) এবং ক্রিস ( C) পিজ্জার আদেশ দিয়েছেন। আয়তক্ষেত্রাকার পিজ্জা বর্গাকার টুকরা বিভক্ত, প্রতিটি তাদের পছন্দসই ভক্ষক হিসাবে চিহ্নিত ater

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা প্রতিটি অক্ষরের 0 বা তার বেশি সংখ্যক সমন্বিত একটি আয়তক্ষেত্রাকার পিজ্জা দেয় তা নির্ধারণ করে:

  1. প্রতিটি ব্যক্তির জন্য প্রতিটি স্লাইস পথ-সংযুক্ত । এর অর্থ হ'ল যে সমস্ত অক্ষর হ'ল এটি একই সাথে প্রত্যেকে সংলগ্ন হওয়া উচিত (কোন তির্যক সংযোগ নেই)।

  2. জনপ্রতি টুকরো টুকরো সবার জন্য একই।

আপনাকে অবশ্যই একটি yচ্ছিক ট্রেলিং নিউলাইন দিয়ে সত্যবাদী / মিথ্যা মান নির্ধারণ করতে হবে যা প্রদত্ত পিজ্জা ন্যায্য কিনা তা নির্দেশ করে।

বৈধ টেস্টকেস:

DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DEMC
DD
EE
MC
MC
EEDDMMMCCC
EEEDDDMMCC

অবৈধ টেস্টকেসগুলি:

EDM
EDMCCMDE
DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEMDMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC
DDMMEECC
DMMEECCC

বাইটস মধ্যে সংক্ষিপ্ত কোড।


১. কোন ফাংশনে কোন ধরণের ইনপুট গ্রহণযোগ্য? নতুন লাইনের সাথে স্ট্রিং? প্রতিটি লাইনের জন্য একটি স্ট্রিং সহ অ্যারে? 2D চরিত্রের অ্যারে? উপরের সবগুলো? ২. আমি বুঝতে পারি যে আউটপুট ন্যায্যতার জন্য সত্য, অন্যায়ের পক্ষে মিথ্যা, বা সেগুলি বিপরীত করা যেতে পারে?
স্তর নদী সেন্ট

52
বৈধ পরীক্ষার কেস: DDDDDDDDDDDDD<- একটি ভাল
পিজ্জা

@ স্টিভভারিল এই চ্যালেঞ্জের জন্য কেবলমাত্র নতুন লাইনের সাথে একটি স্ট্রিং গ্রহণযোগ্য ইনপুট। আপনাকে অবশ্যই ন্যায়বিচারের জন্য সত্যবাদী এবং অন্যায়ের পক্ষে মিথ্যা বলা উচিত return
orlp

নতুন লাইনের পাশাপাশি, কেবল ইনপুটটিতে সিডিএম?
edc65

@ edc65 সংশোধন করুন
orlp

উত্তর:


5

পাইথ, 53 বাইট

!f-lJs.z*4lu&G{smfqT@JY@UJ+Ld[Z1_1Klh.z_K)G]xJT)"CDEM

প্রদর্শন

এটি প্রতিটি অক্ষরের জন্য মূলত একটি বন্যার ফিল, তারপরে ফলাফল যাবতীয় সেটগুলি উপযুক্ত আকারের a

বন্যা ভরাট করতে, এটি প্রতিটি চিঠির উপরের-বাম-সর্বাধিক উপস্থিতি দিয়ে শুরু হয়, এরপরে এ পর্যন্ত পাওয়া সমস্ত অবস্থানের প্রতিবেশী তৈরি করে, ডান অক্ষরের সাথে অবস্থিতিগুলির জন্য ফিল্টার করে এবং সেটটি পরিবর্তন হওয়া বন্ধ না হওয়া পর্যন্ত পুনরাবৃত্তি করে।


6

শামুক , 129

ন্যায্য পিজ্জার জন্য 1 এবং অন্যায্য পিৎজার জন্য 0 টি প্রিন্ট করে।

&
={(t\Dt\Et\Ct\M),!(t.}{(o\D)+l^D,=~u{^D=(r^D,~},~|o\E`+l^E,=~u{^E=(r^E,~},~|o\C`+l^C,=~u{^C=(r^C,~},~|o\M`+l^M,=~u{^M=(r^M,~},~

প্রসারিত সংস্করণ:

&
={ (t\Dt\Et\Ct\M), !(t.)}   {
(o\D)+ l^D,=~ u{^D=(r^D,~)}, ~ |
(o\E)+ l^E,=~ u{^E=(r^E,~)}, ~ |
(o\C)+ l^C,=~ u{^C=(r^C,~)}, ~ |
(o\M)+ l^M,=~ u{^M=(r^M,~)}, ~

&এর অর্থ গ্রিডের সমস্ত স্থানে প্যাটার্নটি অবশ্যই মেলাতে পারে match প্রথম লাইনটি প্রতিটি ই, ডি, এম, সি এর সমান সংখ্যার জন্য পরীক্ষা করে এটি টেলিপোর্ট নির্দেশ ব্যবহার করে t, যা ঘটনাগত জটিলতার সাথে প্রোগ্রামগুলি তৈরি করার একটি দুর্দান্ত উপায়। যদি কোনও ইনপুট 4 টি মোডের প্রতিটি জন্য একক হিসাবে এককভাবে আকারের স্লাইস করে থাকে তবে প্রোগ্রামটি কমবেশি চিরতরে স্তব্ধ হয়ে যাবে। তারপরে, প্যাটার্নটি শুরু হওয়া যে কোনও অক্ষরের চিঠিটির উপরের বাম দিকের একটি সামঞ্জস্যপূর্ণ পথের জন্য একটি চেক রয়েছে।


6

সিজেম, 93

qN/_z,:W;s:A,,:B_{{{_B=_@-}g}%$}:F;{a+_Af=)#{F~B\@t:B}|;}:U;W>{_W-U}/{W%},{_(U}/BFe`0f=_1<4*=

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

এটি হাস্যকরভাবে দীর্ঘ কারণ সিজেএম (এখনও) অন্তর্নির্মিত বন্যা পূরণ বা ইউনিয়ন-সন্ধান করে না। আমি প্রোগ্রামটিতে ইউনিয়ন-ফাইন্ড বাস্তবায়ন করেছি ।

ব্যাখ্যা:

qN/_         read input, split into lines and duplicate
z,:W;        transpose, get length (original width) and store in W
s:A          convert to string (without newlines) and store in A
,,           make an array [0..n-1] (n = pizza size)
:B_          store in B (initial structure) and duplicate (will be used in 2 loops)
{…}:F;       define function F ("Find" for multiple indices and sort)
  {…}%       for each value (x)
    {…}g     do…while
      _B=    duplicate x and get B[x]
      _@-    leave a B[x] on the stack and calculate B[x] - x
              if non-zero, repeat the loop with B[x]
  $          sort the results
{…}:U;       define function U ("Union" for 2 indices)
  a+         make an array of the 2 indices
  _Af=       get the corresponding letters from A
  )#         check if the letters are different
  {…}|       if not, execute…
    F~       call F on the array and dump the 2 results on the stack
    B\@t     join the sets - B[bigger index] = smaller index
    :B       store back in B
  ;          pop the last value (either array if indices or B)
W>           remove the first row of indices
{…}/         for each index
  _W-        duplicate and subtract W ("go up")
  U          call U to join sets if they match
{W%},        remove the first column of indices
{…}/         for each index
  _(         duplicate and decrement ("go left")
  U          call U to join sets if they match
BF           call F on B, to get the final sets and sort
e`           RLE encoding
0f=          keep only the repetition counts
_1<4*=       check if it's the first value (if any) repeated 4 times

4

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

টেম্পলেট স্ট্রিংগুলি ব্যবহার করে একটি নতুন লাইন রয়েছে যা তাৎপর্যপূর্ণ এবং গণনাযোগ্য

ফায়ারফক্সে স্নিপেট চালানোর পরীক্ষা করুন।

f=z=>![...'CDEM'].some(c=>((l=p=>z[p]==c&&[-1,1,w,-w].map(o=>l(p+o),z[p]='',++k))(z.indexOf(c),h=k,k=0),~h&&h-k),w=~z.search`
`,z=[...z],k=-1)&z.join``-1

// Ungolfed
U=z=>{
  w = ~z.search`\n`
  z = [...z]
  fill = p=>(
    c = z[p],
    z[p] = '',
    [-1,1,w,-w].forEach(o=>z[o+=p] == c && fill(o)),
    ++k
  )
  h = -1
  r = ['C','D','E','M'].every( c =>(
    k = 0,
    y = z.indexOf(c),
    y >= 0 && fill(y),
    v = h >= 0 ? h == k : true,
    h = k,
    v
  ))
  return r & 1-z.join``
}  

// Test
out=x=>O.innerHTML+=x+'\n';

// Valid test cases
valid=[`DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEDMMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC`,
`DEMC`,
`DD
EE
MC
MC`,
`EEDDMMMCCC
EEEDDDMMCC`];
out('Valid')
valid.forEach(t=>out(t+'\n'+f(t)+'\n'));
invalid=[`EDM`,
`EDMCCMDE`,
`DDDDDDDDDDDDDD`,         
`DDDDDDDDDDDDMCCCCCCCCCCC
DEEEEEEEEEEDMMMMMMMCCCCC
DEEEEEEEEEEMDMMCCCCCCCCC
DEEEEEEEEEEDMMMMMMMMCCCC
DDDDDDDDDDDDMMMMMMMMMMMC`,
`DDMMEECC
DMMEECCC`
];
out('Invalid')
invalid.forEach(t=>out(t+'\n'+f(t)+'\n'))
<pre id=O></pre>


2

জাভাস্ক্রিপ্ট ES6, 360

সি, ডি, ই, এম সমান সংখ্যার জন্য চেক, তারপরে বন্যা ভরাট করে এবং কোনও অনাথ অক্ষরের জন্য চেক। বিজয়ী নয়, তবে আমাকে চেষ্টা করতে হয়েছিল।

i=>(I=i.split`
`.map(e=>e.split``),c=(i[m='match'](/C/g)||[])[l='length'],a=(x,y,z)=>{if(I[x][y]!=z)return;I[x][y]=0;x>0&&a(x-1,y,z);x<I[l]-1&&a(x+1,y,z);y>0&&a(x,y-1,z);y<I[0][l]-1&&a(x,y+1,z)},![...'CDEM'].some(k=>{if((i[m](eval(`/${k}/g`))||[])[l]!=c)return 1;I.some((w,x)=>(g=-1<(y=w.indexOf(k)),g&&a(x,y,k),g));})&&!I.map(e=>e.join``).join``[m](/[CDEM]/))

বেহালা


2

জাভাস্ক্রিপ্ট ES6, 328 318 316 269 178

l=>(d=[0,0,0,0],s=[...l.split`
`.join``].map(i=>(d["EDMC".search(i)]++,i)),!l||d.every(i=>i==d[0])&&(s.every((r,i)=>[1,-1,X=l.split`
`[0].length,-X].some(o=>s[o+i]==r))||d[0]<2))

ব্যাখ্যা:

l => (
  d = [0,0,0,0],          // array containing each letter count
  s = [...l.split`                    
`.join``]                 // removes newlines from input and converts it into array
  .map(i => (             // loops through the array
    d["EDMC".search(i)]++ // increases letter count
    ,i)),                 // returns unchanged value in order to preserve original array
  !l                      // input is empty
  || d.every(i=>i==d[0])  // each letter count is equal
  && (
    s.every((r, i) =>     // there is no orphaned letters 
      [1,-1,X=l.split`
`[0].length,-X]           // letters on respectively: right, left, bottom, top
      .some               // at least one of them
        (o=>s[o+i]==r))   // equals original letter
    || d[0] < 2           // count of each letter equals 1
  )
)

1
আকর্ষণীয় কোড (আপনি আমার মারলেন!) পরামর্শ: কয়েকটি বাইট সংরক্ষণ করতে এস 6 টি তীর ফাংশন (আমার উত্তর হিসাবে) ব্যবহার করুন। আফাক আপনার কোনও ভেরিয়েবলের জন্য বরাদ্দ দেওয়ার দরকার নেই, একটি সরল ফাংশন ডিক্লেয়ারেশন ব্যবহার করে l=>{...}যেমন ঠিক আছে।
ড্যানকমেস

2
k=(o)=>আরও 2 টি বাইট সংরক্ষণের জন্য বন্ধনীগুলি সরান । একক প্যারামিটার তীর ফাংশনগুলির প্রথম বন্ধনী প্রয়োজন নেই।
ড্যাঙ্কমিমেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.