Banyak bahasa pemrograman menyediakan operator untuk memanipulasi bilangan bulat biner (basis-2). Berikut adalah salah satu cara untuk menggeneralisasi operator ini ke pangkalan lain:
Biarkan x dan y menjadi nomor satu digit dalam basis B . Tentukan operator unary ~
dan operator biner &
,|
dan ^
sehingga:
- ~ x = (B - 1) - x
- x & y = mnt (x, y)
- x | y = maks (x, y)
- x ^ y = (x & ~ y) | (y & ~ x)
Perhatikan bahwa jika B = 2, kita mendapatkan operator TIDAK bitwise, AND, OR, dan XOR yang familiar.
Untuk B = 10, kita mendapatkan tabel “desimal XOR”:
^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0
Untuk nomor multi-digit, terapkan operator satu digit digit-demi-digit. Misalnya, 12345 ^ 24680 = 24655, karena:
- 1 ^ 2 = 2
- 2 ^ 4 = 4
- 3 ^ 6 = 6
- 4 ^ 8 = 5
- 5 ^ 0 = 5
Jika operan memiliki panjang yang berbeda, maka masukkan yang lebih pendek dengan nol di depannya.
Tantangan
Tulis, sesedikit mungkin byte, suatu program atau fungsi yang mengambil input dua bilangan bulat (yang dapat diasumsikan antara 0 dan 999 999 999, inklusif) dan mengeluarkan "XOR desimal" dari dua angka sebagaimana didefinisikan di atas.
Uji kasus
- 12345, 24680 → 24655
- 12345, 6789 → 16654
- 2019, 5779 → 5770
- 0, 999999999 → 999999999
- 0, 0 → 0
09
hasil yang dapat diterima untuk input90, 99
?A^B^B=A
a^b=b^a
dana^b^b=a
untuk pangkalan dengan pembagi utama yang anehJawaban:
Jelly , 14 byte
Cobalah online!
Kisi semua pasangan digit tunggal
Tautan monadik mengambil daftar dua bilangan bulat sebagai argumennya dan mengembalikan bilangan bulat.
Penjelasan
Jika matriks digit adalah input / output yang dapat diterima:
Jelly , 12 byte
Cobalah online!
sumber
Pyth , 31 byte
Cobalah online!
sumber
Python 2 , 71 byte
Cobalah online!
sumber
Keempat (gforth) , 111 byte
Cobalah online!
Penjelasan Kode
sumber
C # (Visual C # Interactive Compiler) , 75 byte
Disimpan 6 byte berkat @someone
Cobalah online!
sumber
Zip
, Anda tidak dapat menggunakannya karena secara otomatis memotong koleksi yang lebih panjang dengan yang lebih pendekPHP ,
111109 byteCobalah online!
Tes: Coba online!
Jika kita memanggil digit yang ingin kita XOR,
$a
dan$b
, saya menemukan bahwa:$a
kurang dari 5,XOR = min(9-$a, max($a, $b))
$a
sama dengan atau lebih dari 5,XOR = min($a, max(9-$a, 9-$b))
Jadi saya menerapkan logika ini ditambah peretasan untuk menangani angka dengan panjang yang berbeda. Saya mengambil setiap digit dari akhir kedua nomor input (dengan indeks negatif seperti
input[-1]
,,input[-2]
...) dan menghitung XOR dan menempatkan hasilnya dalam urutan terbalik dalam sebuah string yang akan dicetak di akhir. Karena saya mengambil angka dari akhir angka, hasil XOR harus disatukan dalam urutan terbalik. Ketika salah satu input lebih panjang dari yang lain, indeks negatif pada input yang lebih pendek menghasilkan string kosong yang sama dengan 0.sumber
Retina ,
8559 byteCobalah online!Mengambil input sebagai baris terpisah, tetapi tautannya adalah untuk menguji suite yang memformat ulang input yang dipisahkan koma. Penjelasan:
Pad kiri dengan nol kedua garis dengan panjang yang sama.
Urutkan setiap digit berdasarkan indeks kolomnya, lalu hapus baris baru. Ini memiliki efek memasangkan digit bersama-sama dengan cara yang sama seperti transpos.
Terapkan secara terpisah untuk masing-masing pasangan digit, gabungkan hasil bersama
Gandakan pasangan.
Membalikkan digit kedua dari pasangan pertama dan digit pertama dari pasangan kedua, jadi sekarang kita memiliki
x ~y
satu baris dan~x y
lainnya.Urutkan digit setiap baris secara berurutan, sehingga digit pertama sekarang
x & ~y
atau yang~x & y
sesuai.Balikkan urutan garis.
Dan ekstrak digit pertama, yang merupakan hasil yang diinginkan.
sumber