월요일 미니 골프 # 5 : <s> 안함 </ s> 집에서 시도하지 마십시오


24

Monday Mini-Golf : 매주 월요일에 게시 되는 일련의 짧은 질문입니다.

때때로 사람들은 삶의 규칙에 질리게됩니다. 때로는 제한적인 것처럼 보일 수 있습니다! 그러나 때때로 재미를 느끼는 것이 좋으므로 이러한 규칙을 수정하는 코드를 작성해 보겠습니다. 그리고 우리가 그 동안 다른 부정성을 수정하는 것도 가능합니다. (물론 이러한 수정 사항 일시적인 것이 아니므로 원래 문구도 그대로 둡니다.)

도전

당신의 도전은 프로그램이나 풋 HTML 것을 기능을 작성하는 것입니다 <s>취소 선을</s> 제한 단어-이다, 즉 주위가 끝나는 n't또는 다음 not이들 각각 후, 모든 모자에 긍정적 동등한를 삽입 - 그리고 있습니다. 마지막에는 공백 후 교체 횟수가 포함되어야합니다. 예를 들면 다음과 같습니다.

Please don't jump into the pool.

된다

Please <s>don't</s> DO jump into the pool. 1

(뿐만 아니라 ) 로 끝나 n't거나 뒤에 오는 단어의 경우 양의 값은 위에서 언급 한 것 (공백 제외)까지입니다. 여기 내가 의미하는 바가있다 :notcannotnot

  • do not speak 된다 <s>do not</s> DO speak
  • it doesn't work 된다 it <s>doesn't</s> DOES work
  • we cannot 된다 we <s>cannot</s> CAN

그러나 몇 가지 예외가 있습니다. 이것들이 올바르게 취급되는지 확인하십시오.

can't -> <s>can't</s> CAN
won't -> <s>won't</s> WILL
ain't -> <s>ain't</s> AM
shan't -> <s>shan't</s> SHALL
I'm not -> <s>I'm not</s> I AM
you're not -> <s>you're not</s> YOU ARE

세부

  • 입력에는 일반 공백 (탭, 줄 바꿈 등)을 제외한 공백이 포함되지 않습니다.
  • 입력에는 이중 음수가 포함되지 않습니다 (예 :) we can't not do this.
  • A는 경우 not즉시 구두점 후, 또는 다른 단어의 일부로 나타납니다, 그것은 할 수있는 상태로 둡니다.
  • <s></s>태그 사이에 대문자 / 소문자를 포함한 원본 텍스트를 유지하십시오 .
  • 원하는 경우 <strike></strike>대신 사용할 수 있습니다 <s></s>.

테스트 사례

입력 :

I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
Tie a slipknot in the rope.
Would you like Pinot Noir?
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.

출력 :

I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1

채점

이것은 이므로 바이트 단위의 가장 짧은 유효한 코드가 이깁니다. Tiebreaker는 최종 바이트 수에 먼저 도달 한 제출에갑니다. 우승자 다음주 10 월 26 일 월요일에 선정 되지 않습니다 . 행운을 빌어 요!


@FryAmTheEggman 예, 다른 사람이 목록에 추가 할 가치가 없다면 말입니다. 차라리 짧게 유지하고 싶지만 제안 사항이 있습니까?
ETHproductions

아니, 그냥이가 고생하고 싶지 않았다 도전 증후군 "당신이 사양을 변경하는 것은 지금은 짜증"P
FryAmTheEggman

1
권장 테스트 사례 :Can't we capitalize special cases?
DLosc

우리는 같은 문자열을 조심해야합니까 : Oh this? It's nothing...I wonder if we'll notice any words like this??
Dom Hastings

2
하나의 <strike>는 </ strike>하지 않습니다. 단순히 밈을 컨테스트로 변환합니다!
Jan

답변:


7

, 138140 바이트

Yeesh, 그 cannot/ knot구별이 까다 롭습니다.

x:"ca wo ai sha i'm you're"^sY"CAN0WILL0AM0SHALL0I AM0YOU ARE"^0OqR-`([\w']+)( no|n'|(?<=can)no)t\b`{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}s.i

stdin에서 행을 읽고 stdout으로 출력합니다. 정규식 :

`([\w']+)( no|n'|(?<=can)no)t\b`

단어 (아포스트로피 포함)와 다음 세 가지 중 하나가 일치합니다.

  • not
  • n't
  • not 단어의 첫 번째 절반이 있다면 공백없이 can

-정규 표현식 의 연산자는 대소 문자를 구분하지 않습니다.

일치는 다음 기능의 결과로 대체됩니다. (참고 : 함수 내에서 a전체 일치하며 b캡처 그룹 1입니다.)

