Ada sandi yang sangat sederhana yang menggantikan huruf dengan posisinya di alfabet. Misalnya, abc
akan menjadi 1 2 3
dalam sandi ini.
Tantangan ini merupakan alternatif untuk mengambil sandi ini.
Tantangan
Buat program yang mengambil input karakter ASCII, dan menghasilkan string yang dipisahkan spasi dari:
bilangan bulat
-26
melalui26
surat
a
melaluij
Outputnya harus melalui STDOUT atau alternatif terdekat bahasa Anda.
Spesifikasi
Huruf kapital harus dinegasikan. Modal
D
misalnya adalah-4
, sedangkan huruf kecild
adalah4
.Digit harus diubah ke rekan alpha mereka.
1
sedanga
, dan sebagainya. Setiap nol dalam input akan menjadij
.Semua karakter non-alfanumerik (kecuali spasi) harus diabaikan.
Spasi adalah
0
.Ruang yang berdekatan dalam output harus dikurangi menjadi satu ruang.
Input: You + Me Correct Output: -25 15 21 0 -13 5 Incorrect Output: -25 15 21 0 0 0 -13 5
Ruang trailing tunggal atau baris baru diizinkan.
Contohnya
Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19
Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6
Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6
Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6
Input: abc_ABC
Output: 1 2 3 -1 -2 -3
Papan angka
Agar skor Anda muncul di papan tulis, itu harus dalam format ini:
# Language, Bytes
Dicoret tidak seharusnya menyebabkan masalah.
sumber
Jawaban:
CJam,
585754515049 byteTepat ketika saya menulis penjelasannya, saya perhatikan bahwa salah satu alternatif versi 50 byte dapat dipersingkat dengan satu byte ...
Uji di sini.
Solusi 50 byte:
Penjelasan
Ini harus menjadi yang pertama kalinya, bahwa perilaku modulo CJam untuk nilai negatif berguna bagi saya.
sumber
JavaScript (ES6),
110107133120 byteAmbillah itu, aku yang tua!
Ada potensi lebih banyak ruang untuk bermain golf,
terutama di regexesnggak, yang cukup bagus. Versi tidak disatukan:Saran diterima!
sumber
All non-alphanumeric characters should be ignored.
. Tes: 'A $ b' harus-1 2
Pyth,
5049 byteCobalah di sini .
Sunting: sanitasiasi tali terstruktur untuk memastikan garis bawah ditangani dengan benar. Bahkan menyimpan byte juga, yay!
Program ini membuat string pencarian, yang digunakan untuk membersihkan input. Ini kemudian dipetakan ke indeks terkait dalam string itu. Akhirnya, setiap indeks yang lebih besar dari 26 dikonversi ke karakter ASCII yang benar.
Versi sebelumnya, yang menggunakan
\W
regex, dengan kecepatan 50 byte:sumber
Julia,
145136 byteTidak Disatukan:
Untuk mendapatkan digit sebagai huruf, kita menambahkan 58 ke nilai ASCII dan mengurangi 10 jika karakter saat ini tidak 0. Itu memastikan bahwa 0 peta ke
j
dan angka lainnya peta kea
-i
.Meniadakan huruf besar dilakukan dengan menggunakan
cmp
. Ini akan mengembalikan -1 untuk huruf besar dan 1 untuk huruf kecil.Cobalah online
sumber
Perl 5,
120116113105 BytesPertama membersihkan karakter yang tidak diinginkan & ruang ekstra.
Kemudian naik ke bawah tabel ascii untuk setiap karakter.
Uji
sumber
s/ +/ /g
, regex pertama salah karena \ w cocok dengan karakter garis bawahs/[^\w ]|_//g
C,
142138135Tidak digabungkan sedikit:
Lulus tes yang diberikan dalam GCC 4.9.3 & Dentang 3.5.2.
sumber
> <> (ikan),
219209 byteCobalah di sini
Ini adalah jawaban golf kode pertama saya! Akhirnya bisa menggunakan bahasa yang saya ingin gunakan untuk tantangan kode golf, dan ini sepertinya yang sempurna mengingat bahwa karakter secara otomatis dikonversi ke desimal.
Saya berharap hasil saya jauh lebih pendek, tetapi ternyata tidak. Padahal, saya belum terlalu banyak bermain golf. Ada beberapa tempat kode bisa lebih bersih / lebih masuk akal, tetapi tidak akan menyimpan byte karena mereka ada di tempat-tempat di mana spasi masih diperlukan. Mungkin ada cara untuk menyimpan beberapa byte pada bit terakhir pada baris kedua, membuatnya pergi ke arah yang berlawanan dan menumbuk dengan 00 yang sudah ada di sana, saya harus bermain dengannya lagi
Pada dasarnya, ini memeriksa untuk melihat apakah karakter saat ini adalah spasi, angka, huruf besar, atau huruf kecil, dengan memeriksa apakah itu dalam kisaran nilai tertinggi / terendah dari grup itu. Jika bukan salah satu dari itu, itu akan dibuang. Jika ada di salah satu dari itu, itu akan dikonversi menjadi angka jika itu huruf, dan huruf jika itu angka (atau lebih tepatnya, angka dari 97-106 yang merupakan nilai untuk huruf aj). Kemudian memeriksa apakah nilai teratas kurang dari 28, dalam hal ini adalah angka dan menghasilkan angka, jika tidak itu adalah huruf dan menampilkan huruf yang mewakili angka, menghasilkan spasi, kemudian loop sampai tumpukan kosong.
sumber
JavaScript (ES6), 108
122 124Edit Menggunakan regexp dari komentar @ Max
Edit2 14 byte disimpan berkat ETHProductions
EcmaScript 6 hanya untuk fungsi panah, jadi itu harus berfungsi di Firefox dan Chrome terbaru.
Tes menjalankan cuplikan di bawah ini
sumber
[R](/ +/g,' ')[R](/./g,
ke[R](/ +|./g,
. (Maaf karena memunculkan kiriman lama, btw)Pyth, 57 byte
Demo langsung dan uji kasus.
sumber
CJam, 52 byte
Cobalah online
Bagian penting dengan solusinya adalah menggunakan
er
operator CJam (transliterasi). Sebagai argumen kepada operator, operator perlu daftar semua karakter, dan daftar nilai yang sesuai.Sebagai langkah pra-pemrosesan pada input, ini menghilangkan karakter yang bukan bagian dari tabel terjemahan (karakter khusus), dan mengurangi spasi berulang menjadi satu ruang.
Penjelasan:
sumber
Python 2,
191179177173172168160 byteUji
sumber
PHP, 116 byte
menerima input dari STDIN; jalankan bersama
-nR
.kerusakan
Anda dapat mengganti
@
dengan backtick untuk menangani spasi di bagian huruf kecil.Denganjabcdefghi0
untuk digit, Anda juga bisa menggunakan:
.sumber
"#_|[^\w ]#"
alih-alih"#[^\w ]|_#"
.Hassium , 1156 Bytes
Jawaban yang sangat panjang
sumber
You + Me
menghasilkan output-25 15 21 0 0 -13 5
.Dec
kolom.)Jelly , 32 byte, tantangan tanggal kiriman bahasa
Cobalah online!
Penjelasan
Fungsi pembantu
1Ŀ
(menerjemahkan setiap alfanumerik / spasi dalam input menjadi angka)Fungsi pembantu
2£
(mengembalikan string konstan“jabcdefghi”
)Program utama
sumber
Retina,
7470 byte (tidak bersaing)Perhatikan spasi di baris 3, spasi di baris 6, dan baris kedua yang kosong.
Cobalah secara Online!
Meskipun bahasanya dibuat sebelum tantangan, saya pikir beberapa fitur bahasa yang saya gunakan setelah tanggal tantangan, jadi saya telah menandai ini sebagai non-bersaing.
sumber
Java 7,
257254 byteCoba di sini.
Penjelasan:
Contoh input & output:
sumber