Terinspirasi oleh pertanyaan ini yang kemudian terinspirasi oleh pertanyaan ini , tulis sebuah program yang mengambil dua bilangan bulat dan menambahkannya dengan cara yang unik, dengan melakukan operasi ATAU pada segmen yang digunakan untuk menampilkannya dalam tampilan 7-segmen. Untuk referensi, digit diwakili dengan cara berikut:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Perhatikan bahwa angka 1 menggunakan dua segmen di kanan, bukan kiri. Ada dua karakter khusus yang dapat diproduksi dengan cara ini yang bukan angka. Lihat tabel tambahan di bawah ini:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Pengamatan yang berguna:
- Setiap digit plus itu sendiri sama dengan dirinya sendiri
- 8 ditambah angka sama dengan 8
- 2 ditambah 1, 3, atau 7 sama dengan huruf 'a' (harus huruf kecil)
- 4 plus 7 sama dengan 'q' atau 'Q', pilihan Anda
- Angka harus disejajarkan dengan benar, sehingga angka harus ditambahkan dari kanan ke kiri. Jika satu angka memiliki lebih banyak digit daripada yang lain, digit tambahan di awal harus tidak berubah. Tidak ada 0 di awal, kecuali angkanya persis 0.
- Semua angka akan 0 atau lebih besar. Anda tidak perlu menangani tanda '-'. (Terutama karena tidak ada yang cocok untuk penjumlahan dari '-' dan '1' atau '7'.)
Program Anda harus menerima 2 bilangan bulat dalam format apa pun yang Anda pilih, dan menghasilkan string yang berisi "jumlah" mereka ketika dihitung dengan cara ini. Ini adalah kode-golf, jadi program Anda harus sekecil mungkin.
Contoh:
- Input: 12345, 123. Output: 12389
- Input: 88888, 42. Output: 88888
- Input: 0, 23. Output: 28
- Input: 120, 240. Output: a80
- Input: 270, 42. Output: 2Q8 (atau 2q8)
- Input: 1234567890, 1234567890. Output: 1234567890
sumber
Q
seharusnya huruf kecil? Bentuk sebenarnya lebih terlihatq
daripadaQ
a
pasti harus huruf kecil, karenaA
terlihat sangat berbeda.Jawaban:
Bash + Utilitas Linux Umum, 80
Perhatikan bahwa
^?
sumbernya harus diganti dengan karakter ASCII 0x7f.String
s
adalah setiap digit 7 segmen yang0-9, a, Q
dikodekan dengan masing-masing segmen sesuai dengan sedikit karakter ASCII.The
h()
Fungsi transliterates jumlah masukan dari desimal ke pengkodean yang ditentukan olehs
, maka output hasil sebagai hex string mentah.Kedua dihasilkan string hex baku
OR
ed bersama-sama menggunakan aritmatika pesta teratur, maka output dengandc
'sP
perintah sebagai bytestream a. Bytestream ini kemudian ditransliterasikan kembali ke desimal + a + Q dan output.Perhatikan juga bahwa ketika menggunakan fungsi
<<<
herestring bash dalam fungsi,h()
baris baru secara implisit ditambahkan ke string yang dialihkan. Ini tidak masalah - itu hanya diterjemahkan0x0a
pada akhir setiap string hex; ketika dua angka hexOR
disatukan, hasilnya masih0x0a
dalam karakter terakhir yang tidak diterjemahkan dan dengan demikian hanya diterjemahkan kembali ke baris baru yang merupakan output setelah hasilnya.Output tes:
sumber
Python 2, 155 byte
Ganti
♥
denganDEL
karakter (0x7F).Memanggil
f("12345", "123")
cetakan12389
.sumber
%13
triknya berfungsi. Jelas Anda memilih himpunan yang tidak memiliki karakter di bawah 40, tetapi untuk terjemahan JavaScript saya, saya memilih himpunan terpendek. Set ketiga adalah yang terpanjang dalam JavaScript, seharusnya111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158144 byteDisimpan 14 byte dengan mencuri
%13
trik Lynn tanpa malu-malu .sumber
Java, 170 byte
Ini sangat panjang ... tapi ini Java.
Program penuh, dengan kode ungolfed
Semua output (semua digandakan sekali)
sumber