Строка с заглавной буквы


18

Учитывая строку, используйте ее заглавными буквами. Под капитализацией я имею в виду conTeNT-lENgthизменения Content-Length. В примере я показал строку с 2 словами, у которых -в качестве границы слова. Однако я ожидаю, что вы напишите код для строки, содержащей любое количество слов, разделенных одним символом в качестве границы. Эта граница может меняться через строку.

условия

  1. используя regular expressionsэто не допускается .
  2. в предложении (строке) может быть любое количество слов.
  3. каждое слово будет состоять из Englishбукв [a-zA-Z]любого случая.
  4. разные слова в предложении будут разделены одним символом. Этот символ будет только быть одним из -, ., <space-character>, /, &, #. Вы можете смело предположить, что предложение не будет содержать никаких других символов, кроме упомянутых.
  5. границы слов должны быть сохранены в выходных данных.
  6. самый короткий код выигрывает.

Например, ваша программа должна выводить 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"

2
То, что вы называете капитализацией, на самом деле превращается в верблюжий кейс.
Пьер Арло

6
@ArlaudPierre Нет, то, что он дал как «контрольные примеры», больше похоже на случай верблюда. То, что называется капитализацией, ближе к заглавному случаю.
Изи

Можете ли вы предоставить ожидаемый результат для тестовых случаев? Кажется, некоторые встроенные функции могут предполагать, что все заглавные буквы (как /CC/в строке 2 или -AND&в строке 7) должны быть оставлены в покое. Это нормально, для этого вызова?
Изи

Ввод всегда начинается со слова или может начинаться с разделителя?
lebatsnok

Ответы:


7

GolfScript, 36 27 19 символов

0\{95&+.47>32*\}%\;

Довольно простой подход GolfScript, который работает для всех вводимых данных в соответствии со спецификацией. Примеры можно протестировать онлайн .


Здорово. Было любопытно, является ли мое решение хотя бы вдвое более профессиональным. :) Но я уверен, что вы сократите это несколько раз до конца дня.
manatwork

@manatwork Теперь у нас есть коэффициент два ;-) Все еще недоволен всеми свопами.
Говард

Я знал, что ты меня не разочаруешь.
manatwork

22

Python 3,22

print(input().title())

Этот код будет принимать строку в качестве входных данных из stdin и выводит заглавные буквы в stdout.

например:

вход:

BEGIN/wITH.tyPe&cOnTENt

Ouput:

Begin/With.Type&Content

Следующий код предназначен для многострочных входов (при необходимости)

Python 3, 46

import sys
for i in sys.stdin:print(i.title())

while 1:print(input.title())является более коротким эквивалентом для последнего фрагмента кода.
Рамчандра Апте

1
@RamchandraApte Я не уверен, разрешено это или нет. Ваш код умрет с EOFError, как только он достигнет EOF
Wasi

1
Я думаю, что общее мнение о гольфе заключается в том, что до тех пор, пока выходные данные верны, ошибки не имеют значения
Волатильность

Dang; как только я увидел этот вопрос, я подумал об этом, но вы меня опередили. +1
Джастин

+1 Мне нравится это лучше, чем в сценарии для гольфа, потому что это не выглядит непристойно.
Тим Сегин

6

Mathematica 62

Данные

tests={"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe","type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe","cc/rEspoNCe.lEngtH#tYpEwitH&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"}

Код

