User:Beren/Scripts/Glassware
From A Wiki in the Desert
< User:Beren | Scripts
#!/usr/bin/perl use strict; use warnings; # Constants for the individual glassware names my $beaker = 'Beaker'; my $distillation_coil = 'Distillation Coil'; my $florence_flask = 'Florence Flask'; my $test_tube = 'Test Tube'; my $thistle_tube = 'Thistle Tube'; # Data structure to hold all input glassware my %candidates = ( $beaker => [], $distillation_coil => [], $test_tube => [], $thistle_tube => [], $florence_flask => [] ); # Found combinations which should result in successful calibration my %matches = (); # Parse candidate glassware out of input while (<>) { if (/($distillation_coil|$beaker|$test_tube|$thistle_tube|$florence_flask):Quality (\d+)/) { # Found glassware, register as a candidate push @{$candidates{$1}}, $2; } } # Work through all combinations of each type foreach my $ff (@{$candidates{$florence_flask}}) { foreach my $tt (@{$candidates{$test_tube}}) { foreach my $tht (@{$candidates{$thistle_tube}}) { foreach my $b (@{$candidates{$beaker}}) { foreach my $dc (@{$candidates{$distillation_coil}}) { my $sum = $ff + $tt + $tht + $b + $dc; # Skip low quality combinations next if $sum < 35000; # Check for calibration level my $calibration_level = 0; if (($sum >= 40000 && $sum <= 40004) || ($sum >= 45000 && $sum <= 45004)) { # Match for level 3 calibration $calibration_level = 3; } if ($sum >= 35000 && $sum <= 35004) { # Match for level 2 calibration $calibration_level = 2; } if ($sum % 100 == 0) { # Match for level 1 calibration $calibration_level = 1; } # Store results if ($calibration_level > 0) { my $set = {$beaker => $b, $distillation_coil => $dc, $florence_flask => $ff, $test_tube => $tt, $thistle_tube => $tht, 'Sum' => $sum}; $matches{$calibration_level} //= []; push @{$matches{$calibration_level}}, $set; } } } } } } # Output any successful combinations for my $calibration_level (sort keys %matches) { print "\nCalibration Level $calibration_level:\n"; foreach my $set (@{$matches{$calibration_level}}) { print "Sum: ${$set}{'Sum'} Beaker: ${$set}{$beaker} Distillation Coil: ${$set}{$distillation_coil} Florence Flask: ${$set}{$florence_flask} Test Tube: ${$set}{$test_tube} Thistle Tube: ${$set}{$thistle_tube}\n"; } }