Ve bütün insanlar dedi ki ...


14

Amaç Karakter içermeyen bir metin girişi verildiğinde [veya ]aşağıdaki eylemleri gerçekleştirin:

  1. Her Örneğin Amenen az bir büyük harf ile (böylece bütün örnekleri Amenhariç amen), aynı o çıktı Amen(büyük harf korumak).
  2. Her örneği için /all the people said[?: ]/i(bu bir Normal İfade), çıktı da Amen(her durumda iyidir).

Her çıktıdan sonra, herhangi bir sabit ayırıcı seçebilirsiniz , örneğin bir satırsonu, boşluk veya hiçbir şey.

Bu bir , bu yüzden bayttaki en kısa program kazanıyor.

Örnek ES'ler

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 bayt şu yapabilirsiniz "kavrama" noktalama eğer Amen, yani Amen! => Amen!, AmEN. => AmEN., I said Amen, bruh. => Amen,, ve AMEN!!!! => AMEN!!!!. !birden çok kez korunacak tek karakterdir. .?!,korunacak tek karakterler bunlar.
  • -40 bayt , hiçbir şey yerine amen, çıktı örneği varsa, rahatsız edici sözcüğün dizini yani .Heresy! at index [i][i]amen

Bonus IO'lar

Girdi ve çıktı biçimindedir input => output. (Ayırıcı burada bir boşluktur.)

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!

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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


Do amenler sırayla olmak zorunda?
Zach Gates

@ZachGates Evet.
Conor O'Brien

"Sorunlu ifadenin dizini" nasıl belirlenir?
Zach Gates

@ZachGates indeksi olmak ain amen. Örneğin, G amen => 2diliniz sıfır endeksliyse; 3 tek indeksli ise.
Conor O'Brien

AMEN!!!! => AMEN!!!!ve yine de and a final Amen... => Amen.?
ThisSuitIsBlackNot

Yanıtlar:


11

Retina , 37 bayt

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

57 bayt uzunluğunda ve -20 bayt bonusu için uygunsa kod . Çevrimiçi deneyin!

@ MartinBüttner'a Perl cevabımı Retina'ya taşıdığı için teşekkürler !

Nasıl çalışır

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
([.,?]|!*)Cevabım için noktalama eşleme deseninizi kullanabilir miyim ? Onu gördüm ve göremedim (ve kesinlikle daha iyi bir çözüm bulamadım!). Kesinlikle seninkini yenmeyecek :), ama intihal etmek istemiyorum ve bunun gibi alt sorunlara çözüm bulmak için görgü kurallarından tam olarak emin değilim.
apsillers

3
@apsillers Yasal olarak, buradaki tüm içerik CC-BY-SA olarak lisanslanmıştır, yani ilişkilendirmeyle özgürce kullanabilirsiniz. Ahlaki olarak, birisinin çözümünü, onu aşmak için başka bir dile taşımak, aşağı yukarı kaşlarını çatır, ancak birisinin cevabının küçük bir kısmını almak her zaman iyidir.
Dennis

7

VBA, 193 bayt

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

Ayrılık Yok, Normal İfade Yok, Bonus Yok. İkisi de var ama ÇOK daha uzun bir sürümü vardı.


Değiştirerek Sen Van kaybetmek 1 bayt bayt for i=1 toiçinfor i=1To
Taylor Scott

5

Perl, 51 bayt

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

Gerçek kaynak kodu 70 bayt içerir , perl -nE( +1 bayt ) ile çalıştırılmalıdır ve -20 bayt bonusu için yeterlidir .


4

Python 2, 155 bayt

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

Misal

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

3

JavaScript, 88 bayt

108 bayt - 20 bayt (noktalama işaretlerini yakalar)

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

Bu yazdırır Amen?!.girişi için Amen?!.ve Amen!giriş için Amen!!!.
Dennis

@Dennis Üzgünüm, aynı anda birden fazla noktalama işareti kullanıldığını düşünmedim, düzeltirim.
Ocak 15'te Tobsta

