多少整数包含特定范围内的数字


19

程序应输入数字,范围的起点和范围的终点,并输出该数字在范围的起点和终点之间(包括两端)显示多少个整数。程序和功能都被允许。

输入示例

例如:

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

以上所有四个输入示例均有效,并且所有这些示例均表示3所讨论的数字,1范围的开头和范围100的结尾。

然后程序应输出31100 包含在内的次数3出现在整数3132330313233,...,93在总共19次。因此程序应将输出19作为输出,因为这是31到的范围出现了多少次100

规则

  • 程序和功能都被允许。
  • 所有数字都是整数,表示不会floats或doubles。
  • 注意:搜寻的号码将始终在范围内0≤x≤127。在任何情况下都不会超出此0≤x≤127范围。
  • 与第一个示例一样,情况为33,该数字3将被视为仅出现一次而不是两次。
  • 范围的开始和结束的值将介于-65536和之间65535
  • 范围起点的值永远不会超过或等于范围终点。 start < end
  • 范围也包括在内。例如,如果输入为8 8 10,则范围为8≤x≤10,因此输出为1。
  • 可以采用示例中显示的任何方式进行输入。您可以按照任何希望的方式将输入作为字符串或数字。

测试用例

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

零食片段

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

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

如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中:

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

Answers:


8

05AB1E,6个字节

输入形式:上限下限数字

Ÿvy³åO

说明:

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

使用CP-1252编码。在线尝试!


4
选择Groovy {a,b,c->} Aww ... dangit,我迷路了,然后又重新开始。
魔术章鱼缸

恭喜您赢得了这项挑战!
Kritixi Lithos

@KritixiLithos谢谢!:)
阿德南(Adnan)

6位元组的替代方案:Ÿʒ³å}g
Kevin Cruijssen

9

Bash,20个字节

显而易见的答案

seq $2 $3|grep -c $1

$ bash golf 3 1 100
19

6

Perl,20个字节

grep在@ardnew的answer中使用as 节省了2个字节。

字节数包括18个字节的代码和-ap标志。

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

在三行中分别给出3个数字:

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

5

Python 2,47 43字节

相对简单,利用Python 2的repr简短形式。

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

输出:

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

为什么您必须全神贯注地使用-~a而不是a+1
Artyer

1
@Artyer好玩!
卡德,2016年

4

JavaScript(ES6),46 45字节

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

(我最好的非递归版本是61字节。)编辑:感谢@ edc65,节省了1个字节。


!!match代替includes
edc65 '16

4

果冻,7 个字节

rAẇ@€⁵S

TryItOnline!

输入:开始,结束,查找

怎么样?

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

子列表存在检查的默认整数转换为可迭代的整数转换为十进制列表(不是字符列表),因此负数具有前导负值(例如-122-> [-1,2,2]不会找到的子列表[1,2]),因此采用首先,绝对值似乎是最复杂的解决方案。


4

PowerShell v2 +,64 62 56字节

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

-6个字节,感谢mazzy

通过格式为lower_bound upper_bound的命令行参数输入。这种表示法有点愚蠢,因为for如果未在其中$(...)创建脚本块,则会引起解析错误,从而引起解析错误。我们基本上向上循环$a直到我们命中为止$b,使用Where-Object(the |?{...})提取那些正则表达式所-match针对的数字$c。那被封装在括号中,我们将.count其封装起来,然后留在管道上,输出是隐式的。


但是,如果我们保证范围不超过50,000个元素,则可以跳过循环,仅..直接使用range运算符即可获得45 43个字节。但是,由于这不在挑战规范中,因此这是无效的。笨蛋

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

大!感谢您提供5万个元素的信息。几点建议param($c,$a,$b)$(for(;$a-le$b){1|?{$a++-match$c}}).count
mazzy

param($c,$a,$b)($a..$b|?{$_-match$c}).count与范围-65536..65535的作品Powershell 5.1
MAZZY

3

Vim,46,41字节

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

输入格式如下:

1, 100
3

2

Haskell,65个字节

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

