Скільки цілих чисел містять число у певному діапазоні


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, ..., 93в цілому 19 разів. Таким чином, програма повинна вивести 19як вихід , бо це те, скільки разів 3з'являються в діапазоні від 1до 100.

Правила

  • Дозволені як програми, так і функції.
  • Усі числа будуть цілими числами, це означає, що не буде жодного floats або doubles.
  • Примітка: шукане число завжди буде в діапазоні 0≤x≤127. Там не буде жодного випадку , коли він буде перебувати поза цим 0≤x≤127діапазону.
  • Як і в першому прикладі, у випадку "case 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

Відповіді:


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 Дякую! :)
Аднан


9

Баш, 20 байт

очевидна відповідь

seq $2 $3|grep -c $1

приклад

$ bash golf 3 1 100
19

6

Perl, 20 байт

Збережено 2 байта, використовуючи grepяк в @ ardnew - х відповіді .

Вхідний рахунок включає 18 байт коду та -apпрапорів.

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

Наведіть 3 числа в трьох окремих рядках:

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

5

Пітон 2, 47 43 байт

Відносно просто, використовуючи reprкоротку форму Python 2 .

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 для задоволення!
Каде

4

JavaScript (ES6), 46 45 байт

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

(Моя найкраща нерекурсивна версія - 61 байт.) Редагувати: Збережено 1 байт завдяки @ edc65.


!!matchзамість includes.
edc65

4

Желе , 7 байт

rAẇ@€⁵S

СпробуйтеItOnline!

Введення: Пуск, Кінець, 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

Перевірка цілого числа за ітерабельним для переліку існування підпису зазначається в десятковий список (а не у списку символів), тому від'ємні числа мають провідне негативне значення (наприклад, -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 байт завдяки мазі

Введіть через аргументи командного рядка номер форми Lower_bound верхній_bound . Трохи гуфі в позначеннях, через крапки з комою всередині forвикликає помилок розбору, якщо він не оточений $(...)для створення блоку скриптів. В основному $aми перебираємо цикл вгору, поки не натискаємо $b, використовуючи Where-Object( |?{...}), щоб витягнути ті числа, -matchпроти яких пересуваються $c. Це інкапсульовано в паренах, ми беремо .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

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 з'являється 24 рази між -200 і 200
Kritixi Lithos

@KritixiLithos: Вибачте! Звичайно, це лише помилка копіювання та пасингу.
німі

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

Швидкий 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(a,b,c)sum(grepl(a,b:c))обидва еквіваленти в цьому випадку.
Billywob

@Billywob дякую, майте це на увазі! відповідним чином відредагував відповідь.
Натле

1

C #, 71 байт

Побий мою відповідь Java завдяки лямбдам

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

У Java також є лямбди
Kritixi Lithos

Так, я щойно почав читати про це, але чи не потребують вони такі речі на коробці, які збільшували б кількість рахунків, або я не можу порахувати
Yodle

Безсоромно вкрали @Grax s JavaScript відповідь (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 байти з підкресленням або будь-якою літерою як розділовий знак регулярного вираження. (не потребує цитат)
Тіт

Ви можете зберегти 3 байт<?=count(preg_grep("/$argv[1]/",range($argv[2],$argv[3])));
Йорг Гюльсерманн

1

С, 143 135 байт

Дякуємо @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;}

Програма Ungolfed +

#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-цикл і замість цього ініціалізувати його 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;}
слюсарка

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

редагувати: 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

Japt , 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двічі.
Kevin Cruijssen

Дякую, @KevinCruijssen, повернувся до нього ~ через місяць і цікавився, чому я це роблю таким, яким я був, коли був коротший шлях - мав би перечитати проблему перед оновленням! Я його зараз відкотив.
Кудлатий

У мене те саме траплялося кілька разів. Я бачу свою відповідь, думаю: це може бути набагато простіше, я це змінюю. І перед тим, як потрапити на збереження змін, я бачу, що тепер неправильно трактую виклик. До речі, мені все ще цікаво пояснення 8-байтового рішення. :)
Кевін Круїссен

1
@KevinCruijssen: пояснення додано.
Кудлатий

0

Java, 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=lз циклу for-loop і замість цього оголосити його, aяк, int a=0,i=l;щоб зберегти кілька байтів
Kritixi Lithos

Ах, я знав, що щось пропустив, дякую!
Йодл

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 хвилин тому, тож щоб ця відповідь була конкурентною, потрібно, щоб це спрацювало до початку виклику. Ви можете це підтвердити?
Каде

Я думаю, що так, якщо ні, я зміню його на не конкуруючі, редагувати виправлені помилки необхідно. зміниться зараз (я використовую виклики для вдосконалення мови)
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

Математика, 70 байт

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

вхід

[12, -200,200]

вихід

24



0

PHP, 56 байт

run as pipe Спробуйте в Інтернеті

Вхідні дані

$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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.