Ваш ввод будет английским предложением, фразой или словом. Это будет только содержать a-zA-Z' -,.!?
. Ваша задача - взять входные данные, удалить пробелы, а затем перераспределить заглавные буквы так, чтобы заглавные буквы в индексах, которые были заглавными до (и только буквы в индексах, которые были заглавными).
Например, если введено A Quick Brown Fox Jumped Over The Lazy Dog
, индексы заглавных букв (на основе 0) 0, 2, 8, 14, 18, 25, 30, 34, 39
. Далее, удалить пробелы из входа: AQuickBrownFoxJumpedOverTheLazyDog
. Далее, в нижнем регистре все буквы, но прописные те на 0, 2, 8, 14, 18, 25, 30, 34, 39
: AqUickbrOwnfoxJumpEdovertHelazYdog
, что ваш выход.
вход
Ваш ввод будет английским предложением, фразой или словом. Он может содержать только строчные буквы, прописные буквы, дефисы, апострофы, запятые, точки, вопросительные знаки, восклицательные знаки и пробелы.
Выход
Ввод с удаленными пробелами, в нижнем регистре-d, с буквами в индексе заглавных букв во вводе в верхнем регистре-d.
ПРИМЕЧАНИЕ. Ваша программа не может аварийно завершить работу (ошибка, такое выполнение прекращается) с помощью IndexOutOfRange или аналогичной ошибки.
Тестовые случаи
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
« Они есть0, 2, 8, 14, 18, 25, 30, 34, 39
Ответы:
Желе ,
1413 байтПопробуйте онлайн!
Как это работает
источник
C (gcc) ,
82797472696766 байтПопробуйте онлайн!
источник
Python 2 , 114 байт
Попробуйте онлайн!
Эквивалентное:
Python 2 , 114 байт
Попробуйте онлайн!
источник
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
для -5 байтов.Python 3 ,
787572 байтаСпасибо @xnor за удаление 6 байтов!
Попробуйте онлайн!
источник
s
вместоs[0]
?(c*2).title()
Вы можете получить оба случая, хотя и переключаются.c>' '!=f()
эквивалентно(c>' ') and (' '!=f())
.05AB1E ,
1514 байтов-1 байт благодаря Emigna
Попробуйте онлайн!
источник
Haskell ,
9895898881 байтСпасибо @name, @nimi, @Zgarb и @Laikoni за помощь в сокращении всего 14 байт
Ungolfed:
источник
filter(>' ')
за один байт меньшеlast(toLower:[toUpper|isUpper p])c
zipWith
должны сохранить один байт больше:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 байта
Попробуйте онлайн!
Такого рода задачи - именно то, для чего был создан V. :)
Объяснение:
источник
Python 2, 100 байт
источник
Алиса , 32 байта
Попробуйте онлайн!
объяснение
Это стандартный шаблон для программ, которые работают полностью в обычном режиме. Развернутая программа выглядит следующим образом:
источник
JavaScript (ES6),
949185 байтПопытайся
источник
'@'<s[i]&s[i]<'['?
?Retina ,
7771 байтПопробуйте онлайн! Ссылка включает тестовый набор. Объяснение: На первом этапе дублируется строка, а на втором этапе строчные буквы дублируются и удаляются пробелы. Затем третий этап проходит по каждой заглавной букве справа налево и пытается поставить пробел перед соответствующим символом во второй строке. Первая строка удаляется, а пробелы используются в верхнем регистре соответствующих символов результата. Изменить: Сохранено 6 байтов благодаря @Kobi.
источник
(.?)
и$4
детали нужны? Похоже, что дополнительная группа в конце ничего не делает.Perl
9594 + 1 = 95 байт+1 байтный штраф за -n
Сохранить один байт путем замены от
s/\s//g
доs/ //g
Попробуйте онлайн!
Объяснение:
Сделайте копию входной строки.
Удалить все пробелы и преобразовать строку в нижний регистр.
Затем начните цикл над каждой буквой. Проверьте букву в той же позиции в сохраненной строке в верхнем регистре. Если оно верхнее - сделать текущую букву заглавной. Распечатать письмо.
Обратите внимание, что Perl должен быть запущен с ключом командной строки "-n"
источник
+1
байт для-n
флага. Кроме того, это выглядит хорошо! Добро пожаловать на сайт! :)MATL , 18 байт
Тот же подход, что и у ответа Райли 05AB1E .
Попробуйте онлайн!
источник
Python 3 , 117 байт
Попробуйте онлайн!
Это в значительной степени мой первый гольф-код, поэтому, скорее всего, он будет плохим, за исключением помощи из комментариев ниже!
PS Да, глупо, что определение и увеличение
i
сохраняют байты в диапазоне (len (y)). Ну что ж.источник
return
.C # (.NET Core) ,
108101 байтПопробуйте онлайн!
char
класс имеет статическиеToUpper()
иToLower()
методы.источник
Древесный уголь , 33 байта
Попробуйте онлайн!
Поскольку я до сих пор не знаю, как передать строку с пробелами в качестве единственного входного параметра в код Charcoal, я просто назначаю в заголовке тестовую строку переменной Charcoal, которая представляет собой первый вход (
θ
):Таким образом, код имеет такое же количество байтов, как если бы строка была передана в качестве первого ввода.
Вы можете увидеть здесь подробную версию кода.
источник
PHP, 181 байт
Я пытаюсь получить младшие числа байтов, это мой код:
Попробуйте онлайн!
источник
PREG_OFFSET_CAPTURE
вы можете использовать значение256
,$argn
это более короткая переменная, какreadline()
для ввода, и я думаю,ctype_upper
и использование,lcfirst
иucfirst
сэкономит много байтов с одним циклом и использованием$$i
и троичного оператораJava 8,
184177161 байтОпределенно можно сыграть в гольф еще ..
- 16 байтов благодаря @ OlivierGrégoire , приняв вход
char[]
вместоString
.Объяснение:
Попробуй это здесь.
источник
char[]
вместо String для этого, вы сэкономите много байтов!String
, out =char[]
:-)Common Lisp, 104 байта
Попробуйте онлайн!
Необычно короткий для многословного Common Lisp!
Простой код:
источник
Java (OpenJDK 8) ,
15011711397 байтПопробуйте онлайн!
Во время игры в гольф я получил 102 байта:
Попробуйте онлайн!
Но я вспомнил, что это начинало выглядеть как ответ Дениса С, поэтому я просто перенес его немного в тупик и ... волшебство произошло. Большая выгода от порта - удаление веток и повторений внутри них.
источник
Hi! Test!
должен статьHi!tEst!
, но с вашим решением это становитсяHi!Test
.Google Sheets, 213 байтов
Вход находится в ячейке,
A1
и формула разбивается следующим образом:ArrayFormula()
позволяет нам оценить каждый членROW()
независимоJOIN()
объединяет все эти независимые результаты в одну строкуIF(REGEXMATCH(),UPPER(),LOWER()
это то, что делает его чередующимся, используя верхний или нижний регистр в зависимости от того, что регистр был в этой позиции на входеROW(OFFSET())
возвращает массив значений1
вA1.length
которые могут быть введены вMID()
функцию , так что мы можем оценить каждый символ в свою очередь ,Результаты тестовых случаев: (легче прочитать, если перейти к более крупной версии.)
источник
Рубин , 80 байт
Попробуйте онлайн!
источник
n.gsub(/./){}
вместоn.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 байта
Объяснение:
источник
-n
флаг, чтобы ваш ответ был действительным. Несколько вещей в гольфе:s/ //g
достаточно (не нужно\s
),y/a-z/A-Z/
это то же самоеtr[a-z][A-Z]
, что вы можете использовать-p
флаг, чтобы вам не понадобилось последнееprint
, вам не нужны круглые скобкиlc$&
.C 103 байта
Попробуйте онлайн!
источник
Python 3 ,
125, 124 байтаПопробуйте онлайн!
источник
Python 2,
106105 байтРедактировать: сохранить один байт через
print ''.join
=>print''.join
.Лямбда-форма, 99 байт
источник
СКАЛА, 128 символов, 128 байтов
Спасибо за этот вызов. Попробуйте онлайн!
источник
q / kdb +, 49 байтов
Решение:
Примеры:
Объяснение:
Найдите индексы, в которых ввод
upper
вводится в верхнем регистре, а затем примените функцию к этим индексам в строчной версии строки ввода, удаленной от пробела. Обратите внимание, что мы не можем применить функцию за пределами длины строки, поэтому используйте take (#
), чтобы обрезать входную строку до длины строчной, удаленной версии.Бонус:
Прочитав ответы, я подумал, что я бы попробовал решение, в котором я перебрал бы входные данные, пока я управлял только 53-байтовым решением:
источник
Swift 3.0, 199 байт
Попробуйте онлайн!
источник
Perl 5 , 40 байт
37 байт кода +
-F
флаг. (обратите внимание, что в старых версиях Perl может потребоваться добавить-an
флаги)Попробуйте онлайн!
Пояснения:
Спасибо
-F
,@F
содержит список всех символов ввода.for/\S/g
перебирает каждый непробельный символ ввода. Мы используем$i
для подсчета, на какой итерации мы находимся. Если$F[$i++]
это символ верхнего регистра (/[A-Z]/
), то мы печатаем текущий символ верхнего регистра (uc
), иначе мы печатаем его в нижнем регистре (lc
) Отметьте этоuc
иlc
верните их аргумент без изменений, если это не буква.Предыдущая версия (меньше гольфа: 47 байт):
Попробуйте онлайн!
источник