Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/gawk -f
- { # Parse all lines of stdin
- if ( NR == 1) {
- for (i=1; i<=length($0)-1; i++) {
- parr[substr($0, i, 2)] += 1; # E.g. for NNCB: parr["NN"] = 1; parr["NC"] = 1, parr["CB"] = 1
- letters[substr($0, i, 1)] ++; # count all letters
- }
- letters[substr($0, length($0), 1)] ++; # count the last letter too (!!)
- } else if ( NR > 2) {
- split($0, ar, " "); # Input line e.g. "CH -> B"
- rules[ar[1]] = ar[3]; # E.g. rules[CH] = "B"
- }
- }
- END {
- for (step=1; step<=STEPS; step++) {
- delete changeSet;
- for (rule in rules) {
- if (rule in parr) {
- leftNew = substr(rule, 1, 1) rules[rule];
- rightNew = rules[rule] substr(rule, 2, 1);
- changeSet[rule] -= parr[rule];
- changeSet[leftNew] += parr[rule];
- changeSet[rightNew] += parr[rule];
- letters[rules[rule]] += parr[rule];
- }
- }
- for (change in changeSet) { # Have to perform changeset in a batch or changes will interfere
- parr[change] += changeSet[change];
- }
- }
- asort(letters);
- print "max - min: " letters[length(letters)] - letters[1];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement