স্বেচ্ছাসেবী আইস কিউব ট্রে পূরণ


27

মনে করুন স্থানগুলির এই গ্রিডটি Xকিছু অদ্ভুত আকারের খালি বরফ কিউব ট্রেগুলির ক্রস বিভাগটি উপস্থাপন করে :

   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

এর ব্যতীত কলামগুলি ট্রেগুলিতে Xগর্ত বা ফাঁকগুলি উপস্থাপন করে যা জল ধরে রাখতে পারে না, অসীম ক্ষমতা ডুবে যায়। গ্রিডের বামে বা ডানদিকের প্রান্ত থেকে পড়া জল এই অবিরাম সিঙ্কেও যায়।

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


উদাহরণস্বরূপ, যদি আমাদের কলটি Fখুব বাম গ্রিড কলামের উপরে থাকে

F                   
   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

জল Xসেই কলামের শীর্ষে নেমে গিয়ে বাম এবং ডানদিকে ছড়িয়ে পড়ত , বাম অর্ধেকটি নীচের সিঙ্কে ছড়িয়ে পড়ত এবং ডান অর্ধেকটি 2 × 1 বগিটি পূরণ করে। বগিটি পূর্ণ হয়ে গেলে, জলের প্রবাহের ডান অর্ধেক কোথাও প্রবাহিত হয় না তবে ডুবে যায় এবং সর্বত্র জলের স্তরটি স্থিতিশীল থাকে।

কলটি বন্ধ করে দিয়ে ট্রেটি এখন এই রকম দেখাচ্ছে: ( ~জল হিসাবে)

   X     X X        
X~~X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

একইভাবে, আমরা যদি কল এর মতো করে রাখি:

   F                
   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

এটি দুটি বাম দিকের অংশটি পূরণ করবে তবে বাকী পানি সরে যাবে:

   X     X X        
X~~X~X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

আমরা যদি কল এর মতো করে রাখি:

         F          
   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

প্রবাহের বাম অর্ধেকটি ডুবে প্রবাহিত হবে তবে ডান অর্ধেকটি শেষ পর্যন্ত তিনটি ডান দিকের অংশটি পূরণ করবে কারণ সমতল পৃষ্ঠে জল অনুভূমিকভাবে কতদূর যেতে পারে তার সীমা নেই there's

   X     X~X        
X  X X  XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX

তবে এটির মতো অবস্থিত:

        F           
   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

সমস্ত জলের ড্রেন দূরে রয়েছে এবং কোনও বগি পূরণ করা হয়নি:

   X     X X        
X  X X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ফাঁকা স্থানের আয়তক্ষেত্রাকার গ্রিড Xএবং এর একটিতে নিয়ে যায় F। উপরের সারিতে সর্বদা থাকে Fএবং অন্যথায় কেবল স্থান থাকে। Xপ্রতিটি কলামের 's (যদি থেকে থাকে তাহলে) গ্রিড বেস থেকে একটি কঠিন লাইন আপে প্রসারিত হবে অর্থাৎ কোন গুহা বা overhangs হবে।

উপরে উল্লিখিতভাবে কলটি Fজল দিয়ে কি করতে পারে তা পূরণ করার পরে গ্রিডটি মুদ্রণ করুন বা ফিরে দিন ~। উপরের Fসারিটি আউটপুট ছাড়ুন ।

  • কল সারি ছাড়া গ্রিড পৃথকভাবে সর্বনিম্ন 1 × 1 হবে

    F
    X
    

    আপনার সমর্থন করা প্রয়োজন এমন ক্ষুদ্রতম ইনপুট।

  • ইনপুটটি সম্পূর্ণ পাঠ্যের আয়তক্ষেত্র হিসাবে আসবে। শীর্ষস্থানীয় এবং পিছনের স্থানগুলি ইনপুট এবং আউটপুটটিতে গুরুত্বপূর্ণ। যেমন ইনপুট

        F     
      X  X    
      XXXX    
    

    ফলাফল করা উচিত

      X~~X    
      XXXX    
    

    (অগ্রণী এবং পিছনের স্থানগুলি নোট করুন)

  • ইনপুট বা আউটপুটে একটি একক পেছনের নতুন লাইন রাখা ভাল।

  • আপনি যে কোনো চার স্বতন্ত্র ব্যবহার করতে পারেন মুদ্রণযোগ্য হওয়া ASCII স্থান জায়গায় অক্ষর, , X, ।F~

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


বড় উদাহরণ:

ইনপুট:

                F                                 
              X             X                     
              X             X X                   
X            XXX       X    X X           X    X  
X   X     XXXXXXX      X    XXX     XXXXXXX X  X  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX

আউটপুট:

              X~~~~~~~~~~~~~X                     
              X~~~~~~~~~~~~~X~X                   
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X    X  
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X  X  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX

ওহ হ্যাঁ, আমার প্রিয় zip()<3
cjfaure

2
এর একটি উত্তর প্রয়োজন: / আমি এটিতে কাজ করব।
TheNumberOne

এটি সেলুলার অটোমেটন তৈরি করা তুলনামূলকভাবে সহজ যা এটি অনুকরণ করে তবে আমি এটি শেষ হওয়ার কোনও উপায় ভাবতে পারি না।
DanTheMan

এখনও কি কেউ প্রতিযোগিতা করবেন? তাই সুন্দর চ্যালেঞ্জ। দেখে মনে হচ্ছে আমাকে নিজেকেই হারাতে হবে :)
জাকুজে

উত্তর:


1

perl -p0, 204 + 2 বাইট

