Tiêm Rickrolls văn bản


12

Bởi vì rickrolling là meme lớn nhất trên Trái đất, nên bạn [biết các quy tắc và tôi cũng vậy] sẽ viết mã ngắn nhất có thể rickroll về mặt văn bản cho người đọc không nghi ngờ. Để [bạn xuống] có một văn bản đầu vào có chứa các chữ cái, dấu chấm câu và dấu cách. Bất cứ khi nào một cụm từ [nói dối và làm tổn thương bạn] từ hai khổ thơ đầu tiên xuất hiện trong văn bản ...

We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

... chèn phần còn lại của dòng trong ngoặc sau đó.

Đầu vào

Đầu vào là một chuỗi dòng duy nhất chỉ chứa ASCII có thể in với dòng mới tùy chọn.

Đầu ra

Đầu ra là một chuỗi đơn. Bất cứ khi nào một nhóm từ (được định nghĩa là chuỗi đầu vào phân tách trên khoảng trắng) khớp với một nhóm từ trong dòng lời bài hát ở trên, hãy chèn các từ còn lại của dòng vào chuỗi, được nhóm trong dấu ngoặc vuông.

Mô tả bổ sung:

Đây là mã golf , ít byte thắng nhất. Bạn có thể viết một chương trình hoặc chức năng.

  • kết hợp nên không phân biệt chữ hoa chữ thường: we'ređược chuyển thành we're [no strangers to love]mặc dù We'ređược viết hoa trong lời bài hát.
  • phù hợp nên tham lam. Does he know the answer?nên được chuyển đổi thành Does he know the [rules and so do I] answer?thay vìDoes he know [the rules and so do I] the [rules and so do I] answer?
  • Nếu một từ xuất hiện nhiều hơn một lần trong lời bài hát được cung cấp, hãy chọn bất kỳ lần xuất hiện nào để hoàn thành dòng.
  • Nếu một từ là từ cuối cùng trong dòng lyric, đừng chèn bất cứ thứ gì vào sau nó.
  • Dấu câu được bao gồm như một phần của "từ". I'mlà một từ duy nhất và không thể phù hợp với I. Tương tự, you.không phù hợp với bất kỳ lời bài hát vì thời kỳ.

