Tugas
Tugasnya adalah untuk menampilkan salah satu dari 128 kemungkinan status tampilan 7-segmen .
Program Anda harus menerima string 7 karakter ("bit") yang merupakan 0
atau 1
. Bit input pertama berhubungan dengan segmen A dari ilustrasi berikut, yang kedua ke B, dll (abaikan dp
):
Bagaimana Anda merepresentasikan tampilan terserah Anda - satu simbol Unicode atau ASCII, seni ASCII , secara grafis, atau apa pun yang dapat Anda buat. Namun, setiap input harus memiliki output sendiri yang berbeda. Jika Anda datang dengan sesuatu yang mewah saya yakin Anda dapat memanen upvotes dengan memamerkan beberapa contoh.
Ke-128 kemungkinan kondisi tampilan adalah:
Aturan
- Codegolf
- Seperti yang saya katakan, segala jenis output diperbolehkan, tetapi akan lebih baik jika Anda menentukannya.
- Input dapat berupa argumen stdin atau baris perintah.
Contohnya
Memasukkan
1101101
Keluaran
Sebagai ASCII / Unicode:2
Berbagai jenis seni ASCII (saya tidak terlalu pandai dalam hal ini)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Jawaban:
J (51)
keluaran:
sumber
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.C, 106
Ukurannya adalah 74 karakter jika diizinkan mengubah nama program "W00WG5WW1GW66WG4WW2GW33WG"
berlari:
catatan:
'W' dan 'G' (0x47 dan 0x57) dipilih sedemikian rupa sehingga nilai & 7 = 7, yaitu mereka dengan aman mengindeks karakter nol yang mengakhiri string input.
sumber
Brainfuck - 224
Mencetak menggunakan poin Exlamation:
Bukan yang paling mudah dibaca, tapi juga tidak terlalu mengerikan.
Terkejut melihat seberapa dekat ini dengan tidak menjadi tempat terakhir.
sumber
Catatan tambahan
121107perlu
n
didefinisikan sebagai string untuk memproses sehingga memanggil sepertimendapatkan
set lengkapnya adalah
sumber
Mathematica:
135129118, tampilan gambarspasi ditambahkan "untuk kejelasan"
Edit
Bagi pengguna situs pemilih yang pilih-pilih: Tanpa menggunakan topeng eksternal:
sumber
&
.&
.APL,
5855Input contoh:
Keluaran:
⍞='1'
mengambil input sebagai array karakter dan mengubahnya menjadi array numerik.1 2 2 1 2 2 1×⍞='1'
mengonversi array itu menjadi:0
untuk kosong,1
untuk_
,2
untuk|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
tetapkan array itu ke variabelx
dan menyusun ulang untuk mewakili segmen F, G, B, E, D, C0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
menyatukan blank, segmen A dan blank lainnya ke depan3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
membentuk kembali ke matriks 3x31+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
dikonversi ke pengindeksan berbasis 1Akhirnya menggunakan string
' _|'
untuk mengubah indeks menjadi karakterEdit
Memotong 3 karakter dengan menggabungkan a
0
ke depan array dan menggunakan indeks duplikat, mencegah penugasan variabelsumber
{
1-char lebih pendek dari pengindeksan braket[]
.PHP 66 byte
Sebuah sedikit perbaikan menggunakan
md5
rumus ajaib, tetapi membutuhkan 3 tambahan byte biner:¡
,æ
, danÚ
karakter 161, 230, dan 218 masing-masing. Ini harus berfungsi sebagaimana jika disalin secara langsung, dan disimpan sebagai format ANSI.PHP 73 (70) byte
Jika Anda mengizinkan saya tiga karakter biner, ini dapat dikurangi menjadi 70 byte :
di mana
ƒ
,ß
danõ
karakter 131, 223, dan 245 masing-masing.Menerima input sebagai argumen baris perintah. Penggunaan sampel:
sumber
php.ini
(secara default sudah ada), atau untuk pengujian, Anda dapat menambahkan kode berikut ke skrip:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)Solusi ini menggunakan sprite CSS dan gambar yang disediakan sebagai contoh :
HTML (3)
CSS (
8271)Terima kasih kepada xem untuk trik " background: url ":
JavaScript (125 setelah menghapus baris baru yang ditambahkan di sini agar dapat dibaca)
Tes online: http://jsfiddle.net/zhqJq/3/
sumber
<p>
tag dan menghindaridisplay:block
CSS untuk menghemat ruangR (65 karakter):
Bergantung pada beberapa perkiraan yang longgar untuk beberapa ...
sumber
Python 2 - 65
Contoh:
sumber
PostScript:
53 biner, 87 ASCII52 biner, 86 ASCIIHexdump program menggunakan token biner:
Unduh file ini untuk mencobanya.
Menggunakan token ASCII:
forall
Loop pertama menempatkan semua koordinat yang diperlukan pada stack. Koordinat disimpan dalam string untuk meminimalkan ruang yang dibutuhkan. Koordinat berada dalam urutan terbalik, yaitu 4 karakter terakhir adalah untuk segmen A. Kami menarik garis dari(0,8)
ke(4,8)
untuk segmen ini (sebenarnya, kami harus menambahkan 48 ke semua koordinat, karenaforall
menempatkan semua kode ASCII pada tumpukan).Yang kedua
forall
loop melalui semua0
s dan1
s di string input dan mengubahnya menjadi nilai abu-abu.0
s digambar putih (nilai abu-abu 1) dan1
s digambar hitam (nilai abu-abu 0). Kemudian kita menggunakan koordinat yangforall
loop pertama kiri di tumpukan untuk menggambar garis.Aktifkan program menggunakan Ghostscript, seperti Geoff Reedy:
Ini menampilkan:
sumber
neg 49 add
(yang mengagumkan btw) dengan1 and
.not 1 and
benar, bukan? Masih menyimpan satu byte di ASCII dan biner.bitshift
kata yang panjang.APL
101 86 7369Input dari layar melalui ⍞
Yang menghasilkan matriks karakter 9x5 terdiri dari kosong dan and sebagai berikut:
Tujuh digit angka diubah menjadi vektor partisi untuk memilih koordinat ⎕.
sumber
Mathematica
1121031009688, menggunakan Grafiksumber
[123]
[[123 "]] maupunIntegerDigits[123]
bekerja untuk saya. Saya hanya mendapatkanz
, tanpa menyoroti.Python (107)
Jelas lebih golf.
Keluaran:
Penjelasan:
sumber
Python 2.7 (93 karakter):
Penjelasan:
Dengan input stdin, gunakan operator ternary darurat untuk memberikan yang
*
benar dan ruang untuk yang salah. Ambil nilai-nilai itu dan hubungkan ke dalam format pernyataan yang ada dalam format tampilan 7 digit. Paling banyak 83 karakter jika tampilan berfungsi seperti ini:tapi pemesanan membuatnya lebih lama. Adakah yang bisa mengatasi ini?
Contoh:
sumber
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
) Tidak perlu kurung dan ruang untuk pernyataan cetak.>'0'
alih-alih=='1'
daninput()
(dengan backticks ada, tetapi itu tidak akan muncul karena pemformatan di sini)raw_input()
.x = `input()`
Saya pikir kami membutuhkan jawaban lispy ...
Clojure, 159 karakter
Di atas akan berjalan di REPL dan memberikan jawaban yang benar. Sebagai contoh:
Melemparkan angka dengan modifikasi kecil:
hasil:
Tidak mudah dibaca, tetapi mereka ada di sana!
sumber
Javascript 123
Saya dapat menurunkan jumlah karakter (101) jika kami hanya menggunakan satu karakter untuk status "on", tetapi kurang terbaca:
sumber
Catatan tambahan 136
Bukan pemenang, tetapi pendekatan yang berbeda.
Mengharapkan string input berada di tumpukan:
Yang ini bahkan lebih buruk. 294 untuk membuat bitmap "biner". Saya butuh beberapa saat untuk mengingat bahwa setiap baris diisi dengan byte genap. Jadi bitmap 3x5 adalah lima byte dengan bit 3 msb signifikan.
Output sama jeleknya dengan yang lain. :(
Baiklah inilah yang terlihat bagus. 190
Sunting: Itu terbalik dan mundur. Diperbaiki sekarang
sumber
Mathematica 264
Mendapatkan output agar terlihat benar memerlukan banyak byte, jadi jangan cerutu kali ini. Tapi inilah kode verbose (264 karakter).
Set karakter lengkap:
Digit:
sumber
PHP - 155 karakter
itu akan menjadi 150 karakter jika kita menggunakan deklarasi array tipe php 5.4, tetapi saya tidak menginstalnya di laptop saya jadi tidak bisa mengujinya.
Contoh put out.
Penjelasan:
Pertama saya membagi tampilan 7 segmen menjadi Lima baris dan 3 kolom. Dengan baris 1, 3, dan 5 havimg '-' di kolom tengah, dan spasi sebaliknya.
Baris ke-2 dan ke-4 memiliki pipa '|' karakter di kolom pertama dan terakhir. Sekarang keberadaan karakter ini harus dipandu oleh nilai input.
Saya membuat tabel pencarian, yang pada dasarnya adalah dua tabel pencarian. Yang pertama untuk perhitungan nilai untuk baris 1, 3 dan 5. Dan satu lagi di offset 2 (item ke-3) untuk perhitungan baris ke-2 dan ke-4.
sumber
Java - 204 karakter
Output sampel:
Diformat dengan benar:
Sungguh berharap saya bisa menghindari itu untuk loop, tetapi saya mencoba beberapa hal lain dan mereka semua lebih lama. Mungkin ada cara yang lebih baik untuk melakukan ini, tetapi ini adalah upaya pertama saya di golf kode. (Dan Java seperti bahasa terburuk untuk itu, itulah sebabnya saya pikir itu akan menarik.) Bahkan Brainfuck telah mengalahkan saya, tetapi setidaknya output saya terlihat lebih bagus.
EDIT: dapat menyingkirkan "publik" di kelas, menyelamatkan saya 7 karakter!
Dan terima kasih, daniero, karena menunjukkan kepadaku printf! (18 karakter tersimpan)
Menulis ulang format output, mengubah literal karakter menjadi desimal, 12 karakter disimpan.
sumber
printf
metode beberapa versi kembali, yang pada dasarnyaprintln
danformat
dalam satu (seperti fungsi C); Ini akan menghemat beberapa karakter,for
loop dan bagian pembaruan menjadi satu, menghemat satu karakter:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
Itu jelek tapi berhasil, saya pikir. Saya mengalami masalah dalam melihat urutan bit yang tepat, jadi saya menyimpulkan dari jawaban orang lain. Bahkan jika potongan itu salah, panjang kode harus tetap sama.
sumber
VBScript - 178 karakter
sumber
CJam - 29
CJam adalah bahasa baru yang saya kembangkan, mirip dengan GolfScript - http://sf.net/p/cjam . Berikut penjelasannya:
l
membaca garis dari input0
adalah angka 0N
adalah variabel yang diinisialisasi ke string baris baru]
mengumpulkan elemen-elemen pada stack menjadi array yangs
mengubah nilai (array) menjadi string, sehingga menambahkan nol dan baris baru ke input yang diberikan7078571876784728737
adalah angka (angka yang sama yang saya gunakan dalam python, tetapi dalam hex di sana)A
adalah variabel yang diinisialisasi ke 10b
melakukan konversi basis, menghasilkan array [7 0 7 8 ... 3 7]\
menukar dua nilai terakhir pada stackf=
berlaku=
operator (di sini, akses array yang diindeks) pada string input (ditambah nol dan baris baru) dan masing-masing nomor 7, 0, 7, ...Indeks 7 sesuai dengan nol yang ditambahkan, dan 8 sesuai dengan baris yang ditambahkan.
Solusi python saya melakukan hal yang persis sama (kecuali pemisahan digit dilakukan melalui konversi string)
sumber
VBA, 188 karakter
Perhatikan bahwa seseorang harus mengetikkan 188 karakter jika hanya menyertakan spasi kosong wajib - IDE memperluasnya saat Anda menyalinnya ke editor VBA.
Sayangnya, VBScript tidak memiliki array Byte yang sangat diketik, atau yang bisa lebih pendek menggunakan metode ini.
sumber
Javascript (ECMAScript 2016) - 108 byte
Ini mungkin bisa bermain golf lebih jauh, tetapi saya tidak bisa memikirkan apa pun.
sumber
JavaScript, 148 byte
Cobalah online! (Footer adalah Node.js untuk dibaca
.input.tio
)Menerima input ABCDEFG dalam flag biner dan mengembalikan:
sumber
SmileBASIC, 136 byte
Outputnya grafis.
sumber
05AB1E , 4 byte
Cobalah secara online atauverifikasi semua input yang mungkin .
Lihat memverifikasi semua input yang mungkin atas untuk melihat pemetaan yang digunakan untuk setiap input.
Penjelasan:
Ini menyalahgunakan aturan di mana ia menyatakan:
Alternatif lain dalam semangat tantangan menggunakan format-output:
38 byte :
Pasti bisa bermain golf ..
Cobalah online atau verifikasi semua input yang mungkin .
Penjelasan:
Lihat ini 05AB1E ujung tambang ( bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa
•L7ו
adalah1367524
.sumber
PHP 5.6, 65 byte ASCII polos
atau, tanpa linebreak tambahan, tetapi dengan sedikit kesenangan:
Jalankan sebagai pipa dengan
-nR
atau coba online .gangguan 1
gangguan 2
sumber