Copodope Gopolopfop


15

Dil: Muhalefet

Konuşmak için komik bir dil, her kelimeye aşağıdaki işlemi uygulayarak oluşturulur:

  1. Yerleştirin opher ünsüz sonra. Böylece Codeolur Copodope.

Evet, bu o. Bu zorluğun amacı yiçin her zaman bir ünsüzdür.

Zorluk: Muhalefetin Reddi

Rakip bir kelime verildiğinde orijinal kelimeyi geri getirin. Giriş yalnızca harf içerecektir. İlk harf büyük yazılabilir. Orijinal kelime asla boş olmaz ve her zaman bir sesli harf içerir.

Test Durumları:

Oppified      ->         Original 
a                        a
I                        I
itop                     it
opop                     op
Opop                     Op
popopop                  pop
Copopop                  Cop
opopopop                 opop
Kopicopkop               Kick
Asopia                   Asia
soptopopop               stop
hopoopopsop              hoops
hopoopopedop             hooped
ooooohop                 oooooh
aaaopopaaa               aaaopaaa
Popopopsopicoplope       Popsicle
gopaloplopopopinopgop    galloping
aopopbopopopcopopop      aopbopcop

8
Test durumlarınızın hiçbirinde bir sesli harf bulunmaz op, bu nedenle satırlardaki bir cevap replace(/(.)op/, '\1')hiçbirinde başarısız olmaz. Sana böyle bir kelime eklemek öneririz hoopveya loopedtest durumlarda.
Kapı tokmağı

@ mbomb007 Daha zor test senaryoları ekledim.
xnor

Cevabın yalnızca önceden belirlenmiş girdiler veya tüm girdiler için çalışması mı gerekiyor?
CalculatorFeline

@CalculatorFeline "Rakip bir kelime verildi"
mbomb007

2
Test durumu olarak "mopmopmopbopopop" ekleyebilir miyiz? :)
user2390246

Yanıtlar:



12

Retina , 9 bayt

(?!\G)op

Çevrimiçi deneyin!

Önceki karakterin ünsüz olduğunu kontrol etmek yerine, akımın opdizenin başlangıcına veya önceki eşleşmeye bitişik olmadığından emin oluruz . Yanlış eşleşebileceğimiz tek durum op, orijinal dize bir op(sonuç opop) içeriyorsa . Ancak bu durumda opikincisi yerine ilkini kaldırırız ve sonuç aynı olur.


Bu gibi bir girdi için yanlış bir cevap vermeyecek loopmiydi?
Leo

4
@Leo loopgeçerli bir girdi değil çünkü başka bir sözcüğe karşı çıkmaktan alamıyorsunuz.
Martin Ender

@MartinEnder Ama lopoop(karşıt versiyonu loop) geçerlidir ve karşı çıkmaz loop.
Imus

Hayır @Imus ait oppified versiyonu loopolan lopoopop.
Martin Ender

kısa bir süre sonra hatamı fark etti :) silme çok yavaş oldu. İyi bir nokta.
Imus

10

Python , 42 bayt

lambda s:re.sub('(.)op',r'\1',s)
import re

Çevrimiçi deneyin!

Yanılmıyorsam, sadece tüm yerini alabilir ?opile ?sesli harf konusunda endişe etmeden. Orijinal dize içeriyorsa op, buna karşıdır opopve değiştirme onu opbaşka bir yere döndürür . Bunun nedeni, desen eşleşmelerinin ?opçakışamamasıdır, bu nedenle yalnızca bir optanesi kaldırılır.

Normal olmayan bir çözüm 5 bayt daha uzundur.

Python , 47 bayt

f=lambda s:s and s[0]+f(s[1+2*(s[1:3]=='op'):])

Çevrimiçi deneyin


3
Referans verdikten re sonra içe aktarabilirsiniz‽
Adám

4
@ Adám Python, işlev tanımlandığında, yalnızca çağrıldığında bunu değerlendirmez.
xnor

4
Vay be, kimsenin interrobang kullandığını gördüğümden bu yana bir süre geçti. Sanırım bu biraz yorumunuzu golf oynamak için bir yol.
Baldrickk

1
@Baldrickk Ama baytlarda , interrobang "=!"
MilkyWay90

5

Perl 5 , 10 + 1 = 11 bayt

s/.\Kop//g

Çevrimiçi deneyin!

Şununla koş -p(1 bayt ceza); golf dilleri otomatik olarak örtük G / Ç yapabilir, ancak Perl bunun için bir seçeneğe ihtiyaç duyar.

@ Xnor cevabını gördüğümde , bunun Perl'e özgü normal ifade özelliği kullanılarak geliştirilebileceğini fark ettim; s/a\Kb/c/geşdeğerdir s/ab/ac/g(başka bir deyişle, s///sadece birinciden sonraki şeylerin yerini alır \K). Perl'de işte böyle görünüyor.



3

Git , 103 92 bayt

Derlemelisiniz ... Git yerleşik işlevlerin garip isimleri var. : P

