Eine Liste der Zahlenmodule ihrer Indizes in der Liste

25

Ein einfaches Beispiel: Nehmen Sie eine Liste positiver Ganzzahlen als Eingabe und geben Sie den Zahlenmodul ihres 1-basierten Index in der Liste aus.

Wenn die Eingangs ganze Zahlen sind , {a, b, c, d, e, f, g}dann sollten die ausgegeben werden , {a%1, b%2, c%3, d%4, e%5, f%6, g%7}wenn %der Modulo - Operator ist.


Testfälle:

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
quelle

Antworten:

9

Operation Flashpoint- Skriptsprache, 73 Byte

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

Rufen Sie an mit:

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

Ausgabe:

Steadybox
quelle
1
Was ... das ist eine Sache?
JAD
2
@ JarkoDubbeldam Ja. Das Spiel ermöglicht es den Spielern, ihre eigenen Szenarien zu erstellen, und es gibt eine Skriptsprache im Spiel, die das Missionsdesign ergänzt. Da die Sprache jedoch vollständig ist, können Sie so ziemlich alles tun, was Sie wollen.
Steadybox
7

Gelee , 2 Bytes

%J

Probieren Sie es online!

Erläuterung:

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

Grundsätzlich moduliert der Code die ursprüngliche Liste durch die Liste der Indizes.

Genosse SparklePony
quelle
2
Sobald ich diese Frage sah, dachte ich "das ist %Jin Jelly, ich frage mich, ob jemand mit dieser Antwort geantwortet hat?". Ich denke, jemand anderes hatte die gleiche Idee :-D
1
@ ais523 Du denkst du warst der einzige? Denk nochmal!
Erik der Outgolfer
6

R 24 18 Bytes

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

Auswertungen zur Funktion:

function (x) 
x%%seq(x)

Womit seq_along()ein Vektor mit der gleichen Länge wie xab 1 erstellt und dann %%das Modulo genommen wird.

Das Standardverhalten seqbei der Darstellung mit einem Vektor entspricht seq(along.with = x)der Ausgabe vonseq_along(x) , ist jedoch 6 Byte kürzer.

JAD
quelle
seq(x)ist eine praktische Sache, die ich immer dabei habe 1:length(x).
Giuseppe
@ Giuseppe Ja, ich war auch ein bisschen überrascht.
JAD
6

R, 27 Bytes

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

5 Bytes gespart dank @Jarko

4 weitere dank @ Giuseppe gespeichert

2 weitere dank @Taylor Scott gespart

2 weitere dank @returnbull gespeichert

Zahiro Mor
quelle
35 es ist - entfernt nicht benötigte letzte paren
Zahiro Mor
1
Sie brauchen das ' '(Leerzeichen) am Ende von nicht cat; Das ist das Standardtrennzeichen
Giuseppe
2
Sie können 2 Bytes löschen, um 33 zu erhalten, indem Sie dies auf x<-scan();cat(x%%1:length(x)," ")- oh und einige Formatierungstipps reduzieren. 1) Sie benötigen nur 4 Leerzeichen links von Ihrem Code, damit er richtig eingerückt und markiert wird. 2) Sie können ein <!-- language-all: lang-r -->Flag hinzufügen bevor Sie den Code , um es (obwohl dies ändert wenig in diesem Beispiel) 3) können Sie die brakets nicht 4) Ihre Sprache müssen hervorgehoben werden müssen , um Namen ach ja , und Sie brauchen keinen Kommentar, wenn Sie Änderungen an einem Post machen
Taylor Scott
2
(1) Sie können =anstelle von <-ein Byte speichern. (2) In der Spezifikation steht "Ausgabe" statt "Drucken", sodass Sie wahrscheinlich die cat()5 Bytes einsparen können. (3) sum(1|x)ist ein Byte kürzer als length(x).
Turnbull
5

APL (Dyalog) , 5 Bytes

⍳∘≢|⊢

Probieren Sie es online!

 die Indizes

 von

 die Länge des Arguments

| dieser Modul

 das Argument

Adam
quelle
Immer wieder erstaunt, dass eine "Mainstream" -Sprache so sparsam sein kann. Der APL-Weg scheint natürlich (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rlife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life
@YiminRong Das können Sie besser machen: Primzahlen zu R: (⊢~∘.×⍨)1↓⍳Rund GoL (in Version 16.0): K∊⍨⊢∘⊂⌺3 3wobei K eine Konstante ist.
Adám
@YiminRong Probieren Sie den Primes Finder hier aus !
Adám
5

Cubix , 19 Bytes

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

Probieren Sie es online!

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

Beobachten Sie es laufen

Eine ziemlich einfache Implementierung.

  • 1 Drücken Sie 1 auf den Stapel, um den Index zu starten
  • I!@ Hole die Ganzzahleingabe und halte an, wenn 0
  • s%Ow Tauschen Sie den Index aus, modifizieren Sie ihn, geben Sie das Ergebnis aus und wechseln Sie die Spur
  • ;) Ergebnis entfernen und Index erhöhen
  • Sow 32 drücken, Leerzeichen ausgeben und Spur wechseln (von o nach unten)
  • $O Sprung die Ausgabe
  • w;wändere lange, entferne 32 aus dem Stapel und wechsle die Spur auf den IEingang
MickyT
quelle
5

05AB1E , 2 Bytes

ā%

