Песочница пост здесь .
Создайте функцию или программу, которая «Springizes» строку.
- Вводом будет String in Stdin или ближайшая альтернатива
- Ввод будет содержать только печатные ASCII и / или пробелы
- Вывод будет в стандартный вывод или ближайшую альтернативу
- Завершающие переводы строки и пробелы являются приемлемыми
Как пружинить строку
- Отформатируйте строку в столько пружин ASCII, сколько необходимо
- Заполните катушки пробелами до ближайшей катушки
- Считайте символы, следуя за пружиной вокруг катушек
Это пружинная катушка ASCII:
#
# ####
# #
# ####
#
Где #
s - символы строки
Вот пример:
abcdefghijklmnopqrstuvwxyz
становится
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Где .
s заменить места для видимости.
Затем строка читается обратно, следуя пружине ASCII вниз, вокруг петель, дважды нажимая g
и u
:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
... дает:
abgjklmhfedcginopuxyz vtsrquw
(с завершающим пробелом)
Тестовые случаи
(цитаты добавлены для выделения конечных пробелов - пожалуйста, игнорируйте с точки зрения IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Обратите внимание, что выходная длина всегда кратна 15, длина витка пружины
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Ответы:
Желе , 26 байт
TryItOnline!
Как?
источник
Python 2,
10410298 байтСпасибо за комментарий, помогите!
https://tio.run/#2VDVy
Оригинал:
источник
input()
и принимать данные в формате"<stuff>"
.lambda
анонимную функцию вместо программы - это часто короче .+13
к+14
и+1
к+(len(t)%14>0)
бы сделать это, но должна быть более коротким путем.JavaScript (ES6), 79 байт
Шестнадцатеричная строка бесстыдно украдена из @ETHproductions.
источник
Сетчатка , 71 байт
Попробуйте онлайн!
Перестановка строк не совсем лаконична в Retina ...
источник
JavaScript (ES7),
144143141114104103 байтБлагодаря ETHProductions за 10B сэкономить!
пример
Выход
источник
+('0x'+whatever)
для преобразования в число:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
чтобы сэкономить себе пару скобок :-)Perl 6 , 61 байт
Как это работает
Основная структура такова:
Выражение, используемое для индексации в каждом 14-символьном сегменте
"abgjklmhfedcgin".ords X- 97
, выглядит следующим образом:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 байта
Попробуйте онлайн!
Как это работает
Основная структура такова:
Те же показатели , как и выше, но так как мы называем в
.flat
любом случае, мы можем использовать вложенную (но один байт короче) выражение для них:0,1,6,9..12,7,5...2,6,8,13
.(Выглядит тривиально, но на самом деле полагается на особенность синтаксического анализа Rakudo Perl 6, которая, вероятно, является ошибкой . Чтобы написать ее, не используя эту ошибку, нужно будет добавить вокруг себя символы скобок
5...2
.)источник
Befunge-93, 97 байт
Попробуйте онлайн!
Это разбивка исходного кода с выделением различных компонентов.
Основной цикл начинается с выполнения справа налево, оборачиваясь вокруг правой стороны игрового поля. Здесь мы читаем первый символ из stdin и завершаем работу, если это EOF.
В следующем разделе все символы EOF конвертируются в пробелы по формуле
c = c + 31*!(c+1)
. Хотя это не будет применяться на первой итерации, это может произойти на последующих проходах.Копия символа сохраняется во временной памяти, а затем выполняется поиск текущего индекса в таблице в строке четыре ( ), чтобы определить, должен ли символ выводиться или нет.
Если символ должен быть выведен, мы берем левую ветвь. Здесь выполняется своп, чтобы отменить своп, который произойдет в следующий раз, а затем нажать ноль, чтобы заставить ветвь направо.
Если символ не был выведен, мы меняем его в стеке под счетчиком индекса (этот обмен отменяется в левой ветви). И в обоих случаях мы сохраняем символ в памяти с текущим смещением индекса, увеличиваем индекс и проверяем, больше ли он 13.
Если нет, мы читаем следующий символ из stdin и повторяем внутренний цикл.
Если это так, мы закончили набор из 14 символов, 7 из которых были выведены (
abgjklm
), а 7 остались в стеке (cdefhin
). Мы бросаем последний два, выход оставшиеся 5 (hfedc
), а затем извлекать и выводить частные случаиg
,i
иn
из памяти.И это возвращает нас к началу основного цикла, где мы повторяем процесс снова для следующих 14 символов.
источник
Mathematica,
7772 байтаСпасибо JungHwan Min за сохранение 5 байтов!
Безымянная функция, принимающая список символов в качестве входных данных и возвращающая список символов.
Partition[#,14,14,{1,1}," "]
разбивает ввод на подсписки длиной 14, дополняя пробелами при необходимости.LetterNumber@"abgjklmhfedcgin"
оценивается как{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, что указывает порядок, в котором следует принимать каждый подсписок длины 14 (повторяя соответственно 7-й элемент). Затем[[;;,...]]
берет элементы всех подсписков длины 14 в этом порядке иJoin@@
объединяет ответы вместе.Предыдущее представление:
источник
LetterNumber@"abgjklmhfedcgin"
это более короткий способ сжатия списка. Также;;
вместо того, чтобыAll
сохранить байт.Python 3 , 86 байт
Попробуйте онлайн!
В качестве бонуса, строка
Tq>]zQ|1/X;:L$o
является допустимой программой CJam, которая печатает уникальные символы на стандартном вводе, отсортированном. Попробуйте онлайн! (+ объяснение)источник
PHP, 94 байта
разбивает аргумент командной строки на 14-байтовые фрагменты и проходит через строку перевода в качестве индекса для подстроки. Беги с
php -nr '<code>' <string>
.Я был рад узнать, что
??
также принимает пустую строку (для «недопустимого» индекса) как ноль.источник
Рубин, 83 байта
Первой идеей было использование шестнадцатеричных чисел, но ord-48 сохраняет другой байт (украденный из ответа Трокса).
источник