summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20220501163136-список.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20220501163136-список.org')
-rw-r--r--content/digarden/pages/20220501163136-список.org85
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
+