Dize Büyük Harf


18

Bir dize verildiğinde büyük harfle yazın. Büyük harf ile demek conTeNT-lENgthdeğişiklikler Content-Length. Örnekte dizeyi 2 kelimeyle gösterdim- kelime sınırı olarak . Ancak ben sınır olarak tek bir karakterle ayrılmış herhangi bir sayıda kelime içeren dize için kod yazmak için bekliyoruz . Bu sınır dizede değişebilir.

Koşullar

  1. kullanarak regular expressionsIS izin verilmez .
  2. bir cümlede (dize) herhangi bir sayıda kelime olabilir.
  3. her kelime Englishharflerden oluşacaktır[a-zA-Z] herhangi bir vakanın .
  4. cümledeki farklı kelimeler tek bir karakterle ayrılacaktır. Bu karakter olacak ancak herhangi biri -, ., <space-character>, /,& , #. Güvenle bu cümle varsayabiliriz değil belirtilen dışında başka herhangi bir karakter içermelidir.
  5. Çıktıda kelime sınırları korunmalıdır.
  6. en kısa kod kazanır.

Örneğin, programınız Begin/With.Type&Contentiçin çıktı almalısınız 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
Büyük harf olarak adlandırdığınız şey aslında deve vakasına bir dönüşümdür.
Pierre Arlaud

6
@ArlaudPierre Hayır, "test senaryoları" olarak verdiği şey daha çok deve davası gibidir. Büyük harf adı verilen başlık Başlık Davasına daha yakındır.
Iszi

Lütfen test senaryoları için beklenen çıktıyı verebilir misiniz? Bazı yerleşik işlevler, tam büyük harfli kelimelerin ( /CC/satır 2'deki veya -AND&satır 7'deki gibi) tek başına bırakılması gerektiğini varsayabilir . Bu meydan okuma için uygun mu?
Iszi

Giriş her zaman bir sözcükle mi başlar yoksa bir ayırıcıyla başlayabilir mi?
lebatsnok

Yanıtlar:


7

GolfScript, 36 27 19 karakter

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

Spesifikasyona göre tüm girdiler için çalışan oldukça basit bir GolfScript yaklaşımı. Örnekler çevrimiçi olarak test edilebilir .


Güzel. Çözümümün profesyonel çözümün en az iki katı olup olmadığını merak ediyordum. :) Ama eminim gün bitmeden birkaç kez kısaltacaktır.
manatwork

@manatwork Şimdi iki faktörünüz var ;-) Tüm takaslardan hala memnun değilim.
Howard

Beni hayal kırıklığına uğratmayacağını biliyordum.
manatwork

22

Python 3,22

print(input().title())

Bu kod bir dizeyi stdin'den girdi olarak alır ve stdout'a büyük harfle çıktı verir.

Örneğin:

giriş:

BEGIN/wITH.tyPe&cOnTENt

çıkışına:

Begin/With.Type&Content

Aşağıdaki kod çok satırlı girişler içindir (gerekirse)

Python 3, 46

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

while 1:print(input.title())son kod parçası için daha kısa bir eşdeğerdir.
Ramchandra Apte

1
@RamchandraApte İzin verilip verilmediğinden emin değilim. Kodunuz bir ölecek EOFError en kısa sürede onun isabet olarak EOF
Wasi

1
Bence golfler için genel fikir birliği çıktı doğru olduğu sürece, hatalar önemli değil
Oynaklık

Dang; Bu soruyu görür görmez bunu düşündüm, ama sen beni dövüyorsun. +1
Justin

+1 Bunu golfscript'den daha çok seviyorum çünkü bir müstehcenlik gibi görünmüyor.
Tim Seguine

6

Mathematica 62

Veri

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"}

kod

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

kullanım

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

"Temsilci Kabul / Uzunluk Tipi Kullanıcı Aralığı.Tip"

f /@ tests

{"Aracı Kabul / Uzunluk Tipi Kullanıcı Aralığı.Tip",
"Tür ve Aracı / Bilgi / İçerik Uzunluğu # Kabul / Aracı.Range-Bilgi / İçerik / Kod", "Bilgi / Yanıt. Uzunluk # Tür ve Kullanıcı / Başlangıç ​​ve Kullanıcı. Kabul / Bilgi "," Uzunluk # Kullanıcı.Tip / Başlangıç ​​ve Uzunluk Türü / Kabul Et # Aralık / Kod & Kabul Et / İçerik "," İçerik / Kabul Et ",
" Başlangıç ​​/ İçerikle / Tür ",
" Code.Cc # Kullanıcı.Length-Kullanıcı -Ve & Type Type & Length.Type User.User & With ",
" İçerik Tipi Türüyle Aralık ve İçerik ",
" Begin Code # User # Agent.User ",
" Type Length "}


