একটি বেসবল পিচ স্ট্রিং উত্পন্ন করুন


11

লক্ষ্য

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইতিবাচক পূর্ণসংখ্যার nভূমিকা নেয় এবং এলোমেলোভাবে দৈর্ঘ্যের পিচগুলির আইনী সিরিজ (এর পরে পিচ স্ট্রিং বলে) উত্পন্ন করে n

ইনপুট

একটি শূন্য, ধনাত্মক পূর্ণসংখ্য n<= 100

আউটপুট

একটি এলোমেলো স্ট্রিং, বা অক্ষরগুলির তালিকা প্রদান করুন, যা দৈর্ঘ্যের একটি সম্ভাব্য, বৈধ পিচ স্ট্রিংকে উপস্থাপন করে n। ব্যবহৃত অক্ষরগুলি হ'ল:

  • বি - বল আপনি যদি এর মধ্যে 4 টি জমা করেন তবে ব্যাটারটি হাঁটা এবং ব্যাটিং শেষ হয়।
  • এস - ধর্মঘট। আপনি যদি এর মধ্যে 3 টি জমা করেন তবে ব্যাটারটি আউট হয়ে ব্যাটিং শেষ করে।
  • এফ - ফাউল স্ট্রাইক গণনাও বাড়িয়ে দেবে তবে বাটারটি বের করতে পারবে না। অর্থাৎ, আপনার কাছে কোনও বৈধ স্ট্রিংয়ের শেষ পিচ হতে পারে না oul দুটি স্ট্রাইক / ফাউলের ​​অতীতে যে কোনও ফাউল স্ট্রাইক গণনা বাড়িয়ে তুলবে না (ব্যাটারের ইতিমধ্যে সেই পর্যায়ে 2 স্ট্রাইক রয়েছে এবং তৃতীয় 3 জন তাকে আউট করবে)।
  • এইচ - হিট ব্যাটার খেলতে একটি বল আঘাত করেছে এবং ব্যাটিং শেষ।

(এটি সামান্য সরল করা হয়েছে তবে আপনি এটি নিয়ে চিন্তা করবেন না)

বৈধ পিচ স্ট্রিংগুলি হ'ল স্ট্রাইক-আউট, হাঁটাচলা বা হিটতে শেষ in

অর্থাৎ, একটি অবৈধ পিচ স্ট্রিং রয়েছে

  • চতুর্থ বল, তৃতীয় স্ট্রাইক বা হিটের পরে অতিরিক্ত পিচগুলি
  • চতুর্থ বল, তৃতীয় স্ট্রাইক বা হিট তৈরির আগে শেষ করা।

বিধি

  • আপনার প্রোগ্রাম অবশ্যই প্রদত্ত ইনপুট জন্য সমস্ত সম্ভাব্য ফলাফল উত্পাদন করতে সক্ষম হতে হবে।
  • আপনার প্রোগ্রামটি সমানভাবে এলোমেলো হতে হবে না তবে তবুও অবশ্যই পূর্ববর্তী নিয়মটি মেনে চলতে হবে।
  • এটি

উদাহরণ

Input => Possible Outputs
1 => [H] #Can only end with a hit
2 => [S,H], [B,H], [F,H] #Can only end with a hit
3 => [S,S,S], [F,F,S], [B,B,H], ... #Can now strike-out, otherwise must end with a hit
4 => [B,B,B,B], [S,B,S,S], [B,F,S,S], [B,B,B,H], ... #Can now be walked, struck-out, or get a hit
6 => [S,B,S,B,B,H], [F,F,F,F,F,S], ... #Can now have a full-count (3 balls, 2 strikes) before finishing 

Input => Invalid Outputs
1 => [S], [B]    #Not enough for a strike-out/walk
2 => [S,S]       #Not enough for a strike-out/walk
2 => [H,H]       #Batter has already scored a hit
3 => [S,S,F]     #Fouls will not cause a strike-out
4 => [S,S,S,H]   #Batter has already struck out
5 => [B,B,B,B,B] #Batter has already walked

1
সুতরাং আমরা 1 থেকে অনন্ত এফ এর যে কোনও জায়গায় উত্পাদন করতে সক্ষম হতে হবে?
কুইনটেক

স্ট্রিং সর্বাধিক 100 অক্ষর দীর্ঘ হবে। ফাউলগুলি এমন দীর্ঘ পিচিং স্ট্রিংকে মঞ্জুরি দেয়, উদাহরণস্বরূপ 99 Fs এবং Sএকটি হরতাল আউট
ভেস্কাহ

