Seni dicuri dari Berapa ukuran digit?
Digit 7-segmen dapat direpresentasikan dalam ASCII menggunakan _|
karakter. Berikut ini digit-digitnya 0-9
:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Tugas Anda adalah mengurai gambar menjadi angka normal.
Catatan tentang angka
- Setiap digit memiliki lebar yang berbeda.
1
memiliki lebar1
3
dan7
yang2
lebar245689
dan0
semuanya3
lebar
Juga antara setiap digit adalah satu karakter padding. Ini adalah set karakter lengkap:
// <- seharusnya satu spasi, tapi format SE mengacaukannya | | ------------- _ _ | | _ ------------- _ _ | _ | ------------- | _ | | ------------- _ | _ _ | ------------- _ | _ | _ | ------------- _ | | ------------- _ | _ | | _ | ------------- _ | _ | _ | ------------- _ | | | _ |
Memasukkan
Input dapat berupa konsol atau sebagai string arg ke suatu fungsi.
Keluaran
Output dimasukkan ke konsol atau dikembalikan dari fungsi.
Contoh:
_ _ _
| | | |_
| | | |_|
1776
_ _ _
_| | | | |_
|_ |_| | |_|
2016
_ _
| |_| |_| |_
| _| | _|
1945
_ _ _ _ _ _
| | | | | | | | | | | | |
| |_| |_| |_| |_| |_| |_|
1000000
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
0123456789
Ini adalah kode-golf sehingga jumlah byte terpendek menang!
Jawaban:
Pyth,
3330 byteInilah idenya: Setelah kami mengubah input, dan membaginya menjadi digit, kami dapat mengurutkan hash string digit individu dan menetapkannya ke nilai-nilai mereka.
Coba di sini .
sumber
Ruby, 184 byte
Penjelasan
Ini adalah golf kode pertama saya. Terima kasih untuk kesenangannya!
sumber
Pyth, 39 byte
Ini sepertinya berhasil? Cobalah online .
sumber
Japt, 119 byte
Try it here!
Ya ampun, ini sangat panjang. Saya pikir saya belum selesai bermain golf.
Penjelasan
Persiapan
Kami mengambil input dan mengubahnya
|_
menjadi1
. Lalu kami memindahkan, menghapus ruang akhir, dan membagi dua baris baru.Terjemahan
Kami memetakan di atas array yang dihasilkan dan menemukan indeks tempat formulir muncul dalam array referensi. Berikut diagram untuk membantu:
Setelah itu, kita bergabung dengan array angka dan hasil!
CATATAN : Anda mungkin bertanya-tanya mengapa kami harus mengubah setiap karakter seni ke seri 1. Ini karena sepertinya ada bug (atau sesuatu seperti itu) yang tidak membiarkan saya menyimpan karakter apa adanya
|_
.sumber
_
bug itu, tapi saya tidak tahu apa penyebabnya."\n\n"
bisa diganti denganR²
, dan"\\||_"
dengan"%||_"
. Saya pikir Anda juga bisa menyimpan beberapa byte dengan pengkodean string panjang di dasar 4 (mengubah masing-masing dari 4 karakter disinctive untuk0
,1
,2
, atau3
, padding dengan panjang kelipatan dari 4, kemudian berlarir"...."_n4 d}
di atasnya), tapi untuk beberapa alasan , Saya belum mendapatkan ini berfungsi.Python2,
299261244 byteSaya sangat menyukai tantangan ini, kerja bagus!
Penjelasan
Fungsi
s
mengambil tiga baris sebagai input, ia mencoba untuk menemukan pemisahan digit (semua karakter adalah spasi). Ketika pemisahan seperti itu ditemukan itu memanggils
dengan sisa dari tiga baris dan menambahkan nilai yang dikembalikan oleh panggilan ke tiga baris yang menyusun angka. Jika tidak ada pemisahan itu berarti hanya ada satu digit.Fungsi
p
adalah titik masuk sehingga dibutuhkan string yang mewakili digit. Digit disimpan sebagai "hash" yang dihitungsum(ord(c)**i for i,c in enumerate("".join(n)))%108
untuk menghemat ruang (terima kasih atas jawaban lain!).Contoh
Versi lain
261 byte (py3):
249 byte, yang ini transpos baris (py2):
sumber
JavaScript (ES6), 169 byte
Mulai dengan memecah menjadi tiga baris, memetakan kembali setiap kolom menjadi sebuah nilai, dan kemudian membangun identitas unik untuk setiap kolom dari nilai-nilai itu. Itu kemudian dibagi dengan
0
(identitas untuk ruang antara kolom), dan akhirnya memetakan setiap identitas ke nilai-nilai bilangannya, yang digabungkan dan dihasilkan.sumber
join
ed ke string sehingga saya bisa membaginya. Saya percaya Anda bisa melakukannya dengan Python juga?Python 3,
281254 byteEdit
Saya hanya melihat kode untuk jawaban python lainnya dan memperhatikan bahwa banyak dari kode tersebut mirip. Ini tiba di mandiri.
(baris baru ditambahkan untuk "keterbacaan")
Tidak Disatukan:
Tes:
Bagaimana itu bekerja
(Catatan: Saya menjelaskan program yang tidak dikenali di sini karena lebih mudah dibaca dan memiliki kode yang sama persis, dengan pengecualian bahwa
digit
fungsi tersebut dimasukkan ke dalam lambda)Fungsi utamanya adalah
parse
. Pertama membagi input menjadi beberapa baris dan menciptakannumbers
array.Ini adalah bagian favorit saya (karena butuh waktu lama untuk mencari tahu). Di sini kita
zip
garis sehingga kita pada dasarnya dapat melintasi input secara vertikal. Ketika baris memiliki karakter di atasnya, kita menambahkannya ke nomor terakhir dalamnumbers
array. Jika tidak ada karakter di dalamnya, kami menambahkan nomor baru ke array.Sangat sederhana,
numbers
dipetakan dengandigit
fungsi dan dikonversi menjadi string.Ini (cukup) sederhana.
fingerprint
adalah representasi string dari angka yang dibuat di atas minus 2 karakter pertama (ini adalah sidik jari terkecil yang bisa saya temukan). Kami mengembalikan indeks pertandingan pertama.sumber
Haskell,
270207 byteJangan terlalu keras, ini adalah program haskell pertama saya;) Saya hampir yakin ini bisa bermain golf lebih lanjut, tapi saya tidak tahu bagaimana mengingat pengetahuan saya yang terbatas tentang bahasa tersebut.
Tidak Disatukan:
Terima kasih banyak kepada @nimi untuk tipsnya!
sumber
import Data.List
dalam hitungan byte Anda. Berita baik: a) jika Anda telahData.Lists
menginstal, Anda dapat mengimpornya dan menggantinyaa
dengansplitOn
:...map c$splitOn[" "]$transpose...
dan...f<-splitOn",""|_...
. b)intercalate "" n
adalahconcat n
atauid=<<n
. c) gantires
dengan nama satu huruf. d) penggunaan pola penjaga bukannyalet ... in
:c n|e<-drop 2$id=<<n,Just r<-elemIndex ... ]=(show r)!!0
.=<<
terjadi? Baik hoogle docs atau tipe signature sangat membantu saya.=<<
dalam konteks daftar adalahconcatMap
, yaitu memetakan fungsi yang diberikan di atas daftar dan menggabungkan hasilnya ke dalam satu daftar.>>=
melakukan hal yang sama tetapi dengan argumen terbalik.id =<< n
(ataun >>= id
) memetakan fungsi identitas di atas daftar (daftar), yaitu tidak melakukan apa-apa dengan sublists dan menggabungkannya. Jadi sama denganconcat
.