Простая часть: учитывая входную строку, содержащую только печатаемые символы ASCII (пробел - тильда), подсчитайте количество вхождений каждого символа и верните результат в любом удобном формате. Результат для строки a%hda7a
должно быть что - то вроде: a:3, %:1, h:1, 7:1, d:1
. Сортировка не нужна, разделители и форматы являются необязательными, но необходимо легко понять, какое число соответствует какому символу. Вы не должны включать символы, которых нет во входной строке ( a:3, b:0, c:0, d:1, ...
это не ОК).
Настоящий вызов:
Преобразуйте каждый символ в вашем коде в 8-битное двоичное число (или 16-битное, если вы используете UTF-16 или аналогичный) и перечислите каждый символ, начиная с 0
.
Для каждого символа ( i
является перечислителем), i%7
-бит 1 должен быть 1
. Биты пронумерованы справа. Все остальные биты могут быть любыми.
Давайте использовать следующий код в качестве примера:
[f]-xif)#f
Преобразовав это в двоичный файл, мы получим массив ниже. Первый номер (представляющий [
есть 1
в положении 0'th, так что один КИ. Второй номер (представляющий f
есть 1
в положении 1'st, так что один КИ тоже. Продолжить как это, и вы увидите , что приведенный выше код действителен.
C 76543210 Бит номер -------- ---------- [0101101 1 0 - OK f 011001 1 0 1 - ОК ] 01011 1 01 2 - ОК - 0010 1 101 3 - ОК х 011 1 1000 4 - ОК я 01 1 01001 5 - ОК f 0 1 100110 6 - ОК ) 0010100 10 0 - ОК # 001000 1 1 1 - ОК f 01100 1 10 2 - ОК
Если мы изменим код на: ]f[-xif)#f
мы получим следующее начало последовательности:
C 76543210 Bit number
- -------- ----------
] 01011101 0 <- OK
f 01100110 1 <- OK
[ 01011011 2 <- Not OK
- 00101101 3 <- OK
Как мы видим, третий символ [
не имеет 1
второй позиции (с нулевым индексом), и поэтому этот код недействителен.
Тестовые случаи:
Input:
This is a string containing some symbols: ".#!".#&/#
Output:
! " # & / : T a b c e g h i l m n o r s t y .
7 1 2 3 1 1 1 1 2 1 1 1 2 1 5 1 2 4 3 1 6 2 1 2
Любой разумный формат вывода в порядке (все, что вам удобнее). Вы можете, например, иметь: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...
или [ ,7][!,1][",2][#,3][&,1]...
. Вывод осуществляется любым стандартным способом (возврат из функции, вывод на STDOUT и т. Д.)
1i
модуль 7
.
Это код-гольф , поэтому самый короткий код в байтах выиграет реф .
источник
n%7
месте> pastie.org/pastes/10985263/text00001010
. Это тоже может быть полезно! :)Ответы:
Пайк,
16 байтПопробуй это здесь!
Половина этого кода просто бездействует ...
источник
'abc'==['a','b','c']
, так как она может быть и в Pyke ...?Pyth,
1287 байт-1 байт благодаря @Loovjo
двоичное представление
Попробуй здесь
источник
13
для111
выглядит странно, но его нельзя понять неправильно (не может быть ни одного символа,13
который используется 1 раз), так что это совершенно правильно!Befunge-93, 150 байт
Попробуйте онлайн!
Я начал с того, что написал это как обычную программу Befunge, в которую играл как можно больше. Затем я добавил отступы, чтобы различные символы в программе появлялись только в разрешенных местах. Это заполнение основывалось на том факте, что неподдерживаемые команды игнорируются в Befunge-93, поэтому мне просто нужна была последовательность неиспользуемых символов, биты которых выровнены с требуемыми позициями (последовательность, которую я использовал, была
={}{}{}
).Сложным было то, что различные ветви между строками должны были правильно выстраиваться (например,
v
стрелка в одной строке должна была бы совпадать со<
стрелкой под ней). Это еще более осложнялось тем фактом, что команду bridge (#
) нельзя отделить от соседней стрелки перехода . Первоначально я попытался сгенерировать заполнение программно, но в конце концов это был в основном ручной процесс.Из-за размера программы я не собираюсь перечислять полный анализ символов, но это пример из начала и конца:
Разрывы строки обрабатываются как символы новой строки, поэтому они будут либо в положении 1, либо в 3.
источник
MATL , 17 байт
Отображает счетчик, а затем соответствующий символ, разделенный новой строкой. Самая большая трудность - это то,
@
что есть0b01000000
; Я надеюсь, что смогу найти способ обойтись без него.Попробуйте онлайн!
Объяснение:
MATL, 15 байт (сомнительный вывод)
Если разрешено просто оставлять два вектора строк в стеке (поведение, подобное функциональному, как в этом посте Meta), мы можем перейти к
Но здесь вывод не совсем аккуратно упорядочен.
источник
D
dGu
в конце программы), и я не уверен, достаточно ли отличается 15-байтовая версия.CJam, 14 байтов
Попробуй это здесь.
Пробел перед
@
иs
после него вставляются символы-заполнители, чтобы коды ASCII соответствовали требуемому шаблону: пробел ничего не делает, а методs
просто преобразует строку в строку. Кроме этого, это довольно простая и понятная реализация задачи:Для ввода
foobar123
этот код выводит[['f 1] ['o 2] ['b 1] ['a 1] ['r 1] ['1 2] ['2 2] ['3 1]]
. Если просто печатать счетчики в одной строке и соответствующие символы в другой, как в:считается приемлемым выходным форматом, тогда он
]z
может быть опущен, чтобы сохранить два байта, всего 12 байтов . Да, сокращенный код все равно будет соответствовать требованию битового шаблона.Ps. Я также написал простую программу проверки исходного кода для этой задачи. Учитывая строку кода в качестве входных данных, он сначала отобразит эту строку, а затем напечатает ту же строку с каждым символом, замененным его ( n % 7) -ым битом ASCII. Если вторая строка - все единицы, ввод действителен.
источник
Желе , 6 байтов в кодовой странице желе
Попробуйте онлайн!
Это функция, которая возвращает список пар (символ, количество). (Jelly представляет такие списки в виде текста, например, если они отправляются на стандартный вывод, объединяя элементы, поэтому вы должны рассматривать это как функцию, а не как целую программу. ( Вот та же программа с некоторым кодом, добавленным к вызовите функцию, а затем напечатайте внутреннюю структуру в стандартный вывод, доказав, что вывод в однозначном формате.)
Двоичное представление и объяснение:
Можно видеть, что второй, третий и четвертый символы взаимно компенсируют друг друга и присутствуют только для поддержания необходимого нам набора битов.
Œr
это слишком удобно, и заполнение программы, чтобы мы могли ее использовать, вероятно, дает нам более короткую программу, чем попытка решить проблему без встроенной функции.источник