Bu biten üç basamaklı bir sayı mı?


27

Negatif olmayan bir tamsayı verildiğinde, tutarlı bir tamsayı tabanında biten üç basamaklı bir sayı olup olmadığını döndürün. Başka bir deyişle, sayının N bazında gösterilmesi gerekir, N sıfırdan büyük bir tamsayıdır.

kurallar

  • Bu , bu yüzden en kısa cevap kazanır.
  • Tekli davranır garip bir şekilde yana, giriş 3 davranış 10 tanımlanmamış.
  • Standart boşluklar yasaktır.

Örnekler

Doğru:

5   
73  
101 
1073
17
22
36
55
99  

Yanlış:

8
18
23
27
98
90
88
72
68

Çok fazla sayıda avuç:

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
Esrarlı tekli boğulan bir yana hayır, negatif olmayan bir tamsayı tekli temsili, garip bir şekilde davranmaz nadildir n 1, örneğin s 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁vb
Erik Outgolfer

6
@EriktheOutgolfer Oldukça farklı davranıyor; Örneğin, n-itshift 1 ile bölemezsiniz.
wizzwizz4

3
Ne vermez tutarlı tamsayı taban demek? (Ayrıca, kuralları unary dışlamak yerine sadece N ≥ 2 belirtebilirsiniz.)
Lynn

1
@Lynn Tek bir yarıçaplı, örneğin taban on gibi konumsal gösterim, emperyal birimler veya zaman ile gördüğünüz gibi bir pozisyona bağlı yarıçapın aksine.
HAEM

1
Bir zeyilname olarak @ Lynn, ayrıca rasyonel, negatif, karmaşık vb bazları dışlamaya çalışıyordum. İkinci konuya gelince, unary hakkındaki kural ne unary'i içerecek ne de hariç tutamaz. Dil avukatlığını kavramam, benim düşündüğümden bile daha zayıf olmadığı sürece, "tanımsız davranış", "uygulayıcı taraf ne isterse" anlamına geliyor, bu da benim istediğim şeydi.
HAEM

Yanıtlar:


10

Jöle , 7 bayt

bRṫ€3ċJ

Girdide biten üç basamaklı bir sayı olan taban sayısını (sıfır olmayan, hakikaten, sıfır sahtedir) döndürür.

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Test durumları

Yorumlananlar

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

05AB1E , 11 8 bayt

Adnan sayesinde 3 byte kurtarıldı .

Lв3ù€θ1å

Çevrimiçi deneyin!

açıklama

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 bayt

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

Çevrimiçi deneyin!

veya Çevrimiçi deneyin! (büyük sayılar)

Martin Ender 3 bayt kurtardı


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&IntegerDigits::ibase: Base 1 is not an integer greater than 1.Uyarıyı görmeme sakıncası yoksa biraz daha kısa . (Hala doğru cevapları verir.)
Misha Lavrov

3

Wolfram Dili (Mathematica) , 35 bayt

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

Çevrimiçi deneyin!

Herhangi bir olası baz i için n% i = 1 ve i 2 <n <i 3 olup olmadığını açıkça kontrol eder . Golf oynamak için eşitsizlik 1 <n / i 2 <i olarak yeniden düzenlenir , böylece eşitlik üzerine zincirlenebilir.




2

APL (Dyalog Unicode) , 21 20 14 bayt SBCS

-5 @ngn sayesinde.

Tamamen aritmetik çözüm (aslında herhangi bir temel dönüşüm yapmaz) ve dolayısıyla çok hızlı.

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

Çevrimiçi deneyin!

⊢(... )⍨1↓⍳ biri düştü üzerinde ɩ 1 ... argüman ve argüman ndices, geçerlidir:

| bölüm kalanları

×∘⌈ yuvarlama süreleri

 log N Argümanı

3∊ üç üye mi?


Standart argümanları değiştirme ⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
hilesiyle 1 kazanabilirsiniz

@ ngn Teşekkürler. Bir dahaki sefere, sadece (kendin gibi hissediyorsan) düzenlemek için çekinmeyin.
Adam

tamam. İşte size halletmeniz için bıraktığım daha karmaşık bir gelişme - bu diğer çözümünüz kadar kısa (⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
sürüyor

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

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


1

Kabuğu , 15 bayt

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

Çevrimiçi deneyin!

açıklama

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 bayt

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

ile çıkış 0için falsy (veya giriş 3), 1truthy için.
Pipe ile çalıştırın -nRveya çevrimiçi deneyin .


1

C, 60 bayt

Bağımsız değişken 1'de biten üç basamaklı bir sayı olarak gösterilebiliyorsa sıfır olmayan bir işlev:

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

Not: Bu, işlevlerin yerleşik olduğu GCC ile çalışır. Diğer derleyiciler için muhtemelen argüman ve dönüş tiplerinin bilindiğinden emin olmanız gerekir:

#include<math.h>

açıklama

Ki burada düşük taban n3 basamaklı temsil olduğu ⌊∛n⌋ve içinde en düşük taban n2 basamağı temsil olduğu ⌊√n⌋1 ila 3 haneli aralığında herhangi bir bazlar modulo sayı uyumlu olup olmadığını böylece sadece test. Durumu sağlayan, sıfır olmayan (truthy) veya sıfır (falsy) değeri uygun şekilde veren baz sayısının sayısını veririz.

Test programı

Konumsal parametreler olarak istediğiniz sayıda girişi iletin:

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



0

Pyt , 35 33 bayt

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

Açıklama:

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

Çevrimiçi deneyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.