javascript

JavaScript – Saber si cadena es Pangrama

Anteriormente vimos cómo saber si una string es un pangrama en Python.

Ahora veremos cómo comprobar que una cadena es un pangrama en JavaScript, para ello usaremos un algoritmo simple en combinación con el método includes.

Recuerda que un pangrama es aquella oración que contiene todas las letras de un alfabeto de determinado idioma; en este caso lo haremos con el alfabeto español, aunque también se podrá modificar para otro alfabeto como el inglés.

El algoritmo

Hay que recorrer todo el alfabeto y comprobar que todas y cada una de las letras estén presentes dentro de la cadena a probar, para ello hay que ver si la cadena incluye la letra.

Antes de eso hay que convertir la cadena a minúscula, pues vamos a compararla con el alfabeto de letras minúsculas.

Nota: en los ejemplos de código voy a usar const con let y funciones flecha.

Pangrama en JavaScript

Hablar es de mal gusto; veamos el código. Lo dejo aquí y lo explico más abajo:

/**
 * Función que indica si una cadena es Pangrama en JavaScript
 * 
 * @author parzibyte
 */
const esPangrama = cadena => {
 const ALFABETO_MINUSCULAS = "abcdefghijklmnñopqrstuvwxy";
 // Convertir a minúsculas
 cadena = cadena.toLowerCase();

 let alfabetoComoArreglo = Array.from(ALFABETO_MINUSCULAS);

 // Recorrer alfabeto
 for (let indice = 0; indice < alfabetoComoArreglo.length; indice++) {
  let letraActual = alfabetoComoArreglo[indice];
  // En caso de que la cadena NO contenga la letra, regresamos false de una vez
  if (!cadena.includes(letraActual)) return false;
 }
 // Se termina el ciclo y no se rompió arriba, ¡así que la cadena es pangrama!
 return true;
};


// Probar método
const CADENAS_PARA_PROBAR = [
 "El cadáver de Wamba, rey godo de España, fue exhumado y trasladado en una caja de zinc que pesó un kilo",  //  No
 "Hola",  //  No
 "aeiou",  //  No
 "parzibyte",  //  No
 "abcdefghijklmnñopqrstuvwxyz",  //  Sí
 "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja",  //  Sí,
 "abcdefghijklmnopqrstuvwxyz",  // No, porque no lleva ñ
 "Mi hijo degustó en el festival de bayas una extraña pizza de kiwi con queso",  // Sí
];

CADENAS_PARA_PROBAR.forEach(cadena => {
 console.log(`¿'${cadena}' es pangrama? ${esPangrama(cadena)}`);
});

Primero definimos el alfabeto en minúsculas y convertimos la cadena que vamos a probar igualmente a minúsculas.

Recorremos el alfabeto en un simple for y vamos probando que cada letra del alfabeto esté incluida dentro de la cadena.

Si se acaba el ciclo sin romperse (o sea, que sí están todas las letras del alfabeto en la cadena) entonces se dice que sí es un pangrama.

Método 2: menos código

Los arreglos tienen un método llamado every, que regresan un booleano si se cumple un predicado para todos los casos; gracias a ello podemos crear un código más corto (no lo recomiendo, porque es menos legible).

Queda así:

/**
 * Función que indica si una cadena es Pangrama en JavaScript
 * (método corto)
 * @author parzibyte
 */
const esPangrama = cadena => {
 const ALFABETO_MINUSCULAS = "abcdefghijklmnñopqrstuvwxy";
 // Convertir a minúsculas
 cadena = cadena.toLowerCase();
 return Array.from(ALFABETO_MINUSCULAS).every(letra => cadena.includes(letra));
};


// Probar método
const CADENAS_PARA_PROBAR = [
 "El cadáver de Wamba, rey godo de España, fue exhumado y trasladado en una caja de zinc que pesó un kilo",  //  No
 "Hola",  //  No
 "aeiou",  //  No
 "parzibyte",  //  No
 "abcdefghijklmnñopqrstuvwxyz",  //  Sí
 "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja",  //  Sí,
 "abcdefghijklmnopqrstuvwxyz",  // No, porque no lleva ñ
 "Mi hijo degustó en el festival de bayas una extraña pizza de kiwi con queso",  // Sí
];

CADENAS_PARA_PROBAR.forEach(cadena => {
 console.log(`¿'${cadena}' es pangrama? ${esPangrama(cadena)}`);
});

Ambos métodos tienen el mismo funcionamiento, pero el segundo ocupa menos líneas de código.

Probar ejemplos

Puedes ejecutar los ejemplos en JavaScript o en Node.JS.

Mira más sobre JavaScript en este enlace.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

6 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.