您的任务是生成RATS序列的第n个项,其中n是输入。RATS序列也称为反向先添加后排序序列。也可以在以下位置找到此序列:http : //oeis.org/A004000。
测试用例:
0 > 1
1 > 2
2 > 4
3 > 8
4 > 16
5 > 77
6 > 145
7 > 668
例如,5的输出为77,因为16 + 61 =77。此后,对77进行排序。
提交时间最短者获胜。这是我的第一个挑战,所以我希望这不是重复的东西。
您的任务是生成RATS序列的第n个项,其中n是输入。RATS序列也称为反向先添加后排序序列。也可以在以下位置找到此序列:http : //oeis.org/A004000。
测试用例:
0 > 1
1 > 2
2 > 4
3 > 8
4 > 16
5 > 77
6 > 145
7 > 668
例如,5的输出为77,因为16 + 61 =77。此后,对77进行排序。
提交时间最短者获胜。这是我的第一个挑战,所以我希望这不是重复的东西。
Answers:
1i"tVPU+VSU
输入是一个字符串(带有单引号),表示一元整数。质询允许字符串输入,一元是有效格式。
1 % push number 1 to the stack
i % input. Will be a string of "n" ones
" % for loop: repeat n times (consumes string)
t % duplicate
V % convert to string
P % reverse
U % convert to number
+ % add
V % convert to string
S % sort
U % convert to number
% loop is implicitly ended
% stack content is implicitly displayed
码:
$FDR+{
说明:
$ # Push 1 and input
F # For N in range(0, input)
D # Duplicate top of the stack
R # Reverse top of the stack
+ # Add top two items
{ # Sort top of the stack
# Implicitly print top of the stack
这也适用于0字节程序。
05AB1E
先消除前导零,然后省略1
,如1E==E
。然后,您得到5ABE
-2个字节。
1ri{_sW%i+s$i}*
1 e# Push 1 as the start of the sequence.
ri e# Read input and convert to integer N.
{ e# Run this block N times...
_s e# Duplicate and convert to string.
W% e# Reverse string.
i+ e# Convert back to integer and add to previous value.
s$ e# Convert to string and sort.
i e# Convert back to integer for the next iteration.
}*
uS`+vGv_GQ\1
u Q\1 reduce range(input()) on base case of "1" (string)
+vG eval the string (to get a number), and add...
v_G the same number, reversed first and then eval'd
S` convert back to string and sort
f=lambda x,n=1:x and f(x-1,int(''.join(sorted(`n+int(`n`[::-1])`))))or n
递归函数,使用Python 2的简写形式__repr__
,一旦函数达到非常大的值(L
将在数字的字符串后附加一个),该函数就会中断,从规范中我不确定是否可以停止,但如果不更改为,str()
只会增加6个字节,但是输出为75个字节的字符串时会略短一些:
f=lambda x,n='1':x and f(x-1,''.join(sorted(str(int(n)+int(n[::-1])))))or n
这个版本上的trichoplax节省了1个字节
or
第二个代码块中的之前是否有多余的空间?
由于@ user81655,节省了1个字节
f=n=>n?+[...+[...''+(b=f(n-1))].reverse().join``+b+''].sort().join``:1
感叹 JavaScript确实很冗长。甲大量代码的(> 50%)只是情况下为字符串+数组函数+加入+铸造为INT。我已经尝试了reduce,eval和各种各样的东西,但这似乎是最短的。
在线尝试(所有浏览器都可以使用)
f=n=>n?[...+[...b=f(n-1)].reverse().join``+b+''].sort().join``:'1'
如果允许返回字符串
import Data.List
g i=i:g(sort$show$read i+read(reverse i))
(g"1"!!)
用法示例:(g"1"!!) 7
-> "668"
。
它是该定义的直接实现:从开始"1"
,重复添加当前元素的反向添加排序结果。主要功能(g"1"!!)
选择第i
th个元素。
n->(x=1;for _=1:n x=(p=parse)(join(sort(["$(x+p(reverse("$x")))"...])))end;x)
这是一个lambda函数,它接受一个整数并返回一个整数。要调用它,请将其分配给变量。
取消高尔夫:
function f(n::Int)
# Begin x at 1
x = 1
# Repeat this process n times
for _ = 1:n
# Add x to itself with reversed digits
s = x + parse(reverse("$x"))
# Refine x as this number with the digits sorted
x = parse(join(sort(["$s"...])))
end
# Return x after the process (will be 1 if n was 0)
return x
end
我确信这可能是打高尔夫球的,因为这是我用果冻/默认语言的第一个答案。
DUḌ+ðDṢḌ Performs RATS
1Ç¡ Loops
D Converts integer to decimal
U Reverses
Ḍ Converts back to integer
+ Adds original and reversed
ð Starts new chain
D Converts back to decimal
Ṣ Sorts
Ḍ Back to integer again
1 Uses 1 instead of input
Ḍ Uses line above
¡ For loop
编辑:由于丹尼斯,保存了1个字节
interface R{static void main(String[]a){int i,r,n=1,c=0,t=Byte.valueOf(a[0]);while(++c<=t){i=n;for(r=0;i!=0;i/=10){r=r*10+i%10;}n+=r;a[0]=n+"";char[]f=a[0].toCharArray();java.util.Arrays.sort(f);n=Integer.valueOf(new String(f));}System.out.print(n);}}
interface R{
static void main(String[]args){
int input,reversed,nextValue=1,count=0,target=Byte.valueOf(args[0]);
while(++count<=target){
input=nextValue;
for(reversed=0;input!=0;input/=10){reversed=reversed*10+input%10;}
nextValue+=reversed;
args[0]=nextValue+"";
char[]sortMe=args[0].toCharArray();
java.util.Arrays.sort(sortMe);
nextValue=Integer.valueOf(new String(sortMe));
}
System.out.print(nextValue);
}
}
interface
R而不是class
短4字节的R?
我看不到如何打更多的高尔夫球,但是我敢肯定有办法。多亏了@LeakyNun,我花了一些时间研究这个问题并以正确的方式进行了练习,通过使用另一种方法,我仍然可以赢得一些字节。
k=0z=table
for i=0,io.read()do
t={}(""..k+(""..k):reverse()):gsub("%d",function(d)t[#t+1]=d
end)z.sort(t)k=k<1 and 1or tonumber(z.concat(t,""))
end
print(k)
k=0
z=table -- z is a pointer on the table named table
-- it allows me to use its functions
-- while saving 4 bytes/use
for i=0,io.read() -- Iterate n times for the nth element
do
t={}
(""..a+(""..a):reverse()) -- we add k with its "reversed" value
-- and convert the whole thing to a string
:gsub(".",function(d) -- for each character in it, use an anonymous fucntion
t[#t+1]=d end) -- which insert them in the array t
z.sort(t)
a=a<1 and 1 or -- if i==0, k=1
tonumber(z.concat(t,"")) -- else we concat t in a string and convert it to number
end
print(k)
a=a<1 and 1or
例如)。
;1{↔;?+o}ⁱ⁽
;1{↔;?+o}ⁱ⁽
{ }ⁱ Repeatedly apply the following,
1 starting at 1,
; ⁽ a number of times equal to the input:
↔ reverse,
;?+ add the original input,
o then sort the resulting number
我不太清楚这对于零位数字有什么作用,但是这个问题并没有说明任何特殊的处理方式,而且它们可能也不会出现在序列中。
n=>eval("r=1;while(n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
82个字节,不包含eval
:
n=>[...Array(n)].reduce(r=>+[...+[...r+''].reverse().join``+r+''].sort().join``,1)
所有这些转换都是痛苦的。
@ edc65我实际上是通过从切换map
到reduce
这次来保存4个字节的。。。毫无疑问,你会再次证明我错了。
for
较短:n=>eval("for(r=1;n--)r=+[...+[...r+''].reverse().join``+r+''].sort().join``")
n=0
,即使我已修复语法错误。
{(1,{[~] ($_+.flip).comb.sort}...*)[$_]} # 40
(如果您希望它返回一个Int,则将+
权利放在前面[~]
)
# give it a lexical name
my &RATS = {…}
say RATS 5; # 77
# This implementation also accepts a list of indexes
# the first 10 of the sequence
say RATS ^10; # (1 2 4 8 16 77 145 668 1345 6677)
c(r:String):NNI==reduce(+,[(ord(r.i)-48)*10^(#r-i) for i in 1..#r]);f(n:INT):NNI==(n<1=>1;v:=f(n-1);v:=v+c(reverse(v::String));c(sort(v::String)))
测试和结果[RATS顺序]
(3) -> [[i, f(i)] for i in 0..20]
(3)
[[0,1], [1,2], [2,4], [3,8], [4,16], [5,77], [6,145], [7,668], [8,1345],
[9,6677], [10,13444], [11,55778], [12,133345], [13,666677], [14,1333444],
[15,5567777], [16,12333445], [17,66666677], [18,133333444], [19,556667777],
[20,1233334444]]