Pazartesi Mini Golf # 5: <s> Yapma </s> Bunu evde deneyin


24

Pazartesi Mini Golf: Her pazartesi (umarım!) Yayınlanan bir dizi kısa sorusu.

Bazen insanlar hayatın kurallarından sıkılırlar: "bunu yapma", "bunu yapamazsın", "bunu yapmana izin vermeyiz". Bazen çok kısıtlayıcı görünebilir! Ama her zaman ve sonra, biraz eğlenmek güzel, bu yüzden bu kuralları değiştirmek için bazı kodlar yazalım. Ve biz onun yanındayken, diğer olumsuzlukları da değiştirebiliriz. (Tabii ki, bu değişiklikler sadece geçici olmayacak , bu yüzden orijinal ifadeleri de bırakacağız.)

Meydan okuma

Buradaki zorluk, HTML’yi kısıtlayıcı kelimelerin etrafına <s>çizen bir program veya işlev yazmaktır </s>- yani, biten n'tveya ardından gelen kelimeler not- ve her birinin ardından , TÜM CAPS’a pozitif eşdeğerini ekler. Sonunda, bir boşluktan sonra, yapılan değiştirme sayısı dahil edilmelidir. Örneğin:

Please don't jump into the pool.

olur

Please <s>don't</s> DO jump into the pool. 1

İçinde sona eren n'tveya sonra gelen not(ve de cannot) kelimeler için pozitif eşdeğer yukarıda belirtilenlere kadar olan her şeydir not(boşluklar hariç). İşte demek istediğim:

  • do not speak olur <s>do not</s> DO speak
  • it doesn't work olur it <s>doesn't</s> DOES work
  • we cannot olur we <s>cannot</s> CAN

Ancak, birkaç istisna vardır. Bunların doğru kullanıldığından emin olun.

can't -> <s>can't</s> CAN
won't -> <s>won't</s> WILL
ain't -> <s>ain't</s> AM
shan't -> <s>shan't</s> SHALL
I'm not -> <s>I'm not</s> I AM
you're not -> <s>you're not</s> YOU ARE

ayrıntılar

  • Girdi, normal boşluklar dışında hiçbir boşluk içermez (sekme, yeni satır vb.)
  • Giriş hiçbir zaman çift negatif içermez (örn. we can't not do this).
  • notNoktalama işaretinin hemen ardından veya başka bir kelimenin bir parçası olarak bir belirirse, bırakın.
  • <s></s>Etiketler arasında büyük / küçük harf dahil orijinal metni koruduğunuzdan emin olun .
  • İsterseniz <strike></strike>, yerine kullanabilirsiniz <s></s>.

Test-vakalar

girişler:

I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
Tie a slipknot in the rope.
Would you like Pinot Noir?
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.

Çıktılar:

I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1

puanlama

Bu , bayt cinsinden geçerli en kısa koddur. Tiebreaker ilk önce son bayt sayısına ulaşan gönderime gidiyor. Kazanan , 26 Ekim Pazartesi günü seçilmeyecek. 26 İyi şanslar!


@FryAmTheEggman Evet, listeye eklenmeye değer başkaları yoksa. Kısa tutmayı tercih ederim ama önerin var mı?
ETHProductions 20:15

Hayır, sadece bu muzdarip istemiyordu meydan sendromu "Eğer spec değiştirdi şimdi o emmek": P
FryAmTheEggman

1
Önerilen test durumu:Can't we capitalize special cases?
DLosc

Aşağıdaki gibi karakterlerle dikkatli olmak zorunda mıyız: Oh this? It's nothing...veya I wonder if we'll notice any words like this??
Dom Hastings

2
Bir <strike> yapmaz </strike> DOES, memleri yarışmaya dönüştürür!
Ocak

Yanıtlar:


7

Pip , 138 140 bayt

Yeesh, bu cannot/ knotayrım yanıltıcıdır.

x:"ca wo ai sha i'm you're"^sY"CAN0WILL0AM0SHALL0I AM0YOU ARE"^0OqR-`([\w']+)( no|n'|(?<=can)no)t\b`{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}s.i

Stdin'den bir satır okur, stdout'a çıktı verir. Regex:

`([\w']+)( no|n'|(?<=can)no)t\b`

bir kelime (kesme işareti dahil) ve ardından üç şeyden biri ile eşleşir:

  • not
  • n't
  • not boşluk olmadan, kelimenin ilk yarısı can

-Bir regex üzerinde operatör küçük harf duyarsız hale getirir.

Maçlar aşağıdaki fonksiyonun sonucu ile değiştirilir. (Not: işlevin içinde, atüm eşleşme ve bgrup 1'i yakalama)

{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}
 ++i                                   Increment counter
    "<s>".a."</s>"                     Return entire match wrapped in HTML tags...
                  .s.(             )   plus space, plus the following:
                           LCb         Lowercase first capture group
                        x@?            Find its index in list x of special cases (nil if
                                         not in list)
                      (y      )        Use that as index into list y of replacements
                               |UCb    If it wasn't a special case, this is nil, and we
                                         instead use uppercase(b)

Değiştirilen dize yapıldıktan sonra, ayrıca bir boşluk ve değiştirme sayısını da veririz i.


3

GNU Sed, 321 bayt

(için +1 dahil -r)

:
s!(can('|no)t)([^<])!<s>\1</s> CAN\3!i
s!(won't)([^<])!<s>\1</s> WILL\2!i
s!(ain't)([^<])!<s>\1</s> AM\2!i
s!(shan't)([^<])!<s>\1</s> SHALL\2!i
s!(I'm not)([^<])!<s>\1</s> I AM\2!i
s!(you're not)([^<])!<s>\1</s> YOU ARE\2!i
t
s!(([^ .!?]+)(n't| not))([^<])!<s>\1</s> \U\2\4!i
t
h
s/1//g
s/<s>/1/g
s/[^1]//g
x
G
s/\n/ /

"Dize değiştirme - sed için bir iş!" Düşündüm. Ancak bu şaşırtıcı bir şekilde zordu ve orijinal metnin yerine geçmeye devam ettim. Ve sayıyor! En azından, soruda tekdüze yasak yok ...


2

Perl, 153 bayt

İçin 150 komut dosyası + 3 -p

$c=0|s!\b((ca)nnot|([\w']+)(?: not|n't))\b!"<s>$&</s> ".uc({ai,AM,ca,CAN,wo,WILL,sha,SHALL,"i'm","I AM","you're","YOU ARE"}->{lc$+}||$+)!egi;s/
/ $c
/

Şimdi tüm test davalarını eşleştirmeme rağmen, bu regex bana pahalıya mal oldu ... Bunu düşüneceğim!

Örnek çıktı:

$perl -p can.pl <<< "I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.
Tie a slipknot in the rope.
Would you like Pinot Noir?
You cannot be serious\!"
I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
You <s>cannot</s> CAN be serious\! 1

Vay, bu kompakt! Bir sorun: I'm notdüzgün çalışmıyor - I AMyerine olmalı I'M. Ama sadece değişim gerek I'miçin i'mbunu düzeltmek için kod.
DLosc

Oh - Ayrıca, Tie a slipknot in the rope.ya da gibi cümlelerde deneyin Would you like Pinot Noir?. Henüz testlerde bulunmuyorlar, ancak OP'nin niyeti notdışında biten herhangi bir kelimeyi dışlamaktı cannot.
DLosc

@DLosc Mükemmel test durumları! Artık biten bir kelime daha düşünemiyorum not! I'm, Nokta için teşekkürler kötü bir bayan oldu!
Dom Hastings
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.