স্নুকার স্কোরিং


16

আমি বিশ্ব স্নুকার চ্যাম্পিয়নশিপটি দেখছিলাম এবং এটি আমাকে অবাক করে দিয়েছিল ..

স্নুকার স্কোরিং

স্নুকারের খেলায় এমন কিছু নিয়ম রয়েছে যা আপনাকে অবশ্যই মেনে চলতে হবে:

  • টেবিলে যখন লাল বল থাকে তখন আপনার পালা চলাকালীন আপনাকে প্রথমে একটি লাল বল পাত্র করতে হবে
  • প্রতিটি লাল বল পোঁচানোর পরে, আপনাকে অবশ্যই একটি রঙিন (লাল নয়) বল পট করতে হবে (পটযুক্ত রঙিন বলটি টেবিলের উপরে প্রতিস্থাপন করা হবে)
  • সমস্ত লাল বল শেষ হয়ে যাওয়ার পরে (15 টি রয়েছে) প্রথমে আপনি একটি রঙিন বল বেছে নিতে পারেন এবং তারপরে আপনি সর্বনিম্ন স্কোরিং বল দিয়ে শুরু করতে পারেন এবং সর্বোচ্চ স্কোরিং বল পর্যন্ত এগিয়ে যান (এগুলি প্রতিস্থাপন করা হয় না)
  • কোনও মুহুর্তে পট না করা আপনার পালা শেষ করে।
  • প্রতি বল পয়েন্ট
    • লাল বল: 1 পয়েন্ট
    • হলুদ বল: 2 পয়েন্ট
    • সবুজ বল: 3 পয়েন্ট
    • ব্রাউন বল: 4 পয়েন্ট
    • নীল বল: 5 পয়েন্ট
    • গোলাপী বল: 6 পয়েন্ট
    • কালো বল: 7 পয়েন্ট

প্রশ্নটি

আপনি এটা এখনও সব বল দিয়ে একটা টেবিল দিয়ে শুরু - 15 লাল এবং এক অন্য রঙীন বল প্রতিটি - এবং তাদের প্রথম পালা পর স্নুকার একটি প্লেয়ারের স্কোর দেওয়া হয়, উপায় তারা এই অর্জন করেছি পারে যে কি স্কোর?

ইনপুটটি 1 থেকে 147 অবধি স্কোর হবে। আপনি এটি চয়ন করতে পারেন এটি একটি পূর্ণসংখ্যা বা স্ট্রিং কিনা। আউটপুট হ'ল প্রতিটি বলকে বার করে দেওয়ার সংখ্যার বিভিন্ন সংমিশ্রণ হওয়া উচিত।

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

Input: 4
Output: 
1r 1g
2r 1y
Input: 25
Output:
4r 3b
5r 2b 1br 1y
5r 2b 2g
...
9r 8y

নিয়মাবলী:

  • আপনি নতুন লাইন বা কোনও ধরণের বিভাজক (/ ,; | \ বা এমনকি আমি নিখোঁজ রয়েছেন) এর দ্বারা বিভক্ত সম্ভাবনাগুলি আউটপুট কিনা তা আপনি চয়ন করতে পারেন

এটি কোডগল্ফ, তাই সংক্ষিপ্ততম কোডটি জয়ী।


আমি অ্যারে তালিকা হিসাবে আউটপুট করতে পারি?
ফাঁস নুন

1
একটি অ্যারের আউটপুট সম্পর্কে: স্কোর অনুসারে অর্ডার করা বলের সংখ্যাটি দ্ব্যর্থহীন, তাই সম্ভবত আউটপুটও "5r 3b 2g"হতে পারে [5,0,2,0,3,0,0](যতক্ষণ না এটি ধারাবাহিক থাকে)?
জোনাথন অ্যালান

2
আপনি bবাদামী এবং blনীল জন্য ব্যবহার করুন ; তাই bkকালো জন্য? আমরা ব্যবহার গেল n, eএবং kএই তিনটি জন্য (শেষ চিঠি)? কীভাবে dlerunaসমস্ত আটটি রঙ সনাক্ত করতে হবে (প্রত্যেকটির তৃতীয় বর্ণ)?
জোনাথন অ্যালান

1
@ শেগি, আপনি যদি রঙের মতো ইঙ্গিত ব্যবহার করেন তবে ডেরুনা বা অন্য কোনও, না। যদি আপনি কেবল [5 0 0 4 1 0 0] এর মতো একটি অ্যারে ব্যবহার করেন তবে সেগুলি নিম্ন থেকে উচ্চে বাছাই করা উচিত।
মিচথান

