Tantangan:
Tulis program yang menghasilkan output berikut:
. E .. I ... S .... H
...- V
..- U ..-. F
..--
.- A .-. R .-.. L
.-.-
.-- W .--. P
.--- J
- T -. N -.. D -... B
-..- X
-.- K -.-. C
-.-- Y
-- M --. G --.. Z
--.- Q
--- O ---.
----
Ini adalah tabel yang diformat dari kode Morse dari huruf-huruf dari A hingga Z. Setiap kolom dipisahkan oleh tiga spasi.
Ada empat slot yang hilang, yang digunakan oleh set karakter internasional. Program Anda harus menulis spasi di sana.
Output harus terdiri dari ruang ASCII, titik, tanda hubung, huruf besar dan baris baru (baik LF atau CRLF) saja.
Program Anda tidak menerima input.
Berikut ini adalah contoh program Python yang menghasilkan output yang diinginkan:
b = "."
out = []
last = 0
ch = "EISHVUF ARL WPJTNDBXKCYMGZQO "
cx = 0
while b:
if last >= len(b):
print(" ".join(out))
out = [" ", " ", " ", " "][0:len(b) - 1]
out.append(b + " " + ch[cx])
cx += 1
last = len(b)
if len(b) < 4:
b += "."
elif b[-1] == ".":
b = b[0:-1] + "-"
else:
i = len(b) - 1
while b[i] == "-":
i -= 1
if i < 0:
break
if i < 0:
break
b = b[0:i] + "-"
print(" ".join(out))
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
code-golf
ascii-art
kolmogorov-complexity
morse
Locoluis
sumber
sumber
Jawaban:
Jelly , 85 byte
Program lengkap mencetak lembar cheat.
Cobalah online!
Bagaimana?
Catatan: Saya pikir mungkin ada cara untuk memangkas ini dengan membentuk daftar yang memformat dengan benar dengan menggunakan atom grid
G
,, tapi saya tidak bisa mengetahui caranya.sumber
Python 3.6,
201197193187 byteMenggunakan beberapa pemformatan, pembongkaran dan sihir A000918 .
sumber
f'{i//k:0{j}b}'.replace(*'0.').replace(*'1-')
panjangnya sama dengan''.join('.-'[int(x)]for x in f'{i//k:0{j}b}')
Retina , 125 byte
Cobalah online! Seharusnya 121 byte tetapi saya terlalu malas untuk berurusan dengan spasi pada awal dan akhir. Penjelasan:
Huruf-huruf yang kodenya dimulai
.
dan-
masing-masing dimuat. (Secara teori dimungkinkan untuk menghindari preloading.-
tetapi menghemat byte dengan cara ini.)_
Digunakan alih-alih spasi karena dianggap sebagai huruf yang membuatnya lebih mudah untuk dicocokkan di bawah ini.Di sini kami membagi setiap baris menjadi lima bagian:
.
)-
)Potongan-potongan itu kemudian disusun kembali menjadi dua garis:
.
akhiran, bagian pertama dari huruf yang tersisa-
akhiran, bagian kedua dari huruf yang tersisaBaris baru mengikuti format yang sama dengan baris yang ada, hanya dengan awalan Morse tambahan dan setengah surat yang tersisa untuk diproses. Ini kemudian diulang sampai setiap baris hanya memiliki satu huruf.
The
_
s kemudian diubah kembali ke dalam ruang.sumber
JavaScript (ES6),
154147145 bytesumber
PHP, 208 Bytes
Cobalah online!
PHP, 229 Bytes
Cobalah online!
sumber
Perl 5,
158156 bytesumber
PHP,
184 183181 byteJalankan dengan
-nr
atau coba online .kerusakan
-7 byte dengan spasi terdepan : Ganti
ltrim("$r\n")
dengan"$r\n"
dan28
dengan31
.171 (= -10) byte dengan spasi tambahan :
gangguan coba online
sumber
for(;$y<16;$y++,print str_pad(ltrim("$r\n"),28," ",0))for($r="",$c="03231323"[$y&7];$c++<4;)$r.=strtr(sprintf(" %0${c}b ",$y>>4-$c),10,"-.")."EISHVUF ARL WPJTNDBXKCYMGZQO "[$i++];
harus menghemat 2 byte.----
tidak cocok dengan yang lain."EISHVUF ARL WPJTNDBXKCYMGZQO "
harus memiliki 2 spasi pada akhirnya.APL (Dyalog) , 92 byte
Kebutuhan
⎕IO←0
yang standar pada banyak sistem.Cobalah online!
{
...}¨'
...'
terapkan fungsi anonim berikut untuk masing-masing string:⍪⍵
buat argumen menjadi kolom' ',
tambahkan sebuah spasi (pada setiap baris)'.-'[
...],
tambahkan string setelah diindeks dengan:≢⍵
panjang argumen⍳
indeks itu (0, 1, 2, ..., panjang -1)2⊥⍣¯1
anti-base-2 (menggunakan bit sebanyak yang diperlukan)⍉
transpos (dari satu representasi di setiap kolom ke satu di setiap baris)(
...)⍀
rentangkan dengan (masukkan baris kosong seperti yang ditunjukkan oleh nol di):≢⍵
panjang argumen16÷
bagi enam belas dengan itu1↑⍨
(lebih) ambil dari satu (buat daftar yang diikuti oleh 1- n nol)16⍴
daur ulang pola itu hingga memiliki enam belas elemen' ',
tambahkan sebuah spasi⍕
format (daftar tabel menjadi satu tabel, padding masing-masing dengan spasi di setiap sisi)¯1⌽
putar satu langkah ke kanan (sehingga memindahkan ruang trailing ke depan)0 3↓
turunkan nol baris dan tiga kolom (sehingga menghilangkan tiga spasi utama)sumber
16÷⍨
muncul di kode Anda‽SOGL ,
106105102 byteJika ruang yang diawali diizinkan,
10299 byte141 byte, kompresi
hanya ingin melihat seberapa baik yang bisa dilakukan SOGL hanya dengan kompresi (baik itu punya lebih dari sekedar kompresi, tapi itu adalah string terkompresi 97%)
sumber
JavaScript (205 byte)
sumber
Ruby,
144 143141 byteTidak disatukan
sumber
Pyth , 106 byte
Uji secara online!
Penjelasan
Dalam beberapa kata, apa yang saya lakukan di sini adalah untuk menghasilkan kolom tabel demi kolom dan kemudian memindahkan tabel sebelum mencetaknya. Kami memperhatikan bahwa dalam sebuah kolom, kode morse untuk huruf-huruf tersebut dapat direpresentasikan sebagai string biner (diganti
.
dengan0
dan-
oleh1
) ketika menghitung dari nol hingga indeks huruf terakhir dalam kolom.Algoritme bergantung pada fungsi dari mana saya memberikan contoh run di bawah ini (untuk kolom kedua):
Penjelasan kode
Saya memotong kode menjadi dua. Bagian pertama adalah fungsi yang dijelaskan di atas, bagian kedua adalah bagaimana saya menggunakan fungsi:
(1) : Di tabel morse, di kolom pertama, ada tujuh baris setelah setiap baris yang berisi huruf ("E" dan "T"). Di kolom kedua, itu adalah tiga baris. Lalu satu (kolom ketiga), lalu nol (kolom terakhir). Di
16 / n - 1
situlahn
jumlah huruf dalam kolom (yang adaN
dalam kode di atas). Apa yang dilakukan kode pada baris (1) :Baiklah, sekarang kita memiliki fungsi membantu yang bagus
h
yang pada dasarnya menghasilkan kolom tabel dari urutan karakter. Mari kita gunakan (perhatikan dua spasi tambahan dalam kode di bawah ini):Kode masih dapat disingkat; mungkin saya akan kembali lagi nanti.
sumber
C,
199195 byteLangsung di coliru (dengan #include untuk menghindari pesan peringatan.)
PEMBARUAN : Menyimpan empat karakter dengan memindahkan "deklarasi" di
m
luar fungsi, seperti yang disarankan oleh @zacharyTMenggunakan apa yang tampaknya menjadi strategi standar: menyimpan huruf-huruf dalam pohon biner array-encoded, sehingga anak-anak elemen
i
adalah2*i
dan2*i+1
. Pohon ini berakar pada 2 daripada 1 karena aritmatika bekerja sedikit lebih pendek, saya pikir. Yang lainnya adalah bermain golf.Tidak Disatukan:
sumber
int m
kem;
luar fungsi?Bubblegum , 133 byte
Dikompresi sebagai aliran LZMA.
sumber
C, 291 byte
Coba Online
Bagaimana itu bekerja
Pertama saya diurai string di C, menghitung ruang yang kurang dari 26 jadi saya dikodekan dalam huruf kecil
a, b, .. z
dengan program kecil iniLalu saya menulis parser untuk pengkodean itu, di mana
/
ada baris baru, dan huruf kecil mewakilit[i] - 'a'
spasisumber
Bash (dengan utilitas), 254 byte
sumber
Dyalog APL, 159 byte (tidak bersaing)
sumber
⎕IO←0
(default pada banyak sistem) dan menggunakan⍨
(perjalanan) .JavaScript (ES7),
242240238 byteCobalah online!
–2 byte terima kasih kepada Zachary .
sumber
a!='0'
kea!=0
.join('')
dengan.join<insert backtick here><insert backtick here>
? (<insert backtick here>
diganti dengan backticks yang sebenarnya)a!='0'
kea!=0
, yang harus bekerja.''
kopernya.