Tuliskan program terpendek yang akan mengambil serangkaian angka (dengan panjang minimal 20) sebagai input, dan tampilkan output menggunakan nomor gaya jam digital standar. Misalnya untuk input 81, solusi dengan output ascii akan memberikan:
_
|_| |
|_| |
Output grafis juga dapat diterima, jika itu membantu.
Jawaban:
APL (Dyalog) (45)
String,,
ા8धगɯેࣃଏ૽
adalah karakter unicode2750 56 2343 2327 623 2759 2777 2243 2831 2813
(namun, Anda harus dapat menyalin dan menempelkannya). Mereka menyandikan angka-angka. Program membaca garis dari keyboard.Penjelasan:
1+⍎¨⍞
: baca baris dari keyboard, parsing setiap karakter sebagai digit, lalu tambahkan 1 ke setiap nomor (array APL secara default adalah 1 berbasis).⎕UCS'ા8धगɯેࣃଏ૽'[
...]
: Pilih karakter yang dimiliki oleh digit angka yang Anda masukkan, dan cari nilai Unicode.{
...}¨
: untuk masing-masing nilai ini, lakukan:1+⍵⊤⍨9⍴3
: dapatkan 9 digit base-3 pertama dari nilai seperti yang diekspresikan pada base-3, dan tambahkan 1 (karena array berbasis 1).' _|'[
...]
: pilih spasi, garis horizontal, atau garis vertikal tergantung pada angka-angka ini3 3⍴
: format sebagai kotak 3-oleh-3.sumber
Funciton
Tidak benar-benar bahasa yang cocok untuk bermain golf ... tetapi terlepas dari itu, saya mencoba untuk menjaga ukuran kode sekecil mungkin - tantangan yang sangat berbeda dari pada bahasa "biasa". Ini adalah 1.555 karakter atau 3110 byte (jika dikodekan sebagai UTF-16; UTF-8 lebih besar).
Berikut adalah screenshot dari program yang sedang berjalan. Ini benar-benar bekerja :)
Karena ini terlihat jelek di StackExchange karena spasi baris tambahan, coba jalankan kode berikut di konsol JavaScript browser Anda untuk memperbaikinya:
$('pre').css('line-height',1)
Mungkin bisa lebih kecil jika saya tidak melakukan kesalahan karena yang outputnya kembali ke depan; Saya memperbaikinya dengan menambahkan fungsi ekstra untuk membalikkan input. Kalau tidak, saya mungkin harus menulis ulang semuanya.
Saya juga membuat kesalahan lain (menukar operan dalam dua panggilan ke
‼
) yang membuatnya perlu untuk mendeklarasikan‡
fungsi tambahan , tetapi yang ini sangat kecil sehingga cocok di dalam fungsi utama dan dengan demikian tidak menambahkan karakter!sumber
wxpython, banyak karakter
Uji
ps: bukan entri yang serius, tetapi sepertinya keluaran grafis juga dapat diterima, jadi saya coba saja :-)
sumber
Golfscript - 66 karakter
xxd
: (gunakanxxd -r
untuk mengembalikan)Ini mengikuti sebagian besar jawaban lain di mana tidak ada spasi antara angka dan spasi tambahan disimpan. Sebuah ruang antara angka dapat dengan mudah ditambahkan dengan
1+
sebelumnya{"_ |"=}%
. Dikemas ke dalam nomor basis 3, dan kemudian sebagai basis 243 ke dalam sebuah string.sumber
J,
90,7868 karakter[ perbarui: menggunakan pengkodean unicode (1 byte):
berfungsi seperti sebelumnya:]
Kuncinya adalah dalam pengkodean digit sebagai basis-3 integer. Nol, misalnya adalah:
atau
' _ | ||_|'
, yang menjadi 010202212 3 = 2750.sumber
http://codegolf.stackexchange.com/q/1000
)Mathematica
205 209 198179Pemakaian
sumber
JavaScript (145)
148145Karena JavaScript tidak memiliki input / output standar, ini ditulis sebagai fungsi yang mengambil string dan mengembalikan output sebagai string.
Melamun:
Begini cara kerjanya:
Tiga bit pertama adalah untuk baris pertama, dll.
Dalam setiap kelompok yang terdiri dari tiga bit, yang pertama menentukan apakah karakter pertama adalah
|
atau spasi, yang kedua apakah itu_
atau ruang, dan yang ketiga lagi|
atau ruang.Tiga bit ini diambil sebagai
c&1
,c&2
danc&4
, yang kemudian digunakan sebagai indeks ke dalam stringb
.Pada setiap iterasi,
i%L
adalah "koordinat x", yaitu digit dalam inputn
Pada setiap iterasi,
i/L
adalah "y-coordinate", yaitu baris, tetapi kita harus|0
menjadikannya bilangan bulatAkhirnya, spasi antara digit dan baris baru antara garis juga diambil dengan mengindeks
b
, menggunakan kembali karakter spasi dan posisi 3 yang tidak digunakan dalam string itu! :)sumber
Ruby, 142
mengharapkan input dalam variabel
x
. contoh:sumber
Golfscript - 97 karakter
sumber
Windows PowerShell, 127
Karena string berisi beberapa karakter yang tidak menyenangkan untuk ditulis, hexdump untuk kenyamanan Anda:
sumber
gForth,
186175 karakterVersi baru:
Ini sebenarnya mengganggu untuk keluar (+3 karakter) juga :). Ini adalah versi yang lebih mudah dibaca, ia melakukan beberapa pengepakan bit untuk mengurangi ukuran LUT hingga 1/3, tetapi kode yang dihasilkan lebih kompleks sehingga tidak banyak menghemat:
Versi lama:
Ini meninggalkan tumpukan tidak seimbang dan tidak repot-repot keluar dari penerjemah. Ini adalah versi pembersih yang lebih mudah dibaca
sumber
C # 369 Karakter
Saya dapat dengan mudah memotong beberapa karakter. Intinya lebih ke penyalahgunaan LINQ :)
Lebih banyak versi spasi putih:
sumber
using
s (409). Lalu ada spasi putih yang tidak perlu yang bisa dihapus (402). Tugas tersebut menyatakan bahwa spasi putih antara digit harus dihilangkan (399).g
hanya digunakan satu kali, sehingga Anda dapat menyimpan 7 karakter dengan menggariskannya.b
hanya digunakan sekali saja, jadi Anda bisa inline juga. Selain itu, Anda dapat menyimpan banyak karakter jika Anda mengubah array integer"{H=mNgwI\x7fo"
, atau bahkan lebih pendek jika Anda mengubah\x7f
ke karakter aktual # 127 (yang tidak dapat dicetak, tetapi diizinkan). The>>
akan tetap bekerja karena ada konversi implisit darichar
keint
..ToCharArray()
dan.ToArray()
keduanya sama-sama redundan, Anda bisa menghapusnya :)Solusi Java:
585570 KarakterSaya tidak berpikir saya akan mencoba lagi bermain golf di Jawa ...
sumber
Python,
218180176b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
Dengan jeda baris:
sumber
Bash, 11 karakter
Ya saya tahu, saya curang.
Anda perlu menginstal toilet.
sumber
figlet
juga akan bekerja.Jawa, 2.095
SAMPEL I / O
sumber
D: 295 Karakter
Lebih Jelas:
sumber
Ocaml, 268
Versi yang mudah dibaca
sumber
Perl (
182180)membaca dari STDIN.
sumber
Ghostscript
(270)(248)(214)Edit: Lebih banyak substitusi. Ruang yang dihapus di antara digit.
Sunting: Lebih banyak lagi pergantian. Loop utama sekarang terlihat seperti apa fungsinya!
Menggunakan fitur pemrosesan argumen ghostscript: aktifkan dengan
gs -dNODISPLAY -- digit.ps 012 345 6789
.sumber
Delphi || 453 (568 Dengan format)
Bahkan tidak cukup dekat untuk menang tetapi itu menyenangkan untuk dilakukan ^. ^
Dengan format
akhir.
sumber
PHP,
140136133131129128 byteSaya dapat menyimpan
57 lebih banyak dengan extended ascii: masing-masing untuk"| _"
dan linebreak, tiga untuk~"z/]{4lno~|"
(negasi bitwise akan mengubah segalanya menjadi karakter ascii yang diperluas = tidak ada karakter khusus, dan PHP tidak perlu tanda kutip di sana), dua untuk-1
(itu hanya di sana untuk menyimpan peta dalam ascii standar). Tetapi untuk keterbacaan dan kompatibilitas, saya tetap menggunakan ascii standar.bitmap
_
,|_|
,|_|
sebagai bit-6-
,024
,135
(bit nomor & 2 adalah 0 untuk LED vertikal)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(memungkinkan tulisan cepat ternary dalam pemilihan karakter)template
7
untuk ruang ->767
,024
,135
701
,623
,745
(menjadikan$p=0
usang)547326107
(baca peta dari kanan ke kiri; memungkinkan perulangan aritmatika)5473261070
(memungkinkan untuk menggabungkan shift dengan test in loop head)753754680
(dua byte lebih pendek: satu digit dan awalan)kerusakan
sumber
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Java 8, 280 byte
Penjelasan:
Coba di sini.
Sebagai fungsi, ini akan menjadi 218 byte .
sumber
Python, 227 karakter
Sederhana dan mudah.
sumber
Perl, 145 karakter
Tidak Terkumpul:
sumber
Python 3.4.3 -
1514858 byteGodaan untuk menyelesaikan ini terlalu hebat untuk tidak mendaftar dan jawab = P
Saya agak baru di Python, jadi saya memformat program saya dengan baik dan rapi (atau setidaknya saya lakukan). Perbaikan sangat dihargai!
Sunting: Nama variabel yang disingkat, digunakan; untuk mempersingkat, hanya satu ruang di akhir angka output, variabel yang ditentukan sekaligus.
Baris baru adalah 2 byte (CRLF) dan saya menggunakan tab alih-alih 4 spasi.
sumber
SmileBASIC, 216 byte
Menggunakan grafik alih-alih teks, karena mungkin lebih pendek.
Penjelasan:
sumber
C ++,
230229225223218207204198 byteMembaca dari stdin dan output ke stdout.
Penjelasan:
sumber
Powershell, 114 byte
Skrip uji:
Keluaran:
Ide utama:
Setiap nomor gaya jam digital standar berisi 3 baris. Apalagi baris pertama hanya berisi 2 opsi. Sebanyak 6 opsi. Oleh karena itu, 7 bit sudah cukup untuk menyandikan setiap digit.
Jadi, string
f-SR5Z^mvr
mengkodekan semua segmen untuk semua nomor gaya jam digital standar.Catatan: Urutan
line str
dipilih secara khusus sehingga semua kode berada dalam interval32..126
.sumber