코포 도프 고 폴로 팝


15

언어 : Oppification

재미있는 언어는 다음 단어를 각 단어에 적용하여 만듭니다.

  1. 장소 op각 자음 후. 이렇게 Code됩니다 Copodope.

그래 그거야. 이 도전의 목적을 위해 y항상 자음입니다.

도전 과제 : 탈피

oppified 단어가 주어지면 원래 단어를 반환하십시오. 입력은 문자 만 포함합니다. 첫 글자는 대문자 일 수 있습니다. 원래 단어는 절대로 비어 있지 않으며 항상 모음을 포함합니다.

테스트 사례 :

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 7

답변:



12

레티 나 , 9 바이트

(?!\G)op

온라인으로 사용해보십시오!

앞의 문자가 자음을 확인하는 대신 전류 op가 문자열의 시작 또는 이전 일치와 인접하지 않는지 확인합니다 . 우리가 잘못된 일치 수있는 유일한 경우는 op원래의 문자열이 포함 된 경우입니다 op(결과 opop). 그러나이 경우 op두 번째 대신 첫 번째 를 제거 하면 결과는 동일합니다.


이 같은 입력에 대한 잘못된 답변을 제공하지 loop않습니까?
Leo

4
@Leo loop는 다른 단어를 수정하여 얻을 수 없기 때문에 유효한 입력이 아닙니다.
Martin Ender 2016

@MartinEnder 그러나 lopoop(의 oppified 버전 loop)은 유효하며으로 de-oppified되지 않습니다 loop.
Imus

@Imus 아니오, oppified 버전은 loop입니다 lopoopop.
Martin Ender 2016

게시 후 곧 내 실수를 깨달았습니다 :) 삭제가 너무 느 렸습니다. 좋은 지적.
Imus

10

파이썬 , 42 바이트

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

온라인으로 사용해보십시오!

제가 잘못 본게 아니라면, 당신은 모든 대체 할 수 ?op와를 ?모음에 대한 걱정없이. 원래 문자열에가 포함되어 있으면으로 op바뀌고 opop대체는 op더 이상 반환 하지 않습니다. 일치하는 패턴이 ?op겹칠 수 없으므로 하나만 op제거 되기 때문 입니다.

비정규 솔루션의 길이는 5 바이트입니다.

파이썬 , 47 바이트

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

온라인으로 사용해보십시오


3
참조한 re 후에 가져올 수 있습니다.
Adám

4
@ Adám Python은 함수가 정의 된 경우에만 호출 될 때이를 평가하지 않습니다.
xnor

4
와우, 누군가가 interrobang을 사용하는 것을 본 지 오래되었습니다. 나는 그것이 귀하의 의견을 조금 골프화하는 방법이라고 생각합니다.
Baldrickk

1
@Baldrickk 그러나 바이트 단위 에서 interrobang은 문자열 "?!"보다> = 바이트를 갖습니다.
MilkyWay90

5

펄 5 , 10 + 1 = 11 바이트

s/.\Kop//g

온라인으로 사용해보십시오!

로 실행 -p(1 바이트 페널티)로 . 골프 언어는 자동으로 암시 적 I / O를 수행 할 수 있지만 Perl에는이를위한 옵션이 필요합니다.

@xnor의 답변을 보았을 때 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

업데이트되었습니다. 감사합니다 @nimi
Davide Spataro 2016 년

1
저장할 바이트가 하나 더 있습니다 : x와 사이의 공백을 생략 할 수 있습니다 ".
nimi

3

PHP , 36 바이트

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

온라인으로 사용해보십시오!


이것이 어떻게 실행됩니까?
Titus

처음 두 테스트 사례에서는 실패합니다. preg_replace수정하는 데 사용 하십시오.
Titus

변수를 하나의 문자 (예 : $ a)로 바꾸면 3 바이트를 절약 할 수 있습니다.
junkfoodjunkie

@junkfoodjunkie는 $argnPHP가 실행되는 경우 availbale이다 예약 변수 -R명령 줄에서 옵션
요 르그 Hülsermann

아, 알지 못했습니다. 온라인 테스터는이를 설명하지 않습니다. :-)
junkfoodjunkie 2018 년


1

자바 스크립트 (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.위치를 정의 교체가 이후에하지만, op문자열에 넣어 다시되고있는가. 그 두 번째 명령은 op로 대체되어 .( .결과 결과에 a 를 삽입합니다) 따라서 and \사이 에 패턴을 사용했습니다.op



0

수정, 39 바이트

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

작동 원리

단순히 각 자음을 검색 한 다음 sequence를 찾습니다 op. 그렇다면 그 순서를 이전에 찾은 자음으로 만 바꾸십시오 ([^aeiou]).

온라인으로 사용해보십시오




0

sed, 22 바이트

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

STOF에서 EOF까지 읽고 해독되지 않은 문자열을 출력
합니다. @xnor의 Python 답변 과 동일한 길이 감소 기술을 사용합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.