Rickrolls ที่เป็นข้อความ


13

เนื่องจาก rickrolling เป็น meme ที่ยิ่งใหญ่ที่สุดในโลกคุณ[รู้กฎและดังนั้นฉัน]จึงต้องเขียนรหัสที่สั้นที่สุด ให้[คุณลง]มีข้อความที่ป้อนซึ่งประกอบด้วยตัวอักษรเครื่องหมายวรรคตอนและช่องว่าง เมื่อใดก็ตามที่วลี[โกหกและทำร้ายคุณ]จากบทที่สองแรกปรากฏในข้อความ ...

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

... ใส่ส่วนที่เหลือของบรรทัดในวงเล็บหลังจากนั้น

อินพุต

อินพุตเป็นสตริงบรรทัดเดียวที่มีเฉพาะ ASCII ที่พิมพ์ได้พร้อมกับบรรทัดใหม่ต่อท้ายที่เป็นตัวเลือก

เอาท์พุต

เอาต์พุตเป็นสตริงบรรทัดเดียว เมื่อใดก็ตามที่กลุ่มของคำ (กำหนดเป็นแบ่งสตริงอินพุตในช่องว่าง) ตรงกับกลุ่มของคำในบรรทัดของเนื้อเพลงข้างต้นแทรกคำที่เหลือของบรรทัดลงในสตริงที่จัดกลุ่มในวงเล็บเหลี่ยม

คำอธิบายเพิ่มเติม:

นี่คือโค้ดกอล์ฟซึ่งมีจำนวนไบต์น้อยที่สุดเป็นผู้ชนะ คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น

  • การจับคู่ควรคำนึงถึงขนาดตัวพิมพ์: we'reแปลงเป็นwe're [no strangers to love]แม้ว่าจะWe'reเป็นตัวพิมพ์ใหญ่ในเนื้อเพลง
  • การจับคู่ควรเป็นโลภ Does he know the answer?ควรเปลี่ยนเป็นDoes he know the [rules and so do I] answer?แทนที่จะDoes he know [the rules and so do I] the [rules and so do I] answer?
  • หากคำปรากฏขึ้นมากกว่าหนึ่งครั้งในเนื้อเพลงที่ให้ไว้ให้เลือกเหตุการณ์ที่เกิดขึ้นเพื่อทำให้เส้นสมบูรณ์
  • หากคำใดคำหนึ่งเป็นคำสุดท้ายในบรรทัดเนื้อเพลงอย่าแทรกอะไรไว้ข้างหลัง
  • เครื่องหมายวรรคตอนถูกรวมเป็นส่วนหนึ่งของ "คำ" I'mเป็นคำเดียวและไม่สามารถจับคู่Iได้ ในทำนองเดียวกันyou.ไม่ตรงกับเนื้อเพลงใด ๆ เพราะช่วงเวลา

บางคำเช่นIปรากฏขึ้นหลายครั้งตลอดทั้งเนื้อเพลงเช่นเดียวกับที่ส่วนท้ายของบรรทัด เนื่องจากกฎคือสิ่งใดก็ตามที่เกิดขึ้นในเนื้อเพลงข้างต้นสามารถใช้งานได้และหนึ่งในนั้นเกิดขึ้นที่ท้ายบรรทัดจึงไม่Iจำเป็นต้องมีการจับคู่ใด ๆ ตัวเลือกอื่น ๆ สำหรับการมีI[just wanna tell you how I'm feeling]

หากการจับคู่สองรายการซ้อนทับกันคุณสามารถเลือกรายการใดรายการหนึ่งได้ ซึ่งหมายความว่าhow I'm thinkingอาจจะกลายเป็นhow I'm [feeling] thinking [of]หรือhow [I'm feeling] I'm thinking [of]ตั้งแต่I'mอาจจะเป็นส่วนหนึ่งของการอย่างใดอย่างหนึ่งหรือhow I'm I'm thinkingแต่ถ้าใส่ข้อความเป็นเพียงแล้วออกที่ควรจะเป็นI'm thinkingI'm thinking [of]

กรณีทดสอบเพิ่มเติม:

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."

ท้าทายแรงบันดาลใจจากเพื่อนคนนี้



กรณีทดสอบที่สองดูเหมือนว่าผิด ( fromควรเป็นfrom [any other guy])
Doorknob

คำตอบ:


6

เหยี่ยว, 316 + 377 = 693

พารามิเตอร์บรรทัดคำสั่งแรกคือชื่อไฟล์ของเนื้อเพลง (375 bytes + 2 สำหรับการเรียกใช้ = 377) Rickrolls ไฟล์อื่นทั้งหมด 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""}

Ungolfed

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""
}

ผลการทดสอบ

การป้อนข้อมูล:

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

เอาท์พุท:

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. กรณีนี้ล้มเหลวในการทดสอบครั้งแรก (มันทำให้สิ่งระหว่างwhatและI'mซึ่งคือการจับคู่ "ไม่โลภ") 2. กรณีนี้จะล้มเหลวในการทดสอบครั้งที่สาม (เปลี่ยนทั้งสองช่องว่างเป็นหนึ่ง) 3. หากคุณจัดเก็บเนื้อเพลงในไฟล์แยกต่างหากคุณจะต้องนับไฟล์นั้น (รวมถึง +2 สำหรับการรวมไว้ในawkคำสั่ง) ในจำนวนไบต์ของคุณ
Doorknob

@Doorknob ขอบคุณ ความโลภได้รับการแก้ไข ไฟล์เพลงไม่ได้เพิ่มในการนับตัวละครของฉันเนื่องจากมันไม่เปลี่ยนแปลงและถูกเปิดเผยต่อสาธารณชนก่อนที่ความท้าทายจะเริ่มขึ้น ฉันไม่นับawkซอร์สโค้ดเช่นกัน
Rainer P.

ตอนนี้สิ่งนี้ล้มเหลวสำหรับอินพุตgonna run(เอาต์พุตที่คาดไว้gonna run [around and desert you], เอาต์พุตจริงgonna [tell a lie and hurt you] run [around and desert you]) มันยังคง chomps หลายช่องว่างในแถว คุณต้องนับไฟล์เนื้อเพลงเป็นจำนวนไบต์เนื่องจากเป็นการเรียกใช้awkโปรแกรมที่ไม่ได้มาตรฐาน
Doorknob

@Doorknob ตกลง ฉันปรับใช้โปรแกรมส่วนใหญ่อีกครั้งและต้องการgawkตอนนี้สำหรับการแยกฟิลด์รักษาพื้นที่ ผ่านกรณีทดสอบทั้งหมดตอนนี้
Rainer P.

ประทับใจ มันยากมากที่จะครอบคลุมกรณีขอบทั้งหมดในความท้าทายนี้
Doorknob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.