Wie viele Ganzzahlen enthalten eine Zahl in einem bestimmten Bereich

19

Das Programm sollte die Nummer, den Beginn des Bereichs und das Ende des Bereichs eingeben und ausgeben, wie viele ganze Zahlen die Nummer zwischen dem Beginn und dem Ende des Bereichs einschließlich enthält . Es sind sowohl Programme als auch Funktionen erlaubt.

Beispieleingaben

Beispielsweise:

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

Alle obigen vier Eingabebeispiele sind gültig und alle bedeuten, dass dies 3die fragliche Zahl 1ist, der Beginn des Bereichs und 100das Ende des Bereichs.

Und dann sollte das Programm ausgeben, wie oft 3im Bereich von 1bis 100 einschließlich erscheint . 3in den ganzen Zahlen erscheint 3, 13, 23, 30, 31, 32, 33, ..., 93an insgesamt 19 mal. Das Programm sollte also 19als Ausgabe ausgegeben werden, da dies die Häufigkeit des 3Auftretens im Bereich von 1bis ist 100.

Regeln

  • Es sind sowohl Programme als auch Funktionen erlaubt.
  • Alle Zahlen werden ganze Zahlen sein, dass es Sinn werden nicht alle sein , floats oder doubles.
  • Hinweis: Die gesuchte Nummer wird immer im Bereich liegen 0≤x≤127. Es wird keine Fälle geben, in denen es außerhalb dieses 0≤x≤127Bereichs liegt.
  • Wie im ersten Beispiel wird in diesem Fall 33die Zahl 3nur einmal gezählt , nicht zweimal.
  • Die Werte für Anfang und Ende des Bereichs liegen zwischen -65536und 65535einschließlich.
  • Der Wert des Bereichsanfangs wird niemals das Bereichsende überschreiten oder diesem entsprechen. start < end
  • Auch das Sortiment ist inklusive. Wenn zum Beispiel die Eingabe war 8 8 10, wäre der Bereich 8≤x≤10und daher die Ausgabe 1.
  • Die Eingabe kann auf eine der in den Beispielen gezeigten Arten erfolgen. Die Eingabe kann nach Belieben als Zeichenfolge oder als Zahl erfolgen.

Testfälle

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

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:

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

Kritixi Lithos
quelle

Antworten:

8

05AB1E , 6 Bytes

Eingabe in der Form: Obergrenze , Untergrenze , Zahl .

Ÿvy³åO

Erläuterung:

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

Verwendet die CP-1252- Codierung. Probieren Sie es online!

Adnan
quelle
4
Wählt Groovy {a,b,c->} Aww ... verdammt, ich habe verloren, bevor ich wieder angefangen habe.
Magic Octopus Urn
Herzlichen Glückwunsch zum Gewinn dieser Herausforderung!
Kritixi Lithos
@KritixiLithos Danke! :)
Adnan
6-Byte-Alternative:Ÿʒ³å}g
Kevin Cruijssen
9

Bash, 20 Bytes

die offensichtliche Antwort

seq $2 $3|grep -c $1

Beispiel

$ bash golf 3 1 100
19
seltsam
quelle
6

Perl, 20 Bytes

2 Bytes gespart durch Verwendung von grepas in @ ardnews Antwort .

Bytecount enthält 18 Byte Code und -apFlags.

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

Geben Sie die 3 Zahlen in drei separaten Zeilen an:

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

Python 2, 47 43 Bytes

Relativ einfach, mit der reprKurzform von Python 2 .

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

Ausgang:

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
quelle
Warum musstest du nur ausgefallen sein und -~astattdessen benutzen a+1?
Artyer
1
@Artyer zum Spaß!
Kade,
4

JavaScript (ES6), 46-45 Byte

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

(Meine beste nichtrekursive Version war 61 Byte.) Bearbeiten: 1 Byte dank @ edc65 gespeichert.

Neil
quelle
!!matchstatt includes.
Edc65
4

Gelee , 7 Bytes

rAẇ@€⁵S

TryItOnline!

Eingabe: Start, Ende, ToFind

Wie?

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

Die Standardumwandlung einer Ganzzahl in eine für die Prüfung der Existenz der Unterliste iterierbare Zahl wandelt sich in eine Dezimalliste (keine Zeichenliste). Negative Zahlen haben also einen führenden negativen Wert (z. B. -122->, von [-1,2,2]dem keine Unterliste gefunden wird [1,2]) Der absolute Wert scheint zunächst die golferischste Lösung zu sein.

