Czy to trzycyfrowy numer kończący się na jeden?


27

Biorąc pod uwagę nieujemną liczbę całkowitą, zwróć, czy jest to trzycyfrowa liczba kończąca się jedną, w dowolnej spójnej podstawie liczb całkowitych. Innymi słowy, liczba musi być reprezentowana w podstawie N, przy czym N jest liczbą całkowitą większą od zera.

Zasady

  • To jest , więc wygrywa najkrótsza odpowiedź.
  • Ponieważ unary zachowuje się dziwnie, zachowanie z wejściem 3 10 jest niezdefiniowane.
  • Standardowe luki są zabronione.

Przykłady

Prawdziwe:

5   
73  
101 
1073
17
22
36
55
99  

Fałszywe:

8
18
23
27
98
90
88
72
68

Garść dużych liczb:

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
Od jednoargumentowych zachowuje się dziwnie , nie, to nie zachowuje się dziwnie, jednoskładnikowa reprezentacją nieujemnej liczby całkowitej njest po prostu n 1s, na przykład 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁, itd.
Eryk Outgolfer

6
@EriktheOutgolfer Zachowuje się zupełnie inaczej; na przykład nie możesz podzielić przez 1 do n-itshift.
wizzwizz4,

3
Co oznacza spójna podstawa liczb całkowitych? (Oprócz tego, zamiast wykluczać jednoargumentowy w regułach, można po prostu podać N ≥ 2.)
Lynn

1
@Lynn Notacja pozycyjna z pojedynczym podstawnikiem, np. Podstawa dziesięć, w przeciwieństwie do podstawnika zależnego od położenia, jak widać z jednostkami imperialnymi lub czasem.
HAEM

1
@Lynn jako dodatek starałem się również wykluczyć zasady racjonalne, negatywne, złożone itp. Jeśli chodzi o drugi punkt, reguła dotycząca jedności nie ma na celu ani uwzględniać, ani wykluczać jedności. O ile moje pojęcie prawników językowych nie jest nawet słabsze, niż myślałem, „niezdefiniowane zachowanie” oznacza „wszystko, czego chce strona wdrażająca”, i o to mi chodziło.
HAEM,

Odpowiedzi:


10

Galaretka , 7 bajtów

bRṫ€3ċJ

Zwraca liczbę zasad (niezerowa oznacza prawdziwość, zero oznacza fałsz), w której wejściem jest trzycyfrowa liczba kończąca się na jeden.

Wypróbuj online!

Jak to działa

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 bajtów

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

Przypadki testowe

Skomentował

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 bajtów

Zaoszczędzono 3 bajty dzięki Adnan .

Lв3ù€θ1å

Wypróbuj online!

Wyjaśnienie

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 bajty

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

Wypróbuj online!

lub Wypróbuj online! (duże liczby)

Martin Ender zapisał 3 bajty


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&jest nieco krótszy, jeśli nie przeszkadza ci zobaczenie IntegerDigits::ibase: Base 1 is not an integer greater than 1.ostrzeżenia. (Nadal zwraca poprawne odpowiedzi.)
Misza Ławrow




2

APL (Dyalog Unicode) , 21 20 14 bajtów SBCS

-5 dzięki @ngn.

Rozwiązanie czysto arytmetyczne (w rzeczywistości nie wykonuje żadnych konwersji podstawowych), a zatem bardzo szybkie.

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

Wypróbuj online!

⊢()⍨1↓⍳ Na jeden usunięty z argumentu ices ndices 1… i argumentu stosuje się:

| pozostały podział

×∘⌈ razy zaokrąglone

 log N Argument

3∊ czy trójka jest tego członkiem?


możesz zapisać 1 za pomocą standardowej sztuczki polegającej na zamianie argumentów:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn

@ngn Thanks. Następnym razem po prostu edytuj takie (jeśli masz na to ochotę).
Adám

dobrze. Oto bardziej złożone ulepszenie, które pozostawiam wam do (⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
zniesienia

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

2
@ngn 1=⌈a⍟b, a≤ba=b0=a|b0=b|b
Adám


1

Łuska , 15 bajtów

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

Wypróbuj online!

Wyjaśnienie

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 bajtów

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

kończy się 0na falsy (lub input 3), 1na prawdę.
Uruchom jako potok z -nRlub spróbuj online .


1

C, 60 bajtów

Funkcja, która zwraca wartość niezerową, jeśli argument może być reprezentowany jako trzycyfrowa liczba kończąca się na 1:

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

Uwaga: działa to z GCC, gdzie funkcje są wbudowane. W przypadku innych kompilatorów prawdopodobnie musisz upewnić się, że znane są typy argumentów i zwracane:

#include<math.h>

Wyjaśnienie

Najniższa podstawa nreprezentowana przez 3 cyfry to ⌊∛n⌋, a najniższa podstawa nreprezentowana przez 2 cyfry to ⌊√n⌋, więc po prostu testujemy, czy liczba jest zgodna z 1 modułem dowolnych zasad w zakresie 3 cyfr. Zwracamy liczbę baz spełniających warunek, podając odpowiednio wartość niezerową (prawda) lub zero (fałsz).

Program testowy

Przekaż dowolną liczbę danych wejściowych jako parametry pozycyjne:

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



0

Pyt , 35 33 bajtów

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

Wyjaśnienie:

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

Wypróbuj online!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.