Và tất cả mọi người nói


14

Mục tiêu Đưa ra một đầu vào của văn bản không chứa các ký tự [hoặc ], thực hiện các hành động sau:

  1. Đối với mọi trường hợp Amencó ít nhất một chữ cái viết hoa (vì vậy tất cả các trường hợp Amenloại trừ amen), xuất ra cùng một Amen(giữ lại viết hoa).
  2. Đối với mọi trường hợp /all the people said[?: ]/i(đó là Biểu thức chính quy), cũng xuất ra Amen(mọi trường hợp đều ổn.)

Sau mỗi đầu ra, bạn có thể chọn bất kỳ dấu tách liên tục nào , ví dụ dòng mới, dấu cách hoặc không có gì.

Đây là một , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.

IOs ví dụ

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

Tặng kem

  • -20 byte nếu bạn có thể "lấy" dấu chấm câu mà theo Amen, tức là Amen! => Amen!, AmEN. => AmEN., I said Amen, bruh. => Amen,, và AMEN!!!! => AMEN!!!!. !là nhân vật duy nhất được bảo tồn nhiều lần. .?!,là những nhân vật duy nhất được bảo tồn như vậy.
  • -40 byte nếu, có một thể hiện của amen, đầu ra, Heresy! at index [i]thay vì không có gì, trong đó [i]chỉ mục của từ vi phạm tức là amen.

IOs tiền thưởng

Đầu vào và đầu ra có dạng input => output. (Dấu phân cách ở đây là khoảng trắng.)

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!

Bảng xếp hạng

Dưới đây là một Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

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

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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


Các amens có phải theo thứ tự?
Zach Gates

@ZachGates Có.
Conor O'Brien

Làm thế nào để bạn xác định "chỉ số của cụm từ vi phạm"?
Zach Gates

@ZachGates Để có chỉ số của atrong amen. Ví dụ, G amen => 2nếu ngôn ngữ của bạn không có chỉ mục; 3 nếu nó là một chỉ mục.
Conor O'Brien

AMEN!!!! => AMEN!!!!chưa and a final Amen... => Amen.?
ThisSuitIsBlackNot

Câu trả lời:


11

Võng mạc , 37 byte

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

Mã nếu dài 57 byte và đủ điều kiện nhận phần thưởng -20 byte . Hãy thử trực tuyến!

Cảm ơn @ MartinBüttner đã chuyển câu trả lời Perl của tôi cho Retina!

Làm thế nào nó hoạt động

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
Tôi có thể sử dụng ([.,?]|!*)mẫu kết hợp dấu chấm câu của bạn cho câu trả lời của tôi không? Tôi đã nhìn thấy nó và không thể nhìn thấy nó (và tôi chắc chắn không thể tìm thấy một giải pháp tốt hơn!). Nó chắc chắn sẽ không đánh bại bạn :), nhưng tôi không muốn đạo văn, và tôi không hoàn toàn chắc chắn về nghi thức mượn giải pháp cho các vấn đề phụ như thế này.
apsillers

3
@apsillers Về mặt pháp lý, tất cả nội dung ở đây được cấp phép là CC-BY-SA, có nghĩa là bạn có thể sử dụng nó một cách tự do với sự ghi nhận. Về mặt đạo đức, chuyển giải pháp của ai đó sang ngôn ngữ khác để vượt qua anh ta ít nhiều cũng phải nhăn mặt, nhưng lấy một phần nhỏ trong câu trả lời của ai đó luôn tốt.
Dennis

7

VBA, 193 byte

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

Không tách rời, không Regex, không thưởng. Có một phiên bản có cả Tiền thưởng nhưng dài hơn.


Bạn mất 1 byte byte bằng cách thay đổi for i=1 tothànhfor i=1To
Taylor Scott

5

Perl, 51 byte

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

Mã nguồn thực tế chứa 70 byte , nó phải được chạy với perl -nE( +1 byte ) và nó đủ điều kiện nhận phần thưởng -20 byte .


4

Python 2, 155 byte

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

Thí dụ

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

3

JavaScript, 88 byte

108 byte - 20 byte (bắt dấu chấm câu)

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

Điều này in Amen?!.cho đầu vào Amen?!., và Amen!cho đầu vào Amen!!!.
Dennis

@Dennis Xin lỗi, tôi đã không nghĩ về việc nhiều dấu chấm câu được sử dụng cùng một lúc, tôi sẽ sửa nó.
Tobsta

