吉米需要您的帮助!


17

似乎最近,吉米人死了很多,在这里和这里都可以看到,要求您确定吉米是否会跌倒。现在是时候制止这种疯狂并设法拯救吉米了。

吉米有三个身体部位/o以及\安排这样

/o\

平台用表示-。如果吉米的身体部位不位于平台的正上方,则吉米会从平台上掉下来。

一些例子:

   /o\
- -------

吉米会保持平衡,因为他们的所有身体部位都在身体之上-

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

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

 /o\
-- ----  --

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

  /o\
   -

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


由于我的平台供不应求,所以我只有长度为5的平台,重要的是我们使用的平台应尽可能少。

您的任务是输入Jimmys并输出一串平台,该平台将在输入中保存所有Jimmys。您的输出必须使用尽可能少的平台,但每个平台-的宽度必须为5 。

请注意,平台的规则是5 -宽,这意味着每个平台之间必须有一个空格。----------在输出中无效,因为它将被视为长度为10的平台,而不是长度为5的两个平台。

测试用例

/o\  /o\/o\    // input
----- -----    // output
/o\           /o\
-----       -----
/o\           /o\      // same input as above
-----          -----   // this is also valid output
    /o\ /o\
     -----

适用标准规则。

这是代码高尔夫球,请问最短答案!


2
@Veskah,只要所有Jimmys都使用尽可能少的平台保存,位置无关紧要,因此每个输入将有多个有效输出。输入中将有多少个吉米没有条件,空字符串将是有效输入。
奎因,

3
测试用例4看起来很吓人
过期数据,

2
后续行动:在平台上放置尽可能多的吉米人,以免摔倒。
瓦尔说莫妮卡(Monica)

2
@val实际上是链接的问题之一-之后,我跟进了:P
Quinn

7
我将来会看到很多Jimmy的后续报道。
connectyourcharger

Answers:


2

木炭17 15字节

W‹ⅈLθ«×⁵№o\§θⅈ→

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

W‹ⅈLθ«

当光标位置小于输入长度时重复此操作。

×⁵№o\§θⅈ

如果输入中该位置的字符是an o或a,\则打印5 -s。

移至下一个字符,从而确保平台之间至少有一个空间。

恕我直言,以前的17个字节的解决方案是“木炭”。

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

在线尝试!链接是详细版本的代码。输出包括输入,因此证明了解决方案的正确性。说明:

θ⸿

打印输入并移至下一行的开头。

Fθ«

循环输入的每个字符,以确保不会错过任何吉米。

×⁵¬№ /⊟KD²↑

查看光标上方的字符。如果不存在,或者空间为或/,则什么也不做,否则打印5 -s。

移至下一个字符,从而确保平台之间至少有一个空间。


7

Python 2中70 67个字节

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

在线尝试!

-3个字节,感谢Kevin Cruijssen和Neil

不是最漂亮的,不确定如何更好地处理那些剩余的斜线...

不幸的是,我们无法使用单个re.sub调用用空格替换每个平台的两端,因为在2个平台相距一个空格的情况下,它们之间的间隙不能多次匹配。在断言中进行前瞻/后视是无济于事的,因为在这些断言中匹配的任何内容都不会被替换。

使用单个re.sub参考:

Python 3.8(预发布),78字节

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

在线尝试!


69字节,首先替换/,然后替换[^ ]
凯文·克鲁伊森

@Neil在我的Retina答案中建议的高尔夫也适用于您:67个字节
凯文·克鲁伊森

4

JavaScript(ES6), 56 55  54字节

s=>[...s+1e4].map(c=>(s--?s:s=c>{}&&5)?'-':' ').join``

在线尝试!

要么 47字节,如果返回一个字符数组是可接受的。


2

Python 3中158 164 160字节

a=input();r=""
for i,c in enumerate(a):
 try:r[i]
 except:
  if c in"/o":
   r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
  else:r+=" "
print(r)

在线尝试!

这是我的第一个高尔夫练习代码,很高兴收到吉米的提问!

说明:

  • a=input();r="":接受输入并初始化一个新字符串r

  • for i,c in enumerate(a)::枚举输入。

  • try:r[i] ... except::查看是否r[i]存在-如果不存在,则处理该except块。

  • if c in"/o"::检查当前角色是否在吉米的前两个身体部位中。

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ":如果是这样,请添加一个新细分。如果另一个Jimmy头有五个字符,请在我们的新段之前添加一个空格。

  • else:r+=" ":否则,只需添加一个空格。

  • print(r):打印最终结果。


非常接近,但是我认为这实际上不适用于所有测试用例。它应该使用尽可能少的平台,并且您的上一个示例使用1时可以使用2
Quinn

@Quinn Shoot。错了,直到我解决该问题才开始竞争。
connectyourcharger

@connectyourcharger“非竞争”不会验证无效的解决方案。如果您一段时间不打算修复它,建议删除它。
暴民埃里克(Erik the Outgolfer)

@Quinn我现在修复它。
connectyourcharger

@connectyourcharger很好!
奎因,

2

视网膜23 21字节

/

$
5* 
\S.{5}
5*- 

-2个字节 @Neil

在第二,第四和第六行上包含一个尾随空格。

@negativeSeven的Python 2 Answer的端口,因此请确保对其进行投票!

在线尝试。

说明:

全部替换"/"" "

/
 

追加5个尾随空格:

$
5* 

将所有大小不是6且不以空格开头的子字符串替换为"----- "

\S.{5}
5*- 

可以\S代替使用[^ ]吗?
尼尔,

@Neil Ah,当然。谢谢!
凯文·克鲁伊森


1

05AB1E25 24 字节

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

@negativeSeven的Python 2 Answer的端口,因此请确保对其进行投票!

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

说明:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Œ                # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "

1

Japt23 22字节

Arnauld的JS解决方案的一部分,我已经筋疲力尽,无法进行全面测试。如果无效,请删除钻石吗?

+L² £=U´?U:X>M©5)?'-:S

尝试一下

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.