এএসসিআইআই ওয়াটার ওয়ার্কস


19

ইন্ট্রো

f A\/যেমন চরিত্রগুলির একটি গ্রিড বিবেচনা করুন

f  f  f  
      A  
   A / \ 
\ /     A
    A \/ 
   /     
 \/         

কোথায়:

  • f পানির স্রোতকে নীচের দিকে oursেলে এমন একটি কলকে প্রতিনিধিত্ব করে
  • A উপরের জলের ধারাটি বিভক্ত করে ঠিক ঠিক অর্ধেক বাম দিকে যায় এবং ঠিক অর্ধেকটি ডানদিকে যায় goes
  • \ উপরের জলের ধারাটি এক ইউনিট দ্বারা ডানদিকে সরান to
  • / জলের স্রোতটিকে এক ইউনিট দ্বারা বাম দিকে স্থানান্তরিত করে
  • সংমিশ্রণগুলি \/অসীম ক্ষমতা সহ একটি গর্ত তৈরি করে যা তার উপরে জল প্রবাহগুলি সংগ্রহ করে
  • [space] জলের মধ্য দিয়ে যেতে পারার চেয়ে ফাঁকা জায়গা

এ থেকে আমরা কল্পনা করতে পারি যে জল ( *) নল থেকে বেরিয়ে আসে এবং গর্তের মধ্যে পড়েছে বা গ্রিডের অঞ্চল থেকে পড়ে যাবে:

f  f  f    <-- first second and third faucets
*  * *A* 
* *A*/ \*
\*/ *  *A  <-- a '*' is not drawn to the right of this A because it would be out of the 9×7 bounds
 * *A*\/   <-- upper trough
 **/ *   
 \/  *     <-- lower trough

3 টি কল আউটপুট ধরে একবারে একই পরিমাণে জল একসাথে আমরা দেখতে পাচ্ছি

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

এ থেকে আমরা বলতে পারি যে (1 + 3/4 + 1/4 + 1/4) / 3 = 75%জলের গর্তটি ধরা (1/4 + 1/4 + 1/4) / 3 = 25%পড়ে এবং গ্রিড থেকে পড়ে।

চ্যালেঞ্জ

আপনি এই ASCII জল প্রবাহ সেটআপ সম্পর্কিত এই যে কোনও একটি বা সমস্ত চ্যালেঞ্জ সম্পূর্ণ করতে পারেন। তারা সমস্ত কোড-গল্ফ, প্রতিটি চ্যালেঞ্জের জন্য সংক্ষিপ্ত উত্তরটি হ'ল বিজয়ী। গৃহীত উত্তরটি সেই ব্যক্তিই হবেন যিনি টাই-ব্রেকার হিসাবে মোট কোড দৈর্ঘ্য সহ সর্বাধিক চ্যালেঞ্জগুলি পূর্ণ করেন।

চ্যালেঞ্জ 1
একটি প্রোগ্রাম লিখুন যা প্রদত্ত গ্রিডের জলে ভরাট জলের ভগ্নাংশকে বহন করে। উপরের উদাহরণটির আউটপুটটি সহজভাবে হবে 0.75

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

 f
/A

যেহেতু কিছুই করার দরকার নেই, যদিও এ এর ​​দুপাশে জল প্রবাহিত হচ্ছে, এটি অপসারণ ছাড়া বাম দিকে /টানা যাবে না এবং এটি 2 × 2 গ্রিডটি বড় না করে ডানদিকে টানা যাবে না।

চ্যালেঞ্জ 3 (আপডেট)
এমন একটি প্রোগ্রাম লিখুন যা দুটি অ-নেতিবাচক পূর্ণসংখ্যার মধ্যে নিয়ে যায়, মোট টি এবং কে (টি> = কে) রাখার পরিমাণ। ঠিক একইরকম একটি গ্রিড তৈরি করুন এবং আঁকুন fযে যখন সেই কলটি পানির টি ইউনিটগুলি pেলে দেয়, তখন ঠিক কে খাদে প্রবাহিত হয়। যদি কোনও নির্দিষ্ট (টি, কে) জুটির জন্য সীমাবদ্ধ গ্রিডে এটি করা অসম্ভব হয় তবে আউটপুট 'ইম্পসিবল'।