ওহ, এটি পেয়েছেন, মিস করেছেন
কুইনটেক

@ কুইন্টেক এটিকে সামান্য ক্ষেত্রে আরও স্পষ্ট করে
বলেছিলেন

উত্তর:


4

পাইথন 2 , 128 বাইট

from random import*
def g(n):
 x=i=S=0;r=''
 while(S>2)+x<3>=i-S:x=randint(0,3);r+='BFSH'[x];S+=x>0;i+=1
 return(i==n)*r or g(n)

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

বাটা শেষ না হওয়া পর্যন্ত এলোমেলোভাবে পিচ স্ট্রিং উত্পন্ন করুন, ডান দৈর্ঘ্য দেখা দিলে এটিকে আউটপুট করুন এবং অন্যথায় স্ক্র্যাচ থেকে আবার চেষ্টা করুন।


পাইথন 2 , 136 বাইট

from random import*
def g(n):
 B=H=F=S=0;r=''
 while(F+S<3or'S'>x)>B/4+H:x=choice('BHFS');r+=x;exec x+"+=1"
 return(len(r)==n)*r or g(n)

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


এর কেভিনের বন্দরটি বুঝতে পেরেছিলাম যে এটি উচ্চ সংখ্যার জন্য বিরতিতে চলেছে। শেষে n=8একটি চেইন তৈরি করতে পারেF
ভেস্কাহ

2
পছন্দ করুন আমি সম্ভবত স্ট্রাইক কাউন্ট (গুনে ফাউলগুলি গণনা করা) 6 এর উপরে গিয়েছিলাম এবং এটি ঠিক S/3করার জন্য পরিবর্তন (S>2)করেছিলাম না।
xnor

4

05AB1E ,  44  50 44 বাইট

ক্রস আউট &nbsp;44&nbsp;করা এখন আর 44) নেই

