Dan semua orang berkata ...


14

Objective Diberikan input teks yang tidak mengandung karakter [atau ], melakukan tindakan berikut:

  1. Untuk setiap instance Amendengan setidaknya satu huruf kapital (jadi semua instance Amenmengecualikan amen), output yang sama Amen(mempertahankan kapitalisasi).
  2. Untuk setiap instance dari /all the people said[?: ]/i(itu adalah Ekspresi Reguler), juga output Amen(kasus apa pun baik-baik saja.)

Setelah setiap output, Anda dapat memilih pemisah yang konstan , misalnya baris baru, spasi, atau tidak sama sekali.

Ini adalah , sehingga program terpendek dalam byte menang.

Contoh 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

Bonus

  • -20 byte jika Anda bisa "ambil" tanda baca yang mengikuti Amen, yaitu, Amen! => Amen!, AmEN. => AmEN., I said Amen, bruh. => Amen,, dan AMEN!!!! => AMEN!!!!. !adalah satu-satunya karakter yang harus dilestarikan beberapa kali. .?!,adalah satu-satunya karakter yang harus dipertahankan.
  • -40 byte jika, ada turunan dari amen, output, Heresy! at index [i]bukan apa-apa, di mana [i]indeks kata yang menyinggung yaitu amen.

IOs bonus

Input dan output dalam bentuk input => output. (Pemisah di sini adalah spasi.)

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!

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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


Apakah amenharus dalam urutan?
Zach Gates

@ZachGates Ya.
Conor O'Brien

Bagaimana Anda menentukan "indeks frasa yang menyinggung"?
Zach Gates

@ZachGates Untuk menjadi indeks amasuk amen. Misalnya, G amen => 2jika bahasa Anda diindeks nol; 3 jika diindeks satu.
Conor O'Brien

AMEN!!!! => AMEN!!!!dan belum and a final Amen... => Amen.?
ThisSuitIsBlackNot

Jawaban:


11

Retina , 37 byte

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

Kode panjangnya 57 byte dan memenuhi syarat untuk bonus -20 byte . Cobalah online!

Terima kasih kepada @ MartinBüttner karena porting jawaban Perl saya ke Retina!

Bagaimana itu bekerja

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
Bolehkah saya menggunakan ([.,?]|!*)pola kecocokan tanda baca untuk jawaban saya? Saya melihatnya dan tidak bisa melihatnya (dan saya pasti tidak bisa menemukan solusi yang lebih baik!). Ini tentu saja tidak akan mengalahkan milik Anda :), tapi saya tidak ingin menjiplak, dan saya tidak sepenuhnya yakin dengan etiket untuk meminjam solusi untuk sub-masalah seperti ini.
apsillers

3
@apsillers Secara hukum, semua konten di sini dilisensikan sebagai CC-BY-SA, artinya Anda dapat menggunakannya secara bebas dengan atribusi. Secara moral, memasukkan solusi seseorang ke bahasa lain untuk mengalahkannya sedikit banyak disukai, tetapi mengambil sebagian kecil dari jawaban seseorang selalu baik-baik saja.
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

Tanpa Pemisahan, Tanpa Regex, Tanpa Bonus. Punya versi yang mendapat kedua Bonus tetapi JAUH lebih lama.


Anda kehilangan 1 byte byte dengan mengubah for i=1 tokefor i=1To
Taylor Scott

5

Perl, 51 byte

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

Kode sumber yang sebenarnya berisi 70 byte , harus dijalankan dengan perl -nE( +1 byte ), dan memenuhi syarat untuk bonus -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

Contoh

$ 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 (menangkap tanda baca)

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

Ini mencetak Amen?!.untuk input Amen?!., dan Amen!untuk input Amen!!!.
Dennis

@ Dennis Maaf, tidak memikirkan beberapa tanda baca yang digunakan sekaligus, saya akan memperbaikinya.
Tobsta

