可分性テスト


39

仕事

2つの厳密に正の整数で指定されたN及びDを入力とし、かどうかを決定nがある割り切れるによってD整数が存在する場合、すなわち、qはそのようなn = qd

プログラムまたは関数を作成し、入力を受け取り出力を提供する当社の標準的な方法を使用できます。

出力は、真の値または偽の値でなければなりません。ndで割り切れる場合は真理、そうでない場合は偽。

コードは、すべての符号付き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)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


回答:



29

Brain-Flak72 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。各スタックには無限のゼロが含まれます。

オンラインでお試しください!

使い方

可分性テスターとモジュラス計算機の2つのループを比較します。

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

唯一の違いは、の位置で{(<()>)}{}入れ替え、D及びRの場合、D = 0。モジュラスを計算するには、dをデクリメントし、rをインクリメントした後にこのスワップを実行します。

この変更は、結果に影響を与えない場合%のB> 0、しかし、もし%B = 0、それ葉(N、D、R)=(0、B、0) -なく、(N、D、R)= (0、0、b) –スタック上。

このように、弾性を得るために、我々は唯一のポップする必要がND{}{}

スタッククリーンモジュラス計算、64バイト

42バイトのモジュラスアルゴリズムはスタッククリーンではないため、すべてのプログラムでそのまま使用することはできません。次のバージョンは、アクティブスタックから被除数と除数を(この順序で)ポップし、代わりにモジュラスをプッシュします。他の副作用はありません。

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

このソリューションは、主に@WheatWizardの以前の72バイトのレコードに基づいていますが、スタックを切り替えないことで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がゼロの場合はゼロフラグを設定し、edxがゼロでない場合はfalseに0を設定し、edxが0の場合はtrueに1を設定します。

これはバイトカウントに寄与するコードスニペットにすぎませんが、ここでは、この方法でI / Oを処理する方が簡単なので、テスト用にインラインアセンブリで記述したCコードを示します。


2
PPCGへようこそ、最初の回答です!
リーキー修道女

完全なプログラムである必要がありますか?私はこの回答からちょっと回答をフォーマットしていました。そしてありがとうございました!より多くのコードゴルフのために、アセンブリ/マシンコードをより良くしたいと思っています!
デイビー

1
アセンブリ内の指定されたレジスタの入力および出力は、デフォルトで許可されています:inputoutput。これは完全に受け入れられる提出です。PPCGへようこそ!
メゴ

素晴らしい!ありがとうございました!
デイビー

17

Hexagony、15、13、12の、10バイト

みんなのお気に入りの六角形ベースの言語!:D

TL; DRは、バイトカウントの減少において、マジックのフォーマットされていないソリューションを使用して動作します。

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

@MartinEnderのレイアウトウィザードのおかげで2バイト節約されました。

@FryAmTheEggmanは、コーナーをより創造的に使用して1バイト節約しました

@MartinEnderと@FryAmTheEggmanの両方が、誤った値に対して何も出力しない10バイトのソリューションを思い付きました。

私の解決策(15):

書式なし:

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

フォーマット済み:

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

@Martin Enderのソリューション(13):

書式なし:

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

フォーマット済み:

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

説明:

まず、入力を取得し、モジュラスを取得します。

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

次に、モジュラスが0かどうかを確認します。そうである場合、IPは左に60度回転し、ミラーで反射し、セルを1に設定して印刷します。

次に、IPは4行目に続きます。に達すると>、代わりに右に曲がります(セルの値が1になったため)。それは順調に進み、北西に向かう右下隅に戻ります。IPはをヒットし<、一番上の行に沿って進み、右隅に戻ってをヒットし@、プログラムを停止します。

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

モジュラスが正の場合、IPは右に60度回転します。いったん右下隅から出ると、Hexagonyのラッピングルールにより、左下端に続きます。'IPはそれに0でセルに移動させるために再利用されます。次に、IPは4番目の行に沿って移動し、2番目の行にラップアラウンドし、印刷にヒットし、に反映されます<。への残りのパス@は同じです。

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

それはいくつかの深刻な魔法です。

@FryAmTheEggmanのソリューション(12):

