Cuántos enteros contienen un número en un rango específico


19

El programa debe ingresar el número, el inicio del rango y el final del rango, y mostrar cuántos enteros aparece el número entre el inicio y el final del rango, inclusive . Se permiten tanto programas como funciones.

Entradas de ejemplo

Por ejemplo:

//Input example 1
3,1,100
//Input example 2
3
1
100
//Input example 3
3 1 100
//Input example 4
a(3, 1, 100);

Los cuatro ejemplos de entrada anteriores son válidos y todos ellos significan que 3es el número en cuestión, 1es el comienzo del rango y 100el final del rango.

Y a continuación, el programa debe ser la salida cuántas veces 3aparece en el rango de 1al 100 incluyente . 3aparece en los números enteros 3, 13, 23, 30, 31, 32, 33, ..., 93en un total de 19 veces. Entonces, el programa debería salir 19como salida porque esa es la cantidad de veces que 3aparece en el rango de 1a 100.

Reglas

  • Se permiten tanto programas como funciones.
  • Todos los números serán números enteros, lo que significa que habrá no haber ningún floats o doubles.
  • Nota: el número buscado siempre estará en el rango 0≤x≤127. Habrá hay casos en los que será fuera de esta 0≤x≤127gama.
  • Como en el primer ejemplo, con el caso como 33, el número 3se contará como aparece solo una vez , no dos veces.
  • Los valores del inicio y el final del rango serán entre -65536e 65535inclusive.
  • El valor del inicio del rango nunca excederá o será igual al final del rango. start < end
  • También el rango es inclusivo. Por ejemplo, si la entrada fue 8 8 10, el rango sería 8≤x≤10y, por lo tanto, la salida será 1.
  • La entrada se puede tomar de cualquiera de las formas que se muestran en los ejemplos. La entrada puede tomarse como una cadena o como un número, de la forma que desee.

Casos de prueba

3 1 100
19

3 3 93
19

12,-200,200
24          //This is because 12 appears in -129, -128, ..., -112, -12, 12, 112, 120, 121, 122, ...

123,1,3
0           //This is because all of 123's digits have to appear in the same order

3 33 34
2           //Because 3 appears in 2 numbers: 33 and 34

a(0,-1,1);
1

$ java NotVerbose 127 -12 27
0

Snack Snippet

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

# Perl, 43 + 2 (-p flag) = 45 bytes

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Respuestas:


8

05AB1E , 6 bytes

Entrada en el formulario: límite superior , límite inferior , número .

Ÿvy³åO

Explicación:

Ÿ       # Inclusive range, [a, ..., b]
 vy     # For each element...
   ³å   # Check if the third input is a substring of the number
     O  # Sum up the results

Utiliza la codificación CP-1252 . Pruébalo en línea!


44
Elige Groovy {a,b,c->} Aww ... dangit, perdí antes de comenzar de nuevo.
Urna mágica de pulpo el

¡Felicidades por ganar este desafío!
Kritixi Lithos

@KritixiLithos ¡Gracias! :)
Adnan

Alternativa de 6 bytes:Ÿʒ³å}g
Kevin Cruijssen

9

Bash, 20 bytes

la respuesta obvia

seq $2 $3|grep -c $1

ejemplo

$ bash golf 3 1 100
19

6

Perl, 20 bytes

Se guardaron 2 bytes usando grepcomo en la respuesta de @ ardnew .

Bytecount incluye 18 bytes de código y -apbanderas.

$_=grep/@F/,<>..<>

Dé los 3 números en tres líneas separadas:

perl -ape '$_=grep/@F/,<>..<>' <<< "3
1
100"

5

Python 2, 47 43 Bytes

Relativamente sencillo, haciendo uso de la forma reprcorta de Python 2 .

f=lambda n,a,b:a<b and(`n`in`a`)+f(n,-~a,b)

Ouput:

f(  3,    1, 100) -> 19
f(  3,    3,  93) -> 19
f( 12, -200, 200) -> 24
f(123,    1,   3) -> 0
f(  3,   33,  34) -> 2
f(  0,   -1,   1) -> 1
f(127,   12,  27) -> 0

¿Por qué tenías que ser elegante y usar en -~alugar de a+1?
Artyer

1
@Artyer por diversión!
Kade

4

JavaScript (ES6), 46 45 bytes

f=(n,s,e)=>s<=e&&!!`${s++}`.match(n)+f(n,s,e)

(Mi mejor versión no recursiva fue de 61 bytes). Editar: Guardado 1 byte gracias a @ edc65.


