所有人都说……


14

目标给定不包含字符[或的文本输入],请执行以下操作:

  1. 对于Amen具有至少一个大写字母的每个实例(因此,所有Amen不包含的实例amen),都输出相同的名称Amen(保留大写)。
  2. 对于/all the people said[?: ]/i(这是一个正则表达式)的每个实例,还输出Amen(任何情况都可以)。

在每个输出之后,您可以选择任何常量分隔符,例如换行符,空格或什么都不做。

这是一个,因此以字节为单位的最短程序获胜。

IO范例

Input: I said AMEN! AMEN, PEOPLE!
Output: AMENAMEN         ; any separator is fine, I choose none.

Input: amen amen amen amen
Output:                  ; nothing

Input:                   ; empty
Output:                  ; nothing

Input: *blah blah blah* And all the people said?
Output: Amen

Input: all the people said:
Output: Amen

Input: AMEN AMeN AmeN aMEN amen AmEn
Output: AMEN AMeN AmeN aMEN AmEn

Input: All the people said Amen! And all the people said AMEN!
Output: Amen Amen Amen AMEN

Input: LAMEN! Amen.
Output: AMEN Amen

Input: AmenAmenAmenAmenAMENamen
Output: Amen Amen Amen Amen AMEN

Input: And he was like, "Amen", then we were all like, "Amen, bruh."
Output: Amen Amen

Input: And all the aMen people said.
Output: aMen

奖金

  • -20字节,如果你能“抢”后面的标点Amen,即Amen! => Amen!AmEN. => AmEN.I said Amen, bruh. => Amen,,和AMEN!!!! => AMEN!!!!!是唯一可以多次保存的字符。.?!,是唯一要保留的字符。
  • -40字节(如果有)的实例是amen输出,Heresy! at index [i]而不是没有,[i]则是有问题的单词的索引,即amen

奖金IO

输入和输出的形式为input => output。(分隔符是空格。)

BONUS 1
Can I get an Amen! => Amen!
AMEN! and AMEN! and a final Amen... => AMEN! AMEN! Amen.
Amen? Amen, and amEn! => Amen? Amen, amEn!

BONUS 2
The man sighed and said, "amen," and left. It's AMEN! => Heresy! at index [26] AMEN!

排行榜

这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。

为了确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如:

# Ruby, <s>104</s> <s>101</s> 96 bytes

如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

# Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


请执行amen■找是为了?
扎克·盖茨

@ZachGates是的。
Conor O'Brien 2015年

您如何确定“违规用语的索引”?
扎克·盖茨

@ZachGates成为ain 的索引amen。例如,G amen => 2如果您的语言的索引为零;如果为一索引,则为3。
Conor O'Brien 2015年

AMEN!!!! => AMEN!!!!但是and a final Amen... => Amen.呢?
ThisSuitIsBlackNot

Answers:


11

视网膜,37字节

S`amen
i`all the people said[?: ]
amenx
!i`amen([.,?]|!*)

该代码长度为57个字节,并且有资格获得-20个字节的奖励。在线尝试!

感谢@MartinBüttner将我的Perl答案移植到Retina!

怎么运行的

S`                          Split the input at...
  amen                      matches of "amen".
i`                          Case-insensitively search for
  all the people said[?: ]  matches of "all the people said",
                            followed by '?', ':' or ' '...
    amenx                   and replace them with "amenx"
!i`                         Print all case-insensitive matches of...
  amen([.,?]|!*)            "amen", followed either by a single '.',
                            ',' or '?', or by 0 or more '!'s.

1
我可以使用您的([.,?]|!*)标点匹配模式作为答案吗?我看到了它,却看不到它(我当然找不到更好的解决方案!)。它肯定不会击败您的:),但是我不想to窃,而且我也不完全确定向此类子问题借用解决方案的礼节。
apsillers

3
@apsillers从法律上讲,此处的所有内容均已获CC-BY-SA许可,这意味着您可以在注明出处的情况下自由使用它。从道德上讲,将某人的解决方案移植到另一种语言上以使他感到厌烦几乎是司空见惯的,但是采纳某人的答案的一小部分总是很好。
丹尼斯

7

VBA,193个字节

Function v(b)
For i=1 To Len(b)
If StrConv(Mid(b,i,19),2) Like "all the people said" Then v=v& "Amen"
q=Mid(b,i,4):k="amen"
If StrConv(q,2) Like k And Not q Like k Then v=v& q
Next
End Function

没有分离,没有正则表达式,没有奖金。拥有同时获得奖励和奖励的版本。


您更改for i=1 tofor i=1To
泰勒·斯科特

5

Perl,51个字节

s/amen/x/g;s/all the people said[?: ]/amenx/ig;say/amen[.,?]|amen!*/ig

实际的源代码包含70个字节,它必须以perl -nE+1个字节)运行,并且有资格获得-20个字节的奖励。


4

Python 2,155个字节

from re import*
F,m=findall,"((?i)amen)"
for i in split(m,input()):
 if F("((?i)all the people said[?: ])",i):print'AMen'
 elif F(m,i)and i!="amen":print i

$ python2 test.py
"All the people said Amen! And all the people said AMEN!"
AMen
Amen
AMen
AMEN

3

JavaScript,88个字节

108个字节-20个字节(标点符号)

alert(prompt().replace(/amen/g,' ').replace(/all the people said[?: ]/ig,'Amen').match(/amen(\??!?\.?)+/ig))

此打印Amen?!.用于输入Amen?!.Amen!输入Amen!!!
丹尼斯

@Dennis抱歉,没有考虑一次使用多个标点符号,我会解决它。
Tobsta

@丹尼斯刚刚解决了它。
Tobsta

@apsillers都没有注意到。稍后再尝试修复。
Tobsta

