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

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ść:


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.


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.


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


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


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

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

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.


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



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

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.


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

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 

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

1

J, 9 bajtów

>:@i.@#|[

1 ... n | oryginalna lista

| jest mod





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.



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


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.