Ile liczb całkowitych zawiera liczbę z określonego zakresu

19

Program powinien wprowadzić liczbę, początek zakresu i koniec zakresu, oraz wypisać liczbę całkowitą, która pojawia się między początkiem i końcem zakresu, włącznie . Zarówno programy, jak i funkcje są dozwolone.

Przykładowe dane wejściowe

Na przykład:

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

Wszystkie powyższe cztery przykłady wejściowe są poprawne i wszystkie oznaczają, że 3to liczba, o której mowa, 1jest początkiem zakresu i100 końcem zakresu.

Następnie program powinien wypisać, ile razy 3pojawia się w przedziale od 1do 100 włącznie . 3pojawia się w całkowitych 3, 13, 23, 30, 31, 32, 33, ..., 93w sumie 19 razy. Zatem program powinien wyświetlać 19dane wyjściowe, ponieważ tyle razy 3pojawia się w zakresie od 1do 100.

Zasady

  • Zarówno programy, jak i funkcje są dozwolone.
  • Wszystkie numery będą liczbami całkowitymi, co oznacza, że nie będzie nie być żadnych floats lub doubles.
  • Uwaga: szukany numer zawsze będzie w zakresie 0≤x≤127. Nie będzie żadnych przypadków, gdzie będzie poza tym 0≤x≤127zakresem.
  • Podobnie jak w pierwszym przykładzie, w przypadku as 33liczba 3będzie liczona jako pojawiająca się tylko raz , a nie dwa razy.
  • Wartości początku i końca zakresu będą pomiędzy -65536i 65535włącznie.
  • Wartość początku zakresu nigdy nie przekroczy lub nie przekroczy końca zakresu. start < end
  • Zakres obejmuje również. Na przykład, jeśli wejście było 8 8 10, zakres będzie, 8≤x≤10a zatem wyjście będzie wynosić 1.
  • Dane wejściowe można pobierać w dowolny ze sposobów pokazanych w przykładach. Dane wejściowe można traktować jako ciąg lub liczbę, w dowolny sposób.

Przypadki testowe

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

Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

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

Kritixi Lithos
źródło

Odpowiedzi:

8

05AB1E , 6 bajtów

Dane wejściowe w postaci: górna granica , dolna granica , liczba .

Ÿvy³åO

Wyjaśnienie:

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

Wykorzystuje kodowanie CP-1252 . Wypróbuj online!

Adnan
źródło
4
Wybiera Groovy {a,b,c->} Aww ... cholera, przegrałem zanim zacząłem od nowa.
Magic Octopus Urn
Gratulacje za wygraną w tym wyzwaniu!
Kritixi Lithos
@KritixiLithos Dziękujemy! :)
Adnan
6- Ÿʒ³å}g
bajtowa
9

Bash, 20 bajtów

oczywista odpowiedź

seq $2 $3|grep -c $1

przykład

$ bash golf 3 1 100
19
ardnew
źródło
6

Perl, 20 bajtów

Zaoszczędzono 2 bajty grep jak w użytkownika @ ardnew odpowiedź .

Liczba bajtów zawiera 18 bajtów kodu i -ap flag.

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

Podaj 3 liczby w trzech osobnych wierszach:

perl -ape '$_=grep/@F/,<>..<>' <<< "3
1
100"
Dada
źródło
5

Python 2, 47 43 bajtów

Stosunkowo prosty, wykorzystując reprkrótką formę 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
Kade
źródło
Dlaczego musiałeś być pełen fantazji i używać -~azamiast a+1?
Artyer
1
@Artyer dla zabawy!
Kade
4

JavaScript (ES6), 46 45 bajtów

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

(Moja najlepsza nierekurencyjna wersja miała 61 bajtów.) Edycja: Zapisano 1 bajt dzięki @ edc65.

Neil
źródło
!!matchzamiast includes.
edc65,
4

Galaretka , 7 bajtów

rAẇ@€⁵S

TryItOnline!

Dane wejściowe: Start, End, ToFind

W jaki sposób?

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

Domyślne rzutowanie liczby całkowitej na iterowalną dla kontroli istnienia podlisty jest rzutowane na listę dziesiętną (nie listę znaków), więc liczby ujemne mają wiodącą wartość ujemną (np. -122-> [-1,2,2]która nie znajdzie podlisty [1,2]), więc wzięcie najpierw wartość bezwzględna wydaje się najbardziej golfowym rozwiązaniem.

Jonathan Allan
źródło
4

PowerShell v2 +, 64 62 56 bajtów

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

-6 bajtów dzięki mazzy