{++i"<s>".a."</s>".s.((yx@?LCb)|UCb)}
 ++i                                   Increment counter
    "<s>".a."</s>"                     Return entire match wrapped in HTML tags...
                  .s.(             )   plus space, plus the following:
                           LCb         Lowercase first capture group
                        x@?            Find its index in list x of special cases (nil if
                                         not in list)
                      (y      )        Use that as index into list y of replacements
                               |UCb    If it wasn't a special case, this is nil, and we
                                         instead use uppercase(b)

수정 된 문자열이 완료되면 공백과 교체 횟수도 출력합니다 i.


3

GNU Sed, 321 바이트

(에 대한 +1 포함 -r)

:
s!(can('|no)t)([^<])!<s>\1</s> CAN\3!i
s!(won't)([^<])!<s>\1</s> WILL\2!i
s!(ain't)([^<])!<s>\1</s> AM\2!i
s!(shan't)([^<])!<s>\1</s> SHALL\2!i
s!(I'm not)([^<])!<s>\1</s> I AM\2!i
s!(you're not)([^<])!<s>\1</s> YOU ARE\2!i
t
s!(([^ .!?]+)(n't| not))([^<])!<s>\1</s> \U\2\4!i
t
h
s/1//g
s/<s>/1/g
s/[^1]//g
x
G
s/\n/ /

"문자열 교체-sed를위한 직업!" 나는 생각했다. 그러나 이것은 놀랍게도 어려웠으며 원본 텍스트를 대체하여 계속 사용했습니다. 그리고 계산! 적어도 질문에 단항에 대한 금지는 없습니다 ...


2

펄, 153 바이트

150 스크립트 + 3 -p

$c=0|s!\b((ca)nnot|([\w']+)(?: not|n't))\b!"<s>$&</s> ".uc({ai,AM,ca,CAN,wo,WILL,sha,SHALL,"i'm","I AM","you're","YOU ARE"}->{lc$+}||$+)!egi;s/
/ $c
/

그래서 지금은 모든 테스트 사례와 일치하지만 정규 표현식으로 인해 비용이 많이 들었습니다 ... 생각하겠습니다!

출력 예 :

$perl -p can.pl <<< "I'm sorry, but you can't do that.
Driving on the beach isn't allowed.
Driving on the beach is not allowed.
Please don't jump in; I cannot imagine what might come of that.
Don't worry; we won't get into trouble.
I'm not perfect, but you're not either.
You shan't do it 'cause I ain't doin' it!
Can't we capitalize special cases?
I don't like the words can't, shan't, won't, don't, ain't, or ppcgn't.
Oh, this? It's nothing.
This sentence contains none of the replacement words. Not even knot or ca't.
This sentence doesn't contain one of the replacement words.
Tie a slipknot in the rope.
Would you like Pinot Noir?
You cannot be serious\!"
I'm sorry, but you <s>can't</s> CAN do that. 1
Driving on the beach <s>isn't</s> IS allowed. 1
Driving on the beach <s>is not</s> IS allowed. 1
Please <s>don't</s> DO jump in; I <s>cannot</s> CAN imagine what might come of that. 2
<s>Don't</s> DO worry; we <s>won't</s> WILL get into trouble. 2
<s>I'm not</s> I AM perfect, but <s>you're not</s> YOU ARE either. 2
You <s>shan't</s> SHALL do it 'cause I <s>ain't</s> AM doin' it! 2
<s>Can't</s> CAN we capitalize special cases? 1
I <s>don't</s> DO like the words <s>can't</s> CAN, <s>shan't</s> SHALL, <s>won't</s> WILL, <s>don't</s> DO, <s>ain't</s> AM, or <s>ppcgn't</s> PPCG. 7
Oh, this? It's nothing. 0
This sentence contains none of the replacement words. Not even knot or ca't. 0
This sentence <s>doesn't</s> DOES contain one of the replacement words. 1
Tie a slipknot in the rope. 0
Would you like Pinot Noir? 0
You <s>cannot</s> CAN be serious\! 1

와우, 이것은 컴팩트하다! 한 가지 문제 : I'm not제대로 작동하지 않습니다 . I AM대신 이어야합니다 I'M. 하지만 당신은 단지 변화에 필요가 있다고 생각 I'mi'm그것을 해결하기 위해 코드에서.
DLosc

아, Tie a slipknot in the rope.또는 같은 문장에서 시도해보십시오 Would you like Pinot Noir?. 아직 테스트 사례가 아니지만 OP의 의도는을 (를) not제외한으로 끝나는 단어는 제외하는 것이 었습니다 cannot.
DLosc

@DLosc 우수한 테스트 사례! 더 이상 끝나는 단어는 생각할 수 없었습니다 not! 그 I'm자리에 감사드립니다!
Dom Hastings
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.