และทุกคนพูดว่า ...


14

วัตถุประสงค์รับอินพุตของข้อความที่ไม่มีอักขระ[หรือ]ดำเนินการต่อไปนี้:

  1. สำหรับทุกอินสแตนซ์ที่Amenมีอักษรตัวใหญ่อย่างน้อยหนึ่งตัว (ดังนั้นอินสแตนซ์ทั้งหมดของการAmenยกเว้นamen) ให้แสดงผลลัพธ์ที่เหมือนกันAmen(รักษาการใช้อักษรตัวพิมพ์ใหญ่)
  2. สำหรับทุก ๆ อินสแตนซ์ของ/all the people said[?: ]/i(นั่นคือนิพจน์ปกติ) ก็เอาท์พุทAmen(กรณีใด ๆ ก็ได้)

หลังจากเอาต์พุตทุกตัวคุณสามารถเลือกตัวคั่นค่าคงที่เช่นบรรทัดใหม่เว้นวรรคหรืออะไรก็ได้

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง IOs

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

โบนัส IOs

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ต้องเป็นไปตามลำดับ?
Zach Gates

@ZachGates ใช่
Conor O'Brien

คุณจะกำหนด "ดัชนีของวลีที่ละเมิด" ได้อย่างไร
Zach Gates

@ZachGates เพื่อเป็นดัชนีของในa amenเช่นG amen => 2หากภาษาของคุณไม่มีการทำดัชนี 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 ไบต์ ลองออนไลน์!

ขอบคุณ @ 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
ฉันขอใช้([.,?]|!*)รูปแบบการจับคู่เครื่องหมายวรรคตอนของคุณสำหรับคำตอบของฉันได้ไหม ฉันเห็นมันและไม่สามารถแก้มัน (และแน่นอนฉันไม่สามารถหาทางออกที่ดีกว่า!) แน่นอนว่ามันจะไม่เอาชนะคุณ :) แต่ฉันไม่ต้องการลอกเลียนแบบและฉันก็ไม่แน่ใจในมารยาทในการยืมวิธีแก้ไขปัญหาย่อยเช่นนี้
apsillers

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

ไม่มีการแยกไม่มี Regex ไม่มีโบนัส มีรุ่นที่ได้รับโบนัสทั้งสอง แต่นานกว่านั้นมาก


คุณต้องสูญเสีย 1 ไบต์โดยเปลี่ยนfor i=1 toเป็นfor i=1To
Taylor Scott

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

@Dennis เพียงแค่แก้ไข
Tobsta

@apsillers ไม่ได้สังเกตเช่นกัน ฉันจะพยายามแก้ไขในภายหลัง
Tobsta

@apsillers Fixed
Tobsta

3

grep and 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

@ ThisSuitIsBlackNot ฉันไม่คิดว่า OP ได้ตอบคำถามนั้นแล้ว
Dennis

@Dennis Ah คุณพูดถูก ยังไม่ทราบอีก
ThisSuitIsBlackNot

3

𝔼𝕊𝕄𝕚𝕟, 66 - 20 = 46 ตัวอักษร / 80 - 20 = 60 ไบต์

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

ลองที่นี่ - Firefox เท่านั้น

ครั้งแรกที่นี่ที่ PPCGSE หวังว่ากอล์ฟนี้จะค่อนข้างดี

แก้ไข: ที่จริงแล้วฉันกำลังเต้น CJam (ในจำนวนถ่าน) ดังนั้นมันค่อนข้างดี!


1
เย่มีคนกำลังใช้ภาษาของฉัน! ไม่เลวสำหรับโพสต์แรกของคุณ
Mama Fun Roll

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 ไม่มีการแสดงออกปกติดังนั้นจึงไม่น่าแปลกใจเลย
Dennis

Ohhh ... เขียนลง
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

เสร็จสิ้น ตอนนี้มันยาว 100 ตัวอักษร
Nautilus

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

คำอธิบาย:

รหัสนี้จะขับเคลื่อนด้วย regex สามส่วนที่ฟีดผลเป็นโทรกลับreplace ชิ้นส่วนคือ:

  • all the people said[?: ]- เพียงจับคู่all the people saidรูปแบบที่ต้องการ
  • (amen)([.,?]|!*)- จับคู่กับตัวอักษรamenและเครื่องหมายวรรคตอนใด ๆ(อย่างใดอย่างหนึ่ง.,?หรือมากกว่าหรือน้อยกว่า!ซึ่งทำให้เครื่องหมายวรรคตอนเป็นตัวเลือก) ในกลุ่มการแข่งขันที่แยกต่างหาก - ให้เครดิตกับเดนนิสสำหรับรูปแบบเครื่องหมายวรรคตอน
  • . - จับคู่อักขระอื่น ๆ ไม่ใช่ส่วนหนึ่งของรูปแบบข้างต้นทีละรายการ

ดังนั้นการจับคู่ใด ๆ จะต้องเป็นสตริงแบบ all-the-people, Amen match ที่มีเครื่องหมายวรรคตอนเสริมหรืออักขระเดี่ยวที่ไม่ได้เป็นส่วนหนึ่งของวลีเหล่านั้น เราใช้ตรรกะในการเรียกกลับที่ซ้ำกันเพื่อบันทึกและแทนที่ส่วนที่เหมาะสมของสตริงและเปลี่ยนอักขระอื่น ๆ ให้เป็นสตริงว่าง

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

ไม่มี regex และโบนัส 2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.