Альтернатива - это процесс взятия строки и ее размещения в чередующихся скобках. Вот как вы чередуете строку.
Для строки длины N возьмите центр N символов и заключите их в круглые скобки. Так что, если наша строка была
Hello world!
(12 символов), мы получим(Hello world!)
Затем возьмите оставшиеся центральные
n-2
символы и заключите их в квадратные скобки. В этом случае в центре 10 символовello world
, поэтому следующая итерация:(H[ello world]!)
Пока в середине строки осталось более двух символов, повторяйте последние два шага, чередуя между
()
и[]
. Вот последние шаги:(Hello world!) (H[ello world]!) (H[e(llo worl)d]!) (H[e(l[l(o[ w]o)r]l)d]!)
Поскольку на последней итерации в середине осталось только два символа, мы остановимся. Наша последняя строка
(H[e(l[l(o[ w]o)r]l)d]!)
Обратите внимание, что в средних скобках есть два символа. Это происходит, когда вход имеет четную длину. Если бы ввод был нечетной длины (например,
Hello, world!
с добавленной запятой), у нас был бы только один символ в середине:(H[e(l[l(o[,( )w]o)r]l)d]!)
Для сегодняшнего вызова вы должны написать программу или функцию, которая принимает строку в качестве входных данных и чередует ее, выводя новую строку. Вы можете принимать и выводить данные в любом удобном для вас формате. Ввод всегда будет по крайней мере один символ длиной, и будет содержать только для печати ASCII. Вы также можете предположить, что ввод не будет содержать скобок или квадратных скобок. Для традиционных языков это не должно иметь большого значения, но это может упростить некоторые эзотерические языки.
Как обычно, это код-гольф соревнование , поэтому постарайтесь найти максимально короткий ответ на выбранном вами языке. Повеселись!
Тест IO
#Input #Output
"Alternesting is fun!" --> (A[l(t[e(r[n(e[s(t[in]g) ]i)s] )f]u)n]!)
"PPCG" --> (P[PC]G)
"Code-golf" --> (C[o(d[e(-)g]o)l]f)
"4 8 15 16 23 42" --> (4[ (8[ (1[5( [1]6) ]2)3] )4]2)
"a" --> (a)
"ab" --> (ab)
"abc" --> (a[b]c)
источник
()
) или мы можем начать с квадратных скобок ([]
)?()
HelloWorld
.Ответы:
Python 3 ,
706965 байт-1 байт благодаря @Uriel
-4 байт благодаря @xnor
Попробуйте онлайн!
источник
C
143137135 байтовПопробуйте онлайн!
Объяснение:
источник
0
. Таким образом, вам не нужноk=i=0,
. Я могу быть не прав. Посмотрите этот ТАК ответСетчатка , 52 байта
Попробуйте онлайн! Первый этап вставляет пары скобок между каждой парой входных символов, а второй и третий этапы исправляют альтернативные скобки в скобках.
источник
Сед, 78
Оценка включает +1 для
-r
опции, переданной в sed.Попробуйте онлайн .
источник
JavaScript (ES6),
6968 байтКонтрольные примеры
Показать фрагмент кода
источник
V ,
252625 байтов12 байта отключено благодаря @DJMcMayhemПопробуйте онлайн!
Заимствовал некоторые идеи @ udioca.
Также, наконец, использовал плагин объемного звучания, включенный в V для ответа, хотя, возможно, это был не лучший способ, кто знает.Плагин НЕ хочет использовать.HexDump:
Объяснение:
источник
;
вместо последнего.f)
Попробуйте онлайн!()
и[]
является байтом короче, но гораздо менее крутоHaskell ,
9691817977 байтПопробуйте онлайн!
источник
(x:y)
и(init y)
.k==""=""
короче какk==""=k
.cycle["()","[]"]
просто"()[]"
: Попробуйте онлайн!cycle
еще короче. Вы все еще можете удалить круглые скобки вокруг(init y)
.k==""=k
до конца и изменить его на0<1=k
.Руби ,
7977 байт-2 байта благодаря @Value Ink
Попробуйте онлайн!
источник
s.insert k=i*2,'(['[i%2];s[~k]+=')]'[i%2]
сохранить 2 байта. Попробуйте онлайн!Javascript (ES6)
110105 байтСпасибо @powelles за напоминание о
x%y<1
.Спасибо @Luke за
a-b?y:x
Показать фрагмент кода
Первое, что нужно понять этому зверю, это развеять его:
Почти каждая линия является частью версии для гольфа, поэтому шаг за шагом:
Строка 1: оператор функции становится функцией стрелки и переименовывается
input
вi
. Становитсяi=>
.Строка 2:
Array.from
это новый, правильный способ преобразования строки в массив и то, что мы используем в этой строке. Однако, наряду с этим, оператор распространения является более дешевым способом, чем старый.split('')
способ сделать это, что используется в версии для гольфа. Заканчивается как[...i]
.Строка 3:
.map
петли через массив, что дает вам три аргумента:item
(a
в golfed)index
; игра в гольф, какb
иbaseArray
илиc
. В то время как мы заботимся только оitem
иindex
, мы сохранилиbaseArray
(см. Строку 4, почему). Гольф до.map((a,b,c,...)=>...
.Строка 4: переменная
middle
, или аргументd
в версии для гольфа создается для сохранения нескольких байтов при повторении. Аргументc
должен быть сохранен для аргумента,d
который будет создан. Преобразуется в(...,d=i.length/2-1,...)
.Строка 5 : переменная
alternate
или аргументe
используется для проверки того, какой символ был на «(» или «[» или если он был после середины, «)» и «]».b%2<1
равно,b%2==0
потому что это не может быть что-то меньше 1, но 0 в этом случае. Равно(...,e=b%2<1)
.Строка 6: Переменный помощник , чтобы позволить мне преобразовать
ternary operators
вif
отчетности. Нет ничего в настоящем Codegolf.Строки 7-8 : если индекс меньше середины строки, установите для символа чередование "[" и "(". Приравнивается к
d>b?e?'[':'(':...
.Строки 9-12 : иначе (если индекс больше среднего), проверьте, является ли среднее целое число, если это так, переключите чередование. Затем установите символ на чередование ')' и ']'. Запутано до
(d%1==0?!e:e)?')':']'
.Строки 13-15 : если в середине установить символ на пустую строку. Это не относится к нечетным заместителям, потому что середина имеет десятичную дробь. Становится:
d==b?'':...
.Строка 16 : объединяет массив символов обратно в строку. Приравнивается к
.join``
.Строка 17 : возвращает начальный символ "(" и результат. Соответствует
'('+...
.источник
%2==0
чтобы%2<1
и использовать[...i]
вместоi.split
[..i] idea
, но я забыл о%2<1
спасибо.b%2<1
может быть заменено на!b%2
d==b?x:y
мог статьd-b?y:x
иd%1==0
мог стать!d%1
.!d%1
работает только с круглыми скобками:!(d%1)
и не сбрасывает ни одного байта. Я забыл, что 0 был единственным ложным числом, по какой-то причине я думал, что -1 был ложным. Поправь меня, если я что-то не так насчет второго.Желе ,
2321 байтПопробуйте онлайн!
-2 байта благодаря @EricTheOutgolfer
источник
ị
ссылку помощника на -2, например так:LHĊRị¶ç⁾)]żUFUż@ç⁾([$
SCALA,
140138 символов,140138 байтовМне жаль, что я не смог сделать лучше ... Я уверен, что есть много способов улучшить это. Все еще:
Попробуйте онлайн!
Спасибо за этот вызов, это было довольно сложно для меня.
РЕДАКТИРОВАТЬ: -2 байта благодаря Mar Dev.
PS: я спрошу что-то, хотя. Я понимаю , почему Этот код сохраняет дублируя центральный символ моей строки , если у меня есть нечетная длина (я просто не проверить и добавить его в два раза, в обоих
l
иr
строках). Но почему я получаю пару скобок, когда пытаюсь исправить это, как ТО ? Я вообще не понимаю.источник
i%2==0
чтобыi%2<1
спасти два байта.Perl,
7774 (73 + 1) байтаРегулярные выражения - великолепные вещи. Запустите с
-p
флагом командной строки.источник
05AB1E , 31 байт
Попробуйте онлайн!
объяснение
С примерами для ввода:
abcd
/abcde
источник
С ++ 14,
154145 байтов[Рекурсивный]
C ++ 14, 177 байт
[Итерационный]
источник
Pyth , 42 (!) Байта
Проверьте это онлайн! Ввод должен быть в кавычках.
Пояснения
Поэтому в основном я постепенно удаляю начало и конец H (будучи входной строкой в начале), объединяя скобки / скобки. G - это просто логическое значение, которое помнит, нужно ли мне использовать скобки или скобки.
источник
05AB1E ,
4942 байтаПопробуйте онлайн!
источник
PowerShell,
125119111 байтПопробуйте онлайн!
Предыдущая версия*
* Спасибо @Digital Trauma.
источник
QuadR , 82 байта
(81 байт +1 для
≡
флага)Попробуйте онлайн!
источник
AWK, 118 байт
Протестировано с gawk, но оно должно работать с любыми интерпретаторами awk
источник
JavaScript, 101 байт
Не победитель, но было интересно попробовать
replace
подход. Это, безусловно, можно улучшить, но быстро вышло из-под контроля ...источник
Java (OpenJDK 8) , 124 байта
Попробуйте онлайн!
кредиты
источник