이처럼 인쇄


17

STDIN에 입력을 취하고있는 (액센트 문자를 포함 함) 소문자가 모두 만드는 프로그램 작성 2k-1에서 번째 워드 대문자 (도 액센트 문자를 포함한) 모든 대문자 2k번째 워드 소문자 ( k양의 정수이다). 프로그램은 어떤 단어의 다른 문자에도 영향을 미치지 않아야합니다. 예를 들어, 문자열이 Ook! O0k!이면 출력은이어야합니다 OOK! o0k!.

공백이 아닌 문자 다음에 0이 아닌 양의 공백이 있으면 새 단어가 형성됩니다. 입력 시작 부분의 공백은 무시해야합니다. 단어에 변경된 문자가 포함되어 있지 않은 경우 프로그램은 여전히 ​​단어를 단어로 간주하고 계속해야합니다.

샘플 입력 (다른 입력은 빈 줄 바꿈으로 구분됨)

Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

샘플 출력

NINETEEN eighty-four (1984)

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!

     2BE or NOT 2be, THAT is THE ~~~question~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

이것은 코드 골프입니다. 표준 CG 규칙이 적용됩니다. 바이트 단위의 최단 프로그램이 이깁니다.


공백 문자와 문자가 아닌 문자에 관한 모든 허점을 다룰 것이라고 확신하지만 누락 된 부분이 있으면 알려주십시오.


다음 코드 스 니펫을 생성 한 @Optimizer 에게 감사드립니다 . 사용하려면 "코드 스 니펫 표시"를 클릭하고 맨 아래로 스크롤하여 "► 코드 스 니펫 실행"을 클릭하십시오.


5
악센트 문자는 어떻습니까? 우리는 그것들을 무시해야합니까? 기능이 허용됩니까?
Downgoat

나는 질문을 쓸 때 악센트 문자를 염두에 두지 않았지만 그것들을 셀 수 있다고 생각합니다. 기능이 허용됩니다.
Arcturus

어떤 공백 문자를 고려해야합니까? 공백이 아닌 문자를 인쇄 할 수 있다고 가정 할 수 있습니까?
Dennis

모든 공백 문자, 예
Arcturus

답변:


4

Vim 스크립트, 22 21 바이트

nm Q vEUWvEuWQ|norm Q

설명:

첫 번째 명령은 다음에 매핑 Q됩니다.

vEU단어 대문자
W가 다음 단어 로 이동
vEu단어 소문자
W가 다음 단어로 이동
Q반복 반복 매핑

|norm Q매핑을 실행

프로그램의 사용법

이것은 stdin에서 Vim 을 읽는 방법입니다 .

$ vim - -c 'nm Q vEUWvEuWQ|norm Q'
Vim: Reading from stdin
This is the first line!
This is the second line!
This is the third and last line I type to check if this works!
^D

이 열립니다 빔을 이 표시 :

THIS is THE first LINE.
this IS the SECOND line.
THIS is THE third AND last LINE i TYPE to CHECK if THIS works!
~
~
~

6

GNU sed, 28

-rzGNU sed 에 전달 된 점수는 +2입니다 .

s/(\S+\s*)(\S*)/\U\1\L\2/g

테스트 출력

$ for t in 'Nineteen Eighty-Four (1984)' \
> 'Programming Puzzles & Code Golf   - 
> Hooray for Code Golf Stack Exchange!' \
> '     2be or not 2be, that is the ~~~QuEsTiOn~~~' \
> '++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.'; do
> echo "$t" | sed -zrf PRINTlikeTHIS.sed
> done
NINETEEN eighty-four (1984)
PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange!
     2BE or NOT 2be, THAT is THE ~~~question~~~
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ 

5

펄, 26 바이트

25 바이트 코드 + 1 바이트 명령 행

s/\S+/++$i%2?uc$&:lc$&/eg

ThisSuitIsBlack 덕분에 몇 가지 버그를 수정 해 주셔서 감사합니다!

용법:

perl -p entry.pl

3

피 이스, 23

jdmjbmrk=xZ!!kcdbcjb.zd

온라인으로 시도 하거나 테스트 스위트를 실행하십시오

pyth lowerupper기능 중 하나 r...0또는r...1 입니다. 이것은 아마도 OP 설명이 변경되기를 기다리는 동안 유니 코드 문자에 영향을 줄 것입니다.

나는 골프를 타야 할 것 같은 느낌이 든다. 특히는의 XOR이되는 스위치 변경 upper/ lower표기한다.


질문을 올바르게 해석하면 input A\nB이 인쇄되어야합니다 A\nb.
Dennis

그것은 질문에 대한 올바른 해석이 아닙니다. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.의 출력은 A\nB입니다 A\NB. 그러나 CJAM 답변이 올바르게 된 것 같습니다.
Arcturus

@ 데니스 감사합니다, 지금 수정해야합니다.
FryAmTheEggman 16:04의

2

펄, 87 바이트

정규 표현식과 map잠시 동안 나사를 조이면 우아한 솔루션을 얻을 수 없으므로 결과는 다음과 같습니다.

