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"Reto #5Basic 2 solvedOpen
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
Nlí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.
Example
Input
3 Juan ¡Hola! Maria ¡¡Si!! Pedro Ok
Output
Maria 2
Maria tiene 2 signos '!', Juan tiene 1 y Pedro tiene 0. Maria gana por tener la mayor cantidad.
Community solutions
Each one passed 100% of the test cases in the sandbox.
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)
}