Một danh sách các mô-đun số chỉ số của họ trong danh sách


25

Một cách đơn giản: Lấy danh sách các số nguyên dương làm đầu vào và đầu ra các số mô đun chỉ số dựa trên 1 của chúng trong danh sách.

Nếu số nguyên đầu vào là {a, b, c, d, e, f, g}sau đó sản lượng nên được {a%1, b%2, c%3, d%4, e%5, f%6, g%7}nơi %là các nhà điều hành mô đun.


Các trường hợp thử nghiệm:

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

Câu trả lời:



9

Hoạt động ngôn ngữ kịch bản Flashpoint , 73 byte

f={l=_this;r=[];i=0;while{i<count l}do{r=r+[(l select i)%(i+1)];i=i+1};r}

Gọi với:

numList = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
hint format["%1\n%2", numList, numList call f];

Đầu ra:


1
Cái gì ... đây là một thứ?
JAD

2
@JarkoDubbeldam Vâng. Trò chơi cho phép người chơi tạo ra các kịch bản của riêng họ và có một ngôn ngữ kịch bản trong trò chơi được thiết kế để bổ sung cho thiết kế nhiệm vụ. Tuy nhiên, vì ngôn ngữ là Turing-Complete, bạn có thể làm bất cứ điều gì bạn muốn với nó.
Steadybox


7

Thạch , 2 byte

%J

Hãy thử trực tuyến!

Giải trình:

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

Về cơ bản, mã điều chỉnh danh sách ban đầu theo danh sách các chỉ mục.


2
Ngay khi nhìn thấy câu hỏi này, tôi đã nghĩ "đó là %Jtrong Jelly, tôi tự hỏi liệu có ai đã trả lời với câu trả lời đó không?". Tôi đoán người khác có cùng ý tưởng :-D

1
@ ais523 Bạn nghĩ bạn là người duy nhất? Nghĩ lại!
Erik the Outgolfer

6

R, 24 18 byte

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

Đánh giá chức năng:

function (x) 
x%%seq(x)

Mà sử dụng seq_along() để tạo một vectơ có cùng độ dài x, bắt đầu từ 1, và sau đó%% lấy modulo.

Hành vi mặc định của seqkhi được trình bày với một vectơ là seq(along.with = x)đầu ra giống như seq_along(x), nhưng ngắn hơn 6 byte.


seq(x)là một thứ tiện dụng để có xung quanh, vì tôi luôn sử dụng 1:length(x).
Giuseppe

@Giuseppe Vâng, tôi cũng ngạc nhiên.
JAD

6

R, 27 byte

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

đã lưu 5 byte nhờ @Jarko

đã lưu thêm 4 nhờ vào @Giuseppe

đã lưu thêm 2 nhờ vào @Taylor Scott

Đã lưu thêm 2 nhờ vào @returnbull


35 đó là - loại bỏ paren cuối cùng không cần thiết
Zahiro Mor

1
bạn không cần ' '(không gian) ở cuối cat; đó là dấu phân cách mặc định
Giuseppe

2
bạn có thể giảm 2 byte để có được 33 bằng cách giảm xuống còn x<-scan();cat(x%%1:length(x)," ")- ồ và một vài mẹo định dạng, 1) bạn chỉ cần 4 khoảng trắng ở bên trái mã của mình để mã được thụt lề đúng cách và được đánh dấu 2) bạn có thể thêm <!-- language-all: lang-r -->cờ trước khi mã của bạn được làm nổi bật (mặc dù điều này thay đổi rất ít trong ví dụ này) 3) bạn không cần các chữ nổi xung quanh tên ngôn ngữ của bạn 4) oh và bạn không cần phải nhận xét khi bạn chỉnh sửa bài đăng
Taylor Scott

2
(1) Bạn có thể sử dụng =thay vì <-để lưu một byte. (2) Thông số kỹ thuật cho biết "đầu ra" thay vì "in", do đó bạn có thể thả cat(), lưu 5 byte. (3) sum(1|x)ngắn hơn một byte so với length(x).
rturnbull

5

APL (Dyalog) , 5 byte

⍳∘≢|⊢

Hãy thử trực tuyến!

 các chỉ số

 của

 độ dài của đối số

| mô-đun đó

 tranh luận


Luôn luôn ngạc nhiên rằng một ngôn ngữ "chính thống" có thể rất kinh tế. Cách APL có vẻ tự nhiên là mã golf: vd (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rhoặclife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong Bạn có thể làm tốt hơn: Primes to R: (⊢~∘.×⍨)1↓⍳Rvà GoL (trong Phiên bản 16.0): K∊⍨⊢∘⊂⌺3 3trong đó K là hằng số.
Adám

@YiminRong Hãy thử công cụ tìm số nguyên tố ở đây !
Adám

5

Khối , 19 byte

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

Hãy thử trực tuyến!

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

Xem nó chạy

Một thực hiện khá thẳng về phía trước.

  • 1 đẩy 1 vào ngăn xếp để bắt đầu chỉ mục
  • I!@ lấy đầu vào số nguyên và tạm dừng nếu 0
  • s%Ow hoán đổi chỉ số lên, mod, kết quả đầu ra và thay đổi làn đường
  • ;) xóa kết quả và chỉ số tăng
  • Sow đẩy 32, không gian đầu ra và thay đổi làn đường (hướng xuống từ o)
  • $O nhảy đầu ra
  • w;wthay đổi lange, loại bỏ 32 khỏi stack và thay đổi lane vào Iđầu vào

5

05AB1E , 2 byte

ā%

