Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Number Grid Fillin

by hdb (Monsignor)
on Aug 15, 2017 at 12:40 UTC ( #1197422=note: print w/replies, xml ) Need Help??

in reply to Number Grid Fillin

Thanks for posting this inspiring problem. Similar to what tybalt89 has posted, one can significantly reduce the search space by checking whether for a given number in a given position the remaining numbers would still fit. Below some code to do that based on positions counting from 0 to 5 and each can be vertical or horizontal. Given the output it is nearly trivial to solve the puzzle manually.

use strict; use warnings; my @numbers = qw( 113443 143132 241131 321422 323132 331222 341114 412433 414422 431331 443112 444313 ); # find possible positions my %positions; for my $n (@numbers) { $positions{$n} = []; # frequency of digits in current number my @nfreq = (0) x 5; $nfreq[$_]++ for split //, $n; # check which position is possible for my $p (0..5) { # frequency of digits in current position w/o current number my @freq = (0) x 5; $freq[substr( $_, $p, 1 )]++ for @numbers; $freq[substr( $n, $p, 1 )]--; # check if position is feasible # ie enough of each digit available my $possible = 1; $freq[$_]<$nfreq[$_] and $possible = 0 for 1..4; push @{$positions{$n}}, $p if $possible; } } for my $n (sort { scalar(@{$positions{$a}}) <=> scalar(@{$positions{$b +}}) } @numbers) { print "Number $n can be at positions @{$positions{$n}}.\n"; }

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1197422]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (2)
As of 2022-05-21 07:22 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (76 votes). Check out past polls.