数模列表及其在列表中的索引


25

一个简单的例子:将 一个正整数列表作为输入,并在列表中输出其从1开始的索引的模数。

如果输入整数是{a, b, c, d, e, f, g}则输出应该是{a%1, b%2, c%3, d%4, e%5, f%6, g%7}其中%是模运算符。


测试用例:

10  9  8  7  6  5  4  3  2  1
 0  1  2  3  1  5  4  3  2  1

8 18  6 11 14  3 15 10  6 19 12  3  7  5  5 19 12 12 14  5
0  0  0  3  4  3  1  2  6  9  1  3  7  5  5  3 12 12 14  5

1
0

1  1
0  1

Answers:



9

操作Flashpoint脚本语言,73字节

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];

输出:


1
什么...这是东西吗?
2017年

2
@JarkoDubbeldam是的。该游戏允许玩家创建自己的场景,并且游戏中的脚本语言旨在补充任务设计。但是,由于该语言是图灵完备的,因此您可以使用它进行几乎所有的操作。
Steadybox


7

果冻,2个字节

%J

在线尝试!

说明:

%J
 J List 1 .. len(input). This is results in a list of the indexes.
%  Modulo.

基本上,该代码通过索引列表来调制原始列表。


2
一看到这个问题,我就想“那是%J果冻,我想知道是否有人回答了这个答案?”。我猜其他人也有同样的想法:-D

1
@ ais523您认为您是唯一的一个吗?再想一想!
暴民埃里克(Erik the Outgolfer)

6

R,24 18字节

pryr::f(x%%seq(x))

评估功能:

function (x) 
x%%seq(x)

它使用seq_along()来创建相同的长度的矢量x,从1开始,然后%%取模。

seq与向量一起呈现时的默认行为seq(along.with = x)是与输出相同seq_along(x),但短6个字节。


seq(x)随身携带是一件方便的事情,因为我一直在使用1:length(x)
朱塞佩

@Giuseppe是的,我也很惊讶。
2017年

6

R,27个字节

x=scan();cat(x%%1:sum(1|x))

@Jarko节省了5个字节

@Giuseppe节省了4多

@Taylor Scott节省了2多

@returnbull节省了2多


35-已删除不需要的最后一个括号
Zahiro Mor

1
你不需要' '在年底(空间)cat; 这是默认的分隔符
Giuseppe

2
您可以将其减少为2,从而减少2个字节,从而获得33个字节x<-scan();cat(x%%1:length(x)," ")-哦,还有几个格式化提示,1)您只需在代码左侧保留4个空格即可对其进行正确缩进和标记2)您可以添加一个<!-- language-all: lang-r -->标志在代码被突出显示之前(尽管在此示例中此更改不大)3)您不需要围绕您的语言名称感到沮丧4)哦,对帖子进行编辑时也不需要发表评论
泰勒·斯科特(Taylor Scott)

2
(1)您可以使用=而不是<-保存一个字节。(2)规范说“输出”而不是“打印”,因此您可以删除cat(),节省5个字节。(3)sum(1|x)比短一字节length(x)
rturnbull

5

APL(Dyalog),5个字节

⍳∘≢|⊢

在线尝试!

 指标

 的

 参数的长度

| 那个模数

 论点


总是惊讶于“主流”语言如此经济。APL方式似乎自然是代码高尔夫:例如(~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rlife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong您可以做得更好:对R:(⊢~∘.×⍨)1↓⍳R和GoL(在16.0版中)进行质数运算:K∊⍨⊢∘⊂⌺3 3其中K是常数。
亚当

@YiminRong在这里尝试素数查找器!
亚当

5

库比克斯,19字节

;ww.1I!@s%Ow;)Sow.$

在线尝试!

    ; w
    w .
1 I ! @ s % O w
; ) S o w . $ .
    . .
    . .

观看运行

一个相当直接的实现。

  • 1 将1压入堆栈以开始索引
  • I!@ 获取整数输入,如果为0,则暂停
  • s%Ow 向上交换索引,修改,输出结果并更改通道
  • ;) 删除结果并增加索引
  • Sow 推动32,输出空间并更改车道(从o向下行驶)
  • $O 跳转输出
  • w;w更改语言,从堆栈中删除32,然后将通道更改为I输入

5

05AB1E,2个字节

ā%

在线尝试!尝试所有测试

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list

有趣的是,我认为它会DgL%很好。
魔术章鱼缸

我最初使用@carusocomputing是gL%因为我忘记了ā
赖利

介意ā对我更深入一点吗?我相信我从未使用过它,只是它for each以一种1 to n+1类似vy<code>})但暗含的方式使用vy<code>})
Magic Octopus Urn

@carusocomputing会将值1的数组推入弹出​​数组的长度。等同于gLTIO
莱利

它还会欺骗输入吗?还是隐式输入现在自动扩展到最接近的可用输入?
魔术章鱼缸

4

Mathematica,22个字节

#&@@@Mod~MapIndexed~#&

另一种Mathematica方法。


1
MapIndexed@Mod几乎不够好:'(
ngenisis

4

星空75 70字节

      +`  , + +   *    +  + +      +*   +    *  .               + + .'

在线尝试!

说明

这是一个无限循环,它不断从输入中读取数字并增加在处初始化的计数器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



3

Japt,5个 4字节

®%°T

试试吧


说明

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1

1
我认为您可以保存一个字节®%°T(实际上,Y如果您愿意,也可以在那里使用)
ETHproductions

啊哈 谢谢@ETHproductions。
毛茸茸的

3

R,22个字节

pryr::f(x%%1:sum(x|1))

R在执行模数之前执行1:length(x)。


很高兴找到sum(x|1)
JAD

1
刚刚发现使用seq()而不是seq_along()做相同的事情。这样又少了几个字节。
JAD

1
我本来要告诉你的,但是我没有代表对此发表评论。很高兴你想出来了。
Shayne03




2

Excel VBA,59 46字节

打高尔夫球

匿名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 

1

CJam,9个字节

{_,,:).%}

期望在堆栈上有一个数组并将其替换为输出数组的匿名块。

在线尝试!

说明

{       }    e# Define block
 _           e# Duplicate
  ,          e# Length
   ,         e# Range, 0-based
    :)       e# Add 1 to each entry
      .%     e# Vectorized modulus

1

J,9个字节

>:@i.@#|[

1 ... n | 原始清单

| 是国防部





1

GNU APL 1.2,9个字节

(⍳⍴R)|R←⎕

APL从右到左运行,因此在括号中。

R←⎕将用户输入分配给vector R

⍴R给出向量的长度;⍳⍴R给出一个具有从1到该长度的所有数字的向量(即索引)。

|是mod运算符(a|byields b%a)。APL在数组上运行,因此代码片段化了一个向量,其中包含来自用户输入mod的每个元素及其索引。



1

Pyth,5岁

.e%bh

在线测试

    hk     # 1-based index of (implicit) lambda variable
   b       # element
  %        # element mod (1-based index)
.e    Q    # enumerated map over (implicit) input


1

Braingolf,18个字节

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

1

Java 8 / C#,39个字节

a->{for(int i=0;i<a.length;a[i]%=++i);}

在这里尝试。

也可以在C#->中用=>和替换lengthLength

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

修改输入数组,因此缺少返回值。


1
本质上,我在C#+1中所做的工作,如果更改->=>大写字母,也可能会评论它也适用于C#length
TheLethalCoder
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.