有多少个吉米人可以容纳?


29

这个简单而有趣的挑战中,您被要求确定Jimmy是否会掉下他们的平台。吉米有三个身体部位/o以及\安排这样

/o\

平台用表示-。如果Jimmy有两个或多个不位于平台正上方的身体部位,他们将掉下平台。

一些例子:

   /o\
- -------

吉米会保持平衡,因为他们的所有身体部位都超过了-

   /o\
    ------   ---

吉米将平衡,因为两个身体部位都在-s 之上。

 /o\
-- ----  --

即使将Jimmy分为两个平台,他们也会保持平衡

  /o\
   -

吉米不会平衡,因为两个身体部位不在平台上方。


您的任务是编写一个程序,该程序将平台作为仅包含-s和s(例如,字符串)的加长容器,并输出可放置在平台上的吉米的数量,以使它们均不会掉落,也不会掉落。交叠。吉米人的身体部位之一可能位于弦首的左侧或弦尾的右侧。

这是因此答案以字节计分,目标是减少字节数。

测试用例

输入项

-  -  -

- -
--
-- --
----
- -- --
------- -

各自的产出

0
0
1
1
2
2
2
3

Answers:


15

JavaScript(ES6), 45 41  40字节

@Shaggy节省了4个字节

s=>(0+s+0).split(/.--|-.-|--./).length-1

在线尝试!



7
@粗野的谢谢!我知道那里出了点问题,但是与此同时,我不得不在一些超级马里奥银河级别上帮助我的妻子……这也是平台损坏的问题。:p
Arnauld

2
---没有与我坐好要么,直到我的工作我的端口上,实现了不再需要他们。想想我会在这里称呼它,抓着一罐罐子然后自己扔在SMG上-很久没玩过了。
毛茸茸的

现在,所有其他答案都使用相同的正则表达式。
心教堂

8

Python 2,53字节

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

在线尝试!

基于Arnauld的正则表达式。贪婪地搜索具有两个或多个的所有不重叠的length-3子字符串-。技巧是`s`将输入字符串括在引号中,以填充空格,以使Jimmys可以像两端那样悬挂

/o\/o\
'----'

Python 2,57字节

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

在线尝试!

需要引号中已含俗气的I / O格式的输入。输出False为0。

一个递归函数,将每个Jimmy放置在允许的最左侧位置,方法是将Jimmy放置在前三个字符(如果他们可以容纳Jimmy)上方,或者删除第一个字符。一个可爱的窍门是通过执行来检查是否s[:3]包含两个或两个以上,它连接的两个副本并检查两个相邻的。-'--'in s[:3]*2s[:3]-



3

Japt,16字节

基于Arnauld的原始JS解决方案。我尝试了几种不同的方法来在输入的任一侧获取必要的填充,但是所有输入都以相同的长度输入-仍在寻找更短的方法...

ûUÊÄÄ è".--|-."ê

测试一下

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

Excel,96个字节

A1=平台。输入为数组公式Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E,16 个字节

ðì‚ε3ôʒ'-¢2@}g}à

绝对可以打高尔夫球。有时候使用05AB1E(缺少任何种类的正则表达式)时,在挑战中看到所有这些正则表达式答案很烦人。;)

在线尝试验证所有测试用例

说明:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

Java 8,41字节

s->(0+s+10).split(".--|--.|-.-").length-1

在线尝试。

@Arnauld的JavaScript的答案,除了+0+10要修复的测试用例一样----。这是必需的,因为String#splitJava内置的默认情况下会删除尾随的空字符串。可以通过向内置函数split添加一个附加参数来更改此设置(0默认情况下,split-buildin中只有一个String参数)。引用文档中此附加参数的用法:


ññ-1个ñ
ñ
ñ并且尾随的空字符串将被丢弃

因此,通常.split("...",-1)将其用于保留所有尾随的空字符串,并且我也可以将其用于此答案(在线尝试)。在这种情况下,将更+0改为+10可以在上节省两个字节,-1。:)



0

木炭,25字节

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

在线尝试!链接是详细版本的代码。说明:

Pθ↖

在不移动光标的情况下打印平台,然后上下移动光标,因为这是第一个潜在的吉米位置。

Fθ

寻找与平台位置一样多的Jimmies。

¿›№KM-¹

检查此位置是否有多个平台。

«⊞υω

如果是这样,请记下有效的吉米职位...

M³→»

...并向右移动三个字符,以使Jimmies不会重叠。

否则,下一个可能的吉米位置是右边的一个字符。

⎚ILυ

清理平台并输出发现位置的数量。



0

Elm 0.19,108字节

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

基于Arnauld JavaScript 答案中的正则表达式。在这里验证所有测试用例。

不使用正则表达式的替代解决方案,更长的长度为171个字节

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

在这里验证所有测试用例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.