สร้างเครือข่ายผู้สร้างสแปมในหลายภาษาให้ได้มากที่สุด


10

เป้าหมายของความท้าทายคือการเขียนวิธีแก้ปัญหาในหลายภาษาให้ได้มากที่สุด แสดงการเขียนโปรแกรมได้หลายภาษาของคุณ!

ในการท้าทายนี้คุณจะสร้างโปรแกรมที่จะสร้างข้อความสแปมตามที่ป้อนข้อความ - เมล็ด ตัวอย่างเช่นกำหนดอินพุต

[Thank you/Wow/Great], this [blog/post/writing] [gives/provides/delivers] [great/excellent/wonderful/superior] [content/information/data]. You [may/could] [find/get/retrieve] [similar/related] [content/information/data] at spammysite.com.

ผลลัพธ์ที่เป็นไปได้อาจเป็น

Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.

(ความคิดจากhttps://security.stackexchange.com/q/37436/29804 )

มีการจับ แต่! นอกจากนี้คุณยังจะมีโปรแกรมการส่งออกในที่แตกต่างกันภาษา โปรแกรมนี้เมื่อทำงานจะส่งข้อความสแปมและโปรแกรมในภาษาอื่นซึ่งจะส่งข้อความสแปมและโปรแกรมในภาษาอื่นด้วย ...

character count / (number of languages ^ 2)คะแนนของคุณจะ

ตัวอย่างเช่นฉันอาจมีโปรแกรม Ruby มันจะนำเมล็ดพันธุ์ข้อความอินพุตเป็นอินพุตและส่งออกข้อความสแปมสุ่มและโปรแกรม Python

การรันโปรแกรม Python นี้ (โดยที่ไม่มีการป้อนข้อมูล) มันจะแสดงผลข้อความสแปมสุ่มอีกอันและโปรแกรม Perl

การรันโปรแกรม Perl นี้ (ไม่มีการป้อนข้อมูล) มันจะแสดงข้อความสแปมสุ่มอีกอัน

ในตัวอย่างนี้คะแนนของฉันจะเป็นความยาวของโปรแกรม Ruby ดั้งเดิมหารด้วย 9 (ฉันมี 3 ภาษาและ 3 ^ 2 คือ 9)

สิ่งอื่น ๆ :

  • คุณต้องใช้ภาษาการเขียนโปรแกรมอย่างน้อย 2 ภาษา
  • โปรดแสดงรายการแต่ละโปรแกรมที่แสดงผล วิธีนี้ถ้ามีคนไม่มีภาษาทั้งหมดพวกเขายังสามารถเห็นแหล่งที่มาของพวกเขา คุณอาจใช้ข้อความตัวอย่างสั้น ๆ นี้: [Please/Kindly] [visit/see] my [site/blog].หรือคุณอาจใช้ตัวแทนที่ (เช่น{insert text here})
  • คุณอาจคิดว่าจะไม่มีตัวอักษรและตัวเลขที่ไม่ใช่ตัวอักษรยกเว้น[]/.,เพื่อทำให้บางสิ่งง่ายขึ้น
  • ภาษาที่ต่างกันจะไม่นับเป็นภาษาที่ต่างกัน (เช่น Python 2 == Python 3)
  • มันจะต้องสุ่มอย่างเต็มที่นั่นคือไม่สามารถคาดเดาได้และส่งออกชุดค่าผสมที่แตกต่างกันทุกครั้งที่ทำงาน มันจะต้องสามารถส่งออกทุกชุดในจำนวนรันโดยพลการ
  • ตั้งแต่นี้เป็นเช่นเดียวกับคะแนนโดยรวมที่สั้นที่สุด ( charcount / (langs ^ 2)) จะชนะ

มันไม่เป็นไรถ้าการแจกแจงไม่สม่ำเสมอเช่นถ้าคำแรกถูกเลือกบ่อยกว่าคำอื่น ๆ
mniip

@mniip อืมฉันไม่เคยระบุว่าจริง ๆ : -PI สมมติว่าคุณสามารถทำเช่นนั้นและทำให้งอกฏถ้ามันช่วยตัวละคร
Doorknob

คำตอบ:


5

PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375

แนวคิดหลักคือ:

  1. แทนที่จะสร้างตรรกะเพื่อสร้างภาษาที่ n + 1 ในทุกภาษาการเขียนโปรแกรมทำสิ่งนี้เพียงครั้งเดียวเท่านั้นและใช้สิ่งอำนวยความสะดวกการเขียนแบบสุ่มและ stdout พื้นฐานของแต่ละภาษาโปรแกรม
  2. ในการย่อตัวสร้างเทมเพลตให้ย่อด้วย zLib ทำให้ตัวสร้างนี้เป็นภาษาที่สอง
  3. ใช้ PHP เป็นภาษาแรกเนื่องจากมีตัวขยายการบีบอัด zLib ในตัว

ดังนั้นรหัสเริ่มต้นคือ:

<?php $x=file_get_contents("php://stdin");echo preg_replace_callback("/\[(.*?)\]/",function($m){$r=explode("/",$m[1]);return $r[array_rand($r)];},$x).gzuncompress("BINARY_DATA")."__END__\n".$x;

BINARY_DATAเทมเพลตเจนเนอเรเตอร์รุ่น gzcompressed อยู่ที่ไหน(เช่นผลลัพธ์ของโค้ด php ซึ่งเป็นรุ่นทับทิม)

รหัสเริ่มต้นที่สมบูรณ์ใน base64 (ควรเป็น 855 ไบต์หลังจากถอดรหัส):

PD9waHAgJHg9ZmlsZV9nZXRfY29udGVudHMoInBocDovL3N0ZGluIik7ZWNobyBw
cmVnX3JlcGxhY2VfY2FsbGJhY2soIi9cWyguKj8pXF0vIixmdW5jdGlvbigkbSl7
JHI9ZXhwbG9kZSgiLyIsJG1bMV0pO3JldHVybiAkclthcnJheV9yYW5kKCRyKV07
fSwkeCkuZ3p1bmNvbXByZXNzKCJ42o2UwXKbMBCG7zyFZj0doElV55BLiNJmmump
7aHpTA+Yg4xErA6SGCQSZ4jevZIBx3biTHywzO6y/7+fYRm5uf5zjVtOGS5XWjbY
NLWwSZzHKVx4OTa06Z/oE51iRZw6XFzV1FquXiQ/+2TEMKflKsSbViiLfFx4OTbK
puYuajpr0OUlBDmIoqrVErVUMX8I2ejWXCIvL0oejVfm0USznk0y4Fx4YWaxsUx3
Fj+0wvJkKE9mPcVCmYaX1qUpuI+wUODlgvzwjeI4XHg5NtSu8CBnOGeJNthcbsmT
NN0ToWSnHbatx1DEp3Hv/GyZ0KMyzXfaJWen4Z6aqzu7cmmRZvseknQ8c0JyT2FZ
ixKVNTUGUdRPAWOp9ce9Fgz9pEIlqc/dPhrLJf49UGqJ4g9oL1x4OTak2a79Jfl0
JXs5eiHk7AuM5d+0Mrrm+O/G/8zXVKI19hlcXAYXICqUtPgXX9sb7V15OJdzfJ72
R3uYlah2ezheG97DyTKXxQk4D1wiW+YUs64pJiRceGFm9fohFA+THM19hTd5ycDr
1nrId3mBaHtnArx/9J7izop6n99h+N0Iw4M3/JELeAlwATsIlUf4vdbUHhA8bLHP
L7R4P8FtXHhhZloNI6wJUMjeGGS0fIFgMX5EpTp5Pp9fTYGGVZ0SlW4l4/eCWn42
n8/R1qqb6oJLNLmcgpXwbtdkjU1XXHg5Ntn0RlxcvULQW17AYnsj4xWafuvG+lEc
6mf9dnD3IVQHvgjgDQxceDAwLyi8audAq3e+MR3g+O7gXHgwMJ4fxgPMR1TZ8zLc
yiDIw17YJFx4OTZPEPuBXFwMG4FiZ2GEJUJceDAw+dHiEB1cXIx1x4zAdoTlI98U
uciNR1QQ4ndQ5HdeFFZt9B9+DwFHIikuIl9fRU5EX19cbiIuJHg7

ลองผ่านทุกภาษาด้วยสตริงการทดสอบ [Thank you/Wow/Great], this is [awesome/wonderful].

PHP

$ cat ti2 | php a.php
Great, this is wonderful.
d=DATA.read.chomp.split('[').map{|a|a.split(']')}.flatten.map{|a|a.split('/')}
d.each{|a|print a.sample}
puts <<"DATA"

from random import choice
import sys
#{d.map{|a|"sys.stdout.write(choice(#{a.inspect}))"}*"\n"}
print
print '''math.randomseed(os.time())
#{d.map{|a|"a=#{a.inspect.tr('[]','{}')};io.write(a[math.random(1,#{a.length})]);"}*"\n"}
print()
print([==[
public class a {
public static void Main() {
System.Random r=new System.Random();
#{d.map{|a|b=->m{m.length==1?"System.Console.Write(#{m.first.inspect});":"if (r.NextDouble()<0.5){System.Console.Write(#{m.shift.inspect});}else{"+b[m]+"};"};b[a.dup]}*"\n"}
System.Console.WriteLine();
System.Console.WriteLine(@"class a {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
#{d.map{|a|b=->m{m.length==1?"System.out.print(\"#{m.first.inspect}\");":"if (r.nextFloat()<0.5){System.out.print(\"#{m.shift.inspect}\");}else{"+b[m]+"};"};b[a.dup]}*"\n"}
System.out.println();
#{x="a";d.map{|a|b=->m{m.length==1?m.first: "\\\\\\\\ifnum500>\\\\\\\\pdfuniformdeviate1000 #{m.shift}\\\\\\\\else "+b[m]+"\\\\\\\\fi"};x=x.succ;a.length>1?"System.out.println(\"\"\\\\\\\\def \\\\\\\\opt#{x} {#{b[a.dup]}}%\"\");": ""}*"\n"}
System.out.println(""#{x="a";d.map{|a|x=x.succ;a.length>1?"\\\\\\\\opt#{x}{}": a.first}*""}"");
System.out.println();
System.out.println(""#{d.map{|a|a.length>1? "[#{a.map{|b|"'#{b}'"}*""}]#{a.length}rand=" : "'#{a.first}'"}*""}"");
System.out.println(""\\\\\\\\bye"");
}
}");
}
}
]==]);
'''
DATA
__END__
[Thank you/Wow/Great], this is [awesome/wonderful].

ทับทิม

$ ruby a.rb
Great, this is awesome.
from random import choice
import sys
sys.stdout.write(choice(["Thank you", "Wow", "Great"]))
sys.stdout.write(choice([", this is "]))
sys.stdout.write(choice(["awesome", "wonderful"]))
sys.stdout.write(choice(["."]))
print
print '''math.randomseed(os.time())
a={"Thank you", "Wow", "Great"};io.write(a[math.random(1,3)]);
a={", this is "};io.write(a[math.random(1,1)]);
a={"awesome", "wonderful"};io.write(a[math.random(1,2)]);
a={"."};io.write(a[math.random(1,1)]);
print()
print([==[
public class a {
public static void Main() {
System.Random r=new System.Random();
if (r.NextDouble()<0.5){System.Console.Write("Thank you");}else{if (r.NextDouble()<0.5){System.Console.Write("Wow");}else{System.Console.Write("Great");};};
System.Console.Write(", this is ");
if (r.NextDouble()<0.5){System.Console.Write("awesome");}else{System.Console.Write("wonderful");};
System.Console.Write(".");
System.Console.WriteLine();
System.Console.WriteLine(@"class a {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
if (r.nextFloat()<0.5){System.out.print(""Thank you"");}else{if (r.nextFloat()<0.5){System.out.print(""Wow"");}else{System.out.print(""Great"");};};
System.out.print("", this is "");
if (r.nextFloat()<0.5){System.out.print(""awesome"");}else{System.out.print(""wonderful"");};
System.out.print(""."");
System.out.println();
System.out.println(""\\\\def \\\\optb {\\\\ifnum500>\\\\pdfuniformdeviate1000 Thank you\\\\else \\\\ifnum500>\\\\pdfuniformdeviate1000 Wow\\\\else Great\\\\fi\\\\fi}%"");

System.out.println(""\\\\def \\\\optd {\\\\ifnum500>\\\\pdfuniformdeviate1000 awesome\\\\else wonderful\\\\fi}%"");

System.out.println(""\\\\optb{}, this is \\\\optd{}."");
System.out.println();
System.out.println(""['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'"");
System.out.println(""\\\\bye"");
}
}");
}
}
]==]);
'''

หลาม

$ python a.py
Great, this is wonderful.
math.randomseed(os.time())
a={"Thank you", "Wow", "Great"};io.write(a[math.random(1,3)]);
a={", this is "};io.write(a[math.random(1,1)]);
a={"awesome", "wonderful"};io.write(a[math.random(1,2)]);
a={"."};io.write(a[math.random(1,1)]);
print()
print([==[
public class a {
public static void Main() {
System.Random r=new System.Random();
if (r.NextDouble()<0.5){System.Console.Write("Thank you");}else{if (r.NextDouble()<0.5){System.Console.Write("Wow");}else{System.Console.Write("Great");};};
System.Console.Write(", this is ");
if (r.NextDouble()<0.5){System.Console.Write("awesome");}else{System.Console.Write("wonderful");};
System.Console.Write(".");
System.Console.WriteLine();
System.Console.WriteLine(@"class a {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
if (r.nextFloat()<0.5){System.out.print(""Thank you"");}else{if (r.nextFloat()<0.5){System.out.print(""Wow"");}else{System.out.print(""Great"");};};
System.out.print("", this is "");
if (r.nextFloat()<0.5){System.out.print(""awesome"");}else{System.out.print(""wonderful"");};
System.out.print(""."");
System.out.println();
System.out.println(""\\def \\optb {\\ifnum500>\\pdfuniformdeviate1000 Thank you\\else \\ifnum500>\\pdfuniformdeviate1000 Wow\\else Great\\fi\\fi}%"");

System.out.println(""\\def \\optd {\\ifnum500>\\pdfuniformdeviate1000 awesome\\else wonderful\\fi}%"");

System.out.println(""\\optb{}, this is \\optd{}."");
System.out.println();
System.out.println(""['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'"");
System.out.println(""\\bye"");
}
}");
}
}
]==]);

Lua

$ lua a.lua
Great, this is wonderful.
public class a {
public static void Main() {
System.Random r=new System.Random();
if (r.NextDouble()<0.5){System.Console.Write("Thank you");}else{if (r.NextDouble()<0.5){System.Console.Write("Wow");}else{System.Console.Write("Great");};};
System.Console.Write(", this is ");
if (r.NextDouble()<0.5){System.Console.Write("awesome");}else{System.Console.Write("wonderful");};
System.Console.Write(".");
System.Console.WriteLine();
System.Console.WriteLine(@"class a {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
if (r.nextFloat()<0.5){System.out.print(""Thank you"");}else{if (r.nextFloat()<0.5){System.out.print(""Wow"");}else{System.out.print(""Great"");};};
System.out.print("", this is "");
if (r.nextFloat()<0.5){System.out.print(""awesome"");}else{System.out.print(""wonderful"");};
System.out.print(""."");
System.out.println();
System.out.println(""\\def \\optb {\\ifnum500>\\pdfuniformdeviate1000 Thank you\\else \\ifnum500>\\pdfuniformdeviate1000 Wow\\else Great\\fi\\fi}%"");

System.out.println(""\\def \\optd {\\ifnum500>\\pdfuniformdeviate1000 awesome\\else wonderful\\fi}%"");

System.out.println(""\\optb{}, this is \\optd{}."");
System.out.println();
System.out.println(""['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'"");
System.out.println(""\\bye"");
}
}");
}
}

ค#

$ mcs a.cs
$ mono a.exe
Thank you, this is wonderful.
class a {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
if (r.nextFloat()<0.5){System.out.print("Thank you");}else{if (r.nextFloat()<0.5){System.out.print("Wow");}else{System.out.print("Great");};};
System.out.print(", this is ");
if (r.nextFloat()<0.5){System.out.print("awesome");}else{System.out.print("wonderful");};
System.out.print(".");
System.out.println();
System.out.println("\\def \\optb {\\ifnum500>\\pdfuniformdeviate1000 Thank you\\else \\ifnum500>\\pdfuniformdeviate1000 Wow\\else Great\\fi\\fi}%");

System.out.println("\\def \\optd {\\ifnum500>\\pdfuniformdeviate1000 awesome\\else wonderful\\fi}%");

System.out.println("\\optb{}, this is \\optd{}.");
System.out.println();
System.out.println("['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'");
System.out.println("\\bye");
}
}

