Un elenco di moduli numerici i loro indici nell'elenco


25

Semplice: prendi un elenco di numeri interi positivi come input e invia i moduli numerici al loro indice basato su 1 nell'elenco.

Se gli interi di input sono {a, b, c, d, e, f, g}allora l'output dovrebbe essere {a%1, b%2, c%3, d%4, e%5, f%6, g%7}dove si %trova l'operatore del modulo.


Casi test:

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

Risposte:



9

Operazione linguaggio di scripting 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}

Chiama con:

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

Produzione:


1
Cosa ... questa è una cosa?
JAD,

2
@JarkoDubbeldam Sì. Il gioco consente ai giocatori di creare i propri scenari e esiste un linguaggio di scripting in-game progettato per integrare la progettazione della missione. Tuttavia, poiché la lingua è Turing-completa, puoi fare praticamente tutto ciò che vuoi con esso.
Steadybox,


7

Gelatina , 2 byte

%J

Provalo online!

Spiegazione:

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

Fondamentalmente, il codice modula l'elenco originale dall'elenco degli indici.


2
Non appena ho visto questa domanda, ho pensato "che è %Jin Jelly, mi chiedo se qualcuno abbia risposto con quella risposta?". Immagino che qualcun altro abbia avuto la stessa idea :-D

1
@ ais523 Pensi di essere stato l'unico? Pensa di nuovo!
Erik the Outgolfer,

6

R, 24 18 byte

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

Valuta la funzione:

function (x) 
x%%seq(x)

Che utilizza seq_along()per creare un vettore della stessa lunghezza di x, a partire da 1, e quindi %%per prendere il modulo.

Il comportamento predefinito di seqquando presentato con un vettore seq(along.with = x)è lo stesso output di seq_along(x), ma più corto di 6 byte.


seq(x)è una cosa utile avere in giro, dato che lo uso sempre 1:length(x).
Giuseppe,

@Giuseppe Sì, sono stato anche un po 'sorpreso.
JAD,

6

R, 27 byte

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

salvato 5 byte grazie a @Jarko

salvato altri 4 grazie a @Giuseppe

risparmiato altri 2 grazie a @Taylor Scott

Ne ho salvati altri 2 grazie a @returnbull


35 è - rimosso non necessario l'ultima volta
Zahiro Mor,

1
non è necessario lo ' '(spazio) alla fine di cat; questo è il separatore predefinito
Giuseppe,

2
puoi rilasciare 2 byte per ottenere 33 riducendolo a x<-scan();cat(x%%1:length(x)," ")- oh e un paio di suggerimenti per la formattazione, 1) hai solo bisogno di 4 spazi a sinistra del codice per essere correttamente rientrato e contrassegnato 2) puoi aggiungere un <!-- language-all: lang-r -->flag prima che il tuo codice sia evidenziato (anche se questo cambia poco in questo esempio) 3) non hai bisogno delle parentesi attorno al nome della tua lingua 4) oh e non devi fare un commento quando modifichi un post
Taylor Scott,

2
(1) È possibile utilizzare =invece di <-salvare un byte. (2) La specifica dice "output" piuttosto che "print", quindi probabilmente puoi rilasciare il cat(), risparmiando 5 byte. (3) sum(1|x)è più corto di un byte di length(x).
rturnbull,

5

APL (Dyalog) , 5 byte

⍳∘≢|⊢

Provalo online!

 gli indici

 di

 la lunghezza dell'argomento

| quel modulo

 l'argomento


Mi sono sempre stupito che un linguaggio "tradizionale" possa essere così economico. Il modo APL sembra naturalmente essere il codice golf: ad esempio (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Roppurelife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong Puoi fare di meglio: Primes to R: (⊢~∘.×⍨)1↓⍳Rand GoL (nella versione 16.0): K∊⍨⊢∘⊂⌺3 3dove K è una costante.
Adám,

@YiminRong Prova qui il cercatore di numeri primi !
Adám,

5

Cubix , 19 byte

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

Provalo online!

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

Guardalo correre

Un'attuazione abbastanza semplice.

  • 1 spingere 1 nello stack per avviare l'indice
  • I!@ ottiene l'input intero e si ferma se 0
  • s%Ow scambia l'indice su, mod, risultato di uscita e cambia corsia
  • ;) rimuove il risultato e incrementa l'indice
  • Sow premere 32, spazio di uscita e cambiare corsia (andando verso il basso da o)
  • $O salta l'uscita
  • w;wcambia lingua, rimuovi 32 dallo stack e cambia corsia Isull'ingresso

