Kiểm tra chia hết


39

Bài tập

Cho hai số nguyên dương Nghiêm nd như đầu vào, xác định xem nchia hết bởi d , tức là, nếu có tồn tại một số nguyên q như vậy n = qd.

Bạn có thể viết chương trình hoặc chức năng và sử dụng bất kỳ phương pháp tiêu chuẩn nào để nhận đầu vào và cung cấp đầu ra.

Đầu ra phải là giá trị trung thực hoặc giả ; trung thực nếu n chia hết cho d và ngược lại.

Mã của bạn chỉ phải xử lý các số nguyên mà nó có thể biểu diễn nguyên bản, miễn là nó hoạt động với tất cả các số nguyên 8 bit đã ký. Tuy nhiên, thuật toán của bạn phải làm việc cho các số nguyên lớn tùy ý.

Bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào , nhưng lưu ý rằng các lỗ hổng này bị cấm theo mặc định.

Đây là , vì vậy câu trả lời hợp lệ ngắn nhất - được đo bằng byte - thắng.

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

 n,  d    output

 1,  1    truthy
 2,  1    truthy
 6,  3    truthy
17, 17    truthy
22,  2    truthy
 1,  2    falsy
 2,  3    falsy
 2,  4    falsy
 3,  9    falsy
15, 16    falsy

Bảng xếp hạng

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu ở đó bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 3 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

Câu trả lời:



29

Brain-Flak , 72 70 64 62 58 46 byte

{({}[()]{(<()>)}{}<({}[()]<({}())>)>)}{}{{}}{}

Lấy cổ tức và số chia (theo thứ tự đó) làm đầu vào và in số chia (trung thực) hoặc không có gì. Vì mỗi ngăn xếp có một số 0 vô hạn, nên đầu ra trống nên được coi là giả.

Mặc dù không dọn dẹp ngăn xếp, giải pháp này chỉ sử dụng một ngăn xếp duy nhất.

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

Cảm ơn @WheatWizard vì đã chơi golf 2 byte!

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

                INPUT: a (dividend), b (divisor)
                INITIAL STACK: n = a, d = b, r = 0
                               An infinite amount of zeroes follows.

{               While n is non-zero:
  (
    {}              Pop n from the stack.
    [()]            Yield -1.
    {               While the top of the stack (initially, d) is non-zero:
      (<()>)          Push 0.
    }
    {}              Pop 0. This will remove d from the stack if d = 0, leaving r
                    on top. We can think of this as performing the assignment
                    (d, r) = (r, d) if d = 0.
    <
      (
        {}              Pop d.
        [()]            Yield -1.
        <
          (
            {}              Pop r.
            ()              Yield 1.
          )               Push r + 1.
        >               Yield 0.
      )               Push d + (-1) + 0 = d - 1.
    >               Yield 0.
  )               Push n + (-1) + 0 + 0 + 0 = n - 1.
}               Each iteration decrements n, swaps d and r if d = 0, decrements d,
                and increments r.
                FINAL VALUES: n = 0
                              d = b - r
                              r = a % b if a % b > 0 else b
{}              Pop n.
{               While the top of the stack is non-zero:
  {}              Pop it.
}               This pops d and r if d > 0 (and, thus, a % b > 0) or noting at all.
{}              Pop d or a 0, leaving r if r = b and, thus, a % b = 0.

Tính toán mô đun, 42 byte

Thay vào đó, chương trình đầy đủ ở trên có thể được sửa đổi một cách tầm thường để tính toán mô đun.

{({}[()]<({}[()]<({}())>)>{(<()>)}{})}{}{}

Như trước đây, phương thức này không phải là stack-clean, nhưng nó chỉ sử dụng một stack duy nhất. Một mô-đun 0 sẽ để trống ngăn xếp, tương đương với việc để lại 0 ; mỗi ngăn chứa số không vô hạn.

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

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

So sánh hai vòng lặp của máy kiểm tra khả năng phân chia và máy tính mô đun.

{({}[()]{(<()>)}{}<({}[()]<({}())>)>)}
{({}[()]<({}[()]<({}())>)>{(<()>)}{})}

Sự khác biệt duy nhất là vị trí của {(<()>)}{}, mà hoán đổi dr nếu d = 0 . Để tính mô-đun, chúng tôi thực hiện trao đổi này sau khi giảm d và tăng r .

