Basé sur la question Combien d’entiers positifs <1 000 000 contiennent le chiffre 2? . Je cherche la solution la plus créative pour compter tous les Entiers de X
la Y
contenant l'entier Z
. Z
peut aller de 0 à Y
.
Chaque entier trouvé ne compte qu'une seule fois, même si l'entier Z
apparaît plus souvent. Par exemple:
Z = 2
123 counts 1
22222 also counts 1
Je vais commencer par un algorithme très simple écrit en Java (car il est apprécié de tous):
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);
}
}
si vous exécutez cela avec
java -jar Count.jar 0 1000000 2
vous obtenez ceci comme résultat:
468559
Parce que ce problème n'est pas difficile à résoudre, c'est juste un concours de popularité . La réponse la plus votée publiée le 28 février gagne!
popularity-contest
counting
Obl Tobl
la source
la source
N
peut être le cas123
et ne correspondrait que si la sous-chaîne 123 existe?Réponses:
bash (20)
Usage
la source
Funciton
Comme d'habitude, étant donné que la hauteur de ligne ajoutée par StackExchange rompt les lignes, pensez à exécuter
$('pre').css('line-height',1)
dans la console de votre navigateur pour résoudre ce problème.Contrairement à mes autres réponses Funciton, celle-ci n'utilise aucune déclaration de fonction. C'est juste un programme. Il utilise cependant une expression lambda - une fonctionnalité que j'ai ajoutée à Funciton en décembre :)
Attend l'entrée comme trois entiers décimaux (peuvent être négatifs) séparés par des espaces (ie
x y z
). En fait,z
peut être n'importe quelle chaîne; par exemple, ce pourrait être juste le signe moins (−
, U + 2212) pour compter le nombre de nombres négatifs dans l'intervalle :)la source
C #
Exemple
la source
.Range
accepte(int start, int count)
, non(start, end)
. Je tombe toujours dans ce piège moi-même :)APL (29)
C'est une fonction qui prend
Z
comme argument de gauche et l'intervalle[X,Y]
comme argument de droite:la source
Python 2.7
Besoin de vitesse
Explication
la mise en oeuvre
Démo
Comparaison
@Dennis
@arshajii
la source
key
peut être n'importe quel entier , pas un chiffre, entrelo
ethi
.Python 2.7
Une solution utilisant des expressions régulières:
la source
re.findall
dans un one-liner en faisant__import__('re').findall('\d...
bash -
32311714 caractères + longueur de X, Y et ZMerci à devnull d'avoir suggéré
seq
!par exemple X = 100, Y = 200, Z = 20
par exemple X = 100, Y = 200, Z = 10
par exemple X = 0, Y = 1000000, Z = 2
la source
echo
quand vous pouvez utiliserseq
et réduire la longueur de 4 caractères? (1 pour la durée de la commande, 2 pour pouvoir omettre les accolades et 1 pour les remplacer..
par un seul espace)xargs
etwc
- et il fonctionne aussi beaucoup plus rapide!PHP
Rien d'original, juste célébrer mon premier post ici.
Contribution
Production
la source
Scala:
args(0).toInt to args(1).toInt count (_.toString contains args(2))
la source
Rubis
Ceci est un excellent exemple pour utiliser réduire!
Contribution:
Production:
la source
Golf de Python - 61
Python non-golf
la source
Java8
En utilisant les nouveaux trucs IntStream, cela devient essentiellement une ligne unique, si vous ignorez les trucs Java Framework obligatoires:
Il peut être exécuté ici , même si j'ai dû coder en dur les valeurs.
la source
F#
Cette solution utilise
IndexOf
pour rechercher la chaîne, puis un peu de tripotage pour convertir le résultat en 1 s'il est trouvé, et 0 s'il n'est pas trouvé, puis résume le résultat:Et cela peut être appelé comme ceci:
la source
Expression régulière
La suite comptera les chiffres de 1 jusqu'à 49.
la source
R 23
2527caractèresObtenez juste le bon outil pour le travail. Utilisation simple de grep dans R, rien d'extraordinaire.
C'est ce qu'il fait:
grep
toutes les instances de2
dans le vecteur0
jusqu'à10e6
et compter le nombre de résultats en utilisantlength
.length(grep(2,0:100000,value=TRUE))
Résultat:
[1] 468559
Offcourse, vous pouvez écrire une fonction qui prend les nombres en entrée, tout comme cela est illustré dans l'exemple.
Vous pouvez maintenant appeler
count
avec avec x, y et z, si non défini (c'est-à-dire par défaut), les valeurs de x, y et z sont respectivement 0, 1000000 et 2. Quelques exemples:ou
ou
Certains pensent que le temps est important, l'utilisation de cette fonction dans R prend environ 1 seconde.
la source
JavaScript (ES6), 63
Usage:
Non golfé:
la source
Rubis
Fondamentalement, j'ai pris la réponse de Pablo et semi-golfé (38 caractères si vous laissez des espaces inutiles) dans un exemple pas si génial d'utiliser
select
.Il sélectionne chaque index de la plage
(x .. y)
qui contientz
. Ce résultat intermédiaire est malheureusement stocké dans un tableau, dont la taille est ensuite renvoyée.Cela semble assez soigné à la fois syntaxiquement et sémantiquement, bien que la
i[z]
partie ne semble pas vraiment logique.Cela fonctionne parce
x
que cey
sont des chaînes et non des nombres! Ainsi, chacuni
est également une chaîne eti[z]
vérifie bien sûr si la chaînez
est contenue dansi
.la source
Python 2.7, 70 signes
Plus court, 65 signes
la source
range(0,y+1)
serange(y+1)
fait la même chose. De plus, vous pouvez supprimer la plupart de ces espaces si vous jouez au golf ...Utilisation de Ruby
Enumerable#grep
:la source
T-SQL
Si je peux prendre des variables
@X
,@Y
et@Z
sont disponibles:Avec un tableau de nombres (arbitrairement grand;) - 65
Avec un CTE récursif - 127
Si les variables doivent être définies explicitement:
Ajoutez 58 aux deux réponses - Tableau des nombres: 123, CTE récursif: 185
Je n'ai aucune idée de la quantité de mémoire que le CTE récursif peut utiliser, mais cela ne gagnera certainement pas de concours de vitesse. L'exemple de recherche de 2 en 0 à 1000000 prend 8 secondes sur mon système.
Voici un SQL Fiddle si quelqu'un veut jouer avec. La requête 1000000 prend plus de 30 secondes pour s'exécuter.
la source
Rebol
Exemple d'utilisation dans la console Rebol (REPL):
la source
PowerShell
Deux solutions, les deux
4037 caractères.Pour toutes les versions de PowerShell:
PowerShell V3 et versions ultérieures ont l'
sls
alias pourSelect-String
. Cela nécessite@
de forcer un tableau si une seule valeur traverse le pipeline.la source
Lot
Un peu plus lisible -
Agréable et simple. Utilise la manipulation de chaînes pour vérifier si la variable
!b!
est identique à elle-même sans la troisième entrée utilisateur,%3
(!b:%3=!
).la source
Mathematica
Première façon: les cordes
x, y, z
sont convertis en chaînes. Si un entier de chaîne n'est pas exempt dez
, il est compté.Exemples
Deuxième voie: listes de chiffres
Exemples
la source
GolfScript
J'ai essayé d'améliorer mes compétences GolfScript, donc j'ai pensé que je pourrais essayer cette question. Voici ce que j'ai trouvé:
Cela peut être décomposé comme ceci:
Même s'il s'agit de GolfScript, l'objectif était plus d'essayer de le rendre relativement efficace plutôt que compact, donc je suis sûr que quelqu'un peut indiquer différentes façons d'améliorer cela.
Démonstration : Notez que j'ai réduit Y dans la démo pour qu'elle puisse se terminer en <5 secondes.
la source
PHP - 112
Pas de boucles visibles, mais un peu lourd en mémoire!
Usage
php script.php 0 1000000 2
la source
ECMAScript 3 à 6
(javascript, JScript, etc.)en utilisant regex:
panne:
en utilisant indexOf:
panne:
ce corps de fonction est un caractère de moins que celui de florent, donc lorsque vous utilisez la
=>
notation de fonction ES6 , le total serait de 62 caractèresExemple d'appel:
f(0,1e6,2)
Exemple d'utilisation:
alert( f(0,1e6,2) );
JSFiddle ici
PS: les deux fonctions ci-dessus renvoient leur variable locale
r
.Ainsi, lors de la fuite de la variable de résultat
r
dans la portée globale, on peut à nouveau enregistrer 10 caractères:Exemple d'utilisation:
alert( f(0,1e6,2)||r );
la source
Delphi - 120
Un peu trop à mon goût, je vais voir si je peux en retirer.
la source
Python 2.7 - 50 caractères
Un peu d'économie sur les réponses Python existantes.
En utilisant les astuces suivantes:
z+x
dansn
»En action:
la source
k [28 caractères]
Usage
la source
$:[z]
par($z)
.