Tampilan numerik 7-segmen di mana-mana dapat dengan jelas menampilkan semua 16 digit heksadesimal seperti yang ditunjukkan dalam wikipedia .gif ini
Entri untuk tantangan ini akan membuat diagram sirkuit menggunakan gerbang logika NAND yang mengubah empat bit dari digit hex menjadi input untuk tujuh segmen. Input untuk tampilan 7 segmen biasanya diberi label sebagai berikut: (DP (titik desimal) diabaikan untuk tantangan ini)
Karenanya sirkuit Anda perlu menyesuaikan diri dengan tabel kebenaran berikut:
Hex | Hex Input Bit | Output to Segment line:
digit | 3 2 1 0 | A B C D E F G
------+---------------+-----------------------
0 | 0 0 0 0 | 1 1 1 1 1 1 0
1 | 0 0 0 1 | 0 1 1 0 0 0 0
2 | 0 0 1 0 | 1 1 0 1 1 0 1
3 | 0 0 1 1 | 1 1 1 1 0 0 1
4 | 0 1 0 0 | 0 1 1 0 0 1 1
5 | 0 1 0 1 | 1 0 1 1 0 1 1
6 | 0 1 1 0 | 1 0 1 1 1 1 1
7 | 0 1 1 1 | 1 1 1 0 0 0 0
8 | 1 0 0 0 | 1 1 1 1 1 1 1
9 | 1 0 0 1 | 1 1 1 1 0 1 1
A | 1 0 1 0 | 1 1 1 0 1 1 1
b | 1 0 1 1 | 0 0 1 1 1 1 1
C | 1 1 0 0 | 1 0 0 1 1 1 0
d | 1 1 0 1 | 0 1 1 1 1 0 1
E | 1 1 1 0 | 1 0 0 1 1 1 1
F | 1 1 1 1 | 1 0 0 0 1 1 1
Saya pikir tabel ini akurat, tapi tolong beri tahu saya jika Anda menemukan kesalahan.
Skor Anda ditentukan oleh jumlah gerbang NAND 2-input yang Anda gunakan (1 poin per gerbang). Untuk menyederhanakan hal-hal, Anda dapat menggunakan gerbang AND, ATAU, TIDAK, dan XOR dalam diagram Anda, dengan skor terkait berikut:
NOT: 1
AND: 2
OR: 3
XOR: 4
sumber
Jawaban:
Domino - Total Skor: 243 NAND
OR yang digunakan: 61 (masing-masing 3 NAND -> 183 NAND)
BUKAN digunakan: 60 (masing-masing 1 NAND -> 60 NAND)
Solusi ini ada dalam domino dan membutuhkan koleksi perangkat lunak yang saya tulis dalam menjawab dua pertanyaan terkait Domino yang diproduksi Martin Büttner ( Golfing for Domino Day dan Domino Circuits ).
Dengan memodifikasi pemecah Sirkuit Domino saya , saya dapat menghasilkan sirkuit domino (file ini juga berisi keluaran pemecah dan kerangka sirkuit) yang terdiri dari OR, dan IFNOTs di mana input pertama selalu BENAR (jadi pada dasarnya TIDAK). Karena tidak ada banyak yang akan cocok di jawaban ini, saya hadir solusi OR dan NOT untuk tabel kebenaran:
Perhatikan bahwa satu-satunya operasi biner yang digunakan adalah OR dan IFNOT, di mana saya menghitung setiap IFNOT sebagai TIDAK untuk tujuan penilaian
Saya menambahkan tampilan 7-segmen ke ujung sirkuit dan memasukkannya ke dalam simulator domino / gif. Gif yang dihasilkan (yang menunjukkan 'A' sedang ditampilkan) membutuhkan waktu sekitar 2 jam untuk menghasilkan. Karena sirkuit terakhir berukuran 1141 * 517, setiap "sel" diwakili oleh satu piksel. Sel hitam kosong, sel abu-abu memiliki domino berdiri di dalamnya, dan sel putih memiliki domino jatuh di dalamnya. Ini berarti bahwa Anda tidak dapat benar-benar mengetahui apa yang sedang terjadi, dan itu tidak akan membantu jika itu terjepit sama sekali. Sparr dengan ramah menyediakan versi yang jauh lebih kecil dari gif asli saya (650kB), jadi ini dia!
Di bawah ini adalah bingkai terakhir dari animasi untuk input 1010 ('A') seperti di atas. Anda dapat melihat input di paling kiri, kabel listrik di atas, papan tombol mengambil sebagian besar ruang, 7 potongan logika individu (ini adalah representasi domino dari fungsi di atas) di sebelah kiri papan switch, dan untuk paling kanan adalah tampilan 7-segmen itu sendiri. Saat ini berjalan, masing-masing segmen menyala secara kasar pada saat yang sama, jadi Anda tidak dapat melihatnya terlalu lama dengan beberapa segmen menyala menunggu yang lain menyala.
Lihat animasi dalam kemuliaan penuh di sini (36MB) atau di sini (650kB, milik Sparr) (salinan yang lebih kecil jauh lebih kecil, tetapi browser saya sepertinya suka melewatkan bingkai yang merusak keindahan sehingga saya meninggalkan yang asli dengan demikian)
Detail tampilan 7-segmen dapat dilihat di sini ('1' ditunjukkan)
sumber
30 NANDs
Saya cukup yakin tidak ada solusi yang lebih sederhana untuk masalah ini, kecuali mungkin dengan mengubah simbol pada layar, tetapi itu akan menjadi masalah lain dan berbeda.
Karena ini sebenarnya sesuatu yang berguna untuk dilakukan, misalnya ketika memprogram FPGA untuk menampilkan keluaran, saya memberikan kode Verilog.
Adapun minimalis: Tentu saja itu sulit untuk dibuat. Ini tidak dapat dipahami, karena tampilan 7-segmen hanyalah cara yang cukup acak bahwa manusia menunjukkan angka, menghasilkan sirkuit yang cukup acak juga. Dan seperti tipikal untuk rangkaian minimal ini, kedalaman logisnya agak lebih tinggi daripada untuk solusi dekat. Saya kira ini karena serial lebih sederhana daripada paralel.
Penundaan transmisi ditunjukkan oleh posisi ke bawah dari setiap gerbang NAND pada lembar.
Kode Verilog:
Kim Øyhus
sumber
Menggunakan ~ untuk NOT dan N untuk NAND, pencarian komputer (tanpa berbagi istilah antara output) menemukan solusi dengan 82 NANDs tanpa berbagi. Mencari istilah berbagi secara manual akan menurunkannya menjadi 54 NAND, dan pencarian komputer yang mencakup pembagian lebih lanjut menguranginya menjadi 37 NAND. Minimal mungkin bahkan lebih rendah, karena metode ini tentu tidak lengkap.
Inilah program yang membuat ulang tabel di atas. Setiap baris diberi label dengan NANDS untuk output itu.
Dan inilah hasilnya:
Dan berikut ini persamaan yang setara, istilah berbagi yang membuatnya menjadi 54 NAND:
Dan inilah solusi 37 NAND:
sumber
197 NANDs
Karena ini adalah tantangan gerbang logika pertama saya. itu tidak banyak golf, dan mungkin bukan solusi terkecil. Saya tidak menggunakan split sirkuit di sini.
Jika saya benar, skor saya adalah 197 .
Selama tantangan ini, saya membuat kode JavaScript sederhana untuk menguji gerbang saya.
Salin dan modifikasi gerbang, dan tempel ke konsol browser Anda, atau Node.js REPL.
sumber