首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >看妈妈!我做了我自己的数字系统(基数10)!

看妈妈!我做了我自己的数字系统(基数10)!
EN

Code Golf用户
提问于 2019-08-08 15:08:06
回答 5查看 5.7K关注 0票数 22

我们都做到了,嗯,也许不是,但制作自己的外星语言和编号系统是一个主要的幻想写作,但主要是一个有趣的活动。

任务很简单,接受两个输入:

  1. 一个包含10个十唯一‘数字’的有序列表输入(任何可打印的ASCII字符)并按顺序将它们解释为值0、1、2、3、...,9 +,这里可以是数字的例外。算术运算符(+,-,*,/),除法和空格不能用作数字之一。
  2. 一个只使用那些“数字”的算术问题

并以给定的形式输出等效整数结果。

下面是一个例子:

代码语言:javascript
复制
INPUT

abcdefghij

bcd + efg + hij
代码语言:javascript
复制
OUTPUT

bdgi

在示例中,“abcdefghij”的输入列表(您可以选择列表的形式)对应于“0123456789”,正如“hjkloiwdfp”也对应1到1与'0123456789‘,而不是'a’与零关联,'h‘。下面的算法“转换”为123 + 456 + 789,等于1368。这必须以我们给出的形式输出,所以b(代表1) d(对于2) g(代表6)和i(代表8)。

测试用例

代码语言:javascript
复制
abcdefghij
abc + def - ghij

-gedc
代码语言:javascript
复制
qwertyuiop
qwerty / uiop

e
代码语言:javascript
复制
%y83l;[=9|
(83l * 9) + 8%

y9|8

更多规则

  • 标准漏洞是禁止的!
  • 这是代码高尔夫,所以最短的答案以字节为单位获胜。
  • 必须是一个完整的程序或功能,以任何形式的输入和输出最适合你。(不能在输入、数字和表达式中添加附加信息。
  • 使用任何你想要的语言(只要它符合其他规则)
EN

回答 5

Code Golf用户

发布于 2019-08-08 16:23:11

T,117个字节

代码语言:javascript
复制
DECLARE @ CHAR(99)
SELECT @='SELECT TRANSLATE('+TRANSLATE(e,c,'0123456789')+',''0123456789'','''+c+''')'FROM t
EXEC(@)

换行符只用于可读性。

输入通过一个预先存在的表t,其中包含文本列c(字符)和e(等式),根据我们的IO规则

使用SQL 2017函数TRANSLATE在字符之间切换并生成一个字符串,该字符串不仅包含等式,还包含代码,以便将其转换回原始字符:

代码语言:javascript
复制
SELECT TRANSLATE(123 + 456 + 789,'0123456789','abcdefghij') 

然后使用EXEC()计算此字符串。

可能有一些字符(例如单引号')会破坏这段代码;我还没有测试所有可能的ASCII字符。

根据挑战,我正在评估给出的表达式,这取决于我的语言如何解释这些运算符。因此,由于整数除法,第二个测试用例返回1 (w),而不是2 (e)。

票数 6
EN

Code Golf用户

发布于 2019-08-08 20:32:07

木炭,14字节

代码语言:javascript
复制
⍘UV⭆η⎇№θι⌕θιιθ

在网上试试!链接是详细的代码版本。注意:表达式是根据Python 3语义计算的,因此,例如,将零引向非零数是非法的。解释:

代码语言:javascript
复制
   ⭆η           Map over expression's characters and join
        ι       Current character
      №θ        Count matches in first input
     ⎇          If non-zero
         ⌕θι    Replace with position in first input
            ι   Otherwise keep character unchanged
 UV             Evaluate as Python 3
⍘            θ  Convert to base using first input as digits
票数 1
EN

Code Golf用户

发布于 2019-08-08 21:50:49

Python 3,167个字节

代码语言:javascript
复制
import re
a=[*enumerate(input())]
e=input()
for i,c in a:e=re.sub(c,str(i),e)
e=str(round(eval(re.sub(r'\b0+(?!\b)','',e))))
for i,c in a:e=re.sub(str(i),c,e)
print(e)

在网上试试!

还有改进的余地..。

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

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

复制
相关文章

相似问题

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