Lista modułów liczbowych ich indeksów na liście

25

Prosty: weź listę liczb całkowitych dodatnich jako dane wejściowe i wyślij moduł liczbowy ich indeks oparty na 1 na liście.

Jeśli wejściowymi liczbami całkowitymi są, {a, b, c, d, e, f, g}to wyjście powinno być {a%1, b%2, c%3, d%4, e%5, f%6, g%7}tam, gdzie %jest operator modułu.


Przypadki testowe:

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
źródło

Odpowiedzi:

9

Operacyjny język skryptowy Flashpoint , 73 bajty

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

Zadzwoń z:

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

Wydajność:

Steadybox
źródło
1
Co ... to jest rzecz?
JAD
2
@JarkoDubbeldam Tak. Gra pozwala graczom tworzyć własne scenariusze, a w grze znajduje się język skryptowy uzupełniający projektowanie misji. Ponieważ jednak język jest kompletny w Turinga, możesz robić z nim prawie wszystko, co chcesz.
Steadybox
7

Galaretka , 2 bajty

%J

Wypróbuj online!

Wyjaśnienie:

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

Zasadniczo, kod modulos oryginalną listę według listy indeksów.

Towarzyszu SparklePony
źródło
2
Gdy tylko zobaczyłem to pytanie, pomyślałem: „to %Jw Galaretce, zastanawiam się, czy ktoś odpowiedział na tę odpowiedź?”. Chyba ktoś inny miał ten sam pomysł :-D
1
@ ais523 Myślisz, że byłeś jedyny? Pomyśl jeszcze raz!
Erik the Outgolfer,
6

R 24 24 bajtów

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

Ocenia funkcję:

function (x) 
x%%seq(x)

Który wykorzystuje, seq_along()aby utworzyć wektor o tej samej długości co x, zaczynając od 1, a następnie %%wziąć moduł.

Domyślne zachowanie seqpo przedstawieniu z wektorem seq(along.with = x)to takie samo wyjście seq_along(x), ale o 6 bajtów krótsze.

JAD
źródło
seq(x)to przydatna rzecz dookoła, ponieważ zawsze używam 1:length(x).
Giuseppe,
@Giuseppe Tak, byłem też trochę zaskoczony.
JAD
6

R, 27 bajtów

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

zapisano 5 bajtów dzięki @Jarko

zaoszczędzono jeszcze 4 dzięki @Giuseppe

zaoszczędzono jeszcze 2 dzięki @Taylor Scott

Zaoszczędzono jeszcze 2 dzięki @returnbull

Zahiro Mor
źródło
35 jest - usunięto niepotrzebne ostatnie paren
Zahiro Mor
1
nie potrzebujesz ' '(spacji) na końcu cat; to domyślny separator
Giuseppe
2
możesz upuścić 2 bajty, aby uzyskać 33, zmniejszając to do x<-scan();cat(x%%1:length(x)," ")- oh i kilka wskazówek dotyczących formatowania, 1) potrzebujesz tylko 4 spacji po lewej stronie kodu, aby było poprawnie wcięte i oznaczone 2) możesz dodać <!-- language-all: lang-r -->flagę zanim Twój kod zostanie podświetlony (choć w tym przykładzie niewiele się to zmienia) 3) nie potrzebujesz hamulców wokół nazwy twojego języka 4) och i nie musisz komentować, kiedy edytujesz wpis
Taylor Scott,
2
(1) Możesz użyć =zamiast <-zapisać bajt. (2) Specyfikacja mówi „wyjście” zamiast „wydrukuj”, więc prawdopodobnie możesz upuścić cat(), oszczędzając 5 bajtów. (3) sum(1|x)jest o jeden bajt krótszy niż length(x).
rturnbull
5

APL (Dyalog) , 5 bajtów

⍳∘≢|⊢

Wypróbuj online!

 wskaźniki

 z

 długość argumentu

| ten moduł

 argument

