IN như thế này


17

Viết chương trình nhận đầu vào STDIN và tạo tất cả các chữ cái viết thường (bao gồm cả chữ cái có dấu) trong 2k-1chữ hoa và tất cả các chữ cái viết hoa (bao gồm cả chữ cái có dấu) trong 2kchữ thườngk là số nguyên dương). Chương trình không được ảnh hưởng đến bất kỳ nhân vật nào khác trong bất kỳ từ nào. Ví dụ, nếu chuỗi là Ook! O0k!, thì đầu ra phải là OOK! o0k!.

Một từ mới được hình thành khi có một lượng khoảng trắng khác sau một ký tự không phải khoảng trắng. Khoảng trắng ở đầu một đầu vào nên được bỏ qua. Nếu một từ không chứa bất kỳ ký tự thay đổi nào, chương trình vẫn nên coi đó là một từ và tiếp tục.

Đầu vào mẫu (Các đầu vào khác nhau được phân tách bằng một dòng mới trống)

Nineteen Eighty-Four (1984)

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

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

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

Đầu ra mẫu

NINETEEN eighty-four (1984)

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

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

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

Đây là mã golf, fellas. Quy tắc CG tiêu chuẩn được áp dụng. Chương trình ngắn nhất trong byte thắng.


Tôi khá chắc chắn rằng tôi đã bao gồm tất cả các sơ hở liên quan đến khoảng trắng và ký tự không phải chữ cái, nhưng nếu tôi bỏ lỡ bất kỳ, xin vui lòng cho tôi biết.


Cảm ơn @Optimizer đã tạo đoạn mã sau. Để sử dụng, nhấp vào "Hiển thị đoạn mã", cuộn xuống dưới cùng và nhấp vào "► Chạy đoạn mã".


5
Những nhân vật có dấu thì sao? Chúng ta có phải bỏ qua những? Các chức năng có được phép không?
Hạ cấp

Tôi đã không có những ký tự trong tâm trí khi tôi viết câu hỏi, nhưng tôi cho rằng họ sẽ tính. Chức năng được cho phép.
Arcturus

Những ký tự khoảng trắng nào chúng ta phải tính đến? Chúng ta có thể cho rằng các ký tự không phải khoảng trắng sẽ có thể in được không?
Dennis

Tất cả các ký tự khoảng trắng, và có.
Arcturus

Câu trả lời:


4

Tập lệnh Vim, 22 21 byte

nm Q vEUWvEuWQ|norm Q

Giải trình:

Lệnh đầu tiên ánh xạ Qtới:

vEUlàm cho chữ hoa
Wđi đến từ tiếp theo
vEulàm cho chữ thường
Wđi đến từ tiếp theo
Q lặp lại ánh xạ đệ quy

|norm Q thực hiện ánh xạ

Sử dụng chương trình

Đây là cách bạn khiến Vim đọc từ stdin:

$ 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

Điều này sẽ mở ra Vim hiển thị này:

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

Điểm số bao gồm +2 cho -rztruyền qua GNU sed.

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

Đầu ra thử nghiệm

$ 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

Perl, 26 byte

Mã 25 byte + dòng lệnh 1 byte

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

Cảm ơn ThisSuitIsBlackNot đã sửa một vài lỗi!

Sử dụng:

perl -p entry.pl

3

Bình thường, 23

jdmjbmrk=xZ!!kcdbcjb.zd

Dùng thử trực tuyến hoặc chạy bộ thử nghiệm

Thay thế giữa pyth lowerupperchức năng, r...0hoặc r...1. Điều này có thể sẽ ảnh hưởng đến các ký tự unicode, chờ OP làm rõ để thay đổi.

Tôi cảm thấy như một cái gì đó phải được chơi gôn. Đặc biệt là XOR để thay đổi công tắc trên upper/ lowernên được sử dụng.


Nếu tôi giải thích chính xác câu hỏi, đầu vào A\nBsẽ in A\nb.
Dennis

Đó không phải là một cách giải thích chính xác của câu hỏi. A new word is formed when there is a nonzero amount of whitespace after a non-whitespace character.Đầu ra cho A\nBA\NB. Nhưng có vẻ như câu trả lời CJAM của bạn đã đúng.
Arcturus

