Tantangan
Diberikan angka bulat yang dapat dibagi dengan 9 dan satu digit yang hilang, temukan digit yang hilang.
Digit yang hilang dapat diwakili oleh karakter apa pun selain digit 0-9 selama konsisten.
Jika digit yang hilang bisa 0 atau 9, keluarkan sesuatu untuk menandakannya.
Anggap pengguna cukup cerdas untuk menempatkan hanya satu digit yang hilang dan satu angka dll.
Uji Kasus
Dalam kasus uji angka yang hilang diwakili oleh tanda tanya
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
sumber
sumber
0
? Bagaimana dengan[0, 9]
(array atau daftar 2 angka)??
input yang mungkin?Jawaban:
Python , 21 byte
Cobalah online!
Saya dulu
I
mewakili angka yang hilang.sumber
Alice , 12 byte
Cobalah online!
Output
0
jika hasilnya bisa 0 atau 9.Penjelasan
sumber
&
dapat dihapus, karena modus Kardinal menafsirkan masukan asli sebagai paling banyak 2 bilangan bulat.JavaScript (ES6), 40 byte
Output 9 jika bisa 0 atau 9.
sumber
f=
; fungsi anonim benar-benar valid.Japt, 7 byte
Mencoba beberapa solusi tetapi yang terpendek mirip dengan yang lain kecuali kita tidak perlu mengganti
?
di awal.Dapat mengambil karakter non-numerik sebagai digit yang hilang. Output
0
ketika solusinya bisa seperti itu atau9
.Cobalah
Penjelasan
Input string yang tersirat
U
.¬
membelah menjadi array karakter individu,x
mengurangi array dengan tambahan mengabaikan elemen non-numerik,*J
mengalikan setiap elemen dengan -1 danu9
mendapatkan modulus positif dari hasilnya.sumber
JavaScript (ES6), 18 byte
Harapkan a
+
sebagai digit yang hilang. Pengembalian9
untuk 0 atau 9 .Uji kasus
Tampilkan cuplikan kode
sumber
05AB1E ,
76 byteOutput
0
berarti hasilnya bisa 0 atau 9 .Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Python 2 ,
444135 byte-6 byte terima kasih kepada RiaD
Cobalah online!
Pengguna
]
untuk digit yang hilang.Output
0
jika digit yang hilang bisa 0 atau 9.sumber
0
untuk kasus ambigu, yang masuk akal karena9%9 == 0
Pyth,
97 byteMenggunakan spasi sebagai pembatas dan mengembalikan 0 jika hasilnya bisa 0 atau 9.
Cobalah online
Penjelasan
sumber
Prolog (SWI) , 59 byte
Cobalah online!
Yay untuk pemrograman logis!
Penjelasan
Pertama kita membuat predikat
*
, yang berlaku ketika diterapkan ke nol dan daftar kosong. Predikat kami juga berlaku ketika bagian depan daftar berada di antara 0 dan 9 dan ketika kami menambahkan mod angka terkemuka 9, predikat tersebut berlaku.Kami kemudian mendefinisikan
+
hanya predikat ini0
sebagai argumen pertama. Kita ingin jumlah digital menjadi kelipatan 9.Prolog melakukan semua pekerjaan kasar untuk menemukan solusi bagi kami.
sumber
Befunge-93 , 16 byte
Cobalah online!
Versi satu baris dari jawaban James Holderness 'Befunge yang berhasil mencukur dua byte. Ini pada dasarnya memampatkan kode ke satu baris, membalikkan arah dan mengambil keuntungan dari kenyataan bahwa Befunge tidak melewatkan di akhir baris. Dia menyarankan saya mengirim jawaban terpisah dengan penjelasan. Kode mengambil * sebagai mewakili digit yang hilang dan menghasilkan angka 9 untuk 0 atau 9.
Bagaimana itu bekerja
*
(Nilai ASCII 42) dipilih sebagai karakter yang hilang karena itu menetralkan nilai awal digitsum, 3.sumber
LaTeX, banyak byte (
1000628614)LaTeX, tidak terbaca (
348334 bytes)LaTeX, 132 byte
Hanya ruang yang diizinkan sebagai digit yang tidak diketahui dalam kode ini.
sumber
J ,
1412 byte-2 byte terima kasih kepada @BolceBussiere
Sejujurnya saya tidak tahu mengapa
"."0
mengartikan?
sebagai 0 tetapi ia melakukannya pada juru bahasa saya dan pada TIO jadi saya tidak akan mempertanyakannya. (Perbarui: lihat komentar untuk penjelasan mengapa).Pendekatan ini sangat sederhana mengambil jumlah digit, meniadakannya dengan mengurangi dari 9, dan membawanya modulo 9.
Cobalah online!
sumber
Jelly ,
1196 bytePenjelasan
Output 0 berarti hasilnya bisa 0 atau 9.
Cobalah online!
Disimpan 2 byte berkat Tn . Xcoder . Saat menggunakan Setiap quick (
€
) selama evaluasi, membagi angka menjadi digit adalah mubazir.Disimpan 3 byte berkat Dennis . Dapat bitwise ATAU input dengan 0 alih-alih secara manual mem-parsing input sebagai angka sambil menghapus nol di depan dan non-digit.
sumber
|0
bekerja bukanfØDV€
.Swift , 51 byte
Cobalah online!
sumber
Befunge-93 (PyFunge) ,
2221 byteSaya menyadari bahwa saya tidak perlu menggunakan
?
untuk mewakili angka absen, jadi saya menggunakan angka yang merupakan kelipatan dari 9 setelah mengurangi 48:x
Ini biarkan saya bermain golf dari
3+
, tetapi hanya menyelamatkan saya 1 byte karena panjangnya baris pertama sebelum :( bersyaratSebuah port jawaban Befunge-98 saya:
5 byte lebih untuk memeriksa apakah kita telah mencapai EOF,
1 byte lebih untuk mendorong 48 (
"0"
vs'0
),1 byte lebih untuk mencetak jawaban dengan
.@
,dan 1 byte lebih, karena yang kedua line memiliki ruang
untuk total 8 byte lebih.
Cobalah online!
Keluaran
0
jika digit yang hilang bisa 0 atau 9.Ini hanya berfungsi di interpreter PyFunge karena alasan yang dijelaskan di bawah ini.
Penjelasan
Sebagian besar penjelasan ini disalin dari penjelasan Befunge-98 saya , karena program itu sangat mirip dengan yang ini. plug tak tahu malu
Di baris pertama program, kami menjumlahkan digit, termasuk x, yang diperlakukan seperti 72 karena nilai ASCII-nya. Namun, jumlahnya akan sama setelah kami modded oleh 9, jadi ini tidak relevan.
Jika kita baru saja memodifikasi dengan 9, kita akan dibiarkan dengan digit yang salah, karena kita inginkan
9 - (sum % 9)
. Namun, kita dapat melakukan lebih baik daripada9\-
, yang akan mengurangi sisanya dari 9: jika kita membuat jumlah negatif sebelum modding oleh 9, kita akan mendapatkan hasil positif, setara dengan9 - (sum % 9)
di beberapa penerjemah. Inilah yang mengharuskan kami untuk menggunakan juru bahasa PyFunge untuk Befunge 93 dan 98, karena itu adalah satu-satunya di TIO yang melakukan ini. Yang lain memberi kita nilai antara -8 dan 8 bukannya 0 dan 8sumber
Befunge-98 (PyFunge) ,
1513 byteSaya menyadari bahwa saya tidak perlu menggunakan
?
untuk mewakili angka absen, jadi saya menggunakan angka yang merupakan kelipatan dari 9 setelah mengurangi 48:x
Ini biarkan saya bermain golf dari angka
3+
.Cobalah online!
Menggunakan sebuah
x
angka yang hilang, karena nilai ASCII dibagi oleh 9 setelah dikurangi 48 (dan itu bagus karena itu biasa digunakan sebagai variabel dalam matematika).Output melalui kode keluar (karena
q
lebih pendek satu byte dari.@
)Output
0
jika digit yang hilang bisa 0 atau 9.Ini hanya berfungsi di interpreter PyFunge karena alasan yang dijelaskan di bawah ini.
Penjelasan
Di baris pertama program, kami menjumlahkan digit, termasuk
x
, yang diperlakukan seperti 72 karena nilai ASCII-nya. Namun, jumlahnya akan sama setelah kami modded oleh 9, jadi ini tidak relevan.Jika kita baru saja memodifikasi dengan 9, kita akan dibiarkan dengan digit yang salah, karena kita inginkan
9 - (sum % 9)
. Namun, kita dapat melakukan lebih baik daripada9\-
, yang akan mengurangi sisanya dari 9: jika kita membuat jumlah negatif sebelum modding oleh 9, kita akan mendapatkan hasil positif, setara dengan9 - (sum % 9)
di beberapa penerjemah . Inilah yang mengharuskan kami untuk menggunakan juru bahasa PyFunge untuk Befunge 93 dan 98, karena itu adalah satu-satunya di TIO yang melakukan ini. Yang lain memberi kita nilai antara -8 dan 8 bukannya 0 dan 8.sumber
Ruby , 22 byte
Penggunaan
'
(karakter apa pun yang memiliki jarak ke0
yang dapat dibagi oleh "0" akan berlaku, termasuk0
dirinya sendiri).Output dari
0
menandakan baik0
atau9
.Cobalah online!
Penjelasan
sumber
Ruby ,
46, 41 byte-5 Terima kasih kepada @Unihedron
Cobalah online!
sumber
chars
alih - alih.split(//)
, 2.'<'
dapat diganti dengan?<
chars
Befunge-93,
28271918 bytesPenghargaan harus diberikan kepada Mistah Figgins , yang jawabannya PyFunge menunjukkan kepada saya bahwa Anda tidak memerlukan pemeriksaan khusus untuk karakter digit yang hilang, jika Anda hanya memastikan nilai ASCII kelipatan sembilan.
Terima kasih tambahan kepada Jo King yang menunjukkan bahwa Anda tidak perlu sepenuhnya mengonversi karakter ke angka yang setara, dan cukup mengurangi 3 untuk mendapatkan nilai yang relatif terhadap basis 9 (ASCII
0
minus 3 adalah 45, kelipatan 9) .Cobalah online!
Agar ini berfungsi, Anda harus menggunakan karakter
*
untuk digit yang hilang (ada yang lain juga bisa berfungsi, tapi itu yang paling baik).Output
9
jika digit yang hilang bisa 0 atau 9.Penjelasan
Intinya kita menghitung jumlah semua digit, ditambah 45 per digit (yang akhirnya akan dibatalkan ketika kita mod dengan 9). Jumlah ini dikurangi dari 3 (total awal kami), dan 39 tambahan dikurangi dengan digit yang hilang (ASCII
*
minus tiga). Sekali lagi bahwa 3 minus 39 adalah kelipatan dari 9, jadi dibatalkan ketika kita mod dengan 9.Jadi pada akhirnya kita menghitung jumlah negatif dari semua digit, mod 9, ditambah 9, yaitu
Dan itu memberi kita angka yang hilang.
sumber
Befunge-98 (PyFunge) , 8 byte
Cobalah online!
Keluaran melalui kode keluar. Seperti jawaban Mistah Figgin , itu hanya bekerja dengan Pyfunge, di mana angka negatif mod 9 menjadi positif. Menggunakan x sebagai digit yang hilang.
sumber
PowerShell , 40 byte
Cobalah online! atau Verifikasi semua kasus uji
Membawa input seperti
'123x'
ke$a
. Buat rentang0
ke9
dan gunakanWhere-Object
(disingkat disingkat|?
) untuk menarik bilangan bulat yang cocok dengan klausa. Klausa ini mengambil$a
, melakukan regex-replace
untuk menggantix
dengan digit saat ini$_
dan mendapatkan mod 9 dengan%9
. Jadi jika 9 terbagi rata, ini akan menjadi nol. Kami mengambil Boolean-bukan daripadanya, yang mengubah nol benar dan segala sesuatu yang lain palsu, sehingga memenuhi klausa Dimana-Obyek. Hasil-hasil tersebut ditinggalkan di jalur pipa dan hasilnya tersirat.sumber
Haskell , 35 byte
Cobalah online!
sumber
Retina ,
353425 byteJika
?
bisa0 or 9
, hasilnya ditampilkan sebagai9
.Cobalah online
Penjelasan
sumber
\d
bisa diubah menjadi adil.
dan baris berikut menjadi$*
.?
ketika saya menulis itu.Perl 5 , 23 byte
Cobalah online!
Tidak peduli karakter apa yang menandakan digit yang hilang asalkan bukan digit.
sumber
Tcl, 53 byte
Seperti dengan jawaban lain, ini dibuat lebih pendek dengan tidak secara eksplisit mengatakan "0 atau 9".
Sebaliknya, hasil dari "9" berarti 0 atau 9.
Cobalah online!
Penjelasan
Ini bekerja sangat sederhana. Ini menggunakan ekspresi reguler untuk:
tanda tanyaapa pun yang bukan digitIni kemudian mengevaluasi 9 - (sum_of_digits mod 9) untuk sampai pada nilai akhir di 1..9, yang kemudian
puts
.0 (in
0$argv
) awal diperlukan jika tanda tanya lebih dulu di input; tanda tambah utama dalam urutan yang ditransformasikan tidak menjadi masalah bagiexpr
.sumber
Pyth , 8 byte
Cobalah online!
Gunakan
I
bukan?
.sumber
APL (Dyalog) , 13 byte
Cobalah online!
Digit yang hilang adalah
⍬
.sumber
brainfuck , 50 byte
Cobalah online!
Mencetak angka 9 untuk 0 atau 9. Karakter yang hilang diwakili oleh:
Bagaimana itu bekerja
Karakter yang hilang harus berupa karakter yang memiliki mod 9 dari 4, +3 karena kita mengurangi 3 dari angka normal dan +1 untuk inisialisasi total menjadi 1.
Sebagai catatan, ada banyak inefisiensi dalam kode demi bermain golf, karena setiap digit akan mengatur ulang total masing-masing 5 kali, daripada hanya sekali-sekali saja jika saya mengurangi 48 bukannya 3.
sumber
> <> ,
3533252115 byteOutput
0
berarti hasilnya bisa 0 atau 9 .Cobalah online!
Disimpan 6 byte berkat Jo King dengan menggunakan
'
untuk mewakili digit yang hilang.sumber
'
karakter alih-alih?
Java 8,
3634 byteKembali
9
ketika keduanya0
dan9
valid.Penjelasan:
Cobalah online.
sumber