Daftar modulus angka indeks mereka dalam daftar

25

Yang sederhana: Ambil daftar bilangan bulat positif sebagai input dan output angka-angka modulus indeks berbasis 1 mereka dalam daftar.

Jika bilangan bulat input {a, b, c, d, e, f, g}maka output harus di {a%1, b%2, c%3, d%4, e%5, f%6, g%7}mana %adalah operator modulus.


Kasus uji:

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
Stewie Griffin
sumber

Jawaban:

9

Operasi bahasa skrip 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}

Telepon dengan:

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

Keluaran:

Steadybox
sumber
1
Apa ... ini benda?
JAD
2
@JarkoDubbeldam Ya. Gim ini memungkinkan pemain untuk membuat skenario sendiri, dan ada bahasa skrip dalam game yang dirancang untuk melengkapi perancangan misi. Namun, karena bahasanya lengkap-Turing, Anda bisa melakukan apa saja yang Anda inginkan.
Steadybox
8

Python 2 , 35 byte

i=1
for x in input():print x%i;i+=1

Cobalah online!

Menghitung indeks secara manual, sesuai tip saya .

Tidak
sumber
1
Jika Anda bisa keluar dengan kesalahan (saya lupa kalau itu default), Anda bisa mencukur beberapa byte .
FryAmTheEggman
7

Jelly , 2 byte

%J

Cobalah online!

Penjelasan:

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

Pada dasarnya, modulos daftar asli dengan daftar indeks.

Kamerad SparklePony
sumber
2
Begitu saya melihat pertanyaan ini, saya berpikir "itu ada %Jdi Jelly, saya ingin tahu apakah ada yang menjawab dengan jawaban itu?". Saya kira orang lain memiliki ide yang sama :-D
1
@ ais523 Kamu pikir kamu satu-satunya? Pikirkan lagi!
Erik the Outgolfer
6

R, 24 18 byte

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

Mengevaluasi fungsi:

function (x) 
x%%seq(x)

Yang digunakan seq_along()untuk membuat vektor dengan panjang yang sama dengan x, mulai dari 1, dan kemudian %%mengambil modulo.

Perilaku default seqsaat disajikan dengan vektor adalah seq(along.with = x)output yang sama dengan seq_along(x), tetapi 6 byte lebih pendek.

JAD
sumber
seq(x)adalah hal yang mudah untuk dimiliki, karena saya selalu menggunakan 1:length(x).
Giuseppe
@ Giuseppe Ya saya agak terkejut juga.
JAD
6

R, 27 byte

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

disimpan 5 byte berkat @Jarko

disimpan 4 lebih banyak berkat @Giuseppe

disimpan 2 lebih banyak berkat @Taylor Scott

Disimpan 2 lagi berkat @returnbull

Zahiro Mor
sumber
35 itu - dihapus paren terakhir yang tidak dibutuhkan
Zahiro Mor
1
Anda tidak membutuhkan ' '(spasi) di akhir cat; itulah pemisah default
Giuseppe
2
Anda dapat menjatuhkan 2 byte untuk mendapatkan 33 dengan mengurangi ini ke x<-scan();cat(x%%1:length(x)," ")- oh dan beberapa tips memformat, 1) Anda hanya perlu 4 spasi di sebelah kiri kode Anda agar indentasi dan ditandai dengan benar 2) Anda dapat menambahkan sebuah <!-- language-all: lang-r -->bendera sebelum kode Anda disorot (walaupun ini sedikit berubah dalam contoh ini) 3) Anda tidak perlu tanda kurung di sekitar nama bahasa Anda 4) oh dan Anda tidak perlu membuat komentar ketika Anda mengedit posting
Taylor Scott
2
(1) Anda dapat menggunakan =alih-alih <-menyimpan byte. (2) Spesifikasi mengatakan "output" daripada "print", jadi Anda mungkin dapat menjatuhkan cat(), menghemat 5 byte. (3) sum(1|x)lebih pendek satu byte dari length(x).
rturnbull
5

