각 입력 단어의 첫 글자를 대문자로


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두 단어이지만 pigeon-toed한 단어로 간주됩니다. if_you_love_her_then_you_should_put_a_ring_on_it한 단어로 간주됩니다. 단어가 알파벳이 아닌 문자로 시작하면 단어는 그대로 유지되므로 _this렌더링 후에는로 유지됩니다 _this. (이 테스트 사례를 지적한 Martin Buttner에게 Kudos).

    • 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
줄 끝의 공백은 어떻습니까? 우리는 그것들을 보존해야합니까? 필요에 따라 추가 할 수 있습니까?
Dennis

2
데니스, 입력에서 공백을 유지하십시오 ...
WallyWest

3
! = TitleCase 댐! C #은 다시졌다!
Ewan

1
@Tim Pigeon-toed 이전의 이중 공간이 정확합니다 . 그는 간격을 유지한다고 말했다.
mbomb007

2
단어를 구분하는 것은 무엇입니까? 공백 (탭, 줄 바꿈 등) 또는 공백?
Steven Rumbalski

답변:


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 :
Martin Ender

나는 codegolf 언어로 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 브라우저에 대한 문제,하지만, 난 여전히 때문에 문제 해결의 유일한 방법을 upvoting거야.)
IQAndreas

@Oriol, "오 이거 영리 해요!" 과연! 죄송합니다 IQAndreas, 여기에 의견을 빌려야합니다 ... 이것은 문제를 해결하기위한 독창적 인 접근 방법입니다 ...이 접근 방법을 사용해야합니다 ...
WallyWest

10

자바 스크립트 ( 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

이렇게하면 아스키 문자가 아닌 문자도 대문자가되어 å가 Å가됩니다!
leo

9

펄, 13 바이트

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

9 바이트 + 4 바이트 040p( 특별 호출 규칙을 올바르게 해석했다고 가정 ).

-040입력 레코드 구분 기호 $/를 단일 공백으로 설정하므로 공백이 유지됩니다. \u이스케이프 시퀀스는 제목의 경우에 다음 문자로 변환합니다.


커맨드 라인 사용에 대한 훌륭한 작품, 명예로운 언급!
WallyWest

7

CJam, 17 15 바이트

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

여기에서 테스트하십시오.

사양을 매우 간단하게 구현합니다. {}&연속 공백에 대한 오류를 피하기 위해 새로운 기능 을 사용 하십시오.

Dennis가 2 바이트를 절약했습니다.


좋은 물건! CJam은 주로 골프 언어일까요? 아니면 실제 상용 응용 프로그램이 있습니까?
WallyWest

6
@WallyWest 아니 그냥 골프 언어입니다. 확실히이없는 상용 애플리케이션을하지만, 내장 기능을 많이 가지고 있기 때문에 나는 개인적으로 (빠른 던져 - 멀리 스크립트 가끔를 사용하고, 당신이 무슨 일을하는지 알고 있다면, 적은 수의 문자를 입력하면 빠른 타이핑보다 더 많은 문자;)).
마틴 엔더

각 단어에 공백을 추가하여 몇 바이트를 절약 할 수 있습니다. 내 질문에 대한 OP의 대답에 따라 14 또는 12 바이트가 될 수 있습니다.
Dennis

@Dennis 아 맞다, 나는 그것으로 놀고 있었지만 첫 번째 캐릭터를 뽑기 전에 단순히 추가하는 것을 고려하지 않았습니다. 내일 바꿔 줄게 고마워!
Martin Ender

@Dennis 감사합니다. 변경했지만 14 바이트 버전이 무엇인지 잘 모르겠습니다. 두 번째 생략에 대해 이야기 +하는 경우 입력에 후행 공백이 있으면 중단됩니다.
Martin Ender

7

C, 64 63 바이트

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

수정 : Clang과 같은 일부 컴파일러는 argv 대신 int 매개 변수를 좋아하지 않으므로 전역 변수로 옮겼습니다. 바이트 수는 동일하게 유지됩니다. 눈치 채기 위해 으스스한 ossifrage 덕분입니다. Dennis 덕분에 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 연산자가 0으로 만들고 루프가 중지됩니다. a는 전역 변수로 선언되므로 0으로 초기화됩니다 (false). 이렇게하면 첫 단어가 대문자로 표시됩니다.