StringReplace[ToLowerCase@#,WordBoundary~~x_:>ToUpperCase@x]&

использование

f["aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"]

«Агент принимает / длина типа пользователя Range.Type»

f /@ tests

{"Агент Принять / Тип длины Пользовательский Диапазон. Тип",
"Тип & Агент / Копия / Длина Контента # Принять / Агент. Диапазон-Копия / Содержимое / Код", "Копия / Ответ. Длина # Тип-С & Пользователь / Начать & Пользователь.Агент & Начать / 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 -Инд & Тип Тип & Длина. Тип User.User & With ",
" Диапазон и Контент с Типом Типа Содержимого ",
" Код Начала № Пользователь # Agent.User ",
" Длина Типа "}


-1 Это в основном регулярное выражение
CalculatorFeline

Mathematica может запускать регулярные выражения напрямую, но я использовал что-то еще. Это похоже на регулярное выражение, но это не регулярное выражение.
DavidC

%% %%% % %%
CalculatorFeline

6

JavaScript (94)

prompt().split(l='').map(function(a){return l='A'>l?a.toUpperCase():a.toLowerCase()}).join('')

5

PHP: 78 73 65 64 символов

$b=ucfirst;foreach(str_split($s)as$c)echo$b($c),!$b[0]=$c<A?u:l;

Ввод передается в $s. Он работает со строкой как массив символов.

Это простой 2 конечный автомат. Он опирается на лексическое упорядочение строк и то, что синтаксический анализатор автоматически предполагает, что в некоторых случаях вы намеревались ввести строку.

Состояние сохраняется в $bи представляется как имя функции, которую необходимо вызвать для следующего символа. ucfirstи lcfirstкороче, чтобы напечатать и имеют идентичное поведение к strtolower/ strtoupperна одиночных символьных строках. Кроме того, поскольку они отличаются только на одну букву, мы можем эффективно использовать их для хранения состояния. Первоначальная версия должна была явно хранить состояние в логическом значении.

Поскольку echo ничего не печатает для логического false, я использовал запятую и !оператор, чтобы «скрыть» присваивание (которое в данном случае является правдивым) в выражении echo. Это позволило мне сохранить персонажа, удалив {}.


Пожалуйста, используйте разметку блока кода вместо встроенного кода, чтобы такие скрипты, как Code Golf UserScript Enhancement Pack, могли вставить размер ниже кода. Кстати, в вашем коде можно удалить все 3 пробела.
Манатворк

Вместо того, чтобы $b=ord($c)>64;попробовать $b=$c>"@";. Или даже $b=$c>=A;- AFAIR, который выдает предупреждение, но хорошие методы кодирования здесь не являются достоинством.
Манатворк

@ Manatwork спасибо, не думал об этом. Я уже выдаю предупреждение за использование неустановленной переменной в любом случае.
Тим Сегин

Хмм… Как насчет того, чтобы не использовать $ b просто как флаг, а хранить в нем фактическое имя функции? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;},
Манатворк

@ Manatwork отлично! Я пытался придумать способ сделать это с помощью функции. Мои попытки были все больше.
Тим Сегин

4

С, 83

n;main(c){c=getchar();putchar(c>96?n?c:(n=c-32):c&64?n?c+32:(n=c):(n=0,c));main();}

Занимает строки stdin, переводит их в stdout. (Предпочитает SIGINTк EOF.)


4

Powershell: 37 - 43

В зависимости от того, как вы хотите принять вход ...

Подскажите пользователю для ввода: 43

(Culture).TextInfo.ToTitleCase((read-host))

Взять входные данные из конвейера: 38

(Culture).TextInfo.ToTitleCase($input)

При вводе сценария укажите входные данные в качестве аргумента: 37

(Culture).TextInfo.ToTitleCase($args)

ПРИМЕЧАНИЕ. Приведенные выше сценарии будут игнорировать все прописные слова, оставляя их как есть. Если это необходимо учесть, перед преобразованием заглавия заглавные буквы следует вводить строчными буквами. Это добавляет 10 символов к первому методу и 12 к двум другим.

(Culture).TextInfo.ToTitleCase((read-host).ToLower())
(Culture).TextInfo.ToTitleCase("$input".ToLower())
(Culture).TextInfo.ToTitleCase("$args".ToLower())

Не работает согласно спецификации. Попробуй foo:bar.
Мормегил

@ Mormegil Какой? Версия для чтения, по крайней мере, прекрасно работает для меня. Я проверил его на всех тестовых примерах в вопросе, и все они вернулись, как и ожидалось, за исключением особых случаев, которые я разместил в комментарии к вопросу.
Изи

:(двоеточие) не указано в качестве разделителя слов в правиле № 4, поэтому AFAICS, foo:barдолжно приводить к Foo:bar, а не Foo:Bar . Но это только мое (довольно строгое) прочтение спецификации.
Мормегил

2
@ Mormegil Ну, это аккуратно. Похоже, что спецификация была изменена, чтобы устранить эту неоднозначность, и в то же время не лишить законной силы этот ответ.
Иззи

1
Вы можете заменить get-cultureна culture; см. codegolf.stackexchange.com/a/778/1308
Данко Дурбич

4

Java - 209 символов

class C{
public static void main(String[]a){
for(String b:a){
char[]k=b.toLowerCase().toCharArray();
for(int i=-1;i<k.length;i++){if(i<0||"-. /&#".indexOf(k[i])>=0)k[++i]=(char)(k[i]-32);}
System.out.println(k);}}}

Я добавил новые строки только для удобства чтения.


3

R 143 116

Решение может быть немного длинным, но здесь мы идем:

f=function(x){a=sapply(1:nchar(x),function(y)substr(tolower(x),y,y));d=c(1,which(!a%in%letters)+1);a[d]=toupper(a[d]);cat(a,sep="")}