@apsillers已修正
Tobsta

3

grep和sed,85 83 84 77-20 = 57字节

sed 's/all the people said[?: ]/Amenx/ig'|grep -oi 'amen[.,!?]*'|grep \[AMEN]

1
这将Amen?作为输入打印all the people said??。我能找到的最佳解决方法是将字符串替换为Amenx
丹尼斯

感谢@Dennis,我使用了您的解决方法并更新了分数。
2015年

1
这将amen.作为输入打印amen.。解决此问题将缩短您的答案:只需更改grep -v '^[amen]*$'为即可grep \[AMEN]
hvd

@hvd:没错,这是更好的了:-)
Thor

3

Perl,103-60 = 43个字节

#!perl -p
s/amen/Heresy! at index [@-]/g;s/all the people said[?: ]/Amen /gi;s/(amen([.,?]|!*)|h[^h]+\])\K|.//gi

将shebang视为一个,输入来自stdin。保持标点符号为-20个字节,并标识为-40的异端。


样品用量

$ echo amen amen, and all the people said?? amen amen | perl amen.pl
Heresy! at index [0]Heresy! at index [5]AmenHeresy! at index [37]Heresy! at index [42]

$ echo AMEN AMeN AmeN aMEN amen AmEn | perl amen.pl
AMENAMeNAmeNaMENHeresy! at index [20]AmEn

$ echo The man sighed and said, "amen," and left. It's AMEN! | perl amen.pl
Heresy! at index [26]AMEN!

Perl,70-20 = 50字节

#!perl -p
s/all the people said[?: ]/Amen /gi;s/amen|(?i:amen([.,?]|!*))\K|.//g

将shebang视为一个,输入来自stdin。保持标点符号为-20个字节。


样品用量

$ echo All the people said Amen, and all the people said AMEN!! | perl primo-amen.pl
AmenAmen,AmenAMEN!!

您的第一个解决方案无法输入ha]。(没关系,只是看到了OP的评论,即输入不能包含方括号...这个问题已经变形了很多次,我无法追踪。)
ThisSuitIsBlackNot

@ThisSuitIsBlackNot我不认为OP已经回答了这个问题。
丹尼斯

@丹尼斯啊,你是对的。另一个未知数。
ThisSuitIsBlackNot

3

𝔼𝕊𝕄𝕚𝕟,66-20 = 46个字符/ 80-20 = 60个字节

ïċ/all the people said[?: ]⍀,`Amen”ċ(/amen⌿,`x”ĉ/amen(\??!?\.?)+⍀)

在这里尝试 -仅适用于Firefox。

第一次在PPCGSE。希望这次高尔夫很好。

编辑:实际上,我击败了CJam(以字符计数),所以这很好!


1
是的,有人在使用我的语言!对于您的第一篇文章来说还不错。
Mama Fun Roll 2015年

2

CJam,57个字节

 q_,,\f{\:I>_4<_el"amen":A=*_A="Heresy! at index ["I+']+@?oK<)"?: "&,*el"all the people said"=A*o}

该代码的长度为97个字节,有资格获得-40个字节的奖励。

CJam解释器中在线尝试。


1
CJam比Perl长吗?o_O
Conor O'Brien

CJam没有正则表达式,因此一点也不奇怪。
丹尼斯

哦... 写下来
Conor O'Brien

2

JavaScript,100字节

alert(prompt().replace(/all the people said[?: ]/ig,'Amen').replace(/amen/g,'x').match(/amen/ig));

3
您可以使用x=prompt();,也可以使用alert(prompt().replace(...).replace(...).match)
Conor O'Brien 2015年

做完了 现在是100个字符。
鹦鹉螺

2

JavaScript,136135-40-40 = 75字节

alert(prompt(A="ameN").replace(/all the people said[?: ]|(amen)([.,?]|!*)|./ig,(v,a,p,i)=>a?a>A?`Heresy! at index [${i}]`:v:v[1]?A:""))

说明:

该代码由三部分的正则表达式驱动,该正则表达式将结果馈入replace回调。这些部分是:

  • all the people said[?: ]-只需匹配所需的all the people said模式
  • (amen)([.,?]|!*)-将任意大小写amen和标点符号(一个.,?或零个或多个!,使标点符号为可选)匹配到单独的匹配组中-归功于Dennis的标点符号模式
  • . -一次匹配任何其他字符,而不是上述模式的一部分

因此,任何匹配项都必须是“所有人”字符串,带有可选标点符号的Amen匹配项或不属于这些短语中任何一个的单个字符。我们在replacer回调中使用逻辑来保存和替换字符串的相应部分,并将每个其他字符更改为空字符串。

alert(
  // store "ameN" in `A` and then prompt
  prompt(A="ameN")
    .replace(
      // three-part regex:
      /all the people said[?: ]|(amen)([.,?]|!*)|./ig,

      // replacer callback, with arguments
      //   v - total match
      //   a - "amen" match group
      //   p - punctuation match group (unused)
      //   i - index of match
     (v,a,p,i)=>
        a?           // if there is an Amen match
          a>A?      //   if the Amen is lowercase (lexically more than "ameN")
               `Heresy! at index [${i}]`
              :v     //   otherwise, output full Amen with punctuation
         :v[1]?      // if there is no Amen, but more than one character
          A          //   this must be all-the-people; output "ameN"
         :""         // otherwise, not an Amen or all-the-people
  )
)

1

Python 2,191-40 = 151字节

i=input()
a='amen'
for j in range(len(i)):
 s=i[j:j+20];w=s[:4]
 if s[:-1].lower()=="all the people said"and s[-1]in'?: ':print a
 if w.lower()==a:print'Heresy! at index[%d]'%j if w==a else w

没有正则表达式和奖金2

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.