書式なし:

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

フォーマット済み:

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

説明:

他のソリューションと同様に、入力を取得し、モジュラスを取得します。

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

次に、IPは下隅に偏向されます。モジュラスが正の場合、左上に移動します。に?は入力がないため、セルを0に設定します。!その後、0を出力し@、プログラムを終了します。

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

モジュラスが0の場合、物事はずっと複雑です。まず、デクリメントされ、次に0にリセットされ、1に設定され、印刷されます。次に、1が0にデクリメントされます。その後、プログラムは最初に実行するように実行しようとします0%0。これにより、サイレントエラーがスローされて終了します。

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

私は本当に静かエラートリックのような、しかし置き換えることであろう簡単な方法(/IPを初めて通過しますが、中に反射ますよう@秒。

共同ソリューション(10):

書式なし:

?{?!1\@'%<

フォーマット済み:

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

このプログラムは、他のすべてのプログラムと同じように起動し、入力を取得して修正します。

入力が0の場合、IPはヒットすると左に変わり<ます。それはに偏向され1!@、1を出力して終了します。

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

入力が正の場合、IPはヒットすると右に変わり<ます。コーナーから出て、右上端に沿って進み、印刷せずに@を押します。

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

6
回答の形式を変える必要があると思います。1つのコードブロックに4つの回答があると、バイトカウントが間違っているように見えます。
mbomb007

17

脳FLAK 102、98、 96のバイト

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

うわー キモい。私は説明を投稿するかもしれませんが、私はそれをかろうじて理解しています。この言語は私の脳を傷つけます。

オンラインでお試しください!

モジュラスの例を考えてくれたgithubユーザー@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.そうだね
エリックアウトゴルファー

各Brainflak命令を1バイトとして数える場合は24バイト。
noɥʇʎԀʎzɐɹƆ

12

Javascript(ES6)17 12 11バイト

a=>b=>a%b<1
  • 編集: 'a> 0'が予想されるため、5バイトを削除しました。
  • EDIT2 Downgoatのおかげで1バイトが削除されました

カリー化を使用して1バイトを保存します
。a

それで、どうすればこれを実行できますか?JSコンソールでd=a=>b=>a%b<1フォローしようとするとd(32,2)...単に応答が得られますfunction b=>a%b<1
-WallyWest

@WallyWestはカリー化を使用しているため、と入力しd(32)(2)ます。をd(32)与えるためfunction b=>a%b<1b値を指定してその関数を呼び出す必要があります
Cyoce

9

Vim、11回のキーストローク

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

文字列のみを処理する言語にとっては悪くありません。:D


何を<C-Left>するの?Macでウィンドウを切り替えるためテストできません> _>
Downgoat

1
@Downgoat ctrlまたはコマンドを使用していますか?どちらの方法でも、「b」と同じですが、挿入モードでも機能します。
DJMcMayhem

教訓的であるために、それBはむしろと同等ですb(そしてCtrl+ Rightはに相当しますW)-違いは単語以外の文字ですが、この場合はまったく同じことをしています:) vimdoc.sourceforge.net/htmldoc/motion。 html#<C-Left >
クリスチャンロンドー

9

Mathematica- 17 13 3バイト

大量のバイトを保存してくれた@MartinEnderに感謝します!


それは何のキャラクターですか?
チョイス

@Cyoce Unicodeのコードは(現時点では電話で)知りませんが、の短い演算子ですDivisible[]
Yytsi

@Cyoceパイプ記号であり、shift + backslashとも呼ばれます。
パベル

@Pavelパイプシンボルの場合、3バイトではありません。
チョイス

@CyoceそれはU + 2223文字です:fileformat.info/info/unicode/char/2223/index.htm
numbermaniac

8

網膜、12バイト

^(1+)\1* \1$

124で割り切れる111111111111 1111かどうかをチェックするように、スペースで区切られた単項入力を受け取ります。1(true)または0(false)を印刷します。

オンラインでお試しください!

FryAmTheEggmanは2バイトを節約しました。おっと、正しい順序で引数を取るために私の答えを書き直しました。(それから、Fryはコメントで私にbeatられました。正規表現が遅いです!)


順序を修正するために、必要になった場合、うまくいくと思います^(1+)\1* \1$
-FryAmTheEggman

新しい仕様では、逆の入力順序でも問題ないと思います。
マーティンエンダー

8

バッチ、20バイト

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

1成功した場合0、失敗した場合に出力します。


8

C#、27 13 12バイト

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

受け入れられない匿名ラムダを指摘してくれたTuukkaXに感謝します。カリーを教えてくれたDavid Conradに感謝します。

私たちは整数だけを扱っているため、バイト全体を保存するの<1ではなく、使用することができ==0ます。


よくわかりませんが、ラムダ:を使用できると思います(a,b)=>a%b<1;。+1。
Yytsi

@TuukkaX、どうもありがとう
JustinM -復活モニカ

これのJSバージョンはカレーを使用して1バイト削減し、C#でも機能するはずですa=>b=>a%b<1;(注:その後、としてf(a)(b)ではなくとして呼び出す必要がありますf(a,b)
デビッドコンラッド

1
@DavidConrad ooすてきです、ありがとう。
JustinM -復活モニカ

7

brainfuck、53バイト

バイトとして入力を受け取り、出力は、バイトの値です0x00か、0x01。これは、DivModアルゴリズムの後にブール否定が続きます。

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

オンラインで試してみてください -ASCIIコードで+出力を見ることができるように、終わり近くに余分なものがあります。


事の「div」部分を削除してバイトを節約できますか?
リーキー修道女

1
@LeakyNunこれは、モジュラスを与える既知の最短アルゴリズムです。より多くの一時的なセルが必要なため、実際にはその一部を削除すると長くなります。分割せずにモジュラスを見つけることはできません。
mbomb007

なるほど。
リーキー修道女

@LeakyNun除算アルゴリズムの長さを見てください。
mbomb007

おそらくもっと短いものもありますが、もしそうなら、誰もそれらを見つけたり投稿したりしません。
mbomb007

7

Brain-Flak88 86バイト

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

これは、Dr Green EggsとIron Man DJMcMayhemによって書かれたオリジナルのBrain-Flak 可分性テストアルゴリズムの高密度バージョンです。と私が。

これがどのように機能するかについての簡単な説明です。

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

オンラインでお試しください!


オンライン通訳へのリンク?
リーキー修道女

よくやった!また、サイトへようこそ!ここで楽しんでください。(確かにあります)
DJMcMayhem

素敵な最初の答え、PPCGへようこそ!
リーキー修道女

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

OK、やってみます。1秒…
OldBunny2800

いいえ、2バイト長くなります。
OldBunny2800

O RLY?私はそれを知りませんでした!変化。
OldBunny2800

BTW ここにゴルフのヒントがあります。
リーキー修道女

6

C、60バイト

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

1
なぜ-1ですか?私に説明してください
ロロンナー

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
スニペットだけでなく、関数またはプログラムを定義する必要があります。
リーキー修道女


5

R、22 20バイト

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

通常、空の行で終了する入力から2つの数値を読み取ります。

更新:2バイトを削ったJarko Dubbeldamに感謝します(編集が拒否されたという事実にもかかわらず、非常に役に立ちました!)。


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これにより構文エラーが発生しませんか?
ドルカハンはモニカ

2
いいえ、それは有効なJava 8.だ
デヴィッド・コンラッド

時にはJavaは、Perlの...のように見ている
ロックマン

ええ、私はこれがJava 8のみであることを付け加えます;)。
魔法のタコUr