@Dennis Chỉ cần sửa nó.
Tobsta

@apsillers Cũng không nhận thấy điều đó. Tôi sẽ cố gắng sửa nó sau.
Tobsta

@apsillers Đã sửa lỗi
Tobsta

3

grep và sed, 85 83 84 77 - 20 = 57 byte

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

1
Điều này sẽ in Amen?cho đầu vào all the people said??. Cách giải quyết tốt nhất tôi có thể tìm thấy là thay thế chuỗi bằng Amenx.
Dennis

Cảm ơn @Dennis, tôi đã sử dụng cách giải quyết của bạn và cập nhật điểm số.
Thor

1
Điều này sẽ in amen.cho đầu vào amen.. Sửa lỗi này sẽ rút ngắn câu trả lời của bạn: chỉ cần thay đổi grep -v '^[amen]*$'thành grep \[AMEN].
hvd

@hvd: Bạn nói đúng, điều này tốt hơn nhiều :-)
Thor

3

Perl, 103 - 60 = 43 byte

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

Đếm shebang là một, đầu vào được lấy từ stdin. Duy trì dấu câu cho -20 byte và xác định dị giáo cho -40 .


Sử dụng mẫu

$ 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 byte

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

Đếm shebang là một, đầu vào được lấy từ stdin. Duy trì dấu câu cho -20 byte.


Sử dụng mẫu

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

Giải pháp đầu tiên của bạn thất bại cho đầu vào như thế nào ha]. (Nevermind, chỉ cần thấy bình luận của OP rằng đầu vào không thể chứa dấu ngoặc vuông ... câu hỏi này đã biến đổi rất nhiều lần tôi không thể theo dõi.)
ThisSuitIsBlackNot

@ ThisSuitIsBlackNot Tôi không nghĩ OP đã trả lời câu hỏi đó.
Dennis

@Dennis Ah, bạn nói đúng. Còn một ẩn số nữa.
ThisSuitIsBlackNot

3

, 66 - 20 = 46 ký tự / 80 - 20 = 60 byte

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

Hãy thử nó ở đây - chỉ Firefox.

Lần đầu tiên ở đây tại PPCGSE. Hy vọng golf này là khá tốt.

EDIT: Trên thực tế, tôi đang đánh bại CJam (tính bằng char), vì vậy điều đó khá tốt!


1
Yay, ai đó đang sử dụng ngôn ngữ của tôi! Không tệ cho bài viết đầu tiên của bạn.
Mama Fun Roll

2

CJam, 57 byte

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

Mã này dài 97 byte và đủ điều kiện nhận phần thưởng -40 byte .

Hãy thử trực tuyến trong trình thông dịch CJam .


1
CJam dài hơn Perl? o_O
Conor O'Brien

CJam không có biểu thức chính quy, vì vậy điều đó không có gì đáng ngạc nhiên.
Dennis

Ohhh ... viết nó xuống
Conor O'Brien

2

JavaScript, 100 byte

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

3
Bạn có thể sử dụng x=prompt();và bạn cũng có thể sử dụngalert(prompt().replace(...).replace(...).match)
Conor O'Brien

Làm xong. Bây giờ là 100 ký tự dài.
Nautilus

2

JavaScript, 136 135 - 40 - 20 = 75 byte

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:""))

Giải trình:

Mã này được điều khiển bởi một biểu thức chính gồm ba phần cung cấp kết quả vào một replacecuộc gọi lại . Các phần là:

  • all the people said[?: ]- chỉ cần khớp với all the people saidmẫu yêu cầu
  • (amen)([.,?]|!*)- khớp bất kỳ trường hợp amenvà dấu chấm câu nào (một .,?hoặc bằng 0 hoặc nhiều hơn !, làm cho dấu câu tùy chọn) thành các nhóm đối sánh riêng biệt - ghi có cho Dennis cho mẫu dấu chấm câu
  • . - phù hợp với bất kỳ nhân vật nào khác, không phải là một phần của các mẫu trên, một mẫu tại thời điểm đó

Do đó, bất kỳ trận đấu nào cũng phải là chuỗi toàn dân, trận đấu Amen với dấu câu tùy chọn hoặc một ký tự không phải là một phần của một trong các cụm từ đó. Chúng tôi sử dụng logic trong cuộc gọi lại thay thế để lưu và thay thế các phần thích hợp của chuỗi và thay đổi mọi ký tự khác thành chuỗi trống.

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 byte

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

Không có regex và Tiền thưởng 2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.