import."regexp"
func f(s string)string{return MustCompile("(.)op").ReplaceAllString(s,"$1")}

Çevrimiçi deneyin!


3

Haskell (93 62 61 Bayt)

a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
a(x:r)=x:a r
a x=x

yorumlarda @ nimi önerileri sayesinde!


2
Bazı ipuçları: kullandığınız gibi vve osadece bir kez, satır içi yapabilirsiniz. notElemdaha kısadır not(...elem...). Muhafızdaki yerini &&bir ile değiştirebilirsiniz ,. İçin son durum aolarak yazılabilir a x=x. Gerek yok ()içinde x:(a r).
nimi

1
... oh, ve test, =="op"gerçek bir desen eşleşmesi ile değiştirilebilir:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
nimi

Güncellenmiş. thanks @nimi
Davide Spataro

1
Bir daha bayt kaydetmek için: Eğer arasındaki boşluğu atlayabilirsiniz xve ".
nimi

3

PHP , 36 bayt

<?=preg_replace("#.\Kop#","",$argn);

Çevrimiçi deneyin!


Bunun nasıl yürütülmesi gerekiyor?
Titus

İlk iki test vakası başarısız olur. preg_replaceDüzeltmek için kullanın .
Titus

Değişkeni herhangi bir tek karakterle yeniden adlandırarak 3 bayt kaydedebilirsiniz, örneğin $ a
junkfoodjunkie 7:17

@junkfoodjunkie $argn, PHP -Rkomut satırından Option ile çalıştırıldığında kullanılabilen ayrılmış bir değişkendir
Jörg Hülsermann

Ah, tamam, bilmiyordum. Çevrimiçi testçi bunu hesaba katmaz. :-)
junkfoodjunkie


1

JavaScript (ES6), 35 bayt

f=Başlangıçta ekleyin ve çağırın f(arg).

s=>s.replace(/([^aeiou])op/gi,"$1")

Hiç kimse henüz bir JavaScript çözümü yayınladı şaşırdım ....

Test Parçacığı

let f=
s=>s.replace(/([^aeiou])op/gi,"$1")

console.log("a" + " -> " + f("a"));
console.log("I" + " -> " + f("I"));
console.log("itop" + " -> " + f("itop"));
console.log("opop" + " -> " + f("opop"));
console.log("Opop" + " -> " + f("Opop"));
console.log("popopop" + " -> " + f("popopop"));
console.log("Copopop" + " -> " + f("Copopop"));
console.log("opopopop" + " -> " + f("opopopop"));
console.log("Kopicopkop" + " -> " + f("Kopicopkop"));
console.log("Asopia" + " -> " + f("Asopia"));
console.log("soptopopop" + " -> " + f("soptopopop"));
console.log("hopoopopsop" + " -> " + f("hopoopopsop"));
console.log("hopoopopedop" + " -> " + f("hopoopopedop"));
console.log("ooooohop" + " -> " + f("ooooohop"));
console.log("aaaopopaaa" + " -> " + f("aaaopopaaa"));
console.log("Popopopsopicoplope" + " -> " + f("Popopopsopicoplope"));
console.log("gopaloplopopopinopgop" + " -> " + f("gopaloplopopopinopgop"));
console.log("aopopbopopopcopopop" + " -> " + f("aopopbopopopcopopop"));



0

/// , 18 bayt

/op/.//../o\p//.//

Çevrimiçi deneyin!

Bu pasajı değiştirmek istediği Not opa ile .nerede tanımlanmış bir yedek var daha sonra, ancak opdizeye koymak geri ediliyor. Bu ikinci yönerge opyerine bir olurdu .(ve böylece sonuçta bir a ekleyin .), bu yüzden desen \arasında kırmak için ove arasında bir kullandım p.



0

Kristal, 39 Bayt

def o(s)s.gsub(/([^aeiou])op/,"\\1")end

Nasıl çalışır

Sadece her ünsüzü arar, ardından sıra gelir op. Eğer öyleyse, ünsüz önce buldum sadece o diziyi değiştirin: ([^aeiou]).

Çevrimiçi deneyin



0

Yakut , 34 27 22 + 1 = 23 bayt

RJHunter sayesinde -4 bayt.

-pBayrak için +1 bayt .

$_.gsub!(/(.)op/,'\1')

Çevrimiçi deneyin!


Ruby'nin -pseçeneğini kullanmak bir bayta mal olur, ancak komut dosyanızın doğrudan başlamasına izin verir gsub.
RJHunter

0

sed, 22 bayt

sed -E 's/(.)op/\1/g'

STDIN'den EOF'a kadar okur ve rakipsiz dize çıktılar @ xnor'ın Python yanıtında
aynı uzunluk azaltma tekniğini kullanır


0

R , 29 bayt

gsub("(.)op","\\1",scan(,''))

Çevrimiçi deneyin!

Buradaki diğer çözümlerin çoğunda olduğu gibi, karakteri ve ardından op'u yakalar, karakterin kendisi ile değiştirir.

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.