Probieren Sie es online! oder Probieren Sie alle Tests aus

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list
Riley
quelle
Interessant, ich dachte es wäre DgL%nett.
Magic Octopus Urn
@carusocomputing hatte ich ursprünglich, gL%weil ich vergessen habe ā.
Riley
etwas mehr auf āmich zukommen? Ich glaube, ich habe es nie benutzt, ist es nur so, for eachaber auf eine 1 to n+1Art und Weise, wie es vy<code>})doch impliziert ist vy<code>})?
Magic Octopus Urn
@carusocomputing verschiebt ein Array mit den Werten 1 auf die Länge des gepoppten Arrays. Es ist gleichbedeutend mit gL. TIO
Riley
Verfälscht es auch die Eingabe? Oder wird die implizite Eingabe jetzt automatisch auf die nächste verfügbare Eingabe erweitert?
Magic Octopus Urn
4

Mathematica, 22 Bytes

#&@@@Mod~MapIndexed~#&

Noch ein Mathematica-Ansatz.

Martin Ender
quelle
1
MapIndexed@Modist fast gut genug: '(
Genisis
4

Sternenklar , 75-70 Bytes

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

Probieren Sie es online!

Erläuterung

Dies ist eine Endlosschleife, die das Lesen von Zahlen von der Eingabe und das Erhöhen eines Zählers, der bei initialisiert wird, beibehält 1 . Für jedes Paar von Eingang und Zähler wird der Modul berechnet und ausgedruckt.

Um die Schleife zu beenden, wenn die Eingabe erschöpft ist, wird der folgende Trick verwendet. Wenn keine Eingabe mehr verfügbar ist, erhalten Sie beim Versuch, eine weitere Zahl zu lesen, eine 0. Daher teilen wir die gelesene Zahl durch sich selbst, und wenn dies 0der Fall ist, endet das Programm mit einem Fehler. Ansonsten verwerfen wir das Ergebnis und fahren fort.

      +              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
quelle
3

Japt, 5 4 Bytes

®%°T

Versuch es


Erläuterung

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1
Zottelig
quelle
1
Ich denke, Sie können ein Byte mit ®%°T(eigentlich könnten Sie es noch verwenden, Ywenn Sie wollten)
speichern
Aha. Vielen Dank, @ETHproductions.
Shaggy
3

R, 22 Bytes

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

R führt vor dem Modul 1: Länge (x) aus.

Shayne03
quelle
Schöner Fund mit sum(x|1)!
JAD
1
Ich habe gerade herausgefunden, dass die Verwendung von seq()anstatt seq_along()dasselbe bewirkt. Das ist also wieder ein paar Bytes kürzer.
JAD
1
Das wollte ich dir schon sagen, aber ich hatte nicht den Repräsentanten, der das kommentiert. Ich bin froh, dass du es herausgefunden hast.
Shayne03
2

Python 2 , 42 Bytes

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

Probieren Sie es online!

total menschlich
quelle
Sie können das Leerzeichen vor demfor
Beta Decay
41 Bytes:lambda l:[v%-~i for i,v in enumerate(l)]
Ovs
2
Oder lambda l:[v%i for i,v in enumerate(l,1)].
Xnor
2

Mathematica, 21 Bytes

#~Mod~Range@Length@#&

Probieren Sie es online!

oder 20 Bytes (von Martin)

#~Mod~Range@Tr[1^#]&
J42161217
quelle
Tr[1^#]für Length@#.
Martin Ender
dass man nicht in Mathematik arbeitet, also behalte ich sie beide
J42161217
#In Ihrer ersten Antwort fehlt ein als vorletztes Zeichen.
Ian Miller
2

Excel VBA, 59 46 Bytes

Golf gespielt

Anonyme VBE-Direktfensterfunktion, die eine durch Leerzeichen ( ) begrenzte Array-Zeichenfolge als Eingabe aus dem Bereich verwendet [A1]und den Zahlenmodul ihres 1-basierten Index in der Startliste an das VBE- Direktfenster ausgibt

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 

Alt Sub Routineversion

Subroutine, die Eingaben als übergebene Arrays und Ausgaben in das VBE-Direktfenster übernimmt.

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

Eingabe / Ausgabe:

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

Ungolfed

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
quelle
1

CJam , 9 Bytes

{_,,:).%}

Anonymer Block, der ein Array auf dem Stapel erwartet und durch das Ausgabearray ersetzt.

Probieren Sie es online!

Erläuterung

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

J 9 Bytes

>:@i.@#|[

1 ... n | ursprüngliche Liste

| ist mod

Jona
quelle
1

JavaScript (ES6), 22 Byte

a=>a.map((x,y)=>x%++y)
Zottelig
quelle
1

tcl, 35

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

Demo

Sergiol
quelle
1

GNU APL 1.2, 9 Bytes

(⍳⍴R)|R←⎕

APL arbeitet von rechts nach links, daher die Klammern.

R←⎕Weist dem Vektor Benutzereingaben zu R.

⍴Rgibt die Länge des Vektors an; ⍳⍴Rgibt einen Vektor mit allen Zahlen von 1 bis zu dieser Länge (also die Indizes).

|ist der Mod Operator ( a|bergibt b%a). APL arbeitet mit Arrays, sodass der Code-Snippet einen Vektor enthält, der jedes Element aus der Benutzereingabe mod seinem Index enthält.

Arc676
quelle
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
Digitales Trauma
quelle
1

Oktave , 19 Bytes

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

Probieren Sie es online!

Eine anonyme Funktion, die n als Eingabe verwendet und einen elementweisen Modul mit der Liste 1, 2, 3 ausführt .

Stewie Griffin
quelle
1

Braingolf , 18 Bytes

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

Probieren Sie es online!

Erläuterung

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
quelle
1

Java 8 / C #, 39 Bytes

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

Probieren Sie es hier aus.

Funktioniert auch in C # durch Ersetzen ->mit =>und lengthmit Length:

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

Probieren Sie es hier aus.

Erläuterung:

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

Ändert das Input-Array, daher kein Return.

Kevin Cruijssen
quelle
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