พิมพ์แบบนี้


17

เขียนโปรแกรมที่จะเข้าไป STDIN และทำให้ทุกตัวอักษรตัวพิมพ์เล็ก (รวมทั้งตัวอักษรเน้นเสียง) ในส่วน2k-1พิมพ์ใหญ่คำ TH และทุกตัวอักษรพิมพ์ใหญ่ (ยังรวมทั้งตัวอักษรเน้นเสียง) ใน2kตัวพิมพ์เล็กคำ TH ( kเป็นจำนวนเต็มบวก) โปรแกรมไม่ควรส่งผลกระทบต่อตัวละครอื่น ๆ ในคำใด ๆ ตัวอย่างเช่นถ้าสตริงเป็นแล้วออกที่ควรจะเป็นOok! O0k!OOK! o0k!

คำใหม่จะเกิดขึ้นเมื่อมีจำนวนช่องว่างที่ไม่ใช่ศูนย์หลังจากอักขระที่ไม่ใช่ช่องว่าง ช่องว่างที่จุดเริ่มต้นของอินพุตควรถูกละเว้น หากคำใดคำหนึ่งไม่มีอักขระที่เปลี่ยนแปลงใด ๆ โปรแกรมจะยังคงพิจารณาว่าเป็นคำและดำเนินการต่อ

อินพุตตัวอย่าง ( อินพุตที่แตกต่างกันถูกคั่นด้วยบรรทัดว่างใหม่)

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~~~

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

นี่คือรหัสกอล์ฟ, fellas ใช้กฎ CG มาตรฐาน โปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ


ฉันค่อนข้างมั่นใจว่าฉันได้ปิดช่องโหว่ทั้งหมดที่เกี่ยวกับตัวละครที่ไม่ใช่ช่องว่างและตัวอักษร แต่ถ้าฉันพลาดโปรดบอกฉัน


ขอบคุณ@Optimizerสำหรับการสร้างโค้ดต่อไปนี้ วิธีใช้คลิก "แสดงตัวอย่างข้อมูล" เลื่อนไปที่ด้านล่างแล้วคลิก "►เรียกใช้ข้อมูลโค้ด"


5
อักขระเน้นเสียงเป็นอย่างไร เราต้องเพิกเฉยต่อสิ่งเหล่านี้หรือไม่? ฟังก์ชั่นอนุญาตหรือไม่
Downgoat

ฉันไม่ได้มีตัวละครที่เน้นเสียงเมื่อฉันเขียนคำถาม แต่ฉันคิดว่าพวกเขาจะนับ ฟังก์ชั่นที่ได้รับอนุญาต
Arcturus

อักขระช่องว่างตัวใดที่เราต้องคำนึงถึง เราสามารถสมมติได้ว่าตัวละครที่ไม่ใช่ช่องว่างสามารถพิมพ์ได้หรือไม่?
Dennis

อักขระช่องว่างทั้งหมดและใช่
Arcturus

คำตอบ:


4

เป็นกลุ่มสคริปต์22 21 ไบต์

nm Q vEUWvEuWQ|norm Q

คำอธิบาย:

คำสั่งแรกแม็พQกับ:

vEUทำให้คำเป็นตัวพิมพ์ใหญ่
Wไปที่คำถัดไป
vEuทำให้คำเป็นตัวพิมพ์เล็ก
Wไปที่คำถัดไป
Qทำซ้ำการทำแผนที่แบบเรียกซ้ำ

และ|norm Qดำเนินการทำแผนที่

การใช้งานของโปรแกรม

นี่คือวิธีที่คุณได้รับเสียงเรียกเข้าเพื่ออ่านจาก 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

สิ่งนี้จะเปิดVim ที่แสดงสิ่งนี้:

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

คะแนนรวมถึง +2 สำหรับการ-rzส่งผ่านไปยัง GNU sed

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

Perl, 26 ไบต์

25 ไบต์รหัส + 1 บรรทัดคำสั่งไบต์

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

ขอบคุณ ThisSuitIsBlackNot สำหรับการแก้ไขข้อบกพร่องบางอย่าง!

การใช้งาน:

perl -p entry.pl

3

Pyth, 23

jdmjbmrk=xZ!!kcdbcjb.zd

ลองออนไลน์หรือเรียกใช้ชุดทดสอบ

สลับระหว่าง pyth ของlowerและupperฟังก์ชั่นซึ่งเป็นหรือr...0 r...1นี่อาจจะส่งผลกระทบต่อตัวอักษรยูนิโค้ดรอการชี้แจง OP เพื่อการเปลี่ยนแปลง

ฉันรู้สึกว่าบางสิ่งบางอย่างต้องสามารถเล่นกอล์ฟได้ โดยเฉพาะอย่างยิ่งแฮคเกอร์ที่จะเปลี่ยนสวิทช์ที่ของupper/ lowerควรจะใช้


