Retos - 030: Pangramas

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

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 3 menos dos?
Lenguaje
Fuente:

// 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.