☠-es feladatsor 1

  • A megoldás tartalmazza a megoldandó feladat szövegét a megoldásnotebook első markdown cellájában!
  • Kommentekkel, illetve markdown cellákkal magyarázd, hogy éppen mit csinál az adott kódrészlet!
  • Magyarázat nélkül a beküldött feladatok csak fél feladatnak számítanak!
  • Az elkészített ábrák minden esetben rendelkezzenek ábrafeliratokkal (cím, tengelyfeliratok és − amennyiben indokolt − jelmagyarázat)! Amennyiben a beadott ábrákon nincsenek feliratok, az adott feladat automatikusan csak fél feladatnak számít!
  • A beadott notebookok Kernel -> Restart&Run All hatására a beadott formát reprodukálják!

☠ Feladat 1

Írjunk egy Rubik-kocka osztályt!

  • A turn tagfüggvénnyel tetszőleges módon lehessen rendesen forgatni,
  • 2 dimenzióba kiterítve és 3 dimenzióban is meg lehessen nézni az állapotát,
  • lehessen random állapotból indítani.

☠ Feladat 2

A feladat egy sorozat első néhány elemének legyártása és ábrázolása. A sorozatot a következő szabállyal adhatjuk meg. A sorozat csak a prímszámokon megy végig. Vesszük az adott prímszámot és felírjuk kettes számrendszerben. A kettes számrendszerbeli reprezentációját ezek után invertáljuk. Az invertált számot kivonjuk az eredetiből. Ezt a számot rendeljük hozzá a sorozat adott sorszámához. Néhány példa:

A sorozat első eleme a 2-ből indul ki: 2 kettes számrendszerben 10, amelynek inverze 01. A két szám különbsége 1, így a sorozat első eleme 1. A következő elem a 3-ból indul ki, amely kettes számrendszerben 11, melynek inverze 11, kettő különbsége 0, ez a sorozat második eleme. A harmadik elem az 5-ből indul ki: 101, melynek inverze 101, a kettő különbsége 0. A sorozat negyedik eleme 7-ből indul, amely 111, aminek inverze 111, a kettő különbsége 0. Az ötödik elem a 11-ből indul ki, amely 1011, aminek inverze 1101, a kettő különbsége -2. És így tovább.

Ábrázold a sorozat első 500 tagját! Látsz valami érdekeset? Most ábrázold a sorozat első 1000 tagját! Látsz valami érdekeset? Még mindig semmi? Próbáld meg az első 10.000 tagot! Figyelj arra, hogy ne kösd össze a pontokat, ábrázoljátok őket pontokként!

☠ Feladat 3

Készítsük el, örökléssel, a saját mátrix osztályunkat, aminek az exp() taggfüggvénye a mátrix exponciálisát adja vissza (tehát nem egyszerűen a mátrix elemeinek exponencializáltját). Az osztályunk minden más tekintetben ugyanúgy viselkedjen, mint a numpy mátrixosztálya. Kis segitség: https://docs.scipy.org/doc/numpy/user/basics.subclassing.html

☠ Feladat 4

Hanyadik az első prímszám, amely nagyobb, mint 1.000.000?

Legyen $p_i$ az $i$-edik prímszám. Ekkor

$p_1$ = 2, $p_2$ = 3, ... $p_{n-i}$ < 1.000.000, $p_n$ > 1.000.000

Írj egy python programot, ami kiszámolja n értékét! Egy effektíven megírt python program 2 másodperc alatt megoldja a feladatot.

Hogyha a te programod ennél jelentősen több ideig fut, próbálj gyorsabb megoldást találni. Az futási időlimit 60 másodperc, az ennél lassabban futó programok nem érnek maximális pontot.

Tipp:

  • először próbáld meg kisebb számokra (pl 100-ra).
  • egy adott cella futtatásához szükséges időt úgy tudod mérni, hogy a cella első sorába beírod, hogy %%time

☠ Feladat 5

Készíts egy interaktív ábrát mely egy egység sugarú kört ábrázol melybe egy szabályos $N$ csúcsú sokszög van rajzolva. $N$ értékét egy csúszka segítségével lehessen változtatni. A kör közepébe írjuk bele a sokszög kerületének a hosszának felét!

☠ Feladat 6

Írj egy tkp osztályt, ami pontrendszer tömegközéppontját határozza meg!

  • Egy N pontból álló pontrendszer osztály létrehozásához szükségünk van az N pont tömegére, és azok koordinátáira.
  • Osztályattribútumként számold ki a rendszer össztömegét és a tömegközéppontjának helyét!
  • Síkbeli és térbeli pontrendszerekre is működjön!
  • Legyen egy ábrázoló metódus, ami 2 illetve 3 dimenzióban pontokkal megjeleníti a rendszer tömegpontjait! A méretük legyen arányos a tömegükkel! A tömegközéppont eltérő jelöléssel (marker) szerepeljen! Egy szövegdobozt is illessz be ezen pont környezetébe (ne közvetlenül rá), amiből szövegesen is kiderül, hogy az a pont mit jelöl!
  • Teszteld például négyzeten és kockán, valamint egy tetszőleges, legalább 15 pontból álló ponthalmazon. A tömegek értékei pontonként eltérőek legyenek!
  • A + jellel lehessen két pontrendszert összeadni, azaz összefűzni a két pontrenszer elemeit! Mutass példát a működésére, az így kapott rendszert is ábrázold az előbb megírt metódussal!
  • Ne feledkezz meg az ábrfeliratokról sem!