The Computer Language
Benchmarks Game

reverse-complement Matz's Interpreter #3 program

source code

# The Computer Language Benchmarks Game
# http://benchmarksgame.alioth.debian.org
#
# Contributed by Aaron Tavistock

def process_segment(segment)
  (header, _, sequence) = segment.partition("\n")

  sequence.delete!("\n\r >")
  sequence.reverse!
  sequence.tr!(
    'wsatugcyrkmbdhvnATUGCYRKMBDHVN',
    'WSTAACGRYMKVHDBNTAACGRYMKVHDBN'
  )

  results = [">#{header}"]

  idx = 0
  length = sequence.length
  while idx < length
    results << sequence[idx,60]
    idx += 60
  end

  results.join("\n")
end

def forking_worker(segment)
  reader, writer = IO.pipe

  pid = Process.fork do
    begin
      reader.close
      results = process_segment(segment)
      Marshal.dump(results, writer)
    ensure
      writer.close
    end
  end

  writer.close
  begin
    results = Marshal.load(reader)
  ensure
    reader.close
  end
  Process.waitpid(pid)

  results
end

threads = []
$stdin.each_line('>') do |segment|
  next if segment.length < 2

  threads << Thread.new do
    if RUBY_PLATFORM == 'java'
      Thread.current[:output] = process_segment(segment)
    else
      Thread.current[:output] = forking_worker(segment)
    end
  end
end
threads.each(&:join)

threads.each do |thread|
  puts thread[:output]
end
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]


Mon, 26 Mar 2018 23:46:58 GMT

COMMAND LINE:
/usr/bin/ruby revcomp.mri-3.mri 0 < revcomp-input100000000.txt

UNEXPECTED OUTPUT 

