Вызов:
Учитывая строку, содержащую только заглавные и / или строчные буквы (в зависимости от того, что вы предпочитаете), поместите ее tape
горизонтально, чтобы исправить это. Мы делаем это, проверяя разницу между двумя соседними буквами в алфавите (игнорируя циклический переход и только продвигаясь вперед) и заполняя пространство таким количеством TAPE
/, tape
как нам нужно.
Пример:
Вход: abcmnnnopstzra
Выход:abcTAPETAPETmnnnopTAstTAPETzra
Зачем?
- Между
c
иm
должно бытьdefghijkl
(длина 9), поэтому мы заполняем этоTAPETAPET
; - Между
p
иs
должно бытьqr
(длина 2), поэтому мы заполняем этоTA
; - Между
t
иz
должно бытьuvwxy
(длина 5), поэтому мы заполняем этоTAPET
.
Правила соревнований:
- Разница применяется только вперед, поэтому нет ленты между ними
zra
. - Можно иметь несколько одинаковых соседних букв, например
nnn
. - Вам разрешено принимать входные данные в любом разумном формате. Может быть единственной строкой, строковым массивом / списком, символьным массивом / списком и т. Д. Вывод имеет такую же гибкость.
- Вам разрешается использовать строчные и / или прописные буквы любым удобным для вас способом. Это относится как к входу, так и к выводу
TAPE
. - Возможно, нет
TAPE
необходимости, и в этом случае вход остается неизменным.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку на тест для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
Input: "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"
Input: "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"
Input: "ghijk"
Output: "ghijk"
Input: "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"
Input: "zyxxccba"
Output: "zyxxccba"
Input: "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"
Input: "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"
Input: "tape"
Output: "taTAPETAPETAPETApe"
ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh
(добавил,[]
чтобы сделать его более читабельным).Ответы:
05AB1E ,
1412 байтПопробуйте онлайн!
объяснение
источник
-d
чтобы получить необработанный дамп стека операций за операцией вместо объяснения, но я пытаюсь опубликовать их тоже, это не так просто, особенно в некоторых мой LOL.Желе , 13 байт
Попробуйте онлайн!
объяснение
источник
abctapetapetmnnnopapstetapezra
вместоabctapetapetmnnnoptasttapetzra
.Haskell , 58 байт
Попробуйте онлайн! Функция
f
рекурсивно просматривает строку и просматривает последовательные символыx
иy
.cycle"TAPE"
дает бесконечную строку"TAPETAPETAPE..."
.[x..y]
получает диапазон символов отx
доy
включительно, так что мы должны вычесть два из длины. В случае, еслиx
в алфавите встречается позднее, тогдаy
или оба являются одним и тем же символом, мы получаем отрицательное число после вычитания, но, к счастью,take
принимаем их и просто ничего не берем .источник
Perl 5 ,
-F
46 байтПопробуйте онлайн!
источник
P,E,T,A
вместоT,A,P,E
, но теперь я заметил, что вы использовали((P,E,T,A)x7)[2..-$^H+($^H=ord)
вместо того,((T,A,P,E)x7)[0..-$^H+($^H=ord)-2
чтобы сохранить два байта. Хороший ответ!^H
(\x08
)!do$0
), но здесь всего 2 байта, так что я не стал возитьсяPython 2 ,
968780 байтПопробуйте онлайн!
источник
Haskell , 64 байта
Обрабатывает строки из заглавных или строчных букв, но не одновременно.
Попробуйте онлайн!
источник
C, 84 байта
Попробуйте онлайн!
C (запускается из командной строки Windows), 81 байт
Выход:
источник
Python 3 , 98 байт
Попробуйте онлайн!
-1 байт благодаря Асоне Тухиду
источник
Скала , 66 байт
Попробуйте онлайн!
объяснение
источник
PHP , 85 байт
Попробуйте онлайн!
объяснение
источник
Javascript,
131127 байт4 байта сэкономлено благодаря Рику Хичкоку.
разматывается
Моя проблема здесь в том, что у Javascript не было чистого способа получить расстояние между символами a и b.
источник
charCodeAt
переменную:z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Python 2/3 ,
7069 байтПопробуйте онлайн!
источник
Древесный уголь , 20 байтов
Попробуйте онлайн! Объяснение:
источник
Пип , 29 байт
Принимает ввод как аргумент командной строки (строчные или прописные, не имеет значения). Попробуйте онлайн!
объяснение
источник
JavaScript (ES6),
8078 байтРасстояние между двумя символами можно определить путем преобразования их конкатенации в базу 36, вычитая 370, модуль 37.
Например,
(parseInt('cy',36)-370)%37 == 22
.Затем мы можем использовать
padEnd
для заполнения пробелов и рекурсии для обработки цикла.Тестовые случаи:
Показать фрагмент кода
источник
К4 , 48 байт
Решение:
Примеры:
Объяснение:
Довольно простое решение, но большое количество байтов ... Найти дельты, взять из строки
"TAPE"
, присоединиться к исходному разрезу строки, где дельты> 1.источник
Excel VBA, 106 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные в виде заглавной строки через ячейку
A1
и выводит их в непосредственное окно VBE.источник
Рубин ,
5953 байтаПопробуйте онлайн!
Это на самом деле довольно просто - мы принимаем входные данные как
разделив нашу строку намассив символов (спасибо Asone Tuhid за указание на это) и применяем операцию Reduce, где мы выравниваем каждый символ до требуемой длины, используя «TAPE» в качестве строки-заполнителя.источник
K (ок) , 33 байта
Попробуйте онлайн!
{ }
анонимная функция с аргументомx
-':x
вычтите каждый предыдущий (используйте воображаемый 0 перед первым элементом)1_
уронить первый предмет0,
добавить 0-1+
добавить -10|
max (0, ...)(
...)#\:"TAPE"
изменить форму"TAPE"
каждого элемента из списка слева(
...),'x
добавить соответствующий символ изx
каждой измененной строки,/
объединить всеисточник
Рубин ,
78 77 6462 байта-1 байт благодаря Кевину Круйссену
Попробуйте онлайн!
источник
ord-l[-1].ord-1
вord+~l[-1].ord
. Хороший ответ, хотя. +1 от меня.Java (JDK) , 91 байт
Попробуйте онлайн!
объяснение
кредиты
var
источник
int p=123
спас бы одного персонажа. Не имеет значения, чтоp
находится в первой итерации, если он больше или равен первому символу. Наибольшее значение, которое может иметь первый символ, это'z'
== ASCII122
, поэтому 123 достаточно. Кроме того, если вы используете заглавные буквы, вы можете использовать 91 вместо 123, сохраняя другой символ.C # (.NET Core) ,
122111 байтСохранено 11 байтов благодаря @KevinCruijssen
Попробуйте онлайн!
Объяснение:
источник
while
кfor
и удаление скобок:for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);
. :) Да, и так как вы используетеt="ETAP"
только один раз, вы можете использовать его непосредственно, и изменениеstring
в ,var
чтобы сохранить еще 7 байт:s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}
.YaBasic , 119 байт
Анонимная функция, которая принимает входные данные в виде заглавной строки и выводит их в STDOUT.
Попробуйте онлайн!
источник
Python 3, 90 байт
Попробуйте онлайн
источник
**title**
до#title
. Кроме того, не могли бы вы добавить ссылку TryItOnline с тестовым кодом?Clojure,
139119 байтАнонимная функция, которая принимает строку и возвращает записанную на пленку. Как всегда, Clojure, похоже, не слишком хорошо работает. То, что я действительно не мог понять, является получение следующего символа в коротком пути. На последнем символе я бы получил
OutOfBoundsException
, причина очевидна. Так что я положилcycle
вокруг него. Может быть, есть более элегантное решение.Ungolfed
Обновить
Удалось отбросить несколько байтов. Избавился от надоедливого
if
утверждения, уменьшив разницу.take
создает пустой список, если число равно 0 или меньше, что в свою очередь приводит к пустой строке.Ungolfed
источник
APL (Дьялог Классик) , 30 байтов
Попробуйте онлайн!
{ }
анонимная функция с аргументом⍵
⎕a⍳⍵
найти индексы своих символов в алфавите2-/
парные различия (предыдущий минус следующий)1+
добавить 1-
NEGATE0⌈
max (0, ...)0,
добавить 0⍴∘'TAPE'¨
изменить форму циклически'TAPE'
к каждому⍵,¨⍨
добавить каждый символ из аргумента к соответствующей измененной строке∊
расплющитьисточник
CJam ,
2725 байтовПопробуйте онлайн!
Далеко, далеко от других языков игры в гольф, но я все равно горжусь этим гольфом.
объяснение
источник
Шелуха ,
2625 байтПопробуйте онлайн!
источник
PowerShell , 72 байта
Попробуйте онлайн!
источник
Java,
213166153 байтапопробуйте это онлайн
Пожалуйста, помогите мне сделать это лучше.
Спасибо @cairdcoinheringaahing за отзыв о пробелах. Спасибо @RM за подсказку о ленте. Спасибо @KevinCruijssen за советы по лямбде и выражениям.
источник
"TAPETAPETAPETAPETAPETAPET".substring...
.int a=1,l=i.length;a<=l;a++
может бытьint a=0,l=i.length;++a<=l;
,char u=i[a-1];o+=u;if(a<l){char n=
может бытьchar u=i[a-1],n;o+=u;if(a<l){n=
,(n-u)
не нуждается в круглых скобках иn-u-1
может бытьn+~u
. Кроме того, ваш ответ в настоящее время является фрагментом вместо функции. Чтобы сделать его лямбда, вам нужно добавитьi->{
спереди и}
в конце. Итак, в общем: попробуйте онлайн. 153 байта