Bölünebilirlik testi


39

Görev

İki katı pozitif tamsayı verilen n ve d girdi olarak belirlemek , n ise eşit bölünebilen tarafından d bir tamsayıdır mevcutsa, yani q, öyle ki n = qd.

Bir program veya fonksiyon yazabilir ve standart girdi alma ve çıktı alma yöntemlerimizden herhangi birini kullanabilirsiniz .

Çıktı bir truthy veya sahte bir değer olmalıdır ; truthy eğer n bölünebilen d ve falsy aksi.

Kodunuz yalnızca imzalı tüm 8 bit tam sayılar için çalıştığı sürece, yerel olarak temsil edebildiği tam sayıları işlemelidir. Bununla birlikte, algoritmanızın keyfi olarak büyük tamsayılar için çalışması gerekir.

Herhangi bir programlama dilini kullanabilirsiniz , ancak bu boşlukların varsayılan olarak yasak olduğunu unutmayın .

Bu , yani en kısa geçerli cevap - bayt cinsinden - kazanır.

Test durumları

 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

Liderler Sıralaması

Bu yazının altındaki Yığın Parçacığı, cevapları a) dil başına en kısa çözümün bir listesi olarak ve b) genel bir lider tablosu olarak oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

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


Bu konuşma sohbete taşındı .
Dennis,

Yanıtlar:



29

Brain-Flak , 72 70 64 62 58 46 bayt

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

Temettü ve böleni (bu sırayla) girdi olarak alır ve böleni (gerçeği) veya hiçbir şeyi yazdırmaz. Her yığının üstü kapalı, sonsuz miktarda sıfır olduğundan, boş çıktı sahte sayılmalıdır.

Yığını temizlemese de, bu çözüm yalnızca tek bir yığın kullanır.

Çevrimiçi deneyin!

2 baytlık golf oynamak için @WheatWizard'a teşekkürler!

Nasıl çalışır

                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.

Modül hesaplama, 42 bayt

Yukarıdaki tam program yerine modülü hesaplamak için önemsiz bir şekilde değiştirilebilir.

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

Daha önce olduğu gibi, bu yöntem yığın temizliği değil, sadece tek bir yığın kullanır. Bir 0 modülü , yığını 0 bırakarak kabaca boş bırakacaktır ; her yığın sonsuz sıfırlar içeriyor.

Çevrimiçi deneyin!

Nasıl çalışır

Bölünebilirlik test cihazının iki döngüsünü ve modül hesaplayıcısını karşılaştırın.

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

Tek fark, konumudur {(<()>)}{}swap, d ve R ise D = 0 . Modülü hesaplamak için, bu değiş tokuşu d düşürdükten ve r artırdıktan sonra gerçekleştiririz .

% B> 0 ise bu değişiklik sonucu etkilemez , ancak % b = 0 ise , (n, d, r) = (0, b, 0) - (n, d, r) = yerine bırakır. (0, 0, b) - yığında.

Böylece, modülü elde etmek için, sadece n ve d ile birlikte gitmemiz gerekir {}{}.

Yığın temiz modül hesaplama, 64 bayt

42 bayt modül algoritması yığın temiz değil, bu nedenle tüm programlarda olduğu gibi kullanılamaz. Aşağıdaki sürüm, temettü ve bölenleri (bu sırayla) aktif istifden çıkarır ve modülü geri iter. Başka yan etkisi yoktur.

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

Bu çözüm büyük ölçüde @ WheatWizard'ın önceki 72 baytlık kayıtlarına dayanıyor, ancak hiçbir zaman yığınları değiştirmeden 6 bayt tasarruf ediyor.

Çevrimiçi deneyin!

Nasıl çalışır

             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 makine kodu, 8 bayt

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

Bu benim ilk kod golf cevap, bu yüzden umarım tüm kuralları takip ediyorum.

