Sappiamo tutti che i programmatori tendono ad essere pigri. Per massimizzare il tuo tempo libero, decidi di scrivere un programma che genera un numero minimo di tasti per il testo inserito al suo interno.
Input : testo che deve essere convertito in sequenze di tasti. Puoi decidere come inserire il testo (STDIN / lettura da un file fornito negli argomenti)
Output : le azioni necessarie nel seguente formato:
- Devono essere numerati
H
it: premendo un tasto e rilasciandolo immediatamenteP
Ress: premendo un tasto e non rilasciandolo (questo non sarà mai ottimale quando il tasto vieneR
rilasciato come la prossima sequenza di tasti)R
elease: rilascio di unaP
chiave rieletta
Esempio :
Ingresso:
Hello!
Produzione:
Una soluzione ingenua sarebbe:
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
Questo sarebbe più efficiente:
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
Ambiente:
- L'editor utilizza un carattere a spaziatura fissa
- Il testo è morbido con 80 caratteri
- Freccia su e Freccia giù preservano la colonna, anche se ci sono linee più brevi in mezzo
- Si presume che gli appunti siano vuoti
- Si presume che il blocco numerico sia abilitato
- Si presume che il blocco maiuscole sia disabilitato
- Il blocco maiuscole funziona solo per le lettere (vale a dire senza Shift Lock)
Tasti di scelta rapida / scorciatoie :
- Home: Salta all'inizio della riga corrente
- End: Salta alla fine della riga corrente
- Ctrl+ A: Segna tutto
- Ctrl+ C: Copia
- Ctrl+ X: Taglia
- Ctrl+ V: Incolla
- Shift+ Spostamento del cursore: marcatura
- Ctrl+ F: Apre una finestra di ricerca.
- Stupida corrispondenza del testo, nessuna espressione regolare
- Che tiene conto del maiuscolo o minuscolo
- Le ricerche si susseguono
- Inserimento di testo a riga singola per la ricerca
- L'input è precompilato con la selezione corrente, a meno che non ci sia una nuova riga in mezzo, viene selezionato l'input completo
- Copia / Incolla funziona come al solito
- Premendo si Enteresegue la ricerca, selezionando la prima corrispondenza dopo la posizione corrente del cursore
- F3: Ripete l'ultima ricerca
- Ctrl+ H: Apre una finestra di dialogo di sostituzione
- Stupida corrispondenza del testo, nessuna espressione regolare
- Che tiene conto del maiuscolo o minuscolo
- Sostituisci tutto, con avvolgente
- Input di testo a riga singola
- L'input di ricerca è precompilato con la selezione corrente, a meno che non ci sia una nuova riga in mezzo, viene selezionato l'input completo
- L'ingresso di sostituzione è vuoto
- Copia / Incolla funziona come al solito
- Tab passa all'ingresso di sostituzione
- Premendo si Enteresegue la sostituzione di tutto. Il cursore viene posizionato dopo l'ultima sostituzione
Regole :
- Le soluzioni devono essere un programma completo che compila / analizza ed esegue senza ulteriori modifiche
- La tastiera visualizzata sopra è la tastiera da usare
- Non è necessario gestire caratteri che non possono essere digitati con esso
- Ogni chiave deve essere rilasciata alla fine
- Non è necessario che il cursore si trovi alla fine del file alla fine
Punteggio :
Il tuo punteggio è la somma delle azioni necessarie per digitare i seguenti testi. Il vincitore è la soluzione con il punteggio più basso. Con la mia ingenua soluzione ottengo 1371 + 833 + 2006 = 4210
. Darsela a gambe! Sceglierò un vincitore tra due settimane.
1 La mia ingenua soluzione
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 Ripetizione facile
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
3 Ripetizione più complessa
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
Puoi utilizzare il programma di riproduzione scritto da me per testare le tue soluzioni (Nota: non supporta ancora la ricerca / sostituzione, tutto il resto dovrebbe funzionare).