diff options
Diffstat (limited to 'content/digarden/pages/20220501163136-список.org')
-rw-r--r-- | content/digarden/pages/20220501163136-список.org | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/content/digarden/pages/20220501163136-список.org b/content/digarden/pages/20220501163136-список.org new file mode 100644 index 0000000..e69d759 --- /dev/null +++ b/content/digarden/pages/20220501163136-список.org @@ -0,0 +1,85 @@ +:PROPERTIES: +:ID: 6e47e4b0-b09c-42c5-b559-9eaadb1bd9ec +:END: +#+title: Список + +** Односторонний список на PHP с методом своп +#+begin_src php +<?php + + class ConsType + { + function __construct($first, $second) + { + $this->first = $first; + $this->second = $second; + } + + function isCons($elem) { + return $this->$elem instanceof ConsType; + } + + function swap($i1, $i2) + { + $tail1 = null; + $tail2 = $this; + $elem1 = null; + $elem2 = null; + + if ($i1 > $i2) [$i2, $i1] = [$i1, $i2]; + + $imax = max($i1, $i2); + + for ($i = 0; $i < $imax; $i++) + { + if($i === $i1) { + $elem1 = $tail2->getHead(); + $tail1 = $tail2; + } + + $tail2 = $tail2->getTail(); + } + + $elem2 = $tail2->getHead(); + + $tail1->first = $elem2; + $tail2->first = $elem1; + } + + function getTail() { + return $this->second; + } + + function getHead() { + return $this->first; + } + + function getConsElement($index) { + "Функция возвращает пару по индексу"; + $tail = $this; + + for ($i=0; $i < $index; $i++) + { + $tail = $tail->getTail(); + } + + return $tail->first; + } + } + + # Список вида [1, 2, 3, 4] + $test_list = new ConsType(1, new ConsType(2, new ConsType(3, 4))); + + var_dump($test_list); + + $test_list->swap(0, 2); + + var_dump($test_list); + + # Но есть баг, который мне уже лень исправлять + # Не работает с последним элементом списка + + # Ну и похуй, я спать + +#+end_src + |