Вдохновение. * Я не могу поверить, что у нас не было этого вызова раньше:
задача
Учитывая одну или несколько печатаемых строк ASCII, чередуйте их, беря один символ из каждой строки, циклически до тех пор, пока не выйдет из символов. Если в строке заканчиваются символы перед остальными, просто пропустите ее.
Примеры
SIMPLE
дает SIMPLE
POLLS
и EPEES
даетPEOPLELESS
LYES
и APRONS
даетLAYPERSONS
ABCDE
и a c
и 123 567
даетAa1B 2Cc3D E567
"\n$?*
и
(пустая строка) и ,(.)"
(конечный пробел) дает ",\(n.$)?"*
(конечный пробел)
* Есть более короткие решения APL.
Ответы:
Желе , 1 байт
Попробуйте онлайн!
Встроенный «transpose» сделает именно это со списком строк.
источник
z⁶
.z
«транспонировать влево, дополняя правым»;⁶
это пространство.;"
(поэлементная конкатенация) решит задачу без встроенного.Python 2,
101898669 байтЯ надеюсь, что смогу каким-то образом перенести это в лямбду, сократив его, сделав рекурсивным.Это не идеально, потому что вы надеетесь, что транспонирование будет короче, к сожалению, это не так (из того, что мне удалось придумать до сих пор).Старые решения:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
спасибо mathmandan за то, что заставил меня чувствовать себя немым;) спас мне кучу байтов! (по старому решению)
источник
while any(w):
? Пустые строки являются ложными в Python.f=
.[]
рекурсивный вызов, оставивf(x[1:] for x in s)
, что делает его генератором понимания, который действует так же, как список в этом контексте.Perl 6 ,
3432 байтаЛямбда, которая принимает массив строк в качестве аргумента и возвращает строку.
( Попробуйте онлайн )
источник
@_
вместо$_
CJam , 4 байта
Попробуйте онлайн!
Мы также можем написать безымянную функцию для 4 байтов, которая ожидает список строк в верхней части стека:
Попробуйте онлайн!
источник
Pyth - 3 байта
Очень просто, добавим расширение позже, на мобильном телефоне.
Тестирование
источник
JavaScript (ES6),
5246 байтПринимает ввод как массив строк и выводит как одну строку.
Тестовый фрагмент
источник
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 байта
Попробуйте это на Ideone. Использование:
Без использования встроенного: (
3834 байта)Попробуйте это на Ideone. 4 байта благодаря Zgarb! Использование:
источник
f a=a
чтобы сохранить байт, потому что оба[]
имеют разные типы ... так близко.C,
11484 байта-20 байт для не расчета длины.
Принимает массив указателей на символы и требует, чтобы последний элемент был нулевым указателем (см. Использование).
Ungolfed и использование:
источник
malloc
иreturn
раньше, и это было дольше, чем просто печатьPHP,
6867 байтЗацикливает аргументы командной строки. Беги с
-r
.После внутреннего цикла,
$f
это1
когда все строки закончены,0
остальное (битовые&
забросы""==$c
в межд).Следующая итерация внешнего цикла: копирование
$f
в$k
(сохраняет один байт из$k=0
) и переключение$f
:когда все строки завершены,
$f
наступает момент,false
и цикл прерывается.источник
Сетчатка , 13 байт
Количество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
объяснение
Это основано на стандартной технике транспонирования в сетчатке. Мы сортируем (
O
) все символы, не являющиеся переводом строки (.
), по ($#
) количеству символов перед ними в одной строке ($.%`
), т.е. их горизонтальному положению.Затем второй этап просто удаляет перевод строки из ввода.
источник
Ява,
19 + 155 = 174160Ungolfed:
Выход:
Первая модификация: объединенная строковая декларация для сохранения нескольких байтов. Удаленный
import
, он использовалсяmain()
методом (не показан здесь), который также был необходимLinkedList
. Меньше байтов дляQueue
прямой ссылки .источник
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 байт
Golfed
Анонимная функция, которая принимает массив строк.
Я уверен, что это может быть больше в гольфе, но это рано. На каждой итерации мы берем i-ю букву из каждой заданной строки и добавляем ее к нашей последней строке, по одной за раз. PHP просто выдает предупреждения, если мы получаем доступ к битам строк, которые не существуют, так что это нормально. Мы останавливаемся только тогда, когда не было сделано никаких изменений после циклического прохождения всех строк один раз.
Я чувствую, что использование
$d
может быть в гольфе больше, но это рано. :Писточник
На самом деле ,
76 байтПредложения по игре в гольф приветствуются! Попробуйте онлайн!
Изменить: -1 байт благодаря Тил Пеликан.
Ungolfing
источник
Z♂#Σ
ихZ♂Σ
во всех. Спасибо за совет: DJavaScript (ES6), 46 байт
источник
Python 2 , 58 байт
Попробуйте онлайн!
источник
lambda *m
?J , 13 байт
Попробуйте онлайн!
На основании вдохновения для этого вопроса.
Другой способ сделать это занимает 27 байтов, но работает с использованием транспонирования. Большинство байтов предназначены для обработки автоматически добавляемых нулей из-за заполнения.
объяснение
источник
Утилиты Bash + GNU, 55
Ввод / вывод через STDIN (разделенный строкой) и STDOUT.
sed
Форматирует каждую строку к замещению процесса Баша . Затем ониeval
эд вpaste
делать фактическое перемежения.tr
затем удаляет ненужные символы новой строки и вкладки.Ideone.
источник
PHP, 63 байта
Примечание: используется кодировка IBM-850
Запустите так:
объяснение
источник
~■
(отрицанный двоичный код 254) вместо"\x1"
(двоичный 1).$$
!Python 3, 75 байт
Я знаю, что другой Python один короче, но это первый раз, когда я использовал его
map
в своей жизни, поэтому я очень горжусь этимисточник
C
7571 байтЕдинственным ограничением является длина выхода. В настоящее время это 99, но его можно легко растянуть до 999 (+1 байт).
Ungolfed:
источник
Oracle SQL, 195 байт
Принимает свои данные из таблицы с именами
i
столбцовa
(содержащих строку) иo
(порядок строки):Объяснение:
Мы используем,
CONNECT BY
чтобы разбить строки на каждого из составляющих их персонажей.PRIOR SYS_GUID()
будучиNOT NULL
уверенным, мы не в конечном итоге застряли в петле.Затем мы объединяем отдельные символы с,
LISTAGG
но мы перемешиваем ихORDER BY
предложения, упорядочивая их сначала по их положению в исходной строке, а затем - по строке, из которой они получены.Не так коротко, как другие ответы, но SQL на самом деле не подразумевается как язык манипулирования строками :)
источник
Python 2,
12896Я надеялся не использовать itertools
Ungolfed
источник
Perl 5 , 28 байт
Код 26 байтов + 2 для
-0n
.Попробуйте онлайн!
источник
R , 73 байта
Попробуйте онлайн!
Объяснение: очень просто (но многословно), просто циклически
i
печатайте символj
th строки. К счастью,substr
возвращает пустую строку, если задан вход вне допустимого диапазона.источник
Python, 112 байт
источник
x
иy
откуда?Perl 5 , 53 байта
Попробуйте онлайн!
метод
Создает двумерный массив, в котором количество строк равно длине самой длинной строки, а максимальное количество столбцов равно количеству строк. Затем выведите каждую строку массива без пробелов.
источник
TXR Lisp , 20 байтов
Бег:
weave
Функция ленива, поэтому он возвращает список, поэтому мы должны заставить результат в строку. Будучи ленивым, он может плести бесконечные последовательности. Например, мы можем соткать четные и нечетные натуральные числа, которые сами по себе представляют собой бесконечные ленивые списки:источник
K (ок) ,
3529 байтРешение:
Попробуйте онлайн!
Пример:
Объяснение:
Используйте индексирование 2-го уровня, чтобы вытащить индексы от 0 до max (длина сплющенного списка) во всех входных списках. Любая индексация за пределами подсписка вернет ноль. Отразить (повернуть на 90), сгладить, а затем вытянуть ненулевые результаты.
Заметки:
i$
), чтобы мы получили полезные нули, так как space () считается нулевым для списка символов, что означает, что вы не можете отличить нули от допустимых пробелов.
источник
Jq 1,5 , 49 байт
объяснение
Пробный прогон
Попробуйте онлайн
источник