Diberi tampilan 7-segmen dengan beberapa segmen dihidupkan dan beberapa mati, temukan urutan digit (0-9), sehingga setelah mengganti segmen yang sesuai untuk setiap digit, semua segmen dimatikan.
Contoh
_
_ [3] => | [1] => [OFF]
_ |
Angka dan segmennya:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Aturan
Codegolf ⊨ entri terpendek menang.
Memasukkan
Daftar segmen yang tidak kosong yang dinyalakan, diberikan sebagai
Urutan angka. Segmen diberi nomor dari atas ke bawah, kiri ke kanan; mulai dari 0 atau 1. Nomor tidak perlu berurutan.
Satu digit 7-bit. MSB / LSB tidak ditentukan (dengan demikian Anda dapat memilih).
Karakter non-numerik antar angka diperbolehkan (tetapi tidak harus didukung).
Misalnya. untuk nomor 7
: 136
atau 1010010
atau0100101
Keluaran
Urutan angka yang akan "diterapkan" ke layar. Tidak dibatasi dengan cara apa pun, seperti urutan angka. Misalnya. untuk keadaan awal sesuai dengan nomor 1
, output yang valid akan 1
, 111
, 010
, dll
Output alternatif adalah digit 10-bit (sekali lagi, MSB / LSB adalah pilihan Anda). Misalnya. untuk 1
sebagai input, outputnya adalah 1000000000
atau 0000000001
.
Beberapa kombinasi memiliki beberapa solusi non-berulang, misalnya. segmen yang sesuai dengan huruf besar H
dapat dimatikan 013
, tetapi juga 489
dan0258
.
Jika tidak ada solusi (yang saya percaya tidak mungkin), hasilnya kosong.
sumber
301
untukH
).17
,08
, dan1479
. Solusi untuk segmen vertikal atas, kiri ke kanan, adalah39
dan59
. Solusi untuk segmen vertikal bawah, kiri ke kanan, adalah56
dan2389
.2
tidak selalu diperlukan, karena Anda bisa menggantinya dengan baik0468
,1358
atau1369
, tergantung pada apakah Anda ingin0
,8
atau9
dalam jawaban Anda, tetapi tidak ada cara untuk menghilangkan7
sama sekali, dan saya pikir Anda harus memiliki setidaknya satu dari1
dan3
.Jawaban:
Jelly ,
2625 byteCobalah online!
Mengambil input sebagai bilangan bulat 7-bit. Mengembalikan bentuk biner dari integer 10-bit.
Ini hanya memaksa semua kemungkinan. Hapus
Ḣ
untuk mendapatkan semua kemungkinan keluaran atau ganti denganX
untuk mendapatkan kemungkinan keluaran acak.Program Visualisasi Ajaib!
Bagaimana itu bekerja
sumber
“wØ][:koR¶z‘
) mungkin berisi kesalahan. Nomor Anda9
tidak memiliki segmen bawah (bandingkan9
dalam visualisasi Anda dengan yang ada di deskripsi tugas). Kalau tidak sangat bagus, terutama visualisasi!JavaScript (ES6), 60 byte
Ini berfungsi karena:
sumber
JavaScript (ES6),
1171071018684 byteDisimpan 15 byte berkat Neil
Mengambil input sebagai bilangan bulat 7-bit, di mana LSB adalah segmen atas. Mengembalikan bilangan bulat 10-bit di mana LSB adalah digit
0
.Demo
Tampilkan cuplikan kode
sumber
f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k
. Atau jika Anda menganggap jawaban itu adaf=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k
,.1-7
, Anda dapat menyimpan 8 byte lebih lanjut dengan menghapus83
dan,91,75
dan menggunakank+2
.Mathematica, 40 byte
(Ini mungkin golf lebih banyak dengan memilih output untuk setiap segmen dengan hati-hati dan beralih antara LSB dan MSB.)
Ambil input sebagai daftar posisi misalnya
{2,4,5,7}
dan hasilkan angka 10-bit (384
=0110000000
dalam biner) dalam urutan MSB (0, ..., 9).Dalam contoh itu sesuai dengan
dan output sesuai dengan
{7,8}
.Penjelasan:
Angka ajaib (daftar hardcoded) adalah output yang dikembalikan untuk setiap segmen. (dikodekan dalam biner) Dan, jika angka muncul dalam daftar dua kali, efeknya sama dengan tidak muncul, jadi bitor XOR digunakan. Kita hanya perlu XOR output dari kemungkinan nilai segmen dihidupkan.
sumber
Jelly , 12 byte
Cobalah online!
Ini tidak kasar, dan itu jauh lebih pendek daripada solusi saya yang lain. Mengambil input sebagai daftar segmen yang dihidupkan, dan output karena LSB adalah segmen teratas.
Keluaran sebagai daftar digit bergerak.
Bagaimana itu bekerja
Ini akan cepat
sumber
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7
, kemudian XOR-menguranginya @ ais523. Meratakan akan berfungsi pada daftar digit yang digunakan yang membutuhkan lebih banyak karakter.