การทดสอบการแบ่งแยก


39

งาน

ได้รับสองจำนวนเต็มบวกอย่างเคร่งครัดnและdเป็น input ตรวจสอบว่าnคือเท่ากันหารโดยdคือถ้ามีจำนวนเต็มคิวn = qdดังกล่าวว่า

คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและใช้วิธีการมาตรฐานของเราในการรับอินพุตและให้เอาต์พุต

เอาท์พุทควรจะเป็นtruthy หรือค่า falsy ; ความจริงถ้าnหารด้วยdและเป็นเท็จอย่างอื่น

รหัสของคุณต้องจัดการกับจำนวนเต็มเท่านั้นซึ่งสามารถเป็นตัวแทนได้จริงตราบใดที่มันใช้ได้กับเลขจำนวนเต็ม 8 บิตที่ลงชื่อทั้งหมด อย่างไรก็ตามอัลกอริทึมของคุณต้องใช้งานสำหรับจำนวนเต็มขนาดใหญ่โดยพลการ

คุณอาจใช้ภาษาการเขียนโปรแกรมใด ๆแต่โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น

นี่คือดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ

กรณีทดสอบ

 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

ลีดเดอร์บอร์ด

สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

คุณสามารถทำให้ชื่อภาษาเป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

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


การสนทนานี้ได้รับการย้ายไปแชท
Dennis

คำตอบ:



29

Brain-Flak , 72 70 64 62 58 46 ไบต์

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

รับเงินปันผลและตัวหาร (ตามลำดับ) เป็นอินพุตและพิมพ์ตัวหาร (ความจริง) หรืออะไรก็ได้ เนื่องจากแต่ละสแต็กมีค่าเป็นศูนย์จำนวนอนันต์เอาต์พุตว่างจึงควรพิจารณาเป็นเท็จ

ในขณะที่ไม่สะอาดสแต็คโซลูชันนี้ใช้เพียงกองเดียว

ลองออนไลน์!

ขอบคุณ @WheatWizard สำหรับการตีกอล์ฟ 2 ไบต์!

มันทำงานอย่างไร

                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.

การคำนวณโมดูลัส 42 ไบต์

โปรแกรมเต็มรูปแบบด้านบนสามารถปรับเปลี่ยนได้ในลักษณะที่ไม่สำคัญเพื่อคำนวณค่าโมดูลัสแทน

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

เมื่อก่อนวิธีนี้ไม่สะอาด แต่ใช้เพียงสแต็คเดียว โมดูลัสของ0จะออกจากสแต็คที่ว่างเปล่าซึ่งเป็นประมาณเทียบเท่ากับออกจาก0 ; แต่ละสแต็กมีศูนย์ไม่สิ้นสุด

ลองออนไลน์!

มันทำงานอย่างไร

เปรียบเทียบสองลูปของเครื่องทดสอบการหารและเครื่องคำนวณโมดูลัส

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

แตกต่างเพียงเป็นที่ตั้งของ{(<()>)}{}ซึ่งสัญญาวันที่และRถ้าd = 0 ในการคำนวณโมดูลัสที่เราดำเนินการแลกเปลี่ยนนี้หลังจาก decrementing dและการเพิ่มR

การเปลี่ยนแปลงนี้จะไม่ส่งผลกระทบต่อผลลัพธ์หากa% b> 0แต่ถ้าa% b = 0มันจะทิ้ง(n, d, r) = (0, b, 0) - มากกว่า(n, d, r) = (0, 0, b) - บนสแต็ก

ดังนั้นเพื่อให้ได้รับการโมดูลัสที่เราจะต้องปรากฏnและd{}{}กับ

การคำนวณโมดูลัสสะอาด - สแต็ก 64 ไบต์

อัลกอริธึมโมดูลัสขนาด 42 ไบต์ไม่สะอาดดังนั้นจึงไม่สามารถใช้งานได้เหมือนในทุกโปรแกรม รุ่นต่อไปนี้จะจ่ายเงินปันผลและตัวหาร (ตามลำดับ) จากสแต็คที่ใช้งานอยู่และผลักโมดูลัสกลับมา ไม่มีผลข้างเคียงอื่น ๆ

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

วิธีการแก้ปัญหานี้ส่วนใหญ่อิงจากระเบียน 72-tete ก่อนหน้าของ @ WheatWizard แต่จะบันทึกได้ 6 ไบต์โดยไม่สลับกองซ้อน

ลองออนไลน์!

มันทำงานอย่างไร

             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

x86_32 รหัสเครื่อง 8 ไบต์

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

นี่คือคำตอบสำหรับการเล่นกอล์ฟรหัสแรกของฉันดังนั้นหวังว่าฉันจะปฏิบัติตามกฎทั้งหมด

นี่เป็นครั้งแรกที่เรียก cdq เพื่อล้างการลงทะเบียน edx จากนั้นทำการแบ่งการเซ็นชื่อบนการลงทะเบียน ecx ซึ่งเก็บส่วนที่เหลือใน edx บรรทัดการทดสอบ edx, edx จะตั้งค่าศูนย์เป็นศูนย์หาก edx เป็นศูนย์และ sete วาง 0 เป็นเท็จหาก edx ไม่เป็นศูนย์และทำให้ 1 เป็นจริงหาก edx เป็น 0

นี่เป็นเพียงข้อมูลโค้ดที่มีส่วนช่วยนับจำนวนไบต์ แต่สำหรับการทดสอบนี่คือรหัส C ที่ฉันเขียนด้วยชุดประกอบแบบอินไลน์เพราะวิธีนี้ง่ายกว่าในการจัดการ I / O


2
ยินดีต้อนรับสู่ PPCG คำตอบแรกที่ดี!
Leun Nun

จำเป็นต้องเป็นโปรแกรมเต็มรูปแบบหรือไม่? ฉันกำลังจัดรูปแบบการตอบสนองของฉันออกจากคำตอบนี้ และขอบคุณ! ฉันหวังว่าจะได้รหัสแอสเซมบลี / เครื่องดีขึ้นสำหรับการตีกอล์ฟเพิ่มเติม!
davey

1
เข้าและส่งออกในทะเบียนที่ระบุไว้ในการชุมนุมที่ได้รับอนุญาตโดยค่าเริ่มต้น: การป้อนข้อมูล , เอาท์พุท นี่คือการยอมรับที่สมบูรณ์แบบ ยินดีต้อนรับสู่ PPCG!
Mego

Fantastic! ขอขอบคุณ!
davey

17

Hexagony, 15, 13, 12 10 ไบต์

ภาษาที่ใช้ฐานหกเหลี่ยมที่ทุกคนชื่นชอบ! : D

TL; DR ทำงานได้โดยใช้เวทย์มนตร์ที่ไม่ได้ฟอร์แมตเพื่อลดจำนวนไบต์:

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

บันทึก 2 ไบต์ด้วยตัวช่วยสร้างการจัดวางของ @ MartinEnder

@FryAmTheEggman บันทึก 1 ไบต์โดยใช้มุมที่สร้างสรรค์ยิ่งขึ้น

ทั้ง @MartinEnder และ @FryAmTheEggman มาพร้อมกับโซลูชัน 10 ไบต์ที่ไม่ได้พิมพ์อะไรเลยสำหรับค่าที่ผิดพลาด

ทางออกของฉัน (15):

ยังไม่ฟอร์แมต:

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

จัดรูปแบบ:

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

@ มาร์ตินเอนเดอร์โซลูชั่น (13):

ยังไม่ฟอร์แมต:

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

จัดรูปแบบ:

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

คำอธิบาย:

ก่อนอื่นเราจะได้รับอินพุตและรับโมดูลัส

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

