これは1で終わる3桁の数字ですか?


27

負でない整数を指定すると、一貫した整数ベースで、1で終わる3桁の数値であるかどうかを返します。言い換えると、数値はbase-Nで表す必要があります。Nはゼロより大きい整数です。

ルール

  • これはなので、最短の回答が勝ちます。
  • 単項演算子の動作がおかしいので、入力3 10の動作は未定義です。
  • 標準的な抜け穴は禁止されています。

正しい:

5   
73  
101 
1073
17
22
36
55
99  

偽:

8
18
23
27
98
90
88
72
68

少数の大きな数字:

46656 true
46657 true
46658 true
46659 true
46660 true
46661 false
46662 false
46663 true
46664 false
46665 true
46666 true
46667 false
46668 false
46669 false
46670 true
46671 true

1
不気味単項振る舞うので、いや、それは負でない整数の単項表現は、不気味に動作しないnだけでn 1、例えばね0 = ()₁3 = (111)₁10 = (1111111111)₁、など
エリックOutgolfer

6
@EriktheOutgolfer動作はまったく異なります。たとえば、1でn-itshiftに分割することはできません。
wizzwizz4

3
何をしない一貫性のある整数ベースはどういう意味ですか?(また、ルールで単項式を除外する代わりに、N≥2を指定することもできます。)
Lynn

1
@Lynn帝国の単位または時間で見られるような位置に依存する基数とは対照的に、単一の基数、たとえば10を基数とする位置表記法。
HAEM

1
補遺としての@Lynnは、合理的、否定的、複雑ななどのベースも除外しようとしていました。2番目の点に関して、単項に関する規則は、単項を含めることも除外することも意図していません。私の言語弁護士の理解が私が思ったよりも弱い場合を除き、「未定義の行動」とは「実装側が望むものは何でも」を意味し、それが私が目指していたものです。
HAEM

回答:


10

ゼリー、7バイト

bRṫ€3ċJ

入力が1で終わる3桁の数値である基数(非ゼロが真実であり、ゼロが偽である)を返します。

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

使い方

bRṫ€3ċJ  Main link. Argument: n

 R       Range; yield [1, ..., n].
b        Base; convert n to bases 1, ..., n.
  ṫ€3    Tail each 3; remove the first two elements of each digit array.
      J  Indices of [n]; yield [1].
     ċ   Count the number of times [1] appears in the result to the left.

10

JavaScript(ES7)、43 40 39バイト

f=(n,b)=>n<b*b?0:n%b==1&n<b**3|f(n,-~b)

テストケース

コメント済み

f = (n,           // given n = input
        b) =>     // and using b = base, initially undefined
  n < b * b ?     // if n is less than b²:
    0             //   n has less than 3 digits in base b or above -> failure
  :               // else:
    n % b == 1 &  //   return a truthy value if n is congruent to 1 modulo b
    n < b**3 |    //   and n is less than b³ (i.e. has less than 4 digits in base b)
    f(n, -~b)     //   or the above conditions are true for some greater value of b






3

Mathematica、43バイト

!FreeQ[IntegerDigits[#,2~Range~#],{_,_,1}]&

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

またはオンラインでお試しください!(多数)

Martin Enderは3バイトを節約しました


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&IntegerDigits::ibase: Base 1 is not an integer greater than 1.警告が表示されても構わない場合は、少し短くなります。(それでも正しい答えを返します。)
ミシャラヴロフ




2

APL(Dyalog Unicode)21 20 14バイトSBCS

-5 @ngnに感謝します。

純粋な算術ソリューション(実際には基本変換は行わない)および非常に高速です。

3∊⊢(|×∘⌈⍟)⍨1↓⍳

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

⊢(... )⍨1↓⍳ 1上から落としɩ適用、ndices 1 ...引数と引数:

| 除算剰余

×∘⌈ 切り上げの倍

 log N引数

3∊ 3はそのメンバーですか?


引数を交換する標準的な方法で1を節約できます⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
。– ngn

@ngnありがとう。次回は、このように編集してください(気になったら)。
アダム

OK。以下に、より複雑な改善点を示します。これは他の解決策と同じくらい短くなります(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
。– ngn

1
3∊⊢(|×|×∘⌈⍟)⍨1↓⍳
ngn

2
@ngn 1=⌈a⍟ba≤ba=b0=a|b0=b|b
アダム


1

、15バイト

V§&o=1→o=3LṠMBḣ

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

説明

V§&(=1→)(=3L)ṠMBḣ  -- implicit input, for example: 5
             ṠMB   -- map "convert 5 to base" over..
                ḣ  --   range [1..5]
                   -- [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
V                  -- does any of the elements satisfy the following
 §&( 1 )( 2 )      --   apply functions 1,2 and join with & (logical and)
         =3L       --     is length equals to 3?
    =1→            --     is last digit 1?


1

C、60バイト

引数が1で終わる3桁の数値として表現できる場合にゼロ以外を返す関数。

i,j;f(n){for(j=0,i=sqrt(n);i>cbrt(n);)j+=n%i--==1;return j;}

注:これは、関数が組み込まれているGCCで機能します。他のコンパイラの場合、おそらく引数と戻り値の型がわかっていることを確認する必要があります。

#include<math.h>

説明

ここで最も低いベースn3桁の数字で表されている⌊∛n⌋、そしてここで最低ベースn2桁の数字で表されている⌊√n⌋、番号が3桁の範囲内の1つのモジュロ任意の塩基と合同であるか否かを単にテスト我々はそれほど。条件を満たすベースの数のカウントを返し、必要に応じて非ゼロ(真)またはゼロ(偽)の値を返します。

テストプログラム

任意の数の入力を定位置パラメーターとして渡します。

#include<stdio.h>
int main(int c,char**v)
{
    while(*++v)
        printf("%s => %d\n", *v, f(atoi(*v)));
}



0

Pyt35 33 バイト

←ĐĐ3=?∧∧:ŕĐ2⇹Ř⇹Ľ⅟⌊⁺3=⇹Đ2⇹Ř%*ž1⇹∈;

説明:

←ĐĐ                                             Push input onto stack 3 times
   3=?  :                       ;               If input equals 3, execute code after the question mark;otherwise, execute code after the colon. In either case, afterwards, execute the code after the semicolon
      ∧∧                                        Get 'True'
        :                                       Input not equal to 3
         ŕ                                      Remove 'False'
          Đ2⇹Ř                                  Push [2,3,...,n]
              ⇹Ľ⅟⌊⁺                             Push [floor(log_2(n))+1,floor(log_3(n))+1,...,floor(log_n(n))+1]
                   3=                           Is each element equal to 3
                     ⇹                          Swap the top two elements on the stack (putting n back on top)
                      Đ2⇹Ř                      Push [2,3,...,n]
                          %                     Push [n%2,n%3,...,n%n]
                           *                    Multiply [n%x] by the other array (i.e. is floor(log_x(n))+1=3?)
                            ž                   Remove all zeroes from the array
                             1⇹∈                Is 1 in the array?
                                ;               End conditional
                                                Implicit print

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.