Số còn thiếu là bao nhiêu (chia hết cho 9)


22

Thử thách

Cho một số nguyên chia hết cho 9 và một chữ số bị thiếu, tìm chữ số còn thiếu.

Chữ số bị thiếu có thể được biểu thị bằng bất kỳ ký tự nào ngoài các chữ số 0-9 miễn là nó phù hợp.

Nếu chữ số còn thiếu có thể là 0 hoặc 9, hãy xuất ra thứ gì đó để biểu thị như vậy.

Giả sử người dùng đủ thông minh để chỉ đặt một chữ số bị thiếu và một số, v.v.

Các trường hợp thử nghiệm

Trong các trường hợp kiểm tra, chữ số bị thiếu được biểu thị bằng dấu chấm hỏi

123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8

2
Chúng ta có thể đầu ra 0không? Thế còn [0, 9] (mảng hoặc danh sách 2 số)?
dùng202729

1
Giả sử bạn có nghĩa là thay vì 0 hoặc 9, tôi nghĩ rằng tôi sẽ chỉnh sửa yêu cầu này thành bất kỳ giá trị nào cho thấy nó có thể là một trong hai. Cảm ơn bạn!
NK1406

3
Chỉ là ?một đầu vào có thể?
xnor

2
Có cần thiết để hỗ trợ số không hàng đầu?
mbomb007

1
@ NK1406 Tôi không khuyên bạn nên yêu cầu các số 0 hàng đầu, tôi có thể thấy các byte bổ sung cần thiết để hỗ trợ ít nhất cho một số ngôn ngữ.
Erik the Outgolfer 22/12/17

Câu trả lời:



9

Alice , 12 byte

/o&
\i@/+R9%

Hãy thử trực tuyến!

Đầu ra 0nếu kết quả có thể là 0 hoặc 9.

Giải trình

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

&thể được loại bỏ, vì chế độ cardinal diễn giải đầu vào ban đầu là tối đa 2 số nguyên.
Nitrodon

6

JavaScript (ES6), 40 byte

Đầu ra 9 nếu có thể là 0 hoặc 9.

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

2
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay!
Rɪᴋᴇʀ

2
Bạn không cần phải đếm f=; chức năng ẩn danh là hoàn toàn hợp lệ.
Xù xì

Các dấu ngoặc đơn ngoài cùng là không cần thiết vì ưu tiên toán tử;)
Shieru Asakoto

5

Japt, 7 byte

Đã thử một vài giải pháp nhưng ngắn nhất là tương tự với hầu hết các giải pháp khác ngoại trừ chúng tôi không cần thay thế ?ngay từ đầu.

Có thể lấy bất kỳ ký tự không phải là số nào làm chữ số bị thiếu. Đầu ra 0khi giải pháp có thể là hoặc 9.

¬x*J u9

Thử nó


Giải trình

Đầu vào ngầm định của chuỗi U. ¬chia thành một mảng các ký tự riêng lẻ, xlàm giảm mảng bằng cách bỏ qua mọi phần tử không phải là số, *Jnhân mỗi phần tử với -1 và u9nhận được mô đun dương của kết quả.


5

JavaScript (ES6), 18 byte

Mong đợi là một +chữ số còn thiếu. Lợi nhuận 9cho 0 hoặc 9 .

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

Các trường hợp thử nghiệm



4

Python 2 , 44 41 35 byte

-6 byte nhờ có Rịa

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

Hãy thử trực tuyến!

Người dùng ]cho chữ số bị thiếu.
Đầu ra 0nếu chữ số bị thiếu có thể là 0 hoặc 9.


Hừm, trong tất cả các trường hợp thử nghiệm, tôi đã thử kết quả đầu ra 0cho một trường hợp mơ hồ, điều này có ý nghĩa từ9%9 == 0
fluffy

nếu bạn làm int (c) -> ord (c) - 3 mà bạn không cần nếu, nếu bạn chọn nhân vật phù hợp cho nhân vật xấu
RịaD

3

Bình thường, 9 7 byte