Слегка разгадал и объяснил:

f <- function(x){
    #Split the string in characters and "lower-case" everything
    a <- sapply(1:nchar(x),function(y)substr(tolower(x),y,y))
    #Select the first character and each character following a 
    #character that doesn't belong to lower case alphabet
    d <- c(1,which(!a%in%letters)+1)
    #Make those ones uppercase.
    a[d] <- toupper(a[d])
    #Output (stdout) while pasting them back together.
    cat(a,sep="")
    }

Изменить : 116 символов

Основная проблема здесь заключается в векторизации substr. Вот еще один менее многословный способ.

f=function(x){n=1:nchar(x);a=mapply(substr,tolower(x),n,n);d=c(T,!a%in%letters);a[d]=toupper(a[d]);cat(a[n],sep="")}

Отступ:

f <- function(x){
    n <- 1:nchar(x)
    a <- mapply(substr,tolower(x),n,n)
    d <- c(T,!a%in%letters) #This has been simplified as well
    a[d] <- toupper(a[d])
    cat(a[n],sep="") #Because a is now 1 char longer than x, need to subset a
    }

Использование:

> f("aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe")
Agent Accept/Length-Type User Range.Type

Вы можете сохранить некоторые символы. Поскольку aсостоит только из строчных букв, нет необходимости проверять совпадения с заглавными буквами LETTERS.
Свен Хоэнштайн

@ SvenHohenstein действительно, спасибо!
plannapus

Еще один: вы можете заменить TRUEна T.
Свен Хоэнштайн

Первоначально у меня был tolower позже.
plannapus

Хорошо, вот еще один ;-) Вы можете заменить mapply(substr,tolower(x),n,n) на, strsplit(tolower(x),"")[[1]]чтобы сохранить один символ.
Свен Хоэнштейн

3

Befunge 98 - 24 45

~\j:'``!3*j' -;:'``b*j:'/`!3*j' +#;:,'/`!jc#@

Написание этого повредило мой мозг.

Это принимает ввод через, ~и если предыдущий символ был одним из разделителей (или если не было предыдущего символа), он выполняет

:'``!3*j' -;

Этот фрагмент принимает символ, и если его значение ascii больше или равно a, он вычитает 32 из него, изменяя его на верхний регистр. Если оно меньше a, 3*jпропускает настройку. После этого он пропускает следующую часть. Эта часть обрабатывает переход от верхнего к нижнему регистру (я уверен, что это можно объединить со следующей частью; я просто не знаю, как):

:'``b*j:'/`!3*j' +#;

Символ печатается ( ,), тогда он проверяет, является ли символ одной из границ:

'/`!

Это в основном сравнивает символ со значением ASCII / . Если символ не является границей, код сдвигается 12так, что он пропустит корректировку с заглавной буквы в следующий раз. #пропускает конец программы: @и, если достигнут конец ввода, ~отправляет выполнение кода обратно в @конец программы.


3

Рубин: 60 51 50 47 символов

$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}

Образец прогона:

bash-4.1$ for line in "${test[@]}"; do printf '%-75s | %s\n' "$line" "$( ruby -ne '$_.downcase.chars{|c|$><<$/=$/<?0?c.upcase: c}' <<< "$line" )"; done
aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe                                    | Agent Accept/Length-Type User Range.Type
type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe             | Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc          | Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT     | Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
contENT/ACcEpT                                                              | Content/Accept
BeGin/wITH.tyPE&conTeNt                                                     | Begin/With.Type&Content
Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with           | Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
RaNgE&COnTeNT WITh CoNTENT-TypE tyPe                                        | Range&Content With Content-Type Type
BEgin COdE#uSeR#aGeNt.USeR                                                  | Begin Code#User#Agent.User
TypE LENGth                                                                 | Type Length

1
Разве не l==l.swapcaseтак l<?0(не проверено)? По крайней мере, для ввода, разрешенного для этой задачи.
Говард

Да. Теперь, когда Бэтмен подчеркнул, что не нужно ожидать никаких других разделителей, на самом деле это короче. Спасибо, @Ховард.
manatwork

2

C # - 110

Простая обработка на основе конечного автомата:

x.Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r

(где xэто stringпрописные буквы)

и, конечно, если вы хотите быть скучным (после обновления спецификации), вы можете использовать

new CultureInfo(9).TextInfo.ToTitleCase(x)

или со всем скучным шаблоном:

class C{static void Main(string[]a){System.Console.WriteLine(new System.Globalization.CultureInfo(9).TextInfo.ToTitleCase(a[0]));}}