Thay đổi này không ảnh hưởng đến kết quả nếu a% b> 0 , nhưng nếu a% b = 0 , nó sẽ rời khỏi (n, d, r) = (0, b, 0) - chứ không phải (n, d, r) = (0, 0, b) - trên ngăn xếp.

Vì vậy, để có được mô-đun, chúng ta chỉ phải bật nd với {}{}.

Tính toán mô đun ngăn xếp sạch, 64 byte

Thuật toán mô đun 42 byte không phải là stack-clean, vì vậy nó không thể được sử dụng như trong tất cả các chương trình. Phiên bản sau đây sẽ chia cổ tức và ước số (theo thứ tự đó) từ ngăn xếp hoạt động và đẩy mô đun trở lại. Nó không có tác dụng phụ khác.

({}(<()>)){({}[()]<(({}()[({})])){{}(<({}({}))>)}{}>)}({}{}<{}>)

Giải pháp này chủ yếu dựa trên bản ghi 72 byte trước đây của @ WheatWizard, nhưng nó tiết kiệm 6 byte bằng cách không bao giờ chuyển đổi ngăn xếp.

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

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

             INPUT: a (dividend), b (divisor)
             INITIAL STACK: n = a, b

(
  {}         Pop and yield n = a.
  (<()>)       Push d = 0.
)              Push n + 0 = n.
             STACK: n, d = 0, b
{(           While n in non-zero:
  {}           Pop and yield n.
  [()]         Yield -1.
  <
   ((
     {}         Pop and yield d.
     ()         Yield 1.
     [({})]     Pop b, push it back on the stack, and yield -b.
   ))         Push d + 1 + -b = d + 1 - b twice.
   {          While/if d + 1 - b is non-zero, i.e., if d < b - 1
     {}         Pop d + 1 - b (second copy).
     (<(
       {}         Pop d + 1 - b (first copy).
       ({})       Pop b and push it back on the stack.
     )>)        Push d + 1 - b + b = d + 1, then 0.
   }          If the loop wasn't skipped entirely, pushing 0 breaks out.
              If d < b - 1, it essentially performs the assignment d = d + 1.
              However, if d = b - 1, we get d = d + 1 - b = b - 1 + 1 - b = 0.
              In all cases, we wind up with d = (d + 1) % b.
   {}         Pop 0.
  >         Yield 0.
)}        Push n + -1 + 0 = n - 1. Break if n - 1 = 0.
          STACK: n = 0, d = a % b, b
(
  {}        Pop and yield n = 0.
  {}        Pop and d = a % b.
  <{}>      Pop b, but yield 0.
)         Push 0 + a % b + 0 = a % b.

20

mã máy x86_32, 8 byte

08048550 <div7>:
 8048550:   99                      cdq   
 8048551:   f7 f9                   idiv   %ecx
 8048553:   85 d2                   test   %edx,%edx
 8048555:   0f 94 c0                sete   %al

Đây là câu trả lời golf mã đầu tiên của tôi, vì vậy hy vọng tôi tuân thủ tất cả các quy tắc.

Điều này đầu tiên gọi cdq để xóa thanh ghi edx, sau đó thực hiện phân chia đã ký trên thanh ghi ecx, lưu trữ phần còn lại trong edx. Dòng edx, edx sẽ kiểm tra cờ zero nếu edx bằng 0 và sete đặt 0 cho false nếu edx không bằng 0 và đặt 1 là true nếu edx bằng 0.

Đây chỉ là đoạn mã đóng góp vào số byte, nhưng để kiểm tra, đây là mã C tôi đã viết với cụm nội tuyến vì cách này dễ dàng hơn để xử lý I / O.


2
Chào mừng bạn đến với PPCG, câu trả lời đầu tiên tốt đẹp!
Nữ tu bị rò rỉ

Có cần phải là một chương trình đầy đủ? Tôi đã định dạng câu trả lời của tôi loại câu trả lời này . Và cảm ơn! Tôi hy vọng sẽ có được sự lắp ráp / mã máy tốt hơn để chơi gôn nhiều hơn!
davey

1
Đầu vào và đầu ra trong các thanh ghi được chỉ định trong lắp ráp được cho phép theo mặc định: đầu vào , đầu ra . Đây là một đệ trình hoàn toàn chấp nhận được. Chào mừng đến với PPCG!
Mego

