вход
Целое число n (≥ 1) и цифра d (целое число такое, что 0 ≤ d ≤ 9).
В любом порядке; от стандартного ввода или параметров или чего-либо; к программе или функции; и т.п.
Выход
Целые числа от 1 до n включительно (по порядку), чьи десятичные представления содержат четное число d s. (То есть целые числа в списке - это целые числа, имеющие соответственно четное число d s.)
В любом стандартном формате и т. Д. В частности, выходные данные не должны быть представлены в десятичном виде.
Если выводится как одна строка, целые числа должны быть как-то разделены (пробелы, запятые, переводы строк, нулевые байты и т. Д.).
Примеры
in(d,n) ↦ out
1,12 ↦ 2 3 4 5 6 7 8 9 11
0,111 ↦ 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,51,52,53,54,55,56,57,58,59,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99,100,111
Благодарность
Для квинтопии за титул.
Ответы:
Желе, 7 байт
Попробуйте онлайн!
Как это работает
источник
05AB1E ,
1110 байтКод:
Объяснение:
Попробуйте онлайн
Использует кодировку CP-1252 .
источник
Haskell,
69635250 байтПростое решение для моего первого поста здесь. Используется
show
для подсчета числаd
s. Я явно не использовал вChar
качестве входных данных дляd
, что бы сохранить126 (после редактирования Дэмиена) байтов.РЕДАКТИРОВАТЬ: 11 байтов меньше благодаря Дэмиену! РЕДАКТИРОВАТЬ 2: еще 2 байта меньше благодаря Ними!
источник
Befunge,
1080945 байтОценка дается, что мы считаем весь квадрат, включая переводы строк, что имеет смысл. Вы можете скопировать вставить код в интерпретатор . Укажите два входа: сначала d, а затем n . Это решение не работает для значений, больших n > 999.
Это, очевидно, не будет претендентом на главный приз, но я давно хотел внедрить Codegolf в Befunge, поэтому я решил просто сделать это. Я полагаю, что это не будет даже близко к оптимальному решению Befunge, так как это первое, что я сделал в Befunge. Так что подсказки приветствуются, если вам нужны разъяснения или дополнительная информация, пожалуйста, дайте мне знать в комментариях.
Попытка объяснения:
В первом столбце вниз мы читаем целое число из входных данных, добавляем к нему 48 (6 * 8, вы увидите это чаще), чтобы преобразовать его в соответствующее значение ASCII и поместить его в
(10, 0)
.&
- читать ввод68*+
- добавить 4855+0p
- поставить значение на(10, 0)
Обратите внимание, что
d
at(1, 0)
- это просто простой способ получить число 100 в стеке.После этого мы идем на восток и читаем еще одно целое число и направляемся к тому, что я называю ASCIIfier. Это превращает текущее число в серию символов ASCII. ASCIIfier - это прямоугольная часть от
(13, 12)
до(26, 17)
. Он состоит из двух циклов, сначала подсчитывая сотни, а затем десятки и помещая их в три цифры в(6, 0)
и(5, 0)
. После этого вводится последняя цифра(4, 0)
. Таким образом, цифры на самом деле в обратном порядке.Поместив текущее целое число в серию символов ASCII, мы пойдем немного южнее, чтобы удалить добавленные нули. Таким образом, впоследствии то, что изначально представляют собой три ноля наверху, будет текущим числом без предопределенных нулей.
Затем мы возвращаемся на север, где помещаем три цифры в стек. Мы перебираем три цифры в верхнем цикле, каждый раз увеличивая счетчик,
(1, 1)
если текущая цифра соответствует входу dКогда это будет сделано, мы пойдем и проверим, является ли счетчик, который расположен на
(1, 1)
нечетном или четном. Если оно четное, мы выводим текущее число и переходим к большому внешнему циклу, чтобы уменьшить текущее значение и начать заново.источник
Python 2, 50 байт
Рекурсивная функция, которая принимает цифру
d
как строку, а верхнюю границуn
как число.Количество цифр
d
вn
проверяется на четность, беря его битовое дополнение по модулю 2, что дает1
четное и0
нечетное. Это многие изn
них добавляются в список, и функция возвращается кn-1
, останавливаясь через логическое короткое замыкание в пустом списке, когдаn==0
.Если выходные данные могут быть даны в порядке убывания, один байт может быть сохранен для 49 байтов:
Старое 51-байтовое решение:
Анонимная функция, которая принимает цифру
d
как строку, а верхнюю границу -n
как число.Используются два трюка:
range
нулевая индексация0...n-1
, поэтому мы добавляем единицу к каждому потенциальному значениюx
. Тогда, чтобы посчитатьd
«S вx+1
, он сохраняет характер использования его отрицания~x
вместо.~_%2
, который сначала переключает биты, чтобы переключить четность, затем берет последний бит с&1
(так же, как%2
здесь), производя истинное значение, только если оригинал был четным.источник
Pyth, 10 байт
Попробуйте онлайн. Тестирование.
источник
Луа, 86 байт
Если разрешено использование несовместимого разделителя, я мог бы заменить
io.write
егоprint
, что означает, что числа будут разделяться одним или несколькими символами новой строки.Это полная программа, которая должна называться так:
lua file.lua d n
.Он удаляет все несимвольные
d
символы из текущего числа и использует размер результирующей строки, чтобы решить, следует ли нам выводить это значение или нет.источник
JavaScript (ES6) 64
Анонимная функция с выводом на консоль. Простая реализация с использованием
split
для подсчета цифр.Использование вывода
alert
будет на 6 байт меньше, но мне это действительно не нравится (и я все равно не буду бить игрушечные языки)источник
MATL ,
1210 байтПервый вход n , второй d как строка. Например:
Попробуйте онлайн!
источник
Рубин,
4742 байтаЗапустите с d и n в качестве параметров командной строки, например
источник
?1
для"1"
. И это менее красиво, но на байт короче, чтобы сделать%2>0
вместо.odd?
PowerShell,
6255редактировать: использование блока параметров в этом случае короче. убрал лишнее пространство
Не язык игры в гольф, но это единственный, который я действительно знаю. Это будет работать, сохраненный в виде сценария и называется так
M:\Scripts\cgNeverTellMeTheOdds.ps1 1 12
. Первый аргумент - это цифра d, а второй - целое число n .Создайте массив от 1 до n . Для каждого из них преобразуйте это в массив символов. 10 будет 1,0. Использование
-match
в качестве оператора массива возвращает все элементы, которые соответствуют цифре d . Подсчитайте количество возвращаемых элементов и смоделируйте 2 результата. Результат будет 0 для четного и 1 для нечетного. 0 в качестве логического значения - ложь, поэтому мы используем!
цикл для оценки нечетных результатов как ложных, а четных - как истинных.Вывод - это новая строка, разделенная на консоли.
источник
Сетчатка ,
99105 байтОбратите внимание на конечные пробелы.
<empty>
представляет пустую строку.Принимает участие как
1 12
. Вывод разделен пробелом в порядке убывания.Я изменил,
0*1(0|10*1)*
чтобы соответствовать нечетному числу\1
в числе. Я изменил0
на(?!\1)\d
, и,1
чтобы\1
создать длинную строку регулярных выражений, которую вы видите выше. Понимание того, как работает связанное регулярное выражение, имеет решающее значение.Попробуйте онлайн
Комментируем объяснение старой версии
Если в порядке убывания были в порядке
источник
1+
и$.0
сделать преобразование из одинарного обратно в десятичное.Утилиты Bash + GNU, 37
источник
*
Следующее открытие скобка представляется излишним. Удаление этого сэкономит вам 1 байт.Python 3.4,
92857985 байтСохранено 7 байтов благодаря Mego.
Сохранено еще 6 байтов благодаря mbomb007.
Восстановил эти 6 байтов, потому что Python 3.x
Это мой первый выстрел в коде гольф, так что здесь ничего не выходит!
источник
`d`
вместоstr(d)
, и если вы предполагаете, что n является целым числом (<2 ** 32), вы можете использовать`i`
вместоstr(i)
.__repr__
Python 2 обратные ссылки были сокращением , они были удалены в Python 3. Вероятно, вам следует изменить заголовок, чтобы отразить это ограничение.Perl 6, 38 байт
источник
Брахилог , 32 байта
Ожидается N в качестве ввода и цифра в качестве вывода, например
brachylog_main(12,1).
объяснение
источник
Mathematica, 54 байта
источник
Perl, 28
2931байтВключает +2 для
-an
Запустить с указанием цифры и считать в последовательных строках на STDIN:
источник
Oracle SQL 11.2,
11182 байтаисточник
Котлин, 136 байт
Полностью функциональная программа, принимает аргументы как: nd
Попробуйте онлайн!
источник
Java 8, 84 байта
Это лямбда-выражение для
BiConsumer< Integer, Integer>
:Объяснение:
для каждого числа от 1 до n преобразуйте число в строку и разделите его, используя d в качестве разделителя. Если он был разбит на нечетное количество секций, то распечатайте номер, за которым следует новая строка.
источник
Сетчатка,
727155Огромное спасибо Мартину, который совершенно случайно напомнил мне об атомных группах соответствия!
Попробуйте онлайн!
Объяснение:
Замените число, но не цифру, на ее унарный эквивалент.
\B
соответствует каждой позиции (нулевой ширины), которая не является границей слова. Обратите внимание, что это не будет совпадать ни с одним из следующих: начало строки, конец строки или любая позиция вокруг символа запятой. Каждая из этих неограниченных границ затем заменяется новой строкой, а затем строкой, которая идет перед match ($`
). Это дает список как:Где
d
любая десятичная цифра?Это преобразует все списки
1
s в десятичное представление их длин. Это удобно не повлияет на1
то, что может быть перед запятой, так как это всегда длина1
.Здесь
G
включается режим grep, что означает, что строки, соответствующие регулярному выражению, сохраняются, а другие строки отбрасываются. Это регулярное выражение сложное, но оно по существу соответствует группам из 2 первых цифр (хранится в группе захвата 1, поэтому мы можем ссылаться на нее\1
).Ключевым моментом здесь является то, что, если он потерпел неудачу при использовании не жадного сопоставления до двух самых ранних появлений цифр, он просто откатился бы и попытался снова, с
.
сопоставлением по цифре. Это сделало бы совпадение чисел, подобных 111, когда наша цифра равна 1. Следовательно, мы используем,?>
чтобы сделать совпадение атомарным, по существу предотвращая обратное отслеживание регулярного выражения до того, как оно совпадет с этим значением. Атомное совпадение работает как позитивное совпадение в определенных ароматах. Так как*
мета-символ сопровождается будет соответствовать символы до тех пор, пока не сможет соответствовать тому , что мы сохранили в . Затем, как только мы сделаем это дважды, «память» регулярного выражения будет уничтожена, предотвращая поведение, которое обычно происходит, когда оно возвращается и имеет?
.
\1
.
соответствует дополнительному символу, нашей\1
цифре, которая создаст недопустимые совпадения.Затем мы проверяем, что из конечной позиции после сопоставления повторяющихся групп из двух входных цифр мы не можем сопоставить другую входную цифру.
Здесь мы просто удаляем цифру и запятую из каждой строки, поэтому мы просто получаем наш хороший ответ.
источник
Python 2,
5754 байтаиспользование
источник
Юлия, 44 байта
Это функция, которая принимает два целых числа и возвращает массив.
Начнем с набора целых чисел от 1 до
n
включительно. Для каждого целого числаi
мы определяем, какие из его десятичных цифр равныd
, что дает логический массив. Мыsum
это, чтобы получить число вхожденийd
в виде цифры вi
иfilter
исходный диапазон на основе четности суммы.Попробуй здесь
источник
Серьезно, 17 байтов
Принимает входные данные как
n\n'd'
(целое число, новая строка, строка).Попробуйте онлайн!
Объяснение:
источник
Mathematica, 45 байт
Использует встроенный
DigitCount
.источник
Japt,
1312 байтВводим n , затем d заключаем в кавычки. Проверьте это онлайн!
Как это работает
источник
CJam, 38 байт
объяснение
источник
Скала, 66 байт
источник
R, 145 байт (я уверен, что есть способы сократить это далее) :)
источник