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


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의 범위에 나타납니다 1에 100 포함 . 3정수에 나타납니다 3, 13, 23, 30, 31, 32, 33, ..., 9319 시간의 총에. 따라서 프로그램은 ~로 범위에 19여러 번 3표시 되므로 출력 으로 출력해야 1합니다 100.

규칙

  • 프로그램과 기능 모두 허용됩니다.
  • 모든 숫자가됩니다 즉, 정수 것 없는 어떤 수 float의 또는 double의.
  • 참고 : 찾는 숫자는 항상 범위 안에 있습니다 0≤x≤127. 이 범위를 벗어나는 경우 는 없습니다0≤x≤127 .
  • 제 1 실시 예에서와 같이, 같은 경우에 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

간식 스 니펫

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

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