Tuyệt diệu! Cảm ơn bạn!
davey

17

Lục giác, 15, 13, 12 10 byte

Ngôn ngữ dựa trên hình lục giác yêu thích của mọi người! : D

TL; DR hoạt động bằng ma thuật, các giải pháp chưa được định dạng trong việc giảm số byte:

?{?..>1'%<.@!'/
?{?!1\.'%<@.>
?{?\!1@'%\!(
?{?!1\@'%<

Đã lưu 2 byte nhờ trình hướng dẫn bố cục của @ MartinEnder.

@FryAmTheEggman đã lưu 1 byte bằng cách sử dụng các góc một cách sáng tạo hơn

Cả @MartinEnder và @FryAmTheEggman đã đưa ra một giải pháp 10 byte không in bất cứ thứ gì cho các giá trị giả.

Giải pháp của tôi (15):

Chưa được định dạng:

?{?..>1'%<.@!'/

Định dạng:

  ? { ?
 . . > 1
' % < . @
 ! ' / .
  . . .

Giải pháp của @Martin Ender (13):

Chưa được định dạng:

?{?!1\.'%<@.>

Định dạng:

  ? { ?
 ! 1 \ .
' % < @ .
 > . . .
  . . .

Giải trình:

Đầu tiên, chúng ta nhận được đầu vào và lấy mô-đun.

  ? { ?
 . . . .
' % . . .
 . . . .
  . . .

Sau đó, nó kiểm tra xem mô đun có bằng 0 hay không. Nếu đúng, IP quay trái 60 độ, bật ra khỏi gương, đặt ô thành 1 và in.

Sau đó, IP tiếp tục lên hàng thứ tư. Khi đến được >, nó sẽ quay sang bên phải (vì giá trị của ô bây giờ là 1). Nó đi oob, và quay trở lại ở góc dưới bên phải hướng về phía Tây Bắc. IP chạm vào <, đi dọc theo hàng trên cùng và quay lại ở góc bên phải để nhấn @, dừng chương trình.

  . . .
 ! 1 \ .
. . < @ .
 > . . .
  . . .

Nếu mô đun hóa ra là dương, IP quay 60 độ sang phải. Khi nó đi ra góc dưới bên phải, nó tiếp tục ở cạnh dưới bên trái vì các quy tắc gói của Hexagony. Việc 'này được tái sử dụng để làm cho IP đi đến một ô có 0 trong đó. IP sau đó di chuyển dọc theo hàng thứ tư, quấn quanh đến hàng thứ hai, chạm vào bản in và được phản ánh vào <. Phần còn lại của con đường đến @là như nhau.

  . . .
 ! . \ .
' . < @ .
 > . . .
  . . .

Đó là một số phù thủy nghiêm túc.

@ FryAmTheEggman's Solution (12):

Chưa được định dạng:

?{?\!1@'%\!(

Định dạng:

  ? { ?
 \ ! 1 @
' % \ ! (
 . . . .
  . . .

Giải trình:

Giống như các giải pháp khác, nó nhận đầu vào và lấy mô-đun.

  ? { ?
 . . . .
' % . . .
 . . . .
  . . .

Sau đó, IP bị lệch vào góc dưới cùng. Nếu mô đun là dương, nó đi ở cạnh trên bên trái. Không ?có thêm đầu vào, vì vậy nó đặt ô thành 0. Sau !đó in 0 và @kết thúc chương trình.

  ? . .
 \ ! . @
. . \ . .
 . . . .
  . . .

Mọi thứ phức tạp hơn nhiều khi mô đun bằng 0. Trước hết, nó được giảm dần, sau đó đặt lại về 0, sau đó đặt thành 1, sau đó in. Sau đó, 1 được giảm xuống còn 0. Sau đó, chương trình chạy như lúc ban đầu cho đến khi nó cố gắng thực hiện 0%0. Điều đó làm cho nó ném một lỗi im lặng và bỏ.

  ? { ?
 . . 1 .
' % \ ! (
 . . . .
  . . .

Tôi thực sự thích thủ thuật lỗi im lặng, nhưng một cách đơn giản hơn là thay thế (bằng /IP để lần đầu tiên đi qua, nhưng lại bị phản ánh vào @lần thứ hai.

Giải pháp hợp tác (10):

Chưa được định dạng:

?{?!1\@'%<

Định dạng:

  ? { ?
 ! 1 \ @
' % < . .
 . . . .
  . . .

Chương trình này bắt đầu giống như tất cả các chương trình khác, nhận đầu vào và sửa đổi nó.

Nếu đầu vào là 0, IP sẽ rẽ trái khi chạm <. Nó bị lệch vào 1!@, in 1 và thoát.

  . . .
 ! 1 \ @
. . < . .
 . . . .
  . . .

Nếu đầu vào là dương, IP sẽ rẽ phải khi chạm <. Nó thoát ra qua góc và đi dọc theo cạnh trên bên phải, chạm vào @ mà không in.

  . . ?
 . . . @
. . < . .
 . . . .
  . . .

6
Tôi nghĩ bạn nên định dạng câu trả lời của bạn khác nhau. Có bốn câu trả lời trong một khối mã duy nhất làm cho nó xuất hiện như thể số byte của bạn sai.
mbomb007

17

Brain-flak 102, 98, 96 byte

(({}<>))<>{({}[()])<>(({}[()])){{}(<({}[({})])>)}{}({}({}))<>}{}<>([{}]{}){<>(([()])())}({}{}())

Ồ Tổng. Tôi có thể đăng một lời giải thích, nhưng tôi hầu như không hiểu nó. Ngôn ngữ này làm tổn thương não của tôi.

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

Cảm ơn người dùng github @Wheatwizard đã đưa ra một ví dụ mô-đun. Tôi có lẽ không thể tự mình tìm ra điều đó!

Ngoài ra, câu trả lời ngắn hơn là ở đây .

Có thể giải thích không chính xác:

(({}<>))                    #Push this element onto the other stack
<>                          #Move back to stack one.
{                           #While the top element is non-zero:
 ({}[()])                   #  Decrement the number on top
 <>                         #  Move to the other stack
 (({}[()]))                 #  Push the top element minus one twice
 {                          #  While the top element is non-zero:
  {}                        #    Pop the top element
  (<          >)            #    Push a zero
        ({})                #    Push the second from top element
       [    ]               #    Evalue this second from top element as negative
    ({}      )              #    And push that negative plus the top element
 }
 {}                         #  Pop the top element
 ({}({}))                   #  Push the top element plus the second from the top, AND push the second from top
 <>                         #  Switch stacks
}

{}                          #Pop the stack
<>                          #Switch to the other stack
([{}]{})                    #And push the top element minus the second element.

Phần còn lại là khá đơn giản.

{              }            #While the top element is non-zero:
 <>                         #Move to the other stack
   (([()])  )               #Push a negative one
          ()                #AND push the previously pushed value + 1 (e.g. 0)

                 (      )   #Push:
                  {}{}      #The top two elements added together
                      ()    #Plus one

The rest is pretty straightforward.Vâng, có vẻ như nó.
Erik the Outgolfer

24 byte nếu bạn đếm mỗi lệnh brainflak là một byte.
noɥʇʎԀʎzɐɹƆ

12

Javascript (ES6) 17 12 11 byte

a=>b=>a%b<1
  • EDIT: Đã xóa 5 byte vì 'a> 0' được mong đợi.
  • EDIT2: Đã xóa 1 byte nhờ vào Downgoat .

Sử dụng currying để lưu một byte: a => b =>
Downgoat

Vậy làm thế nào để tôi thực hiện điều này? Khi tôi thử d=a=>b=>a%b<1tiếp theo d(32,2)trong bảng điều khiển JS ... Tôi chỉ đơn giản nhận được phản hồifunction b=>a%b<1
WallyWest

@WallyWest này sử dụng currying, vì vậy bạn sẽ nhập d(32)(2). Vì d(32)cho function b=>a%b<1, sau đó bạn phải gọi hàm đó bằng bgiá trị của mình
Cyoce

9

Vim, 11 tổ hợp phím

C<C-r>=<C-r>"<C-Left>%<C-Right><1<cr>

Không tệ cho một ngôn ngữ chỉ xử lý các chuỗi. : D


Không gì <C-Left>làm gì? Không thể kiểm tra vì nó chuyển cửa sổ trên mac> _>
Downgoat

1
@Downgoat bạn đang sử dụng ctrl hay lệnh? Dù bằng cách nào, nó cũng tương đương với "b", ngoại trừ việc nó cũng hoạt động ở chế độ chèn.
DJMcMayhem

Nói theo cách mô phạm, nó tương đương với Bchứ không phải b(và Ctrl+ Righttương đương với W) - sự khác biệt là với các ký tự không phải từ, nhưng trong trường hợp này, nó thực hiện chính xác điều tương tự :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >
Christian Rondeau

9

Toán học - 17 13 3 byte

Cảm ơn @MartinEnder vì đã tiết kiệm được rất nhiều byte!


Nhân vật đó là gì?
Cyoce

@Cyoce Tôi không biết mã Unicode của nó (trên điện thoại vào lúc này), nhưng đó là một toán tử ngắn Divisible[].
Yytsi

@Cyoce Tôi nghĩ đó là biểu tượng đường ống, còn được gọi là shift + dấu gạch chéo ngược.
Pavel

@Pavel nếu là ký hiệu ống, nó sẽ không phải là ba byte.
Cyoce


8

Võng mạc, 12 byte

^(1+)\1* \1$

Đưa đầu vào được phân tách bằng dấu cách trong unary, muốn 111111111111 1111kiểm tra xem 12 nếu chia hết cho 4 . In 1 (đúng) hoặc 0 (sai).

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

FryAmTheEggman đã lưu hai byte. Rất tiếc, viết lại câu trả lời của tôi để đưa các đối số theo đúng thứ tự. (Sau đó, Fry đánh bại tôi trong phần bình luận. Tôi chậm ở regex!)


Để sửa lỗi, nếu nó trở nên cần thiết, tôi nghĩ ^(1+)\1* \1$sẽ hoạt động.
FryAmTheEggman

Tôi đoán với thông số kỹ thuật mới, thứ tự đầu vào ngược lại là tốt trở lại.
Martin Ender

8

Mẻ, 20 byte

@cmd/cset/a!(%1%%%2)

Đầu ra 1thành công, 0thất bại.


8

C #, 27 13 12 byte

a=>b=>a%b<1;

Cảm ơn TuukkaX đã chỉ ra lambdas ẩn danh được chấp nhận. Cảm ơn David Conrad vì đã chỉ cho tôi món cà ri mà tôi thậm chí không biết là một thứ.

Ngắn gọn và ngọt ngào, vì chúng ta chỉ giao dịch với các số nguyên mà chúng ta có thể sử dụng <1chứ không phải ==0và lưu toàn bộ một byte.


Tôi không chắc, nhưng tôi nghĩ rằng bạn chỉ có thể sử dụng lambda : (a,b)=>a%b<1;. +1.
Yytsi

@TuukkaX, cảm ơn tôi không chắc, nó có vẻ rất gian lận.
JustinM - Tái lập Monica

Phiên bản JS của việc này đã sử dụng currying để giảm bớt một byte và điều đó cũng hoạt động với C #: a=>b=>a%b<1;(lưu ý: sau đó bạn phải gọi nó là f(a)(b)thay vì f(a,b))
David Conrad

1
@DavidConrad oo thật gọn gàng, cảm ơn bạn.
JustinM - Tái lập Monica

7

Brainfuck, 53 byte

Lấy đầu vào là byte, đầu ra là giá trị byte của 0x00hoặc 0x01. Đó là thuật toán DivMod theo sau là phủ định Boolean .

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

Dùng thử trực tuyến - Có một loạt các phụ+ở gần cuối để bạn có thể thấy đầu ra trong ASCII.


Bạn có thể loại bỏ phần "div" của điều để lưu byte không?
Nữ tu bị rò rỉ

1
@LeakyNun Đây là thuật toán ngắn nhất được biết đến cung cấp mô-đun. Loại bỏ một phần của nó thực sự làm cho nó dài hơn, bởi vì bạn cần nhiều ô tạm thời hơn. Bạn không thể tìm thấy một mô-đun mà không chia.
mbomb007

Tôi hiểu rồi, cảm ơn.
Rò rỉ Nun

@LeakyNun Chỉ cần nhìn vào thuật toán Division là bao lâu .
mbomb007

Có thể có những cái ngắn hơn, nhưng nếu vậy, không ai đã tìm thấy hoặc đăng chúng.
mbomb007

7

Brain-Flak , 88 86 byte

(<({}<>)>)<>{({}[()])<>(({}()[({})])){{}(<({}({}))>)}{}<>}<>(({}<{}>)){{}{}(<(())>)}{}

Đây là phiên bản dày đặc hơn của thuật toán kiểm tra khả năng phân chia ban đầu của Brain-Flak được viết bởi Dr Green Eggs và Iron Man DJMcMayhem và bản thân tôi.

Dưới đây là một lời giải thích ngắn gọn (ish) về cách thức hoạt động của nó:

  ({}<>)        #Move the top of the stack to the other stack #Start Mod
(<      >)      #Push zero
<>              #Switch stacks
{               #While the top of the stack is not zero
 ({}[()])       #Subtract one from the top of the stack
 <>             #Switch stacks
   {}()         #Pop the top, add one and ...
       [({})]   #Subtract the second element on the stack
 ((          )) #Push twice
 {              #If the top is not zero
  {}            #Pop the duplicate
    ({}({}))    #Add the second element to the first
  (<        >)  #Push zero
 }              #End if
 {}             #Pop the zero
 <>             #Switch back
}               #End While
<>              #Switch to the other stack
 ({}<{}>)       #Remove the second value on the stack         #End Mod
(        )      #Duplicate the result of modulation
{               #If the top is not zero
 {}{}           #Pop the top two elements
 (<(())>)       #Push a one and a zero
}               #End if
{}              #Pop the zero

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


Liên kết với phiên dịch trực tuyến?
Rò rỉ Nun

Công việc tốt đẹp! Cũng chào mừng đến với trang web! Tôi hy vọng bạn có niềm vui ở đây. (Tôi chắc chắn có)
DJMcMayhem

Câu trả lời đầu tiên rất hay, chào mừng bạn đến với PPCG!
Nữ tu bị rò rỉ

6

LOLCODE, 74 64 byte

HOW IZ I f YR a AN YR b
BOTH SAEM MOD OF a AN b AN 0
IF U SAY SO

Đây là một chương trình đầy đủ, việc triển khai hiện tại không yêu cầu HAI và KTHXBYE
OldBunny2800

Được rồi, tôi sẽ thử. One sec
OldBunny2800

Không, đó là hai byte dài hơn.
OldBunny2800

O RLY?Tôi không biết điều đó! thay đổi.
OldBunny2800

BTW Đây là mẹo chơi golf.
Leaky Nun

6

C, 60 byte

#include <stdio.h>
main(){int a,b;scanf("%d %d",&a,&b);a%b==0;}

1
Tại sao -1? Giải thích cho tôi
Ronronner

3
Có thể không ai đánh giá thấp. Đây là một câu trả lời ngắn để nó được gắn cờ tự động là chất lượng thấp, và sau đó bạn chỉnh sửa nó. Vì một số lý do, điều này tạo ra một downvote tự động . Xin lỗi vì điều đó. +1từ tôi. Ngoài ra, chúng tôi cho phép các chức năng, vì vậy bạn có thể dễ dàng rút ngắn điều này xuống int f(a,b){return !(a%b);}hoặc có thể thậm chí ngắn hơn.
DJMcMayhem

3
Không, quan điểm của tôi là nó không phải là một chương trình đầy đủ. Bạn có thể chỉ gửi một chức năng thay thế. int f(a,b){return!(a%b);}là 25 byte và nếu bạn sử dụng đúng trình biên dịch, bạn thậm chí có thể làm được f(a,b){return!(a%b);}21 byte.
DJMcMayhem

3
Trình chức năng thậm chí còn ngắn hơn: #define f(a,b)!(a%b)( liên kết ideone )
Mego

2
Bạn cần xác định một chức năng hoặc một chương trình, không chỉ là một đoạn.
Nữ tu bị rò rỉ


5

R, 22 20 byte

a=scan();!a[1]%%a[2]

Như thường lệ, đọc hai số từ đầu vào được kết thúc bởi một dòng trống.

Cập nhật: cảm ơn Jarko Dubbeldam vì đã loại bỏ 2 byte (mặc dù thực tế là chỉnh sửa của anh ta đã bị từ chối, nhưng nó rất hữu ích!).


5

Java 8, 11 byte

a->b->a%b<1

Cái quái gì vậy, có phiên bản JS và C # này, tại sao không phải là phiên bản Java?

Sử dụng:

import java.util.function.Function;

public class Program {
    public static void main(String[] args) {
        System.out.printf("%d, %d %b%n", 9, 3, divides(9, 3, a->b->a%b<1));
        System.out.printf("%d, %d %b%n", 3, 9, divides(3, 9, a->b->a%b<1));
    }

    public static boolean divides(int a, int b,
            Function<Integer, Function<Integer, Boolean>> f) {
        return f.apply(a).apply(b);
    }
}

a->b->a%b<1Điều này làm tăng một lỗi cú pháp, phải không?
dorukayhan muốn Monica trở lại vào

2
Không, đó là Java hợp lệ 8.
David Conrad

Đôi khi, ngay cả Java cũng trông giống như Perl ...
Mega Man

Vâng, tôi thêm vào rằng đây chỉ là Java 8;).
Bạch tuộc ma thuật Urn

Vì vậy, với Java 8, chúng ta chỉ phải đếm các byte biểu thức lambda chứ không phải toàn bộ lớp và hàm soạn sẵn, tuyệt vời!
Sikorski

4

Python, 16 byte

lambda D,d:D%d<1

1
Lưu ý rằng điều này sẽ không hoạt động nếu số nguyên âm được cho phép. May mắn thay, các đầu vào là hoàn toàn tích cực.
TLW

Tôi đã làm lambda a,b:1.*a/b==a/b, nhưng khá ấn tượng. Đây là một đoạn mã quá phức tạp ...
Erik the Outgolfer





3

Fortran 95, 78 byte

function f(i,j)result(k)
integer::i,j,k
k=merge(1,0,MOD(i,j)<1)
end function f

3

MarioLANG, 121 109 107 byte

Đã lưu 14 byte nhờ Martin Ender

;>(-)-)+(([!)
)"=========#[
; +(![-)< )<!+
  ==#==="  "#:
>!< >(+ !![(<
=#"="===##=:"
  !      <
  #======"

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

Giải trình

Thuật toán đơn giản chỉ là để giữ trừ dtừ nđể xem nếu bạn có thể làm điều đó một số nguyên lần và không có dư.

;
)
;

>
=
 
 

Đầu tiên, đầu vào được thu thập. nlà trong ô đầu tiên, dtrong ô thứ hai.

 >(-)-)+(([!
 "=========#
          )<
           "
 !
 #"="===##=
  
  

Đây thực chất là vòng lặp chính. Nó giảm các ô thứ nhất và thứ hai, và tăng thứ ba.

           [!)
           =#[
             !+
             #:
            (<
            :"
 
 

Đây là đầu ra cuối cùng. Nếu sau khi tăng / giảm, ô đầu tiên là 0, thì chúng ta đã loại bỏ n. Nếu sau này, ô thứ hai ( d) là 0, sau đó dđi vào nđồng đều. Chúng tôi tăng và in ( 1). Nếu không, di chuyển trở lại ô đầu tiên (đó là 0) và in nó.

 
 
  +(![-)<  
  ==#==="  
 !< >(+ !![
 #"="===##=
  !      <
  #======"

Vòng lặp này xảy ra nếu ô thứ hai là 0sau khi tăng và giảm. Nó sao chép ô thứ ba sang ô thứ hai. Phần ở phía dưới là bỏ qua vòng lặp nếu ô không 0.


3

Tcl, 34 byte

ge stdin a
ge stdin b
exp $a%$b<1

Lần thử đầu tiên / * thành công * / của tôi trong codegolf! Mã này phải được thực thi trong Tcl shell, nếu không nó sẽ không hoạt động.

Một byte nhờ @Lynn.

Bốn byte nhờ @Lynn và @LeakyNun (bây giờ tôi hiểu ý của anh ấy)!


Bạn có thể bỏ qua ?1:0?
Leaky Nun

@LeakyNun đó là hoạt động tạm thời. bạn có nghĩa là chỉ để trở lại sth khi nó bị chia rẽ?

Điều gì sẽ $a%$b==0trở lại?
Leaky Nun

1
Ý tôi là, dòng thứ ba của bạn có thể được exp $a%$b==0không?
Leaky Nun

1
Hoặc exp $a%$b<1, có thể?
Lynn

3

PHP, 23 22 byte

<?=$argv[1]%$argv[2]<1

in 1 cho đúng, chuỗi rỗng (= nothing) cho false

gọi từ cli với ndnhư là đối số


10 byte cho PHP cổ đại: <?=$n%$d<1


Nếu bạn không phiền khi sử dụng PHP4.1 : <?=!($A%$B). Các giá trị có thể được thông qua như là một phần của bạn $_SESSION, $_COOKIE, $_POST, $_GEThoặc (nếu tôi không nhầm) qua $_ENV.
Ismael Miguel

@Ismael Miguel: Thật ra tôi không ủng hộ, nhưng tôi mệt mỏi với việc đăng các phiên bản PHP cổ và thêm vào for PHP<5.4 with register_globals=On. Nhưng tôi sẽ thêm nó để tham khảo.
Tít

Thực tế, bạn không thể nói " for PHP<5.4 with register_globals=On", vì bạn phải đếm số byte của php.initệp chứa register_globals=On. Tuy nhiên, PHP4.1 là một trường hợp đặc biệt. Đây là phiên bản cuối cùng có register_globals=Ongiá trị mặc định và hầu hết các chức năng đều có sẵn từ PHP4.1 trở lên. Phiên bản này cũng cho phép sử dụng các chức năng khác, như eregsplitkhông có cảnh báo.
Ismael Miguel

3

J, 3 byte

0=|

Sử dụng:

2 (0=|) 10 

Sẽ trở lại 1. Và tương đương với mã giả10 MOD 2 EQ 0

Lưu ý rằng điều này rất giống với câu trả lời của APL , bởi vì J được lấy cảm hứng từ APL


Câu trả lời đầu tiên rất hay, chào mừng bạn đến với PPCG!
Nữ tu bị rò rỉ

@LeakyNun Cảm ơn, tôi đã luôn duyệt xung quanh, rất vui được trả lời.
emiflake

3

PowerShell v2 +, 20 byte

!($args-join'%'|iex)

Đưa đầu vào thành hai đối số dòng lệnh $args, -joinkết hợp chúng thành một chuỗi với %dấu phân cách, các đường dẫn đến iex(viết tắt Invoke-Expressionvà tương tự eval). Kết quả là một 0hoặc không bằng 0, vì vậy chúng tôi lấy Boolean không phải !là kết quả đó, có nghĩa là $TRUEhoặc $FALSE(số nguyên khác không trong PowerShell là trung thực). Boolean đó được để lại trên đường ống và đầu ra là ẩn.

Các phiên bản thay thế, cũng có 20 byte mỗi

param($a,$b)!($a%$b)
!($args[0]%$args[1])

Cùng một khái niệm, chỉ là những cách khác nhau về cấu trúc đầu vào. Cảm ơn @DarthTwon đã cung cấp những thứ này.

Ví dụ

PS C:\Tools\Scripts\golfing> .\divisibility-test.ps1 24 12
True

PS C:\Tools\Scripts\golfing> .\divisibility-test.ps1 24 13
False

PS C:\Tools\Scripts\golfing> .\divisibility-test.ps1 12 24
False

Trong cả hai phương pháp khác tôi đã thử chơi golf câu hỏi này, tôi cũng nhận được chúng tới 20 byte: param($a,$b)!($a%$b)!($args[0]%$args[1])
ThePoShWolf

@DarthTwon Thật vậy. Khi xử lý một lượng nhỏ các hoạt động, thường có nhiều nhất một hoặc hai byte khác nhau theo các cách khác nhau để lấy các đối số đầu vào.
admBorkBork

Tôi đã hy vọng đưa ra một cái gì đó ngắn hơn: P nhưng vâng, luôn có nhiều cách để nuôi mèo, đặc biệt là trong PS.
ThePoShWolf

3

Haskell, 13 11 byte

((1>).).mod

Điều này xác định một chức năng mới (!) :: Integral n => n -> n -> Bool. Vì mod n mchỉ trả về số dương nếu nmlà số dương, chúng ta có thể lưu một byte bằng cách sử dụng 1>thay vì 0==.

Sử dụng:

ghci> let n!d=1>mod n d
ghci> 100 ! 2
True
ghci> 100 ! 3
False

Bạn có thể truy cập pointfree và lưu 2 byte : ((1>).).mod.
nimi
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.