{"id":1069,"date":"2022-11-06T11:53:42","date_gmt":"2022-11-06T10:53:42","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?p=1069"},"modified":"2022-11-06T11:53:42","modified_gmt":"2022-11-06T10:53:42","slug":"rubiks-cube-2x2x2","status":"publish","type":"post","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/11\/06\/rubiks-cube-2x2x2\/","title":{"rendered":"Rubik&rsquo;s Cube 2x2x2"},"content":{"rendered":"\n<p>Voici quelques explications sur le <a href=\"https:\/\/my.numworks.com\/python\/schraf\/cube222\" target=\"_blank\" rel=\"noreferrer noopener\">script Python propos\u00e9 pour la NUMWORKS<\/a><\/p>\n\n\n\n<p>Num\u00e9rotation des vignettes :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"455\" height=\"342\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image.png\" alt=\"\" class=\"wp-image-1070\" srcset=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image.png 455w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-300x225.png 300w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-399x300.png 399w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Ce qui permet de d\u00e9finir les diff\u00e9rents mouvements possibles :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MVT = ((8,9,11,10),(4,0,17,13),(5,1,16,12)),((4,5,7,6),(3,10,13,23),(1,11,15,22)), \\\n      ((17,16,18,19),(9,0,20,14),(8,2,21,12)),((0,1,3,2),(8,4,22,18),(10,6,20,16)), \\\n      ((20,22,23,21),(2,6,15,19),(3,7,14,18)),((13,12,14,15),(7,11,17,21),(5,9,19,23))<\/code><\/pre>\n\n\n\n<p>Par exemple tourner la face du haut (U = Up) revient \u00e0 mettre la vignette 8 en 9, la vignette 9 en 11, la vignette 11 en 10 et la vignette 10 en 8, ce qui est est not\u00e9 (8,9,11,10). Mais cela bougera \u00e9galement les vignettes (4,0,17,13) et (5,1,16,12). Le principe est le m\u00eame pour les mouvements R (Right), L (Left), D (Down) et P (Arri\u00e8re).<\/p>\n\n\n\n<p>Remplissage des faces :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>H = ((1,0,0),(0,0,-1),(-1,0,0))\nFACES = ((0,0,0),H),((0,0,-1.1),H),((0,-1.1,0),H),((0,-1.1,-1.1),H)<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"530\" height=\"190\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-1.png\" alt=\"\" class=\"wp-image-1071\" srcset=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-1.png 530w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-1-300x108.png 300w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/11\/image-1-500x179.png 500w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><figcaption>Etapes pour dessiner la vignette n\u00b08<\/figcaption><\/figure><\/div>\n\n\n\n<p>Exemple avec la vignette n\u00b08 : On part du point de coordonn\u00e9es (0,0,0) puis on ajoute successivement les vecteurs qu&rsquo;il y a dans H, on obtient (1,0,0) puis (1,0,-1) et (0,0,-1). Nous avons les 4 coins de la vignette.<\/p>\n\n\n\n<p>Les fonctions <strong>face<\/strong>, <strong>pos2D<\/strong> et <strong>remplir<\/strong> permettent alors de remplir cette surface avec la couleur voulue (<strong>pos2D<\/strong> transforme les coordonn\u00e9es 3D en coordonn\u00e9es \u00e0 l&rsquo;\u00e9cran)<\/p>\n\n\n\n<p>Le <strong>,2<\/strong> que l&rsquo;on voit sur les 2 lignes ci-dessous permet de remplir plus rapidement la zone. Essayez avec <strong>,3<\/strong> et <strong>,1<\/strong> pour voir la diff\u00e9rence.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for col in range( ... <strong>,2<\/strong>):\n for lig in range( ... ,2):<\/code><\/pre>\n\n\n\n<p>La fonction <strong>permu<\/strong> transforme la position du cube (liste de 24 nombres) en une nouvelle liste suivant le choix du mouvement. La nouvelle position est mise dans la variable <strong>suiv<\/strong>, ce qui permet lors de la mise \u00e0 jour de l&rsquo;affichage de ne remplir que les vignettes qui ont chang\u00e9 de couleur :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def aff(suiv,pos,force=0):\n for n, c in enumerate(suiv):\n  if pos&#091;n] != c: face(n,RVB&#091;c])  # Changement de couleur ?<\/code><\/pre>\n\n\n\n<p>Rotation du cube entier :<\/p>\n\n\n\n<p>Pour faire tourner le cube avec les 4 fl\u00e8ches, on applique plusieurs mouvements, par exemple avec la <strong>fl\u00e8che du haut<\/strong> on applique les 4 mouvements <strong>1,2,2,2<\/strong>. R\u00e9p\u00e9ter 3 fois le mouvement n\u00b02 revient \u00e0 appliquer 2 \u00e0 l&rsquo;envers (ce que l&rsquo;on note souvent avec <strong>&lsquo;<\/strong>, par exemple <strong>R&rsquo;<\/strong>)<\/p>\n\n\n\n<p>Cube termin\u00e9 ?<\/p>\n\n\n\n<p>L&rsquo;id\u00e9e est de parcourir les vignettes n\u00b00, 1&#8230; 23 et de compter combien de fois on a chang\u00e9 de couleurs. Si ce nombre correspond \u00e0 6, le cube est termin\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def fin(pos):\n c, nb = pos&#091;0], 1\n for v in pos:\n  if v != c: \n    c = v\n    nb += 1\n return nb != 6<\/code><\/pre>\n\n\n\n<p>Programme principal :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while True:\n  fill_rect(0,0,320,222,(0,)*3)       # Fond noir\n  pos, jouer = melange(), True        # m\u00e9lange du cube\n  while jouer:\n    suiv = choix(key(TOUCHES), pos)   # Future position du cube\n    aff(suiv,pos)                     # Affichage de la position\n    pos = list(suiv)                  # C'est la nouvelle position\n    sleep(.2)\n    jouer = fin(pos)                  # Le cube est-il fini ?<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Voici quelques explications sur le script Python propos\u00e9 pour la NUMWORKS Num\u00e9rotation des vignettes : Ce qui permet de d\u00e9finir les diff\u00e9rents mouvements possibles : Par exemple tourner la face du haut (U = Up) revient \u00e0 mettre la vignette &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/11\/06\/rubiks-cube-2x2x2\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4913,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-twitter"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/users\/4913"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":1,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1072,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/1069\/revisions\/1072"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}