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