-1 Bu temelde normal ifade
CalculatorFeline

Mathematica doğrudan regex çalıştırabilir ama başka bir şey kullandım. Normal ifadeye benzer, ancak normal ifade değildir.
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 karakter

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

Giriş iletilir $s. Dizede bir karakter dizisi olarak çalışır.

Basit 2 durumlu bir makinedir. Dizelerin sözcüksel sıralamasına dayanır ve ayrıştırıcı otomatik olarak bazı durumlarda bir dize yazmak istediğinizi varsayar.

Durum depolanır $bve bir sonraki karakterde çağrılması gereken işlevin adı olarak temsil edilir. ucfirstve karakterleri yazmak lcfirstiçin daha kısadır ve tek karakter dizelerinde strtolower/ strtoupperüzerinde aynı davranışı vardır . Ayrıca, sadece bir harf ile farklılık gösterdiğinden, bunları devleti depolamak için verimli bir şekilde kullanabiliriz. Orijinal sürüm, durumu açıkça bir boole'de depolamak için gerekiyordu.

Echo boolean false için hiçbir şey !basmadığından, echo deyiminde ödevi "gizlemek" için virgül ve operatör kullandım. Bu, bir karakteri{} .


Lütfen satır içi kod yerine kod bloğu işaretlemesi kullanın, böylece Code Golf UserScript Enhancement Pack gibi komut dosyaları boyutu kodun altına ekleyebilir. Bu arada, kodunuzda 3 boşluk karakteri de kaldırılabilir.
Aralık'ta

$b=ord($c)>64;Denemek yerine $b=$c>"@";. Hatta $b=$c>=A;uyarı veren AFAIR, ancak iyi kodlama uygulamaları burada bir erdem değildir.
manatwork

@manatwork teşekkürler, bunu düşünmedim. Zaten ayarlanmamış bir değişken kullanmak için zaten bir uyarı atıyorum.
Tim Seguine

Hmm… $ b'yi sadece bayrak olarak kullanmamaya, gerçek fonksiyon ismini içine kaydetmeye ne dersiniz? $b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}.
manatwork

@manatwork harika! Bunu işlevle yapmanın bir yolunu düşünmeye çalışıyordum. Denemelerim daha büyüktü.
Tim Seguine

4

C, 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();}

Hatları alır stdin, çevirir stdout. (Bunu tercih SIGINTeder EOF.)


4

Powershell: 37-43

Girişi nasıl almak istediğinize bağlı olarak ...

Kullanıcıdan giriş iste: 43

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

Boru hattından girdi al: 38

(Culture).TextInfo.ToTitleCase($input)

Komut dosyasını çalıştırırken bağımsız değişken olarak girdi sağlama: 37

(Culture).TextInfo.ToTitleCase($args)

NOT: Yukarıdaki komut dosyaları, tüm harfleri büyük olan kelimeleri yok sayar ve olduğu gibi bırakır. Bunun hesaba katılması gerekiyorsa, girişin Başlık Büyük / Küçük Harf dönüşümünden önce küçük harfe zorlanması gerekir. Bu, ilk yönteme 10, diğer ikisine de 12 karakter ekler.

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

Şartnameye göre çalışmaz. Deneyin foo:bar.
Mormegil

@Mormegil Hangisi? En azından okuma-host versiyonu benim için iyi çalışıyor. Sorudaki tüm test durumlarına karşı test ettim ve soruya yorumda gönderdiğim özel durumlar dışında hepsi beklendiği gibi döndü.
Iszi

:(kolon) kural # 4 bir kelime ayırıcı olarak listelenmemiş, bu nedenle, AFAICS, foo:barsonuçlanmalıdır Foo:bar, değildir Foo:Bar . Ama bu sadece şartnameyi (oldukça katı) okumam.
Mormegil

2
@Mormegil Şey, bu temiz. Spesifikliğin bu belirsizliği gidermek için ayarlandığı gibi, aynı zamanda bu cevabı geçersiz kılmadığı anlaşılıyor.
Iszi

1
Sen değiştirebilirsiniz get-cultureile culture; bkz. codegolf.stackexchange.com/a/778/1308
Danko

4

Java - 209 karakter

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);}}}

Yalnızca okunabilirlik için yeni satırlar ekledim.


3

R, 143 116

Belki biraz uzun bir çözüm ama işte başlıyoruz:

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="")}

