Zähle die Teiler einer Zahl

26

Einführung

Dies ist eine sehr einfache Herausforderung: Zählen Sie einfach die Teiler einer Zahl. Wir hatten schon einmal eine ähnliche, aber kompliziertere Herausforderung , aber ich beabsichtige, diese für Einsteiger zu schaffen.

Die Herausforderung

Erstellen Sie ein Programm oder eine Funktion, die bei einer streng positiven Ganzzahl Nausgibt oder zurückgibt, wie viele Teiler sie hat, einschließlich 1 und N.

Eingabe: Eine ganze Zahl> 0. Sie können davon ausgehen, dass die Zahl im nativen numerischen Typ Ihrer Sprache dargestellt werden kann.

Ausgabe: Die Anzahl der positiven Ganzzahlteiler, einschließlich 1, und die Anzahl selbst.

Einsendungen werden in Bytes gewertet . Möglicherweise finden Sie diese Website hilfreich, obwohl Sie jede sinnvolle Methode zum Generieren Ihrer Byteanzahl verwenden können.

Das ist , also gewinnt die niedrigste Punktzahl!

Bearbeiten: Es sieht aus wie FryAmTheEggman 5-Byte-Pyth-Antwort ist der Gewinner! Sie können jedoch gerne neue Antworten einreichen. Wenn Sie etwas kürzer bekommen können, ändere ich die akzeptierte Antwort.

Testfälle

ndiv(1) -> 1
ndiv(2) -> 2
ndiv(12) -> 6
ndiv(30) -> 8
ndiv(60) -> 12
ndiv(97) -> 2
ndiv(100) -> 9

Bestenlisten

Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

# Perl, 43 + 2 (-p flag) = 45 bytes

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

bkul
quelle

Antworten:

19

Pyth, 5

l{yPQ

Verwendet die Teilmengenoperation für die Primfaktoren der Eingabe, behält dann nur die eindeutigen Listen der Faktoren bei und gibt diese Anzahl zurück.

Test Suite

Erläuterung

Verwenden Sie 25 als Beispiel, damit die Teilmengenliste nicht sehr lang ist

l{yPQ     ## implicit:  Q = eval(input()) so Q == 25
   PQ     ## Prime factors of Q, giving [5, 5]
  y       ## All subsets, giving [[], [5], [5], [5, 5]]
 {        ## Unique-fiy, giving [[], [5], [5, 5]]
l         ## Length, print implicity
FryAmTheEggman
quelle
Faszinierend. Nizza Ansatz
Cyoce
14

C ++ C, 43 57 56 46 43 Bytes

Auf Anregung von Martin Büttner:

i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Sahil Arora
quelle
1
Warten Sie, lassen Sie uns stattdessen beide herunterzählen, 43:i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Martin Ender,
@ MartinBüttner Wow man wow. Ernst! _ / \ _
Sahil Arora
1
Schön! : ~)!
Sweerpotato
11

LabVIEW, 4938 Bytes

Nun, es ist offensichtlich nicht für Code-Golf geeignet, aber was auch immer, also für meinen ersten Beitrag und das Lolz hier geht. Bildbeschreibung hier eingeben

Eumel
quelle
Willkommen bei Programming Puzzles und Code Golf! Wie hast du das bewertet, wenn es dir nichts ausmacht, wenn ich frage? Ich konnte auf Meta keinen Präzedenzfall finden.
bkul
Ich speicherte es und nahm die Größe davon
Eumel
Und es war 4,938 Bytes? Zum Beispiel nicht Kilobyte?
bkul
Aus Genauigkeitsgründen habe ich die Byteanzahl und nicht die KB-Zahl genommen
Eumel
4
@bkul Ich denke, die Verwirrung ist auf die zurückzuführen ., die ich ziemlich sicher als Tausendertrennzeichen, nicht als Dezimalpunkt (wie es in manchen Sprachen üblich ist), gemeint habe.
Martin Ender
10

Haskell, 28 Bytes

f n=sum[0^mod n i|i<-[1..n]]

Der Trick dabei ist, zu testen, ob ein Rest 0die Anzeigefunktion verwendet 0^.

0^0 = 1
0^_ = 0

Dies funktioniert, weil jede positive Potenz von 0 0 ist, wohingegen 0 ^ 0 kombinatorisch das leere Produkt von 1 ist.

Vergleichen Sie dies mit Filtern

f n=sum[1|i<-[1..n],mod n i<1]
xnor
quelle
7

Dyalog APL , 7 6 Bytes

≢∘∪⊢∨⍳

Es ist eine unbenannte Funktion, die ¨wie folgt benannt und dann für jeden ( ) -Testfall wiederverwendet werden kann:

      f ← ≢∘∪⊢∨⍳
      f¨ 1 2 12 30 60 97 100
1 2 6 8 12 2 9

Erläuterung:

 ┌─┴──┐  
 ∪  ┌─┼─┐
 ∘  │ ∨ │
 ̸≡  ⊢   ⍳

Zählen Sie die Eindeutigkeit der GCD für sich und jede der ganzen Zahlen bis .

Danke an ngn für das Speichern eines Bytes.


Alte Version: +/0=⍳|⊢

So funktioniert es:

  ┌─┴─┐      
  / ┌─┼───┐  
┌─┘ 0 = ┌─┼─┐
+       ⍳ | ⊢

⍳|⊢1-durch-Argument Divisionsrestargument
0=Boolescher Wert, wenn 0 dem Divisionsrest entspricht
+/Summe des booleschen Werts, dh Anzahl der Einsen.

Adam
quelle
6

Python 2, 37 Bytes

f=lambda n,i=1:i/n or(n%i<1)+f(n,i+1)

Eine rekursive Funktion. Die optionale Eingabe iim zu testenden Divisor. Der Ausdruck (n%i<1)testet die Teilbarkeit mit True(was gleich ist 1) für Teiler. Das Ergebnis wird zum wiederverwendbaren Ausdruck für hinzugefügt i+1. Wenn i==nerreicht, wird die ganzzahlige Floor-Division zu i/nausgewertet 1, und dieser Wert wird als Basisfall zurückgegeben. Dabei wird berücksichtigt, dass ner ein Teiler von ist n.


38

lambda n:sum(n%-~i<1for i in range(n))

Eine anonyme Funktion. Prüft alle möglichen Teiler 1durch n. Dies wird nach oben verschoben von 0durch n-1in range(n)Verwendung -~, die addiert 1. Das Zusammenfassen der Bools nutzt die Tatsache, dass Python True/ Falseas 1/ behandelt 0.

xnor
quelle
6

Retina , 17 Bytes

(?<=(.+))(?=\1*$)

Eingabe unär , Ausgabe dezimal.

Probieren Sie es online aus.

Beim Aufruf mit einem einzelnen regulären Ausdruck zählt Retina einfach die Übereinstimmungen. Der reguläre Ausdruck selbst entspricht einer Position , bei der die unäre Zahl links davon ein Teiler der gesamten Eingabe ist. Ich nutze auch die Tatsache, dass Lookarounds atomar sind, so dass ich keinen ^Anker verwenden muss.

Der erste Lookbehinds erfasst einfach das gesamte Präfix in der Gruppe 1. Das kann niemals scheitern, also wissen wir nach dem Lookbehind, dass es sich um Gruppe 1 handelt und es wird sich nicht mehr ändern.

Der Lookahead überprüft dann, ob wir das Ende der Zeichenfolge erreichen können, indem wir die erfasste Zeichenfolge (unseren potenziellen Teiler) 0 oder mehrmals wiederholen.

Martin Ender
quelle
6

J, 10 Bytes

[:*/1+_&q:

Dies ist ein unbenanntes, monadisches Verb. Es berechnet σ 0 (∏p k α k ) als ∏ (α k + 1) .

Versuchen Sie es online mit J.js .

Wie es funktioniert

[:*/1+_&q:    Right argument: y

      _&q:    Compute all exponents of the prime factorization of y.
    1+        Add 1 to each exponent.
[:*/          Reduce by mutiplication.
Dennis
quelle
Ich glaube nicht, dass dies q:erlaubt ist, da es einen wesentlichen Teil der Herausforderung löst. Wie wäre es einfach[:+/0=]|~1+i.
FUZxxl
Das wäre ein Duplikat dieser Antwort . Außerdem sind integrierte Funktionen standardmäßig nicht verboten, und die Herausforderung scheint sie nicht zu erwähnen.
Dennis
Builtins, die alle / fast alle Aufgaben einer Herausforderung erledigen, sind normalerweise verboten, aber ich kann Ihrer Argumentation folgen q: .
FUZxxl
1
Sie sind nicht. Ich wünschte, sie wären es, aber sie sind es nicht.
Dennis
Hrmpf hrmpf das nervt ein wenig.
FUZxxl
6

Golfscript, 19 18 17 13 Bytes

Mit Dank an Martin Büttner .

~.,\{\)%!}+,,

Wie es funktioniert

~               Evaluate the input, n
 .,             Duplicate the input, create array [0..n-1]
   \            Swap array and n
    {    }+     Add n to block == {n block}
     \          Swap n with i in array
      )         Increment i
       %        n mod i
        !       Logical not so that 1 if divisible by n else 0
           ,    Filter array using block for all i divisible by n
            ,   Get length of the filtered array, the answer

Ebenfalls

Von @Peter Taylor auch in 13 Bytes.

~:X,{)X\%!},,

Wie es funktioniert

~               Evaluate the input
 :X             Store input in variable X
   ,            Create array [0..X-1]
    {     },    Filter array using the following block
     )          Increment i in array
      X\        Add X to stack, swap with i
        %       X mod i,
         !      Logical not so that 1 if divisible by n else 0
            ,   Get length of the filtered array, the answer
Sherlock9
quelle
Für die gleiche Länge könnte man auch haben~:X,{)X\%!},,
Peter Taylor
4

