Ist das eine dreistellige Zahl, die auf eins endet?


27

Geben Sie bei einer nichtnegativen Ganzzahl zurück, ob es sich um eine dreistellige Zahl handelt, die auf einer beliebigen konsistenten Ganzzahlbasis endet. Mit anderen Worten muss die Zahl in der Basis N dargestellt werden, wobei N eine ganze Zahl größer als Null ist.

Regeln

  • Das ist , also gewinnt die kürzeste Antwort.
  • Da sich unary komisch verhält, ist das Verhalten mit Eingang 3 10 undefiniert.
  • Standardlücken sind verboten.

Beispiele

Wahr:

5   
73  
101 
1073
17
22
36
55
99  

Falsch:

8
18
23
27
98
90
88
72
68

Eine Handvoll großer Zahlen:

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
Da benimmt sich unary komisch nein, verhält es nicht seltsam, die unären Darstellung eines nicht-negative ganze Zahl nist gerade n 1s, zum Beispiel 0 = ()₁, 3 = (111)₁, 10 = (1111111111)₁etc.
Erik die Outgolfer

6
@EriktheOutgolfer Es verhält sich ganz anders; Sie können zum Beispiel nicht durch 1 bis n-itshift dividieren.
wizzwizz4

3
Was macht konsistente Ganzzahlbasis? (Anstatt Unary in den Regeln auszuschließen, können Sie auch einfach N ≥ 2 angeben.)
Lynn

1
@Lynn Eine Positionsnotation mit einer einzelnen Basis, z. B. Basis zehn, im Gegensatz zu einer positionsabhängigen Basis, wie Sie sie mit imperialen Einheiten oder Zeitangaben sehen.
HAEM

1
@Lynn als Addendum habe ich auch versucht, rationale, negative, komplexe etc. Grundlagen auszuschließen. Was Ihren zweiten Punkt betrifft, soll die Regel über Unär weder Unär einschließen noch ausschließen. Sofern mein Verständnis für Sprachrecht nicht noch schwächer ist als ich gedacht habe, bedeutet "undefiniertes Verhalten" "was auch immer die ausführende Partei will", was ich auch wollte.
HAEM

Antworten:


10

Gelee , 7 Bytes

bRṫ€3ċJ

Gibt die Anzahl der Basen zurück (Nicht-Null ist wahr, Null ist falsch), in denen die Eingabe eine dreistellige Zahl ist, die auf Eins endet.

Probieren Sie es online!

Wie es funktioniert

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)

Testfälle

Kommentiert

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 Bytes

3 Bytes gespart dank Adnan .

Lв3ù€θ1å

Probieren Sie es online!

Erläuterung

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 Bytes

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

Probieren Sie es online!

oder Online ausprobieren! (große Zahlen)

Martin Ender sparte 3 Bytes


!FreeQ[#~IntegerDigits~Range@#,{_,_,1}]&ist etwas kürzer, wenn es Ihnen nichts ausmacht, die IntegerDigits::ibase: Base 1 is not an integer greater than 1.Warnung zu sehen. (Es gibt immer noch die richtigen Antworten.)
Mischa Lawrow




2

APL (Dyalog Unicode) , 21 20 14 Bytes SBCS

-5 danke an @ngn.

Rein arithmetische Lösung (führt eigentlich keine Basisumrechnungen durch) und damit sehr schnell.

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

Probieren Sie es online!

⊢()⍨1↓⍳ Auf ein Argument, das aus den 1ndices 1… und dem Argument gestrichen wurde, gilt:

| der Geschäftsbereich bleibt übrig

×∘⌈ mal die aufgerundeten

 log N Argument

3∊ Ist drei ein Mitglied davon?


Sie können 1 mit dem Standardtrick des Austauschs der Argumente ⊢(∨/(3=∘⌈⍟)∧1=|)⍨1↓⍳
speichern

@ngn Danke. Fühlen Sie sich das nächste Mal frei, diese zu bearbeiten (wenn Sie Lust dazu haben).
Adám

okay. Hier ist eine komplexere Verbesserung, die ich Ihnen überlassen habe - das macht sie so kurz wie Ihre andere Lösung:(⊂1 3)∊⊢(⌈|,¨⍟)⍨1↓⍳
ngn

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

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


1

Schale , 15 Bytes

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

Probieren Sie es online!

Erläuterung

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 Bytes

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

Ausgänge mit 0für falsch (oder Eingabe 3), 1für wahr.
Laufen Sie als Pipe mit -nRoder versuchen Sie es online .


1

C 60 Bytes

Eine Funktion, die einen Wert ungleich Null zurückgibt, wenn das Argument als dreistellige Zahl mit der Endung 1 dargestellt werden kann:

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

Hinweis: Dies funktioniert mit GCC, wo die Funktionen eingebaut sind. Für andere Compiler müssen Sie wahrscheinlich sicherstellen, dass die Argument- und Rückgabetypen bekannt sind:

#include<math.h>

Erläuterung

Die niedrigste Basis, in der n3 Stellen dargestellt sind ⌊∛n⌋, ist und die niedrigste Basis, in der n2 Stellen dargestellt sind, ist⌊√n⌋ dreistellig , . Wir testen also einfach, ob die Zahl mit 1 Modulo für alle Basen im dreistelligen Bereich übereinstimmt. Wir geben die Anzahl der Basen zurück, die die Bedingung erfüllen, wobei wir einen Wert ungleich Null (wahr) oder Null (falsch) angeben.

Testprogramm

Übergeben Sie eine beliebige Anzahl von Eingaben als Positionsparameter:

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



0

Pyt , 35 33 Bytes

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

Erläuterung:

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

Probieren Sie es online!


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.