Copodope Gopolopfop


15

ภาษา: การต่อต้าน

ภาษาตลกที่จะพูดถูกสร้างขึ้นโดยใช้กระบวนการต่อไปนี้กับแต่ละคำ:

  1. วางopตามพยัญชนะแต่ละตัว ดังนั้นจะกลายเป็นCodeCopodope

ใช่แค่นั้นแหละ สำหรับจุดประสงค์ของการท้าทายyนี้เป็นพยัญชนะเสมอ

The Challenge: การคัดค้าน

ให้คำที่เป็นปฏิปักษ์คืนคำเดิม ข้อมูลที่ป้อนจะประกอบด้วยตัวอักษรเท่านั้น อักษรตัวแรกอาจเป็นตัวพิมพ์ใหญ่ คำเดิมจะไม่ว่างเปล่าและมักจะมีสระ

กรณีทดสอบ:

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
ไม่มีกรณีทดสอบของคุณที่มีสระตามด้วยopดังนั้นคำตอบตามแนวของreplace(/(.)op/, '\1')จะไม่ล้มเหลวใด ๆ ฉันขอแนะนำให้คุณเพิ่มคำเช่นhoopหรือloopedกรณีทดสอบ
Doorknob

@ mbomb007 ฉันได้เพิ่มกรณีทดสอบที่ยุ่งยากมากขึ้น
xnor

คำตอบนั้นใช้ได้กับอินพุตที่มีการเติมไว้ล่วงหน้าหรืออินพุตทั้งหมดเท่านั้นหรือไม่
CalculatorFeline

@CalculatorFeline "ได้รับคำคัดค้าน"
mbomb007

2
เราสามารถเพิ่ม "mopmopmopbopopop" เป็นกรณีทดสอบได้หรือไม่? :)
user2390246

คำตอบ:


10

V , 12 , 5 ไบต์

Í.“op

ลองออนไลน์!

00000000: cd2e 936f 70                             ...op

บันทึกแล้ว 7 ไบต์ด้วยความตระหนักของ @ Xnorว่าเนื่องจากอินพุตต้องถูกคัดค้านอยู่เสมอเราไม่จำเป็นต้องตรวจสอบสระ


อืมดูเหมือนว่าจะเป็นเรื่องยากมากที่จะเอาชนะ ...
Erik the Outgolfer

4
การถ่ายโอนข้อมูล hex: ...op ทำให้ฉันหัวเราะอย่างหนักกว่าที่ควร
nmjcman101

12

เรติน่า 9 ไบต์

(?!\G)op

ลองออนไลน์!

แทนที่จะตรวจสอบว่าตัวอักษรก่อนหน้าเป็นพยัญชนะเราเพียง แต่ตรวจสอบให้แน่ใจว่ากระแสopนั้นไม่ได้อยู่ติดกับจุดเริ่มต้นของสตริงหรือการจับคู่ก่อนหน้า กรณีเดียวที่เราสามารถจับคู่ที่ไม่ถูกต้องopคือถ้าสตริงเดิมมีop(ส่งผลopop) แต่ในกรณีนี้เราจะลบอันแรกopแทนที่จะเป็นอันที่สองและผลลัพธ์จะเหมือนกัน


สิ่งนี้จะไม่ให้คำตอบที่ไม่ถูกต้องสำหรับการป้อนข้อมูลเช่นloop?
Leo

4
@Leo loopไม่ใช่อินพุตที่ถูกต้องเนื่องจากคุณไม่สามารถรับได้จากการคัดค้านคำอื่น
Martin Ender

แต่ @MartinEnder lopoop(รุ่น oppified ของloop) ที่ถูกต้องและไม่ได้รับการ de-oppified loopไป
Imus

@Imus ไม่มีรุ่น oppified ของมีloop lopoopop
Martin Ender

ตระหนักถึงความผิดพลาดของฉันเช่นกันไม่นานหลังจากโพสต์ :) มันช้าเกินไปในการลบ จุดดี.
Imus

10

Pythonขนาด 42 ไบต์

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

ลองออนไลน์!

ถ้าฉันไม่ผิดคุณก็สามารถใช้แทนทั้งหมด?opด้วย?โดยไม่ต้องดูแลเกี่ยวกับสระ หากสตริงต้นฉบับมีอยู่opมันจะตรงกันข้ามกับopopและการแทนที่จะส่งกลับไปที่opและไม่เพิ่มเติม นี่เป็นเพราะรูปแบบการจับคู่สำหรับ?opไม่สามารถทับซ้อนกันดังนั้นจึงopถูกลบเพียงรายการเดียว

โซลูชันที่ไม่ใช่ regex ยาวกว่า 5 ไบต์

Python 47 ไบต์

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

ลองออนไลน์


3
คุณสามารถนำเข้าre หลังจากที่คุณอ้างอิงได้แล้ว
2560