Нет, не будет компилироваться, так как C # не является языком сценариев, и вам нужно заключить это в класс.
Пьер Арло

2
Говорит кто? 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 символов.
Мормегил

1
Вы можете вырезать publicи string[]aиз шаблона
Johnbot

Ах да, вы правы public, но мне нужны аргументы, потому что это то, что я обрабатываю ...
Mormegil

2

Javascript 102

prompt().split(o=q='').map(function(c){o+=(q)?c.toLowerCase():c.toUpperCase(),q=('A'>c)?0:1})
alert(o)

Вам не нужно (... )вокруг троичного состояния. Более того, вам не нужен второй троичный function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}.
Манатворк

2

Далее 135

: s swap ;
: c 1 begin key dup 96 > if s if 32 - then 0 s 
else dup 64 > if s 0= if 32 + then 0 s then else 1 s then then emit again ; c

Переведенный вывод записывается так, stdoutкак он читает stdin.


1
"тогда выбрасывай" рифмуйся с вперед!
кот

2

Befunge-98 (29), C (65)

Поскольку метод / алгоритм практически одинаков, я включаю обе версии в один и тот же пост. Оба полагаются на отслеживание того, был ли последний символ символом или буквой, чтобы узнать, должна ли буква быть строчной или нет.

Befunge-98 (29)
#@~:'0` #v_,0>
',++@'% '<   ^
С (65)
c,d;main(){for(;~(c=getchar());d=c>48)putchar(c<48?c:c&95|32*d);}


1

Excel VBA-11 символов

В непосредственном окне

?[Proper()]

VBscript

Set xlapp = CreateObject("excel.application")
wscript.echo xlapp.Evaluate("Proper(""BeGin/wITH.tyPE&conTeNt"")"

Не могли бы вы помочь с использованием? Я получаю «Ошибка компиляции: внешнее имя не определено». (В Word 2013 на вкладке Разработчик я щелкнул Visual Basic, затем в Visual Basic для приложений я скопировал ваш код в окно Immediate и нажал Enter.)
manatwork

@manatwork Я должен был уточнить, что это было в Excel. Вы можете сделать это из Word, но путь длиннее, поскольку вам нужно автоматизировать Excel.
brettdj

1
Здорово. Отлично работает, когда VBA запускается из Excel 2013.
manatwork

Работает непосредственно в Excel: =PROPER(A1)также 11 байтов
Wernisch

1

AWK, 113 103 байта

{for(;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

Это прекрасно работает для однострочного контента, но для многострочного ввода необходимо добавить пару единиц

{O=""
for(L=0;++i<=split($0,a,"");){s=a[i]
O=O (L?tolower(s):toupper(s))
L=1
if(index("-. /&#",s))L=0}print O}

Было бы хорошо, если бы мы могли воспользоваться преимуществами автоматического разбиения записи на поля и изменения указанных полей, но тогда мы потеряли бы наши разделители полей. :(

Я знаю, что это не самый лучший из ответов, и это довольно старый вопрос, но я чувствую, что AWK недостаточно представлен в пространстве ответов CG :)

(Спасибо @manatwork за тестирование кода, теперь он должен работать :) Также изменил поток, но оставил количество байтов таким же, заменив некоторые ;символами новой строки.)


1
Вы уверены? Кажется, что ни один из кодов не выдает требуемый вывод ни с gawk, mawkни original-awk. (Проверено на Ubuntu.)
manatwork

Он был написан с gawkиспользованием коробки RHEL6, но затем транскрибирован в коробку с окнами. Там вполне может быть проблема транскрипции. Я попробую протестировать после работы, когда смогу тестировать и публиковать на одной машине .... Я думаю, что все равно вижу проблему. l=0должно бытьL=0
Роберт Бенсон

Надеюсь, теперь это работает, @manatwork. Спасибо за тестирование. :)
Роберт Бенсон

1
Теперь, кажется, работает правильно. Не проверил все тестовые случаи, но , как представляется, можно уменьшить его немного: {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
manatwork

Мне нравится, что вы используете изменения, $0и 1ярлык, позволяющий избежать printкоманды, - это вещи, о которых я даже не думал. Я буду помнить это для будущего игры в гольф :)
Роберт Бенсон

1

PHP (> v5.4.32) - 25 символов

<?=ucwords($a,'-. /&#')?>

Объяснение:

  • ucwords () - встроенная функция PHP

  • Первый параметр $a - это вход

  • Второй параметр - делиметры (в тестовых примерах встречаются не алфавитные чатактеры)

  • Возврат / эхо / печать предполагается из-за использования <?= ?>

Ссылки:


1
Привет и добро пожаловать на сайт! Я думаю, что на данный момент это фрагмент кода, который не разрешен по умолчанию, но вы можете получить 41 байт в виде полной программы, используя -R: Попробуйте онлайн! или 42, используя аргументы: попробуйте онлайн!
Дом Гастингс

0

T-SQL, 179

DECLARE @T VARCHAR(MAX)='foo',@X VARCHAR(2),@ INT=0WHILE @<LEN(@T)SELECT @X=SUBSTRING(@T,@,2),@+=1,@T=STUFF(@T,@,1,IIF(@X LIKE'[a-Z]_',LOWER(RIGHT(@X,1)),UPPER(RIGHT(@X,1))))PRINT @T

Попробуйте версию SELECT в SQL Server 2012 здесь .

Замените «foo» входной строкой. Счетчик символов для строки нулевой длины. Этот код пересекает строку, используя индекс, прописные или строчные буквы в этой позиции на основе предыдущего символа.



0

Powershell, 77 75 байт

Это решение полностью соответствует правилам задачи (даже неоднозначный пример foo:bar ).

-join($args|% t*y|%{"$_"|%('ToU*r','ToL*r')[+$l];$l=!('# -./&'|% Co*s $_)})

Смотрите также решение Powershell со встроенной функцией ToTitleCase от @Iszi.

Пояснил тестовый скрипт:

$f = {

-join(
$args|% t*y|%{                   # for each char from input string
    "$_"|%('ToU*r','ToL*r')[+$l] # evaluate ToUpper or ToLower method depend on $l (lower) value
                                 # Note the variable $l is not defined for a first char
                                 # so it evaluates toUpper for the first char 
    $l=!('# -./&'|% Co*s $_)     # golfed form for $l=!'# -./&'.Contains($_) expression
                                 # =0 if the current char is specified separator (toUpper for next char)
}                                # =1 otherwise (toLower for next char)
)                                # finally, join all chars to a result string

}

@(
    ,('foo:bar'                                                                 ,'Foo:bar')
    ,('aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe'                                ,'Agent Accept/Length-Type User Range.Type')
    ,('type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe'         ,'Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code')
    ,('cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc'      ,'Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc')
    ,('lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT' ,'Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content')
    ,('contENT/ACcEpT'                                                          ,'Content/Accept')
    ,('BeGin/wITH.tyPE&conTeNt'                                                 ,'Begin/With.Type&Content')
    ,('Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with'       ,'Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With')
    ,('RaNgE&COnTeNT WITh CoNTENT-TypE tyPe'                                    ,'Range&Content With Content-Type Type')
    ,('BEgin COdE#uSeR#aGeNt.USeR'                                              ,'Begin Code#User#Agent.User')
    ,('TypE LENGth'                                                             ,'Type Length')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-ceq$e): $r"
}

