Copopolope Gopolopfop


15

Ngôn ngữ: Sự đối lập

Một ngôn ngữ hài hước để nói được tạo ra bằng cách áp dụng quy trình sau đây cho mỗi từ:

  1. Đặt opsau mỗi phụ âm. Vì vậy, Codetrở thànhCopodope .

Vâng, đó là nó. Với mục đích của thử thách này,y luôn luôn là một phụ âm.

Thách thức: Khử trừ

Cho một từ bị từ chối, trả lại từ gốc. Đầu vào sẽ chỉ chứa các chữ cái. Chữ cái đầu tiên có thể được viết hoa. Từ gốc sẽ không bao giờ trống và sẽ luôn chứa nguyên âm.

Các trường hợp thử nghiệm:

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
Không có trường hợp thử nghiệm nào của bạn có nguyên âm theo sau op, vì vậy câu trả lời dọc theo dòng replace(/(.)op/, '\1')sẽ không làm bất kỳ ai trong số họ. Tôi đề nghị bạn nên thêm một từ như hoophoặc loopedvào các trường hợp thử nghiệm.
Doorknob

@ mbomb007 Tôi đã thêm một số trường hợp thử nghiệm khó khăn hơn.
xnor

Có phải câu trả lời chỉ phải làm việc cho đầu vào trước hoặc tất cả đầu vào?
Máy

@CalculatorFeline "Đưa ra một từ bị từ chối"
mbomb007

2
Chúng tôi có thể thêm "mopmopmopbopopop" làm trường hợp thử nghiệm không? :)
dùng2390246

Câu trả lời:



12

Võng mạc , 9 byte

(?!\G)op

Hãy thử trực tuyến!

Thay vì kiểm tra xem ký tự trước có phải là phụ âm hay không, chúng tôi chỉ đảm bảo rằng dòng điện opkhông liền kề với đầu chuỗi hoặc khớp trước đó. Trường hợp duy nhất mà chúng ta có thể khớp với một lỗi không chính xác oplà nếu chuỗi gốc chứa một op(kết quả là opop). Nhưng trong trường hợp đó, chúng tôi sẽ chỉ loại bỏ cái đầu tiên opthay vì cái thứ hai và kết quả sẽ giống nhau.


Điều này sẽ không đưa ra một câu trả lời không chính xác cho một đầu vào như thế loopnào?
Leo

4
@Leo loopkhông phải là một đầu vào hợp lệ bởi vì bạn không thể có được nó từ việc thay thế một từ khác.
Martin Ender

@MartinEnder Nhưng lopoop(phiên bản được tối ưu hóa loop) là hợp lệ và không bị loại bỏ loop.
Imus

@Imus không, phiên bản oppified looplopoopop.
Martin Ender

cũng nhận ra lỗi của mình ngay sau khi đăng nó :) quá chậm trong việc xóa. Điểm tốt.
Imus

10

Python , 42 byte

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

Hãy thử trực tuyến!

Nếu tôi không nhầm, bạn chỉ có thể thay thế tất cả ?opvới ?mà không quan tâm đến nguyên âm. Nếu chuỗi ban đầu chứa op, thì nó được chọn thành opopvà chuỗi thay thế trả về opvà không tiếp tục. Điều này là do mẫu khớp với ?opkhông thể trùng nhau, do đó chỉ có một mẫu opbị xóa.

Một giải pháp không phải regex dài hơn 5 byte.

Python , 47 byte

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

Dùng thử trực tuyến


3
Bạn có thể nhập re sau khi tham chiếu nó‽
Adám

4
@ Adám Python không đánh giá nó khi hàm được định nghĩa, chỉ khi nó được gọi.
xnor

4
Wow, đã được một thời gian kể từ khi tôi thấy bất cứ ai sử dụng một interrobang. Tôi đoán đó là một cách để đánh giá bình luận của bạn một chút.
Baldrickk

1
@Baldrickk Nhưng tính bằng byte , interrobang có> = byte chứ không chỉ là chuỗi "?!"
MilkyWay90

5

Perl 5 , 10 + 1 = 11 byte

s/.\Kop//g

Hãy thử trực tuyến!

Chạy với -p(1 byte hình phạt); ngôn ngữ chơi gôn có thể tự động ẩn I / O, nhưng Perl cần một tùy chọn cho nó.

Khi tôi thấy câu trả lời của @ xnor , tôi nhận ra rằng nó có thể được cải thiện bằng cách sử dụng tính năng regex dành riêng cho Perl; s/a\Kb/c/gtương đương với s/ab/ac/g(nói cách khác, s///chỉ thay thế những thứ sau cái đầu tiên \K). Vì vậy, đây là cách nó trông như thế nào trong Perl.




3

Haskell (93 62 61 byte)

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

cảm ơn ý kiến ​​@nimi trong ý kiến!


2
Một số mẹo: như bạn đang sử dụng vochỉ một lần, bạn có thể nội tuyến nó. notElemngắn hơn not(...elem...). Bạn có thể thay thế &&trong một bảo vệ bằng một ,. Trường hợp cuối cùng cho acó thể được viết là a x=x. Không cần ()trong x:(a r).
nimi

1
... oh, và bài kiểm tra =="op"có thể được thay thế bằng một mẫu phù hợp theo nghĩa đen:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
nimi

Cập nhật. cảm ơn @nimi
Davide Spataro

1
Thêm một byte để lưu: bạn có thể bỏ qua khoảng trắng giữa x".
nimi

3

PHP , 36 byte

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

Hãy thử trực tuyến!


Làm thế nào là nó được chạy?
Tít

Nó không thành công cho hai trường hợp thử nghiệm đầu tiên. Sử dụng preg_replaceđể sửa chữa.
Tít

Bạn có thể lưu 3 byte bằng cách đổi tên biến thành bất kỳ ký tự đơn lẻ nào, ví dụ $ a
rác thực phẩm

@junkfoodjunkie $argnlà một biến dành riêng có sẵn khi PHP được chạy với -RTùy chọn từ dòng lệnh
Jörg Hülsermann

À, được rồi, không biết điều đó. Người kiểm tra trực tuyến không tính đến nó. :-)
rác thực phẩm


1

JavaScript (ES6), 35 byte

Thêm vào f=lúc bắt đầu và gọi như thế f(arg).

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

Tôi ngạc nhiên không ai đăng một giải pháp JavaScript nào ....

Kiểm tra đoạn trích

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 byte

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

Hãy thử trực tuyến!

Lưu ý rằng đoạn mã này muốn thay thế opbằng một ., nhưng sau đó có một sự thay thế được xác định nơi opđược đưa trở lại vào chuỗi. Lệnh thứ hai đó sẽ được opthay thế bằng một .(và do đó chèn một .kết quả cuối cùng), vì vậy tôi đã sử dụng một \giữa opđể phá vỡ mẫu.



0

Pha lê, 39 byte

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

Làm thế nào nó hoạt động

Nó chỉ đơn giản là tìm kiếm từng phụ âm, theo sau là chuỗi op. Nếu vậy, chỉ thay thế chuỗi đó bằng phụ âm được tìm thấy trước : ([^aeiou]).

Dùng thử trực tuyến





0

R , 29 byte

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

Hãy thử trực tuyến!

Giống như hầu hết các giải pháp khác ở đây, bắt nhân vật theo sau bởi op, thay thế nó bằng chính nhân vật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.