DefPl() PUBLIC
{
//k ^dPlT
//k ^dTPl
s %="^"
s t=$O(^dGBUF(""))
while t'=""
{
s d=$O(^dGBUF(t,""))
while d'=""
{
s sTemp=^dGBUF(t,d)
if ($P(sTemp,"^",18)'="")&&($P(sTemp,"^",19)="")
{
if ('$D(^dGam(t,d)))&&('$D(^dBadGam(t,d)))&&('$D(^dGoodGam(t,d)))&&('$D(^dGam3(t,d)))
{
s ^dGam(t,d)=sTemp
}
f i=1:1:16
{
s PlID=$P(sTemp,"^",i)
if PlID>0
{
if '$D(^sPl(PlID)) {s ^sPl(PlID)=""}
if $D(^dPlT(PlID,t,"F"))
{
s td=$G(^dPlT(PlID,t,"F"))
if td>d
{
s tt=$O(^dPlT(PlID,""))
while tt'=""
{
if $G(^dPlT(PlID,tt,"F"))=td
{
s ^dPlT(PlID,tt,"F")=d
s ^dTPl(tt,PlID,"F")=d
}
s tt=$O(^dPlT(PlID,tt))
}
if $D(^dPlStD(PlID,td))
{
s st=$O(^dPlStD(PlID,td,""))
while st'=""
{
s ^dPlStD(PlID,d,st)=$G(^dPlStD(PlID,td,st))
s st=$O(^dPlStD(PlID,td,st))
}
k ^dPlStD(PlID,td)
}
}
}
else
{
s ^dPlT(PlID,t,"F")=d
s ^dTPl(t,PlID,"F")=d
}
if $D(^dPlT(PlID,t,"L"))
{
s td=$G(^dPlT(PlID,t,"L"))
if td {
s tt=$O(^dPlT(PlID,""))
while tt'=""
{
if $G(^dPlT(PlID,tt,"L"))=td
{
s ^dPlT(PlID,tt,"L")=d
s ^dTPl(tt,PlID,"L")=d
}
s tt=$O(^dPlT(PlID,tt))
}
if $D(^dPlStD(PlID,td))
{
s st=$O(^dPlStD(PlID,td,""))
while st'=""
{
s ^dPlStD(PlID,d,st)=$G(^dPlStD(PlID,td,st))
s st=$O(^dPlStD(PlID,td,st))
}
k ^dPlStD(PlID,td)
}
}
}
else
{
s ^dPlT(PlID,t,"L")=d
s ^dTPl(t,PlID,"L")=d
}
} //if PlID>0
} //f i=1:1:16
s ^dG(t,d)=^dGBUF(t,d)
k ^dGBUF(t,d)
} //if ($P(sTemp,"^",18)'="")&&($P(sTemp,"^",19)="")
else
{
w "Неверный формат: t=",t,"d=",d,!
} //else if ($P(sTemp,"^",18)'="")&&($P(sTemp,"^",19)="")
s d=$O(^dGBUF(t,d))
} //while d'=""
s t=$O(^dGBUF(t))
} //while t'=""
}
AllPr(tPar) PUBLIC
{
// пурга умеет обрабатывать весь активный пул
s t=$O(^dGam(tPar))
while (t'="")&&(t>0)
{
w "Начали: "_t,!
s GAm=$$IndexTeam(t,3)
s flOk=1
if GAm<100
{
s VarAm=$O(^dGam1(""))
if VarAm>1000
{
s GAm=$$IndexTeam(t,1000)
s flOk=0
}
}
if flOk
{
while flOk>0
{
s flOk=$$Analise(t)
if flOk=0
{
do KillTeam2(t)
s GAm=$$IndexTeam(t,1000)
}
s flOk=flOk-1
}
// $$Analise4(t) - возвращает
// 0 - успешное завершение (обработаны все возможные уравнения)
// >0 - возврат по таймауту с указанием количества исключенных стилей+1
// -1 - отсутствие решений
s Ret=1
s iCount=0
while (Ret>0)&&(iCount<10)
{
do Analise2(t)
s Ret=$$Analise4(t)
w "Analise4: "_Ret,!
if Ret=-1 {s iCount=100}
elseif Ret>1 {s iCount=iCount+1}
elseif Ret=1 {s Ret=0}
}
if Ret=-1
{
do KillTeam2(t)
s GAm=$$IndexTeam(t,1000)
}
elseif Ret=0
{
s GAm=$$IndexTeam(t,1)
s GAm=$$IndexTeam2(t)
if GAm=0
{
f iMyVar=30:-1:3
{
s GAm=$$IndexTeam(t,iMyVar)
if GAm>0
{
s VarCount=$$CountVarTeam(t)
if VarCount<1000000
{
do MainProg(t,t)
s GAm=$$IndexTeam(t,1)
s GAm=$$IndexTeam2(t)
if GAm>0
{
do KillTeam2(t)
s GAm=$$IndexTeam(t,1000)
s iMyVar=0
}
}
else {s iMyVar=0}
}
}
if iMyVar=3
{
s GAm=$$IndexTeam(t,1000)
}
}
else
{
do KillTeam2(t)
s GAm=$$IndexTeam(t,1000)
}
}
}
s t=$O(^dGam(t))
}
q "Ok"
}
GetPlStByD(Pl,Day) PUBLIC
{
s sRet=""
if Pl>0
{
s Fl=0
if $D(^dPlStD(Pl))
{
s iC=0
if $D(^dPlStD(Pl,Day))
{
s St=$O(^dPlStD(Pl,Day,""))
while St'=""
{
s iC=iC+1
s sRet=sRet_"^"_St
s St=$O(^dPlStD(Pl,Day,St))
}
s sRet=iC_sRet
s Fl=1
}
else
{
s d=$O(^dPlStD(Pl,Day),-1)
if d'=""
{
s St=$O(^dPlStD(Pl,d,""))
if $G(^dPlStD(Pl,d,St))
{
s St=$O(^dPlStD(Pl,d,""))
while St'=""
{
s iC=iC+1
s sRet=sRet_"^"_St
s St=$O(^dPlStD(Pl,d,St))
}
s sRet=iC_sRet
s Fl=1
} //if $G(^dPlStD(Pl,d,St))
}
}
}
if 'Fl
{
s sRet="6"
s St=$O(^sFavStyle(""))
while St'=""
{
s sRet=sRet_"^"_St
s St=$O(^sFavStyle(St))
}
}
} //if Pl>0
else
{
s sRet="1^0"
}
q sRet
}
GetPlStByT(Pl,t) PUBLIC
{
s sRet=""
if Pl>0
{
s d=$G(^dPlT(Pl,t,"F"))
s sRet=$$GetPlStByD(Pl,d)
} //if Pl>0
else
{
s sRet="1^0"
}
q sRet
}
DelPlStByT(Pl,t,StID) PUBLIC
{
if Pl>0
{
s Form=^dTPl(t,Pl,"F")
s Latt=^dTPl(t,Pl,"L")
if $D(^dPlStD(Pl,Form))
{
k ^dPlStD(Pl,Form,StID)
k ^dPlStD(Pl,Latt,StID)
} //if $D(^dPlStD(Pl))
else
{
s St=$O(^sFavStyle(""))
while St'=""
{
if St'=StID
{
s ^dPlStD(Pl,Form,St)=1
s ^dPlStD(Pl,Latt,St)=0
}
s St=$O(^sFavStyle(St))
}
} //else if $D(^dPlStD(Pl))
} //if Pl>0
do CorrectPlSt(Pl)
}
CorrectPlSt(Pl) PUBLIC
{
s d3=$C(3)
s t=$O(^dPlT(Pl,""))
while t'=""
{
s d1=$G(^dPlT(Pl,t,"F"))
s d2=$G(^dPlT(Pl,t,"L"))
if '$D(arT(d1,1)) {s arT(d1,1)=t}
else {s arT(d1,1)=arT(d1,1)_d3_t}
if '$D(arT(d2,2)) {s arT(d2,2)=t}
else {s arT(d2,2)=arT(d2,2)_d3_t}
s t=$O(^dPlT(Pl,t))
}
// Объединяем пересекающиеся множества
s iOM=0
s iMax=0
s d=$O(arT(""))
while d'=""
{
s sTs=$O(arT(d,""))
while sTs'=""
{
if sTs=1 {s sT=1}
elseif sTs=2 {s sT=-1}
s CurSts=sT
s iOM=iOM+CurSts
if CurSts=1
{
s i=1
s sct=$G(arT(d,sTs))
s ct=$P(sct,d3,i)
while ct'=""
{
s arM(ct)=d
s i=i+1
s ct=$P(sct,d3,i)
}
}
if iOM=0
{
if iMax>1
{
// Объединяем
k arSTS
s ct=$O(arM(""))
while ct'=""
{
s td1=$G(^dPlT(Pl,ct,"F"))
s td2=$G(^dPlT(Pl,ct,"L"))
if td1>dBeg
{
s ^dPlT(Pl,ct,"F")=dBeg
s ^dTPl(ct,Pl,"F")=dBeg
}
if td2 {
s ^dPlT(Pl,ct,"L")=d
s ^dTPl(ct,Pl,"L")=d
}
s st=$O(^dPlStD(Pl,td1,""))
while st'=""
{
s arSTS(st)=$G(arSTS(st))+1
s st=$O(^dPlStD(Pl,td1,st))
}
k ^dPlStD(Pl,td1)
k ^dPlStD(Pl,td2)
s ct=$O(arM(ct))
}
s st=$O(arSTS(""))
while st'=""
{
if $G(arSTS(st))=iMax
{
s ^dPlStD(Pl,dBeg,st)=1
s ^dPlStD(Pl,d,st)=0
}
s st=$O(arSTS(st))
}
}
s iMax=0
k arM
}
if iMax
if (iOM=1)&&(CurSts=1) {s dBeg=d}
s sTs=$O(arT(d,sTs))
}
s d=$O(arT(d))
}
q
}
LoadPlayer(ID,sName) PUBLIC
{
if ID'=""
{
if $D(^sPl(ID))
{
s ^sPl(ID)=sName
}
}
}
GetPlVar(PlID,Day) PUBLIC
{
//// Пурга умеет возвращать количество вариантов и список стилей
//s d=Day+1
//s d=$O(^dPlayerStyles(PlID,d),-1)
//s iCount=0
//s sRet=""
//if d'=""
//{
// s st=$O(^dPlayerStyles(PlID,d,""))
// while st'=""
// {
// if sRet="" {s sRet=st}
// else {s sRet=sRet_"^"_st}
// s st=$O(^dPlayerStyles(PlID,d,st))
// }
//}
//if iCount=0
//{
// s iCount=6
// s sRet=iCount_$C(2)_"1^2^3^4^5^6"
//}
//else
//{
// s sRet=iCount_$C(2)_sRet
//}
//q sRet
}
IndexTeam(TeamID,MaxG) PUBLIC
{
// Пурга умеет индексировать команду, исключая игры с 0, и игроками
k ^dGam(0)
k ^dGam1
k ^dGam2
// из пассивного пула
s d=$O(^dGam3(TeamID,""))
while d'=""
{
s arG(d)=$G(^dGam3(TeamID,d))
s d=$O(^dGam3(TeamID,d))
}
// из хорошего архива
s d=$O(^dGoodGam(TeamID,""))
while d'=""
{
s arG(d)=$G(^dGoodGam(TeamID,d))
s d=$O(^dGoodGam(TeamID,d))
}
// из активного пула
s d=$O(^dGam(TeamID,""))
while d'=""
{
s arG(d)=$G(^dGam(TeamID,d))
s d=$O(^dGam(TeamID,d))
}
s d=$O(arG(""))
while d'=""
{
s sTemp=arG(d)
f i=1:1:16
{
s Pl=$P(sTemp,"^",i)
if Pl>0
{
s arPl(Pl)=1+$G(arPl(Pl))
}
}
s d=$O(arG(d))
}
s d=$O(arG(""))
while d'=""
{
s sTemp=arG(d)
s MinG=MaxG
f i=1:1:16
{
s Pl=$P(sTemp,"^",i)
if Pl>0
{
if arPl(Pl) }
}
if (MinG {
// в пассивный пул, если еще не попали в хороший архив
s ^dGam3(TeamID,d)=^dGam(TeamID,d)
k ^dGam(TeamID,d)
}
if (MinG>=MaxG)&&($D(^dGam3(TeamID,d)))
{
// в активный пул из пассивного
s ^dGam(TeamID,d)=^dGam3(TeamID,d)
k ^dGam3(TeamID,d)
}
s d=$O(arG(d))
}
s iCount=0
s d=$O(^dGam(TeamID,""))
while d'=""
{
s Amount=$$CountVar(TeamID,d)
s ^dGam1(Amount,TeamID,d)=^dGam(TeamID,d)
s iCount=iCount+1
s d=$O(^dGam(TeamID,d))
}
q iCount
}
CountVar(TeamID,Day) PUBLIC
{
//Пурга умеет считать количество вариантов
s sTemp=^dGam(TeamID,Day)
s iSum=1
f i=1:1:16
{
s PlID=$P(sTemp,"^",i)
s plVar=$P($$GetPlStByD(PlID,Day),"^",1)
s iSum=iSum*plVar
}
q iSum
}
IndexMovs() PUBLIC
{
//// Пурга умеет строить карту перемещений
//s t=$O(^dGames(""))
//while t'=""
//{
// s d=$O(^dGames(t,""))
// while d'=""
// {
// s sG=$G(^dGames(t,d))
// f i=1:1:16
// {
// s PlID=$P(sG,"^",i)
// if PlID>0
// {
// s dm=$G(^dPlMov(PlID,t))
// if dm="" {s ^dPlMov(PlID,t)=d}
// elseif dm>d {s ^dPlMov(PlID,t)=d}
// }
// }
// s d=$O(^dGames(t,d))
// }
// s t=$O(^dGames(t))
//}
//s t=$O(^dGoodGames(""))
//while t'=""
//{
// s d=$O(^dGoodGames(t,""))
// while d'=""
// {
// s sG=$G(^dGoodGames(t,d))
// f i=1:1:16
// {
// s PlID=$P(sG,"^",i)
// if PlID>0
// {
// s dm=$G(^dPlMov(PlID,t))
// if dm="" {s ^dPlMov(PlID,t)=d}
// elseif dm>d {s ^dPlMov(PlID,t)=d}
// }
// }
// s d=$O(^dGoodGames(t,d))
// }
// s t=$O(^dGoodGames(t))
//}
//s t=$O(^dBadGames(""))
//while t'=""
//{
// s d=$O(^dBadGames(t,""))
// while d'=""
// {
// s sG=$G(^dBadGames(t,d))
// f i=1:1:16
// {
// s PlID=$P(sG,"^",i)
// if PlID>0
// {
// s dm=$G(^dPlMov(PlID,t))
// if dm="" {s ^dPlMov(PlID,t)=d}
// elseif dm>d {s ^dPlMov(PlID,t)=d}
// }
// }
// s d=$O(^dBadGames(t,d))
// }
// s t=$O(^dBadGames(t))
//}
//
//s t=$O(^dGames3(""))
//while t'=""
//{
// s d=$O(^dGames3(t,""))
// while d'=""
// {
// s sG=$G(^dGames3(t,d))
// f i=1:1:16
// {
// s PlID=$P(sG,"^",i)
// if PlID>0
// {
// s dm=$G(^dPlMov(PlID,t))
// if dm="" {s ^dPlMov(PlID,t)=d}
// elseif dm>d {s ^dPlMov(PlID,t)=d}
// }
// }
// s d=$O(^dGames3(t,d))
// }
// s t=$O(^dGames3(t))
//}
// теперь проиндексируем в стилях
//s PlID=$O(^dPlMov(""))
//while PlID'=""
//{
// s t=$O(^dPlMov(PlID,""))
// while t'=""
// {
// s d=$G(^dPlMov(PlID,t))
//
// // проверим есть ли записи по этой команде
// s flOk=0
// s ds=$O(^dPlayerStyle(PlID,""))
// while ds'=""
// {
// s ts=$O(^dPlayerStyle(PlID,ds,""))
// while ts'=""
// {
// if (ts=t)&&(ds=d) {s flOk=1}
// elseif (ts=t)&&(ds'=d) {s flOk=2}
//
// s ts=$O(^dPlayerStyle(PlID,ds,ts))
// }
// s ds=$O(^dPlayerStyle(PlID,ds))
// }
//
// if flOk=0
// {
// //s ^dPlayerStyle
// }
//
// s t=$O(^dPlMov(PlID,t))
// }
// s PlID=$O(^dPlMov(PlID))
//}
}
Analise(t) PUBLIC
{
// Пурга умеет анализировать
// Индексируем
k ^arG
s d2=$C(2)
s d=$O(^dGam(t,""))
s CurInd=0
while d'=""
{
s sTemp=""
f i=1:1:10
{
s sTemp=sTemp_$P(^dGam(t,d),"^",i)_"^"
}
s sTemp=sTemp_$P(^dGam(t,d),"^",11)
if $D(arInd(sTemp)) {s sInd=arInd(sTemp)}
else
{
s CurInd=CurInd+1
s arInd(sTemp)=CurInd
s sInd=CurInd
}
k arPl
f i=12:1:16
{
s PlID=$P(^dGam(t,d),"^",i)
s arPl(PlID)=""
}
s sT2=""
s PlID=$O(arPl(""))
while PlID'=""
{
if sT2'="" {s sT2=sT2_"^"_PlID}
else {s sT2=PlID}
s PlID=$O(arPl(PlID))
}
s Style=$P(^dGam(t,d),"^",18)
s Vz=$P(^dGam(t,d),"^",17)
s ^arG(sInd,Style,Vz,d)=sT2
s d=$O(^dGam(t,d))
}
// Удалим лишних
s ind1=$O(^arG(""))
while ind1'=""
{
s ind2=$O(^arG(ind1,""))
while ind2'=""
{
s iCount=0
s ind3=$O(^arG(ind1,ind2,""))
while ind3'=""
{
s ind4=$O(^arG(ind1,ind2,ind3,""))
while ind4'=""
{
s iCount=iCount+1
s ind4=$O(^arG(ind1,ind2,ind3,ind4))
}
s ind3=$O(^arG(ind1,ind2,ind3))
}
if iCount<2
{
k ^arG(ind1,ind2)
}
s ind2=$O(^arG(ind1,ind2))
}
s ind1=$O(^arG(ind1))
}
k arInd
k d
k sTemp
k i
k CurInd
k sInd
k arPl
k PlID
k sT2
k Style
k Vz
k ind1
k ind2
k ind3
k ind4
k iCount
// Считаем
s flAllOk=1
s ind1=$O(^arG(""))
while (ind1'="")&&flAllOk
{
s ind2=$O(^arG(ind1,""))
while (ind2'="")&&flAllOk
{
k arPl
k arGame
k arPlNum
k MyRez
s iPlCount=0
s ind3=$O(^arG(ind1,ind2,""))
while ind3'=""
{
s ind4=$O(^arG(ind1,ind2,ind3,""))
while ind4'=""
{
s arGame(ind4)=ind3
f i=1:1:5
{
s Pl=$P(^arG(ind1,ind2,ind3,ind4),"^",i)
if (Pl'="")&&(Pl'=0)
{
if '$D(arPl(Pl))
{
s iPlCount=iPlCount+1
s arPlNum(iPlCount)=Pl
}
s sPlSt=$$GetPlStByD(Pl,ind4)
s iAmount=$P(sPlSt,"^",1)
f j=1:1:iAmount
{
s PlSt=$P(sPlSt,"^",j+1)
if PlSt=ind2
{
s arPl(Pl,2)=""
}
else
{
s arPl(Pl,0)=""
}
}
if $D(arPl(Pl,0)) {s arGame(ind4,Pl)=0}
elseif $D(arPl(Pl,2)) {s arGame(ind4,Pl)=2}
}
}
s ind4=$O(^arG(ind1,ind2,ind3,ind4))
}
s ind3=$O(^arG(ind1,ind2,ind3))
}
s Pl=$O(arPl(""))
while Pl'=""
{
s arPl(Pl)=$O(arPl(Pl,""))
s St=$O(arPl(Pl,""))
while St'=""
{
s MyRez(Pl,St)=0
s St=$O(arPl(Pl,St))
}
s Pl=$O(arPl(Pl))
}
s iSucCount=0
s i=iPlCount
s indSt=$O(arPl(arPlNum(iPlCount),""))
while i>0
{
// Делаем расчет варианта
s flOk=1
s Dif=1
s Day=$O(arGame(""))
while (Day'="")&&(flOk=1)
{
s iSum=0
s Pl=$O(arGame(Day,""))
while Pl'=""
{
s iSum=iSum+arGame(Day,Pl)
s Pl=$O(arGame(Day,Pl))
}
if Dif=1
{
s Dif=arGame(Day)-iSum
}
else
{
if Dif'=(arGame(Day)-iSum) {s flOk=0}
}
s Day=$O(arGame(Day))
}
if flOk
{
s iSucCount=iSucCount+1
s CurPl=$O(arPl(""))
while CurPl'=""
{
s MyRez(CurPl,arPl(CurPl))=MyRez(CurPl,arPl(CurPl))+1
s CurPl=$O(arPl(CurPl))
}
}
// Затем меняем состояние i-го элемента
s indSt=arPl(arPlNum(i))
s NewInd=$O(arPl(arPlNum(i),indSt))
if NewInd=""
{
// Перенос в более старший разряд
while (i>0)&&(NewInd="")
{
// пока у i-го игрока стилей больше нет
s NewInd=$O(arPl(arPlNum(i),NewInd))
if NewInd'=indSt
{
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(arGame(""))
while DayID'=""
{
if $D(arGame(DayID,arPlNum(i))) {s arGame(DayID,arPlNum(i))=indSt}
s DayID=$O(arGame(DayID))
}
} //if NewInd'=indSt
s i=i-1
if i>0
{
s indSt=arPl(arPlNum(i))
s NewInd=$O(arPl(arPlNum(i),indSt))
} //if i>0
} //while (i>0)&&(NewInd="")
if (i>0)&&(NewInd'=indSt)
{
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(arGame(""))
while DayID'=""
{
if $D(arGame(DayID,arPlNum(i))) {s arGame(DayID,arPlNum(i))=indSt}
s DayID=$O(arGame(DayID))
}
} //if (i>0)&&(NewInd'=indSt)
if i>0 {s i=iPlCount}
} //if NewInd=""
else
{
// меняем состояние в текущем разряде
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(arGame(""))
while DayID'=""
{
if $D(arGame(DayID,arPlNum(i))) {s arGame(DayID,arPlNum(i))=indSt}
s DayID=$O(arGame(DayID))
}
} //elseif NewInd'=indSt
}
if iSucCount
{
s sTemp=$H
s sTemp1=$P(sTemp,",",1)
s sTemp2=$P(sTemp,",",1)
while $L(sTemp2)<5
{
s sTemp2="0"_sTemp2
}
s TrID=sTemp1_sTemp2
s TrID=+TrID
s Pl=$O(MyRez(""))
while Pl'=""
{
s St=$O(MyRez(Pl,""))
while St'=""
{
if MyRez(Pl,St)=0
{
if St=2
{
do DelPlStByT(Pl,t,ind2)
s flAllOk=flAllOk+1
}
elseif St=0
{
s sSt=$$GetPlStByT(Pl,t)
s iMax=$P(sSt,"^",1)
f j=1:1:iMax
{
s s1=$P(sSt,"^",j+1)
if s1'=ind2
{
do DelPlStByT(Pl,t,s1)
s flAllOk=flAllOk+1
}
}
}
}
s St=$O(MyRez(Pl,St))
}
s Pl=$O(MyRez(Pl))
}
}
else
{
s flAllOk=0
}
s ind2=$O(^arG(ind1,ind2))
}
s ind1=$O(^arG(ind1))
}
q flAllOk
}
CountVarF1(pl1,pl2,TeamID) PUBLIC
{
s s1=$$GetPlStByT(pl1,TeamID)
s s2=$$GetPlStByT(pl2,TeamID)
s iRet=s1*s2
q iRet
}
F1(st1,st2)
{
s iRet=0
if st1=st2
{
s iRet=12
}
elseif $D(^Col(st1,st2))
{
s iRet=-4
}
q iRet
}
F4(x1,x2,x3,st)
{
// экспериментальная функция
s iRet=$G(^col(x1,x2))+$G(^col(x2,x3))+(x2=st)
q iRet
}
Analise2(t) PUBLIC
{
// Пурга умеет анализировать путем упрощения системы уравнений
// нормализуем
s d=$O(^dGam(t,""))
s CurInd=0
while d'=""
{
s iVarCount=1
s sTemp=$G(^dGam(t,d))
s VZ=$P(sTemp,"^",17)
s ST=$P(sTemp,"^",18)
f i=1:1:16
{
if i<11
{
s pl1=$P(sTemp,"^",i)
s pl2=$P(sTemp,"^",(i+1))
s iVar=$$CountVarF1(pl1,pl2,t)
if iVar=1
{
s st1=$$GetPlStByT(pl1,t)
s st1=$P(st1,"^",2)
s st2=$$GetPlStByT(pl2,t)
s st2=$P(st2,"^",2)
s VZ=VZ-$$F1(st1,st2)
}
elseif iVar>1
{
if pl1>pl2 {s ind=pl2_"^"_pl1}
else {s ind=pl1_"^"_pl2}
s arG(d,1,ind)=iVar
s iVarCount=iVarCount*iVar
}
else
{
w "нет вариантов",!
break
}
}
s pl=$P(sTemp,"^",i)
s flDif=0
s flEqu=0
s sPlSt=$$GetPlStByT(pl,t)
s iCount=$P(sPlSt,"^",1)
f j=2:1:iCount+1
{
s PlSt=$P(sPlSt,"^",j)
if PlSt=ST {s flEqu=1}
else {s flDif=1}
}
if flEqu*flDif=0
{
if flEqu {s VZ=VZ-2}
}
else
{
s iVar=iCount
s arG(d,2,pl_"^"_ST)=iVar
s iVarCount=iVarCount*iVar
}
} //f i=1:1:16
if iVarCount>1
{
s arG(d,3)=VZ
s arG(d,4)=iVarCount
}
s d=$O(^dGam(t,d))
} //while d'=""
// теперь пробуем всех со всеми
k ^AnaliseVar
s d1=$O(arG(""))
while d1'=""
{
s d2=$O(arG(d1))
while d2'=""
{
if d1'=d2
{
s iVarCount=1
s ft=$O(arG(d1,""))
while ft<3
{
s ind=$O(arG(d1,ft,""))
while ind'=""
{
if '$D(arG(d2,ft,ind)) {s iVarCount=iVarCount*$G(arG(d1,ft,ind))}
s ind=$O(arG(d1,ft,ind))
}
s ft=$O(arG(d1,ft))
}
s ft=$O(arG(d2,""))
while ft<3
{
s ind=$O(arG(d2,ft,""))
while ind'=""
{
if '$D(arG(d1,ft,ind)) {s iVarCount=iVarCount*$G(arG(d2,ft,ind))}
s ind=$O(arG(d2,ft,ind))
}
s ft=$O(arG(d2,ft))
}
if (iVarCount>1)&&(iVarCount<$G(arG(d1,4)))&&(iVarCount<$G(arG(d2,4)))
{
s ^AnaliseVar(iVarCount,t,d1_"^"_d2)=$G(arG(d1,4))_" + "_$G(arG(d2,4))
}
}
s d2=$O(arG(d2))
}
s d1=$O(arG(d1))
}
}
GetNextSt(Pl,t,st) PUBLIC
{
s NextSt=""
s sPlSt=$$GetPlStByT(Pl,t)
if st=""
{
s NextSt=$P(sPlSt,"^",2)
}
else
{
s iCount=$P(sPlSt,"^",1)
s fl=0
f j=2:1:iCount+1
{
s CurSt=$P(sPlSt,"^",j)
if (fl=1)
{
s NextSt=CurSt
q
}
if (fl=0)&&(CurSt=st)
{
s fl=1
}
}
}
q NextSt
}
Analise3(iMaxVars,TeamID) PUBLIC
k ^MyRez
k arPl
k arG
s MyRet=0
s flEx=0
s iVars=1
s iCount=0
s var=$O(^AnaliseVar(""))
while (var'="")&&('flEx)&&(MyRet>=0)
{
s tLoc=$O(^AnaliseVar(var,""))
while (tLoc'="")&&('flEx)&&(MyRet>=0)
{
s dd=$O(^AnaliseVar(var,tLoc,""))
while (dd'="")&&('flEx)&&(MyRet>=0)
{
s iCount=iCount+1
s d1=$P(dd,"^",1)
s d2=$P(dd,"^",2)
s sTemp=$G(^dGam(tLoc,d1))
s VZ=$P(sTemp,"^",17)
s ST=$P(sTemp,"^",18)
f i=1:1:16
{
if i<11
{
s pl1=$P(sTemp,"^",i)
s pl2=$P(sTemp,"^",(i+1))
s iVar=$$CountVarF1(pl1,pl2,TeamID)
if iVar=1
{
s st1=$$GetPlStByT(pl1,TeamID)
s st1=$P(st1,"^",2)
s st2=$$GetPlStByT(pl2,TeamID)
s st2=$P(st2,"^",2)
s VZ=VZ-$$F1(st1,st2)
}
elseif iVar>1
{
if pl1>pl2 {s ind=pl2_"^"_pl1}
else {s ind=pl1_"^"_pl2}
s arG(iCount,1,ind)=1
}
else
{
s MyRet=-1
}
} //if i<11
s pl=$P(sTemp,"^",i)
s flDif=0
s flEqu=0
s sPlSt=$$GetPlStByT(pl,TeamID)
s iAmount=$P(sPlSt,"^",1)
f j=1:1:iAmount
{
s PlSt=$P(sPlSt,"^",j+1)
if PlSt=ST {s flEqu=1}
else {s flDif=1}
}
// s PlSt=$O(^dPlayerStyle(pl,""))
// while PlSt'=""
// {
// if PlSt=ST {s flEqu=1}
// else {s flDif=1}
// s PlSt=$O(^dPlayerStyle(pl,PlSt))
// }
if (flEqu*flDif)=0
{
if flEqu {s VZ=VZ-2}
}
else
{
s ind=pl_"^"_ST
s arG(iCount,2,ind)=1
}
} //f i=1:1:16
s sTemp=$G(^dGam(tLoc,d2))
s VZ=VZ-$P(sTemp,"^",17)
s ST=$P(sTemp,"^",18)
f i=1:1:16
{
if i<11
{
s pl1=$P(sTemp,"^",i)
s pl2=$P(sTemp,"^",(i+1))
s iVar=$$CountVarF1(pl1,pl2,TeamID)
if iVar=1
{
s st1=$$GetPlStByT(pl1,TeamID)
s st1=$P(st1,"^",2)
s st2=$$GetPlStByT(pl2,TeamID)
s st2=$P(st2,"^",2)
s VZ=VZ+$$F1(st1,st2)
}
elseif iVar>1
{
if pl1>pl2 {s ind=pl2_"^"_pl1}
else {s ind=pl1_"^"_pl2}
if $D(arG(iCount,1,ind)) {k arG(iCount,1,ind)}
else {s arG(iCount,1,ind)=-1}
}
else
{
s MyRet=-1
}
} //if i<11
s pl=$P(sTemp,"^",i)
s flDif=0
s flEqu=0
s sPlSt=$$GetPlStByT(pl,TeamID)
s iAmount=$P(sPlSt,"^",1)
f j=1:1:iAmount
{
s PlSt=$P(sPlSt,"^",j+1)
if PlSt=ST {s flEqu=1}
else {s flDif=1}
}
// s PlSt=$O(^dPlayerStyle(pl,""))
// while PlSt'=""
// {
// if PlSt=ST {s flEqu=1}
// else {s flDif=1}
// s PlSt=$O(^dPlayerStyle(pl,PlSt))
// }
if flEqu*flDif=0
{
if flEqu {s VZ=VZ+2}
}
else
{
s ind=pl_"^"_ST
if $D(arG(iCount,2,ind)) {k arG(iCount,2,ind)}
else {s arG(iCount,2,ind)=-1}
}
} //f i=1:1:16
s iVars=iVars*var
s flEx=(iMaxVars
s arG(iCount)=VZ
k ^AnaliseVar(var,tLoc,dd)
s dd=$O(^AnaliseVar(var,tLoc,dd))
} //while (dd'="")&&('flEx)
s tLoc=$O(^AnaliseVar(var,tLoc))
} //while (t'="")&&('flEx)
s var=$O(^AnaliseVar(var))
} //while (var'="")&&('flEx)
if MyRet<0 {q "0^"_MyRet}
// заполним участников
s g=$O(arG(""))
while g'=""
{
s tg=$O(arG(g,""))
while tg'=""
{
s ind=$O(arG(g,tg,""))
while ind'=""
{
s pl=$P(ind,"^",1)
if '$D(arPl(pl))
{
s sPlSt=$$GetPlStByT(pl,TeamID)
s arPl(pl)=$P(sPlSt,"^",2)
s iAmount=$P(sPlSt,"^",1)
f j=1:1:iAmount
{
s PlSt=$P(sPlSt,"^",j+1)
s ^MyRez(pl,PlSt)=0
}
// s st=$O(^dPlayerStyle(pl,""))
// s arPl(pl)=st
// while st'=""
// {
// s ^MyRez(pl,st)=0
// s st=$O(^dPlayerStyle(pl,st))
// }
}
if tg=1
{
s pl=$P(ind,"^",2)
if '$D(arPl(pl))
{
s sPlSt=$$GetPlStByT(pl,TeamID)
s arPl(pl)=$P(sPlSt,"^",2)
s iAmount=$P(sPlSt,"^",1)
f j=1:1:iAmount
{
s PlSt=$P(sPlSt,"^",j+1)
s ^MyRez(pl,PlSt)=0
}
// s st=$O(^dPlayerStyle(pl,""))
// s arPl(pl)=st
// while st'=""
// {
// s ^MyRez(pl,st)=0
// s st=$O(^dPlayerStyle(pl,st))
// }
}
}
s ind=$O(arG(g,tg,ind))
}
s tg=$O(arG(g,tg))
}
s g=$O(arG(g))
}
// считаем!
s iCountRez=0
do CountGame()
s pl=$O(arPl(""))
while pl'=""
{
s st=$G(arPl(pl))
s st=$$GetNextSt(pl,TeamID,st)
// s sPlSt=$$GetPlStByT(pl,TeamID)
// s iCount=$P(sPlSt,"^",1)
// s fl=0
// f j=2:1:iCount+1
// {
// s CurSt=$P(sPlSt,"^",j)
// if (fl=0)&&(CurSt=st)
// {
// s st=CurSt
// s fl=1
// }
// }
// if 'fl {s st=""}
//s st=$O(^dPlayerStyle(pl,st))
if st=""
{
while (st="")&&(pl'="")
{
s pl=$O(arPl(pl))
if pl'=""
{
s st=$G(arPl(pl))
s st=$$GetNextSt(pl,TeamID,st)
//s st=$O(^dPlayerStyle(pl,st))
}
}
if pl'=""
{
s arPl(pl)=st
s pl=$O(arPl(pl),-1)
while pl'=""
{
s arPl(pl)=$$GetNextSt(pl,TeamID,"") //$O(^dPlayerStyle(pl,""))
s pl=$O(arPl(pl),-1)
}
s pl=$O(arPl(""))
}
}
else
{
s arPl(pl)=st
}
if pl'="" {do CountGame()}
} //while pl'=""
// Теперь результат
if iCountRez
{
s sTemp=$H
s sTemp1=$P(sTemp,",",1)
s sTemp2=$P(sTemp,",",2)
while $L(sTemp2)<5
{
s sTemp2="0"_sTemp2
}
s TrID=sTemp1_sTemp2
s TrID=+TrID
s PlID=$O(^MyRez(""))
while PlID'=""
{
s st=$O(^MyRez(PlID,""))
while st'=""
{
if ^MyRez(PlID,st)=0
{
do DelPlStByT(PlID,TeamID,st)
// if '$D(^dPlayerStyle(PlID))
// {
// s ^dPlayerStyle(PlID,1)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,2)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,3)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,4)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,5)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,6)=^sPlayers(PlID)
// }
//
// s ^TRANSACTIONS(TrID,TeamID,PlID,st)="k"
// s TrID=TrID+1
// k ^dPlayerStyle(PlID,st)
s MyRet=MyRet+1
}
s st=$O(^MyRez(PlID,st))
}
s PlID=$O(^MyRez(PlID))
}
}
q iCountRez_"^"_MyRet
Analise4(TeamID2) PUBLIC
s AllIskl=0
s RetIskl=0
s ntall=$H
s nd=$P(ntall,",",1)
s nt=$P(ntall,",",2)
s TempAmount=$O(^AnaliseVar(""))
while TempAmount'=""
{
s AnRet=$$Analise3(1,TeamID2)
s TempAmount=$P(AnRet,"^",1)
s IsclCount=$P(AnRet,"^",2)
if IsclCount<0
{
s TempAmount=""
s RetIskl=-1
}
elseif TempAmount>0
{
//w TempAmount,!
s AllIskl=AllIskl+IsclCount
//w IsclCount,!
s ntall2=$H
s nd2=$P(ntall2,",",1)
s nt2=$P(ntall2,",",2)
if (((nd2-nd)*86400)+(nt2-nt))>10
{
s TempAmount=""
s RetIskl=AllIskl+1
}
else {s TempAmount=$O(^AnaliseVar(""))}
}
else
{
s TempAmount=""
s RetIskl=-1
}
}
q RetIskl
CountGame()
s lflOk=2
s ld=$O(arG(""))
while (ld'="")&&lflOk
{
s liSum=0
s ltg=$O(arG(ld,""))
while ltg'=""
{
s lind=$O(arG(ld,ltg,""))
while lind'=""
{
if ltg=1
{
s lpl1=$P(lind,"^",1)
s lpl2=$P(lind,"^",2)
s liSum=liSum+($$F1($G(arPl(lpl1)),$G(arPl(lpl2)))*$G(arG(ld,ltg,lind)))
}
elseif ltg=2
{
s lpl=$P(lind,"^",1)
s lst=$P(lind,"^",2)
if $G(arPl(lpl))=lst
{
s liSum=liSum+(2*$G(arG(ld,ltg,lind)))
}
}
s lind=$O(arG(ld,ltg,lind))
}
s ltg=$O(arG(ld,ltg))
}
s lflOk=($G(arG(ld))=liSum)
s ld=$O(arG(ld))
}
if lflOk=1
{
s iCountRez=iCountRez+1
s lpl=$O(arPl(""))
while lpl'=""
{
s lst=$G(arPl(lpl))
s ^MyRez(lpl,lst)=$G(^MyRez(lpl,lst))+1
s lpl=$O(arPl(lpl))
}
}
q
IndexTeam2(TeamID) PUBLIC
{
//Пурга формирует индекс первого уровня
k ^dGam(0)
k ^dGam1
k ^dGam2
s ErCount=0
// заполним массив коллизий
s arCol(0,1)=""
s arCol(0,2)=""
s arCol(1,1)=""
s arCol(1,2)=""
s arCol(2,1)="3"
s arCol(2,2)="6"
s arCol(3,1)="2"
s arCol(3,2)="4"
s arCol(4,1)="3"
s arCol(4,2)="5"
s arCol(5,1)="4"
s arCol(5,2)="6"
s arCol(6,1)="5"
s arCol(6,2)="2"
s Day=$O(^dGam(TeamID,""))
while Day'=""
{
s Amount=$$CountVar(TeamID,Day)
if Amount>1
{
s ^dGam1(Amount,TeamID,Day)=^dGam(TeamID,Day)
}
else
{
s sTemp=^dGam(TeamID,Day)
s iSum=0
s VZ=$P(sTemp,"^",17)
s ST=$P(sTemp,"^",18)
s PrevSt=0
f i=1:1:11
{
s adLoc=0
s Pl=$P(sTemp,"^",i)
s sCurSt=$$GetPlStByT(Pl,TeamID)
s CurSt=$P(sCurSt,"^",2)
//s CurSt=$O(^dPlayerStyle(Pl,""))
if CurSt=ST {s adLoc=2}
if PrevSt=CurSt {s adLoc=adLoc+12}
elseif (PrevSt=arCol(CurSt,1))||(PrevSt=arCol(CurSt,2))
{
s adLoc=adLoc-4
}
s iSum=iSum+adLoc
s PrevSt=CurSt
}
f i=12:1:16
{
s Pl=$P(sTemp,"^",i)
s sCurSt=$$GetPlStByT(Pl,TeamID)
s CurSt=$P(sCurSt,"^",2)
//s CurSt=$O(^dPlayerStyle(Pl,""))
if CurSt=ST {s iSum=iSum+2}
}
if iSum=VZ
{
s ^dGoodGam(TeamID,Day)=^dGam(TeamID,Day)
k ^dGam(TeamID,Day)
}
else
{
w Day," ",iSum," ",VZ,!
s ErCount=ErCount+1
//w TeamID_","_Day_" д.б.:"_VZ_" есть:"_iSum,!
}
}
s Day=$O(^dGam(TeamID,Day))
}
q ErCount
}
MainProg(TaskID,TeamID)
//Пурга осуществляет полный расчет для одной команды
k ^MyRez
k arPl
k arGame
k arPlInd
k arPlInd2
k arPlNum
//k ^Otladka
//s OtlCount=0
s VariantInd=0
s iPlCount=0
// заполним массив коллизий
s arCol(1,1)=""
s arCol(1,2)=""
s arCol(2,1)="3"
s arCol(2,2)="6"
s arCol(3,1)="2"
s arCol(3,2)="4"
s arCol(4,1)="3"
s arCol(4,2)="5"
s arCol(5,1)="4"
s arCol(5,2)="6"
s arCol(6,1)="5"
s arCol(6,2)="2"
// Сначала сформируем массив возможных значений стиля игроков для игры
s DayID=$O(^dGam(TaskID,""))
while DayID'=""
{
s sTemp=^dGam(TaskID,DayID)
f i=1:1:16
{
s plID=$P(sTemp,"^",i)
if $D(arPl(plID))\10=0
{
s iPlCount=iPlCount+1
s arPlInd(DayID,plID)=i
s arPlInd2(DayID,i)=plID
s arPlNum(iPlCount)=plID
// Добавляем в оперативный массив
s sPlSt=$$GetPlStByT(plID,TeamID)
s iCount=$P(sPlSt,"^",1)
f j=2:1:iCount+1
{
s ind2=$P(sPlSt,"^",j)
if $D(arGame(DayID,i))=0
{
s arGame(DayID,i)=ind2
s arPl(plID)=ind2
}
s arPl(plID,ind2)=arGame(DayID,i)
s ^MyRez(plID,ind2)=0
}
// if $D(^dPlayerStyle(plID))\10=1
// {
// s ind2=$O(^dPlayerStyle(plID,""))
// while ind2'=""
// {
// if $D(arGame(DayID,i))=0
// {
// s arGame(DayID,i)=ind2
// s arPl(plID)=ind2
// }
// s arPl(plID,ind2)=arGame(DayID,i)
// s ^MyRez(plID,ind2)=0
// s ind2=$O(^dPlayerStyle(plID,ind2))
// } //while ind2'=""
// } //if $Data(^dPlayerStyle(plID))\10=1
// else
// {
// // Возможны все стили
// s ind2=$O(^sFavStyle(""))
// while ind2'=""
// {
// if $D(arGame(DayID,i))=0
// {
// s arGame(DayID,i)=ind2
// s arPl(plID)=ind2
// }
// s arPl(plID,ind2)=arGame(DayID,i)
// s ^MyRez(plID,ind2)=0
// s ind2=$O(^sFavStyle(ind2))
// } //while ind2'=""
// } //else if $Data(^dPlayerStyle(plID))\10=1
} //if $Data(arPl(plID))\10=0
else
{
s arPlInd(DayID,plID)=i
s arPlInd2(DayID,i)=plID
// игрок уже есть, его только в arGame
s arGame(DayID,i)=arPl(plID)
// s ind2=$O(arPl(plID,""))
// while ind2'=""
// {
// s ^MyRez(plID,ind2)=0
// s ind2=$O(arPl(plID,ind2))
// } //while ind2'=""
} //else if $Data(arPl(plID))\10=0
} //f i=1:1:16
s arGame(DayID,"VZ")=$P(sTemp,"^",17)
s arGame(DayID,"ST")=$P(sTemp,"^",18)
s DayID=$O(^dGam(TaskID,DayID))
} //while DayID'=""
w iPlCount,!
w $$CountVar2(),!
s iCountRez=0
// Начинаем перебор вариантов
s i=iPlCount
s indSt=$O(arPl(arPlNum(iPlCount),""))
while i>0
{
// Делаем расчет варианта
do CountGame2()
// Затем меняем состояние i-го элемента
s indSt=arPl(arPlNum(i))
s NewInd=$O(arPl(arPlNum(i),indSt))
if NewInd=""
{
// Перенос в более старший разряд
while (i>0)&&(NewInd="")
{
// пока у i-го игрока стилей больше нет
s NewInd=$O(arPl(arPlNum(i),NewInd))
if NewInd'=indSt
{
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(^dGam(TaskID,""))
while DayID'=""
{
if $D(arPlInd(DayID,arPlNum(i)))=1 {s arGame(DayID,arPlInd(DayID,arPlNum(i)))=indSt}
s DayID=$O(^dGam(TaskID,DayID))
}
} //if NewInd'=indSt
s i=i-1
if i>0
{
s indSt=arPl(arPlNum(i))
s NewInd=$O(arPl(arPlNum(i),indSt))
} //if i>0
} //while (i>0)&&(NewInd="")
if (i>0)&&(NewInd'=indSt)
{
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(^dGam(TaskID,""))
while DayID'=""
{
if $D(arPlInd(DayID,arPlNum(i)))=1 {s arGame(DayID,arPlInd(DayID,arPlNum(i)))=indSt}
s DayID=$O(^dGam(TaskID,DayID))
}
} //if (i>0)&&(NewInd'=indSt)
if i>0 {s i=iPlCount}
} //if NewInd=""
else
{
// меняем состояние в текущем разряде
s indSt=NewInd
s arPl(arPlNum(i))=indSt
s DayID=$O(^dGam(TaskID,""))
while DayID'=""
{
if $D(arPlInd(DayID,arPlNum(i)))=1 {s arGame(DayID,arPlInd(DayID,arPlNum(i)))=indSt}
s DayID=$O(^dGam(TaskID,DayID))
}
} //elseif NewInd'=indSt
} //while i>0
//q
// Теперь результат
if iCountRez
{
s sTemp=$H
s sTemp1=$P(sTemp,",",1)
s sTemp2=$P(sTemp,",",2)
while $L(sTemp2)<5
{
s sTemp2="0"_sTemp2
}
s TrID=sTemp1_sTemp2
s TrID=+TrID
s PlID=$O(^MyRez(""))
while PlID'=""
{
s st=$O(^MyRez(PlID,""))
while st'=""
{
if ^MyRez(PlID,st)=0
{
do DelPlStByT(PlID,TeamID,st)
// if '$D(^dPlayerStyle(PlID))
// {
// s ^dPlayerStyle(PlID,1)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,2)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,3)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,4)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,5)=^sPlayers(PlID)
// s ^dPlayerStyle(PlID,6)=^sPlayers(PlID)
// }
//
// s ^TRANSACTIONS(TrID,TeamID,PlID,st)="k"
// s TrID=TrID+1
// k ^dPlayerStyle(PlID,st)
}
s st=$O(^MyRez(PlID,st))
}
s PlID=$O(^MyRez(PlID))
}
}
q
CountVar2()
//Пурга умеет считать количество вариантов
new cvInd1,cvInd2, iAmount, iSum
s cvInd1=$O(arPl(""))
s iSum=1
while cvInd1'=""
{
s cvInd2=$O(arPl(cvInd1,""))
s iAmount=0
while cvInd2'=""
{
s iAmount=iAmount+1
s cvInd2=$O(arPl(cvInd1,cvInd2))
} //while cvInd2'=""
s iSum=iSum*iAmount
s cvInd1=$O(arPl(cvInd1))
} //while cvInd1'=""
q iSum
CountGame2()
// Пурга умеет обсчитывать взаимопонимание для текщуго состояния
s flOk=1
s DayID=$O(^dGam(TaskID,""))
while (flOk=1)&&(DayID'="")
{
s iRet=0
s LastSt=0
f iLoc=1:1:11
{
s adLoc=0
if arGame(DayID,iLoc)=arGame(DayID,"ST") {s adLoc=2}
if LastSt=arGame(DayID,iLoc) {s adLoc=adLoc+12}
elseif (LastSt=arCol(arGame(DayID,iLoc),1))||(LastSt=arCol(arGame(DayID,iLoc),2))
{
s adLoc=adLoc-4
}
s iRet=iRet+adLoc
s LastSt=arGame(DayID,iLoc)
} //f iLoc=1:1:11
if iRet>arGame(DayID,"VZ") {s flOk=0}
else
{
f iLoc=12:1:16
{
if arGame(DayID,iLoc)=arGame(DayID,"ST") {s iRet=iRet+2}
} //f iLoc=12:1:16
if iRet'=arGame(DayID,"VZ") {s flOk=0}
}
s DayID=$O(^dGam(TaskID,DayID))
} //while (flOk=1)&&(DayID'="")
if flOk=1
{
s iCountRez=iCountRez+1
do WriteRez()
}
q
WriteRez()
// пурга пишет подходящий вариант
new PlInd,arFin,CurSt
s VariantInd=VariantInd+1
s PlInd=$O(arPl(""))
while PlInd'=""
{
s CurSt=arPl(PlInd)
s ^MyRez(PlInd,CurSt)=^MyRez(PlInd,CurSt)+1
s PlInd=$O(arPl(PlInd))
}
q
KillTeam2(TeamID) PUBLIC
{
// Пурга умеет убирать все игры из GoodGam
s Day=$O(^dGoodGam(TeamID,""))
while Day'=""
{
s ^dGam(TeamID,Day)=^dGoodGam(TeamID,Day)
k ^dGoodGam(TeamID,Day)
s Day=$O(^dGoodGam(TeamID,Day))
}
s ^dBT(TeamID)=$H
}
KillTeam(TeamID) PUBLIC
{
// Пурга умеет сбрасывать все стили одной команды
s d=$O(^dGoodGam(TeamID,""))
while d'=""
{
s ^dGam(TeamID,d)=^dGoodGam(TeamID,d)
k ^dGoodGam(TeamID,d)
s d=$O(^dGoodGam(TeamID,d))
}
s a=$$IndexTeam(TeamID,1)
s d=$O(^dGam(TeamID,""))
while d'=""
{
s sTemp=$G(^dGam(TeamID,d))
f i=1:1:16
{
s Pl=$P(sTemp,"^",i)
s arPl(Pl)=""
}
s d=$O(^dGam(TeamID,d))
}
k arPl(0)
s Pl=$O(arPl(""))
while Pl'=""
{
s st=$$GetPlStByT(Pl,TeamID)
if $P(st,"^",1)<6
{
s F=^dPlT(Pl,TeamID,"F")
s L=^dPlT(Pl,TeamID,"L")
f i=1:1:6
{
s ^dPlStD(Pl,F,i)=1
s ^dPlStD(Pl,L,i)=0
}
}
s Pl=$O(arPl(Pl))
}
}
CountVarTeam(TaskID) PUBLIC
{
s DayID=$O(^dGam(TaskID,""))
s iRet=1
while (DayID'="")&&(iRet<1000000000000)
{
s sTemp=^dGam(TaskID,DayID)
f i=1:1:16
{
s plID=$P(sTemp,"^",i)
if '$D(arPl(plID))
{
//s iCount=0
//s st=$O(^dPlayerStyle(plID,""))
//while st'=""
//{
// s iCount=iCount+1
// s st=$O(^dPlayerStyle(plID,st))
//}
//if iCount=0 {s arPl(plID)=6}
//else {s arPl(plID)=iCount}
s arPl(plID)=$P($$GetPlStByT(plID,TaskID),"^",1)
s iRet=iRet*arPl(plID)
}
} //f i=1:1:16
s DayID=$O(^dGam(TaskID,DayID))
} //while DayID'=""
q iRet
}
GoToBad(t,d1,d2) PUBLIC
{
if $D(^dGam(t,d1)) {s d=d1}
else {s d=$O(^dGam(t,d1))}
while (d<=d2)&&(d'="")
{
s ^dBadGam(t,d)=^dGam(t,d)
k ^dGam(t,d)
s d=$O(^dGam(t,d))
}
}