Bộ giải mã Acme Canine của giáo sư Schwartzman 2000


31

Giới thiệu

Chúng tôi - đặc biệt là những người đam mê trong số chúng tôi, những người có xu hướng trở thành người hâm mộ - tất cả đều nhớ đến bộ phim hoạt hình Far Side cũ này :

Hey! Hey! Hey!

Rõ ràng, Giáo sư Schwartzman có thể đã cải thiện các kỹ năng lập trình của mình chỉ một chút nữa trước khi ông đưa phát minh của mình vào sử dụng. Nhưng bạn có thể tự sao chép nó ... sử dụng càng ít byte càng tốt không?

Thông số kỹ thuật đầu vào

Bạn phải tạo một tập lệnh chuyển âm thanh của chó thành "Hey" có ngữ điệu phù hợp. Đây là golf mã thuần túy; số byte thấp nhất sẽ thắng.

Đầu vào của bạn sẽ bao gồm một số kết hợp các mã thông báo sau:

  • Bark, Baark, Baaark, Baaaark, ... (có nghĩa là, B*rk có ít nhất 1 athay thế các dấu hoa thị)
  • Woof, Wooof, Woooof, ... ( W*fvới ít nhất 2 o s thay thế các dấu hoa thị)
  • Grr, Grrr, Grrrr, ..., ( Gtiếp theo ít nhất 2 r s)
  • Bất kỳ số ký tự (dấu chấm .), !(dấu chấm than) và / hoặc ?(dấu hỏi), có thể xuất hiện ở bất cứ đâu trong đầu vào

Lưu ý, một lần nữa, mã thông báo dựa trên WoofGrrdựa trên luôn yêu cầu ít nhất hai o s và rs tương ứng;Wofkhông phảiGr là mã thông báo hợp lệ.

Không có giới hạn về thời gian mã thông báo có thể tồn tại (ví dụ: có bao nhiêu lần lặp lại acó thể có trong Barkmã thông báo); tuy nhiên, bộ giải mã của bạn chỉ cần hoạt động chính xác cho các mã thông báo đầu vào có tối đa 10 tổng a, os hoặc rs để vượt qua thử thách này.

Thông số đầu ra

Trung thành với thiết kế của Schwartzman, chương trình giải mã răng nanh của bạn phải xử lý nó thành văn bản đầu ra như sau:

  • Bark, WoofGrr trở thành Hey;
  • Baark, WooofGrrrtrở thànhHeyy;
  • Baaark, WoooofGrrrr trở thành Heyyy; v.v.
  • Đối với tất cả các Barkmã thông báo dựa trên số lượng, số ys trong đầu raHey mã thông báo dựa trên phải bằng số lượng as;
  • Đối với tất cả các Woofmã thông báo dựa trên tất cả , số lượng ys trong Heymã thông báo dựa trên đầu ra phải nhỏ hơn một một số số lượng os;
  • Đối với tất cả các Grrmã thông báo dựa trên tất cả , số lượng ys trong Heymã thông báo dựa trên đầu ra phải nhỏ hơn một một số số lượng rs;
  • Tất cả các dấu câu ( ., !?) được giữ nguyên.

Nhớ thả một cái ytừ đầu ra cho Woofs và Grrs! Đầu vào Baaaaaaaark?, với 8 agiây, sẽ trở thành Heyyyyyyyy?, với một bộ 8 ygiây phù hợp . Tuy nhiên, Woooooooof?chỉ trở thành Heyyyyyyy?, với 7 ys.

Một lần nữa, nếu bạn có thể khiến chương trình của mình hoạt động với mã thông báo đầu vào có kích thước không giới hạn, thì thật tuyệt, nhưng với mục đích của thử thách này, chương trình của bạn sẽ chỉ được kiểm tra để đảm bảo rằng chương trình hoạt động đúng với các mã thông báo đầu vào không quá 10 chữ cái lặp lại .

