Tulis program yang menggunakan string non-kosong dari digit 0 hingga 9 dan cetak bagaimana mereka akan ditampilkan pada layar tujuh segmen menggunakan garis miring ( /
, \
).
Ini adalah bentuk digit yang tepat:
/\
\ \
\/
\
\
/\
/
\/
/\
/\
/
\
\/\
/
\/\
/
/
\/\
\/
/\
\
/\
\/\
\/
/\
\/\
/
Ketika satu digit terjadi berurutan, mereka dirantai secara diagonal ke atas dan ke kanan, dengan ruang diagonal di antaranya. Jadi, misalnya, 203
akan menjadi ini:
/\
/\
/\ /
\ \
/\ \/
/
\/
Perhatikan bahwa 1
karakter membutuhkan jumlah ruang yang sama dengan yang lain. Dua garis 1
berada di sisi kanan layar, bukan di kiri.
Jadi 159114
akan menjadi ini:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Mungkin ada jumlah dan kombinasi baris baru atau spasi di dalam output selama digit berada di posisi yang benar sehubungan satu sama lain.
Jadi untuk 159114
, ini juga berlaku:
\
\/\
\
\
\
\
/\
\/\
/ /
\/\
\ /
\
Ambil input dari stdin atau baris perintah, atau tulis fungsi yang mengambil string. Cetak hasilnya ke stdout atau Anda dapat mengembalikannya sebagai string jika Anda menulis suatu fungsi.
Setiap string yang tidak kosong dari angka 0 sampai 9 harus bekerja, termasuk string digit tunggal (misalnya 8
) dan string dengan nol terkemuka (misalnya dalam 007
, nol jangan perlu dicetak).
Kode terpendek dalam byte menang.
Jawaban:
CJam,
777170696362 byteSemua karakter dapat dicetak, jadi salin dan tempel harus berfungsi dengan baik.
Cobalah online di juru bahasa CJam .
Ide
Kami mulai dengan memeriksa jumlah digit n dalam input dan mendorong kuadrat ruang yang cukup besar untuk menutupi output. Dalam implementasinya, kuadrat ini akan dikodekan sebagai array dua dimensi string satu karakter.
Kuadrat panjang 2n +1 akan tepat (yaitu, tidak ada spasi putih di sekitarnya) untuk implementasi langsung, tetapi kami akan menggunakan salah satu dari panjang 5n untuk menyimpan beberapa byte. Untungnya, ruang putih di sekitarnya diizinkan.
Jika kita membalikkan garis tujuh representasi garis miring 8 , kita memperoleh yang berikut:
Representasi semua digit dapat dikodekan sebagai bilangan bulat 8-bit, di mana bit ke - 0 adalah jika karakter ke- i harus diganti dengan spasi. Untuk digit 0 hingga 9 , bilangan bulat yang dihasilkan adalah
yang sesuai dengan karakter ISO-8559-1 berikut:
Untuk setiap digit pada input, setelah memilih 8-bit integer yang sesuai, kita ulangi i th karakter representasi 8 tepatnya sebuah i kali, di mana sebuah i adalah i th bit dari integer. Ini mendorong array string baik karakter satu atau nol. Dengan membagi array ini menjadi potongan-potongan dengan panjang 3, kita mendapatkan sebuah array di mana setiap elemen sesuai dengan garis representasi.
Sekarang, kita menghitung maksimum dari string yang mewakili kuadrat dan string yang mewakili digit. String
, sehingga mereka akan mengganti spasi di dalam kotak. String kosong, bagaimanapun, lebih kecil dari string
, jadi string kosong dalam representasi digit akan mempertahankan spasi di kotak.
/
dan\
lebih besar dari stringKami sekarang memutar baris dan kolom dengan dua unit untuk menempatkan representasi digit berikut di bagian yang tepat dari kuadrat dan mengulangi proses untuk digit yang tersisa di input.
Akhirnya, kami membalikkan setiap baris dan menyisipkan umpan baris di antara masing-masing baris.
Kode
Rotasi terakhir akan mengacaukan output jika panjang sisi persegi lebih kecil dari 2n + 3 . Karena 5n ≥ 2n + 3 untuk semua bilangan bulat positif n , kuadratnya cukup besar untuk mencegah hal ini.
sumber
Python 3,
189183174 byteKompresinya terlihat oke bagi saya, tapi saya mengalami masalah dengan cara yang baik untuk membuang tujuh variabel ...
Syukurlah spek ini cukup santai pada aturan spasi putih, karena ada banyak spasi putih terkemuka / tertinggal.
Diperluas:
Penjelasan
Posisi segmen yang diwakili oleh variabel adalah:
Setiap segmen dikodekan oleh karakter Unicode 2-byte tunggal. Misalnya,
ϻ
mengkodekang
's segmen seperti:Memang,
2
adalah satu-satunya digit untuk tidak menggunakan segmen kanan bawah dari tampilan tujuh segmen.sumber
C,
1098345323319 bytePertamaKeduaKetiga upaya. Akhirnya memutuskan untuk membuang buffer layar untuk menyimpan beberapa byte. Program ini mengambil parameter digit dan mencetak digit dalam format 7-segmen.Peserta pertama kali. Hanya untuk bersenang-senang. Bersikaplah lembut.
Diperluas, bebas peringatan:
sumber
JavaScript,
192178167162 bytePenggunaan:
f("1337");
akan kembaliIni menggunakan fitur ES6 dan mungkin memiliki beberapa perilaku tergantung implementasi karena kelalaian titik koma dan tanda kurung dan semacamnya, tetapi ia bekerja di Firefox.
Diperluas:
Penjelasan:
l
adalah array yang berisi 10 karakter byte tunggal yang sesuai dengan bentuk setiap digit. Misalnya, angka 0 diwakili oleh karakterî
:Karakter input digunakan sebagai kunci pada array yang menahan bentuknya mewakili rekan, yang dibaca sedikit demi sedikit.
sumber
==0
dan==1
memang perlu sebelumnya?
. Bukankah int dianggap boolean di js? @Regret"w\x05k/\x1D>~\x07\x7F?"
dengan setiap karakter bitwise terbalik menjadi"\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc"
, masing- masing karakter ini dapat dicetak Ini memberi 8 byte lagi. Meskipun, tidak cukup ...f=(x)=>{}
- mereka tidak diperlukan hanya dengan satu argumen.Perl - 103 Bytes
Di atas berisi 6 karakter yang tidak patut dicetak (sumbernya dapat diunduh di Ideone ), dan setara dengan yang berikut:
Masing
^F
- masing dapat digantikan oleh karakter literal 6 (ACK), dan\177
digantikan oleh karakter 127 (DEL).Shebang dihitung sebagai 1, baris baru kedua tidak perlu. Input diambil dari stdin.
Contoh Penggunaan
Penjelasan
Output dihasilkan satu byte pada suatu waktu. Setiap karakter ditransliterasikan, dan ini kemudian ditafsirkan sebagai menggunakan bit array
vec
. Bit disimpan dengan cara berikut:Output bergantian antara 3 dan 5 garis miring, sehingga bit
56
melimpah ke01
digit berikutnya. Bit7
tidak digunakan.sumber
C #,
360 355331 byteHalo, upaya pertama di kode-golf. Semoga ini tidak skor terlalu buruk untuk masuk C #.
Penggunaan:
p("159114");
akan kembaliDiperluas:
sumber
string s(string n)
menjadin=>
dengan menggunakan lambda. Ah well, Anda bisa membiarkannya seperti ini jika Anda mau. :) Saya memang membuat port untuk Java mengkredit Anda. ;)python 2,
317298278273.15Saya menganggap 4 spasi sebagai tab saat menghitung.
Tidak terkompresi dan mudah dibaca:
sumber
l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
kel[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']
menyimpan 5 byte, mengubahreturn '\n'.join(''.join(x) for x in l)
keprint'\n'.join(''.join(x)for x in l)
menyimpan 3 byte, ditambah beberapa perubahan lagi. Berikut ini tautan ke intisari di mana saya mendapat hitungan byte menjadi 440 dari 508.KDB (Q),
172136 bytePenjelasan
1) Buat
d
peta dengan semua bentuk digit.2) Pad matriks dengan nol tambahan dan tambahkan bersama-sama. yaitu "01"
3) Gunakan indeks untuk memetakan
" /\"
dan mencetak-1
.Uji
Saya yakin ini bisa lebih pendek !!
Terima kasih @ hjk
sumber
1 2 0 2 1 2 0 2 1
dengan(9#1 2 0 2)
(-6).enlist
dengan1#
karya, jadi itu -5.enlist
meskipun karenacount[a 0]#0
bukan atom :(Pip, 122 + 1 = 123 byte
Menggunakan
-n
bendera. Mengambil input melalui argumen baris perintah.Karakter dalam UTF-8 string memiliki poin kode berikut:
11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089
.Sedikit tidak berbulu:
Strategi dasarnya adalah menemukan karakter penyusun angka masing-masing dan kemudian condongkannya dengan tepat. Misalnya, untuk
8
, kami menginginkan ini (spasi diwakili oleh titik-titik):yang akan berubah menjadi ini:
Fitur bagus dari strategi ini adalah bahwa beberapa angka pra-kemiringan dapat disatukan.
Sekarang, kita dapat mengkodekan
/.\\/.\\/.
dalam basis 3 sebagai1200120012
. Kemudian kita dapat mengonversi ini menjadi desimal dan memperlakukannya sebagai titik kode UTF-8.Ekspresi
J"\/ "@^(A_TB3M"⮐䫶ヷ䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma
mendapatkan data pra-miring dengan proses berikut:Setelah kami menggabungkan string-string ini berdampingan menggunakan
$.
, kami kemudian membuat grid spasi (2 * n +2 persegi), loop melalui grid pre-skewed, dan mengganti spasi yang sesuai di grid post-skewed dengan karakter yang sesuai. Untuk melihatnya terjadi, seseorang dapat memodifikasi kode untuk mencetak setiap tahap dan berhenti untuk input pengguna:Grid sebenarnya dibangun terbalik, karena itu membuat matematika lebih mudah.
Saya yakin ada algoritma yang lebih baik untuk digunakan. Tapi saya ingin memunculkan ide saya sendiri daripada menyalin ide orang lain.
Lebih lanjut tentang Pip
sumber
Brainfuck - 719 byte
Hanya untuk konteks historis, kredit untuk Daniel B Cristofani. Saya tidak yakin kapan ini dibuat, tetapi tersedia dari Internet Archive pada 9 Mei 2003.
Output untuk
9
berbeda dari deskripsi masalah.sumber
Perl, 270 byte
Aku seharusnya tidak membuang-buang waktu untuk hal ini.
sumber
[$1]while/(.)/g
dengan[$_]for/./g
untuk menyimpan 4 byte. gantifor($i=0;$i<=$l;$i++)
denganfor$i(0..$l)
untuk menyimpan 9 byte.JavaScript ( ES6 ), 191
206Jalankan cuplikan di Firefox untuk menguji.
sumber
Java 8, 341 byte
Port dari @Shion 's C # .NET jawaban , jadi pastikan untuk mengunggahnya juga!
Cobalah online.
Penjelasan:
sumber