Wprowadzanie za pomocą argumentów wiersza polecenia o numerze postaci dolny_związany górny_związany . Trochę głupkowaty w notacji, ponieważ średniki wewnątrz forpowodują błędy analizy, jeśli nie są otoczone w $(...)celu utworzenia bloku skryptu. My w zasadzie pętli w górę przez $aaż trafiliśmy $b, używając Where-Object(the |?{...}), aby wyciągnąć te numery, które regex -matchprzeciw $c. To jest zamknięte w parens, bierzemy to .count, a to pozostaje w potoku, a wynik jest niejawny.


Jeśli jednak gwarantujemy, że zakres nie będzie większy niż 50 000 elementów, możemy pominąć pętlę i po prostu bezpośrednio użyć operatora zakresu .., dla 45 43 bajtów . Ponieważ jednak nie jest to określone w specyfikacji wyzwania, nie jest to ważne. Porażka.

param($c,$a,$b)($a..$b|?{$_-match$c}).count
AdmBorkBork
źródło
Świetny! Dzięki za informacje o 50 000 elementów. Kilka sugestiiparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy
Te param($c,$a,$b)($a..$b|?{$_-match$c}).countprace z zakresu -65536..65535 naPowershell 5.1
Mazzy
3

Vim, 46 , 41 bajtów

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

Dane wejściowe są w tym formacie:

1, 100
3
DJMcMayhem
źródło
2

Haskell, 65 bajtów

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

