入力の各単語の最初の文字を大文字にする


34

これは比較的簡単な方法ですが、きっと気に入っていただけると思います。

Codegolfは、文の形式で入力を取得し、各単語の最初の文字を大文字にして出力を提供するプログラムです。

ルール:

  1. 提出は、関数の形式ではない場合があります。だからいいえ:

    function x(y){z=some_kind_of_magic(y);return z;} 最終的な答えとして...コードは、入力を受け取り、出力を提供することを示す必要があります。

  2. コードは、入力に含まれる他の大文字を保持する必要があります。そう

    eCommerce and eBusiness are cool, don't you agree, Richard III?
    

    としてレンダリングされます

    ECommerce And EBusiness Are Cool, Don't You Agree, Richard III?
    
  3. 「簡単、正規表現を使用するだけです!」選択したゴルフ言語でネイティブの正規表現を使用すると、30文字のペナルティが発生し、最終的なコードカウントに適用されます。悪魔のような笑い

  4. この場合の「単語」は、スペースで区切られたものです。したがってpalate cleanser、2語ですが、pigeon-toed1語と見なされます。if_you_love_her_then_you_should_put_a_ring_on_it1つの単語と見なされます。単語がアルファベット以外の文字で始まる場合、単語は保持されるため_this、レンダリング後はのままになり_thisます。(このテストケースを指摘してくれたMartin Buttnerに感謝します)。

    • 4b。入力フレーズ内の単語が単一のスペースで区切られる保証はありません。
  5. テストケース(コードのテストに使用してください):

    入力:

    eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye
    

    出力:

    ECommerce Rocks. CrazyCamelCase Stuff. _those  Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye
    
  6. これはコードゴルフで、最短のコードが勝ちます...

がんばろう...


1
行末のスペースはどうですか?それらを保存する必要がありますか?必要に応じて追加できますか?
デニス

2
デニス、入力のスペースを保存してください
...-WallyWest

3
!= TitleCase dam it!c#は再び失われます!
ユアン

1
@Tim Pigeon-toedの前の二重スペースは正しいです。彼は間隔を維持すると言った。
mbomb007

2
言葉を分けるものは何ですか?空白(タブ、改行など)または単なるスペース?
スティーブンランバルスキー

回答:


21

CJam、15 13バイト

Lq{_eu?_S-}/;

CJamインタープリターでオンラインで試してください。

擬似コード

L             e# B := ""
 q            e# Q := input()
  {       }/  e# for C in Q:
   _eu?       e#     C := B ? C : uppercase(C)
       _S-    e#     B := string(C).strip(" ")
            ; e# discard(B)

変更された文字Cはすべてスタックに残っているため、終了するときに印刷されます。


3
くそーこれは賢い。D:
マーティンエンダー

私は同意しなければなりません、コードゴルフ言語で誰かに4文字を超えるゴルフをすること自体が偉業です...よくやった。
WallyWest

12
@WallyWest:ゴルフの言語は、彼ら自身がゴルフをしているような印象を与えることができますが、そうではないことを保証します。TMTOWTDIはすべての言語、特に多くのビルトインを備えた言語に当てはまります。時には、あなたは勝つ、時にはあなたは、失うと、あなたがしてきたように、時にはあなたは感じるトラックでヒット
デニス

13

CSS 2.1、49

:after{content:attr(t);text-transform:capitalize}

説明

  • このattr関数は、t(テキスト)HTML属性から入力を取得します。
  • 入力は、に設定text-transformすることにより大文字になりますcapitalize
  • 出力はcontent擬似要素のプロパティを使用して、生成されたコンテンツとして提供されます::after

実行可能なスニペット

:after {
    content: attr(t);
    text-transform: capitalize;
}
<div t="eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye"></div>

CSS 2.1は、望ましい動作を指定しましたcapitalize。各単語の最初の文字を大文字にします。ただし、CSS3は各単語の最初の活版印刷文字単位を大文字にします。したがって、上記のスニペットは、CSS 2.1に準拠していなかった古いIEでも適切に機能しません。CSS3に準拠した新しい準拠ブラウザでも。


