#!/usr/bin/perl -w use strict; my $str; my @test = ("0000","0001","0010","0011", "0100","0101","0110","0111", "1000","1001","1010","1011", "1100","1101","1110","1111"); my @accepted = (0,8,10,12,15); for my $t (@test) { print "Input: $t\tTested: "; print "[" . parsebin($t) . "] " ; print validinput($t,\@accepted); print "\n"; } sub validinput { my $in = shift; my $r = shift; return 1 if xinset(parsebin($in),$r); return 0; } sub xinset { my $x = shift; my $set = shift; #print "X $x SET" . join(" / ",@$set). "\n"; for my $y (@$set) { return 1 if $x == $y; } return 0; } sub parsebin { # parse a string of ones and zeroes my $str = shift; my $total = 0; my $power = 0; for my $i (1..length($str)) { $total += 2 ** $power if substr($str,-1 * $i,1); $power++; } return $total; }