import遗址的分数。用法示例:((-200)#200)12-> 24


使用示例应输出24,因为12在-200至200之间出现了24次
Kritixi Lithos

@KritixiLithos:抱歉!当然可以,这只是复制和插入错误。
nimi

2

Java 7 85字节

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字节

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

编辑1:

通过使用速记参数节省了3个字节


2

Scala,50个字节

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

首先输入咖喱;这样称呼它:f("12")(-200,200)

外植体:

(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个字节

非常简单:

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

1
欢迎来到PPCG!好的答案,但通常不接受已指定输入的假设。为了使您的答案合格,您将不得不从stdin读取输入,例如:a=scan();sum(grepl(a,a[2]:a[3]))或作为function:的参数function(a,b,c)sum(grepl(a,b:c)),在这种情况下,两者都是等效的。
Billywob,

@Billywob谢谢,请记住这一点!相应地编辑了答案。
Nutle

1

C#,71个字节

感谢lambdas击败我的Java答案

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

Java也有lambdas
Kritixi Lithos's

是的,我才刚开始阅读它,但是他们是否不需要一些能够使字节数更大的样板内容,或者我不能数一下
Yodle

无耻地偷了@Grax的javascript答案(n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);更短了
hstde

1

Ruby 44字节

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

测试用例:

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

C,143135字节

感谢@Kritixi Lithos帮助节省了8个字节

当然可以做得更好,但是这是我目前所拥有的最好的。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;}

取消高尔夫+程序

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

我认为您可以int i=l从for循环中删除for,而可以int t=0像这样初始化它int t=0,i=l以节省一些字节。
Kritixi Lithos

这样不编译?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;}返回t;}我认为即使没有包含也可以编译...
RosLuP

93字节b[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 '18

1

JavaScript,46 45字节

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

递归计数直到开始>结束

编辑:切换到RegExp测试以保存一个字节


1

PHP,68 63字节

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

用途像:

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

编辑:感谢Titus,节省了5个字节


strstr($a[2]++,$a[1])>""而不是strpos($a[2]++,$a[1])!==false节省5个字节。
泰特斯

1

Powershell,48个字节

根据规则,范围可以包含50,000个以上的元素。因此,我们不能..直接使用范围运算符。谢谢AdmBorkBork

直截了当:

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

测试脚本:

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

输出:

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

1

Japt14 8字节

将要找到的整数作为最后一个输入值。

õV èÈsøW

在线尝试


说明

             :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

由于以前的版本缺少解释,因此我不确定这些解释,但是恐怕您当前的6字节解决方案是错误的。参见以下规则:“ 与在第一个示例中一样,情况为33,该数字3将被视为仅出现一次,而不是两次。 ”您的出现次数W将被计算为3两次。
凯文·克鲁伊森

谢谢,@ KevinCruijssen,〜一个月后又回来了,我想知道为什么我要以一种更短的方式做我的事情-应该在更新之前重读挑战!我已经回滚了。
毛茸茸的

我曾经发生过几次相同的事情。我想出了我的答案,认为:可以更轻松地进行更改。而且,在我点击保存更改之前,我现在发现我误解了挑战。顺便说一句,我仍然对8字节解决方案的解释感到好奇。:)
Kevin Cruijssen

1
@KevinCruijssen:添加了说明。
毛茸茸的

0

Java,92 89 71字节

现在有了lambdas!

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

旧的89字节函数解决方案:

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

超级增加功能万岁!


您可以删除int i=l从for循环,而是以声明它a就像int a=0,i=l;到节省几个字节
Kritixi LITHOS

啊,我知道我错过了一些东西,谢谢!
Yodle

1
基本上与此答案相同。
Kritixi Lithos

0

GolfSharp(非竞赛),41字节

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

竞争45字节

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

1
最后一次提交是在8分钟前,因此要想成为竞争性答案,必须在挑战开始之前奏效。你能验证一下吗?
卡德,2016年

我认为是的,如果没有,我将其更改为非竞争性,则必须修正已修复的错误。现在将会改变(我使用挑战来改善语言)
downrep_nation

2
8分钟前提交的代码将I功能更改为先将元素转换为字符串,然后再检查是否包含该元素。
卡德


0

拍子91字节

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

取消高尔夫:

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

测试:

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

输出:

19
19
24
0
2
1

0

公理字节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)

结果

(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个字节

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

输入

[12,-200,200]

输出

24


0

Clojure,65个字节

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

0

PHP,56字节

作为管道运行 在线尝试

输入项

$argv = [number_to_find, range_start, range_end];

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

说明

#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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.