Это мой первый вопрос по Codegolf, поэтому я прошу прощения заранее, если он не подходит, и я приветствую любые отзывы.
У меня есть файл с этим форматом:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Фактическое содержание меняется, как и разделитель. Содержание просто текст. Разделитель появляется только один раз в строке. Для этой головоломки не стесняйтесь менять разделитель, например, используйте «%» в качестве разделителя.
Желаемый вывод:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
У меня уже есть оба сценария ruby и awk, чтобы объединить это, но я подозреваю, что возможно иметь короткий oneliner. т. е. однострочник, который можно использовать вместе с трубами и другими командами в командной строке. Я не могу понять это, и мой собственный сценарий состоит в том, чтобы долго просто сжимать в командной строке.
Самые короткие символы предпочтительнее. Входные данные не обязательно отсортированы, но нас интересует только объединение последовательных строк с соответствующими первыми полями. Есть неограниченное количество строк с соответствующими первыми полями. Поле 1 может быть любым, например, названия фруктов, собственные имена и т. Д.
(Я работаю на MacOS, поэтому лично меня больше всего интересуют реализации, которые работают на Mac).
Вот второй пример / тест. Обратите внимание "|" это разделитель. Пробел перед "|" не имеет значения, и при повторном обращении следует считать частью ключа. Я использую «%» в качестве разделителя в выводе, но опять же, не стесняйтесь менять разделитель (но не используйте квадратные скобки).
Входные данные:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Желаемый вывод:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
источник
["A|some text", "B|other text", "A|yet some other text"]
не является желаемым входом для тестирования, так как ключевые словаA
не находятся в списке один за другим.Ответы:
Сетчатка , 17 байт
Забито в кодированных байтах ISO 8859-1.
Используется
;
вместо в|
качестве разделителя поля ввода.Попробуйте онлайн.
источник
V ,
1613 байтПопробуйте онлайн!
Вы сказали
Поэтому я выбрал
|
в качестве разделителя. Если это неверно, дайте мне знать, и я изменю это.Объяснение:
источник
Perl
-0n
, 2 + 43 = 45 байтДемо-версия:
источник
SQL (PostgreSQL),
4372 байтаЭто использует удобную агрегатную функцию string_agg в PostgreSQL. Ввод осуществляется из таблицы
T
с двумя столбцамиA
иB
. Чтобы лучше соответствовать вопросу, я включил в команду загрузку данных из файла в таблицу. ФайлT
также. Я не посчитал заявление на создание таблицы.Вывод будет неупорядоченным, но если это проблема, ее можно исправить с помощью
ORDER BY A
SQLFiddle не хотел играть за меня, но это то, что я получаю в своей настройке.
источник
C 127 байтов
Работает с gcc. Изменен разделитель на
/
. Принимает ввод из стандартного ввода и записывает вывод в стандартный вывод, поэтому вызов с перенаправлением ввода./a.out <filename
Ungolfed:
источник
Pyth - 15 байт
Делая несколько предположений о проблеме, изменится, когда ОП уточнит.
Попробуйте это онлайн здесь .
источник
Python 3 - 146 байт
Ввод - это имя файла или путь к файлу, вывод - в стандартный вывод. Мог бы быть намного короче, если бы я мог взять ввод как необработанный текст из командной строкиПринимает ввод из стандартного ввода и выводит в стандартный ввод. Настройка с разделителем
"|"
. Для проверки ввода первого примера используйте разделитель" | "
источник
Java 7, 167 байт
Вероятно, это может быть больше в гольф, используя другой подход ..
ПРИМЕЧАНИЕ. Приведенный выше метод создает и возвращает a
HashMap
с нужными парами ключ-значение. Тем не менее, он не печатает его в точном выводе, как в вопросе OP с|
разделителем вывода между ключами и новыми значениями. Судя по SQL-ответу Микки, где он возвратил таблицу базы данных, я понял, что это разрешено; если не больше байтов должно быть добавлено для функции печати.Ungolfed & тестовый код:
Выход:
источник
PowerShell, 85 байт
Строки объединяются с использованием хеш-таблицы:
пример
Поскольку PowerShell не поддерживает перенаправление stdin через
<
, я предполагаю, чтоGet-Content .\Filename.txt |
он будет использоваться как метод ввода-вывода по умолчанию.Выход
источник
APL, 42 символа
источник
⌸
не один байт в кодировке APL.Sed, 55 байтов
Тестовый забег :
источник
q / kdb +, 46 байт
Решение:
Пример:
Объяснение:
источник