Quantos números inteiros contêm um número em um intervalo específico

19

O programa deve inserir o número, o início do intervalo e o final do intervalo e gerar quantos números inteiros o número aparece entre o início e o final do intervalo, inclusive . Programas e funções são permitidos.

Exemplo de entradas

Por exemplo:

//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);

Todos os quatro exemplos de entrada acima são válidos e todos significam que esse 3é o número em questão, 1é o início do intervalo e 100o fim do intervalo.

E, em seguida, o programa deve saída quantas vezes 3aparece na faixa de 1até 100 inclusiva . 3aparece nos números inteiros 3, 13, 23, 30, 31, 32, 33, ..., 93em um total de 19 vezes. Portanto, o programa deve produzir 19como saída, porque é quantas vezes 3aparece no intervalo de 1até 100.

Regras

  • Programas e funções são permitidos.
  • Todos os números serão inteiros, o que significa que não vai não ser nenhum floats ou doubles.
  • Nota: o número procurado estará sempre no intervalo 0≤x≤127. Haverá casos em que ele vai estar fora desta 0≤x≤127gama.
  • Como no primeiro exemplo, com o caso como 33, o número 3será contado como aparecendo apenas uma vez , não duas.
  • Os valores do início e do fim do intervalo serão entre -65536e 65535inclusive.
  • O valor do início do intervalo nunca será superior ou igual ao final do intervalo. start < end
  • Também a gama é inclusiva. Por exemplo, se a entrada fosse 8 8 10, o intervalo seria 8≤x≤10e, portanto, a saída será 1.
  • A entrada pode ser obtida de qualquer uma das maneiras mostradas nos exemplos. A entrada pode ser tomada como uma sequência ou como um número, da maneira que você desejar.

Casos de teste

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 garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:

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

Kritixi Lithos
fonte

Respostas:

8

05AB1E , 6 bytes

Entrada no formato: limite superior , limite inferior , número .

Ÿvy³åO

Explicação:

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

Usa a codificação CP-1252 . Experimente online!

Adnan
fonte
4
Escolhe Groovy {a,b,c->} Aww ... dangit, eu perdi antes de começar de novo.
Magic Octopus Urn
Parabéns por vencer este desafio!
Kritixi Lithos
@KritixiLithos Thank you! :)
Adnan
Alternativa de 6 bytes:Ÿʒ³å}g
Kevin Cruijssen 13/09
9

Bash, 20 bytes

a resposta óbvia

seq $2 $3|grep -c $1

exemplo

$ bash golf 3 1 100
19
novo
fonte
6

Perl, 20 bytes

Economizou 2 bytes usando grepcomo na resposta de @ ardnew .

Bytecount inclui 18 bytes de código e -apsinalizadores.

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

Dê os 3 números em três linhas separadas:

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

Python 2, 47 43 bytes

Relativamente simples, usando o Python 2 repr forma abreviada .

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
Kade
fonte
Por que você tinha que ser extravagante e usar em -~avez de a+1?
Artyer
11
@Artyer por diversão!
Kade
4

JavaScript (ES6), 46 45 bytes

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

(Minha melhor versão não recursiva foi de 61 bytes.) Editar: salvou 1 byte graças a @ edc65.

Neil
fonte
!!matchem vez de includes.
Edc65 3/11
4

Geléia , 7 bytes

rAẇ@€⁵S

TryItOnline!

Entrada: Início, Fim, ToFind

Quão?

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

A conversão padrão de um número inteiro para um iterável para a verificação da existência da sub-lista é convertida em uma lista decimal (não em uma lista de caracteres); portanto, os números negativos têm um valor negativo inicial (por exemplo, -122-> [-1,2,2]que não encontrará uma sub-lista [1,2]), o valor absoluto primeiro parece ser a solução mais eficiente.

Jonathan Allan
fonte
4

PowerShell v2 +, 64 62 56 bytes

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

-6 bytes graças ao mazzy

Entrada via argumentos da linha de comando do número do formulário lower_bound upper_bound . Um pouco pateta na notação, por causa do ponto-e-vírgula dentro dos forerros de análise de causa, se não estiver entre eles $(...)para criar um bloco de script. Basicamente, fazemos um loop ascendente $aaté atingirmos $b, usando Where-Object(the |?{...}) para extrair os números -matchcontra os quais regex $c. Isso é encapsulado em parênteses, nós aceitamos o .countmesmo e é deixado no pipeline e a saída está implícita.


Se, no entanto, garantirmos que o intervalo não excederá 50.000 elementos, podemos pular o loop e usar o operador do intervalo ..diretamente, por 45 43 bytes . Como isso não está nas especificações do desafio, isso não é válido. Vadio.