@Dennis Sadece düzelttim.
Tobsta

@apsillers Bunu da fark etmedim. Daha sonra düzeltmeye çalışacağım.
Tobsta

@apsillers Sabit
Tobsta

3

grep ve sed, 85 83 84 77-20 = 57 bayt

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

1
Bu Amen?giriş için yazdırılacaktır all the people said??. Bulabildiğim en iyi geçici çözüm dizeyi değiştirmekti Amenx.
Dennis

Teşekkürler @Dennis, geçici çözümünüzü kullandım ve puanı güncelledim.
Thor

1
Bu amen.giriş için yazdırılacaktır amen.. Bu sabitleme cevap kısaltır: Sadece değiştirmek grep -v '^[amen]*$'için grep \[AMEN].
HVD

@hvd: Haklısın, bu çok daha iyi :-)
Thor

3

Perl, 103-60 = 43 bayt

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

Mesele bir olarak sayılır, girdi stdin'den alınır. -20 bayt için noktalama işaretini korur ve -40 için sapkınlığı tanımlar .


Örnek Kullanımı

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

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

Mesele bir olarak sayılır, girdi stdin'den alınır. -20 bayt için noktalama işaretini korur .


Örnek Kullanımı

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

İlk çözümünüz gibi girdi için başarısız olur ha]. (Boşver, OP'nin girdinin köşeli parantez
içeremediğini

OP'nin bu soruyu cevapladığını sanmıyorum.
Dennis

@Dennis Ah, haklısın. Yine bir bilinmeyen.
ThisSuitIsBlackNot

3

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

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

Burada deneyin - yalnızca Firefox.

PPCGSE'de ilk kez. Umarım bu golf oldukça iyidir.

EDIT: Aslında, CJam (char count) yeniyorum, bu yüzden bu oldukça iyi!


1
Yay, birisi benim dilimi kullanıyor! İlk yazınız için fena değil.
Mama Fun Roll

2

CJam, 57 bayt

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

Kod 97 bayt uzunluğundadır ve -40 bayt bonusu için yeterlidir .

CJam yorumlayıcısında çevrimiçi deneyin .


1
CJam Perl'den daha uzun? o_O
Conor O'Brien

CJam'ın düzenli ifadeleri yok, bu yüzden hiç de şaşırtıcı değil.
Dennis

Ohhh ... bunu yazıyor
Conor O'Brien

2

JavaScript, 100 bayt

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

3
Kullanabilir x=prompt();ve kullanabilirsinizalert(prompt().replace(...).replace(...).match)
Conor O'Brien

Bitti. Şimdi 100 karakter uzunluğunda.
Nautilus

2

JavaScript, 136135 - 40-20 = 75 bayt

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

Açıklama:

Bu kod, sonuçları bir replacegeri aramaya besleyen üç bölümlü bir regex tarafından yönlendirilir . Parçalar:

  • all the people said[?: ]- sadece gerekli all the people saiddesenle eşleşir
  • (amen)([.,?]|!*)- her büyük / küçük harf amenve noktalama işaretini ( noktalama işaretini isteğe bağlı yapan bir .,?veya sıfır veya daha fazla !) ayrı eşleme gruplarıyla eşleştirir - noktalama düzeni için Dennis'e kredi verir
  • . - yukarıdaki kalıpların bir parçası değil, aynı anda başka bir karakterle eşleşir

Bu nedenle, herhangi bir eşleşme ya herkes için bir dize, isteğe bağlı noktalama işaretleriyle bir Amen eşleşmesi ya da bu ifadelerden herhangi birinin parçası olmayan tek bir karakter olmalıdır. Dizenin uygun bölümlerini kaydetmek ve değiştirmek ve diğer tüm karakterleri boş dizeye değiştirmek için replacer geri çağrısında mantık kullanırız.

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 bayt

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

Normal ifade yok ve Bonus 2

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.