そして、すべての人々が言っ​​た...


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!

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language Name, N bytes

N提出のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、リーダーボードスニペットに表示することもできます。

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


くださいamensが順序である必要がありますか?
ザック・ゲイツ

@ZachGatesはい。
コナーオブライエン

「問題のフレーズのインデックス」をどのように決定しますか?
ザックゲイツ

@ZachGatesの指標とaの中でamen。たとえば、G amen => 2言語のインデックスがゼロの場合、インデックスが1つの場合は3。
コナーオブライエン

AMEN!!!! => AMEN!!!!まだand a final Amen... => Amen.
ThisSuitIsBlackNot

回答:


11

網膜、37バイト

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

コードは57バイトの長さで、-20バイトのボーナスの対象となりますオンラインでお試しください!

Perlの回答をRetinaに移植しくれた@MartinBüttnerに感謝します!

使い方

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
([.,?]|!*)私の答えに句読点の一致パターンを使用できますか?私はそれを見て、それを見ることができませんでした(そして、私は確かにより良い解決策を見つけることができませんでした!)。それは確かにあなたを打ち負かすつもりはありません:)、しかし、私は盗用したくありません、そして、私はこのようなサブ問題の解決策を借りるエチケットについて完全に確信がありません。
-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

分離なし、正規表現なし、ボーナスなし。両方のボーナスを得たが、はるかに長いバージョンがありました。


変更することにより、あなたはバン失う1バイトのバイトをfor i=1 toするfor 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申し訳ありませんが、複数の句読点が同時に使用されることは考えていませんでした。修正します。
トブスタ

@Dennisただ修正しました。
トブスタ

@apsillers気づかなかった。後で修正してみます。
トブスタ

@apsillers修正
トブスタ

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に感謝します。あなたの回避策を使用し、スコアを更新しました。
トール

1
これはamen.入力用に印刷されますamen.。これを修正すると答えが短くなります:に変更grep -v '^[amen]*$'するだけgrep \[AMEN]です。
hvd

@hvd:そのとおりです、これははるかに優れています:
トール

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

シェバンを1つとしてカウントすると、入力は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

シェバンを1つとしてカウントすると、入力は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
誰かが私の言語を使っています!最初の投稿には悪くありません。
ママファンロール

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
コナーオブライエン

CJamには正規表現がないので、驚くことではありません。
デニス

ああ... それを
コナーオブライエン

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)
コナーオブライエン

できた 現在は100文字の長さです。
ノーチラス

2

JavaScript、136 135-40-20 = 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コールバックに渡す3つの部分からなる正規表現によって駆動されます。部品は次のとおりです。

  • all the people said[?: ]-単に必要なall the people saidパターンに一致する
  • (amen)([.,?]|!*)-任意の場合amenと句読点(1つ.,?または0以上!、句読点をオプションにする)を個別の一致グループに一致させます- 句読点パターンはDennisにクレジット
  • . -上記のパターンの一部ではなく、一度に1つずつ、他の文字と一致します

したがって、すべての一致は、すべての人がいる文字列、オプションの句読点を含むアーメン一致、またはこれらのフレーズのいずれにも属さない単一の文字のいずれかでなければなりません。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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.