反向和平方


19

在此挑战中,您将根据好奇的序列计算数字。

您的输入是一个十进制非负整数。反转此整数中的位,然后对数字求平方即可得到所需的输出。

反转位时,不得在输入中使用任何前导零。例如:

26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121

此序列的前25个输入/输出:

0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9

您的解决方案应适用于任意大小的整数。如果您的语言没有使用这些语言的便捷内置方法,请像使用语言一样实现您的答案。如果您的答案大量中断,您将被原谅。但是,请勿使用仅适用于有限域(例如查找表)的技巧/界限。


您的分数是源代码的字节数。

如果您从不将数字转换为二进制或从二进制转换为数字,则奖励-50%。这不限于内置函数,如果您一点一点地遍历数字(通过移位或屏蔽或任何其他方法),它将也算作转换。我不知道这是否实际上可行,但是它可以激励您在序列中发现一个模式。

分数最低者获胜。



1
如果代码调用的方法产生的字符串表示位,那么该方法是否有资格获得奖金?
布拉德·吉尔伯特b2gills,2015年

2
@ BradGilbertb2gills号
orlp

我假设使用数学方法提取位也算作二进制转换?
lirtosiast 2015年

Answers:


5

Par,5个字节

✶Σ⌐Σ²

这就是读取二进制反向二进制平方。



@CᴏɴᴏʀO'Bʀɪᴇɴ该字节计数器采用UTF-8。我相信Mauris正在使用不是UTF-8的某种编码来计数他的字节,但是他没有指定这种编码。
orlp 2015年

Par使用自己的怪异编码。它的规范表示是<256个Unicode字符的某个子集。我不确定它是否有名字;我应该等待@Ypnypn到插入内容。
林恩

哦,我懂了。@orlp
Conor O'Brien

它可能有自己的SBCS?
HyperNeutrino

19

Mathematica,42个 21字节

感谢alephalpha将分数减半。

#~IntegerReverse~2^2&

我在Mathematica中这样做的实际原因是因为我想看一个情节...它看起来确实很有趣:

在此处输入图片说明


11
但是我喜欢得分!XD
Conor O'Brien 2015年

1
为什么此答案的票数比字节数最少的答案更多?o_O
Seadrus

27
@Seadrus你知道他们在说什么。图片价值7个字节。
Martin Ender

5
因此您的分数是42 + 7 = 49字节:P
Seadrus

3
抱歉,@CᴏɴᴏʀO'Bʀɪᴇɴ。
马丁·恩德

8

Minkolang 0.14,43字节

感谢Mego的启发。

n1{d1`,2$3*&$z2zd2%-2l$Md1%-;z2%*z2:{+}2;N.

在此处测试代码,在此处检查所有测试用例

说明

这使用以下递归关系:

a(0) = 0
a(1) = 1
a(2n) = a(n)
a(2n+1) = a(n) + 2^(floor(log_2(n))+1)

如果n是输入,则a(n)是二进制数被翻转后的结果数。0和1很明显。对于a(2n) = a(n),请考虑翻转x0x是的任何二进制数字序列)0x,这与相同x。对于a(2n+1),推理要复杂一些。x1翻转的是1x,它等于x + 2^k对一些k。这k是比数字的数目多一个x,这是floor(log_2(n))+1。完整的公式如下,只是对其进行了一些修改。这是我实际编写的代码:

a(0) = 0
a(1) = 1
a(n) = a(n//2) + (n%2) * 2^(floor(log_2(n - n%2)))

当我和Mego聊天时,floor(n/2) = (n - n%2)/2。因此,log_2(floor(n/2))+1 = log_2(n - n%2)。此外,乘以(n%2)会将奇数和偶数部分都折叠为一个表达式。

最后,不用多说,这是代码,解释如下。

n                                              Take number from input
 1{                                            Start recursion that takes only one element
   d1`,                                        1 if top of stack 0 or 1, 0 otherwise
       2$3*                                    26
           &                                   Jump if top of stack is not zero
            $z                                 Store top of stack in register (z)

               zd2%-                           n - n%2
                    2l$M                       log_2(n - n%2)
                        d1%-                   floor(log_2(n - n%2))
              2             ;                  2^floor(log_2(n - n%2))
                             z2%               n%2
                                *              Multiply
                                 z2:           n//2
                                    {          Recurse
                                     +         Add
                                      }        Return
                                       2;N.    Square it, output as number, and stop.

1
我认为重复只是对各个位进行迭代的重新构造。
马丁·恩德

3
恐怕这不算数。每当你看到2n2n+1在递归关系,你应该马上把它看成遍历位。
orlp 2015年

1
@orlp:好吧,这真是令人讨厌。我现在已经确信您的奖金是不可能的。
El'endia Starman

@ El'endiaStarman我想差不多了。
Conor O'Brien 2015年

8

Japt29 28 11 7 个字节

(您可以将程序另存为7字节的IEC_8859-1-编码文件,然后将其上传到解释器。)

Japt是ETHproductions制作的缩短的JavaScript 。

¢w n2 ²

在线尝试!

说明:

  1. ¢是的快捷方式Us2,可编译为U.s(2)U.s(2)数字调用的输入(隐式)被调用.toString(2)(转换为二进制,以字符串形式解析)。

  2. w编译为.w(),这会反转字符串(.split('').reverse().join(''))。

  3. n2用作parseInt(<number>,2),即将二进制转换为十进制。

  4. ²调用Math.pow(<number>,2),即对数字求平方。


1
上面有一个字符串函数toNumber n,所以可以这样做Us2 a w a n2 p2。干得好!
ETHproductions

1
另外,w在字符串上的作用与在数组上的作用相同,因此您不需要两个as :)
ETHproductions

