Cette question demande une fonctionnalité de correspondance de dictionnaire T9 qui est un problème très intéressant. Mais T9 a une autre façon de taper et c'est de taper caractère par caractère. Vous n'auriez PAS besoin d'un dictionnaire pour implémenter ce clavier.
Voici le clavier d'un clavier T9 si vous avez oublié:
+-------+-------+-------+
| 1 | 2 | 3 |
| .?! | ABC | DEF |
+-------+-------+-------+
| 4 | 5 | 6 |
| GHI | JKL | MNO |
+-------+-------+-------+
| 7 | 8 | 9 |
| PQRS | TUV | WXYZ |
+-------+-------+-------+
| * | 0 | # |
| ← | SPACE | → |
+-------+-------+-------+
Comment fonctionne T9
Pour taper un caractère avec T9, vous devez appuyer sur la touche numérique représentant l' n
heure de ce caractère . n
est l'ordre de ce caractère écrit sur cette clé. Les chiffres sont le dernier caractère que vous pouvez saisir pour chaque touche. Par exemple, pour taper, B
j'appuie 2
deux fois ou pour taper, 5
j'appuie 5
quatre fois. Pour finir de taper ce caractère, j'appuie sur #
. *
est simplement un retour arrière. Dans notre version du clavier, il n'y a pas de majuscule.
Exemples d'entrée et de sortie:
8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD
Explication:
8
sélectionneT
et#
passe au personnage suivant99999
sélectionner le dernier caractère de la9
clé qui est9
et#
passe au caractère suivant0
insère un espace33
sélectionne le deuxième caractère de la3
clé qui estK
et#
passe au caractère suivant- Etc...
Règles
Votre fonction ou programme doit accepter une chaîne représentant les touches T9. La sortie est le texte résultant de ces touches, comme indiqué ci-dessus.
Il s'agit du golf de code de base, donc le gagnant est le plus court en octets, et les règles / lacunes standard s'appliquent.
T9 KEYBOARD
est complètement faux. Que l'on litT9 JEYBARD
#
si les boutons consécutifs sont de toute façon différents. cela étant dit: sans ce bonus, que devrait-il se passer si#
est omis?Réponses:
CJam,
10994 octets (2 e bonus)Une solution très naïve et longue
Il s'agit d'un programme complet, bien qu'une fonction soit de la même longueur.
L'entrée va dans STDIN
Exemple:
Production:
Essayez-le en ligne ici
la source
JavaScript ES6,
220-10 = 210178 octetsEn tant que membre du CMC d' Helka , j'ai dépassé mon premier défi.
Exemples de sorties:
Explication
Cela implémente le remplacement récursif, en remplaçant tous les caractères suivis
*
jusqu'à ce qu'il n'y ait plus de*
s.Cela correspond à toutes les séries de chiffres consécutifs, ou
*
s.Cela crée le dictionnaire souhaité, obtenant la partie encodée à partir de la grande chaîne, puis y ajoutant le chiffre souhaité.
Cela obtient le caractère,
a
la longueur du module .Cela prépare la chaîne pour le traitement et la suppression de l'
*
art.la source
t("2#2");
donneB
au lieu deAA
. Essayez de faire correspondre tout#
au lieu de les supprimer.Python,167157151 octets(ne prend pas en charge «*»)
Rien de spécial. J'utilise regex pour convertir l'entrée en une liste, puis je boucle les entrées. J'utilise le premier caractère et la longueur de chaque entrée pour la rechercher dans une liste de recherche:
Après un peu de golf, cela ressemble à ceci:
Pas encore de bonus. Je ne sais pas comment j'implémenterais le premier bonus dans regex. Le deuxième bonus ajouterait beaucoup d'octets car les éléments de recherche ne sont pas de la même taille. Je ne comprends pas vraiment le troisième bonus.
la source
Perl 5: 106 (code 104 + 2 drapeaux)
Modifié pour gérer les suppressions.
Usage:
Perl 5: 88 (code 86 + 2 drapeaux)Ancienne version sans suppression d'étoile.
la source
AWK 211 octets (avec les bonus)
Il s'agit d'un programme complet qui lit l'entrée de stdin. Il serait plus efficace de ne pas replacer le clavier pour chaque ligne, mais cela allongerait le script.
De plus, si la touche "0" était autre chose que 0, le script serait plus court de 4 octets, mais cela fait partie du jeu: o)
la source
C (245 octets)
Production
Explication
Le nombre d'octets n'inclut pas la chaîne d'entrée donnée dans le premier
#define
.J'utilise un tableau à deux dimensions comme table de recherche pour quel caractère imprimer. Le programme lit en caractères délimités par
'#'
.Pour chaque groupe, le numéro d'entrée détermine l'indice de tableau de première dimension et le nombre de répétitions du numéro d'entrée détermine l'indice de tableau de deuxième dimension. Le fait
'*'
reculer l'index du tableau pour la chaîne de sortie afin d'écraser la lettre précédente.Ainsi, la chaîne d'entrée
44#
(1 répétition de'4'
) est traduite en table de rechercheK[4][1]
, qui est le caractèreH
.Version non golfée
la source
Ruby
254,248, 229 octetsGolfé:
Non golfé:
Toutes ces spécifications devraient réussir:
La
0 0
réponse ressemble un peu à une solution hacky. J'y reviendrai quand j'aurai le temps.la source
PHP, 183-10 = 173 octets
Toutes les versions prennent l'entrée de l'argument de ligne de commande; appeler avec
php -r '<code>' <string>
.Remarque : Toutes les versions lancent un avertissement si l'entrée commence par
*
.Ajoutez
$o=[];
le code pour supprimer cette faille.210-10 - ?? = ??? octets
181 octets, pas de bonus
panne
Les versions sans balises de hachage divisent la chaîne en (séquence de nombres égaux) et (astérisque) et oublient tout le reste. La version sans bonus prend (séquence de chiffres suivie de
#
) et (astérisque).Parcourez ensuite les correspondances: Si un «*» est trouvé, supprimez le dernier élément du tableau de résultats.
La différence entre les versions est dans la
else
partie:-1
.la source
JavaScript, 147 octets
La réponse de Conor a été corrigée avec l'expression régulière de ma réponse PHP et a joué au golf.
panne
version tournante, 158 octets
ajouté
s=
pour mémoriser la chaîne et%s.length
pour faire pivoter.la source