এলিসের প্রথম কোড পর্যালোচনা


20

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

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

উদাহরণ

++++++         +++++         +++++         +++++         +++++         +++++
++++++         +++++         +++++         +  ++         ++ ++         +++++
++++++         ++ ++         +   +         +  ++         +   +
++++++         +++++         +++++         +++++         ++ ++         +++++
++++++         +++++         +++++         +++++         +++++         +++++

Perfect         OK         Acceptable   Unacceptable    No way!        Nope.

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

এটি তাই উত্তরগুলি বাইটে কম বাইটের সাথে লক্ষ্য হয়।

সীমাবদ্ধতাসমূহ

  1. আপনার প্রোগ্রাম বা ফাংশনটিতে একটি ইনপুট হিসাবে একক স্ট্রিং নেওয়া উচিত এবং এক বা একাধিক পাঠ্য পাঠ্য আউটপুট আউট করা (বা যদি আপনি কোনও ফাংশন বাস্তবায়ন করেন তবে মাল্টি-লাইন স্ট্রিং বা স্ট্রিংগুলির অ্যারে ফিরিয়ে দিন)।
  2. ইনপুট স্ট্রিংয়ে হোয়াইট স্পেসগুলি সহ যে কোনও ASCII অক্ষর থাকতে পারে।
  3. ইনপুটটিতে থাকা সমস্ত শ্বেতস্থান অবশ্যই অগ্রাহ্য করা উচিত। কোডের দৈর্ঘ্যের জন্য তাদের গণনা করা উচিত নয় এবং এগুলিকে আউটপুট ব্যবহার করা উচিত নয়।
  4. ইনপুট স্ট্রিংয়ে কমপক্ষে একটি অ-হোয়াইটস্পেস অক্ষর থাকে।
  5. ফর্ম্যাট কোডটিতে ইনপুট কোডের মতো একই ক্রমযুক্ত অ-শ্বেতস্পেস অক্ষর থাকতে হবে।
  6. ফর্ম্যাট কোডটি অবশ্যই একটি নিখুঁত বর্গক্ষেত্র হতে হবে, যেমন সমস্ত লাইনের দৈর্ঘ্য একই হতে হবে এবং রেখার সংখ্যা লাইন দৈর্ঘ্যের সমান হতে হবে।
  7. ফর্ম্যাট কোডটি মাঝখানে ফাঁক থাকতে পারে।
  8. ফাঁকা জায়গায় কেবল স্থান অক্ষর (ASCII কোড 32) ব্যবহার করা যেতে পারে।
  9. গ্যাপ (উপস্থিত থাকলে) অবশ্যই আয়তক্ষেত্রাকার হতে হবে।
  10. বিন্যাসিত কোডের প্রতিটি লাইনে অবশ্যই কমপক্ষে একটি অ-শ্বেতস্পেস অক্ষর থাকা আবশ্যক, অর্থাৎ ফাঁক প্রস্থ অবশ্যই বর্গাকার প্রস্থের চেয়ে কড়াভাবে কম হওয়া উচিত (ফাঁক 5x1 5x5 বর্গের জন্য অগ্রহণযোগ্য)।
  11. গ্যাপটি অনুভূমিক হওয়া উচিত, অর্থাৎ ফাঁকের প্রস্থটি ফাঁকের উচ্চতার চেয়ে বড় বা সমান হতে হবে।
  12. গ্যাপটি অবশ্যই পুরোপুরি কেন্দ্রিক হতে হবে।
  13. ফলস্বরূপ ফাঁক প্রস্থ এবং উচ্চতা সমতা স্কোয়ার প্রস্থের সমতা হিসাবে সমান হওয়া উচিত (উদাহরণস্বরূপ 5x5 বর্গ ব্যবধানটি 1x1, 3x1 বা 3x3 হতে পারে)।
  14. সম্ভব হলে, কোনও ফাঁক ছাড়াই আউটপুট স্কোয়ার।
  15. একাধিক সমাধানের ক্ষেত্রে, বর্গের নিকটতম ব্যবধানের সাথে একটি চয়ন করুন, যেমন ফাঁক প্রস্থ এবং ফাঁকের উচ্চতার মধ্যে পার্থক্য ন্যূনতম (উদাহরণস্বরূপ: ফাঁক 10x10 8x6 এর চেয়ে বেশি ভাল, এবং 8x6 6x2 এর চেয়ে বেশি পছন্দনীয়)।
  16. যদি এখনও কোনও টাই থাকে তবে ন্যূনতম ব্যবধান অঞ্চল সহ সমাধানটি চয়ন করুন (উদাহরণস্বরূপ ফাঁক 2x2 4x4 এর চেয়ে বেশি পছন্দনীয়)।
  17. কোডটি বিন্যাস করা মোটেও অসম্ভব হলে আউটপুট :~(
  18. শেষ লাইনের পরে নিউলাইন optionচ্ছিক।
  19. [নতুন] আপনি নিরাপদে ধরে নিতে পারেন যে 33 এর নীচের কোড সহ যে কোনও অক্ষর একটি সাদা স্থান। আমি আশা করি এটি আপনাকে গল্ফ করার জন্য সহায়তা করবে।

টেস্ট

Input           Output      Code length     Comment

+++++++++       +++                   9     Alice is lucky, 
                +++                         her code perfectly fits a square. 
                +++


++++++++        +++                   8     Though code length isn't enough for a square, 
                + +                         a small gap fixes it.
                +++


++++++          :~(                   6     No luck, code cannot be formatted.


Hello,          Hell                 12     Input may contain any ASCII characters, 
World!          o  ,                        but whitespaces in input should be ignored.
                W  o
                rld!


+++++ + +++++   +++++                22     Gap is not required to be a square, 
+++++ + +++++   +++++                       it can be a rectangle.
                +   +
                +++++
                +++++

+++ + +++       ++++++++             28     There exists another solution: 
+++ + +++       +      +                    6x6 square with 4x2 gap, 
+++ + +++       +      +                    but in Alice's opinion square gap 
+++ + +++       +      +                    makes code more readable.
                +      +
                +      +
                +      +
                ++++++++

কৃপণ পরীক্ষা

This must be    Thism                24     7x7 with 5x5 gap looks good,
5x5 with 1x1    ustbe                       but 5x5 with 1x1 gap is better,
gap.            5x 5w                       because gap area is smaller.
                ith1x
                1gap.

+++ +++ +++     :~(                  18     In case you tried 5x5 square
+++ +++ +++                                 with 7x1 gap ;)

সম্পদ

স্থান বাঁচাতে আপনি নমুনা কোড এবং টিওআরুনে অতিরিক্ত পরীক্ষার কেসগুলি খুঁজে পেতে পারেন

[নতুন] আপনি 100 টি অক্ষর পর্যন্ত ইনপুটগুলির জন্য গৃহীত সমাধানগুলির সারণিতে একবার দেখে নিতে পারেন । আমি প্রস্থ এবং উচ্চতা অদলবদল করলাম কারণ এটি আরও স্বজ্ঞাত বলে মনে হচ্ছে।

দ্বারা অনুপ্রাণিত: পাঠ্যের একটি বর্গক্ষেত্র

পরিবর্তনগুলি

  • নমুনা কোডে 2 টি পরীক্ষা, স্থির বাগ যুক্ত করা হয়েছে।

  • 100 টি পর্যন্ত সমাধানের সারণী যুক্ত করা হয়েছে, সাদা-স্পেসের স্পেসিফিকেশন যুক্ত করা হয়েছে।


3
"যদি ফর্ম্যাট করা অসম্ভব হয় তবে আউটপুট কান্নার ইমোজি" - অপ্রয়োজনীয় ফ্লাফ, যেকোন আউটপুটকে দেওয়া ভাল আইএমও হতে পারে।
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান, আরও ভাল গ্যারান্টি দিবে যে ফর্ম্যাট করা সর্বদা সম্ভব। বৈধতা ইনপুট বু বুড়ো!
শেগি

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

1
@ শেগজি, এটি কেবল ইনপুট বৈধতা নয়। কোনও সমাধান নেই তা খুঁজে পেতে ধাঁধার গুরুত্বপূর্ণ অংশ: কখন অনুসন্ধান বন্ধ করতে হবে তা খুঁজে বের করতে হবে।
দানিল টুটুবালিন

2
@ ডানিলতুতুবালিনকে নিশ্চিত করা খুব সাধারণ যে এখানে কিছু নির্দিষ্ট ইনপুট দেওয়া হবে। এই জাতীয় "অবৈধ" ইনপুটগুলিতে কোনও আউটপুটকে মঞ্জুরি দেওয়াও একটি সাধারণ পন্থা, এবং বয়লারপ্লেট কোডটি এড়িয়ে যায় যার চ্যালেঞ্জের মূলটির সাথে কোনও সম্পর্ক নেই। আপনি যদি সত্যিই এইরকম ক্ষেত্রে আউটপুট হিসাবে উদ্বেগজনক কিছু চান তবে আমি ইনপুটটি নিজেই প্রস্তাব দেব। আমি আপনাকে এখনই এটি পরিবর্তন করার পরামর্শ দিচ্ছি না ... এটিও খুব সুন্দর চ্যালেঞ্জ!
জোনাথন অ্যালান

উত্তর:


5

সি (জিসিসি) , 354 বাইট

h,i,j,k,l,m;g,v,w,d;f(char*s){for(i=l=0;s[i];l+=!isspace(s[i++]));d=g=l;for(i=0;i++<l;)if(h=i*i-l)for(j=0;j<i-++j;h>0&h%k<1&k<=m&m<i&m+~k&&m-k<g|m==k+g&(d-2*v)*(d-2*w)>h?w=(i-m)/2,v=j,g=m-k,d=i:j)k=i-2*j,m=h/k;else g=0,v=w=d=i;if(g-l)for(i=j=1;*s;j+=!i++,k=0,i%=d+1)for(putchar(i?v>=j|j>d-v|w>=i|i>d-w?k=1,*s:32:10);k;k*=isspace(*++s));else puts(":~(");}

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


আমি মনে করি একটি ট্যাব "হোয়াইট স্পেস", যদিও আমি ঠিক কী গণনা করে তার বিষয়ে স্পষ্টতা চেয়েছিলাম।
জোনাথন অ্যালান

আমি আপডেট পোস্ট আছে। আপনি প্রতিস্থাপন করতে পারি isspace(x)সঙ্গে x<33
দানিল টুটুবালিন


4

জাভাস্ক্রিপ্ট (ES6),  284 ... 274  270 বাইট

4 শে বাইট সংরক্ষিত হয়েছে @ শেগগিকে ধন্যবাদ

স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

s=>(s=s.replace(/\s/g,''),n=s.length,o=[':~('],W=d=g=(x,w=0,h=p=0)=>4*~-x>n?o:h>w?++w>x-2?g(-~x):g(x,w):g(x,w,h+1,o=n-x*x+w*h|(w^x|h^x)&!!(w|h)|w-h>d|w-h==d&w>W?o:[...Array(x)].map((_,Y,a)=>a.map((_,X)=>2*X>=x-w&2*X<x+w&2*Y>=x-h&2*Y<x+h?' ':s[p++]).join``,d=w-h,W=w)))``

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


সাবাশ! যদিও এই পরীক্ষার চেষ্টা করুন: This must be 5x5 with 1x1 gap.(24 অক্ষর)
ড্যানিল টুটুবালিন

1
@ দানিলতুতুবলিন সেজন্য আমি আমার প্রাথমিক পোস্টটি মুছে ফেলেছি (এবং এই জাতীয় পরীক্ষার কেস প্রস্তাব করেছে) তবে এটি এখন সঠিকভাবে সমর্থিত।
আর্নৌল্ড

[\s\n]শুধু হতে পারে না \s?
শেগি

++w>x-2w++>=x-2w++>=x42\s

4

স্ট্যাক্স , 80 বাইট

ö╦Çc▀╕╡ëé╓]µiÖ9♪`W|╣▐↑╖D┘↕♫╗╔äƒ■úφ■U`ÿ⌠%é┴☼vAú)☺@ı◄¬¶¢(îÉ┼6⌠D~♀└lfæA.I@º╤∟òîü╦(

এটি চালান এবং এটি ডিবাগ করুন

এটা কিভাবে কাজ করে?

  • আয়তক্ষেত্রের কাটআউটগুলি সহ সমস্ত স্কোয়ার বিবেচনা করুন।
  • সঠিক আকার না হওয়া প্রোগ্রাম আকারগুলি ফিল্টার আউট।
  • সমান মেলেনি এমন প্রোগ্রামের আকারগুলি ফিল্টার আউট।
  • বর্গক্ষেত্রের জন্য কাটআউটটি খুব বড় যেখানে প্রোগ্রাম আকারগুলি ফিল্টার আউট।
  • যদি কিছু না পাওয়া যায় তবে আউটপুট ব্যর্থতা এবং প্রস্থান করুন।
  • যে আকারটি কাটাআউট "আয়তক্ষেত্র" হ্রাস করে তারপরে কাটআউট আকারের সন্ধান করুন।
  • প্রোগ্রামের ইনপুটে সংশ্লিষ্ট অক্ষরের সাথে প্রোগ্রাম আকারে প্রতিটি অক্ষর প্রতিস্থাপন করুন।

আনপ্যাকড, অরগল্ফড এবং মন্তব্য করা দেখে মনে হচ্ছে এটি এমনই।

                input e.g. "big socks"
L$j$            remove whitespace from input e.g. "bigsocks"
cr{~F           copy push each remaining character to input stack in reverse order
%c              get length L of flattened input and copy e.g. 8
^r3:$           create triples [a,b,c] in range 0..n e.g. [[0,0,0], [0,0,1], ... [8,8,8]]
{E*NsJ+n=f      filter triples: require a*a-b*c=L e.g. [[3,1,1], [4,1,8], ...]
{ET>f           filter triples: a>b and a>c e.g. [[3,1,1]]
{{2%m:u_0#+f    filter triples: a%2=b%2=c%2 or b*c=0 e.g. [[3,1,1]]
":~("s|c        if there are no triples, output ":~(" and terminate
{D:s_D:*\oh     sort by [abs(b-c),b*c]; keep the first e.g. [3,1,1]
X               store the chosen triple in the X register
E               explode onto stack e.g. 3, 1, 1
z)]*            using last two values, make a rectangle of zeroes e.g. 3, [[0]]
~               this will be the cutout, push it to the input stack
c'X*]*          make a square of "X" e.g. ["XXX", "XXX", "XXX"]
xEd-h           given the dimensions in x register, calculate the centered cutout coordinates
xEsd-h          e.g. ["XXX", "XXX", "XXX"], 1, 1
,||             embed the cutout grid at the specified coordinates e.g. ["XXX", "X X", "XXX"]
m'X{,]}R        for each line, regex replace "X" with a character from the input stack

এটি চালান


আপনি কি দয়া করে আনপ্যাকড সংস্করণটি সরবরাহ করতে পারেন?
ড্যানিল টুটুবালিন

1
@ দানিলতুতুবলিন আমি একটি ব্যাখ্যা যুক্ত করেছি
রিকার্সিভ

ধন্যবাদ! সাবাশ!
দানিল তুতুবালিন

2

কাঠকয়লা , 120 বাইট

≔E⮌⪫⪪S ωιθ≔⁰ηF⊕Lθ¿⁼Lθ×ιι«≔ιη≔ιζ≔ιε»F⊘ιF⊕κF∧⁼Lθ⁻×ιι×⁻ι⊗⊕κ⁻ι⊗⊕λ∨¬η›⁻ζε⁻κλ«≔ιη≔⊕κζ≔⊕λε»¿η«UOη#JεζF›η⊗ζUO⁻η⊗ε⁻η⊗ζψUMKA⊟θ»:~(

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔E⮌⪫⪪S ωιθ

ইনপুট থেকে ফাঁকা স্থানগুলি স্ট্রিপ করুন, তারপরে এটিকে বিপরীত করুন এবং এটি অক্ষরগুলিতে বিভক্ত করুন, যাতে আমরা অক্ষরের পরে আরও সহজে লুপ করতে পারি।

≔⁰η

কোনও ফলাফল পাওয়া যায় না এমন ইঙ্গিত দিয়ে শূন্যের আকার দিয়ে শুরু করুন (এখনও)।

F⊕Lθ

স্ট্রিংয়ের দৈর্ঘ্য পর্যন্ত সমস্ত পাশের দৈর্ঘ্য পরীক্ষা করুন। (একটি বিভাগ নিক্ষেপ করা অবশ্যই কোডটি দ্রুততর করবে))

¿⁼Lθ×ιι«≔ιη≔ιζ≔ιε»

যদি ফলাফলটি একটি নিখুঁত বর্গ হিসাবে পরিণত হয় তবে বর্গাকার আকারটি সংরক্ষণ করুন এবং এটি সীমানার আকার হিসাবে সেট করুন।

F⊘ιF⊕κ

সম্ভাব্য সীমানা উচ্চতা এবং প্রস্থের উপর লুপ (সীমানা প্রস্থ সীমানা উচ্চতার চেয়ে বড় নয়, গ্যাপের উচ্চতা ফাঁক প্রস্থের চেয়ে বেশি নয়।)

F∧⁼Lθ⁻×ιι×⁻ι⊗⊕κ⁻ι⊗⊕λ∨¬η›⁻ζε⁻κλ«≔ιη≔⊕κζ≔⊕λε»

যদি সীমানার আকারটি কাঙ্ক্ষিত দৈর্ঘ্য হয় এবং আমাদের কাছে এখনও কোনও সমাধান নেই বা এটি এই সমাধানের মতো বর্গক্ষেত্র নয় তবে এই বর্গক্ষেত্র এবং সীমানা আকারের সাথে সমাধানটি আপডেট করুন।

¿η«

আমাদের যদি সমাধান হয় ...

UOη#

প্রদত্ত বর্গাকার আকারের একটি স্বেচ্ছাসেবী চরিত্রের একটি আয়তক্ষেত্র আঁকুন।

JεζF›η⊗ζUO⁻η⊗ε⁻η⊗ζψ

সীমানা যদি ফাঁক ছেড়ে দিতে যথেষ্ট ছোট হয় তবে ফাঁকটি মুছে ফেলুন। (অঙ্কন কমান্ডটি নেতিবাচক মানগুলির জন্য উপরের এবং বাম দিকে আঁকবে এবং শূন্য মানগুলি মোটেই পছন্দ করে না))

UMKA⊟θ

ইনপুট থেকে অক্ষরের সাথে সমস্ত (অবশিষ্ট) অক্ষর প্রতিস্থাপন করুন।

»:~(

অন্যথায় আউটপুট :~(


2

জেলি , 91 85 বাইট

ÆDżU$<Ạa;ḂEɗʋƇṢƑƇ;€€
ḟ⁶ḟ⁷;©⁶L’²<¥Ðḟ²_ç;,`Wɗ¹?⁸ʋ€$Ẏạ/ÞḢµIH+""Rp"/ḟ@/ŒṬ€ĖP€Sị®Yµ“:~(”¹?

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

একটি মোনাডিক লিঙ্ক যা ইনপুট স্ট্রিংটিকে তার আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ফর্ম্যাট আউটপুট বা স্ট্রিং দ্বারা স্ট্রিং দেয় :~(


1

পাইথন 2, 287 281 279 বাইট

c=list("".join(input().split()))
l=len(c)
p=[]
for q in range(l*l):x=q%l;y=q/l;s=(l+x*y)**.5;p+=[(abs(x-y)/2,int(s),-x)]*(s%1==0)*(x<s-1>y>=s%2==x%2==y%2or x<1)
if p:d,s,x=min(p);b=(s+x)/2;Y=0;exec"c[b:b]=' '*-x*(b+d<=Y<s-b-d);print''.join(c[:s]);c=c[s:];Y+=1;"*s
else:print':~('

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

সমাধান বেছে নিতে এবং মুদ্রণের জন্য উভয়ের জন্য একই মান ব্যবহার করে পাইথনের লিক্সোগ্রাফিক তালিকা তুলনা ব্যবহার করে Uses আমি নিশ্চিত যে 10 4 2 বা তার বেশি বাইটগুলি এখনও শেভ করা যায়।

ব্যাখ্যা

c=list("".join(input().split()))
l=len(c)
p=[]

হোয়াইটস্পেসের সাথে বিভক্ত হয়ে এবং এর সাথে যোগ দিয়ে শ্বেতস্পেসগুলি সরান "", তারপরে ইনপুটটিকে পরে তালিকায় রূপান্তর করুন। lবাস্তব কোডের দৈর্ঘ্য এবং pবৈধ সম্ভাবনার তালিকার জন্য আরম্ভ করুন ।

for q in range(l*l):x=q%l;y=q/l;s=(l+x*y)**.5;

থেকে ফাঁক আকারের সব সম্ভাবনা মাধ্যেমে লুপ 0*0করতে l*l। বর্গের প্রান্ত দৈর্ঘ্যটি lকোড বর্ণগুলি এবং x*yস্পেসগুলির সাথে গণনা করুন s

p+=[(abs(x-y)/2,int(s),-x)]*(s%1==0)*(x<s-1>y>=s%2==x%2==y%2or x<1)

নিম্নলিখিত শর্তগুলি মেলে কিনা তা পরীক্ষা করুন:

  • s % 1 == 0, একটি নিখুঁত বর্গ গঠিত হবে
  • x < s-1 > y, অর্থাত্ xএবং yসর্বাধিক s-2এবং স্কোয়ারের ভিতরে ফিট
  • s % 2 == x % 2 == y % 2, উভয় xএবং yপ্রান্তের সমতার সাথে মেলে এবং কেন্দ্রিক হতে পারে
  • তবে, যদি x < 1, x == 0নিখুঁত বর্গক্ষেত্র প্রয়োজন ব্যতীত অন্য সকলকে উপেক্ষা করুন

শর্তগুলি যদি মিলে যায় তবে অনুকূলটি সন্ধান করতে একটি আইশলে নিম্নলিখিত আইটেমগুলি যুক্ত করুন p:

  • abs(x-y)/2; প্রথমে সবচেয়ে ন্যূনতম পার্থক্য খুঁজে নিন xএবং yসর্বাধিক বর্গ ব্যবধান পেতে পারেন। এটি সর্বদা তাই আমরা 2 দ্বারা বিভক্ত।
  • int(s); এরপরে ন্যূনতম পাশের দৈর্ঘ্যটি সন্ধান করুন। যেহেতু sএকটি পূর্ণসংখ্যা এবং ফাঁক অঞ্চল হিসাবে বৃদ্ধি পায়, তাই ফাঁক অঞ্চল অনুসারে x*yএটি সাজানো।
  • -x; পরবর্তী অনুভূমিক ফাঁকগুলি পছন্দ করতে সর্বাধিক প্রস্থটি সন্ধান করুন। এটি ক্ষেত্রের পরে এটি কীভাবে বিকাশ হয়েছিল তার পরে আসে তবে অঞ্চলটি একই x*yএবং y*xতাই এটি কার্যকর হয়।
if p:d,s,x=min(p);b=(s+x)/2;Y=0

যদি আমরা কোনও বৈধ লেআউট খুঁজে পাই তবে উপরে বর্ণিত অনুকূলতমটি সন্ধান করুন। অনুভূমিক সীমানা গণনা করুন bএবং লাইন নম্বরটি Y0 তে সূচনা করুন ।

exec"c[b:b]=' '*-x*(b+d<=Y<s-b-d);print''.join(c[:s]);c=c[s:];Y+=1;"*s

লাইন সংখ্যা যদি Y(উল্লম্ব সীমানা ফাঁক ভিতরে b+dসঙ্গে, dtuple থেকে), ইন অনুভূমিক সীমান্ত পর স্পেস ফাঁক প্রস্থ এর মূল্য যোগ c। (পরিবর্তনের জন্য cকেন এটি আমাদের তালিকার দরকার)) তারপরে স্কোয়ারের একটি লাইন মুদ্রণ করুন এবং এটিকে সরিয়ে ফেলুন c। পুনরাবৃত্তি sবার, লাইন নম্বর বৃদ্ধি।

else:print':~('

যদি কোনও বিন্যাস পাওয়া যায় নি তবে ব্যর্থ।


সাবাশ! হায়, মাল্টলাইন ইনপুট দিয়ে এটি ভাল কাজ করে না work এছাড়াও মনে হয় এটি আয়তক্ষেত্রাকার ফাঁকগুলি সমর্থন করে না (22 দৈর্ঘ্যের সাথে পরীক্ষা দেখুন)।
ড্যানিল টুটুবালিন

1
@ ডানিলতুতুবালিন আপনাকে পাইথন স্ট্রিং হিসাবে ইনপুট সরবরাহ করতে হবে, মাল্টলাইন আক্ষরিক অর্থে "some\ntext"ডিলিমিটার হিসাবে থাকবে। ( input()পাইথন কোড হিসাবে একটি লাইন ইনপুটকে মূল্যায়ন করে)) যদি এটি গ্রহণযোগ্য না হয় তবে দয়া করে আমাকে জানান। দৈর্ঘ্য 22 আমার জন্যও কাজ করে।
পুর্কাকুডারী

ওচ, দুঃখিত। সম্ভবত ইনপুট দিয়ে আমি কিছু ভুল করেছি।
দানিল টুটুবালিন

1

পাইথ , 99 98 বাইট

#JscQ)=QshKh|oaFtNSf!|%hT1&eT|t{%R2TgeStThT+L@+lJ*Fd2^UJ2
":~("Am/-Qd2tKW=W}~hZrG-QGJj*eKdcJ]H<~>J

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

এটি আমার পাইথন উত্তরের মতো একই অ্যালগরিদম ব্যবহার করে তবে অনেকগুলি বিবরণ উল্লেখযোগ্যভাবে পরিবর্তিত হয়ে পাইথের চেয়ে ছোট হয়ে যায়।

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

মজার বিষয় হল, পাইথ স্ট্যাক্স হিসাবে একই ধরণের বেস-256 প্যাকিং ব্যবহার করে তবে এই প্রোগ্রামটি ax98 লগ 256 95⌉ = 81 বাইট দীর্ঘ, স্ট্যাক্সের ঠিক পাশেই (80 বাইট) এবং জেলি (85 বাইট) হতে পারে। আমি মনে করি এটি খুব সুন্দরভাবে দেখায় যে এমনকি গল্ফিংয়ের ভাষাগুলি এমনকি তাদের মারাত্মকভাবে বিভিন্ন দৃষ্টান্তগুলির সাথে কতটা কাছাকাছি।

ব্যাখ্যা (কোডের তুলনায় সামান্য কম অপঠনযোগ্য)

#while True:বার্তাকে দমন করে এবং ত্রুটি থেকে বেরিয়ে যায় এমন সমস্ত কিছুতে মোড়ানো ।

JscQ) cহোপস ইনপুট ( Q) হোয়াইটস্পেসে, sঅংশগুলি একসাথে করে এবং ফলাফলটি সংরক্ষণ করে J

^UJ2সূচকের তালিকা তোলে ( Uএর) Jএবং তার লাগে 2য় কার্টিজিয়ান শক্তি ( ^সবকিছুর যুগল ফলে), [h,w]সঙ্গে 0<=h<len(J)এবং 0<=w<len(J)

+L@+lJ*Fd: সব (জন্য L) যেমন জোড়া d, যোগ করে ( +) বর্গমূল ( @... 2(এর) lএর ength Jপ্লাস ( +) পণ্য ( *Fপেয়ারের) d) যুগল বাম দিকে, একটি ত্রয়ী তৈরি [side length, gap height, gap width]

f!|%hT1&eT|t{%R2TgeStThT: fট্রিপল্টের জন্য ইল্টার Tযেখানে

  • ( !|) এর কোনটিই :
    • পাশের দৈর্ঘ্য ( hT) মডুলো 1 ( %1) হ'ল ননজারো
    • উভয় ( &):
      • ফাঁকের উচ্চতা ( eT) ননজারো
      • (উভয় |):
        • নকল ( ) এবং প্রথম অনন্য ( ) অপসারণ সহ ট্রিপলেট ( R) মডিউলো 2 ( %2) এর প্রতিটি সংখ্যা মুখ্য নয়{t
        • বৃহত্তর ( eS) ফাঁক উচ্চতা এবং ফাঁক প্রস্থ (এর tT) হল gপার্শ্ব দৈর্ঘ্যের তুলনায় reater-অর-সমান ( hT)

Sডিক্সোগ্রাফিকভাবে ট্রিপলটি বাছাই করে (পাশের দৈর্ঘ্যে, তারপরে ফাঁকের উচ্চতা দ্বারা)। oaFtNতারপরে গ্যাপের উচ্চতা এবং গ্যাপের প্রস্থের ( ) এর মধ্যে বিসলিউট পার্থক্য oদ্বারা ত্রিভুজকে rders করে ।atN

এই মুহুর্তে, যদি আমাদের কোনও বৈধ সমাধান না থাকে তবে |এর দ্বিতীয় যুক্তিটি মূল্যায়ন করে \n":~(", যা মুদ্রণ করে এবং ফিরে আসে :~(hঅনুকূল সমাধান গ্রহণ করে (বা ":"যদি না হয়) এবং এটি সংরক্ষণ করা হয় K। তারপরে hতার পাশের দৈর্ঘ্য (বা ":"যদি না হয়) নেয়, sএটি পূর্ণসংখ্যায় ফেলে দেয় (বা ব্যর্থ হয় এবং কিছু না হলে সরে যায়) এবং এটি এতে সংরক্ষণ করা হয় ( =) Q

প্রতিটি ( m) [gap height, gap width]( tK) এর -পাশের দৈর্ঘ্য ( Q) থেকে বিয়োগ করে ( ) এবং ফলাফলটি 2 ( /2) দ্বারা বিভক্ত করা হয় । ফলাফলগুলি Aস্বাক্ষরিত হয় Gএবং H

অবশেষে, আমরা একটি Wহিল লুপ লিখুন । Z0 থেকে শুরু হয় এবং প্রতিটি পুনরাবৃত্তি আমরা এটি বৃদ্ধি করি তবে পুরানো মান ব্যবহার ~hZকরি ( , Z++সি তে ভাবেন )।

  • যদি ( W) পুরাতন মান (হয় {) rAnge G(পাশ দৈর্ঘ্য - এতে G) ( -QG), বরাদ্দ করুন ( =) এর Jনিম্নলিখিত: cহপ Jঅবস্থানে ( ]) Hএবং jপ্রস্থ ফাঁক দিয়ে oin অর্ধেক eKবার ( *) একটি স্থান ( d)। মানটি যদি সীমাতে না থাকে তবে কেবল ফিরে আসুন J। যদি এই ফলাফলটি খালি হয় তবে লুপটি বন্ধ করুন।
  • ( >) থেকে প্রথম Qঅক্ষরগুলি সরিয়ে ফেলুন Jএবং ~ফলাফল নির্ধারণ করুন ( ) J। এর পুরানো মান থেকে J, ( <) প্রথম Qঅক্ষর নিন এবং সেগুলি মুদ্রণ করুন।

অবশেষে, #লুপ আবার শুরু হয়, ত্রুটি এবং দেনা-পাত্তনা মিটান কারণ cQ)সঙ্গে Qএকটি নম্বরের অবৈধ।


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

); কিভাবে তুলনা সাধারণত সম্পন্ন করা হয় তথাপি @DaniilTutubalin, এটা এখনও চমৎকার অন্য golflang বীট এর
PurkkaKoodari

1

05 এ বি 1 ই , 95 89 বাইট

… 
    мDg©Ý3ãʒćnsP-®Q}ʒć‹P}ʒÈËyß_~}Dg_i…:~(ëΣ¦DÆÄsP‚}н©¤_iнë¬Uć᤮Ås<иs;R`X*+šXnª£®θð×ýX}ô»

এখানে এবং সেখানে কয়েকটি বাইট অবশ্যই গল্ফ হতে পারে।

প্রোগ্রামটির প্রথম তিনটি পদক্ষেপ @ রিসার্সিভের স্ট্যাক্স উত্তর দ্বারা অনুপ্রাণিত হয়েছে , তাই তাকে উজ্জীবিত করার বিষয়টি নিশ্চিত করুন!

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

ব্যাখ্যা:

পদক্ষেপ 1: সমস্ত সাদা স্থানগুলি সরান:

 
                   # Push string " \n\t"
    м              # And remove those from the (implicit) input-string

পদক্ষেপ 2: সমস্ত সম্ভাব্য ট্রিপলগুলি তৈরি করুন [একটি,,], কোথায় একটি ফলাফলের মাত্রা একটি×একটি বর্গক্ষেত্র, এবং ×ফাঁক আকার। আমরা পরিসীমাতে পূর্ণসংখ্যা ব্যবহার করে সমস্ত সম্ভাব্য ট্রিপলটি তৈরি করে এটি করি[0,একটি]। এবং তারপরে আমরা এগুলি ফিল্টার করি যেখানে নীচের সমস্তগুলি ট্রিপলেটের জন্য সত্য:

  • একটি2-×=এল, কোথায় এল স্ট্রিংয়ের দৈর্ঘ্য
  • (একটি>) এবং (একটি>)
  • (একটি(গেলিক ভাষার2)=(গেলিক ভাষার2)=(গেলিক ভাষার2)) অথবা (মিআমিএন(একটি,)0)

উদাহরণ স্বরূপ: এল=28তিনটি ফলাফল হবে [[6,2,4],[6,4,2],[8,6,6]]

Dg                 # Get the length of this string (without popping by duplicating first)
  ©                # Store this length in variable `®` (without popping)
   Ý               # Create a list in the range [0,®]
    3ã             # Create all possible triplets by repeating the cartesian product 3 times
ʒ                  # Filter these triplets by:
 ć                 #  Extract head; pop and push remainder-list and head to the stack
  n                #  Square the head
   sP-             #  Take the product of the remainder, and subtract it from the squared head
      ®Q           #  And check if it's equal to the string length in variable `®`
                 # Filter the remaining triplets further by:
  ć‹P              #  Where the first integer is larger than the other two
      }          # And filter it a third time by:
  ÈË               #  Where all three are either odd or even
       ~           #  Or
    yß_            #  It does not contain any 0s

পদক্ষেপ 3: আমাদের এখনও কোনও ট্রিপল্ট বাকি আছে কিনা তা পরীক্ষা করে দেখুন। যদি না হয়, আউটপুট ":~("; যদি আমরা এটি করি, নির্ধারণ করুন কোনটি বাছাই করে এবং কেবল প্রথমটি রেখে use আমরা টিপলগুলি বাছাই করে এটি করি(একটিগুলি(-),×)

উদাহরণস্বরূপ: ট্রিপলটিগুলি [[6,2,4],[6,4,2],[8,6,6]]বাছাই করা হবে [[8,6,6],[6,2,4],[6,4,2]], এর পরে কেবল [8,6,6]অবশিষ্ট থাকবে only

Dg_i               # If this completely filtered list is now empty:
    …:~(           #  Push string ":~("
ë                  # Else:
 Σ                 #  Sort the triplets by:
  ¦                #   Remove the first character
   DÆÄ             #   Get the absolute difference between the remaining two integers
   sP             #   And pair it with the product of the remaining two integers
                 #  After we're done sorting: only leave the first triplet

পদক্ষেপ 4: স্পেসগুলি সন্নিবেশ করানোর জন্য আমাদের কীভাবে স্ট্রিংটি বিভক্ত করা উচিত তার একটি তালিকা তৈরি করুন। এটি এভাবে করা হয়:

প্রদত্ত [একটি,,], এর সাথে একটি তালিকা তৈরি করুন:

  • প্রথম আইটেম হিসাবে: একটি-2×একটি+ +একটি-2
  • মাঝখানে হিসাবে -1 আইটেম: একটি-
  • শেষ আইটেম হিসাবে: একটি2

উদাহরণস্বরূপ: ট্রিপলেটের [7,3,5]ফলাফলের ফলাফল হবে [15,2,2,35]

©                  #  Store this triplet in variable `®` (without popping)
 ¤_i               #  If the last value is 0 (which means the string is a square without gap):
    н              #   Simply keep the first value of the triplet
   ë               #  Else:
    ¬U             #   Store the first value in variable `X` (without popping)
      ć            #   Extract the first value; pop and push remainder-list and head to the stack
       α           #   Get the absolute difference of this head with the other two values
        ¤          #   Push the last value (without popping the pair itself)
         ®Ås     #   And repeat it the middle element or `®` minus 1 amount of times
       s           #   Swap to get the difference pair again
        ;          #   Halve both values
         R`        #   Push them reversed to the stack
           X*      #   Multiple the first value by `X`
             +     #   And then add it to the second value
              š    #   Prepend this in front of the repeated list
               Xnª #   And also append the square of `X`

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

স্ট্রিং "Alongtesttoseeifitworksasintended."তালিকা অনুযায়ী বিভক্ত [15,2,2,35]স্থাপিত হবে: ["Alongtesttoseei","fi","tw","orksasintended."]। এরপরে এটি যোগ হয়=5স্পেস পরিমাণ "Alongtesttoseei fi tw orksasintended."। এবং তারপরে আকারের অংশগুলিতে বিভক্তএকটি=7এই: ["Alongte","sttosee","i f","i t","w o","rksasin","tended."]। এরপরে আউটপুটে নতুন লাইনে যোগ দেওয়া হয়েছে।

    £              #   Then split the string into parts based on this list
     ®θð×          #   Push a string consisting of the last value of `®` amount of spaces
         ý         #   Join the list of substrings by this
          X        #   Push variable `X`
                 #  After the if-else: split the string into parts of that size
     »             #  And then join these by newlines
                   # (after which the top of the stack is output implicitly as result)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.