APL (Dyalog) , 5 byte

⍳∘≢|⊢

Cobalah online!

 indeks

 dari

 panjang argumen

| modulus itu

 argumen

Adám
sumber
Selalu kagum bahwa bahasa "arus utama" bisa sangat ekonomis. Cara APL tampaknya secara alami menjadi kode golf: eg (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rataulife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life
@YiminRong Anda dapat melakukan yang lebih baik: Primes ke R: (⊢~∘.×⍨)1↓⍳Rdan GoL (dalam Versi 16.0): di K∊⍨⊢∘⊂⌺3 3mana K adalah konstanta.
Adám
@YiminRong Cobalah pencari bilangan prima di sini !
Adám
5

Cubix , 19 byte

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

Cobalah online!

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

Tonton Jalankan

Implementasi yang cukup lurus ke depan.

  • 1 dorong 1 ke tumpukan untuk memulai indeks
  • I!@ dapatkan input integer dan hentikan jika 0
  • s%Ow menukar indeks, mod, hasil keluaran dan ubah jalur
  • ;) hapus indeks hasil dan kenaikan
  • Sow tekan 32, ruang output dan ganti jalur (turun dari o)
  • $O lompat output
  • w;wganti lange, hapus 32 dari tumpukan dan ubah jalur ke Iinput
MickyT
sumber
5

05AB1E , 2 byte

ā%

Cobalah online! atau Coba semua tes

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list
Riley
sumber
Menarik, saya pikir itu akan seperti DgL%, menyenangkan.
Magic Gurita Guci
@carusocomputing Saya awalnya punya gL%karena saya lupa ā.
Riley
pikiran akan sedikit lebih mendalam ābagi saya? Saya percaya saya tidak pernah menggunakannya, hanya seperti for eachtetapi dengan 1 to n+1cara seperti vy<code>})tetapi tersirat vy<code>})?
Magic Gurita Guci
@caruscomputing itu mendorong array dengan nilai 1 ke panjang array yang muncul. Ini setara dengan gL. TIO
Riley
Apakah itu juga menipu input? Atau apakah input implisit sekarang diperluas secara otomatis ke input terdekat yang tersedia?
Magic Gurita Guci
4

Mathematica, 22 byte

#&@@@Mod~MapIndexed~#&

Satu lagi pendekatan Mathematica.

Martin Ender
sumber
1
MapIndexed@Modsudah hampir cukup baik: '(
ngenisis
4

Starry , 75 70 byte

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

Cobalah online!

Penjelasan

Ini adalah infinite loop yang terus membaca angka dari input dan meningkatkan penghitung yang diinisialisasi pada 1. Untuk setiap pasangan input dan penghitung, modulus dihitung dan dicetak.

Untuk mengakhiri loop ketika input telah habis, trik berikut ini digunakan. Ketika tidak ada lagi input yang tersedia, mencoba membaca satu nomor lagi memberi a 0. Dengan demikian, kami membagi angka baca dengan sendirinya, dan jika itu 0program berakhir dengan kesalahan. Kalau tidak, kita membuang hasilnya dan melanjutkan.

      +              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
Luis Mendo
sumber
4

MATL , 4 , 3 byte

tf\

Cobalah online!

Satu byte disimpan berkat @LuisMendo!

DJMcMayhem
sumber
3

Brachylog , 9 byte

l⟦₁;?↔z%ᵐ

Cobalah online!

Penjelasan

l⟦₁          [1, ..., length(Input)]
   ;?↔z      Zip the Input with that range
       %ᵐ    Map mod
Fatalisasi
sumber
3

Japt, 5 4 byte

®%°T

Cobalah

  • -1 byte berkat produk ETH

Penjelasan

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1
Shaggy
sumber
1
Saya pikir Anda dapat menyimpan byte dengan ®%°T(sebenarnya, Anda masih bisa menggunakannya di Ysana jika Anda mau)
ETHproduksi
Aha. Terima kasih, @ETHproductions.
Shaggy
3

R, 22 byte

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