param($c,$a,$b)($a..$b|?{$_-match$c}).count
AdmBorkBork
fonte
Ótimo! Obrigado pela informação de 50 mil elementos. Algumas sugestõesparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy
Os param($c,$a,$b)($a..$b|?{$_-match$c}).counttrabalhos com intervalo -65536..65535 onPowershell 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{

A entrada está neste formato:

1, 100
3
DJMcMayhem
fonte
2

Haskell, 65 bytes

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

As importruínas a pontuação. Exemplo de uso: ((-200)#200)12-> 24.

nimi
fonte
O exemplo de uso deve
gerar
@KritixiLithos: Oh, desculpe! Obviamente, é apenas um erro de copiar e colar.
N
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;}
Numberknot
fonte
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:

Salva 3 bytes usando parâmetros abreviados

Otávio
fonte
2

Scala, 50 bytes

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

recebe a primeira entrada com curry; chame assim:f("12")(-200,200)

Explicação:

(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
  )
corvus_192
fonte
2

R, 32 bytes

Bem direto:

function(a,b,c)sum(grepl(a,b:c))
Nutle
fonte
11
Bem-vindo ao PPCG! Resposta agradável, mas assumindo que a entrada já está especificada geralmente não é aceita. Para qualificar sua resposta, você precisa ler as entradas do stdin, como: a=scan();sum(grepl(a,a[2]:a[3]))ou como argumentos para uma função function(a,b,c)sum(grepl(a,b:c)):, ambas equivalentes neste caso.
Billywob #
@ Billywob obrigado, vai manter isso em mente! editou a resposta de acordo.
Nutle
1

C #, 71 bytes

Bata minha resposta Java graças a lambdas

(t,l,u)=>{int d=0;for(;l<=u;)if((l+++"").Contains(t+""))d++;return d;};
Yodle
fonte
Java também tem lambdas
Kritixi Lithos
Sim, eu só comecei a ler sobre isso, mas eles não exigem algumas coisas clichê que faria o bytecount maior, ou eu não posso contá-lo
Yodle
Roubou descaradamente a resposta javascript de @Grax s (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);é muito menor
hstde 11/11
1

Ruby 44 bytes

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

Casos de teste:

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
Alexis Andersen
fonte
1

PHP, 62 bytes

Abordagem bastante direta:

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

Experimente online

insertusernamehere
fonte
Salve 4 bytes com sublinhado ou qualquer letra como delimitador de expressão regular. (não precisa de aspas)
Titus
Você pode salvar 3 Byte<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg Hülsermann
1

C, 143 135 bytes

Obrigado a @Kritixi Lithos por ajudar a economizar 8 bytes

Certamente isso pode ser feito melhor, mas é o melhor que tenho por enquanto. C não lida com strings muito graciosamente, então, naturalmente, são necessárias algumas operações.

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 + program

#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));
}
Cody
fonte
Eu acho que você pode remover o int i=ldo loop for e, em vez disso, inicializá-lo int t=0como tal int t=0,i=lpara economizar alguns bytes.
Kritixi Lithos
Isso não 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;} Eu acho compilação mesmo sem 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 12/09/18
1

JavaScript, 46 45 bytes

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

Conte recursivamente até o início> o fim

Editar: Alterne para o teste RegExp para salvar um byte

Grax32
fonte
1

PHP, 68 63 bytes

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

use como:

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

editar: 5 bytes salvos graças a Titus

user59178
fonte
strstr($a[2]++,$a[1])>""em vez de strpos($a[2]++,$a[1])!==falsesalva 5 bytes.
Titus
1

Powershell, 48 bytes

De acordo com a regra, o intervalo pode conter mais de 50.000 elementos. Portanto, não podemos usar o operador de intervalo.. diretamente. Obrigado AdmBorkBork .

Direto:

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

Script de teste:

$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"
}

Resultado:

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

Japt , 14 8 bytes

Leva o número inteiro a ser encontrado como o último valor de entrada.

õV èÈsøW

Experimente online


Explicação

             :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
Shaggy
fonte
Como as versões anteriores não têm uma explicação, não tenho certeza, mas sua solução atual de 6 bytes está incorreta. Veja esta regra: " Como no primeiro exemplo, com o caso como 33, o número 3será contado como aparecendo apenas uma vez, não duas. " Sua contagem de ocorrências para Wcontaria 3duas vezes.
Kevin Cruijssen 13/09/18
Obrigado, @KevinCruijssen, voltou a ele ~ um mês depois e ficou imaginando por que estava fazendo do jeito que estava quando havia um caminho mais curto - deveria ter relido o desafio antes de atualizar! Eu revirei agora.
Salsicha
Eu tive a mesma coisa algumas vezes. Vejo minha resposta, penso: isso pode ser muito mais fácil, estou mudando. E, pouco antes de clicar em Salvar alterações, vejo que agora interpreto mal o desafio. Aliás, ainda estou curioso sobre a explicação para a solução de 8 bytes. :)
Kevin Cruijssen
11
@KevinCruijssen: explicação adicionada.
Shaggy
0

Java, 92 89 71 bytes

Agora com lambdas!

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

Solução antiga de função 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;}

Viva a função de super incremento!

Yodle
fonte
Você pode remover int i=la partir do loop for e em vez declará-la com acomo int a=0,i=l;para salvar alguns bytes
Kritixi Lithos
Ah, eu sabia que tinha perdido alguma coisa, obrigado!
Yodle
11
Basicamente, o mesmo que esta resposta .
Kritixi Lithos 3/11
0

GolfSharp (não concorrente), 41 bytes

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

competindo 45 bytes

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w.T())).L();
downrep_nation
fonte
11
A última confirmação ocorreu 8 minutos atrás, portanto, para que essa seja uma resposta competitiva, é necessário que isso funcione antes do início do desafio. Você pode verificar isso?
Kade
Acho que sim, se não, vou alterá-lo para não-concorrente, editar os bugs corrigidos são necessários. vai mudar agora (eu uso desafios para melhorar a língua)
downrep_nation
2
O código confirmado há 8 minutos alterou a Ifunção para converter o elemento em uma cadeia de caracteres antes de verificar se ele a contém.
Kade
0

Groovy, 48 bytes

{a,b,c->(a..b).collect{"$it".count("$c")}.sum()}
Urna de polvo mágico
fonte
0

Raquete 91 bytes

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

Ungolfed:

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

Teste:

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

Resultado:

19
19
24
0
2
1
rnso
fonte
0

Bytes de axioma 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
RosLuP
fonte
0

Mathematica, 70 bytes

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

entrada

[12, -200.200]

resultado

24

J42161217
fonte
0

Clojure, 65 bytes

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

PHP, 56 bytes

correr como tubo Experimente online

Entrada

$argv = [number_to_find, range_start, range_end];

Código

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

Explicação

#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
Francisco Hahn
fonte