Tulis program terpendek untuk mengubah input standar menjadi kode Morse . Karakter yang tidak ada dalam tabel harus dicetak sebagaimana adanya.
32
Tulis program terpendek untuk mengubah input standar menjadi kode Morse . Karakter yang tidak ada dalam tabel harus dicetak sebagaimana adanya.
Jawaban:
Golfscript - 74 karakter
Jawaban ini hanya mendukung huruf besar dan angka. Huruf-huruf dipisahkan oleh baris baru dan kata-kata dipisahkan oleh 2 baris baru
Analisis
Golfscript - 85 karakter
Ini lebih pendek daripada jawaban SO saya karena persyaratan santai di sini. Masukan harus huruf besar / digit dan karakter tanda baca ".,?"
Karena tanda baca bahkan tidak diperlukan di sini, saya dapat mempersingkat jawabannya
Jawaban saya dari SO
Golfscript - 107 karakter
baris baru di akhir input tidak didukung, jadi gunakan sesuatu seperti ini
echo -n Hello, Codegolfers| ../golfscript.rb morse.gs
Surat adalah huruf khusus dan dikonversi menjadi huruf kecil dan dipesan dalam posisi biner. Segala sesuatu yang lain dilakukan oleh tabel terjemahan
sumber
C # (213 karakter)
Saya yakin ini tidak akan bertahan lama, tapi setidaknya saya punya teknik di sini dulu!
Dan dalam format yang dapat dibaca:
Untuk penjelasan singkat, string karakter adalah tumpukan di mana anak kiri adalah titik dan anak kanan adalah tanda hubung. Untuk membuat surat, Anda menelusuri kembali dan membalik urutan.
sumber
ETIAN...
di sana, saya menganggap itu bekerja sama dengan skrip golf, tetapi Anda memiliki cara berbeda dalam mengartikan string. Saya pikir itu setara tetapi saya menambahkan 1 ke indeks dan menggunakan representasi biner untuk mendapatkan titik dan garis untuk semua digit setelah 1 "misalnya terkemukaF=>18=>0b10010=>..-.
String[] a
tr + sed (347)
sumber
/g;s/
menjadi,
- ditambah sedikit overhead).y
perintah sed sebagai gantinyaHaskell -
314292291 karakterFormulir yang dapat dibaca pengguna:
Contoh dijalankan:
Ada spasi putih di antara dua huruf, dan tujuh spasi putih di antara dua kata.
sumber
fromJust.elemIndex c
dapat ditulis sebagaihead.findIndices(==c)
. Itu satu karakter lebih banyak, tetapi Anda kemudian dapat menyingkirkannyaimport Data.Maybe
, sehingga Anda akan menyimpan total 17 karakter. Anda juga dapat menyimpan dua karakter dengan menghapus spasi di depan string setiap kali Anda memanggil interkalasi. Dan beberapa karakter lainnya dengan melakukani=intercalate
di awal dan mengganti dua panggilanintercalate
dengani
.intercalate
dan telah menyimpan 6 karakter lainnya! :-)w=words
, yang menghemat satu karakter jika saya tidak salah. Dan alih-alihl c=...
danmap l
, Anda harus melakukannyamap\c->...
(Anda bahkan tidak perlu parens di sekitar lambda karena bagaimanapun sudah ada paren penutup setelahnya).l c=...
memang menyelamatkan saya 1 karakter, tapi saya tidak bisa meletakkannya tanpa parens, hanya sebagaimap(\c->...)
. GHC versi 6.12.3.Nota bene
(310)(462)(414)(319) termasuk (46) untuk tabel.Gabungan angka dan huruf dengan pengkodean ternary. 5 digit ternary cocok dalam satu byte! Ini menghilangkan loop perbedaan konyol itu, dan nomor casing khusus seluruhnya.
ASCII85 memotong 1/3 dari setiap tabel. Dan menyederhanakan kode (akhirnya!) Kembali di bawah 400!
Output sampel
Tidak diikat dan dikomentari. Saya sangat bangga dengan yang ini. Saya merasa itu elegan, membuat angka melakukan pekerjaan. :)
Tabel (33) + (13) = (46)
Inilah cara string menyandikan tabel. Setiap byte mewakili nomor terner 5 digit. Dan byte selanjutnya dikodekan dalam ASCII85 (yang nota bene dapat secara otomatis memecahkan kode).
sumber
Ruby, 161
Mengkodekan setiap digit ke dalam karakter tunggal, di mana 1 adalah tanda hubung, 0 adalah titik, dengan angka 1 sebagai penanda (ditambah offset untuk membuatnya tetap dapat dicetak. Menggunakan matematika ASCII untuk menggunakan karakter input sebagai indeks pencarian.
sumber
VB.NET, 233 byte
Fungsi terakhir itu jahat.
sunting Beberapa perbaikan.
sumber
Lisp (
532466 karakter)Ini mengkodekan huruf kecil, dan urutan kode morse dicetak dengan spasi tambahan
sumber
Di Jawa, 475 karakter.
Menerjemahkan az, AZ dan 0-9.
Edit:
Atau dalam 447 karakter, jika Anda tidak keberatan Java membuat kesalahan setelah terjemahan.
sumber
Perl6 (238)
Versi yang mudah dibaca
sumber
sed, 159 byte
Kami mulai dengan menurunkan seluruh baris (karena
y
tidak dapat melakukan konversi case-sensitive); kurangi 10 byte jika kita hanya menangani input huruf kecil. Kemudian kita preprocess angka0
,2
,8
dan9
untuk memancarkan simbol terakhir mereka.Loop menghasilkan simbol terakhir untuk setiap karakter input, lalu menerjemahkan setiap karakter untuk iterasi berikutnya. Ini sama dengan berjalan di atas meja pencarian dikotomis yang diperlihatkan dalam artikel Wikipedia; digit yang memerlukan perlakuan khusus dapat dilihat memiliki orang tua yang tidak ada dalam alfanumerik ASCII kami.
Loop berakhir ketika semua karakter telah mencapai ruang terminasi (setelah 'e' atau 't').
Misalnya, surat
k
itu diubah dalam tiga bagian:k
=>k-
=>n-
n-
=>n.-
=>t.-
t.-
=>t-.-
=>-.-
sumber
Python 3, 99 Karakter
Bekerja pada huruf besar dan kecil.
sumber
C,
162160 karakter(Dengan spasi kosong tidak signifikan, tidak ada baris baru)
M
adalah tabel pencarian di mana bitpattern karakter sesuai dengan titik dan garis dalam kode morse. Karakter[0-9A-Z]
diterjemahkan ke morse menggunakan tabel ini (dengan spasi ditambahkan setelah kode morse), karakter lain hanya melewati tidak berubah.Contoh dijalankan:
sumber
Perl (489 karakter)
Dapat dieksekusi melalui baris perintah seperti itu.
Sunting: Terima kasih @tobyodavies karena menunjukkan bahwa solusi asli saya memiliki terjemahannya mundur!
sumber
%c=qw(A .- B -... C -.-. D -.. E . F ..-. G --. H .... I .. J .--- K -.- L .-.. M -- N -. O --- P .--. Q --.- R .-. S ... T - U ..- V ...- W .-- X -..- Y -.-- Z --.. 1 .---- 2 ..--- 3 ...-- 4 ..--- 5 ..... 6 -.... 7 --... 8 ---.. 9 ----. 0 -----);while(<>){print($c{$_}||$_)for split//}
PHP, 474 karakter
Ini 462 karakter jika semua input dalam huruf besar:
sumber
<?$a=strtoupper(fgets(STDIN));$m=array(65=>12,2111,2121,211,1,1121,221,1111,11,1222,212,1211,22,21,222,1221,2212,121,111,2,112,1112,122,2112,2122,2211)+array(48=>22222,12222,11222,11122,11222,11111,21111,22111,22211,22221)+array(32=>' ');while($a[$i++])echo strtr($m[ord($a[$i])],12,'.-');
05AB1E , 81 byte (Tidak bersaing)
Cobalah online!
Ubah pola huruf menjadi basis-3, pola angka ke basis-2, gunakan transliterasi ascii nol yang diindeks untuk mendapatkan titik dan tanda hubung. Tidak berfungsi pada huruf kecil.
sumber
Jelly , 50 byte
Program lengkap yang menerima string yang diformat Python sebagai argumen baris perintah yang mencetak output yang dibatasi ruang.
Cobalah online!
sumber
Powershell, 142 byte
Skrip uji yang kurang golf:
Keluaran:
Catatan: Output berisi spasi tambahan.
sumber
+mazzy+
adalah beberapa padding nakalAPL (NARS), 71 karakter, 142 byte
uji:
setiap huruf dipisahkan dari satu spasi, setiap kata akan dipisahkan dari 3 spasi. Tabel ini dibuat berdasarkan string alfanumerik
⎕A,⎕D
dan 16 bit karakter yang'ܨ㈍İᄧюᜪࠄᨳ䜏ഁᙂ䴫쩸穼蚠'
dipisah dalam 8 bit karakter yang masing-masing dikonversikan dalam basis 3 dengan angka terbalik.sumber
05AB1E , 52 byte
Cobalah online!
sumber
JavaScript (ES6), 184 byte
Untuk kedua versi ini, mereka akan memberi spasi di antara karakter apa pun. Mengkonversi 0-9 dan az (tidak sensitif huruf) dikonversi. Spasi dikonversi menjadi 3.
Ganti
\n
dengan karakter baris baru (0x0a
). Itu tidak menunjukkan beberapa karakter yang tidak dapat dicetak karena SE. Masuk ke mode edit menunjukkannya.Inilah hex:
Tidak disatukan
Versi yang dapat dibaca, 234 byte
Tidak disatukan
sumber
Python 2,
283274 BytesSaya membuat string alfanumerik sedemikian rupa sehingga penempatan mereka di string menggambarkan representasi kode Morse mereka. Awalnya saya akan menggunakan biner, tetapi
01
akan sama dengan1
. Jadi saya menggunakan ternary dengan- = 1
dan. = 2
. Dengan demikian karakterc
pada indeks1121
dalam string ini, representasi kode Morse-nya--.-
.Uji Harness
Memperbarui
[CATATAN: Selalu ada jejak spasi putih tapi spasi putih menunjukkan jeda, jadi saya harap itu ok ]
sumber
PHP,
157150157 bytemengambil input dari argumen baris perintah pertama. tidak ada jeda antar huruf. Jalankan dengan
-nr
.kerusakan
Mengalahkan JavaScript, Python2, C, Ruby dan sed. Saya senang.
Langkah ke-4: un-gabungkan pemetaan untuk menangani karakter huruf kecil tanpa menggunakan
strtoupper
.versi sebelumnya:
gagal untuk huruf kecil; +12 byte untuk diperbaiki: Ganti
$argv[1]
denganstrtoupper($argv[1])
.terjemahan string sederhana, 254 byte
lurus ke depan: menerjemahkan seluruh string sekaligus, karakter ke kode morse.
Simpan ke file untuk dieksekusi atau diganti
<?=
denganecho
dan dijalankan dengan-r
.interpretasi desimal dari kode morse, 184 byte (-70)
langkah golf pertama: kode morse dikodekan ke biner dengan tambahan tambahan
1
untuk melestarikan nol terkemuka. Putar melalui karakter dan menerjemahkannya satu per satu. Jalankan dengan-nr
.desimal dikodekan ke karakter, 157 byte (-27)
golf kedua: ditambahkan 60 ke nilai desimal dan dikodekan ke karakter.
pemetaan gabungan, 150 byte (-7)
golf ketiga: pemetaan gabungan untuk angka dan huruf menjadi satu string.
sumber
SmileBASIC,
194190 bytesumber