9340606,16666682c9340606,16666671
< TCTCGGTCAGTCTATATTAAGTAAGTCAGATGGATGTGCATAGGTGCGTTTGCCCCGTCG
< AACTGATGATCCTGTCGAGAATATCGGTTCTAGGCAGGATCTTCAGTGACATCTGGACAT
< ACTAAATAAGAACTATATAATGAGCATCAATTGAGATATTGATGATGGCAACTGGGATCT
< AGAATAGAGAAAAGCTTTAAGAATCCCTATCATCGTAAAAAGAAACGGCACTTATGTTGC
< TCCTGGACAAGCACGCCCAACTTGTCAATTCTCGTGGCTTTTCTAAGGGTGTTAGAAGAA
< GGATTCCATTACCATAATTTGACAATACTATTGCACGGTCCAGAGAATCTCGAACTGGAC
< TTACTTGGCGAATGACATAATGATGGCATAATAAGATTTGTTGATTACAGAGGTGTTATA
< AAAATTAGATAGAGTTGGGGTCTATACAACGGCAGATCCCGTCCTTCCGATCATTTAAGG
< TTCGCGGACCATTTATAGTTAATTCTAATTGAAAAGTCTGGATTTTTTATGCGTGCTGTT
< AATAAACATCGAATTGGGCAACAGCTCATGGTACTCCGCCGACAATTATAGTGCAGTACT
< ATTAATTAACTCTTCTTTGATCATGCTCCTATACGTTTTGCTAACCGACATGTTTTACAT
< GGCAAGCTTGGATCCACATACTACAATCTCGGTCAGTCTATATTAAGTAAGTCAGAACTA
< ATGGTGGACTATACGCCACGATCCTGAGATGTAACCCTTTGCGGCCTTTATTTTACGTAC
< CTGTTTTTTATCTCGGAGATTAGAGTTCATCTGATACACAGGCAACTTGTTCTGGATAAA
< TACCAGGCACCAGCGTATATTTATCCTCCTCAGCCGATCCCTATCATTTCGGCGTAAGAA
< GTAGGTCATTTTGAATCTTAATAAGCAGGTACAGACTAAATCGACCACCAAAAATCCTAT
< CAATTTCGCTTAGAGGAGATTCAGCCTATAACAAAACTGCTCAGCAGACATGAAGGGCAA
< GCATGGCCGTAATGTATCTGAGATCACTTCGAATTGAATAAGAACCAGAACAGTTCACGC
< GTGATAGGTATCGTCGGATTTCTGTCGACTAATGTAAGCGCCATGACTGGCATCAGTGCA
< TTCGTGGGATAGTAGCTAGAGATTGATAAACAGATCATTACTCATACGGGGCCGCAAACA
< TGTAACTGGGCACTTATGCCATCATTTGTGCACTTACTCGAAGTCCGCATAAAACTTTAA
< AATATAGAACTTAAGATGGAGGTATTACATTTCAATTCCTAAATCAAAAACTTCTACTTG
< TCTTACCTCCTAGCGTATTGACATCAGTCTAATCTCAATGACATTTCTGAATTAGAGGTA
< TACTTTTTTAGTTGGGATAGATTATACATTTCGAGTGTTCAGGGAACTCTTTTAGCTTAA
< ATATCAATAACCCCTAGTTAAAACCAGACTATTACGTCCGATGAATTACTATTCTTTGGG
< GCTTTTTCTGGGTTCGCCCATACTTCCTTTGATATCTCTGATGTAAGATATTTCCAAGGT
< CTTATGAGGAAGGCCGGATATAGACCTAATGATCTCATATGTAGTACCCACTGTAACACT
< TCATATATAATGATTGCTCTTCCTGTTCTCTACGAATGCTAGTCTATCATAGACTTATCG
< TGAAGCGATAGTTCATATGAAGTGTTTTGCCGATAAAATTCTGTAAAATAAATGTCAAGC
< CGCAATCCGGTAACTAAATGTACTCTTTGTATTTATAAATCACTGTGTTTTGTTCATCGC
< ACAGATGATTTTCTTGGTGCAAATATAAATATTTTCATAGGACACAACGATTGAATATCG
< GTTTGTAAACTTAAGTTACAGGGCAGCAGTTATTTTATCATAACTCTAGGGCAGGACATT
< TTGGCATCATTGTTCAAAGGCGGGAGAAATATGATATTCCAAACAAATACATACAGCTAT
< TGATACTCGATTATGCTTGCCGTTCAACACTGTGTGTGTAAGGATGTAGGCGCTAACCTC
< TGTCTAACACCTACACTATCTAGAACTTTCATTAGCGTAGGAAAGCGTGATTGGATCTAC
< AATGAGAGTCATCATTATTGTGTACGATACGACTTCAGACAACACTGAGCAGGACAGAAA
< AATTGTCAAAATGAAGCCTGGCATACACATCCATATCCCTTTCAAGCTACTTCAGTACCA
< GCGCCAGTTGATTGCCACGAAAGGTGACAGGAGCGTCAGTCATTCTTGCTTACCATCATT
< TGTATGTACGGAGTAAGGGTCAGTATTACATCAATCAGAAGAAATAGATGATCGCTTTAG
< ATGAAAGAGGGTCGTAAATTGTCGCATTAACGAGGTCGTGATTCGACGAAATGTGGATAG
< ACAAAAGCGGTTTAGATAATATATTTACTTTAAATAATACGTATTTAAGTTTAAGAATGT
< ACTAAGATTCAAATCAAATCGCCACATTTGCATAACCTTAATGATAGTGTATCTTTTACT
< GGAAAGCATCCCTACGAGCGGTTAATTTTATATTATTTAGAATAGAGAGCGATACGTTAA
< ATTATAAACAACCTGACAATTAGAGCATGTCTGAACACCGTGTACCTGAATACTTCTAGA
< TCGTCCTTATAACACCTGGATACCCTCACTTAACGAACCATGGGTGTTTGACTATTTTTT
< GTGGATTCATCATATCAACCCCTTGTCCCATGGTAGACCATAATGTTGTTGAGACTCGCC
< GAATATCATACATTGTCTTATTGCTAATTTTCAATGTCCCGAATGGGAGCGTTACACTTT
< ATAATAATAGAAACCATTAATCGGTTTAAACAGCAATATCTAAATGGCTCTCAAACTAGG
< AATGCTTAAAGGGATTGCTCAGTAGATGCAGGACCCGACCCTATGTGTGCTGCCACTTTG
< GTCACGAGATAGCAGAGCTCCAGGTATGATGCCCTGTGGTAGAGTCGCGAACCGTATCCT
< AATTGTAAAAGTCAATAAACTAAGTTCTACTCTTAGTTAAAGATTAAAACCTTCCAGACG
< AGAATTATCTTAGGATCGAGTATGAGACCTTGTCGTTACACGTACTCATAGTGCCACGCT
< ATGTTAGAGTTTTGCATAGAATTGAGGTGGTGCCTCGTGTCTCCTGTCTTTCATGAACAG
< GTCAGCTTAAAGATTTGCGTTGTGCATTCCTATACACACGCTGACAACAGAATATTAGGA
< TCACGGATATGCCAACATTAAGCTACGGTGGTAAACGCCCGATCAAGAGACCTAAAGAAT
< CATATGCTTGTATAACCCTACCCCAAAGCATTGTAATGCAGACGTCCGTAATAATCCTAA
< GTGATTTGATTAGTGCACTCGCGCCTTCTCATTGTGGCGGAATAATCTGACTTAATTTTT
< AAAAGCTAAGCGGTAGATATGAATTCTCCATCGAATATAATTGAGTTATCAGCAGATTCG
< ACGATATTTTACAAGCCGGATAAACGTTCTCCGTGTTCAATCTATTACCCGTGATAGTCT
< ATTCAACGTTTGGAAGAACAATTAACAGGAATTTCTATGATAGTGATAGTTTATTAAAGC
< TGACGTTCTTCGCTTAGGTTTGTTTGTTATTATTAATCTGGATAAACTTTTCAGGGTCTC
< CAGGTATTTGGCAAATCTTCATATGGATGACCCCCCACTTGCAGGTTAGTTGAAATGGTA
< CAACTCGTCCAAAGGAAAGATTATACAAGATAGGAACTGCAATCTTGAATTTTCATGCCT
< ATTCACGAATTGTAGCACCTAGTTGTTGAAAATACACACGCCGACAATCGATAAAATCAA
< ATAGCCCCTAACGGCTGTTAATACATCATGACACCTAGATGCTGAAAAAGTGTAATGTCC
< ATATGGACTTGAACTCGTAGAGTAAGTGTGTCCTCACTCTCAGCAACACATAGTACTACT
< AGGTGTTATAAGTGAATACAATCGTGGACCACTTTACCTACGTCTTTCCCGGAGATGTAG
< GTTAACCAGTAATAGGATATAGGTAAGAGTAGGAGAGAGGGATGTACGCGTCGTTAAGAG
< CGAATGGAAGACTCAAACGAGTGGCATCAAGATTGAGAAATTAGCAGAACTAGAGCTCGA
< GCAGCAGAAATAACTCTGTTATTCTCCATCGTTCGATGAATGTATTATTGTAGTTACAAA
< GACCTCATACCTCTTTTTATATAATGGTCTTAACACTTTTATGTATAAATTGTCTCTTAT
< AGTTACCAGTACTGAGTTCTTCGTATCTTGTACAAAGCTTGCTTCGTTCATGTCGGTAAA
< GGGAGCTCCTTTAAACAATGTGGTACAGCGTCCACATACTAGATTCGAATATCATATTAC
< AGTAAAATTGGCGTTGTCTATCAAACGTGTATGATGCTAGGCTCCATCGAGGATGAGGGT
< GTGTGATATTAATTAGTATTTTTATGTTGTGATATTAAAAGACCCGCGCTGGAGAAGGTA
< ATTATCTACTACTCCTCCCGGGGCAGGTCCCAATGTGTGTTCATTGAGTCAGACGTCTGT
< ACACCTAAAAATCTGTTATCGTACACCGTTATTCGGGAAACTTAGTTTCTATTATAAAAG
< CCATCTGGTACAAGTTACTTTGCATGCAGATCTGTCAAGATCGCAAAATTAATGAGCGGT
< ACATACCTGCCTTTCTAGGTACTGGATGGAGAGTTCTTGGTATAGCATAATGACTCTTCT
< TCCAACCTCAACTCCGAGGAAGCACGATCGCTACTGACATCAAATTATTTTTGGGACATC
< TAGACCAATAATTCGTGGCCGTAAAATCTATAATTTGATGATACTAAGGAGATCTGAATG
< TACATACTCGAAGCGCTTCCTGATTTATTTCGACGTGACTTTTCATATTATAGATCAAAT
< AGCCTTACGTAGGAAATATAGATACAGCAACAATACGAACGGAATTGTTTACGTTCGGTA
< TTATGTATGTTCACCGCGCACTTTCGTTCACTACCCTGTGTTCGGTCTAGATTCTGGAAA
< AACTTTTAACTCTACCAGGAACTACTCGCGGACGCATGATCCGATGCTAGGCATAGCTCT
< TTCCTCGCTACTATGTTAGAAAGTTTATATTTATGTCTTCAGTTGAATCAGCTTTATGTG
< GAACTATAATTTAGTTAGATACAGACAAATCTAGATGAAAGAAAAATAACCAATTTAGTT
< TCAAAGACTGTCTAAACGCACGTAGAGTAAGTGACGTATATTTACTTTATAATGATCCGG
< AGATAGGGTATTAAACTCACAGGGTTCGAATGTCCGTTCATGTCCAATGTTACTCTTCAT
< GCCCGCAATGTATAACCCCTGCCAAAATTGTATATTTTTATACTCTCATCGATGACCTGA
< ATTTCATACGACACTATCTAGGTTACCTACTTTGGGAACATATAGTGCGGGGTAGCCCAA