Jaka jest brakująca liczba (podzielność przez 9)

22

Wyzwanie

Biorąc pod uwagę liczbę całkowitą podzielną przez 9 i jedną brakującą cyfrę, znajdź brakującą cyfrę.

Brakująca cyfra może być reprezentowana przez dowolny znak inny niż cyfry 0–9, o ile jest spójny.

Jeśli brakująca cyfra może wynosić 0 lub 9, wypisz coś, co to oznacza.

Załóżmy, że użytkownik jest wystarczająco inteligentny, aby wstawić tylko jedną brakującą cyfrę i jedną liczbę itp.

Przypadki testowe

W przypadkach testowych brakująca cyfra jest reprezentowana przez znak zapytania

123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
NK1406
źródło
2
Czy możemy produkować 0? Co z [0, 9] (tablica lub lista 2 liczb)?
user202729,
1
Zakładając, że masz na myśli zamiast 0 lub 9, myślę, że zmienię to wymaganie, aby było jakąkolwiek wartością wskazującą, że może to być albo. Dziękuję Ci!
NK1406
3
Czy to tylko ?możliwy wkład?
xnor
2
Czy konieczne jest obsługiwanie zer wiodących?
mbomb007,
1
@ NK1406 Nie polecam wymagania początkowych zer, widzę dodatkowe bajty potrzebne do obsługi przynajmniej w niektórych językach.
Erik the Outgolfer,

Odpowiedzi:

9

Alice , 12 bajtów

/o&
\i@/+R9%

Wypróbuj online!

Wyprowadzane, 0jeśli wynikiem może być 0 lub 9.

Wyjaśnienie

/   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.
Martin Ender
źródło
&Mogą być usunięte, ponieważ tryb Cardinal interpretuje pierwotnego wejście co najwyżej 2 całkowitymi.
Nitrodon,
6

JavaScript (ES6), 40 bajtów

Wyjścia 9, jeśli może to być 0 lub 9.

f=_=>9-([..._].reduce((a,b)=>a+~~b,0)%9)
Quinton Miller
źródło
2
Witamy w PPCG! Miły pierwszy post!
Rɪᴋᴇʀ
2
Nie musisz liczyć f=; funkcje anonimowe są całkowicie poprawne.
Kudłaty
Najbardziej zewnętrzne nawiasy nie są konieczne ze względu na pierwszeństwo operatora;)
Shieru Asakoto
5

Japt, 7 bajtów

Wypróbowałem kilka rozwiązań, ale najkrótszy był podobny do większości innych, z tym, że nie musimy wymieniać ?na początku.

Może przyjąć dowolny znak nienumeryczny jako brakującą cyfrę. Dane wyjściowe, 0gdy rozwiązaniem może być to lub 9.

¬x*J u9

Spróbuj


Wyjaśnienie

Domniemane wprowadzanie ciągu U. ¬dzieli na tablicę pojedynczych znaków, xzmniejsza tablicę, dodając ignorując elementy nienumeryczne, *Jmnoży każdy element przez -1 i u9otrzymuje dodatni moduł wyniku.

Kudłaty
źródło
5

JavaScript (ES6), 18 bajtów

Oczekuje +brakującej cyfry. Zwraca 9za 0 lub 9 .

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

Przypadki testowe

Arnauld
źródło
4

05AB1E , 7 6 bajtów

Dane wyjściowe 0oznaczają, że wynik może wynosić 0 lub 9 .

