]> git.defcon.no Git - test-repo/commitdiff
Starting GIT-testing.
authorJon Langseth <jon.langseth@lilug.no>
Thu, 2 Dec 2010 14:38:57 +0000 (15:38 +0100)
committerJon Langseth <jon.langseth@lilug.no>
Thu, 2 Dec 2010 14:38:57 +0000 (15:38 +0100)
README [new file with mode: 0644]
lotto.pl [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
index 0000000..381128d
--- /dev/null
+++ b/README
@@ -0,0 +1,2 @@
+This is a small test of git.
+I have no experience with git, so I am probably going to fuck up.
diff --git a/lotto.pl b/lotto.pl
new file mode 100644 (file)
index 0000000..a5e0bfa
--- /dev/null
+++ b/lotto.pl
@@ -0,0 +1,165 @@
+#!/usr/bin/perl -w
+# A quick-hack solution for checking coupons for the Norwegian LOTTO.
+# This code is not hapered by copyright, it was released into
+# the public domain by Jon Langseth (jon dot langseth at lilug dot no) in 2009.
+#
+# Sample result of execution is screenshotted at 
+#     http://defcon.no/files/lotto.pl.png
+#
+# File formats;
+# Common for both files: 
+#   Numbers below 10 may be zero-padded,
+#   Whitespace is matched and filtered using \s+, so any number of
+#   non-line-terminating whitespace can be used to separate numbers.
+#
+# File format, results, remove leading "# ". File consists of _two_ lines:
+#
+# 1 5 9 16 25 26 31
+# 4 32 34
+#
+# The fist line is the main result numbers, the second is the extra numbers.
+#
+# File format, coupon(s), remove leading "# ". The file consists of coupon
+# rows, one row per line, numbers separated by whitespace, seven numbers to a 
+# row, 
+#
+#  8 10 19 20 21 28 30
+#  3  8 15 16 18 19 33
+#  7 11 21 22 23 28 34
+#  6 16 18 25 26 31 32
+#  2  3 11 16 21 22 27
+#  1  8 12 16 21 22 23
+#  2  9 16 21 23 26 34
+#  2  3  4  7 10 27 30
+# 11 16 19 20 21 29 32 
+#  5 16 22 24 28 30 34
+# 
+
+use strict;
+
+sub errr {
+       print "Syntax: " . $0 . " kupong.txt resultat.txt\n";
+       print "  kupong.txt inneholder lottokupong med siffere \n";
+       print "  skilt av mellom, en rekke per linje, \n";
+       print "  resultat.txt inneholder en linje med resultatets\n";
+       print "  hovedtall, og en linje med tilleggstall\n";
+       print "  # på start av linje er kommentar i begge filer.\n";
+       exit(1);
+}
+
+# Check that two arguments are passed.
+if ( $#ARGV < 1 ) {
+       &errr;
+}
+my $coupon = $ARGV[0];
+my $result = $ARGV[1];
+my $tmp;
+my $count = 0;
+my @mains;
+my @extras;
+
+# Check for the existance of the files given as arguments.
+# I do not check for readable, as this will be handled by a failure to open later :P
+&errr if ( not -f $coupon );
+&errr if ( not -f $result );
+
+# Read the results file
+open( IN, "<" . $result ) or &errr;
+
+# First, the main numbers. The norwegian standard LOTTO has seven main numbers.
+# Note that I do not actually check that the array has seven, only seven, entries..
+# Yeah, I could have done a sub of the text-sanitation, as it is used three times.
+# But, as a do not like to fiddle with array-referencing, inline is the simplest.
+$tmp = <IN>;
+chomp $tmp;
+if ( $tmp =~ m/\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}/ ) {
+       $tmp =~ s/^\s+//g;
+       $tmp =~ s/\s+/:/g;
+       $tmp =~ s/0(\d)/$1/g;
+       @mains = split ( ":", $tmp);
+} else {
+       &errr;
+}
+# Next line of the result file contains the extra numbers (bonus numbers/additionals)
+# In the Norwegian LOTTO there are three such numbers.
+# Note that I do not actually check that the array has three, only three, entries..
+$tmp = <IN>;
+chomp $tmp;
+if ( $tmp =~ m/\d{1,2}\s+\d{1,2}\s+\d{1,2}/ ) {
+       $tmp =~ s/^\s+//g;
+       $tmp =~ s/\s+/:/g;
+       $tmp =~ s/0(\d)/$1/g;
+       @extras = split ( ":", $tmp);
+} else {
+       &errr;
+}
+close(IN);
+
+open( IN, "<" . $coupon ) or &errr;
+
+print "\n  .-------------------------+---------+-------------.\n";
+
+# Read teh coupon file, line by line. 
+while (<IN>) {
+       next if m/^#/;
+       # The Norwegian LOTTO uses seven numbers per sequence, ten sequences to a row.
+       # I do not check for additional numbers above seven, and yes, that is a weakness.
+       # I hope the user is sane enough to not feed stupidness...
+       next if not  m/\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}\s+\d{1,2}/;
+
+       # Again, the text-sanitation. This is the last time.
+       chomp $_;
+       $_ =~ s/^\s+//g;
+       $_ =~ s/\s+/:/g;
+       $_ =~ s/0(\d)/$1/g;
+       my @row = split ( ":");
+
+       my $mres = 0;
+       my $mext = 0;
+       # Ten rows to a coupon in the Norwegian LOTTO....
+       if ( $count > 9 ) {
+               print "  |-------------------------+---------+-------------|\n";
+               $count = 0;
+       }
+       print "  |  ";
+       foreach my $num ( @row ) {
+               # Dirty, slow, but good enough, and a simple solution:
+               # Step through all the main numbers, checking for a match,
+               # and set a color + increment the main result or extras result
+               # accordingly. The "last" statements may speed things a litte :P
+               # This is not a robust mechanism, but as long as we are given
+               # other data than garbage as input, we should be safe..
+               foreach my $m ( @mains) {
+                       if ( $num == $m ) { print "\e[31m"; $mres++; last; }
+               }
+               foreach my $m ( @extras) {
+                       if ( $num == $m ) { print "\e[34m"; $mext++; last; }
+               }
+
+               # Prettyprint the current number..
+               if ( $num < 10 ) { print "0"; }
+               print $num . " \e[0m";
+
+       }
+       print "  | \e[33m $mres + $mext \e[0m | ";
+
+       # This is the price weighting of the norwegian LOTTO. 
+       # $mres is the main result, $mext is the extras result.
+       # 7 main numbers..
+       if    ( $mres == 7 )                       { print "\e[1m 1. premie! |"; }
+       # 6 main numbers, plus one extra number
+       elsif ( ( $mres == 6 ) && ( $mext  > 0 ) ) { print "\e[1m 2. premie! |"; }
+       # 6 main numbers, no extras
+       elsif ( ( $mres == 6 ) && ( $mext == 0 ) ) { print "\e[1m 3. premie  |"; }
+       # 5 main numbers, no extras
+       elsif ( ( $mres == 5 ) && ( $mext == 0 ) ) { print "\e[0m 4. premie  |"; }
+       # 4 main numbers, plus one or more extra numbers
+       elsif ( ( $mres == 4 ) && ( $mext  > 0 ) ) { print "\e[0m 5. premie  |"; }
+       # less than four correct numbers, no price....
+       else                                       { print      "            |"; }
+
+       print "\e[0m\n";
+       $count++;
+}
+close(IN);
+print "  '-------------------------+---------+-------------'\n\n";