বর্ধিত বাজি


19

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

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


একটি দৌড়, আপনি নিম্নলিখিত কৌশল ব্যবহার করে বাজি। আপনি যখনই কোনও বাজি হারাবেন, আপনি পরবর্তী রাউন্ডের জন্য বাটের মূল্য দ্বিগুণ করবেন। আপনি যখনই জিতবেন, পরবর্তী রাউন্ডের জন্য বাজিটি এক ডলার হবে। আপনি এক ডলার বাজি ধরে রাউন্ডটি শুরু করুন।

উদাহরণস্বরূপ, যদি আপনি 20 ডলার দিয়ে শুরু করেন এবং আপনি প্রথম রাউন্ডে বাজিটি জিতেন, পরের দুটি রাউন্ডে বাজিটি হারাবেন এবং চতুর্থ রাউন্ডে বাজিটি জিততে পারেন, আপনি 20 + 1-1-2 দিয়ে শেষ করবেন +4 = 22 ডলার

আপনি ফাংশনটি সম্পূর্ণ করবেন বলে আশা করা হচ্ছে g, যা দুটি আর্গুমেন্ট গ্রহণ করে:

  1. প্রথম যুক্তি হল একটি পূর্ণসংখ্যা aযা আমরা বাজি শুরু করার সময় আমাদের কাছে থাকা প্রাথমিক অর্থ money
  2. দ্বিতীয় যুক্তি একটি স্ট্রিং r। ফলাফলের আইথ চরিত্রটি 'ডাব্লু' (উইন) বা 'এল' (হারাতে) হবে, এটি আইথ রাউন্ডের ফলাফলকে বোঝায়।

আপনার রাউন্ডে সমস্ত রাউন্ড খেলার পরে আপনার যে পরিমাণ অর্থ হবে তা ফিরিয়ে দেওয়া উচিত।

যদি কোনও মুহুর্তে আপনার অ্যাকাউন্টে বাজেটের মান কভার করার জন্য পর্যাপ্ত টাকা না থাকে তবে আপনাকে অবশ্যই থামাতে হবে এবং আপনার সেই পরিমাণটি ফিরে আসতে হবে।

নমুনা রান

1st round - Loss: 15-1 = 14
2nd round - Loss: 14-2 = 12 (Bet doubles)
3rd round - Loss: 12-4 = 8
4th round - Win: 8 + 8 = 16
5th round - Loss:16-1 = 15 (Since the previous bet was a win, this bet has a value of 1 dollar)
6th round - Loss: 15-2 = 13
7th round - Loss: 13-4 = 9
8th round - Loss: 9-8 = 1

1এই ক্ষেত্রে ফাংশনটি ফিরে আসে

বিজয়ী অন্তর্নিহিত ফাংশন সংজ্ঞা অন্তর্ভুক্ত অন্তত অক্ষর দ্বারা নির্ধারিত হয়। ইচ্ছে করলে ভাষার সাহায্যে সহযোগিতা করুন। আমি জানি আমার উন্নতি হতে পারে!


এই সাইটের সমস্ত প্রশ্নের অবশ্যই একটি উদ্দেশ্যমূলক বিজয়ী মানদণ্ড থাকতে হবে । চ্যালেঞ্জের বিজয়ী কী নির্ধারণ করে তা আপনি উল্লেখ করেননি।
হাওয়ার্ড

1
তদুপরি, আপনি উল্লেখ করেছেন যে সমস্ত রাউন্ড খেলার পরে আপনার ফাংশনটি আপনার যে পরিমাণ অর্থ পাবে তা ফিরিয়ে দেওয়া উচিত। যদিও আপনি প্রত্যাশিত আউটপুট বিভাগে আরও বিস্তারিত তথ্য দেখান । ফাংশনের কাঙ্ক্ষিত আচরণ কোনটি?
হাওয়ার্ড

এছাড়াও, আপনি যে প্রতিটি ট্যাগ ব্যবহার করছেন তা যদি আপনি কেবল প্রশ্নের জন্য তৈরি করেন তবে কিছু ভুল is
জাস্টিন

1
"আমাদের উত্তরগুলি এখানে গভীরভাবে কোড গল্ফ হওয়া উচিত যাতে কেউ সেগুলি ব্যবহার করার বিষয়ে চিন্তা না করে!", আমি মনে করি আপনি একটি [কোড-গল্ফ] চেয়েছিলেন, তাই আমি এটিকে ট্যাগ করেছি। এছাড়াও, আপনি যা চেয়েছিলেন বলে মনে হয় তার চেয়ে আরও ভাল মেলে আমি "উদাহরণ আউটপুট "টিকে একটি" নমুনা রান "হিসাবে সমন্বিত করেছি।
জাস্টিন

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

উত্তর:


5

গল্ফস্ক্রিপ্ট, 33 টি অক্ষর

{
1\{2$2$<!{1&{+1}{:b-b.+}if.}*;}/;
}:g;

উদাহরণ ( অনলাইন ):

> 13 'LLLWLLLL'
6
> 4 'LWWLWLWWWL'
9
> 5 'LLLWWWLLWLWW'
2
> 2 'LW'
1

টীকাবিহীন কোড:

1\            # prepare stack a b r
{             # for each char in r
  2$2$<!{     #   if a>=b  
    1&        #     take last bit of character (i.e. 0 for L and 1 for W)
    {         #     if W
      +       #       a <- a+b
      1       #       b <- 1
    }{        #     else
      :b-     #       a <- a-b
      b.+     #       b <- 2*b
    }if       #     end if
    .         #     create dummy value
  }*          #   end if
  ;           #   drop (i.e. either the dummy or the character)
}/            # end for
;             # discard current bet value

5

পাইথন 2, 72 68 62 বাইট

def g(a,s,n=1):
 for c in s:
    if a>=n:a,n=((a+n,1),(a-n,2*n))[c<'W']
 return a

এটা এত মত কল করুন: g(15,'LLLWLLLL')

চরিত্রের উপর ভিত্তি করে আমাদের অর্থের মূল্য পরিবর্তন করে এটি কেবল স্ট্রিংয়ের মধ্য দিয়ে যায়।

এখানে একটি নমুনা প্রোগ্রাম যা এই ফাংশনটিতে পরীক্ষা চালায়:

import random
def g(a,s,n=1):
 for c in s:
    if a>=n:a,n=((a+n,1),(a-n,2*n))[c<'W']
 return a

for i in range(14):
    s=''.join(('L','W')[random.randint(0, 1)] for e in range(random.randint(10, 15)))
    print'g(%i,%s):'%(i,`s`),
    print g(i,s)

নমুনা আউটপুট:

g(0,'LLWWWWWWLWWWWW'): 0
g(1,'WLLWWWWWWWW'): 1
g(2,'WWWLLLWLLW'): 2
g(3,'LLLLWLWLWWWWLL'): 0
g(4,'LWWWWLWLWWW'): 12
g(5,'WWLWWLLWWW'): 12
g(6,'LLLWWWLLLLWLLWL'): 3
g(7,'WWLLWWLWLWLWLLL'): 7
g(8,'WLLLWWWWWLLWLL'): 2
g(9,'WWWLLWLLLLLWL'): 6
g(10,'LWWWWLLLWL'): 7
g(11,'WLLLLWLWWWW'): 5
g(12,'WLLWWLWWWL'): 17
g(13,'LLLWLLWLWLWLWW'): 6

পরীক্ষকটিতে কিছুটা পরিবর্তন আনার সাথে সাথে আমরা অনেক রানের গড় লাভ পেতে পারি:

import random
def g(a,s,n=1):
 for c in s:
    if a>=n:a,n=((a+n,1),(a-n,2*n))[c<'W']
 return a

r=[]
for i in range(5000):
    for i in range(1000):
        s=''.join(('L','W')[random.randint(0, 1)] for e in range(random.randint(10, 15)))
        r+=[i-g(i,s)]
a=0
for n in r:
    a+=n
print float(a)/len(r)

নমুনা আউটপুট (বেশ কিছুক্ষণ সময় নিয়েছে, যেহেতু আমরা ফাংশনটির 5000000সময়কে কল করছি ):

-0.0156148

সম্পাদনা: হাওয়ার্ড এবং ড্যানিকে আরও গল্ফ করার জন্য ধন্যবাদ।

সম্পাদনা: এখন প্রোগ্রামটি বাজি রাখার জন্য পর্যাপ্ত অর্থ আছে কিনা তা যাচাই করে। এটি আসলে বাইট সংরক্ষণ করে।


কিছু ছোটখাট সঞ্চয়ী: আপনি প্রতিস্থাপন করতে পারি c=='L'সঙ্গে c<'W'=। আপনি লিখতে পারেন b,n=((n,1),(-n,2*n))[c<'W']যা আপনার আরও অক্ষর ( if a<-b:break, a+=b) সংরক্ষণ করে।
হাওয়ার্ড