1
while(~(c=getchar())— 나는 그것을 좋아한다. Clang은 실제로 이것을 컴파일하지는 않지만 같은 문자 수를 얻을 수 있습니다.c;main(a){...}
squeamish ossifrage

1
당신의 선언 교환하는 경우 ac와 삼항 연산자의 순서를, 당신은 대체 할 수 ==와 함께 -한 바이트를 저장합니다.
Dennis

물론 그렇습니다.
Andrea Biondo

좋은! +1을 사용할 때 프로그램이 동일하게 작동 while(!(c = getchar()))합니까?
Spikatrix 2016 년

1
@ Cool Guy : 아니요, 비트 ~와 논리 !는 동일하지 않습니다. C에서는 0이 아닌 것은 사실로 간주되므로 조건이 while((c = getchar()) == 0)작동하지 않는 것과 같습니다 . 비트 NOT 연산자는 비트 단위로 ~값을 무시합니다. 루프를 끊으려면 ~c0이되어야합니다. 즉, 모든 비트가 1이어야하므로 무효화되면 모두 0이됩니다. 해당 값 (32 비트 int)은 0xFFFFFFFF입니다 -1( 서명 된 경우 (EOF) 임).
Andrea Biondo

7

파이썬 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 오 와우, 당신은 단지 키워드 인수로 빈 인쇄물을 가질 수있을 줄 몰랐습니다. 감사!
Sp3000

7

펄 버전 <5.18, 30 27 26 25

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

24문자 +1에 대한 -n.

\u문자열의 다음 문자를 대문자로 만듭니다. 1 바이트를 절약하기 위해 이것을 지적하지 않았습니다. 함수를 사용하기 전에 ucfirst.

로부터 의 perldocs ,

또 다른 특수한 경우로, split은 PATTERN이 생략되거나 단일 공백 ​​문자 (예 : ''또는 "\ x20"과 같은 리터럴 문자열 (예 : //)) 인 경우 awk 명령 줄 도구의 기본 동작을 에뮬레이트합니다. 이 경우 EXPR의 선행 공백은 분할이 발생하기 전에 제거되고 PATTERN은 / \ s + / 인 것처럼 처리됩니다. 특히, 이것은 단일 공백 ​​문자가 아닌 연속 공백이 분리 자로 사용됨을 의미합니다. 그러나 문자열 ""대신 패턴 //을 지정하면 이러한 특수한 처리를 피할 수 있으므로 단일 공백 ​​문자 만 구분 기호로 사용할 수 있습니다. 이전의 Perls에서는이 특별한 경우가 Perl 5.18에서 분리 할 패턴 인수로 일반 ""사용으로 제한되었습니다.

$"공백으로 평가 되므로 공백이 보존됩니다. 우리는 모두 세트에 원하기 때문에 $,공백 문자, 입력 분할에 공백 문자, @nutki 우리가 분할의 입력으로 모두 할 수있는 지적했다. 그것은 우리가 전에 가지고 있던 것에서 3 바이트를 절약합니다. 이것은 처음 설정 $,한 다음 $"스플릿에 입력 되었습니다.

사용 a ,대신 맵은 {}알렉산더 - 브렛 지적 @으로서, 추가 바이트를 저장합니다.

로 실행 :

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
...map"\u$_",split...
alexander-brett로

@ 알렉산더 브렛 감사합니다! 나는 대답을 업데이트했다.
hmatt1

5

> <> (물고기) , 39 바이트

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

방법:

  • 한 문자를 가져 와서 범위 내에 있으면 대문자 a-z로 인쇄하십시오. (이 부분의 왼쪽에서 오른쪽 코드는입니다 i::'backquote')$'{'(*' '*+)
  • 경우 마지막 촬영 문자가있는 EOF의 문자는 다음 종료 다른 인쇄 할
  • 경우 마지막 촬영 문자가 공백 문자는 다음 포인트 1로 이동 다른 새로운 편지를 가지고 점 2로 이동합니다.

5

자바, 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의 첫 번째 대답입니다.
Atul Kumbhar

탑승을 환영합니다! 공백을 제거하고 변수 이름에 단일 문자를 사용해보십시오. JAVA 골프를위한 다른 도 있습니다.
nderscore

힌트에 대한 @nderscore에게 감사드립니다. 팁을 사용하여 답변을 편집했습니다.
Atul Kumbhar

더 좋아 보인다! 또한 게시물에 바이트 수를 추가했습니다.
nderscore

1
@TuukkaX 그는이없는 public의 앞에 class.. 그리고 당신이 의미하는 경우 그가를 제거 할 수 public의 앞에 static void main(...그는 또한 변화하지 않는 한, 당신은, 잘못 classinterface자바를 사용 8+.
Kevin Cruijssen 2016 년

5

자바 스크립트 (정규 솔루션)-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

파이썬 2, 73 바이트

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

이 프로그램은 공백이 앞에 오는 경우 문자를 대문자로 표시합니다 (문자열의 첫 문자에 kludge가 있음). 그것은에 의존 .upper()제대로 활용하기 위해 문자열 방법.


2
Python 3으로 포팅하여 2 바이트를 절약 할 수 있습니다. (-4 raw_input=> input, +2 print=> print())
Steven Rumbalski

고마워 스티븐 파이썬 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])

감사합니다 Harry Mustoe-Playfair :)


개인적으로 나는 fgets(STDIN)입력을 읽는 것만 고려합니다 . 그러나 우리는 $_GET내가 아는 한 합의가 없습니다 .
manatwork

그래, 작동 : D
Octfx

경고를 종료하기위한 트릭이 필요하지 않습니다. 경고입니다! 아무도 신경 쓰지 않습니다.
Ismael Miguel

글쎄, 그건 생각하지 않았다. 내가 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)와 초기 값을 취한 a다음 [b]s 목록을 반복하여 s 목록 을 만듭니다 [a].

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