!!matchen lugar de includes.
edc65

4

Jalea , 7 bytes

rAẇ@€⁵S

TryItOnline!

Entrada: Inicio, Fin, ToFind

¿Cómo?

rAẇ@€⁵S - Main link: Start, End, ToFind
r       - range: [Start, ..., End]
 A      - absolute values
     ⁵  - third input: ToFind
  ẇ@€   - sublist exists in with reversed @rguments for €ach
      S - sum

La conversión predeterminada de un entero a un iterable para la existencia de la sublista verifica la conversión a una lista decimal (no una lista de caracteres), por lo que los números negativos tienen un valor negativo inicial (por ejemplo, -122-> [-1,2,2]que no encontrará una sublista de [1,2]), por lo que El valor absoluto primero parece la solución más golfista.


4

PowerShell v2 +, 64 62 56 bytes

param($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count

-6 bytes gracias a mazzy

Entrada a través de argumentos de línea de comandos del número de formulario lower_bound upper_bound . Un poco tonto en la notación, debido a los puntos y comas dentro de los forerrores de análisis que causan si no está rodeado $(...)para crear un bloque de script. Básicamente, hacemos un bucle ascendente $ahasta que golpeamos $b, usando Where-Object(the |?{...}) para extraer esos números -matchcontra los que regexamos $c. Eso está encapsulado en parens, tomamos el .countmismo, y eso queda en la tubería y la salida está implícita.


Sin embargo, si garantizamos que el rango no será más de 50,000 elementos, podemos omitir el ciclo y simplemente usar el operador de rango ..directamente, para 45 43 bytes . Sin embargo, como eso no está en las especificaciones del desafío, esto no es válido. Gorrón.

param($c,$a,$b)($a..$b|?{$_-match$c}).count

¡Excelente! Gracias por la información de los elementos de 50K. Un par de sugerenciasparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy

Los param($c,$a,$b)($a..$b|?{$_-match$c}).counttrabajos con rango -65536..65535 enPowershell 5.1
mazzy

3

Vim, 46 , 41 bytes

C<C-r>=r<tab><C-r>")<cr><esc>jC0<esc>:g/<C-r>"/norm G<C-v><C-a>
kd{

La entrada está en este formato:

1, 100
3

2

Haskell, 65 bytes

import Data.List
(s#e)i=sum[1|x<-[s..e],isInfixOf(show i)$show x]

El importarruina el marcador. Ejemplo de uso: ((-200)#200)12-> 24.


El ejemplo de uso debería generar 24 porque 12 aparece 24 veces entre -200 y 200
Kritixi Lithos

@ KritixiLithos: ¡Lo siento! Por supuesto, es solo un error de copia y pase.
nimi

2

Java 7 85 bytes

int x(int a,int b,int c){int t=0;for(;b<=c;)if((b+++"").contains(a+""))t++;return t;}

2

Swift 3, 96 93 bytes

import Cocoa
func c(n:Int,s:Int,e:Int){print((s...e).filter{"\($0)".contains("\(n)")}.count)}

Editar 1:

Guardado 3 bytes mediante el uso de parámetros abreviados


2

Scala, 50 bytes

(c:String)=>(_:Int)to(_:Int)count(""+_ contains c)

toma la primera entrada al curry; llámalo así:f("12")(-200,200)

Explantación

(c:String)=>  //define an anonymous function taking a string parameter
  (_:Int)     //create a range from an anonymous int parameter
  to          //to
  (_:Int)     //another anonymous int parameter
  count(      //and count how many...
   ""+_       //elements converted to a string
   contains c //contain c
  )

2

R, 32 bytes

Bastante sencillo:

function(a,b,c)sum(grepl(a,b:c))

1
Bienvenido a PPCG! Buena respuesta, pero suponiendo que la entrada ya está especificada generalmente no se acepta. Para calificar su respuesta, tendría que leer la entrada de stdin como: a=scan();sum(grepl(a,a[2]:a[3]))o como argumentos de una función: function(a,b,c)sum(grepl(a,b:c))ambos equivalentes en este caso.
Billywob

@Billywob gracias, lo tendremos en cuenta! editó la respuesta en consecuencia.
Nutle

1

C #, 71 bytes

Batir mi respuesta Java gracias a lambdas

(t,l,u)=>{int d=0;for(;l<=u;)if((l+++"").Contains(t+""))d++;return d;};

Java también tiene lambdas
Kritixi Lithos

Sí acabo de empezar a leer sobre ello, pero no requieren un poco de materia repetitivo que haría que el ByteCount más grande, o no puedo contarlo
Yodle

Sin vergüenza robó respuesta Javascript @Grax s (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);es camino más corto
hstde

1

Ruby 44 bytes

m=->(n,s,f){(s..f).count{|x|x.to_s[/#{n}/]}}

Casos de prueba:

m.(3,1,100)     #=> 19
m.(3,3,93)      #=> 19
m.(12,-200,200) #=> 24
m.(123,1,3)     #=>  0
m.(3,33,34)     #=>  2
m.(0,-1,1)      #=>  1
m.(127,-12,27)  #=>  0

1

PHP, 62 bytes

Enfoque bastante directo:

<?=count(preg_grep('/'.($a=$argv)[1].'/',range($a[2],$a[3])));

Pruébalo en línea


Guarde 4 bytes con guión bajo o cualquier letra como delimitador de expresiones regulares. (no necesita comillas)
Tito

Puede guardar 3 Bytes<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg Hülsermann

1

C, 143 135 bytes

Gracias a @Kritixi Lithos por ayudar a ahorrar 8 bytes

Seguramente esto se puede hacer mejor, pero es lo mejor que tengo por ahora. C no maneja las cadenas con mucha gracia, por lo que, naturalmente, requiere bastantes operaciones.

int C(int N,int l,int h){char b[99],n[99];int t=0,i=1;sprintf(n,"%d",N);for(;i<=h;i++){sprintf(b,"%d",i);if(strstr(b,n))++t;}return t;}

Ungolfed + programa

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int C(int N,int l,int h)
{
    char b[99], n[99];
    int t=0,i=1;
    sprintf(n,"%d",N);
    for(;i<=h;i++)
    {
        sprintf(b,"%d",i);
        if(strstr(b,n))
            ++t;
    }
    return t;
}

int main()
{
  printf("%d\n", C(3, 1, 100));
}

Creo que puede eliminar el int i=ldel bucle for y, en su lugar, inicializarlo int t=0como tal int t=0,i=lpara guardar algunos bytes.
Kritixi Lithos

Esto no compila? C (N, l, h) {char b [99], n [99]; int t = 0, i = l; sprintf (n, "% d", N); para (; i <= h; i ++ ) {sprintf (b, "% d", i); if (strstr (b, n)) ++ t;} return t;} Creo que compilar incluso sin incluir ...
RosLuP

93 bytesb[9],n[9],t;C(N,l,h){for(t=!sprintf(n,"%d",N);l<=h;strstr(b,n)&&++t)sprintf(b,"%d",l++);N=t;}
ceilingcat el

1

JavaScript, 46 45 bytes

f=(i,s,e)=>s>e?0:RegExp(i).test(s)+f(i,++s,e)

Cuenta recursivamente hasta el inicio> fin

Editar: cambie a la prueba RegExp para guardar un byte


1

PHP, 68 63 bytes

for($a=$argv;$a[2]<=$a[3];)$o+=strstr($a[2]++,$a[1])>'';echo$o;

usar como:

 php -r "for($a=$argv;$a[2]<=$a[3];)$o+=strstr($a[2]++,$a[1])>'';echo$o;" 3 1 100

editar: 5 bytes guardados gracias a Titus


strstr($a[2]++,$a[1])>""en lugar de strpos($a[2]++,$a[1])!==falseguardar 5 bytes.
Titus

1

Powershell, 48 bytes

Según la regla, el rango puede contener más de 50,000 elementos. Por lo tanto, no podemos usar el operador de rango ..directamente. Gracias AdmBorkBork .

Sencillo:

param($c,$a,$b)for(;$a-le$b){$i+=$a++-match$c}$i

Script de prueba:

$f = {

param($c,$a,$b)for(;$a-le$b){$i+=$a++-match$c}$i

}

@(
    ,(19, 3,1,100)
    ,(19, 3,3,93)
    ,(24, 12,-200,200)
    ,(0, 123,1,3)
    ,(2, 3,33,34)
    ,(1, 0,-1,1)
    ,(0, 127,-12,27)
    ,(44175, 0,-65536,65535)
) | % {
    $e,$a = $_
    $r = &$f @a
    "$($e-eq$r): $r"
}

Salida:

True: 19
True: 19
True: 24
True: 0
True: 2
True: 1
True: 0
True: 44175

1

Japt , 14 8 bytes

Toma el entero como el último valor de entrada.

õV èÈsøW

Pruébalo en línea


Explicación

             :Implicit input of integers U=start, V=end & W=number
õV           :Range [U,V]
    È        :Map
     s       :  Convert to string
      øW     :  Contains W?
   è         :Count truthy values

Dado que las versiones anteriores carecen de una explicación, no estoy seguro de eso, pero me temo que su solución actual de 6 bytes es incorrecta. Ver esta regla: " Al igual que en el primer ejemplo, con el caso ya que 33, el número 3se contará como aparece sólo una vez, no dos veces. " Su ocurrencia de conteo para Wque cuente el 3doble.
Kevin Cruijssen

Gracias, @KevinCruijssen, regresó a eso ~ un mes después y se preguntaba por qué lo estaba haciendo como estaba cuando había una forma más corta: ¡debería haber releído el desafío antes de actualizar! Lo he vuelto a rodar ahora.
Shaggy

Me sucedió lo mismo varias veces. Veo mi respuesta, pienso: esto puede ser mucho más fácil, lo estoy cambiando. Y justo antes de presionar guardar cambios veo que ahora malinterpreto el desafío. Por cierto, todavía tengo curiosidad por la explicación de la solución de 8 bytes. :)
Kevin Cruijssen

1
@KevinCruijssen: explicación agregada.
Shaggy

0

Java, 92 89 71 bytes

Ahora con lambdas!

(t,l,u)->{int z=0;for(;l<=u;)if((l+++"").contains(t+""))z++;return z;};

Antigua solución de función de 89 bytes:

int d(int t,int l,int u){int a=0,i=l;for(;i<=u;)if((i+++"").contains(t+""))a++;return a;}

¡Hurra por la función súper incremental!


Puede eliminar int i=lel bucle for y, en su lugar, declararlo con aint a=0,i=l;
Me

Ah, sabía que me perdí algo, ¡gracias!
Yodle

1
Básicamente lo mismo que esta respuesta .
Kritixi Lithos

0

GolfSharp (no competidor), 41 bytes

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w)).L();

45 bytes competidores

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w.T())).L();

1
La última confirmación fue hace 8 minutos, por lo que para que esta sea una respuesta competitiva se requiere que esto funcione antes de que comenzara el desafío. ¿Puedes verificar esto?
Kade

Creo que sí, si no lo cambiaré a no competidor, editar los errores corregidos son necesarios. cambiará ahora (uso desafíos para mejorar el idioma)
downrep_nation

2
El código commit hace 8 minutos cambió la Ifunción para convertir el elemento a una cadena primero antes de verificar si lo contiene.
Kade


0

Raqueta 91 bytes

(for/sum((i(range s(+ 1 e))))(if(string-contains?(number->string i)(number->string d))1 0))

Sin golf:

(define(f d s e)
  (for/sum ((i (range s (+ 1 e))))
    (if(string-contains?
        (number->string i)
        (number->string d))
       1 0 )))

Pruebas:

(f 3 1 100)
(f 3 3 93)
(f 12 -200 200)
(f 123 1 3)
(f 3 33 34)
(f 0 -1 1)

Salida:

19
19
24
0
2
1

0

Axioma bytes 90

f(y,a,b)==(c:=0;for x in a..b repeat(if position(y::String,x::String,1)~=0 then c:=c+1);c)

resultados

(3) -> f(3,1,100)=19,f(3,3,93)=19,f(12,-200,200)=24,f(123,1,3)=0,f(3,33,34)=2
   (3)  [19= 19,19= 19,24= 24,0= 0,2= 2]
                                  Type: Tuple Equation NonNegativeInteger
(4) -> f(0,-1,1)=1, f(127,12,27)=0
   (4)  [1= 1,0= 0]
                                  Type: Tuple Equation NonNegativeInteger

0

Mathematica, 70 bytes

(w=ToString;t=0;Table[If[StringContainsQ[w@i,w@#1],t++],{i,#2,#3}];t)&

entrada

[12, -200,200]

salida

24


0

Clojure, 65 bytes

#(count(for[i(range %2(inc %3)):when(some(set(str %))(str i))]i))

0

PHP, 56 bytes

correr como tubería Pruébalo en línea

Entrada

$argv = [number_to_find, range_start, range_end];

Código

<?=substr_count(join(range(($a=$argv)[1],$a[2])),$a[0]);

Explicación

#substrcount, counts the aparitions of a subtring in a string
substr_count( 
           join( range(($a=$argv)[1],$a[2])), # String with the range
           $a[0]);                            # The number you are looking for

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.