จากนั้นจะตรวจสอบว่าโมดูลัสเป็น 0 หรือไม่ หากเป็นเช่นนั้น IP จะหมุนไปทางซ้าย 60 องศาจากนั้นสะท้อนกระจกเงาออกตั้งค่าเซลล์เป็น 1 และพิมพ์ออกมา

จากนั้น IP จะดำเนินต่อไปยังแถวที่สี่ เมื่อไปถึง>มันจะเปลี่ยนไปทางขวาแทน (เพราะค่าของเซลล์ตอนนี้เป็น 1) มันจะไหลออกมาและกลับมาที่มุมล่างขวามุ่งหน้าไปที่ NW IP จะเข้าสู่<, ไปตามแถวบนสุดและกลับมาที่มุมด้านขวาเพื่อกด@, หยุดโปรแกรม

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

หากโมดูลัสเปลี่ยนเป็นค่าบวก IP จะเปลี่ยนไปทางขวา 60 องศา เมื่อมันออกไปที่มุมขวาล่างมันจะดำเนินต่อไปที่ขอบซ้ายล่างเนื่องจากกฎการห่อของ Hexagony 'จะถูกนำกลับมาใช้จะทำให้ IP ไปที่มือถือที่มี 0 อยู่ในนั้น IP <ที่แล้วเดินทางไปตามแถวที่สี่พันรอบที่สองตีพิมพ์และได้รับการสะท้อนเข้าไปใน ส่วนที่เหลือของเส้นทางไป@ยังเหมือนกัน

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

นั่นเป็นเวทมนตร์คาถาที่จริงจัง

@ โซลูชั่นของ FryAmTheEggman (12):

ยังไม่ฟอร์แมต:

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

จัดรูปแบบ:

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

คำอธิบาย:

เช่นเดียวกับโซลูชันอื่น ๆ มันรับอินพุตและรับโมดูลัส

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

จากนั้น IP จะเบี่ยงเบนไปที่มุมด้านล่าง ถ้าโมดูลัสเป็นบวกมันจะไปที่ขอบซ้ายบน ?ไม่มีการป้อนข้อมูลมากขึ้นเพื่อให้มันตั้งเซลล์เป็น 0 !แล้วพิมพ์ 0 และ@สิ้นสุดโปรแกรม

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

ทุกอย่างมีความซับซ้อนมากขึ้นเมื่อโมดูลัสเป็น 0 อย่างแรกเลยมันลดลงแล้วรีเซ็ตเป็น 0 จากนั้นตั้งค่าเป็น 1 แล้วพิมพ์ จากนั้นได้รับ 1 decremented 0 0%0หลังจากนั้นโปรแกรมทำงานเหมือนมันไม่ที่จุดเริ่มต้นจนกว่าจะพยายามที่จะทำ นั่นทำให้เกิดข้อผิดพลาดที่เงียบและออก

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

