Вызов
Напишите программу, которая, учитывая строку x
длиной 10 символов и символ y
, выводит, сколько раз символ y
встречается в строке x
.
Самая короткая в байтах программа для этого побеждает.
пример
Input: tttggloyoi, t
Output: 3
Input: onomatopoe, o
Output: 4
Ответы:
Pyth, 3 байта
Пример выполнения:
Конечно, пользователь мог ввести более или менее 10 букв на первом вводе, но нам не нужно беспокоиться о том, что произойдет, когда пользователь нарушает спецификацию.
источник
/
просто считает количество вхождений в первой входной строке второй входной строки.w
занимает строку ввода.Pyth - 3 байта
Другой, менее очевидный ответ Pyth того же размера. Это сбрасывает счет на входе.
Тестовый пакет .
источник
JavaScript, 32
источник
Баш, 24 персонажа
Образец прогона:
источник
Сетчатка , 12 байт
Просто регулярное выражение, которое соответствует символу, который равен последнему символу на входе (кроме самого себя). Когда задано одно регулярное выражение, Retina просто возвращает количество совпадений.
источник
Лабиринт ,
32292724 байтаСначала читается один символ, за которым следует строка для подсчета, и предполагается, что в строке нет нулевых байтов.
объяснение
Код начинается с того
),}
, что задает нижнюю часть стека1
, читает первый символ и перемещает его во вспомогательный стек для будущего использования.1
Будет наш счетчик (смещение 1 будет отменен позже и необходимо для IP принять необходимые обороты).Теперь IP будет перемещаться вниз, чтобы прочитать первый символ строки поиска с помощью
,
. Значение отменяется`
, снова, чтобы получить правильное поведение при повороте. Пока мы читаем символы из STDIN, IP теперь будет следовать этому циклу:{:}
делает копию сохраненного символьного кода и+
добавляет его к текущему значению. Если результат0
(то есть текущий символ тот, который мы ищем), IP движется прямо вперед:-
просто избавляется от0
,)
увеличивает счетчик,{}
не работает.Однако, если результат после
+
ненулевой, мы не хотим считать текущий символ. Так что вместо этого IP поворачивает направо. Это тупик, так что код там выполняется дважды, один раз вперед и один раз назад. То есть фактический код в этом случае становится);___;)+-){}
.);
просто избавляется от этой ненулевой разницы, сбрасывает___
3 нуля, но;
отбрасывает один из них.)
увеличивает один из двух оставшихся двух нулей,+
складывает их в единое целое1
,-
вычитает из счетчика и)
увеличивает счетчик. Другими словами, мы создали очень тщательно продуманный запрет.Когда мы нажимаем EOF,
,
нажимает-1
, который`
превращается в1
и IP поворачивает направо.-
вычитает1
из счетчика (отмена начального смещения).!
печатает счетчик и@
завершает программу.источник
Python 3, 29 байт
Мех, это было легко. Предполагается, что ввод представляет собой десятибуквенную строку.
источник
f=lambda x,y:x.count(y)
будет короче? (Извините, если это не работает, я на мобильном и не могу проверить)print input().count(input())
илиa,b=input();print a.count(b)
с тем же количествомСнеговик 1.0.2 , 16 символов
Удивительно коротко. Объяснение:
источник
C ++ Template-Metaprogramming,
160154116 байтПросто для хихиканья.
Спасибо экс-Барту за игру в гольф!
Использование: Первый символ в экземпляре шаблона - это символ для поиска.
Компилировать с помощью clang -std = c ++ 11 -c -> результат находится в начале сообщения об ошибке.
Компилировать с помощью gcc -std = c ++ 11 -c -> результат находится внизу сообщения об ошибке.
Поиск A < 3 , 't', '\ 000'> и A < 3 , 't', '\ x00'>
154 байтовая версия
160-байтовая версия:
источник
((x==y)?1:0)
только(x==y)
до 6 байтов (я думаю).bool
чтобыint
преобразования.enum
вместоstatic const
. Используйте0
вместо того,'\0'
чтобы прекратить. Используйтеint
вместоchar
. Используйте немного другое объявление для создания экземпляра. Удалить суперфлуос, перевод строки.template<int w,int x,int y,int...s>class A{enum{a=A<w+(x==y),x,s...>::a};};A<0,'t','t','t','t','g','g','l','o','y','o','i',0>a;
, Проверено с g ++ и лязгом.Bash + grep, 26 байт
источник
Javascript (ES6), 26 байт
Это быстрое и простое решение определяет анонимную функцию. Чтобы использовать его, добавьте объявление переменной в начало. Попробуйте это:
Показать фрагмент кода
РЕДАКТИРОВАТЬ: О, я вижу, уже есть очень похожее решение. Я надеюсь, что все в порядке.
источник
Haskell, 21 байт
источник
C ++, 78 байт
Звоните так:
источник
Элемент , 23 байта
Новая строка является частью программы. Я на самом деле использую его как имя переменной .
Эта программа в основном работает, сохраняя целевой символ в переменной, сохраняя текущую строку в верхней части стека, а затем зацикливая процесс «рубить, сравнивать и перемещать результат под», суммируя результаты в конце.
Новая строка как имя переменной происходит от использования новой строки в конце ввода путем ее обрезания и сохранения в ней. Новая строка в коде - это то, где я читаю.
Ввод такой:
Выход такой
источник
Юлия,
2625 байтfindin
Функция возвращает индексы в качестве первого аргумента , при котором второй аргумент найден в качестве вектора. Длина вектора - это число вхождений.Сохранено один байт благодаря Глену О.
источник
endof
сэкономит вам байт вместоlength
.APL,
73 байтаЭто создает функциональный поезд. Он работает путем создания вектора нулей и единиц, соответствующих индексам, при которых символ появляется в строке (
⍷
). Затем вектор суммируется (+/
).Сохранено 4 байта благодаря kirbyfan64sos и NBZ!
источник
+/⍷
этого (я не знаю APL, поэтому я могу ошибаться).Perl,
2116 символов(13 символов кода + 3 символа командной строки.)
Образец прогона:
источник
<>
!-l
и убедившись, что в вашем вводе нет завершающего символа новой строки:echo -en 'onomatopoe\no' | perl -pe '$_=eval"y/".<>."//"'
perl -pe '$_+=s/${\<>}//g'
+=
нужно?=
кажется, работает так же хорошо (и все равно должен работать, когда ввод начинается с нескольких цифр).PHP,
3635 байтИспользование:
вызов сценария с двумя аргументами.
php script.php qwertzqwertz q
PHP, 23 байта
Если вы регистрируете глобальные переменные (возможно только в PHP 5.3 и ниже), вы можете сохранить 12 байтов (благодаря Martijn )
Использование:
вызов скрипта и объявление глобальных переменных.
php script.php?a=qwertzqwertz&b=q
источник
script.php?a=qwertzqwertz&b=q
, и сделать<?=substr_count($a,$b);
, 23 символовДьялог АПЛ , 3 байта
Т.е. "сумма равных байтов". Например:
или просто
К на этот раз не победил APL.
Попробуйте онлайн.
источник
T-SQL,
9940 байтПросто делает разницу между входной строкой и строкой с удаленным символом. Принимает данные из таблицы т
Изменить, чтобы устранить проблему с подсчетом пробелов и учесть текущие приемлемые входные данные для SQL. Спасибо @BradC за все изменения и экономию
источник
SELECT LEN(s)-LEN(REPLACE(s,c,''))FROM t
, гдеt
предварительно заполненная входная таблица с полямиs
иc
.A B C D
которые заканчиваются пробелами (если вас просят подсчитать пробелы), посколькуLEN
игнорирует конечные пробелы.space
проблему, когда у меня будет немного времениSELECT 11-LEN(REPLACE(s,c,'')+'x')FROM t
Октава / Матлаб, 33 байта
источник
J, 5 байт
Я чувствую, что у J есть встроенная функция для этого, но я не смог найти ее - может быть, один из активных пользователей J может просветить меня. Таким образом, вместо этого это сначала относится
=
к входам, превращая каждый символ в,1
если он равен запрошенному или0
нет. Затем+/
вычисляет сумму этого списка.источник
Пакетный файл, 121 байт
Потому что я мазохист ...
Предупреждение. Предполагается, что
_
этого не происходит во входной строке. Если это так, то переменнаяe
должна быть скорректирована соответствующим образом.Это устанавливает нашу переменную-счетчик
c
и нашу демаркацию конца строки как_
, прежде чем добавить ее к нашей входной строке%1
и установить для объединенной строки значениеt
. Затем мы входим в цикл:l
, мы устанавливаем временную символьную переменнуюa
в качестве первого символаt
, проверяем, соответствует ли она нашей второй входной строке,%2
и увеличиваем,c
если true, затем обрезаем первый символt
. Наше условие конца цикла проверяетt
нашу демаркацию конца строки и возвращается в исходное состояние, если нет. Затем мыecho
получаем значение нашего счетчика.Вероятно, было бы возможно использовать
FOR
цикл вместо этого, но это потребовало бы включения DelayedExpansion , который, я думаю, будет на самом деле длиннее, чем этот. Проверка этого оставлена в качестве упражнения для читателя.источник
CJam, 5 байтов
объяснение
источник
PowerShell, 32 байта
Четыре на одного! И они все одинаковой длины! :)
или
С другой стороны,
или
Первые два стиля используют встроенный оператор
-split
, а вторые два неявно приводят первый аргумент в виде строки и используют.Split()
оператор на основе строки. Во всех случаях возвращается массив, где мы должны уменьшить значение Count на единицу, так как мы возвращаем на один элемент массива больше, чем вхождения второго аргумента.Это было довольно весело ...
источник
Юлия, 21 байт
Обратите внимание, что для этого требуется
c
символ, а не строка из одного символа. Таким образом, вы используете его какf("test me",'e')
(который возвращает 2), а неf("test me","e")
(который возвращает 0, потому что'e'!="e"
).источник
> <> (Рыба) , 30 байт
Берет строку, затем символ для подсчета. Ввод не разделен (по крайней мере, в онлайн-переводчике). Попробуйте это на онлайн-переводчике: http://fishlanguage.com Я посчитал байты вручную, поэтому дайте мне знать, если я ошибаюсь.
объяснение
Во-первых,> <> является двухмерным и проходит по строке или столбцу, пока не достигнет
;
ошибку или. Это означает, что если он движется слева направо (как это происходит в начале программы), он обернется вокруг строки, если достигнет конца и не будет перемещен или получит указание остановить программу. Некоторые символы в строке будут повторяться, потому что они имеют разные функции в зависимости от направления указателя, а четвертая строка будет содержать символы в обратном порядке, поскольку указатель перемещается справа налево.Краткое описание программы приводится ниже. Посмотрите инструкции, перечисленные для> <> на esolangs, чтобы увидеть, что делает каждый отдельный символ.
Строка 1:
0&v
Строка 2:
=?\ilb
(начиная с того места, где строка 1 перемещает указатель, то есть третий символ)
строка 3:
=?\:@=&+&l1
(начиная с третьего символа)
Строка 4:
n&/;
(начиная с третьего символа)
источник
Рубин,
2220 байтДемо: http://ideone.com/MEeTd2
Это
-1
связано с тем, чтоgets
извлекает ввод, плюс символ новой строки. Ruby'sString#count
подсчитывает, сколько раз любой символ из аргумента встречается в строке.Например, для input [
test\n
,t\n
],t
происходит дважды, а\n
встречается один раз, и его нужно вычесть.источник
$><<
и уменьшить 4 байта.p gets.count(gets)-1
Рубин, 18 байт
Использование:
источник
Japt , 2 байта
Попробуйте онлайн!
источник