Basierend auf der Frage Wie viele positive ganze Zahlen <1.000.000 enthalten die Ziffer 2? . Ich bin auf der Suche nach der kreativsten Lösung, um alle Ganzzahlen von X
bis Y
zur Ganzzahl zu zählen Z
. Z
kann von 0 bis sein Y
.
Jede gefundene Ganzzahl zählt nur einmal, auch wenn die Ganzzahl Z
häufiger vorkommt. Beispielsweise:
Z = 2
123 counts 1
22222 also counts 1
Ich werde mit einem wirklich einfachen Algorithmus beginnen, der in Java geschrieben ist (weil er von allen geliebt wird):
public class Count {
public static void main(String[] args) {
int count = 0;
for (int i = Integer.parseInt(args[0]); i <= Integer.parseInt(args[1]); i++) {
if (Integer.toString(i).contains(args[2])) {
count++;
}
}
System.out.println(count);
}
}
Wenn Sie dies mit ausführen
java -jar Count.jar 0 1000000 2
Sie erhalten dies als Ergebnis:
468559
Da dieses Problem nicht schwer zu lösen ist, handelt es sich nur um einen Beliebtheitswettbewerb . Die am besten bewertete Antwort, die bis zum 28. Februar veröffentlicht wurde, gewinnt!
popularity-contest
counting
Obl Tobl
quelle
quelle
N
kann sein123
und es würde nur passen, wenn die Teilzeichenfolge 123 existiert?Antworten:
Bash (20)
Verwendung
quelle
Funktion
Da die von StackExchange hinzugefügte Zeilenhöhe die Zeilen aufteilt, sollten Sie dies wie gewohnt
$('pre').css('line-height',1)
in Ihrer Browserkonsole beheben.Im Gegensatz zu meinen anderen Funciton-Antworten werden hier keine Funktionsdeklarationen verwendet. Es ist nur ein Programm. Es wird jedoch ein Lambda-Ausdruck verwendet - eine Funktion, die ich im Dezember zu Funciton hinzugefügt habe :)
Erwartet die Eingabe als drei Dezimalzahlen (kann negativ sein), die durch Leerzeichen (dh
x y z
) getrennt sind. Tatsächlichz
kann es sich um eine beliebige Zeichenfolge handeln. Zum Beispiel könnte es nur das Minuszeichen (−
, U + 2212) sein, um die Anzahl der negativen Zahlen im Intervall zu zählen :)quelle
C #
Beispiel
quelle
.Range
akzeptiert(int start, int count)
, nicht(start, end)
. IchAPL (29)
Dies ist eine Funktion, die
Z
das linke Argument und das Intervall[X,Y]
als rechtes Argument verwendet:quelle
Python 2.7
Need for Speed
Erläuterung
Implementierung
Demo
Vergleich
@ Tennis
@arshajii
quelle
key
kann eine beliebige ganze Zahl sein , keine Ziffer zwischenlo
undhi
.Python 2.7
Eine Lösung mit regulären Ausdrücken:
quelle
re.findall
in einem__import__('re').findall('\d...
bash -
32311714 Zeichen + Länge von X, Y und Z.Vielen Dank an devnull für den Vorschlag
seq
!zB X = 100, Y = 200, Z = 20
zB X = 100, Y = 200, Z = 10
zB X = 0, Y = 1000000, Z = 2
quelle
echo
wenn Sieseq
die Länge um 4 Zeichen reduzieren könnten ? (1 für die Befehlslänge, 2 für das Weglassen von geschweiften Klammern und 1 für das Ersetzen..
durch ein einzelnes Leerzeichen)xargs
undwc
- und es läuft auch viel schneller!PHP
Nichts Originelles, ich feiere gerade meinen ersten Post hier.
Eingang
Ausgabe
quelle
Scala:
args(0).toInt to args(1).toInt count (_.toString contains args(2))
quelle
Rubin
Dies ist ein großartiges Beispiel für die Verwendung von redu!
Eingang:
Ausgabe:
quelle
Python Golf - 61
Python nicht Golf
quelle
Java8
Bei Verwendung des neuen IntStream-Materials handelt es sich im Wesentlichen um einen Einzeiler, wenn Sie das obligatorische Java Framework-Material ignorieren:
Es kann hier ausgeführt werden , obwohl ich die Werte hart codieren musste.
quelle
F #
Diese Lösung
IndexOf
durchsucht den String und konvertiert das Ergebnis mit ein wenig Zahlenfummel in 1, wenn es gefunden wird, und 0, wenn es nicht gefunden wird, und summiert das Ergebnis:Und so kann es heißen:
quelle
Regulären Ausdruck
Im Folgenden werden die Ziffern von 1 bis 49 gezählt.
quelle
R 23
2527ZeichenHolen Sie sich einfach das richtige Werkzeug für den Job. Einfache Verwendung von grep in R, nichts Besonderes.
Dies ist, was es tut:
grep
Alle Instanzen von2
im Vektor0
bis10e6
und zählen die Anzahl der Ergebnisse mitlength
.length(grep(2,0:100000,value=TRUE))
Ergebnis:
[1] 468559
Natürlich können Sie eine Funktion schreiben, die die Zahlen als Eingabe verwendet, so wie es im Beispiel gezeigt wird.
Jetzt können Sie
count
mit x, y und z aufrufen , wenn nicht gesetzt (dh standardmäßig), sind die Werte für x, y und z 0, 1000000 bzw. 2. Einige Beispiele:oder
oder
Einige hier denken, Zeit ist von Bedeutung, die Verwendung dieser Funktion in R dauert etwa 1 Sekunde.
quelle
JavaScript (ES6), 63
Verwendung:
Nicht golfen:
quelle
Rubin
Grundsätzlich habe ich Pablos Antwort als nicht so gutes Anwendungsbeispiel genommen und halbgolfen (38 Zeichen, wenn Sie unnötiges Leerzeichen einfügen)
select
.Es wählt jeden Index in dem Bereich aus
(x .. y)
, der enthältz
. Dieses Zwischenergebnis wird leider in einem Array gespeichert, dessen Größe dann zurückgegeben wird.Es sieht sowohl syntaktisch als auch semantisch ziemlich ordentlich aus, obwohl der
i[z]
Teil nicht wirklich sinnvoll zu sein scheint.Es funktioniert, weil
x
undy
eigentlich sind Zeichenfolgen, keine Zahlen! Somit ist jedesi
auch eine Zeichenkette undi[z]
prüft natürlich, ob die Zeichenkettez
enthalten isti
.quelle
Python 2.7, 70 Zeichen
Kürzere, 65 Zeichen
quelle
range(0,y+1)
wenn Sierange(y+1)
dasselbe tun. Sie können auch die meisten dieser Räume entfernen, wenn Sie Golf spielen ...Ruby's verwenden
Enumerable#grep
:quelle
T-SQL
Wenn ich Variablen annehmen können
@X
,@Y
und@Z
stehen zur Verfügung:Mit einer (beliebig großen;) vorhandenen Nummerntabelle - 65
Mit einem rekursiven CTE - 127
Wenn die Variablen explizit definiert werden müssen:
Addiere 58 zu beiden Antworten - Zahlentabelle: 123, Rekursiver CTE: 185
Ich habe keine Ahnung, wie viel Speicher der rekursive CTE verwenden kann, aber er wird sicherlich keine Geschwindigkeitswettbewerbe gewinnen. Das Beispiel für die Suche nach 2 in 0 bis 1000000 dauert auf meinem System 8 Sekunden.
Hier ist eine SQL-Geige, wenn jemand damit spielen möchte. Die 1000000-Abfrage dauert mehr als 30 Sekunden.
quelle
Rebol
Anwendungsbeispiel in der Rebol-Konsole (REPL):
quelle
Power Shell
Zwei Lösungen, beide
40 bis37 Zeichen.Für alle Versionen von PowerShell:
PowerShell V3 und höher haben den
sls
Alias fürSelect-String
. Dies erfordert das@
Erzwingen eines Arrays, wenn nur ein Wert die Pipeline durchläuft.quelle
Stapel
Etwas besser lesbar -
Schön und einfach. Verwendet die Zeichenfolgenmanipulation, um zu überprüfen, ob die Variable
!b!
dieselbe ist wie sie selbst, ohne die dritte Benutzereingabe%3
(!b:%3=!
).quelle
Mathematica
Erster Weg: Streicher
x, y, z
werden in Zeichenfolgen konvertiert. Wenn eine String-Ganzzahl nicht frei istz
, wird sie gezählt.Beispiele
Zweiter Weg: Ziffernlisten
Beispiele
quelle
GolfScript
Ich habe versucht, meine GolfScript-Kenntnisse zu verbessern, also dachte ich, ich würde es mit dieser Frage versuchen. Folgendes habe ich mir ausgedacht:
Dies kann wie folgt aufgeteilt werden:
Obwohl es sich um GolfScript handelt, bestand das Ziel eher darin, es relativ effizient als kompakt zu gestalten. Ich bin mir also sicher, dass jemand verschiedene Möglichkeiten aufzeigen kann, wie dies verbessert werden kann.
Demonstration : Beachten Sie, dass ich Y in der Demo reduziert habe, damit sie in weniger als 5 Sekunden abgeschlossen werden kann.
quelle
PHP - 112
Keine sichtbaren Schleifen, aber etwas speicherintensiv!
Verwendung
php script.php 0 1000000 2
quelle
ECMAScript 3 bis 6
(Javascript, JScript usw.)mit Regex:
Nervenzusammenbruch:
using indexOf:
Nervenzusammenbruch:
Dieser Funktionskörper ist ein Zeichen weniger als der von Florent. Wenn Sie also die ES6-
=>
Funktionsnotation verwenden, beträgt die Gesamtsumme 62 ZeichenBeispielaufruf:
f(0,1e6,2)
Beispielanwendung:
alert( f(0,1e6,2) );
JSFiddle hier
PS: Die beiden obigen Funktionen geben ihre lokale Variable zurück
r
.Wenn Sie also die Ergebnisvariable
r
in den globalen Bereich verschieben, können Sie erneut 10 Zeichen speichern:Beispiel Verwendung:
alert( f(0,1e6,2)||r );
quelle
Delphi - 120
Für meinen Geschmack ein bisschen zu viel, um zu sehen, ob ich was davon kriegen kann.
quelle
Python 2.7 - 50 Zeichen
Eine kleine Ersparnis bei den vorhandenen Python-Antworten.
Mit den folgenden Tricks:
z+x
inn
'In Aktion:
quelle
k [28 Zeichen]
Verwendung
quelle
$:[z]
mit($z)
.