Adám
źródło
Zawsze się dziwiłem, że język „głównego nurtu” może być tak ekonomiczny. Naturalnie sposób APL wydaje się być golfem kodowym: np. (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to RLublife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life
@YiminRong Możesz zrobić lepiej: Liczby pierwsze do R: (⊢~∘.×⍨)1↓⍳Ri GoL (w wersji 16.0): K∊⍨⊢∘⊂⌺3 3gdzie K jest stałą.
Adám
@YiminRong Wypróbuj wyszukiwarkę liczb pierwszych tutaj !
Adám
5

Cubix , 19 bajtów

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

Wypróbuj online!

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

Watch It Run

Dość prosta implementacja.

  • 1 naciśnij 1 na stos, aby rozpocząć indeks
  • I!@ uzyskaj liczbę całkowitą i zatrzymaj, jeśli 0
  • s%Ow zamień indeks, mod, wynik wyjściowy i zmień linię
  • ;) usuń wynik i wskaźnik przyrostu
  • Sow pchnij 32, wyjdź spacją i zmień pas (kierunek od o)
  • $O przeskoczyć wyjście
  • w;wzmień pasmo, usuń 32 ze stosu i zmień pas na Iwejście
MickyT
źródło
5

05AB1E , 2 bajty

ā%

Wypróbuj online! lub Wypróbuj wszystkie testy

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list
Riley
źródło
Ciekawe, myślałem, że to będzie DgL%miłe.
Magic Octopus Urn
@ carusocomputing miałem pierwotnie, gL%ponieważ zapomniałem o ā.
Riley
masz ochotę pójść trochę głębiej ādla mnie? Wydaje mi się, że nigdy go nie użyłem, czy to jest po prostu, for eachale w 1 to n+1sposób podobny, vy<code>})ale dorozumiany vy<code>})?
Magic Octopus Urn
@ carusocomputing to wypycha tablicę o wartości 1 na długość wyskakującej tablicy. Jest to równoważne z gL. TIO
Riley
Czy to także zwielokrotnia dane wejściowe? Czy też dane niejawne są teraz automatycznie rozszerzane na najbliższe dostępne dane wejściowe?
Magic Octopus Urn
4

Mathematica, 22 bajty

#&@@@Mod~MapIndexed~#&

Jeszcze jedno podejście Mathematica.

Martin Ender
źródło
1
MapIndexed@Modjest prawie wystarczająco dobry: '(
ngenisis
4

Gwiaździsta , 75 70 bajtów

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

Wypróbuj online!

Wyjaśnienie

Jest to nieskończona pętla, która odczytuje liczby z wejścia i zwiększa licznik zainicjowany na 1. Dla każdej pary danych wejściowych i licznika moduł jest obliczany i drukowany.

Aby zakończyć pętlę po wyczerpaniu danych wejściowych, stosuje się następującą sztuczkę. Gdy nie ma już więcej danych wejściowych, próba odczytania jeszcze jednej liczby daje znak 0. Tak więc dzielimy odczytany numer sam, a jeśli tak, 0program kończy się błędem. W przeciwnym razie odrzucamy wynik i kontynuujemy.

      +              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
źródło
4

MATL , 4 , 3 bajty

tf\

Wypróbuj online!

Jeden bajt zapisany dzięki @LuisMendo!

DJMcMayhem
źródło
3

Brachylog , 9 bajtów

l⟦₁;?↔z%ᵐ

Wypróbuj online!

Wyjaśnienie

l⟦₁          [1, ..., length(Input)]
   ;?↔z      Zip the Input with that range
       %ᵐ    Map mod
Fatalizować
źródło
3

Japt, 5 4 bajtów

®%°T

Spróbuj


Wyjaśnienie

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1
Kudłaty
źródło
1
Myślę, że możesz zaoszczędzić bajt ®%°T(właściwie, nadal możesz go użyć Y, jeśli chcesz)
ETHproductions
Aha. Dzięki, @ETHproductions.
Kudłaty
3

R, 22 bajty

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