4
@ Adám Python ไม่ได้ประเมินมันเมื่อมีการกำหนดฟังก์ชั่นเฉพาะเมื่อมันถูกเรียก
xnor

4
ว้าวฉันไม่เคยเห็นใครใช้ interrobang มานานแล้ว ฉันคิดว่านั่นเป็นวิธีในการแสดงความคิดเห็นของคุณเล็กน้อย
Baldrickk

1
@Baldrickk แต่ในหน่วยไบต์ interrobang มี> = ไบต์มากกว่าแค่สตริง "?!"
MilkyWay90

5

Perl 5 , 10 + 1 = 11 ไบต์

s/.\Kop//g

ลองออนไลน์!

ทำงานด้วย-p(การลงโทษ 1 ไบต์); ภาษาการเล่นกอล์ฟอาจทำ I / O โดยนัยโดยอัตโนมัติ แต่ Perl ต้องการตัวเลือกสำหรับมัน

เมื่อฉันเห็นคำตอบของ @ xnorฉันรู้ว่าสามารถปรับปรุงได้โดยใช้คุณสมบัติ regex เฉพาะ Perl s/a\Kb/c/gเทียบเท่ากับs/ab/ac/g(ในคำอื่น ๆs///เพียงแทนที่สิ่งหลังจากแรก\K) ดังนั้นนี่คือลักษณะของ Perl




3

แฮสเคลล์ (93 62 61 ไบต์)

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

ขอบคุณ @nimi ข้อเสนอแนะในความคิดเห็น!


2
เคล็ดลับ: ในขณะที่คุณกำลังใช้vและoเพียงครั้งเดียวคุณสามารถอินไลน์ได้ จะสั้นกว่าnotElem not(...elem...)คุณสามารถเปลี่ยนในยามที่&& ,กรณีสุดท้ายสำหรับสามารถเขียนเป็นa a x=xไม่จำเป็นต้องใช้ใน() x:(a r)
nimi

1
... โอ้และการทดสอบ=="op"สามารถแทนที่ด้วยรูปแบบตัวอักษร:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
nimi

Updated Thanks @nimi
Davide Spataro

1
หนึ่งไบต์มากขึ้นเพื่อประหยัด: คุณสามารถละเว้นช่องว่างระหว่างและx "
nimi

3

PHP , 36 ไบต์

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

ลองออนไลน์!


สิ่งนี้ควรจะทำงานอย่างไร
Titus

มันล้มเหลวสำหรับสองกรณีทดสอบแรก ใช้preg_replaceสำหรับแก้ไข
ติตัส

คุณสามารถบันทึก 3 ไบต์โดยการเปลี่ยนชื่อตัวแปรเป็นอักขระเดี่ยวใด ๆ $ a
junkfoodjunkie

@junkfoodjunkie $argnเป็นตัวแปรที่สงวนไว้ซึ่งเป็นประโยชน์เมื่อ PHP รันด้วย-Rตัวเลือกจากบรรทัดคำสั่ง
JörgHülsermann

อ่าโอเคไม่รู้ด้วยซ้ำ ผู้ทดสอบออนไลน์ไม่ได้มีส่วนเกี่ยวข้อง :-)
junkfoodjunkie


1

JavaScript (ES6), 35 ไบต์

เพิ่มที่จุดเริ่มต้นและเรียกเช่นf=f(arg)

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

ฉันประหลาดใจที่ไม่มีใครโพสต์โซลูชัน JavaScript เลย ....

ตัวอย่างการทดสอบ

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 ไบต์

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

ลองออนไลน์!

โปรดทราบว่าข้อมูลโค้ดนี้ต้องการแทนที่opด้วย a .แต่ในภายหลังจะมีการแทนที่ที่กำหนดซึ่งopจะถูกใส่กลับเข้าไปในสตริง คำสั่งที่สองนั้นจะมีการopแทนที่ด้วย.(และแทรก a .ลงในผลลัพธ์สุดท้าย) ดังนั้นฉันจึงใช้เครื่องหมาย\ระหว่างoและpเพื่อแบ่งรูปแบบ



0

คริสตัล 39 ไบต์

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

มันทำงานอย่างไร

opมันก็ค้นหาสำหรับแต่ละพยัญชนะตามลำดับ ถ้าเป็นเช่นนั้นให้แทนที่ลำดับนั้นด้วยพยัญชนะที่พบมาก่อน:([^aeiou]) .

ลองออนไลน์



0

Ruby , 34 27 22 + 1 = 23 ไบต์

-4 ไบต์ต้องขอบคุณ RJHunter

+1 ไบต์สำหรับ-pแฟล็ก

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

ลองออนไลน์!


ใช้ทับทิม-pตัวเลือกที่จะเสียค่าใช้จ่ายไบต์ gsubแต่อนุญาตให้สคริปต์ของคุณจะเริ่มต้นโดยตรงกับ
RJHunter


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.