Получив печатную строку ASCII, разбейте ее на список непустых строк с новой подстрокой, начинающейся каждый раз, когда встречается символ, который ранее не встречался в том же случае.
Примеры
"mississippi" → ["m","i","ssissi","ppi"]
"P P & C G" → ["P"," P ","& ","C ","G"]
"AAA" → ["AAA"]
"Adam" → ["A","d","a","m"]
"" → []
Анекдот : результат будет иметь от 0 до 95 элементов. 95- я подстрока будет обязательно продолжаться до конца, потому что в этот момент все печатные символы ASCII начали подстроку, поэтому каждый дополнительный символ будет встречаться раньше и, следовательно, не может вызвать начало новой подстроки.
"
и,'
кажется, хорошая идея.""
→[""]
приемлемым?[""]
недействительности. Вздох.Ответы:
Желе , 4 байта
Попробуйте онлайн!
объяснение
Внутреннее представление строк, которое отображает ссылка TIO, немного отличается.
источник
Сетчатка , 9 байт
Попробуйте онлайн!
объяснение
Сопоставьте каждый символ (
.
), отмените повторяющиеся совпадения (q
), отмените первое совпадение (1,
) и вставьте перевод строки перед каждым совпадением¶$&
.источник
05AB1E , 11 байт
Попробуйте онлайн!
объяснение
источник
¸«
может бытьª
в новой версии 05AB1E.C
756563 байтаСпасибо @Digital Trauma за сохранение 10 байтов и спасибо @gastropner и @ l4m2 за сохранение байта каждый!
Печатает ведущий перевод строки.
Попробуйте онлайн!
Без перевода строки (71 байт):
Попробуйте онлайн!
источник
{0}
=>{}
?Perl 6 ,
58 5240 байтПопробуй
Попробуй
Попробуйте
(вход - это список символов, а вывод - список списков символов).
Expanded:
Выход из
classify
ISИ
.sort
просто превращает это в:».value
удаляет ключиисточник
HashMap
против aLinkedHashMap
в Java, где порядок основан на памяти против порядка вставки?J 7 байт
Попробуйте онлайн!
объяснение
Нуб-сито шанс сиять!
источник
APL (Dyalog Unicode) , 8 байтов SBCS
Попробуйте онлайн!
источник
05AB1E , 8 байтов
Попробуйте онлайн!
Всегда будет выводить 1 предшествующий символ новой строки, который является константой и не указывает на разделение. 10-байтовая альтернатива, которая не выводит предыдущий символ новой строки
Ùvyy¶ì.;}¦
, вы можете попробовать здесь . Согласно Адаму, предшествующий или завершающий перевод строки является приемлемым.После каждой итерации мы получаем:
Который:
источник
ÙSD¶ì.;
. Не уверен, почему мы не думали об этом раньше: PHaskell , 39 байт
Попробуйте онлайн!
Вставляет символ новой строки перед каждым символом, который появляется впервые, в результате получается строка, разделенная новой строкой, с ведущей новой строкой. Приготовьтесь
lines.
составить список.Haskell , 55 байтов
Попробуйте онлайн!
Неоднократно принимает префикс первого символа плюс неуникальные символы, следующие за ним.
источник
lines
.tail.lines
удалить лишнюю пустую строку, когда я думаю об этом.APL (Дьялог) , 9 байт
Спасибо, Эрик Outgolfer за сохранение 1 байта!
Попробуйте онлайн!
Объяснение:
⍳⍨
: Для каждого символа получить индекс его первого появления. напримерmississippi -> 1 2 3 3 2 3 3 2 9 9 2
⍳∘≢
: Диапазон от 1 до длины ввода.∊
: Членство. например1 2 3 4 5 6 7 8 9 10 11∊1 2 3 3 2 3 3 2 9 9 2 -> 1 1 1 0 0 0 0 0 1 0 0
⊢⊂⍨
: Разделить входную строку новыми разделами, начинающимися1
с s в векторе вышеисточник
fg
и монадическоеf∘g
ведут себя одинаково)∊
вместо=
?Japt , 11 байт
Проверьте это онлайн!
объяснение
Это был вдохновлен Волшебное Octopus Урна «s решение 05AB1E .
источник
iRUbY
!JavaScript (ES6), 37 байт
Сохранено 7 байт: начальный перевод строки был явно разрешен (Спасибо @Shaggy!)
Принимает ввод как массив символов. Вывод строки, разделенной новой строкой.
Контрольные примеры
Показать фрагмент кода
источник
брейкфук, 66 байт
отформатирован:
Попробуйте онлайн
Новую строку в выводе (которая выводится только в том случае, если ввод не пуст) можно удалить за счет 5 байтов, заменив тело
x
основного (самого внешнего) цикла на.>,[x]
.источник
Желе , 6 байт
Попробуйте онлайн!
источник
К4 , 19 байт
Решение:
Примеры:
Объяснение:
8 байт просто для обработки
""
...источник
Python 2 ,
8174 байтаПопробуйте онлайн!
источник
set
не следите за порядком, контр-доказательства ->s='c'*6+'a'*100+'b'
Python 2 , 47 байт
Попробуйте онлайн!
Вывод строки, разделенной новой строкой. Едва бьет версию программы:
Python 2 , 48 байт
Попробуйте онлайн!
источник
Perl, 30 байт
Включает
+1
в себя дляp
Дайте ввод без завершающей новой строки на STDIN. Вывод также без завершающей строки:
Если вы не заботитесь о ведущей и ведомой новой строки это
25
(+3
для-p
потому что код содержит'
) также работает:источник
${$&}++
. Это не так надежно, но может быть достаточно для этого вызова? Кроме того, был достигнут консенсус в отношении мета,perl -p
который не требует дополнительного байта, вам просто нужен заголовок, аPerl with `-p`
не просто Perl. Я пытаюсь не забыть сделать это сам ...1
это действительно так, и в этом случаеv
необходимо. Что касается подсчета, я в основном следую codegolf.meta.stackexchange.com/a/7539/51507, который для меня является наиболее последовательным мета-постом о подсчете perl.&~v0
для захвата первого персонажа. Спасибо, что присоединились к этому сайту и поделились своим долгим опытом."
вместо'
с-e
, а затем вы можете считать-ep
как +1, а не +3. (Проверено.)JavaScript,
615452 байтаПринимает ввод как массив символов.
Попробуй
источник
R ,
9487 байтПопробуйте онлайн!
Возвращает (возможно, пустой) список подстрок.
Спасибо Michael M за сохранение 7 байтов!
источник
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))
будет короче - и, конечно, немного уродливее ...substring
вместоsubstr
?if(n)
туда, потому чтоsubstring
выдает ошибку для ввода пустой строки.substr
возвращает вектор длины, равный его первому входу, аsubstring
возвращает длину, равную наибольшему из его входов.Stax , 8 байт
Запуск и отладка онлайн
Представление ascii той же программы таково.
Для каждого символа он разделяется, когда индекс текущего символа является текущей позицией.
источник
> <> ,
22 1714 байтов-1 байт благодаря Emigna
Попробуйте онлайн!
Печатает начальный и конечный перевод строки.
Он отслеживает, какие буквы уже появились,
p
выдавая копию символа в соответствующем месте во второй строке и печатая новую строку, если значение, выбранное из этой позиции не было 1. Завершается ошибкой при попытке печати-1
источник
g/p
! 16 байтHaskell, 62 байта
Попробуйте онлайн!
источник
JavaScript (ES6), 68 байт
Вводит в виде списка символов.
Тестовые случаи:
Показать фрагмент кода
источник
[""]
приемлемо ли это для последнего контрольного примера. Но это не так . :-(PHP, 317 байт
Попробуйте онлайн!
источник
Красный , 79 байт
Попробуйте онлайн!
Ungolfed:
источник
СНОБОЛ4 (CSNOBOL4) ,
1159177 байтПопробуйте онлайн!
Печатает подстроки, разделенные символами новой строки.
Объяснение:
строка
S
(forSPLIT
) фактически не разделяется, а извлекает первый символN
и сохраняет его (.
) вY
. НаF
ailure он прыгает наEND
. Совпадение должно завершиться неудачно только тогда, когдаN
пустая строка. Таким образом, когда вход пуст, он сразу переходитEND
и ничего не выводит.S = S Y
соединяетсяY
наS
.SPAN(S)
жадно сопоставляет набор символов вS
и отправляет его (.
) вOUTPUT
setting (.
)N
дляREM
следующих символовN
(если они есть). Затем он возвращается кS
.источник
PowerShell, 73 байта
использование
источник
Рубин ,
656258 байтПопробуйте онлайн!
Лямбда, принимающая строку и возвращающая массив строк.
Подход: для каждого индекса либо добавьте символ с этим индексом в
s
массив результатов, либо в последнюю строку в массиве результатов.String#index
возвращает индекс первого экземпляра аргумента.-2 байта: Инициализировать
a
как аргумент splat вместо отдельной строки. Спасибо, стоимость чернил !-1 байт: Используйте
c=s[i]
...c
вместоs[i]
...s[i]
. Спасибо, стоимость чернил !-4 байта: использовать
.times
вместо.map
источник
Java 8,
193169155151 байт-14 байтов благодаря @raznagul (за что-то очевидное, я почему-то упустил себя ..)
-3 байта благодаря @OOBalance (снова за что-то очевидное, я как-то пропустил себя ..: S)
Объяснение:
Попробуйте онлайн.
источник
if(l<1)
. Еслиl
это0
цикл не должен выполняться в любом случае, как0<0
естьfalse
.i=0
дважды. Вы можете сэкономить 3 байта, опустив второй:for(;i<l;i++)