5

05AB1E , 2 byte

ā%

Provalo online! oppure prova tutti i test

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

Interessante, ho pensato che sarebbe stato DgL%carino.
Magic Octopus Urn,

@carusocomputing Inizialmente avevo gL%perché mi ero dimenticato ā.
Riley,

ti dispiace approfondire un po ' āper me? Credo di non averlo mai usato, è proprio come for eachma in 1 to n+1modo simile vy<code>})ma implicito vy<code>})?
Magic Octopus Urn,

@carusocomputing spinge un array con valori 1 per la lunghezza dell'array spuntato. È equivalente a gL. TIO
Riley,

Duplica anche l'input? Oppure l'input implicito è ora esteso automaticamente all'input disponibile più vicino?
Magic Octopus Urn,

4

Mathematica, 22 byte

#&@@@Mod~MapIndexed~#&

Un altro approccio Mathematica.


1
MapIndexed@Modè quasi abbastanza buono: '(
ngenisis,

4

Stellato , 75 70 byte

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

Provalo online!

Spiegazione

Questo è un ciclo infinito che continua a leggere i numeri dall'ingresso e ad aumentare un contatore inizializzato su 1 . Per ogni coppia di input e counter, il modulo viene calcolato e stampato.

Per terminare il loop quando l'input è stato esaurito, viene utilizzato il seguente trucco. Quando non è più disponibile alcun input, provare a leggere un altro numero dà a 0. Quindi, dividiamo il numero letto da solo, e se è 0il programma termina con un errore. Altrimenti scartiamo il risultato e continuiamo.

      +              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

Provalo


Spiegazione

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

1
Penso che puoi salvare un byte con ®%°T(in realtà, potresti ancora usarlo Yse volessi)
ETHproductions

Aha. Grazie, @ETHproductions.
Shaggy,

3

R, 22 byte

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

R esegue 1: lunghezza (x) prima di eseguire il modulo.


Bello trovarlo con sum(x|1)!
JAD,

1
Ho appena scoperto che usare seq()invece di seq_along()fare la stessa cosa. Quindi di nuovo qualche byte in meno.
JAD,

1
Te lo avrei detto, ma non avevo il rappresentante per commentare. Sono contento che tu l'abbia capito.
Shayne03,




2

Excel VBA, 59 46 byte

golfed

VBE anonimo Funzione immediata della finestra che accetta una stringa di matrice delimitata da spazio ( ) come input dall'intervallo [A1]e genera i moduli numerici il loro indice basato su 1 nell'elenco iniziale nella finestra immediata di 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 

Vecchia Subversione di routine

Subroutine che accetta input come array passato e ritagli nella finestra immediata di VBE.

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

Ingresso / Uscita:

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 

1

CJam , 9 byte

{_,,:).%}

Blocco anonimo che prevede un array nello stack e lo sostituisce con l'array di output.

Provalo online!

Spiegazione

{       }    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 | elenco originale

| è mod


1

JavaScript (ES6), 22 byte

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



1

GNU APL 1.2, 9 byte

(⍳⍴R)|R←⎕

APL opera da destra a sinistra, quindi le parentesi.

R←⎕assegna l'input dell'utente al vettore R.

⍴R indica la lunghezza del vettore; ⍳⍴Rdà un vettore con tutti i numeri da 1 a quella lunghezza (quindi gli indici).

|è l'operatore mod ( a|brendimenti b%a). APL opera su array, quindi il codice snippet un vettore contenente ogni elemento dall'input dell'utente mod il suo indice.



1

Pyth, 5

.e%bh

Test online .

    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 byte

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

Provalo online!

Spiegazione

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);}

Provalo qui.

Funziona anche in C # sostituendo ->con =>e lengthcon Length:

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

Provalo qui.

Spiegazione:

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

Modifica l'input-array, quindi la mancanza di un ritorno.


1
In sostanza quello che avrei fatto in C # 1, potrebbe lasciare un commento, anche a questo proposito che lavora per C # troppo se si cambia ->per =>e capitalizzare length.
TheLethalCoder il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.