Понял, почему ХС занимались этой темой. Реальность всегда субъективна, объективной реальности не существует. Объективная реальность это Пустота. Мы видим те вещи, которым даём названия и которые играют роль для нас. Как в ролевой игре. Ведь можно по-разному их собирать из разрозненных частей и всё имеет бесконечное число трактовок. Рядом есть разные реальности. Одни не видят то, что видят другие, наша реальность только код трактовки. ПМ действительно хакерский способ работы с реальностью
pack = " Ac Kc Qc Jc Xc 9c 8c 7c 6c"
.." Ad Kd Qd Jd Xd 9d 8d 7d 6d"
.." Ah Kh Qh Jh Xh 9h 8h 7h 6h"
.." As Ks Qs Js Xs 9s 8s 7s 6s"
shuf = {} -- Таблица для перетасовки карт
for str in string.gmatch(pack, "%w+") do
note = {nm, nd} ; note.nm = str
table.insert(shuf, note) -- Заполняем таблицу перетасовки
end
all = #shuf ; tot = 0
inp = io.read() ; mask = {} -- Карты и таблица для маски
for str in string.gmatch(inp, "([^%s]*)(%s?)") do
table.insert(mask, str) -- Заполняем таблицу маски
end
for i = 1, all - #mask do
table.insert(mask, "") end -- Доводим до размера колоды
for r = 1, 10000 do
for i = all, 1, -1 do
local j = math.random(i)
shuf[i], shuf[j] = shuf[j], shuf[i] -- Перетасовываем карты
for q = 1, #mask do
if shuf[i].nm == mask[q] then -- Ищем совпадения с маской
table.remove(shuf, i) break end -- Удаляем лишние карты
end
end
for i = 1, #shuf do shuf[i].nd = nil end -- Очищаем метки узлов
nod = 0 ; down = {} -- Таблица для слива карт
for i = 1, all do
if mask[i] ~= "" then -- Ищем непустые карты в маске
note = {nm, nd} ; note.nm = mask[i]
table.insert(shuf, i, note) -- Вставляем в колоду
end
table.insert(down, shuf[i].nm) -- Пополняем таблицу слива
local q, wi = #down, #down
while q > 2 and q <= #down do
while string.sub(down[q], 1, 1) == string.sub(down[q-2], 1, 1) or
string.sub(down[q], 2, 2) == string.sub(down[q-2], 2, 2) do
table.remove(down, q-2) -- Удаляем слитые карты
if q > 4 then q = q - 2 -- 2 шага к началу таблицы
elseif q == 4 then q = 3 -- Дошли до 3 карты
else break end
end
q = q + 1 -- Обратно к концу таблицы
end
if #down < wi then
nod = nod + 1 ; shuf[i].nd = true end -- Фиксируем узлы
end
if #down == 2 then -- Определяем сложившийся пасьянс
local out = "<"
for i = 1, all do
if shuf[i].nd then sp = "><"
else sp = " " end
out = out..shuf[i].nm..sp -- Скидываем карты в строку
end
print(out.."\b ("..nod..")\n") ; tot = tot + 1
end
end
if tot > 0 then print("Total: "..tot)
else print("Failed ("..#down..")") end
Ом Ваджрасаттва Самая Манупалая Ваджрасаттва Тенопа Тишта Дридхо Ме Бхава Сутокайо Ме Бхава Супокайо Ме Бхава Ануракто Ме Бхава Сарва Сиддхиме Праяца Сарва Карма Суца Ме Читтам Шриям Куру Хум Ха Ха Ха Ха Хо Бхагаван Сарва Татхагата Ваджра Ма Ме Мунца Ваджри Бхава Маха Самая Саттва Ах Хум Пхат