Một số từ như Ixuất hiện nhiều lần trong suốt lời bài hát cũng như ở cuối dòng. Vì quy tắc là bất kỳ sự xuất hiện nào trong lời bài hát ở trên đều có thể được sử dụng, và một trong những lần xuất hiện đó nằm ở cuối dòng, không cần kết hợp I. Tùy chọn khác cho I[just wanna tell you how I'm feeling].

Nếu hai kết quả trùng nhau, bạn có thể chọn một trong hai. Điều này có nghĩa là how I'm thinkingcó thể trở thành how I'm [feeling] thinking [of]HOẶC how [I'm feeling] I'm thinking [of]I'mcó thể là một phần của how I'mhoặc I'm thinking. Tuy nhiên, nếu văn bản đầu vào chỉ đơn giản I'm thinking, thì đầu ra phải là I'm thinking [of].

Các trường hợp kiểm tra bổ sung:

I don't know what I'm doing with my life.
is converted to
I [just wanna tell you how I'm feeling] don't know [the rules and so do I] what I'm [thinking of] doing with my life.
Many additional solutions are possible, since words like `I` appear multiple times.


Will someone please save me from these memes?
is converted to
Will someone please save me from [any other guy] these memes?


Two strangers walked into a bar.  One said "hello."  The other said "goodbye."
is converted to
Two strangers [to love] walked into a [lie and hurt you] bar.  One said "hello."  The [rules and so do I] other [guy] said "goodbye."

Thử thách lấy cảm hứng từ anh chàng này .


10
ಠ_ಠ
Alex A.

Trường hợp thử nghiệm thứ hai dường như là sai ( fromnên trở thành from [any other guy]).
Doorknob

Câu trả lời:


5

chim ưng, 316 + 377 = 693

Tham số dòng lệnh đầu tiên là tên tệp của lời bài hát (375 byte + 2 cho invocation = 377). Rickrolls tất cả các tập tin khác. In tới stdout.

BEGIN{FPAT="[^ ]+ *";OFS=""}func d(a){b=tolower(a);sub(/ *$/,"",b);return b}FNR==NR{for(s=$0;NF;$0=s=$0){for(i=1;i<NF;i++){k=k $i;$i="";v[d(k)]="["$0"] "}$0=s;k=$1=""}next}{for(s=$0;NF;$0=s=$0){for(j=NF;(--j)>0&&!(d($0) in v);$(j+1)="");k=v[d($0)];if($0!~/ $/)k=" "k;printf($0 k);for($0=s;j-->=0;$(j+2)="");}print""}

Ung dung

BEGIN{FPAT="[^ ]+ *";OFS=""}
func d(a){b=tolower(a);sub(/ *$/,"",b);return b}
FNR==NR{
  for(s=$0;NF;$0=s=$0){
    for(i=1;i<NF;i++)
    {
      k=k $i;
      $i="";
      v[d(k)]="["$0"] "
    }
    $0=s;
    k=$1=""
  }
  next
}
{
  for(s=$0;NF;$0=s=$0){
    for(j=NF;(--j)>0&&!(d($0) in v);$(j+1)="");
    k=v[d($0)];
    if($0!~/ $/)k=" "k;
    printf($0 k);
    for($0=s;j-->=0;$(j+2)="");
  }
  print""
}

Kết quả kiểm tra

Đầu vào:

we're
We're
Does he know the answer?
I
how I'm thinking
I'm thinking
I don't know what I'm doing with my life.
Will someone please save me from these memes?
Two strangers walked into a bar.  One said "hello."  The other said "goodbye."
gonna run

Đầu ra:

we're [no strangers to love] 
We're [no strangers to love] 
Does he know the [rules and so do I] answer? 
I [just wanna tell you how I'm feeling] 
how I'm [feeling] thinking [of] 
I'm thinking [of] 
I [just wanna tell you how I'm feeling] don't know [the rules and so do I] what I'm [thinking of] doing with my life. 
Will someone please save me from [any other guy] these memes? 
Two strangers [to love] walked into a [lie and hurt you] bar.  One said "hello."  The [rules and so do I] other [guy] said "goodbye." 
gonna run [around and desert you] 

1. Điều này không thành công trong trường hợp thử nghiệm đầu tiên (nó đặt mọi thứ giữa whatI'm, đó là kết hợp "không tham lam"). 2. Điều này không thành công trong trường hợp thử nghiệm thứ ba (nó biến hai khoảng trắng thành một). 3. Nếu bạn lưu trữ lời bài hát trong một tệp riêng biệt, bạn cần đếm tệp đó (cũng như +2 để đưa nó vào awklệnh) trong số byte của bạn.
Doorknob

@Doorknob Cảm ơn. Lòng tham được cố định. Tệp lời bài hát không thêm vào số lượng nhân vật của tôi vì nó không được thay đổi và được công khai trước khi thử thách bắt đầu. Tôi cũng không đếm awkmã nguồn.
Rainer P.

Bây giờ điều này không thành công cho đầu vào gonna run(đầu ra dự kiến gonna run [around and desert you], đầu ra thực tế gonna [tell a lie and hurt you] run [around and desert you]). Nó cũng vẫn nhai nhiều không gian liên tiếp. Bạn cần đếm tập tin lời bài hát trong số byte của bạn, vì đó là một lời gọi không chuẩn của awkchương trình.
Doorknob

@Doorknob Ok. Tôi đã thực hiện lại hầu hết chương trình và yêu cầu gawkbây giờ để phân tách trường bảo toàn không gian. Vượt qua tất cả các trường hợp thử nghiệm bây giờ.
Rainer P.

Ấn tượng. Rất khó khăn để bao quát tất cả các trường hợp cạnh trong thử thách này.
Doorknob
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.