ฉันชอบเคล็ดลับข้อผิดพลาดที่เงียบจริง ๆ แต่วิธีที่ง่ายกว่าคือการแทนที่(ด้วย/เพื่อให้ IP ส่งผ่านในครั้งแรก แต่จะสะท้อนกลับเป็น@วินาที

โซลูชันความร่วมมือ (10):

ยังไม่ฟอร์แมต:

?{?!1\@'%<

จัดรูปแบบ:

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

โปรแกรมนี้เริ่มต้นเหมือนกับโปรแกรมอื่น ๆ ทั้งหมดรับอินพุตและแก้ไขมัน

ถ้าใส่เป็น 0 IP เลี้ยวซ้ายเมื่อ <hits มันเบี่ยงเบนไป1!@ซึ่งจะพิมพ์ 1 และออก

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

หากอินพุตเป็นค่าบวก IP จะเลี้ยวขวาเมื่อถูก<สัญญาณ มันออกจากมุมและไปตามขอบด้านขวาบนกด @ โดยไม่ต้องพิมพ์

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

6
ฉันคิดว่าคุณควรจัดรูปแบบคำตอบของคุณแตกต่างกัน การมีสี่คำตอบในบล็อกโค้ดเดียวทำให้ดูเหมือนว่าการนับไบต์ของคุณผิด
mbomb007

17

Brain-flak 102, 98, 96 bytes

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

eww ทั้งหมด ฉันอาจโพสต์คำอธิบาย แต่ฉันแทบจะไม่เข้าใจมันเอง ภาษานี้ทำให้สมองของฉันเจ็บ

ลองออนไลน์!

ขอบคุณ github user @Wheatwizard ที่มาพร้อมกับตัวอย่างโมดูลัส ฉันอาจจะไม่ได้คิดออกเองว่า!

นอกจากนี้คำตอบที่สั้นเป็นที่นี่

คำอธิบายที่ไม่ถูกต้องอาจเป็นไปได้:

(({}<>))                    #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.

ที่เหลือค่อนข้างตรงไปตรงมา

{              }            #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.ใช่ดูเหมือนว่า
Erik the Outgolfer

24 ไบต์ถ้าคุณนับคำสั่ง brainflak แต่ละคำเป็นไบต์
noɥʇʎԀʎzɐɹƆ

12

Javascript (ES6) 17 12 11 ไบต์

a=>b=>a%b<1
  • แก้ไข:ลบออก 5 ไบต์เพราะคาดว่า 'a> 0'
  • EDIT2:ลบออก 1 ไบต์ขอบคุณที่Downgoat

ใช้การแกงเพื่อบันทึกหนึ่งไบต์: a => b =>
Downgoat

ดังนั้นฉันจะดำเนินการนี้ได้อย่างไร เมื่อฉันลองd=a=>b=>a%b<1ตามด้วยd(32,2)ในคอนโซล JS ... ฉันได้รับคำตอบfunction b=>a%b<1
WallyWest

@WallyWest d(32)(2)ใช้นี้ดีความชอบดังนั้นคุณจะพิมพ์ใน เพราะd(32)ให้function b=>a%b<1แล้วคุณต้องเรียกฟังก์ชันนั้นด้วยbค่าของคุณ
Cyoce

9

เป็นกลุ่ม 11 การกดแป้น

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

ไม่เลวสำหรับภาษาที่จัดการกับสตริงเท่านั้น : D


อะไร<C-Left>ทำอย่างไร ไม่สามารถทดสอบได้เพราะจะสลับ windows บน mac> _>
Downgoat

1
@Downgoat คุณกำลังใช้ ctrl หรือคำสั่งหรือไม่ ไม่ว่าจะด้วยวิธีใดก็เท่ากับ "b" ยกเว้นว่าจะทำงานในโหมดแทรกด้วย
DJMcMayhem

การเป็นคนช่างมันเทียบเท่ากับBมากกว่าb(และCtrl+ Rightเท่ากับW) - ความแตกต่างอยู่กับตัวละครที่ไม่ใช่คำ แต่ในกรณีนี้มันทำสิ่งเดียวกันแน่นอน :) vimdoc.sourceforge.net/htmldoc/motion html # <C-Left >
Christian Rondeau

9

Mathematica - 17 13 3 ไบต์

ขอบคุณ @MartinEnder สำหรับการบันทึกจำนวนหนึ่งไบต์!


ตัวละครนั้นคืออะไร?
Cyoce

@Cyoce ผมไม่ทราบว่ามัน Unicode รหัส (บนโทรศัพท์มือถือในขณะนี้) Divisible[]แต่มันก็เป็นผู้ประกอบการในระยะสั้นสำหรับ
Yytsi

@Cyoce ฉันคิดว่ามันเป็นสัญลักษณ์ไปป์หรือที่เรียกว่า shift + backslash
Pavel

@Pavel หากเป็นสัญลักษณ์ไพพ์มันจะไม่เป็นสามไบต์
Cyoce

@Cyoce เป็นตัวละคร U + 2223: fileformat.info/info/unicode/char/2223/index.htm
numbermaniac

8

เรติน่า 12 ไบต์

^(1+)\1* \1$

ใช้อินพุตที่คั่นด้วยช่องว่างเป็นอันหนึ่งอันเดียวกัน111111111111 1111ตรวจสอบว่า12ถ้าหารด้วย4หรือไม่ พิมพ์1 (จริง) หรือ0 (เท็จ)

ลองออนไลน์!

FryAmTheEggman บันทึกสองไบต์ อ๊ะเขียนคำตอบของฉันใหม่เพื่อรับการโต้แย้งในลำดับที่ถูกต้อง (จากนั้นทอดฉันลงในความคิดเห็นฉันช้า regex!)


หากต้องการแก้ไขคำสั่งถ้าจำเป็นฉันคิดว่า^(1+)\1* \1$จะใช้งานได้
FryAmTheEggman

ฉันเดาว่าด้วยสเป็คใหม่ลำดับอินพุตตรงข้ามนั้นใช้ได้อีกครั้ง
Martin Ender


8

C #, 27 13 12 ไบต์

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

ขอบคุณ TuukkaX สำหรับการชี้ให้เห็นเนื้อแกะที่ไม่ระบุตัวตนเป็นที่ยอมรับได้ ขอบคุณ David Conrad ที่ชี้ให้ฉันไปที่การ Curry ซึ่งฉันไม่รู้ด้วยซ้ำว่าเป็นเรื่องอะไร

สั้นและหวานเพราะเราแค่จัดการกับจำนวนเต็มเราสามารถใช้<1แทน==0และบันทึกไบต์ทั้งหมด


ผมไม่แน่ใจ (a,b)=>a%b<1;แต่ผมคิดว่าคุณก็สามารถใช้แลมบ์ดา: +1
Yytsi

@ TuukkaX ขอบคุณฉันไม่แน่ใจว่ามันดูเหมือนโกง
JustinM - Reinstate Monica

รุ่น JS นี้ใช้การแกงเพื่อลดทีละไบต์และควรทำงานกับ C # เช่นกัน: a=>b=>a%b<1;(หมายเหตุ: คุณจะต้องเรียกมันว่าเป็นf(a)(b)มากกว่าf(a,b))
David Conrad

1
@DavidConrad oo เรียบร้อยขอบคุณ
JustinM - Reinstate Monica

7

brainfuck, 53 ไบต์

จะเข้าเป็นไบต์, เอาท์พุทเป็นค่าไบต์หรือ0x00 0x01มันเป็นขั้นตอนวิธีการ DivModตามด้วยการปฏิเสธบูลีน

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

ลองออนไลน์ - มีจำนวนมากพิเศษ+ใกล้ถึงจุดสิ้นสุดเพื่อให้คุณเห็นผลลัพธ์ใน ASCII


คุณสามารถลบส่วน "div" ของสิ่งที่บันทึกไบต์ได้หรือไม่?
Leun Nun

1
@LeakyNun นี่เป็นอัลกอริทึมที่รู้จักกันสั้นที่สุดที่ให้โมดูลัส การลบบางส่วนทำให้ใช้งานได้จริงเพราะคุณต้องการเซลล์ชั่วคราวเพิ่มขึ้น คุณไม่สามารถหาโมดูลัสโดยไม่ต้องหาร
mbomb007

ฉันเห็นขอบคุณ
Leun Nun

@LeakyNun เพียงแค่ดูที่วิธีการที่ยาวอัลกอริทึมส่วนคือ
mbomb007

อาจมีขนาดสั้นกว่านี้ แต่ถ้าเป็นเช่นนั้นไม่มีใครพบหรือโพสต์ไว้
mbomb007

7

Brain-Flak , 88 86 ไบต์

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

นี่เป็นเวอร์ชั่นอัลกอริทึมการทดสอบการแตกหาร Brain-Flak ที่หนาแน่นขึ้นโดยDr Green Eggs และ Iron Man DJMcMayhemและตัวฉันเอง

นี่คือคำอธิบายสั้น ๆ เกี่ยวกับวิธีการทำงาน:

  ({}<>)        #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

ลองออนไลน์!


เชื่อมโยงไปยังล่ามออนไลน์หรือไม่
Leun Nun

เยี่ยมมาก! ยังยินดีต้อนรับสู่เว็บไซต์! ฉันหวังว่าคุณจะสนุกที่นี่ (แน่นอนฉันมี)
DJMcMayhem

คำตอบแรกที่ดียินดีต้อนรับสู่ PPCG!
Leun Nun

6

LOLCODE, 74 64 ไบต์

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

มันเป็นโปรแกรมเต็มรูปแบบการใช้งานในปัจจุบันไม่จำเป็นต้อง HAI และ KTHXBYE
OldBunny2800

ตกลงฉันจะพยายาม. หนึ่งวินาที…
OldBunny2800

ไม่มันยาวกว่าสองไบต์
OldBunny2800

O RLY?ฉันไม่รู้ว่า! เปลี่ยนแปลง
OldBunny2800

BTW นี่คือเคล็ดลับการเล่นกอล์ฟ
Leun Nun

6

C, 60 Bytes

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

1
ทำไม -1 อธิบายฉัน
Ronronner

3
เป็นไปได้ว่าไม่มีใครลงคะแนน นี่เป็นคำตอบสั้น ๆ เพื่อให้มีการตั้งค่าสถานะอัตโนมัติว่ามีคุณภาพต่ำจากนั้นคุณแก้ไข ด้วยเหตุผลบางอย่างนี้ดุจ downvote ขอโทษสำหรับเรื่องนั้น. +1จากฉัน. นอกจากนี้เรายังอนุญาตให้ใช้งานฟังก์ชั่นดังนั้นคุณสามารถย่อให้สั้นลงint f(a,b){return !(a%b);}หรือย่อได้
DJMcMayhem

3
ไม่ประเด็นของฉันคือไม่จำเป็นต้องเป็นโปรแกรมเต็มรูปแบบ คุณสามารถส่งเพียงฟังก์ชั่นแทน int f(a,b){return!(a%b);}คือ 25 ไบต์และถ้าคุณใช้คอมไพเลอร์ที่ถูกต้องคุณสามารถทำได้f(a,b){return!(a%b);}21 ไบต์
DJMcMayhem

3
แม้แต่การส่งฟังก์ชั่นที่สั้นลง: #define f(a,b)!(a%b)( ลิงค์ ideone )
Mego

2
คุณต้องกำหนดฟังก์ชั่นหรือโปรแกรมไม่ใช่แค่ตัวอย่าง
Leun Nun


5

R, 22 20 ไบต์

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

โดยปกติแล้วอ่านตัวเลขสองตัวจากอินพุตที่ถูกยกเลิกโดยบรรทัดว่าง

อัปเดต: ขอบคุณJarko Dubbeldamสำหรับการลบ 2 ไบต์ (แม้ว่าการแก้ไขของเขาจะถูกปฏิเสธ แต่ก็มีประโยชน์มาก!)


5

Java 8, 11 ไบต์

a->b->a%b<1

อะไรคือรุ่นของรุ่น JS และ C # ทำไมถึงไม่ใช่รุ่น Java ด้วย?

การใช้งาน:

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นี่ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ใช่ไหม
dorukayhan ต้องการโมนิก้ากลับเมื่อ

2
ไม่มันเป็น Java 8 ที่ถูกต้อง
David Conrad

บางครั้งแม้แต่ Java ก็ดูเหมือน Perl ...
Mega Man

ใช่ฉันต้องการเพิ่มว่านี่คือ Java 8 เท่านั้น;)
Magic Octopus Urn

