UniLecs #133_1. Pac-Man

UniLecs #133_1. Pac-Man

UniLecs

Задача: смоделируем нашу версию игры Pac-Man. Pac-Man играет на прямоугольном поле N*M, где двигается слева направо, потом спускается на след.строку и идет справа налево, и так до самого конца. За каждый свой ход он съедает по одной точке. Необходимо определить, сколько точек сьел Pac-Man в точке (x, y) игрового поля (включая саму точку), где x - строка, а y - столбец.

Входные данные: N, M - размеры игрового поля от 1 до 10^6. (X, Y) - координаты искомой точки на поле.

Вывод: кол-во съеденных точек в точке (X, Y)

Пример: N = M = 3, (X, Y) = (2,1)

* * *

* * *

* * *

Answer: 6

Реализация:

  1. @jinxonik, C++: 1.3 балла (0.3 балла за анимацию)

Похоже Евгений потратил больше времени на анимацию, чем на само решение :)

Анимация

https://gist.github.com/jin-x/8b1a7033734191f75cc694ecaf3f368b

Test:

https://www.onlinegdb.com/SJ706PwoQ

https://repl.it/@jin_x/UniLecs-133-pacmancpp


2. @mrmeison, JS: 1 балл

@mrmeison, JS

http://jsfiddle.net/e3qdanjv/


3. @abdujabbor1987, Python: 1 балл

@abdujabbor1987, Python

https://ideone.com/rt0Wcw


4. @FutorioFranklin, Python: 1 балл

Сначала найдём кол-во звёздочек, которые будут съедены в любом случае, они будут находиться на строках от 1 до x (нумерацияначинается с 1) и до x не включая и на столбцах m. Их количество будет равно m*(x-1). Далее учитываем в какую сторону будет двигаться пакмен в зависимости от чётности x, если x - чётное, то движение идёт справа налево, количество звёзд будет m-y+1, если нечётное, то y. Суммируем оба выражения и упрощаем.
@FutorioFranklin, Python

5. @TEXHIK, Julia: 1 балл

https://goo.gl/RXq4dk


6. @pakrulin, JS: 1 балл

https://jsbin.com/pajiyupoye/edit?js,console


7. Andrew Bystrov, Java: 1 балл

Сначала найдем количество строчек, которые полностью съел pac man. Теперь посмотрим на строчку row, и определим, в какую сторону двигался pac man в этой стороне. Это надо для того, чтобы знать, сколько точек съел pack man в последней строчке.

https://gist.github.com/AndrewBystrov/a1c3348f82b8f7beecde0de10cb4ee12


8. @akolosov364, JS: 1 балл

Можно смело умножать количество строк на искомый столбец - 1. Так как они гарантированно будут пройдены. Остается добавить последнюю строку. Если поселдняя строка будет нечетной то маршрут будет с право на лево, иначе - слева на право.

https://gist.github.com/KolosovAO/ed32fa8c2c66bf54e4c4df65ca4f50ac

Test:

https://repl.it/@AlieksieiKoloso/task133


9. @Shoxrux_NUU, C++: 1 балл

@Shoxrux_NUU, C++

10. @my_diamonds_dancing, Python, C#: 1,1 балл

https://github.com/myDiamondsDancing/UniLecs-Tasks/blob/master/Task%20133.py

C#:

https://github.com/myDiamondsDancing/UniLecs-Tasks/blob/master/Task%20133.cs


11. @LexxWanderlust, Swift: 1 балл

https://gist.github.com/Onezza/157eba7a378c89fb2f9b2abf248e00de#file-pac-man-swift-4-2

Test:

https://repl.it/@Onezza/InsistentPrevailingSandbox


12. Антон, Rust: 1 балл

Пусть нам надо найти количество точек, съеденных Pac-Man-ом при прохождении до точки на пересечении row-ой строки и col-ой колонки. Очевидно, при этом предыдущие row - 1 строк уже пройдены тем или иным способом, поэтому съедено как минимум rect = width * (row - 1) точек. Количество же точек, съеденных на row-ой строке, зависит от того, в каком направлении Pac-Man движется.
Если row — нечётное число, то Pac-Man прошёл чётное количество row - 1 строк и начинает проходить row-ую строку от начала. Тогда количество точек, съеденных в последней строке, очевидно, равно lastline = col. Если же row — чётное число, то Pac-Man прошёл нечётное количество row - 1 строк и потому проходит последнюю строку от конца. При этом он проходит через width - colклеток и останавливается на последней клетке, съедая точку в ней, поэтому всего Pac-Man съедает на последней строке lastline = width - col + 1 точек.

https://gist.github.com/AnthonyMikh/8328a5e13120e5680930d718736e4cb6

Test:

https://play.rust-lang.org/?gist=48f322aad4d479c0bc0a0741f73197d5


13. @P9oSi, C#: 1 балл

https://gist.github.com/P9os/bea9c09d94e1fabd8174c935f8c8f9d0


14. @LostInKadath, Python: 1 балл

Pacman eats points on a field with dimensions (width, height) = (cols, rows).It starts from (1, 1) and runs from left to right.The second row it runs from right to left, the third one - from left to right, and so on.Find the number of eaten points, if Pacman stops in the point (row, col).The solution is pretty easy. We count full eaten rows (that is `row-1`).Then we analyze the current row: if its number is odd, Pacman runs from left to right and has eaten `col` points.Otherwise, Pacman runs from right to left and has eaten `cols-col+1` points.

https://gist.github.com/LostInKadath/4b68f4fff2804f0f482cbcad697949e3


15. @egormasharskii, Python: 1 балл

https://gist.github.com/myegor/ad82d25a7c78889673b3a7b73bba4f5b


16. @rustem_b, Dart, Hy, Python, Julia, Perl: 1.4 балла

В каждом ряду Pacman собирает N шариков, значит что бы узнать сколько шариков Pacman соберёт в полностью пройденных рядах нужно умножить количество рядов, которое Pacmanу нужно нужно пройти полностью (row - 1), на количество столбцов (N)
Плюс оставшиеся шарики, так как герой ходит "змейкой" (сначала слева направо), то в нечётных рядах он соберёт col шаров, в чётных рядах N - col + 1 (т. к. герой движется справа налево)

https://gist.github.com/RustemB/dcdc5ff97bc9d0fe13dd0858e0189d6e


17. @kirillmotrichkin, Python: 1 балл

Задача решается одной формулой: складываем площади, прямоугольник без ряда, в котором находится пакман и пройденные клетки ряда, в котором находится пакман. Если ряд нечётный, то пройденные клетки слева от пакмана, иначе - справа

https://gist.github.com/superkiria/8ba678bd28207c90eb0dc46f6ddf355d

Test:

https://repl.it/@superkiria/unilecs133-pacman


18. @lPestl, JS, C#, C++, F#, Visual Basic: 1.7 балла (1.4 + 0.3 за визуализацию)

JS c визуализацией:

https://jsfiddle.net/lPestl/owaspg3v/3/

C#:

https://pastebin.com/39Ve3mza

С++:

https://pastebin.com/e71V6n7F

F#:

https://pastebin.com/aGc9zyT2

Visual Basic:

https://pastebin.com/ZGh059nZ


19. @voodoo_woodpecker, Python: 1.3 балла (визуализация)

https://repl.it/@MikePeleah/UniLecs133

Report Page