Anda mungkin semua tahu tampilan 7-segmen yang dapat menampilkan antara lain semua digit dari :
Tantangan
Kami hanya mempertimbangkan segmen , tugas Anda adalah untuk memecahkan kode satu digit mengingat segmen mana yang dihidupkan.
Ini dapat dikodekan sebagai integer 8-bit, berikut adalah tabel setiap digit dengan representasi binernya dan nilai-nilai little-endian dan big-endian yang sesuai:
Aturan & I / O
- Input akan menjadi salah satu dari
- bilangan bulat tunggal (seperti pada tabel di atas salah satu dari dua pesanan yang diberikan)
- daftar / array / .. bit
- string yang terdiri dari karakter
ABCDEFG
(Anda dapat menganggap itu diurutkan, sebagai contohABC
mengkodekan ), case mereka adalah pilihan Anda (bukan case campuran)
- Output akan menjadi digit yang disandikannya
- Anda dapat menganggap tidak ada input yang tidak valid (tidak valid berarti tidak ada digit yang sesuai)
Tes
Karena tantangan ini memungkinkan banyak representasi, silakan merujuk ke tabel.
Jawaban:
JavaScript (ES6), 26 byte
Mengambil input dalam Endian kecil.
Cobalah online!
sumber
Python 3 , 18 byte
Cobalah online!
Menggunakan input little-endian. Berisi
\x7F
byte mentah .Python 2 , 27 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 41 byte
Cobalah online!
Menggunakan kolom bilangan bulat kecil-endian sebagai input. Abaikan peringatan sintaksis.
Untuk input X, pertama-tama kita ambil X mod 41 dan kemudian ambil hasilnya mod 11. Hasilnya berbeda mod 11, jadi kita bisa mengekstraknya dari sebuah tabel. Misalnya, 126 mod 41 mod 11 adalah 3, jadi jika kita membuat posisi 3 sama dengan 0, maka kita mendapatkan jawaban yang benar untuk input 126.
Tabelnya adalah
9[,6,0,8,2,3,1,7,5,4]
. Bagian 0 adalah kepala, yaitu9
. Bagian 1 hilang, jadi ituNull
, untuk menyelamatkan byte: kita tidak perlu mengambil bagian 1. Kemudian bagian 2 adalah6
, bagian 3 adalah0
, dan seterusnya, seperti biasa.Jawaban Jonathan Allan memberi kita
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Ini tidak lebih pendek, tetapi menghindari peringatan sintaksis!Bahasa Wolfram (Mathematica) ,
2725 byte(Ada beberapa karakter di sini yang tidak muncul, maaf. Klik tautan di bawah dan Anda akan melihatnya.)
Cobalah online!
Ini semua tentang memaksa brute beberapa string untuk masuk ke dalam
Hash
sehingga hash akhirnya memiliki nilai yang tepat mod 11. Lebih memaksa brute mungkin bisa membawa kita ke solusi yang lebih pendek.sumber
Jelly , 12 byte
Menerima integer little-endian.
Cobalah online!
Ini adalah implementasi yang naif, mungkin ada cara untuk mendapatkan kode terser.
sumber
Python 2 , 31 byte
Cobalah online! menerima input sebagai little-endian.
sumber
Java (JDK) , 32 byte
Cobalah online!
Kredit
sumber
JavaScript (Node.js) , 25 byte
Menerima integer little-endian.
Cobalah online!
Ports untuk 31 byte dalam Python dengan
lambda n:'1498620537'[384%n%13]
sumber
Spasi , 152 byte
Wajib "S, T, dan L tidak benar-benar ada, mereka hanya merupakan representasi perintah yang terlihat".
Cobalah online!
Berakhir dalam kesalahan.
Sintaks yang mirip perakitan:
sumber
brainfuck ,
474176154151149137 byteMengambil string input delapan
0
dan1
termasuk yang pertama0
untuk titik desimal.(seperti pada kolom kedua dari tabel di pos)
Menghasilkan digit dari 0 hingga 9.
Cobalah online!
Algoritma
Dengan mengamati keadaan segmen tertentu kita dapat membagi satu set digit yang mungkin menjadi himpunan bagian yang lebih kecil. Di bawah ini adalah pohon pencarian biner statis yang digunakan dalam kode saya. Subtree kiri sesuai dengan status segmen ON, kanan sesuai dengan status segmen OFF.
Beberapa pengamatan bermanfaat untuk bermain golf
+++++
untuk kedua nilai dan kemudian+
hanya untuk enam.+
perintah jika kami menambahkan 2 ke nilai output terlebih dahulu. Dalam hal ini kita perlu menguranginya untuk0
dan1
hanya dan mendapatkan keuntungan untuk digit lainnya.sumber
Retina , 96 byte
Cobalah online! Mungkin bukan cara terbaik, tapi ini cara pemrograman yang menarik di Retina. Penjelasan:
Mencoba menangkap kasus-kasus menarik. Capture positif hanya menangkap surat itu jika ada. Karenanya panjang tangkapan adalah 1 jika ada dan 0 jika tidak ada. Kasing khusus adalah tangkapan 4 dan 6 yang hanya ada jika D atau E tidak ada. Ini hanya dapat dinyatakan dalam desimal sebagai
$#4
dan$#6
tetapi hanya itu yang kita butuhkan di sini. Tangkapan tersebut kemudian dibangun menjadi string yang panjangnya adalah angka yang diinginkan. Sebagai contoh, jika kita menulis6*$1
maka string ini memiliki panjang 6 jika A ada dan 0 jika tidak ada. Untuk memilih antara ekspresi yang berbeda, kami menggunakan$.
(untuk tangkapan positif) atau$#
(untuk tangkapan negatif) yang dievaluasi menjadi 0 atau 1 dan ini kemudian dapat dikalikan dengan string sejauh ini.F
diulang 6 kali danB
dua kali (oleh penggabungan karena itu golfier). Namun, hasilnya diabaikan kecuali keduanyaE
danG
ada. Ini menangani kasus2
,6
dan8
.F
diulang 5 kali, dan jikaB
ada, itu ditambahkan keenam kali ditambah 3 tambahan (diwakili oleh string konstan panjang 3). Namun, hasilnya diabaikan kecualiD
ada danE
tidak ada. Ini menangani kasus3
,5
dan9
.A
diulang 6 kali, danG
diulang 3 kali, dan tambahan1
ditambahkan (diwakili oleh karakter konstan antara keduanya karena golfier). Namun hasilnya diabaikan kecualiD
tidak ada. Ini menangani kasus1
,4
dan7
.Senar di atas kemudian digabungkan dan panjangnya diambil. jika tidak ada yang di atas berlaku, tidak ada string yang dihasilkan, dan panjangnya karenanya
0
.String yang dihasilkan (sebelum panjang diambil) adalah sebagai berikut:
sumber
MATL , 14 byte
Input adalah angka yang mewakili segmen dalam format little-endian.
Cobalah online!
Penjelasan
sumber
Perl 5 -pl, 24 byte
Cobalah online!
Membawa bilangan bulat little-endian.
sumber
Ruby , 29 byte
Cobalah online!
sumber
Japt, 15 byte
Mengambil nilai big-endian sebagai input.
Cobalah
Penjelasan
String berisi karakter pada masing-masing codepoint nilai big-endian;
Ud
mendapatkan karakter di codepoint input danb
menemukan indeks itu dalam string.sumber
Neim , 15 byte
Penjelasan:
Cobalah online!
sumber
Stax , 12 byte
Jalankan dan debug itu
Input adalah integer endian kecil.
Ini menggunakan konstanta string yang sama dengan solusi MATL Luis.
sumber
TI-BASIC (TI-83 + / 84 + series), 15 byte
Menggunakan input little-endian. Hash cukup umum di TI-BASIC, jadi saya menulis fungsi hash brute-forcer untuk kasus seperti ini.
Kami mendapat sedikit keberuntungan di sini, karena pengganda 9 digit lebih panjang daripada yang diharapkan 10.
sumber
05AB1E ,
17161512 byte-1 byte terima kasih kepada @ErikTheOutgolfer .
-1 byte dengan membuat port jawaban Mathematica dari @MishaLavrov .
-3 byte terima kasih kepada @Grimy .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa
•NŽyf¯•
adalah99608231754
.sumber
128в
. Lupa ada builtin untuk dibelah128
dua256
. Terima kasih!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Arang, 17 byte
Cobalah!
Port of the Japt answer .
sumber