ดังนั้นด้วย Java 8 เราต้องนับแลมบ์ดาแลมบ์ดาเท่านั้นไม่ใช่คลาสทั้งหมดและฟังก์ชันสำเร็จรูปเลย!
Sikorski

4

Python ขนาด 16 ไบต์

lambda D,d:D%d<1

1
โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากได้รับอนุญาตจำนวนเต็มลบ โชคดีที่อินพุตเป็นบวกอย่างเคร่งครัด
TLW

ฉันทำlambda a,b:1.*a/b==a/bแต่รู้สึกประทับใจมาก นี่เป็นโค้ดที่ซับซ้อนมาก ...
Erik the Outgolfer






3

MarioLANG, 121 109 107 ไบต์

บันทึกแล้ว 14 ไบต์ขอบคุณ Martin Ender

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

ลองออนไลน์!

คำอธิบาย

อัลกอริทึมเป็นเพียงเพื่อให้ลบdจากnเพื่อดูว่าคุณสามารถทำมันได้เต็มจำนวนครั้งและไม่มีเหลือ

;
)
;

>
=
 
 

ขั้นแรกให้รวบรวมข้อมูล nอยู่ในเซลล์แรกdในวินาที

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

นี่คือห่วงหลัก มันลดเซลล์แรกและเซลล์ที่สองและเพิ่มเซลล์ที่สาม

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