@ Dennis Baru saja memperbaikinya.
Tobsta

@apsillers Tidak memperhatikan itu juga. Saya akan mencoba memperbaikinya nanti.
Tobsta

@apsillers Fixed
Tobsta

3

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

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

1
Ini akan mencetak Amen?untuk input all the people said??. Solusi terbaik yang bisa saya temukan adalah mengganti string dengan Amenx.
Dennis

Terima kasih @ Dennis, saya telah menggunakan solusi Anda dan memperbarui skor.
Thor

1
Ini akan mencetak amen.untuk input amen.. Memperbaiki ini akan mempersingkat jawaban Anda: ubah saja grep -v '^[amen]*$'menjadi grep \[AMEN].
hvd

@ DVD: Anda benar, ini jauh lebih baik :-)
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

Menghitung shebang sebagai satu, input diambil dari stdin. Pertahankan tanda baca untuk -20 byte, dan identifikasi bid'ah untuk -40 .


Contoh Penggunaan

$ 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

Menghitung shebang sebagai satu, input diambil dari stdin. Pertahankan tanda baca untuk -20 byte.


Contoh Penggunaan

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

Solusi pertama Anda gagal untuk input seperti ha]. (Nevermind, baru saja melihat komentar OP bahwa input tidak dapat mengandung tanda kurung ... pertanyaan ini telah berubah berkali-kali sehingga saya tidak dapat melacak.)
ThisSuitIsBlackNot

@ ThisSuitIsBlackNot Saya tidak berpikir OP telah menjawab pertanyaan itu.
Dennis

@ Dennis Ah, kau benar. Belum diketahui lainnya.
ThisSuitIsBlackNot

3

𝔼𝕊𝕄𝕚𝕟, 66 - 20 = 46 karakter / 80 - 20 = 60 byte

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

Cobalah di sini - Hanya Firefox.

Pertama kali di sini di PPCGSE. Semoga golf ini cukup bagus.

EDIT: Sebenarnya, saya mengalahkan CJam (dalam hitungan char), jadi itu cukup bagus!


1
Yay, seseorang menggunakan bahasa saya! Tidak buruk untuk posting pertama Anda.
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}

Kode panjangnya 97 byte dan memenuhi syarat untuk bonus -40 byte .

Cobalah online di penerjemah CJam .


1
CJam lebih panjang dari Perl? o_O
Conor O'Brien

CJam tidak memiliki ekspresi reguler, jadi sama sekali tidak mengejutkan.
Dennis

Ohhh ... tulis itu
Conor O'Brien

2

JavaScript, 100 byte

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

3
Anda dapat menggunakan x=prompt();dan Anda juga dapat menggunakanalert(prompt().replace(...).replace(...).match)
Conor O'Brien

Selesai Sekarang panjangnya 100 karakter.
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:""))

Penjelasan:

Kode ini digerakkan oleh regex tiga bagian yang mengumpan hasil ke replacepanggilan balik . Bagian-bagiannya adalah:

  • all the people said[?: ]- cukup cocok dengan all the people saidpola yang diperlukan
  • (amen)([.,?]|!*)- cocok dengan huruf besar-kecil amendan tanda baca (salah satu .,?atau nol atau lebih !, yang menjadikan tanda baca opsional) menjadi grup yang cocok - berikan kredit kepada Dennis untuk pola tanda baca
  • . - Cocok dengan karakter lain, bukan bagian dari pola di atas, satu pada saat itu

Oleh karena itu, kecocokan apa pun harus berupa string semua-orang, kecocokan Amin dengan tanda baca opsional, atau karakter tunggal yang bukan bagian dari salah satu dari frasa tersebut. Kami menggunakan logika dalam callback replacer untuk menyimpan dan mengganti bagian string yang sesuai, dan mengubah setiap karakter lain menjadi string kosong.

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

Tanpa regex, dan Bonus 2

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.