A table of names for genetic algorithms
Posted: 15 Aug 2013, 20:50
I was looking at genetic algorithms, and decided it would be a nice idea to assign names to
different configurations. It is easy to store a list of names and thus convert data to a name
by indexing into the array of names. To convert names back to data, it would be possible to
search through the array to find the name and hence its index. However, I had a different idea.
Instead of searching the table of names, I use a CRC calculator to recover the index from a name.
So for example ...
boys_512[9] contains "Nick";
crc32("Nick") & 511 gives the index back again, 9.
I guess I ought to say which CRC I am using. Without the CRC, the table would not be useless, since an array of names is likely to be useful to someone for a computer game. But the CRC property is an extra feature which might be useful to someone else.
Since I first posted this, I have created another file with female names.
I did a little experiment with the data, using names to write numbers in base 512. To create some examples
I wanted to use some large numbers (up to 400,000), but I didn't want an unmanagable amount of data to paste here. So
my example just uses three bit numbers which are multiples of 29. For each of them I have calculated the appropriate male name
using the tables. The example uses snoob - same number of one bits in the FOR loop.
This is the information the program creates - just a little demonstration of conversion from numbers to names,
though the real purpose of the tables is the ability to convert from names back to numbers.
I've now got round to testing that I can convert names back to numbers. DNA is my function to convert a name back to a number. I also wrote another function (cross) that
takes two numbers which I think of as being the DNA of the parents, and randomly creates a number for the DNA of their child. The number takes half of the father's bits and half of the mother's and splices them together. Here's a little test I ran.
And the results ...
So things are sort of working. The conversion of names to numbers and number to names performed by my little functions "DNA" and "person" seem to be more or less inverse functions.
Since writing the above I've played a bit more and have added some more useful routines. These are Cross, GM (genetic modification) and I_am.
is used to perform tiny alterations, which amount to changing a bit-field in a compact structure, eg GM 0x123456 0x00F000 0xA will return 0x12A456. It returns the original number (which in this context I think of as DNA) with an alteration that I think of as a changed gene, giving it a new value. So in this example 0x00F000 is specifying the gene's location and 0xA is its new value. The rest of the DNA is unchanged.
is used to read and write the program's own configuration bits. With a parameter it sets the configuration and without a parameter it reads them.
gives
With this stuff I have been been cross breeding versions of my program in the hope that one of the crosses will play better, and I can compare statistics for different configurations without having to run each configuration separately. The whole process has given me a different outlook on evolution. If green and yellow striped humans are the best, how much breeding is required before we actually get one? Maybe we never will. And even with mutations - suppose an obnoxious ugly woman had a gene mutation that made her completely cancer resistant. That lucky mutation might die off just as quickly as it appeared. I get the feeling that I need to cheat a little to steer things in the right direct. As an aetheist, it seems odd that I have to play god to get anything useful out of my genetic code
different configurations. It is easy to store a list of names and thus convert data to a name
by indexing into the array of names. To convert names back to data, it would be possible to
search through the array to find the name and hence its index. However, I had a different idea.
Instead of searching the table of names, I use a CRC calculator to recover the index from a name.
So for example ...
boys_512[9] contains "Nick";
crc32("Nick") & 511 gives the index back again, 9.
- Code: Select all
/*
* Copyright Ivan Urwin 15th August 2013
*
* Free for use by anyone.
*
* The lower 9 bits of a standard 32 bit cyclic redundancy check calculation on any of these names
* gives its position in the array. So if a computer program has a number of configuration bits
* that might be hard to remember, they can be summarised by a simple name found by a lookup
* in the array. Conversely, if a user remembers the name, a simple CRC calculation can recreate
* the configuration data.
*
* I had the idea for this when I was looking at optimising a program's performance using genetic algorithms.
* In that sort of environment, it seems logical to give names to different program configurations.
* Now instead of having to remember the best performing program had configuration bits set to 146,
* we can call it "Bobby".
*
* If more than 9 bits are required, you could use double barrel names eg Lee Harvey,
* or use three names, or create your own list of surnames, etc.
*
* The reason I am making this public, is to save people the trouble. For example, I could not
* easily find a real name with CRC 75, or 88.
*
* I have tried to use simple names like Jack and Pete whereever possible. Unfortunately, some of the simple names
* have identical CRC, while other CRC values seem difficult to obtain.
*
* I do not yet have a similar list of female names.
*
* While it ought to be possible to produce a similar list for 10 or more bits, the names are likely to become even more obscure.
*/
char * boys_512[512] =
{
"Rene", // [0] crc=0
"Travis", // [1] crc=1
"Arnold", // [2] crc=2
"Earl", // [3] crc=3
"Jeremiah", // [4] crc=4
"Abbott", // [5] crc=5
"Hughie", // [6] crc=6
"Stephen", // [7] crc=7
"Soloman", // [8] crc=8
"Nick", // [9] crc=9
"Russel", // [10] crc=10
"Lonnie", // [11] crc=11
"Alvin", // [12] crc=12
"Jacques", // [13] crc=13
"Ronald", // [14] crc=14
"Jim", // [15] crc=15
"Joseph", // [16] crc=16
"Quincy", // [17] crc=17
"Randle", // [18] crc=18
"Toshio", // [19] crc=19
"Edwin", // [20] crc=20
"Elvis", // [21] crc=21
"Jerry", // [22] crc=22
"Dwain", // [23] crc=23
"Job", // [24] crc=24
"Dolph", // [25] crc=25
"Florence", // [26] crc=26
"Earnest", // [27] crc=27
"Logan", // [28] crc=28
"Stuart", // [29] crc=29
"Adolfo", // [30] crc=30
"Owen", // [31] crc=31
"Miller", // [32] crc=32
"Harry", // [33] crc=33
"Sean", // [34] crc=34
"Alf", // [35] crc=35
"Colin", // [36] crc=36
"Curt", // [37] crc=37
"Geoffrey", // [38] crc=38
"Squire", // [39] crc=39
"Ester", // [40] crc=40
"Roman", // [41] crc=41
"Lark", // [42] crc=42
"Francis", // [43] crc=43
"Orla", // [44] crc=44
"Milton", // [45] crc=45
"Rick", // [46] crc=46
"Ezra", // [47] crc=47
"Bert", // [48] crc=48
"Dwaine", // [49] crc=49
"Elsworth", // [50] crc=50
"Alexander", // [51] crc=51
"Albert", // [52] crc=52
"Brian", // [53] crc=53
"Olof", // [54] crc=54
"Clive", // [55] crc=55
"Kim", // [56] crc=56
"Howard", // [57] crc=57
"Charlie", // [58] crc=58
"Alwin", // [59] crc=59
"Monroe", // [60] crc=60
"Jess", // [61] crc=61
"Chris", // [62] crc=62
"Reuben", // [63] crc=63
"Ismael", // [64] crc=64
"Homer", // [65] crc=65
"Johnny", // [66] crc=66
"Keith", // [67] crc=67
"Neil", // [68] crc=68
"Tony", // [69] crc=69
"Edison", // [70] crc=70
"Gerhardt", // [71] crc=71
"Theodore", // [72] crc=72
"Desmond", // [73] crc=73
"Luis", // [74] crc=74
"Kale", // [75] crc=75
"Neal", // [76] crc=76
"Kay", // [77] crc=77
"Christopher", // [78] crc=78
"Kirby", // [79] crc=79
"Pete", // [80] crc=80
"Andrew", // [81] crc=81
"Caesar", // [82] crc=82
"Marland", // [83] crc=83
"Sid", // [84] crc=84
"Santos", // [85] crc=85
"Ennis", // [86] crc=86
"Nevin", // [87] crc=87
"Orman", // [88] crc=88
"Justin", // [89] crc=89
"Timothy", // [90] crc=90
"Hughes", // [91] crc=91
"Doctor", // [92] crc=92
"Buddy", // [93] crc=93
"Humphrey", // [94] crc=94
"Mack", // [95] crc=95
"Fred", // [96] crc=96
"Sammy", // [97] crc=97
"Norris", // [98] crc=98
"Gary", // [99] crc=99
"Alfred", // [100] crc=100
"Leon", // [101] crc=101
"Vince", // [102] crc=102
"Charles", // [103] crc=103
"Mervin", // [104] crc=104
"Danny", // [105] crc=105
"Aldo", // [106] crc=106
"Adolf", // [107] crc=107
"Victor", // [108] crc=108
"Dick", // [109] crc=109
"Rocky", // [110] crc=110
"Bernardo", // [111] crc=111
"Reynold", // [112] crc=112
"Santo", // [113] crc=113
"Gabriel", // [114] crc=114
"Mahlon", // [115] crc=115
"Rowland", // [116] crc=116
"Tim", // [117] crc=117
"Leeroy", // [118] crc=118
"Roscoe", // [119] crc=119
"Bruno", // [120] crc=120
"Hunt", // [121] crc=121
"Jethro", // [122] crc=122
"Jules", // [123] crc=123
"Lars", // [124] crc=124
"Jonathan", // [125] crc=125
"Clifford", // [126] crc=126
"Gerard", // [127] crc=127
"Barry", // [128] crc=128
"Wayne", // [129] crc=129
"Louie", // [130] crc=130
"Reginald", // [131] crc=131
"James", // [132] crc=132
"Warren", // [133] crc=133
"Hector", // [134] crc=134
"Saul", // [135] crc=135
"Thomas", // [136] crc=136
"Nicholas", // [137] crc=137
"Vander", // [138] crc=138
"Freddy", // [139] crc=139
"Clem", // [140] crc=140
"Horatio", // [141] crc=141
"Ken", // [142] crc=142
"Webster", // [143] crc=143
"Nils", // [144] crc=144
"Craig", // [145] crc=145
"Bobby", // [146] crc=146
"Bernhard", // [147] crc=147
"Ramon", // [148] crc=148
"Melvyn", // [149] crc=149
"George", // [150] crc=150
"Alexis", // [151] crc=151
"Simpson", // [152] crc=152
"Peter", // [153] crc=153
"Austin", // [154] crc=154
"Lenard", // [155] crc=155
"Fritz", // [156] crc=156
"Leo", // [157] crc=157
"Benny", // [158] crc=158
"Clement", // [159] crc=159
"Dwight", // [160] crc=160
"Agustin", // [161] crc=161
"Michael", // [162] crc=162
"Jerome", // [163] crc=163
"Lennon", // [164] crc=164
"Helmer", // [165] crc=165
"Emmanuel", // [166] crc=166
"Valentino", // [167] crc=167
"John", // [168] crc=168
"Darius", // [169] crc=169
"Luther", // [170] crc=170
"Silas", // [171] crc=171
"Brendan", // [172] crc=172
"Jason", // [173] crc=173
"Ferris", // [174] crc=174
"Frazier", // [175] crc=175
"Mercer", // [176] crc=176
"Salvador", // [177] crc=177
"Ray", // [178] crc=178
"Geno", // [179] crc=179
"Roger", // [180] crc=180
"Eddie", // [181] crc=181
"Tyler", // [182] crc=182
"Marcus", // [183] crc=183
"Silvio", // [184] crc=184
"Alan", // [185] crc=185
"Jose", // [186] crc=186
"Adam", // [187] crc=187
"Junius", // [188] crc=188
"Mason", // [189] crc=189
"Shelby", // [190] crc=190
"David", // [191] crc=191
"Rutherford", // [192] crc=192
"Randy", // [193] crc=193
"Sidney", // [194] crc=194
"Fed", // [195] crc=195
"Darold", // [196] crc=196
"Hartley", // [197] crc=197
"Martin", // [198] crc=198
"Rodney", // [199] crc=199
"Luigi", // [200] crc=200
"Jarvis", // [201] crc=201
"Malcolm", // [202] crc=202
"Bryon", // [203] crc=203
"Morris", // [204] crc=204
"Arley", // [205] crc=205
"Antonio", // [206] crc=206
"Oliver", // [207] crc=207
"Diamond", // [208] crc=208
"Robert", // [209] crc=209
"Giovanni", // [210] crc=210
"Nim", // [211] crc=211
"Walter", // [212] crc=212
"Ford", // [213] crc=213
"Mitchell", // [214] crc=214
"Burton", // [215] crc=215
"Doss", // [216] crc=216
"Benjamin", // [217] crc=217
"Terrence", // [218] crc=218
"Wilfred", // [219] crc=219
"Hugo", // [220] crc=220
"Bill", // [221] crc=221
"Levi", // [222] crc=222
"Kazuo", // [223] crc=223
"Hays", // [224] crc=224
"Larry", // [225] crc=225
"Marsh", // [226] crc=226
"Gideon", // [227] crc=227
"Brent", // [228] crc=228
"Jeptha", // [229] crc=229
"Jack", // [230] crc=230
"Rubin", // [231] crc=231
"Mike", // [232] crc=232
"Jordon", // [233] crc=233
"Harper", // [234] crc=234
"Wallace", // [235] crc=235
"Alex", // [236] crc=236
"Giles", // [237] crc=237
"Rolf", // [238] crc=238
"Kenny", // [239] crc=239
"Ivan", // [240] crc=240
"Silvester", // [241] crc=241
"Marshall", // [242] crc=242
"Samuel", // [243] crc=243
"Sterling", // [244] crc=244
"Carter", // [245] crc=245
"Edward", // [246] crc=246
"Preston", // [247] crc=247
"Sam", // [248] crc=248
"Murray", // [249] crc=249
"Anderson", // [250] crc=250
"Ron", // [251] crc=251
"Dabney", // [252] crc=252
"Lorenzo", // [253] crc=253
"Norman", // [254] crc=254
"Lenny", // [255] crc=255
"Alec", // [256] crc=256
"Ben", // [257] crc=257
"Madison", // [258] crc=258
"Linton", // [259] crc=259
"Dean", // [260] crc=260
"Herb", // [261] crc=261
"Ezekiel", // [262] crc=262
"Nelson", // [263] crc=263
"Ralph", // [264] crc=264
"Harden", // [265] crc=265
"Raymond", // [266] crc=266
"Atlas", // [267] crc=267
"Clinton", // [268] crc=268
"Frank", // [269] crc=269
"Clarence", // [270] crc=270
"Ramsey", // [271] crc=271
"Marco", // [272] crc=272
"Golden", // [273] crc=273
"Roosevelt", // [274] crc=274
"Marcel", // [275] crc=275
"Leonard", // [276] crc=276
"Colvin", // [277] crc=277
"Bertrand", // [278] crc=278
"Jackson", // [279] crc=279
"Butch", // [280] crc=280
"Matthew", // [281] crc=281
"Wyman", // [282] crc=282
"Almon", // [283] crc=283
"Robin", // [284] crc=284
"Claus", // [285] crc=285
"Jacky", // [286] crc=286
"Burke", // [287] crc=287
"Rex", // [288] crc=288
"Eric", // [289] crc=289
"Joey", // [290] crc=290
"Doug", // [291] crc=291
"Nicolas", // [292] crc=292
"Graham", // [293] crc=293
"Titus", // [294] crc=294
"Kevin", // [295] crc=295
"Granville", // [296] crc=296
"Gay", // [297] crc=297
"Daniel", // [298] crc=298
"Bruce", // [299] crc=299
"Hobert", // [300] crc=300
"Dillon", // [301] crc=301
"Sheldon", // [302] crc=302
"Everette", // [303] crc=303
"Winston", // [304] crc=304
"Ivor", // [305] crc=305
"Turner", // [306] crc=306
"Sebastian", // [307] crc=307
"Cary", // [308] crc=308
"Arthur", // [309] crc=309
"Olive", // [310] crc=310
"Gordon", // [311] crc=311
"Willy", // [312] crc=312
"Don", // [313] crc=313
"Jeremy", // [314] crc=314
"Delwin", // [315] crc=315
"Roy", // [316] crc=316
"Axel", // [317] crc=317
"Moe", // [318] crc=318
"Quentin", // [319] crc=319
"Sydney", // [320] crc=320
"Jackie", // [321] crc=321
"Tommy", // [322] crc=322
"Garfield", // [323] crc=323
"Isaac", // [324] crc=324
"Enrico", // [325] crc=325
"Artie", // [326] crc=326
"Juan", // [327] crc=327
"Grant", // [328] crc=328
"Toby", // [329] crc=329
"Everett", // [330] crc=330
"Colbert", // [331] crc=331
"Casper", // [332] crc=332
"Aron", // [333] crc=333
"Edson", // [334] crc=334
"Mark", // [335] crc=335
"Elmore", // [336] crc=336
"Cap", // [337] crc=337
"Burley", // [338] crc=338
"Ryan", // [339] crc=339
"Whit", // [340] crc=340
"Andy", // [341] crc=341
"Ace", // [342] crc=342
"Darwin", // [343] crc=343
"Mace", // [344] crc=344
"Worley", // [345] crc=345
"Virgil", // [346] crc=346
"Kenneth", // [347] crc=347
"Erastus", // [348] crc=348
"Isaiah", // [349] crc=349
"Algernon", // [350] crc=350
"Noadiah", // [351] crc=351
"Darvin", // [352] crc=352
"Marius", // [353] crc=353
"Henry", // [354] crc=354
"Graydon", // [355] crc=355
"Jefferson", // [356] crc=356
"Stan", // [357] crc=357
"Blair", // [358] crc=358
"Jordan", // [359] crc=359
"Norbert", // [360] crc=360
"Paul", // [361] crc=361
"Seyton", // [362] crc=362
"Cass", // [363] crc=363
"Barnard", // [364] crc=364
"Lou", // [365] crc=365
"Eli", // [366] crc=366
"Rudolf", // [367] crc=367
"Stanley", // [368] crc=368
"Sandy", // [369] crc=369
"Presley", // [370] crc=370
"Bradley", // [371] crc=371
"Calvin", // [372] crc=372
"Robley", // [373] crc=373
"Wellington", // [374] crc=374
"Buster", // [375] crc=375
"Ronny", // [376] crc=376
"Zack", // [377] crc=377
"Bernard", // [378] crc=378
"Ned", // [379] crc=379
"Geo", // [380] crc=380
"Jimmy", // [381] crc=381
"Ogden", // [382] crc=382
"Hugh", // [383] crc=383
"Merton", // [384] crc=384
"Woodroe", // [385] crc=385
"Fleming", // [386] crc=386
"Lee", // [387] crc=387
"Arne", // [388] crc=388
"Lester", // [389] crc=389
"Morgan", // [390] crc=390
"Verne", // [391] crc=391
"Donald", // [392] crc=392
"Israel", // [393] crc=393
"Olan", // [394] crc=394
"Alberto", // [395] crc=395
"Clark", // [396] crc=396
"Terrance", // [397] crc=397
"William", // [398] crc=398
"Norton", // [399] crc=399
"Guss", // [400] crc=400
"Casey", // [401] crc=401
"Rudolph", // [402] crc=402
"Otis", // [403] crc=403
"Mortimer", // [404] crc=404
"Taylor", // [405] crc=405
"Duncan", // [406] crc=406
"German", // [407] crc=407
"Ruffus", // [408] crc=408
"Luke", // [409] crc=409
"Mario", // [410] crc=410
"Steven", // [411] crc=411
"Chester", // [412] crc=412
"Alvia", // [413] crc=413
"Hilton", // [414] crc=414
"Gustave", // [415] crc=415
"Bob", // [416] crc=416
"Steve", // [417] crc=417
"Joshua", // [418] crc=418
"Malcom", // [419] crc=419
"Sylvan", // [420] crc=420
"Buck", // [421] crc=421
"Pedro", // [422] crc=422
"Ashley", // [423] crc=423
"Nathan", // [424] crc=424
"Derek", // [425] crc=425
"Leroy", // [426] crc=426
"Linnie", // [427] crc=427
"Fredric", // [428] crc=428
"Gene", // [429] crc=429
"Cole", // [430] crc=430
"Bartholomew", // [431] crc=431
"Abraham", // [432] crc=432
"Fabian", // [433] crc=433
"Ricky", // [434] crc=434
"Collin", // [435] crc=435
"Abb", // [436] crc=436
"Rudy", // [437] crc=437
"Junious", // [438] crc=438
"Esco", // [439] crc=439
"Olaf", // [440] crc=440
"Donovan", // [441] crc=441
"Douglas", // [442] crc=442
"Joe", // [443] crc=443
"Con", // [444] crc=444
"Jan", // [445] crc=445
"Mitchel", // [446] crc=446
"Rufus", // [447] crc=447
"Otto", // [448] crc=448
"Ferdinand", // [449] crc=449
"Dixon", // [450] crc=450
"Linus", // [451] crc=451
"Pierre", // [452] crc=452
"Wendell", // [453] crc=453
"Basil", // [454] crc=454
"Minoru", // [455] crc=455
"Al", // [456] crc=456
"Joel", // [457] crc=457
"Billy", // [458] crc=458
"Simon", // [459] crc=459
"Dixie", // [460] crc=460
"Yoshio", // [461] crc=461
"Ethan", // [462] crc=462
"Denzil", // [463] crc=463
"Harvey", // [464] crc=464
"Rush", // [465] crc=465
"Garrett", // [466] crc=466
"Louis", // [467] crc=467
"Eddy", // [468] crc=468
"Benjamen", // [469] crc=469
"Anthony", // [470] crc=470
"Wally", // [471] crc=471
"Hamilton", // [472] crc=472
"Lewis", // [473] crc=473
"Sylvester", // [474] crc=474
"Edd", // [475] crc=475
"Cliff", // [476] crc=476
"Ted", // [477] crc=477
"Murphy", // [478] crc=478
"Carl", // [479] crc=479
"Ronnie", // [480] crc=480
"Less", // [481] crc=481
"Lucas", // [482] crc=482
"Cato", // [483] crc=483
"Ian", // [484] crc=484
"Rod", // [485] crc=485
"Adrian", // [486] crc=486
"Samson", // [487] crc=487
"Alvy", // [488] crc=488
"Jake", // [489] crc=489
"Buddie", // [490] crc=490
"Prince", // [491] crc=491
"Alejandro", // [492] crc=492
"Orvil", // [493] crc=493
"Washington", // [494] crc=494
"Phillip", // [495] crc=495
"Monty", // [496] crc=496
"Zeno", // [497] crc=497
"Omar", // [498] crc=498
"Tom", // [499] crc=499
"Nels", // [500] crc=500
"Terry", // [501] crc=501
"Jacob", // [502] crc=502
"Hansel", // [503] crc=503
"Jesus", // [504] crc=504
"Dow", // [505] crc=505
"Lorenza", // [506] crc=506
"Rafael", // [507] crc=507
"Edmund", // [508] crc=508
"Bernie", // [509] crc=509
"Hillary", // [510] crc=510
"Franz" // [511] crc=511
};
I guess I ought to say which CRC I am using. Without the CRC, the table would not be useless, since an array of names is likely to be useful to someone for a computer game. But the CRC property is an extra feature which might be useful to someone else.
- Code: Select all
/**********************************************************************
*
* Filename: crc.h
*
* Description: A header file describing the various CRC standards.
*
* Notes:
*
*
* Copyright (c) 2000 by Michael Barr. This software is placed into
* the public domain and may be used for any purpose. However, this
* notice must not be changed or removed and no warranty is either
* expressed or implied by its publication or distribution.
**********************************************************************/
#ifndef _crc_h
#define _crc_h
#define crc_FALSE 0
#define crc_TRUE !crc_FALSE
/*
* Select the CRC standard from the list that follows.
*/
//#define CRC_CCITT
#define CRC32
#if defined(CRC_CCITT)
typedef unsigned short crc;
#define CRC_NAME "CRC-CCITT"
#define POLYNOMIAL 0x1021
#define INITIAL_REMAINDER 0xFFFF
#define FINAL_XOR_VALUE 0x0000
#define REFLECT_DATA crc_FALSE
#define REFLECT_REMAINDER crc_FALSE
#define CHECK_VALUE 0x29B1
#elif defined(CRC16)
typedef unsigned short crc;
#define CRC_NAME "CRC-16"
#define POLYNOMIAL 0x8005
#define INITIAL_REMAINDER 0x0000
#define FINAL_XOR_VALUE 0x0000
#define REFLECT_DATA crc_TRUE
#define REFLECT_REMAINDER crc_TRUE
#define CHECK_VALUE 0xBB3D
#elif defined(CRC32)
typedef unsigned long crc;
#define CRC_NAME "CRC-32"
#define POLYNOMIAL 0x04C11DB7
#define INITIAL_REMAINDER 0xFFFFFFFF
#define FINAL_XOR_VALUE 0xFFFFFFFF
#define REFLECT_DATA crc_TRUE
#define REFLECT_REMAINDER crc_TRUE
#define CHECK_VALUE 0xCBF43926
#else
#error "One of CRC_CCITT, CRC16, or CRC32 must be #define'd."
#endif
void crcInit(void);
crc crcSlow(unsigned char const *message, int nBytes);
crc crcFast(unsigned char const *message, int nBytes);
#endif /* _crc_h */
Since I first posted this, I have created another file with female names.
- Code: Select all
/*
* Copyright Ivan Urwin 15th August 2013
*
* Free for use by anyone.
*
* The lower 9 bits of a standard 32 bit cyclic redundancy check calculation on any of these names
* gives its position in the array. So if a computer program has a number of configuration bits
* that might be hard to remember, they can be summarised by a simple name found by a lookup
* in the array. Conversely, if a user remembers the name, a simple CRC calculation can recreate
* the configuration data.
*
* I had the idea for this when I was looking at optimising a program's performance using genetic algorithms.
* In that sort of environment, it seems logical to give names to different program configurations.
* Now instead of having to remember the best performing program had configuration bits set to 146,
* we can call it "Bobby".
*
* If more than 9 bits are required, you could use double barrel names eg Lee Harvey,
* or use three names, or create your own list of surnames, etc.
*
* The reason I am making this public, is to save people the trouble. For example, I could not
* easily find a real name with CRC 75, or 88.
*
* I have tried to use simple names like Jack and Pete whereever possible. Unfortunately, some of the simple names
* have identical CRC, while other CRC values seem difficult to obtain.
*
* There is a file for boys names and a similar file for girls names.
*
* While it ought to be possible to produce a similar list for 10 or more bits, the names are likely to become even more obscure.
*/
char * girls_512[512] =
{
"June", // [0] crc=0
"Nell", // [1] crc=1
"Alanis", // [2] crc=2
"Kelly", // [3] crc=3
"Lynda", // [4] crc=4
"Stefanie", // [5] crc=5
"Mona", // [6] crc=6
"Mary", // [7] crc=7
"Sasha", // [8] crc=8
"Annais", // [9] crc=9
"Virginia", // [10] crc=10
"Brittany", // [11] crc=11
"Margaret", // [12] crc=12
"Giselle", // [13] crc=13
"Cherry", // [14] crc=14
"Nicole", // [15] crc=15
"Agnes", // [16] crc=16
"Danica", // [17] crc=17
"Kate", // [18] crc=18
"Vera", // [19] crc=19
"Martina", // [20] crc=20
"Gabriela", // [21] crc=21
"Martha", // [22] crc=22
"Melanie", // [23] crc=23
"Susan", // [24] crc=24
"Sharon", // [25] crc=25
"Florence", // [26] crc=26
"Milly", // [27] crc=27
"Cindy", // [28] crc=28
"Olivia", // [29] crc=29
"Bianca", // [30] crc=30
"Yuki", // [31] crc=31
"Vannesa", // [32] crc=32
"Mylene", // [33] crc=33
"Gemma", // [34] crc=34
"Vivian", // [35] crc=35
"Bella", // [36] crc=36
"Lilian", // [37] crc=37
"Julie", // [38] crc=38
"Dannielle", // [39] crc=39
"Camille", // [40] crc=40
"Treasure", // [41] crc=41
"Atlantis", // [42] crc=42
"Elle", // [43] crc=43
"Liana", // [44] crc=44
"Lucille", // [45] crc=45
"Kylie", // [46] crc=46
"Wilma", // [47] crc=47
"Ida", // [48] crc=48
"Camilla", // [49] crc=49
"Jill", // [50] crc=50
"Ruby", // [51] crc=51
"Selina", // [52] crc=52
"Kira", // [53] crc=53
"Katerina", // [54] crc=54
"Deborah", // [55] crc=55
"Nicolle", // [56] crc=56
"Kati", // [57] crc=57
"Sienna", // [58] crc=58
"Carolyn", // [59] crc=59
"Abi", // [60] crc=60
"Sylvia", // [61] crc=61
"Lora", // [62] crc=62
"Julia", // [63] crc=63
"Beatrice", // [64] crc=64
"Meadow", // [65] crc=65
"Sophia", // [66] crc=66
"Kaylyn", // [67] crc=67
"Tara", // [68] crc=68
"Carmen", // [69] crc=69
"Ikea", // [70] crc=70
"Kendra", // [71] crc=71
"Angie", // [72] crc=72
"Tonia", // [73] crc=73
"Madelynne", // [74] crc=74
"Lilianna", // [75] crc=75
"Vivianne", // [76] crc=76
"Clarice", // [77] crc=77
"Roxy", // [78] crc=78
"Zori", // [79] crc=79
"Alaysia", // [80] crc=80
"Kaitlyn", // [81] crc=81
"Angela", // [82] crc=82
"Tatiana", // [83] crc=83
"Heidi", // [84] crc=84
"Rihanna", // [85] crc=85
"Gabi", // [86] crc=86
"Cheyenne", // [87] crc=87
"Larissa", // [88] crc=88
"Barbie", // [89] crc=89
"Marleen", // [90] crc=90
"Barbara", // [91] crc=91
"Mabel", // [92] crc=92
"Helen", // [93] crc=93
"Tia", // [94] crc=94
"Cecille", // [95] crc=95
"Anabella", // [96] crc=96
"Iman", // [97] crc=97
"Latisha", // [98] crc=98
"Pauline", // [99] crc=99
"Lauren", // [100] crc=100
"Jodie", // [101] crc=101
"Emily", // [102] crc=102
"Caitlin", // [103] crc=103
"Cora", // [104] crc=104
"Lana", // [105] crc=105
"Abbigale", // [106] crc=106
"Sheena", // [107] crc=107
"Tabitha", // [108] crc=108
"Emilia", // [109] crc=109
"Georgia", // [110] crc=110
"Gabriella", // [111] crc=111
"Tinley", // [112] crc=112
"Sandra", // [113] crc=113
"Maddison", // [114] crc=114
"Alena", // [115] crc=115
"Felicity", // [116] crc=116
"Judith", // [117] crc=117
"Shirley", // [118] crc=118
"Hayley", // [119] crc=119
"Alayna", // [120] crc=120
"Anabelle", // [121] crc=121
"Paulina", // [122] crc=122
"Jules", // [123] crc=123
"Penny", // [124] crc=124
"Zora", // [125] crc=125
"Samora", // [126] crc=126
"Coco", // [127] crc=127
"Macey", // [128] crc=128
"Maisy", // [129] crc=129
"Eliza", // [130] crc=130
"Meredith", // [131] crc=131
"Marie", // [132] crc=132
"Nancy", // [133] crc=133
"Dana", // [134] crc=134
"Delaney", // [135] crc=135
"Soniya", // [136] crc=136
"Layla", // [137] crc=137
"Caroline", // [138] crc=138
"Clare", // [139] crc=139
"Tyra", // [140] crc=140
"Contessa", // [141] crc=141
"Angelina", // [142] crc=142
"Kirstin", // [143] crc=143
"Regina", // [144] crc=144
"Tess", // [145] crc=145
"Mandy", // [146] crc=146
"Chloe", // [147] crc=147
"Clarity", // [148] crc=148
"Lorraine", // [149] crc=149
"Miriam", // [150] crc=150
"Doris", // [151] crc=151
"Meg", // [152] crc=152
"Denise", // [153] crc=153
"Porsche", // [154] crc=154
"Augustina", // [155] crc=155
"Edwina", // [156] crc=156
"Maria", // [157] crc=157
"Leona", // [158] crc=158
"Thelma", // [159] crc=159
"Annamaria", // [160] crc=160
"Tina", // [161] crc=161
"Lucia", // [162] crc=162
"Violet", // [163] crc=163
"Milah", // [164] crc=164
"Moira", // [165] crc=165
"Isa", // [166] crc=166
"Nathalie", // [167] crc=167
"Natalia", // [168] crc=168
"Rosemary", // [169] crc=169
"Rainbow", // [170] crc=170
"Xin", // [171] crc=171
"Elsa", // [172] crc=172
"Morgana", // [173] crc=173
"Leila", // [174] crc=174
"Annemarie", // [175] crc=175
"Mae", // [176] crc=176
"Natalie", // [177] crc=177
"Opal", // [178] crc=178
"Shannon", // [179] crc=179
"Bexley", // [180] crc=180
"Nora", // [181] crc=181
"Celine", // [182] crc=182
"Holly", // [183] crc=183
"Adrina", // [184] crc=184
"Samantha", // [185] crc=185
"Peggy", // [186] crc=186
"Andromeda", // [187] crc=187
"Perla", // [188] crc=188
"Tisa", // [189] crc=189
"Shelby", // [190] crc=190
"Marigold", // [191] crc=191
"Clementine", // [192] crc=192
"Rhonda", // [193] crc=193
"Gertrude", // [194] crc=194
"Angelica", // [195] crc=195
"Clarisse", // [196] crc=196
"Judy", // [197] crc=197
"Rebecca", // [198] crc=198
"Ellianna", // [199] crc=199
"Nastasia", // [200] crc=200
"Estelle", // [201] crc=201
"Cleopatra", // [202] crc=202
"Louise", // [203] crc=203
"Joyce", // [204] crc=204
"Haley", // [205] crc=205
"Jocelyn", // [206] crc=206
"Lizzie", // [207] crc=207
"Gina", // [208] crc=208
"Dora", // [209] crc=209
"Loretta", // [210] crc=210
"Roxanne", // [211] crc=211
"Meiling", // [212] crc=212
"Heather", // [213] crc=213
"Jessie", // [214] crc=214
"Evelin", // [215] crc=215
"Misaki", // [216] crc=216
"Trinity", // [217] crc=217
"Rania", // [218] crc=218
"Isabella", // [219] crc=219
"Tiffany", // [220] crc=220
"Clarissa", // [221] crc=221
"Nicol", // [222] crc=222
"Phillipa", // [223] crc=223
"Maryann", // [224] crc=224
"Priscella", // [225] crc=225
"Bridgit", // [226] crc=226
"Betty", // [227] crc=227
"Minka", // [228] crc=228
"Kierstan", // [229] crc=229
"Wendy", // [230] crc=230
"Malaysia", // [231] crc=231
"Flora", // [232] crc=232
"Jordon", // [233] crc=233
"Velvet", // [234] crc=234
"Alba", // [235] crc=235
"Lois", // [236] crc=236
"Sigrid", // [237] crc=237
"Mariana", // [238] crc=238
"Carly", // [239] crc=239
"Svetlana", // [240] crc=240
"Rosetta", // [241] crc=241
"Elanore", // [242] crc=242
"Candy", // [243] crc=243
"Polly", // [244] crc=244
"Etty", // [245] crc=245
"Zena", // [246] crc=246
"Beryl", // [247] crc=247
"Bambi", // [248] crc=248
"Franziska", // [249] crc=249
"Gillian", // [250] crc=250
"Simone", // [251] crc=251
"Aliyah", // [252] crc=252
"Iris", // [253] crc=253
"Maryjane", // [254] crc=254
"May", // [255] crc=255
"Ingrid", // [256] crc=256
"Riley", // [257] crc=257
"Madison", // [258] crc=258
"Jayden", // [259] crc=259
"Misha", // [260] crc=260
"Lily", // [261] crc=261
"Nike", // [262] crc=262
"Irene", // [263] crc=263
"Edna", // [264] crc=264
"Veronica", // [265] crc=265
"Aniya", // [266] crc=266
"Harlem", // [267] crc=267
"Donna", // [268] crc=268
"Georgina", // [269] crc=269
"Chelsea", // [270] crc=270
"Suzy", // [271] crc=271
"Mel", // [272] crc=272
"Quinn", // [273] crc=273
"Valorie", // [274] crc=274
"Margot", // [275] crc=275
"Brigitte", // [276] crc=276
"Hatty", // [277] crc=277
"Ruth", // [278] crc=278
"Sally", // [279] crc=279
"Amberlynn", // [280] crc=280
"Tana", // [281] crc=281
"Ocean", // [282] crc=282
"Vivienne", // [283] crc=283
"Davonna", // [284] crc=284
"Brenda", // [285] crc=285
"Fay", // [286] crc=286
"Chantelle", // [287] crc=287
"Farah", // [288] crc=288
"Jayda", // [289] crc=289
"Federica", // [290] crc=290
"Tamia", // [291] crc=291
"Melonie", // [292] crc=292
"Katherine", // [293] crc=293
"Jasmine", // [294] crc=294
"Angelique", // [295] crc=295
"Adeline", // [296] crc=296
"Daniella", // [297] crc=297
"Kitty", // [298] crc=298
"Tanya", // [299] crc=299
"Xenia", // [300] crc=300
"Gwyneth", // [301] crc=301
"Cheryl", // [302] crc=302
"Beatrix", // [303] crc=303
"Lynn", // [304] crc=304
"Nicky", // [305] crc=305
"Tiara", // [306] crc=306
"Samia", // [307] crc=307
"Lara", // [308] crc=308
"Hilda", // [309] crc=309
"Erica", // [310] crc=310
"Raelyn", // [311] crc=311
"Lorelei", // [312] crc=312
"Purity", // [313] crc=313
"Lulu", // [314] crc=314
"Bethel", // [315] crc=315
"Nelle", // [316] crc=316
"Catherine", // [317] crc=317
"Jordyn", // [318] crc=318
"Jada", // [319] crc=319
"Marianne", // [320] crc=320
"Jackie", // [321] crc=321
"Harmony", // [322] crc=322
"Alice", // [323] crc=323
"Emma", // [324] crc=324
"Jeanette", // [325] crc=325
"Sian", // [326] crc=326
"Claire", // [327] crc=327
"Felicia", // [328] crc=328
"Charlotte", // [329] crc=329
"Karli", // [330] crc=330
"Arlene", // [331] crc=331
"Joselyn", // [332] crc=332
"Glenda", // [333] crc=333
"Alecia", // [334] crc=334
"Harriet", // [335] crc=335
"Selena", // [336] crc=336
"Emmylou", // [337] crc=337
"Katrina", // [338] crc=338
"Klara", // [339] crc=339
"Eda", // [340] crc=340
"Nicki", // [341] crc=341
"Patricia", // [342] crc=342
"Selma", // [343] crc=343
"Naomi", // [344] crc=344
"Cathy", // [345] crc=345
"Nina", // [346] crc=346
"Britt", // [347] crc=347
"Carmina", // [348] crc=348
"Leeloo", // [349] crc=349
"Claira", // [350] crc=350
"Jenny", // [351] crc=351
"Jessy", // [352] crc=352
"Keira", // [353] crc=353
"Cara", // [354] crc=354
"Marion", // [355] crc=355
"Ashlan", // [356] crc=356
"Elvira", // [357] crc=357
"Ellen", // [358] crc=358
"Jordan", // [359] crc=359
"Nini", // [360] crc=360
"Allison", // [361] crc=361
"Indira", // [362] crc=362
"Yvette", // [363] crc=363
"Ashlin", // [364] crc=364
"Lou", // [365] crc=365
"Paula", // [366] crc=366
"Fatima", // [367] crc=367
"Gloria", // [368] crc=368
"Sandy", // [369] crc=369
"Vicky", // [370] crc=370
"Nelly", // [371] crc=371
"Samara", // [372] crc=372
"Yasmine", // [373] crc=373
"Valerie", // [374] crc=374
"Christine", // [375] crc=375
"Precious", // [376] crc=376
"Cordelia", // [377] crc=377
"Liz", // [378] crc=378
"Alexandra", // [379] crc=379
"Tori", // [380] crc=380
"Penelope", // [381] crc=381
"Janet", // [382] crc=382
"Nicolena", // [383] crc=383
"Anisa", // [384] crc=384
"Trudy", // [385] crc=385
"Maura", // [386] crc=386
"Kirsten", // [387] crc=387
"Kimberley", // [388] crc=388
"Rosy", // [389] crc=389
"Leslie", // [390] crc=390
"Fiona", // [391] crc=391
"Tracey", // [392] crc=392
"Anna", // [393] crc=393
"Kellyann", // [394] crc=394
"Evette", // [395] crc=395
"Yoko", // [396] crc=396
"Sheila", // [397] crc=397
"Krissy", // [398] crc=398
"Nadia", // [399] crc=399
"Josie", // [400] crc=400
"Alison", // [401] crc=401
"Susanna", // [402] crc=402
"Sammie", // [403] crc=403
"Fabianna", // [404] crc=404
"Goldie", // [405] crc=405
"Katie", // [406] crc=406
"Modesty", // [407] crc=407
"Brooke", // [408] crc=408
"Clarabelle", // [409] crc=409
"Jacqueline", // [410] crc=410
"Linda", // [411] crc=411
"Erin", // [412] crc=412
"Olga", // [413] crc=413
"Eve", // [414] crc=414
"Lydia", // [415] crc=415
"Karen", // [416] crc=416
"Henrietta", // [417] crc=417
"Zola", // [418] crc=418
"Blaise", // [419] crc=419
"Greta", // [420] crc=420
"Elizabeth", // [421] crc=421
"Rita", // [422] crc=422
"Ashley", // [423] crc=423
"Adrianne", // [424] crc=424
"Hollis", // [425] crc=425
"Savannah", // [426] crc=426
"Lilly", // [427] crc=427
"Jane", // [428] crc=428
"Arlette", // [429] crc=429
"Victoria", // [430] crc=430
"Gypsy", // [431] crc=431
"Monika", // [432] crc=432
"Bo", // [433] crc=433
"Adelia", // [434] crc=434
"Marina", // [435] crc=435
"Phoebe", // [436] crc=436
"Beyonce", // [437] crc=437
"Dolly", // [438] crc=438
"Abby", // [439] crc=439
"Gracy", // [440] crc=440
"Esmeralda", // [441] crc=441
"Gwenyth", // [442] crc=442
"Cecelia", // [443] crc=443
"Agatha", // [444] crc=444
"Jan", // [445] crc=445
"Lizzy", // [446] crc=446
"Silvia", // [447] crc=447
"Alyana", // [448] crc=448
"Delia", // [449] crc=449
"Petrona", // [450] crc=450
"Sybil", // [451] crc=451
"Peyton", // [452] crc=452
"Audrey", // [453] crc=453
"Emmanuelle", // [454] crc=454
"Carol", // [455] crc=455
"Megan", // [456] crc=456
"Scarlet", // [457] crc=457
"Rose", // [458] crc=458
"Elisa", // [459] crc=459
"Cynthia", // [460] crc=460
"Lisa", // [461] crc=461
"Maxine", // [462] crc=462
"Leonie", // [463] crc=463
"Mildred", // [464] crc=464
"Petra", // [465] crc=465
"Sarah", // [466] crc=466
"Rosie", // [467] crc=467
"Winifred", // [468] crc=468
"Mikayla", // [469] crc=469
"Becca", // [470] crc=470
"Whitney", // [471] crc=471
"Willow", // [472] crc=472
"Sabrina", // [473] crc=473
"Dorothy", // [474] crc=474
"Miranda", // [475] crc=475
"Bibi", // [476] crc=476
"Jolie", // [477] crc=477
"Lucy", // [478] crc=478
"Alexia", // [479] crc=479
"Angel", // [480] crc=480
"Jennifer", // [481] crc=481
"Ellie", // [482] crc=482
"Suzanna", // [483] crc=483
"Hazel", // [484] crc=484
"Stella", // [485] crc=485
"Ethel", // [486] crc=486
"Wanda", // [487] crc=487
"Antonella", // [488] crc=488
"Mercedes", // [489] crc=489
"Lindsey", // [490] crc=490
"Alaska", // [491] crc=491
"Marissa", // [492] crc=492
"Diana", // [493] crc=493
"Therese", // [494] crc=494
"Frederica", // [495] crc=495
"Delilah", // [496] crc=496
"Trish", // [497] crc=497
"Eleanora", // [498] crc=498
"Emerald", // [499] crc=499
"Diane", // [500] crc=500
"Terry", // [501] crc=501
"Ophelia", // [502] crc=502
"Grace", // [503] crc=503
"Yolanda", // [504] crc=504
"Beth", // [505] crc=505
"Suzanne", // [506] crc=506
"Magnolia", // [507] crc=507
"Serena", // [508] crc=508
"Gwendolyn", // [509] crc=509
"Elouise", // [510] crc=510
"Mathilda" // [511] crc=511
};
I did a little experiment with the data, using names to write numbers in base 512. To create some examples
I wanted to use some large numbers (up to 400,000), but I didn't want an unmanagable amount of data to paste here. So
my example just uses three bit numbers which are multiples of 29. For each of them I have calculated the appropriate male name
using the tables. The example uses snoob - same number of one bits in the FOR loop.
- Code: Select all
for {set i 7} {$i<=400000} {set i [snoob $i]} \
{
if {$i%29==0} \
{
puts "person $i is called [person $i]"
}
}
This is the information the program creates - just a little demonstration of conversion from numbers to names,
though the real purpose of the tables is the ability to convert from names back to numbers.
- Code: Select all
person 145 is called Craig
person 261 is called Herb
person 290 is called Joey
person 522 is called Travis Russel
person 580 is called Travis Neil
person 1044 is called Arnold Edwin
person 1160 is called Arnold Thomas
person 1537 is called Earl Travis
person 2088 is called Jeremiah Ester
person 2320 is called Jeremiah Marco
person 3074 is called Hughie Arnold
person 4176 is called Soloman Pete
person 4640 is called Nick Miller
person 6148 is called Alvin Jeremiah
person 8352 is called Joseph Dwight
person 9280 is called Randle Ismael
person 12296 is called Job Soloman
person 16704 is called Miller Sydney
person 18560 is called Colin Barry
person 24592 is called Bert Joseph
person 33408 is called Homer Barry
person 37120 is called Theodore Alec
person 49184 is called Fred Miller
person 65569 is called Barry Harry
person 66816 is called Louie Alec
person 74240 is called Craig Rene
person 98368 is called Rutherford Ismael
person 131138 is called Alec Johnny
person 133632 is called Herb Rene
person 135169 is called Ralph Travis
person 148480 is called Joey Rene
person 196736 is called Merton Barry
person 262276 is called Travis Rene James
person 267264 is called Travis Russel Rene
person 270338 is called Travis Joseph Arnold
person 296960 is called Travis Neil Rene
person 393472 is called Travis Alec Alec
I've now got round to testing that I can convert names back to numbers. DNA is my function to convert a name back to a number. I also wrote another function (cross) that
takes two numbers which I think of as being the DNA of the parents, and randomly creates a number for the DNA of their child. The number takes half of the father's bits and half of the mother's and splices them together. Here's a little test I ran.
- Code: Select all
foreach name {Fred Joe Ivan {This is not a name} {Wilma Flintstone} \
{##$^%h!" Neither is@ this <?<?} {Albert Einstein} {Joe Bloggs} Arhtur \
{Mikael Botvinnik} {C:\program files\rubbishOS\Mary__Rose_Stockfish47.exe}} \
{
if {[DNA $name dna]} \
{
puts "$name = $dna ([person $dna male], [person $dna female])"
} else {
puts "There is no known name in '$name'"
}
}
puts "[person 0xFF male] and [person 0xFF00 female] have a child called [person [cross 0xFF 0xFF00] ?]"
And the results ...
- Code: Select all
Fred = 96 (Fred, Anabella)
Joe = 443 (Joe, Cecelia)
Ivan = 240 (Ivan, Svetlana)
There is no known name in 'This is not a name'
Wilma Flintstone = 47 (Ezra, Wilma)
There is no known name in '##$^%h!" Neither is@ this <?<?'
Albert Einstein = 52 (Albert, Selina)
Joe Bloggs = 443 (Joe, Cecelia)
There is no known name in 'Arhtur'
There is no known name in 'Mikael Botvinnik'
C:\program files\rubbishOS\Mary__Rose_Stockfish47.exe = 4042 (Stephen Billy, Mary Rose)
Lenny and Coco Ingrid have a child called Barbara Allison
So things are sort of working. The conversion of names to numbers and number to names performed by my little functions "DNA" and "person" seem to be more or less inverse functions.
Since writing the above I've played a bit more and have added some more useful routines. These are Cross, GM (genetic modification) and I_am.
- Code: Select all
Cross A B
- Code: Select all
GM A B C
is used to perform tiny alterations, which amount to changing a bit-field in a compact structure, eg GM 0x123456 0x00F000 0xA will return 0x12A456. It returns the original number (which in this context I think of as DNA) with an alteration that I think of as a changed gene, giving it a new value. So in this example 0x00F000 is specifying the gene's location and 0xA is its new value. The rest of the DNA is unchanged.
- Code: Select all
I_am ?dna?
is used to read and write the program's own configuration bits. With a parameter it sets the configuration and without a parameter it reads them.
- Code: Select all
I_am [DNA Joe]
puts "I am [I_am]"
puts "namely [person [I_am]]"
gives
- Code: Select all
I am 443
namely Joe
With this stuff I have been been cross breeding versions of my program in the hope that one of the crosses will play better, and I can compare statistics for different configurations without having to run each configuration separately. The whole process has given me a different outlook on evolution. If green and yellow striped humans are the best, how much breeding is required before we actually get one? Maybe we never will. And even with mutations - suppose an obnoxious ugly woman had a gene mutation that made her completely cancer resistant. That lucky mutation might die off just as quickly as it appeared. I get the feeling that I need to cheat a little to steer things in the right direct. As an aetheist, it seems odd that I have to play god to get anything useful out of my genetic code