%_s-Qd9

Sử dụng không gian làm dấu phân cách và trả về 0 nếu kết quả có thể là 0 hoặc 9.

Dùng thử trực tuyến

Giải trình

%_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.

Hãy thử trực tuyến!

Yay cho lập trình logic!

Giải trình

Đầu tiên chúng ta tạo một biến vị ngữ *, giữ khi áp dụng cho 0 và danh sách trống. Vị ngữ của chúng ta cũng giữ khi mặt trước của danh sách nằm trong khoảng từ 0 đến 9 và khi chúng ta thêm chữ số hàng đầu mod 9 thì vị từ giữ.

Sau đó chúng tôi xác định + chỉ là vị ngữ này với 0tư cách là đối số đầu tiên. Đó là chúng tôi muốn tổng số là bội số của 9.

Prolog thực hiện tất cả các công việc nặng nề của việc thực sự tìm giải pháp cho chúng tôi.


3

Befunge-93 , 16 byte

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

Hãy thử trực tuyến!

Một phiên bản một dòng của câu trả lời Befunge của James Holdiness quản lý để loại bỏ hai byte. Điều này về cơ bản nén mã xuống một dòng, đảo ngược hướng và lợi dụng thực tế là Befunge không bỏ qua ở cuối dòng. Ông đề nghị tôi đăng một câu trả lời riêng với một lời giải thích. Mã lấy * làm đại diện cho chữ số bị thiếu và xuất ra 9 cho 0 hoặc 9.

Làm thế nào nó hoạt động

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

* (Giá trị ASCII 42) được chọn làm ký tự bị thiếu vì nó chống lại giá trị ban đầu của chữ số, 3.


Tôi ngạc nhiên rằng bạn vẫn có thể tiếp tục vắt kiệt byte. Làm tốt!
James Holdiness

2

LaTeX, nhiều 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, không đọc được ( 348 334 byte)

\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

Chỉ có không gian được phép là chữ số không xác định trong mã này.


2

J , 14 12 byte

-2 byte nhờ @BolceBussiere

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

Tôi thực sự không biết tại sao "."0phiên dịch ?là 0 nhưng nó làm như vậy đối với người phiên dịch và trên TIO vì vậy tôi sẽ không đặt câu hỏi. (Cập nhật: xem ý kiến ​​cho một lời giải thích tại sao).

Cách tiếp cận này rất đơn giản là lấy tổng của các chữ số, phủ định nó bằng cách trừ đi 9 và lấy modulo 9.

Hãy thử trực tuyến!


1
Bạn không cần phải quay cuồng trước khi tổng hợp;)
Bolce Bussiere

1
Ngoài ra, "không giải thích '?' là 0, nó diễn giải nó thành một danh sách trống. Để làm cho nó phù hợp, J đệm nó với các ký tự phụ, trong trường hợp này (một mảng số) là 0.
Bolce Bussiere 27/12/17

2

Thạch , 11 9 6 byte

|0SN%9

Giải trình

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

Đầu ra bằng 0 có nghĩa là kết quả có thể là 0 hoặc 9.

Hãy thử trực tuyến!

Lưu được 2 byte nhờ ông Xcoder . Khi sử dụng Mỗi quick ( ) trong quá trình đánh giá, việc chia số thành các chữ số là không cần thiết.

Đã lưu 3 byte nhờ Dennis . Có thể bitwise HOẶC đầu vào bằng 0 thay vì phân tích thủ công đầu vào dưới dạng số trong khi loại bỏ các số 0 và số không đứng đầu.


9 byte . Chào mừng bạn đến với sân golf Jelly!
Ông Xcoder

Điều này không xử lý trường hợp câu trả lời có thể là 0 hoặc 9. Ngoài ra, thực sự, chào mừng bạn đến với Jelly. Tôi cũng mới nhưng nó rất vui
dyl Nam

@dylnan Đã giải quyết điều này
Chọc

@ Xin chào, đừng bận tâm, tôi không thấy yêu cầu đã được thay đổi
dylnan