ধারণা

  • যদি এফ এর নীচের দ্বীপের উভয় দিক সমান উচ্চতা X *Xহয় তবে X~*Xes দ্বীপের সমস্ত এসকে প্রতিস্থাপন করুন।
  • যদি এক পাশ উচ্চতর হয় তবে নিম্ন পাশের ড্রেন এবং এফের নিকটতম পয়েন্টের মধ্যে সমস্ত X *Xএসকে প্রতিস্থাপন X~*Xকরুন যা নীচের দিকের শীর্ষের চেয়ে বেশি।

F এর নীচে জমিটি এখানে উভয় পক্ষের অংশ হিসাবে গণনা করা হয়েছে।

গলফ

s/.*(F).*
//;$f=@-[1];($%,$r)=map{y///c}/(.{0,$f})\bX+?\b(.*)$/;($a,$b)=map{y///c}/[^~]*^(?(?=(.{$%,$f}X)).{$f} *|.{$f} *X(.*)).{$r}
/m;$a=$%if!$a||$b;$b+=$r;s/(?<=.{$a})\b *\b(?=.{$b})/"~"x length($&)/ge

নোট

perl -p0e ' # slurp stdin, print the result

s/.*(F).*\n//; # remove the first line, record the index of F
$f=@-[1]; # get the index of F

($l,$r)=map{length}m/(.{0,$f})\bX+?\b(.*)$/;
# gets the distance from either side to the drains closest to F
($a,$b)=map{length}m/[^~]*^(?(?=(.{$l,$f}X)).{$f} *|.{$f} *X(.*)).{$r}\n/m;
# tries to find the lowest line that has at least one X on
# one side of the island, but none on the other
$a=$l if !$a||$b;
$b+=$r; # use the captured groups to calculate the left and right bounds
s/(?<=.{$a})\b *\b(?=.{$b})/"~" x length($&)/ge;
# replace all pools within those bounds
'

এই প্রয়োগে আসল অ্যালগরিদম সনাক্ত করা কঠিন হতে পারে যেহেতু পার্ল ভেরিয়েবল দৈর্ঘ্যের বর্ণমালার জন্য সমর্থন করে না।


6

লুয়া 5.2, 581 বাইট

আবার, গল্ফিংয়ের জন্য এত অকার্যকর ভাষা এবং অকার্যকর অ্যালগরিদম দিয়ে ধীরে শুরু করুন। তবে আমি উন্নতি করব :)

r=io.read w=io.write F=r()f=F:find("F")o={[1]=F}W=#F i=2 
repeat s=r()if s==nil then break end o[i]={}for j=1,W do o[i][j]=s:sub(j,j)end i=i+1 until false
function e(i,j)
local k,l,b,c=j+1,j-1,false
if i>=#o or(o[i+1][j]==" "and e(i+1,j)==0)then return 0 end
while k<=W do
b=b or o[i][k]=="X"
if b or(o[i+1][k]==" "and e(i+1,k)==0)then break end
k=k+1 end
while l>0 do
c=c or o[i][l]=="X"
if c or(o[i+1][l]==" "and e(i+1,l)==0)then break end
l=l-1 end
if b and c then for m=l+1,k-1 do o[i][m]="~"end return 1 end
return 0 end
e(1,f)for i=2,#o do for j=1,W do w(o[i][j])end w"\n"end

পরীক্ষার কেস (জলের উত্স সহ):

---------
    F    
  X~~X   
  XXXX   
--------------------
         F          
   X     X~X        
X  X X  XX~X~~XX~~~X
XXXXXX XXXXXXXXXXXXX
--------------------
   F                
   X     X X        
X~~X~X  XX X  XX   X
XXXXXX XXXXXXXXXXXXX
--------------------------------------------------
                F                                 
              X~~~~~~~~~~~~~X                     
              X~~~~~~~~~~~~~X~X                   
X~~~~~~~~~~~~XXX~~~~~~~X~~~~X~X~~~~~~~~~~~X    X  
X~~~X~~~~~XXXXXXX~~~~~~X~~~~XXX~~~~~XXXXXXX X  X  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX

বাশ থেকে এইভাবে পরীক্ষা করা সম্ভব, তবে এটি এত সুন্দর দেখাচ্ছে না:

$ echo "    F     
  X  X    
  XXXX   " | lua f.lua

এটি আরও সহজ পরীক্ষা করতে এখানে ডক্স ব্যবহার করুন ! এই মত
রাভ্রন

1

জাভাস্ক্রিপ্ট, 460 বাইট

অনলাইন ডেমো (কনসোলে, বর্তমান ক্রোম এবং ফায়ারফক্সে পরীক্ষিত)।

function e(i,j){var k=j+1,l=j-1,b=0,c=0,I=i+1
if(i>(O-2)||(o[I][j]==" "&&e(I,j)==0))return 0
while(k<W){b=b||(o[i][k]=="X")
if(b||(o[I][k]==" "&&e(I,k)==0))break
k++}while(l>=0){c=c||(o[i][l]=="X")
if(c||(o[I][l]==" "&&e(I,l)==0))break
l--}if(b&&c){for(m=l+1;m<k;m++)o[i][m]="~"
return 1}return 0}function f(d){o=d.split("\n")
F=o[0];s=F.indexOf("F");W=F.length;O=o.length
for(i=0;i<O;i++)o[i]=o[i].split("")
e(0,s);for(i=1;i<O;i++)console.log(o[i].join(""))}

নিজেকে চ্যালেঞ্জ করা এত মজাদার নয়, তবে এখনও সম্ভব। লুয়া হিসাবে একই অ্যালগরিদম, এখন জাভাস্ক্রিপ্টে।

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