.campion
conectare | înregistrare | căutare
Pagina principală » Probleme » subtitrare

ultima problemă
grupă: mică
sursă: OMI 2016
ultimul articol
autor: Prof. Radu Vişinescu
ultimul software
autor: Prof. Emanuela Cerchez
subtitrare


Timp maxim de execuţie / test:
0.1s
Memorie totala disponibilă / stivă:
2MB / 1MB

Gabriel şi-a cumpărat un dvd-player care poate afişa pentru filme subtitrările în format „sub”. El are şi filme cu subtitrări în format „srt” şi doreşte să transforme aceste fişiere în format „sub”.
Subtitrările în format „srt” sunt compuse din una sau mai multe secţiuni separate prin câte o linie vidă. Fiecare secţiune are următoarea structură:
− pe prima linie din cadrul secţiunii se află un număr natural ce reprezintă numărul secţiunii (secţiunile fiind numerotate începând cu 1);
− pe a doua linie din cadrul secţiunii se află un text de forma:
hh:mm:ss,fff --> hh:mm:ss,fff
ce reprezintă timpul la care începe afişarea subtitrării din secţiunea curentă, urmat de timpul la care dispare subtitrarea din secţiunea curentă (hh este ora, mm este minutul, ss este secunda, iar fff reprezintă miimea de secundă), cei doi timpi fiind separaţi prin --> (un spaţiu, două caractere minus, urmate de caracterul > şi încă un spaţiu);
− pe următoarele linii din secţiune se află, pe una sau mai multe linii, textul subtitrării care va fi afişat.
În formatul ″sub″ fiecare secţiune va fi convertită într-o singură linie de forma:
{FI}{FF}text
unde FI reprezintă frame-ul la care începe afişarea subtitrării curente, FF reprezintă frame-ul la care dispare subtitrarea curentă, iar text reprezintă textul subtitrării din cadrul secţiunii corespunzătoare. Dacă în formatul ″srt″ existau mai multe linii de text în subtitrare, atunci în formatul ″sub″ acestea vor fi scrise pe aceeaşi linie, separate prin caracterul ′|′.
Un film este alcătuit dintr-o succesiune de imagini denumite frame-uri, acestea fiind numeroate de la 1 la numărul total de frame-uri. Toate filmele pe care le are Gabriel au 25 de frame-uri/secundă, adică într-o secundă se vor vizualiza 25 de frame-uri. FI, respectiv FF se calculează prin transformarea celor doi timpi de forma hh:mm:ss,fff în secunde, după care se înmulţesc cu 25 şi apoi se reţine partea întreagă.
De exemplu,
00:02:01,029=2*60+1+0.029=121.029s; 121.029*25=3025.725 [3025.725]=3025

Cerinţă

Scrieţi un program care să convertească o subtitrare din format „srt” în format „sub”.

Date de intrare

Fişierul de intrare subtitrare.in conţine subtitrarea unui film în format „srt”.

Date de ieşire

Fişierul de ieşire subtitrare.out va conţine subtitrarea filmului în format „sub”.

Restricţii

• Fişierul de intrare conţine maxim 5000 de linii.
• Liniile fişierului de intrare conţin maxim 100 de caractere din codul ASCII.
• O secţiune poate avea oricâte linii de text, iar numărul maxim de secţiuni este 2000.
• În fişierul de ieşire nu sunt admise linii vide sau spaţii suplimentare (altele decât cele existente în textul subtitrării în format ″srt″).
• 00 ≤ hh ≤ 23; 00 ≤ mm ≤ 59; 00 ≤ ss ≤ 59; 000 ≤ fff ≤ 999.

Exemple

subtitrare.insubtitrare.outExplicaţii
1 00:00:02,000 --> 00:00:08,000 Ce faci la Jakarta? Cauti o slujba? 2 00:01:58,720 --> 00:02:01,029 Invata din greselile mele. {50}{200}Ce faci la Jakarta?|Cauti o slujba? {2968}{3025}Invata din greselile mele. 00:00:02,000=2s; [2*25]=50
00:00:08,000=8s; [8*25]=200
00:01:58,720=1*60+58+0.720=118.720s; 118.72*25=2968 [2968]=2968
00:02:01,029=2*60+ 1+0.029=121.029s; 121.029*25=3025.725 [3025.725]=3025

autor: Prof. Constantin Creţu
propunător: Prof. Emanuela Cerchez
Colegiul Naţional ″Emil Racoviţă″
emanuela.cerchez@gmail.com
Articole recomandate
Probleme recomandate
Chestionare recomandate
surse trimise | ajutor