Bu, ilk önce edx yazmacını temizlemek için cdq'yi çağırır, ardından ecx yazmacında imzalı bölme yapar, kalanı edx'te saklar. Test edx, edx satırı edx sıfırsa sıfır bayrağını ayarlar ve sete edx sıfır değilse false için 0 koyar ve edx 0 ise true için 1 koyar.

Bu bayt sayımına katkıda bulunur, ancak test için, bu sadece kod parçacığı olduğunu burada ben / O yapmanız için böylesi daha kolay montaj çünkü satır içi ile yazdığı C kodudur.


2
PPCG'ye hoş geldiniz, ilk cevap güzel!
Leaky Nun

Tam bir program olması gerekiyor mu? Bu cevabın cevabını biraz biçimlendiriyordum . Ve teşekkür ederim! Daha fazla kod golf oynamak için montaj / makine kodunda daha iyi olmayı umuyorum!
Davey

1
Montajda belirtilen kayıtlardaki giriş ve çıkışlara varsayılan olarak izin verilir: giriş , çıkış . Bu tamamen kabul edilebilir bir sunumdur. PPCG'ye Hoşgeldiniz!
Mego

Fantastik! Teşekkür ederim!
Davey

17

Altıgen, 15, 13, 12 10 bayt

Herkesin favori altıgen tabanlı dili! : D

TL; DR, bayt sayısını azaltmada sihir, formatlanmamış çözümler kullanarak çalışır:

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

@ MartinEnder'ın yerleşim sihirbazı sayesinde 2 bayt kaydedildi.

@FryAmTheEggman köşeleri daha yaratıcı kullanarak 1 bayt kurtardı

@MartinEnder ve @FryAmTheEggman, yanlış değerler için hiçbir şey yazdırmayan 10 baytlık bir çözüm buldu.

Benim çözümüm (15):

Biçimlenmemiş:

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

biçimlendirilmiş:

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

@ Martin Ender'in Çözümü (13):

Biçimlenmemiş:

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

biçimlendirilmiş:

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

Açıklama:

İlk önce girişi aldık ve modülü aldık.

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

Sonra, modülün 0 olup olmadığını kontrol eder. Öyleyse IP 60 derece sola döner, aynadan zıplar, hücreyi 1'e ayarlar ve yazdırır.