そのため、Java 8では、クラスと関数の定型文全体ではなく、ラムダ式のバイトのみをカウントする必要があります。
シコルスキー

4

Python、16バイト

lambda D,d:D%d<1

1
負の整数が許可されている場合、これは機能しないことに注意してください。幸いなことに、入力は厳密に正です。
TLW

私はそうlambda a,b:1.*a/b==a/bしましたが、非常に感銘を受けました。これは非常に複雑なコードです...
Erik the Outgolfer





3

Fortran 95、78バイト

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バイト

Martin Enderのおかげで14バイト節約

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

オンラインでお試しください!

説明

このアルゴリズムは、単純に差し引いておくことですdから、nあなたはそれを倍の整数を行うと、何の残りを持つことができないかどうかを確認します。

;
)
;

>
=
 
 

最初に、入力が収集されます。n最初のセルにdあり、2番目のセルにあります。

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

これが基本的にメインループです。最初のセルと2番目のセルを減らし、3番目のセルを増やします。

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

これが最終出力です。インクリメント/デクリメント後、最初のセルが0の場合、削除しましたn。この後、第二の細胞は、(場合d)で0、その後dに入りましたn均等ます。インクリメントして印刷します(1)。そうでない場合は、最初のセル(0)に戻って印刷します。

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

