Revizia anterioară Revizia următoare
| Fișierul intrare/ieșire | ctrlnode.in, ctrlnode.out | Sursă | ad-hoc |
|---|---|---|---|
| Autor | David Demetriad | Adăugată de |
|
| Timp de execuție pe test | 0.5 sec | Limită de memorie | 65536 KB |
| Scorul tău | N/A | Dificultate | N/A |
Vezi soluțiile trimise | Statistici
Control Node 2
Ansible reprezintă o serie de utilitare software ce pot fi folosite în stil programatic, implementând cod, ce are ca scop următoarele dar nu numai: managementul serverelor prin configurarea și aprovizionarea acestora cu pachetele și programelor informatice necesare pentru o cât mai bună comunicare între acestea și nodul de control ( serverul de pe care acțiunea de coordonare este inițiată ).
Mai multe detalii aici:
https://en.wikipedia.org/wiki/Ansible_(software)
Modul de lucru cu serverele este reprezentat de un inventar ( o listă de servere grupate după diferite criterii cum ar fi rețeaua de care aparțin conform sistemului IPv6 sau scopul / tipul lor: web, database etc.). Formatul de completare al acestor fișiere este în felul următor:
[nume_server]
Grupa1/ server1
Grup2/ server2
...
Asta înseamnă că o grupă poate avea orice nume format din litere și cifre, iar aceasta să aibă în subordine atât mai multe grupe de servere, cât și servere individuale descrise prin IP-ul lor ( eventual descriindu-se și un alias, adică un locțiitor pentru adresa sa ). În final, mai există grupa “all” ce include fiecare altă subgrupa și astfel toate serverele. În problema de față notațiile vor fi simplificate. Mai precis serverele vor apărea sub forma adresei lor IPv6 ( așa cum vom explica mai jos ), iar grupele vor apărea după următorul format: “group
Grupele sunt despărțite între ele prin câte o linie liberă, iar după ultima grupă va exista o linie formată din caractere “#” , cel puțin 3, cel mult 20, ceea ce indică finalul inventarului. Fiecare entiate – fie ea grupă ori server IP, va fi scrisă pe o singură linie, făcându-se astfel distincția între fiecare dintre ele. În final, vor mai fi prezente în fișier un de caractere și un număr. Primul dintre ele reprezintă o grupă, fie ea G. Prima cerință constă în afișarea tuturor serverelor aflate în subordinea acelei grupe, direct sau indirect, în ordine lexicografică. Ultima linie va conține unul din numerele 1 și 2, reprezentând numerele de ordine pentru cele 2 cerințe ale problemei.
Un IPv6 are următoarea structură:
y1 : y2 : y3 : y4 : y5 : y6 : y7 : y8
Fiecare element yi ( 0 < i <= 8 ) este format din 4 caractere hexazecimale, fie ele ‘x1x2x3x4’ , unde xi este orice valoare în mulțimea 0 – 9 și a – f (unde a – f reprezintă primele 6 litere mici din alfabetul latin și reprezintă valorile 10-15 din baza 16 – hexazecimală) . Astfel, șirul y1:y2:y3:y4 reprezintă identificatorul de rețea din care face parte serverul curent, în vreme ce y5:y6:y7:y8 reprezintă numărul de ordine al serverului curent în cadrul rețelei sale. Ordinea lexicografică a două servere este definită în felul următor: Fie două servere ( să le zicem A și B ) având IPv6-urile:
A —> y1 : y2 : y3 : y4 : y5 : y6 : y7 : y8
B —> z1 : z2 : z3 : z4 : z5 : z6 : z7 : z8
A este mai mic decât B dacă există un i ( 0 < i <= 8 ) , astfel încât ( z1 = y1, z2 = y2, ..., zi-1 = yi-1 și yi < zi). În acest sens, yi este mai mic decât zi dacă și numai dacă numărul hexazecimal format din caracterele ce îl compun pe yi este mai mic decât numărul hexazecimal format din caracterele ce îl compun pe zi, ceea ce e înseamnă că reprezentarea zecimală în baza 10 a lui yi să fie mai mică decât cea a lui zi.
Cerință
1. Să se afișeze în ordinea lexicografică a IPv6-urilor toate serverele aflate în subordinea directă sau indirectă lui G.
2. Dintre serverele din subordinea lui G să se afișeze care este rețeaua care are cele mai multe servere în componență.
Date de intrare
Fișierul de intrare ctrlnode.in va fi compus în felul următor:
[group *]
Entity1
Entity2
....
Entityk (k <= 20)
[...
....
#######
group\* | all
c
Unde “ * ” poate fi orice număr natural mai mic decât 1 milion, iar “Entity *” poate fi o grupă de servere sau în sine un server. În final c poate fi 1 sau 2, în funcție de cerința de rezolvat.
Date de ieșire
În fișierul de ieșire ctrlnode.out va conține în funcție de cerință următoarele: 1. IP-urile ( de tipul IPv6 ) în ordine lexicografică unele sub altele, afișate în același format în care au fost citite. 2. Rețeaua cu cele mai multe noduri, aflate în subordinea directă sau indirectă a grupei G. ( primele 4 numere hexazecimale din IP separate prin caracterul ‘:’ ). În cazul în care există mai multe rețele de acest fel se va afișa rețeaua cu numărul cel mai mic de ordine. (lexicografic).
Restricții
- ... ≤ ... ≤ ...
Exemplu
| ctrlnode.in | ctrlnode.out |
|---|---|
| This is some text written on multiple lines. |
This is another text written on multiple lines. |
Explicație
...