Saya pikir sebagian besar orang di sini tahu apa tampilan 7-segmen untuk digit:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Kita dapat mendefinisikan perbedaan 7-segmen (7SD) antara dua digit menjadi jumlah segmen yang perlu diaktifkan untuk beralih dari satu ke yang lain. Misalnya 7SD antara 1
dan 2
adalah 5 (tiga segmen horisontal dan lebih rendah dua segmen vertikal perlu toggle), dan 7SD antara 6 dan 8 adalah 1 .
Selanjutnya, kita dapat mendefinisikan 7SD antara dua angka menjadi jumlah 7SD antara digit yang sesuai. Jika satu nomor lebih panjang dari yang lain, kami mengasumsikan mereka benar-rata dan menambahkan jumlah segmen yang diperlukan untuk menampilkan digit tambahan paling signifikan dari nomor yang lebih besar. Sebagai contoh, perhatikan 7SD antara 12345
dan 549
:
x: 1 2 3 4 5
y: 5 4 9
7SD: 2+5+2+0+1 = 10
Tugas Anda adalah menghitung 7SD antara n dan n +1 , diberikan n .
Untuk kenyamanan, berikut adalah tabel lengkap 7SD antara masing-masing digit. Baris _
mewakili posisi kosong.
_ 0 1 2 3 4 5 6 7 8 9
_ 0 6 2 5 5 4 5 6 3 7 6
0 6 0 4 3 3 4 3 2 3 1 2
1 2 4 0 5 3 2 5 6 1 5 4
2 5 3 5 0 2 5 4 3 4 2 3
3 5 3 3 2 0 3 2 3 2 2 1
4 4 4 2 5 3 0 3 4 3 3 2
5 5 3 5 4 2 3 0 1 4 2 1
6 6 2 6 3 3 4 1 0 5 1 2
7 3 3 1 4 2 3 4 5 0 4 3
8 7 1 5 2 2 3 2 1 4 0 1
9 6 2 4 3 1 2 1 2 3 1 0
Memasukkan
- Input adalah bilangan bulat positif tunggal
n
. - Anda dapat menulis program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi.
- Anda dapat mengasumsikan bahwa input paling banyak kurang dari jumlah terbesar yang dapat diwakili oleh tipe integer standar bahasa Anda, selama tipe tersebut mendukung setidaknya nilai hingga dan termasuk 127.
Keluaran
- Anda harus mencetak satu bilangan bulat, 7SD antara
n
dann+1
. - Anda dapat menampilkan melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau argumen fungsi (keluar).
Mencetak gol
Standar kode-golf aturan berlaku, kode terpendek (dalam bytes) menang.
Uji Kasus
Untuk beberapa alasan yang tidak jelas, urutan ini belum ada dalam OEIS, meskipun ada urutan yang terkait erat A123587 . Berikut adalah 100 angka pertama (dimulai dengan n = 1, 2, 3, ...
):
5, 2, 3, 3, 1, 5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 4, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4, 5, 2, 3, 3, 1, 5, 4, 1, 5, 4,
5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 7, 4, 5, 2, 3, 3, 1,
5, 4, 1, 6, 4, 5, 2, 3, 3, 1, 5, 4, 1, 3, 4, 5, 2, 3, 3, 1, 5, 4, 1, 6, 4
Input pertama yang 7SD lebih besar dari 9 adalah 1999
yang harus menghasilkan 11. Berikut adalah beberapa contoh yang lebih besar:
n 7SD
1999 11
12345 1
999999 14
5699999 15
8765210248 1
Python,
5048 bytePenjelasan
Fungsi ini beroperasi pada digit paling signifikan dari angka tersebut
n
, menjumlahkan 7SD dari digit ketika ditambah satu hingga setelah non-9
digit pertama .26523308
adalah bitmask yang mengkodekan pemetaan untuk digit0-8
. Ketikan=0
, yang hanya terjadi ketikan
hanya terdiri dari9
s, jawabannya akan mati oleh dua. Ini dikompensasi oleh ekspresi0**n*2
. Adapun digit9
, bitmask mengevaluasi ke nol yang akan memicu panggilan rekursif sambil menambahkan2
ke 7SD.sumber
05AB1E ,
3130282726 byteKode:
Penjelasan ( kedaluwarsa ):
Kami mengubah yang berikut ini menjadi non-9 digit terakhir:
Untuk kasus khusus:
Menggunakan pengkodean CP-1252 . Cobalah online! .
28 byte alternatif:
D[¤©•2X›ùì•sès®9Ê#¨]\rÚ9Q4*O
.sumber
Java, 63 byte
Dunia dikoreksi sebagai Python melewati Jawa sekali lagi
Karena, kau tahu, Jawa.
Lihat di ideone
Maksimal keluar di 2147483647, karena itu adalah Jawa
Integer.MAX_VALUE
.Ini adalah port jawaban Python saya yang merupakan port jawaban ES6 .
sumber
MATL ,
613936 byteCobalah online!
Penjelasan
sumber
Julia, 44 byte
Coba di sini.
Dennis menyimpan satu byte!
sumber
Python,
7166 byte48 byte oleh xsot . Matematika lebih ajaib!
Lihat di ideone
Karena jawaban Python sebelumnya tidak berfungsi dan jauh dari optimal. Port sederhana dari versi ES6 sebelumnya . Sekarang menggunakan bit twiddling (dari formulasi alternatif ES6) untuk memotong gips!
Dapat dibuat untuk bekerja dengan Python 3 dengan secara eksplisit menggunakan floordiv untuk +1 byte.
sumber
9
e
merupakan huruf yang valid setelah angka dalam, misalnya9e9
,.n%10==9
menjadin%10<9
tidak menghemat karena jika tidak membutuhkan ruang dalam urutan ini.Jolf, 32 byte
Coba di sini!
Penjelasan
Ini adalah perubahan dari jawaban Neil.
sumber
Pyth -
783027 byteYang pertama itu memalukan.
Test Suite .
sumber
J, 53 byte
Awalnya berdasarkan solusi @ Neil . Kemudian ditingkatkan dengan menyimpan byte menggunakan rumus yang sama dalam solusi @ Lynn .
Versi 54 byte berdasarkan string adalah
Pemakaian
sumber
Retina , 34 byte
Cobalah online! (Baris pertama hanya memungkinkan pemrosesan beberapa kasus uji sekaligus.)
Penjelasan
Seperti sebagian besar jawaban telah ditemukan sekarang, kita tidak perlu menggunakan tabel lengkap, karena hanya
9
perubahan non- digit paling signifikan ketika bertambah. Begitulah cara jawaban ini bekerja.Ini cocok dengan (
M
) regex.9*$
yaitu digit pertama yang hanya dipisahkan oleh9
s dari akhir. The!
memberitahu Retina untuk mengganti input dengan pertandingan ini, membuang segala sesuatu yang tidak mempengaruhi 7SD tersebut.Jika input sekarang dimulai dengan
9
itu artinya, input itu sendiri hanya terdiri dari9
s, sehingga tampilan 7-segmen perlu menambahkan1
yang biaya2
. Cara paling sederhana untuk menangani ini adalah mengganti yang utama9
dalam hal ini dengan a0
, karena biaya penambahan9
(ke0
) adalah2
dan biaya penambahan0
(ke1
) adalah4
, jadi ini meningkatkan biaya keseluruhan2
sesuai kebutuhan.Sekarang kami memiliki tahap transliterasi yang menggantikan setiap digit dengan biaya untuk penambahannya (karena
d
ekspansi ke0123456789
). Perhatikan bahwa ini adalah subdiagonal pertama dari tabel 7SD.Ini menggantikan setiap digit
n
dengann
salinan1
, yaitu mengkonversi setiap digit ke unary, dan karena tidak ada pemisah segera menambahkannya bersama-sama.Akhirnya, kami menghitung jumlah karakter (yaitu jumlah kecocokan dari
.
) dalam hasil, yang mengubah jumlah unary kembali ke desimal.sumber