Son zamanlar cənab Həmsadə Tehran bələdiyyəsinin mərkəzi yol nəzarəti şöbəsində İT mühəndisi kimi çalışır. O, qanun pozan nəqliyyat vasitələrinin avtomatik nömrə tanıma və cərimə biletlərinin verilməsi ilə cərimələnəcəyi yeni yol nəzarət sisteminə cavabdehdir. Sistem bir neçə həftədir istehsal mühitində işləyir və indi cənab Həmsadənin biletləri vermə vaxtıdır. Lakin, sistemi hazırlayarkən, verilənlər bazası serverinin davamlı yaddaşı ciddi bir avadanlıq qəzasına uğradı və bütün məlumatlar itirildi. Öz bədbəxtliyinə gülərək, cənab Həmsadə məlumatların bərpası ümidi ilə digər sistemləri yoxlamağa başladı. Mövcud olan yeganə məlumatlar tətbiq serverində qalan log fayllarıdır. Xoşbəxtlikdən, bütün məlumat giriş formaları tətbiq serverinin xidmət qatında qeyd olunur və beləliklə, itirilmiş məlumatlar log fayllarından tamamilə bərpa edilə bilər. Lakin belə məlumat bərpa tapşırıqları cənab Həmsadə üçün çox mürəkkəbdir və yeni bir verilənlər bazası qurmaq, bərpa edilmiş məlumatları idxal etmək və biletlərin verilməsi üçün bütün arxitekturanı yenidən konfiqurasiya etmək üçün kifayət qədər vaxt yoxdur. Çox sıxılmış hisslərlə cənab Həmsadə sizdən kömək istəyir. Siz bütün log fayllarını oxuyan və cərimə biletlərini verən bir proqram yazmalısınız. Aşağıdakı paraqraflarda cənab Həmsadə Tehran yol qaydalarını, yol nəzarət sistemi tərəfindən təmin edilən xidmətləri, log fayllarının formatını və biletlərin verilməsi qaydalarını təsvir edir.

