বগল একটি গেম স্কোর


21

পটভূমি

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

3 টি অক্ষর: 1 পয়েন্ট

4 অক্ষর: 1 পয়েন্ট

5 অক্ষর: 2 পয়েন্ট

6 অক্ষর: 3 পয়েন্ট

7 অক্ষর: 5 পয়েন্ট

8 বা ততোধিক অক্ষর: 11 পয়েন্ট

চ্যালেঞ্জ

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

বিধি

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

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

ইনপুট => আউটপুট

[["cat","dog","bird","elephant"],
 ["bird","dog","coyote"],
 ["dog","mouse"]]                 => [12,3,2]

[["abc","def","ghi"],
 ["ghi","def","abc"]]             => [0,0]

[["programming","puzzles"],
 ["code","golf"],
 []]                              => [16,2,0]

উত্তর:


6

হুস্ক , 21 20 19 বাইট

-2 বাইট জাগরবকে ধন্যবাদ

আইডিয়াটি A055228 থেকে নেওয়া হয়েছে

ṠṀöṁ(⌈√Π-3▼8L)fε`#Σ

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

ব্যাখ্যা (পুরানো সংস্করণ)

            ṠṀ-oṠ-uΣ   Remove duplicated words
                   Σ   Concatenate
                  u    Remove duplicates
               oṠ-     Remove those unique elements from the list (give list of elements that appear more than once)
            ṠṀ-        Remove those words from each list in the input
m                      For each list
 ṁ(                    Map then sum
          L)           Length
        ▼8             Min(8,x)
      -3               Minus 3
     Π                 Factorial
    √                  Square root
   ⌈                   Ceiling


সুন্দর, আমি ব্যাখ্যাটি সংরক্ষণ করার জন্য, পুনরায় সাজাবো না।
এইচ.পি.উইজ

fপরিবর্তে 19 বাইট ব্যবহার করা হচ্ছে-
জাগার্ব

ধন্যবাদ, আমি নিজে নিজে কাজ করার জন্য সেই পদ্ধতিটি খুব একটা পেতে পারি নি।
এইচ.পি.উইজ

গাহ! ভেবেছিলাম আমি আপনাকে বেঁধে রাখতে পেরেছি, খেয়াল করে নেই যে আপনি এখন 19 বছরের নিচে রয়েছেন।
শেগি

3

আর , 142 126 121 117 বাইট

function(L)sapply(lapply(L,setdiff,(l=unlist(L))[duplicated(l)]),function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x)-2)]))

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

লাগে Lস্ট্রিং ভেক্টর একটি তালিকা হিসাবে; মানগুলি প্রদান করে।

প্রথমে এটি unlistশব্দগুলি, সদৃশগুলি সন্ধান করে এবং তারপরে প্লেয়ারদের শব্দের তালিকা থেকে সরিয়ে দেয়। তারপরে এটি এই অনন্য শব্দের তালিকা গ্রহণ করে এবং প্রতিটিটির স্কোর গণনা করে pmin8 টির বেশি শব্দগুলি 11 হিসাবে স্কোর হয় তা নিশ্চিত করে ।


আপনি কেবল নীচের অভ্যন্তরীণ ফাংশনে ডুপ্লিকেটগুলি সরিয়ে ফেললে আপনি এটি 108 বাইটে সংক্ষিপ্ত করতে পারেন:function(L)sapply(L,function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x[!x%in%(l=unlist(L))[duplicated(l)]])-2)]))
প্ল্যানাপাস

3

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

a=>a.map(b=>b.reduce((s,v)=>s+(a.filter(b=>b.includes(v))[1]?0:+"11235"[v.length-3]||11),0))

রিক হিচককের উত্তরের সাথে কিছুটা মিল কিন্তু বেশিরভাগ স্বতন্ত্রভাবে তৈরি হয়েছে; আমি reduceপুনরাবৃত্ত শর্তাদি ( filter+ includes) জন্য পরীক্ষার জন্য যোগফলের আলাদা পদ্ধতি এবং বিভিন্ন পদ্ধতি ব্যবহার করেছি । যদিও [1]চেক করার পরিবর্তে আইটেমটি পরীক্ষা করার ধারণার জন্য তাকে ক্রেডিট করুন .length>1

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


আপনার s+=চারপাশের চারপাশের প্রথম বন্ধনী ব্যবহার করে এবং মুছে ফেলা একটি বাইট সংরক্ষণ করতে সক্ষম হওয়া উচিত । mapপরিবর্তে আরও 3 টি ব্যবহার করুন reduce: tio.run/##NY/…
শেগি

সাবাশ. আপনার ব্যবহার reduceএবং includesআপনার উত্তরটি আমার থেকে বেশ আলাদা করে তোলে।
রিক হিচকক

3

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

[১৩ টি (!) বাইট সংরক্ষণ করা, ধন্যবাদ আর্নল্ড, শেগি এবং জলি জোকারকে ধন্যবাদ]

a=>a.map(b=>b.map(c=>x+=(a+'').split`,`.filter(d=>d==c)[1]?0:+'11235'[c.length-3]||11,x=0)|x)

পরীক্ষার কেস:


2
আমার মনে হয় আপনি প্রতিস্থাপন করতে পারেন c[7]?11:c[6]?5:c[5]?3:c[4]?2:1সঙ্গে '00011234'[c.length]||11
আর্নৌল্ড

এটি শেষ পরীক্ষার ক্ষেত্রে [15,2,0]পরিবর্তে দেয় [16,2,0], তবে এটি সম্ভবত সহজেই স্থির হয়ে গেছে। রাতের খাবারের পরে আরও কিছু কাজ করবে, যদি না আপনি কোনও প্রতিভা উত্তর পোস্ট করেন (আপনি যেমন করেন তেমন)। ধন্যবাদ! :)
রিক হিচকক

1
হ্যাঁ হ্যাঁ, দুঃখিত, এটি হওয়া উচিত '00011235'
আর্নাউল্ড

1
আমি মনে করি আপনি @ আরনাউল্ডের পরামর্শ মতো আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন ।
শেগি

1
কমপক্ষে 3 টি অক্ষর আছে '11235'[c.length-3]||11, তাই না?
জলি জোকার


2

পাইথ , 26 বাইট

H.PWiz এর সূত্র ব্যবহার করে ।

m+Fm.E@.!a3hS,8lk2fq1/sQTd

সমস্ত পরীক্ষার কেস যাচাই করুন।

প্রাথমিক সংস্করণ, 33 বাইট :

m+Fm*h+++*6>lk7y>lk6>lk5glk3q1/sQ

সমস্ত পরীক্ষার কেস যাচাই করুন।

ব্যাখ্যা

মি + এফএম * এইচ +++ * 6> lk7y> lk6> lk5> glk3q1 / sQ সম্পূর্ণ প্রোগ্রাম।

এম ইনপুট উপর মানচিত্র।
   প্রতিটি সাবলিস্টের উপরে এম মানচিত্র।
                        > lk3 দৈর্ঘ্য 2 এর চেয়ে বেশি? যদি সত্য হয় 1 এবং মিথ্যা যদি 0 হয়।
      +> lk5 Plus "দৈর্ঘ্য 5 এর চেয়ে বেশি?"।
       + y> lk6 Plus "দৈর্ঘ্য 6 এর চেয়ে বেশি?", দ্বিগুণ।
        + * 6> lk7 প্লাস "দৈর্ঘ্য 7?" এর চেয়ে বেশি, 6 বার?
     h বৃদ্ধি।
                            Q1 / sQ সমতল মধ্যে উপাদান উপস্থিতি গণনা করুন
                                     ইনপুট করুন এবং এটি 1 টির সমান কিনা তা পরীক্ষা করুন 0 0 টি মিথ্যা হলে, 1 সত্য হলে।
    * গুণ
 + F প্রতিটি সাবলিস্ট যোগ করুন।


2

জাপট , 29 25 24 23 21 20 বাইট

Ëx@èøX ¥1©3nXÊm8)ʬc

চেষ্টা করে দেখুন


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U

Ëx@

অ্যারের উপর ম্যাপ করুন ( Ë) এবং xনিম্নলিখিত উপকরণের মাধ্যমে তার উপাদানগুলি পাস করার পরে প্রতিটি সাব-অ্যারে সংযোজন ( ) দ্বারা হ্রাস করুন , যেখানে Xবর্তমান শব্দটি রয়েছে।

èøX

COUNT ( è) উপাদান Uযেগুলিতে ( ø) X

¥1

এটি 1 এর সমান কিনা তা পরীক্ষা করে দেখুন।

©

লজিকাল এবং ( &&)।

3nXÊm8)

nসর্বনিম্ন ( m) 8 এবং দৈর্ঘ্যের ( Ê) থেকে 3 ( ) বিয়োগ করুন X

ʬc

যথাক্রমে কারখানা, বর্গমূল এবং বৃত্তাকার।


2

পাইথন 2 , 106 105 88 84 বাইট

-1 বাইট ধন্যবাদ জোনাথন ফ্রেচ
-1 (17) রেফুকে ধন্যবাদ বাইটস

lambda x:[sum(sum([1,0,1,1,2,6][:len(s)-2])*(`x`.count(`s`)<2)for s in l)for l in x]

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




@ রেফু ধন্যবাদ, আমি আরও গল্ফ আরও কিছু পরিবর্তন করেছি: 3
রড

@ রড নিস, আমি সাম্যের কৌশলটির দ্বিতীয় প্যারামিটারটি ভুলে গেছি।
রেফু


1

জাভা 8, 202 200 198 বাইট

a->{int q=a.length,r[]=new int[q],i=0,j,f;for(;i<q;i++)for(String s:a[i]){for(f=j=0;j<q;)f|=a[j].contains(s)&!a[i].equals(a[j++])?1:0;if(f<1)r[i]+=(j=s.length())<5?1:j<6?2:j<7?3:j<8?5:11;}return r;}

বা ( 198 বাইটও )

a->{int q=a.length,r[]=new int[q],i=0,j,f=1,e=0;for(;i<q;r[i++]+=f<1?e<5?1:e<6?2:e<7?3:e<8?5:11:0)for(String s:a[i])for(f=j=0;j<q;e=s.length())f|=a[j].contains(s)&!a[i].equals(a[j++])?1:0;return r;}

অবশ্যই গল্ফ করা যেতে পারে .. দুর্ভাগ্যক্রমে জাভাতে একাধিক উপস্থিত সমস্ত তালিকার সমস্ত আইটেম সরানোর কোনও বিল্ড-ইন বা সংক্ষিপ্ত পদ্ধতি নেই ..

ব্যাখ্যা:

এখানে চেষ্টা করুন।

a->{                       // Method with ArrayList<String>[] parameter & int[] return-type
  int q=a.length,          //  Length of the input-array
      r[]=new int[q],      //  Result integer-array the size of the input-array
      i=0,j,               //  Index integers
      f;                   //  Flag integer (used as boolean)
  for(;i<q;i++)            //  Loop (1) over the input array
    for(String s:a[i]){    //   Inner loop (2) over the Strings of the current List
      for(j=f=0;           //    Reset the flag `f` and index `j` both to 0
                j<q;)      //    Inner loop (3) over the input list again
        f|=a[j].contains(s)//     If the current list (3) contains the current String (2)
           &!a[i].equals(a[j++])?
                           //     and the current list (3) is not the current list (1)
            1              //      Bitwise-OR the flag with 1 (0->1; 1->1)
           :               //     Else:
            0;             //      Bitwise-OR the flag with 0 (0->0; 1->1)
                           //    End of inner loop (3) (implicit / single-line body)
      if(f<1)              //    If the flag is still 0 (so the current String is unique)
        r[i]+=             //     Increase the current item in the result integer-array by:
              (j=s.length())<5?
                           //      If the length is below 5:
               1           //       By 1
              :j<6?        //      Else-if the length is below 6:
               2           //       By 2
              :j<7?        //      Else-if the length is below 7:
               3           //       By 3
              :j<8?        //      Else-if the length is below 8:
               5           //       By 5
              :            //      Else (above 7):
               11;         //       By 11
    }                      //   End of inner loop (2)
                           //  End of loop (1) (implicit / single-line body)
  return r;                //  Return the resulting integer-array
}                          // End of method

আমি টেরিনারিগুলি পছন্দ করি এবং ScaLa সম্পর্কে আমি কেবল ঘৃণা করি তা হ'ল তারা এই ত্রৈমাসিক বাক্য গঠনটি সরিয়ে দিয়েছে।
ভি। কুর্তোয়া

@ ভি.কোর্তোইস হুম, কৌতূহলের বাইরে, স্কালায় এখন কীভাবে বার্ষিক বাক্য গঠন?
কেভিন ক্রুইজসেন

উঃ: যদি (বুল 1) এক্সপ্রেস এক্সপ্রেস এক্সপো 2
ভি।

1

আর, 117 বাইট

অন্য আর উত্তর থেকে সম্পূর্ণ ভিন্ন পদ্ধতির :

function(L)sapply(L,function(x)sum(c(0:3,5,11)[cut(nchar(x[x%in%names(which(table(unlist(L))<2))]),c(0,2,4:7,Inf))]))

পরীক্ষার কেস:

> f=function(L)sapply(L,function(x)sum(c(0:3,5,11)[cut(nchar(x[x%in%names(which(table(unlist(L))<2))]),c(0,2,4:7,Inf))]))
> L=list(c("cat","dog","bird","elephant"),c("bird","dog","coyote"),c("dog","mouse"))
> f(L)
[1] 12  3  2
> L=list(c("abc","def","ghi"),c("ghi","def","abc"))
> f(L)
[1] 0 0
> L=list(c("programming","puzzles"),c("code","golf"),c())
> f(L)
[1] 16  2  0

তালিকায় কেবল একবার নামগুলির নাম নেয়, প্রদত্ত কাট-অফ পয়েন্টের উপর ভিত্তি করে তাদের দৈর্ঘ্যকে একটি ফ্যাক্টারে রূপান্তর করে এবং তারপরে সংক্ষিপ্ত স্কোরগুলিতে অনুবাদ করে।


প্রতিলিপি পদক্ষেপে আমাদের দুটি পদ্ধতির সমন্বয় করে 114 বাইট
জিউসেপ


0

Clojure, 102 বাইট

#(for[p %](apply +(for[w p](if(next(filter #{w}(flatten %)))0(get{3 1 4 1 5 2 6 3 7 5}(count w)11)))))

nextnilকেবলমাত্র একটি শব্দ থাকলে ফেরত দেয় w:)


0

পিএইচপি , 226 বাইট

function x($a){foreach($a as$p){$q=call_user_func_array('array_diff',$a);array_push($a,array_shift($a));$x=0;array_map(function($b)use(&$x){$b=strlen($b);$x+=($b<5?1:($b==5?2:($b==6?3:($b==7?5:11))));},$q);$o[]=$x;}return $o;}

আমি মনে করি এটি এখনও কিছুটা ছাঁটাই করা যেতে পারে।

Ungolfed:

function x($a) {
    foreach ($a as $p) {
        $q = call_user_func_array('array_diff', $a);
        array_push($a, array_shift($a));
        $x = 0;
        array_map(function($b) use (&$x){
            $b = strlen($b);
            $x += ($b < 5 ? 1 : ($b == 5 ? 2 : ($b == 6 ? 3 : ($b == 7 ? 5 : 11))));
        }, $q);
        $o[] = $x;
    }
    return $o;
}

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


0

স্কালা , 242 বাইট

ফাংশন একটি প্যারামিটার হিসাবে, লাগে a, একটি Seq[Set[String]]এবং একটি ফেরৎ Array[Int]। আমি এটি পরিবর্তন করতে (4-চর ক্ষতি) হওয়ার জন্য একটি অ্যারে ব্যবহার করি।

var s=Seq("")
a.foreach(x=>x.foreach(y=>s:+=y))
var u:Array[Int]=Array()
var i= -1
a.foreach(t=>{i+=1
u:+=0
t.map(x=>{val l=x.length
if(s.count(_==x)<2){if(l>7)u(i)+=11
if(l==7)u(i)+=5
if(l==6)u(i)+=3
if(l==5)u(i)+=2
if(l>2&l<5)u(i)+=1}})})
u

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

অপ্টিমাইজযোগ্য হতে পারে, যেহেতু আমি এমনকি এটিতেও কাজ করি নি

if(l>7)u(i)+=11
if(l==7)u(i)+=5
if(l==6)u(i)+=3
if(l==5)u(i)+=2
if(l>2&l<5)u(i)+=1

অংশ। এই চ্যালেঞ্জের জন্য ধন্যবাদ!


0

সুইফট 4 , 164 বাইট *

{$0.map{Set($0).subtracting(Dictionary(grouping:$0.flatMap{$0},by:{$0}).flatMap{$1.count != 1 ?$0:nil}).map{[0,1,1,2,3,5,11][min(max($0.count-2,0),6)]}.reduce(0,+)}}

উপরের অভিব্যক্তিটি প্রযুক্তিগতভাবে সঠিক, খাঁটি সুইফ্ট। তবে অভিব্যক্তিটি এত জটিল যে টাইপ ইনফারেন্স সিস্টেমে ক্ষতিকারক ব্লোআপের কারণে, কিছু নির্বিচার সময়সীমা (যেমন 15 বা কিছু) পরে সংকলকটি ছাড়ার আগে প্রক্রিয়া করা যায় না।

বর্তমানের সংকলকটির সাথে এই অভিব্যক্তিটি সংকলনীয় করে তুলতে, এটি এটিকে ভেঙে ফেলা যেতে পারে:

{
let n = Dictionary(grouping:$0.flatMap{$0},by:{$0}).flatMap{$1.count != 1 ?$0:nil}
return $0.map{Set($0).subtracting(n).map{[0,1,1,2,3,5,11][min(max($0.count-2,0),6)]}.reduce(0,+)}
}

পরীক্ষার কেস:

let f: (_ input: [[String]]) -> [Int] = {
    let n = Dictionary(grouping:$0.flatMap{$0},by:{$0}).flatMap{$1.count != 1 ?$0:nil}
    return $0.map{Set($0).subtracting(n).map{[0,1,1,2,3,5,11][min(max($0.count-2,0),6)]}.reduce(0,+)}
}

let testcases: [(input: [[String]], expected: [Int])] = [
    (input: [
            ["cat","dog","bird","elephant"],
            ["bird","dog","coyote"],
            ["dog","mouse"]
        ],
        expected: [12,3,2]
    ),
    (input: [
            ["abc","def","ghi"],
            ["ghi","def","abc"]
        ],
        expected: [0,0]
    ),
    (input: [
            ["programming","puzzles"],
            ["code","golf"],
            []
        ],
        expected: [16,2,0]
    ),
]

for (caseNumber, testcase) in testcases.enumerated() {
    let actual = f(testcase.input)
    assert(actual == testcase.expected,
        "Testcase #\(caseNumber) \(testcase.input) failed. Got \(actual), but expected \(testcase.expected)!")
    print("Testcase #\(caseNumber) passed!")
}

ভেঙ্গে পড়া:

let verboseF: (_ input: [[String]]) -> [Int] = { playerHands in
    let allWords = playerHands.flatMap{$0}
    // demo data for first test case:
    // allWords: ["cat", "dog", "bird", "elephant", "bird", "dog", "coyote" "dog", "mouse"]

    let allWordsGroupedByThemselves = Dictionary(grouping: allWords, by: {$0})
    /* allWordsGroupedByThemselves:
    [
        "cat": ["cat"],
        "dog": ["dog", "dog", "dog"],
        "bird": ["bird", "bird"],
        "elephant": ["elephant"],
        "coyote": ["coyote"], "mouse": ["mouse"]
    ]*/

    let allWordsUsedMoreThanOnce = allWordsGroupedByThemselves.flatMap{$1.count != 1 ?$0:nil}
    // allWordsUsedMoreThanOnce: ["dog", "bird"]

    return playerHands.map{ hand in
        // demo data for first hand of first test case:
        // hand: ["cat","dog","bird","elephant"]

        let uniqueWordsInHand = Set(hand)
        // uniqueWordsInHand: ["cat","dog","bird","elephant"]

        let uniqueWordsInHandNotUsedByOthers = uniqueWordsInHand.subtracting(allWordsUsedMoreThanOnce)
        // uniqueWordsInHandNotUsedByOthers: ["cat", "elephant"]

        let wordLengths = uniqueWordsInHandNotUsedByOthers.map{$0.count}
        // wordLengths: [3, 8]

        let scores = wordLengths.map{ wordLength in
            return [0,1,1,2,3,5,11][min(max(wordLength-2, 0), 6)] //A look up table that maps word length to word score
        }
        //scores: [1, 11]

        let playerScore = scores.reduce(0,+)
        // playerScore: 12

        return playerScore
    }
}

0

এএসপি + পাইথন , 137 বাইট

u(P,W):-1{p(_,W)}1;p(P,W).s(P,S):-S=#sum{@v(W):u(P,W)};p(P,_).#script(python)
def v(w):return[1,1,2,3,5,11][min(len(w.string),8)-3]#end.

ডেটা ফর্ম্যাট হিসাবে আশা করে:

p(1,("cat";"dog";"bird";"elephant")).
p(2,("bird";"dog";"coyote")).
p(3,("dog";"mouse")).

পাইথন সমর্থন সহ ক্লিঙ্গো 5.2.1 প্রয়োজন ।

Ungolfed:

unique(P,W):- 1 { player(_,W) } 1 ; player(P,W).
score(P,S):- S = #sum{@value(W): unique(P,W)} ; player(P,_).
#script (python)
def value(word):
    return [1,1,2,3,5,11][min(len(word.string),8)-3]
#end.

পাইথন ফাংশনটি পাইথন উত্তর থেকে ভারী অনুপ্রাণিত হয় ।

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