ああ、これは賢い!
IQAndreas

1
_thoseCSS3ブラウザーの問題については残念ですが、問題を解決する独自の方法のため、私はまだ賛成しています。)
IQAndreas

@オリオール、「ああ、これは賢い!」確かに!申し訳ありませんIQAndreasが、私はここにあなたのコメントを借りるために持っている...これは問題を解決するための独創的なアプローチがある...私は...このアプローチを利用する必要があります
WallyWest

10

Javascript(ES6)、77バイト

alert(prompt().split(' ').map(x=>x&&x[0].toUpperCase()+x.slice(1)).join(' '))

コメント済み

alert( // output
    prompt(). // take input
    split(' '). // split by spaces
    map(x=> // map function to array
        x && // if x, empty string "" is falsey and returns itself
        x[0].toUpperCase() + x.slice(1) // capaitalize 1st char and concatenate the rest
    ).
    join(' ') // join array with spaces
)

単語が複数のスペースで区切られている場合はどうなりますか?[4b]
-Caek

3
@Caekによって処理されますx&&。空の文字列は偽であるため&&、左のオペランドである空の文字列を短絡して返します。スペースは保持されます。
nderscore

素晴らしい、説明ありがとう。今どのように動作させることができるかを理解するのに役立つかもしれません。
-Caek

これにより、Ascii以外の文字も大文字になり、åがÅになります!
レオ

9

Perl、13バイト

perl -040pe '$_="\u$_"'

9バイト+ 4バイト040p特別な呼び出しルールを正しく解釈したと仮定)。

-040入力レコード区切り文字$/を単一のスペースに設定し、スペースが保持されるようにします。\uエスケープシーケンスは、タイトルケースに次の文字を変換します。


コマンドラインを使用したことについてのすばらしい説明です。
WallyWest

7

CJam、17 15バイト

lS/{S+(eu\+}/W<

ここでテストしてください。

仕様のかなり簡単な実装。{}&連続したスペースのエラーを回避するために、新しいを使用してください。

デニスが保存した2バイト。


素晴らしいもの!CJamは主に単なるゴルフ言語ですか、それとも実用的な商用アプリケーションがありますか?
-WallyWest

6
@WallyWestいいえ、それはただのゴルフ言語です。確かに商用アプリケーションはありませんが、私は個人的にそれをクイックスロースクリプトに時々使用します(多くのビルトインがあり、あなたが何をしているのか知っているなら、入力するよりも少ない文字を入力する方が速いです)複数の文字;))。
マーティンエンダー

各単語にスペースを追加することで、数バイト節約できます。私の質問に対するOPの回答に応じて、これにより14バイトまたは12バイトになります。
デニス

@Dennisそうそう、私はそれで遊んでいたが、最初のキャラクターを引き離す前に単純に追加することを考えなかった。明日変更します、ありがとう!
マーティンエンダー

@Dennisありがとう、変更しましたが、14バイトバージョンの意味がわかりません。2番目のを省略することについて話している+場合、入力に末尾のスペースが含まれていると中断します。
マーティンエンダー

7

C、64 63バイト

a;main(c){while(~(c=getchar()))putchar(a?c:toupper(c)),a=c-32;}

修正:一部のコンパイラ(Clangなど)は、argvの代わりにintパラメーターを好まないため、グローバル変数に移動しました。バイト数は同じままです。気づいてくれたきしむオッシファージュに感謝します。 デニスに感謝、63バイトまで。

ゴルフをしていない:

int a;

int main(int c) {
    while(~(c = getchar()))
        putchar(a ? c : toupper(c)),
        a = c - ' ';
}

かなり簡単です:aがfalseの場合、文字は大文字に変換されます。スペースを読み取った後に設定されます:c-''は、c == ''の場合のみfalseです。toupper()は、小文字以外のすべてを無視するため、記号と複数のスペースは問題ありません。-1にはすべてのビットが設定されているため、getchar()が-1を返すと、NOT演算子はゼロになり、ループは停止します。aはグローバル変数として宣言されているため、ゼロに初期化されます(false)。これにより、最初の単語が大文字になります。


