如果你曾经去过迪斯尼世界的爱普科特,你很可能去过世界展示:一个被各种乡村主题的地方环绕的湖泊。有一件事一直困扰着我,那就是这些国家并没有按照你在世界范围内遇到它们的顺序出现。正式的有十一个,顺序是(顺时针方向绕着圆圈转):
Mexico
Norway
China
Germany
Italy
United States
Japan
Morocco
France
United Kingdom
Canada按照上面给出的顺序编写一个函数或程序,以国家列表(作为列表、分隔字符串或其他方便的形式),并返回/输出它们,如果您是从您选择的起点开始,则返回/输出它们的顺序是,如果您是环游世界(东西或西-东),您会遇到它们。为了具体起见,让我们将每个国家的资本定义为其“地位”,并订购纵向。输出格式应与输入格式相同。
适用标准的高尔夫球规则。最短代码获胜,但以下奖金除外。获胜者将由达到标准的最低分数的代码决定,并将在至少七天内被选中。
如果您的代码可以接受任意的国家名称(除了上面列出的十一个)并对它们进行排序,那么从您的分数中减去33%。如果您调用此奖励,您必须从主子午线开始,但是您从那里走的方向取决于您自己。因为"主权国家“的总数是一个有争议的东西,我会满足其中至少190个。
['Mexico', 'Norway', 'China', 'Germany', 'Italy', 'Unites States', 'Japan', 'Morocco', 'France', 'United Kingdom', 'Canada']['Mexico', 'United States', 'Canada', 'Morocco', 'United Kingdom','France', 'Norway', 'Italy', 'Germany', 'China', 'Japan']发布于 2015-10-31 10:57:29
这是一个匿名函数,它将输入作为字符串数组,并将其作为字符串数组返回。
{36061983185Bb\f=}在线演示
一个稍微通用的版本是26个字节,它以任何顺序对11个国家的任何子集进行排序,并对它们进行正确排序:
{{71b226%75585218525Bb=}$}为了获得更好的分数,30%的奖金需要对190个国家的数据进行最多37个字节的编码(包括使用它的代码);这大约是每个国家1.5位。但是190!约为2^1169.3,需要147个字节,因此,如果不使用外部数据源进行欺骗,那么30%的奖励显然是毫无意义的。
发布于 2015-10-31 05:57:52
f=SortBy[CountryData[#,"CapitalLocation"][[1,2]]&]示例:
In[12]:= f@{"Mexico", "Norway", "China", "Germany", "Italy",
"United States", "Japan", "Morocco", "France", "United Kingdom",
"Canada"}
Out[12]= {Mexico,United States,Canada,Morocco,United Kingdom,France,Norway,Italy,Germany,China,Japan}Mathematica对每种数据都有内置的函数.
附带奖金:
f=SortBy[CountryData[#,"CapitalLocation"][[1,2]]~Mod~360&]https://codegolf.stackexchange.com/questions/62388
复制相似问题