1
কেবল উদাহরণস্বরূপ উদ্দেশ্যে, এখানে রনি "দ্য রকেট" ও 'সুলিভানের 147 বিরতির একটি (আশ্চর্যজনক) উদাহরণ
আর্নৌল্ড

উত্তর:


6

জেলি , 66 বাইট

L⁼30µÐfµ7Ḋ;\¤;€Ṣ€µ€;/
ċ1<⁴µÐfµ;Ç
7Ḋœċ⁴Ḷ¤;/L€;$€;@þ2B¤;/ḟ€0ÇS⁼¥Ðf⁸G

ভাল, এখন টিআইওর পক্ষে খুব ধীর!
... সুতরাং ঠিক 100 টি অফলাইনে উত্পাদিত করার 2626 টি উপায়ের একটি পেস্ট দেওয়া হয়েছে । ... এবং এখানে এমন একটি সংস্করণ রয়েছে যা কেবলমাত্র সিক্স রেড (সর্বাধিক বিরতি = 75) দিয়ে চলবে there

বল মানগুলির স্থান পৃথকীকরণ তালিকা হিসাবে প্রতিটি লাইনের সংখ্যার গ্রিড মুদ্রণ করে (উদাহরণস্বরূপ তিনটি লাল এবং দুটি সবুজ একটি লাইন পড়ার জন্য থাকবে 1 1 1 3 3)।


একটি মান-শ্রেণিবদ্ধ সংস্করণের জন্য যা বলের পুরো নাম সহ ১০২ বাইটে গণনাগুলির লাইনগুলি মুদ্রণ করে:

ŒrÑ€
Ṫ;ị“¡^³ṗ⁼¬wḌ⁼ø÷OẏK¦ẆP»Ḳ¤$K
L⁼30µÐfµ7Ḋ;\¤;€Ṣ€µ€;/
ċ1<⁴µÐfµ;Ç
7Ḋœċ⁴Ḷ¤;/L€;$€;@þ2B¤;/ḟ€0ÇS⁼¥Ðf⁸Ñ€K€Y

কিভাবে?

L⁼30µÐfµ7Ḋ;\¤;€Ṣ€µ€;/ - Link 1, create post-red-ball games: list of all pre-yellow-ball-games
    µÐf               - filter keep if:
L⁼30                  -   length equals 30 (games that get on to the yellow)
       µ         µ€   - for €ach sequence leading to the yellow:
            ¤         -   nilad followed by link(s) as a nilad:
        7Ḋ            -     7 dequeued  = [2,3,4,5,6,7]
          ;\          -     ;\ cumulative reduce with concatenation  = [[2],[2,3],[2,3,4],...]
             ;€       - concatenate the sequence with €ach of those
               Ṣ€     - sort each one
                   ;/ - reduce with concatenation (flatten by one)

ċ1<⁴µÐfµ;Ç - Link 2, filter bogus entries created and append post-yellow-ball games: list of pre-yellow-ball games (along with the bogus ones with 16 reds potted)
    µÐf    - filter keep if:
ċ1         -   count ones
   ⁴       -   literal 16
  <        -   less than?
       µ   - monadic chain separation
         Ç - call the last link (1) as a monad
        ;  - concatenate

7Ḋœċ⁴Ḷ¤;/L€;$€;@þ2B¤;/ḟ€0ÇS⁼¥Ðf⁸G - Main link: score
7Ḋ                                - 7 dequeued = [2,3,4,5,6,7]
      ¤                           - nilad followed by link(s) as a nilad:
     ⁴                            -   literal 16
    Ḷ                             -   lowered range = [0,1,2,...,15]
  œċ                              - combinations with replacement (every possible colour-ball selection that goes with the red pots)
       ;/                         - reduce with concatenation (flatten by one)
            $€                    - last two links as a monad for €ach:
         L€                       -   length of €ach (number of coloured balls potted)
           ;                      -   concatenate
                   ¤              - nilad followed by link(s) as a nilad:
                 2B               -   2 in binary = [1,0]
                þ                 - outer product with:
              ;@                  -   concatenation with reversed @rguments
                    ;/            - reduce with concatenation (flatten by one)
                      ḟ€0         - filter discard zeros from €ach
                         Ç        - call the last link (2) as a monad
                             Ðf   - filter keep:
                            ¥  ⁸  -   last two links as a dyad, with score on the right
                          S⁼      -     sum(ball values) is equal to score?
                                G - format as a grid
                                  - implicit print

আমি চেষ্টা করেছি এমন সমস্ত মামলার জন্য এটি ভাল কাজ করে। শুধুমাত্র কিছু ক্ষেত্রে শেষ কোডটি নেতৃস্থানীয় শূন্য দেয়।
মিচথান

