Berapa banyak bilangan bulat yang mengandung angka dalam rentang tertentu

19

Program harus memasukkan input angka, awal kisaran dan akhir kisaran, dan menampilkan berapa banyak bilangan bulat yang muncul antara awal dan akhir rentang, termasuk . Program dan fungsi diizinkan.

Contoh Input

Sebagai contoh:

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

Semua empat contoh input di atas adalah valid dan semuanya berarti bahwa itu 3adalah angka yang dimaksud, 1adalah awal dari rentang dan 100akhir dari rentang.

Dan kemudian program harus output berapa kali 3muncul dalam rentang dari 1ke 100 inklusif . 3muncul di bilangan bulat 3, 13, 23, 30, 31, 32, 33, ..., 93di total 19 kali. Jadi program harus menampilkan 19sebagai keluaran karena itulah berapa kali 3muncul dalam kisaran dari 1ke 100.

Aturan

  • Program dan fungsi diizinkan.
  • Semua angka akan berupa bilangan bulat, artinya tidak akan ada floats atau doubles.
  • Catatan: nomor yang dicari akan selalu berada dalam kisaran 0≤x≤127. Tidak akan ada kasus di mana ia akan berada di luar 0≤x≤127kisaran ini .
  • Seperti pada contoh pertama, dengan case as 33, angkanya 3akan dihitung hanya muncul sekali , bukan dua kali.
  • Nilai-nilai awal dan akhir rentang akan antara -65536dan 65535inklusif.
  • Nilai mulai rentang tidak akan pernah melebihi atau sama dengan akhir rentang. start < end
  • Juga kisaran inklusif. Misalnya jika inputnya adalah 8 8 10, rentang akan 8≤x≤10dan karenanya output akan menjadi 1.
  • Input dapat diambil dengan cara apa pun yang ditunjukkan dalam contoh. Input dapat diambil sebagai string atau sebagai angka, apa pun yang Anda inginkan.

Uji Kasus

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

Snippet Snack

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Kritixi Lithos
sumber

Jawaban:

8

05AB1E , 6 byte

Input dalam bentuk: batas atas , batas bawah , angka .

Ÿvy³åO

Penjelasan:

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

Menggunakan pengkodean CP-1252 . Cobalah online!

Adnan
sumber
4
Memilih Groovy {a,b,c->} Aww ... dangit, saya kalah sebelum saya mulai lagi.
Magic Gurita Guci
Selamat untuk memenangkan tantangan ini!
Kritixi Lithos
@KritixiLithos Terima kasih! :)
Adnan
Alternatif 6-byte:Ÿʒ³å}g
Kevin Cruijssen
9

Bash, 20 byte

jawaban yang jelas

seq $2 $3|grep -c $1

contoh

$ bash golf 3 1 100
19
ardnew
sumber
6

Perl, 20 byte

Disimpan 2 byte dengan menggunakan jawabangrep @ ardnew .

Bytecount mencakup 18 byte kode dan -apbendera.

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

Berikan 3 angka pada tiga baris terpisah:

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

Python 2, 47 43 Bytes

Relatif mudah, memanfaatkan reprbentuk pendek 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
sumber
Mengapa Anda harus semua suka dan menggunakan, -~abukan a+1?
Artyer
1
@Artyer untuk bersenang-senang!
Kade
4

JavaScript (ES6), 46 45 byte

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

(Versi non rekursif terbaik saya adalah 61 byte.) Sunting: Disimpan 1 byte berkat @ edc65.

Neil
sumber
!!matchbukannya includes.
edc65
4

Jelly , 7 byte

rAẇ@€⁵S

TryItOnline!

Input: Mulai, Akhir, Untuk Temukan

Bagaimana?

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

Pengecoran default sebuah integer ke iterable untuk pemeriksaan keberadaan sublist dilemparkan ke daftar desimal (bukan daftar karakter), jadi angka negatif memiliki nilai negatif utama (mis. -122-> [-1,2,2]yang tidak akan menemukan sublist dari [1,2]) jadi ambil nilai absolut pertama tampaknya seperti solusi golf.

Jonathan Allan
sumber
4

PowerShell v2 +, 64 62 56 byte

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

-6 byte berkat mazzy

