Frage:
Sie erhalten die Start- und Endzahlen einer Sequenz und müssen die Anzahl der Ganzzahlen zurückgeben, die die Ziffer nicht enthalten 5
. Die Start- und Endnummern sollten enthalten sein!
Beispiele:
1,9 → 1,2,3,4,6,7,8,9 → Ergebnis 8
4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 → Ergebnis 12
50,60 → 60 → Ergebnis 1
-59, -50 → → Ergebnis 0
Das Ergebnis kann fünf enthalten.
Die Startnummer ist immer kleiner als die Endnummer. Beide Zahlen können auch negativ sein!
Ich bin sehr neugierig auf Ihre Lösungen und die Art und Weise, wie Sie sie lösen. Vielleicht findet jemand von euch eine einfache reine Mathematiklösung.
Bearbeiten Dies ist eine Code-Golf-Herausforderung, bei der der kürzeste Code gewinnt.
50, 59 -> 0
.Antworten:
JavaScript (ES6),
3633 BytesÜbernimmt Eingaben mit Curry-Syntax
(a)(b)
.Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
test
über ,exec
wenn Sie nur einen boolean benötigen.)b<a
ist dazu da, die Rekursion zu stoppen, nachdem alle Zahlen vonb
bis durchgezählt wurden. Dasa
Entfernen würde also nur eine unendliche Rekursion verursachen.a
als Argument und gibt dieF
Funktion zurück, die wiederumb
als Argument dient und - wie Sie bemerkt haben - rekursiv aufgerufen wird, um vonb
bis zu iterieren. Dabeia
wird ein Zähler für alle Ganzzahlen inkrementiert, die5
in ihrer Dezimalzahl kein a enthalten Darstellung.Gelee ,
87 Bytes-1 Byte dank Dennis (verwenden Sie die Tatsache, dass die Indizierung in eine Zahl diese Zahl als Dezimalliste behandelt)
TryItOnline!
Wie?
* Das Absolutwertatom
A
ist erforderlich, da eine negative Zahl, die in eine Dezimalliste umgewandelt wird, negative Einträge enthält, von denen keines jemals ein sein würde5
(das angegebene Beispiel würde alle acht statt zwei zählen).quelle
rAw€5¬S
Speichert ein Byte.w
Wandelt ein ganzzahliges Argument in Dezimalstellen um.Bash + grep, 17 Bytes
Probieren Sie es online!
quelle
2sable ,
65 BytesEin Byte dank Adnan gespeichert
Probieren Sie es online!
Erläuterung
Hinweis: Dies funktioniert aufgrund eines Fehlers, bei
¢
dem die Funktion sich auf jedes Element bezieht, anstatt übereinstimmende Elemente in der Liste zu zählen.quelle
`
wie es sich auf Arrays genauso verhält: p.Python2,
59555251474342 BytesEine rekursive Lösung. Vielen Dank an @xnor für die Motivation, mit logischen Operatoren eine Lösung zu finden! Vielen Dank auch an @JonathanAllan und @xnor , die mich angeleitet und das Byte von 43 auf 42 gehackt haben !
Andere Versuche mit 43 Bytes
quelle
if!`x`.count('5')
funktionierennot
Operator, die!
in C-ähnlichen Sprachen ist, aber das dauert 3 Bytes :(and
und zu verwendenor
.not
.Bash / Unix-Dienstprogramme, 21 Byte
Probieren Sie es online!
quelle
05AB1E ,
876 BytesEin Byte dank Adnan gespeichert
Probieren Sie es online!
Erläuterung
quelle
å
, das heißt.å
, Sie können diesŸ5.å_O
für 6 Bytes tun .negate
Sinn-n
, odern==0?1:0
?n==0?1:0
Pyth,
98 BytesDank FryAmTheEggman ein Byte gespart!
Erläuterung:
Probieren Sie es online!
quelle
Perl 6 , 23 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Haskell , 39 Bytes
Probieren Sie es online! Verwendung:
Erläuterung:
quelle
R, 33 Bytes
Verwendung:
quelle
Oktave , 36 Bytes
Probieren Sie es online!
quelle
Groovy,
47454340 BytesDies ist eine namenlose Schließung.
findAll
ähnelt dem Hinzufügen einerif
Bedingung zu einem Listenverständnis in Python.Probieren Sie es online!
quelle
PHP 7.1,
5755 BytesLaufen Sie mit
php -r '<code>' <a> <b>
quelle
Mathematica,
464442 BytesDank an Alephalpha und DavidC für das Speichern von jeweils 2 Bytes!
Unbenannte Funktion, die zwei Ganzzahlargumente verwendet und eine Ganzzahl zurückgibt.
IntegerDigits@Range@##
wandelt alle Zahlen zwischen den Eingaben in Ziffernlisten um;FreeQ@5
testet diese Listen, um zu entscheiden, welche keine enthalten5
. DannBoole
wandelt booleans zu Nullen und Einsen, undTr
fasst die Ergebnisse.Andere Lösungen (44 und 47 Bytes):
IntegerDigits@x~FreeQ~5
Bestimmt, ob die Liste der Ziffern einer Zahl 5 Sekunden lang ist, undCount[Range@##,x_/;...]&
zählt, wie viele Zahlen zwischen den Eingaben diesen Test bestehen.1##&@@IntegerDigits@#-5
Nimmt die Liste der Ziffern einer Zahl, subtrahiert 5 von allen und multipliziert die Antworten miteinander.Sign[...]^2
konvertiert dann alle Zahlen ungleich Null in 1.quelle
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
Ruby,
36-35BytesThx IMP1 für -1 Byte
quelle
?5
(das'5'
Zeichen) anstelle von/5
/ in der Suche verwenden, um ein Byte zu speichern.Java 7,
8078 BytesUngolfed:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
PowerShell,
42 -41 ByteWird von der Befehlszeile aus als. \ No5s.ps1 1 20 aufgerufen
quelle
-replace3
oder-split1
oder-notmatch5
).Python 2,
6156 Bytes-5 Bytes dank tukkaaX
quelle
not "5" in
:) entfernen. Wenn Sie Python2 verwenden, können Siex
stattdessen auch Anführungszeichen verwendenstr(x)
.[]
. Den Platz brauchst du auch vorher nichtif
.lambda a,b:sum(not"5"in`n`for n in range(a,b+1))
funktioniert aber. tio.run/nexus/…Schnelle 52 Bytes
quelle
Batch, 95 Bytes
Manuelles Schleifen spart einige Bytes, da ich den Schleifenzähler in einer Variablen trotzdem brauche.
quelle
PHP, 56 Bytes
Laufen Sie wie folgt:
Eine Version für PHP 7.1 wäre 53 Bytes (Credits für Titus):
Erläuterung
quelle
trim
Parameter wieder vergessen .CJam "einfache reine Mathematiklösung", 60
Probieren Sie es online aus
Die Zahlen werden in einer beliebigen Reihenfolge in einem Array aufgeführt.
Erläuterung:
Ein Kernproblem besteht darin, f (n) = die Anzahl der Nicht-5-Zahlen von 1 bis n (einschließlich) für jedes positive n zu berechnen. Und die Antwort lautet: Nimm ns Dezimalstellen, ersetze alle Stellen nach den ersten 5 (falls vorhanden) durch 9, ersetze dann alle Stellen 5..9 durch 4..8 (Dekrement) und konvertiere von Basis 9. Bsp. 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259. Grundsätzlich hat jede Ziffernposition 9 zulässige Werte, und ein 5xxxx entspricht einem 49999, da keine gültigen Zahlen mehr zwischen ihnen stehen.
Sobald wir das gelöst haben, haben wir ein paar Fälle: Wenn die eingegebenen Zahlen (sagen wir a und b, a <b) (streng) positiv sind, dann ist das Ergebnis f (b) -f (a-1). Wenn sie negativ sind, können wir die absoluten Werte nehmen, neu ordnen und dieselbe Berechnung verwenden. Und wenn a <= 0 <= b, dann ist das Ergebnis f (-a) + f (b) +1.
Das Programm implementiert zuerst die Funktion F wie oben beschrieben (aber auf jede Zahl in einem Array angewendet), liest dann die Eingabe, konvertiert die Zahlen in den absoluten Wert und ordnet sie neu und verwendet eine der beiden obigen Berechnungen, basierend darauf, ob a * b> 0 anfangs.
quelle
Python 2 , 54 Bytes
Probieren Sie es online!
Nicht die kürzeste Python-Antwort Verwendet denselben Algorithmus, aber eine andere Art der Implementierung mit einer while-Schleife und ist keine Lambda-Funktion.
quelle
Java 7, 77 Bytes
Dies ist eine Verbesserung von Kevins Answer , aber da ich noch nicht den Ruf habe, Kommentare abzugeben, muss diese neue Antwort genügen.
Also, was ich getan habe, war:
indexOf
Anweisungen durchcontains
(-1 Byte)for-Schleife ( 77 Bytes ):
rekursiv ( 79 Bytes ):
Ausgabe:
Teste es hier !
quelle
(""+a).contains("5")?0:1
durch Java ersetzbar sein!(""+a).contains("5")
.(""+a).contains("5")||r++
?C #, 67 Bytes
quelle
for(int c=0;...)
aber dann kann es nicht kompiliert werden, weil die Rückgabe außerhalb des Bereichs fürc
JavaScript (ES6),
58 5649 BytesGolf 7 Bytes dank ETHproductions .
quelle
c+=!/5/.test(s++)
, um ein paar Bytes zu speichern :-)MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
C #, 77 Bytes
Anonymer Lambda-Anruf.
Verwendet
n
(erste Nummer) undm
(letzte Nummer) als Eingabe und prüft dann über String Containment ("".Contains("")
).quelle
5
in seiner Nummer enthält, daher sollte10
(was Ihre Antwort nicht zählen würde) gezählt werden.g
es initialisiert werden muss, wenn angegeben wird, wie es benannt ist,var
damit Sie es benötigen,var g="";
und Sie können Currying verwenden, dhn=>m=>
Eigentlich 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle