কাদা কোয়ারটা-মাছ পরিষ্কার করুন


27

এই চ্যালেঞ্জটি সেরা সেরা পিপিসি 2015 সালের রুকি অফ দ্য ইয়ার ক্যাটাগরির বিজয়ীদের সম্মানের জন্য : মুদ্দিফিশ ( আপনি যে ভাষাটির সন্ধান করছেন তা আমি নই! ) এবং কোয়ার্টাটা ( সত্যের মেশিন প্রয়োগের জন্য )। অভিনন্দন!

পটভূমি

সমুদ্রের গভীরতম খাদে কোয়ার্তা-ফিশ নামে একটি বিরল এবং মায়াবী বর্গাকার আকৃতির মাছ বাস করে । এটি গেমার অফ লাইফ সেলুলার অটোমেটনের গ্লাইডারের মতো দেখাচ্ছে । এখানে বিভিন্ন আকারের দুটি কোয়ার্টাটা-মাছ রয়েছে:

-o-
--o
ooo

--oo--
--oo--
----oo
----oo
oooooo
oooooo

আপনি কোয়ারটাটা-মাছের একটি ছবি তোলাতে পরিচালিত হয়েছেন, তবে মাছটি কাদায় আচ্ছাদিত হওয়ায় এটি দেখতে খুব শক্ত hard ফটো সাফ করার জন্য এখন আপনাকে একটি প্রোগ্রাম লিখতে হবে।

ইনপুট

আপনার ইনপুটটি .-o#একটি নতুন লাইন-পৃথক স্ট্রিং হিসাবে দেওয়া অক্ষরের একটি আয়তক্ষেত্র 2D গ্রিড । আপনি যদি চান, আপনি |পৃথককারী হিসাবে নতুন লাইনের পরিবর্তে পাইপ ব্যবহার করতে পারেন এবং আপনি একটি অনুবর্তনকারী এবং / বা পূর্ববর্তী বিভাজক ধরে নিতে পারেন।

ইনপুটটিতে কিছু পাশের দৈর্ঘ্যের ঠিক এক কোয়ার্টা-মাছ থাকবে 3*n, যেখানে n ≥ 1একটি ধনাত্মক পূর্ণসংখ্যার .সমুদ্র, যা সমুদ্রের তলকে প্রতিনিধিত্ব করে s মাছগুলি সবসময় উপরে বর্ণিত ওরিয়েন্টেশনে থাকবে। এই গ্রিডে আবৃত, হ্যাশগুলির ঠিক একটি খালি খালি আয়তক্ষেত্র অঞ্চল হবে #, যা মাটির ফোঁড়কে উপস্থাপন করে। ব্লবটি আংশিক বা সম্পূর্ণভাবে কোয়ার্টাটা-মাছ coverেকে দিতে পারে। একটি উদাহরণ ইনপুট হবে

............
..--oo--....
..--oo--....
..---#####..
..---#####..
..ooo#####..
..oooooo....

আউটপুট

অক্ষরের সাথে সমস্ত হ্যাশ প্রতিস্থাপন করে ইনপুট থেকে আপনার আউটপুট তৈরি করা হবে .-o, যাতে গ্রিডে ঠিক এক কোয়ার্টাটা-মাছ থাকে। এই প্রতিস্থাপনটি যথাযথভাবে সম্পাদন করার জন্য সর্বদা অনন্য উপায় থাকবে; বিশেষত, কাদা ফোটা মাছের আকারটি 3 × 3 হলেই পুরোপুরি আবরণ করবে। আউটপুট ইনপুট হিসাবে একই বিভাজক ব্যবহার করবে। উপরের ইনপুটটির জন্য, সঠিক আউটপুট হবে

............
..--oo--....
..--oo--....
..----oo....
..----oo....
..oooooo....
..oooooo....

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়। কোনও সময়সীমা নেই: অবশেষে যদি আপনার জমা দেওয়া সীমাহীন সময় এবং সংস্থান দেওয়া বন্ধ করে দেয় তবে আপনি ভাল আছেন।

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

Input:
.......
...-o-.
...--o.
##.ooo.
##.....
Output:
.......
...-o-.
...--o.
...ooo.
.......

Input:
...-o-.
...-#o.
...ooo.
.......
Output:
...-o-.
...--o.
...ooo.
.......

Input:
.........
.###.....
.###.....
.ooo.....
Output:
.........
.-o-.....
.--o.....
.ooo.....