importNiszczy wynik. Przykład użycia:((-200)#200)12 -> 24.

nimi
źródło
Przykład użycia powinien
wypisać
@KritixiLithos: Oh przepraszam! Oczywiście, to tylko błąd kopiowania i pauzy.
nimi
2

Java 7 85 bajtów

int x(int a,int b,int c){int t=0;for(;b<=c;)if((b+++"").contains(a+""))t++;return t;}
Numberknot
źródło
2

Swift 3, 96 93 bajtów

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

Edycja 1:

Zapisano 3 bajty przy użyciu parametrów skróconych

Otávio
źródło
2

Scala, 50 bajtów

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

pobiera pierwsze wejście curry; nazwij to tak:f("12")(-200,200)

Wyjaśnienie:

(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
źródło
2

R, 32 bajty

Całkiem proste:

function(a,b,c)sum(grepl(a,b:c))
Nutle
źródło
1
Witamy w PPCG! Dobra odpowiedź, ale zakładanie, że dane wejściowe są już określone, zasadniczo nie jest akceptowane. Aby twoja odpowiedź się kwalifikowała, musisz albo odczytać dane wejściowe ze standardowego wejścia, takie jak: a=scan();sum(grepl(a,a[2]:a[3]))lub jako argumenty funkcji: function(a,b,c)sum(grepl(a,b:c))w tym przypadku oba są równoważne.
Billywob,
@Billywob dzięki, będzie o tym pamiętać! odpowiednio zredagował odpowiedź.
Nutle,
1

C #, 71 bajtów

Pokonaj moją odpowiedź Java dzięki lambdas

(t,l,u)=>{int d=0;for(;l<=u;)if((l+++"").Contains(t+""))d++;return d;};
Jodła
źródło
Java ma również
lambdas
Tak, właśnie zacząłem o tym czytać, ale czy nie wymagają one czegoś takiego, co zwiększyłoby liczbę bajtów, czy nie mogę tego policzyć
Yodle
Bezwstydnie ukradłem javascript @Grax odpowiedź (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);jest o wiele krótsza
hstde
1

Ruby 44 bajty

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

Przypadki testowe:

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
źródło
1

PHP, 62 bajty

Całkiem proste podejście:

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

Wypróbuj online

wstawić nazwę tutaj
źródło
Zapisz 4 bajty ze znakiem podkreślenia lub dowolną literą jako ogranicznik wyrażenia regularnego. (nie wymaga cytatów)
Tytus
Możesz zapisać 3 <?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
bajty
1

DO, 143 135 bajtów

Dzięki @Kritixi Lithos za pomoc w oszczędzaniu 8 bajtów

Z pewnością można to zrobić lepiej, ale jest to najlepsze, jakie mam na razie. C nie obsługuje napisów bardzo wdzięcznie, więc naturalnie zajmuje sporo operacji.

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;}

Program bez golfa +

#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
źródło
Myślę, że możesz usunąć int i=lpętlę for i zamiast tego zainicjować ją int t=0, int t=0,i=laby zaoszczędzić kilka bajtów.
Kritixi Lithos
To się nie kompiluje? C (N, l, h) {char b [99], n [99]; int t = 0, i = l; sprintf (n, "% d", N); for (; i <= h; i ++ ) {sprintf (b, "% d", i); if (strstr (b, n)) ++ t;} return t;} Myślę, że kompilacja nawet bez uwzględnienia ...
RosLuP
93 bajtyb[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
1

JavaScript, 46 45 bajtów

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

Rekurencyjnie licz do początku> końca

Edycja: Przejdź do testu RegExp, aby zapisać bajt

Grax32
źródło
1

PHP, 68 63 bajtów

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

użyj jak:

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

edycja: 5 bajtów zapisanych dzięki Titusowi

użytkownik59178
źródło
strstr($a[2]++,$a[1])>""zamiast strpos($a[2]++,$a[1])!==falsezapisuje 5 bajtów.
Tytus
1

PowerShell, 48 bajtów

Zgodnie z regułą zakres może zawierać ponad 50 000 elementów. Nie możemy więc ..bezpośrednio korzystać z operatora zasięgu . Dzięki AdmBorkBork .

Bezpośredni:

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

Skrypt testowy:

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

Wynik:

True: 19
True: 19
True: 24
True: 0
True: 2
True: 1
True: 0
True: 44175
mazzy
źródło
1

Japt , 14 8 bajtów

Pobiera liczbę całkowitą jako ostatnią wartość wejściową.

õV èÈsøW

Wypróbuj online


Wyjaśnienie

             :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
Kudłaty
źródło
Ponieważ poprzednie wersje nie wyjaśniają, nie jestem tego pewien, ale obawiam się, że twoje obecne 6-bajtowe rozwiązanie jest nieprawidłowe. Zobacz zasadę: „ Podobnie jak w pierwszym przykładzie, w przypadku as 33, liczba 3będzie liczona jako pojawiająca się tylko raz, a nie dwa razy. ” Twoja liczba wystąpień dla Wliczy 3dwa razy.
Kevin Cruijssen
Dzięki, @KevinCruijssen, wróciłem do niego ~ miesiąc później i zastanawiałem się, dlaczego robiłem to tak, jak byłem, gdy był krótszy sposób - powinienem ponownie przeczytać wyzwanie przed aktualizacją! Zwróciłem to teraz.
Shaggy
Kilka razy wydarzyło mi się to samo. Widzę moją odpowiedź, myślę: to może być o wiele łatwiejsze, zmieniam ją. I tuż przed kliknięciem opcji Zapisz zmiany widzę, że źle interpretuję wyzwanie. Przy okazji, wciąż jestem ciekawy wyjaśnienia 8-bajtowego rozwiązania. :)
Kevin Cruijssen
1
@KevinCruijssen: dodano wyjaśnienie.
Shaggy
0

Java, 92 89 71 bajtów

Teraz z lambdas!

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

Stare 89-bajtowe rozwiązanie funkcji:

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

Brawo dla funkcji super przyrostowej!

Jodła
źródło
Możesz usunąć int i=lz pętli for i zamiast tego zadeklarować, że achcesz int a=0,i=l;zaoszczędzić kilka bajtów
Kritixi Lithos
Ach, wiedziałem, że coś przeoczyłem, dzięki!
Yodle,
1
Zasadniczo to samo co ta odpowiedź .
Kritixi Lithos
0

GolfSharp (nie konkuruje), 41 bajtów

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

konkurujące 45 bajtów

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w.T())).L();
downrep_nation
źródło
1
Ostatnie zatwierdzenie nastąpiło 8 minut temu, więc aby była to konkurencyjna odpowiedź, musi zadziałać przed rozpoczęciem wyzwania. Czy możesz to zweryfikować?
Kade
Myślę, że tak, jeśli nie, zmienię to na niekonkurujące, konieczna będzie edycja poprawionych błędów. zmieni się teraz (używam wyzwań, aby poprawić język)
downrep_nation
2
Kod zatwierdzenia 8 minut temu zmienił Ifunkcję, aby najpierw przekonwertować element na ciąg znaków, a następnie sprawdzić, czy go zawiera.
Kade,
0

Groovy, 48 bajtów

{a,b,c->(a..b).collect{"$it".count("$c")}.sum()}
Urna Magicznej Ośmiornicy
źródło
0

Rakieta 91 bajtów

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

Nie golfowany:

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

Testowanie:

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

Wynik:

19
19
24
0
2
1
rnso
źródło
0

Axiom 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)

wyniki

(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
źródło
0

Mathematica, 70 bajtów

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

Wejście

[12, -200,200]

wynik

24

J42161217
źródło
0

Clojure, 65 bajtów

#(count(for[i(range %2(inc %3)):when(some(set(str %))(str i))]i))
NikoNyrh
źródło
0

PHP, 56 bajtów

uruchom jako potok Wypróbuj online

Wejście

$argv = [number_to_find, range_start, range_end];

Kod

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

Wyjaśnienie

#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
źródło