আহ হ্যাঁ তাদের ফিল্টার করা উচিত ছিল ... স্থির।
জোনাথন অ্যালান

আমি আগেই বলেছি যে 53
টির

এটি গ্রিড উপায়ে অনেক ভাল। আগামী কয়েক দিনের মধ্যে যদি কোনও সংক্ষিপ্ত উত্তর না পাওয়া যায় তবে আমি আপনার উত্তরটি গ্রহণ করতে যাচ্ছি!
মিচথান

হুম। আমি 2636 শতাব্দীর বিরতি সংমিশ্রণ পাই। সুতরাং হয় আপনি বা আমি ভুল ...
আরনৌল্ড

4

জাভাস্ক্রিপ্ট (ES7), 188 180 178 বাইট

অ্যারেগুলির একটি অ্যারে ফেরত দেয় (লাল থেকে কালোতে বাছাই করা)।

n=>[...Array(17**6)].map((_,x)=>[2,3,4,5,6,p=7].map(v=>(k=a[++j]=x%17|0,x/=17,t+=k,p+=!!(y=y&&k),s-=k*v),y=s=n,a=[j=t=0])&&(s==15|s>=t)&s<16&s<t+2&t<9+p&&(a[0]=s,a)).filter(a=>a)

মন্তব্য

বিঃদ্রঃ : এই সংস্করণটিতে সর্বশেষ অপ্টিমাইজেশানটি অন্তর্ভুক্ত করা হয়নি p(এখন 7 থেকে আরম্ভ করা হয়েছে) যা যুক্তি বোঝা শক্ত করে তোলে।

n =>                              // given a target score n:
  [...Array(17**6)].map((_, x) => // for each x in [0 .. 17^6 - 1]:
    [2, 3, 4, 5, 6, 7].map(v =>   //   for each v in [2 .. 7] (yellow to black):
      ( k = a[++j] = x % 17 | 0,  //     k = a[j] = number of colored balls of value v
        x /= 17,                  //     update x to extract the next value
        t += k,                   //     update t = total number of colored balls
        p += !!(                  //     update p = number of consecutive colors that were
          y = y && k              //     potted at least once, using y = flag that is zeroed
        ),                        //     as soon as a color is not potted at all
        s -= k * v ),             //     subtract k * v from the current score s
      y = s = n,                  //     initialize y and s
      a = [j = t = p = 0]         //     initialize a, j (pointer in a), t and p
    )                             //   at this point, s is the alleged number of red balls
    &&                            //   this combination is valid if we have:
      (s == 15 | s >= t) &        //     - 15 red balls or more red balls than colored ones
      s < 16 &                    //     - no more than 15 red balls
      s < t + 2 &                 //     - at most one more red ball than colored ones
      t < 16 + p                  //     - no more than 15 + p colored balls
    &&                            //   if valid:
      (a[0] = s, a)               //     update the combination with red balls and return it
  ).filter(a => a)                // end of outer map(): filter out invalid entries

উদাহরণ আউটপুট

নীচে এন = 140 এর আউটপুট দেওয়া হবে:

//  R   Y  G  Br Bl P  Bk 
[ [ 15, 1, 1, 1, 1, 8, 9  ],
  [ 15, 1, 1, 1, 2, 6, 10 ],
  [ 15, 1, 1, 1, 3, 4, 11 ],
  [ 15, 1, 1, 2, 1, 5, 11 ],
  [ 15, 1, 1, 1, 4, 2, 12 ],
  [ 15, 1, 1, 2, 2, 3, 12 ],
  [ 15, 1, 2, 1, 1, 4, 12 ],
  [ 15, 1, 1, 2, 3, 1, 13 ],
  [ 15, 1, 1, 3, 1, 2, 13 ],
  [ 15, 1, 2, 1, 2, 2, 13 ],
  [ 15, 2, 1, 1, 1, 3, 13 ],
  [ 15, 1, 2, 2, 1, 1, 14 ],
  [ 15, 2, 1, 1, 2, 1, 14 ],
  [ 15, 1, 1, 1, 1, 1, 15 ] ]

ডেমো

এটি একটি স্নিপেটের জন্য খুব ধীর। পরিবর্তে আপনি এখানে এটি চেষ্টা করতে পারেন । (আপনি এক বা দুটি প্রতিক্রিয়াবিহীন স্ক্রিপ্ট সতর্কতা পেতে পারেন তবে এটি শেষ পর্যন্ত সম্পূর্ণ করা উচিত))

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