Пропишіть рядок


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 Ні, те, що він називається "тестовими кейсами", більше нагадує випадок верблюда. Те, що називається капіталізацією, ближче до Title Case.
Іссі

Чи можете ви надати очікуваний результат для тестових випадків? Здається, деякі вбудовані функції можуть припускати, що слова з усіма великими літерами (наприклад, /CC/у другому рядку або -AND&у рядку 7) слід залишити в спокої. Чи це нормально для цього виклику?
Іссі

Чи завжди введення починається з слова, або може починатися з роздільника?
lebatsnok

Відповіді:


7

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

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

Цілком базовий підхід GolfScript, який працює на всі дані відповідно до специфікації. Приклади можна перевірити в Інтернеті .


Класно. Цікаво було, чи моє рішення принаймні вдвічі більше професійне. :) Але я впевнений, що ви скоротите це кілька разів до закінчення дня.
манатура

@manatwork Зараз у нас коефіцієнт два ;-) Досі незадоволений усіма свопами.
Говард

Я знав, що ти мене не розчаруєш.
манатство

22

Пітон 3,22

print(input().title())

Цей код буде приймати рядок як вхід від stdin і надає велике виведення в stdout.

наприклад:

вхід:

BEGIN/wITH.tyPe&cOnTENt

вихід:

Begin/With.Type&Content

Наступний код призначений для багаторядкових входів (за потреби)

Пітон 3, 46

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

while 1:print(input.title())- коротший еквівалент останнього фрагмента коду.
Рамчандра Апте

1
@RamchandraApte Я не впевнений, це дозволено чи ні. Ваш код загине за допомогою EOFError, як тільки він потрапить у EOF
Wasi

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

Данг; як тільки я побачив це питання, я подумав про це, але ти мене до цього побив. +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"]

"Агент Accept / Length-Type User Range.Type"

f /@ tests

{"Агент 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 / Type & 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 ",
" Діапазон і вміст із типом типу вмісту ",
" Код початку # Користувач # Агент.Користувач ",
" Довжина типу "}


-1 Це в основному регулярний вираз
CalculatorFeline

Mathematica може запускати регулярний вираз, але я використовував щось інше. Це схоже на регулярне вираження, але воно не є регулярним.
DavidC

%% %%% % %%
CalculatorFeline


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, я використав кому та !оператор, щоб "приховати" завдання (що в даному випадку є truthy) в операторі echo. Це дозволило мені зберегти персонаж, видаливши {}.


Будь-ласка, використовуйте розмітку кодового блоку замість вбудованого коду, щоб такі сценарії, як Code Golf UserScript EnScript, могли вставити розмір нижче коду. До речі, у вашому коді всі 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

Потужність: 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 справді, дякую!
планнапус

Ще один: Ви можете замінити TRUEна T.
Свен Хогенштайн

Спочатку я tolowerпізніше.
планнапус

Добре, ось ще один ;-) Ви можете замінити 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

Ruby: 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(не перевірено)? Принаймні для вводу, дозволеного для цього завдання.
Говард

Так. Тепер, коли Бетмен підкреслив, що ніяких інших сепараторів не слід очікувати, справді це коротше. Дякую, @Howard
манатура

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 символів.
Mormegil

1
Ви можете вирізати publicі string[]aз
котла

О так, ви маєте рацію 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>
',++@'% '<   ^
C (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 на вкладці Developer я натиснув Visual Basic, потім у Visual Basic for Application я скопіював ваш код у вікно
Негайного

@manatwork Я повинен був уточнити, що це було в Excel. Це можна зробити з Word, але шлях довший, як вам потрібно для автоматизації Excel.
brettdj

1
Класно. Відмінно працює, коли VBA запускається з Excel 2013.
маніпуляція

Працює також безпосередньо в 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.)
маніпуляція

Він був написаний 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.
манатура

Мені подобається, що ти використовуєш зміни, $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завершує програму.



-2

PHP - 23 символи

mb_convert_case ($ w, 2);

Для роботи йому потрібен php_mbstring


1
На мій 5.3.26 mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);повертається "Почати / з.типом і контентом", а не "Почати / З. Тип і вміст".
манантська робота
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.