Если введены две строки с последовательностями символов подчеркивания, представляющими соответствующие слова, выведите предложения с заполненными пробелами.
Лучший способ описать эту проблему - это на примере. Вот пример ввода:
programming _____________ and code golf
programming puzzles ______ code ____
И вот соответствующий вывод:
programming ___puzzles___ and code golf
programming puzzles _and__ code golf
Для целей этой задачи «слово» определяется как последовательность из одной или нескольких строчных букв, а «пробел» определяется как одно или несколько подчеркиваний (ввод всегда будет содержать только строчные буквы, пробелы и подчеркивания) , Слова и пробелы во входных строках разделены пробелами, а сумма количества слов и пробелов в предложениях всегда будет равна.
Задача состоит в том, чтобы заполнить все пробелы правильными словами , которые являются словами, которые занимают тот же индекс в другой строке при разбиении на пробелы.
Слово должно быть в центре пробела, как показано со словом «головоломки» в приведенном выше примере - с обеих сторон остается одинаковое количество подчеркиваний.
Если слово не может быть точно отцентрировано, дополнительное подчеркивание может идти как слева, так и справа (например, слово «и» в приведенном выше примере).
Для соответствия слову всегда будет достаточно подчеркивания, но может быть ровно столько, сколько длина слова (например, слово «гольф» в приведенном выше примере).
Никогда не будет пробела в одной и той же позиции в обеих строках.
Ввод / вывод может быть любым из следующих (ввод / вывод не обязательно должен быть одним и тем же способом):
одиночная строка, разделенная любым символом, который не является буквенным, пробелом или подчеркиванием (например, строка новой строки или запятая)
массив / список / и т. д. из двух струн
два аргумента функции / командной строки (только для ввода)
Поскольку это код-гольф , победит самый короткий код в байтах.
Приведенный выше пример можно использовать в качестве тестового примера. Вот более крупный тестовый пример (вторая строка в выводе может немного отличаться из-за разного поведения центрирования):
lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum
Ответы:
Пиф, 30
Принимает ввод и вывод в виде списка из двух строк. Использует довольно простой подход «раздвоение - застежка - двойная карта - центр - застежка - молния».
Попробуй здесь
Expanded:
Я объясню больше, как только я действительно буду удовлетворен тем, что я больше не могу играть в гольф, хотя это должно быть довольно ясно, учитывая повсеместность подхода «раздвоение-застежка-двойная карта-центр-застежка-молния» и все такое.
источник
Сетчатка ,
1021009388 байтКоличество байтов предполагает кодировку ISO 8859-1.
Строки будут разделены переводом строки. Если осталось нечетное количество подчеркиваний, постороннее будет после слова.
Попробуйте онлайн!
объяснение
Я предполагаю, что это "подход дубликата-добавления-просмотра-совпадения-добавления-центра", или что-то близкое ...
Мы начнем с дублирования ввода (разделенных
!
символом a и переводом строки). Цель этого состоит в том, что мы можем затем обрабатывать обе строки, выбирая слова из следующей строки (вместо того, чтобы обрабатывать вторую строку отдельно).Это добавляет правильное слово для каждого пробела. Начнем с подсчета текущей позиции слова с помощью lookbehind
(?<=^(\w+ )*)
(позиция сохраняется как глубина группы1
). Тогда опережение а) гарантирует , что мы в начале промежутка согласования_
, а затем переходит к следующей строке с.*¶
, соответствует правильному количеству слов с ,(?<-1>\w+ )*
чтобы попасть в нужное положение, а затем сопоставляет слово нашло там с(\w+)
в группа2
.Этот этап делает три вещи:
2
с([a-z])+
последующим сопоставлением такого количества подчеркиваний (которые никогда не записываются обратно).(_*)\3
и записывая$3$1$3
обратно.!\D+
и замены его ничем.источник
Python 2, 109
Функция принимает две строки в качестве аргументов и печатает выходные данные, как в примерах. Он использует скучный подход,
str.center(width, fillchar)
выполняя большую часть работы.Попробуйте онлайн .
источник
z
, если я что-то упустил, вы можете просто сделать обмен после печати и в строкеz
.Рубин,
111109 символовВвод: массив из 2 строк; вывод: массив из 2 строк.
Образец прогона:
источник
JavaScript,
194185 байтПринимает две строки в качестве параметров и выводит две строки в виде массива / списка
Показать фрагмент кода
источник
Mathematica 223
Должен быть более короткий способ сделать это.
Пробный прогон
источник
Гема,
208203 персонажаПросто потому, что Gema имеет идеальную функцию для этой задачи .
@fill-center{background;value}
Ввод: 2 строки, разделенные новой строкой (без последней строки); вывод: 2 строки, разделенные новой строкой (с завершающими пробелами - не похоже, что это запрещено).
Образец прогона:
источник
C 197 байтов
Выход
источник
ES6, 122 байта
Принимает массив из двух строк в качестве одного параметра и возвращает другой массив из двух строк.
источник