Tất cả các mã thông báo Bark-, Woof- và Grrdựa trên đầu vào của bạn được giả sử bắt đầu bằng chữ in hoa. Do đó, không cần phải xử lý biến Bark grrrthành Hey heyyhoặc bất cứ điều gì tương tự.

Ví dụ đầu vào và đầu ra

    • Đầu vào: Bark. Bark! Bark!!
    • Đầu ra: Hey. Hey! Hey!!
    • Đầu vào: Baaaaaark?(sáu agiây)
    • Đầu ra: Heyyyyyy?(sáu ygiây)
    • Đầu vào: Grrrrrrrr...(tám rgiây)
    • Đầu ra: Heyyyyyyy...( bảy y giây)
    • Đầu vào: ?...!
    • Đầu ra: ?...!
    • Đầu vào: Wooof Woof? Grrrr. Baaaark Grr!
    • Đầu ra: Heyy Hey? Heyyy. Heyyyy Hey!

10
Xin chào, và chào mừng đến với trang web! Chỉ để bạn biết, nó là thông lệ trên trang web này để chờ một thời gian trước khi chấp nhận câu trả lời ngắn nhất. Tôi khuyến khích bạn không chấp nhận câu trả lời bạn đã chấp nhận và đợi cho đến khi hoạt động của câu hỏi này ngừng hoạt động trước khi chấp nhận câu trả lời ngắn nhất. Điều này cũng sẽ khuyến khích nhiều câu trả lời hơn.
DJMcMayhem


Cảm ơn những lời khuyên liên quan đến quá trình chấp nhận. Tôi đã thực sự có kế hoạch kiểm tra danh sách các câu trả lời cứ sau vài giờ và, nếu tôi nhận thấy rằng một câu trả lời tốt hơn đã xuất hiện, hãy chấp nhận nó. Xin lỗi cho bất cứ ai mà tôi có thể đã từ chối danh tiếng ở đây.
A. Mirabeau

5
@ A.Mirabeau Đó là vinh dự và cách nó hoạt động lý tưởng, nhưng một số người không chú ý, vì vậy hầu hết những người trả lời có thể cho rằng người chiến thắng đã được chọn. Mặc dù không có gì sai khi chọn người chiến thắng ngay lập tức nếu bạn dự định cập nhật nó, bạn có thể sẽ nhận được ít câu trả lời hơn vì nó cùng với một số khiếu nại, vì vậy tốt hơn là nên đợi ít nhất một tuần.
Martin Ender

Câu trả lời:


16

Võng mạc , 24 18 17 16 byte

Lưu 1 byte dựa trên một ý tưởng trong câu trả lời của MT0.

\wf?k?
y
\byy
He

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

Giải trình

\wf?k?
y

Điều này chỉ đơn giản là biến tất cả các chữ cái thành y, nhưng nếu chúng được theo sau bởi một fhoặc kchúng tôi ngay lập tức thay thế nó. Bằng cách loại bỏ fkchúng tôi "bình thường hóa" độ dài của các từ để bây giờ tất cả chúng có nhiều hơn hai ys so với nhu cầu.

\byy
He

Điều này biến hai từ đầu tiên ycủa mỗi từ thành He, hoàn thành việc chuyển đổi.


Câu trả lời hiệu quả nhất cho đến nay, cũng được thực hiện. Tôi sẽ không chấp nhận nó ngay bây giờ, nhưng tôi có thể nói với bạn rằng bạn xứng đáng với CAT FUD.
A. Mirabeau

10

Perl, 51 41 39 byte

s/(G.|[BW]..)(\w+)/He."y"x length$2/ge

Sử dụng

perl -pE 's/(G.|[BW]..)(\w+)/He."y"x length$2/ge'

Đầu vào

Bark. Bark! Bark!!
Baaaaaark?
Grrrrrrrr...
?...!
Wooof Woof? Grrrr. Baaaark Grr!

Đầu ra

Hey. Hey! Hey!!
Heyyyyyy?
Heyyyyyyy...
?...!
Heyy Hey? Heyyy. Heyyyy Hey!

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

