首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩原子电离能

压缩原子电离能
EN

Code Golf用户
提问于 2018-02-07 17:43:00
回答 4查看 1.6K关注 0票数 22

这是一种不同类型的压缩挑战。在正常的kolmogorov-复杂性挑战中,需要准确地重新创建列表。在这里,您可以任意舍入这些值。陷阱是什么?你的分数是根据你的输出有多错而受到惩罚的。

在这个问题的底部是第一个元素的第一个电离能的列表。您的程序在执行时,应该输出此列表的一个相当准确的副本。不会有任何输入或争论。出于评分的目的,您的输出应该是确定性的(每次都是相同的输出)。

输出格式

您的程序/函数必须输出108个数字的列表,并按增加原子序数的顺序排序。此列表可以是任何适当的格式。下面的源数据是按正确的顺序提供的,从氢到氢。

评分

你的分数将是你的程序的长度,以字节加上四舍五入的惩罚。计算了每个元素的四舍五入惩罚,并对其进行了求和,得出了总惩罚。

例如,让我们以数字11.81381为例。假设您的程序输出了不正确的11.81299999值。

  1. 首先,这两个数字乘以相同的10的幂,使得在真值:1181381, 1181299.999中不再有小数点。真实值中的尾随零被认为是重要的。
  2. 然后,用绝对差来确定绝对误差:81.001
  3. 最后,我们将该元素的惩罚计算为max(0, log10(err * 4 - 1)) -> 2.50921。选择这个公式时,误差< 0.5不会造成任何惩罚(因为答案在四舍五入中是正确的),同时也给出了将数字舍入到任何特定小数位的概率为50%,从而提供了得分上的净收益(假设没有其他压缩)。

这是一个惩罚计算程序的试一下-在线实现。这个程序的输入是一个数字列表,每行一个。这个程序的输出是总罚则和得分的每一个要素的细分.

数据

下面的数字列表是目标数据,从原子序数1到108的顺序是正确的。

来源

代码语言:javascript
复制
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

基线和提示

上面的源数据是906字节,某些压缩工具可以将其压缩到500字节以下。有趣的解决方案是那些试图执行智能四舍五入、使用代数公式或其他技术输出近似值的方法。然而,很难跨语言判断这些权衡:对于某些语言来说,压缩本身可能是最佳的,而其他许多语言可能完全缺乏压缩工具,所以我预计语言之间的分数会有很大的差异。这很好,因为我要讲的是“语言内部的竞争,而不是他们之间的竞争”哲学。

我预计,尝试利用周期表中的趋势可能是有益的。下面是我发现的电离能图,你可以看到其中的一些趋势。

EN

回答 4

Code Golf用户

发布于 2018-02-08 00:49:37

打扫,540字节+ 64.396 罚则 = 604.396

注意:为了提高可读性,我已经转义了[Char]文本中的每个字节,因为大多数字节都是不可打印的。但是,它们只被计算为每个转义的一个字节(除null、引号和换行符外),因为Clean自然地接受源文件编码--独立的(除了null)。

代码语言:javascript
复制
import StdEnv,GenLib
c[h:t]=[(toInt h>>i)rem 2\\i<-[0..7]]++c t
c[]=[]
r[]=[]
r l=[7<<29+2^62+sum[d<<p\\d<-l&p<-[32..53]]:r(drop 22l)]
u::Maybe[Real]
u=uncompress{e\\e<-[108:r(c['\145\062\353\227\045\336\021\131\341\224\212\225\230\140\121\241\231\027\321\306\361\254\075\154\161\041\144\255\346\110\371\126\172\155\361\127\152\023\350\222\117\116\341\222\155\357\351\072\341\153\315\025\171\317\141\367\076\232\377\323\206\301\257\235\103\154\157\274\035\010\347\167\142\370\355\074\172\320\347\036\165\262\210\364\177\025\144\176\303\223\143\116\340\270\012\172\062\377\257\141\265\320\342\261\225\347\215\165\044\152\017\011\133\251\027\347\243\307\231\304\165\351\325\035\036\053\010\341\344\131\363\207\072\045\327\012\130\347\167\023\312\023\210\013\347\244\236\020\172\153\362\370\142\123\276\116\226\341\211\245\105\136\145\146\130\367\123\026\312\244\225\347\152\225\145\142\207\164\227\145\360\105\140\201\041\271\141\273\274\230\020\101\166\101\133\171\063\155\302\062\036\061\335\147\130\365\175\201\203\035\357\341\272\172\270\067\047\002\200\223\342\156\230\253\152\347\105\322\335\117\203\220\242\342\316\137\311\247\004\155\164\124\131\205\325\203\116\306\365\170\325\032\143\337\017\331\232\006\266\122\176\305\334\137\214\312\130\035\110\306\206\227\001\000\150\353\121\132\146\246\226\231\071\365\050\140\063\063\333\314\314\307\314\354\231\231\171'])]}

在网上试试!

这是第一个挑战,我已经能够利用清洁的一般压缩能力(技术上不是实际压缩,它是二进制序列化),以获得实际利益。

我从一个[Real]开始--一个64位浮点数的列表,来自这个问题。在序列化这个列表之后,我简化了前10位(每个数字都是相同的),并将底部32位的最佳配置简化为常量7<<29+2^62。其余的每个数字22位被转换成2.75个字符,并编码成一个字符串。

这使得整个压缩常量仅为302字节,包括每一个转义!

票数 6
EN

Code Golf用户

发布于 2018-02-07 19:15:53

C,49个字节+ 626.048惩罚= 675.048

代码语言:javascript
复制
f(i){for(i=0;i<108;)printf("%f\n",5.5+i++/13%2);}

在网上试试!

票数 4
EN

Code Golf用户

发布于 2018-02-07 20:41:47

果冻,116 字节数 + 429.796016684433 罚则 = 545.796016684433

代码语言:javascript
复制
“tẏØA5X¶tɱḅÐ-ı3OMm⁾¦ȷ #""*00-.Bı0FF_y¤ß÷!"&&)+5,=æ)8=Nc¡ÑÞŒŒŒÞßßñçðıȷñ÷Ø#,//6==@Nȷ*(6AR£ÑØøðñ÷ıııñ÷øþ !€ı#/-,‘+47÷12

在网上试试!

没有什么特别壮观的,一个代码页索引列表“...‘ (数字介于0到249个之间),我们在每个列表中添加47,+47,然后除以12,÷12

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/155159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档