การเข้ารหัสตัวเลข Pigpen
ภารกิจของคุณเป็นเรื่องง่าย: การเขียนโปรแกรมที่ได้รับข้อความที่เป็น input และเอาท์พุทเป็นตัวแทนของ ASCII ในหมูธรรมดา
อินพุต
ASCII เท่านั้น (ไม่มี Unicode) อักขระ คุณต้องสามารถจัดการอย่างน้อย 16384 ตัวอักษรและ 256 บรรทัด
เอาท์พุต
- แทนที่อักขระทั้งหมดที่ไม่ใช่บรรทัดใหม่หรือใน
ABCDEFGHIJKLMNOPQRSTUVWXYZ
หรือabcdefghijklmnopqrstuvwxyz
ด้วยช่องว่าง - เปลี่ยนตัวอักษรแต่ละตัวให้เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ดูหัวข้อถัดไป) แทรกช่องว่างต่อท้ายในสามบรรทัดหลังละบรรทัด อักขระที่เข้ารหัสแต่ละตัวเป็นบล็อก 3 * 3 ของศิลปะ ASCII แทนที่ช่องว่างด้วยช่องว่าง 3 * 3 บล็อก
- อักขระทุกตัวควรอยู่ในสามบรรทัดเดียวกัน (เรียกทั้งสามบรรทัดนี้ว่า pigpen-line) ยกเว้นว่าจะมีบรรทัดใหม่ซึ่งจะเริ่มบรรทัด pigpen ใหม่ เว้นบรรทัดบรรทัดว่างไว้ระหว่าง pigpen-lines
รหัส
| | | |
.| |.| |.
--+ for J +-+ for K +-- for L
--+ +-+ +--
.| |.| |.
--+ for M +-+ for N +-- for O
--+ +-+ +--
.| |.| |.
| for P | | for Q | for R
(ABCDEFGHI are the same as JKLMNOPQR, but with the . replaced by a space)
\./
V for W (note the row of 3 spaces on the top)
^
/.\ for Z (note the 3 spaces on the bottom)
\
.>
/ for X (note the leading spaces)
/
<.
\ for Y (note extra trailing spaces)
(STUV are like WXYZ, but with the . replaced by a space)
ตัวอย่าง
อินพุต "hEllo, wORLd" ควรสร้าง:
+-+ +-+ | | +-- +-- +-- | --+
| | | | |. |. |. \./ |. |. |. |
| | +-+ +-- +-- +-- V +-- | +-- --+
การเข้ารหัส base64 ของด้านบนมีบรรทัดใหม่ต่อท้ายอยู่ด้านล่าง md5sum 6f8ff1fed0cca4dd0492f9728ea02e7b
คือ
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK
หากไม่มีบรรทัดใหม่ที่ต่อท้าย md5sum คือ581005bef7ee76e24c019d076d5b375f
และ base64 คือ:
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBL ICArLS0gfCAgICStLSA
กฎระเบียบ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- นี่คือรหัสกอล์ฟ รหัสที่สั้นที่สุดชนะ
- ในภาษาที่ไม่สามารถรับอินพุตได้หลายบรรทัดในแต่ละครั้ง (เช่น JavaScript ด้วย
prompt()
) ให้ใช้*
(หรืออักขระอื่น ๆ ) เป็นตัวคั่นบรรทัด
Erranda
- ตัวอย่างหายไปสองสามช่องว่าง (ช่องว่างควรประกอบด้วยช่องว่างต่อท้ายของอักขระก่อนหน้าถ้ามีตัวเองและช่องว่างต่อท้ายของตัวเอง) สิ่งนี้ได้ถูกแก้ไขแล้ว
prompt
จะใช้สำหรับการป้อนข้อมูล แต่จะยอมรับเพียงบรรทัดเดียวเท่านั้น ฉันสามารถใช้อักขระพิเศษ (เช่น '*') เพื่อทำเครื่องหมายบรรทัดใหม่ในอินพุตได้ไหม