给定一个整数,输出一个特鲁西值,如果它是相同的颠倒(旋转180°)或虚妄值,否则。
0
、1
和8
具有旋转对称性。6
变成9
,反之亦然。
产生真实结果的数字序列:OEIS A000787
0, 1, 8, 11, 69, 88, 96, 101, 111, 181, 609, 619, 689, 808, 818, 888, 906, 916, 986, 1001, 1111, 1691, 1881, 1961, 6009, 6119, 6699, 6889, 6969, 8008, 8118, 8698, 8888, 8968, 9006, 9116, 9696, 9886, 9966, 10001, 10101, 10801, 11011, 11111, 11811, 16091, ...
这个问题的灵感来源于我在发帖时的声誉:6009
。
发布于 2020-12-22 23:11:46
发布于 2016-04-15 13:38:15
lambda n:`n`==`map('01xxxx9x86'.find,`n`)`[-2::-3]
方法'01xxxx9x86'.find
取一个数字字符到它的颠倒数字,任何不可翻转的数字给出-1
。此函数映射到反向数字字符串,生成一个数字列表。
这是与[1::3]
把戏一起转换成一个字符串的,但通过执行[-2::-3]
(这要感谢丹尼斯,节省了4个字节),并与原始的数字字符串进行比较,它是相反的。任何-1
's从不可翻转的数字将错对齐转换,使它失败。
lambda n:`n`[::-1]==`n`.translate('01xxxx9x86______'*16)
检查颠倒的数字字符串是否与颠倒的替换相同。不能翻转的数字将被'x'
替换为总是给出错误的答案。
替换是在256个字符的字符串上使用translate
完成的,替换了相应的ASCII值。只有10个值48
到57
物质,但我填充到长度16,使总长度为256。我想知道有没有更短的路。
其他一些办法(长度59、60、60):
lambda n:set(zip(`n`,`n`[::-1]))<=set(zip('01896','01869'))
r=lambda s:set(zip(s,s[::-1]));lambda n:r(`n`)<=r('9018106')
lambda n:all(a+b in'001188969'for a,b in zip(`n`,`n`[::-1]))
https://codegolf.stackexchange.com/questions/77866
复制