Hafifçe soluksuz ve açıkladı:

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="")
    }

Düzenleme : 116 karakter

Buradaki asıl zorluk vektörleştirmektir substr. İşte daha az ayrıntılı bir yol.

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="")}

Girintili'ye:

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
    }

Kullanımı:

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

Bazı karakterleri kaydedebilirsiniz. Yana asadece küçük harflerin consits, büyük harfe sahip maçları için kontrol etmek gerek yoktur LETTERS.
Sven Hohenstein

@SvenHohenstein gerçekten, teşekkürler!
plannapus

Başka bir tane TRUEile değiştirebilirsiniz T.
Sven Hohenstein

Başlangıçta tolowerdaha sonra vardı .
plannapus

Tamam, işte bir tane daha ;-) Bir karakteri kaydetmek için mapply(substr,tolower(x),n,n) ile değiştirebilirsiniz strsplit(tolower(x),"")[[1]].
Sven Hohenstein

3

Befunge 98 - 24 45

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

Bunu yazmak beynime zarar verdi.

Bu, girdiyi alır ~ve önceki karakter ayırıcılardan biriyse (veya önceki karakter yoksa),

:'``!3*j' -;

Bu snippet karakteri alır ve eğer ascii değeri büyük veya ona eşitse a, 32 değerini çıkartır, böylece büyük harfe değiştirir. O daha az ise a, 3*jayar atlar. Daha sonra bir sonraki bölümü atlar. Bu bölüm, büyük harften küçük harfe geçiyor (bir sonraki bölümle birleştirilebileceğinden eminim; nasıl olduğundan emin değilim):

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

Karakter yazdırılır ( ,), bu da karakterin sınırlardan biri olup olmadığını kontrol eder:

'/`!

Temelde karakteri ascii değeriyle karşılaştırır /. Karakter bir sınır değilse, kod bir 12sonraki seferde büyük / küçük harf ayarlamalarını atlayacak şekilde iter . #son programın üzerine atlar: @ve girişin sonuna ulaşılırsa, ~kod yürütme @işlemini programın sonlandırıldığı durumuna geri gönderir .


3

Yakut: 60 51 50 47 karakter

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

Örnek çalışma:

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
Test edilmedi l==l.swapcaseile aynı l<?0değil mi? En azından bu görev için izin verilen girdi için.
Howard

Evet. Şimdi, batman başka hiçbir ayırıcı beklenmeyeceğini vurguladı, aslında bu daha kısa. Teşekkürler @Howard.
manatwork

2

C # - 110

Basit bir sonlu-durum-makine tabanlı işleme:

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

(nerede x olduğu stringyararlanmak için)

ve tabii ki, sıkıcı olmak istiyorsanız (şartname güncellendikten sonra),

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

veya tüm sıkıcı kazan plakası ile:

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

Hayır, derleme olmayacak çünkü C # bir betik dili değildir ve bunu bir sınıfta kapsüllemeniz gerekir.
Pierre Arlaud

2
Kim söylüyor? 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"Ancak sıkıcı kazan plakasını gerçekten önemsiyorsanız, 112 karakterini ekleyin.
Mormegil

1
Sen kesebilir publicve string[]aDemirbaş gelen
Johnbot

Oh evet, haklısın public, ama argümanlara ihtiyacım var, işlediğim gibi ...
Mormegil

2

Javascript 102

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

Hiç gerekmez (... )çevresinde üçlü koşul. Hatta daha fazlası, ikinci ve üçlü gerek: function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}.
manatwork

2

Dördüncü, 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

Çevrilmiş çıktı stdoutokunduğu gibi yazılır stdin.


1
"sonra tekrar yaymak" ileri ile kafiyeli!
kedi

2

Befunge-98 (29), C (65)

Yöntem / algoritma hemen hemen aynı olduğundan, her iki sürümü de aynı gönderiye dahil ediyorum. Her ikisi de, bir harfin küçük harf olup olmadığını bilmek için son karakterin bir sembol veya harf olup olmadığını takip etmeye güvenir.

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 karakterleri

Anında penceresinde

?[Proper()]

VBscript

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

