Tabla de contenido
7-22 Horario del jefe
Titulo original:
Alguien publicó el horario de un jefe en Sina Weibo, indicando que se levanta a las 4:30 todos los días. Pero inmediatamente algunos cibernautas con mirada aguda preguntaron: Este horario está incompleto, ¿qué haces desde las nueve de la mañana hasta la una de la tarde?
Esta pregunta le pide que escriba un programa para verificar cualquier horario y encontrar el período de tiempo que no está escrito en él.
Formato de entrada:
La primera línea de entrada proporciona un número entero positivo N , que es el número de períodos de tiempo enumerados en el cronograma. Luego hay N líneas, cada línea proporciona un período de tiempo y el formato es:
hh:mm:ss - hh:mm:ss
Entre ellos hh
, se encuentran horas, minutos y segundos mm
de ss
dos dígitos, respectivamente. La primera vez es la hora de inicio y la segunda es la hora de finalización. La pregunta garantiza que todos los horarios estén dentro de un día (es decir, de 00:00:00 a 23:59:59); que el intervalo entre cada intervalo sea de al menos 1 segundo; y que dos intervalos de tiempo dados se superpongan como máximo en un punto final. no hay superposición de intervalos.
Formato de salida:
Enumere los intervalos que no aparecen en el horario en orden cronológico, ocupando cada intervalo una línea y en el mismo formato que la entrada. La pregunta garantiza que hay al menos un intervalo que debe generarse.
.
Ideas para resolver problemas:
- Importe
readline
el módulo y cree un objeto de interfaz: primeroreadline
introduzca el módulo y usecreateInterface
métodos para crear un objeto de interfazrl
. Este objeto establece el flujo de entrada en entrada estándar. - Leer entrada y almacenar: al escuchar
'line'
eventos, la entrada se almacena en una matrizbuf
. - Analiza la entrada y ordénala: utiliza
slice
el método para interceptar la matriz de entrada a partir del índice 1, elimina el primer elemento y asígnalo a una variabletimes
. Luego usesort
el método paratimes
ordenar la matriz en orden ascendente porque necesitamos procesarla en el orden de períodos de tiempo. - Inicializar variables: establezca la variable inicial
start
en una cadena'00:00:00'
, que indica el punto de tiempo de inicio del procesamiento, yres
establezca la variable inicial en una cadena vacía, utilizada para almacenar el período de tiempo de salida. - Procesar cada período de tiempo: use un
for of
bucle para recorrertimes
la matriz y asignar cada período de tiempo a una variablei
. Utilicesplit
el método para dividir el período de tiempo en dos tiempos y asignarlos a las variablesbegin
y respectivamenteend
. Sibegin
es mayorstart
, significa que falta un período de tiempo y el período de tiempo que falta se suma al resultadores
. Actualizadostart
a la hora de finalización del período de tiempo actualend
. - Procesar el último período de tiempo: si la hora de finalización del último período de tiempo
end
es menor que23:59:59
, significa que hay un período de tiempo sin procesar al final y se agregará al resultadores
. - Resultado de salida: utilícelo para
console.log
generar la cadena de resultado sin los espacios iniciales y finales.
.
Código JavaScript (nodo):
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
});
let buf = []
rl.on('line', (line) => {
buf.push(line)
})
rl.on('close', () => {
let times = buf.slice(1).sort()
let start = '00:00:00'
let res = ''
for (let i of times) {
let [begin, end] = i.split(' - ')
if (begin > start) {
res += `${
start} - ${
begin}\n`
}
start = end
}
if (start < '23:59:59') {
res += `${
start} - 23:59:59`
}
console.log(res.trim())
});
.