146185892Smrg#!/usr/bin/ruby 246185892Smrg# 346185892Smrg# $Id: find_fragments.rb,v 1.1.1.1 2022/10/17 07:37:08 mrg Exp $ 446185892Smrg# The script finds the fragments 546185892Smrg# 646185892Smrg 746185892Smrgrequire "xkbparser.rb" 846185892Smrg 946185892SmrgbaseDir = "../.." 1046185892Smrg 1146185892SmrgsymbolsDir = "#{baseDir}/symbols" 1246185892Smrg#symbolsDir = "." 1346185892Smrg 1446185892Smrgparser = Parser.new 1546185892Smrg 1646185892SmrgallSyms = parser.parse("#{symbolsDir}/inet") 1746185892Smrg 1846185892Smrgeverything = allSyms.merge 1946185892Smrg 2046185892Smrgeverything.filter(1) 2146185892Smrg 2246185892Smrg#numCombinations = 1 2346185892Smrg 2446185892Smrg#puts "everything:" 2546185892Smrg 2646185892Smrg#everything.find_all do | symName, keycodes | 2746185892Smrg#puts "#{symName}, #{keycodes.length} mappings -> " 2846185892Smrg# keycodes.find_all do | keycode, counter | 2946185892Smrg# puts " #{keycode} -> #{counter} occurences" 3046185892Smrg# end 3146185892Smrg# numCombinations *= (keycodes.length + 1) 3246185892Smrg#end 3346185892Smrg 3446185892Smrg#puts "Total mappings: #{everything.length}/#{everything.full_length()}, #{numCombinations} combinations" 3546185892Smrg# 3646185892Smrg 3746185892SmrgnumCombinations = 0 3846185892SmrgallSyms.find_all do | symsName, symbols | 3946185892Smrg puts "n: #{symsName}" 4046185892Smrg 4146185892Smrg # Counting only symbols which used more than once 4246185892Smrg numDupSymbols = symbols.keys.inject(0) do | rv, keycode | 4346185892Smrg c = everything.cardinality(keycode, symbols[keycode]) 4446185892Smrg puts "#{keycode} -> #{symbols[keycode]}, #{c}" 4546185892Smrg (c > 0) ? rv : rv + 1 4646185892Smrg end 4746185892Smrg 4846185892Smrg numCombinations += (1 << numDupSymbols) 4946185892Smrg puts "l: #{symbols.length} d: #{numDupSymbols} c: #{numCombinations}" 5046185892Smrgend 5146185892Smrg 5246185892Smrgputs "numCombinations: #{numCombinations}" 53