(извиняюсь за код школьника, это моя первая попытка работы со Strings в Mathematica, поэтому я оставил в своем размышлении, а также некоторые закомментированные значения отладки / трассировки)
charcountsvec[s_String, c_String] := Table[
If[StringTake[s, {i, i}] == c, 1, 0]
, {i, 1, StringLength[s]}
];
oddchars[s_String] := StringTake[s, {1, -1, 2}]; (*pick out odd chars*)
evenchars[s_String] := StringTake[s, {2, -1, 2}];
validatestr[str_String] :=
Block[{evencounts, oddcounts, answer1, answer2 (*, odds, evens*)},
evencounts = Accumulate@charcountsvec[(*evens=*)evenchars[str], "1"];
oddcounts = Accumulate@charcountsvec[(*odds=*)oddchars[str], "1"];
(*my interpretation of "number of 1's in odd positions the same as in even positions"*)
answer1 = Last[oddcounts] == Last[evencounts];
(*my interpretation of "for every..string...whether number of 1's in even/odd positions is not equal"*)
answer2 = Fold[And, True,
MapThread[Unequal, {Most[oddcounts], Most[evencounts]}]];
{str, And[answer1, answer2](*,odds,evens,oddcounts,evencounts,answer1,answer2*)}
];
Тестирование:
validatestr/@{"100001","101101","100100","100000","000000"}
{{"100001", True}, {"101101", True}, {"100100", False}, {"100000",
False}, {"000000", False}}
validatestr["0000001"](*odd length string pukes, and returns False*)
Во время оценки (Локальный) В [428]: = MapThread :: mptc: Несовместимые размеры объектов в позициях {2, 1} и {2, 2} MapThread [Unequal, {{0,0,0} , {0,0}}]; размеры: {3} и {2}. >>
(Локальный) Out [432] = {"0000001", False}