BookmarkSubscribeRSS Feed
Ksharp
Super User

I thought a puzzle from a post of IML . Just have a fun .

Suppose we have a 3*2 matrix

x11 x12

x21 x22

x31 x32

They are all positive integer (i.e.  1 2 3 4.....). If we know its column total and row total. How many matrix are there ,could be satisfied with this condition?

                                 col_total

                 x11 x12      5

                 x21 x22      5

                 x31 x32      7

row_total      8      9

Xia Keshan

5 REPLIES 5
Ksharp
Super User

Nobody ? Actually it is easy just brute enumerate (greedy algorithm) .  it is 15 .

data _null_;
do x11=1 to 5 ;
 do x12=1 to  5 ;
  do x21=1 to 5 ;
   do x22=1 to  5 ;
     do x31=1 to  7 ;
        do x32=1 to  7 ;
         if x11+x12=5 and
             x21+x22=5 and
             x31+x32=7 and
             x11+x21+x31=8 and
             x12+x22+x32=9 then do; n+1;
             put _all_ /;     end;
       end;
     end;
   end;
  end;
 end;
end;
run;








x11=1 x12=4 x21=1 x22=4 x31=6 x32=1 n=1 _ERROR_=0 _N_=1

x11=1 x12=4 x21=2 x22=3 x31=5 x32=2 n=2 _ERROR_=0 _N_=1

x11=1 x12=4 x21=3 x22=2 x31=4 x32=3 n=3 _ERROR_=0 _N_=1

x11=1 x12=4 x21=4 x22=1 x31=3 x32=4 n=4 _ERROR_=0 _N_=1

x11=2 x12=3 x21=1 x22=4 x31=5 x32=2 n=5 _ERROR_=0 _N_=1

x11=2 x12=3 x21=2 x22=3 x31=4 x32=3 n=6 _ERROR_=0 _N_=1

x11=2 x12=3 x21=3 x22=2 x31=3 x32=4 n=7 _ERROR_=0 _N_=1

x11=2 x12=3 x21=4 x22=1 x31=2 x32=5 n=8 _ERROR_=0 _N_=1

x11=3 x12=2 x21=1 x22=4 x31=4 x32=3 n=9 _ERROR_=0 _N_=1

x11=3 x12=2 x21=2 x22=3 x31=3 x32=4 n=10 _ERROR_=0 _N_=1

x11=3 x12=2 x21=3 x22=2 x31=2 x32=5 n=11 _ERROR_=0 _N_=1

x11=3 x12=2 x21=4 x22=1 x31=1 x32=6 n=12 _ERROR_=0 _N_=1

x11=4 x12=1 x21=1 x22=4 x31=3 x32=4 n=13 _ERROR_=0 _N_=1

x11=4 x12=1 x21=2 x22=3 x31=2 x32=5 n=14 _ERROR_=0 _N_=1

x11=4 x12=1 x21=3 x22=2 x31=1 x32=6 n=15 _ERROR_=0 _N_=1

Xia Keshan

Haikuo
Onyx | Level 15

It is 15. I like to break them up first.

data h1;

     do x11=1 to 4;

           x12=5-x11;

           output;

     end;

run;

data h2;

     do x21=1 to 4;

           x22=5-x21;

           output;

     end;

run;

data h3;

     do x31=1 to 6;

           x32=7-x31;

           output;

     end;

run;

proc sql;

     create table w1 as 

           select * from h1, h2, h3

                where x11+x21+x31=8 and x12+x22+x32=9;

quit;

Haikuo

PGStats
Opal | Level 21

If you have a SAS/OR licence, this puzzle can be solved as a constraint satisfaction problem with proc CLP :

data lincon;

_TYPE_ = "EQ";

input x11 x12 x21 x22 x31 x32 _RHS_;

datalines;

1 1 . . . . 5

. . 1 1 . . 5

. . . . 1 1 7

1 . 1 . 1 . 8

. 1 . 1 . 1 9

;

proc CLP condata=lincon USECONDATAVARS=1  domain=[1,10] findall out=soln;

run;

proc print data=soln; run;

PG

PG
Ksharp
Super User

Hi PG,

I can't believe you still response this one posted at a couple of weeks ago .

Actually it is from SAS/IML  . I posted here for a fun.

Best.

Xia Keshan

user24feb
Barite | Level 11

I have an additional solution and a question:

Proc Optmodel;

  Set Rows=1..3;

  Set Columns=1..2;

  Num Row_Sum{Rows}=[5 5 7];

  Num Col_Sum{Columns}=[8 9];

  Var x {i in Rows, j in Columns} >=0 Integer;

  Max z=0;

  Con Cons1{i in Rows}: Sum {j in Columns} x[i,j]=Row_Sum;

  Con Cons2{j in Columns}: Sum {i in Rows} x[i,j]=Col_Sum;

  Solve;

  Print x;

Quit;

The question is: Optmodel with a zero-objective in comparison to constraint programming; is there a significant performance difference if one "abuses" optmodel to solve linear constraint programmes (IF 1 solution is enough)?

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 1004 views
  • 0 likes
  • 4 in conversation