কোড গল্ফ বিঙ্গো!


14

আপনাকে একটি বিঙ্গো বোর্ড এবং কলগুলির একটি তালিকা দেওয়া হবে । আপনি অবশ্যই বিঙ্গো প্রিন্ট করবেন! যত তাড়াতাড়ি আপনার বোর্ড গেম জিতবে।

বিঙ্গো বোর্ডগুলি এর মতো দেখতে:

এখানে চিত্র বর্ণনা লিখুন

সেগুলি এইভাবে নির্দিষ্ট করা হবে:

14 29 38 52 74
4 18 33 46 62
7 16 * 60 71
9 27 44 51 67
12 23 35 47 73

তাত্ক্ষণিকভাবে বোর্ড অনুসরণ করে কল হবে, এর মতো:

B7
I29
G60
G51
O71
I23
I16
N38

আপনাকে কলগুলি অবশ্যই স্ট্যান্ডার্ড আউটপুট এ আউট করতে হবে যতক্ষণ না কলটি আপনাকে বিজয়ী করে তোলে (একটি সারি, কলাম, বা 5-দীর্ঘ তির্যক সমস্ত ভরাট পান), তারপরে মুদ্রণ করুন BINGO!

উপরের উদাহরণের জন্য, মুদ্রণ করুন:

B7
I29
G60
G51
O71
I23
I16
BINGO!

বিধি

স্ট্যান্ডার্ড কোড-গল্ফ নিয়ম, সংক্ষিপ্ততম কোড জয়।

বিস্তারিত

আপনাকে একটি বিঙ্গোর গ্যারান্টি দেওয়ার জন্য সর্বদা পর্যাপ্ত কল থাকবে। বোর্ডে কোনও সদৃশ নম্বর থাকবে না এবং কোনও নকল কলও থাকবে না। বোর্ডগুলিতে সর্বদা সঠিকভাবে মিলে যাওয়া সংখ্যা এবং অক্ষর থাকবে ( Bকলামটিতে কেবল 1-15 রয়েছে, Iকলামটি কেবলমাত্র 16-30 রয়েছে এবং তাই) কল করবে। এক এবং একমাত্র মুক্ত স্থান সর্বদা মাঝখানে থাকবে, *সংখ্যার পরিবর্তে চিহ্নিত থাকবে । বিজয়ী কল অনুমোদিত হওয়ার পরে স্ট্যান্ডার্ড ইনপুট থেকে কল গ্রহণ এবং বাতিল করা হবে, তবে প্রয়োজন নেই।

আপনার নিজের পরীক্ষার কেস তৈরি করুন!

উত্তর:


3

পার্ল, 122 120 চর

$b=join'. .
',map~~<>,0..4;while(<>){/(\d+)/;$b=~s/\b$1\b/*/;print;
$b=~/(\*\s(\S+\s){$_}){4}\*/&&die"BINGO!
"for 0..7}

$bদুটি অতিরিক্ত জঙ্কি কলাম দিয়ে কার্ডটি তৈরি করুন । কার্ডে কল করা নম্বরগুলি প্রতিস্থাপন করুন এবং কল করা নম্বরটি *মুদ্রণ করুন। তারপরে *বোর্ডে 5 টি নিয়মিত স্পেস থাকে তখন সর্বশেষ নিয়মিত অভিব্যক্তিটি সত্য হিসাবে মূল্যায়ন করবে ।


4

সি # - 536

(ঠিক আছে, এটি সম্ভবত এটির পক্ষে সবচেয়ে উপযুক্ত ভাষা নয় তবে যাইহোক ...)

using System;using System.Collections.Generic;using System.Linq;class C{static void Main(){var s=Enumerable.Range(1,12).Select(_=>new HashSet<string>()).ToList();var b=Enumerable.Range(1,5).Select(_=>Console.ReadLine().Split(' ')).ToList();int i;for(i=0;i<5;++i){for(int j=0;j<5;++j){s[i].Add(b[i][j]);s[i+5].Add(b[j][i]);}s[10].Add(b[i][i]);s[11].Add(b[4-i][i]);}while(i>0){var l=Console.ReadLine();Console.WriteLine(l);l=l.Substring(1);foreach(var x in s){x.Remove("*");x.Remove(l);if(x.Count==0){Console.WriteLine("BINGO!");i=0;}}}}}

