LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする
Posted feedbacks - C
VCEE2008でコンパイルできました。
LL Future
LL Day And Night
Hello, I Am A Cat
LL Future
LL Day And Night
Hello, I Am A Cat
1 2 3 4 5 6 7 | f(char *s){*s=toupper(*s);while(*++s)if(*(s-1)==' ')*s=toupper(*s);}
main(){
char *s1="LL future",*s2="LL day and night",*s3="hello, i am a cat";
f(s1);f(s2);f(s3);
printf("%s\n%s\n%s\n",s1,s2,s3);
}
|
参考ページに影響を受けてみた。入出力込みで84byte
1 | a;main(){char*s=gets(&a);for(;*s;s++)if(&a==s||*(s-1)==' ')*s=toupper(*s);puts(&a);}
|
ちまちま^^; 81byte
1 | a;main(){char*s=gets(&a);for(;*s;s++)putchar(&a==s||*(s-1)==' '?toupper(*s):*s);}
|
Cygwin gcc3.4.4で確認
1 | main(a,b){for(;(b=getchar())>0;)a=putchar(b>96&a<33?b-32:b);}
|
だんだん凶悪に…55byte
1 | b;main(a){b=getchar();main(putchar(b>96&a<33?b-32:b));}
|
スタックオーバーフローで止まるのはダメ?
(うちのパソコンだと5万回くらいで終了。ただしゴミが出まくる)
putcharとgetcharのつづりをこれ以上短くできないのが痛いです。
やけくそで外道版も書いてみました。
(うちのパソコンだと5万回くらいで終了。ただしゴミが出まくる)
putcharとgetcharのつづりをこれ以上短くできないのが痛いです。
やけくそで外道版も書いてみました。
1 2 3 4 5 | ●止まらない問題修正版(56byte)
b;main(a){b=getchar();~b&&main(putchar(b-a>64?b-32:b));}
●外道版(45byte)
main(){system("perl -pe\"s/\\b./\\U$&/g\"");}
|
外道版はUnix系なら後2byte短くなるんじゃないかと思ってみたり
1 2 | /*●外道版(43byte)*/
main(){system("perl -pe's/\\b./\\U$&/g'");}
|
54B
1 | n;main(o){n=getchar();~n&&main(putchar(o<33?n&95:n));}
|
記号入りでも文字化けしないようにしてみた。135bytes.
1 2 | #include<stdio.h>
main(int c,char**v){char*s=*++v;do*s-=((!(s-*v&&*(s-1)-32))*((*s-97|122-*s)>0))<<5;while(*++s);puts(*v);return 0;}
|




takano32
#6901()
[
Ruby
]
Rating2/10=0.20
文字列に含まれる単語について、それぞれの単語の最初の文字を大文字にしてください。
たとえば、"LL future" と与えられたときは "LL Future" と出力する。"LL day and night" と与えられたときは "LL Day And Night" と出力する。
与えられる文字列はリテラルで表記する、標準入力で与えられる、引数で与えられるなどは自由とします。
余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてください。
※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。
see: LL Golf
Rating2/10=0.20-0+
[ reply ]