พื้นหลัง
หนึ่งร้อยสิบสามปีก่อนนักเขียนรหัสวิทยาการFélix Delastelle ตีพิมพ์ผลงานของเขาบนเลขศูนย์สี่สี่เหลี่ยมซึ่งเป็นเลขแทนเลขฐานสิบหกที่ยอมรับการเรียงสับเปลี่ยนของตัวอักษร 25 ตัวเป็นกุญแจและเข้ารหัสข้อความที่ประกอบด้วยตัวอักษรเหล่านั้น
เช่นเดียวกับ ciphers แบบปากกาและกระดาษส่วนใหญ่รหัสสี่ตารางไม่มีค่าการเข้ารหัสใด ๆ ในวันนี้ แต่ในเวลาที่มีการประดิษฐ์
หนึ่งร้อยสิบสามปีต่อมาอลิซเดลาสเตลเลตัดสินใจที่จะปรับปรุงเลขศูนย์สี่สี่เหลี่ยมโดยการเพิ่มขนาดตัวอักษรและจำนวนของปุ่ม [ต้องการอ้างอิง]
การตั้งค่าคีย์
ตัวอักษรมีอักขระดังต่อไปนี้ (เริ่มต้นด้วยเว้นวรรค):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
ได้รับวลีรหัสผ่านเราสร้างการเรียงสับเปลี่ยนของตัวอักษรนี้ดังนี้:
เก็บเฉพาะการเกิดขึ้นครั้งแรกของตัวละครแต่ละตัว
ผนวกอักขระที่ไม่ได้ใช้จากตัวอักษรตามลำดับโดยธรรมชาติ
หลังจากเปลี่ยนวลีรหัสผ่านสี่ชุดเป็นสี่ปุ่มเราแบ่งแต่ละคีย์เป็นรูปสี่เหลี่ยมจัตุรัสยาว 7 และจัดเรียงสี่เหลี่ยมที่เกิดขึ้นทั้งสี่เพื่อให้เกิดเป็นรูปสี่เหลี่ยมจัตุรัสขนาดใหญ่
ตัวอย่างเช่นหากวลีรหัสผ่านเป็น
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
กุญแจจะถูกสร้างและจัดเรียงเช่นนี้:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
การเข้ารหัสลับ
รับข้อความธรรมดาเช่น
ALICE LOVES BOB.
เราผนวก 0 หรือ 1 ช่องว่างเพื่อทำให้ความยาวเท่ากันและแยกเป็นคู่อักขระ:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
สำหรับคู่อักขระแต่ละตัวเราจะค้นหาอักขระตัวแรกในตารางแรก (ลำดับการอ่าน) และตัวที่สองในสี่
จากนั้นเราเลือกตัวละครในช่องสี่เหลี่ยมที่เหลือเพื่อให้ตัวละครทั้งสี่ที่เลือกนั้นเป็นสี่เหลี่ยมมุมฉากซึ่งด้านข้างขนานกับด้านข้างของช่องสี่เหลี่ยม
ในที่สุดเราจะแทนที่คู่อักขระด้วยอักขระที่เลือกของช่องสี่เหลี่ยมที่สองและสาม
สำหรับสตริงตัวอย่างของเราผลตอบแทนนี้
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
ส่งผลให้ไซเฟอร์เท็กซ์ต่อไปนี้:
PPA@E YTZEEH=T<-
งาน
เขียนโปรแกรมหรือฟังก์ชั่นที่ยอมรับวลีรหัสผ่านสี่คำและข้อความธรรมดาใช้ตัวแปรข้างต้นของตัวเลขสี่ตารางเพื่อเข้ารหัสและส่งกลับค่าตัวเลขที่ได้
รายละเอียด:
สตริงอินพุตห้ารายการจะประกอบด้วยอักขระที่เป็นตัวอักษรที่กล่าวถึงเท่านั้น
สตริงอินพุตห้าสตริงสามารถอ่านได้ในลำดับใด ๆ เช่นสตริงเดี่ยวที่คั่นด้วยการขึ้นบรรทัดใหม่หรือเป็นอาร์เรย์ของห้าสตริง
คุณอาจคิดว่าไม่มีสตริงว่างเปล่า
ผลลัพธ์จะต้องเป็นสตริงเดียว
หากคุณเลือกที่จะพิมพ์ผลลัพธ์ไปยัง STDOUT คุณสามารถพิมพ์เฉพาะอักขระของ ciphertext และ (เป็นทางเลือก) ขึ้นบรรทัดใหม่
ใช้กฎมาตรฐานของกอล์ฟ
กรณีทดสอบ
ในกรณีทดสอบทั้งหมดสี่สตริงแรกนั้นสอดคล้องกับสแควร์คีย์ในลำดับการอ่านและสตริงอินพุตสุดท้ายกับเท็กซ์
อินพุต
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
เอาท์พุต
PPA@E YTZEEH=T<-
อินพุต
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
เอาท์พุต
LALLR)#TROKE !
อินพุต
,'K AB-Q=?@("W$>XM).C#<I:G!OLP*+;SZJTU%NED/&VFHRY
:,-D$C<SU=IYHFVA;! JG/M&L+WT%#.Q@(N*R")EZOBKX?'>P
L()JX,BND?Z<>P*FU%=O@&KIC+A!Y:;$SWHR.EMG'/T"QV #-
<->CI")AP Q:+U;O/F(KH&ER!MW?X'VJLZ#.$,BSGN@TD%*Y=
SPIN THE PPCG WHEEL OF BLAME!
เอาท์พุต
#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>
อินพุต
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
เอาท์พุต
GOOD LUCK, HAVE FUN.