Skip to content

Instantly share code, notes, and snippets.

@brixen
Created February 28, 2015 19:15
Show Gist options
  • Save brixen/fd9cf03c83c912432391 to your computer and use it in GitHub Desktop.
Save brixen/fd9cf03c83c912432391 to your computer and use it in GitHub Desktop.
CLM-bshirai:rubinius bshirai$ rbx -v dna.rb
rubinius 2.5.1 (2.1.0 8fd046f3 2015-01-26 3.5.0 JI) [x86_64-darwin14.1.0]
Calculating -------------------------------------
tr 15.000 i/100ms
table 1.178k i/100ms
-------------------------------------------------
tr 179.539 (±10.0%) i/s - 900.000
table 13.315k (±12.5%) i/s - 65.968k
# encoding: us-ascii
require 'benchmark/ips'
FROM = 'AGCUTRYWSMKHDVBNagcutrywsmkhdvbn'
TO = 'TCGAAYRWSKMDHBVNtcgaayrwskmdhbvn'
# STRING = (0..1000).map { |i| FROM[rand(FROM.size)] }.join
STRING = "uHbUCgYCBRwmYNKMaNKvASyHCkNWkWamuKAscVnHvdCgGkCMhMUwMRauuDddvYwWDBbHgatCbrvyCWHybmHUtGTrDtAckguutDKSuwRaUNwuuUKVNVsdMsCDWScSGYdtMkgynAKkTUumWTdChGvRNsngCgHmyRkTyyBBCGtMbKDHwtMAyDCavhDtUtkuhtKbRvSDtgCMNdBKGATukCanGHRWYsAmwRutTMYUADawcYsgWMgUMNgtacmDHrVHgHUycUTtThMhgwYMduMkHmSgKWCuBkTCdYkuMMWbRGaGBSRdNkuVbKrnaStAYnkcSsMwTGCWbGBHSkMVSucUCUmDyHBGanMSkDbhtGmUNKtrGAhNurGhbdahbhyRGcdabgvyasbYbRwgaAUYDsyRsKsWSngBTUKnGmyRkBrcdCyVkKBWucTSscmvWdUnrBUDMntdhSWUUBhkkhabMWcWVMDshHahcugDSgmrUMGYCDYcUmdNBrSdaRMyvKVBtRHAddvmRDVNNKvnaVVravBSGbghhAbYrAbwdWavyARRyDURDkvgCSnhkSSwvUmgnrnaGacSvtHSsDnRvaBHgAdmhNhGhTvcTGRwgaswbmtkkrAyCBSNkBGgDYrgvSyBUcgaSYgDCTMmGyCCmggMwVvrtNvmnwrNhbMaRYkWHhNnKkyKWastBDrTKHNdgwwnuuCmvyWdWTnvhbKusVAKhbWVSNcUMCNsRAVAMTkswdAKmhthCRmNKkcHCAScDRaNacRavkRHGVwcyRNbBSwrTHDvKSKdbAyBWbwNbcYWKYWtcTGdCKRbYAuhvkHbncVhKsKhDdsukunaCARRHYKthgtArMYaKbgMvAAggYyWdDUWAHMDhuSBVTgNuUSnmGcAHGKtDayrMgbDCBGktSShdSUyHUUdrGnAYwnSusktBRtMMraMYMgwKwdrNNhYytBNkTHTUsUVggUGkkruTrkCtUCdgyGhVGGYGvWuHRsWKwHWAcTba"
TABLE = []
FROM.each_byte.with_index.map { |b, i| TABLE[b] = TO.getbyte(i) }
def with_tr(x, y)
STRING.tr x, y
end
def with_table(x, y)
i = 0
t = STRING.size
r = String.pattern t, 0
while i < t
r.setbyte i, TABLE[STRING.getbyte(i)]
i += 1
end
r
end
raise "borked" unless with_tr(FROM, TO) == with_table(FROM, TO)
Benchmark.ips do |x|
x.report("tr") { with_tr(FROM, TO) }
x.report("table") { with_table(FROM, TO) }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment