Basado en la pregunta ¿Cuántos enteros positivos <1,000,000 contienen el dígito 2? . Estoy buscando la solución más creativa para contar todos los números enteros desde X
que Y
contienen el número entero Z
. Z
puede ser de 0 a Y
.
Cada entero encontrado solo cuenta una vez, incluso si el entero Z
aparece con más frecuencia. Por ejemplo:
Z = 2
123 counts 1
22222 also counts 1
Comenzaré con un algoritmo realmente simple escrito en Java (porque es amado por todos):
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 ejecutas esto con
java -jar Count.jar 0 1000000 2
obtienes esto como resultado:
468559
Debido a que este problema no es difícil de resolver, es solo un concurso de popularidad . ¡La respuesta más votada publicada el 28 de febrero gana!
popularity-contest
counting
Obl Tobl
fuente
fuente
N
puede ser123
y solo coincidiría si la subcadena 123 existe?Respuestas:
golpe (20)
Uso
fuente
Funciton
Como de costumbre, dado que la altura de línea agregada por StackExchange divide las líneas, considere ejecutar
$('pre').css('line-height',1)
en la consola de su navegador para solucionarlo.A diferencia de mis otras respuestas de Funciton, esta no usa ninguna declaración de función. Es solo un programa. Sin embargo, utiliza una expresión lambda, una característica que agregué a Funciton en diciembre :)
Espera la entrada como tres enteros decimales (pueden ser negativos) separados por espacios (es decir
x y z
). De hecho,z
puede ser cualquier cadena; por ejemplo, podría ser solo el signo menos (−
, U + 2212) para contar el número de números negativos en el intervalo :)fuente
C#
Ejemplo
fuente
.Range
acepta(int start, int count)
, no(start, end)
. Siempre caigo en esta trampa yo mismo :)APL (29)
Esta es una función que toma
Z
como argumento izquierdo y el intervalo[X,Y]
como argumento derecho:fuente
Python 2.7
Necesidad de la velocidad
Explicación
Implementación
Manifestación
Comparación
@Dennis
@arshajii
fuente
key
puede ser cualquier número entero , no dígito, entrelo
yhi
.Python 2.7
Una solución usando expresiones regulares:
fuente
re.findall
en una sola línea haciendo__import__('re').findall('\d...
bash
32311714 caracteres + longitud de X, Y y ZGracias a devnull por sugerir
seq
!Por ejemplo, X = 100, Y = 200, Z = 20
Por ejemplo, X = 100, Y = 200, Z = 10
Por ejemplo, X = 0, Y = 1000000, Z = 2
fuente
echo
cuando podrías usarseq
y reducir la longitud en 4 caracteres? (1 para la longitud del comando, 2 para poder omitir llaves y 1 para reemplazar..
con un solo espacio)xargs
ewc
- y también se ejecuta mucho más rápido!PHP
Nada original, solo celebrando mi primer post aquí.
Entrada
Salida
fuente
Scala:
args(0).toInt to args(1).toInt count (_.toString contains args(2))
fuente
Rubí
Este es un gran ejemplo para usar reduce!
Entrada:
Salida:
fuente
Python golf - 61
Python no golf
fuente
Java8
Usando el nuevo material IntStream, esto se convierte esencialmente en una línea, si ignora el material obligatorio de Java Framework:
Se puede ejecutar aquí , aunque tuve que codificar los valores.
fuente
F#
Esta solución utiliza
IndexOf
para buscar la cadena, luego un poco de violín numérico para convertir el resultado a 1 si se encuentra, y 0 si no se encuentra, luego suma el resultado:Y se puede llamar así:
fuente
Expresión regular
A continuación se contarán los dígitos de 1 hasta 49.
fuente
R 23
2527caracteresSimplemente obtenga la herramienta adecuada para el trabajo. Uso simple de grep en R, nada lujoso.
Esto es lo que hace:
grep
todas las instancias2
en el vector0
hasta10e6
y cuentan el número de resultados usandolength
.length(grep(2,0:100000,value=TRUE))
Resultado:
[1] 468559
Por supuesto, puede escribir una función que tome los números como entrada, tal como se muestra en el ejemplo.
Ahora puede llamar
count
con x, y y z, si no está configurado (es decir, por defecto), los valores para x, y y z son 0, 1000000 y 2 respectivamente. Algunos ejemplos:o
o
Algunos piensan que el tiempo es importante, usar esta función en R toma alrededor de 1 segundo.
fuente
JavaScript (ES6), 63
Uso:
Sin golf:
fuente
Rubí
Básicamente, tomé la respuesta de Pablo y la jugué semi-golf (38 caracteres si elimina espacios en blanco innecesarios) en un ejemplo no tan bueno de uso
select
.Selecciona cada índice en el rango
(x .. y)
que contienez
. Lamentablemente, este resultado intermedio se almacena en una matriz, cuyo tamaño se devuelve.Se ve muy bien tanto sintácticamente como semánticamente, aunque la
i[z]
parte realmente no parece tener sentido.¡Funciona porque
x
y eny
realidad son cadenas, no números! Por lo tanto, cada unoi
también es una cadena y,i[z]
por supuesto, comprueba si la cadenaz
está contenidai
.fuente
Python 2.7, 70 signos
Más corto, 65 signos
fuente
range(0,y+1)
sirange(y+1)
hace lo mismo. Además, puede eliminar la mayoría de esos espacios si está jugando al golf ...Usando Ruby
Enumerable#grep
:fuente
T-SQL
Si yo puedo asumir las variables
@X
,@Y
y@Z
se encuentran disponibles:Con una tabla de números existentes (arbitrariamente grande;) - 65
Con un CTE recursivo - 127
Si las variables deben definirse explícitamente:
Agregue 58 a ambas respuestas - Tabla de números: 123, CTE recursivo: 185
No tengo idea de cuánta memoria puede usar el CTE recursivo, pero ciertamente no va a ganar ningún concurso de velocidad. El ejemplo de buscar 2 en 0 a 1000000 toma 8 segundos en mi sistema.
Aquí hay un SQL Fiddle si alguien quiere jugar con él. La consulta 1000000 tarda más de 30 segundos en ejecutarse.
fuente
Rebol
Ejemplo de uso en la consola Rebol (REPL):
fuente
Potencia Shell
Dos soluciones, ambas
4037 caracteres.Para todas las versiones de PowerShell:
PowerShell V3 y superior tienen el
sls
alias paraSelect-String
. Esto requiere@
forzar una matriz si solo un valor pasa a través de la tubería.fuente
Lote
Un poco más legible
Agradable y simple Utiliza la manipulación de cadenas para verificar si la variable
!b!
es la misma sin la entrada del tercer usuario,%3
(!b:%3=!
).fuente
Mathematica
Primera forma: cuerdas
x, y, z
se convierten en cadenas. Si un entero de cadena no está librez
, se cuenta.Ejemplos
Segunda forma: listas de dígitos
Ejemplos
fuente
GolfScript
He estado tratando de mejorar mis habilidades de GolfScript, así que pensé en intentarlo con esta pregunta. Esto es lo que se me ocurrió:
Esto puede desglosarse así:
Aunque se trata de GolfScript, el objetivo era más tratar de hacerlo relativamente eficiente en lugar de compacto, por lo que estoy seguro de que alguien puede señalar varias formas en que esto puede mejorarse.
Demostración : tenga en cuenta que he reducido Y en la demostración para que pueda completarse en <5 segundos.
fuente
PHP - 112
No hay bucles visibles, pero un poco pesado en la memoria!
Uso
php script.php 0 1000000 2
fuente
ECMAScript 3 a 6
(javascript, JScript, etc.)usando expresiones regulares:
Descompostura:
usando indexOf:
Descompostura:
este cuerpo de función es un char menos que el de florent, por lo que cuando se usa la
=>
notación de función ES6 el total sería 62 charLlamada de ejemplo:
f(0,1e6,2)
Ejemplo de uso:
alert( f(0,1e6,2) );
JS Violín aquí
PD: ambas funciones anteriores devuelven su variable local
r
.Entonces, al filtrar la variable de resultado
r
en el alcance global, uno puede guardar nuevamente 10 caracteres:Ejemplo de uso:
alert( f(0,1e6,2)||r );
fuente
Delphi - 120
Poco para mi gusto, voy a ver si puedo sacar algo.
fuente
Python 2.7 - 50 caracteres
Un poco de ahorro en las respuestas existentes de Python.
Usando los siguientes trucos:
z+x
enn
'En acción:
fuente
k [28 caracteres]
Uso
fuente
$:[z]
con($z)
.