|0làm việc thay vì fØDV€.
Dennis


1

Befunge-93 (PyFunge) , 22 21 byte

Tôi nhận ra rằng tôi không cần sử dụng ?để biểu thị chữ số vắng mặt, vì vậy tôi đã sử dụng một số là 9 sau khi trừ 48: x
Điều này cho phép tôi chơi golf 3+, nhưng nó chỉ tiết kiệm cho tôi 1 byte vì độ dài của dòng đầu tiên trước điều kiện :(


Một cổng của câu trả lời Befunge-98 của tôi:
thêm 5 byte để kiểm tra xem chúng tôi đã đạt EOF chưa,
thêm 1 byte để đẩy 48 ( "0"vs '0),
thêm 1 byte để in các câu trả lời với .@,
và 1 byte hơn, bởi vì thứ hai dòng có một không gian
cho tổng cộng 8 byte nữa.

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

Hãy thử trực tuyến!

Đầu ra 0nếu chữ số bị thiếu có thể là 0 hoặc 9.

Điều này chỉ hoạt động trong trình thông dịch PyFunge vì những lý do được giải thích dưới đây.

Giải trình

Phần lớn lời giải thích này được sao chép từ bản giải thích Befunge-98 của tôi , vì chương trình đó rất giống với chương trình này. phích cắm không biết xấu hổ

Trong dòng đầu tiên của chương trình, chúng tôi tổng hợp các chữ số, bao gồm cả x, được coi là 72 vì giá trị ASCII của nó. Tuy nhiên, tổng sẽ giống nhau một khi chúng tôi đã sửa đổi bằng 9, vì vậy điều này không liên quan.

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

Nếu chúng ta chỉ sửa đổi bởi 9, chúng ta sẽ bị bỏ lại với chữ số sai, vì chúng ta muốn 9 - (sum % 9). Tuy nhiên, chúng ta có thể làm tốt hơn 9\-, sẽ trừ đi phần còn lại từ 9: nếu chúng ta tính tổng âm trước khi sửa đổi bằng 9, chúng ta sẽ nhận được kết quả dương, tương đương với 9 - (sum % 9)một số phiên dịch viên. Đây là những gì yêu cầu chúng tôi sử dụng trình thông dịch PyFunge cho cả Befunge 93 và 98, vì đây là phiên bản duy nhất trên TIO thực hiện điều này. Những cái khác cho chúng ta một giá trị từ -8 đến 8 thay vì 0 và 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

Câu trả lời tốt đẹp! Không bao giờ nghĩ về việc sử dụng một ký tự tùy chỉnh cho chữ số bị thiếu để tránh kiểm tra thêm. Tôi hy vọng bạn không bận tâm rằng tôi đã đánh cắp mánh khóe đó trong câu trả lời được cập nhật của tôi - tôi muốn xem liệu tôi có thể có được khái niệm tương tự làm việc trong trình thông dịch tham chiếu hay không.
James Holdiness

1

Befunge-98 (PyFunge) , 15 13 byte

Tôi nhận ra rằng tôi không cần phải sử dụng ?để biểu thị chữ số vắng mặt, vì vậy tôi đã sử dụng một số là 9 sau khi trừ 48: x
Điều này cho phép tôi chơi golf 3+.

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

Hãy thử trực tuyến!

Sử dụng một x chữ số còn thiếu, vì giá trị ASCII của nó chia hết cho 9 sau khi trừ 48 (và nó rất hay vì nó thường được sử dụng như một biến trong toán học).

Đầu ra thông qua mã thoát (vì qngắn hơn một byte .@)
Đầu ra 0nếu chữ số bị thiếu có thể là 0 hoặc 9.

Điều này chỉ hoạt động trong trình thông dịch PyFunge vì những lý do được giải thích dưới đây.

Giải trình

Trong dòng đầu tiên của chương trình, chúng tôi tổng hợp các chữ số, bao gồm cả x, được coi là 72 vì giá trị ASCII của nó. Tuy nhiên, tổng sẽ giống nhau một khi chúng tôi đã sửa đổi bằng 9, vì vậy điều này không liên quan.

#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

Nếu chúng ta chỉ sửa đổi bởi 9, chúng ta sẽ bị bỏ lại với chữ số sai, vì chúng ta muốn 9 - (sum % 9). Tuy nhiên, chúng ta có thể làm tốt hơn 9\-, sẽ trừ đi phần còn lại từ 9: nếu chúng ta tính tổng âm trước khi sửa đổi bằng 9, chúng ta sẽ nhận được kết quả dương, tương đương với 9 - (sum % 9) một số phiên dịch viên . Đây là những gì yêu cầu chúng tôi sử dụng trình thông dịch PyFunge cho cả Befunge 93 và 98, vì đây là phiên bản duy nhất trên TIO thực hiện điều này. Những cái khác cho chúng ta một giá trị từ -8 đến 8 thay vì 0 và 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

Sử dụng '(bất kỳ char nào có khoảng cách đến 0đó chia hết cho "0" sẽ làm được, kể cả 0chính nó).

Một đầu ra 0có nghĩa là 0hoặc 9.

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

Hãy thử trực tuyến!

Giải trình

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 cảm ơn @Unihedron

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

Hãy thử trực tuyến!


1. chúng tôi có charsthay vì .split(//), 2. '<'có thể được thay thế bằng?<
Unihedron

Tôi đã tạo ra một chương trình ngắn hơn trong cùng một công cụ (Ruby) đủ khác nhau (nó liên quan đến đầu vào và đầu ra) để gửi riêng, bạn có thể tìm thấy nó ở đây: codegolf.stackexchange.com/a/151869/21830
Unihedron

@Unihedron cảm ơn, không thể tin rằng tôi đã quênchars
Tom Lazar

1

Befunge-93, 28 27 19 18 byte

Tín dụng phải đến Mistah Figgins , người có câu trả lời PyFunge cho tôi thấy rằng bạn không cần kiểm tra đặc biệt cho ký tự chữ số bị thiếu, nếu bạn chắc chắn rằng giá trị ASCII là bội số của chín.

Cảm ơn thêm đến Jo King , người đã cho thấy rằng bạn không cần phải chuyển đổi hoàn toàn các ký tự thành số tương đương của chúng và có thể chỉ cần trừ 3 để có giá trị tương ứng với cơ sở 9 (ASCII 0trừ 3 là 45, bội số của 9) .

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

Hãy thử trực tuyến!

Để làm việc này, bạn nên sử dụng ký tự *cho chữ số bị thiếu (có những ký tự khác cũng có thể hoạt động, nhưng đó là cách tốt nhất).

Đầu ra 9nếu chữ số bị thiếu có thể là 0 hoặc 9.

Giải trình

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.

Về cơ bản, chúng tôi đang tính tổng của tất cả các chữ số, cộng với 45 mỗi chữ số (cuối cùng sẽ bị hủy khi chúng tôi sửa đổi với 9). Tổng này được trừ từ 3 (tổng bắt đầu của chúng tôi) và thêm 39 được trừ bởi chữ số còn thiếu (ASCII* trừ ba). Một lần nữa, 3 trừ 39 là bội số của 9, vì vậy nó bị hủy khi chúng tôi sửa đổi với 9.

Vì vậy, cuối cùng, chúng tôi tính toán tổng âm của tất cả các chữ số, mod 9, cộng với 9, tức là

9 - (digitsum % 9)

Và đó là cho chúng ta chữ số còn thiếu.


-1 byte nếu bạn trừ 3 thay vì 48. Hầu hết số này bị hủy bằng cách cần thêm 9 vào modulo
Jo King

@JoKing Cảm ơn! Không bao giờ có thể nghĩ về điều đó. Đáng tiếc bây giờ chúng tôi vẫn cần +9, nhưng tôi không thể tìm ra cách nào để loại bỏ điều đó.
James Holdiness

Quản lý để loại bỏ thêm một byte bằng cách nén nó xuống một dòng! Tôi đã thay đổi nó thành% 9 tổng số mỗi vòng lặp và sau đó sử dụng lại 9-- trên đường quay lại để thêm 9 vào tổng số.
Jo King

@JoKing Tôi biết rằng nó chỉ tiết kiệm thêm một byte, nhưng thật tuyệt vời! Nó đáng để đăng đó là một câu trả lời mới. Bạn chắc chắn sẽ nhận được phiếu bầu của tôi, nếu không có gì khác.
James Holdiness

Đăng nó ! Quản lý để cạo một byte cuối cùng quá! Tôi nghĩ đó là điều cuối cùng tôi có thể làm
Jo King


0

PowerShell , 40 byte

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

Hãy thử trực tuyến! hoặc Xác minh tất cả các trường hợp kiểm tra

Đưa đầu vào như '123x'vào $a. Xây dựng một loạt 0đến 9và sử dụng Where-Object(ở đây viết tắt là |?) để kéo ra những số nguyên phù hợp với mệnh đề. Mệnh đề lấy $a, thực hiện một biểu thức chính quy -replaceđể thay thế xbằng chữ số hiện tại $_và lấy mod 9 bằng %9. Do đó, nếu 9 chia đều, số này sẽ bằng không. Chúng tôi lấy Boolean - không phải Boolean, điều này biến số không thành sự thật và mọi thứ khác trở nên tồi tệ, để thỏa mãn mệnh đề Where-Object. Những kết quả đó được để lại trên đường ống và đầu ra là ẩn.



0

Võng mạc , 35 34 25 byte

Nếu ?có thể 0 or 9, kết quả được hiển thị là 9.

.
$*
1{9}

^
9$*;
+`;1

.

Dùng thử trực tuyến

Giải trình

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

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

.       Back to decimal

Tôi tin rằng \dcó thể được thay đổi thành chỉ .và dòng sau vào $*.
Kritixi Lithos

À, đúng rồi. Tôi đã không gỡ bỏ ?khi tôi viết nó.
mbomb007



@totallyhuman À, ừ. Một tàn dư khác từ một phiên bản trước đó.
mbomb007


0

Tcl, 53 byte

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

Cũng như các câu trả lời khác, điều này được thực hiện ngắn hơn bằng cách không nói rõ ràng về 0 hoặc 9.
Thay vào đó, kết quả của trò chơi 9 9 có nghĩa là 0 hoặc 9.

Hãy thử trực tuyến!

Giải trình

Nó hoạt động khá đơn giản. Nó sử dụng một biểu thức chính quy để:

  • chia đối số thành các chữ số riêng lẻ
  • loại bỏ bất kỳ dấu hỏi nào không phải là chữ số
  • xen kẽ các chữ số có dấu cộng

Sau đó, nó đánh giá 9 - (sum_of_digits mod 9) để đi đến giá trị cuối cùng trong 1..9, sau đó puts.

Số 0 (in 0$argv) hàng đầu được yêu cầu chỉ trong trường hợp dấu hỏi xuất hiện trước trong đầu vào; một dấu cộng hàng đầu trong chuỗi biến đổi không phải là vấn đề đối với expr.




0

Brainfuck , 50 byte

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

Hãy thử trực tuyến!

In 9 cho 0 hoặc 9. Ký tự bị thiếu được thể hiện bằng:

Làm thế nào nó hoạt động

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

Ký tự bị thiếu cần phải là ký tự có mod 9 là 4, +3 vì chúng tôi trừ 3 từ các chữ số bình thường và +1 để khởi tạo tổng số là 1.

Một lưu ý phụ, có rất nhiều sự không hiệu quả trong mã vì mục đích chơi golf, vì mỗi chữ số sẽ đặt lại tổng cộng 5 lần mỗi lần, thay vì chỉ một lần đôi khi tôi trừ 48 thay vì 3.



0

Java 8, 36 34 byte

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

Trả về 9khi cả hai 09 hợp lệ.

Giải trình:

Hãy thử trực tuyến.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.