স্পষ্টকরণ (সমস্ত চ্যালেঞ্জের ক্ষেত্রে প্রযোজ্য)

  • ইনপুট স্টিডিন, বা একটি ফাইল, বা এমনকি গ্রিডের স্ট্রিং উপস্থাপনার জন্য কোনও ফাংশন কলের মাধ্যমে হতে পারে। কীভাবে বিভিন্ন ইনপুট চালানো যায় তা কেবল এটি সুস্পষ্ট করুন।
  • আউটপুট অবশ্যই stdout যেতে হবে।
  • \Aএবং A/এবং AAএছাড়াও পাত্র হিসাবে আপনি আশা করতে চাই আছে।
  • ডাব্লু বাই এইচ গ্রিড সর্বদা ডাব্লু * এইচ অক্ষরের একটি ভাল ফর্ম্যাটড আয়তক্ষেত্র হবে যা নিউলাইনগুলি গণনা করছে না। কোনও অনুপস্থিত ট্র্যাকিং স্পেস এবং কোনও ঘটনা ঘটবে না *
  • গ্রিডের মাত্রা 1 × 1 এর মতো ছোট এবং নির্বিচারে বড় হতে পারে। (স্বতঃস্ফূর্তভাবে কারণের মধ্যে বড়, ইনটম্যাক্সভ্যালু বা এর মতো একটি গ্রহণযোগ্য সীমা T একইভাবে টি এবং কে এর জন্য যায়))
  • এর উপর fদিয়ে প্রবাহিত একটি স্রোতের উপরে ।
  • কল কেবল উপরের সারিতে নয়, যে কোনও জায়গায় থাকতে পারে।
  • A সর্বদা তার উপর waterেলে দেওয়া পরিমাণের পরিমাণ ঠিক অর্ধেক ভাগ করে।

দ্রষ্টব্য: পছন্দ মত /Aএবং //পুরোপুরি বৈধ। পানি নেই অবাধে অক্ষরের মধ্যে প্রবাহিত (পর্যাপ্ত রুম এটা আঁকা নয় চ্যালেঞ্জ 2 জন্য যদিও)।

সুতরাং, সেটআপে

ff

/A

বাম fস্রোতটি নীচে oursুকে পড়ে, হিট দেয় /এবং বামে স্থানান্তর । ডান fপ্রবাহটি নীচে oursুকে পড়ে, হিট দেয় A, অর্ধেক ডানদিকে যায় এবং অর্ধেকটি বাম দিকে যায় Aএবং /

যেমন

 ff
 **
*/A*
** *
** *

3
+1 দুর্দান্ত চ্যালেঞ্জ। চ্যালেঞ্জ 3 হিসাবে, শীর্ষে গ্রিডটি কোনও বৈধ উত্তর হবে না কারণ এতে 3 fএস
এডসি 65

@ edc65 আহ, ভাল ধরা!
ক্যালভিনের শখ


2
দ্বিতীয় চ্যালেঞ্জের জন্য, আপনাকে কীভাবে ইনপুট পরিচালনা করতে হবে তা যদি উল্লেখ করা দরকার /Aযে জলের উপর দিয়ে জল পড়ে A। সমস্ত চ্যালেঞ্জের জন্য, \Aগর্ত কিনা তা স্পষ্ট করে বলা ভাল । তৃতীয় চ্যালেঞ্জের জন্য, নেমে আসা 3 টি ইউনিটকে Aবিভাজন হিসাবে ধরে নেওয়া উচিত 1.5 / 1.5(সুতরাং ইনপুটটি আসলে একক যুক্তিযুক্ত সংখ্যা) বা এটি 2 / 1, কোন ক্ষেত্রে কোন পক্ষটি গ্রহণ করে 2?
পিটার টেলর