Input:
.....
.###.
.###.
.###.
Output:
.....
.-o-.
.--o.
.ooo.

Input:
......
......
......
...###
...###
...###
Output:
......
......
......
...-o-
...--o
...ooo

Input:
###o--....
###o--....
###-oo....
###-oo....
###ooo....
###ooo....
###.......
Output:
--oo--....
--oo--....
----oo....
----oo....
oooooo....
oooooo....
..........

Input:
............
..--oo--....
..--oo--....
..---#####..
..---#####..
..ooo#####..
..oooooo....
Output:
............
..--oo--....
..--oo--....
..----oo....
..----oo....
..oooooo....
..oooooo....

Input:
...--oo--....
.#########...
.#########...
.#########...
...oooooo....
...oooooo....
.............
.............
Output:
...--oo--....
...--oo--....
...----oo....
...----oo....
...oooooo....
...oooooo....
.............
.............

Input:
..............
..............
.########.....
.########.....
.########-....
.########-....
.########o....
.########o....
.########o....
.########o....
.########.....
..............
Output:
..............
..............
..............
..............
....--oo--....
....--oo--....
....----oo....
....----oo....
....oooooo....
....oooooo....
..............
..............

Input:
.................
.................
..---ooo---......
..--#########....
..--#########....
..--#########....
..--#########....
..--#########....
..oo#########....
..oo#########....
..oo#########....
....#########....
Output:
.................
.................
..---ooo---......
..---ooo---......
..---ooo---......
..------ooo......
..------ooo......
..------ooo......
..ooooooooo......
..ooooooooo......
..ooooooooo......
.................

Input:
.........................
.........................
....----oooo----.........
....----########.........
....----########.........
....----########.........
....----########.........
....----########.........
....----########.........
....----########.........
....oooo########.........
....oooo########.........
....oooooooooooo.........
....oooooooooooo.........
.........................
Output:
.........................
.........................
....----oooo----.........
....----oooo----.........
....----oooo----.........
....----oooo----.........
....--------oooo.........
....--------oooo.........
....--------oooo.........
....--------oooo.........
....oooooooooooo.........
....oooooooooooo.........
....oooooooooooo.........
....oooooooooooo.........
.........................

যদি প্রবেশের সম্ভাবনা থাকে তবে এটি সম্পন্ন হবে না (খারাপ এলোমেলো) যদিও এর সম্ভাবনা খুব কম থাকে? এছাড়াও কি আপনাকে একক নিউলাইন-পাইপ ব্যতীত অন্য অক্ষর পরিবর্তন করার অনুমতি রয়েছে?
নীল

@ মুডিফিশ প্রথম প্রশ্নে হ্যাঁ (এটি শেষ পর্যন্ত সম্ভাব্যতা 1 দিয়ে শেষ করতে হবে, নিখুঁত এলোমেলোতা অনুমান করে, তবে তাত্ত্বিকভাবে চিরকালের জন্য চালানো যেতে পারে), দ্বিতীয় থেকে নেই (চরিত্রগুলি স্থির)।
Zgarb

সুতরাং 0.9 পুনরাবৃত্তি হওয়ার সম্ভাবনা কি ঠিক আছে?
নীল

@ মুডিফিশ আপনি যদি কোনও মানানসই না করে কোনও লুপে এলোমেলো গ্রিড তৈরি করে থাকেন তবে তা ঠিক।
Zgarb

গুরুত্বপূর্ণ পরীক্ষার কেস: ......|......|......|...###|...###|...###(যদি কোনও সমাধান সমস্ত সম্ভাব্য শীর্ষ-বাম স্থানাঙ্কগুলির চেষ্টা করে এবং
অঞ্চলটির

উত্তর:


9

পাইথন 2, 433 411 বাইট

import re;i,o,l,j=input(),range,lambda s,r:s.replace(*r),"".join;i=l(l(l(i,".1"),"#."),"| ");s=o(len(i))
for x in s:
 for y in s:
    for q in s:
     r=map(list,l(l(i,"o."),"-.").split(" "))
     try:
        for v in o(q):r[x+v][y:y+q]=["".join(c*(q/3)for c in b)for b in["-o-","--o","ooo"]][3*v/q]
        m=re.match(i," ".join(j(i)for i in r))
     except:0
     if sum("-"in p for p in r)and m:print"|".join(l(j(i),"1.")for i in r);_