Hãy thử trực tuyến! hoặc Thử tất cả các bài kiểm tra

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

Thật thú vị, tôi nghĩ nó sẽ như thế DgL%, tốt đẹp.
Bạch tuộc ma thuật Urn

@carusocomputing Ban đầu tôi có gL%vì tôi quên mất ā.
Riley

Tâm trí đi sâu hơn một chút về ātôi? Tôi tin rằng tôi chưa bao giờ sử dụng nó giống như for eachnó nhưng 1 to n+1theo cách thức vy<code>})nhưng ngụ ý vy<code>})?
Bạch tuộc ma thuật Urn

@carusocomputing, nó đẩy một mảng có giá trị 1 đến chiều dài của mảng được bật. Nó tương đương với gL. TIO
Riley

Nó cũng lừa đảo đầu vào? Hoặc là đầu vào ngầm bây giờ tự động mở rộng đến đầu vào có sẵn gần nhất?
Bạch tuộc ma thuật Urn

4

Toán học, 22 byte

#&@@@Mod~MapIndexed~#&

Thêm một cách tiếp cận Mathicala.


1
MapIndexed@Modgần như đủ tốt: '(
ngenisis

4

Starry , 75 70 byte

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

Hãy thử trực tuyến!

Giải trình

Đây là một vòng lặp vô hạn giúp đọc số từ đầu vào và tăng bộ đếm bắt đầu tại 1 . Đối với mỗi cặp đầu vào và bộ đếm, mô đun được tính toán và in.

Để kết thúc vòng lặp khi đầu vào đã hết, mẹo sau được sử dụng. Khi không có thêm đầu vào, cố gắng đọc thêm một số sẽ cho a 0. Do đó, chúng tôi chia số đọc cho chính nó và nếu đó là 0chương trình kết thúc với một lỗi. Khác, chúng tôi loại bỏ kết quả và tiếp tục.

      +              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 byte

®%°T

Thử nó


Giải trình

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

1
Tôi nghĩ rằng bạn có thể lưu một byte với ®%°T(thực ra, bạn vẫn có thể sử dụng Yở đó nếu bạn muốn)
ETHproductions

Aha. Cảm ơn, @ETHproductions.
Xù xì

3

R, 22 byte

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

R thực hiện 1: length (x) trước khi thực hiện mô đun.


Đẹp tìm với sum(x|1)!
JAD

1
Chỉ cần phát hiện ra rằng sử dụng seq()thay vì seq_along()làm điều tương tự. Vì vậy, đó là một vài byte ngắn hơn một lần nữa.
JAD

1
Tôi sẽ nói với bạn điều đó, nhưng tôi không có đại diện để bình luận. Vui mừng bạn đã tìm ra nó.
Shayne03



2

Toán học, 21 byte

#~Mod~Range@Length@#&

Hãy thử trực tuyến!

hoặc 20 byte (bởi Martin)

#~Mod~Range@Tr[1^#]&

Tr[1^#]cho Length@#.
Martin Ender

rằng một người không làm việc trên toán học, vì vậy tôi giữ cả hai
J42161217

Bạn đang thiếu một #nhân vật cuối cùng thứ hai trong câu trả lời đầu tiên của bạn.
Ian Miller

2

VBA Excel, 59 46 byte

Chơi gôn

VBE ẩn danh Chức năng cửa sổ tức thời lấy chuỗi mảng được phân tách bằng dấu cách ( ) làm đầu vào từ phạm vi [A1]và xuất các số mô đun chỉ số dựa trên 1 của chúng trong danh sách bắt đầu sang cửa sổ ngay lập tức VBE

For Each n In Split([A1]):i=i+1:?n Mod i;:Next

Đầu ra đầu vào:

[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 

SubPhiên bản thường lệ cũ

Chương trình con nhận đầu vào là một mảng đã qua và xuất ra cửa sổ ngay lập tức VBE.

Sub m(n)
For Each a In n
i=i+1
Debug.?a Mod i;
Next
End Sub

Đầu vào / Ouput:

m Array(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 

Bị đánh cắp

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

Đầu ra đầu vào:

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 byte

{_,,:).%}

Khối ẩn danh mong đợi một mảng trên ngăn xếp và thay thế nó bằng mảng đầu ra.

Hãy thử trực tuyến!

Giải trình

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

1

J, 9 byte

>:@i.@#|[

1 ... n | danh sách gốc

| là mod





1

GNU APL 1.2, 9 byte

(⍳⍴R)|R←⎕

APL hoạt động từ phải sang trái, do đó dấu ngoặc đơn.

R←⎕gán đầu vào của người dùng cho vector R.

⍴Rcho chiều dài của vectơ; ⍳⍴Rđưa ra một vectơ với tất cả các số từ 1 đến độ dài đó (vì vậy các chỉ số).

|là toán tử mod ( a|bsản lượng b%a). APL hoạt động trên các mảng, do đó, đoạn mã một vectơ chứa mỗi phần tử từ đầu vào của người dùng mod chỉ mục của nó.





1

Braingolf , 18 byte

V1R&,{v.m1+v%}&,=;

Hãy thử trực tuyến!

Giải trình

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 byte

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

Hãy thử nó ở đây.

Cũng hoạt động trong C # bằng cách thay thế ->bằng =>lengthbằng Length:

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

Hãy thử nó ở đây.

Giải trình:

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

Sửa đổi mảng đầu vào, do đó thiếu trả về.


1
Về cơ bản những gì tôi muốn làm trong C # +1, cũng có thể bình luận về nó làm việc cho C # quá nếu bạn thay đổi ->để =>và tận dụng length.
TheLethalCoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.