[õ0U.µ["BFSH"3ÝΩ©è«®ĀX+U¼X2›®+3@¾X-3›~#}I¾Q#

@ এক্সনোরের পাইথন 2 উত্তর বন্দর , সুতরাং আপনি যদি উত্তরটি পছন্দ করেন তবে তাকে অবশ্যই উন্নত করতে ভুলবেন না!
বাগ- ফিক্সের কারণে +6 বাইট এবং তারপরে -6 বাইট পরে আবার @xnor কে ধন্যবাদ আমার অস্থায়ী কাজের আশপাশের তুলনায় আরও দক্ষ পোর্ট , যেমনটি আমি প্রত্যাশা করছিলাম। ;)

এটি অনলাইনে চেষ্টা করুন বা আরও কিছু এলোমেলো আউটপুট যাচাই করুন

ব্যাখ্যা:

[                # Start an infinite loop:
 õ               #  (Re)set the result-string to an empty string ""
 0U              #  (Re)set variable `X` to 0
               #  Reset the counter_variable to 0
   [             #  Start an inner infinite loop:
    "BFSH"       #   Push string "BFSH"
          3ÝΩ    #   Push a random integer in the range [0,3]
             ©   #   Store this random integer in variable `r` (without popping)
              è  #   Index it into the string "BFSH"
               « #   Append it to the result-string
    ®Ā           #   If `r` is NOT 0:
      X+U        #    Increase `X` by 1
    ¼            #   Increase the counter_variable by 1
    X2›®+        #   Calculate `X`>2 (1 if truthy; 0 if falsey) + `r`
         3@      #   Check if this is larger than or equal to 3
    ¾X-          #   Calculate counter_variable - `X`
       3        #   Check if this is larger than 3
    ~            #   If either of the two checks above is truhy:
     #           #    Stop the inner infinite loop
   }             #  After the inner infinite loop:
    I¾Q          #  If the input and counter_variable are equal:
       #         #   Stop the outer infinite loop
                 # (and output the result-string at the top of the stack implicitly)

1
@ ভেস্কাহ আমি আপাতত একটি সরাসরি-ফরোয়ার্ড ফিক্স করেছি done আমার অনুভূতি আছে যে এক্সএন একটি সংক্ষিপ্ত স্থির করতে সক্ষম, তাই আমি সম্ভবত পরে কিছু বাইট সংরক্ষণ করার জন্য তার ফিক্সটি পোর্ট করব। :)
কেভিন ক্রুইজসেন

1
আপনি এটা ঠিক আমি পরিবর্তন করে করেনি পারেন X/3করতে X>2
xnor

@ এক্সনোর ধন্যবাদ, আবার ৪৪ বাইটে ফিরে আসুন। আমি জানতাম আপনি আরও কিছু ছোট পাবেন। ; পি
কেভিন ক্রুইজসেন

3

আর , 148 বাইট

function(n){`~`=paste0
`*`=sample
o=""
while(nchar(o)<n-1){a=c("B"[T<4],"F","S"[F<2])*1
F=F+(a>"E")
T=T+(a<"F")
o=o~a}
o~c("B"[T>3],"H","S"[F>1])*1}

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

ফলাফলটি সম্ভাব্য পিচ সিকোয়েন্স কিনা তা নিশ্চিত করতে স্যাম্পলিং ডেটাসেটগুলিতে শর্তসাপেক্ষ অন্তর্ভুক্তি ব্যবহার করে স্ট্রিং উত্পন্ন করে।

সম্ভবত প্রত্যাখ্যানের নমুনা করা (যেমন এক্সনরের অজগর উত্তরটি দেয় ) ছোট হয়।

function(n){`~`=paste0		# alias
`*`=sample			# alias
o=""				# empty string for output
while(nchar(o)<n-1){		# do n-1 times:
a=c("B"[T<4],"F","S"[F<2])*1	# sample 1 from the string "BFS", conditionally including B or S if the ball/strike count is 3/2	
F=F+(a>"E")			# increment F (strike count) if sampled character is F or S
T=T+(a<"F")			# increment T (ball count) if sampled character is B
o=o~a}				# append a to output

o~c("B"[T>3],"H","S"[F>1])*1}	# append the sampled "BHS", conditionally including B or S if the ball/strike count is 3/2.

এলোমেলো "এফ এবং এস" রেফারেন্স যা প্রতিবারই আমি এই চিঠিগুলির মধ্যে একটি টাইপ করি আমার মাথায় খেলতে থাকে ...



2

পাইথ, 53 বাইট

u+GO?H+W<K/G\B3+W<Jl@"SF"G2\F\S\B+WqK3+WgJ2\H\S\B_UQ[

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

এটি বেশ দীর্ঘ সময় অনুভব করে, আমি মনে করি অন্য পদ্ধতির প্রয়োজন হতে পারে।

u+GO?H+W<K/G\B3+W<Jl@"SF"G2\F\S\B+WqK3+WgJ2\H\S\B_UQ[   Implicit: Q=eval(input())
                                                 _UQ    Reversed range from Q-1 to 0
u                                                   [   Reduce the above, with initial value G=[], next value as H:
                    @"SF"G                                Keep elements of G which are in "SF"
                   l                                      Length of the above
                  J                                       Store in J - this is the number of strikes and fouls so far
          /G\B                                            Count number of "B"s in G
         K                                                Store in K - this is the number of balls so far
    ?H                                                    If H is not 0 (i.e. not final pitch):
                           \F                               Start with "F" (foul is always available in non-final pitch)
                W<J       2                                 If J<2...
               +             \S                             ... append "S"
       W<K    3                                             If K<3...
      +                        \B                           ... append "B"
                                                          Else:
                                           \H               Start with "H" (hit is always available in final pitch)
                                       WgJ2                 If J >= 2...
                                      +      \S             ... append "S"
                                  WqK3                      If K == 3...
                                 +             \B           ... append "B"
   O                                                      Choose one element at random from the available options
 +G                                                       Append the above to G
                                                        Implicit print the result of the reduce operation

2

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

f=(n,k=p=s=0,o='')=>p&&p>2|k-s>3|s>2&p<2?k-n?f(n):o:f(n,k+1,o+'FSBH'[p=Math.random()*4|0,s+=p<2,p])

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

মন্তব্য

f = (                       // f = recursive function taking:
  n,                        //   n = requested length
  k =                       //   k = pitch counter, initialized to 0
  p =                       //   p = last pitch
  s = 0,                    //   s = sum of strikes and fouls
  o = ''                    //   o = output string
) =>                        //
  p &&                      // if the last pitch was not a foul
  p > 2 |                   // AND the last pitch was a hit
  k - s > 3 |               //     OR we have 4 balls (or 3 balls + 1 hit)
  s > 2 & p < 2 ?           //     OR more than 2 strikes or fouls, ending with a strike:
    k - n ?                 //   if k is not equal to n:
      f(n)                  //     valid series but bad timing: try again from scratch
    :                       //   else:
      o                     //     success: return o
  :                         // else:
    f(                      //   do a recursive call:
      n,                    //     n is unchanged
      k + 1,                //     increment k
      o + 'FSBH'            //     append the pitch letter to o
        [ p = Math.random() //     pick a new random pitch
              * 4 | 0,      //     in [0..3]
          s += p < 2,       //     increment s if the pitch is a foul or a strike
          p ]               //     actual index in 'FSBH'
    )                       //   end of recursive call

2

কালি , 120 119 116 117 বাইট

=f(n)
->g(n,3,2)
=g(n,b,s)
~n--
{n:{~{b:b->g(n,b-1,s)}|{s:s->g(n,b,s-1)}|}f->g(n,b,s-(s>0))|{~{b:h|b}|{s:h|s}|h}}->->

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

সম্ভবত এখনও গল্ফযোগ্য।

অবহেলিত (হালকা পুনরায় ফর্ম্যাট করা)

=f(length) // Define a stitch f, with one parameter which specifies the length of the created string. This is the intended entry point.
->g(length,3,2) // Instantly divert to g, defined below, with some extra parameters

=g(length,balls_left,strikes_left) // Define a stitch g, with three parameters.
~ length--                         // Decrement remaining length
{
    - length: // If this is not to be the last character in the string
              // randomly do one of the following:
              // 1. If balls_left is nonzero, print a b and recurse
              // 2. If strikes_left is nonzero, print an s and recurse
              // 3. Do nothing
              // If we did not divert earlier, print an f and recurse.
        {~{balls_left:b->g(length,balls_left-1,strikes_left)}|{strikes_left:s->g(length,balls_left,strikes_left-1)}|}f->g(length,balls_left,strikes_left-(strikes_left>0)) 
    - else: // Randomly do one of the following
            // 1. If a ball would result in a walk, print a b, otherwise an h.
            // 2. If a strike would result in a strikeout, print an s, otherwise an h.
            // 3. Just print an h.
            // And finally, halt.
        {~{balls_left:h|b}|{strikes_left:h|s}|h}}->->

সম্পাদনাগুলি

  1. এর ->->পরিবর্তে শেষ করে একটি বাইট সংরক্ষণ করেছেন ->END
  2. nআগে হ্রাস করে তিনটি বাইট সংরক্ষণ করেছেন ।
  3. একটি বাগ ঠিক করা হয়েছে যা ভুল জায়গায় স্ট্রাইকআউট করেছে, এটি চিহ্নিত করার জন্য @ ওয়েভস্কাহকে ধন্যবাদ (+1 বাইট)

1
লিখন এবং ফলাফলের উপর ভিত্তি করে, দেখে মনে হচ্ছে এটি
স্ট্রোক

1
@ ওয়েভস্কাহ ভালভাবে চিহ্নিত, এখনই ঠিক করা উচিত, ধন্যবাদ
সারা জে


1

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

≔⁰η≔⁰ζF⊖N«≔‽⁺²‹ζ³ι¿›ι¹≦⊕ζ≦⊕η§SFB∨ι›η²»⊞υHF›η¹⊞υSF›ζ²⊞υB‽υ

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

≔⁰η≔⁰ζ

0 বল এবং 0 স্ট্রাইক দিয়ে শুরু করুন।

F⊖N«

শেষ ব্যতীত সমস্ত বিতরণে লুপ করুন।

≔‽⁺²‹ζ³ι

যদি তিনটি বলের চেয়ে কম হয়ে থাকে তবে 0 থেকে 2 পর্যন্ত একটি এলোমেলো সংখ্যা তৈরি করুন, অন্যথায় 0 এবং 1 এর মধ্যে কেবল মুদ্রাঙ্কণ করুন।

¿›ι¹≦⊕ζ≦⊕η

2 এর এলোমেলো মান একটি বল অন্যথায় এটি স্ট্রাইক গণনা বাড়িয়ে তোলে।

§SFB∨ι›η²»

স্ট্রাইক, ফাউল এবং বলের মান 0 থেকে 2 মানচিত্র বাদে যদি তিনটি স্ট্রাইক হয় তবে তার পরিবর্তে ফাউল মুদ্রণ করা হবে। (উপরে চারটি বল বাদ দেওয়া হয়েছে))

⊞υHF›η¹⊞υSF›ζ²⊞υB‽υ

কোনও স্ট্রাইক বা বল ব্যাটারটি বেরিয়ে আসবে এবং সেগুলি বা উপযুক্ত হিসাবে একটি হিট চয়ন করবে কিনা তা নির্ধারণ করুন।



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