Thi đua đánh máy của giáo sư


8

Thi đua đánh máy của giáo sư

Lý lịch

Thật không may, Giáo sư không thể sử dụng bàn phím của mình đúng cách: bất cứ khi nào anh ta có ý định sử dụng Shiftphím, anh ta nhấn Caps Lock một lần trước khi gõ và không bận tâm đến việc tự sửa. Nếu có hai hoặc nhiều khóa liên tiếp yêu cầu Shift, anh ta nhấn Caps Locktrước phím đầu tiên và không làm gì trước các phím khác.

Là thư ký của anh ấy, tôi muốn nhân rộng hiệu ứng này để mọi người nghĩ rằng anh ấy là người trả lời email của anh ấy chứ không phải tôi. Anh ta biết cách đánh máy của mình trông thật ngu ngốc, nhưng anh ta không quan tâm.

Bài tập

Viết chương trình lấy STDIN hoặc nhập tệp của một số văn bản, sau đó xuất văn bản đó như thể nó đã được Giáo sư gõ.

Đây là mã golf , và sơ hở tiêu chuẩn không được phép.

Bố trí bàn phím

Default:
` 1 2 3 4 5 6 7 8 9 0 - =
   q w e r t y u i o p [ ]
    a s d f g h j k l ; ' #
   \ z x c v b n m , . /

With shift:
¬ ! " £ $ % ^ & * ( ) _ +
   Q W E R T Y U I O P { }
    A S D F G H J K L : @ ~
   | Z X C V B N M < > ?

With caps lock:
` 1 2 3 4 5 6 7 8 9 0 - =
   Q W E R T Y U I O P [ ]
    A S D F G H J K L ; ' #
   \ Z X C V B N M , . /

Ví dụ đầu vào / đầu ra

( CapsLockDòng này chỉ dành cho sự hiểu biết của bạn và không nên xuất ra trong chương trình của bạn)

Input:    abc ** def ! (ghijkl) mnop
Output:   abc 88 DEF 1 9GHIJKL0 mnop
CapsLock:     *      * *      *       (* means Caps Lock was pressed before this character)

Input:    print("Hello, World!"); sys.exit()
Output:   print92HELLO, world120; SYS.EXIT90
CapsLock:      *        *    *            *

Input:    !ABC!abc!ABC!abc!x!y!z
Output:   1ABC1ABC1abc1abc1X1y1Z
CapsLock: *       *       * * *

3
Tôi sẽ nói rằng sự đối lập của nhiệm vụ này sẽ thú vị hơn :) (nghĩa là sửa các loại thư sai của anh ấy)
Trình tối ưu hóa

4
@Optimizer Quá mơ hồ. Đầu vào HELLOcó thể là "điều chỉnh" để Hello, HEllo, HELlovv
Geobits

Nhưng chính xác sẽ Hellochỉ là, như được xác định bởi trường hợp từ (hoặc quy tắc cố định của vỏ tiếng Anh chính xác)
Trình tối ưu hóa

4
@laurencevs Thành thật tôi muốn xem đó là một thử thách riêng biệt :)
Geobits

1
Đây là loại bàn phím voodoo nào?
Brandon

Câu trả lời:


5

Con trăn 2 - 269 275 290 318 337

Đầu vào chủ yếu là an toàn nếu bạn sử dụng ba dấu ngoặc kép:"""print("Hello, World!"); sys.exit()"""

C=D=0
r=''
l,u,c=" `1234567890-=qwertyuiop[]asdfghjkl;'#\\zxcvbnm,./",' \xac!"\xa3$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>?'," `1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\\ZXCVBNM,./"
for h in input():w=h!=' ';U=h in u;C^=w&U&~D;D=U&w;r+=[l,c][C][[l,u][U].find(h)]
print r

Mã hóa dường như không giúp được gì nhiều, ngoại trừ các ký tự ¬ và £ vụng về (Tôi đã thử xem xét các vấn đề khác như thế này và tôi nghĩ rằng tôi nên thử sử dụng phân tách?) (Có vẻ như bàn phím không đủ nén để làm cho nó có giá trị .decode, vv ...)

Ngoài ra, không gian hút.

Chỉnh sửa ghi chú: Lập chỉ mục là lạ


3

PowerShell - 295

Lấy đầu vào từ bàn điều khiển (Máy chủ đọc) và đầu ra cho bàn điều khiển.

$d=@("``1234567890-=qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ ","``1234567890-=QWERTYUIOP[]ASDFGHJKL;'#\ZXCVBNM,./ ",'¬!"£$%^&*()_+QWERTYUIOP{}ASDFGHJKL:@~|ZXCVBNM<>? ')
((Read-Host).ToCharArray()|%{if($_-eq' '-or$d[2].IndexOf($_)-lt0){$a=0}else{if(!$a){$b=!$b}$a=2}$d[$b][$d[$a].IndexOf($_)]})-join''
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.