J, 13 12 11 Bytes

Mein erstes Golf in J. Ich lerne es noch.

Dank Dennis ein Byte gespart.

Dank randomra ein weiteres Byte gespeichert.

1+/@,0=i.|]

Erläuterung:

1+/@,0=i.|]
       i.        the array 0 .. n-1
         |]      mod n
     0=          replace 0 by 1, and nonzero entries by 0
1   ,            prepend 1 to the array
 +/@             take the sum
Alephalpha
quelle
3

Arcyóu , 12 Bytes

Lasst uns die Party beginnen!

(F(x)(_(d/ x

Dies nutzt die eingebaute Funktion d/. Hier ist eine Version ohne die eingebaute (27 Bytes):

(F(x)(](+(f i(_ 1 x)(‰ x i

Erläuterung:

(F(x)              ; Anonymous function with one parameter x
  (]               ; Increment
    (+             ; Sum
      (f i(_ 1 x)  ; For i in range from 1 to x-1 inclusive:
        (‰ x i     ; x divisible by i
bkul
quelle
3

CJam, 11 Bytes

ri_,:)f%0e=

Teste es hier.

Erläuterung

CJam hat keine eingebauten Funktionen, wir machen also eine Probedivision.

ri  e# Read input and convert to integer N.
_,  e# Duplicate and turn into range [0 1 ... N-1]
:)  e# Increment each element in the range to get [1 2 ... N]
f%  e# Take N modulo each of the list elements.
0e= e# Count the zeroes.

Bonus

Hier ist eine interessante Lösung mit 12 Bytes (von der ich vermute, dass sie in einer Sprache wie J am kürzesten ist):

ri_)2m*::*e=

Das Ergebnis entspricht der Häufigkeit, mit der neine n x nMultiplikationstabelle angezeigt wird :

ri  e# Read input and convert to integer N.
_)  e# Duplicate and increment.
2m* e# Take Cartesian product of [0 1 ... N] with itself.
::* e# Compute the product of each pair.
e=  e# Count the occurrences of N.
Martin Ender
quelle
3

Matlab, 20 Bytes

Führen Sie k mod nfür jeden aus k = 1,...,n, führen Sie dann aus not(wodurch jeder Nonzer auf Null und jede Null auf 1 gesetzt wird) und addieren Sie alle diese Werte.

@(n)sum(~mod(n,1:n))
Fehler
quelle
Das wäre auch mein Ansatz gewesen!
Luis Mendo
Interessant, dass dies die gleiche Länge ist wie length(divisors(n)).
Kumulierung
@Akkumulation Sie müssten noch eine hinzufügen @(n), um es zu einem gültigen Untertauchen zu machen
Fehler
3

Julia, 20 Bytes

n->sum(i->n%i<1,1:n)

Dies ist eine anonyme Funktion, die folgendermaßen funktioniert: Prüfen Sie für jede Ganzzahl von 1 bis zur Eingabe, ob das Eingabemodul für die Ganzzahl Null ist. Wenn ja, wird der Wert trueandernfalls sein false. Wir addieren über die Booleschen Werte, die implizit in ganze Zahlen umgewandelt werden, und geben die Anzahl der Teiler an.


Eine viel coolere (wenn auch viel längere) Lösung, der Vollständigkeit halber eingeschlossen, ist

n->prod(collect(values(factor(n))).+1)

Dies erhält die kanonische Faktorisierung von n, dh \prod_{i=1}^k p_i^e_i, und berechnet die Divisorfunktion als τ(n) = \prod_{i=1}^k e_i + 1.

Alex A.
quelle
2

PARI / GP, 6 Bytes

PARI / GP haben dafür ein eingebautes.

numdiv
Alephalpha
quelle
Ich bin mir nicht sicher, aber ich denke, dass man es laut Meta für Builtins nicht einfach wiederholen kann.
Maltysen
3
@Maltysen Ich denke es ist erlaubt. meta.codegolf.stackexchange.com/a/7206/9288
alephalpha
2

Ruby, 27 Bytes

->n{(1..n).count{|i|n%i<1}}

Probelauf:

2.1.5 :001 > ->n{(1..n).count{|i|n%i<1}}[100]
 => 9 
Mann bei der Arbeit
quelle
2

Oktave, 21 bis 20 Bytes

@(n)nnz(~mod(n,1:n))
Alephalpha
quelle
Ich mag die nnz, tolle Nutzung hier =)
Fehler
2

Regex (.NET), 33 Byte

^((?=.*$(?<=^\2*(.+?(?>\2?)))).)+

Angenommen, Eingabe und Ausgabe sind unär, und die Ausgabe wird aus der Hauptübereinstimmung des regulären Ausdrucks entnommen.

Zerfall des Regex:

  • .*$ Setzt den Zeiger auf das Ende der Zeichenkette, sodass wir die gesamte Eingabe x in eine Richtung haben.
  • (?<=^\2*(.+?(?>\2?))) Stimmt von rechts nach links überein und prüft, ob ein Teiler vorliegt, indem eine Schleife von x nach 0 ausgeführt wird.
    • (.+?(?>\2?)) ist eine "Variable", die bei der ersten Iteration mit 1 beginnt und bei der vorherigen Iteration mit der Zahl fortfährt und bis zu x durchläuft.
    • ^\2* prüft, ob x ein Vielfaches von "Variable" ist.

Es hat im Grunde die gleiche Idee wie meine Antwort auf Phi berechnen (nicht Pi) . Nur der Scheck ist anders.

Testen Sie den Regex bei RegexStorm .

n̴̖̋h̴̖̋ã̷͉h̷̭̿d̷̰̀ĥ̷̳
quelle
2

Labyrinth , 33 Bytes

?:}
  :{:}%{{
@ }   " )
!{("{;"}}

Probieren Sie es online aus.

Dies implementiert die Probedivision. Ich werde später eine vollständige Erklärung hinzufügen. Es ist wahrscheinlich nicht optimal, aber es fällt mir schwer, etwas kürzeres zu finden.

Martin Ender
quelle
2

Perl 6 , 17 Bytes

{[+] $_ X%%1..$_} # 17

Verwendung:

say {[+] $_ X%%1..$_}(60); # 12␤

my $code = {[+] $_ X%%1..$_};

say $code(97); # 2␤

my &code = $code;
say code 92; # 6
Brad Gilbert b2gills
quelle
2

Javascript (ES6), 60 57 42 40 39 37 Bytes

Dies kann wahrscheinlich besser golfen werden.

n=>{for(d=i=n;i;n%i--&&d--);return d}

Edit 1: Ich hatte recht. Die geschweiften Klammern nach der for-Schleife wurden entfernt.

Edit 2: Golfen auf 40 Bytes dank Manatwork und Martin Büttner .

Edit 3: Speichern eines Bytes durch Basieren der Funktion auf der obigen C-Antwort.

Edit 4: Danke an ן nןuɟ ן oן und Neil , aber ich kann die Auswertung nicht zum Laufen bringen .

Edit 5: Vergessen das eval zu entfernen.

Prüfung

n = <input type="number" oninput='result.innerHTML=(

n=>{for(d=i=n;i;n%i--&&d--);return d}

)(+this.value)' /><pre id="result"></pre>

Sherlock9
quelle
2
Gib die guten Gewohnheiten auf. varKeywords entfernen . Weitere Tipps in Tipps zum Golfen in JavaScript und Tipps zum Golfen in ECMAScript 6 .
Handarbeit
2
Geben Sie auch die schlechten Gewohnheiten auf: Wenn Sie die Wahl zwischen ++iund haben i++, wählen Sie die erstere (dies hat nichts mit Golfen zu tun). Auch n%i<1sollte ein Byte speichern.
Martin Ender
2
Nur kurz getestet:n=>{for(d=i=0;i<n;)n%++i<1&&d++;return d}
Handarbeit
1
38: n => eval ('für (d = 0, i = n; i; d + = n% i - <1); d')
Mama Fun Roll
1
@manatwork Warum nicht n%++i||++d?
Neil
2

PowerShell, 34 Byte

param($x)(1..$x|?{!($x%$_)}).Count

e.g. 

PS C:\temp> .\divisors-of-x.ps1 97
2
  • Erstellen Sie eine Liste mit Zahlen von 1 bis x, und geben Sie sie in die Pipeline ein |
  • Filtern Sie die Pipeline nach (x% item == 0), indem Sie das Modulo-Ergebnis implizit als Booleschen !Wert umwandeln und dann invertieren, sodass Teiler zu $ ​​true werden und durchgelassen werden. mit dem eingebauten Alias ?fürWhere-Object
  • sammeln ()und .Countwie viele Gegenstände durch den Filter gekommen sind
TessellatingHeckler
quelle
Sehr schön gehackt!
bkul
2

Gelee , 2 Bytes (nicht konkurrierend (wieder))

Æd

Probieren Sie es online!

Ich denke, dies verwendet Funktionen, die nach der anderen Jelly-Antwort implementiert wurden. Kommentar, wenn ich mich irre (ich kann nicht jedes Commit in der Reihe sehen, wissen Sie :))

Erik der Outgolfer
quelle
2

Taxi, 2143 Bytes

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l 2 r.Pickup a passenger going to Cyclone.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 r.Go to Cyclone:n 1 l.Pickup a passenger going to Firemouth Grill.Pickup a passenger going to Joyless Park.Go to Firemouth Grill:s 1 l 2 l 1 r.Go to Joyless Park:e 1 l 3 r.[i][Check next value n-i]Go to Zoom Zoom:w 1 r 2 l 2 r.Go to Sunny Skies Park:w 2 l.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Sunny Skies Park.Go to Joyless Park:n 2 r 2 r 2 l.Pickup a passenger going to Cyclone.Go to Sunny Skies Park:w 1 r 2 l 2 l 1 l.Go to Cyclone:n 1 l.Pickup a passenger going to Joyless Park.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 1 l 2 l.Pickup a passenger going to Trunkers.Pickup a passenger going to Equal's Corner.Go to Trunkers:s 1 l.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan "F" if no one is waiting.Pickup a passenger going to Knots Landing.Go to Firemouth Grill:n 3 r 1 l 1 r.Pickup a passenger going to The Underground.Go to The Underground:e 1 l.Pickup a passenger going to Firemouth Grill.Go to Knots Landing:n 2 r.Go to Firemouth Grill:w 1 l 2 r.Go to Joyless Park:e 1 l 3 r.Switch to plan "N".[F][Value not a divisor]Go to Joyless Park:n 3 r 1 r 2 l 4 r.[N]Pickup a passenger going to The Underground.Go to The Underground:w 1 l.Switch to plan "E" if no one is waiting.Pickup a passenger going to Joyless Park.Go to Joyless Park:n 1 r.Switch to plan "i".[E]Go to Sunny Skies Park:n 3 l 2 l 1 l.Pickup a passenger going to What's The Difference.Go to Firemouth Grill:s 1 l 1 l 1 r.Pickup a passenger going to What's The Difference.Go to What's The Difference:w 1 l 1 r 2 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 3 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

Probieren Sie es online!

Ungolfed:

Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left 1st left 2nd right.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 1st right.
Go to Cyclone: north 1st left.
Pickup a passenger going to Firemouth Grill.
Pickup a passenger going to Joyless Park.
Go to Firemouth Grill: south 1st left 2nd left 1st right.
Go to Joyless Park: east 1st left 3rd right.
[i]
[Check next value n-i]
Go to Zoom Zoom: west 1st right 2nd left 2nd right.
Go to Sunny Skies Park: west 2nd left.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Sunny Skies Park.
Go to Joyless Park: north 2nd right 2nd right 2nd left.
Pickup a passenger going to Cyclone.
Go to Sunny Skies Park: west 1st right 2nd left 2nd left 1st left.
Go to Cyclone: north 1st left.
Pickup a passenger going to Joyless Park.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer: north 2nd right 2nd right 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st left 1st left 2nd left.
Pickup a passenger going to Trunkers.
Pickup a passenger going to Equal's Corner.
Go to Trunkers: south 1st left.
Pickup a passenger going to Equal's Corner.
Go to Equal's Corner: west 1st left.
Switch to plan "F" if no one is waiting.
Pickup a passenger going to Knots Landing.
Go to Firemouth Grill: north 3rd right 1st left 1st right.
Pickup a passenger going to The Underground.
Go to The Underground: east 1st left.
Pickup a passenger going to Firemouth Grill.
Go to Knots Landing: north 2nd right.
Go to Firemouth Grill: west 1st left 2nd right.
Go to Joyless Park: east 1st left 3rd right.
Switch to plan "N".
[F]
[Value not a divisor]
Go to Joyless Park: north 3rd right 1st right 2nd left 4th right.
[N]
Pickup a passenger going to The Underground.
Go to The Underground: west 1st left.
Switch to plan "E" if no one is waiting.
Pickup a passenger going to Joyless Park.
Go to Joyless Park: north 1st right.
Switch to plan "i".
[E]
Go to Sunny Skies Park: north 3rd left 2nd left 1st left.
Pickup a passenger going to What's The Difference.
Go to Firemouth Grill: south 1st left 1st left 1st right.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: west 1st left 1st right 2nd right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: east 3rd right.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st left 1st right.

Erläuterung:

Convert stdin to a number and store it in three locations for three purposes:
   Original (Sunny Skies Park)
   Counter for tested values (Joyless Park)
   Counter for divisors found (Firemouth Grill)
Divide the original by each Joyless Park value in turn.
If the division result equals the truncated division result, then it's a divisor.
When a divisor is found, subtract one from Firemouth Grill.
Repeat until Joyless Park hits zero.
Pickup the original from Sunny Skies Park and subtract the value from Firemouth Grill.
Convert the result to a string and print to stdout.
Ingenieur Toast
quelle
2

Japt , 3 Bytes

â l

-m flag ist für die Ausführung aller Testfälle.

Versuch es

Verkörperung der Ignoranz
quelle
2

Excel-Formel, 42 28 Bytes

Edit: Ich habe gerade festgestellt, dass ich nicht verwenden muss INDIRECT, um 14 Bytes zu sparen!

Folgendes sollte als Matrixformel ( Ctrl+ Shift+ Enter) eingegeben werden :

=SUM(--NOT(MOD(N,ROW(1:N))))

Wobei N die zu testende Zahl ist.

Beispiele:

{SUM(--NOT(MOD(32,ROW(1:32))))}
Result: 6
{SUM(--NOT(MOD(144,ROW(1:144))))}
Result: 15

Erläuterung:

SUM(--NOT(MOD(N,ROW(1:N))))       Full formula

                ROW(1:N)          Generates an array of row numbers e.g {1;2;3;4;...N}
          MOD(N,ROW(1:N))         Does N MOD {1;2;3;4;,...N}
      NOT(MOD(N,ROW(1:N)))        Coerces zeros to ones, so that they may be counted, but actually returns an array of TRUE;FALSE;FALSE;...
    --NOT(MOD(N,ROW(1:N)))        Coerces the TRUEs to 1s and FALSEs to 0s.
SUM(--NOT(MOD(N,ROW(1:N))))       Sum the ones for the result.
i_saw_drones
quelle
2

05AB1E , 2 Bytes

Ñg

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

Ziemlich einfach, aber hier ist es trotzdem:

Ñ   # Push a list of divisors of the (implicit) input-integer
    #  i.e. 100 → [1,2,4,5,10,20,25,50,100]
 g  # Pop and push the length of this list
    #  i.e. [1,2,4,5,10,20,25,50,100] → 9
    # (which is output implicitly as result)
Kevin Cruijssen
quelle
1

Mathematica, 16 Bytes

Length@*Divisors

Einfache Funktionszusammensetzung der eingebauten Funktionen.

Martin Ender
quelle
1

Minkolang 0,13 , 16 Bytes

ndd[0ci1+%,-]-N.

Überprüfen Sie alle Fälle hier.

Erläuterung

ndd           Takes number from input and duplicates it twice (n)
[             Opens for loop that runs n times
 0c           Copies bottom of stack to top (n)
   i1+        Loop counter + 1 (d)
      %       Modulo - pops d,n, then pushes n%d
       ,      Not - 1 if equal to 0, 0 otherwise
        -     Subtract
         ]    Close for loop
-             Subtract (n - 1 for each non-divisor)
N.            Output as number and stop.
El'endia Starman
quelle