Loading...
cap7ainjack avatar cap7ainjack 20 Точки

Java Fundamentals [EXAM]- 15 November 2015 - 03. Rubik's Matrix

Здравейте !

Въпросът ми относно тази задача е по-скоро за sub-lists, защото това е начина по който се опитвах да я реша, но не успя да ми се получи :)

Та значи идеята ми беше да събера всички числа, които трябва да въртя нанякъде(лист е цяла колона или цял ред) в един ArrayList от Integer  и после чрес sublist да взема Left Part and Right Part , да ги слепя и да получа rotated лист.

 

Като напълня ArrayList-a с оригиналната продредба, оптах няколко начина, нищо:

 

 ArrayList<Integer> leftPart = new ArrayList<Integer>(colList.subList(newList.size() - (moves - 1), newList.size()));

   ArrayList<Integer> rightPart = new ArrayList<Integer>(colList.subList(0, newList.size() - (moves -1)));

              newList.addAll(leftPart);
              newList.addAll(rightPart);

не се пълнят изобщо по-този начин. нито по този : 

 java.util.List<Integer> leftPart = colList.subList(0, moves);
     java.util.List<Integer> rightPart = colList.subList(moves, colList.size());

Има ли начин да сработи задачата по рози начин и как ? :)

Благодаря!

Тагове:
0
Java Advanced 16/11/2015 10:31:41
zisov4eto avatar zisov4eto 19 Точки

Темата е малко стара, но задачката е отново актуална в упражненията по курса Advanced C# Май 2016.

Качвам моето решение, като ротациите (по редове или колони) съм ги писал линейно. - КОД

Общо взето клонирам матрицата, обхождам с един цикъл по даденият/ата ред/колона намирам предварително крайната позиция на текущият елемент и го замествам в оригинлната матрица.

А това е формулата, която намира крайната позиция на даден елемент (сигурен съм, че има и не толкова идиотски начин):

UP :        (текущият ред + общия брой редове - (броя ходове % общия брой редове)) % общия брой редове

DOWN :  (текущият ред + общия брой редове (броя ходове % общия брой редове)) % общия брой редове

LEFT :    (текущата колона + общия брой колони - (броя ходове % общия брой колони)) % общия брой колони

RIGHT:    (текущата колона + общия брой колони + (броя ходове % общия брой колони)) % общия брой колони

 

Някой ако има други идеи за линейно решение ще се радвам да ги видя. :)))

 

 

2
27/05/2016 02:19:45
goshoan avatar goshoan 0 Точки

Единственото нещо, което не ми е все още ясно е как трябва да се rearrange-не тази матрица.... 

Не мога да разбера на какъв принцип е този swap. Пробвах да ги swap-вам стойност след стойност, но не става. Матрицата се пренарежда както беше в началото, но не мисля че това е правилният начин :D

0
zisov4eto avatar zisov4eto 19 Точки

Пъровото нещо, което се иска от теб в задачата е да размешаш числата в матрицата по дадени правила. След като вече матрицата е размешата (или не е) е време да започнеш да я подреждаш обратно.

Да кажем, че това е нашата размешана матрица.

1 3 5

9 8 7

2 4 6

Итерираш през нея по стандратният начин от ред 0 колона 0...3, ред 1 колона 0..3 и така и проверяваш дали елемнта за съответната позиция е развен на търсеният от теб елемент, който можеш да намериш по различни начини. Най-лесният вариант е с една променлива, която ще инкрементираш с 1 при всяко влизане във вътрешният цикъл.

В първият случай проверяваме дали 1 = елемента на ред 0, колона 0 (цифрата 1) и след като условието е вярно продължаваме с итерацията.

2 = елемента на ред 0 колона 1 (цифрата 3)? В случай на несъответсвие трябва да запалим още два цикъла, които итново ще итерират през нашата матрицата и тяхната мисия ще бъде да намерят стойноста която търсим, но ненамираме на точното позиция, а именно 2.

След като я намерим разменяме двете стойности, печатаме съответното съобщение и продължаваме да въртим по-горните два цикъла при, които бяхме стигнали до търсена стойност 2 като вече ще търсим 3.

Вече матрицата ни изглежда така:

1 2 5

9 8 7

3 4 6

 

Надявам се, че е станало една идея по-ясно какво се иска от задачата. Ако имаш още въпроси ще се радвам да отговоря. :)

1
goshoan avatar goshoan 0 Точки

Благодаря за обяснението :). Най-накрая разбрах къде са ми грешките !

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.