นี่คือผลลัพธ์สุดท้าย ถ้าหลังจากการเพิ่ม / decrementing, เซลล์แรกเป็น 0 nแล้วเราได้ตัดออก ถ้าหลังจากนี้เซลล์สอง ( d) เป็น0แล้วdเดินเข้าไปในห้องnอย่างเท่าเทียมกัน เราเพิ่มและพิมพ์ ( 1) มิฉะนั้นให้เลื่อนกลับไปที่เซลล์แรก (ซึ่งก็คือ0) แล้วพิมพ์ออกมา

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

ลูปนี้จะเกิดขึ้นหากเซลล์ที่สองอยู่0หลังจากการเพิ่มและการลดลง มันคัดลอกเซลล์ที่สามไปยังเซลล์ที่สอง 0ส่วนที่ด้านล่างคือการบายพาสห่วงถ้าเซลล์ไม่ได้


3

Tcl, 34 ไบต์

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

/ * * * * * * * * ความสำเร็จครั้งแรกของฉันใน codegolf! รหัสนี้จะต้องดำเนินการในเปลือก Tcl มิฉะนั้นจะไม่ทำงาน

หนึ่งไบต์ต้องขอบคุณ @Lynn

สี่ไบต์ต้องขอบคุณ @Lynn และ @LeakyNun (ตอนนี้ฉันเข้าใจแล้วว่าเขาหมายถึงอะไร)!


