首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >积极行动中的五行

积极行动中的五行
EN

Code Golf用户
提问于 2020-11-07 09:19:15
回答 3查看 668关注 0票数 14

背景

五星镇是中国哲学的五大“要素”。它们是火(火)、水(水)、木材(木)、金属(金)和土壤(土)。你可以在东亚历法上找到它们,在那里,有些日子(星期二到星期六)是由五星族命名的。

一些韩国人的名字是根据五行的,这样父亲的名字会对他的孩子们产生积极的影响。让我们来模拟一下。

阳性行为

  • 火使土壤肥沃。
  • 土壤孕育金属。
  • 金属是盛水的容器。
  • 水滋养木材。
  • 木头是火的燃料。

负作用

这些都与这次挑战无关,但我还是要展示给大家看。

  • 火融化金属。
  • 金属排骨木。
  • 木头能穿透土壤。
  • 土壤阻塞了水。
  • 水能扑灭火。

表意文字

有些表意文字以“五行”作为它的词根。在这里,只有CJK表意文字(U+4E00-U+9FFF),一个Unicode块,将被视为Unicode 1.0.1。

  • 火(U+706B)-爩(U+7229)是以火为自由基的。
  • 水(U+6C34)-灪(U+706A)以水为自由基。
  • 木(U+6728)-欟(U+6B1F)以木材为自由基。
  • 金属(U+91D1)-钄(U+9484)以金属为自由基。
  • 土壤(U+571F)-壪(U+58EA)以土壤为自由基。
  • 其他所有的角色都不关心情况。

Notes

  • 有些字符,在Unicode自己的字典中,不同意上面的分类。例如,U+6CF5(泵)实际上没有水作为它的基础,而是"石“。另一个例子是,U+6E20(渠)具有模糊的词根,即水或木材。这样的人物也会陷入漠不关心的境地。
  • 在Unicode 1.0.1之后,Unicode向块和其他块添加了更多的字符,这些字符的根都是五星。例如,U+9FA6(龦)也把Fire作为它的基础。在这个挑战中,这个细节应该被忽略,而这些角色也会陷入不关心的境地。

目标

给定一个以五星W为基的表意文字,输出其根目录将由W积极作用的任何表意文字。

示例

给定U+6E92(溒),它有水作为它的自由基,所以输出任何以木头为基础的表意文字,因为水滋养了木头。例如,U+675C(杜)。

给定U+577D(坽),它以土壤作为自由基,因此输出任何以金属为自由基的表意文字,因为土壤孕育着金属。例如,U+927A(鉺)。

EN

回答 3

Code Golf用户

回答已采纳

发布于 2020-11-07 18:22:52

果冻,18 字节数

代码语言:javascript
复制
“Ọ{ƊɠṪƲ‘ɓ:Ḣ<Sịɗ‘×Ḣ

一种接受序号的一元链接,产生序数如下:

代码语言:javascript
复制
Input                           Output
Fire   (28779 火 - 29225 爩)    22444  垬  (Soil)
Soil   (22303 土 - 22762 壪)    37467  鉛  (Metal)
Metal  (37329 金 - 38020 钄)    27874  波  (Water)
Water  (27700 水 - 28778 灪)    26426  机  (Wood)
Wood   (26408 木 - 27423 欟)    28960  焠  (Fire)

在网上试试!或见所有有效案例

怎么做?

整数除以181

  1. 保持范围清晰
  2. 将所有值减少到小于256
  3. 每个范围都有多个结果
  4. 有一个大于181的结果。

这允许我们将所有神奇的数字放在一个代码页索引列表中,使用这些索引进行整数除法、类别识别、新类别的查找和最后的乘法:

代码语言:javascript
复制
“Ọ{ƊɠṪƲ‘ɓ:Ḣ<Sịɗ‘×Ḣ - Link: ordinal, n       e.g. n = 27700 (木 - minimal Water)
“Ọ{ƊɠṪƲ‘           - code-page indices (call this M) [181,123,145,159,206,153]
        ɓ          - new dyadic chain - f(n,M):
         :         -   integer divide                [27700//181, 27700//123,...]
          Ḣ        -   head (call this x)            27700//181 = 153
              ɗ    -   last three links as a dyad - f(x, M):
           <       -     (x) less than? (M)          [1, 0, 0, 1, 1, 0]
            S      -     sum                         3
             ị     -     index into (M)              145
               ‘   -   increment                     146
                ×  -   multiply (M)                  [146×181, 146×123, ...]
                 Ḣ -   head                          146×181 = 26426 (机 - a Wood)
票数 5
EN

Code Golf用户

发布于 2020-11-07 10:36:12

JavaScript (Node.js),39字节

I/O: Unicode码点作为整数。

代码语言:javascript
复制
n=>Buffer("99944,777I")[n/543%62&15]<<9

在网上试试!

怎么做?

步骤1

我们首先查找一些除数d,以便以下元素集S_k是不相交的:

S_k=\left\{\left\lfloor\dfrac{n}{d}\right\rfloor,\:C_{min}(k)\le n\le C_{max}(k)\right\}

其中C_{min}(k)C_{max}(k)k-th元素的编码点界。

由于Unicode的水范围(U+6C34到U+706A)紧跟Unicode范围的Fire (U+706B到U+7229),所以d没有很多可能的选项:它必须是28779 (0x706B)的适当除数,即d\in\{1, 3, 53, 159, 181, 543, 9593\}。实际工作的最佳值是d=543

步骤2

然后,我们查找一些以n作为输入的模块链,并使用n/543将其转换为对应于对应元素的索引。我们没有将结果舍入为零,而是强制最后一次操作按位,而不是模。

一次快速的蛮力搜索会导致:

f(n)=((n/543)\bmod 62)\operatorname{and}15

步骤3

最后,我们寻找一些乘数m,这样每个k都存在一些满足以下条件的q_k

C_{min}(k)\le q_k\times m\le C_{max}(k)

一个可能的高尔夫友好型值是m=512,导致下表:

代码语言:javascript
复制
 element | hexa range      | q  | q*512 | as hexa
---------+-----------------+----+-------+---------
  Soil   | 0x571F - 0x58EA | 44 | 22528 | 0x5800
  Wood   | 0x6728 - 0x6B1F | 52 | 26624 | 0x6800
  Water  | 0x6C34 - 0x706A | 55 | 28160 | 0x6E00
  Fire   | 0x706B - 0x7229 | 57 | 29184 | 0x7200
  Metal  | 0x91D1 - 0x9484 | 73 | 37376 | 0x9200

q的值被编码为,479I的ASCII码。

票数 8
EN

Code Golf用户

发布于 2020-11-07 11:23:42

哈斯克尔,51字节

代码语言:javascript
复制
w x="金火林土水"!!sum[1|c<-"朧氳灪釐",x>c]

在网上试试!

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

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

复制
相关文章

相似问题

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