È un numero di tre cifre che termina con uno?


27

Dato un numero intero non negativo, restituisce se si tratta di un numero di tre cifre che termina in uno, in qualsiasi base intera coerente. In altre parole, il numero deve essere rappresentato in base-N, essendo N un numero intero maggiore di zero.

Regole

  • Questo è , quindi vince la risposta più breve.
  • Poiché l'unario si comporta in modo strano, il comportamento con l'ingresso 3 10 non è definito.
  • Sono vietate le scappatoie standard .

Esempi

Vero:

5   
73  
101 
1073
17
22
36
55
99  

falso:

8
18
23
27
98
90
88
72
68

Una manciata di grandi numeri:

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
Poiché si comporta unari stranamente non, non si comporta stranamente, la rappresentazione unaria di un intero non negativo nè solo n 1s, ad esempio 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁, ecc
Erik l'Outgolfer

6
@EriktheOutgolfer Si comporta in modo abbastanza diverso; non puoi dividere per 1 in n-itshift, per esempio.
wizzwizz4,

3
Cosa significa base intera coerente ? (Inoltre, invece di escludere unario dalle regole, potresti semplicemente specificare N ≥ 2.)
Lynn

1
@Lynn Una notazione di posizione con un singolo radix, ad es. Base dieci, al contrario di un radix dipendente dalla posizione come vedi con unità imperiali o tempo.
HAEM,

1
@Lynn come addendum, stavo anche cercando di escludere basi razionali, negative, complesse ecc. Per quanto riguarda il tuo secondo punto, la regola sull'unario non intende né includere né escludere unario. A meno che la mia comprensione del legiferare linguistico non sia persino più debole di quanto pensassi, "comportamento indefinito" significa "qualunque cosa la parte che attua la volontà", che è ciò che stavo cercando.
HAEM,

Risposte:


10

Gelatina , 7 byte

bRṫ€3ċJ

Restituisce il numero di basi (diverso da zero è vero, zero è falso) in cui l'ingresso è un numero di tre cifre che termina in uno.

Provalo online!

Come funziona

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)

Casi test

Commentate

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 byte

Salvato 3 byte grazie ad Adnan .

Lв3ù€θ1å

Provalo online!

Spiegazione

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 byte

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

Provalo online!

o provalo online! (grandi numeri)

Martin Ender ha salvato 3 byte


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&è un po 'più breve se non ti dispiace vedere l' IntegerDigits::ibase: Base 1 is not an integer greater than 1.avvertimento. (Restituisce ancora le risposte corrette.)
Misha Lavrov,

3

Wolfram Language (Mathematica) , 35 byte

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

Provalo online!

Controlla esplicitamente se n% i = 1 e i 2 <n <i 3 per ogni possibile base i . Ai fini del golf, la disuguaglianza viene riorganizzata su 1 <n / i 2 <i , in modo che possa essere incatenata sull'uguaglianza.




2

APL (Dyalog Unicode) , 21 20 14 byte SBCS

-5 grazie a @ngn.

Soluzione puramente aritmetica (in realtà non esegue alcuna conversione di base) e quindi molto veloce.

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

Provalo online!

⊢(... )⍨1↓⍳ su un caduto dal ɩ ndices 1 ... argomento e l'argomento, si applicano:

| i resti della divisione

×∘⌈ volte il arrotondato per eccesso

 log N Argomento

3∊ ne fanno parte tre?


puoi salvare 1 con il trucco standard di scambiare gli argomenti:⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
ngn

@ngn Grazie. La prossima volta, sentiti libero di modificarlo (se ne hai voglia).
Adám

ok. Ecco un miglioramento più complesso che lascio gestire per te - lo rende breve come l'altra tua soluzione:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn

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

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


1

buccia , 15 byte

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

Provalo online!

Spiegazione

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);

esce 0per falsy (o input 3), 1per verità.
Esegui come pipe -nRo provalo online .


1

C, 60 byte

Una funzione che restituisce un valore diverso da zero se l'argomento può essere rappresentato come un numero di tre cifre che termina con 1:

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

Nota: funziona con GCC, in cui le funzioni sono integrate. Per altri compilatori, probabilmente è necessario assicurarsi che siano noti l'argomento e i tipi restituiti:

#include<math.h>

Spiegazione

La base più bassa in cui nè rappresentata in 3 cifre è ⌊∛n⌋e la base più bassa in cui nè rappresentata in 2 cifre è ⌊√n⌋, quindi testiamo semplicemente se il numero è congruente a 1 modulo qualsiasi base nell'intervallo di 3 cifre. Restituiamo il conteggio del numero di basi che soddisfano la condizione, fornendo un valore diverso da zero (verità) o zero (falsità), a seconda dei casi.

Programma di test

Passa un numero qualsiasi di input come parametri posizionali:

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

1

APL (Dyalog Unicode) , 19 byte SBCS

Metodo di Dennis .

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

Provalo online!

(⊂,1)∊ È [1]membro di

2↓¨ due elementi rilasciati da ciascuno di

⊢⊥⍣¯1¨⍨ l'argomento rappresentato in ciascuna delle basi

1↓⍳ uno è caduto da d ndices 1 attraverso l'argomento?



0

Pyt , 35 33 byte

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

Spiegazione:

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

Provalo online!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.