/// Maps real ticker symbols to opaque tokens shown in question text. class SymbolObfuscator { SymbolObfuscator({this.prefix = 'ASSET_'}); final String prefix; /// Stable token for [symbol] among [universe] sorted lexicographically. String tokenFor(String symbol, List universe) { final List sorted = List.from(universe)..sort(); final int index = sorted.indexOf(symbol); if (index < 0) { throw ArgumentError.value(symbol, 'symbol', 'not in universe'); } return '$prefix${_letterForIndex(index)}'; } static String _letterForIndex(int index) { if (index < 26) { return String.fromCharCode(65 + index); } return '${_letterForIndex(index ~/ 26 - 1)}${_letterForIndex(index % 26)}'; } }