Có bao nhiêu số nguyên chứa một số trong một phạm vi cụ thể


19

Chương trình này nên nhập số, bắt đầu của dãy núi này và cuối của dãy núi này, và đầu ra có bao nhiêu số nguyên số xuất hiện ở giữa đầu và cuối của dãy núi này, bao gồm . Cả hai chương trình và chức năng đều được cho phép.

Ví dụ đầu vào

Ví dụ:

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

Tất cả bốn ví dụ đầu vào ở trên là hợp lệ và tất cả chúng có nghĩa 3là số đang được đề cập, 1là bắt đầu của phạm vi và 100kết thúc của phạm vi.

Và sau đó là chương trình nên sản lượng bao nhiêu lần 3xuất hiện trong khoảng từ 1để 100 bao gồm . 3xuất hiện trong các số nguyên 3, 13, 23, 30, 31, 32, 33, ..., 93với tổng cộng 19 lần. Vì vậy, chương trình nên xuất ra 19như đầu ra vì đó là số lần 3xuất hiện trong phạm vi từ 1đến 100.

Quy tắc

  • Cả hai chương trình và chức năng đều được cho phép.
  • Tất cả các số sẽ là số nguyên, có nghĩa là sẽ không có bất kỳ floats hoặc doubles nào.
  • Lưu ý: số lượng tìm kiếm sẽ luôn nằm trong phạm vi 0≤x≤127. Sẽ không có trường hợp nào nó nằm ngoài 0≤x≤127phạm vi này .
  • Như trong ví dụ đầu tiên, với trường hợp như 33, số 3sẽ được tính là chỉ xuất hiện một lần , không phải hai lần.
  • Các giá trị bắt đầu và kết thúc của phạm vi sẽ nằm giữa -6553665535bao gồm.
  • Giá trị bắt đầu của phạm vi sẽ không bao giờ vượt quá hoặc bằng kết thúc của phạm vi. start < end
  • Ngoài ra phạm vi là bao gồm. Ví dụ: nếu đầu vào là 8 8 10, phạm vi sẽ là 8≤x≤10và do đó đầu ra sẽ là 1.
  • Đầu vào có thể được thực hiện theo bất kỳ cách nào được hiển thị trong các ví dụ. Đầu vào có thể được lấy dưới dạng chuỗi hoặc số, theo bất kỳ cách nào bạn muốn.

Các trường hợp thử nghiệm

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

Đoạn trích

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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

Câu trả lời:


8

05AB1E , 6 byte

Nhập vào dưới dạng: giới hạn trên , giới hạn dưới , số .

Ÿvy³åO

Giải trình:

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

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!


4
Lựa chọn Groovy {a,b,c->} Aww ... nguy hiểm, tôi đã thua trước khi bắt đầu lại.
Bạch tuộc ma thuật Urn

Chúc mừng bạn đã chiến thắng thử thách này!
Kritixi Lithos

@KritixiLithos Cảm ơn bạn! :)
Adnan

Thay thế 6 byte:Ÿʒ³å}g
Kevin Cruijssen

9

Bash, 20 byte

câu trả lời rõ ràng

seq $2 $3|grep -c $1

thí dụ

$ bash golf 3 1 100
19

6

Perl, 20 byte

Đã lưu 2 byte bằng cách sử dụng grepnhư trong câu trả lời của @ ardnew .

Bytecount bao gồm 18 byte mã và -apcờ.

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

Cho 3 số trên ba dòng riêng biệt:

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

5

Con trăn 2, 47 43 byte

Tương đối đơn giản, sử dụng dạng rút reprgọn của 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

Tại sao bạn phải được ưa thích và sử dụng -~athay vì a+1?
Artyer

1
@Artyer cho vui!
Kade

4

JavaScript (ES6), 46 45 byte

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

(Phiên bản không hồi quy tốt nhất của tôi là 61 byte.) Chỉnh sửa: Đã lưu 1 byte nhờ @ edc65.


!!matchthay vì includes.
edc65

4

Thạch , 7 byte

rAẇ@€⁵S

Dùng thử trực tuyến!

Đầu vào: Bắt đầu, Kết thúc, Tìm kiếm

Làm sao?

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

Việc truyền mặc định một số nguyên thành một lần lặp cho kiểm tra sự tồn tại của danh sách con chuyển thành một danh sách thập phân (không phải là danh sách ký tự), vì vậy các số âm có giá trị âm hàng đầu (ví dụ -122-> [-1,2,2]sẽ không tìm thấy danh sách con của [1,2]) giá trị tuyệt đối đầu tiên có vẻ như là giải pháp tốt nhất.


