1#!/usr/bin/ruby
2#
3# $Id: find_fragments.rb,v 1.1.1.1 2022/10/17 07:37:08 mrg Exp $
4# The script finds the fragments
5#
6
7require "xkbparser.rb"
8
9baseDir = "../.."
10
11symbolsDir = "#{baseDir}/symbols"
12#symbolsDir = "."
13
14parser = Parser.new
15
16allSyms = parser.parse("#{symbolsDir}/inet")
17
18everything = allSyms.merge
19
20everything.filter(1)
21
22#numCombinations = 1
23
24#puts "everything:"
25
26#everything.find_all do | symName, keycodes |
27#puts "#{symName}, #{keycodes.length} mappings -> "
28#  keycodes.find_all do | keycode, counter |
29#    puts "  #{keycode} -> #{counter} occurences"
30#  end
31#  numCombinations *= (keycodes.length + 1)
32#end
33
34#puts "Total mappings: #{everything.length}/#{everything.full_length()}, #{numCombinations} combinations"
35#
36
37numCombinations = 0
38allSyms.find_all do | symsName, symbols |
39 puts "n: #{symsName}"
40
41 # Counting only symbols which used more than once
42 numDupSymbols = symbols.keys.inject(0) do | rv, keycode |
43   c = everything.cardinality(keycode, symbols[keycode])
44   puts "#{keycode} -> #{symbols[keycode]}, #{c}"
45   (c > 0) ? rv : rv + 1
46 end
47
48 numCombinations += (1 << numDupSymbols)
49 puts "l: #{symbols.length} d: #{numDupSymbols} c: #{numCombinations}"
50end
51
52puts "numCombinations: #{numCombinations}"
53