Por Nacho Cabanes
Nivel de dificultad aproximado (1 a 5): 2
Seguro que has visto textos como "The quick brown fox jumps over the lazy dog" o "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" . Son "pangramas", textos que contienen todas las letras de un cierto alfabeto, quizá repetidas.
Deberás crear un programa que reciba varias frases y que diga si cada una de ellas es un pangrama o no. Sólo deberás considerar las letras del alfabeto inglés (no te preocupes por las vocales acentuadas ni la eñe, entre otras), que podrán aparecer en mayúsculas o en minúsculas.
La primera línea contendrá el número de frases y después aparecerá una nueva frase en cada línea. Para cada frase deberás responder SI cuando se trate de un pangrama o NO cuando no lo sea.
(Asegúrate de que has leído las preguntas frecuentes antes de plantear tu solución)
Ejemplo de entrada 7 abcdefGHIJKLMNopqrstuvwxyz abcdefghijklwnopqrstuvwxyz Este es un texto de ejemplo The quick brown fox jumps over the lazy dog 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 El viejo Señor Gómez pedía queso, kiwi y habas, pero le ha tocado un saxo. Quiere la boca exhausta vid, kiwi, piña y fugaz jamón. Ejemplo de salida SI NO NO SI SI NO SI
// Ejemplo de solución para el reto 030: Pangramas // Por Brigido, 03-12-2016 // Nota del recopilador: usa características recientes del lenguaje C++, // por lo que no funcionará en compiladores que usen C++98 o anteriores #include<iostream> #include<string> #include<cctype> bool es_pangrama(const std::string& frase){ bool alfabeto['z' - 'a']; for(bool& existe: alfabeto) existe= false; for(char letra: frase){ if(letra>= 'A' && letra <= 'Z') letra= std::tolower(letra); if(letra>= 'a' && letra <= 'z') alfabeto[letra- 'a']= true; } for(bool existe: alfabeto) if(!existe) return false; return true; } int main(){ std::string entrada; int numero_frases= 0; std::cin>>numero_frases; std::cin.ignore(256, '\n'); for(int i= 0; i< numero_frases; i++){ std::getline(std::cin, entrada); if(es_pangrama(entrada))std::cout<<"SI"<<std::endl; else std::cout<<"NO"<<std::endl; } }
// Ejemplo de solución para el reto 030: Pangramas // Por Juan Carlos G S, 23-06-2016 using System; class Reto030 { static void Main(String[] args ) { int n = Convert.ToInt32(Console.ReadLine()); String exp; bool pangrama = true; for(int i = 0; i < n; i++, pangrama = true) { exp = Console.ReadLine(); for(char ascii = 'A'; ascii <= 'Z'; ascii++) { if(!exp.ToUpper().Contains("" + ascii)){ pangrama = false; break; } } Console.WriteLine((pangrama ? "SI" : "NO" )); } } }
//Reto de: Basado en un reto de HackerRank llamado Pangrams. //Realizado por: DG. //Fecha: 2/1/2016. //Feliz año nuevo. //Este algoritmo se basa en los arreglos y en el Codigo Ascii. using System; namespace Retos{ class Program{ private delegate String DeterminarPangramaEventHandler(String sfrase1); private event DeterminarPangramaEventHandler DeterminarPangrama1; private String FRDeterminarPangrama1(String sfrase1){ String spangrama1="SI"; sfrase1=sfrase1.ToUpper(); char[] ACaracteres1=new char[1000]; for(int i=0;i<sfrase1.Length;i++){ char caracter=sfrase1[i]; ACaracteres1[(int) caracter] = caracter; }//Fin del for para capturar los caracteres en un nuevo arreglo (Acaracteres1). for(int i=65;i<91;i++){ if(ACaracteres1[i] == ((char) 0)){ spangrama1="NO"; break; }//Fin de que si la frase le falta una letra del abecedario (si no es pangrama). }//Fin del for para determinar si la frase es un Pangrama. return spangrama1; }//Fin del metodo para determinar si la frase es Pangrama (FRDeterminarPangrama1). public Program(){ this.DeterminarPangrama1 += this.FRDeterminarPangrama1; }//Fin del constructor de Program. public static void Main(String[] args){ int icasos1; if(int.TryParse(Console.ReadLine(), out icasos1)==true){ Program Programa=new Program(); for(int i=0;i<icasos1;i++){ Console.WriteLine(Programa.DeterminarPangrama1(Console.ReadLine())); }//Fin del for para determinar si la frase es pangrama. }//Para convertir el numero de frases. }//Fin del metodo main. }//Fin de la clase Program. }//Fin del Namespace Retos.
// Ejemplo de solución para el reto 030: Pangramas // Por Juan Cisneros, 18-09-2016 import java.util.*; import java.io.*; public class Pangramas{ public static void main(String args[]){ Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); int n = in.nextInt(); in.nextLine(); //para pasar a la siguiente linea for(int i = 0; i < n; ++i ){ boolean alfabeto[] = new boolean[26]; //26 letras en el alfabeto //true si ha aparecido la letra String linea = in.nextLine(); int letrasDiferentes = 0; for(int j = 0; j < linea.length(); ++j){ char letraMinuscula = Character.toLowerCase(linea.charAt(j)); if(letraMinuscula > 'z'||letraMinuscula < 'a') // caracteres entre a y z continue; int letraIndice = letraMinuscula - 'a'; // para hacer a = 0, b = 1,...,z = 26 if(!alfabeto[letraIndice]){ alfabeto[letraIndice] = true; ++letrasDiferentes; } } if(letrasDiferentes == 26) System.out.println("SI"); else System.out.println("NO"); } } }
// Ejemplo de solución para el reto 030: Pangramas // Por Jose Andres Arizmendi Sanchez, 26-09-2016 // Nota del recopilador: debería responder a cada entrada directamente, // en vez de almacenar todas las respuestas y mostrarlas al final import java.util.Scanner; public class Pangramas { public static String Datos[]; public static char ABCDARIO[]=new char[26]; public static void main(String[] args) { for(int x=0;x<26;x++)//Para llenar el array con el abcedario ABCDARIO[x]=(char)(x+65); Scanner lee=new Scanner(System.in); Datos=new String[lee.nextInt()]; Datos[0]=lee.nextLine().toUpperCase(); for(int x=0;x<Datos.length;x++) Datos[x]=lee.nextLine().toUpperCase(); for (String Dato : Datos) { System.out.println(Pangramas(Dato)); } } public static String Pangramas(String Dato){ for(int x=0;x<26;x++) if(!Dato.contains(String.valueOf(ABCDARIO[x]))) return "NO"; return "SI"; } }
// Ejemplo de solución para el reto 030: Pangramas // Por Gaston Zarate, 14-11-2016 import java.util.Scanner; public class Pangramas { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int cant = sc.nextInt(); sc.nextLine(); String frase; for (int i = 0; i < cant; i++) { frase = sc.nextLine(); if(esPangrama(frase.toLowerCase())) { System.out.println("SI"); } else { System.out.println("NO"); } } } private static boolean esPangrama(String frase) { String abecedario = "abcdefghijklmnopqrstuvwxyz"; for (int i = 0; i < abecedario.length(); i++) { if(!frase.contains(""+abecedario.charAt(i))) { return false; } } return true; } }
// Solución para el reto 030: Pangramas // Por Valdo, 25-04-2017 import java.util.Scanner; public class Pangramas { public static void main(String args[]) { int pang; String prueba; Scanner leer = new Scanner(System.in); pang = leer.nextInt(); leer.nextLine(); String cad[] = new String[pang]; for (int x=0; x<cad.length; x++) { cad[x] = leer.nextLine(); } for (int x=0; x<cad.length; x++) { prueba = "abcdefghijklmnopqrstuvwxyz"; String frase = cad[x]; for (int y=0; y<frase.length();y++) { String car = ""+frase.charAt(y), prueba2 = ""; for (int z=0; z<prueba.length(); z++) { String pru = ""+prueba.charAt(z); if (car.equalsIgnoreCase(pru)) { //Do Nothing } else { prueba2 += pru; } } prueba = prueba2; } if (prueba.length() == 0) { System.out.println("SI"); } else { System.out.println("NO"); } } } }
(* Ejemplo de solución para el reto 030: Pangramas Por Enrique Ibarrra Cuanalo, 15-12-2016 *) program reto030; var i, j, k, casos: integer; frase: string[255]; arraybooleano: array[1..26] of boolean; begin readln(casos); for i:=1 to casos do begin readln(frase); for j:=1 to length(frase) do begin case frase[j] of 'A' , 'a': arraybooleano[1] := true; 'B' , 'b': arraybooleano[2] := true; 'C' , 'c': arraybooleano[3] := true; 'D' , 'd': arraybooleano[4] := true; 'E' , 'e': arraybooleano[5] := true; 'F' , 'f': arraybooleano[6] := true; 'G' , 'g': arraybooleano[7] := true; 'H' , 'h': arraybooleano[8] := true; 'I' , 'i': arraybooleano[9] := true; 'J' , 'j': arraybooleano[10] := true; 'K' , 'k': arraybooleano[11] := true; 'L' , 'l': arraybooleano[12] := true; 'M' , 'm': arraybooleano[13] := true; 'N' , 'n': arraybooleano[14] := true; 'O' , 'o': arraybooleano[15] := true; 'P' , 'p': arraybooleano[16] := true; 'Q' , 'q': arraybooleano[17] := true; 'R' , 'r': arraybooleano[18] := true; 'S' , 's': arraybooleano[19] := true; 'T' , 't': arraybooleano[20] := true; 'U' , 'u': arraybooleano[21] := true; 'V' , 'v': arraybooleano[22] := true; 'W' , 'w': arraybooleano[23] := true; 'X' , 'x': arraybooleano[24] := true; 'Y' , 'y': arraybooleano[25] := true; 'Z' , 'z': arraybooleano[26] := true; end; end; k := 0; for j:=1 to 26 do begin if(arraybooleano[j] = true)then k:=k+1; arraybooleano[j] := false; end; if k=26 then writeln('SI') else writeln('NO'); k:=0; end; end.