Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 16th, 2012  |  syntax: None  |  size: 6.93 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # by Abigail
  2. use strict;
  3. use DBI;
  4.  
  5. my $DBH = DBI->connect('dbi:SQLite:dbname=:memory:', undef, undef);
  6.  
  7. $DBH->do('
  8.   CREATE TABLE S (
  9.      v TINYINT UNSIGNED NOT NULL PRIMARY KEY
  10.   )');
  11.  
  12. $DBH->do("INSERT INTO S (v) VALUES ($_);") for (1 .. 6);
  13.  
  14.  
  15. my $SQL = q{
  16.   SELECT  c11.v, c12.v, c13.v, c14.v, c15.v, c16.v,
  17.           c21.v, c22.v, c23.v, c24.v, c25.v, c26.v,
  18.           c31.v, c32.v, c33.v, c34.v, c35.v, c36.v,
  19.           c41.v, c42.v, c43.v, c44.v, c45.v, c46.v,
  20.           c51.v, c52.v, c53.v, c54.v, c55.v, c56.v,
  21.           c61.v, c62.v, c63.v, c64.v, c65.v, c66.v
  22.     FROM  S c11, S c12, S c13, S c14, S c15, S c16,
  23.           S c21, S c22, S c23, S c24, S c25, S c26,
  24.           S c31, S c32, S c33, S c34, S c35, S c36,
  25.           S c41, S c42, S c43, S c44, S c45, S c46,
  26.           S c51, S c52, S c53, S c54, S c55, S c56,
  27.           S c61, S c62, S c63, S c64, S c65, S c66
  28.    WHERE  1
  29.  
  30.           -- Row 1
  31.      AND  c11.v != c12.v
  32.      AND  c11.v != c13.v
  33.      AND  c11.v != c14.v
  34.      AND  c11.v != c15.v
  35.      AND  c11.v != c16.v
  36.      AND  c12.v != c13.v
  37.      AND  c12.v != c14.v
  38.      AND  c12.v != c15.v
  39.      AND  c12.v != c16.v
  40.      AND  c13.v != c14.v
  41.      AND  c13.v != c15.v
  42.      AND  c13.v != c16.v
  43.      AND  c14.v != c15.v
  44.      AND  c14.v != c16.v
  45.      AND  c15.v != c16.v
  46.  
  47.           -- Row 2
  48.      AND  c21.v != c22.v
  49.      AND  c21.v != c23.v
  50.      AND  c21.v != c24.v
  51.      AND  c21.v != c25.v
  52.      AND  c21.v != c26.v
  53.      AND  c22.v != c23.v
  54.      AND  c22.v != c24.v
  55.      AND  c22.v != c25.v
  56.      AND  c22.v != c26.v
  57.      AND  c23.v != c24.v
  58.      AND  c23.v != c25.v
  59.      AND  c23.v != c26.v
  60.      AND  c24.v != c25.v
  61.      AND  c24.v != c26.v
  62.      AND  c25.v != c26.v
  63.  
  64.           -- Row 3
  65.      AND  c31.v != c32.v
  66.      AND  c31.v != c33.v
  67.      AND  c31.v != c34.v
  68.      AND  c31.v != c35.v
  69.      AND  c31.v != c36.v
  70.      AND  c32.v != c33.v
  71.      AND  c32.v != c34.v
  72.      AND  c32.v != c35.v
  73.      AND  c32.v != c36.v
  74.      AND  c33.v != c34.v
  75.      AND  c33.v != c35.v
  76.      AND  c33.v != c36.v
  77.      AND  c34.v != c35.v
  78.      AND  c34.v != c36.v
  79.      AND  c35.v != c36.v
  80.  
  81.           -- Row 4
  82.      AND  c41.v != c42.v
  83.      AND  c41.v != c43.v
  84.      AND  c41.v != c44.v
  85.      AND  c41.v != c45.v
  86.      AND  c41.v != c46.v
  87.      AND  c42.v != c43.v
  88.      AND  c42.v != c44.v
  89.      AND  c42.v != c45.v
  90.      AND  c42.v != c46.v
  91.      AND  c43.v != c44.v
  92.      AND  c43.v != c45.v
  93.      AND  c43.v != c46.v
  94.      AND  c44.v != c45.v
  95.      AND  c44.v != c46.v
  96.      AND  c45.v != c46.v
  97.  
  98.           -- Row 5
  99.      AND  c51.v != c52.v
  100.      AND  c51.v != c53.v
  101.      AND  c51.v != c54.v
  102.      AND  c51.v != c55.v
  103.      AND  c51.v != c56.v
  104.      AND  c52.v != c53.v
  105.      AND  c52.v != c54.v
  106.      AND  c52.v != c55.v
  107.      AND  c52.v != c56.v
  108.      AND  c53.v != c54.v
  109.      AND  c53.v != c55.v
  110.      AND  c53.v != c56.v
  111.      AND  c54.v != c55.v
  112.      AND  c54.v != c56.v
  113.      AND  c55.v != c56.v
  114.  
  115.           -- Row 6
  116.      AND  c61.v != c62.v
  117.      AND  c61.v != c63.v
  118.      AND  c61.v != c64.v
  119.      AND  c61.v != c65.v
  120.      AND  c61.v != c66.v
  121.      AND  c62.v != c63.v
  122.      AND  c62.v != c64.v
  123.      AND  c62.v != c65.v
  124.      AND  c62.v != c66.v
  125.      AND  c63.v != c64.v
  126.      AND  c63.v != c65.v
  127.      AND  c63.v != c66.v
  128.      AND  c64.v != c65.v
  129.      AND  c64.v != c66.v
  130.      AND  c65.v != c66.v
  131.  
  132.           -- Col 1
  133.      AND  c11.v != c21.v
  134.      AND  c11.v != c31.v
  135.      AND  c11.v != c41.v
  136.      AND  c11.v != c51.v
  137.      AND  c11.v != c61.v
  138.      AND  c21.v != c31.v
  139.      AND  c21.v != c41.v
  140.      AND  c21.v != c51.v
  141.      AND  c21.v != c61.v
  142.      AND  c31.v != c41.v
  143.      AND  c31.v != c51.v
  144.      AND  c31.v != c61.v
  145.      AND  c41.v != c51.v
  146.      AND  c41.v != c61.v
  147.      AND  c51.v != c61.v
  148.  
  149.           -- Col 2
  150.      AND  c12.v != c22.v
  151.      AND  c12.v != c32.v
  152.      AND  c12.v != c42.v
  153.      AND  c12.v != c52.v
  154.      AND  c12.v != c62.v
  155.      AND  c22.v != c32.v
  156.      AND  c22.v != c42.v
  157.      AND  c22.v != c52.v
  158.      AND  c22.v != c62.v
  159.      AND  c32.v != c42.v
  160.      AND  c32.v != c52.v
  161.      AND  c32.v != c62.v
  162.      AND  c42.v != c52.v
  163.      AND  c42.v != c62.v
  164.      AND  c52.v != c62.v
  165.  
  166.           -- Col 3
  167.      AND  c13.v != c23.v
  168.      AND  c13.v != c33.v
  169.      AND  c13.v != c43.v
  170.      AND  c13.v != c53.v
  171.      AND  c13.v != c63.v
  172.      AND  c23.v != c33.v
  173.      AND  c23.v != c43.v
  174.      AND  c23.v != c53.v
  175.      AND  c23.v != c63.v
  176.      AND  c33.v != c43.v
  177.      AND  c33.v != c53.v
  178.      AND  c33.v != c63.v
  179.      AND  c43.v != c53.v
  180.      AND  c43.v != c63.v
  181.      AND  c53.v != c63.v
  182.  
  183.           -- Col 4
  184.      AND  c14.v != c24.v
  185.      AND  c14.v != c34.v
  186.      AND  c14.v != c44.v
  187.      AND  c14.v != c54.v
  188.      AND  c14.v != c64.v
  189.      AND  c24.v != c34.v
  190.      AND  c24.v != c44.v
  191.      AND  c24.v != c54.v
  192.      AND  c24.v != c64.v
  193.      AND  c34.v != c44.v
  194.      AND  c34.v != c54.v
  195.      AND  c34.v != c64.v
  196.      AND  c44.v != c54.v
  197.      AND  c44.v != c64.v
  198.      AND  c54.v != c64.v
  199.  
  200.           -- Col 5
  201.      AND  c15.v != c25.v
  202.      AND  c15.v != c35.v
  203.      AND  c15.v != c45.v
  204.      AND  c15.v != c55.v
  205.      AND  c15.v != c65.v
  206.      AND  c25.v != c35.v
  207.      AND  c25.v != c45.v
  208.      AND  c25.v != c55.v
  209.      AND  c25.v != c65.v
  210.      AND  c35.v != c45.v
  211.      AND  c35.v != c55.v
  212.      AND  c35.v != c65.v
  213.      AND  c45.v != c55.v
  214.      AND  c45.v != c65.v
  215.      AND  c55.v != c65.v
  216.  
  217.           -- Col 6
  218.      AND  c16.v != c26.v
  219.      AND  c16.v != c36.v
  220.      AND  c16.v != c46.v
  221.      AND  c16.v != c56.v
  222.      AND  c16.v != c66.v
  223.      AND  c26.v != c36.v
  224.      AND  c26.v != c46.v
  225.      AND  c26.v != c56.v
  226.      AND  c26.v != c66.v
  227.      AND  c36.v != c46.v
  228.      AND  c36.v != c56.v
  229.      AND  c36.v != c66.v
  230.      AND  c46.v != c56.v
  231.      AND  c46.v != c66.v
  232.      AND  c56.v != c66.v
  233.  
  234.           -- Block (1, 1)
  235.      AND  c11.v != c22.v
  236.      AND  c11.v != c23.v
  237.      AND  c12.v != c21.v
  238.      AND  c12.v != c23.v
  239.      AND  c13.v != c21.v
  240.      AND  c13.v != c22.v
  241.  
  242.           -- Block (1, 4)
  243.      AND  c14.v != c25.v
  244.      AND  c14.v != c26.v
  245.      AND  c15.v != c24.v
  246.      AND  c15.v != c26.v
  247.      AND  c16.v != c24.v
  248.      AND  c16.v != c25.v
  249.  
  250.           -- Block (3, 1)
  251.      AND  c31.v != c42.v
  252.      AND  c31.v != c43.v
  253.      AND  c32.v != c41.v
  254.      AND  c32.v != c43.v
  255.      AND  c33.v != c41.v
  256.      AND  c33.v != c42.v
  257.  
  258.           -- Block (3, 4)
  259.      AND  c34.v != c45.v
  260.      AND  c34.v != c46.v
  261.      AND  c35.v != c44.v
  262.      AND  c35.v != c46.v
  263.      AND  c36.v != c44.v
  264.      AND  c36.v != c45.v
  265.  
  266.           -- Block (5, 1)
  267.      AND  c51.v != c62.v
  268.      AND  c51.v != c63.v
  269.      AND  c52.v != c61.v
  270.      AND  c52.v != c63.v
  271.      AND  c53.v != c61.v
  272.      AND  c53.v != c62.v
  273.  
  274.           -- Block (5, 4)
  275.      AND  c54.v != c65.v
  276.      AND  c54.v != c66.v
  277.      AND  c55.v != c64.v
  278.      AND  c55.v != c66.v
  279.      AND  c56.v != c64.v
  280.      AND  c56.v != c65.v
  281.  
  282.           -- Clues
  283.      AND  c11.v = 3
  284.      AND  c16.v = 4
  285.      AND  c23.v = 4
  286.      AND  c24.v = 3
  287.      AND  c32.v = 3
  288.      AND  c35.v = 6
  289.      AND  c42.v = 4
  290.      AND  c45.v = 1
  291.      AND  c53.v = 2
  292.      AND  c54.v = 1
  293.      AND  c61.v = 1
  294.      AND  c66.v = 2
  295. };
  296.  
  297. my $data = $DBH->selectall_arrayref($SQL);
  298.  
  299. for my $data (@$data) {
  300.   while (my @row = splice @$data, 0, 6) {
  301.     print "@row\n";
  302.   }
  303. }