ชวา

$ javac a.java
$ java a
Wow, this is wonderful.
\def \optb {\ifnum500>\pdfuniformdeviate1000 Thank you\else \ifnum500>\pdfuniformdeviate1000 Wow\else Great\fi\fi}%
\def \optd {\ifnum500>\pdfuniformdeviate1000 awesome\else wonderful\fi}%
\optb{}, this is \optd{}.

['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'
\bye

PdfTeX

(รหัสจะอยู่ข้างใน a.pdf แทนที่จะเป็น stdout ฉันหวังว่ามันจะโอเค)

$ pdftex a.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
 restricted \write18 enabled.
entering extended mode
(./a.tex [1{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.ma
p}] )</usr/local/texlive/2012/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.p
fb>
Output written on a.pdf (1 page, 15967 bytes).
Transcript written on a.log.
$ open a.pdf

ผลลัพธ์:

ผลลัพธ์ pdftex

ในข้อความ:

Great, this is wonderful.
['Thank you''Wow''Great']3rand=', this is '['awesome''wonderful']2rand='.'

Golfscript

$ ruby golfscript.rb a.gs
Wow, this is awesome.

หมายเหตุ

  1. ดูเหมือนว่า PHP ค่อนข้างให้อภัยกับข้อมูลไบนารีในตัวอักษรสตริงยกเว้นสำหรับรหัสฐานสิบหก AF และ 96 อย่าถามว่าทำไม

  2. ฉันอาจจะเพิ่มรหัส Perl และ C ++ 11 ได้ง่ายเช่นกัน (เพราะทั้งคู่สนับสนุนตัวอักษรสตริงดิบ) แต่ 8 เป็นจำนวนรอบที่มากกว่า 10 :)

  3. การกระจายของค่าไม่เหมือนกันเนื่องจากองค์ประกอบแรกมาบ่อยกว่าค่าในภายหลัง ตามความคิดเห็นนี้ควรจะโอเค

  4. รหัสเริ่มต้นถูกสร้างขึ้นจริงโดยใช้โค้ด PHP 5.5 ต่อไปนี้ orig.rbจริง ๆ แล้วเป็นรหัสทับทิมที่ไม่มีส่วนท้าย ( __END__และข้อมูลต่อท้าย)