4

PowerShell v2 +, 64 62 56 byte

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

-6 byte nhờ mazzy

Nhập thông qua các đối số dòng lệnh của số biểu mẫu low_bound Upper_bound . Một chút ngớ ngẩn trên ký hiệu, vì các dấu chấm phẩy bên trong forgây ra lỗi phân tích cú pháp nếu nó không được bao quanh $(...)để tạo một khối tập lệnh. Về cơ bản, chúng tôi lặp lên trên $acho đến khi chúng tôi nhấn $b, sử dụng Where-Object(the |?{...}) để rút ra những con số mà regex -matchchống lại $c. Điều đó được gói gọn trong các parens, chúng tôi lấy .countnó và những gì còn lại trên đường ống và đầu ra là ẩn.


Tuy nhiên, nếu chúng tôi đảm bảo rằng phạm vi sẽ không quá 50.000 phần tử, chúng tôi có thể bỏ qua vòng lặp và chỉ cần sử dụng toán tử phạm vi ..trực tiếp, cho 45 43 byte . Vì đó không phải là thông số kỹ thuật thách thức, tuy nhiên, điều này không hợp lệ. Bummer.

param($c,$a,$b)($a..$b|?{$_-match$c}).count

Tuyệt quá! Cảm ơn thông tin về các yếu tố 50K. Một vài gợi ýparam($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy

Các param($c,$a,$b)($a..$b|?{$_-match$c}).counttác phẩm có phạm vi -65536..65535 vàoPowershell 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{

Đầu vào ở định dạng này:

1, 100
3

2

Haskell, 65 byte

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

Sự importhủy hoại điểm số. Ví dụ sử dụng: ((-200)#200)12-> 24.


Ví dụ sử dụng sẽ xuất ra 24 vì 12 xuất hiện 24 lần trong khoảng từ -200 đến 200
Kritixi Lithos

@KritixiLithos: Ôi xin lỗi! Tất nhiên, đó chỉ là lỗi sao chép & 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)}

Chỉnh sửa 1:

Đã lưu 3 byte bằng cách sử dụng các tham số tốc ký


2

Scala, 50 byte

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

mất đầu vào đầu tiên; gọi nó như thế này:f("12")(-200,200)

Giải thích:

(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

Khá đơn giản:

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

1
Chào mừng đến với PPCG! Câu trả lời hay nhưng giả sử rằng đầu vào đã được chỉ định thường không được chấp nhận. Để làm cho câu trả lời của bạn đủ điều kiện, bạn sẽ phải đọc đầu vào từ stdin, chẳng hạn như: a=scan();sum(grepl(a,a[2]:a[3]))hoặc làm đối số cho hàm : function(a,b,c)sum(grepl(a,b:c)), cả hai đều tương đương trong trường hợp này.
Billywob

@Billywob cảm ơn, sẽ ghi nhớ điều này! chỉnh sửa câu trả lời cho phù hợp.
Nutle

1

C #, 71 byte

Đánh bại câu trả lời Java của tôi nhờ lambdas

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

Java cũng có lambdas
Kritixi Lithos

Vâng, tôi mới bắt đầu đọc về nó, nhưng họ không yêu cầu một số công cụ soạn thảo sẽ làm cho số lượng lớn hơn, hoặc tôi không thể đếm được
Yodle

Không biết xấu hổ đã lấy trộm câu trả lời javascript của @Grax (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);ngắn hơn nhiều
hstde 10/11/2016

1

Ruby 44 byte

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

Các trường hợp thử nghiệm:

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

Cách tiếp cận khá thẳng về phía trước:

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

Dùng thử trực tuyến


Lưu 4 byte với dấu gạch dưới hoặc bất kỳ chữ cái nào dưới dạng dấu phân cách regex. (không cần báo giá)
Tít

Bạn có thể tiết kiệm 3 Byte<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg Hülsermann

1

C, 143 135 byte

Cảm ơn @Kritixi Lithos đã giúp lưu 8 byte

Chắc chắn điều này có thể được thực hiện tốt hơn, nhưng đó là điều tốt nhất tôi có bây giờ. C không xử lý các chuỗi rất duyên dáng, do đó, tự nhiên phải mất khá nhiều thao tác.

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

Chương trình +

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

Tôi nghĩ rằng bạn có thể loại bỏ int i=lkhỏi vòng lặp for và thay vào đó khởi tạo nó int t=0như thế int t=0,i=lđể tiết kiệm một vài byte.
Kritixi Lithos

Điều này không được biên dịch? 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;} Tôi nghĩ biên dịch ngay cả khi không bao gồm ...
RosLuP

93 byteb[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;}
trần mèo

1

JavaScript, 46 45 byte

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

Đếm đệ quy cho đến khi bắt đầu> kết thúc

Chỉnh sửa: Chuyển sang kiểm tra RegExp để lưu một byte


1

PHP 68 63 byte

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

sử dụng như:

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

chỉnh sửa: 5 byte được lưu nhờ Titus


strstr($a[2]++,$a[1])>""thay vì strpos($a[2]++,$a[1])!==falsetiết kiệm 5 byte.
Tít

1

Powershell, 48 byte

Theo quy tắc, phạm vi có thể chứa hơn 50.000 phần tử. Vì vậy, chúng tôi không thể sử dụng toán tử phạm vi ..trực tiếp. Cảm ơn admBorkBork .

Nói thẳng:

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

Kịch bản thử nghiệm:

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

Đầu ra:

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

1

Japt , 14 8 byte

Lấy số nguyên được tìm thấy làm giá trị đầu vào cuối cùng.

õV èÈsøW

Dùng thử trực tuyến


Giải trình

             :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

Vì các phiên bản trước thiếu một lời giải thích, tôi không chắc về những điều đó, nhưng giải pháp 6 byte hiện tại của bạn là không chính xác, tôi sợ. Xem quy tắc này: " Như trong ví dụ đầu tiên, với trường hợp như 33, số 3sẽ được tính là chỉ xuất hiện một lần, không phải hai lần. " Số lần xuất hiện của bạn Wsẽ tính 3hai lần.
Kevin Cruijssen

Cảm ơn, @KevinCruijssen, đã quay lại với nó ~ một tháng sau và tự hỏi tại sao tôi lại làm theo cách của mình khi có một cách ngắn hơn - nên đọc lại thử thách trước khi cập nhật! Tôi đã quay lại bây giờ.
Xù xì

Tôi đã có điều tương tự xảy ra một vài lần. Tôi thấy câu trả lời của tôi, nghĩ rằng: điều này có thể dễ dàng hơn nhiều, đang thay đổi nó. Và ngay trước khi tôi nhấn lưu thay đổi, tôi thấy bây giờ tôi hiểu sai về thử thách. Btw, tôi vẫn tò mò về lời giải thích cho giải pháp 8 byte. :)
Kevin Cruijssen

