这是一个三位数以1结尾的数字吗?


27

给定一个非负整数,以任何一致的整数为基础,返回是否为以1结尾的三位数。换句话说,该数字需要以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 1s和例如0 = ()₁3 = (111)₁10 = (1111111111)₁
埃里克Outgolfer

6
@EriktheOutgolfer的行为完全不同;例如,您不能将1除以n-itshift。
wizzwizz4

3
什么是一致的整数基地是什么意思?(此外,您可以只指定N≥2,而不是在规则中排除一元规则。)
Lynn

1
@Lynn具有单个基数的位置表示法,例如以10为底的数字,而不是像英制单位或时间那样与位置相关的基数。
HAEM

1
@Lynn作为附录,我也试图排除理性,否定,复杂等基础。关于第二点,关于一元规则的目的既不包括也不排除一元。除非我对语言律师的掌握比我想象的还要虚弱,否则“未定义的行为”表示“执行方想要的一切”,这就是我要的目的。
HAEM

Answers:


10

果冻,7个字节

bRṫ€3ċJ

返回输入为三位数字(以1结尾)的基数(非零为真,零为伪造)。

在线尝试!

怎么运行的

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




4

05AB1E11 8字节

感谢Adnan节省了3个字节。

Lв3ù€θ1å

在线尝试!

说明

Lв            # convert input to bases [1 ... input]
  ʒg3Q}       # keep only elements of length 3
       €θ     # get the last item of each
         1å   # is there any 1?


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.警告,则它会短一些。(它仍然会返回正确的答案。)
Misha Lavrov




2

APL(Dyalog Unicode)21 20 14字节SBCS

-5感谢@ngn。

纯算术解决方案(实际上不执行任何基本转换),因此非常快。

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

在线尝试!

⊢()⍨1↓⍳ 在从ndices 1…自变量和自变量中删除的一个上,适用:

| 该师余数

×∘⌈ 乘以四舍五入

 log N参数

3∊ 是其中的三个吗?


您可以使用交换参数的标准技巧来保存1:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn

@ngn谢谢。下次,请随意进行编辑(如果您愿意)。
亚当

好。这是一个更复杂的改进,需要您处理-与其他解决方案一样短:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn

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

2
@ngn 1=⌈a⍟ba≤b→交通a=b→交通0=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

PHP,48 + 1字节

while(++$b**2<$n=$argn)$n%$b-1|$n>$b**3||die(1);

0为虚假(或输入3)退出,1为真。
与管道一起运行-nR在线尝试


1

C,60字节

如果参数可以表示为以1结尾的三位数,则该函数返回非零值:

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

注意:这适用于内置功能的GCC。对于其他编译器,您可能需要确保知道参数和返回类型:

#include<math.h>

说明

在其中最低碱n在3位被表示为⌊∛n⌋,并且其中的最低基n在2位被表示为⌊√n⌋的,所以我们简单地测试的数量是否全等1模的3位数范围内的任何碱。我们返回满足条件的碱基数的计数,并根据情况给出一个非零(真实)或零(虚假)值。

测试程序

传递任意数量的输入作为位置参数:

#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

在线尝试!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.