@a=split(" ",lc(<>));while($i<=$#a/2){@a[$i*2]=uc(@a[$i*2]);$i++;}print(join(" ", @a));

1
좋은 해결책. 몇 바이트를 절약하기 위해 <STDIN>을 <>로 바꿀 수 있습니까? 또한 $ i = 0을 건너 뛸 수 있습니까?
steve

@ 스티브 감사; 그리고 예, 사소한 수정 (다른 입력으로 테스트했으며 약간의 오류가 있음)과 함께 이제 포함되었습니다. 아이디어 주셔서 감사합니다! P : 나는 매우, 명시 적으로 코딩 장황 사용 해요
Codefun64

1
PPCG에 오신 것을 환영합니다! 예를 들어 Perl에서 선택 사항이므로 더 많은 바이트를 절약하기 위해 대부분의 괄호를 건너 뛸 수 있습니다. lc(<>)를 사용할 수 있으며 lc<>명령문 수정자를 while사용하면 예를 들어 괄호를 건너 뛸 수 있습니다. print$i++while$i<10while($i<10){print$i++}. 유용한 페이지가 있어 Perl에서 골프를 치기위한 유용한 정보
Dom Hastings

2

루비, 56 바이트

$><<gets.gsub(/\S+/){($.+=1)%2>0?$&.downcase: $&.upcase}

2

자바 스크립트 ES6, 74 71 바이트

.toUpperCase()그리고 .toLowerCase()바이트 수를 절대적으로 도축하십시오 (32 바이트 0을 추가합니다). 대부분의 해결 방법은 더 많은 바이트로 끝납니다.

s=>s.replace(/(\S+\s*)(\S*)/g,(_,a,b)=>a.toUpperCase()+b.toLowerCase())

1

당연, 108 (125) 120

System.in.eachLine{def b;it.split(" ").any{if(!it.empty)b=!b;print "${b?it.toUpperCase():it.toLowerCase()} "};println()}

내가 기대했던 것만 큼 깨끗하지는 않았지만, Groovy 답변의 주제 인 것 같습니다.

  • 선행 공백으로 동작을 수정하는 +17
  • 후행 줄 바꿈을 제거하고 .isEmpty ()에서 .empty로 전환하는 경우 -5

 

$ cat tests.txt 
Nineteen Eighty-Four (1984)

Programming Puzzles & Code Golf   - 
Hooray for Code Golf Stack Exchange!

     2be or not 2be, that is the ~~~QuEsTiOn~~~

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
$ groovy PRINTlikeTHIS.groovy < tests.txt 
NINETEEN eighty-four (1984) 

PROGRAMMING puzzles & code GOLF   - 
HOORAY for CODE golf STACK exchange! 

     2BE or NOT 2be, THAT is THE ~~~question~~~ 

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. 

1

루아, 96 ​​바이트

i=0 print(io.read'*l':gsub('%S+',function(x)i=i+1 return i%2==1 and x:upper() or x:lower()end))

출력 후 숫자를 인쇄합니다.
Trebuchette

1

파이썬 3, 103 95 바이트

print(' '.join(b.lower()if a%2 else b.upper()for a,b in enumerate(input().strip().split(' '))))

[b.upper(),b.lower()][a%2]4 바이트를 절약하기 위해 조건부로 바꿀 수 있습니다 (모바일에서 올바르게 계산되었다고 가정).
PurkkaKoodari

1

STATA, 252 바이트

insheet using a.b
g b=word(v,1)
gl c=0
forv x=1/`=_N'{
loc d=1
while b[`x']!=""{
if !$c replace v=subinword(v,b,upper(b),1) if `x'==_n
if $c replace v=subinword(v,b,lower(b),1) if `x'==_n
loc ++d
replace b=word(v,`d') if `x'==_n
gl c=1-$c
}
di v[`x']
}

입력을 ab라는 csv 파일 (한 열)로 예상합니다.

설명:

데이터를 읽습니다 (기본 변수 이름은 v1이며 v로 단축 가능). 새 변수 b를 각 줄에 대해 v의 첫 번째 단어 (공백으로 구분 된 토큰)와 동일하게 만드십시오. 각 단어마다 다음 단어가 비어 있지 않은 동안 (해당 단어가 더 이상없는 경우에만 발생), 단어 수에 따라 v의 단어를 현재 단어에서 해당 단어의 대문자 또는 소문자로 바꿉니다 (mod 2 ) 단어가 이미 발견되었습니다. 그런 다음 다음 단어를 얻고 반복하십시오. 완료되면 전체 줄을 인쇄하십시오.


1

델파이, 290 바이트

program P;uses SysUtils;var s:string;i:word;w:byte;f:boolean;begin repeat readln(s);w:=0;f:=false; for I:=1 to length(s) do begin if s[i]>' ' then begin if w=0 then f:=not f;w:=1;if f then s[i]:=uppercase(s[i])[1] else s[i]:=lowercase(s[i])[1] end else w:=0 end;writeln(s)until false;end.

골프에 좋은 언어는 아닙니다 ...


프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다!
Dennis

1

루아, 88 바이트

a=io.read():gsub("%g+",function(s)m=not m return m and s:upper()or s:lower()end)print(a)

1

CJam, 28 바이트

q{C' >Sc'!<*X^:XCelCeu?:S}fC

현재 처음 33 개의 ASCII / 유니 코드 문자 (및 그 문자 만) 공백을 고려하고 있습니다. 이것이 유효한지 아닌지 명확히하기 위해 기다리고 있습니다.

CJam 통역사 에서 온라인으로 사용해보십시오 .



0

C 번호, 104 (100) 99 바이트

static void Main(){string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));}

79 바이트입니다

string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.