Hər bir yol Tehran'ın üç yol-spesifik zonalarından birində hesab olunur:
Mərkəzi Yol Məhdudiyyət Zonu (CTRZ)
Cüt/Tək Məhdudiyyət Zonu (EORZ)
Məhdudiyyətsiz Zona (UZ)
Adi şəxsi nəqliyyat vasitələrinin bu vaxt intervallarında CTRZ daxil olması normalda icazə verilmir:
Şənbə - Çərşənbə arasında 06:30 - 17:00
Cümə axşamı 06:00 - 13:30
Nəqliyyat vasitələrinin qeydiyyat nömrəsi cüt rəqəmlə bitən adi şəxsi nəqliyyat vasitələrinin bu vaxt intervallarında EORZ daxil olması icazə verilmir:
Bazar və Çərşənbə axşamı 06:30 - 19:00
Cümə axşamı 06:30 - 17:00
Nəqliyyat vasitələrinin qeydiyyat nömrəsi tək rəqəmlə bitən adi şəxsi nəqliyyat vasitələrinin bu vaxt intervallarında EORZ daxil olması icazə verilmir:
Şənbə, Bazar ertəsi və Çərşənbə 06:30 - 19:00
Beləliklə, bu zona məhdudiyyətləri cümə günləri (İranda rəsmi həftə sonu) tətbiq edilmir. Bəzi nəqliyyat vasitələri (ictimai nəqliyyat və təcili xidmətlər daxil olmaqla) istənilən vaxt CTRZ və EORZ daxil ola bilər. Adi nəqliyyat vasitələri də bir günlük icazə alaraq bu zonalara daxil ola bilər, lakin bu məsələdə icazə alınmasını nəzərə almamalısınız. Əgər bir nəqliyyat vasitəsi qanunsuz olaraq CTRZ və ya EORZ daxil olarsa, cərimələnməlidir. Hər bir nəqliyyat vasitəsi zona məhdudiyyəti pozuntuları üçün gündə ən çox bir dəfə cərimələnməlidir. Əgər bir nəqliyyat vasitəsi üçün bir gündə həm CTRZ, həm də EORZ pozuntuları baş verərsə, təbii olaraq daha yüksək cərimə olan CTRZ pozuntusu nəzərə alınır. Hər bir yol əvvəlcə UZ olaraq qəbul edilir, lakin bu vəziyyət elanlara əsasən dəyişə bilər. Bütün belə elanların yeni qaydaları elan günündən sonrakı gündən tətbiq edilməlidir. Eyni şəkildə, heç bir nəqliyyat vasitəsi əvvəlcə zona qaydalarından azad edilmir, lakin istisnalar zamanla əlavə edilir və çıxarılır. Belə dəyişikliklər də növbəti gündən etibarən nəzərə alınmalıdır.
Tətbiq serveri tərəfindən təmin edilən xidmətlər aşağıdakılardır. Hər bir xidmət, xidmət adından başlayaraq parametrlərlə davam edən tək bir sətirdə yazılmış müvafiq log mesajına malikdir. Xidmət təriflərində və nümunələrində görəcəyiniz kimi, bir xidmətin parametrləri müəyyən bir sırada çap olunur. Xidmət növündən asılı olmayaraq, hər bir log mesajının parametr siyahısı xüsusi bir parametr cütü ilə başlayır (timestamp adlanır): "day" və "time". Bir timestamp təbii olaraq müvafiq xidmət sorğusunun dəqiq vaxtını göstərir. "day" parametri sistemin yerləşdirildiyi gündən (gün 0 adlanır) keçən günlərin sayını göstərən müsbət tam ədəddir. "time" parametri həmin gündəki sorğunun vaxtını "HH:mm:ss" formatında göstərir (00 ≤ HH ≤ 23, 00 ≤ mm, ss ≤ 59).
setRoadZone(day, time, zone, roads)
"zone" parametri "UZ", "CTRZ" və ya "EORZ" ola bilər. "roads" parametri zəruri olmayan fərqli yol adlarının boş olmayan siyahısını ehtiva edir. Növbəti günün əvvəlindən etibarən müvafiq yollar verilmiş "zone"da qəbul edilməlidir (əvvəlki zona vəziyyətlərini ləğv edərək). Log nümunələri:
setRoadZone 2 "09:12:53" "CTRZ" "Enghelab" "Sa'di" "Ferdowsi" "Ferdowsi"
setRoadZone 5 "14:32:01" "EORZ" "Resalat"
setRoadZone 12 "00:00:59" "UZ" "Persian_Gulf"
addZoneException(day, time, vehicles) | removeZoneException(day, time, vehicles)
"vehicles" parametri zəruri olmayan fərqli nəqliyyat vasitələrinin qeydiyyat nömrələrinin boş olmayan siyahısını ehtiva edir. Növbəti günün əvvəlindən etibarən müvafiq nəqliyyat vasitələri {girmə hallarında cərimələnməməlidir | cərimələnməlidir} CTRZ və ya EORZ qadağan olunmuş vaxtlarda. Bu komandalar verilmiş nəqliyyat vasitələrinin əvvəlki vəziyyətini ləğv edir (hansı ki, eyni vəziyyət ola bilər). Log nümunələri:
addZoneException 1 "09:00:13" "1234567" "9876543"
removeZoneException 3 "15:33:02" "1234567" "9876345"
addPhotoInfo(day, time, photoId, road, vehicles)
Bu sistemin əsas xidmətlərindən biridir. O, istifadəçi interfeysi qatından çağırılmır. O, nəzarət kameraları tərəfindən çəkilən şəkilləri analiz edən xarici görüntü işləmə serveri tərəfindən çağırılır. Bu xidmət bir fotoşəkil çəkildikdə və analiz edildikdə çağırılır. Analiz edilmiş fotoşəklin identifikatoru "photoId" parametrində verilir, müsbət tam ədəd. "road" parametri fotoşəklin çəkildiyi yolun adını saxlayır. Görüntü işləmə serveri fotoşəkildəki nəqliyyat vasitələrini aşkar edir və onların nömrə nişanlarından qeydiyyat nömrələrini çıxarır. "vehicles" parametri bu nəqliyyat vasitələrinin qeydiyyat nömrələrinin siyahısını təmin edir. Bu siyahının boş olması mümkündür, çünki fotoşəkildə heç bir nəqliyyat vasitəsi olmaya bilər. Buradakı "timestamp" parametri fotoşəklin çəkilmə anına aiddir. Log nümunələri:
addPhotoInfo 18 "03:18:43" 3324249 "Pastor" "6256256" "8888310"
addPhotoInfo 4 "20:47:31" 54 "Mokhberoddoleh,_sar-e_Sa'di"
addPhotoInfo 27 "06:39:14" 112385612 "17-e_shahrivar" "1006016"
Aşağıdakı bəyanatları qəbul edə bilərsiniz:
Parametr obyektləri həmişə aşağıdakı formalardan birindədir:
Tam ədədlər: Həmişə qeyri-mənfi
Sətirlər: Həmişə dırnaq işarələri (") ilə əhatə olunmuş
Siyahılar: Həmişə son parametr kimi görünür, sətirin sonuna qədər boşluqla ayrılmış sətirlərdən ibarətdir
Xidmət adları və parametr obyektləri (sətirlər, tam ədədlər və siyahı üzvləri) daxil olmaqla bütün tokenlər tək bir boşluqla ayrılır.
"time" parametri "HH:mm:ss" formatında, dəqiq 8 simvoldan ibarətdir və onun üç hissəsi də dəqiq 2 rəqəmdir (əgər 10-dan azdırsa, "0" ilə doldurulmuş).
Yol adları İngilis əlifbası (həm kiçik, həm də böyük hərflər), rəqəmlər, tire (-), alt xətt (_), nöqtə (.), vergül (,) və tək dırnaq işarəsi (') ilə ibarətdir. Yol adları boş deyil və 100 simvoldan uzun deyil.
Bütün nəqliyyat vasitələrinin qeydiyyat nömrələri dəqiq 7 rəqəmdən ibarət sətirlərdir.
Hər bir yol və ya nəqliyyat vasitəsi həmişə eyni sətirlə istinad edilir.
Heç bir iki timestamp dəqiq eyni deyil.
Eyni gündə ziddiyyətli komandalar varsa, daha yeni komanda (böyük timestamp olan) köhnə olanı ləğv etməlidir. "addPhotoInfo" xidmətinin hər bir photoId üçün ən çox bir dəfə çağırıldığını qəbul edə bilərsiniz.
Hər bir nəqliyyat vasitəsinin qeydiyyat nömrəsi hər bir fotoşəkildə ən çox bir dəfə görünür.
Sistemin iş müddəti ən çox 300 gündür.
Bir nəqliyyat vasitəsi qanunsuz zona girişinə görə cərimələnməlidir, hətta fotoşəkili vaxt sərhədlərində çəkilmiş olsa belə (məsələn, Bazar ertəsi 6:30:00).
Nəqliyyat vasitələri fotoşəkil analiz nəticələrinə əsasən cərimələnməlidir. Daha əvvəl qeyd edildiyi kimi, zona-giriş cərimə biletləri hər bir nəqliyyat vasitəsi üçün gündə ən çox bir dəfə verilməlidir. Belə bir pozuntuya aid olan bir günün bütün fotoşəkilləri müvafiq cərimə biletinə əlavə edilməlidir. Biletin foto əlavələri vaxtlarına əsasən artan qaydada sıralanmalıdır. Qeyd edək ki, əgər bir nəqliyyat vasitəsi üçün həm CTRZ, həm də EORZ girişləri baş verərsə, hər iki pozuntunun bütün fotoşəkilləri əlavə edilməlidir, lakin bilet CTRZ cəriməsi ilə verilməlidir. Çap edilmiş biletlərin sırası da vacibdir. Biletlər əsasən nəqliyyat vasitələrinə görə sıralanmalıdır ki, onların qeydiyyat nömrələri leksikoqrafik qaydada görünsün. Bir nəqliyyat vasitəsinin biletləri daha sonra pozuntu gününə əsasən artan qaydada sıralanmalıdır.
Giriş bir neçə test halından ibarətdir. Hər bir test halı log fayllarındakı sətirlərin ümumi sayını göstərən tək bir tam ədəd N ilə başlayan bir sətirlə başlayır (1 ≤ N ≤ 1000). İkinci sətir bir sətir W və iki müsbət tam ədəd CTP və EOP ehtiva edir. Sətir yerləşdirmə gününün həftə gününü göstərən sözlərdən biridir: "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", və ya "Friday". CTP və EOP nömrələri CTRZ və EORZ qanunsuz giriş üçün cərimə dəyərləridir (EOP < CTP). Növbəti N sətirin hər biri əvvəlcədən müəyyən edilmiş formatda bir xidmət logunu ehtiva edir. Loglar xüsusi bir qaydada sıralanmayıb, çünki bu, bir çox log faylının birləşmə nəticəsidir. Hər sətir ən çox 1000 simvoldan ibarətdir. Girişdəki bütün tam ədədlər 10^9-dan kiçikdir. Giriş "0" (tırnaq işarələrini buraxın) ehtiva edən bir sətirlə başa çatır.
Hər bir test halı üçün, əvvəllər təyin edilmiş qaydada cərimə biletlərini çap etməlisiniz. Hər bir biletin əsas məzmunu və bir və ya daha çox əlavə edilmiş fotoşəkili var. Əsas məzmun əvvəlcə aşağıdakı formatda tək bir sətirdə çap edilməlidir:
vehicle: "NUMBER", day: DAY, offence: "OFFENCE", penalty: PENALTY
Bu şablondakı yer tutucuların mənası:
NUMBER: Qanun pozan nəqliyyat vasitəsinin qeydiyyat nömrəsi
DAY: Pozuntu günü; timestamp parametrləri kimi nömrələnmişdir
OFFENCE: Bu, pozuntu növünü göstərir və həmişə aşağıdakı sətirlərdən biridir:
CTRZ qanunsuz giriş
EORZ qanunsuz giriş
CTRZ EORZ qanunsuz giriş
PENALTY: Bu biletdə nəqliyyat vasitəsi sürücüsünün cərimələndiyi məbləğ
Hər bir foto əlavə ayrıca sətirdə görünməlidir. Onlar əvvəlcədən təyin edilmiş qaydada çap edilməlidir. Foto əlavələr aşağıdakı formatda olmalıdır:
photo: PHOTO-ID, time: "TIME", road: "ROAD"
Foto əlavələrinin şablonundakı yer tutucuların mənası:
PHOTO-ID: Əlavə edilmiş fotoşəklin identifikatorudur. Bu, real bilet tərtibatçısı tərəfindən fotoşəkilin çap edilməsi üçün istifadə olunur.
TIME: Müvafiq fotoşəklin çəkilmə vaxtı "HH:mm:ss" formatında (timestamp ilə tam eyni)
ROAD: Müvafiq fotoşəklin çəkildiyi yolun adı
Xüsusilə parametrlərin sırası, boşluqlar, durğu işarələri və dırnaq işarələri daxil olmaqla, təyin edilmiş formatlara dəqiq əməl edin. Hər iki ardıcıl test halı arasında "###" ehtiva edən bir sətir çap edin.
Nümunə 1