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

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!


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

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"

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

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.


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


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

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

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.


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

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


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
  )

2

R, 32 byte

Cukup mudah:

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

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

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

1

PHP, 62 byte

Pendekatan yang cukup lurus ke depan:

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

Cobalah online


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

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


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


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

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

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!


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

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

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

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

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


0

Clojure, 65 byte

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.