우리 모두 프로그래머가 게으른 경향이 있다는 것을 알고 있습니다. 자유 시간을 최대화하기 위해 텍스트에 공급되는 텍스트에 대해 최소한의 키 입력을 출력하는 프로그램을 작성하기로 결정했습니다.
입력 : 키 입력으로 변환해야하는 텍스트입니다. 당신은 텍스트를 입력하는 방법을 결정할 수 있습니다 (STDIN / 인수에 제공된 파일에서 읽기)
출력 : 다음 형식으로 필요한 조치 :
- 번호를 매겨 야합니다
H
it : 키를 눌렀다가 즉시 놓기P
ress : 키를 눌렀다가 놓지 마십시오 (R
다음 키 입력으로 키를 놓을 때 최적이 아님).R
해제 :P
압축 키 해제
예 :
입력:
Hello!
산출:
순진한 해결책은 다음과 같습니다.
1 P Shift
2 H h
3 R Shift
4 H e
5 H l
6 H l
7 H o
8 P Shift
9 H 1
10 R Shift
이것은 더 효율적입니다.
1 P Shift
2 H h
3 H 1
4 R Shift
5 H Left
6 H e
7 H l
8 H l
9 H o
환경:
- 편집기는 고정 폭 글꼴을 사용합니다
- 텍스트는 80 자로 부드럽게 줄 바꿈됩니다.
- 사이에 짧은 줄이 있어도 위쪽 화살표와 아래쪽 화살표는 열을 유지합니다.
- 클립 보드가 비어 있다고 가정
- Num Lock이 활성화 된 것으로 가정
- Caps Lock이 비활성화 된 것으로 가정
- Caps Lock은 글자에만 작동합니다 (즉, Shift Lock 없음).
단축키 / 바로 가기 :
- Home: 현재 줄의 시작으로 이동
- End: 현재 줄의 끝으로 이동
- Ctrl+ A: 모든 것을 표시
- Ctrl+ C: 복사
- Ctrl+ X: 컷
- Ctrl+ V: 붙여 넣기
- Shift+ 커서 이동 : 마킹
- Ctrl+ F: 검색 대화 상자를 엽니 다.
- 멍청한 텍스트 일치, 정규식 없음
- 대소 문자 구분
- 수색 랩
- 검색을위한 한 줄 텍스트 입력
- 사이에 줄 바꿈이 없으면 전체 입력이 선택되지 않는 한 입력은 현재 선택 항목으로 미리 채워집니다.
- 복사 / 붙여 넣기는 평소와 같이 작동합니다
- 를 누르면 Enter현재 커서 위치 이후 첫 번째 일치 항목을 선택하여 검색을 수행
- F3: 마지막 검색 반복
- Ctrl+ H: 바꾸기 대화 상자를 엽니 다
- 멍청한 텍스트 일치, 정규식 없음
- 대소 문자 구분
- 랩핑으로 모두 교체
- 한 줄 텍스트 입력
- 사이에 줄 바꿈이 없으면 전체 입력이 선택되지 않는 한 검색 입력은 현재 선택 항목으로 미리 채워집니다.
- 교체 입력이 비어 있습니다
- 복사 / 붙여 넣기는 평소와 같이 작동합니다
- Tab 교체 입력으로 이동
- 를 누르면 Enter모두 교체가 수행됩니다. 커서는 마지막 교체 후 배치됩니다
규칙 :
- 솔루션은 추가 수정없이 컴파일 / 구문 분석 및 실행되는 완전한 프로그램이어야합니다.
- 위에 표시된 키보드는 사용할 키보드입니다
- 입력 할 수없는 문자를 처리 할 필요는 없습니다.
- 모든 키는 마지막에 놓아야합니다
- 커서는 파일 끝에 위치 할 필요가 없습니다
득점 :
당신의 점수는 다음 텍스트를 입력하는 데 필요한 행동의 양을 합한 것입니다. 승자가 가장 낮은 점수의 솔루션입니다. 내 순진한 솔루션을 사용하면 얻을 수 1371 + 833 + 2006 = 4210
있습니다. 이길! 2 주 후에 우승자를 뽑을 것입니다.
1 나의 순진한 해결책
number = 1
H = (char) -> console.log "#{number++} H #{char}"
P = (char) -> console.log "#{number++} P #{char}"
R = (char) -> console.log "#{number++} R #{char}"
strokes = (text) ->
shiftActive = no
for char in text
if /^[a-z]$/.test char
if shiftActive
R "Shift"
shiftActive = no
H char
else if /^[A-Z]$/.test char
unless shiftActive
P "Shift"
shiftActive = yes
H char.toLowerCase()
else
table =
'~': '`'
'!': 1
'@': 2
'#': 3
'$': 4
'%': 5
'^': 6
'&': 7
'*': 8
'(': 9
')': 0
'_': '-'
'+': '='
'|': '\\'
'<': ','
'>': '.'
'?': '/'
':': ';'
'"': "'"
'{': '['
'}': ']'
if table[char]?
unless shiftActive
P "Shift"
shiftActive = yes
H table[char]
else
H switch char
when " " then "Space"
when "\n" then "Enter"
when "\t" then "Tab"
else
if shiftActive
R "Shift"
shiftActive = no
char
R "Shift" if shiftActive
input = ""
process.stdin.on 'data', (chunk) -> input += chunk
process.stdin.on 'end', -> strokes input
2 쉬운 반복
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
3 더 복잡한 반복
We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
I just wanna tell you how I'm feeling
Gotta make you understand
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
내가 작성한 재생 프로그램을 사용 하여 솔루션을 테스트 할 수 있습니다 (참고 : 검색 / 교체는 아직 지원하지 않으며 다른 모든 기능은 작동합니다).