이것은 반복 얻어 이전 결과 는 AS 왼쪽 인자 에 전달 함수, 및 상기 입력리스트에서의 값 은 AS 오른쪽 인자 는 다음 중 하나를 만들기 위해.

(!) :: 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최종 결과를 얻으려면 잘라 내야 합니다.


좋은! 설명해 주시겠습니까?
poida

나는 설명을 썼다.
Lynn

좀 더 scanl예 : 하나 , .
Lynn

이와 같은 훌륭한 알고리즘을 사용하는 @Mauris kudos ... :)
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

편집 : @Dennis 알고리즘으로 16자를 사용할 수 있습니다.


1
여러 가지 공간 문제는 훨씬 더 어려워집니다 ... 그렇지 않으면 string.split ( "") 또는 이와 유사한 간단한 경우가 있습니다. 그러나 20 자로 된 작업을 잘 수행했습니다
WallyWest

3

CJam, 14 바이트

가장 짧지는 않지만 ...

qS/Sf.{\eu}s1>

비슷한 아이디어를 사용하는 또 다른 대답 :

qS/Laf.{;eu}S*

.x 매개 변수 중 하나에 하나의 항목 만있는 경우 첫 번째 항목 만 변경합니다.


1
체인 f및 것은 .매우 독창적이다. 다른 14 바이트 변형 :qS/Sf.{\eu}S.-
Dennis

3

루아, 64 62 61 바이트

루아 (Lua)는 골프를하기에 끔찍한 언어이기 때문에 나는 이것에 대해 자부심을 느낍니다.

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

[여기 시도] 1 기한이 지남에 따라 업데이트됩니다.


1
PPCG에 오신 것을 환영합니다! 쉼표 뒤에 공백이 필요하지 않습니까?
Martin Ender

와우, 나는 이것에 익숙하지 않아서 계산 된 공간조차 알지 못했습니다. 62 바이트!

2
나는 또한 그것이 완전히 정확하지 않다는 것을 알아 차렸다 : 당신은 모든 비 편지 후에 대문자를 쓰고 있으므로, abc_def줄 것이다 Abc_Def. 그러나 공백 뒤의 문자 대문자로 바뀌어야합니다. 좋은 소식은 고정하면 바이트가 절약된다는 것입니다. ;)
Martin Ender

3

자바, 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);}}
manatwork

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공백 이 있는 문자는 대문자에서 소문자로 변환되며 그 반대도 적용됩니다)
Ismael Miguel

@IsmaelMiguel, 소문자 만 처리하면 솔루션에서 잘 작동합니다. 그러나 내 솔루션에서 모든 첫 문자가 처리됩니다. 따라서 (그렇지 않은 위대한) xor 트릭의 경우 코드에 문자 유형 필터링이 필요합니다. :(
manatwork 15.59에

그것은 내 마음을 넘어 가지 않았다. 문자인지 아닌지를 확인하는 비트 트릭이 있어야합니다.
Ismael Miguel

1
당신이 할 수있는 한 가지는 $l=str_split(fgets(STDIN))코드를 2 바이트 줄입니다!
Ismael Miguel

1
이제 화났어 이 초기화에 얼마나 오래 출연하고 놓쳤습니까? 감사합니다, @IsmaelMiguel.
manatwork

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 자 비용으로)
Digital Trauma

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의 흥미로운 기능 중 하나는 :할당 메타 연산자입니다. 대부분의 C와 같은 언어에는 계산 및 할당 연산자 세트가 있습니다. 예를 x*=5들어와 같은 기능을 수행 x=x*5합니다. 핍 그러나, 당신은 압정 수 :어떤 연산자와 컴퓨팅 및-할당 연산자 변환합니다. 단항 연산자에도 적용됩니다. 따라서 -:x계산 -xx동일 하게 다시 할당합니다 x:-x. 이 경우, UC:단어의 첫 문자를 대문자로하기 위해 (Pip의 변경 가능한 문자열과 함께)가 사용됩니다.

프로그램은 명령 행에서 입력을 가져 오며 다음과 같은 호출이 필요합니다.

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 8:11에


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

"C = System.Console을 사용하십시오"; 시스템을 사용하는 대신
Ewan

2

매스 매 티카, 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="")

언 골프 + 설명 :

# 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)

이것은 문자열의 시작 부분이나 여러 공백 뒤에있는 단일 문자와 일치하며 대문자의 캡처 버전으로 바꿉니다. 신청 \\U은 합법적이며 비 레터에 영향을 미치지 않습니다. pe=Tperl = TRUE함수 매개 변수의 R 부분 일치와의 동의어를 활용하기 때문에 해석됩니다 TRUE. 어떤 이유로 든 R은 기본적으로 Perl 스타일의 정규 표현식을 사용하지 않습니다.

정규식 접근 방식으로 8 바이트를 절약하는 데 도움을 준 MickyT에게 감사드립니다!


정규식을 사용하면 일치하는 문자열이 될 수 있습니다 (^.| +.). 대소 문자를 입력해도됩니다.
MickyT

@MickyT : 좋은 생각이야, 고마워! 제안을 사용하도록 수정되었습니다.
Alex A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.