Kullanım hakkında yardım verebilir misiniz? “Derleme hatası: Harici ad tanımlanmadı” mesajı alıyorum. (Geliştirici sekmesindeki Word 2013'te Visual Basic'i tıklattım, sonra Visual Basic for Application'ta kodunuzu Hemen pencereye yapıştırdım ve Enter'a
bastım

@manatwork Excel'de olduğunu açıklığa kavuşturmalıydım. Bunu Word'den yapabilirsiniz, ancak Excel'i otomatikleştirmek için yol daha uzun olur.
brettdj

1
Güzel. VBA Excel 2013'ten başlatıldığında mükemmel çalışıyor.
manatwork

Doğrudan Excel'de de çalışır:, =PROPER(A1)ayrıca 11 bayt
Wernisch

1

AWK, 113 103 bayt

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

Bu, tek satırlık içerik için iyi çalışır, ancak çok satırlı giriş için birkaç inits eklenmesi gerekir

{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}

Bir kaydın otomatik olarak alanlara bölünmesinden ve bahsedilen alanların değiştirilmesinden faydalanmak güzel olurdu, ancak daha sonra alan ayırıcılarımızı kaybederdik. :(

Bunun cevapların en golfçüsü olmadığını biliyorum ve bu oldukça eski bir soru, ama AWK'nın CG'nin cevap alanında yeterince temsil edilmediğini hissediyorum :)

(Kodu test ettiğiniz için teşekkürler @manatwork, şimdi çalışmalı :) Ayrıca akışı değiştirdi, ancak bayt sayısını aynı tuttu, bazılarını ;yeni satırlarla değiştirerek .)


1
Emin misiniz? Kodların hiçbiri gawk, mawkveya ile gerekli çıktıyı üretmiyor gibi görünüyor original-awk. (Ubuntu üzerinde test edildi.)
16:31

gawkBir RHEL6 kutusu kullanılarak yazılmıştır , ancak daha sonra bir pencere kutusuna kopyalanmıştır. Bir transkripsiyon sorunu olabilir. Aynı makinede test edip gönderebildiğimde işten sonra test yapmayı deneyeceğim .... Sanırım sorunu zaten görüyorum. l=0olmalıL=0
Robert Benson

Umarım şimdi çalışır, @manatwork. Test için teşekkürler. :)
Robert Benson

1
Şimdi düzgün çalışıyor gibi görünüyor. Tüm test durumları kontrol ettim, ama bunu biraz azaltmak mümkün görünmektedir: {for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1.
manatwork

Ben değişen kullanımınızı gibi $0ve 1önlemek için etiketin printyaptığımı düşünce değil şeyleri komutu vardır. Gelecekte golf
Robert Benson

1

PHP (> v5.4.32) - 25 karakter

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

Açıklama:

  • ucwords () yerleşik bir PHP fonksiyonudur

  • İlk parametre $agiriştir

  • İkinci parametre sınırlayıcılardır (test durumlarında alfabetik olmayan kodlayıcılar bulundu)

  • Iade / eko / baskı kullanımı nedeniyle varsayılır <?= ?>

Bağlantılar:


1
Merhaba ve siteye hoş geldiniz! Şu anda bu varsayılan olarak izin verilmeyen bir snippet olduğunu düşünüyorum, ancak kullanarak tam bir program olarak 41 bayt alabilirsiniz -R: Çevrimiçi deneyin! veya 42 bağımsız değişken kullanarak: Çevrimiçi deneyin!
Dom Hastings

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

Burada SQL Server 2012'deki SELECT sürümünü deneyin .

"Foo" ifadesini giriş dizesiyle değiştirin. Karakter sayısı sıfır uzunluklu bir dize içindir. Bu kod, dizeyi önceki karaktere göre o konumdaki karakteri büyük harflerle veya küçük harflerle kullanarak geçirir.



0

Powershell, 77 75 bayt

Bu çözüm, görev kurallarına tam olarak uygundur (hatta belirsiz örnek foo:bar).

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

@Iszi'nin ToTitleCase yerleşik işlevli Powershell çözümüne de bakın .

Açıklanan test komut dosyası:

$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"
}

Çıktı:

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 bayt

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

Baytlar CP-437'de sayılır ; tek bir bayttır (karakter kodu 20).

Buradaki giriş yöntemi biraz garip: karakterler birer birer yazılır ve büyük harfleri gösterilmeden önce dönüştürülür. Yani yazdığınızda aGeNT, ekranda olarak görünür Agent. Vuruş Enterprogramı sonlandırır.


0

Python 3 , 122 bayt

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

Çevrimiçi deneyin!

Büyük bir puan değil, ama ben vaka değiştirmek için yerleşik dize işlemleri olmadan denemek istedim.


-2

PHP - 23 karakter

mb_convert_case ($ w, 2);

Çalışmak için php_mbstring gerekiyor


1
5.3.26 sürümümde mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);“Begin / with.type & content”, “Begin / with.type & content” ile değil.
manatwork
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.