Su console di gioco moderne e altri dispositivi senza tastiere tradizionali, provare a inserire testo è un incubo. Dover scrivere con pochi pulsanti e un joystick su una tastiera virtuale è fastidioso, e mi piace fare il minor numero di movimenti / pressioni di pulsanti possibile.
La tastiera che userai sarà simile a questa:
+---+---+---+---+---+---+---+---+---+---+
| 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 | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
È possibile utilizzare le seguenti operazioni:
L
: sposta di un quadrato a sinistra sulla tastiera (avvolge)R
: sposta un quadratino a destra sulla tastiera (avvolge)U
: sposta di un quadrato verso l'alto sulla tastiera (avvolge)D
: sposta un quadrato verso il basso sulla tastiera (avvolge)Y
: inserisci uno spazioB
: sposta il puntatore di inserimento di uno spazio a sinistra (non fa nulla se il puntatore è all'inizio)F
: sposta il puntatore di inserimento di uno spazio a destra (non fa nulla se il puntatore si trova alla fine)C
: attiva il blocco maiuscoleA
: inserisce il carattere selezionato nella posizione del puntatore di inserimento
Data una stringa di input contenente solo caratteri ASCII che possono essere digitati utilizzando la tastiera e i comandi (corrispondenze [a-zA-Z0-9 _@.-]*
) sopra riportati , genera una sequenza di comandi che comporterà la stringa di output. La posizione iniziale del cursore è sul 1
tasto (in alto a sinistra) e inizialmente il blocco maiuscole è disattivato.
punteggio
Per ogni data stringa, un approccio ingenuo sarebbe, per ogni carattere della stringa, spostarsi sul carattere sulla tastiera per il percorso più breve, attivare il blocco maiuscole se necessario e selezionare il carattere. Un approccio così ingenuo genererebbe un comando di lunghezza (length of input string) + (sum of Manhattan distances on keyboard between consecutive non-space characters) + (number of times the string alternates between lowercase and uppercase characters) + (1 if string starts with an uppercase letter else 0)
. Ad esempio, l'approccio naive per 101
comporterebbe ALARA
, un comando lunghezza 5, e Noob 5
si tradurrebbe in DDDRRRRRCAUURRRCAADDLLLLAYUUUA
un comando di lunghezza 30.
La tua richiesta, tuttavia, cerca di fare meglio dell'approccio ingenuo. Per ogni stringa di input, l'inoltro riceverà punti pari al numero di comandi che l'approccio ingenuo utilizza meno il numero di comandi emessi dall'invio. Il tuo punteggio complessivo sarà la somma dei singoli punteggi.
Regole
- Gli invii verranno eseguiti su uno spazio di lavoro virtuale gratuito Cloud9 . L'area di lavoro dispone di 512 MB di RAM, 2 GB di spazio su disco, 8 CPU Intel (R) Xeon (R) a 2,50 GHz (informazioni complete sulla CPU, reperibili in esecuzione
cat /proc/cpuinfo
, disponibili qui ) e Ubuntu 14.04 a 64 bit Fidato. È possibile richiedere l'accesso all'area di lavoro dei test per eseguire e assegnare un punteggio all'invio oppure è possibile assegnare un punteggio a te. - Gli invii verranno eseguiti una volta per caso di test. È vietato memorizzare lo stato tra le esecuzioni. Gli invii non possono scrivere o leggere da file diversi dal file di origine (che non può essere modificato tra le esecuzioni), con la possibile eccezione della lettura di un file di input, se necessario.
- Gli invii sono limitati a 1 minuto di autonomia per ogni caso di test. Gli invii possono generare più soluzioni, ma per il punteggio verrà utilizzata solo l'ultima soluzione valida entro il tempo assegnato. La mancata emissione di soluzioni valide entro il tempo assegnato comporterà un punteggio pari a 0 per quel caso di test.
- Includi istruzioni su come invocare l'invio, nonché eventuali strumenti / librerie che devono essere installati che non sono inclusi con un'installazione standard di Ubuntu 14.04.
- Il vincitore sarà l'invio con il punteggio più alto. In caso di pareggio, la sottomissione con la migliore complessità algoritmica vincerà. Se il pareggio non viene ancora risolto, vincerà la prima proposta per raggiungere il punteggio e la complessità algoritmica.
- Gli invii potrebbero non essere ottimizzati per i casi di test. Mi riservo il diritto di modificare i casi di test se ritengo che sia necessario.
Casi test
Formato: input string => naive score
(se vedi errori in questi, ti preghiamo di lasciare un commento con la correzione)
101 => 5
quip => 12
PPCG => 15
Mego => 25
Noob 5 => 26
penguin => 27
867-5309 => 32
2_sPoOkY_4_mE => 60
The Nineteenth Byte => 76
penguins@SouthPole.org => 95
8xM3R__5ltZgrkJ.-W b => 98
correcthorsebatterystaple => 104
verylongRUNSOFCAPSandnocaps => 118
This is an English sentence. => 122
WNtza.akjzSP2GI0V9X .0epmUQ-mo => 131
Programming Puzzles and Code Golf => 140