Sembra che ci sia questa mania in corso su persone che imparano noiosamente nuovi layout di tastiera come Dvorak o Neo perché presumibilmente li rendono più produttivi. Sostengo che cambiare layout di tastiera sia una cattiva idea, perché possono volerci mesi per aggiornarti e quando sei sostanzialmente più veloce del 5% rispetto al resto, sei fregato se devi digitare su un computer che non è sei tuo.
Inoltre, tutte queste persone dimenticano dove si trova il vero collo di bottiglia nella comunicazione moderna: la tastiera del telefono.
Ecco come appare la tastiera del telefono media:
La lettera 'r' è la terza lettera sul pulsante 7; quindi se dovessi digitare la lettera "r" su un telefono cellulare, premi il pulsante 7 tre volte, per "s" lo premi 4 volte e per "a" premi il pulsante 2 una volta.
Considerando questo, inserire 'e' dopo 'd' era probabilmente una cattiva decisione - 'e' è la lettera più comunemente usata nell'alfabeto inglese, quindi, se dovessi etichettare il pulsante 3 "EDF" invece di "DEF", tu risparmierebbe un bel po 'di battiture.
Inoltre, probabilmente avete sperimentato che digitare 2 lettere che condividono lo stesso pulsante è un fastidio: se si desidera scrivere "TU", non si può semplicemente premere 8 tre volte, perché ciò comporterebbe "V". Quindi di solito scrivi 'T', poi premi spazio, poi premi backspace e poi scrivi 'U', che equivale a 5 pressioni di pulsanti invece di 3.
TL; DR
Date queste due regole:
- Una lettera viene digitata premendo un pulsante n volte, dove n è la posizione in cui si trova la lettera sull'etichetta del pulsante
- La scrittura di due lettere digitate utilizzando lo stesso pulsante richiede ulteriori 2 pressioni
Qual è il layout della tastiera del telefono che richiede il minor numero di pressioni di pulsanti, dato un testo specifico? Utilizzare solo i pulsanti 2-9, 1 e 0 riservati a simboli speciali.
Ingresso
Il testo per il quale dovresti trovare il layout ottimale viene fornito tramite stdin. Non è necessario gestire altro che l'alfabeto minuscolo e si può presumere che l'input sia costituito solo da questo. Puoi anche supporre che il testo di input sia ragionevolmente grande e che ogni lettera sia presente almeno una volta, se ciò aiuta.
Produzione
Non voglio porre troppi vincoli all'output, dal momento che a volte offre alcune lingue vantaggi rispetto ad altri; quindi comunque la tua lingua mostra che le matrici vanno bene, in alternativa puoi separare ogni etichetta con una nuova riga.
Potrebbero esserci più layout ottimali possibili, è possibile stampare uno qualsiasi di essi. Ecco un semplice esempio:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Punti bonus
-35 se il tuo algoritmo non sta forzando brutalmente tutti i possibili layout (sto guardando le "permutazioni" di Haskell qui)
-3 se il tuo codice si inserisce in un messaggio di testo (140 caratteri) e pubblichi una tua foto inviando il tuo codice a un amico.
Questa è la mia prima sfida su StackExchange. Sarei felice di sapere se ti piace o se hai altri feedback a riguardo!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
permutazioni uniche, contando i semplici riarrangiamenti dei tasti una sola volta.