Вызов
Напишите программу или функцию, которая принимает строку s
и целое число в n
качестве параметров. Ваша программа должна напечатать (или вернуть) строку при преобразовании следующим образом:
Начиная сверху слева и двигаясь вниз и вправо, пишите s
как волна высоты n
. Затем сверху вниз объедините каждую строку в строку (без пробелов).
пример
Дана строка "WATERMELON" и высота 3:
Волна должна выглядеть так:
W R O
A E M L N
T E
Затем объедините строки сверху вниз:
WRO
AEMLN
TE
Итак, ваша программа должна вернуть строку "WROAEMLNTE"
Аналогично, "WATERMELON" с высотой 4 должен произвести следующую волну:
W E
A M L
T R O
E N
Ваша программа должна затем вернуть строку "WEAMLTROEN"
правила
вход
Входные данные могут быть приняты в любом разумном формате. Строка может быть в любом случае вы предпочитаете. Вы можете предположить, что0 < n <= s.length
Выход
Вывод должен состоять только из преобразованной строки (независимо от того, возвращена она или напечатана в STDOUT), плюс любые завершающие символы новой строки.
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах! Стандартные лазейки не допускаются.
Тестовые случаи
Input Output
programmingpuzzles, 5 -> piermnlsomgzgapzru
codegolf, 3 -> cgoeofdl
elephant, 4 -> enlatehp
1234567, 3 -> 1524637
qwertyuiop, 1 -> qwertyuiop
n
> 1? Пожалуйста, уточните, а если нет, добавьте тестовый примерn > 0
, ноn=1
это действительный случай. Я обновлю вопрос сейчас.Ответы:
Шелуха , 6 байт
Попробуйте онлайн!
Работает
n = 1
также.объяснение
Функция высшего порядка
δ
работает так под капотом. Предположим, у вас есть функция более высокого порядка, которая принимает унарную функцию и список и возвращает новый список. Например,Ö
берет функцию и сортирует список, используя ее в качестве ключа. ЗатемδÖ
принимает бинарную функцию и два списка, объединяет их вместе, применяетÖ
для сортировки пар, используя двоичную функцию в качестве ключа, и, наконец, проецирует пары во вторую координату. Мы используемK
в качестве ключевой функции, которая просто возвращает свой первый аргумент и игнорирует второй.источник
MATL , 16 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Рассмотрим входы
5
,'programmingpuzzles'
.источник
Haskell , 64 байта
Попробуйте онлайн!
источник
J ,
54, 29, 2726 байтов-1 байт благодаря hoosierEE
Попробуйте онлайн!
источник
n=1
самого начала|@i:
вместо того, чтобы[:|i:
сохранить байтR , 68 байт
Попробуйте онлайн!
n=1
регистр исправлен благодаря @ J.Doeисточник
Python 2 ,
11910898929197939190 байтПопробуйте онлайн!
-1 байт, благодаря Джонатану Фреху
источник
05AB1E (наследие) ,
118 байтовВдохновлен ответом @LuisMendo на MATL .
-3 байта благодаря @Adnan, потому что я идиот ..>.>
Попробуйте онлайн .
Объяснение:
ПРИМЕЧАНИЕ.
counter_variable
Используется, поскольку в версии 05AB1E для Python LegacyΣ
не было встроенного индексаN
, как в новой версии 05AB1E для перезаписи Elixir. Так почему я до сих пор использую версию Legacy? Потому что в переписываемом Elixir он неявно преобразует строку в список символов, требуя дополнительного}J
преобразования его обратно в строку для вывода (и он также содержит ошибку сейчас, когдаè
вообще не работает для индексации в удлиненный список ..: S)источник
¹g∍
деталь, так как 05AB1E использует циклическое индексирование дляè
.Japt , 16 байт
Проверьте это онлайн!
объяснение
источник
ü
метод новый?-P
флаг для сохранения другого 2.Желе , 8 байт
6 байт не подходит для высоты 1; два байта используются для его решения ... может быть 7 можно найти?
Двоичная ссылка, принимающая положительное целое число и список символов, который выдает список символов.
Попробуйте онлайн!
Как?
источник
JavaScript (ES6), 75 байт
Более короткая формула, предложенная @MattH (-3 байта)
Принимает вход как
(string)(n)
.Попробуйте онлайн!
JavaScript (ES7), 78 байт
Сохранено 4 байта благодаря @ETHproductions
Принимает вход как
(string)(n)
.Попробуйте онлайн!
источник
o
сx/n&1?n-x%n:x%n
вместоn*n-(x%(n*2)-n)**2
.К ( Kona ), 23 байта
Перевод J ответа от Галена
источник
MBASIC ,
146159155 байтовОбновлено для обработки n = 1
Выход:
источник
Perl 6 , 49 байт
Попробуйте онлайн!
Принимает ввод как карри функцию.
Объяснение:
Последовательность сортировки выглядит следующим образом (для
n=5
):источник
J , 24 байта
Попробуйте онлайн!
Явный двоичный глагол. Запустите это как
'codegolf' f 3
.Как это работает
Обычно явная функция занимает дополнительные 5 байтов в виде
n :'...'
. Но если добавляется обработка ошибок, разница уменьшается до 2 байтов из-за паренов и пробела в(tacit)<space>::
.источник
sort up
?! Ваш явный глагол по-прежнему на 3 байта короче. Хорошее решение!APL (Dyalog Classic) , 23 байта
Попробуйте онлайн!
источник
Powershell,
9995 байтТестовый скрипт:
Выход:
объяснение
Сценарий:
Выражение
((1..$n+$n..1)*$s.Length|gu
генерирует подобную последовательность1,2,3,3,2,1,1,2,3,3,2,1...
и удаляет соседние дубликаты.gu
это псевдоним для Get-Unique .$n=3
дедуплицированной последовательности есть:1,2,3,2,1,2,3,2,1...
$n=1
дедуплицированной последовательности есть:1
Выражение
$i++*($n-gt1)
возвращает индекс в дедуплицированной последовательности.=$i++
если$n>1
иначе=0
источник
Рубин ,
7565 байтПопробуйте онлайн!
Принимает ввод как массив символов, возвращает строку
Как это работает
h
строкиh
а затем - до0
и т. Д.)источник
C
142134 байта8 байтов сэкономлено благодаря Джонатану Фреху
Код:
Объяснение:
Попробуйте онлайн!
источник
Древесный уголь , 21 байт
источник
СНОБОЛ4 (CSNOBOL4) , 191 байт
Попробуйте онлайн!
Берет
S
тогдаN
по отдельным строкам.Объяснение:
источник
Чистый ,
10584 байтаПопробуйте онлайн!
источник
JavaScript (Node.js) , 83 байта
Попробуйте онлайн!
источник
Pyth ,
2221 байтПринимает ввод, а
n
затемs
в отдельных строках. Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .Редактировать: сохранил байт, переместив пустой чек в конец обработки. Предыдущая версия:
seMhD,V*lz|+PUQP_UQ]0z
источник
Красный , 153 байта
Попробуйте онлайн!
Объяснение:
источник
У меня есть два решения проблемы. Первое решение, которое я сделал первым, затем я подумал о другом способе сделать это, который, как я думал, сэкономит байты, но это не так, я все равно включил его.
Решение 1
PHP ,
152144116 байтПопробуйте онлайн!
Решение 2
PHP , 162 байта
Попробуйте онлайн!
источник
$f
и$n-1-$i
может быть$n-~$i
. 144 байтаn=1
. Этот работает для того же количества байтов.echo
как сохранили еще 5 байтовРубин , 84 байта
Попробуйте онлайн!
источник