ละเว้นได้?1:0ไหม
Leun Nun

@LeakyNun มันเป็นการดำเนินการแบบไตรภาค คุณหมายถึงเพียงแค่ส่งคืน sth เมื่อมันไร้ค่า?

สิ่งที่จะ$a%$b==0กลับมา?
Leun Nun

1
ฉันหมายความว่าบรรทัดที่สามของคุณจะเป็นได้exp $a%$b==0หรือไม่
Leun Nun

1
หรือexp $a%$b<1อาจจะ?
ลินน์

3

PHP, 23 22 ไบต์

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

พิมพ์ 1 สำหรับสตริงจริงที่ว่างเปล่า (= ไม่มีอะไร) เป็นเท็จ

โทรจาก cli ด้วยnและdเป็นข้อโต้แย้ง


10 ไบต์สำหรับ PHP โบราณ: <?=$n%$d<1


หากคุณไม่ทราบใช้ <?=!($A%$B)PHP4.1: ค่าที่สามารถส่งผ่านไปเป็นส่วนหนึ่งของคุณ$_SESSION, $_COOKIE, $_POST, $_GETหรือ (ถ้าฉันไม่ผิด) $_ENVมากกว่า
Ismael Miguel

@Ismael มิเกล: จริงๆแล้วฉันห้าม แต่ผมเหนื่อยกับการโพสต์สำหรับรุ่น PHP for PHP<5.4 with register_globals=Onโบราณและการเพิ่ม แต่ฉันจะเพิ่มไว้เพื่อการอ้างอิง
ติตัส