Jonathan Allan
quelle
4

PowerShell v2 +, 64 62 56 Bytes

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

-6 bytes dank mazzy

Eingabe über Kommandozeilenargumente der Formnummer lower_bound upper_bound . Ein bisschen doof in der Notation, weil die Semikolons darin forFehler beim Parsen verursachen, wenn sie nicht $(...)zum Erstellen eines Skriptblocks eingeschlossen sind. Wir durchlaufen im Grunde genommen eine Schleife nach oben, $abis wir treffen $b, wobei wir Where-Object(die |?{...}) verwenden, um die Zahlen herauszuziehen, -matchgegen die sich der reguläre Ausdruck richtet $c. Das ist in Parens gekapselt, wir nehmen das .countdavon und das bleibt in der Pipeline und die Ausgabe ist implizit.


Wenn wir jedoch garantieren, dass der Bereich nicht mehr als 50.000 Elemente umfasst, können wir die Schleife überspringen und einfach den Bereichsoperator ..direkt für 45 43 Byte verwenden . Da dies jedoch nicht in den Herausforderungsspezifikationen enthalten ist, ist dies nicht gültig. Schade.

param($c,$a,$b)($a..$b|?{$_-match$c}).count
AdmBorkBork
quelle
Groß! Danke für die 50K Elemente Info. Ein paar Vorschlägeparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy
Die param($c,$a,$b)($a..$b|?{$_-match$c}).countArbeiten mit Bereich -65536..65535 aufPowershell 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{

Die Eingabe erfolgt in folgendem Format:

1, 100
3
DJMcMayhem
quelle
2

Haskell, 65 Bytes

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

Das importruiniert die Partitur. Anwendungsbeispiel: ((-200)#200)12-> 24.

nimi
quelle
Das Verwendungsbeispiel sollte 24 ausgeben, da 12 zwischen -200 und 200
Kritixi Lithos,
@KritixiLithos: Oh sorry! Das ist natürlich nur ein Copy & Pase-Fehler.
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;}
Zahlenknoten
quelle
2

Swift 3, 96 93 Bytes

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

Bearbeiten 1:

3 Bytes mit Hilfe von Kurzparametern gespeichert

Otávio
quelle
2

Scala, 50 Bytes

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

nimmt den ersten eingang curried; nenne es so:f("12")(-200,200)

Erklärung:

(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
quelle
2

R, 32 Bytes

Recht einfach:

function(a,b,c)sum(grepl(a,b:c))
Nutle
quelle
1
Willkommen bei PPCG! Gute Antwort, aber die Annahme, dass die Eingabe bereits spezifiziert ist, wird im Allgemeinen nicht akzeptiert. Um Ihre Antwort zu qualifizieren, müssten Sie entweder Eingaben von stdin lesen, wie zum Beispiel: a=scan();sum(grepl(a,a[2]:a[3]))oder als Argumente für eine Funktion :, function(a,b,c)sum(grepl(a,b:c))beides entspricht in diesem Fall.
Billywob
@ Billywob danke, werde das im Hinterkopf behalten! hat die Antwort entsprechend bearbeitet.
Nutle
1

C #, 71 Bytes

Schlagen Sie meine Java-Antwort dank Lambdas

(t,l,u)=>{int d=0;for(;l<=u;)if((l+++"").Contains(t+""))d++;return d;};
Jodler
quelle
Java hat auch Lambdas
Kritixi Lithos
Ja, ich habe gerade erst angefangen, darüber zu lesen, aber brauchen sie kein Boilerplate-Zeug, das den Bytecount vergrößert, oder kann ich es nicht zählen
Yodle
Schamlos gestohlen @Grax s Javascript Antwort (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);ist viel kürzer
hstde
1

Ruby 44 Bytes

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

Testfälle:

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
quelle
1

PHP, 62 Bytes

Ziemlich direkter Ansatz:

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

Probieren Sie es online aus

insertusernamehere
quelle
Speichern Sie 4 Bytes mit einem Unterstrich oder einem Buchstaben als Regex-Trennzeichen. (braucht keine Anführungszeichen)
Titus
Sie können 3 Byte speichern<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg Hülsermann
1

C 143 135 Bytes

Vielen Dank an @Kritixi Lithos für die Unterstützung beim Speichern von 8 Bytes

Sicherlich kann das besser gemacht werden, aber es ist das Beste, was ich bisher habe. C geht nicht sehr elegant mit Strings um, daher sind natürlich einige Operationen erforderlich.

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

#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
quelle
Ich denke, Sie können das int i=laus der for-Schleife entfernen und es stattdessen mit int t=0dergleichen initialisieren int t=0,i=l, um ein paar Bytes zu sparen.
Kritixi Lithos
Dies nicht kompilieren? C (N, 1, h) {char b [99], n [99]; int t = 0, i = 1; sprintf (n, "% d", N); für (; i <= h; i ++ ) {sprintf (b, "% d", i); if (strstr (b, n)) ++ t;} return t;} Ich denke, kompilieren Sie auch ohne Include ...
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
1

JavaScript, 46 45 Bytes

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

Rekursiv zählen bis Start> Ende

Bearbeiten: Wechseln Sie zum RegExp-Test, um ein Byte zu speichern

Grax32
quelle
1

PHP, 68 63 Bytes

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

verwenden wie:

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

bearbeiten: 5 Bytes dank Titus gespeichert

user59178
quelle
strstr($a[2]++,$a[1])>""statt strpos($a[2]++,$a[1])!==falsespart 5 Bytes.
Titus
1

Powershell, 48 Bytes

Nach der Regel kann der Bereich mehr als 50.000 Elemente enthalten. Daher können wir den Bereichsoperator nicht ..direkt verwenden. Vielen Dank AdmBorkBork .

Einfach:

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

Testskript:

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

Ausgabe:

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

Japt , 14 8 Bytes

Nimmt die zu findende Ganzzahl als letzten Eingabewert.

õV èÈsøW

Probieren Sie es online aus


Erläuterung

             :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
quelle
Since the previous versions lack an explanation I'm not sure about those, but your current 6-byte solution is incorrect I'm afraid. See this rule: "As in the first example, with the case as 33, the number 3 will be counted as appearing only once, not twice." Your occurrence-count for W would count the 3 twice.
Kevin Cruijssen
Vielen Dank, @KevinCruijssen, kam einen Monat später darauf zurück und fragte sich, warum ich es so machte, wie ich es tat, als es einen kürzeren Weg gab - hätte die Herausforderung vor dem Update noch einmal lesen sollen! Ich habe es jetzt zurückgerollt.
Shaggy
Ich hatte das gleiche ein paar Mal passiert. Ich sehe meine Antwort, denke: Das kann viel einfacher sein, ich ändere es. Und kurz bevor ich Änderungen speichern drücke, sehe ich, dass ich die Herausforderung falsch interpretiere. Übrigens bin ich immer noch neugierig auf die Erklärung für die 8-Byte-Lösung. :)
Kevin Cruijssen
1
@ KevinCruijssen: Erklärung hinzugefügt.
Shaggy
0

Java, 92 89 71 bytes

Now with lambdas!

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

Old 89 byte function solution:

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

Hooray for the super increment function!

Yodle
quelle
You can remove int i=l from the for-loop and instead declare it with a like int a=0,i=l; to save few bytes
Kritixi Lithos
Ah I knew I missed something, thanks!
Yodle
1
Basically the same as this answer.
Kritixi Lithos
0

GolfSharp (non competing), 41 bytes

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

competing 45 bytes

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w.T())).L();
downrep_nation
quelle
1
The last commit was 8 minutes ago, so for this to be a competing answer requires that this worked before the challenge started. Can you verify this?
Kade
I think so, if not i will change it to non competing, edit the bugs fixed are necessary. will change now (i use challenges to improve the language)
downrep_nation
2
The code commit 8 minutes ago changed the I function to convert the element to a string first before checking if it contains it.
Kade
0

Groovy, 48 bytes

{a,b,c->(a..b).collect{"$it".count("$c")}.sum()}
Magic Octopus Urn
quelle
0

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

Testing:

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

Output:

19
19
24
0
2
1
rnso
quelle
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)

results

(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
quelle
0

Mathematica, 70 bytes

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

input

[12,-200,200]

output

24

J42161217
quelle
0

Clojure, 65 bytes

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

PHP, 56 Bytes

run as pipe Try it online

Input

$argv = [number_to_find, range_start, range_end];

Code

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

Explanation

#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
quelle