generator.php:

<?php
$d=file_get_contents('orig.rb');
$dc = gzcompress($d,9);
echo '<?php $x=file_get_contents("php://stdin");echo preg_replace_callback("/\\[(.*?)\\]/",function($m){$r=explode("/",$m[1]);return $r[array_rand($r)];},$x)';
?><?php
echo ".gzuncompress(\"";
for ($i=0;$i<strlen($dc);$i++) {
  switch($dc[$i]) {
  case '"':
    echo "\\\"";break;
  case "\n":
    echo "\\n";break;
  case '\\':
    echo "\\\\";break;
  case "\x00":case "\xaf":case "\x96":
    echo sprintf("\\x%02x",ord($dc[$i]));
    break;
  default:
    echo $dc[$i];
  }
}
echo "\").\"__END__\\n\".\$x;";

(คุณสามารถใช้รหัสนี้เพื่อ zLib encompress โซลูชั่น PHP สำหรับความท้าทายอื่น ๆ )


1
...ว้าว. นั่นคือทั้งหมดที่ฉันต้องพูดว่า: O +1
Doorknob

คุณสามารถละเว้นเครื่องหมายอัฒภาคใน lua และคุณสามารถแทนที่การprint()โทรปลอมโดยเพียงแค่ขึ้นบรรทัดใหม่อีกครั้งหลังจากนั้น[==[
mniip

4

Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...

$><<(g=gets).gsub(/\[(.*?)\]/){$1.split(?/).sample}+"say'#{g.chop}'=~s|\\[(.*?)\\]|@a=split'/',$1;$a[rand@a]|reg;say'import re,random;print re.sub(\"\\[(.*?)\\]\",lambda m:random.choice(m.group(1).split(\"/\")),\"#{g.chop}\")'"

เอาท์พุทสำหรับ[Please/Kindly] [visit/see] my [site/blog].:

Please see my site.
say'[Please/Kindly] [visit/see] my [site/blog].'=~s|\[(.*?)\]|@a=split'/',$1;$a[rand@a]|reg;say'import re,random;print re.sub("\[(.*?)\]",lambda m:random.choice(m.group(1).split("/")),"[Please/Kindly] [visit/see] my [site/blog].")'

โปรแกรม Perl (ผลลัพธ์เป็นครั้งแรกของฉัน! :-P):

Kindly see my blog.
import re,random;print re.sub("\[(.*?)\]",lambda m:random.choice(m.group(1).split("/")),"[Please/Kindly] [visit/see] my [site/blog].")

ผลลัพธ์ของโปรแกรม Python:

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