Answers:
f={l=_this;r=[];i=0;while{i<count l}do{r=r+[(l select i)%(i+1)];i=i+1};r}
致电:
numList = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
hint format["%1\n%2", numList, numList call f];
输出:
%J
说明:
%J
J List 1 .. len(input). This is results in a list of the indexes.
% Modulo.
基本上,该代码通过索引列表来调制原始列表。
x=scan();cat(x%%1:sum(1|x))
@Jarko节省了5个字节
@Giuseppe节省了4多
@Taylor Scott节省了2多
@returnbull节省了2多
' '
在年底(空间)cat
; 这是默认的分隔符
x<-scan();cat(x%%1:length(x)," ")
-哦,还有几个格式化提示,1)您只需在代码左侧保留4个空格即可对其进行正确缩进和标记2)您可以添加一个<!-- language-all: lang-r -->
标志在代码被突出显示之前(尽管在此示例中此更改不大)3)您不需要围绕您的语言名称感到沮丧4)哦,对帖子进行编辑时也不需要发表评论
=
而不是<-
保存一个字节。(2)规范说“输出”而不是“打印”,因此您可以删除cat()
,节省5个字节。(3)sum(1|x)
比短一字节length(x)
。
ā%
ā # Push the range(1, len(a) + 1)
% # Mod each element in the input by the same one in this list
DgL%
很好。
gL%
因为我忘记了ā
。
ā
对我更深入一点吗?我相信我从未使用过它,只是它for each
以一种1 to n+1
类似vy<code>})
但暗含的方式使用vy<code>})
?
+` , + + * + + + +* + * . + + .'
这是一个无限循环,它不断从输入中读取数字并增加在处初始化的计数器1
。对于每对输入和计数器,将计算并打印模数。
要在输入已用尽时结束循环,请使用以下技巧。如果没有更多输入可用,则尝试再读取一个数字将得到一个0
。因此,我们将读取数本身除以,如果是,0
则程序以错误结尾。否则,我们放弃结果并继续。
+ Push 1. This is the initial value of the counter
` Mark label
, Read number from input and push it. Gives 0 if no more input
+ Duplicate top of the stack
+ Duplicate top of the stack
* Pop two numbers and push their division. Error if divisor is 0
+ Pop (discard) top of the stack
+ Swap top two numbers
+ Duplicate top of the stack
+ Push 1
* Pop two numbers and push their sum. This increases the counter
+ Rotate stack down, to move increased counter to bottom
* Pop two numbers and push their modulus
. Pop a number and print it as a number
+ Push 10
+ Duplicate top of the stack
. Pop a number (10) and print it as ASCII character (newline)
' If top of the stack is non-zero (it is, namely 10) go to label
®%°T
:Implicit input of array U
® :Map over the array
% :Modulo of the current element
°T :T (0, initially) incremented by 1
®%°T
(实际上,Y
如果您愿意,也可以在那里使用)
匿名VBE立即窗口函数,该函数以空格(
)分隔的数组字符串作为范围的输入[A1]
,并将起始列表中从1开始的索引的数字模数输出到VBE立即窗口
For Each n In Split([A1]):i=i+1:?n Mod i;:Next
输入输出:
[A1]="10 9 8 7 6 5 4 3 2 1" ''# or manually set the value
For Each n In Split([A1]):i=i+1:?n Mod i;:Next
0 1 2 3 1 5 4 3 2 1
Sub
常规版本子例程,将输入作为传递的数组并传到VBE立即窗口。
Sub m(n)
For Each a In n
i=i+1
Debug.?a Mod i;
Next
End Sub
输入/输出:
m Array(10,9,8,7,6,5,4,3,2,1)
0 1 2 3 1 5 4 3 2 1
Option Private Module
Option Compare Binary
Option Explicit
Option Base 0 ''# apparently Option Base 1 does not work with ParamArrays
Public Sub modIndex(ParamArray n() As Variant)
Dim index As Integer
For index = LBound(n) To UBound(n)
Debug.Print n(index) Mod (index + 1);
Next index
End Sub
输入输出:
Call modIndex(10,9,8,7,6,5,4,3,2,1)
0 1 2 3 1 5 4 3 2 1
V1R&,{v.m1+v%}&,=;
V1R&,{v.m1+v%}&,=; Implicit input from commandline args
V1R Create stack2, push 1 to it, and return to stack1
&, Reverse stack1
{.......} Foreach loop, runs for each item in stack1
v Switch to stack2
.m Duplicate last item on stack and move duplicate to stack1
1+ Increment last item on stack
v% Return to stack1, pop last 2 items and push modulus result
&, Reverse stack1
= Output stack1
; Suppress implicit output
a->{for(int i=0;i<a.length;a[i]%=++i);}
也可以在C#->
中用=>
和替换length
为Length
:
a=>{for(int i=0;i<a.Length;a[i]%=++i);}
说明:
a->{ // Method with integer-array parameter and no return-type
for(int i=0;i<a.length; // Loop over the indexes of the array (0-indexed)
a[i]%=++i // And replace every integer with itself mod (1+i)
); // End of loop
} // End of method
修改输入数组,因此缺少返回值。
->
为=>
大写字母,也可能会评论它也适用于C#length
。