그리고 모든 사람들이 말했습니다…


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!!!!.!여러 번 보존되는 유일한 문자입니다. .?!,이렇게 보존 된 유일한 문자입니다.
  • 아무것도 아닌 대신 amen출력 인스턴스가있는 경우 -40 바이트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

헤더에 여러 개의 숫자를 포함 시키려면 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

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

언어 이름을 링크로 만들어 리더 보드 스 니펫에 표시 될 수도 있습니다.

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


amen순서대로해야합니까?
Zach Gates

@ZachGates 예.
코너 O'Brien

"불쾌한 문구의 색인"을 어떻게 결정합니까?
Zach Gates

@ZachGates ain 의 인덱스가 됩니다 amen. 예를 들어, G amen => 2언어가 인덱스가 0 인 경우; 1 인덱싱 된 경우 3입니다.
Conor O'Brien

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
([.,?]|!*)답변에 구두점 일치 패턴을 사용할 수 있습니까? 나는 그것을 보았고 그것을 보지 못했습니다 (그리고 더 나은 해결책을 찾지 못했습니다!). 그것은 확실히 당신을 이길 수는 없습니다 :), 나는 표절하고 싶지 않습니다.
apillers

3
@apsillers 법적으로, 여기에있는 모든 콘텐츠는 CC-BY-SA로 라이센스가 부여되었습니다. 이는 저작자 표시와 함께 자유롭게 사용할 수 있음을 의미합니다. 도덕적으로, 누군가의 솔루션을 다른 언어로 포팅하여 그를 능가하는 것은 다소 어리석은 일이지만, 누군가의 대답의 작은 부분을 취하는 것은 항상 괜찮습니다.
Dennis

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 tofor i=1To
테일러 스콧

5

펄, 51 바이트

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

실제 소스 코드에는 70 바이트 가 포함 되며 perl -nE( +1 바이트 ) 로 실행해야하며 -20 바이트 보너스를받을 수 있습니다.


4

파이썬 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

자바 스크립트, 88 바이트

108 바이트-20 바이트 (문구 포착)

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

이것은 인쇄 Amen?!.입력 Amen?!.하고, Amen!입력 Amen!!!.
Dennis

@Dennis 죄송합니다. 여러 문장 부호를 한 번에 사용하는 것에 대해 생각하지 않았습니다. 문제를 해결하겠습니다.
Tobsta

@Dennis 방금 수정했습니다.
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

@Dennis에게 감사드립니다. 해결 방법을 사용하여 점수를 업데이트했습니다.
Thor

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

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

OP가 그 질문에 대답하지 않았다고 생각합니다.
Dennis

@ 데니스 아, 맞아. 또 다른 미지수.
ThisSuitIsBlackNot

3

𝔼𝕊𝕄𝕚𝕟, 66-20 = 46 자 / 80-20 = 60 바이트

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

여기 사용해보십시오 - 파이어 폭스를 만.

PPCGSE에서 처음으로. 이 골프가 꽤 좋기를 바랍니다.

편집 : 실제로, 나는 CJam을 치고 있습니다 (문자 수). 그래서 꽤 좋습니다!


1
예, 누군가 내 언어를 사용하고 있습니다! 첫 번째 게시물에 나쁘지 않습니다.
Mama Fun Roll 5

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에는 정규 표현식이 없으므로 놀랍지 않습니다.
Dennis

Ohhh ... 글을 참고하세요
Conor O'Brien

2

자바 스크립트, 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

끝난. 이제 100 자입니다.
노틸러스

2

자바 스크립트, 136135-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와 구두점 ( 구두를 선택적으로 만드는 .,?0 또는 하나 이상 !)을 별도의 일치 그룹으로 일치 시킵니다.
  • . -한 번에 하나씩, 위의 패턴의 일부가 아닌 다른 문자와 일치

따라서 모든 일치 항목은 모든 사람 문자열, 선택적인 구두점과 일치하는 Amen 일치 또는 해당 구문 중 일부가 아닌 단일 문자 여야합니다. 대체 콜백에서 로직을 사용하여 문자열의 해당 부분을 저장 및 교체하고 다른 모든 문자를 빈 문자열로 변경합니다.

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

파이썬 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.