R melakukan 1: panjang (x) sebelum melakukan modulus.

Shayne03
sumber
Nice ditemukan dengan sum(x|1)!
JAD
1
Baru tahu bahwa menggunakan seq()bukannya seq_along()melakukan hal yang sama. Jadi itu beberapa byte lebih pendek lagi.
JAD
1
Aku akan memberitahumu itu, tapi aku tidak punya perwakilan untuk berkomentar. Senang Anda menemukannya.
Shayne03
2

Python 2 , 42 byte

lambda l:[v%(i+1) for i,v in enumerate(l)]

Cobalah online!

benar-benar manusiawi
sumber
Anda dapat menghapus spasi sebelumfor
Beta Decay
41 byte:lambda l:[v%-~i for i,v in enumerate(l)]
ovs
2
Atau lambda l:[v%i for i,v in enumerate(l,1)],.
xnor
2

Mathematica, 21 byte

#~Mod~Range@Length@#&

Cobalah online!

atau 20 byte (oleh Martin)

#~Mod~Range@Tr[1^#]&
J42161217
sumber
Tr[1^#]untuk Length@#.
Martin Ender
yang satu tidak bekerja pada matematika, jadi saya menjaga mereka berdua
J42161217
Anda melewatkan a #sebagai karakter terakhir kedua dalam jawaban pertama Anda.
Ian Miller
2

Excel VBA, 59 46 Bytes

Golf

VBE Anonim Funtion jendela langsung yang mengambil spasi ( ) string array terbatas sebagai input dari rentang [A1]dan menampilkan angka-angka modulus indeks berbasis 1 mereka dalam daftar awal ke jendela langsung VBE

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

Input output:

[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 

SubVersi rutin lama

Subrutin yang mengambil input sebagai array yang lulus dan keluar ke jendela langsung VBE.

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

Input / Ouput:

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

Tidak disatukan

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

Input output:

Call modIndex(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 
Taylor Scott
sumber
1

CJam , 9 byte

{_,,:).%}

Blok anonim yang mengharapkan array pada stack dan menggantinya dengan output array.

Cobalah online!

Penjelasan

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

J, 9 byte

>:@i.@#|[

1 ... n | daftar asli

| adalah mod

Jonah
sumber
1

JavaScript (ES6), 22 byte

a=>a.map((x,y)=>x%++y)
Shaggy
sumber
1

tcl, 35

lmap l $L {puts [expr $l%[incr i]]}

demo

sergiol
sumber
1

GNU APL 1.2, 9 byte

(⍳⍴R)|R←⎕

APL beroperasi dari kanan ke kiri, karenanya tanda kurung.

R←⎕menetapkan input pengguna ke vektor R.

⍴Rmemberikan panjang vektor; ⍳⍴Rmemberikan vektor dengan semua angka dari 1 ke panjang itu (jadi indeks).

|adalah mod operator ( a|bhasil b%a). APL beroperasi pada array, sehingga kode potongan vektor yang berisi setiap elemen dari input mod pengguna indeksnya.

Arc676
sumber
1

Pyth, 5

.e%bh

Tes online .

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

Oktaf , 19 byte

@(n)mod(n,1:nnz(n))

Cobalah online!

Fungsi anonim yang mengambil n sebagai input, dan melakukan modulus elemen-bijaksana dengan daftar 1, 2, 3 .

Stewie Griffin
sumber
1

Braingolf , 18 byte

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

Cobalah online!

Penjelasan

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
Skidsdev
sumber
1

Java 8 / C #, 39 byte

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

Coba di sini.

Juga berfungsi di C # dengan mengganti ->dengan =>dan lengthdengan Length:

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

Coba di sini.

Penjelasan:

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

Memodifikasi input-array, karenanya tidak ada pengembalian.

Kevin Cruijssen
sumber
1
Pada dasarnya apa yang akan kulakukan di C # 1, juga bisa memberikan komentar tentang hal itu bekerja untuk C # juga jika Anda mengubah ->ke =>dan memanfaatkan length.
TheLethalCoder