Выход:

True: Foo:bar
True: Agent Accept/Length-Type User Range.Type
True: Type&Agent/Cc/Content Length#Accept/Agent.Range-Cc/Content/Code
True: Cc/Responce.Length#Type-With&User/Begin&User.Agent&Begin/Accept/Cc
True: Length#User.Type/Begin&Length Type/Accept#Range/Code&And-Accept/Content
True: Content/Accept
True: Begin/With.Type&Content
True: Code.Cc#User.Length-User-And&Type Type&Length.Type User.User&With
True: Range&Content With Content-Type Type
True: Begin Code#User#Agent.User
True: Type Length

0

QBasic, 74 байта

1c$=LCASE$(INPUT$(1))
IF f=0THEN c$=UCASE$(c$)
f=c$>"@
?c$;
IF""<c$GOTO 1

Байты считаются в CP-437 ;это один байт (код символа 20).

Метод ввода здесь немного странный: символы вводятся по одному, и их заглавные буквы преобразуются перед отображением. Поэтому, когда вы печатаете aGeNT, он появляется на экране как Agent. Удар Enterзавершает программу.


0

Python 3 , 122 байта

lambda s:''.join(chr(ord(c)+[[0,0],[0,32],[-32,0]][('@'<c<'[')-('`'<c<'{')]['@'<p<'['or'`'<p<'{'])for c,p in zip(s,'-'+s))

Попробуйте онлайн!

Не очень хороший результат, но я хотел попробовать его без встроенных строковых операций для изменения регистра.


-2

PHP - 23 символа

mb_convert_case ($ w, 2);

Для работы нужен php_mbstring


1
На моем 5.3.26 mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);возвращается «Begin / with.type & content», а не «Begin / With.Type & Content».
Манатворк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.