Apakah ini angka tiga digit yang diakhiri dengan satu?

27

Diberikan bilangan bulat negatif, kembalikan apakah itu bilangan tiga digit yang diakhiri dengan satu, dalam basis bilangan bulat yang konsisten. Dengan kata lain, bilangan harus diwakili dalam basis-N, N menjadi bilangan bulat lebih besar dari nol.

Aturan

  • Ini , jadi jawaban tersingkat menang.
  • Karena unary berperilaku aneh, perilaku dengan input 3 10 tidak terdefinisi.
  • Celah standar dilarang.

Contohnya

Benar:

5   
73  
101 
1073
17
22
36
55
99  

Salah:

8
18
23
27
98
90
88
72
68

Sejumlah besar:

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
HAEM
sumber
1
Sejak berperilaku unary ganjil tidak, itu tidak berperilaku ganjil, representasi unary dari bilangan bulat non-negatif nhanya n 1s, misalnya 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁, dll
Erik yang Outgolfer
6
@EriktheOutgolfer Berperilaku sangat berbeda; misalnya, Anda tidak dapat membaginya dengan 1 menjadi n-itshift.
wizzwizz4
3
Apa artinya basis integer yang konsisten ? (Juga, alih-alih mengecualikan unary dalam aturan, Anda bisa menentukan N ≥ 2.)
Lynn
1
@ Lynn Notasi posisi dengan radix tunggal, misalnya basis sepuluh, yang berlawanan dengan radix yang tergantung posisi seperti yang Anda lihat dengan unit imperial atau waktu.
HAEM
1
@ Lynn sebagai tambahan, saya juga mencoba untuk mengecualikan basis rasional, negatif, kompleks dll. Adapun poin kedua Anda, aturan tentang unary dimaksudkan untuk tidak memasukkan atau mengecualikan unary. Kecuali jika pemahaman saya tentang hukum bahasa bahkan lebih lemah daripada yang saya kira, "perilaku tidak terdefinisi" berarti "apa pun yang diinginkan pihak pelaksana", yang merupakan tujuan saya.
HAEM

Jawaban:

10

Jelly , 7 byte

bRṫ€3ċJ

Mengembalikan jumlah pangkalan (bukan nol menjadi benar, nol menjadi palsu) di mana input adalah angka tiga digit yang berakhir dengan satu.

Cobalah online!

Bagaimana itu bekerja

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.
Dennis
sumber
10

JavaScript (ES7), 43 40 39 byte

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

Uji kasus

Berkomentar

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
Arnauld
sumber
6

Haskell , 41 40 byte

f n=or[mod n k==1|k<-[2..n],k^2<n,n<k^3]

Terima kasih kepada @Zgarb untuk bermain golf 1 byte!

Cobalah online!

Dennis
sumber
5

Brachylog , 10 byte

≥ℕ≜;?ḃ₍Ṫt1

Cobalah online!

Biarawati Bocor
sumber
2
8 byte , meskipun saya tidak sepenuhnya yakin mengapa ia bekerja tetapi beberapa varian dekat tidak.
Zgarb
4

05AB1E , 11 8 byte

Disimpan 3 byte berkat Adnan .

Lв3ù€θ1å

Cobalah online!

Penjelasan

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?
Emigna
sumber
3

Mathematica, 43 byte

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

Cobalah online!

atau Coba online! (angka besar)

Martin Ender menyimpan 3 byte

J42161217
sumber
!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&sedikit lebih pendek jika Anda tidak keberatan melihat IntegerDigits::ibase: Base 1 is not an integer greater than 1.peringatan itu. (Itu masih mengembalikan jawaban yang benar.)
Misha Lavrov
3

Bahasa Wolfram (Mathematica) , 35 byte

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

Cobalah online!

Periksa secara eksplisit apakah n% i = 1 dan i 2 <n <i 3 untuk setiap basis i yang mungkin . Untuk tujuan bermain golf, ketidaksetaraan ditata ulang menjadi 1 <n / i 2 <i , sehingga dapat dirantai ke kesetaraan.

Martin Ender
sumber
3

Bersih , 58 56 byte

-2 berkat Dennis

import StdEnv
@n=or[n>m^2&&n<m^3&&n rem m==1\\m<-[2..n]]

Cobalah online!

Suram
sumber
2

APL (Dyalog Unicode) , 21 20 14 byte SBCS

-5 terima kasih kepada @ngn.

Solusi aritmatika murni (tidak benar-benar melakukan konversi basis) dan dengan demikian sangat cepat.

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

Cobalah online!

⊢(... )⍨1↓⍳ pada satu turun dari ɩ ndices 1 ... argumen dan argumen, berlaku:

| sisa divisi

×∘⌈ kali pembulatan

 log N Argumen

3∊ Apakah tiga anggota itu?

Adám
sumber
Anda dapat menghemat 1 dengan trik standar bertukar argumen:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn
@ ngn Terima kasih. Lain kali, silakan mengedit seperti itu (jika Anda suka).
Adám
baik. Inilah peningkatan yang lebih kompleks yang saya tinggalkan untuk Anda tangani - ini membuat ini sesingkat solusi Anda yang lain:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn
1
3∊⊢(|×|×∘⌈⍟)⍨1↓⍳
ngn
2
@ngn 1=⌈a⍟b, a≤ba=b0=a|b0=b|b
Adám
1

Sekam , 15 byte

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

Cobalah online!

Penjelasan

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?
ბიმო
sumber
1

PHP, 48 +1 byte

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

keluar dengan 0untuk falsy (atau input 3), 1untuk truey.
Jalankan sebagai pipa dengan -nRatau coba online .

Titus
sumber
1

C, 60 byte

Fungsi yang mengembalikan non-nol jika argumen dapat direpresentasikan sebagai angka tiga digit yang diakhiri dengan 1:

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

Catatan: ini berfungsi dengan GCC, di mana fungsinya terintegrasi. Untuk kompiler lain, Anda mungkin perlu memastikan bahwa argumen dan tipe pengembalian diketahui:

#include<math.h>

Penjelasan

Basis terendah yang ndirepresentasikan dalam 3 digit adalah ⌊∛n⌋, dan basis terendah yang ndiwakili dalam 2 digit adalah ⌊√n⌋, jadi kami hanya menguji apakah jumlahnya kongruen dengan 1 modulo basis apa pun dalam rentang 3 digit. Kami mengembalikan hitungan jumlah pangkalan yang memenuhi persyaratan, memberikan nilai yang tidak nol (benar) atau nol (salah) sesuai kebutuhan.

Program uji

Lewati sejumlah input sebagai parameter posisi:

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

APL (Dyalog Unicode) , 19 byte SBCS

Metode Dennis .

(⊂,1)∊2↓¨⊢⊥⍣¯1¨⍨1↓⍳

Cobalah online!

(⊂,1)∊ Adalah [1]anggota dari

2↓¨ dua elemen jatuh dari masing-masing

⊢⊥⍣¯1¨⍨ argumen diwakili di masing-masing pangkalan

1↓⍳ satu turun dari ɩ ndices 1 melalui argumen?

Adám
sumber
0

Julia , 31 byte

n->any(i>n/i^2>n%i==1for i=2:n)

Cobalah online!

LukeS
sumber
0

Pyt , 35 33 byte

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

Penjelasan:

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

Cobalah online!

mudkip201
sumber
0

> <> , 42 byte

1<v?)}:{*::+
n~\1-:::**{:}):?!n~:{:}$%1=:?

Cobalah online!

Kembali 10untuk kebenaran, 00untuk kebohongan.

Jo King
sumber