月曜日ミニゴルフ#5:<s>しない</ s>自宅でこれを試してください


24

月曜日のミニゴルフ:毎週月曜日に(願わくば!)投稿された一連の短い質問。

時々、人々は人生のルールにうんざりします:「これをしないでください」、「あなたはそれをすることはできません」、「私たちはあなたにこれをさせません」。時には本当に制限されているように見えるかもしれません!しかし、時々、ちょっとした楽しみがあるのは良いことなので、これらのルールを変更するためのコードを書きましょう。そして、我々がそれに取り組んでいる間、他の否定性も同様に修正するかもしれません。(もちろん、これらの変更一時的なものではないため、元の文言もそのままにします。)

チャレンジ

あなたの課題は、制限のある単語(つまり、末尾または末尾に続く単語)にHTML <s>取り消し線を付けるプログラムまたは関数を作成し、これらの各</s>単語の後に、すべての大文字に正の同等物を挿入することです。最後に、スペースの後に、行われた置換の数を含める必要があります。例えば:n'tnot

Please don't jump into the pool.

になる

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

(で終わる)で終わる、n'tまたはnot(で終わる)単語のcannot場合、正の同等物は、上記までのすべてnot(スペースを除く)です。ここに私が意味するものがあります:

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

ただし、いくつかの例外があります。これらが適切に処理されていることを確認してください。

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

詳細

  • 入力には、通常のスペース(タブ、改行などなし)以外の空白が含まれることはありません。
  • 入力に二重の負の値が含まれることはありません(例we can't not do this)。
  • not句読点の直後に、または別の単語の一部としてが表示される場合は、そのままにします。
  • <s></s>タグ間の大文字/小文字を含む元のテキストは必ず保存してください。
  • 必要に応じて、の<strike></strike>代わりに使用できます<s></s>

テストケース

入力:

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.

出力:

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

得点

これはであるため、バイト単位の最短有効コードが優先されます。Tiebreakerは、最初に最終バイトカウントに達した送信に進みます。勝者 10月26日の次の月曜日には選ばれません。幸運を祈ります!


@FryAmTheEggmanはい、リストに追加する価値のあるものがない限り。短くしたいのですが、何か提案はありますか?
ETHproductions

いいえ、これが「仕様を変更しました」というチャレンジシンドロームに悩まされたくありませんでした:P
FryAmTheEggman

1
推奨されるテストケース:Can't we capitalize special cases?
DLosc

:私たちのような文字列に注意する必要がありますOh this? It's nothing...I wonder if we'll notice any words like this?
ドムヘイスティングス

2
1つの<strike> does not </ strike>は、ミームをコンテストに変換するだけです!

回答:


7

ピップ138140バイト

うん、そのcannot/ knot区別はトリッキーです。

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から行を読み取り、stdoutに出力します。正規表現:

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

単語(アポストロフィを含む)に一致し、次の3つのいずれかが続きます。

  • not
  • n't
  • not 単語の前半が can

-正規表現の演算子は、大文字と小文字を区別しません。

一致は、次の関数の結果に置き換えられます。(注:関数内でaは、完全に一致し、bキャプチャグループ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)

変更された文字列が完了すると、スペースと置換の数も出力しますi


3

GNU Sed、321バイト

(の+1を含む-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/ /

「文字列の置換-sedの仕事です!」思った。しかし、これは驚くほど困難であり、私は元のテキストの置換に浸り続けました。そしてカウント!少なくとも質問には単項式の禁止はありません...


2

Perl、153バイト

150スクリプト+ 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
/

そのため、すべてのテストケースに一致するようになりましたが、その正規表現にはかなりの費用がかかります...考えてみます!

出力例:

$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

うわー、これはコンパクトです!1つの問題は:I'm not正常に動作しない-それはする必要がありますI AM代わりにI'M。しかし、それを修正するにはコードを変更I'mするだけでいいと思いますi'm
DLosc

ああ、また、Tie a slipknot in the rope.やのような文で試してみてくださいWould you like Pinot Noir?。彼らはまだテストケースではないですが、OPの意図は、で終わる任意の単語除外するようにしたnot除いをcannot
DLosc

@DLosc優れたテストケース!で終わる単語はもう考えられませんでしたnotI'm、スポットへの感謝悪いミスでした!
ドムヘイスティングス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.