Enkripsi Pigpen Cipher
Misi Anda sederhana: untuk menulis sebuah program yang menerima teks sebagai input dan menampilkan representasi ASCII di dalam Pigpen Cipher .
Memasukkan
Hanya karakter ASCII (tanpa Unicode). Anda harus dapat menangani setidaknya 16384 karakter dan 256 baris.
Keluaran
- Ganti semua karakter yang bukan baris baru atau dalam
ABCDEFGHIJKLMNOPQRSTUVWXYZ
atauabcdefghijklmnopqrstuvwxyz
dengan spasi. - Secara case-insensitive, gantilah setiap huruf dengan form terenkripsi (lihat bagian selanjutnya), masukkan spasi tambahan pada masing-masing dari tiga baris setelah masing-masing. Setiap karakter yang dikodekan adalah blok 3 * 3 seni ASCII. Ganti spasi dengan 3 * 3 blok ruang.
- Semua karakter harus berada di tiga baris yang sama (sebut tiga baris ini satu garis pigpen), kecuali ada baris baru, yang memulai garis pigpen baru. Biarkan garis normal kosong di antara garis pigpen.
Cipher
| | | |
.| |.| |.
--+ 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)
Contoh
Input "hEllo, wORLd" harus menghasilkan:
+-+ +-+ | | +-- +-- +-- | --+
| | | | |. |. |. \./ |. |. |. |
| | +-+ +-- +-- +-- V +-- | +-- --+
Pengkodean base64 di atas, dengan garis baru yang tertinggal, ada di bawah. MD5sum adalah 6f8ff1fed0cca4dd0492f9728ea02e7b
.
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK
Tanpa garis trailing baru, md5sum adalah 581005bef7ee76e24c019d076d5b375f
dan base64 adalah:
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW ICArLS0gfCAgICstLSAtLSs =
Aturan
- Celah standar dilarang.
- Ini golf kode. Kode terpendek menang.
- Dalam bahasa yang tidak dapat menerima beberapa baris input sekaligus (mis. JavaScript dengan
prompt()
), gunakan*
(atau beberapa karakter lain) sebagai pemisah baris.
Erranda
- Contoh hilang beberapa spasi (spasi harus terdiri dari ruang trailing dari karakter sebelumnya, jika ada, itu sendiri, dan ruang trailing sendiri). Ini sekarang sudah diperbaiki.
prompt
digunakan untuk input, tetapi hanya menerima satu baris. Bisakah saya menggunakan karakter khusus (seperti '*') untuk menandai baris baru di input ?.Jawaban:
JavaScript (ES6) 312
327 340 372 446Tidak termasuk lekukan spasi dan baris baru
- bisa lebih banyak golf. Menggunakan '*' untuk menandai baris baru dalam input, karenaprompt
menerima satu baris.Uji di konsol FireFox / FireBug
Input: ABCDEFGHI * JKLMNOPQR * STUV * WXYZ * HeLlO WoRlD!
sumber
o
danw
di "Halo dunia", OP hanya memiliki 4C # -
921720Jelas bukan entri yang menang, tapi ini sepertinya terlalu menyenangkan untuk dilewatkan :)
Program mengambil input sebagai tunggal, lalu mencetak pigpen. Untuk memasukkan beberapa baris, gunakan garis bawah (_) seperti yang terlihat pada output .
Kode
Konsep
Cipher menggunakan beberapa urutan karakter yang bisa diduplikasi sedikit. Misalnya, '-' muncul 16 kali dan '__' (dua spasi) muncul 20 kali. Saya mengganti urutan ini dengan simbol karakter tunggal dan beralih keluar saat runtime, memotong jumlah karakter yang diperlukan untuk menyimpan cipherpenpen menjadi dua. Demikian pula, baris baru biasanya membutuhkan dua karakter, tetapi diganti dengan simbol (n) dan diganti kemudian.
Program ini menangani beberapa baris input dengan memisahkan input ke dalam array di mana setiap elemen adalah satu baris input. Program kemudian menjalankan cipher pada setiap baris secara terpisah.
Ini golf pertama saya dalam bahasa apa pun, jadi mungkin ada banyak yang bisa dilakukan untuk meningkatkan kode ini.
Keluaran
sumber
for(int i=0;i<p.Length; i++)
(dekat tengah)m♥lti \n lin♣e \n input
, ponsel saya menyatakan bahwa memiliki hati, bukan Anda dalam multi, dan sebuah klub antara n dan e in line. Mengapa demikian?Python 2, 180 + 78 + 1 + 3 = 262 karakter
Program 180-byte (dua baris terakhir adalah tab):
Memerlukan file 78-byte yang disebut 'f' untuk menjadi direktori yang sama (+1 byte untuk nama file), yang berisi yang berikut ini:
Pengkodean file base64
f
adalah:Program keluar dengan pengecualian,
2>_
menekan kesalahan (+3 byte):Penjelasan :
Saya membuat tabel pencarian
L
, yang merupakan pemetaan dari{position_in_3x3_block: {letter_being_encrypted: symbol_for_letter_at_position}}
, disimpan dalam array datar. Program mencetak huruf dengan melakukan pencarian sederhana untuk setiap posisi.sumber
f
dan tiga byte untuk2>_
Perl 5
-lF
,297 288 261231 byteCobalah online!
Mungkin masih ada sedikit di sini yang bisa bermain golf lebih lanjut.
sumber