Thứ hai Mini-Golf # 5: <s> Đừng </ s> HÃY thử điều này ở nhà


24

Thứ hai Mini-Golf: Một loạt các câu hỏi ngắn về , được đăng (hy vọng!) Vào mỗi thứ Hai.

Đôi khi mọi người cảm thấy mệt mỏi với các quy tắc của cuộc sống: "đừng làm điều này", "bạn không thể làm điều đó", "chúng tôi sẽ không cho phép bạn làm điều này". Nó có vẻ thực sự hạn chế đôi khi! Nhưng thỉnh thoảng, thật vui khi có một niềm vui nho nhỏ, vì vậy hãy viết một số mã để sửa đổi các quy tắc này. Và trong khi chúng ta đang ở đó, cũng có thể sửa đổi tiêu cực khác. (Tất nhiên, những sửa đổi này sẽ không chỉ là tạm thời, vì vậy chúng tôi cũng sẽ để lại từ ngữ ban đầu.)

Thử thách

Thách thức của bạn là viết một chương trình hoặc chức năng đặt các dòng <s>chữ HTML </s>xung quanh các từ hạn chế, đó là các từ kết thúc n'thoặc theo sau bởi notvà sau mỗi từ này, chèn tương đương tích cực vào TẤT CẢ CAPS. Cuối cùng, sau một khoảng trắng, nên đưa vào số lần thay thế. Ví dụ:

Please don't jump into the pool.

trở thành

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

Đối với các từ kết thúc bằng n'thoặc theo sau not(cũng như cannot), tương đương tích cực là tất cả mọi thứ theo như đã nói ở trên not(không bao gồm khoảng trắng). Ý tôi là đây:

  • do not speak trở thành <s>do not</s> DO speak
  • it doesn't work trở thành it <s>doesn't</s> DOES work
  • we cannot trở thành we <s>cannot</s> CAN

Tuy nhiên, có một vài trường hợp ngoại lệ. Hãy chắc chắn rằng những điều này được xử lý đúng.

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

Chi tiết

  • Đầu vào sẽ không bao giờ chứa bất kỳ khoảng trắng nào ngoại trừ khoảng trắng thông thường (không có tab, dòng mới, v.v.).
  • Đầu vào sẽ không bao giờ chứa bất kỳ phủ định kép nào (ví dụ we can't not do this).
  • Nếu một từ notxuất hiện ngay sau dấu chấm câu, hoặc là một phần của từ khác, hãy để lại.
  • Đảm bảo giữ nguyên văn bản gốc, bao gồm cả chữ hoa / chữ thường, giữa các <s></s>thẻ.
  • Nếu bạn muốn, bạn có thể sử dụng <strike></strike>thay thế <s></s>.

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

Đầu vào:

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.

Đầu ra:

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

Chấm điểm

Đây là , vì vậy mã hợp lệ ngắn nhất tính bằng byte thắng. Tiebreaker đi đến trình mà đạt đến số byte cuối cùng của nó đầu tiên. Người chiến thắng sẽ không được chọn vào thứ Hai tuần sau, 26 tháng 10. Chúc may mắn!


@FryAmTheEggman Có, trừ khi có một số người khác đáng để thêm vào danh sách. Tôi muốn giữ nó ngắn hơn, nhưng bạn có bất cứ đề nghị?
Sản xuất ETH

Không, chỉ là không muốn điều này phải chịu đựng hội chứng thách thức "bạn đã thay đổi thông số ngay bây giờ": P
FryAmTheEggman

1
Trường hợp thử nghiệm được đề xuất:Can't we capitalize special cases?
DLosc

Chúng ta có cần cẩn thận với các chuỗi như: Oh this? It's nothing...hay I wonder if we'll notice any words like this?không?
Dom Hastings

2
Một <strike> không </ strike> DOES chỉ đơn giản là chuyển đổi memes thành các cuộc thi!
Jan

Câu trả lời:


7

Pip , 138 140 byte

Yeesh, đó cannot/ knotphân biệt là khó khăn.

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

Đọc một dòng từ stdin, đầu ra đến thiết bị xuất chuẩn. Các regex:

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

khớp với một từ (bao gồm dấu nháy đơn) theo sau bởi một trong ba điều sau:

  • not
  • n't
  • not không có khoảng trắng, với điều kiện là nửa đầu của từ can

Các -nhà điều hành trên một regex làm cho nó case-insensitive.

Các trận đấu được thay thế bằng kết quả của chức năng sau. (Lưu ý: trong chức năng, alà toàn bộ trận đấu và blà nhóm bắt giữ 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)

Khi chuỗi sửa đổi được thực hiện, chúng tôi cũng xuất ra một khoảng trắng và số lần thay thế i.


3

GNU Sed, 321 byte

(bao gồm +1 cho -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/ /

"Thay thế chuỗi - một công việc cho sed!" Tôi đã nghĩ. Nhưng điều này thật khó khăn và tôi đã tiếp tục thay thế văn bản gốc. Và đếm! Ít nhất là không có sự cấm đoán nào đối với câu hỏi ...


2

Perl, 153 byte

150 tập lệnh + 3 cho -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
/

Vì vậy, trong khi tôi phù hợp với tất cả các trường hợp thử nghiệm bây giờ nhưng regex đó đã khiến tôi phải trả giá đắt ... Tôi sẽ nghĩ về điều đó!

Ví dụ đầu ra:

$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

Wow, cái này nhỏ gọn! Một vấn đề: I'm notkhông hoạt động đúng - nó nên I AMthay thế I'M. Nhưng tôi nghĩ rằng bạn chỉ cần thay đổi I'mđể i'mtrong mã để sửa chữa nó.
DLosc

Oh - cũng vậy, hãy thử nó trên câu như Tie a slipknot in the rope.hay Would you like Pinot Noir?. Họ chưa tham gia các trường hợp thử nghiệm, nhưng ý định của OP là loại trừ bất kỳ từ nào kết thúc notngoại trừ cannot.
DLosc

@DLosc Trường hợp kiểm tra tuyệt vời! Tôi không thể nghĩ ra bất kỳ từ nào kết thúc bằng not! Đó I'mlà một sai lầm xấu, cảm ơn cho vị trí!
Dom Hastings
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.