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.