1
@KevinCruijssen: giải thích thêm.
Xù xì

0

Java, 92 89 71 byte

Bây giờ với lambdas!

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

Giải pháp hàm 89 byte cũ:

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

Hoan hô cho các chức năng siêu tăng!


Bạn có thể xóa int i=lkhỏi vòng lặp for và thay vào đó khai báo nó bằng cách amuốn int a=0,i=l;lưu vài byte
Kritixi Lithos

Ah tôi biết tôi đã bỏ lỡ một cái gì đó, cảm ơn!
Yodle

1
Về cơ bản giống như câu trả lời này .
Kritixi Lithos

0

GolfSharp (không cạnh tranh), 41 byte

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

cạnh tranh 45 byte

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

1
Cam kết cuối cùng là 8 phút trước, vì vậy đây là một câu trả lời cạnh tranh đòi hỏi điều này phải có hiệu quả trước khi thử thách bắt đầu. Bạn có thể xác minh điều này?
Kade

Tôi nghĩ vậy, nếu không tôi sẽ thay đổi nó thành không cạnh tranh, chỉnh sửa các lỗi đã được sửa. sẽ thay đổi ngay bây giờ (tôi sử dụng các thách thức để cải thiện ngôn ngữ)
downrep_nation

2
Mã xác nhận 8 phút trước đã thay đổi Ichức năng để chuyển đổi phần tử thành chuỗi trước khi kiểm tra xem nó có chứa nó không.
Kade


0

Vợt 91 byte

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

Ung dung:

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

Kiểm tra:

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

Đầu ra:

19
19
24
0
2
1

0

Tiên đề 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)

các kết quả

(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

Toán học, 70 byte

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

đầu vào

[12, -200,200]

đầu ra

24


0

Clojure, 65 byte

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

0

PHP, 56 byte

chạy như ống Hãy thử trực tuyến

Đầu vào

$argv = [number_to_find, range_start, range_end];

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

Giải trình

#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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.