1
while(~(c=getchar())- 私はすきです。クランは、実際にこれをコンパイルしませんが、あなたが同じ文字カウントを取得することができますc;main(a){...}
うるさいossifrage

1
aand の宣言とc三項演算子の順序を交換==する-と、1バイトを節約するために置き換えることができます。
デニス

もちろん、あなたは正しいです。
アンドレアビオンド

いいね!+1を使用してもwhile(!(c = getchar()))、プログラムは同じように動作しますか?
Spikatrix

1
@Cool Guy:いいえ、ビット単位~と論理値!は同じではありません。Cでは、ゼロではないものはすべて真であると見なされるため、あなたの状態はwhile((c = getchar()) == 0)、もちろん機能しないもののようになります。ビットごとのNOT演算子~は、ビットごとに値を否定します。ループを解除するに~cは、ゼロにする必要があります。これは、すべてのビットが1 である必要があることを意味します。その値(32ビット整数の場合)は0xFFFFFFFF、署名されている場合、-1(EOF)です。
アンドレアビオンド

7

Pythonの3、59の 56バイト

f=1
for c in input():print(end=f*c.upper()or c);f=c==" "

3バイトの@Reticalityに感謝します。


3
どうprint(end=f*c.upper()or c)?それは4バイトを節約します

@Reticalityなんてこった、キーワードargだけで空のプリントができるとは思いもしなかった。ありがとう!
Sp3000

7

Perlのバージョン<5.18、30 27 26 25

say map"\u$_",split$,=$"

24文字+1のために-n

\u文字列の次の文字を大文字にします。@ThisSuitIsBlackNotはこれを指摘して1バイトを節約しました。関数を使用する前にucfirst

perldocsから、

別の特別なケースとして、PATTERNが省略されるか、単一のスペース文字で構成されるリテラル文字列( ''や "\ x20"など、ただし/ /ではない)の場合、splitはコマンドラインツールawkのデフォルトの動作をエミュレートします。この場合、EXPRの先頭の空白は分割が行われる前に削除され、代わりにPATTERNは/ \ s + /であるかのように扱われます。特に、これは(単一のスペース文字だけでなく)連続する空白が区切り文字として使用されることを意味します。ただし、文字列 ""の代わりにパターン/ /を指定することにより、この特殊な処理を回避できます。これにより、単一のスペース文字のみを区切り文字として使用できます。以前のPerlでは、この特殊なケースは、Perl 5.18で、splitのパターン引数として単純な ""の使用に制限されていました。

以来$"スペースに評価され、これは、スペースを保持します。$,スペース文字に設定し、スプリットにスペース文字を入力する必要があるため、@ nutkiは両方をスプリットへの入力として実行できることを指摘しました。これにより、最初に設定してからスプリットに$,入力する前の状態から3バイト節約できます$"

@ alexander-brettが指摘したように、,forマップを使用する代わりに{}追加のバイトを保存します。

で実行:

echo 'eCommerce     rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye' | perl -nE'say map"\u$_",split$,=$"'

1
1バイトの保存...map"\u$_",split...
アレクサンダー・ブレット

@ alexander-brettありがとう!答えを更新しました。
hmatt1

5

> <>(魚)、39バイト

</?-' 'o:;?(0:<-*' '*('{'$)'`'::i
i/.0e

方法:

  • 1つの文字を取得し、範囲内にある場合は大文字にしてa-zから印刷します。(この部分の左から右へのコードはi::'backquote')$'{'(*' '*+
  • 場合は、最後の撮影した文字がEOFの文字で、その後終了し、他のそれを印刷
  • 場合は、最後の撮影した文字がスペース文字があり、その後の点1に行き、他の新しい手紙を取ると、ポイント2に進みます。

5

JAVA、273バイト

編集

import static java.lang.System.*;class x{public static void main(String[] s){char[] a=new java.util.Scanner(in).nextLine().toCharArray();boolean f=1>0;for(int i=0;i<a.length;i++){if(a[i]==' '){f=1>0;continue;}if(f){a[i]=Character.toUpperCase(a[i]);f=1<0;}}out.println(a);}}

これはPCGでの私の最初の回答であり、これが受け入れられるかどうかはわかりません。
アトゥールKumbhar

ようこそ!空白を削除して、変数名に単一の文字を使用してみてください。JAVAをゴルフするためヒントもいくつかあります。
nderscore

ヒントをありがとう@nderscore、ヒントを使用して回答を編集しました。
アトゥールKumbhar

よく見えます!また、バイトカウントを投稿に追加しました。
nderscore

1
@TuukkaX彼が持っていないpublicの前にclass...そして、あなたが意味するならば、彼は削除することができますpublicの前でstatic void main(...、彼はまた変化しない限り、あなたは、間違っているclassinterfaceとJavaを使用しています8+。
ケビンCruijssen

5

JavaScript(正規表現ソリューション)-104バイト

誰かが弾丸を噛んでRegExソリューションを投稿する必要があります!74文字、および+30文字のペナルティ:

alert(prompt().replace(/(^| )[a-z]/g,function(m){return m.toUpperCase()}))

または、圧縮されていない方法でコードを読んで理解したい場合:

//     Matches the (beginning of the line or a space), followed by a lowercase English character.  
string.replace( /(^| )[a-z]/g ,
                function(match) { return match.toUpperCase(); }

1
賢い...もちろん、あなたは30文字のペナルティで代償を払った...弾丸をかむために私の帽子を脱いで
...- WallyWest

4

Python 2、73バイト

i=raw_input()
print''.join((c,c.upper())[p==' ']for p,c in zip(' '+i,i))

このプログラムは、スペースが前に付いている場合、文字列を大文字にします(文字列の最初の文字のクラッジ付き)。それはに依存している.upper()正しく活用するために、文字列の方法。


2
Python 3に移植することで2バイト節約できます(-4 raw_input=> input、+2 print=> print()
スティーブンランバルスキー

スティーブンありがとう。Python 3でコーディングすることでバイト単位の節約を検討していました。その後、言語を競争力のあるものに変更する場合、Pythに変更すると考えました。Python 2サブリーグに参加できてうれしいです。私は毎日仕事のためにPython 2でコーディングしているので、この経験は仕事をより良くします(しかし、私の仕事のコードはゴルフではありません!)。
ロジックナイト

4

PHP 64 76 77 83 84 89バイト

$_GETPHPでの入力としてカウント?
もしそうなら、これが私の最初のCGの試みです

foreach(explode(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v)

ありがとうmanatwork :)

ucwords関数を使用するだけで、結果は21バイトになります。

<?=ucwords($_GET[@s])

ありがとう、ハリー・ムストー・プレイフェア:)


個人的には、fgets(STDIN)入力の読み取りのみを検討しています。しかし$_GET、私が知る限り、コンセンサスは得られていません。
マナトワーク

うん

警告を止めるのにトリックは必要ありません。警告です!誰も気にしません。
イスマエルミゲル

まあ、それを考えていませんでした。substrに固執する必要があると思います
Octfx

その必要はありません。削除に関する以前のアドバイスを忘れる時が来ました$k=>。元に戻す:foreach(split(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v);
マナトワーク

4

ハスケル、69

import Data.Char
main=interact$tail.scanl(!)' '
' '!c=toUpper c;_!c=c

説明:

scanl関数(a -> b -> a)と初期値を受け取り、sのaリストを反復処理して[b]sのリストを作成します[a]

scanl (!) z [a,b,c] == [   z
                       ,   z ! a
                       ,  (z ! a) ! b
                       , ((z ! a) ! b) ! c]

渡された関数の左引数として前の結果を繰り返し、右引数として入力リストの値を受け取り、次の結果を作成します。

(!) :: Char -> Char -> Char渡した右の文字を返す関数を作成しましたが、左の文字が' '(スペース)の場合は大文字にします。の場合scanl、これは次のことを意味します。入力リストから値を返しますが、前の結果がスペースの場合は大文字にします。だからscanl (!) ' ' "ab cd"

    scanl (!) ' ' "ab cd"
==> ' ' : scanl (!) (' ' ! 'a') "b cd"
==> ' ' : scanl (!)     'A'     "b cd"
==> ' ' : 'A' : scanl (!) ('A' ! 'b') " cd"
==> ' ' : 'A' : scanl (!)     'b'     " cd"
==> ' ' : 'A' : 'b' : scanl (!) ('b' ! ' ') "cd"
==> ' ' : 'A' : 'b' : scanl (!)     ' '     "cd"
==> ' ' : 'A' : 'b' : ' ' : scanl (!) (' ' ! 'c') "d"
==> ' ' : 'A' : 'b' : ' ' : scanl (!)     'C'     "d"
==> ' ' : 'A' : 'b' : ' ' : 'C' : scanl (!) ('C' ! 'd') ""
==> ' ' : 'A' : 'b' : ' ' : 'C' : scanl (!)     'd'     ""
==> ' ' : 'A' : 'b' : ' ' : 'C' : 'd' : ""
==> " Ab Cd"

' '最初の文字を大文字にするには初期値が必要ですが、tail最終結果を得るためにそれを切り捨てます。


いいね!説明していただけますか?
ポイダ

説明を書きました。
リン

さらにいくつかのscanl例:onetwo
リン

このようなすばらしいアルゴリズムを使用してくれた@Maurisの称賛... :)
WallyWest

3

Pyth、20バイト

uXGHr@GH1fqd@+dzTUzz

これらの複数のスペースは本当にひどいものです。そうでなければ、本当に簡単な12バイトのソリューションがあったでしょう。

オンラインで試す:Pyth Compiler / Executor

説明

                      implicit: z = input string
         f       Uz   filter [0, 1, 2, ..., len(z)-1] for elements T, which satisfy:
          qd@+dzT        " " == (" " + z)[T]
                      (this finds all indices, which should be capitalized)
u                  z  reduce, start with G = z, for H in idices ^ update G by
 XGH                     replace the Hth char of G by
    r   1                upper-case of
     @GH                 G[H]
                      implicitly print result

編集:16文字は@Dennisアルゴリズムで可能です。


1
複数のスペースの事はそれ以外の場合は、のstring.Split(」「)または類似した何かの単純なケースだろう...それは多くの挑戦があるようにすることです...しかし、あなたは20文字でそれを行うにはうまくやりました
WallyWest

3

CJam、14バイト

最短ではありませんが...

qS/Sf.{\eu}s1>

同様のアイデアを使用した別の答え:

qS/Laf.{;eu}S*

.x パラメータの1つに項目が1つしかない場合、最初の項目のみが変更されます。


1
チェーンf.はかなり独創的です。別の14バイトのバリアント:qS/Sf.{\eu}S.-
デニス

3

Lua、64 62 61バイト

ルアはゴルフをするのに恐ろしい言語なので、私はこのことについて自分自身をかなり誇りに思っています。

print(string.gsub(" "..io.read(),"%s%l",string.upper):sub(2))

[ここで試してください] 1期限切れ、明日更新されます


1
PPCGへようこそ!確かに、コンマの後にこれらのスペースは必要ありませんか?
マーティンエンダー

うわー、私はこれにとても新しいので、スペースがカウントされることすら知りませんでした。62バイト!

2
また、私はそれが完全に正しいわけではないことに気づきました。あなたはすべての非文字の後に文字を大文字にしているので、abc_def与えるでしょうAbc_Def。ただし、スペースに続く文字のみが大文字に変換されます。良いニュースは、それを修正するとバイトが節約されるということです。;)
マーティン・エンダー

3

JAVA、204 211 226 バイト

CGの最初のエントリは、大丈夫だと思います。

class U{public static void main(String[]s){int i=0;char[]r=s[0].toCharArray();r[0]=Character.toUpperCase(r[0]);for(char c:r){if(c==' '&&i>0)r[i+1]=Character.toUpperCase(r[i+1]);i++;System.out.print(c);}}}

@TNTのおかげで7バイト節約


貧弱なJavaスキルを含む:public class U{public static void main(String[]s){int i=-1,j;char[]r=s[0].toCharArray();for(char c:r)if(++i==0||c==' '&&i>0)r[j=i+(i==0?0:1)]=Character.toUpperCase(r[j]);System.out.print(r);}}
マナトワーク

1
PPCGへようこそ!publicあなたはより多くの7を保存することができますので、修正は必要ありません。
TNT

3

PHP:76 74文字

foreach($l=str_split(fgets(STDIN))as$c){echo$l?ucfirst($c):$c;$l=$c==" ";}

サンプル実行:

bash-4.3$ php -r 'foreach($l=str_split(fgets(STDIN))as$c){echo$l?ucfirst($c):$c;$l=$c==" ";}' <<< 'eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye'
ECommerce Rocks. CrazyCamelCase Stuff. _those  Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye

代わりにucfirst($c)、を使用します$c^' '。(ヒント:bitwise-xorスペースを含む文字の場合、大文字から小文字に変換され、その反対も適用されます)
イスマエルミゲル

@IsmaelMiguel、小文字のみを処理するため、ソリューションで問題なく動作します。しかし、私のソリューションでは、すべての最初の文字が処理されます。そのため、(そうでなければ素晴らしい)xorトリックのために、私のコードには文字タイプのフィルタリングも必要になります。:(
マナトワーク

それは私の心を交差させませんでした。文字であるかどうかを確認するには、ビットごとのトリックが必要です。
イスマエルミゲル

1
できることの1つは$l=str_split(fgets(STDIN))、コードを2バイト減らすことです!
イスマエルミゲル

1
今、私は怒っています。男、その初期化にどれだけ主演し、見逃したのか。ありがとう、@ IsmaelMiguel。
マナトワーク

3

C、74バイト

a,b=1;main(){while((a=getchar())>0)b=isspace(putchar(b?toupper(a):a));}

実行時の文字セット(ASCII、EBCDIC、Baudotなど)については想定していません。EOFが負であると仮定します(Cはそれを保証すると思います)。

a,b=1;
main()
{
    while((a=getchar())>0)
        b=isspace(putchar(b?toupper(a):a));
}

aは入力文字です。最後の文字がスペースの場合、bはtrueです。唯一の非自明なビットは、putcharエラーがなければ印刷された文字を返すという事実を使用することです。


3

C#Linq-187

これは勝つには程遠いですが、私はLinqが大好きです。

namespace System{using Linq;class P{static void Main(string[]a){Console.Write(a[0].Substring(1).Aggregate(a[0][0].ToString().ToUpper(),(b,c)=>b[b.Length-1]==32?b+char.ToUpper(c):b+c));}}}


2

バッシュ、61

a="${@//: / }"
a=(${a//: / })
a="${a[@]^}"
echo "${a//:/ }"

コロンは、ここでプログラムを正常に表示するためのものです。実際には、これらはBELなどの印刷不可能な文字になります。

出力

$ ./cap1st.sh "eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye"
ECommerce Rocks. CrazyCamelCase Stuff. _those  Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye
$ 

バッシュ、12

悲しいことに、これは先頭/複数/末尾のスペースを保持しませんが、それ以外は動作します:

echo "${@^}"

出力

$ ./cap1st.sh eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye
ECommerce Rocks. CrazyCamelCase Stuff. _those Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_bye
$ 

5
しかし、それは挑戦の半分です!
Sp3000

1
@ Sp3000で修正(49文字のコストで)
デジタルトラウマ

2

ピップ、15 + 1 -s= 16

{IaUC:a@0a}Ma^s

説明:

                  a is first cmdline arg (implicit)
            a^s   Split a on spaces
{         }M      Map this function to each element:
 Ia                 If the word is not empty,
   UC:a@0             uppercase its first character
         a          Return the word
                  Output the resulting list (implicit) joined on spaces (-s flag)

このプログラムが使用するPipの興味深い機能の1つは、:割り当てメタ演算子です。ほとんどのCライクな言語には、計算と割り当ての演算子のセットがあります。たとえばx*=5、と同じことをしx=x*5ます。ただし、Pipでは、任意の演算子にタック:して、計算と割り当ての演算子に変換できます。これは単項演算子にも当てはまります。したがって、計算して、と同じように割り当てます。この場合、(Pipの可変文字列とともに)を使用して、単語の最初の文字を大文字にします。-:x-xxx:-xUC:

プログラムはコマンドラインから入力を受け取り、次のような呼び出しを必要とします。

python3 pip.py -se "{IaUC:a@0a}Ma^s" "test teSt TEST  _test"

2

C、125

最短のソリューションではありませんが、Cでゴルフをするのが大好きです。

char b[99];main(c){while(scanf("%[A-Za-z_-]",b)==1)islower(*b)&&(*b&=223),printf("%s",b);~(c=getchar())&&putchar(c)&&main();}

なし:

char b[99];
main(c)
{
  while(scanf("%[A-Za-z_-]", b) == 1) {
    if(islower(b[0])) {
      b[0] &= 0xDF;
    }
    printf("%s", b);
  }
  if((c = getchar()) != -1) {
      putchar(c);
      main();
  }
}

正規表現のような構文を使用してルールを拡張しているのかどうかはわかりませんがscanf、非常にうまく機能します。(まあ、技術的には完全な正規表現ではありません)

考慮すべき他のことは、このコードが99バイトより短い単語に対してのみ機能することです。しかし、このソリューションはほとんどの場合に機能すると思います。


ヒント:&= 223->-= 32
edc65


2

PHP、82

echo join(' ',array_map(function($s){return ucfirst($s);},explode(' ',$argv[1])));

使用法 :

$ php code.php "eCommerce rocks. crazyCamelCase stuff. _those  pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_bye"

2

C#、133 131

using C=System.Console;class P{static void Main(){var s=2>1;foreach(var c in C.ReadLine()){C.Write(s?char.ToUpper(c):c);s=c==32;}}}

必要&&c!=32ですか?私はC#にあまり流ではありませんが、スペースを大文字に変換するとスペースになると思います。
DLosc

おっと、ありがとう-それは他のいくつかの変更を加える前からだったと思う。必要ないというのは正しいことです。
-Blorgbeard

「using C = System.Console;」を試してください。代わりに、システムの使用
ユアン・

2

Mathematica、66バイト

Print@StringReplace[InputString[],WordBoundary~~a_:>ToUpperCase@a]

を使用しますがToCamelCase、間隔は保持されません。


2

R、139105バイト

for(i in 1:length(p<-strsplit(readline(),"")[[1]])){if(i<2||p[i-1]==" ")p[i]=toupper(p[i])};cat(p,sep="")

Ungolfed +説明:

# Assign p to be a vector of the input read from stdin, split into characters

for(i in 1:length(p <- strsplit(readline(), "")[[1]])) {

    # If we're at the first iteration or the previous character was a space

    if (i < 2 || p[i-1] == " ") {

        # Convert the current character to its uppercase equivalent

        p[i] <- toupper(p[i])
    }
}

# Join the vector elements into a single string and print it to stdout
cat(p, sep = "")

正規表現を使用したR、49 41 + 30 = 71バイト

私は本当に腹を立てています。実際には、ペナルティのある正規表現を使用すると、より良いスコアが得られます。

gsub("(^.| +.)","\\U\\1",readline(),pe=T)

これは、文字列の先頭または任意の数のスペースに続く任意の1文字と一致し、キャプチャの大文字バージョンに置き換えます。適用\\Uは合法であり、非文字には効果がないことに注意してください。pe=Tperl = TRUE、関数パラメーターのRの部分一致との同義語を利用するためと解釈されますTRUE。何らかの理由で、RはデフォルトでPerlスタイルの正規表現を使用しません。

正規表現アプローチで8バイトの節約を支援してくれたMickyTに感謝します!


正規表現では、一致する文字列はになります(^.| +.)。何でも大文字で構いません。
MickyT

@MickyT:良いアイデア、ありがとう!提案を使用するように編集されました。
アレックスA.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.