1
最后一件事:Us2 = ¢p2= ²,将其减少到7个字节:¢w n2 ²
ETHproductions 2015年

3
网上解释现在接受IEC_8859-1编码的文件。(尽管我不确定如何同时执行UTF-8和UTF-16 ...)
ETHproductions'December

2
@ETHproductions-现在我可以对此+1 :)
Digital Trauma

5

Python,32字节

lambda x:int(bin(x)[:1:-1],2)**2

在线尝试。

该代码非常简单:bin(6)例如,给出0b1106.的二进制表示形式。[:1:-1]将字符串反转并删除0bint将字符串从二进制转换为整数,并将其**2平方。




4

说真的8 7字节

2;,¡R¿ª

像这样的挑战非常适合认真:)

在线尝试

说明:

2;,¡    get a string representing the (decimal) input in binary, with a 2 on the bottom of the stack
R      reverse the string
¿    convert binary string to decimal int (using that extra 2 from earlier)
ª      square it

很适合Jolf!
Conor O'Brien

+1使您的翻译接受CP437编码(或至少接受十六进制表示)
Digital Trauma 2015年

4

J,10 9字节

2^~|.&.#:

这是一个默认的单调动词。在线尝试!

感谢@randomra打高尔夫球1个字节!

怎么运行的

2^~|.&.#:  Right argument: y

       #:  Convert y to binary.
   |.      Reverse the digits.
     &.    Dual; apply the inverse of #:, i.e., convert back to integer.
 ^~        Apply power (^) with reversed argument order (~)...
2          to 2 and the previous result.

链接无效,我在Google页面上收到404错误,提示“在此服务器上找不到所请求的URL /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html。这就是我们所知道的。”
Bijan


2

JavaScript,64 63 56 53字节

n=>parseInt([...n.toString(2)].reverse().join``,2)**2

我知道我特别长,但是,嘿,我可以做到:P

演示版


而不是parseInt(您可以做的+("0b"+
Downgoat

@Downgoat hm,它似乎没有给出正确的结果。
nicael

[...n.toString(2)].join``
Conor O'Brien 2015年

1
甚至更短的瓦特/ ES7(49个字节): n=>+("0b"+[...n.toString(2)].reverse().join``)**2。目前还不能在任何浏览器中使用
Downgoat 2015年

1
@CᴏɴᴏʀO'Bʀɪᴇɴ谢谢,这节省了一些字节。
nicael

2

Perl 6,21个字节

{:2(.base(2).flip)²}

用法示例:

say {:2(.base(2).flip)²}(26); # 121

say (0..24).map: {:2(.base(2).flip)²};
# (0 1 1 9 1 25 9 49 1 81 25 169 9 121 49 225 1 289 81 625 25 441 169 841 9)

my &code = {:2(.base(2).flip)²};
say code 3; # 9

say chars code 10¹⁰⁰; # 140

2

PHP,45字节

echo pow(bindec(strrev(decbin($argv[1]))),2);

2

壳牌25

dc -e2o?p|rev|dc -e2i?d*p

通过STDIN / STDOUT输入/输出:

$ echo 26|dc -e2o?p|rev|dc -e2i?d*p
121
$ 


1

Pyth,9个字节

^i_.BQ2 2

这是一个非常简单的基于pyth的答案,类似于Python


1

𝔼𝕊𝕄𝕚𝕟,12个字符/ 21个字节

⦅`ᶀ`+ᴙ(ïß2)²

Try it here (Firefox only).

非竞争性答案,9个字符/ 18个字节

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).


1
通过字节计数器,给出15个字节(使用另一种编码)。
nicael

我使用UTF-8评分(直到我可以使用Mines编码)。
Mama Fun Roll

语言的名称是方格吗?
corsiKa

这是ESMin的双重打击。不完全支持Unicode字符。
Mama Fun Roll


1

TI-Basic(TI-84 Plus CE),42个字节

Prompt X
0→S
While X
2S→S
If X/2≠int(X/2
S+1→S
End
S2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.