Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package SaltyCracker::EdgeBuilder;
- use 5.006;
- use strict;
- use warnings;
- use constant BOX_SIZE => 9;
- use List::Util qw<any uniq>;
- use parent qw<Exporter>;
- our @EXPORT = qw<>;
- our @EXPORT_OK = qw<getEdges>;
- our %EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]);
- =head1 NAME
- SaltyCracker::EdgeBuilder - The great new SaltyCracker::EdgeBuilder!
- =head1 VERSION
- Version 0.01
- =cut
- our $VERSION = '0.01';
- my $edges;
- =head1 SYNOPSIS
- Quick summary of what the module does.
- Perhaps a little code snippet.
- use SaltyCracker::EdgeBuilder;
- my $foo = SaltyCracker::EdgeBuilder->new();
- ...
- =head1 EXPORT
- A list of functions that can be exported. You can delete this section
- if you don't export anything, such as for a purely object-oriented module.
- =head1 SUBROUTINES/METHODS
- =head2 getEdges
- =cut
- sub getEdges {
- buildEdges();
- $edges;
- }
- =head2 buildEdges
- =cut
- sub buildEdges {
- for (my $i = 1; $i <= BOX_SIZE; ++$i) {
- for (my $j = 1; $j <= BOX_SIZE; ++$j) {
- my @n;
- for (my $k = 1; $k <= BOX_SIZE; ++$k) {
- push(@n, int($i.$k)) unless $i.$j == $i.$k;
- }
- push(@$edges, [int($i.$j),\@n]);
- }
- }
- for my $elem (@$edges) {
- my $a = $elem->[1];
- my @s = split//,$elem->[0];
- for (my $i = 1; $i <= BOX_SIZE; ++$i) {
- my $n = int($i.$s[1]);
- push(@$a, $n) unless $n == $elem->[0];
- }
- }
- my $sr = sqrt(BOX_SIZE);
- my $boxArr;
- my $buildBoxArr;
- for (my $i = 1; $i <= BOX_SIZE; ++$i) {
- for (my $j = 1; $j <= BOX_SIZE; ++$j) {
- push(@$buildBoxArr, $i.$j);
- if ($j % $sr == 0) {
- push(@$boxArr, $buildBoxArr);
- $buildBoxArr = undef;
- }
- }
- }
- my @sortedBoxArr = sort {($a->[0] % 10) <=> ($b->[0] % 10)} @$boxArr;
- my $counter = 0;
- $boxArr = undef;
- $buildBoxArr = undef;
- for my $elem (@sortedBoxArr) {
- if ($counter >= $sr) {
- push(@$boxArr, $buildBoxArr);
- $counter = 0;
- $buildBoxArr = undef;
- }
- push(@$buildBoxArr, @$elem);
- ++$counter;
- }
- push(@$boxArr, $buildBoxArr);
- for my $e (@$edges) {
- my $pos = $e->[0];
- my $e_arr = $e->[1];
- for my $b (@$boxArr) {
- if (any {$pos == $_} @$b) {
- for my $ait (@$b) {
- push(@$e_arr, $ait) unless $pos == $ait;
- }
- @$e_arr = uniq(@$e_arr);
- last;
- }
- }
- }
- }
- =head1 AUTHOR
- SaltyCracker, C<< <SaltyCracker> >>
- =head1 BUGS
- Please report any bugs or feature requests to C<bug-saltycracker-sudoku at rt.cpan.org>, or through
- the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SaltyCracker-Sudoku>. I will be notified, and then you'll
- automatically be notified of progress on your bug as I make changes.
- =head1 SUPPORT
- You can find documentation for this module with the perldoc command.
- perldoc SaltyCracker::EdgeBuilder
- You can also look for information at:
- =over 4
- =item * RT: CPAN's request tracker (report bugs here)
- L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=SaltyCracker-Sudoku>
- =item * AnnoCPAN: Annotated CPAN documentation
- L<http://annocpan.org/dist/SaltyCracker-Sudoku>
- =item * CPAN Ratings
- L<http://cpanratings.perl.org/d/SaltyCracker-Sudoku>
- =item * Search CPAN
- L<http://search.cpan.org/dist/SaltyCracker-Sudoku/>
- =back
- =head1 ACKNOWLEDGEMENTS
- =head1 LICENSE AND COPYRIGHT
- Copyright 2020 SaltyCracker.
- This program is free software; you can redistribute it and/or modify it
- under the terms of the the Artistic License (2.0). You may obtain a
- copy of the full license at:
- L<http://www.perlfoundation.org/artistic_license_2_0>
- Any use, modification, and distribution of the Standard or Modified
- Versions is governed by this Artistic License. By using, modifying or
- distributing the Package, you accept this license. Do not use, modify,
- or distribute the Package, if you do not accept this license.
- If your Modified Version has been derived from a Modified Version made
- by someone other than you, you are nevertheless required to ensure that
- your Modified Version complies with the requirements of this license.
- This license does not grant you the right to use any trademark, service
- mark, tradename, or logo of the Copyright Holder.
- This license includes the non-exclusive, worldwide, free-of-charge
- patent license to make, have made, use, offer to sell, sell, import and
- otherwise transfer the Package with respect to any patent claims
- licensable by the Copyright Holder that are necessarily infringed by the
- Package. If you institute patent litigation (including a cross-claim or
- counterclaim) against any party alleging that the Package constitutes
- direct or contributory patent infringement, then this Artistic License
- to you shall terminate on the date that such litigation is filed.
- Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER
- AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY
- YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR
- CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR
- CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- =cut
- 1; # End of SaltyCracker::EdgeBuilder
Add Comment
Please, Sign In to add comment