Вызов
Вы когда-нибудь видели названия трейлеров фильмов (а именно марсианские, межзвездные и т. Д.), Где между огромными буквами медленно растут огромные промежутки?
Задача состоит в том, чтобы воссоздать этот эффект с учетом строки, множителя и направления разрыва, вставив соответствующее количество пробелов между буквами.
пример
Ввод : «INTERSTELLAR», множитель разрыва: 1,0, направление: увеличение внутрь
Output: I N T E R S T E L L A R
Интервал составляет: [1, 2, 3, ..., 3, 2, 1]; заменив пробелы на «.» чтобы лучше продемонстрировать интервал:
I.N..T...E....R.....S......T.....E....L...L..A.R
Ввод : «INTERSTELLAR», множитель разрыва: 0,5, направление: увеличение внутрь
Output: IN T E R S T E L L AR
Интервал умножается на 0,5, поэтому мы получаем [0, 1, 1, 2, ... 2, 1, 1, 0] из целочисленного деления; с помощью '.':
IN.T.E..R..S...T..E..L.L.AR
Ввод : «CODEGOLF», множитель разрыва: 2.0, направление: увеличение наружу
Output: C O D E G O L F
Интервал умножается на 2, увеличиваясь наружу, поэтому мы получаем [8,6,4,2,4,6,8]; заменить на '.':
C........O......D....E..G....O......L........F
Ввод : «CODEGOLF», множитель разрыва: 0,4, направление: увеличение наружу
Output: C O DEGO L F
Интервал умножается на 0,4, увеличиваясь наружу, поэтому получаем [1,1,0,0,0,1,1]; заменить на '.':
C.O.DEGO.L.F
правила
- Принимает 3 входа: строка, множитель гэпа и направление
- Если длина входной строки нечетная (даже в количестве пробелов), например, «HELLO», расстояние между двумя внутренними пробелами должно быть одинаковым
H E L L O
- Множитель направления и разрыва может быть проанализирован, как вы хотите, например, вы можете использовать -2 как «увеличение внутрь с множителем 2», 1 как «увеличение наружу с множителем 1» и т. Д.
- Требуется использовать только пробелы, однако это бонус, если заполнение персонажа настраивается.
Справочная анимация
Удачи в гольф!
Increasing
к1 => Inward, 0 => Outward
или наоборот.C..O....D......E........G......O....L..F
Ответы:
JavaScript (ES6),
86828180 байтВвод ожидается в синтаксисе карри
f(s)(r)
с:s
= строкаr
= отношение + направление: отрицательное смещение для внутреннего или положительное смещение для внешнегоисточник
05AB1E , 33 байта
Использует кодировку CP-1252 .
Множитель разрыва считается отрицательным при увеличении наружу.
Попробуйте онлайн!
источник
APL, 40 байт
Принимает строку в качестве правого аргумента, отношение в качестве левого аргумента и направление в качестве левого операнда (0 для внутреннего и 1 для внешнего).
Объяснение:
⍳⍴1↓⍵
: получить список чисел от 1 до N-1, где N - длина строки(⌽⌊+)
: инвертировать список, и в каждой позиции получить наименьшее количество обоих списков (это дает размеры пробелов при увеличении внутрь)(1+⌈/-+)⍣⍺⍺
: вычтите каждое число в списке из наибольшего числа в списке и добавьте 1. Сделайте это⍺⍺
раз. (Если⍺⍺=0
ничего не произойдет, и если⍺⍺=1
, это даст размеры зазоров при увеличении наружу.)-⌊⍺×
: умножьте каждый пробел на⍺
, округлите его вниз и сведите на нет.∊1,⍨1,¨
: добавьте 1 перед каждым пробелом и 1 в самом конце списка.0~⍨
: удалить все нули.⍵\⍨
: использовать полученный список для расширения⍵
. Expand (\
) работает следующим образом: для каждого положительного числа текущий символ реплицируется столько раз, а для каждого отрицательного числа - сколько пробелов вставляется, с оговоркой, что0
и¯1
делают то же самое, поэтому все нули пришлось убрать раньше.источник
MATL , 31 байт
Входные данные: строка;
0
или1
для внутреннего или внешнего увеличения; мультипликатор.Попробуйте онлайн!
объяснение
Рассмотрим входы
'INTERSTELLAR'
,1
, в0.5
качестве примера.источник
Ракетка 348 байт
Ungolfed:
Тестирование:
Выход:
источник
PHP, 129 байт
12 байтов сохранено @Titus Спасибо
строка = $ argv [1], отношение = $ argv [2], направление = $ argv [3] внутрь = 0, наружу = 1
источник
str_pad
должен сохранить 4 байта. Попробуйте++$i>$l?$l-$i/2:$i/2
и$t[$i++]/2
вместо приращения в пост-условии цикла; это должно спасти 9. Почему0^
?0^3.12
Результат @Titus, в3
котором необходимо$i=0
не нужно++$i>
по- прежнему сохраняет один байт над$i++>=
. И Вы можете сохранить еще один байт, переместив это приращение в предварительное условие:++$i<2*$l=...
вместо того$i+1<2*$l=...
, чтобы поменять местами ветви истины и ложи внешней троицы,$i
вместо++$i
и$t[$i/2-.5]
вместо$t[$i++/2]
.1
и out as2
позволит вам сохранить еще 3 байта:($l>>1)
вместо(0^$l/2+1)
; но я не проверял ничего из этого.