Ardından IP, dördüncü sıraya devam eder. Şuna ulaştığında >, bunun yerine sağa döner (çünkü hücrenin değeri şimdi 1'dir). Oob gider ve NW başlık sağ alt köşesinde geri gelir. IP isabet eder <, en üst sırada gider @ve programı durdurmak için sağ köşeye geri döner .

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

Modül pozitif olduğu ortaya çıkarsa, IP 60 derece sağa döner. Sağ alt köşeden çıktıktan sonra Hexagony'nin sarma kuralları nedeniyle sol alt kenarda devam eder. 'IP İçinde 0 ile bir hücreye gitmesi için yeniden kullanılır. IP daha sonra dördüncü sıra boyunca hareket eder, ikinciye sarılır, baskıya çarpar ve içine yansır <. Giden yolun geri kalanı @aynıdır.

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

Bu ciddi bir sihirbazlık.

@ FryAmTheEggman'ın Çözümü (12):

Biçimlenmemiş:

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

biçimlendirilmiş:

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

Açıklama:

Diğer çözümler gibi, girdiyi alır ve modülü alır.

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

Ardından, IP alt köşeye saptırılır. Modül pozitifse, sol üst köşeye gider. Daha ?fazla girişi yoktur, bu nedenle hücreyi 0 olarak ayarlar. !Sonra 0 değerini yazdırır @ve programı sonlandırır.

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

Modül 0 olduğunda işler daha zordur. Her şeyden önce, azaltılır, sonra 0'a sıfırlanır, sonra 1 olarak ayarlanır, sonra yazdırılır. Ardından, 1, 0'a indirgenir. Bundan sonra, program başlangıçta olduğu gibi çalışır 0%0. Bu sessiz bir hata atma ve bırakma yapar.

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

Gerçekten sessiz hata hile gibi ama daha basit bir yolu değiştirmek şeklinde olur (ile /IP ilk kez geçer, ama içine yansıyan alır, böylece @ikinci.

Ortak çözüm (10):

Biçimlenmemiş:

?{?!1\@'%<

biçimlendirilmiş:

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

Bu program, diğer tüm programlarla aynı şekilde başlar, girdiyi alır ve değiştirir.

Giriş 0 ise, IP çarptığında sola döner <. Bu 1!@, 1'i basan ve bırakan sapma haline gelir .

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

Giriş pozitifse, IP çarptığında sağa döner <. Köşeden çıkar ve sağ üst kenarı boyunca @ basmadan @ tuşuna basarak gider.

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

6
Bence cevabınızı farklı bir biçimde biçimlendirmelisiniz. Tek bir kod bloğunda dört cevap olması bayt sayınız hatalı gibi görünmesini sağlar.
mbomb007

17

Brain-flak 102, 98, 96 bayt

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

Iyy. Brüt. Bir açıklama yapabilirim, ancak kendimi zar zor anlıyorum. Bu dil beynimi acıtıyor.

Çevrimiçi deneyin!

Modül örneği ile geldiği için github user @Wheatwizard sayesinde . Muhtemelen bunu kendim çözemezdim!

Ayrıca, kısa cevap burada .

Muhtemelen yanlış açıklama:

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

Gerisi oldukça basit.

{              }            #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.Evet, öyle gözüküyor.
Outgolfer Erik,

Her bir beyin dalı komutunu bir bayt olarak sayarsanız 24 bayt.
noɥʇʎԀʎzɐɹƆ

12

Javascript (ES6) 17 12 11 bayt

a=>b=>a%b<1
  • EDIT: 5 byte kaldırıldı çünkü 'a> 0' bekleniyor.
  • EDIT2: Downgoat sayesinde 1 bayt kaldırıldı .

Bir bayttan tasarruf etmek için
kıvırmayı

Peki bunu nasıl yürütebilirim? Ben yapmaya çalışırken d=a=>b=>a%b<1izledi d(32,2)JS konsolunda ... Ben sadece yanıt almakfunction b=>a%b<1
WallyWest

@WallyWest bu kurutma işlemini kullanır, bu nedenle siz de yazınız d(32)(2). Çünkü d(32)verirse function b=>a%b<1, o zaman bu fonksiyonu kendi bdeğerinizle
çağırmanız

9

Vim, 11 tuş vuruşlarını

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

Yalnızca dizeleri işleyen bir dil için fena değil. : D


Ne yapar <C-Left>?
Mac'teki

1
@Downgoat ctrl veya command kullanıyor musunuz? Her iki durumda da, "b" ye eşdeğerdir, ancak ekleme modunda da çalışması dışında.
DJMcMayhem

Pedantik olmak gerekirse, (ve + 'nın karşılığıdır)' den Bziyade eşdeğerdir - fark sözcük olmayan karakterlerledir, ancak bu durumda aynı şeyi yapıyor :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >bCtrlRightW
Christian Rondeau

9

Mathematica - 17 13 3 bayt

Bir ton bayt kaydettiğiniz için @ Martininder'e teşekkürler!


Bu hangi karakter?
Cyoce

@Cyoce Unicode kodunu bilmiyorum (şu anda telefonda), ancak bunun için kısa bir operatör var Divisible[].
Yytsi,

@Cyoce Sanırım bu shift + ters eğik çizgi olarak da bilinen boru sembolü.
Pavel,

@Pelel, eğer sembol olsaydı, üç bayt olmazdı.
Cyoce


8

Retina, 12 bayt

^(1+)\1* \1$

Unary boşlukta girdiyi alır, 12 bölü 4111111111111 1111 olup olmadığını kontrol etmek gibi . 1 (doğru) veya 0 (yanlış) yazdırır .

Çevrimiçi deneyin!

FryAmTheEggman iki bayt kaydetti. Hata! Argümanları doğru sırada almak için cevabımı tekrar yazdım. (Sonra Fry yorumlarda beni dövdü. Regex'te yavaşım!)


Emri düzeltmek için, gerekirse, ^(1+)\1* \1$işe yarayacağını düşünüyorum .
FryAmTheEggman

Yeni spesifikasyonla, tersi giriş sırası tekrar sorun değil.
Martin Ender

8

Toplu iş, 20 bayt

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

1Başarısızlık, başarı 0üzerine çıktılar .


8

C #, 27 13 12 Bayt

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

TuukkaX'a anonim lambdalara işaret ettiği için teşekkür ederiz. David Conrad'a, beni hiç merak etmediğim bir şey olduğunu, beni köretmeye yönlendirdiği için teşekkürler.

Kısa ve tatlı, çünkü biz sadece bir tam bayt <1yerine kullanabileceğimiz tamsayılarla ilgileniyoruz ==0.


Emin değilim, ama sadece bir lambda kullanabilirsiniz düşünüyorum: (a,b)=>a%b<1;. +1.
Yytsi,

@TukukX, teşekkürler emin değildim, sadece çok aldatıcı görünüyor.
JustinM - Monica'yı yeniden yerleştirme

Bunun JS sürümü, bir bayt azalttığı için körleştirmeyi kullandı ve bu da C # için de işe yaramalıydı: a=>b=>a%b<1;(not: o zaman f(a)(b)ziyade onu çağırmalısınız f(a,b))
David Conrad

1
@DavidConrad oo düzgün, teşekkür ederim.
JustinM - Monica'yı yeniden kurun

7

brainfuck, 53 bayt

Girdiyi bayt olarak alır, çıktı 0x00veya bayt değeridir 0x01. Bu var DivMod algoritması tarafından takip Boole olumsuzlama .

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

Çevrimiçi deneyin -+ASCII'de çıktıyı görebilmeniz için sonuna kadarbir sürü ekstraya sahip.


Bayt kurtarmak için "div" kısmını kaldırabilir misiniz?
Sızdıran Rahibe,

1
@LeakyNun Bu, modülü veren bilinen en kısa algoritmadır. Bir parçasını kaldırmak aslında daha uzun sürüyor çünkü daha fazla geçici hücreye ihtiyacınız var. Bölmeden bir modül bulamazsınız.
mbomb007

Teşekkürler görüyorum .
Sızdıran Rahibe,

@LeakyNun Sadece Bölüm algoritmasının ne kadar sürdüğüne bakın .
mbomb007

Muhtemelen daha kısa olanlar var, ancak öyleyse, kimse onları bulamadı veya yayınlamadı.
mbomb007

7

Brain-Flak , 88 86 bayt

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

Bu, Green Eggs ve Iron Man DJMcMayhem ve benim tarafından yazılmış orijinal Brain-Flak bölünebilirlik testi algoritmasının daha yoğun bir versiyonudur .

İşte nasıl çalıştığını kısa bir açıklama (ish) açıklaması:

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

Çevrimiçi Deneyin!


Online tercümana bağlantı?
Leaky Nun

İyi iş! Ayrıca siteye hoş geldiniz! Umarım burada eğlenirsiniz. (Kesinlikle var)
DJMcMayhem

Güzel ilk cevap, PPCG'ye hoş geldiniz!
Leaky Nun


6

C, 60 Bayt

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

1
Neden -1? Açıkla
Ronronner

3
Kimsenin düşürmemesi muhtemel. Bu kısa bir cevaptır, bu yüzden düşük kalitede otomatik olarak işaretlendi ve sonra siz onu düzenlediniz. Bazı nedenlerden dolayı, bu otomatik bir aşağı oy kullanmaz . Bunun için üzgünüm. +1benden. Ayrıca, fonksiyonlara izin veriyoruz, böylece bunu kolayca kısaltabilir int f(a,b){return !(a%b);}ya da daha kısa sürede kısaltabilirsiniz .
DJMcMayhem

3
Hayır, demek istediğim tam bir program olması gerekmiyor. Bunun yerine sadece bir işlev gönderebilirsiniz. int f(a,b){return!(a%b);}25 bayttır ve doğru derleyiciyi kullanırsanız f(a,b){return!(a%b);}21 bayt bile yapabilirsiniz .
DJMcMayhem

3
Daha kısa işlev sunumu: #define f(a,b)!(a%b)( ideone bağlantısı )
Mego

2
Bir snippet'i değil, bir işlevi veya programı tanımlamanız gerekir.
Sızdıran Rahibe


5

R, 22 20 bayt

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

Genellikle, boş bir satırla sonlanan girişten iki sayı okur.

Güncelleme: Jarko Dubbeldam'a 2 baytı tıraş ettiği için teşekkürler (düzenlemesinin reddedilmesine rağmen çok yardımcı oldu!).


5

Java 8, 11 bayt

a->b->a%b<1

Ne halt var, bunun JS ve C # sürümleri var, neden bir Java sürümü de yok?

Kullanımı:

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<1Bu bir sözdizimi hatası yaratıyor, değil mi?
dorukayhan, Monica'yı

2
Hayır, geçerli Java 8
David Conrad

Bazen Java bile Perl'e benziyor ...
Mega Man

Evet, bunun yalnızca Java 8 olduğunu;
Magic Octopus Urn

bu yüzden Java 8 ile tüm sınıf ve fonksiyon kaynatıcısını değil sadece lambda ifadesi baytını saymalıyız, cool!
Sikorski

4

Python, 16 bayt

lambda D,d:D%d<1

1
Negatif tamsayılara izin verilirse bunun işe yaramayacağını unutmayın. Neyse ki, girişler kesinlikle olumlu.
TLW,

Ben yaptım lambda a,b:1.*a/b==a/b, ama oldukça etkilendim. Bu çok karmaşık bir kod parçası ...
Outgolfer Erik,


4

CJam, 6 4 bayt

Dennis sayesinde 2 bayt kaydedildi

q~%!

Çevrimiçi deneyin

q    e# Take in the input
 ~   e# Dump the individual values to the stack
  %  e# Modulus
   ! e# Boolean NOT



3

Fortran 95, 78 bayt

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 bayt

Martin Ender sayesinde 14 bayt kaydedildi

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

Çevrimiçi deneyin!

açıklama

Algoritma çıkarılarak tutmak basitçe ddan nÇok defa bir tamsayı sayısını yapmak ve hiçbir kalan var olmadığını görmek için.

;
)
;

>
=
 
 

İlk olarak, girdi toplanır. nilk hücrede, dikinci hücrede .

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

Bu aslında ana döngüdür. Birinci ve ikinci hücreleri azaltır ve üçüncüyü artırır.

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

Bu son çıktı. Artırma / azaltma işleminden sonra, ilk hücre 0 ise, o zaman biz ortadan kaldırdık n. Bundan sonra, ikinci hücre ( d) ise 0, daha sonra eşit şekilde dgirdi n. Artırır ve yazdırırız ( 1). Aksi takdirde, ilk hücreye geri dönün (ki 0) ve yazdırın.

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

Bu döngü, ikinci hücre 0artan ve azaldıktan sonra olduğunda gerçekleşir . Üçüncü hücreyi ikinci hücreye kopyalar. En alttaki kısım, hücre değilse, döngüyü atlamaktır 0.


3

Tcl, 34 bayt

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

Benim ilk / * başarılı * / kod yazarı girişimi! Bu kod Tcl kabuğunda çalıştırılmalıdır, aksi halde çalışmaz.

@Lynn sayesinde bir bayt.

@Lynn ve @LeakyNun sayesinde dört bayt (şimdi ne demek istediğini anlıyorum)!


Eğer ihmal edebilir ?1:0?
Leaky Nun

@LeakyNun bu üçlü operasyon. sadece göründüğünde sth dönmek mi demek istiyorsun?

Ne $a%$b==0dönecekti?
Leaky Nun

1
Demek istediğim, üçüncü sıranız olabilir exp $a%$b==0mi?
Leaky Nun

1
Ya da exp $a%$b<1belki?
Lynn,

3

PHP, 23 22 bayt

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

false için true, boş dize (= hiçbir şey) için 1 basar

cli'den çağrısı nve dargümanlar olarak


Antik PHP için 10 bayt: <?=$n%$d<1


Eğer PHP4.1 kullanarak sakıncası yoksa: <?=!($A%$B). Değerler sizin parçası olarak geçirilebilir $_SESSION, $_COOKIE, $_POST, $_GETya da (yanılmıyorsam eğer) üzerinden $_ENV.
Ismael Miguel,

@Ismael Miguel: Aslında yapmıyorum, ancak eski PHP sürümleri için kayıt yapmaktan ve ekleme yapmaktan bıktım for PHP<5.4 with register_globals=On. Ama referans için ekleyeceğim.
Titus,

Aslında, " for PHP<5.4 with register_globals=On" diyemezsiniz , çünkü php.iniiçeren dosyanızın baytını saymanız gerekir register_globals=On. Ancak, PHP4.1 özel bir durumdur. register_globals=OnVarsayılan değer olan son sürüm ve çoğu işlev PHP4.1 ve üstü sürümlerde bulunuyor. Bu sürüm ayrıca, uyarılar gibi eregve splituyarmadan başka fonksiyonların kullanılmasına da izin verir .
Ismael Miguel,

3

J, 3 bayt

0=|

Kullanımı:

2 (0=|) 10 

Geri dönecek 1. Ve sözde kod eşdeğerdir10 MOD 2 EQ 0

Bunun APL cevabına çok benzer olduğunu unutmayın , çünkü J APL'den büyük ölçüde ilham alıyor.


Güzel ilk cevap, PPCG'ye hoş geldiniz!
Leaky Nun

@LeakyNun Teşekkürler, her zaman göz gezdirdim, sonunda cevap vermek güzel.
emiflake

3

PowerShell v2 +, 20 bayt

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

Girdiyi iki komut satırı argümanı olarak alır $args, -joinbunları %ayırıcı olarak bir dizgide siler, bunun için iexkısa ( Invoke-Expressionbenzerlerine benzer eval). Sonuç 0sıfırdır ya da sıfırdır, bu nedenle Boolean'ı !bu sonuçtan değil alırız , bu da ya $TRUEda $FALSE(PowerShell'deki sıfır olmayan tamsayıların truthy olduğu anlamına gelir ). Bu Boolean boru hattında kalıyor ve çıktılar kapalı.

Alternatif sürümler, ayrıca her biri 20 bayt

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

Aynı kavram, girdiyi yapılandırmanın sadece biraz farklı yolları. Bunları sağladığı için @DarthTwon'a teşekkürler.

Örnekler

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

Bu soruyu golf yapmaya çalıştığım diğer iki yöntemde de onları 20 byte'a param($a,$b)!($a%$b)!($args[0]%$args[1])
ulaştım

@DarthTwon Gerçekten. Küçük miktarlarda işlemlerle uğraşırken, genellikle giriş argümanlarını almanın farklı yollarında en fazla bir veya iki baytlık fark vardır.
AdmBorkBork

Daha kısa bir şey bulmayı umuyordum: P ama evet, özellikle de PS'de kediyi ciltlemenin her zaman birçok yolu vardır.
ThePoShWolf

3

Haskell, 13 11 bayt

((1>).).mod

Bu yeni bir fonksiyon tanımlar (!) :: Integral n => n -> n -> Bool. Yana mod n mgetiriler sadece pozitif sayılar ise nve mpozitif, biz kullanarak bir bayt kaydedebilirsiniz 1>yerine 0==.

Kullanımı:

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

Sen pointfree gidip 2 bayt kaydedebilirsiniz: ((1>).).mod.
nimi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.