@Dennis cảm ơn, nên sửa ngay.
FryAmTheEggman

2

Perl, 87 byte

Sau khi vặn vẹo với cả hai biểu thức thông thường và maptrong một thời gian, tôi không thể đưa ra một giải pháp tao nhã, vì vậy đây là kết quả:

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

1
Giải pháp tốt đẹp. <STDIN> có thể được thay thế bằng <> để lưu một vài byte không? Ngoài ra, $ i = 0 có thể bị bỏ qua không?
steve

@steve Cảm ơn; và vâng, cùng với một sửa chữa nhỏ (đã thử nghiệm nó với một đầu vào khác và nó có một lỗi nhỏ), hiện đã được đưa vào. Cảm ơn các ý tưởng! Tôi rất quen với việc tiết lộ, mã hóa rõ ràng: P
Codefun64

1
@ Codefun64 Chào mừng bạn đến với PPCG! Bạn có thể bỏ qua hầu hết các dấu ngoặc đơn của mình để lưu nhiều byte hơn vì chúng là tùy chọn trong Perl, ví dụ: lc(<>), có thể lc<>và sử dụng một công cụ sửa đổi câu lệnh cho bạn whilecho phép bạn bỏ qua dấu ngoặc đơn, vd. print$i++while$i<10vs while($i<10){print$i++}. Có một trang hữu ích giúp tôi rất nhiều Mẹo chơi gôn ở Perl
Dom Hastings

2

Ruby, 56 byte

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

2

JavaScript ES6, 74 71 byte

.toUpperCase().toLowerCase()giết chết hoàn toàn số byte (thêm 32 byte 0.o). Hầu hết các công việc xung quanh kết thúc với nhiều byte hơn mặc dù

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

1

Groovy, 108 125 120

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

Không sạch sẽ như tôi đã hy vọng, nó dường như là một chủ đề với câu trả lời Groovy của tôi.

  • +17 để sửa hành vi với khoảng trắng hàng đầu
  • -5 để xóa dòng mới và chuyển từ .isEmpty () sang .empty

 

$ 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

Lua, 96 byte

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

Điều này in ra một số sau khi đầu ra.
Trebuchette

1

Python 3, 103 95 byte

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

Bạn có thể thay thế điều kiện bằng [b.upper(),b.lower()][a%2]để lưu 4 byte (giả sử tôi đã đếm chính xác trên thiết bị di động).
PurkkaKoodari

1

STATA, 252 byte

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']
}

Yêu cầu đầu vào dưới dạng tệp csv (một cột) được gọi là ab

Giải trình:

Đọc dữ liệu trong (tên biến mặc định là v1, rút ​​ngắn thành v). Tạo một biến mới b bằng từ đầu tiên (mã thông báo được phân tách bằng dấu cách) của v cho mỗi dòng. Đối với mỗi dòng, trong khi từ tiếp theo không trống (chỉ xảy ra nếu không có thêm ký tự trên dòng đó), hãy thay thế từ in v bằng phiên bản chữ hoa hoặc chữ thường của từ đó trong dòng hiện tại, tùy thuộc vào số lượng (mod 2 ) từ đã được tìm thấy. Sau đó nhận được từ tiếp theo và lặp lại. In ra toàn bộ dòng khi hoàn thành với nó.


1

Delphi, 290 byte

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.

Không thực sự là một ngôn ngữ tốt để chơi golf với ...


Chào mừng bạn đến với Câu đố lập trình & Code Golf!
Dennis

1

Lua, 88 byte

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

1

CJam, 28 byte

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

Tôi hiện đang xem xét khoảng trắng 33 ký tự ASCII / Unicode đầu tiên (và chỉ những ký tự đó). Tôi đang chờ làm rõ để biết liệu điều này có hợp lệ hay không.

Hãy thử trực tuyến trong trình thông dịch CJam .



0

C #, 104 100 99 byte

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

Đó là 79 byte với

string.Join(" ","".Split(' ').Select((o,i)=>i++%2==0?o.ToUpper():o.ToLower()));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.