ফর্ম্যাট এবং মন্তব্য:

using System;
using System.Collections.Generic;
using System.Linq;

class C
{
    static void Main()
    {
        // all possible winnable five-item sets – any one of them need to be emptied to win
        var s = Enumerable.Range(1, 12).Select(_ => new HashSet<string>()).ToList();
        // read the board from input to a list of arrays of numbers
        var b = Enumerable.Range(1, 5).Select(_ => Console.ReadLine().Split(' ')).ToList();
        int i;
        // split the board into the winnable sets
        for (i = 0; i < 5; ++i)
        {
            for (int j = 0; j < 5; ++j)
            {
                // sets 0–4 represent rows
                s[i].Add(b[i][j]);
                // sets 5–9 represent columns
                s[i + 5].Add(b[j][i]);
            }
            // set 10 represent one diagonal
            s[10].Add(b[i][i]);
            // set 11 represent the other diagonal
            s[11].Add(b[4 - i][i]);
        }
        while (i > 0)
        {
            // read and echo another input
            var l = Console.ReadLine();
            Console.WriteLine(l);
            // ignore the initial letter – we are guaranteed it is correct, anyway
            l = l.Substring(1);
            // remove the number from all sets
            foreach (var x in s)
            {
                x.Remove(l);
                // also remove the center * (inside the loop just to shave off a few characters)
                x.Remove("*");
                // if any set became empty, we won!
                if (x.Count == 0)
                {
                    Console.WriteLine("BINGO!");
                    // ensure the loop will stop (might not be necessary per the rules, but anyway)
                    i = 0;
                }
            }
        }
    }
}

4

রুবি 1.9 (194, 130)

খালি কলামগুলি চেক করার এটি সম্ভবত সবচেয়ে বুদ্ধিমান উপায় নয়, তবে আমি প্রথমে চেষ্টা করার চেষ্টা করেছি! বিশেষত, #transposeএটির জন্য অনেক বেশি খরচ হয়।

বোর্ড ঘোষণার সময় বোর্ড এবং সংখ্যাগুলির মধ্যে একটি ফাঁকা লাইন বা নির্দিষ্ট প্রস্থ ক্ষেত্রগুলি অনেকগুলি অক্ষর বাঁচাতে পারে। আমি ঠিক 5 টি লাইন পড়ার খুব সুন্দর উপায়টি ভাবতে পারি নি।

b=(R=0..4).map{gets}.join.scan /\d+|\*/
loop{gets
puts$_
~/\d+/
(e=b.index$&)&&b[e]=?*
R.map{|y|$><<:BINGO!&&exit if R.map{|x|[b[5*x+y],b[5*y+x],b[y<1?x*6:4*x+4]]}.transpose.any?{|a|a==[?*]*5}}}

সম্পাদনা করুন: ভিড়ের পার্ল উত্তর থেকে নিয়মিত প্রকাশের কৌশলটি ব্যবহার করে ১৩০ টি চরিত্রের সমাধান:

