ミームを使わないでください


12

現在、インターネット上には、文を取り、意味を逆にn'tし、最後に追加するというミームがあります。例えば、I am smallとなりI am talln't

チャレンジ

チャレンジのために、これを単純化します。あなたの仕事は、文に否定があるときはいつでも検出n'tし、最後に追加された「ポジティブ」なものに置き換えることです。ルールで説明されるいくつかのトリッキーな部分があります。

ルール

  • あなたは取らなければならない文字列として入力して、返す文字列をとして出力
  • 入力は、句読点のみを含む小文字のなります。.,
  • no <any_word>またはを置き換える必要not <any_word>があり<any_word>n'tます。
  • no/ 部分文字列notはなく単語である必要があります:で変更する必要はありませんnone of those
  • 単語がすでに終了している場合n、あなたは交換する必要がn't'tno planなるplan'tいません plann't
  • noまたはのnot後に単語、句読点、または別のno/ が続かない場合not、それをに置き換える必要がありyesn'tます。
  • 複合語は1語としてカウントされます。そのためno-op、部分文字列を含む場合でも、no という単語noは含まれません。したがって、結果はそうであり、そうではありませんno-op -opn't
  • 文法エラーについて心配する必要はありません。たとえば、there is no way結果はになりthere is wayn'tます。
  • 標準的な抜け穴は許可されていません。
  • これはなので、最短のコードがます。

この課題が今のところ明らかではない場合でも、いくつかの例があります。

入力:コードゴルフは大好きですが、短いプログラムは好きではありません。この文は理にかなっています...もちろんいいえ。
出力:私はコードゴルフを愛していますが、ショートプログラムは好きではありません。この文は理にかなっています...もちろんそうではありません。

入力:あなたは招待されていません。出て行け。
出力:あなたは招待されていません。出て行け。

入力:私は大丈夫ではない、私は計画を持っていない、私は銃を持っていない
出力:私は大丈夫、私は計画していない、私は銃を持っていない

入力:ああ、いやいやいやいやいや。
出力:ああ、はい、はい、拒否しません。

入力:ああ、いやいやいや、私は拒否します。
出力:ああ、はい、はい、はい、そうではありません、私は断ります。

入力:私はこれを信じることができません、あなたはcodegolfすることはできません。
出力:これを信じられない、あなたはcodegolfできない。

入力:ああ、いや...彼はもう一度やった。
出力:ああそうではありません...彼は再びそれをやった。

入力:nn'tは単語ではありません、kevin。これはそうではありません。
出力:ケビン、nn'tは言葉ではない。これはそうではありません。

入力:すべての人にとってクリアではないか
出力:これはすべての人にとってクリアではないか

入力:これは意味がない...
出力:これは意味がない...


1
導入では、ないはずI am smallになってI am bign't
RedClover

4
1つのポイントは、「入力は[...]のみで、。および、のみ」と言います。もう1つは「no-op」を指します。ただし、「-」が含まれています。「-」は許可されていますか?
再帰的

必要がありますno nにつながりますnn'tn't
ケビンクルーイッセン

no nn't「単語」はでn終わるため、結果はになりnます。
ランダムな男

@Soaku小さい、高い、大きい、小さい、大きい、長い、短いなどはすべて同じ意味で使用されます。質問のためにそれは本当に重要ではありませ。しかし、小さいという最も論理的な反意語は大きいでしょう。
イェーツ

回答:


5

網膜86 70 65バイト

T`-'`L
\bnot?\s+(?!not?\b)(\w+?)n?\b
$1n't
\bnot?\b
yesn't
T`L`-'

@Neilのおかげで-16バイト。@ovsの
おかげで-5バイト。

オンラインでお試しください。

説明:

T`-'`L             # Replace all "-" with "A" and all "'" with "B" to store them

\bnot?             # Then replace the word "no" or "not",
 \s+               #  followed by 1 or more whitespaces,
 (?!not?\b)(\w+?)  #  followed by a word/letter that is not "not" or "no"
 n?\b              #  minus a single trailing "n" if there are any
$1                 # with: the word/letter
 n't               #  appended with "n't"

\bnot?\b           # Then replace any remaining loose "no" or "not"
yesn't             # with "yesn't"

T`L`-'             # And finally replace all "A" with "-" and all "B" with "'" again

私が思うに、これはケースではありません
デッドポッサム

@DeadPossumええ、自分自身についてまだ考えており、入力で「できない」かどうかをOPに既に尋ねています。
ケビンクルーイッセン

1
これも奇妙です
デッドポッサム

1
私はそれを70バイトまで下げたと思う。
ニール

1
Lこれはの短縮形でA-Z、2バイト以上節約できますT`-'`AB
ニール

4

Pythonの2208 123 113 146バイト

lambda s:re.sub(r"\bnot?\b(?!['-])(\s(?!not?(\b)(?!['-]))([\w'-]+))?",lambda m:(m.group(3)or"yes")+"n't"[(m.group(3)or'')[-1:]=='n':],s)
import re

オンラインでお試しください!

n'tまたはで終わる単語が原因で大量のバイトを失いましたn。どちらかまたは短いですが、両方の処理に時間がかかりました。





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.