This is a different type of compression challenge. In a normal [tag:kolmogorov-complexity] challenge, you are required to recreate a list exactly. Here, you are allowed to round the values in any way you wish. What's the catch? Your score is penalized based on how wrong your output is. At the bottom of this question is a list of the first ionization energies for the first 108 elements. Your program, upon execution, should output a reasonably accurate copy of this list. There will be no input or arguments. For scoring purposes your output should be deterministic (same output every time). **Output format** Your program/function must output a list of 108 numbers, sorted in order of increasing atomic number. This list can be in any appropriate format. The source data below is provided in the correct order, from hydrogen to hassium. Scoring - **Your score will be your program's length in bytes plus a rounding penalty.** A rounding penalty is calculated for each element and summed to give the total penalty. As an example, let's take the number `11.81381`. Let's say that your program outputs an incorrect value of `11.81299999`. 1. First, both numbers are multiplied by the same power of 10 such that there is no longer a decimal point in the true value: `1181381, 1181299.999`. Trailing zeros in the true value are considered significant. 2. Then, the absolute difference is taken to determine the absolute error: `81.001`. 3. Finally, we calculate this element's penalty as `max(0, log10(err * 4 - 1)) -> 2.50921`. This formula was chosen such that an error < 0.5 gives no penalty (since the answer is correct within rounding), while also giving an asymptotic 50% chance that rounding the number to any particular decimal place would provide a net benefit in score (assuming no other compression). Here is a [Try-It-Online](https://tio.run/##hZVhbxs3DIa/@1ccAn@wk04RJVGi6nQo9i@Gphhc9JIZc@zMvqAohvz2jHdHUm6BYQWCnmSJIl9R7/Pcn/b49nHYnh77ofvQ/f1ttej4H0SHlVJM3iPEPM2F5JBKpFJlAl2sUCCVDNO4uhhCrnUakAuVPFQ/xwMXsg913ggcKSaIelQG8pjmUXEpBArzieAwJ0xejoNYfcllGhWXUw4R5adKWDLJyYCQSaJ7lyhnyjqK2fs5XQiu5pJlHbqCNQPMJyfHpeccJavsACIgBi9DzJCqfFMg2ZVdSVxL0UHOCJLsKCWQDKoPKRcdEYHXZTlWKlpgCTmSV2lrglpViVprbPGo1iRKVFdIiuVPDLEGvQCCSKCSc4DspYTkoBQIJLFzZcWKlRqA85DvHGPV@YJEKAn4GlKUb4AaNTEWG70qgCR7ycWoN1Ic31uISX7gsigESaQQXwAGjZXGbpN12VOkKmV6X7Pdb0KQdPl@IYxNPBcdWSbOHjFpoQEg5yQDTqPqZyRt8FSiTgZU8ZE0w5xiAf0uPoog3C6pki7nKvTEKQFZ4gPYal@0Z8DyZeUxAWpSKfDjA2s59JIuC5gqFm0gysnrTVCMoh5x/1GIKjKnqvOVbzGKjiEgYns2saC39vfc5XZIYt1K1QsMhPze9BxI2rBQpPs5WEkiTXK@hJK8lhUKpaB3wN0erNeil5fOCupTg5pMv5CxSYmmcGliV7D0q7w23kagWkd@/fqe7WHruqz5WsN7U1/11Xeqj3ex3rx9fO4P2/2w689sp6v1ZrF4OJ661fLAQ7/p@P87FoTGr5ubdfcP710Op5eef17ONvxpefi8GacfX/rzGOXuV47C46eX/ejR4K@v9/3hcfhztTo/73fD6vbe3b6bw6zXn@DzemNRrz/M@y4Ctqlx7uvu4YGDbr@cV/OOX2TdFGT3wKlPS@4673DOl3dZkWOyU2U8/9r1@3P/X0v2x0cJdd0lPgXWt@MU@Omg18XrYrE8vzx1N5zeH90oWpOSU30@7Q5Dd/X78eXUDcdhu@/mX793u/P7@8O49f5wf7ja6MrfTv32r6/Hb4fuy3dOrH/qD8P7acH/38gcgsfwrrv6qZQpxOvi7e1nRv7Ax0s2GhcbExsPjYWNg8bAxr/GPuOeMc9411hnnDPGXfDtgm0XXFOmKc@MZcoxY1jjl7LLuGXMarxqrDJOCaOMT8amCy4Zky54pCxSDimDlD/KHuWOMkd5Y6wxzjTGGF@MLcoVY8oFTy5ZYhwRhgg/ZnYIN2ZmKC@MFcoJYYTyQdggXFAmGA@MBcYBY4D6v3q/@r56vvq9eX3z@ebxzd/N22dfV09XP29ebj5uHi7@PXm3@rZ4tvi1eLX4tHi0@LN48@TLkydPfjx58eTDoweX6W96EP8C) implementation of a penalty-calculating program. The input to this program is provided as a list of numbers, one per line. The output of this program is the total penalty and a per-element breakdown of scoring. Data - The list of numbers below is the target data, in the correct order from atomic number 1 to 108. [Source](http://physics.nist.gov/cgi-bin/ASD/ie.pl?spectra=H-DS+i&units=1&at_num_out=on&el_name_out=on&shells_out=on&level_out=on&e_out=0&unc_out=on&biblio=on) 13.598434005136 24.587387936 5.391714761 9.322699 8.2980190 11.260296 14.53413 13.618054 17.42282 21.564540 5.1390767 7.646235 5.985768 8.151683 10.486686 10.36001 12.96763 15.7596112 4.34066354 6.11315520 6.56149 6.82812 6.746187 6.76651 7.434018 7.9024678 7.88101 7.639877 7.726380 9.3941990 5.9993018 7.899435 9.7886 9.752392 11.81381 13.9996049 4.177128 5.69486720 6.21726 6.63390 6.75885 7.09243 7.11938 7.36050 7.45890 8.33686 7.576234 8.993822 5.7863552 7.343917 8.608389 9.00966 10.45126 12.1298431 3.893905548 5.211664 5.5769 5.5386 5.473 5.5250 5.582 5.64371 5.670385 6.14980 5.8638 5.93905 6.0215 6.1077 6.18431 6.254159 5.425871 6.825069 7.549571 7.86403 7.83352 8.43823 8.96702 8.95883 9.225553 10.437504 6.1082871 7.4166796 7.285516 8.414 9.31751 10.7485 4.0727409 5.278424 5.380226 6.3067 5.89 6.19405 6.2655 6.0258 5.9738 5.9914 6.1978 6.2817 6.3676 6.50 6.58 6.65 4.90 6.01 6.8 7.8 7.7 7.6 Baselines & Tips - The source data above is 906 bytes, with certain compression tools able to get it to sub-500 bytes. Interesting solutions are those that attempt to perform intelligent rounding, use algebraic formulas, or other techniques to output approximate values in fewer bytes than compression alone. It is difficult, however, to judge these tradeoffs across languages: for some languages compression alone might be optimal, while many other languages might lack compression tools altogether, so I expect a wide variation in score across languages. This is fine, as I'm going by the "competition within languages, not between them" philosophy. I anticipate that it might be useful to attempt to take advantage of trends in the periodic table. Below is a graph I found of ionization energies, so that you can see some of these trends. [![enter image description here][1]][1] [1]: https://i.sstatic.net/5pJyF.png