특정 범위의 숫자를 포함하는 정수의 수


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의 끝을 의미합니다.

그리고 프로그램해야 여러 번 출력하는 방법 3의 범위에 나타납니다 1100 포함 . 3정수에 나타납니다 3, 13, 23, 30, 31, 32, 33, ..., 9319 시간의 총에. 따라서 프로그램은 ~로 범위에 19여러 번 3표시 되므로 출력 으로 출력해야 1합니다 100.

규칙

  • 프로그램과 기능 모두 허용됩니다.
  • 모든 숫자가됩니다 즉, 정수 것 없는 어떤 수 float의 또는 double의.
  • 참고 : 찾는 숫자는 항상 범위 안에 있습니다 0≤x≤127. 이 범위를 벗어나는 경우 는 없습니다0≤x≤127 .
  • 제 1 실시 예에서와 같이, 같은 경우에 33, 숫자는 3단지 표시로 간주한다 한번 , 하지 회.
  • 범위의 시작과 끝의 값은 사이 -6553665535포함됩니다.
  • 범위 시작 값은 범위 끝을 초과하지 않습니다. 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

간식 스 니펫

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# 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

답변:


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, 다시 시작하기 전에졌습니다.
Magic Octopus Urn

이 도전을 축하해 주셔서 감사합니다!
Kritixi Lithos

@KritixiLithos 감사합니다! :)
Adnan

다른 6 바이트 :Ÿʒ³å}g
케빈 Cruijssen

9

배쉬, 20 바이트

명백한 대답

seq $2 $3|grep -c $1

$ bash golf 3 1 100
19

6

펄, 20 바이트

grep@ ardnew 's answer 에서와 같이 사용하여 2 바이트를 절약했습니다 .

바이트 수에는 18 바이트의 코드와 -ap플래그가 포함됩니다.

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

세 줄에 세 개의 숫자를 입력하십시오.

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

5

파이썬 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!
Kade

4

자바 스크립트 (ES6), 46 45 바이트

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

(최고의 비 재귀 버전은 61 바이트였습니다.) 편집 : @ edc65 덕분에 1 바이트가 절약되었습니다.


!!match대신에 includes.
edc65

4

젤리 , 7 바이트

rAẇ@€⁵S

TryItOnline!

입력 : 시작, 종료, ToFind

어떻게?

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

서브리스트 존재 점검을 위해 반복 가능한 정수로의 기본 캐스트는 문자리스트가 아닌 10 진리스트로 캐스트되므로 음수는 선행 음수 값 (예 : -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

mazzy로 인해 -6 바이트

양식 번호 lower_bound upper_bound 의 명령 행 인수를 통해 입력하십시오 . 스크립트 블록을 만들기 위해 for둘러싸이지 않으면 구문 분석 오류 가 발생하는 내부 세미콜론으로 인해 표기법에 약간 구미 $(...)가 있습니다. 상승을 통해 우리는 기본적으로 루프 $a우리가 나오기 전까지 $b사용 Where-Object합니다 ( |?{...}) 그 숫자를 꺼내 그 정규식 -match에 대한$c 합니다. 그것은 parens로 캡슐화되어 있으며, 우리는 그것을 .count파이프 라인에 남겨두고 출력은 암시 적입니다.


그러나 범위가 50,000 요소를 초과하지 않을 경우 루프를 건너 뛰고 범위 연산자 ..45 43 바이트 동안 직접 사용할 수 있습니다 . 그러나 챌린지 사양에 포함되어 있지 않으므로 유효하지 않습니다. 버머.

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

큰! 50K 요소 정보에 감사드립니다. 몇 가지 제안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

하스켈, 65 바이트

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

import점수 유적. 사용 예 : ((-200)#200)12-> 24.


-200과 200 사이에 12가 24 번 나타나므로 사용 예는 24를 출력해야합니다.
Kritixi Lithos

@KritixiLithos : 아 죄송합니다! 물론 복사 및 pase 오류 일뿐입니다.
nimi

2

자바 7 85 바이트

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

2

스위프트 3, 96 93 바이트

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

편집 1 :

속기 매개 변수를 사용하여 3 바이트 절약


2

스칼라, 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 바이트

람다 덕분에 Java 답변을 이길 수 있습니다.

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

자바는 또한 람다있다
Kritixi LITHOS에게

그래, 난 그냥 그것에 대해 읽기 시작하지만, 그들은 bytecount보다 더 크게 만들 것입니다 일부 상용구 물건을 필요로하지 않는, 또는 나는 그것을 셀 수 없다
요들

뻔뻔는 @Grax의 자바 스크립트 대답은 훔친 (n,s,e)=>s>e?0:((""+s).Contains(n+"")?1:0)+f(n,++s,e);방법 짧은
hstde

1

루비 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

PHP, 62 바이트

매우 직접적인 접근 방식 :

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

온라인으로 사용해보십시오


밑줄이나 문자를 사용하여 4 바이트를 정규식 구분 기호로 저장하십시오. (따옴표가 필요 없음)
Titus

3 바이트를 절약 할 수 있습니다<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Jörg

1

C, 143135 바이트

8 바이트 절약에 도움을 준 @Kritixi Lithos에게 감사드립니다.

분명히 이것은 더 잘 할 수 있지만 지금까지 내가 가진 최고입니다. 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에 대한 루프에서 대신에 그것을 초기화 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;} return 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

1

자바 스크립트, 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])!==false5 바이트 를 절약합니다.
Titus

1

파워 쉘, 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

apt , 14 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두 번 계산 됩니다.
케빈 크루이 ssen

감사합니다. @KevinCruijssen은 한 달 후 다시 돌아와서 더 짧은 방법이 있었을 때와 같은 방식으로 왜 그렇게했는지 궁금했습니다. 업데이트하기 전에 도전을 다시 읽어야합니다! 지금 롤백했습니다.
얽히고 설킨

나는 같은 일이 몇 번 일어났다. 내 대답을보고 생각하십시오. 이것이 훨씬 쉬울 수 있습니다. 변경하고 있습니다. 그리고 변경 사항을 저장하기 직전에 난 지금 도전을 잘못 해석하는 것을 볼 수 있습니다. Btw, 여전히 8 바이트 솔루션에 대한 설명이 궁금합니다. :)
Kevin Cruijssen

1
@KevinCruijssen : 설명이 추가되었습니다.
얽히고 설킨

0

자바, 92 89 71 바이트

이제 람다와 함께!

(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=lfor-loop에서 제거 하고 대신 몇 바이트를 절약 하는 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 분 전에 수행되었으므로 경쟁 답변이 되려면 도전이 시작되기 전에 이것이 작동해야합니다. 이것을 확인할 수 있습니까?
Kade

그렇지 않다면 경쟁하지 않는 것으로 변경하면 수정 된 버그를 수정해야합니다. 지금 변화 할 것입니다 (언어를 향상시키기 위해 도전을 사용합니다)
downrep_nation

2
8 분 전에 코드 커밋 I은 요소가 포함되어 있는지 확인하기 전에 먼저 요소를 문자열로 변환 하도록 함수를 변경 했습니다.
Kade


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

클로저, 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.