Thay thế regrec đơn giản bằng cách sử dụng tự động in -pthêm 1 byte vào số đếm. /gethực hiện thay thế cho mọi mẫu và chạy thay thế dưới dạng mã.


Một phiên bản cũ hơn đã sử dụng tính năng phát hiện ba chiều, nhưng Martin Ender nhận thấy rằng tôi không đủ mạnh mẽ, giúp tôi tiết kiệm được 10 byte.

msh210 thông báo với tôi rằng bạn không cần dấu ngoặc kép quanh chuỗi He, tiết kiệm hai byte.


2
Best one so far, congrats.
A. Mirabeau

1
@A.Mirabeau Thanks, that's quite a compliment considering I just registered here a few minutes ago!
pipe

Having three solves is motivating considering I just registered here a few hours ago.
A. Mirabeau

1
You don't need the quotes around He.
msh210

@msh210 Interesting, didn't know you were allowed to omit them there!
pipe

5

Python, 106 bytes

f=lambda s,a="B,He,Gr,He,Wo,He,a,y,r,y,o,y,f,,yk,".split(","):s if a==[]else f(s.replace(a[0],a[1]),a[2:])

Demo

https://repl.it/C6Rr


Although not the accepted answer, this one deserves an honorable mention for being the most byte-efficient solution that changes only the three necessary dog-language keywords.
A. Mirabeau

4

JavaScript (ES6) - 57 55 52 51 Bytes

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He')

Test:

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He');

[
  'Bark. Bark! Bark!!',
  'Baaaaaark?',
  'Grrrrrrrr...',
  '?...!',
  'Wooof Woof? Grrrr. Baaaark Grr!'
].forEach( s=>{console.log( f(s) );} );

Thanks to @MartinEnder for bytes 56 & 51 and the inspiration for some of the other shavings.


4

Vimscript, 51 39 37 33 32 29 28 bytes,

%s/\hk\?f\?/y/g|%s/\<yy/He/g

Regex credits for shaving 9 more bytes: MT0, Martin Ender, msh210

asciicast Demo

Explanation:

                               1. Normalize words to same length & replace letters with ys 

%s                             Regex search and replace 
  /                            Regex search begin
   \hk\?f\?                    Find any letter (\h) optionally followed by k or f
           /                   Regex search end and replace start
            y                  Replace with y
             /                 Replace end
              g                Replace globally

               |               New command

                               2. Overwrite first two y of every word with He

                %s             Regex search and replace
                  /            Regex search begin
                   \<yy        Find yy at a word's beginning
                        /      Regex search end and replace start
                         He    replace with He
                           /   Replace end
                            g  Replace globally

1
I don't know Vimscript, but can you use \<yy instead of \<\hy?
msh210

@msh210 yes it's possible and I updated the solution, thanks
starcorder


2

Javascript, 72 66 64 Bytes

f=
t=>t.replace(/k|f/g,'').replace(/\w/g,'y').replace(/\byy/g,'He')

Edit: separated f= and function + reduced byte count


1
You don't need the f= (as a default of PPCG), so 64 bytes works.
Rɪᴋᴇʀ

@EᴀsᴛᴇʀʟʏIʀᴋ Great, I didn't know this
starcorder

1

Pyke, 35 bytes

.cFDlR\G.^+3-\y*"He"R+)Rdc~lL-],AsJ

Try it here!

Generates Heys, Generates punctuation, zips together, joins


1

Python 3, 140 135 134 bytes

from re import*
f=lambda s:''.join('He'+'y'*len(x)+y for x,y in[(a+b+c,d)for a,b,c,d in findall('(?:Wo(o+)f|Gr(r+)|B(a+)rk)(\W+)',s)])

Using regex to find occurences of replacable characters.

Edit: Golfed 1 byte whitespace and 4 bytes on getting the values from findall result.

Edit2: Golfed 1 byte (Bark's "a" was not counted properly)

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.