Регистрация не е нужна, освен при създаване на тема в "Задача на седмицата".

Куб

Куб

Мнениеот Гост » 25 Апр 2023, 12:13

1зад. На лявата фигура е показана развива на зарче за игра .На дясната фигура е показано зарчето след сглобяването му. Кое число ще се вижда на защрихованата страна на зарчето от дясната фигура ?

а) 1
б) 5
в) 4
г) 6
Прикачени файлове
IMG_20230425_131023612.jpg
IMG_20230425_131023612.jpg (254.86 KiB) Прегледано 2108 пъти
Гост
 

Re: Куб

Мнениеот Gruicho » 25 Апр 2023, 13:42

Peyo ще те призная ако тая задача я решиш с pyton :p
Gruicho
Фен на форума
 
Мнения: 100
Регистриран на: 19 Фев 2018, 18:24
Рейтинг: 81

Re: Куб

Мнениеот peyo » 25 Апр 2023, 13:51

Gruicho написа:Peyo ще те призная ако тая задача я решиш с pyton :p


Ok, трябва да помисля малко.

Може би следния подход:

1. Генерираме всички възможни кубове и вземаме техните развивки.
2. На тези на които развивката им съответства на лявата картинка изчисляваме всички пространествени изгледи където се виждат 3 страни.
3. На тези на които виждаме 2 и 3 така, че 3 е отляво на 2 гледаме коя е третата страна и я печатаме.
peyo
Математик
 
Мнения: 1767
Регистриран на: 16 Мар 2019, 09:35
Местоположение: София
Рейтинг: 663

Re: Куб

Мнениеот peyo » 25 Апр 2023, 15:39

peyo написа:
Gruicho написа:Peyo ще те призная ако тая задача я решиш с pyton :p


Ok, трябва да помисля малко.

Може би следния подход:

1. Генерираме всички възможни кубове и вземаме техните развивки.
2. На тези на които развивката им съответства на лявата картинка изчисляваме всички пространествени изгледи където се виждат 3 страни.
3. На тези на които виждаме 2 и 3 така, че 3 е отляво на 2 гледаме коя е третата страна и я печатаме.


Ok, да видим какво ще стане. Няма да генерираме всички кубове, защото ни е дадена развивката по условие.

да кодираме развивката на картинката като:
куб = [4,5,1,2,6,3]

Сега всички 8 изгледа от по 3 страни образуваме, като вземем горната страна с index 0 и добавим 4 пъти по 2 съседни стени, след това долната страна на куба с index 5 и пак 4 пъти добавим околните стени. Това са индекси:
комбинации с 0:
[0,1,2],[0,2,3],[0,3,4],[0,4,1],
комбинации с 5:
[5,1,2],[5,2,3],[5,3,4],[5,4,1],

И сега всички ротации от 3 елемента са:
[0,1,2],[1,2,0],[2,0,1],

И сега където намерим стойности 2 и 3, третата стойност е каквото търсим!

Да видим дали ще стане:
Код: Избери целия код
cube = [4,5,1,2,6,3]
for view in [[0,1,2],[0,2,3],[0,3,4],[0,4,1],[5,1,2],[5,2,3],[5,3,4],[5,4,1]]:
   visible = [cube[i] for i in view]
   for rotation in [[0,1,2],[1,2,0],[2,0,1]]:
      rotated_view = [visible[j] for j in rotation]
      if rotated_view[:2] == [2,3] or rotated_view[:2] == [3,2]:
         print( "Found", rotated_view[2] )


Found 1
Found 6


Имаме 2 отговора, защото не знаем дали търсим подредба 3,2 или 2,3, защото не знаем какво е дясно и какво е ляво в нашата подредба. Но със сигурност можем да твърдим, че е или 2 или 3 или и двете.
peyo
Математик
 
Мнения: 1767
Регистриран на: 16 Мар 2019, 09:35
Местоположение: София
Рейтинг: 663

Re: Куб

Мнениеот peyo » 26 Апр 2023, 08:31

peyo написа:Found 1
Found 6


Имаме 2 отговора, защото не знаем дали търсим подредба 3,2 или 2,3, защото не знаем какво е дясно и какво е ляво в нашата подредба. Но със сигурност можем да твърдим, че е или 2 или 3 или и двете.


Добре да сменим подхода с такъв където ще знаем какво е ляво.

В началото имаме куб дефиниран като cube = [4,5,1,2,6,3], кудето cube[0] е горе, а cube[5] е долу, а cube[1] e отпред.
Когато гледаме от точка която е малко по горе вдясно, ще видим 3 страни (cube[1],cube[2],cube[0]) и cube[1] е отляво на cube[2].

Сега само остава да завъртим куба на всички възможно положения и да търсим cube[1] == 3 и cube[2]==2.

Всички възможни положения можем да генерираме само с две операции:
оп1: завъртане куба наляво: rot_left(cube)
оп2: завъртане куба нагоре: rot_up(cube)

тогава остава само да претърсим пространството от състояния: search(cube), което разбира се ще направим рекурсивно.
И крайния резултат е:

Код: Избери целия код
def rot_left(cube):
   return tuple([ cube[i] for i in [0,2,3,4,1,5]])

def rot_up(cube):
   return tuple([ cube[i] for i in [1,5,2,0,4,3]])
   
def search(cube, cache=set()):
   if cube in cache:
      return
   if cube[1] == 3 and cube[2]==2:
      print("Solution:", cube[0])
   cache.add(cube)
   search(rot_left(cube), cache)
   search(rot_up(cube), cache)

search((4,5,1,2,6,3))


Solution: 1
peyo
Математик
 
Мнения: 1767
Регистриран на: 16 Мар 2019, 09:35
Местоположение: София
Рейтинг: 663

Re: Куб

Мнениеот Гост » 26 Апр 2023, 13:27

Съжалявам,не разбрах нищо от казаното от вас!
Гост
 

Re: Куб

Мнениеот peyo » 26 Апр 2023, 13:45

Гост написа:Съжалявам,не разбрах нищо от казаното от вас!


Накратко, отговора е: а) 1.
peyo
Математик
 
Мнения: 1767
Регистриран на: 16 Мар 2019, 09:35
Местоположение: София
Рейтинг: 663

Re: Куб

Мнениеот Гост » 26 Апр 2023, 14:41

Гост написа:Съжалявам,не разбрах нищо от казаното от вас!

Двама умници - peyo и Gruicho и резултатът е,че детето нищо не разбра!!!!
Гост
 


Назад към 5 клас



Кой е на линия

Регистрирани потребители: Davids, Google [Bot]

Форум за математика(архив)