Вступление
Карта Бейкера - важная динамическая система, демонстрирующая хаотическое поведение. Это функция от единичного квадрата сама по себе определяется следующим образом.
- Разрежьте квадрат пополам, получив два прямоугольника размера
0.5×1
. - Сложите правую половину сверху левой, чтобы получился прямоугольник размером
0.5×2
- Сожмите прямоугольник обратно в
1×1
квадрат.
В этом задании вы реализуете дискретную версию этого преобразования.
Вход и выход
Ваш ввод представляет собой двумерный массив печатных символов ASCII и пробел по размеру 2m×2n
для некоторых m, n > 0
. Ваш вывод представляет собой аналогичный массив, полученный следующим образом, используя 6×4
массив
ABCDEF
GHIJKL
MNOPQR
STUVWX
В качестве примера. Сначала поместите правую половину массива поверх левой половины:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Затем разбейте столбцы на пары символов и независимо поверните каждую пару на 90 градусов по часовой стрелке, «сжав» высокий прямоугольник до исходной формы:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Это правильный вывод для вышеуказанного массива.
правила
Форматы ввода и вывода являются гибкими. Вы можете использовать строки с разделителями новой строки, списки строк или двумерные массивы символов. Однако входные и выходные данные должны иметь одинаковый формат: вы должны иметь возможность повторять отправку произвольное количество раз на любом допустимом входе.
Вы можете написать либо полную программу, либо функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Тестовые случаи
Input:
12
34
Output:
42
31
Input:
Hell
! o
d -
lroW
Output:
lol
o W-
!H e
ldr
Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX
Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Input:
*___ ___ o
o|__) |__) *
*| | o
o __ __ *
*| | _ o
o|__ |__| *
Output:
|_____) *o
|_ _ *o
||_ __| *o
o*|_____)
o* |_ _
o*||_ _
c2k
вместоck/lk2
.c2k
разбивает строку на две равные части.Юлия, 136 байт
Очень простая реализация. Не особенно конкурентоспособная запись, но это было весело!
Это создает лямбда-функцию, которая принимает двумерный массив в качестве входных данных и возвращает преобразованный двумерный массив.
Ungolfed + объяснение:
Чтобы вызвать его, дайте функции имя, например
f=A->(...)
.Пример вывода:
И доказательство того, что оно может быть произвольно приковано:
Предложения, как всегда, приветствуются, и я с удовольствием предоставлю дальнейшие объяснения.
источник
CJam,
2524 байтаПрямая реализация спецификации. Объяснение:
Попробуйте онлайн здесь
источник
JavaScript (ES6), 104
141Редактируя обзор спецификации, я обнаружил, что число строк должно быть четным (я пропустил это раньше). Так что несложно найти правильную исходную позицию для каждого символа в выводе за один шаг.
Тест в консоли Firefox / FireBug
Выход
источник
J
4539 байтJ имеет функцию тесселяции (вырезать
;.
), которая очень помогает.источник
Haskell,
128127 байтовИспользование:
f ["12", "34"]
->["42","31"]
Как это устроено:
Изменить: @Zgarb нашел байт для сохранения.
источник
g x=x
случай пустого списка.GNU sed -r, 179 байт
Оценка включает +1 для
-r
arg to sed.Мне потребовалось некоторое время, чтобы понять, как это сделать
sed
, но я думаю, что у меня есть это сейчас:Обратите внимание, что все пробелы выше должны быть одиночными tabсимволами. Комментарии не включены в оценку по гольфу.
Также обратите внимание, что это широко использует
:
символы маркеров. Если входной поток содержит:
, будет следовать неопределенное поведение. Это можно смягчить, заменив все:
на некоторые непечатные символы (например, BEL) без каких-либо затрат на счет в гольфе.Ввод и вывод - это список строк, разделенных табуляцией:
источник
J,
3332 символаМонадический глагол.
объяснение
Давайте начнем с определения
Y
нашего образца ввода.Первая часть (
-:@#@{. (}. ,. {.) |:
) разбиваетсяY
пополам и добавляется, затем заканчивается:Во второй части (
_2 |.\"1
) мы разбиваем это на пары по два и переворачиваем их:В заключение (
0 2 ,.@|:
) мы транспонируем матрицу по мере необходимости и отбрасываем заднюю ось:Целое выражение со вставленным пробелом:
И как явный глагол:
источник