Input melalui argumen baris perintah dari nomor form lower_bound upper_bound . Sedikit konyol pada notasi, karena titik koma di dalam formenyebabkan kesalahan parse jika tidak dikelilingi $(...)untuk membuat blok skrip. Kami pada dasarnya loop ke atas $asampai kami menekan $b, menggunakan Where-Object(the |?{...}) untuk menarik keluar angka-angka yang -matchmelawan $c. Itu dirangkum dalam parens, kita ambil .countdaripadanya, dan yang tersisa di pipa dan output tersirat.


Namun, jika kami menjamin bahwa jangkauannya tidak lebih dari 50.000 elemen, kami dapat melewati loop dan cukup menggunakan operator jangkauan ..secara langsung, untuk 45 43 byte . Karena itu tidak ada dalam spesifikasi tantangan, ini tidak valid. Kekecewaan.

param($c,$a,$b)($a..$b|?{$_-match$c}).count
AdmBorkBork
sumber
Bagus! Terima kasih atas info elemen 50K. Beberapa saranparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy
param($c,$a,$b)($a..$b|?{$_-match$c}).countKarya - karya dengan kisaran -65536..65535 padaPowershell 5.1
mazzy
3

Vim, 46 , 41 byte

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

Input dalam format ini:

1, 100
3
DJMcMayhem
sumber
2

Haskell, 65 byte

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

The importreruntuhan skor. Contoh penggunaan: ((-200)#200)12-> 24.

nimi
sumber
Contoh penggunaan harus menampilkan 24 karena 12 muncul 24 kali antara -200 dan 200
Kritixi Lithos
@KritixiLithos: Oh maaf! Tentu saja, itu hanya kesalahan salin & pase.
nimi
2

Java 7 85 byte

int x(int a,int b,int c){int t=0;for(;b<=c;)if((b+++"").contains(a+""))t++;return t;}
Numberknot
sumber
2

Swift 3, 96 93 byte

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

Edit 1:

Disimpan 3 byte dengan menggunakan parameter singkatan

Otávio
sumber
2

Scala, 50 byte

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

mengambil input kari pertama; sebut saja seperti ini:f("12")(-200,200)

Penjelasan:

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

R, 32 byte

Cukup mudah:

function(a,b,c)sum(grepl(a,b:c))
Nutle
sumber
1
Selamat datang di PPCG! Jawaban yang bagus tetapi dengan asumsi bahwa input sudah ditentukan pada umumnya tidak diterima. Untuk membuat jawaban Anda memenuhi syarat, Anda harus membaca input dari stdin seperti: a=scan();sum(grepl(a,a[2]:a[3]))atau sebagai argumen untuk fungsi function(a,b,c)sum(grepl(a,b:c)):, keduanya setara dalam hal ini.
Billywob
@Billywob terima kasih, akan selalu mengingat ini! diedit jawabannya sesuai.
Nutle
1

C #, 71 byte

Kalahkan jawaban Java saya berkat lambdas

(t,l,u)=>{int d=0;for(;l<=u;)if((l+++"").Contains(t+""))d++;return d;};
Yodle
sumber
Java juga memiliki lambdas
Kritixi Lithos
Ya saya baru saja mulai membaca tentang itu, tetapi tidakkah mereka memerlukan beberapa barang pelat yang akan membuat bytecount lebih besar, atau saya tidak dapat menghitungnya
Yodle
Shamelessly mencuri jawaban javascript @Grax (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);jauh lebih pendek
hstde
1

Ruby 44 byte

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

Kasus uji:

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

PHP, 62 byte

Pendekatan yang cukup lurus ke depan:

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

Cobalah online

masukkan nama pengguna di sini
sumber
Simpan 4 byte dengan garis bawah atau huruf apa pun sebagai pembatas regex. (tidak perlu penawaran)
Titus
Anda dapat menyimpan 3 Byte<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg Hülsermann
1

C, 143 135 byte

Terima kasih kepada @Kritixi Lithos karena membantu menghemat 8 byte

Tentunya ini bisa dilakukan dengan lebih baik, tetapi ini yang terbaik yang saya miliki untuk saat ini. C tidak menangani string dengan sangat anggun, jadi tentu saja dibutuhkan beberapa operasi.

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 + tidak digolkan

#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
sumber
Saya pikir Anda dapat menghapus int i=ldari for-loop dan bukannya menginisialisasi dengan int t=0seperti itu int t=0,i=luntuk menyimpan beberapa byte.
Kritixi Lithos
Ini bukan kompilasi? C (N, l, h) {char b [99], n [99]; int t = 0, i = l; sprintf (n, "% d", N); untuk (; i <= h; i ++ ) {sprintf (b, "% d", i); if (strstr (b, n)) ++ t;} return t;} Saya pikir kompilasi bahkan tanpa menyertakan ...
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 byte

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

Hitung secara rekursif hingga mulai> akhir

Sunting: Beralih ke tes RegExp untuk menyimpan byte

Grax32
sumber
1

PHP, 68 63 byte

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

gunakan seperti:

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

sunting: 5 byte disimpan berkat Titus

pengguna59178
sumber
strstr($a[2]++,$a[1])>""bukannya strpos($a[2]++,$a[1])!==falsemenghemat 5 byte.
Titus
1

Powershell, 48 byte

Menurut aturan, rentang dapat berisi lebih dari 50.000 elemen. Jadi kami tidak dapat menggunakan operator jangkauan ..secara langsung. Terima kasih AdmBorkBork .

Mudah:

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

Skrip uji:

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

Keluaran:

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

Japt , 14 8 byte

Membawa bilangan bulat untuk ditemukan sebagai nilai input terakhir.

õV èÈsøW

Cobalah online


Penjelasan

             :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
sumber
Karena versi sebelumnya tidak memiliki penjelasan saya tidak yakin tentang itu, tetapi solusi 6-byte Anda saat ini salah saya khawatir. Lihat aturan ini: " Seperti dalam contoh pertama, dengan case sebagai 33, angkanya 3akan dihitung hanya muncul sekali, bukan dua kali. " Hitungan-kejadian Anda Wakan menghitung 3dua kali.
Kevin Cruijssen
Terima kasih, @KevinCruijssen, kembalilah ke sana ~ sebulan kemudian dan bertanya-tanya mengapa saya melakukannya seperti saya ketika ada cara yang lebih pendek - seharusnya membaca ulang tantangan sebelum memperbarui! Saya sudah mengembalikannya sekarang.
Shaggy
Saya mengalami hal yang sama terjadi beberapa kali. Saya melihat jawaban saya, berpikir: ini bisa menjadi jauh lebih mudah, saya mengubahnya. Dan tepat sebelum saya menekan simpan perubahan saya melihat saya sekarang salah menafsirkan tantangan. Btw, saya masih penasaran dengan penjelasan untuk solusi 8-byte. :)
Kevin Cruijssen
1
@KevinCruijssen: penjelasan ditambahkan.
Shaggy
0