ถ้าผมตีความคำถามที่ถูกต้อง, การป้อนข้อมูลควรพิมพ์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

2

Perl, 87 ไบต์

หลังจากไขทั้งนิพจน์ปกติและmapชั่วครู่หนึ่งฉันไม่สามารถคิดหาคำตอบที่สง่างามได้ดังนั้นนี่คือผลลัพธ์:

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

1
ทางออกที่ดี สามารถแทนที่ <STDIN> ด้วย <> เพื่อบันทึกสองสามไบต์ได้หรือไม่ นอกจากนี้ $ i = 0 สามารถข้ามได้หรือไม่
สตีฟ

@ สตีฟขอบคุณ; และใช่แล้วพร้อมกับการแก้ไขเล็กน้อย (ทดสอบด้วยอินพุตที่แตกต่างกันและมีข้อผิดพลาดเล็กน้อย) รวมอยู่ในขณะนี้ ขอบคุณสำหรับความคิด! ฉันคุ้นเคยกับการใช้รหัสอย่างชัดเจน: P
Codefun64

1
@ Codefun64 ยินดีต้อนรับสู่ PPCG! คุณสามารถข้ามวงเล็บส่วนใหญ่เพื่อประหยัดไบต์ได้มากขึ้นเนื่องจากเป็นทางเลือกใน Perl เช่น lc(<>)อาจเป็นlc<>และใช้โมดิฟายเออร์คำสั่งเพื่อwhileให้คุณข้ามวงเล็บได้เช่นกัน print$i++while$i<10กับwhile($i<10){print$i++}. มีหน้าที่มีประโยชน์ที่ช่วยฉันได้มากเคล็ดลับสำหรับการเล่นกอล์ฟใน Perl
Dom Hastings


2

JavaScript ES6, 74 71 ไบต์

.toUpperCase()และ.toLowerCase()ฆ่าจำนวนไบต์อย่างแน่นอน (เพิ่ม 32 ไบต์ 0.o) การทำงานรอบ ๆ ส่วนใหญ่จบลงด้วยจำนวนไบต์ที่เพิ่มขึ้น

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()}

ไม่สะอาดอย่างที่ฉันหวังไว้คงเป็นเช่นนั้นซึ่งดูเหมือนจะเป็นธีมของคำตอบ Groovy ของฉัน

  • +17 เพื่อแก้ไขพฤติกรรมด้วยช่องว่างนำหน้า
  • -5 สำหรับการลบบรรทัดขึ้นบรรทัดใหม่และสลับจาก. isEmpty () เป็น. ว่าง

 

$ 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

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

ต้องการอินพุตเป็นไฟล์ csv (หนึ่งคอลัมน์) ที่เรียกว่า ab

คำอธิบาย:

อ่านข้อมูลใน (ชื่อตัวแปรเริ่มต้นคือ v1 ย่อให้ v) ทำให้ตัวแปรใหม่ b เท่ากับคำแรก (โทเค็นที่คั่นด้วยช่องว่าง) ของ v สำหรับแต่ละบรรทัด สำหรับแต่ละบรรทัดในขณะที่คำถัดไปไม่ว่างเปล่า (เกิดขึ้นหากไม่มีอักขระบนบรรทัดนั้นเท่านั้น) ให้แทนที่คำใน v ด้วยเวอร์ชันตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กของคำนั้นในบรรทัดปัจจุบันขึ้นอยู่กับจำนวน (mod 2 ) พบคำแล้ว จากนั้นรับคำถัดไปและทำซ้ำ พิมพ์ทั้งบรรทัดเมื่อเสร็จแล้ว


1

Delphi, 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.

ไม่ใช่ภาษาที่ดีสำหรับการเล่นกอล์ฟด้วย ...


ยินดีต้อนรับสู่ Programming Puzzles & Code Golf!
Dennis


1

CJam, 28 ไบต์

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

ขณะนี้ฉันกำลังพิจารณาช่องว่าง 33 ASCII / Unicode ตัวแรก (และเฉพาะที่) เท่านั้น ฉันรอการชี้แจงเพื่อทราบว่านี่ถูกต้องหรือไม่

ลองใช้ออนไลน์ในล่าม CJam


1

Pyth, 17 22 ไบต์

FGcwd=+YrG=Z%+1Z2;jdY

ลองที่นี่


กรณีพื้นที่ชั้นนำล้มเหลว แต่ก็ยังดี
tjbtech

สิ่งนี้ยังไม่จัดการอินพุตมากกว่าหนึ่งบรรทัดและพิมพ์พื้นที่ต่อท้าย
FryAmTheEggman

ฉันจะสร้างใหม่เมื่อฉันสามารถทำได้ขอบคุณ: D
ตบมือ

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.