reverse-complement Ruby JRuby #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
jruby 9.1.16.0 (2.3.3) 2018-02-21 8f3f95a Java HotSpot(TM) 64-Bit Server VM 10+46 on 10+46 +jit [linux-x86_64]
Tue, 27 Mar 2018 15:41:51 GMT
MAKE:
mv revcomp.jruby-3.jruby revcomp.rb
0.24s to complete and log all make actions
COMMAND LINE:
/opt/src/jruby-9.1.16.0/bin/jruby -Xcompile.fastest=true -Xcompile.invokedynamic=true -J-server -J-Xmn512m -J-Xms3072m -J-Xmx3072m revcomp.rb 0 < revcomp-input100000000.txt
UNEXPECTED OUTPUT
8333337c8333337,16666671
<
---
> >THREE Homo sapiens frequency
> GTCTCGCTACCTACTGTGAATGTTAATAAAGCCTACGGCCAAAAAAGTCCCAAGCTGCAC
> CTTATTAATGAAATCGTTGCACAGAGTATCCCGTGTATTTTTCTCTAAGAACAAGTTAGC
> GTCTGATCATAAATCTACATTTTGAGTGCGATGGGAGGGTGTTGTGACACAGGAAATACA
> GCCGTTATAGGGACTGTACACGCGCTGTCGAGAACTCCTTTTTTGATAAGTTGGGGTCTT
> ATTGCTCAATCATGATTTTCTACCTTTTATAGAGCGTTATCAAAATTCTACCTTGAATAG
> TCTAAAGGACACTACTTCGCTCCCCTGCCGTTATAGGACACACTCTCACGCACCGTGGAC
> CTGAAATAAGCGTAACTATCAGGTCACAAAAAACACATCCTTACATTCTAGGCAGAAAAC
> AAATAACAGTCACAAAAAATTTGAATAAATAATATTCCTTGTTATGTTATTCCGTGCACT
> ACCACCAACTTTATCGACACAAGCCGCATTTGTACCGAGAGTTGTTTAGCTTTTTTCAGT
> AGTGTTCTCGTTGCGAACTACGCACACGGACGCGGAGTAGTTGCTTCAAGGATGGAGTTA
> TAGTTGACCTACGAGATTCTTCACCACCTTTATGTTTGTTAGGGACGGATGACGGTAGAC
> ATACATGCTTTTCATCTTGTTGCGATGTAACTAACCCTTTGTATTTACGTTCGGAGCCCG
> TTGATTTATGTAAACTATTTGCGTAGGTGCACTGGCAACTAATTTCCAGCTGTCCGCCCA
> GTATTATCAGAATTTACGCGCTATCAAGAACTATACCATGCTAGCTTGAGGTTTCGTTCA
> TTCCCGAAGACGGTCTAATAGTTAAGACTTATCAGGAACGTTATTTTTGGTGAGATGCTC
> CTCCTTAAGAATGCCCGATTAACGAGAAATATGGAGCCGTTTTTTTTATTATGCATCTCC
> ATATGTGTCATTTATTCGATTATAGGTTTGTACACAGCACAAGAACGTATTGAAATTTAA
> TGGAAGCGCAGTTAACTTATGAGTTAGTTTGATAGAGTACTCACAGACCAATATAGAGTG
> TCCGAACTGTATAAGTGATAAGTTGATAACTGCCCAGTATCGTGACAGTTTATTTCGATT
> CGCTTAATTTATTTGGATAGTAAACTATAACTAATATATTCGTCTTTATTAATTGTATGG
> GTAAGGCCGTCAGAATCTAATCAGAACATTTAGTATAAATCTACTATAAACAGAAATCCT
> ACGGATGTTCTAATTAAACCTATTACGTTCGAGATTTATGCGTTTGTAACTACAAGACTT
> TTGCGCGGCCTTTATAAATTTCAAACCGTAGAACACTGGCCAAATATTGAGCATAATGCT
> AGTTGAGTTTGTGGCTCAATCCAGTGCAAAATGCATCACACTATGTCATTAAGTTTTCGC
> CAAGCGGGATTCCGGCCCAAACCCGATTACAATTATTTTCATGCTTATTGTATTGCTGGG
> TTAATTTGATACGTATTTCTACCCTGTCACTAAATTTGGTTAACAAATAAGTTTCACCTG
> GTTAAGCTCCGGAGTATGACACGTAGTAATATTAGTTCTGTTTAGACCCTAAAGGCTAAA
> GATCCGGGTAGTCACGATGAGGCATCACTGGTGATAGATAAACTTTTTTAAAGTTTGGTT
> AAACGGACATTACATAATTAGACTGCGAAGTGCTACGTTATCAAGCATGGGTAATGCATG
> TTAGACCGAATTTAGATATATATGAAAACGACACTATCCTAACGTGTTTGATCTACAGCA
> GTTAATCCGCTTCCGGCGTAATAAAAGAAATTCGAGCTAGTTTGATAACCGTTTATGCCA
> TTATAGAGCACTTAGCTTAACTTCATGGTATGTGAACAAAATAGCATATGTAATTTGGGG
> AACAGCAGACTTCACAGTGTATCACCTAGGAGTTGTTAATTGTTATTTATCGAAGATAAA
> CATTAAATTCTTATTCAGACATACAGCGATAGCTAAACTTATCAGTAGAACCTCAAAATT
> TCAAATACTACTCTGGAACGCGTCCGTATAGATACAAGTACCTGAATGAACTGGTCATGA
> CAAATTGACTCCTTGTTAATCGGACATTATTCGTTGTACTAAAGTTGGAGAAGGTAGCCT
> AACATTGGACATTACAGGCCAGTTACCTCTATGAGAGCGATTTACCGCGCCACTAAGTGG
> GCGAGAATGATCGTTTATGGGACGGAACCACATTCCGTTATCCTCTGCACATGGTGGACG
> CTTCGAAGTACAAATGGCCCAACCACACAAGGGAGGGTGTTAGATTTTATTGCAATGTCC
> TCTGATAAGAACGTATGACTGCACTTGACAATAAGAATTCAAAGAAGATCGCCTTTCCTT
> AACATTTTCTATTCCGGGGCTGGTTATGGCTTTATTTCTTACAATCTCAATGATGCCCGC
> CTACTTGACAAACACATTTGTCGTAACTTTAGTTTTCTAGCCTTTTCAATTTTAAATTTA
> CCTTTTCTAAGAAAACAGCTAAAATTAATGAATAACCTTCATAGCGACATTTATGTCTTT
> TAAACGCAGGTGTGAGGGCGGTACTGTTATCACATTAGCGTGCGATGGACAAAAAGGGCC
> AGCAGTTGCAACCCAGTGAATGGGTGACATGTCTTATTTAAGTCAGTTACAATCAACTTC
> TTTAAAGGAGGACAATACACTGGACCTCAATATTAAGGCCGGAATACGCTGTAAAGGACC
> ATCTGTTCTATGTCAAATAACAGATGTTGGTTACGGCCTAAATTAATATCCGTTTCTGTG
> TTTTATAGCAATCAAAAGACATACAGTGTTATAGCTCATTTATCTCGGTCGCCTTCATCG
> AAAAATTGCAAAGGTATCTCTACCTGGATTCGTGTTTGAAGGACCCAACCCATGTTTCGA
> CATGCACTGTTTTGATAATGCACAGCAGCGAATCTTGTGGATTGAGTGGTAAATCTCCTA
> CGGGTCATTTCCATCAATACGTACTATTAAACAACTTTAATAGTCTATCTACCCTCTTCA
> CGGAGGTATGAGTGCCTTGAACTTACTATATGAAATTCATATTACGCAACGAAAAGGGAA
> GTAAGGTACAAAGCGCTTCCTAGCCGGCTGCAACGAGTGAGTATCTAGAGTCTTGTAAAT
> TTGACTATAGAATTTCTATGATGTAAATATCGATTAACCGCAAACCTTTAAAACCTACAT
> GTATGGTCCTTATAACGAACGTAGGGATGCCATGTTGGAGAAGGCGAAAATTAACTCGCC
> GAATCATTCCTTCTATATTTATGTTACAGACGCATTCATCGAAGTTAGGATGAATCATAT
> CTTGGTTGAAGAGCGCTTTGAGGCATGTGGCAGAACACATGCTTGTGCCTAAACTTCACT
> GGATATGAAAATTAACTTCAATGGTCTCTTTCGAACCGGATTACGGGCTACTCCGTGGAG
> GAAATAAAGGCTTTAATTCTTTAGCGCGAGCGTTGGAACCACTTGGTTTAAGATACACTT
> GAATATGGAGGCAGGCCGCACCCACTCGGGCCACTTATTTCTCTATGAGTGTAGCCAGAA
> CTCCCAACAAATGTGCTTTCATTTTTCTTGTAGCAAATAGATGTAGCTCAACCGGATCCC
> GGCCTCATAGCTCAAACAGCTCAGTCGAACAAGCAGTTACAAGTCGTGATTGGGAAGTTA
> TATAAAACATATGAGAGTTATTGACGACATAAAGATATATGGTTTAAATTACCAGGTTCG
> AGTTTTTCGACAAAAAATTCATGATGGAAGACTCGTGTATTTTTTATCTCATTAGACTAA
> AGTGCTTATGTAGCCCATGCATTGATTCTCTAGTATATTCTTCCGAGAAACCGGTAAAGT
> TGTAAGGGTAAGTCTTCACTACCAATCACATCATTTAGCTCCAAGACCTATTATTCTACA
> TACAATATAACGTTTTACTTCGTTGATCATTACGGTACATCAAATTTCAAACTACTAGGA
> TACGGCGATCAGTTTAGGTAGATAATGGTTCTTAGCGGAATATCTTTAATCAATTAAATG
> GTTAAAACCATGAAGCGGGTATGTATTGATCACTATTTTGTGATTTAGTATAGTTGACTA
> CTAGATGGTTTACATCGTTTAATGCAAGTATGACAACCCAATCCACGCGGTTGAATAAGC
> CCCCACCGTATCAAGAGGGAAGGGACCGTATAACGATTCTTCCAGCGCAAGTCACCACTG
> GCAAAACGAATTAGCTGATGAAGCTACTATTGTGACCGGATAACATCATGACGATCGCTA
> TCATCATATCTATAATGTTCTTAGAGTGTTGCTAATTATATGCTCTTTGGCTGCTGCCAT
> TACACCTGATTCATCTATCTTTTCAGGGTTCTTCAAAGTCATGACTTTTTTAATAACCAT
> AGGTGCGGCAGAAGCATATTCATAAAAAATAGTCGATTGTAGACGCAAGGGGACTTACCC
> AGCTATTATTCCTCCAATCCTAATGTTGGGATAATGTAGTTGAAAACCTAAACTATTGAG
> ACTTAGAATATGTAGCCAAAATGCTATGTTGATGCAAATTTGTTCTTGGAGGATGGTAAA
> TCCGCGGAGTTTTTGGTCTGTATCTGACCACAGAGAATTAACATCAGAAAAGAAGTAACT
> GATTTGTTCCGGACACCAAAAGGCTGTCTTTTCGAGTTGGATATTCGAGCAAGGGGGTTG
> AACGCAGCGGAAGTTTATGACTTGGCCAATTATCAGATTCCGTAGAACAACTATTGGTGT
> ATCATAGAAGTGGTAGCTTAGAGGAGGCATGATGAACAACTCTACCGCGAAGTTAACTAT
> GCGGTGTATTAAATTCAGGCCTGAATAACAAGAATTTAGACATATCCACTGTGCTTCTTT
> CCAAATTAGTTGCCGCCTAGTTTAAAATACTGAACAACTGCTTTAAACGTCACAAAGGGT