Java, 92 89 71 byte

Sekarang dengan lambdas!

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

Solusi fungsi 89 byte lama:

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

Hore untuk fungsi kenaikan super!

Yodle
sumber
Anda dapat menghapus int i=ldari for-loop dan sebaliknya mendeklarasikannya dengan asuka int a=0,i=l;menyimpan beberapa byte
Kritixi Lithos
Ah saya tahu saya melewatkan sesuatu, terima kasih!
Yodle
1
Pada dasarnya sama dengan jawaban ini .
Kritixi Lithos
0

GolfSharp (tidak bersaing), 41 byte

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

bersaing 45 byte

(w,q,e)=>r(q,1+e-q).w(n=>n.T().I(w.T())).L();
downrep_nation
sumber
1
Komit terakhir adalah 8 menit yang lalu, jadi untuk ini menjadi jawaban yang bersaing mengharuskan ini bekerja sebelum tantangan dimulai. Bisakah Anda memverifikasi ini?
Kade
Saya pikir begitu, jika tidak saya akan mengubahnya menjadi tidak bersaing, mengedit bug tetap diperlukan. akan berubah sekarang (saya menggunakan tantangan untuk meningkatkan bahasa)
downrep_nation
2
Komit kode 8 menit yang lalu mengubah Ifungsi untuk mengubah elemen menjadi string terlebih dahulu sebelum memeriksa apakah itu mengandung.
Kade
0

Groovy, 48 byte

{a,b,c->(a..b).collect{"$it".count("$c")}.sum()}
Guci Gurita Ajaib
sumber
0

Racket 91 byte

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

Tidak Disatukan:

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

Pengujian:

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

Keluaran:

19
19
24
0
2
1
juga
sumber
0

Aksioma byte 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)

hasil

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

Mathematica, 70 byte

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

memasukkan

[12, -200.200]

keluaran

24

J42161217
sumber
0

Clojure, 65 byte

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

PHP, 56 Bytes

jalankan sebagai pipa. Cobalah secara online

Memasukkan

$argv = [number_to_find, range_start, range_end];

Kode

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

Penjelasan

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