নিবন্ধন করুন আমি b,n=কৌতুকটি চেষ্টা করেছি ( [বাইরের দিকে দিয়ে), তবে অজগর অভিযোগ করেছে। আবার চেষ্টা করা যাক.
জাস্টিন


1
না if n<=aকিছু গৃহস্থালির কাজ যেহেতু আপনি করতে হবে না এবং আপনি সংরক্ষণ breakতারপর?
ড্যানি

1
@ কুইঞ্জিনেক্স: না, <এর অর্থ কম than স্ট্রিংগুলি ডিক্সিকোগ্রাফিকভাবে অর্ডার করা হয়, সুতরাং 'এল' <'ডাব্লু' সত্যটি প্রত্যাবর্তন করে, এটি 1 হিসাবে ব্যাখ্যা করা হয়, যখন 'ডাব্লু' <'ডাব্লু' মিথ্যা প্রত্যাবর্তন করে, যা 0 হিসাবে ব্যাখ্যা করা হয়
ইসহাক

4

আর, 95 টি অক্ষর

g=function(a,r){n=1;for(i in 1:nchar(r)){s=substr(r,i,i);if(s=='L'){a=a-n;n=n*2}else{a=a+n;n=1};if(n>a)break};a}

ইন্ডেন্টযুক্ত:

g=function(a,r){
    n=1
    for(i in 1:nchar(r)){
        s=substr(r,i,i)
        if(s=='L'){
            a=a-n
            n=n*2
            }else{
                a=a+n
                n=1
                }
        if(n>a)break
        }
    a
    }

ব্যবহার:

> g(15,'LLWLLLL')
[1] 1
> g(20,'WLLW')
[1] 22
> g(13,'LLWLLLLWWLWWWLWLWW')
[1] 7

3

জে - 63 55 চর

এখন ভুল না হওয়ার যুক্ত বোনাস দিয়ে! এটি ঠিক আগের মতোই দীর্ঘ।

((+/\@,(0{<#[)_,~|@]);@('W'<@(2^i.@#);.1@,}:)*_1^=&'L')

বাম আর্গুমেন্ট এবং ডানদিকে জয় / পরাজয়ের ধারা হিসাবে শুরুতে অর্থ গ্রহণ করে।

ব্যাখ্যা: প্রোগ্রামটি দুটি ফাংশনের সংমিশ্রণের মতো কিছুতে সমানভাবে বিভক্ত হয়ে গেছে, উভয়ই নীচে বিস্তারিত। প্রথমটি উইন / হরফের ধারাটিকে প্রত্যাশিত চিহ্নের সাথে বেটের মানগুলিতে পরিণত করে এবং তারপরে দ্বিতীয়টি প্রাথমিক অর্থ এবং এই রূপান্তরিত জয় / হারের ধারাটি প্রদত্ত উত্তরটি বের করে।

;@('W'<@(2^i.@#);.1@,}:)*_1^=&'L'   NB. win/loss as sole argument
                         _1^=&'L'   NB. -1 for every L, +1 for W
      <@(      );.1                 NB. split vector into streaks:
   'W'              ,}:             NB.  cut on wins, shift right by 1
         2^i.@#                     NB. for each, make doubling run
;@(                    )*           NB. unsplit, multiply by signs

(+/\@,(0{<#[)_,~|@])   NB. money on left, above result on right
                |@]    NB. absolute value of bets 
             _,~       NB. append infinity to end
 +/\@,                 NB. partial sums with initial money
      (  <  )          NB. 1 whenever money in account < bet
          #[           NB. select those money values corresp. to 1s
       0{              NB. take first such item

নোট করুন যে আমরা আংশিক পরিমাণ নেওয়ার আগে বেটে অর্থ প্রেরণ করি, তবে আমরা বাজি মানগুলির তালিকার শেষে অসীম বাজি সংযোজন করি। এটি হ'ল পরবর্তী বেটের উপরে থাকা অ্যাকাউন্টের মানকে বদলে দেয় এবং অনন্ত ব্যবহার করে আমাদের সর্বদা ক্যাচ-অল হিসাবে শেষ উপাদানটি রাখতে দেয়।

ব্যবহার:

   15 ((+/\@,(0{<#[)_,~|@]);@('W'<@(2^i.@#);.1@,}:)*_1^=&'L') 'LLLWLLLL'
1
   NB. naming for convenience
   f =: ((+/\@,(0{<#[)_,~|@]);@('W'<@(2^i.@#);.1@,}:)*_1^=&'L')
   20 f 'WLLW'
22
   2 f 'LW'
1
   13 f 'LLWLLLLWWLWWWLWLWW'
7
   12 13 14 15 28 29 30 31 (f"0 _) 'LLWLLLLWWLWWWLWLWW'  NB. for each left argument
6 7 0 1 14 15 39 40

2
আমি আপনার কোডটি পরীক্ষা করেছি এবং এটি পরীক্ষার ক্ষেত্রে 3 টিও দেয় 2 LW। দুর্ভাগ্যক্রমে প্রথম ক্ষতির পরে আপনার কাছে দ্বিতীয়বারের জন্য বাজি রাখার মতো পর্যাপ্ত অর্থ নেই।
হাওয়ার্ড

এর সাথে 14 f 'LLWLLLLWWLWWWLWLWW', আমরা এই ক্রমটি পেয়েছি: 14, 13, 11, 15, 14, 12, 8, 0,..-এ 0, আমাদের কাছে বিড দেওয়ার মতো পর্যাপ্ত অর্থ নেই, সুতরাং প্রোগ্রামটি আউটপুট করে 0
জাস্টিন

এই কোডটি কি এখন সঠিক? আমাকে একটি বিজয়ী মনোনীত করতে হবে এবং জে সংকলক নেই (অভিজ্ঞতা শুরু করার সময়ও নেই)।
TheSoftwareJedi

@ দ্য সোফটওয়ারজেডি হ্যাঁ, এটি সঠিক is বাস্তবে এমন কোনো জে ইন্টারপ্রেটার, একটি অনলাইন জাভাস্ক্রিপ্ট সংস্করণ এখন, যে তোমার দিকে চেষ্টা করে দেখতে পারেন tryj.tk
অ্যালগরিদমশর্ক 12

এখন দ্বিধা, গল্ফস্ক্রিপ্ট কি গণনা করে ?!
TheSoftwareJedi

3

জাভাস্ক্রিপ্ট (ECMAScript 6 খসড়া) - 62 51 50 টি অক্ষর (ফাংশন বডিতে)

function g(a,r,t=0,b=1)
a>=b&&(c=r[t])?g((c=c>'L')?a+b:a-b,r,t+1,c||2*b):a

gদুটি যুক্তি সহ একটি পুনরাবৃত্ত ফাংশন সংজ্ঞা দেয় :

  • a- আপনার বর্তমান অর্থের পরিমাণ; এবং
  • r - জয় / ক্ষতির স্ট্রিং।

এবং দুটি alচ্ছিক যুক্তি:

  • t- বাজির বর্তমান রাউন্ডের সূচক (প্রাথমিকভাবে 0)
  • b- বর্তমান বাজির জন্য অর্থের পরিমাণ (আবার প্রথম দিকে 1)।

Ungolfed:

function g(a,r,t=0,b=1){      // declare a function g with arguments a,r,t,b where
                              // t defaults to 0 and b defaults to 1
c = r[t];                     // get the character in the win/loss string for the current
                              // round.
if (   a>=b                   // check if we have enough money
    && c )                    // and if the string has not ended
{
  if ( c > 'L' )              // check if we've won the round
  {
    return g(a+b,r,t+1,1);    // if so call g again adding the winnings and resetting the
                              // cost.
  } else {
    return g(a-b,r,t+1,2*b);  // otherwise, subtract from the total money and double the
                              // cost.
  }
} else {
  return a;                   // If we've run out of money or got to the end then return
                              // the current total.
}}

জাভাস্ক্রিপ্ট (ECMAScript 6) - 61 58 54 টি অক্ষর (ফাংশন বডিতে)

function g(a,r)
(b=1,[b=b>a?b:x>'L'?(a+=b,1):(a-=b,b*2)for(x of r)],a)

ব্যাখ্যা:

(b=1,                        // Initialise the cost to 1
 [                           // for each character x of r using array comprehension
     b=
       b>a?b                 // if we have run out of money do b=b
       :x>'L'?(a+=b,1)       // else if we've won collect the winnings and reset b=1
             :(a-=b,2*b)     // else subtract the cost from the total money and double
                             // the cost for next round.
  for(x of r)]               // Repeat for each character
                             // array.
,a)                          // Finally, return a.

টেস্ট

console.log(g(0,'LLLLLWWLWWLW')) // 0
console.log(g(1,'WWWLLLWWWWLLWW')) //1
console.log(g(2,'LLWLWWWWWWWL')) //1
console.log(g(3,'WWWWWWWLLLWL')) //3
console.log(g(4,'LWWLWLWWWL')) //9
console.log(g(5,'LLLWWWLLWLWW')) //2
console.log(g(6,'LWLLLLWWLWWW')) //0
console.log(g(7,'WWLWWLLLWLWLW')) //4
console.log(g(8,'WWLWWLLWLWL')) //13
console.log(g(9,'WWWLLLWLLWLWWW')) //5
console.log(g(10,'WLWLLWWWWWWWL')) //18
console.log(g(11,'WLWLWLWLLLWLLW')) //17
console.log(g(12,'WWLWWWLLWL')) //17
console.log(g(13,'WWWWLWLWWW')) //21
console.log(g(15,'LLLW')) //16
console.log(g(15,'LLLL')) //0
console.log(g(14,'LLLL')) //7
console.log(g(2,'LW')) //1
console.log(g(2,'LL')) //1
console.log(g(2,'WLL')) //0

আপনি 3 বাইট পরিবর্তন সংরক্ষণ করতে পারবেন b=1,r.split('').map(করার[b=1].map.call(r,
nderscore

ধন্যবাদ, আমি স্ট্রিংকে সরাসরি এ জাতীয়ভাবে চালিত করার বিষয়টি বিবেচনা করব না।
এমটি0

অ্যারে বোধগম্যতা ব্যবহার করে আরও 4 বাইট (b=1,[b=b>a?b:x>'L'?(a+=b,1):(a-=b,b*2)for(x of r)],a)
কেটে নিন

-1 বাইট:a>=b&&(c=r[t])?g((c=c>'L')?a+b:a-b,r,t+1,c||2*b):a
nderscore

1

পাইথন, 74 বাইট

def g(a,r,b=1):
 for l in r:
  if l>"L":a+=b;b=1
  else:a-=b;b*=2
 return a

আমি ফাংশন জি সংজ্ঞায়িত করেছি যা একটি (আপনার শুরুতে থাকা অর্থের পরিমাণ) এবং r (যা বেটের ফলাফল) এটি প্রথম বাজির পরিমাণ ১ এ শুরু করে Then তারপর বেটের প্রতিটি ফলাফলের জন্য, যদি তা হয় একটি জয়ে ("ডাব্লু") আপনি অর্থ উপার্জন করেন এবং বাজি ফিরে আসে 1.. অন্যথায় আপনি বাজির পরিমাণ এবং পরবর্তী বাটের পরিমাণ দ্বিগুণ হয়ে যান। অবশেষে এটি আপনার কাছে থাকা অর্থ ফেরত দেয়। আপনি এটি এর মতো ব্যবহার করতে পারেন:

print g(20,"WLLW") # 22
print g(15,"LLLWLLLL") # 1

আমি মনে করি এটি আরও গল্ফ করা যেতে পারে।



1

সি, 107 টি অক্ষর

f(int a,char*r,int n){return*r&&n<a?*r<77?f(a-n,r+1,n*2):f(a+n,r+1,1):a;}g(int a, char*r){return f(a,r,1);}

আমি এখানে একটি পুনরাবৃত্ত ফাংশন ব্যবহার করছি, কারণ বেশিরভাগ সময় বাস্তবায়ন সংক্ষিপ্ত হয়। তবে আমি এখানে পুরোপুরি নিশ্চিত নই, কারণ আমার একটি অতিরিক্ত র‍্যাপার ফাংশন তৈরি করার প্রয়োজন ছিল যাতে আমার ফাংশনটি কেবল 2 টি যুক্তিই গ্রহণ করে। কারেন্টে তৃতীয় আর্গুমেন্টটি fবর্তমান বাজির জন্য প্রয়োজন (সঞ্চালক)।

মোড়ক ফাংশন ব্যতীত এই দ্রবণটি কেবলমাত্র 73৩ টি অক্ষর দীর্ঘ হবে তবে সঠিক ফলাফল পেতে আপনাকে 1 মান (ইনিটাল বেট) সহ একটি অতিরিক্ত প্যারামিটারটি পাস করতে হবে।

ungolfed:

f(int a,char*r,int n){
    return *r&&n<a
                ?*r<77
                    ?f(a-n,r+1,n*2)
                    :f(a+n,r+1,1)
                :a;
}
g(int a,char*r){
    return f(a,r,1);
}


1

জাভাস্ক্রিপ্ট, 63

function g(a,s){x=1;for(i in s)if(x<=a)s[i]>'L'?(a+=x,x=1):(a-=x,x*=2);return a}

নমুনা রান:

console.log(g(15, 'LLLWLLLL'));  //1
console.log(g(20, 'WLLW'));  //22
console.log(g(13, 'LLWLLLLWWLWWWLWLWW')); //7

জেএসফিডেল ডাব্লু / লগিং

Ungolfed:

function g(a,s){
  x=1;                //bet starts at 1
  for(i in s)         //loop through win/lose string
    if(x<=a)          //check if we still have money to bet
      s[i]>'L'?
        (a+=x,x=1):   //win: add the bet amount to your total, and reset bet to 1
        (a-=x,x*=2);  //lose: subtract the bet amount from your total, and double your bet
  return a            //return your money
}

1

জাভাস্ক্রিপ্ট ( ES5 ) 69 64 60 ফাংশনের মধ্যে বাইট

function g(a,r){b=1;for(i in r)b=b>a?b:r[i]>'L'?(a+=b,1):(a-=b,b*2);return a}

বৈচিত্র: ( একই দৈর্ঘ্য )

function g(a,r,b){for(i in r)b=b?b>a?b:r[i]>'L'?(a+=b,1):(a-=b,b*2):1;return a}

পরীক্ষার কেস: ( প্ল্যানাপাসের সমাধান থেকে নেওয়া )

g(15,'LLWLLLL'); // 1
g(20,'WLLW'); // 22
g(13,'LLWLLLLWWLWWWLWLWW'); // 7

g(20,'WLLW')আমার ফায়ারফক্স কনসোলে 25 টি ফেরৎ দেয় - for...inলুপটি স্ট্রিংয়ে তিনটি অতিরিক্ত বৈশিষ্ট্য তুলে ধরে এবং সেগুলির উপরেও পুনরাবৃত্তি করে।
এমটি0

@ এমটি0 একই জিনিসটি আমার ফায়ারফক্স কনসোলে ঘটে। তবে আমি যদি একটি নতুন ব্যক্তিগত ব্রাউজিং উইন্ডো খুলি তবে আমি 22আমার কনসোলটিতে যাব। আপনি যখন কনসোলটি খুলবেন তখন Stringপ্রোটোটাইপটি সংশোধন করে এমন কোনও সাইট সম্ভবত ভাবা হচ্ছে। আমি জানি স্ট্যাকেক্সচেঞ্জ এটিকে সংশোধন করে তিনটি অতিরিক্ত ফাংশন যুক্ত করে।
ড্যানি

কোনও কারণে, এটি একটি নতুন ট্যাবের সাথে ঘটে না: i.imgur.com/BgSUSIe.png
nderscore

1

হাস্কেল, 62

g a=fst.foldl(\(t,b)l->if l=='W'then(t+b,1)else(t-b,2*t))(a,1)

অথবা উভয় যুক্তি (65 অক্ষর) সহ:

g a r=fst$foldl(\(t,b)l->if l=='W'then(t+b,1)else(t-b,2*t))(a,1)r

নোট করুন g a r = 1 + a + the number of Ws in r + the number of trailing Ls in r(69):

g a r=a+1+l(filter(=='W')r)-2^l(takeWhile(/='W')(reverse r))
l=length

এটি কেবল একটি আংশিক সমাধান। খেলোয়াড়ের অর্থ শেষ হয়ে গেলে কেসটি কাভার করে না।
পেটর পুডলাক

এই সমস্যার অনেকগুলি সমাধান রয়েছে যা বাজিটি নেতিবাচক হতে দেয়। সমস্যাটি কখনই বলেন নি যে আপনার এটি যাচাই করা উচিত কিনা তা পরীক্ষা করা উচিত।
জাক

@ জাজাক আসলে হ্যাঁ, প্রশ্নটি স্পষ্টভাবে জানিয়েছিল যে বিষয়টি ছিল।
TheSoftwareJedi

1

পাইথন 2 - 65 বাইট

এখনকার সেরা পাইথন সলিউশন দ্বারা পরাজিত, তবে আমি এটি ভাগ করতে পারি না:

def g(r,a,b=1):
    if r>"">a>=b:a=g(r[1:],*[(a+b,1),(a-b,b*2)][r[0]<"W"])
    return a

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

টিউপলকে আনপ্যাকিংয়ের কাজ করার জন্য ক্রিয়াকর্মের আর্গুমেন্টগুলির ক্রমটি পরিবর্তন করতে হবে ।

আপনি যদি অবাক হন তবে এর r>"">a>=bজন্য সংক্ষিপ্ত r and a>=b


1

রুবি, 76 64 (ফাংশন বডিতে) বাইট

সম্পাদনা: 3 বাইট অপসারণ করে উত্তরটি উন্নত করেছে:

n=1;r.each_char{|c|;c>'L'?(a+=n;n=1):(a-=n;n*=2);break if n>a};a



ফানক (82 বাইট) ব্যবহার:

def g(a,r);n=1;r.each_char{|c|;c>'L'?(a,n=a+n,1):(a,n=a-n,n*2);break if n>a};a;end

ল্যাম্বদা (76 বাইট) ব্যবহার:

g=->a,r{n=1;r.each_char{|c|;c>'L'?(a,n=a+n,1):(a,n=a-n,n*2);break if n>a};a}

রান:

p g.call(15, 'LLLWLLLL') # 1
p g.call(20, 'WLLW') # 22
p g.call(13, 'LLWLLLLWWLWWWLWLWW') # 7

1

পদ্ধতির অভ্যন্তরে সি #, 74 টি অক্ষর

এই সাইটে আমার প্রথম প্রচেষ্টা ...

int b=1;foreach(var c in r)if(b<=a){a+=c>'L'?b:-b;b=c>'L'?1:b*2;}return a;

বা, আরও পাঠযোগ্য:

int bet = 1;
foreach (var chr in r)
{                       // these brackets are left out in short version
   if (bet <= a)
   {
       a += chr > 'L' ? bet : -bet;
       bet = chr > 'L' ? 1 : bet * 2;
   }
}
return a;

বেশ নির্বোধ, যে অনেক কৌশল নয় ... মূলত চরটি অর্ডিনাল হওয়ার এবং স্ট্রিংটি গণনীয় হওয়ার সুবিধা গ্রহণ করছে। খেলোয়াড়ের অর্থ শেষ হয়ে গেলে বহিরাগত লুপিং দ্বারা কয়েকটি অক্ষর সংরক্ষণ করা।


1

গল্ফস্ক্রিপ্ট, 51 41 36 35 বাইট

অভ্যন্তরীণ ফাংশন

1\{@2$-@2*@(1&{@@+1@}*.3$3$<!*}do;;

এটি ধরে নেওয়া হয় যে আমরা ইতিবাচক পরিমাণে অর্থ দিয়ে শুরু করি এবং জয়-পরাজয়ের স্ট্রিংটি খালি থাকবে না, যাতে কমপক্ষে একটি বাজি সম্পাদন করা যায়।

উদাহরণ

{
  # Push initial bet amount.
  1\
  # STACK: Money Bet Outcomes
  {
    # Subtract bet amount from money.
    @2$-
    # STACK: Bet Outcomes Money
    # Double bet amount.
    @2*
    # STACK: Outcomes Money Bet
    # Remove first character from win-loss string and check if its ASCII code is odd.
    @(1&
    # STACK: Money Bet Outcomes Boolean
    # If it is, we've won, so add the doubled bet amount to the money and push 1 as the
    # new bet amont.
    {@@+1@}*
    # STACK: Money Bet Outcomes
    # Duplicate win-loss string, bet amonut and money.
    .3$3$
    # STACK: Money Bet Outcomes Outcomes Bet Money
    # If the next bet amount is less than our money and the win-loss string is not empty,
    # repeat the loop.
    <!*
    # STACK: Money Bet Outcomes Boolean
  }do
  # STACK: Money Bet Outcomes
  ;;
  # STACK: Money
}:f                                      # Define function.

];                                       # Clear stack.

20 'WLLW'               f
2  'LW'                 f
13 'LLWLLLLWWLWWWLWLWW' f
14 'LLWLLLLWWLWWWLWLWW' f

]p                                       # Print results as array.

দেয়

[22 1 7 0]

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


1

সি #, 123

return q.Aggregate(new{b=1,c=w,x=1},(l,o)=>l.x<0?l:o=='W'?new{b=1,c=l.c+l.b,x=1}:new{b=l.b*2,c=l.c-l.b,x=l.c-l.b-l.b*2}).c;

নেট নেট

একটি ব্লগ পোস্ট ব্যাখ্যা


কোডের সাথে কেবল সেই দুটি লিঙ্ক পোস্ট করার পরিবর্তে এখানে ব্যাখ্যাটি এখানে আনুন।
জাস্টিন

আমি মানুষকে ভালবাসি, এবং এএম এডিট করব। এটি ছিল তাড়াতাড়ি এবং অগ্নিপরীক্ষা শেষ। আমি কিছুক্ষণের জন্য এসও তে সক্রিয় ছিলাম না, আমার সাথে সহ্য করুন কারণ আমি মেনে নিই যে এটি আর শৈশবকালীন নয়। :)
TheSoftwareJedi

আপনার নেট নেট অনুসারে আপনি নিজের যুক্তিগুলি পিছনের দিকে নিচ্ছেন। এটি কি অনুমোদিত?
জাস্টিন

আমি প্রশ্নের সমাধানটির সাথে ফাংশন সংজ্ঞাটি অপ্রাসঙ্গিক করে ফেলব। ভাঁজটি উত্তরটির অংশ নয়, এটি চালানোর একমাত্র উপায়।
TheSoftwareJedi


0

রুবি, 84 টি অক্ষর

def g(a,r,n=1)
return a if !r[0]||n>a
s=r[1..-1]
r[0]<?M?g(a-n,s,n*2):g(a+n,s,1)
end

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


0

কে, 76

g:{x+/-1_last'{(,1_*x),(("LW"!/:((2*;{1});(-:;::)))@\:**x)@\:x 1}\[(y;1;0)]}

k)g[15;"LLLWLLLL"]
1
k)g[20;"WLLW"]
22
k)g[50;"WLLLWLWLWLWLW"]
56

0

পাইথন, 86

def y(a,s):
 for l in s.split('W'):
    a+=1;k=2**len(l)
    if k>a:return int(bin(a)[3:],2)
 return a-k

আমি জানি যে এটি সংক্ষিপ্ততম সমাধানের কাছাকাছি কোথাও নেই, তবে আমি আলাদা পদ্ধতির প্রদর্শন করতে চেয়েছিলাম, যা পৃথক বাজি না দিয়ে লোকসানের প্রবাহের উপরে পুনরাবৃত্তি করে। মুছে ফেলা হয়েছে int(bin(a)[3:],2)বাইনারি উপস্থাপনা থেকে সবচেয়ে গুরুত্বপূর্ণ বিট সঙ্গে পূর্ণসংখ্যার দেয় a, যা 2 বা ক্রমবর্ধমান ক্ষমতা হারানোর পরে ব্যক্তি তার যতটা বাজি ধরে না রাখতে পারে তার পরিমাণ পরিমাণ, কারণ একজন বর্তমানে তার বা তার চেয়ে 1 বেশি প্রকৃত পরিমাণ অর্থ এই সংস্করণ ধরে নেয় প্রাথমিক মূলধনটি ইতিবাচক।


0

সি - 64 59 (ভিতরে ফাংশন)

তবুও অন্য সি উত্তর। এটি ভেরিয়েবলের মান স্ট্যাকের উপর থেকে যায় এই সুবিধাটি নেয়। সুতরাং এটি কিছু সংকলকগুলির সাথে আমার ব্যর্থ, তবে যেখানেই আমি পরীক্ষা করেছি এটি সঠিকভাবে কাজ করে। এছাড়াও, আমি %2একটি চরিত্র সংরক্ষণ করতে টিআইএ থেকে নিয়েছিলাম । দুঃখিত!

f(int s,char*r){
    int a=1;
    for(;*r&&(*r++%2?s+=a,a=1:s<a?0:(s-=a,a*=2)););
    a=s;
}

0

ব্যাচ - 212

@echo off&setlocal enabledelayedexpansion&set r=%2&set a=%1&set c=1&powershell "&{'%2'.length-1}">f&set/pl=<f
for /l %%a in (0,1,%l%)do if "!r:~%%a,1!"=="L" (set/aa-=!c!&set/ac*=2) else set/aa+=!c!&set c=1
echo %a%

উদাহরণ -

H:\uprof>bet.bat 15 LLLWLLLL
1

0

জাপট , 38 বাইট

V¬r@Z=WX<Z?X:Y¶'L?W=ZÑX-Z:(W=1X+Z}UW=1

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

সম্ভবত কিছু গল্ফ করা দরকার :) তবে এটি সঠিক ফলাফল পেয়েছে বলে মনে হচ্ছে।

দ্রষ্টব্য এটি একটি সম্পূর্ণ প্রোগ্রাম যা প্রিপেন্ডিংয়ের মাধ্যমে কোনও ফাংশনে রূপান্তর করতে তুচ্ছ UV{। ফাংশনের অভ্যন্তরে বাইট গণনা একই হবে।

রূপান্তরিত জেএস ব্যাখ্যা:

// V: input string of W's and L's
V
  // split V into an array of characters
  .q()
  // reduce
  .r(function(X, Y, Z) {
    return
      // W contains the current bet,
      // save it to a temp variable Z
      Z = W,
      // do we have enough to bet?
      X < Z
        // not enough to bet, return the previous amount
        ? X
         // we can bet, did we lose this round
         : Y === "L"
           // we lost, increment bet and decrease holdings
           ? (W = Z * 2, X - Z)
           // we won, reset bet and increase holdings
           : (W = 1, X + Z)
   },
   // U: initial holdings
   U,
   // initialize bet to 1
   W = 1
 )


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

0

পাওয়ারশেল , 68 81 বাইট

param($n,$s)$w=1;$s|% t*y|%{if($n-ge$w){$n+=(-$w,$w)[$_%2];$w/=(.5,$w)[$_%2]}};$n

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

এই চ্যালেঞ্জটির জন্য কিছু খুব বিশ্রী অ্যাসাইনমেন্ট প্রয়োজন যার অর্থ আমি একটি বড় আপডেট একসাথে চেইন করতে পারি না। এটি ASCII- এ 'ডাব্লু' এর 87 এবং 'এল' এর 76 টি তাই 2 ব্যবহার করে সহজেই সত্য / মিথ্যা মানগুলিতে অ্যাক্সেস দেয় এই সত্যটি ব্যবহার করে। |% t*yচ্যারার অ্যারে শর্টকাট স্ট্যান্ডার্ড এবং বিভাজনটি ব্যবহার করে বাজিটি আপডেট করা আমি খুঁজে পেলাম এটি সবচেয়ে সস্তার উপায় ( )।

প্লাস অনেকগুলি বাইট কারণ আমি সীমাবদ্ধতা মিস করেছি। প্যাচ ডাউন গল্ফ উপর কাজ করবে


0

05AB1E 1 , 19 বাইট

vDX@iy'WQiX+1UëXxU-

এর বন্দর @ হাওয়ার্ডের গল্ফস্ক্রিপ্টের উত্তরটির, সুতরাং তাকেও উজ্জীবিত করার বিষয়টি নিশ্চিত করুন!

মনে রাখবেন যে 05AB1E এর কোনও কার্যকারিতা নেই, সুতরাং এটি পরিবর্তে একটি সম্পূর্ণ প্রোগ্রাম।
প্রথমে স্ট্রিং ইনপুট নেয় এবং পূর্ণসংখ্যার ইনপুট দ্বিতীয় হয় (এসটিডিআইএন-এ নতুন সীমাবদ্ধ)।

এটি অনলাইন বা চেষ্টা করে দেখুন আরও কিছু পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

v               # Loop over each character `y` of the (implicit) input-string:
 D              #  Duplicate the current integer
                #  (which is the implicit input-integer in the first iteration)
  X@i           #  If the integer is larger than or equal to variable `X`:
                #  (NOTE: variable `X` is 1 by default)
     y'WQi     '#   If the current character `y` is a 'W':
          X+    #    Increase the integer by `X`
          1U    #    And reset variable `X` to 1
         ë      #   Else (the current character `y` is an 'L' instead):
          X  -  #    Decrease the integer by `X`
           xU   #    And set variable `X` to double its current value
                # (the integer at the top of the stack is implicitly output after the loop)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.