首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增量博彩

增量博彩
EN

Code Golf用户
提问于 2014-04-24 05:08:43
回答 16查看 2.5K关注 0票数 19

几个月前,我把这个问题作为面试的预选谜题。最近,当我想到博客的材料时,它突然出现在我的脑海中,作为一个很好的例子,可以用来解决问题的功能。当我写完我的博客文章后,我会立即发布我的解决方案。

注:这个问题是一年前在StackOverflow上提出的,并在一些(不正确的)答案后被否决。我想它被否决了,因为它是一个明显的面试或家庭作业问题。我们在这里的答案应该是足够深的代码,让人不考虑使用他们!

在比赛中,你可以用下面的策略下注。每次你输掉一次赌注,你就会把下一轮的赌注的价值翻一番。无论你何时获胜,下一轮的赌注都是一美元。你一开始就赌一美元。

例如,如果你从20美元开始,你在第一轮中赢了,在接下来的两轮中输掉了,然后在第四轮中赢了,你将得到20+1-1-2+4 = 22美元。

您需要完成函数g,它包含两个参数:

  1. 第一个参数是整数a,它是我们开始下注时的初始金额。
  2. 第二个参数是字符串r。结果的第一个特征是“W”(赢)或“L”(输),代表第一轮的结果。

您的功能应该返回的金额,你将拥有的所有回合后,发挥。

如果在某一时刻,你的账户中没有足够的钱来支付赌注的价值,你必须停下来,把你在这一点上的钱还回来。

示例运行

代码语言:javascript
复制
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

胜利者由隐含函数定义中的最少字符数决定。如有需要,请用语言配合。我知道我的可以改进!

EN

回答 16

Code Golf用户

发布于 2014-04-24 09:03:49

R,95个字符

代码语言:javascript
复制
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}

缩进:

代码语言:javascript
复制
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
    }

用法:

代码语言:javascript
复制
> g(15,'LLWLLLL')
[1] 1
> g(20,'WLLW')
[1] 22
> g(13,'LLWLLLLWWLWWWLWLWW')
[1] 7
票数 4
EN

Code Golf用户

发布于 2014-04-24 06:10:29

C#,123

代码语言:javascript
复制
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;

.NET填充器

一篇解释

票数 1
EN

Code Golf用户

发布于 2014-04-24 06:55:50

Python,74字节

代码语言:javascript
复制
def g(a,r,b=1):
 for l in r:
  if l>"L":a+=b;b=1
  else:a-=b;b*=2
 return a

我定义了函数g,它取一个(开始时你有多少钱)和r(这是下注的结果),它将第一次下注的金额初始化为1。然后对于每一次下注的结果,如果它是一场胜利(r中的“W”),你就会得到钱并赌回1。否则你会输掉赌注的数量,下一次赌的金额会加倍。最后,它还你的钱。你可以这样使用它:

代码语言:javascript
复制
print g(20,"WLLW") # 22
print g(15,"LLLWLLLL") # 1

我觉得这还可以再打一杯。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/26236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档