Monday Mini-Golf # 5: <s> Don't </s> ZRÓB to w domu


24

Minigolf w poniedziałek: seria krótkich pytań do , opublikowanych (mam nadzieję!) W każdy poniedziałek.

Czasami ludzie mają dość życiowych zasad: „nie rób tego”, „nie możesz tego robić”, „nie pozwolimy ci tego robić”. Czasami może wydawać się naprawdę ograniczające! Ale od czasu do czasu dobrze jest się trochę zabawić, więc napiszmy kod, aby zmodyfikować te reguły. A skoro już nad tym jesteśmy, równie dobrze mogą modyfikować inne negatywne aspekty. (Oczywiście te modyfikacje NIE BĘDĄ tylko tymczasowe, więc pozostawimy również oryginalne sformułowanie).

Wyzwanie

Twoim wyzwaniem jest napisanie programu lub funkcji, która wprowadza <s>przekreślenia HTML </s>wokół słów ograniczających - to znaczy słów kończących się n'tlub poprzedzających not- a po każdym z nich wstawia dodatni ekwiwalent we WSZYSTKICH CAPSACH. Na końcu, po spacji, należy uwzględnić liczbę wykonanych zamienników. Na przykład:

Please don't jump into the pool.

staje się

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

W przypadku słów kończących się na n'tlub po nich not(a także cannot), dodatnim ekwiwalentem jest wszystko do wyżej wymienionych not(z wyłączeniem spacji). Oto co mam na myśli:

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

Jest jednak kilka wyjątków. Upewnij się, że są one obsługiwane poprawnie.

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

Detale

  • Dane wejściowe nigdy nie będą zawierać żadnych białych znaków poza normalnymi spacjami (bez tabulatorów, znaków nowej linii itp.).
  • Dane wejściowe nigdy nie będą zawierać podwójnych negatywów (np we can't not do this.).
  • Jeśli znak notpojawia się bezpośrednio po znaku interpunkcyjnym lub jako część innego słowa, pozostaw to.
  • Pamiętaj, aby zachować oryginalny tekst, w tym wielkie / małe litery, między <s></s>znacznikami.
  • Jeśli chcesz, możesz użyć <strike></strike>zamiast <s></s>.

Przypadki testowe

Wejścia:

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.

Wyjścia:

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

Punktacja

To jest , więc wygrywa najkrótszy prawidłowy kod w bajtach. Tiebreaker przechodzi do przesyłania, które jako pierwsze osiągnęło końcową liczbę bajtów. Zwycięzca nie zostanie wybrany w następny poniedziałek, 26 października. Powodzenia!


@FryAmTheEggman Tak, chyba że są jeszcze inne, które warto dodać do listy. Wolę to krótko, ale czy masz jakieś sugestie?
ETHproductions

Nie, po prostu nie chciałem, żeby to cierpiało z powodu syndromu wyzwania „zmieniłeś specyfikację, teraz jest do bani”: P
FryAmTheEggman,

1
Sugerowany przypadek testowy:Can't we capitalize special cases?
DLosc

Czy musimy uważać na ciągi takie jak: Oh this? It's nothing...lub I wonder if we'll notice any words like this??
Dom Hastings,

2
Jeden <strike> nie </strike> po prostu przekształca memy w konkursy!
sty

Odpowiedzi:


7

Pip , 138 140 bajtów

Yeesh, że cannot/ knotrozróżnienie jest trudne.

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

Czyta linię ze standardowego wyjścia, wyświetla na standardowe wyjście. Wyrażenie regularne:

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

dopasowuje słowo (w tym apostrofy), po którym następuje jedna z trzech rzeczy:

  • not
  • n't
  • not bez spacji, pod warunkiem, że pierwsza połowa słowa to can

-Operatora na regex umożliwia od wielkości liter.

Mecze są zastępowane wynikiem następującej funkcji. (Uwaga: w ramach funkcji ajest całe dopasowanie i bjest to grupa przechwytywania 1).

{++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)

Po zakończeniu zmodyfikowanego ciągu, wypisujemy również spację i liczbę zamienników i.


3

GNU Sed, 321 bajtów

(w tym +1 za -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/ /

„Wymiana struny - praca dla sed!” Myślałem. Było to jednak zaskakująco trudne i ciągle infilopowałem, zastępując oryginalny tekst. I wciąż się liczy! Przynajmniej nie ma zakazu jednomyślności w pytaniu ...


2

Perl, 153 bajty

150 scenariuszy + 3 za -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
/

Chociaż teraz dopasowuję wszystkie przypadki testowe, ale regex kosztował mnie drogo ... Zastanowię się!

Przykładowe dane wyjściowe:

$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

Wow, to jest kompaktowe! Jeden problem: I'm notnie działa poprawnie - powinien być I AMzamiast I'M. Ale myślę, że po prostu trzeba zmienić I'm, aby i'mw kodzie, aby go naprawić.
DLosc

Och - spróbuj też na zdaniach takich jak Tie a slipknot in the rope.lub Would you like Pinot Noir?. Nie ma ich jeszcze w testach, ale intencją PO było wykluczenie dowolnego słowa kończącego się na „ notoprócz” cannot.
DLosc

@DLosc Doskonałe przypadki testowe! Nie mogłem wymyślić żadnych dłuższych słów not! To I'mbyła nieudana próba, dzięki za miejsce!
Dom Hastings,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.