Đây có phải là một số có ba chữ số kết thúc bằng một không?


27

Cho một số nguyên không âm, trả về cho dù đó là một số có ba chữ số kết thúc bằng một, trong bất kỳ cơ sở số nguyên nhất quán nào. Nói cách khác, số cần được biểu diễn trong cơ sở N, N là số nguyên lớn hơn 0.

Quy tắc

  • Đây là , vì vậy câu trả lời ngắn nhất sẽ thắng.
  • Vì unary hành xử kỳ lạ, hành vi với đầu vào 3 10 không được xác định.
  • Sơ hở tiêu chuẩn bị cấm.

Ví dụ

Thật:

5   
73  
101 
1073
17
22
36
55
99  

Sai:

8
18
23
27
98
90
88
72
68

Một số lượng lớn:

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
Kể từ khi cư xử unary thật là thú vị không, nó không cư xử thật là thú vị, các đại diện unary của một số nguyên không âm nchỉ là n 1s, ví dụ như 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁vv
Erik các Outgolfer

6
@EriktheOutgolfer Nó hoạt động hoàn toàn khác nhau; bạn không thể chia cho 1 đến n-ithift, ví dụ.
wizzwizz4

3
Không gì phù hợp cơ sở nguyên nghĩa là gì? (Ngoài ra, thay vì loại trừ unary trong các quy tắc, bạn chỉ có thể chỉ định N ≥ 2.)
Lynn

1
@Lynn Một ký hiệu vị trí với một cơ số duy nhất, ví dụ cơ sở mười, trái ngược với một cơ số phụ thuộc vào vị trí như bạn thấy với các đơn vị hoặc thời gian của đế quốc.
HAEM

1
@Lynn là một phụ lục, tôi cũng đã cố gắng loại trừ các cơ sở hợp lý, tiêu cực, phức tạp, vv. Đối với điểm thứ hai của bạn, quy tắc về unary được dự định không bao gồm cũng không loại trừ unary. Trừ khi tôi nắm bắt được việc lập pháp ngôn ngữ thậm chí còn yếu hơn tôi nghĩ, "hành vi không xác định" có nghĩa là "bất cứ điều gì bên thực hiện muốn", đó là điều tôi sẽ làm.
HAEM

Câu trả lời:


10

Thạch , 7 byte

bRṫ€3ċJ

Trả về số lượng cơ sở (khác không là trung thực, không sai lệch) trong đó đầu vào là một số có ba chữ số kết thúc bằng một.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 byte

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

Các trường hợp thử nghiệm

Đã bình luận

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

Toán học, 43 byte

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

Hãy thử trực tuyến!

hoặc dùng thử trực tuyến! (số lượng lớn)

Martin Ender đã lưu 3 byte


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&ngắn hơn một chút nếu bạn không thấy IntegerDigits::ibase: Base 1 is not an integer greater than 1.cảnh báo. (Nó vẫn trả về các câu trả lời đúng.)
Misha Lavrov

3

Ngôn ngữ Wolfram (Mathicala) , 35 byte

Or@@Array[x~Mod~#==1<x/#^2<#&,x=#]&

Hãy thử trực tuyến!

Hoàn toàn kiểm tra xem n% i = 1i 2 <n <i 3 cho bất kỳ cơ sở i nào có thể . Đối với mục đích chơi gôn, bất đẳng thức được sắp xếp lại thành 1 <n / i 2 <i , để nó có thể được xích vào đẳng thức.




2

APL (Dyalog Unicode) , 21 20 14 byte SBCS

-5 cảm ơn @ngn.

Giải pháp số học thuần túy (thực tế không thực hiện bất kỳ chuyển đổi cơ sở nào) và do đó rất nhanh.

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

Hãy thử trực tuyến!

⊢(... )⍨1↓⍳ trên một giảm từ ɩ ndices 1 ... tranh luận và tranh cãi, được áp dụng:

| phần còn lại của bộ phận

×∘⌈ lần làm tròn

 log N đối số

3∊ là ba thành viên của điều đó?


bạn có thể lưu 1 với thủ thuật tiêu chuẩn để hoán đổi các đối số:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn

@ngn Cảm ơn. Lần tới, cứ thoải mái chỉnh sửa như vậy (nếu bạn cảm thấy thích nó).
Adám

được. Đây là một cải tiến phức tạp hơn mà tôi để bạn xử lý - nó làm cho nó ngắn như giải pháp khác của bạn:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn

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

2
@ngn 1=⌈a⍟b, a≤ba=b0=a|b0=b|b
Adam


1

Husk , 15 byte

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

Hãy thử trực tuyến!

Giải trình

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 byte

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

thoát với giả 0mạo (hoặc đầu vào 3), 1cho sự thật.
Chạy như ống với -nRhoặc thử trực tuyến .


1

C, 60 byte

Hàm trả về giá trị khác không nếu đối số có thể được biểu diễn dưới dạng số có ba chữ số kết thúc bằng 1:

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

Lưu ý: điều này hoạt động với GCC, nơi các chức năng được tích hợp. Đối với các trình biên dịch khác, có lẽ bạn cần đảm bảo rằng các kiểu đối số và trả về đã được biết:

#include<math.h>

Giải trình

Cơ sở thấp nhất trong đó nđược biểu thị bằng 3 chữ số là ⌊∛n⌋và cơ sở thấp nhất nđược biểu thị bằng 2 chữ số là ⌊√n⌋, vì vậy chúng tôi chỉ cần kiểm tra xem số đó có đồng nhất với 1 modulo bất kỳ cơ sở nào trong phạm vi 3 chữ số không. Chúng tôi trả về số lượng cơ sở thỏa mãn điều kiện, đưa ra giá trị khác không (trung thực) hoặc bằng không (giả).

Chương trình kiểm tra

Vượt qua bất kỳ số lượng đầu vào như tham số vị trí:

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



0

Pyt , 35 33 byte

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

Giải trình:

←ĐĐ                                             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

Hãy thử trực tuyến!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.