Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pp:22:teme:racket-pitagora [2022/02/28 23:03]
mihaela.balint [Triplete pitagoreice primitive]
pp:22:teme:racket-pitagora [2022/03/27 17:00] (current)
mihaela.balint [Changelog]
Line 1: Line 1:
 ====== Triplete pitagoreice primitive ====== ====== Triplete pitagoreice primitive ======
  
-  * Data publicării: ​01.03.2022 +  * Data publicării: ​28.02.2022 
-  * Data ultimei modificări: ​01.03.2022 ([[pp:​22:​teme:​racket-pitagora#​changelog]])+  * Data ultimei modificări: ​28.02.2022 ([[pp:​22:​teme:​racket-pitagora#​changelog]])
   * Tema (o arhivă .zip cu fișierul ppt.rkt (plus cryptosystem.rkt în etapa 3) se va încărca pe [[https://​vmchecker.cs.pub.ro/​ui/#​PP|vmchecker]]   * Tema (o arhivă .zip cu fișierul ppt.rkt (plus cryptosystem.rkt în etapa 3) se va încărca pe [[https://​vmchecker.cs.pub.ro/​ui/#​PP|vmchecker]]
 ===== Descriere generală și organizare ===== ===== Descriere generală și organizare =====
Line 124: Line 124:
   * ex: pentru n = 5, tuplul de start (1,1,2,3) și funcțiile corespunzătoare transformărilor Q1, Q2, Q3 => ''​%%'​(5 1 6 7)%%''​   * ex: pentru n = 5, tuplul de start (1,1,2,3) și funcțiile corespunzătoare transformărilor Q1, Q2, Q3 => ''​%%'​(5 1 6 7)%%''​
  
-Funcția get-nth-tuple este un exemplu de abstractizare. Pe baza ei veți implementa ultimele funcții din temă - care ne permit obținerea celui de-al n-lea TPP din arbore prin cele două metode distincte, fără a scrie două bucăți foarte similare de cod.+Funcția get-nth-tuple este un exemplu de abstractizare. ​Abstractizare înseamnă că, dacă ar exista o a treia metodă de generare a arborelui, bazată pe, de exemplu, cvintete și niște funcții capabile să calculeze dintr-un cvintet trei cvintete următoare, atunci get-nth-tuple ar funcționa fără modificări și pentru această metodă (apelat pe argumente adecvate). Cu alte cuvinte, în funcție nu trebuie să verificăm cu ce fel de tupluri lucrăm, ci funcția trebuie să aplice "​orbește"​ funcțiile primite ca parametru pe tuplul primit ca parametru, știind că acestea vor produce rezultatul așteptat (triplet, cvartet, cvintet sau orice altceva). 
 + 
 +Pe baza lui get-nth-tuple ​veți implementa ultimele funcții din temă - care ne permit obținerea celui de-al n-lea TPP din arbore prin cele două metode distincte, fără a scrie două bucăți foarte similare de cod.
  
 ===== Etapa 3 ===== ===== Etapa 3 =====
Line 145: Line 147:
   * algoritmul de decriptare este similar, formula fiind (c - k) mod 27 (c reprezintă un cod din mesajul criptat)   * algoritmul de decriptare este similar, formula fiind (c - k) mod 27 (c reprezintă un cod din mesajul criptat)
  
-Veți lucra doar în fișierul cryptosystem.rkt,​ însă este necesar să aveți în același folder și fișierul ppt.rkt din etapa 2. +Veți lucra doar în fișierul cryptosystem.rkt,​ însă este necesar să aveți în același folder și fișierul ppt.rkt din etapa 2 (iar arhiva încărcată pe vmchecker va conține ambele fișiere)
  
 Funcțiile pe care va trebui să le implementați sunt: Funcțiile pe care va trebui să le implementați sunt:
Line 202: Line 204:
 ppt-stream-in-tree-order ppt-stream-in-tree-order
 </​file>​ </​file>​
-  * ppt-stream-in-tree-order corespunde parcurgerii în lățime (BFS) a arborelui TPP pe care îl cunoaștem+  * ppt-stream-in-tree-order ​este un flux care corespunde parcurgerii în lățime (BFS) a arborelui TPP pe care îl cunoaștem
  
 Exemplu: Exemplu:
Line 227: Line 229:
 </​file> ​ </​file> ​
   * pairs primește 2 fluxuri ordonate G și H   * pairs primește 2 fluxuri ordonate G și H
-  * notăm cu g un element din G și cu h un element din H (pentru un același index va fi întotdeauna adevărat că g < h, în sensul că pairs este menit să fie apelat doar pe fluxuri ​care respectă această condiție) +  * notăm cu g un element din G și cu h un element din H (pentru un același index considerăm,​ fără să verificăm, că va fi întotdeauna adevărat că g < h, în sensul că în final pairs este menit să fie apelat doar pe fluxurile G = {1,3,5,7 ...} și H = {3,5,7,9 ...} care respectă această condiție) 
-  * pairs întoarce un flux infinit de perechi de forma (g, h) (unde g < h), în ordinea crescătoare a valorii lui h (și în ordinea crescătoare a valorii lui g, dacă perechile au același h)+  * pairs întoarce un flux infinit de perechi de forma (g, h) conform algoritmului descris în schelet, în ordinea crescătoare a valorii lui h (și în ordinea crescătoare a valorii lui g, dacă perechile au același h) 
 +  * Atenție: pairs nu face nicio verificare (nu verifică dacă g și h sunt impare, nu verifică dacă g<h, nu verifică dacă cele două numere sunt prime între ele)! Aceste condiții vor fi asigurate de funcțiile următoare, pairs doar implementează metoda de construcție descrisă în schelet. În checker, pairs este apelat inclusiv pe fluxuri pentru care niciuna din condițiile anterioare nu se respectă, asigurând astfel că nu faceți verificările în altă parte decât se precizează în cerință.
  
 Exemplu: Exemplu:
Line 245: Line 248:
   * la început, G = {1,3,5,7 ...} și H = {3,5,7,9 ...}   * la început, G = {1,3,5,7 ...} și H = {3,5,7,9 ...}
   * fluxul rezultat va fi {(1,3), (1,5), (3,5), (1,7), (3,7), (5,7), (1,9), (3,9), (5,9) ...} (metoda de construcție e detaliată în schelet)   * fluxul rezultat va fi {(1,3), (1,5), (3,5), (1,7), (3,7), (5,7), (1,9), (3,9), (5,9) ...} (metoda de construcție e detaliată în schelet)
 +  * observați că în rezultatul funcției pairs apar și perechi de numere neprime între ele (de exemplu, perechea (3,9))
  
 <​file>​ <​file>​
Line 271: Line 275:
   * Tema este în primul rând o temă de programare funcțională - pentru care folosim Racket. Racket este un limbaj multiparadigmă,​ care conține și elemente "​ne-funcționale"​ (de exemplu proceduri cu efecte laterale), pe care **nu** este permis să le folosiți în rezolvare.   * Tema este în primul rând o temă de programare funcțională - pentru care folosim Racket. Racket este un limbaj multiparadigmă,​ care conține și elemente "​ne-funcționale"​ (de exemplu proceduri cu efecte laterale), pe care **nu** este permis să le folosiți în rezolvare.
   * Pentru fiecare etapă, checker-ul vă oferă un punctaj între 0 și 120 de puncte. Pentru a obține cele 1.33p din nota finală cu care este creditată tema de Racket, este suficient să acumulați 400 de puncte de-a lungul celor 4 etape. Un punctaj între 400 și 480 se transformă într-un bonus proporțional.   * Pentru fiecare etapă, checker-ul vă oferă un punctaj între 0 și 120 de puncte. Pentru a obține cele 1.33p din nota finală cu care este creditată tema de Racket, este suficient să acumulați 400 de puncte de-a lungul celor 4 etape. Un punctaj între 400 și 480 se transformă într-un bonus proporțional.
-  * După completarea celor 4 etape, veți prezenta tema asistentului,​ care poate modifica punctajul dat de checker dacă observă nereguli precum răspunsuri hardcodate, proceduri cu efecte laterale, implementări neconforme cu restricțiile din enunț.+  * Veți prezenta tema asistentului,​ care poate modifica punctajul dat de checker dacă observă nereguli precum răspunsuri hardcodate, proceduri cu efecte laterale, implementări neconforme cu restricțiile din enunț. ​
  
 ===== Resurse ===== ===== Resurse =====
Line 280: Line 284:
  
 ===== Changelog ===== ===== Changelog =====
-  * 01.03 (ora 00:00) - Am publicat etapa 1 (enunț + schelet), și etapele 2-4 (momentan doar enunț). ​  +  * 27.03 (ora 15:55) - Etapa 4 - Am adăugat (în schelet) precizarea că puteți folosi recursivitate explicită pentru a genera fluxurile G și H. 
 +  * 27.03 (ora 15:55) - Etapa 4 - Am adăugat (în această pagină) explicații despre comportamentul funcției pairs. 
 +  * 21.03 (ora 23:21) - Am publicat etapa 4. 
 +  * 14.03 (ora 23:14) - Am publicat etapa 3. 
 +  * 07.03 (ora 23:14) - Am publicat etapa 2. 
 +  * 28.02 (ora 23:25) - Am publicat etapa 1 (enunț + schelet), și etapele 2-4 (momentan doar enunț). ​
 ===== Referinţe ===== ===== Referinţe =====
  
pp/22/teme/racket-pitagora.1646082220.txt.gz · Last modified: 2022/02/28 23:03 by mihaela.balint
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0