このループは、2番目のセルが0インクリメントおよびデクリメントした後に発生します。3番目のセルを2番目のセルにコピーします。一番下の部分は、セルがそうでない場合にループをバイパスすることです0です。


3

Tcl、34バイト

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

codegolfでの私の最初の/ * successful * /試行!このコードはTcl shellで実行する必要があります。実行しないと機能しません。

@Lynnのおかげで1バイト。

@Lynnと@LeakyNunのおかげで4バイトになりました(今では彼の意味がわかりました)!


省略できます?1:0か?
リーキー修道女

@LeakyNunそれは三項演算です。それは見えないときにsthを返すだけですか?

何が$a%$b==0返されますか?
漏れの修道女

1
つまり、3行目だけでexp $a%$b==0いいのでしょうか。
リーキー修道女

1
またはexp $a%$b<1、多分?
リン

3

PHP、23 22バイト

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

trueの場合は1、falseの場合は空の文字列(= nothing)を出力します

nおよびdを引数としてcliから呼び出す


古代PHPの場合は10バイト: <?=$n%$d<1


PHP4.1を使用してもかまわない場合:<?=!($A%$B)。値は、あなたの一部として渡すことができ$_SESSION$_COOKIE$_POST$_GETまたは(私は間違っていない場合)を超えます$_ENV
イスマエルミゲル

@Ismael Miguel:実際にはそうではありませんが、古代のPHPバージョンの投稿との追加にうんざりしていfor PHP<5.4 with register_globals=Onます。ただし、参照用に追加します。
タイタス

実際には、を含むファイルのfor PHP<5.4 with register_globals=Onバイト数をカウントする必要があるため、「」と言うことはできません。ただし、PHP4.1は特殊なケースです。これがデフォルト値である最後のバージョンであり、ほとんどの関数はPHP4.1以降で使用できます。このバージョンでは、警告のように、警告なしで他の機能を使用することもできます。php.iniregister_globals=Onregister_globals=Oneregsplit
イスマエルミゲル

3

J、3バイト

0=|

使用法:

2 (0=|) 10 

戻り1ます。そして、擬似コードと同等です10 MOD 2 EQ 0

JはAPLの影響を強く受けているため、これはAPLの回答に非常に似ていることに注意してください。


素敵な最初の答え、PPCGへようこそ!
リーキー修道女

@LeakyNunおかげで、私はいつも周りを見てきましたが、最終的に答えてくれてうれしいです。
emiflake

3

PowerShell v2 +、20バイト

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

入力を2つのコマンドライン引数として受け取り$args-joinそれらを%区切り文字として文字列にまとめ、パイプでつなぎますiex(略してInvoke-Expressionに似ていますeval)。結果は0ゼロまたは非ゼロであるため!、その結果ではないブール値を使用します。$TRUEつまり、$FALSE(truthyを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確かに。少量の操作を処理する場合、通常、入力引数を取るさまざまな方法に最大で1または2バイトの違いがあります。
AdmBorkBork

私はもっ​​と短いものを思いつきたいと思っていました:P
ThePoShWolf

3

ハスケル、 13 11バイト

((1>).).mod

これにより、新しい関数が定義されます(!) :: Integral n => n -> n -> Bool。以降mod n mであればリターンのみ正の数nm正である、我々が使用してバイトを保存することができます1>代わりに0==

使用法:

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

ポイントフリーで2バイト節約できます:((1>).).mod
-nimi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.