Предположим, у нас есть строка, и мы хотим найти максимально повторяющуюся последовательность каждой буквы.
Например, учитывая пример ввода:
"acbaabbbaaaaacc"
Выход для ввода образца может быть:
a=5
c=2
b=3
Правила:
- Ваш код может быть функцией или программой - на ваш выбор
- Ввод может быть через стандартный ввод, файл или параметр функции
- Вывод должен содержать только символы, которые появляются на входе
- Максимальная длина ввода 1024
- Порядок вывода не имеет значения, но он должен быть напечатан в виде [char] = [максимально повторяемая последовательность] [разделитель]
- Строка может содержать любой символ
Конкурс заканчивается в четверг 3-го в 23:59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
в производственных системах! И я буду проклинать твое имя.Ответы:
8086 машинный код,
8280Содержание
x.com
файла:Он поддерживает только повторения до 99 символов.
Исходный код (служил вводом для
debug.com
ассемблера), с комментариями!Вот некоторые техники игры в гольф, которые, я думаю, были забавными:
3d00
где3d
ascii-код для=
. Таким образом, адрес записи массива для символаx
-3d78
. Когда интерпретируется как 2-символьная строка, этоx=
.104
; он перезаписывает код инициализации, который больше не нужен. Последовательность конца строки0D 0A 24
выполняется как безопасный код.aam
Инструкция здесь не предусматривает какой - либо играть в гольф, хотя он мог бы ...11b
, который,C3
по счастливой случайности , содержит необходимый машинный код .источник
CJam,
272625 байтПопробуйте онлайн.
пример
Как это работает
источник
J - 52 байта
Ну, опять простой подход.
Объяснение:
Пример:
Если разрешен вывод в свободной форме (как и во многих других ответах), у меня тоже есть 45-байтовая версия. Эти блоки представляют собой список блоков (да, они напечатаны так, хотя высота строки SE их разбивает).
источник
Руби, 72
Он принимает входные данные из аргументов командной строки и выводит на стандартный вывод.
источник
chars
немного корочеsplit("")
.chars
выдает перечислитель, а не массив. Я в 1.9.3, так это 2.0 вещь?chars
возвращает массив.p
вместоputs
?GolfScript, 26 байт
Попробуйте онлайн.
Объяснение:
:s
сохраняет входную строку в переменнойs
для последующего использования..&
извлекает уникальные символы из входных данных, которые{ }%
затем перебирает остальная часть кода в цикле.61
помещает число 61 (код ASCII для знака равенства) поверх текущего символа в стеке, чтобы действовать в качестве выходного разделителя.{2$=}s%
берет строкуs
и заменяет ее символы на 1, если они равны текущему символу, который повторяется, или на 0, если нет. (Он также оставляет текущий символ в стеке для вывода.)1,/
берет эту цепочку единиц и нулей и разбивает ее на нули.$
сортирует результирующие подстроки,-1=
извлекает последнюю подстроку (которая, поскольку они все состоят из повторений одного и того же символа, является самой длинной), и,
возвращает длину этой подстроки.n+
Устанавливает длину и добавляет к ней новую строку.Ps. Если знаки равенства в выходных данных являются необязательными, их
61
можно опустить (и2$
заменить на1$
) для общей длины 24 байта :источник
61
первый::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 байт
Мне нравится регулярное выражение
Вот скомпилированный JavaScript, который вы можете попробовать в консоли вашего браузера
Тогда вы можете позвонить
получить
источник
aaaabaa
.Pyth , 24
2526(или 29)Тест можно сделать здесь: ссылка
Выходы в формате:
Объяснение:
Python:
Для правильного (a = 5) вывода используйте:
29 символов
источник
k=''
определяется в другом месте.C
126125119 байтовБег:
источник
getchar()>0
,~getchar()
как в этом ответеless than zero
это нормально, но== EOF
более понятно.EOF
гарантированно будет отрицательным, а -1 используется, даже еслиchar
он подписан; смотрите здесьMathematica ,
747269Не очень хорошо, но струны не лучшая область Mathematica . Становится лучше, хотя. :-)
источник
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
крайней мере, оно довольно простое и читаемое.GroupBy
аGatherBy
?GroupBy
возвращаетAssociation
. Я еще не изучал другие различия в деталях. reference.wolfram.com/language/ref/GroupBy.html Вы можете попробовать это в облаке с помощью бесплатной учетной записи (вот как я с ними играю).C # (LinQPad)
146
Это ответ Цавино, но короче. Здесь я использовал
Distinct()
вместоGroupBy(c=>c)
. Кроме того, фигурные скобки из опущеныforeach-loop
:136
Я попытался использовать
lambda expression
вместо обычного синтаксиса запроса, но так как мне нужно былоCast<Match>
сначала, код стал на 1 символ длиннее ... В любом случае, поскольку он может выполняться в LinQPad, вы можете использоватьDump()
вместоConsole.WriteLine()
:Дальнейшее изучение кода заставило меня задуматься о
Max()
. Эта функция также принимаетFunc
. Таким образом, я мог пропуститьSelect
часть при использовании лямбда-выражения:Итак, конечный результат:
128
Обновить:
Благодаря подсказке Дэна Пьюзи, я смог сохранить еще 6 символов:
Длина:
122
источник
Dump()
недавно узнал метод, который экономит вам 10+ символов каждый раз :) Кудрявые скобки были легкими, а остальное было немного поразмыслив: DIEnumerable
отображения LinqPad, вы можете сохранить еще 8 символов, используя это в качестве своего тела:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Питон 3 (70)
Даже играющий в гольф Питон может быть очень удобочитаемым. Я думаю, что этот код полностью идиоматичен, за исключением однобуквенных переменных и однострочного цикла while.
Пример работы:
источник
Руби, 58
Принимает ввод из STDIN, выводит его в STDOUT в виде
{"a"=>5, "c"=>2, "b"=>3}
источник
C # в LINQPad - 159 байт
Ну, по крайней мере, я побью T-SQL; P Больше никого не побью, но я все равно решил поделиться этим.
Использование:
Предложения всегда приветствуются!
источник
Powershell
807772Вам нужно запустить его на консоли ...
источник
$x
это лишнее. Вы на три байта короче не используете его. Иsort -u
хватает. Редко возникает необходимость прописывать полные имена параметров. Это, однако, не удастся для определенных символов из-за беспрепятственного использования в регулярном выражении. В зависимости от того, как »Строка может содержать любой символ«, это может быть проблемой.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
, как будто вторые $ args пустые ... - darkajax 17 минут назад$args
больше нет скрипта).Perl - 65
7176символовМой первый код гольф!
Для каждого ответа скопируйте в golf.pl и запустите как:
Мое самое короткое решение печатает каждый символ столько раз, сколько он появляется, поскольку это не запрещено правилами.
Мое следующее самое короткое решение (85
90символов) печатает каждый символ только один раз:источник
F # - 106
В ФСИ звонит
дает
Однако, чтобы напечатать это без дополнительной информации, назовите это так:
который дает
источник
Javascript, 116 байт
Образец вывода:
источник
T-SQL (2012)
189171Редактировать: удалено,
ORDER BY
поскольку правила допускают любой порядок вывода.Принимает данные из переменной CHAR
@a
и использует рекурсивный CTE для создания строки для каждого символа в строке и выяснения последовательных вхождений.После этого все просто
SELECT
иGROUP BY
с учетом порядка вывода.Попробуйте это на SQL Fiddle.
Назначение переменной:
Образец вывода:
источник
str
функцию, вместоltrim
. Вы также можете назвать свою переменную,@
чтобы сохранить символ. Это позволяет вам потерятьi
переменную в rcte. Я думаю, что вы можете побрить несколько символов таким образом. Вы также можете переписать запрос с помощью оконной функции, такой как сумма по предыдущим строкам или запаздывание. Я еще не совсем понял, как тебе все равно.str
всегда выводит 10 символов, но это игра в гольф: PХаскель - 113
120байтовПротестировано с
источник
.
функцию (compose), чтобы избежать создания лямбды, в которой параметр появляется только после конца цепочки$
связанных функций. Для этого просто измените все$
s на.
s (пример:(\i->reverse$sort$group i)
превращается вreverse.sort.group
.JavaScript [83 байта]
Запустите этот код в консоли браузера.
Для ввода "
acbaabbbaaaaacc
" консоль должна выводить "Object {a: 5, b: 3, c: 2}
".источник
JavaScript - 91
РЕДАКТИРОВАТЬ: Мое первое решение подчиняется правилам, но оно печатает несколько раз отдельные вхождения символов, такие как
abab
=>,a=1,b=1,a=1,b=1
поэтому я выполнил это ( 101 символ), для тех, кто не удовлетворен моим первым:источник
Юлия, 85
источник
Python3 -
111,126,115114111 байтИсполняемый код, который будет читать 1 строку (используйте только строчные буквы az)
Изменить: Исключил ненужный вывод по запросу из @Therare
Вывод выглядит красиво
источник
for
илиif
.l=2
иo=1
для "helloworld"JavaScript -
141137125Я не люблю регулярные выражения :)
Бег
выходы
источник
Javascript,
10910410098 байтПример использования:
выходы:
источник
PHP,
10410296использование
печатные
источник
Java 247
источник
import java.util.*;
в Java?acbaabbbaaaaacc
выходыa=8; b=4; c=3
вместоa=5; b=3; c=2
.С 169
Итерирует каждый печатный символ в таблице ASCII и рассчитывает максимум из входной строки.
источник
JavaScript 116
источник
Groovy - 80 символов
На основании этого умного ответа по XNOR :
Выход:
Ungolfed:
источник