Re: identical rows in tables

• To: mathgroup at smc.vnet.net
• Subject: [mg97601] Re: identical rows in tables
• From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
• Date: Mon, 16 Mar 2009 06:28:19 -0500 (EST)
• Organization: Uni Leipzig
• References: <gpl5qr\$oss\$1@smc.vnet.net>

```Hi,
> I have a table of values
>
> e.g.{{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 2,
>    4, 3, 6, 5, 8, 7}, {1, 2, 3, 4, 5, 6, 7, 8}}
>
> and want to check if any rows are identical (so there are none in the above=
>  - I can remove last or first row which are supposed to be the same).

tab = {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {1, 4, 2,
6, 3, 8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8,
6}, {1, 2, 4, 3, 6, 5, 8, 7}, {1, 2, 3, 4, 5, 6, 7, 8}} ;

{Length[tab],
Length[tab /. {a___, b_, c___, b_, d___} :> {a, b, c, d}]}

gives
{7,6}

>
> But in the following {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {=
> 1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 8,
>    7, 6, 5, 4, 3, 2}, {1, 8, 6, 7, 4, 5, 2, 3}, {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6},....}
>
>  there is a pair {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6} which are the same.
>
> In an ideal world when I print out (in say TableForm)  the repeated rows ca=
> n be printed in red (or some specified colour)

So looks the ideal world ??

Grid[tab, ItemStyle -> {Automatic,
MapIndexed[If[# > 1, #2[[1]] -> Red, #2[[1]] -> Blue] & ,
Count[tab, #] & /@ tab]}]

>
> These rows are permutations if that makes any difference. The tables can be=
>  of any size (but always permutations of n numbers)
>
> as a subsidiary question is there an easy way to convert the tables into nu=
> mbers (or strings) eg
>
> {12345678,14628375,14263857 etc}
>

StringJoin @@@ Map[ToString, tab, {2}]

> Alternatively is there an easy way to perform permutations on strings of ch=
> aracters?
>

PermuteString[str_] :=
With[{lst = Characters[str]},
StringJoin @@ RandomSample[lst, Length[lst]]]

and