Buenos dias a todos hace mucho me acuerdo que un compañero del foro Digitalboy nos regalo un reto de programacion hace poco me encontre uno igual de un concurso solo que es de lenguaje PHP lo anexo igual que como el otro reto ver el tipo de programacion en VBA. saludos. anexo el codigo respuesta.
esto con el fin de salir de lo cotidiano un poco del foro.
Problema
Teclado de móvil
El alfabeto inglés contiene 26 caracteres y los teléfonos móviles sólo tienen diez dígitos en el teclado. Varias letras se mapean en cada tecla numérica, como se muestra en la imagen inferior, de forma que se pueda escribir un mensaje con pulsaciones repetitivas. Por ejemplo, para insertar el carácter B, se deberá presionar 22. Para introducir una secuencia de dos caracteres a partir de la misma tecla, el usuario debe hacer una pausa antes de pulsar el botón una segunda vez. Por ejemplo, 2 2 indica AA mientras que 22 indica B (se muestra un "carácter de espacio" para indicar una pausa).
Debe crear un programa que calcule la secuencia de teclas que hay que pulsar para escribir un cierto mensaje.
Entrada
La primera línea de entrada contiene un único entero N, el número de casos de prueba.Cada caso es una línea de texto con formato
mensaje_deseado
Cada mensaje consta sólo de minúsculas de la "a" la "z" y el carácter " " (espacio, que se emite presionando cero).
Salida
Para cada caso de prueba, la salida de una línea que contiene "Caso # x:", seguido por el mensaje traducido en la secuencia de pulsaciones de teclas.
Ejemplo
Entrada
4
hi
yes
foo bar
hello world
Salida
Caso #1: 44 444
Caso #2: 999337777
Caso #3: 333666 6660 022 2777
Caso #4: 4433555 555666096667775553
Solución en lenguaje PHP:
<?php
function teclado_movil($mensaje_deseado){
//Inicializar el teclado $key = array(); $char = ord('a');
// Guardo las teclas que corresponden a cada letra for($tecla = 2; $tecla <=9; $tecla++){ //Todas las teclas tienen 3 letras excepto la 7 y la 9 que tienen 4 $hasta = ($tecla == 7 || $tecla == 9)? 4 : 3 ; for($pulsar = 1; $pulsar <= $hasta; $pulsar){ $key[$char++] = array('tecla' => $tecla, 'pulsar' => $pulsar++); } }
//Transformar string en array $letras = str_split ($mensaje_deseado); foreach($letras as $letra){ //Obtengo la tecla que le corresponde y la cantidad de pulsaciones $tecla = $key[ord($letra)]['tecla']; $pulsar = $key[ord($letra)]['pulsar']; //Si es la misma tecla que la anterior va espacio if($tecla == $tecla_anterior) $respuesta .= ' '; //Presiono la tecla la cantidad de veces necesaria for($i = 0; $i < $pulsar; $i++){ $respuesta .= $tecla; } //Antes de seguir recuerdo a esta tecla como la anterior $tecla_anterior = $tecla; } return $respuesta; }
Buenos dias a todos hace mucho me acuerdo que un compañero del foro Digitalboy nos regalo un reto de programacion hace poco me encontre uno igual de un concurso solo que es de lenguaje PHP lo anexo igual que como el otro reto ver el tipo de programacion en VBA. saludos. anexo el codigo respuesta.
esto con el fin de salir de lo cotidiano un poco del foro.
Problema
Teclado de móvil
El alfabeto inglés contiene 26 caracteres y los teléfonos móviles sólo tienen diez dígitos en el teclado. Varias letras se mapean en cada tecla numérica, como se muestra en la imagen inferior, de forma que se pueda escribir un mensaje con pulsaciones repetitivas. Por ejemplo, para insertar el carácter B, se deberá presionar 22. Para introducir una secuencia de dos caracteres a partir de la misma tecla, el usuario debe hacer una pausa antes de pulsar el botón una segunda vez. Por ejemplo, 2 2 indica AA mientras que 22 indica B (se muestra un "carácter de espacio" para indicar una pausa).
Debe crear un programa que calcule la secuencia de teclas que hay que pulsar para escribir un cierto mensaje.
Entrada
La primera línea de entrada contiene un único entero N, el número de casos de prueba.Cada caso es una línea de texto con formato
mensaje_deseado
Cada mensaje consta sólo de minúsculas de la "a" la "z" y el carácter " " (espacio, que se emite presionando cero).
Salida
Para cada caso de prueba, la salida de una línea que contiene "Caso # x:", seguido por el mensaje traducido en la secuencia de pulsaciones de teclas.
Ejemplo
Entrada
4
hi
yes
foo bar
hello world
Salida
Caso #1: 44 444
Caso #2: 999337777
Caso #3: 333666 6660 022 2777
Caso #4: 4433555 555666096667775553
Solución en lenguaje PHP:
P.D. espero sirva como entretenimiento para los que les gustan los retos saludos