Учитывая строку, используйте ее заглавными буквами. Под капитализацией я имею в виду conTeNT-lENgth
изменения Content-Length
. В примере я показал строку с 2 словами, у которых -
в качестве границы слова. Однако я ожидаю, что вы напишите код для строки, содержащей любое количество слов, разделенных одним символом в качестве границы. Эта граница может меняться через строку.
условия
- используя
regular expressions
это не допускается . - в предложении (строке) может быть любое количество слов.
- каждое слово будет состоять из
English
букв[a-zA-Z]
любого случая. - разные слова в предложении будут разделены одним символом. Этот символ будет только быть одним из
-
,.
,<space-character>
,/
,&
,#
. Вы можете смело предположить, что предложение не будет содержать никаких других символов, кроме упомянутых. - границы слов должны быть сохранены в выходных данных.
- самый короткий код выигрывает.
Например, ваша программа должна выводить Begin/With.Type&Content
для BeGin/wITH.tyPE&conTeNt
.
Some test cases:
"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"
"type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe"
"cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc"
"lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT"
"contENT/ACcEpT"
"BeGin/wITH.tyPE&conTeNt"
"Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with"
"RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
"BEgin COdE#uSeR#aGeNt.USeR"
"TypE LENGth"
/CC/
в строке 2 или-AND&
в строке 7) должны быть оставлены в покое. Это нормально, для этого вызова?Ответы:
GolfScript,
362719 символовДовольно простой подход GolfScript, который работает для всех вводимых данных в соответствии со спецификацией. Примеры можно протестировать онлайн .
источник
Python 3,22
Этот код будет принимать строку в качестве входных данных из stdin и выводит заглавные буквы в stdout.
например:
вход:
Ouput:
Следующий код предназначен для многострочных входов (при необходимости)
Python 3, 46
источник
while 1:print(input.title())
является более коротким эквивалентом для последнего фрагмента кода.Mathematica 62
Данные
Код
использование
источник
%%
%%%
%
%%
JavaScript (94)
источник
PHP:
78736564 символовВвод передается в
$s
. Он работает со строкой как массив символов.Это простой 2 конечный автомат. Он опирается на лексическое упорядочение строк и то, что синтаксический анализатор автоматически предполагает, что в некоторых случаях вы намеревались ввести строку.
Состояние сохраняется в
$b
и представляется как имя функции, которую необходимо вызвать для следующего символа.ucfirst
иlcfirst
короче, чтобы напечатать и имеют идентичное поведение кstrtolower
/strtoupper
на одиночных символьных строках. Кроме того, поскольку они отличаются только на одну букву, мы можем эффективно использовать их для хранения состояния. Первоначальная версия должна была явно хранить состояние в логическом значении.Поскольку echo ничего не печатает для логического false, я использовал запятую и
!
оператор, чтобы «скрыть» присваивание (которое в данном случае является правдивым) в выражении echo. Это позволило мне сохранить персонажа, удалив{}
.источник
$b=ord($c)>64;
попробовать$b=$c>"@";
. Или даже$b=$c>=A;
- AFAIR, который выдает предупреждение, но хорошие методы кодирования здесь не являются достоинством.$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
,С, 83
Занимает строки
stdin
, переводит их вstdout
. (ПредпочитаетSIGINT
кEOF
.)источник
Powershell: 37 - 43
В зависимости от того, как вы хотите принять вход ...
Подскажите пользователю для ввода: 43
Взять входные данные из конвейера: 38
При вводе сценария укажите входные данные в качестве аргумента: 37
ПРИМЕЧАНИЕ. Приведенные выше сценарии будут игнорировать все прописные слова, оставляя их как есть. Если это необходимо учесть, перед преобразованием заглавия заглавные буквы следует вводить строчными буквами. Это добавляет 10 символов к первому методу и 12 к двум другим.
источник
foo:bar
.:
(двоеточие) не указано в качестве разделителя слов в правиле № 4, поэтому AFAICS,foo:bar
должно приводить кFoo:bar
, а неFoo:Bar
. Но это только мое (довольно строгое) прочтение спецификации.get-culture
наculture
; см. codegolf.stackexchange.com/a/778/1308Java - 209 символов
Я добавил новые строки только для удобства чтения.
источник
R
143116Решение может быть немного длинным, но здесь мы идем:
Слегка разгадал и объяснил:
Изменить : 116 символов
Основная проблема здесь заключается в векторизации
substr
. Вот еще один менее многословный способ.Отступ:
Использование:
источник
a
состоит только из строчных букв, нет необходимости проверять совпадения с заглавными буквамиLETTERS
.TRUE
наT
.tolower
позже.mapply(substr,tolower(x),n,n)
на,strsplit(tolower(x),"")[[1]]
чтобы сохранить один символ.Befunge 98 -
2445Написание этого повредило мой мозг.
Это принимает ввод через,
~
и если предыдущий символ был одним из разделителей (или если не было предыдущего символа), он выполняетЭтот фрагмент принимает символ, и если его значение ascii больше или равно
a
, он вычитает 32 из него, изменяя его на верхний регистр. Если оно меньшеa
,3*j
пропускает настройку. После этого он пропускает следующую часть. Эта часть обрабатывает переход от верхнего к нижнему регистру (я уверен, что это можно объединить со следующей частью; я просто не знаю, как):Символ печатается (
,
), тогда он проверяет, является ли символ одной из границ:Это в основном сравнивает символ со значением ASCII
/
. Если символ не является границей, код сдвигается12
так, что он пропустит корректировку с заглавной буквы в следующий раз.#
пропускает конец программы:@
и, если достигнут конец ввода,~
отправляет выполнение кода обратно в@
конец программы.источник
Рубин:
60515047 символовОбразец прогона:
источник
l==l.swapcase
такl<?0
(не проверено)? По крайней мере, для ввода, разрешенного для этой задачи.C # - 110
Простая обработка на основе конечного автомата:
(где
x
этоstring
прописные буквы)и, конечно, если вы хотите быть скучным (после обновления спецификации), вы можете использовать
или со всем скучным шаблоном:
источник
Microsoft (R) Roslyn C# Compiler version 1.2.20906.1 Loading context from 'CSharpInteractive.rsp'. Type "#help" for more information. > "foobar".Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r "Foobar"
Но если вы действительно заботитесь о скучном шаблоне, добавьте 112 символов.public
иstring[]a
из шаблонаpublic
, но мне нужны аргументы, потому что это то, что я обрабатываю ...Javascript 102
источник
(
...)
вокруг троичного состояния. Более того, вам не нужен второй троичныйfunction(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}
.Далее 135
Переведенный вывод записывается так,
stdout
как он читаетstdin
.источник
Befunge-98 (29), C (65)
Поскольку метод / алгоритм практически одинаков, я включаю обе версии в один и тот же пост. Оба полагаются на отслеживание того, был ли последний символ символом или буквой, чтобы узнать, должна ли буква быть строчной или нет.
Befunge-98 (29) С (65)источник
05AB1E , 1 байт
Код:
Объяснение:
Попробуйте онлайн!
источник
Excel VBA-11 символов
В непосредственном окне
?[Proper()]
VBscript
источник
=PROPER(A1)
также 11 байтовAWK,
113103 байтаЭто прекрасно работает для однострочного контента, но для многострочного ввода необходимо добавить пару единиц
Было бы хорошо, если бы мы могли воспользоваться преимуществами автоматического разбиения записи на поля и изменения указанных полей, но тогда мы потеряли бы наши разделители полей. :(
Я знаю, что это не самый лучший из ответов, и это довольно старый вопрос, но я чувствую, что AWK недостаточно представлен в пространстве ответов CG :)
(Спасибо @manatwork за тестирование кода, теперь он должен работать :) Также изменил поток, но оставил количество байтов таким же, заменив некоторые
;
символами новой строки.)источник
gawk
,mawk
ниoriginal-awk
. (Проверено на Ubuntu.)gawk
использованием коробки RHEL6, но затем транскрибирован в коробку с окнами. Там вполне может быть проблема транскрипции. Я попробую протестировать после работы, когда смогу тестировать и публиковать на одной машине .... Я думаю, что все равно вижу проблему.l=0
должно бытьL=0
{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
.$0
и1
ярлык, позволяющий избежатьprint
команды, - это вещи, о которых я даже не думал. Я буду помнить это для будущего игры в гольф :)PHP (> v5.4.32) - 25 символов
<?=ucwords($a,'-. /&#')?>
Объяснение:
ucwords () - встроенная функция PHP
Первый параметр
$a
- это входВторой параметр - делиметры (в тестовых примерах встречаются не алфавитные чатактеры)
Возврат / эхо / печать предполагается из-за использования
<?= ?>
Ссылки:
Код игровая площадка
PHP ucwords () функция
источник
-R
: Попробуйте онлайн! или 42, используя аргументы: попробуйте онлайн!T-SQL, 179
Попробуйте версию SELECT в SQL Server 2012 здесь .
Замените «foo» входной строкой. Счетчик символов для строки нулевой длины. Этот код пересекает строку, используя индекс, прописные или строчные буквы в этой позиции на основе предыдущего символа.
источник
JavaScript (Node.js) , 70 байт
Попробуйте онлайн!
Я уверен, что это может быть в гольфе дальше.
Замечания :
Принимает ввод через
f(string)()
, последние требуются, но ничего не выполняют.источник
Powershell,
7775 байтЭто решение полностью соответствует правилам задачи (даже неоднозначный пример
foo:bar
).Смотрите также решение Powershell со встроенной функцией ToTitleCase от @Iszi.
Пояснил тестовый скрипт:
Выход:
источник
QBasic, 74 байта
Байты считаются в CP-437 ;
это один байт (код символа 20).
Метод ввода здесь немного странный: символы вводятся по одному, и их заглавные буквы преобразуются перед отображением. Поэтому, когда вы печатаете
aGeNT
, он появляется на экране какAgent
. Удар Enterзавершает программу.источник
Python 3 , 122 байта
Попробуйте онлайн!
Не очень хороший результат, но я хотел попробовать его без встроенных строковых операций для изменения регистра.
источник
PHP - 23 символа
Для работы нужен php_mbstring
источник
mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);
возвращается «Begin / with.type & content», а не «Begin / With.Type & Content».