ที่จริงแล้วคุณไม่สามารถพูดได้ " for PHP<5.4 with register_globals=On" เพราะคุณต้องนับไบต์ของคุณไฟล์ที่มีphp.ini register_globals=Onอย่างไรก็ตาม PHP4.1 เป็นกรณีพิเศษ เป็นรุ่นสุดท้ายที่register_globals=Onมีค่าเริ่มต้นและฟังก์ชั่นส่วนใหญ่สามารถใช้งานได้ตั้งแต่ PHP4.1 ขึ้นไป รุ่นนี้ยังช่วยให้การใช้งานฟังก์ชั่นอื่น ๆ เช่นeregและsplitไม่มีคำเตือน
Ismael Miguel

3

J, 3 ไบต์

0=|

การใช้งาน:

2 (0=|) 10 

1จะกลับมา และเทียบเท่ากับ pseudocode10 MOD 2 EQ 0

โปรดทราบว่านี่คล้ายกับคำตอบของ APLมากเพราะ J เป็นคำที่ได้รับแรงบันดาลใจจาก APL


คำตอบแรกที่ดียินดีต้อนรับสู่ PPCG!
Leun Nun

@LeakyNun ขอบคุณฉันเคยดูรอบ ๆ และยินดีที่จะตอบในที่สุด
emiflake

3

PowerShell v2 +, 20 ไบต์

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

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดรับคำสั่งสองรายการ$argsโดย-joinรวมเข้าด้วยกันเป็นสตริงโดยใช้%เป็นตัวคั่นซึ่งไพพ์ไปที่iex(ย่อมาจากInvoke-Expressionและคล้ายกับeval) ผลลัพธ์เป็นได้ทั้งแบบ0หรือไม่ใช่ศูนย์ดังนั้นเราจึงใช้บูลีนที่ไม่เป็น!ผลลัพธ์ซึ่งหมายความว่าอย่างใดอย่างหนึ่ง$TRUEหรือ$FALSE(จำนวนเต็มไม่เป็นศูนย์ใน PowerShell เป็นจริง) บูลีนนั้นถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทก็เป็นนัย

รุ่นทางเลือกซึ่งมีขนาด 20 ไบต์เช่นกัน

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

แนวคิดเดียวกันเพียงวิธีที่แตกต่างกันเล็กน้อยในการจัดโครงสร้างอินพุต ขอบคุณ @DarthTwon ที่ให้สิ่งเหล่านี้

ตัวอย่าง

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

ทั้งสองวิธีอื่นที่ฉันลองเล่นกอล์ฟคำถามนี้ฉันได้รับพวกเขาถึง 20 ไบต์ด้วย: param($a,$b)!($a%$b)และ!($args[0]%$args[1])
ThePoShWolf

@DarthTwon แน่นอน เมื่อจัดการกับการดำเนินการจำนวนเล็กน้อยมักจะมีความแตกต่างอย่างน้อยหนึ่งหรือสองไบต์ในวิธีที่แตกต่างกันในการรับอาร์กิวเมนต์อินพุต
AdmBorkBork

ฉันหวังว่าจะมีบางสิ่งที่สั้นกว่านี้: P แต่ใช่มีหลายวิธีในการดูแลแมวโดยเฉพาะใน PS
ThePoShWolf

3

Haskell, 13 11 ไบต์

((1>).).mod

(!) :: Integral n => n -> n -> Boolนี้กำหนดฟังก์ชั่นใหม่ เนื่องจากmod n mผลตอบแทนเพียงตัวเลขบวกถ้าnและmเป็นบวกเราสามารถบันทึกไบต์โดยใช้แทน1>0==

การใช้งาน:

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

คุณสามารถไป pointfree และบันทึก 2 ((1>).).modไบต์:
nimi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.