function cut(array $base, array $cuts = [])
{
$parts = [];
$cutParts = [];
// сортируем вырезанные отрезки по началу
usort($cuts, function (array $a, array $b) {
return $a[0] - $b[0];
});
// склеиваем вырезанные отрезки
foreach ($cuts as $cut) {
$i = count($cutParts)-1;
if ($i === -1) { // первый отрезок
$cutParts[] = [max($base[0], $cut[0]), min($base[1], $cut[1])];
} else {
if ($cut[0] > $cutParts[$i][1]) { // новый отрезок
$cutParts[] = [max($base[0], $cut[0]), min($base[1], $cut[1])];
} else { // склейка
$cutParts[$i][1] = max($cutParts[$i][1], $cut[1]);
}
}
}
// считаем, что осталось
if ($cutParts[0][0] === $base[0]) { // начинать надо не от начала
if ($cutParts[0][1] === $base[1]) { // вырезано все
return [];
} else { // начинаем отсчет с конца первого отрезка
$parts[0] = [$cutParts[0][1]];
array_shift($cutParts);
}
} else { // начинаем отсчет от начала исходного отрезка
$parts[0] = [$base[0]];
}
foreach ($cutParts as $i => $cutPart) {
$parts[$i][1] = $cutPart[0];
if ($cutPart[1] < $base[1]) {
$parts[$i + 1] = [$cutPart[1]];
} else { // отрезок покрывает конец исходного отрезка
return $parts;
}
}
$parts[count($parts) - 1][1] = $base[1];
return $parts;
}
print_r(cut([1, 100000], [[30, 500], [1200, 3700]]));
print_r(cut([1, 1000], [[30, 500], [20, 700], [10, 35]]));
<?php
function cut($num, $remove_intervals) {
// sort remove intervals by first value
usort($remove_intervals, function($a, $b){return $a[0] <=> $b[0];});
// merge overlapped intervals
$remove = array_reduce(
$remove_intervals,
function($res, $el) {
$cnt = count($res)-1;
if ($el[0] <= $res[$cnt][1]) {
$res[$cnt][1] = max($el[1], $res[$cnt][1]);
} else {
$res[] = $el;
}
return $res;
},
[$remove_intervals[0]]
);
// build result array
$result = array_reduce(
$remove,
function($res, $el) use ($num) {
$cnt = count($res)-1;
if ($el[0] < $res[$cnt][1]) {
$res[$cnt][1] = $el[0];
if ($el[1] < $num) {
$res[] = [$el[1], $num];
}
}
return $res;
},
[[1, $num]]
);
var_export($result);
return $result;
}
print_r(cut(10000, [[30, 500], [700, 900], [800, 1000]]));
print_r(cut(10000, [[30, 500], [1200, 3700], [50, 700], [1000, 3000], [6000, 20000]]));
print_r(cut(1000, [[30, 500], [20, 7000], [10, 35]]));
vector<pair<int, int>> CutOutSegments(int begin, int end, vector<pair<int, int>> segments)
// Массив из пар чисел. Пустой массив, в который будем добавлять строки из 2 чисел.
vector<pair<int, int>> events;
events.push_back({begin-1, 1}); // добавляем строку с числами begin и 1.
events.push_back({end, -1});
for (auto s: segments) {
events.push_back({s.first-1, 1}); // s.first - начало отрезка.
events.push_back({s.second, -1}); // s.second - конец отрезка.
}
sort(events.begin(), events.end());
int prev_pos = events[0].first;
int count = 0;
vector<pair<int, int>> result;
for (auto e: events) { // e - строка массива events. e.first/second - 2 числа в ней.
if (prev_pos < e.first && count == 1) {
result.push_back(prev_pos + 1, e.first); // добавялем +1, что бы отрезок [0, 1] был выдан как одно число 1..1.
}
count += e.second;
if (e.first == end) break;
}
return result;
}
function compare(one = '', second = '') {
let oneArray = one.match(/([a-zA-Z]+)|(\d+)/g);
let secondArray = second.match(/([a-zA-Z]+)|(\d+)/g);
if (oneArray && oneArray[0] > 10) return false;
if (!oneArray || !secondArray) return false;
if (oneArray[0] != secondArray[0]) return false;
if (parseInt(oneArray[1]) < parseInt(secondArray[1])) {
return true;
}
return false;
}
console.log(compare('ty12', 'ty33')); // true
console.log(compare('ty121', 'ty33')); // false
console.log(compare('ty121', 'tyt33')); // false
//import { Store } from "vuex";
import createPersistedState from 'vuex-persistedstate'
//это было в примере удалите если ненужно
import SecureLS from 'secure-ls'
var ls = new SecureLS({ isCompression: false })
export default ({store}) => {
createPersistedState({
storage: {
getItem: (key) => ls.get(key),
setItem: (key, value) => ls.set(key, value),
removeItem: (key) => ls.remove(key),
},
key: 'yourkey',
//paths: [...],
})(store)
}
plugins: {
{ src: '~/plugins/localStorage.js', ssr: false },
}
<template />
<script>
computed: {
...mapState([
'storage'
])
},
mounted () {
const self = this
window.onNuxtReady(() => {
console.log(self.storage)
})
}
</script>