O güzel meme kullan


12

Şu anda internette bir cümle almak, anlamını tersine çevirmek ve n'tsonunda eklemekten oluşan bir meme var . Örneğin, I am smallolurI am talln't

Meydan okuma

Zorluk uğruna bunu basitleştireceğiz: Göreviniz, bir cümle içinde bir olumsuzlama olduğunda algılamak ve sonunda 'pozitif' ile değiştirmektir n't. Kurallarda açıklanacak bazı zor kısımlar olacak.

kurallar

  • Bir String'i girdi olarak almalı ve bir String'i çıktı olarak döndürmelisiniz .
  • Giriş yalnızca küçük. ve ,noktalama işaretleri içeren bir cümle olacaktır .
  • Herhangi birini no <any_word>veya not <any_word>ile değiştirmeniz gerekir <any_word>n't.
  • no/ bir alt dize değil , notbir sözcük olmanız gerekir:none of those
  • Kelimesi zaten bitirmek durumunda n, değiştirmek zorunda n'tolan 't: no planhaline plan'tve değil plann't
  • Ne zaman noya da notherhangi bir kelime, bir noktalama işareti veya başka takip etmiyorsa no/ not, sen ile değiştirmek zorunda yesn't.
  • bileşik sözcükler bir sözcük olarak sayılır. bu yüzden no-opalt dize noiçermesine rağmen no kelimesini içermez. Yani sonuç olacak no-opve olmayacak -opn't .
  • Dilbilgisi hataları hakkında endişelenmenize gerek yoktur. Örneğin, there is no waysonuçlanacak there is wayn't.
  • Standart boşluklara izin verilmez.
  • Bu , bu yüzden en kısa kod kazanıyor.

Bu meydan okuma şimdilik görünmese bile bazı örnekler var.

Örnekler

Giriş: Codegolfing seviyorum, ama kısa programları sevmiyorum. bu cümle bir anlam ifade ediyor mu ... tabii ki hayır.
Çıktı: Ben codegolfing seviyorum, ama kısa programları sevmiyorum. bu cümle mantıklı geliyor mu?

Girdi : davet edilmediniz. Defol.
Çıktı : davet edilmiyorsunuz. Defol.

Giriş : ben iyi değilim, planım yok ve silahım yok
Çıktı : ben iyi değilim, planım var ve silahım yok

Giriş : oh hayır hayır hayır reddediyorum.
Çıktı : oh evet hayır evet reddetme.

Giriş : oh hayır hayır hayır, reddediyorum.
Çıktı : oh evet hayır evet hayır evet, reddediyorum.

Girdi : Buna inanamıyorum, kod yazamazsın.
Çıktı : Buna inanamıyorum, kod yazamazsın.

Girdi : oh hayır ... tekrar yaptı.
Çıktı : oh evet değil ... yine yaptı.

Girdi : nn't bir kelime değil, kevin. yani bu değil.
Çıktı : Bir kelime değil, Kevin. yani bu değil.

Girdi : bu herkes için değil
Çıktı : bu herkes için değil

Girdi : bu anlamsız ...
Çıktı : bu anlamsız ...


1
Giriş bölümünde, olmamalıdır I am smallhaline I am bign't?
RedClover

4
Bir nokta, "Girdi sadece [...] ile olacaktır. Ve," der. Bir diğeri "no-op" anlamına gelir. Ama bu bir "-" içerir. Öyleyse "-" girebilir veya giremez mi?
özyinelemeli

no nSonuç olmalı nn'tveya n't?
Kevin Cruijssen

no nneden ruh n't'kelimesi' çünkü nbir ile bitirmek n.
Rastgele adam

@Soaku küçük, uzun, büyük, küçük, büyük, uzun, kısa vb. Hepsi birbirinin yerine kullanılır. Soru uğruna gerçekten önemli değil . Ama küçükler için en mantıklı zıtlık büyük olurdu, evet.
Yates

Yanıtlar:


5

Retina , 86 70 65 bayt

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

@Neil sayesinde -16 bayt . @Ovs
sayesinde -5 bayt .

Çevrimiçi deneyin.

Açıklama:

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

Bence durum böyle olmamalı
Dead Possum

@DeadPossum Evet, henüz kendimi düşündüm ve zaten OP'ye girişte "nn't" mümkün olup olmadığını sordum.
Kevin Cruijssen

1
Bu da tuhaf
Dead Possum

1
Sanırım 70 bayta düştüm .
Neil

1
Lburada A-Z2 bayt üzerinde T`-'`ABve bunun tersi için bir kısayol .
Neil

4

Python 2 , 208 123 113 146 bayt

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

Çevrimiçi deneyin!

n'tVeya ile biten kelimeler nedeniyle bir demet bayt kaybettim n. Ya daha kısadır, ancak her ikisini de kullanmak daha uzundu.





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.