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
HAEM
źródło
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.
Dennis
źródło
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
Arnauld
źródło
6

Haskell , 41 40 bajtów

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

Dzięki @Zgarb za grę w golfa na 1 bajcie!

Wypróbuj online!

Dennis
źródło
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?
Emigna
źródło
3

Mathematica, 43 bajty

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

Wypróbuj online!

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

Martin Ender zapisał 3 bajty

J42161217
źródło
!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
3

Wolfram Language (Mathematica) , 35 bajtów

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

Wypróbuj online!

Jawnie sprawdza, czy n% i = 1 oraz i 2 <n <i 3 dla jakiejkolwiek możliwej podstawy i . Dla celów golfowych nierówność jest przestawiana na 1 <n / i 2 <i , dzięki czemu można ją powiązać z równością.

Martin Ender
źródło
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?

Adám
źródło
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?
ბიმო
źródło
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 .

Tytus
źródło
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)));
}
Toby Speight
źródło
1

APL (Dyalog Unicode) , 19 bajtów SBCS

Metoda Dennisa .

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

Wypróbuj online!

(⊂,1)∊ Jest [1]członkiem

2↓¨ z każdego z nich wypadły dwa elementy

⊢⊥⍣¯1¨⍨ argument reprezentowany w każdej z baz

1↓⍳ jeden spadł z ɩ ndices od 1 do argumentu?

Adám
źródło
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!

mudkip201
źródło
0

> <> , 42 bajty

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

Wypróbuj online!

Zwraca 10za prawdę, 00za falsey.

Jo King
źródło