R wykonuje 1: długość (x) przed wykonaniem modułu.

Shayne03
źródło
Niezłe znalezisko z sum(x|1)!
JAD
1
Właśnie odkryłem, że używanie seq()zamiast seq_along()robi to samo. To znowu kilka bajtów krótszych.
JAD
1
Chciałem ci to powiedzieć, ale nie miałem przedstawiciela, żeby komentować. Cieszę się, że to rozgryzłeś.
Shayne03
2

Python 2 , 42 bajty

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

Wypróbuj online!

całkowicie ludzki
źródło
Możesz usunąć to miejsce przedfor
Beta Decay
41 bajtów:lambda l:[v%-~i for i,v in enumerate(l)]
ovs
2
Lub lambda l:[v%i for i,v in enumerate(l,1)].
xnor
2

Mathematica, 21 bajtów

#~Mod~Range@Length@#&

Wypróbuj online!

lub 20 bajtów (autor Martin)

#~Mod~Range@Tr[1^#]&
J42161217
źródło
Tr[1^#]dla Length@#.
Martin Ender
ten nie działa na matematyce, więc trzymam je oba
J42161217
W #pierwszej odpowiedzi brakuje a jako ostatniego znaku.
Ian Miller
2

Excel VBA, 59 46 bajtów

Grał w golfa

Anonimowa funkcja VBE Natychmiastowa funkcja okna, która pobiera ciąg tablicy rozdzielany spacją jako dane wejściowe z zakresu [A1]i wypisuje moduł liczb ich indeks 1 na liście początkowej do bezpośredniego okna VBE

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

Wejście wyjście:

[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 

Stara Subrutynowa wersja

Podprogram, który pobiera dane wejściowe jako przekazaną tablicę i wychodzi do bezpośredniego okna VBE.

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

Wejście / Ouput:

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

Nie golfił

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

Wejście wyjście:

Call modIndex(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 
Taylor Scott
źródło
1

CJam , 9 bajtów

{_,,:).%}

Anonimowy blok, który oczekuje tablicy na stosie i zastępuje ją tablicą wyjściową.

Wypróbuj online!

Wyjaśnienie

{       }    e# Define block
 _           e# Duplicate
  ,          e# Length
   ,         e# Range, 0-based
    :)       e# Add 1 to each entry
      .%     e# Vectorized modulus
Luis Mendo
źródło
1

J, 9 bajtów

>:@i.@#|[

1 ... n | oryginalna lista

| jest mod

Jonasz
źródło
1

JavaScript (ES6), 22 bajty

a=>a.map((x,y)=>x%++y)
Kudłaty
źródło
1

tcl, 35

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

demo

sergiol
źródło
1

GNU APL 1.2, 9 bytes

(⍳⍴R)|R←⎕

APL operates from right to left, hence the parentheses.

R←⎕ assigns user input to vector R.

⍴R gives the length of the vector; ⍳⍴R gives a vector with all numbers from 1 to that length (so the indices).

| is the mod operator (a|b yields b%a). APL operates on arrays, so the code snippet a vector containing each element from the user's input mod its index.

Arc676
źródło
1

Pyth, 5

.e%bh

Online test.

    hk     # 1-based index of (implicit) lambda variable
   b       # element
  %        # element mod (1-based index)
.e    Q    # enumerated map over (implicit) input
Digital Trauma
źródło
1

Octave, 19 bytes

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

Try it online!

An anonymous function that takes n as input, and performs element-wise modulus with the list 1, 2, 3.

Stewie Griffin
źródło
1

Braingolf, 18 bytes

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

Try it online!

Explanation

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
źródło
1

Java 8 / C#, 39 bytes

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

Try it here.

Also works in C# by replacing -> with => and length with Length:

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

Try it here.

Explanation:

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

Modifies the input-array, hence the lack of a return.

Kevin Cruijssen
źródło
1
Essentially what I'd do in C# +1, could also comment about it working for C# too if you change -> to => and capitaliselength.
TheLethalCoder