1
@ পিটারটেলর ধন্যবাদ আমি এই বিষয়গুলি পরিষ্কার করে দিয়েছি। আমার ধারণা টি এবং কে ভাসমান হতে পারে তবে আমি তাদের সরলতার জন্য পূর্ণসংখ্যা রাখছি। (কিন্তু যদি টি = 3 আঘাত করে একটি Aতারপর উভয় পক্ষের 1.5 নিশ্চিত ভাসা স্পষ্টতা কোনো সমস্যা হয় না করতে পেতে পারি এটা আপ সংকেতপদ্ধতিরচয়িতা করতে।।)
ক্যালভিন এর সখ

উত্তর:


3

সমস্ত চ্যালেঞ্জ সি # 690bytes (416 বাইটস + 274 বাইটস)

1 এবং 2 সি # 579 446 416bytes চ্যালেঞ্জগুলি

এটি একটি সম্পূর্ণ প্রোগ্রাম যা প্রায় 1 এবং 2 চ্যালেঞ্জগুলি করা উচিত। এটি স্টিডিন থেকে ইনপুট লাইনগুলি পড়া হয় যতক্ষণ না এটি খালি লাইন পায়। এটি চ্যালেঞ্জ 2 এর ফলাফল এবং পরে চ্যালেঞ্জ 1 এর ফলাফল মুদ্রণ করে for

using C=System.Console;class P{static void Main(){decimal u,t=0,f=0;string c,z="";for(decimal[]n=null,o;(c=C.ReadLine())!="";z+='\n'){int s=c.Length,i=s,e;o=n;n=new decimal[s];for(o=o??n;i-->0;n[i]+=(e&2)*u/2){e=c[i]%13;u=o[i]/(e<1?2:1);if(e%8<1)if(i>0)if(c[i-1]%7<3)t+=u;else n[i-1]+=u;if(e<2)if(i<s-1)if(c[i+1]%2>0)t+=u;else n[i+1]+=u;if(e>9){u++;f++;}}for(;++i<s;)z+=c[i]<33&n[i]>0?'*':c[i];}C.WriteLine(z+t/f);}}

কম গল্ফড:

using C=System.Console;
class P
{
    static void Main()
    {
        decimal u,t=0,f=0;
        string c,z="";

        for(decimal[]n=null,o;(c=C.ReadLine())!="";z+='\n')
        {
            int s=c.Length,i=s,e;
            o=n;
            n=new decimal[s];
            for(o=o??n;i-->0;n[i]+=(e&2)*u/2)
            {
                e=c[i]%13;
                u=o[i]/(e<1?2:1);

                if(e%8<1)
                    if(i>0)
                        if(c[i-1]%7<3)t+=u;
                        else n[i-1]+=u;
                if(e<2)
                    if(i<s-1)
                        if(c[i+1]%2>0)t+=u;
                        else n[i+1]+=u;
                if(e>9)
                {
                    u++;
                    f++;
                }
            }
            for(;++i<s;)
                z+=c[i]<33&n[i]>0?'*':c[i];
        }

        C.WriteLine(z+t/f);
    }
}

টেস্ট রান (পেছনের জায়গাগুলির অভাবে যা আমি প্রতিশ্রুতি দিয়েছি সেখানে):

f  f  f
      A
   A / \
\ /     A
    A \/
   /
 \/

f  f  f
*  * *A*
* *A*/ \*
\*/ *  *A
 * *A*\/
 **/ *
 \/  *
0.75

চ্যালেঞ্জ 3 সি # 274 বাইটস

এটি একটি সম্পূর্ণ প্রোগ্রাম চ্যালেঞ্জ সম্পূর্ণ হওয়া উচিত 3. আমি আমার নিজের পূর্ণসংখ্যা পার্সার লেখা ইনপুট পড়তে বদলে দ্বারা 6bytes সংরক্ষণ করতে পরিচালিত Splitএকটি ing ReadLineএবং ব্যবহার long.Parse;

using C=System.Console;class P{static void Main(){long t=-1,f=t,k;for(;f<0;)for(f=t,t=0;(k=C.Read())>47;)t=t*10+k-48;var r="Impossible\n";for(k=t;k<t*f;)k*=2;if(f<1||(k/f)*f==k)for(r=" f \n";t>0&t<f;t-=(t/f)*f)r+=((t*=2)<f?" ":"A")+"A \n/ /\n";C.Write(r+(t<f?"":"AAA\n"));}}

