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

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!


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


9

Bash, 20 bajtów

oczywista odpowiedź

seq $2 $3|grep -c $1

przykład

$ bash golf 3 1 100
19

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"

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

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.


!!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.


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

Ś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

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.


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

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


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
  )

2

R, 32 bajty

Całkiem proste:

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

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

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

1

PHP, 62 bajty

Całkiem proste podejście:

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

Wypróbuj online


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

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


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


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

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

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!


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

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

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

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

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


0

Clojure, 65 bajtów

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.