Berapa nomor yang hilang (dapat dibagi 9)


22

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

2
Bisakah kita menghasilkan 0? Bagaimana dengan [0, 9] (array atau daftar 2 angka)?
user202729

1
Dengan asumsi maksud Anda alih-alih 0 atau 9, saya pikir saya akan mengedit persyaratan ini menjadi nilai yang menunjukkan itu bisa menjadi baik. Terima kasih!
NK1406

3
Apakah hanya ?input yang mungkin?
xnor

2
Apakah perlu untuk mendukung angka nol di depan?
mbomb007

1
_____ @ NK1406 Saya tidak menyarankan memerlukan angka nol di muka, saya dapat melihat byte tambahan yang diperlukan untuk mendukungnya setidaknya untuk beberapa bahasa.
Erik the Outgolfer

Jawaban:



9

Alice , 12 byte

/o&
\i@/+R9%

Cobalah online!

Output 0jika hasilnya bisa 0 atau 9.

Penjelasan

/   Switch to Ordinal mode.
i   Read all input as a string.
&   Fold the next operation over the characters of this strings.
/   Switch to Cardinal mode (not an operation).
+   Add. Implicitly converts each character to the integer value it represents
    and adds it to the top of the stack. The top of the stack is initially, implicitly
    zero. When the character is "?", it is simply discarded, which adds the top of
    the stack to another implicit zero beneath, so the "?" is effectively skipped.
R   Negate. Multiplies the sum by -1.
9%  Modulo 9. This gives the result.
\   Switch to Ordinal mode.
o   Implicitly convert the result to a string and print it.
@   Terminate the program.

The &dapat dihapus, karena modus Kardinal menafsirkan masukan asli sebagai paling banyak 2 bilangan bulat.
Nitrodon

6

JavaScript (ES6), 40 byte

Output 9 jika bisa 0 atau 9.

f=_=>9-([..._].reduce((a,b)=>a+~~b,0)%9)

2
Selamat datang di PPCG! Posting pertama yang bagus!
Rɪᴋᴇʀ

2
Anda tidak perlu menghitung f=; fungsi anonim benar-benar valid.
Shaggy

Kurung terluar tidak diperlukan karena prioritas operator;)
Shieru Asakoto

5

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 0ketika solusinya bisa seperti itu atau 9.

¬x*J u9

Cobalah


Penjelasan

Input string yang tersirat U. ¬membelah menjadi array karakter individu, xmengurangi array dengan tambahan mengabaikan elemen non-numerik, *Jmengalikan setiap elemen dengan -1 dan u9mendapatkan modulus positif dari hasilnya.


5

JavaScript (ES6), 18 byte

Harapkan a +sebagai digit yang hilang. Pengembalian 9untuk 0 atau 9 .

s=>9-eval(9+s+9)%9

Uji kasus


4

05AB1E , 7 6 byte

Output 0berarti hasilnya bisa 0 atau 9 .

þSO(9%

Cobalah online! atau sebagai Test suite

Penjelasan

þ        # remove non-digits from input
 S       # split to list of digits
  O      # sum list
   (     # negate
    9%   # mod by 9

4

Python 2 , 44 41 35 byte

-6 byte terima kasih kepada RiaD

lambda n:-sum(ord(c)-3for c in n)%9

Cobalah online!

Pengguna ]untuk digit yang hilang.
Output 0jika digit yang hilang bisa 0 atau 9.


Hm, dalam semua kasus uji saya mencoba itu output 0untuk kasus ambigu, yang masuk akal karena9%9 == 0
berbulu

jika Anda melakukan int (c) -> ord (c) - 3 yang tidak Anda perlukan jika, jika Anda memilih karakter yang sesuai untuk karakter buruk
RiaD

3

Pyth, 9 7 byte

%_s-Qd9

Menggunakan spasi sebagai pembatas dan mengembalikan 0 jika hasilnya bisa 0 atau 9.

Cobalah online

Penjelasan

%_s-Qd9
   -Qd   Remove the space from the input.
  s      Convert it to an integer.
%_    9  Negate mod 9.

3

Prolog (SWI) , 59 byte

0*[].
X*[H|T]:-between(0,9,H),U is mod(X+H,9),U*T.
+X:-0*X.

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 ini 0sebagai argumen pertama. Kita ingin jumlah digital menjadi kelipatan 9.

Prolog melakukan semua pekerjaan kasar untuk menemukan solusi bagi kami.


3

Befunge-93 , 16 byte

1+!_#@3#.--9%~:#

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

1+!_  3  --9% Initialises the pointer going right and initialises the digitsum with 3

1+!_         ~: Gets input and checks whether it is end of input (-1)

      3  - Subtract three from the input. 
           This turns the ASCII values of digits into their mod 9 equivalent ("0"(48)=>45(mod 9)=>0)

          -9% Subtract the value from the digitsum and mod it with 9
              This keeps the digitsum as a negative digit greater than -9
              Repeat this until the input ends

Now this is where it gets tricky.
At the end of input, the stack looks like this:
  -(Digitsum%9), Copy of EOF input (-1)
The pointer is moving left from the _
 +!_ Invert the -1 to get 0 and add it to the digitsum (does nothing but get rid of the -1)
1           %~ Adds 1 mod -1 (no input) = 0 to the stack
         --9 Subtracts 9 from 0, yielding -9 and subtracts that from the digitsum. 
             This makes the digitsum positive and equal to 9-(digitsum%9), our desired value
     @  . Finally, print and exit

* (Nilai ASCII 42) dipilih sebagai karakter yang hilang karena itu menetralkan nilai awal digitsum, 3.


Saya kagum bahwa Anda masih bisa menekan byte dari ini. Sudah selesai dilakukan dengan baik!
James Holderness

2

LaTeX, banyak byte ( 1000 628 614)

\RequirePackage{expl3}
\ExplSyntaxOn
\tl_new:N \l_divnine_input_tl
\int_new:N \l_divnine_sum_int
\def \getnum {
  \typein [ \l_divnine_input_tl ] { Input\space a\space number }
  \tl_map_function:NN \l_divnine_input_tl \divnine_sum:n
  \int_set:Nn \l_tmpa_int { 9 - \int_mod:nn { \l_divnine_sum_int } { 9 } }
  \typeout
    { The\space missing\space digit\space is:\space
      \int_use:N \l_tmpa_int
      \int_compare:nNnT { \l_tmpa_int } = { 0 } { \space or\space 9 }
    }
}
\cs_new:Nn \divnine_sum:n {
  \regex_match:nnT { \d } { #1 } { \int_add:Nn \l_divnine_sum_int { #1 } }
}
\ExplSyntaxOff
\getnum
\stop

LaTeX, tidak terbaca ( 348 334 bytes)

\RequirePackage{expl3}\ExplSyntaxOn\int_new:N\1\tl_new:N\2\def\3{\typein[\2]{Input\space a\space number}\tl_map_function:NN\2\4\int_set:Nn\1{9-\int_mod:nn{\1}{9}}\typeout{The\space missing\space digit\space is:\space\int_use:N\1\int_compare:nNnT{\1}={0}{\space or\space9}}}\def\4#1{\regex_match:nnT{\d}{#1}{\int_add:Nn\1{#1}}}\3\stop

LaTeX, 132 byte

\RequirePackage{expl3}\typein[\1].\newcount\2{\ExplSyntaxOn\int_gset:Nn\2{9-\int_mod:nn\19}}\typeout{\the\2 \ifnum\2=9or 0\fi}\stop

Hanya ruang yang diizinkan sebagai digit yang tidak diketahui dalam kode ini.


2

J , 14 12 byte

-2 byte terima kasih kepada @BolceBussiere

9|9-[:+/"."0

Sejujurnya saya tidak tahu mengapa "."0mengartikan ?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!


1
Anda tidak perlu berlepasan sebelum menjumlahkan;)
Bolce Bussiere

1
Juga, ". Tidak mengartikan '?' sebagai 0, ia mengartikannya sebagai daftar kosong. Untuk membuatnya pas, J membalutnya dengan karakter pengisi, yang dalam hal ini (array numerik) adalah 0.
Bolce Bussiere

2

Jelly , 11 9 6 byte

|0SN%9

Penjelasan

|0     # Read input while removing non-digits (question marks) and removing leading zeros
  S    # Sum the digits
   N   # Negate
    %9 # Mod by 9

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.


9 byte . Selamat datang di golf Jelly!
Tn. Xcoder

Ini tidak menangani kasus di mana jawabannya bisa 0 atau 9. Juga, selamat datang di Jelly. Saya juga baru tetapi sejauh ini sangat menyenangkan.
dylnan

@dylnan Mengatasi ini
Poke

@Poke oh, Nevermind, saya tidak melihat persyaratan telah berubah
dylnan

|0bekerja bukan fØDV€.
Dennis


1

Befunge-93 (PyFunge) , 22 21 byte

Saya 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 dari3+ , tetapi hanya menyelamatkan saya 1 byte karena panjangnya baris pertama sebelum :( bersyarat


Sebuah 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.

~:0`!#|_"0"-+
 @.%9-<

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.

~:0`!#|_"0"-+    THE FIRST LINE
~                Gets a character from input - If it is negative, we've reached EOF
 :0`!            Pushes 0 if the character is positive, 0 otherwise
     #|_         Goes to the next line if the value if 0
                     This also gets the negative value off the stack by using a |
        "0"-     Subtracts 48 to account for taking in ASCII values
            +    Adds this adjusted value to the sum

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 daripada 9\-, yang akan mengurangi sisanya dari 9: jika kita membuat jumlah negatif sebelum modding oleh 9, kita akan mendapatkan hasil positif, setara dengan 9 - (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

 @.%9-<    THE SECOND LINE
      <    Redirects the IP onto this line
     -     Subtracts the sum from an implicit 0, making it negative
   %9      Mods the sum by 9
 @.        Prints the digit and exits

Jawaban bagus! Jangan pernah berpikir untuk menggunakan karakter khusus untuk digit yang hilang untuk menghindari pemeriksaan tambahan. Saya harap Anda tidak keberatan bahwa saya mencuri trik itu dalam jawaban saya yang diperbarui - Saya ingin melihat apakah saya bisa mendapatkan konsep yang sama yang berfungsi dalam penerjemah referensi.
James Holderness

1

Befunge-98 (PyFunge) , 15 13 byte

Saya 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+.

#v~'0-+
q>-9%

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 qlebih pendek satu byte dari .@)
Output 0jika 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.

#v~'0-+    THE FIRST LINE
#v~        Pushes the next character from input, and goes to the second line on EOF
   '0-     Subtracts 48 to account for taking in ASCII values
      +    Adds this adjusted value to the sum

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 daripada 9\-, yang akan mengurangi sisanya dari 9: jika kita membuat jumlah negatif sebelum modding oleh 9, kita akan mendapatkan hasil positif, setara dengan 9 - (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.

q>-9%    THE SECOND LINE
 >       Redirects the IP onto this line
  -      Subtracts the sum from an implicit 0, making it negative
   9%    Mods the sum by 9
q        Outputs via exit code, ending the program

1

Ruby , 22 byte

Penggunaan '(karakter apa pun yang memiliki jarak ke 0yang dapat dibagi oleh "0" akan berlaku, termasuk0 dirinya sendiri).

Output dari 0menandakan baik 0atau 9.

p -(gets.sum+6*~/$/)%9

Cobalah online!

Penjelasan

p     # print after inspecting
  -(  # unary negative, for reversing result of modulus (a-b%a)
    gets.sum # ascii value of string
    + 6*~/$/ # add six for each size (in chars) of input, so "0" translates to 0
  )%9 # mod 9
      # find remainder after dividing 9
      # except it's inverted so it's remainder to add to divide 9

1

Ruby , 46 , 41 byte

-5 Terima kasih kepada @Unihedron

->s{-s.chars.sum{|i|?<>i ? i.to_i : 0}%9}

Cobalah online!


1. kami memiliki charsalih - alih .split(//), 2. '<'dapat diganti dengan?<
Unihedron

Saya telah membuat program yang lebih pendek dalam alat yang sama (Ruby) yang cukup berbeda (berkaitan dengan input dan output) untuk diserahkan sendiri, Anda dapat menemukannya di sini: codegolf.stackexchange.com/a/151869/21830
Unihedron

@Unihedron terima kasih, tidak percaya bahwa saya lupachars
Tom Lazar

1

Befunge-93, 28 27 19 18 bytes

Penghargaan 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 0minus 3 adalah 45, kelipatan 9) .

3_v#`0:~--
%9_@.+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).

Output9 jika digit yang hilang bisa 0 atau 9.

Penjelasan

3             Push 3 onto the stack.
 _            Since this is non-zero, drop the 3 and branch left.
3             Now executing right to left, push 3 again.
        --    Negate twice, leaving the value unchanged as our starting sum.

       ~      Now we start the main loop, reading a character from stdin.
    `0:       Duplicate and check if it's > 0, i.e. not end-of-stream.
 _ #          If so, continue to the left.
3        -    Subtract 3 to make the number relative to base 9.
        -     Then subtract it from the total, and repeat the loop.

  v           Once we reach the end of the input, we go down.
  _           Drop the EOF character from the stack and go left.
%9   +9       Mod the total with 9, and add 9.
   @.         Output the result and exit.

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

9 - (digitsum % 9)

Dan itu memberi kita angka yang hilang.


-1 byte jika Anda mengurangi 3 alih-alih 48. Sebagian besar dibatalkan dengan perlu menambah 9 pada modulo
Jo King

@JoKing, terima kasih! Tidak akan pernah memikirkan itu. Sayang sekali kita masih membutuhkan +9 sekarang, tapi aku tidak bisa melihat cara untuk menyingkirkan itu.
James Holderness

Berhasil menghapus satu byte lagi dengan mengompresnya ke satu baris! Saya mengubahnya menjadi% 9 total setiap loop dan kemudian menggunakan kembali 9-- dalam perjalanan kembali untuk menambahkan 9 ke total.
Jo King

@JoKing Saya tahu ini hanya menghemat satu byte lagi, tapi itu brilian! Sebaiknya posting itu sebagai jawaban baru. Anda pasti akan mendapatkan suara saya, jika tidak ada yang lain.
James Holderness

Diposting ! Berhasil mencukur satu byte terakhir juga! Saya pikir itu yang terakhir yang bisa saya lakukan
Jo King


0

PowerShell , 40 byte

param($a)0..9|?{!(($a-replace'x',$_)%9)}

Cobalah online! atau Verifikasi semua kasus uji

Membawa input seperti '123x'ke $a. Buat rentang 0ke 9dan gunakan Where-Object(disingkat disingkat |?) untuk menarik bilangan bulat yang cocok dengan klausa. Klausa ini mengambil $a, melakukan regex -replaceuntuk mengganti xdengan 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.



0

Retina , 35 34 25 byte

Jika ?bisa 0 or 9, hasilnya ditampilkan sebagai 9.

.
$*
1{9}

^
9$*;
+`;1

.

Cobalah online

Penjelasan

.       Sum of the digits in unary + 1
$*
1{9}    Modulo 9

^       Prepend 9 semicolons, for subtracting
9$*;
+`;1    Subtract from 9

.       Back to decimal

Saya percaya \dbisa diubah menjadi adil .dan baris berikut menjadi $*.
Kritixi Lithos

Ah benar Saya belum menghapus ?ketika saya menulis itu.
mbomb007



@ benar-benar manusia Ah, ya. Sisa dari versi sebelumnya.
mbomb007


0

Tcl, 53 byte

puts [expr 9-([regsub -all (\\d)\\D? 0$argv +\\1])%9]

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:

  • pisahkan argumen menjadi masing-masing digit
  • menghilangkan tanda tanya apa pun yang bukan digit
  • interleave digit dengan tanda plus

Ini 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 bagi expr.




0

brainfuck , 50 byte

+>,[---[<-[<<]>[<+++++++++<]>>-],]-[<+>-----]<---.

Cobalah online!

Mencetak angka 9 untuk 0 atau 9. Karakter yang hilang diwakili oleh:

Bagaimana itu bekerja

Tape Format:
    0 Total Input 0

The total is represented as 9-digitSum%9

+>,[ Start loop with 1 as the total
    --- Subtract 3 from the inputted byte to make the value%9 equal to the digit
    [   While the input byte exists
      <-                 Decrement the total
      [<<]>[<+++++++++<] If the total is 0, reset it to 9
      >>-                Decrement the input byte
    ]
,] Continue loop until there is no input
-[<+>-----]<---. Add 48 to the total to convert the digit to the ascii value and output it

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.


0

> <> , 35 33 25 21 15 byte

Output 0berarti hasilnya bisa 0 atau 9 .

0i:&0(?n&3--9%!

Cobalah online!

Disimpan 6 byte berkat Jo King dengan menggunakan 'untuk mewakili digit yang hilang.


15 byte jika Anda menggunakan 'karakter alih-alih?
Jo King

0

Java 8, 36 34 byte

s->9-s.map(c->c>57?0:c-48).sum()%9

Kembali 9 ketika keduanya 0dan9 valid.

Penjelasan:

Cobalah online.

s->                               // Method with IntStream parameter and int return-type
   9-                             //  Return 9, minus:
     s.map(c->c>57?0:c-48).sum()  //   The sum of the digits (ignoring the question mark)
     %9                           //   modulo-9
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.