Соревнование
Задана входная строка и целое число n - усекать любые серии последовательных символов до максимальной длины n . Символы могут быть чем угодно, включая специальные символы. Функция должна быть чувствительной к регистру, и n может варьироваться от 0 до бесконечности.
Пример входов / выходов:
f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc"
f("aaabbbc", 1) //"abc"
f("abcdefg", 0) //""
f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@"
счет
Оценка основана на количестве использованных байтов. таким образом
function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});}
будет 104 балла.
Удачного игры в гольф!
Изменить: снято ограничение языка, но я все еще хотел бы видеть ответы JavaScript
Ответы:
Python 2, 52 байта
Записано как программа (54 байта):
Перебирает входную строку
s
, добавляя каждый символ в выходную строкуr
если только последниеn
символыr
являются этим символом.Я думал, что это не удастся
n==0
потому чтоr[-0:]
это не последние 0 символов (пустая строка), а вся строка. Но это работает, потому что строка остается пустой, поэтому она продолжает соответствовать строке из 0 символов.Рекурсивный
lambda
дал 56 из-за повторенияАльтернативная стратегия хранения счетчиков
i
повторений последнего символа также оказалась дольше, чем просто проверка последнихn
символов напрямую.источник
C,
8178Изменяет входящую строку.
Тестовая программа
Требуется два параметра: первый - это строка для усечения, второй - ограничение длины.
Объяснение:
Это работает, потому что указатель источника всегда будет равен или больше, чем указатель назначения, поэтому мы можем записывать поверх строки при ее разборе.
источник
Haskell, 36 байт
Бессмысленная версия
\n s -> concatMap (take n) (group s)
.источник
Javascript ES6,
60545543 байта-12 байт благодаря @ TestSubject06 и @Downgoat
Пример работы:
источник
RegExp("(.)\\1*","g")
в/(.)\1*/g
(s,n)
наs=>n
, и использование становитсяf("aaaaaaabbbccCCCcc")(2)
MATL, 9 байт
Попробуйте онлайн
объяснение
источник
CJam, 12 байт
Попробуйте онлайн!
объяснение
источник
Pyth,
1612 байтПопробуйте онлайн!
источник
Python 2, 56 байт
источник
gs2, 6 байт
Закодировано в CP437 :
Это анонимная функция (блок), которая ожидает число в верхней части стека и строку под ним.
Попробуйте онлайн. (Код здесь
lines, dump, read number, [the answer], run-block
.)источник
Perl 6 ,
3836 байтОбъяснение:
Тестовое задание:
источник
Javascript ES5, 73
Повторно использует регулярное выражение Линн из своего ответа на Python .
источник
new
ключевое слово для -4 байта.Perl 5, 50 байт
Код 46 байтов + 3 для
-i
и 1 для-p
Принимает номер для усечения до
-i
.использование
источник
-p
только один байт?-e
этими параметрами, потребляет только 1 байт. Если скрипт должен быть запущен из файла, он стоит 3 за место, и он сам помечает. Я постараюсь найти мета-пост, но сейчас я на мобильном.Баш 46 байтов
Использование: Введите количество символов для ограничения, нажмите клавишу ввода и введите строку. Ctrl+ Dвыйти
sed
(отправить EOF).источник
Java 7,
107106 байтПредыдущий альтернативный встроенный цикл for для конкатенации строк (что на 1 байт больше, чем,
String s="";for(int i=-1;++i<j;)s+="$1";
к сожалению):Ungolfed и тестовые случаи:
Попробуй это здесь.
Выход:
источник
Javascript (с использованием внешней библиотеки) (115 байт)
Ссылка на lib: https://github.com/mvegh1/Enumerable
Объяснение кода: загрузить строку в библиотеку, которая внутренне анализируется как массив символов. Примените аккумулятор к последовательности, передавая пользовательский объект в качестве начального значения. Свойство a является текущим элементом, b является накопленной строкой, а c является последовательным счетчиком текущего элемента. Аккумулятор проверяет, равно ли текущее значение итерации, n, значению последнего элемента, ca. Если нет, мы сбрасываем счетчик до 1 и устанавливаем текущий элемент. Если счетчик текущего элемента меньше или равен требуемой длине, мы накапливаем его в возвращаемой строке. Наконец, мы возвращаем свойство b, накопленную строку. Не самый удачный код, но я счастлив, что получил решение, которое работает ...
источник
J,
3130 байтГруппирует входную строку в серии (подстроки) из идентичных символов и принимает минимальную длину этой серии и максимальную длину, которая была введена для усечения строки. Затем копирует первый символ каждого запуска столько раз.
использование
объяснение
источник
Дьялог АПЛ ,
2220 байтЗапрашивает п и принимает входную строку в качестве аргумента.
(
молчаливая функция ...∊
сплющить⊢↑¨⍨
каждый элемент аргумента (т.е. каждого раздел) усекается до⎕⌊⍴¨
минимума числового ввода и текущей длиной)
[конец подразумеваемой функции] применяется к⊢⊂⍨
входу секционированного на ᴛʀᴜᴇ х1,
ᴛʀᴜᴇ предваряется ( первый символ не равен его не существующему предшественнику)2≠/⊢
попарно не равны символы на входеисточник
Рубин, 32 байта
источник
TCC,
75 байтовВвод - это строка и число, разделенные пробелом.
Попробуйте онлайн!
источник
tcc.lua
файлом с отметкой времени 16-07-25 16:57 UTC, который не имел возможности считывать несколько входов одновременно. Если для вашего ответа требуется версия языка, на котором задан вопрос, вы должны пометить его как неконкурентный в заголовке. Я уберу свое понижение, когда ты это сделаешь.