সাথে প্রস্থান করুন a NameError। আলাদা করে ইনপুট পাইপ নেয়।

আমি এখানে ট্যাব এবং স্পেস মিশ্রিত করছি। এসই সঠিকভাবে ট্যাব রেন্ডার করে না।

'###o--....|###o--....|###-oo....|###-oo....|###ooo....|###ooo....|###.......'
 --oo--....|--oo--....|----oo....|----oo....|oooooo....|oooooo....|..........

'.....|.###.|.###.|.###.'
 .....|.-o-.|.--o.|.ooo.

'...-o-.|...-#o.|...ooo.|.......'
 ...-o-.|...--o.|...ooo.|.......

(নোটের শুরুতে অতিরিক্ত স্থানগুলি কেবলমাত্র প্রাকৃতিকতার জন্য এবং আসলে মুদ্রিত হয় না)


আপনি আপনার কোডের অতিরিক্ত ট্যাবগুলি থেকে মুক্তি পেতে পারেন এবং কয়েকটি বাইট কমানোর জন্য তাদের একক স্পেস দিয়ে প্রতিস্থাপন করতে পারেন (এটি যদি আপনার কোডের বাইটগুলি গণনা করার সময় সাদা স্থান বিবেচনায় নিয়ে থাকে)।
আর কাপ,

4

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

g=>eval('w=g.search`\n`;h=g.length/w|0;for(n=(w<h?w:h)/3|0;s=n*3;n--)for(x=w+1-s;x--;)for(y=h+1-s;y--;[...g].every((c,i)=>c==o[i]|c=="#")?z=p:0)for(p="",i=h;i--;)p=(l=[,"-o-","--o","ooo"][(i-y)/n+1|0],l?"."[t="repeat"](x)+l.replace(/./g,c=>c[t](n))+"."[t](w-x-s):"."[t](w))+(p?`\n`:"")+p;z')

ব্যাখ্যা

একটি নতুন লাইন পৃথক স্ট্রিং হিসাবে ইনপুট গ্রিড লাগে। পুরোপুরি গল্ফড নয়, সময় পেলে আরও কিছু করবে।

এটি এর দ্বারা কাজ করে:

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

var solution =

g=>
  eval(`

    // Get size of input grid
    w=g.search\`\n\`;
    h=g.length/w|0;

    // Check every possible size (n) and position (x and y) of fish
    for(n=(w<h?w:h)/3|0;s=n*3;n--)
      for(x=w+1-s;x--;)
        for(y=h+1-s;y--;

          // Check if possible solution matches input grid
          [...g].every((c,i)=>c==p[i]|c=="#")?z=p:0
        )

          // Create possible solution grid
          for(p="",i=h;i--;)
            p=(
              l=[,"-o-","--o","ooo"][(i-y)/n+1|0],
              l?
                "."[t="repeat"](x)+
                l.replace(/./g,c=>c[t](n))+
                "."[t](w-x-s)
              :"."[t](w)
            )+(p?\`\n\`:"")+p;
    z
  `)
<textarea id="input" rows="6" cols="40">..............
..............
.########.....
.########.....
.########-....
.########-....
.########o....
.########o....
.########o....
.########o....
.########.....
..............</textarea><br />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


4

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

def f(s):
 s=map(list,s.split());R=range;L=len(s);M=len(s[0])
 for h in R(L/3*3,0,-3):
  for x in R(M-h+1):
   for y in R(L-h+1):
    if all(s[v%L][v/L]in".-#o #"[0<=v%L-y<h>v/L-x>=0::2]for v in R(L*M)):
     for k in R(h*h):s[y+k/h][x+k%h]="-o"[482>>k/h*3/h*3+k%h*3/h&1]
     return'\n'.join(map(''.join,s)).replace('#','.')

আপাতত একটি খারাপভাবে গল্ফযুক্ত সমাধান - for .. in range(...)গুলি হ'ল একটি সম্পূর্ণ ট্রেনের ধ্বংসস্তূপ। ইনপুট / আউটপুটগুলি নতুন লাইনের দ্বারা পৃথক স্ট্রিংগুলি।

বাইট গণনা বর্তমানে কেবল স্থান ইনডেন্টগুলি ধরে নিয়েছে - পরে গল্ফিংয়ের পরে আমি মিশ্র ট্যাব / স্পেসগুলিতে স্যুইচ করব, যদি প্রয়োজন হয়।

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