Исходя из вопроса, сколько положительных целых чисел <1 000 000 содержит цифру 2? , Я ищу наиболее креативное решение для подсчета всех целых чисел от X
до , Y
содержащих целое число Z
. Z
может быть от 0 до Y
.
Каждое найденное целое число считается только один раз, даже если оно Z
появляется чаще. Например:
Z = 2
123 counts 1
22222 also counts 1
Я начну с очень простого алгоритма, написанного на Java (потому что он любим всеми):
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);
}
}
если вы запустите это с
java -jar Count.jar 0 1000000 2
Вы получите это в результате:
468559
Потому что эту проблему не сложно решить, это всего лишь конкурс популярности . Ответ с наибольшим количеством голосов, опубликованный 28 февраля, побеждает!
popularity-contest
counting
Обл Тобл
источник
источник
N
может быть,123
и это будет соответствовать, только если существует подстрока 123?Ответы:
Баш (20)
использование
источник
Funciton
Как обычно, так как высота строки, добавленная StackExchange, разбивает строки, рассмотрите возможность выполнения
$('pre').css('line-height',1)
в консоли браузера, чтобы это исправить.В отличие от моих других ответов Funciton, этот не использует никаких объявлений функций. Это просто программа. Однако в нем используется лямбда-выражение - функция, которую я добавил в Funciton в декабре :)
Ожидает ввод в виде трех десятичных целых чисел (может быть отрицательным), разделенных пробелами (то есть
x y z
). На самом делеz
может быть любая строка; например, это может быть только знак минус (−
, U + 2212) для подсчета количества отрицательных чисел в интервале :)источник
C #
пример
источник
.Range
принимает(int start, int count)
, нет(start, end)
. Я всегдаAPL (29)
Эта функция принимает
Z
левый аргумент, а интервал[X,Y]
- правый аргумент:источник
Python 2.7
Жажда Скорости
объяснение
Реализация
демонстрация
сравнение
@Dennis
@arshajii
источник
key
может быть любым целым числом , а не цифрой, междуlo
иhi
.Python 2.7
Решение с использованием регулярных выражений:
источник
re.findall
в одной__import__('re').findall('\d...
Баш -
32311714 символов + длина X, Y и ZСпасибо Devnull за предложение
seq
!например, X = 100, Y = 200, Z = 20
например, X = 100, Y = 200, Z = 10
например, X = 0, Y = 1000000, Z = 2
источник
echo
when you could useseq
and reduce the length by 4 characters? (1 for length of command, 2 for being able to omit curly braces and 1 for replacing..
with a single space)xargs
andwc
- and it also runs much faster!PHP
Nothing original, just celebrating my first post here.
Input
Output
источник
Scala:
args(0).toInt to args(1).toInt count (_.toString contains args(2))
источник
Рубин
Это отличный пример использования Reduce!
Входные данные:
Выход:
источник
Питон гольф - 61
Питон не гольф
источник
Java8
Используя новый материал IntStream, это становится по существу одним вкладышем, если вы игнорируете обязательный материал Java Framework:
Его можно запустить здесь , хотя мне пришлось жестко задавать значения.
источник
F#
This solution uses
IndexOf
to search the string, then a little bit of number fiddling to convert the result to 1 if found, and 0 if not found, then sums the result:And it can be called like this:
источник
Regular Expression
Following will count 1's digits up to 49.
источник
R 23
2527charsJust get the right tool for the job. Simple use of grep in R, nothing fancy.
This is what it does:
grep
all instances of2
in the vector0
until10e6
and count the number of results usinglength
.length(grep(2,0:100000,value=TRUE))
Result:
[1] 468559
Offcourse you can write a function that takes the numbers as an input, just like it is shown in the example.
Now you can call
count
with with x, y and z, if unset (that is by default), the values for x, y and z are 0, 1000000 and 2 respectively. Some examples:or
or
Some here think time is of importance, using this function in R takes around 1 second.
источник
JavaScript (ES6), 63
Usage:
Un-golfed:
источник
Ruby
Basically I took Pablo's answer and semi-golfed (38 chars if you drop unnecessary whitespace) it into a not-so-great example of using
select
.It selects every index in the range
(x .. y)
that containsz
. This intermediate result is unfortunately stored in an array, whose size is then returned.It looks pretty neat both syntactically and semantically, although the
i[z]
part doesn't really seem to make sense.It works because
x
andy
actually are strings, not numbers! Thus eachi
is also a string, andi[z]
of course checks if the stringz
is contained ini
.источник
Python 2.7, 70 signs
Shorter, 65 signs
источник
range(0,y+1)
ifrange(y+1)
does the same thing. Also, you can remove most of those spaces if you're golfing...Using Ruby's
Enumerable#grep
:источник
T-SQL
If I can assume variables
@X
,@Y
, and@Z
are available:With an (arbitrarily large ;) existing numbers table - 65
With a recursive CTE - 127
If the variables need to be defined explicitly:
Add 58 to both answers -- Numbers table: 123, Recursive CTE: 185
I have no idea how much memory the recursive CTE can use, but it's certainly not going to win any speed contests. The example of searching for 2 in 0 to 1000000 takes 8 seconds on my system.
Here's a SQL Fiddle if anyone wants to play with it. The 1000000 query takes 30+ seconds to run.
источник
Rebol
Usage example in Rebol console (REPL):
источник
PowerShell
Two solutions, both
4037 chars.For all versions of PowerShell:
PowerShell V3 and up have the
sls
alias forSelect-String
. This requires the@
to force an array if only one value makes it through the pipeline.источник
Batch
A bit more readable -
Nice and simple. Uses string manipulation to check if the variable
!b!
is the same as itself without the third user input,%3
(!b:%3=!
).источник
Mathematica
First way: strings
x, y, z
are converted to strings. If a string-integer is not free ofz
, it is counted.Examples
Second way: lists of digits
Examples
источник
GolfScript
I've been trying to improve my GolfScript skills so I thought I'd give it a shot with this question. Here's what I came up with:
This can be broken down like this:
Even though it's GolfScript, by goal was more to try to make it relatively efficient rather than compact, so I'm sure that someone can point out various ways this can be improved.
Demonstration: Note that I've reduced Y in the demo so that it can complete in < 5 seconds.
источник
PHP - 112
No visible loops, but a bit heavy on memory!
Usage
php script.php 0 1000000 2
источник
ECMAScript 3 to 6
(javascript, JScript, etc)using regex:
breakdown:
using indexOf:
breakdown:
this function-body is one char less then florent's, so when using ES6
=>
function notation the total would be 62 charExample call:
f(0,1e6,2)
Example use:
alert( f(0,1e6,2) );
JSFiddle here
PS: both functions above return their local variable
r
.So when leaking the result variable
r
into the global scope, one can again save 10 characters:Example use:
alert( f(0,1e6,2)||r );
источник
Delphi - 120
Bit to much for my taste, going to see if i can get some off.
источник
Python 2.7 - 50 chars
Bit of a saving on the existing Python answers.
Using the following tricks:
z+x
inn
'In action:
источник
k [28 chars]
Usage
источник
$:[z]
with($z)
.