কম গল্ফড:

using C=System.Console;
class P
{
    static void Main()
    {
        long t=-1,f=t,k;
        for(;f<0;)
            for(f=t,t=0;(k=C.Read())>47;)
                t=t*10+k-48;

        var r="Impossible\n";
        for(k=t;k<t*f;)
            k*=2;
        if(f<1||(k/f)*f==k)
            for(r=" f \n";t>0&t<f;t-=(t/f)*f)
                r+=((t*=2)<f?" ":"A")+"A \n/ /\n";
        C.Write(r+(t<f?"":"AAA\n"));
    }
}

টেস্ট রান (আবার আমি যে প্রতিশ্রুতি দিয়েছি সেখানে পিছনের জায়গাগুলির অভাবে):

32 17
 f
AA
/ /
 A
/ /
 A
/ /
 A
/ /
AA
/ /

3

প্রথমত, আমার চ্যালেঞ্জ সম্পর্কিত একটি প্রশ্ন রয়েছে। যেহেতু প্রশ্নটিতে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তাই আমি এখানে এটি লিখছি:

  • আচরণকে কী /A(জল একটি উপর প্রবাহিত), //(জল ডান দিকে প্রবাহিত) এবং এই নীতিকে এর বৈচিত্র? পাশের প্রথম "ফ্রি স্পট" এ জল প্রবাহিত হয় বা প্রতিবেশীর "নীচে" প্রবাহিত হয়?

একটি সহজ চেষ্টা, এটি waaaaay সরল করা যেতে পারে (যা আমি এই পোস্টটি সম্পাদনা করে পরে করব) will

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

জাভাস্ক্রিপ্ট, 226 বাইট (চ্যালেঞ্জ 1)

function f(c){function h(b,a,d,e){b<c.length&&0<=a&&a<c[0].length&&("\\"==c[b][a]?"/"==e||"A"==e?g+=d:h(b,a+1,d,"\\"):"/"==c[b][a]?"\\"==e||"A"==e?g+=d:h(b,a-1,d,"/"):"A"==c[b][a]?"A"==e||"\\"==e||"/"==e?g+=d:(h(b,a-1,d/2,"A"),h(b,a+1,d/2,"A")):h(b+1,a,d,c[b][a]))}for(var g=0,m=0,k=0;k<c.length;k++)for(var l=0;l<c[k].length;l++)"f"==c[k][l]&&(h(k+1,l,1),m++);alert(g/m)};

জাভাস্ক্রিপ্ট, 204 বাইট (চ্যালেঞ্জ 2)

function f(c){function e(b,a,d){b<c.length&&0<=a&&a<c[0].length&&("\\"==c[b][a]?"/"!=d&&"A"!=d&&e(b,a+1,"\\"):"/"==c[b][a]?"\\"!=d&&"A"!=d&&e(b,a-1,"/"):"A"==c[b][a]?"A"!=d&&"\\"!=d&&"/"!=d&&(e(b,a-1,"A"),e(b,a+1,"A")):(" "==c[b][a]&&(c[b][a]="*"),e(b+1,a,c[b][a])))}for(var g=0;g<c.length;g++)for(var h=0;h<c[g].length;h++)"f"==c[g][h]&&e(g+1,h)};

জাভাস্ক্রিপ্ট, 238 বাইট (চ্যালেঞ্জ 1 + 2)

function f(c){function h(b,a,d,e){b<c.length&&0<=a&&a<c[0].length&&("\\"==c[b][a]?"/"==e||"A"==e?g+=d:h(b,a+1,d,"\\"):"/"==c[b][a]?"\\"==e||"A"==e?g+=d:h(b,a-1,d,"/"):"A"==c[b][a]?"A"==e||"\\"==e||"/"==e?g+=d:(h(b,a-1,d/2,"A"),h(b,a+1,d/2,"A")):(" "==c[b][a]&&(c[b][a]="*"),h(b+1,a,d,c[b][a])))}for(var g=0,m=0,k=0;k<c.length;k++)for(var l=0;l<c[k].length;l++)"f"==c[k][l]&&(h(k+1,l,1),m++);alert(g/m)};

কিভাবে ব্যবহার করে

মানচিত্রের একটি দ্বিমাত্রিক উপস্থাপনা সরবরাহ করুন। এখানে প্রশ্নের উদাহরণ প্রদান করা হয়েছে:

var input = [["f"," "," ","f"," "," ","f"," "," "],[" "," "," "," "," "," ","A"," "," "],[" "," "," ","A"," ","/"," ","\\"," "],["\\"," ","/"," "," "," "," "," ","A"],[" "," "," "," ","A"," ","\\","/"," "],[" "," "," ","/"," "," "," "," "," "],[" ","\\","/"," "," "," "," "," "," "]];
f(input);

আউটপুট

চ্যালেঞ্জ 1: এটি কেবল ফলাফলের সাথে একটি ডায়ালগ বক্স (সতর্কতা) তৈরি করবে (উপরের উদাহরণের জন্য 0.75)।

চ্যালেঞ্জ 2: এটি সরাসরি মানচিত্রটি সংশোধন করবে। আমি কি এটি মুদ্রণ করা উচিত? যদি তা হয় তবে কনসোল.লগটি কি গ্রহণযোগ্য? বৈধ আউটপুট হিসাবে?

চ্যালেঞ্জ 1 + 2: উপরের দুটি মিলিত, সম্ভবত ...


জল অক্ষরগুলির মাঝে প্রবাহিত করে যেন এটি লাইন Aবা স্ল্যাশগুলির লাইনকে আলিঙ্গন করে । আমি প্রশ্নে তা স্পষ্ট করে দিয়েছি।
ক্যালভিনের শখ

প্রশ্নটি বলেছেOutput must go to stdout.
ব্যবহারকারী 80551

আপনি ইনপুট ফর্ম্যাট হিসাবে সুনির্দিষ্টভাবে উল্লেখ করেছেন যে আপনি সারিতে প্রতি এক-বর্ণের স্ট্রিংয়ের অ্যারে দিতে পারেন, তবে মনে রাখবেন আপনি str[0]স্ট্রিংগুলিতে সূচক করতে পারেন । এটি অক্ষরের অ্যারের পরিবর্তে স্ট্রিংগুলির একটি অ্যারে হবে।
টমসডিং

1
ব্যবহারকারী 80551 ধন্যবাদ, কেন জানি এটি আমার মন থেকে সরে গেল। আমি যত তাড়াতাড়ি সম্ভব আমার কোড আপডেট করব। @ টমসমিডিং হ্যাঁ, এটি আমার চ্যালেঞ্জটির উত্তরটির জন্য কাজ করে। তবে চ্যালেঞ্জ 2 এর জন্য আমি সরাসরি ইনপুটটি সংশোধন করছি এবং আপনি str [i] ব্যবহার করে একটি স্ট্রিংয়ে কোনও অক্ষর পরিবর্তন করতে পারবেন না, তাই অ্যারের অ্যারের ব্যবহার।
রিফ্রেশফ্রিজ

2

পাইথন 3, 186 বাইট (চ্যালেঞ্জ 3)

আমি ভিজুয়ালমেলনের উত্তর থেকে গ্রিডের জন্য ধারণাটি নিয়েছি । ফাংশনটি নির্বিঘ্নে বড় টি এবং কে এর জন্য স্টিডআউটে একটি বৈধ গ্রিড প্রিন্ট করা উচিত, তবে অবশ্যই এটি সম্ভব (সসীম আকারের গ্রিড)।

from fractions import*
def c(T,K):
 p=print;g=gcd(T,K);K//=g;T//=g
 if T&(T-1):p('Impossible')
 else:
  p(' f ')
  while T-1:
   T//=2;p('A/'[K<T]+'A \n///')
   if K>=T:K-=T
  p('AAA'*K)

কিভাবে ব্যবহার করে

cআর্গুমেন্ট হিসাবে রাখতে মোট পরিমাণ এবং পরিমাণ নিয়ে ফাংশনটিতে কল করুন ।

>>> c(24, 9)
 f 
/A 
///
AA 
///
AA 
///

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