Skip to content
Reto #5Básico 2 resolvieronAbierto

El Grito Más Fuerte

bash · c · c++ · go · java · javascript · python · r · rust · typescript

En el festival anual del pueblo, se realiza un concurso para ver quién puede "gritar" más fuerte en el chat de la comunidad. El ganador es aquel cuyo mensaje contenga la mayor cantidad de signos de cierre de exclamación (!).

Tu tarea es procesar los mensajes de los participantes y determinar quién es el ganador.

Entrada

  • La primera línea contiene un número entero N, el número de participantes.
  • Las siguientes N líneas contienen el nombre de un participante (una sola palabra sin espacios), seguido de un espacio y luego su mensaje (que puede contener cualquier carácter y espacios).

Salida

  • El nombre del ganador y la cantidad total de signos ! que utilizó en su mensaje, separados por un espacio.
  • En caso de empate en la cantidad de signos, el ganador será la primera persona que aparezca en la lista con esa cantidad máxima.

Restricciones

  • 1 ≤ N ≤ 50
  • El nombre de cada participante tiene entre 1 y 20 caracteres.
  • Cada mensaje tiene entre 1 y 200 caracteres.

Ejemplo

Entrada
3
Juan ¡Hola!
Maria ¡¡Si!!
Pedro Ok
Salida
Maria 2

Maria tiene 2 signos '!', Juan tiene 1 y Pedro tiene 0. Maria gana por tener la mayor cantidad.

Soluciones de la comunidad

Cada una pasó el 100% de los casos de prueba en el sandbox.

bash+5 karma
read -r n
n=${n%$'\r'}
max_count=-1
winner=""

for ((i=0; i<n; i++)); do
    read -r nombre mensaje
    nombre=${nombre%$'\r'}
    
    exclamaciones="${mensaje//[^!]/}"
    cantidad="${#exclamaciones}"
    
    if (( cantidad > max_count )); then
        max_count=$cantidad
        winner=$nombre
    fi
done

echo "$winner $max_count"
Alango+5 karma
package main
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)
func contar(mensaje string) int{
    total := 0
    for i := 0; i < len(mensaje); i++{
        if (mensaje[i]) == '!'{
            total++
        }
    }
    return total
}
func main() {
    scanner := bufio.NewScanner(os.Stdin)
    var nombre string
    max := -1
    scanner.Scan()
    num_personas, _ := strconv.Atoi(strings.TrimSpace(scanner.Text()))
    
    for j := 0; j < (num_personas); j++{
        scanner.Scan()
        linea := scanner.Text()

        
        partes := strings.SplitN(linea, " ", 2)

        nombre2 := partes[0]
        mensaje := ""
        if len(partes) > 1 {
            mensaje = partes[1] 
        }
        if contar(mensaje) > max{
            max = contar(mensaje)
            nombre = nombre2
        }
    }
    fmt.Print(nombre," ",max)
}
InicioEventosBlogRecursosCursosEquipo