1526 - Align: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Enunţ== Pe lângă marea lui pasiune pentru informatică, lui Andino îi place să se joace cu fişierele. El deschide la întâmplare fişiere text şi se întreabă dacă poate alinia textul la stânga sau la dreapta. Cu toate că el este la curent cu tot ce se întâmplă în domeniul informaticii, el utilizează un editor de text primitiv care nu are funcţii de aliniere, aşa că vă roagă pe voi să-l ajutaţi. ==Cerinţă== Să se alinieze un text dat la stânga s...
 
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 44: Line 44:
==Explicaţie==
==Explicaţie==
Textul a fost aliniat la dreapta.
Textul a fost aliniat la dreapta.
==Exemplu 3==
;align.in
:3     
:text linia 1
:text pentru linia 2
:textul pentru linia trei
;align.out
:Date de intrare invalide.


==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#1526 align
#1526 align
def align_text(lines, alignment):
def align_text(lines, alignment):
Line 59: Line 69:


     return aligned_text
     return aligned_text
def validate_input(n, alignment, lines):
    if not (alignment == 'S' or alignment == 'D'):
        return False, "Caracterul de aliniere trebuie să fie 'S' sau 'D'."
    if n != len(lines):
        return False, "Numărul specificat de linii nu corespunde numărului real de linii citite."
    return True, None




def main():
def main():
     with open("align.in", "r") as input_file, open("align.out", "w") as output_file:
     with open("align.in", "r") as input_file, open("align.out", "w") as output_file:
         n, alignment = input_file.readline().strip().split()
         try:
        n = int(n)
            n, alignment = input_file.readline().strip().split()
        lines = [input_file.readline().strip() for _ in range(n)]
            n = int(n)
            lines = [input_file.readline().strip() for _ in range(n)]
        except ValueError:
            print("Date de intrare invalide.")
            output_file.write("Date de intrare invalide.")
            return
 
        is_valid, error_message = validate_input(n, alignment, lines)
 
        if not is_valid:
            print("Numar invalid: " + error_message)
            output_file.write("Numar invalid: " + error_message)
            return


         aligned_text = align_text(lines, alignment)
         aligned_text = align_text(lines, alignment)
Line 71: Line 103:
         for aligned_line in aligned_text:
         for aligned_line in aligned_text:
             output_file.write(aligned_line + "\n")
             output_file.write(aligned_line + "\n")


if __name__ == "__main__":
if __name__ == "__main__":
     main()
     main()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 18:31, 9 February 2024

Enunţ[edit | edit source]

Pe lângă marea lui pasiune pentru informatică, lui Andino îi place să se joace cu fişierele. El deschide la întâmplare fişiere text şi se întreabă dacă poate alinia textul la stânga sau la dreapta. Cu toate că el este la curent cu tot ce se întâmplă în domeniul informaticii, el utilizează un editor de text primitiv care nu are funcţii de aliniere, aşa că vă roagă pe voi să-l ajutaţi.

Cerinţă[edit | edit source]

Să se alinieze un text dat la stânga sau la dreapta.

Date de intrare[edit | edit source]

Fişierul de intrare align.in conţine pe prima linie numărul n, numărul de linii din fişierul text şi un caracter x. Dacă x este 'S', atunci textul se va alinia la stânga, iar dacă x este 'D', se va alinia la dreapta. Pe următoarele n linii se citeşte textul din fişierul lui Andino.

Date de ieşire[edit | edit source]

Fişierul de ieşire align.out va conţine pe n linii textul aliniat.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • lungimea unei linii nu va depăşi 200
  • dacă îl veţi ajuta pe Andino, veţi primi 100 de puncte şi probabil îl veţi convinge pe Andino să folosească un alt editor de texte

Exemplu 1[edit | edit source]

align.in
3 S
text linia 1
text pentru linia 2
textul pentru linia trei
align.out
text linia 1
text pentru linia 2
textul pentru linia trei

Explicaţie[edit | edit source]

Textul a fost aliniat la stanga.

Exemplu 2[edit | edit source]

align.in
3 D
text linia 1
text pentru linia 2
textul pentru linia trei
align.out
text linia 1
text pentru linia 2
textul pentru linia trei

Explicaţie[edit | edit source]

Textul a fost aliniat la dreapta.

Exemplu 3[edit | edit source]

align.in
3
text linia 1
text pentru linia 2
textul pentru linia trei
align.out
Date de intrare invalide.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 1526 align

def align_text(lines, alignment):

   max_length = max(len(line) for line in lines)
   aligned_text = []
   for line in lines:
       if alignment == 'S':
           aligned_text.append(line.ljust(max_length))
       elif alignment == 'D':
           aligned_text.append(line.rjust(max_length))
   return aligned_text


def validate_input(n, alignment, lines):

   if not (alignment == 'S' or alignment == 'D'):
       return False, "Caracterul de aliniere trebuie să fie 'S' sau 'D'."
   if n != len(lines):
       return False, "Numărul specificat de linii nu corespunde numărului real de linii citite."
   return True, None


def main():

   with open("align.in", "r") as input_file, open("align.out", "w") as output_file:
       try:
           n, alignment = input_file.readline().strip().split()
           n = int(n)
           lines = [input_file.readline().strip() for _ in range(n)]
       except ValueError:
           print("Date de intrare invalide.")
           output_file.write("Date de intrare invalide.")
           return
       is_valid, error_message = validate_input(n, alignment, lines)
       if not is_valid:
           print("Numar invalid: " + error_message)
           output_file.write("Numar invalid: " + error_message)
           return
       aligned_text = align_text(lines, alignment)
       for aligned_line in aligned_text:
           output_file.write(aligned_line + "\n")

if __name__ == "__main__":

   main()

</syntaxhighlight>