Tulis program yang menerjemahkan teks ASCII menjadi output braille . Persyaratan:
- Input dapat berasal dari stdin, baris perintah, atau sumber input eksternal lainnya.
- Output harus dikenali sebagai braille, bentuk output terserah Anda. Contohnya adalah
o
untuk titik yang dinaikkan dan.
untuk titik yang tidak dinaikkan. Representasi pola tekstual seperti1-3-4
itu tidak dapat diterima. Pembungkus garis panjang tidak diperlukan. - Hanya 26 karakter alfabet dan ruang yang diperlukan untuk solusi minimal. Semua karakter input yang tidak didukung oleh solusi Anda harus diabaikan.
Penilaian adalah dengan jumlah karakter dalam kode sumber. Hukuman dan bonus adalah:
- +50 penalti untuk menggunakan karakter braille Unicode sebagai output.
- -50 bonus untuk modal, angka, dan tanda baca pendukung.
-200 bonus untuk ligatur pendukung dan kontraksi satu huruf dari Braille Bahasa Inggris (Kelas-2) .(Akan membuat ini tantangan terpisah karena ini masalah yang sangat berbeda.)
Permintaan dan hasil sampel (solusi minimal):
$ braille Hello world
o . o . o . o . o . . . . o o . o . o . o o
o o . o o . o . . o . . o o . o o o o . . o
. . . . o . o . o . . . . o o . o . o . . .
Jawaban:
Python, 162
Saat ini mendukung huruf kecil dan beberapa tanda baca, tetapi masih dalam proses.
Contoh:
sumber
Python -
9075 + 50 = 125Gunakan huruf kecil.
One-liner (terima kasih kepada ɐɔıʇǝɥʇuʎs)
sumber
for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")
75 karakter.max
triknya. Terima kasihfor l in input():print((" "*97+"⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵")[ord(l)],end="")
C, 269
Implementasi ini mensyaratkan bahwa argumennya, jika berisi spasi, harus dikutip:
sumber
BBC Basic 103 karakter ASCII atau 92 token
Mungkin tidak seperti yang dimaksudkan OP, ini mendefinisikan ulang font untuk huruf kecil.
VDU 23,n,a,b,c,d,e,f,g,h
menetapkan bitmap 8x8 ke karakter n, terdiri dari delapan byte. Mengikuti parameter dengan titik koma alih-alih koma menyebabkannya diperlakukan sebagai angka bit-endian dua byte.Pola braille untuk surat
a
melaluiz
disimpan dalam A $, sesuai dengan pola bit berikut. Ini diekstraksi oleh topeng dengan 9 = biner1001
dan pergeseran hak (pembagian oleh 2 dan 4 digunakan sebagai standar BBC basic tidak memiliki operator shift.)Kode tidak dikunci
Contoh penggunaan
Ini dilakukan dalam mode layar 6 untuk kejelasan (ketik MODE6 segera setelah Anda membuka emulator baris perintah.)
Sebenarnya, setelah menjalankan kode, huruf kecil apa pun (termasuk input keyboard) muncul di Braille.
Emulator di http://bbcbasic.co.uk/bbcwin/bbcwin.html .
Lihat juga jawaban saya yang serupa ini: /codegolf//a/28869/15599
sumber
Bash + coreutils
Solusi minimal - hanya huruf kecil, 83 (33 karakter unicode + 50 penalti):
Kapital, angka, dan tanda baca, 120 (120 karakter unicode + 50 penalti - 50 bonus):
Contoh output:
sumber
PHP, 331
Tidak ada bonus untuk saat ini.
sumber
<?
alih-alih<?php[SPACE]
menyimpan 4 karakter.JavaScript - 286
Percobaan pertama. Tidak ada bonus.
sumber
w=prompt().split("");for(i=0;i<w.length;i++)z=w[i],o="o",p=".",b=[1,5,3,11,9,7,15,13,6,14],e=[c="",1,3],g=z.charCodeAt(0)-97,22<g&&g--,f=e[g/10|0],d=b[g%10],22==g&&(d=14,f=2),c+=d&1?o:p,c+=d&2?o:p,c+="\n",c+=d&4?o:p,c+=d&8?o:p,c+="\n",c+=f&1?o:p,c+=f&2?"o\n":".\n",console.log(c)
CJam - 51
Cobalah di http://cjam.aditsu.net/
Contoh input:
Contoh output:
Ini hanya mendukung huruf kecil dan ruang. Karakter lain dipetakan ke karakter yang didukung (khususnya huruf besar ke kecil).
Penjelasan:
Karakter braille dikodekan menggunakan 1 untuk titik yang dinaikkan dan 0 untuk titik yang tidak dinaikkan, kiri ke kanan dan atas ke bawah. Ini memberikan 6 basis-2 digit; a 1 didahulukan untuk menghindari pengupasan angka nol di depan, maka angka tersebut dikonversi ke basis 10 kemudian ke karakter ASCII yang sesuai.
Contoh: t -> ⠞ -> 01/11/10 -> 1011110 -> 94 -> ^
Program ini mengkonversi kembali setiap karakter ke triplet pasangan bit (seperti
[[0 1][1 1][1 0]]
) memperoleh matriks pasangan bit. Matriks tersebut kemudian ditransformasikan dan pemisah ditambahkan (spasi di dalam baris, baris baru di antara baris).q
membaca input ke string = array karakter{…}%
menerapkan blok ke setiap karakteri32%
mendapatkan kode ASCII mod 32 (spasi-> 0, a-> 1, b-> 2, z-> 26)"@`hptdx|lX\bjrvfz~nZ^ck]swg"
adalah string yang berisi karakter huruf braille dikodekan seperti yang dijelaskan sebelum=
mendapatkan karakter braille yang dikodekan yang sesuai dari stringi2b
mendapatkan kode ASCII kemudian dikonversi ke basis 2 (memperoleh array 7 digit)1>
menghapus 1 digit2/
terbagi array menjadi (3) pasanganz
transpos matriksSf*
bergabung dengan setiap baris dengan spasiN*
bergabung dengan baris dengan baris barusumber
C,
249244Input adalah argumen baris perintah, yang harus diloloskan atau dikutip jika string berisi spasi. Karakter yang didukung adalah huruf kecil dan spasi. Karakter yang tidak didukung akan dihapus secara diam-diam.
Sunting: Dicukur 5 byte dengan menyederhanakan suatu kondisi
sumber
perl, 195 + 2-50 = 147
Ini menangani modal, angka, dan tanda baca, tanpa mengandalkan unicode (195 byte + 2 byte (untuk
-pl
) - 50 bonus)Dengan lekukan:
Output sampel
sumber
Javascript ES6 -
282309297283270 - 50 =232259233220 byteIni akan lebih pendek, tetapi memeriksa huruf kapital terasa sakit .
EDIT: Terima kasih kepada mbomb007 karena telah menyelamatkan saya dua byte - sayangnya, saya menemukan bahwa sedikit golf sebelumnya telah merusak segalanya, jadi saya harus menambahkan 27 karakter kembali.
EDIT: Aaand 12 byte disimpan dengan menggerakkan spasi.
EDIT: Menyadari itu konyol untuk output sebagai karakter, dan menyimpan beberapa byte. Saya juga menyimpan beberapa karakter dengan menukar k = (a, b) =>% (2 * b)> b-1? 1: 0 untuk k = (a, b) => a% b> ~ -b / 2? 1: 0.
sumber
string.toLowerCase
ke variabel?1-9-->a-i
dan0-->j