þSO(9%

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

þ        # remove non-digits from input
 S       # split to list of digits
  O      # sum list
   (     # negate
    9%   # mod by 9
Emigna
źródło
4

Python 2 , 44 41 35 bajtów

-6 bajtów dzięki RiaD

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

Wypróbuj online!

Użytkownicy ]za brakującą cyfrę.
Wyprowadzane, 0jeśli brakująca cyfra może wynosić 0 lub 9.

Pręt
źródło
Hm, we wszystkich przypadkach testowych wypróbowałem wyniki 0dla niejednoznacznej sprawy, co ma sens, ponieważ9%9 == 0
puszysty
jeśli zrobisz int (c) -> ord (c) - 3, którego nie potrzebujesz, jeśli wybierzesz odpowiednią postać dla złej postaci
RiaD,
3

Pyth, 9 7 bajtów

%_s-Qd9

Używa spacji jako separatora i zwraca 0, jeśli wynikiem może być 0 lub 9.

Wypróbuj online

Wyjaśnienie

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

źródło
3

Prolog (SWI) , 59 bajtów

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

Wypróbuj online!

Yay dla programowania logicznego!

Wyjaśnienie

Najpierw tworzymy predykat *, który zachowuje się po zastosowaniu do zera i pustej listy. Nasz predykat zachowuje się również, gdy na początku listy znajduje się między 0 a 9, a gdy dodamy wiodącą cyfrę mod 9, predykat zachowuje.

Następnie definiujemy, +aby być po prostu tym predykatem 0jako pierwszym argumentem. To znaczy, że chcemy, aby suma cyfrowa była wielokrotnością 9.

Prolog wykonuje całą tę cholerną robotę, znajdując dla nas rozwiązania.

Kreator pszenicy
źródło
3

Befunge-93 , 16 bajtów

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

Wypróbuj online!

Wersja jedna linia Jamesa Holderness' befunge odpowiedź , że udaje się golić dwa bajty. To zasadniczo kompresuje kod do jednej linii, odwraca kierunek i wykorzystuje fakt, że Befunge nie przeskakuje na końcu linii. Zasugerował, żebym zamieścił osobną odpowiedź z wyjaśnieniem. Kod przyjmuje * jako symbol brakującej cyfry i zwraca 9 dla 0 lub 9.

Jak to działa

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

* (Wartość ASCII 42) została wybrana jako brakujący znak, ponieważ przeciwdziała początkowej wartości cyfry, 3.

Jo King
źródło
Dziwię się, że wciąż możesz wyciskać z tego bajty. Dobra robota!
James Holderness
2

LaTeX, wiele bajtów ( 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, nieczytelny ( 348 334 bajty)

\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 bajty

\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

W tym kodzie dozwolone jest tylko miejsce jako nieznana cyfra.

Skillmon
źródło
2

J , 14 12 bajtów

-2 bajty dzięki @BolceBussiere

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

Szczerze mówiąc, nie wiem, dlaczego "."0interpretuje ?jako 0, ale dzieje się tak w moim tłumaczu i TIO, więc nie zamierzam tego kwestionować. (Aktualizacja: zobacz komentarze wyjaśniające dlaczego).

To podejście po prostu pobiera sumę cyfr, neguje je, odejmując od 9, i przyjmuje modulo 9.

Wypróbuj online!

kapusta
źródło
1
Nie musisz walić się przed sumowaniem;)
Bolce Bussiere
1
Również „. Nie interpretuje„? ” jako 0. interpretuje go jako pustą listę. Aby dopasować, J uzupełnia go znakami wypełniającymi, które w tym przypadku (tablica numeryczna) to 0.
Bolce Bussiere
2

Galaretka , 11 9 6 bajtów

|0SN%9

Wyjaśnienie

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

Wyjście 0 oznacza, że ​​wynikiem może być 0 lub 9.

Wypróbuj online!

Zaoszczędzono 2 bajty dzięki Mr. Xcoder . Podczas korzystania z funkcji Each quick ( ) podczas oceny dzielenie liczby na cyfry było zbędne.

Zaoszczędzono 3 bajty dzięki Dennisowi . Może bitowo LUB wprowadzić wartość 0 zamiast ręcznie parsować dane wejściowe jako liczbę, usuwając jednocześnie zera i cyfry.

Szturchać
źródło
9 bajtów . Witamy w golfa Jelly!
Pan Xcoder,
To nie dotyczy przypadku, w którym odpowiedź może wynosić 0 lub 9. Również w rzeczy samej witamy w Jelly. Też jestem nowy, ale jak dotąd było bardzo fajnie.
dylnan
@dylnan Rozwiązano ten problem
Poke
@Poke oh, nieważne, nie widziałem, żeby wymaganie zostało zmienione
dylnan
|0działa zamiast fØDV€.
Dennis,
1

Szybki , 51 bajtów

{9-Int("0"+$0.filter{"?" != $0})!%9}as(String)->Int

Wypróbuj online!

Herman L.
źródło
1

Befunge-93 (PyFunge) , 22 21 bajtów

Uświadomiłem sobie, że nie muszę używać ?do reprezentowania nieobecnej cyfry, więc użyłem cyfry, która jest wielokrotnością 9 po odjęciu 48: x
Pozwoliło mi to grać w golfa 3+, ale zaoszczędziło mi to tylko 1 bajt ze względu na długość pierwsza linia przed warunkowym :(


Port mojego befunge-98 odpowiedzi:
5 więcej bajtów w celu sprawdzenia, czy dotarliśmy EOF,
1 bajt bardziej naciskać 48 ( "0"vs '0),
1 bajt więcej, aby wydrukować odpowiedź z .@,
i 1 bajt, ponieważ drugi linia ma miejsce
na 8 dodatkowych bajtów.

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

Wypróbuj online!

Wyprowadzane, 0jeśli brakująca cyfra może wynosić 0 lub 9.

Działa to tylko w interpretatorze PyFunge z powodów wyjaśnionych poniżej.

Wyjaśnienie

Znaczna część tego wyjaśnienia została skopiowana z mojego wyjaśnienia Befunge-98 , ponieważ ten program jest bardzo podobny do tego. bezwstydna wtyczka

W pierwszym wierszu programu sumujemy cyfry, w tym x, który jest traktowany jak 72 z powodu jego wartości ASCII. Jednak suma będzie taka sama, kiedy zmienimy na 9, więc nie ma to znaczenia.

~: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

Gdybyśmy tylko zmienili na 9, zostalibyśmy z niewłaściwą cyfrą, ponieważ chcemy 9 - (sum % 9). Możemy jednak zrobić coś lepszego niż 9\-, co odejmowałoby resztę od 9: jeśli zrobimy sumę ujemną przed modowaniem o 9, otrzymamy pozytywny wynik, równoważny z 9 - (sum % 9)niektórymi tłumaczami. To wymaga od nas korzystania z interpreterów PyFunge zarówno dla Befunge 93, jak i 98, ponieważ jest to jedyny w TIO, który to robi. Pozostałe dają nam wartość od -8 do 8 zamiast od 0 do 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
Łagodnie Milquetoast
źródło
Niezła odpowiedź! Nigdy nie myślałem o użyciu niestandardowego znaku dla brakującej cyfry, aby uniknąć dodatkowego sprawdzania. Mam nadzieję, że nie masz nic przeciwko temu, że ukradłem tę sztuczkę w mojej zaktualizowanej odpowiedzi - chciałem sprawdzić, czy mogę uzyskać tę samą koncepcję działającą w tłumaczu referencyjnym.
James Holderness,
1

Befunge-98 (PyFunge) , 15 13 bajtów

Uświadomiłem sobie, że nie muszę używać ?do reprezentowania nieobecnej cyfry, więc użyłem jednej, która jest wielokrotnością 9 po odjęciu 48: x
To pozwoli mi grać w golfa 3+.

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

Wypróbuj online!

Używa xjako brakującej cyfry, ponieważ jego wartość ASCII jest podzielna przez 9 po odjęciu 48 (i to dobrze, ponieważ jest powszechnie używana jako zmienna w matematyce).

Wyjścia przez kod wyjścia (bo qjest jeden bajt krótszy niż .@)
Wyjścia 0, jeśli brakuje cyfra może być 0 lub 9.

Działa to tylko w interpretatorze PyFunge z powodów wyjaśnionych poniżej.

Wyjaśnienie

W pierwszym wierszu programu sumujemy cyfry, w tym cyfrę x, która jest traktowana jak 72 ze względu na jej wartość ASCII. Jednak suma będzie taka sama, kiedy zmienimy na 9, więc nie ma to znaczenia.

#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

Gdybyśmy tylko zmienili na 9, zostalibyśmy z niewłaściwą cyfrą, ponieważ chcemy 9 - (sum % 9). Możemy jednak zrobić coś lepszego niż 9\-, co odejmowałoby resztę od 9: jeśli zrobimy sumę ujemną przed modowaniem o 9, otrzymamy pozytywny wynik, równoważny z 9 - (sum % 9) niektórymi tłumaczami . To wymaga od nas korzystania z interpreterów PyFunge zarówno dla Befunge 93, jak i 98, ponieważ jest to jedyny w TIO, który to robi. Pozostałe dają nam wartość od -8 do 8 zamiast od 0 do 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
Łagodnie Milquetoast
źródło
1

Ruby , 22 bajty

Używa '( 0zrobi to każdy znak, który ma odległość do tego, który można podzielić przez „0”, włączając 0siebie).

Wyjście 0oznacza albo 0albo 9.

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

Wypróbuj online!

Wyjaśnienie

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
Unihedron
źródło
1

Ruby , 46 , 41 bajtów

-5 dzięki @Unihedron

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

Wypróbuj online!

Tom Lazar
źródło
1. mamy charszamiast .split(//), 2. '<'można zastąpić przez?<
Unihedron
Stworzyłem krótszy program w tym samym narzędziu (Ruby), który jest wystarczająco inny (zajmuje się wejściem i wyjściem), aby był własnym poddaniem, można go znaleźć tutaj: codegolf.stackexchange.com/a/151869/21830
Unihedron
@ Jednorożec dzięki, nie mogę uwierzyć, że zapomniałemchars
Tom Lazar
1

Befunge-93, 28 27 19 18 bajtów

Kredyt musi zostać przekazany Mistah Figgins , której odpowiedź PyFunge pokazała mi, że nie potrzebujesz specjalnego czeku na brakującą cyfrę, jeśli upewniłeś się, że wartość ASCII jest wielokrotnością dziewięciu.

Dodatkowe podziękowania dla Jo Kinga, który pokazał, że nie trzeba w pełni konwertować znaków na ich numeryczny odpowiednik, i mógł po prostu odjąć 3, aby uzyskać wartość względną do podstawy 9 (ASCII 0minus 3 to 45, wielokrotność 9) .

3_v#`0:~--
%9_@.+9

Wypróbuj online!

Aby to zadziałało, należy użyć znaku *dla brakującej cyfry (są też inne, które mogą również działać, ale to jest najładniejsze).

Wyprowadzane, 9jeśli brakująca cyfra może wynosić 0 lub 9.

Wyjaśnienie

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.

Zasadniczo obliczamy sumę wszystkich cyfr plus 45 na cyfrę (która zostanie ostatecznie anulowana, gdy zmienimy na 9). Suma ta jest odejmowana od 3 (nasza początkowa suma), a dodatkowe 39 jest odejmowane przez brakującą cyfrę (ASCII *minus trzy). Ponownie, 3 minus 39 to wielokrotność 9, więc jest anulowane, gdy modyfikujemy za pomocą 9.

Na koniec obliczamy sumę ujemną wszystkich cyfr, mod 9 plus 9, tj

9 - (digitsum % 9)

A to daje nam brakującą cyfrę.

James Holderness
źródło
-1 bajt, jeśli odejmiesz 3 zamiast 48. Większość z nich zostaje anulowana przez konieczność dodania 9 do modulo
Jo King
@JoKing Thanks! Nigdy bym o tym nie pomyślał. Szkoda, że ​​wciąż potrzebujemy teraz +9, ale nie widzę żadnego sposobu, aby się go pozbyć.
James Holderness
Udało się usunąć jeszcze jeden bajt , kompresując go do jednej linii! Zmieniłem go na% 9 razem w każdej pętli, a następnie ponownie używa 9 - w drodze powrotnej, aby dodać 9 do całości.
Jo King
@JoKing Wiem, że oszczędza to tylko jeden bajt, ale to wspaniale! Warto opublikować to jako nową odpowiedź. Na pewno dostaniesz mój głos, jeśli nic więcej.
James Holderness
Wysłałem to ! Udało się też ogolić ostatni bajt! Myślę, że to ostatni, co mogę zrobić
Jo King
0

PowerShell , 40 bajtów

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

Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe

Pobiera dane wejściowe jak '123x'w $a. Konstruuje zakres 0do 9i korzysta z Where-Object(tutaj w skrócie |?), aby wyciągnąć te liczby całkowite, które pasują do klauzuli. Klauzula przyjmuje $a, wykonuje wyrażenie regularne w -replacecelu zastąpienia xbieżącej cyfry $_i otrzymuje mod 9 z %9. Zatem jeśli 9 równomiernie podzieli, będzie to zero. Bierzemy wartość logiczną, której nie zera, która zmienia zera w prawdziwe, a wszystko inne falsey, co spełnia klauzulę Where-Object. Te wyniki są pozostawione w potoku, a dane wyjściowe są niejawne.

AdmBorkBork
źródło
0

Siatkówka , 35 34 25 bajtów

Jeśli to ?możliwe 0 or 9, wynik jest wyświetlany jako 9.

.
$*
1{9}

^
9$*;
+`;1

.

Wypróbuj online

Wyjaśnienie

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

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

.       Back to decimal
mbomb007
źródło
Wierzę, że \dmożna zmienić na sprawiedliwy, .a następujący wiersz na $*.
Kritixi Lithos,
Ah, tak. Jeszcze tego nie usunąłem, ?kiedy to napisałem.
mbomb007,
33 bajty.
całkowicie ludzki,
@totallyhuman Ah, tak. Kolejna pozostałość z wcześniejszej wersji.
mbomb007,
0

Tcl, 53 bajty

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

Podobnie jak w przypadku innych odpowiedzi, jest to krótsze, ponieważ nie mówi się wprost „0 lub 9”.
Zamiast tego wynik „9” oznacza albo 0, albo 9.

Wypróbuj online!

Wyjaśnienie

Działa to po prostu. Wykorzystuje wyrażenie regularne do:

  • podziel argument na poszczególne cyfry
  • wyeliminować dowolny znak (znaki) inny niż cyfrowy
  • przeplataj cyfry znakami plus

Następnie ocenia 9 - (sum_of_digits mod 9), aby dojść do końcowej wartości w 1..9, którą następnie puts.

Początkowe 0 (in 0$argv) jest wymagane na wypadek, gdyby znak zapytania pojawił się jako pierwszy na wejściu; wiodący znak plus w sekwencji transformowanej nie stanowi problemu expr.

Dúthomhas
źródło
0

pieprzenie mózgu , 50 bajtów

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

Wypróbuj online!

Drukuje 9 dla 0 lub 9. Brakujący znak jest reprezentowany przez:

Jak to działa

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

Brakująca postać musi być postacią, która ma mod 9 na 4, +3, ponieważ odejmujemy 3 od normalnych cyfr i +1 dla inicjalizacji sumy jako 1.

Na marginesie, kod jest bardzo nieefektywny ze względu na grę w golfa, ponieważ każda cyfra zresetuje łącznie 5 razy, zamiast tylko raz, jeśli odejmę 48 zamiast 3.

Jo King
źródło
0

> <> , 35 33 25 21 15 bajtów

Dane wyjściowe 0oznaczają, że wynik może wynosić 0 lub 9 .

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

Wypróbuj online!

Zaoszczędzono 6 bajtów dzięki Jo Kingowi , 'reprezentując brakujące cyfry.

Emigna
źródło
15 bajtów, jeśli używasz 'znaku zamiast?
Jo King
0

Java 8, 36 34 bajtów

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

Zwraca 9gdy oba 0i 9są ważne.

Wyjaśnienie:

Wypróbuj 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
Kevin Cruijssen
źródło