b=(0..4).map{gets}*'~ ~ '
loop{gets
puts$_
~/\d+/
b[/\b#$&\b/]=?*
7.times{|i|$><<:BINGO!&&exit if b=~/(\*\s(\S+\s){#{i}}){4}\*/m}}

4

ওপেন সোর্স সফ্টওয়্যার হিসাবে রেবলের আসন্ন মুক্তির দীর্ঘ, দীর্ঘ, দীর্ঘ ওভারডিউড ঘোষণা দিয়ে আমি এই বিঙ্গো সমস্যা সমাধানের জন্য আমার পোষ্য উপভাষায় ফিরে এসেছি । আমি শীঘ্রই রেবমুকে তার নিজস্ব, টেনেসি জিপিএল প্যাকেজ হিসাবে বিতরণ করতে সক্ষম হতে পারি। :)


রেবুমু 88 টি অক্ষর

কমপ্যাক্ট স্বরলিপি:

rtZ5[GisGpcRaZisGaAPgPCaSB6zAPv'*]l5[AgL5[apGfAsk+A5]]hd+Gu[raGin-NTrM'*fisGv5]p"BINGO!"

উপভাষাটি এমন একটি কৌশল ব্যবহার করে যা আমি মুশিং বলি যা রেবমু পৃষ্ঠাতে ব্যাখ্যা করা হয়েছে । এটি "বৈধ" অর্থে যে এটি পার্সারকে প্রতারণা করে না; এটি বৈধ রেবোল ... এবং সাধারণভাবে সাধারণ কোডের সাথে অহরহ মিশ্রিত করা যেতে পারে (আহেম) "দীর্ঘ-রূপ" রেবমু ... যা বিটিডাব্লু হবে ১৪১ টি অক্ষর:

[rt z 5 [g: is g pc r a z is g a ap g pc a sb 6 z ap v '*] l 5 [a: g l 5 [ap g f a sk+ a 5]] hd+ g u [ra g in- nt r m '* fis g v 5] p "BINGO!"]

(প্রদত্ত যে আমি দাবি করি যে সংক্ষেপণটি এমন একটি কৌশল যা স্বয়ংক্রিয়তা বা সংকলনের সাহায্য ছাড়াই করতে পারে, আমি আসলে কোডটি ছাঁটাই আকারে তৈরি করি It's এটি কঠিন নয়))

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

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

 [g: is g pc r a z is g a ap g pc a sb 6 z ap v '*]

... বরং সহজ:

 [
     ; assign the series pointer "g" to the result of inserting 
     ; the z'th element picked out of reading in some series
     ; from input that was stored in "a"...this pokes an element
     ; for the forward diagonal near the front of g
     g: insert g (pick (readin-mu a) z)

     ; insert the read-in series "a" from above into "g" as well,
     ; but *after* the forward diagonal elements we've added...
     insert g a

     ; for the reverse diagonal, subtract z from 6 and pick that
     ; (one-based) element out of the input that was stored in "a"
     ; so an element for the reverse diagonal is at the tail
     append g (pick a (subtract 6 z))

     ; so long as we are counting to 5 anyway, go ahead and add an
     ; asterisk to a series we will use called "v" to search for
     ; a fulfilled solution later
     append v '*
 ]

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

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

rtZ5[GisGpcRaZisGaAPgPCaSB6zAPv'*]
temp-series: g
sum: 0
loop 5 * 5 [
    square: first temp-series
    if integer! == type? square [
        sum: sum + square
    ]
    temp-series: next temp-series
]
print ["Hey grandma, the board sum is" sum]
l5[AgL5[apGfAsk+A5]]hd+Gu[raGin-NTrM'*fisGv5]p"BINGO!"

এটিও বৈধ রেব্মু এবং এটি আপনার সাথে বিঙ্গো খেলার আগে আপনাকে একটি দুর্দান্ত বোর্ডের যোগফল দেবে। প্রদত্ত উদাহরণে, এটি বলে Hey grandma, the board sum is 912। যা সম্ভবত সঠিক। কিন্তু আপনি ব্যপারটি ধরতে পেরেছেন. :)


2

গণিত 250

প্রকাশ: আমি ধরে নিয়েছিলাম যে ইনপুটটি সেই তালিকাগুলিতে দেওয়া হয়েছিল যা গণিতের জন্য ব্যবহার করা অনেক বেশি প্রাকৃতিক। সুতরাং, bবোর্ডের cপ্রতিনিধিত্ব করে এবং কলগুলি উপস্থাপন করে,

b//Grid
c//Column

ইনপুট

যদি ইনপুটটি স্ট্রিংগুলিতে থাকে, কোডটি প্রায় 30 টি অক্ষর দ্বারা বৃদ্ধি পেতে পারে। (আমি পরে সেই প্রকরণটি অন্তর্ভুক্ত করব))

কোড

y = ReplacePart[ConstantArray[0, {5, 5}], {3, 3} -> 1]; d = Diagonal;
t := Tr[BitAnd @@@ Join[y, Transpose@y, {d@y}, {d[Reverse /@ y]}]] > 0;
r@i_ :=(y = ReplacePart[y, Position[x, ToExpression@StringDrop[i, 1]][[1]] -> 1]; 
Print@If[t, Column[{i, "BINGO!"}], i])
n = 1; While[! t, r@c[[n]]; n++]

B7

I29

G60

G51

O71

I23

I16

লোটোখেলা!


2

পাইথন 249

R=raw_input;F=B=[[[x,0][x=='*']for x in row]for row in[R().split()for i in'11111']];A=any
while all([all(map(A,B)),all(map(A,zip(*B))),A(F[::6]),A(F[4:24:4])]):c=R();print c;C=c[1:];B=[[[x,0][x==C]for x in row]for row in B];F=sum(B,[])
print'BINGO!'

ব্যবহার:

$ ./bingo.py < bingo.txt
B7
I29
G60
G51
O71
I23
I16
BINGO!

আপনি rowএক-চর নাম দ্বারা প্রতিস্থাপন করতে পারে । স্বীকৃত: চেষ্টা করুন i in'*'*5]এবং এর [x=='*']সাথে প্রতিস্থাপন করুন[x==i]
মনিকা

2

এপিএল (82)

{(D≡(⍵∨⌽⍵)∧D←=/¨⍳⍴⍵)∨∨/(∧⌿⍵)∨∧/⍵:'BINGO!'⋄∇⍵∨B=⍎1↓⎕←⍞}0=B←↑{⍎(K,K)[⍞⍳⍨K←11↑⎕D]}¨⍳5
  • {... }¨⍳5: 5 বার করুন:
  • ⍎(K,K)[⍞⍳⍨K←11↑⎕D]: একটি লাইন পড়ুন ( ) এবং সমস্ত অক্ষর ম্যাপ করুন যা অঙ্ক বা স্থান নয় 0, তবে লাইনটি মূল্যায়ন করুন।
  • B←↑: এটিকে ম্যাট্রিক্সে পরিণত করুন (ইনপুটটি সঠিক হলে 5x5), এবং বিতে সঞ্চয় করুন
  • {... }0=B: প্রারম্ভিক বোর্ডের খালি জায়গাতে (1) এবং অন্যান্য স্পেসে 0 রয়েছে।
  • (D≡(⍵∨⌽⍵)∧D←=/¨⍳⍴⍵)∨∨/(∧⌿⍵)∨∧/⍵: যদি একটি লাইন, একটি কলাম বা একটি তির্যক পূর্ণ হয়:
  • 'BINGO!': তারপরে আউটপুট BINGO
  • ∇⍵∨B=⍎1↓⎕←⍞: অন্যথায়, একটি লাইন ( ) পড়ুন, এটি প্রতিধ্বনি করুন ( ⎕←), প্রথম অক্ষরটি ড্রপ করুন ( 1↓), একটি সংখ্যা পাওয়ার জন্য এটি মূল্যায়ন করুন ( B=) বোর্ডে এটি কোথায় রয়েছে তা দেখুন ( ) এটি চিহ্নিত করুন ( ⍵∨), এবং আবার চেষ্টা করুন ( ) ।

0

কে, 114

বোর্ড bএবং কল দেওয়া হয়েছেc

b{-1@y;a:(5*!5)_@[,/x;&(,/x)~\:1_y;:;"*"];$[max{max@min'"*"=,/'x}@/:(a;a ./:/:+:'(r;)'(r;|:r:!5));'"BINGO!";];a}/c

k)b
"14" "29" "38" "52" "74"
,"4" "18" "33" "46" "62"
,"7" "16" ,"*" "60" "71"
,"9" "27" "44" "51" "67"
"12" "23" "35" "47" "73"
k)c
"B7"
"I29"
"G60"
"G51"
"O71"
"I23"
"I16"
"N38"
k)b{-1@y;a:(5*!5)_@[,/x;&(,/x)~\:1_y;:;"*"];$[max{max@min'"*"=,/'x}@/:(a;a ./:/:+:'(r;)'(r;|:r:!5));'"BINGO!";];a}/c
B7
I29
G60
G51
O71
I23
I16
'BINGO
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.