Добавлен , опубликован
Решил написать небольшую статью про сэйв системы. Самые популярные основывабтся на записи всех данных некоторым методом в одно большое число и переводе его в систему счисления с большим основанием. Рассмотрим две системы: www.thehelper.net/threads/save-load-code-yet-another.41354 и www.thehelper.net/threads/bigint.145156/#post-1261803.
Распишу немного о принципе работы.
В 1 случае все числа записываются в одну строку друг за другом, разделяя разные числа дефисом. Получается число в 11 значной системе счисления.
Во случае 2 есть значения, которые надо сохранить, и максимально возможные. Результат сначала умножают на максимальное значение + 1 и прибавляется для сохранения.
В итоге эти числа переводятся в другие сс.
Я немного изменил алгоритм из первой системы так чтобы он работал как во второй. Собственно вся суть в следушем куске кода:
    set m = 0
    set i = 0
    loop
        set j = 0
        loop
            set a[j] = a[j] * (maxs[i] + 1)
            set j = j + 1
            exitwhen j > m
        endloop
        set a[0] = a[0] + vals[i]

        set j = 0
        loop
            set k = a[j] / BASE
            set a[j] = a[j] - k * BASE
            set a[j + 1] = a[j + 1] + k
            set j = j + 1
            exitwhen j > m
        endloop
        if k > 0 then
            set m = m + 1
        endif
        set i = i + 1
        exitwhen i >= l
    endloop
Здесь BASE это длина кодирующего алфавита, vals - сохраняемые числа, maxs - максимальные значения.
Итоговые цифры числа в новой сс сохраняются в массиве a.
Для загрузки искользуется код. Загруженные значения записываются в vals.
По аналогии с предидущим кодом в a цифры большого числа.
    set i = l - 1
    loop
        exitwhen i < 0
        set j = m
        loop
            exitwhen j <= 0
            set k = a[j] / (maxs[i] + 1)
            set a[j - 1] = a[j - 1] + (a[j] - k * (maxs[i] + 1)) * BASE
            set a[j] = k
            set j = j - 1
        endloop
        set k = a[j] / (maxs[i] + 1)
        set vals[i] = a[j] - k * (maxs[i] + 1)
        set a[j] = k
        if a[m] == 0 then
            set m = m - 1
        endif
        set i = i - 1
    endloop
Всё это работает по принципу сложения, умножения и деления столбиком.
Также хочу сказать, что это не готовая система, а только её основа.
`
ОЖИДАНИЕ РЕКЛАМЫ...