Una lista de módulos de números, sus índices en la lista


25

Una simple: tome una lista de enteros positivos como entrada y salida, los números modulan su índice basado en 1 en la lista.

Si los enteros de entrada son {a, b, c, d, e, f, g}entonces la salida debería estar {a%1, b%2, c%3, d%4, e%5, f%6, g%7}donde %está el operador del módulo.


Casos de prueba:

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

Respuestas:



9

Lenguaje de script Operation Flashpoint , 73 bytes

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

Llamar con:

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

Salida:


1
¿Qué ... esto es una cosa?
JAD

2
@JarkoDubbeldam Sí. El juego permite a los jugadores crear sus propios escenarios, y hay un lenguaje de scripting en el juego diseñado para complementar el diseño de la misión. Sin embargo, dado que el lenguaje es Turing completo, puede hacer lo que quiera con él.
Steadybox


7

Jalea , 2 bytes

%J

Pruébalo en línea!

Explicación:

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

Básicamente, el código modula la lista original por la lista de índices.


2
Tan pronto como vi esta pregunta, pensé "eso está %Jen Jelly, me pregunto si alguien ha respondido con esa respuesta". Supongo que alguien más tuvo la misma idea :-D

1
@ ais523 ¿Crees que eras el único? ¡Piensa otra vez!
Erik the Outgolfer

6

R, 24 18 bytes

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

Evalúa la función:

function (x) 
x%%seq(x)

Que se usa seq_along()para crear un vector de la misma longitud que x, comenzando en 1, y luego %%para tomar el módulo.

El comportamiento predeterminado de seqcuando se presenta un vector seq(along.with = x)es la misma salida que seq_along(x), pero 6 bytes más corta.


seq(x)Es algo muy útil, ya que siempre estoy usando 1:length(x).
Giuseppe

@Giuseppe Sí, también me sorprendió un poco.
JAD

6

R, 27 bytes

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

ahorró 5 bytes gracias a @Jarko

ahorró 4 más gracias a @Giuseppe

ahorró 2 más gracias a @Taylor Scott

Ahorré 2 más gracias a @returnbull


35 es - eliminado el último par innecesario
Zahiro Mor

1
no necesitas el ' '(espacio) al final de cat; ese es el separador predeterminado
Giuseppe

2
puede soltar 2 bytes para obtener 33 reduciendo esto a x<-scan();cat(x%%1:length(x)," ")- oh y un par de consejos de formato, 1) solo necesita 4 espacios a la izquierda de su código para que esté debidamente sangrado y marcado 2) puede agregar una <!-- language-all: lang-r -->bandera antes de que se resalte su código (aunque esto cambie poco en este ejemplo) 3) no necesita los corchetes alrededor del nombre de su idioma 4) ah y no necesita hacer un comentario cuando edita una publicación
Taylor Scott

2
(1) Puede usar en =lugar de <-guardar un byte. (2) La especificación dice "salida" en lugar de "imprimir", por lo que probablemente puede soltar el cat(), ahorrando 5 bytes. (3) sum(1|x)es un byte más corto que length(x).
rturnbull

5

APL (Dyalog) , 5 bytes

⍳∘≢|⊢

Pruébalo en línea!

 los índices

 de

 la longitud del argumento

| ese módulo

 el argumento


Siempre sorprendido de que un lenguaje "convencional" pueda ser tan económico. La forma APL parece ser, naturalmente, el código golf: por ejemplo, (~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rolife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRong Puede hacerlo mejor: Primes to R: (⊢~∘.×⍨)1↓⍳Ry GoL (en la Versión 16.0): K∊⍨⊢∘⊂⌺3 3donde K es una constante.
Adám

@YiminRong ¡Prueba el buscador de primos aquí !
Adám

5

Cubix , 19 bytes

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

Pruébalo en línea!

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

Míralo correr

Una implementación bastante sencilla.

  • 1 empuje 1 a la pila para comenzar el índice
  • I!@ obtener la entrada entera y detener si 0
  • s%Ow intercambie el índice hacia arriba, mod, resultado de salida y cambie de carril
  • ;) eliminar resultado e índice de incremento
  • Sow empuje 32, espacio de salida y cambio de carril (hacia abajo desde o)
  • $O saltar la salida
  • w;wcambiar lange, eliminar 32 de la pila y cambiar de carril a la Ientrada

5

05AB1E , 2 bytes

ā%

Pruébalo en línea! o prueba todas las pruebas

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

Interesante, pensé que sería DgL%agradable.
Magic Octopus Urn

@carusocomputing que tenía originalmente gL%porque me olvidé ā.
Riley

¿Te importaría profundizar un poco más en āmí? Creo que nunca lo he usado, ¿es así for eachpero de una 1 to n+1manera similar vy<code>})pero implícita vy<code>})?
Magic Octopus Urn

@carusocomputing empuja una matriz con valores 1 a la longitud de la matriz emergente. Es equivalente a gL. TIO
Riley

¿También engaña la entrada? ¿O la entrada implícita ahora se extiende automáticamente a la entrada disponible más cercana?
Urna mágica de pulpo

4

Mathematica, 22 bytes

#&@@@Mod~MapIndexed~#&

Un enfoque más de Mathematica.


1
MapIndexed@Modes casi lo suficientemente bueno: '(
ngenisis

4

Estrellado , 75 70 bytes

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

Pruébalo en línea!

Explicación

Este es un bucle infinito que mantiene la lectura de números de la entrada y aumenta un contador iniciado en 1 . Para cada par de entrada y contador, el módulo se calcula e imprime.

Para finalizar el ciclo cuando la entrada se ha agotado, se utiliza el siguiente truco. Cuando no hay más entradas disponibles, al intentar leer un número más se obtiene a 0. Por lo tanto, dividimos el número de lectura por sí mismo, y si es así, 0el programa termina con un error. De lo contrario, descartamos el resultado y continuamos.

      +              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 bytes

®%°T

Intentalo


Explicación

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

1
Creo que puede guardar un byte con ®%°T(en realidad, aún podría usarlo Yallí si lo desea)
ETHproductions

Ajá. Gracias, @ETHproductions.
Shaggy

3

R, 22 bytes

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

R realiza 1: longitud (x) antes de hacer el módulo.


Bonito hallazgo con sum(x|1)!
JAD

1
Acabo de descubrir que usar en seq()lugar de seq_along()hace lo mismo. Entonces eso es unos bytes más cortos nuevamente.
JAD

1
Te iba a decir eso, pero no tuve el representante para comentar. Me alegra que lo hayas descubierto.
Shayne03




2

Excel VBA, 59 46 bytes

Golfed

Función anónima de ventana VBE Inmediata que toma una cadena de matriz delimitada por espacios ( ) como entrada del rango [A1]y salida del módulo de números de su índice basado en 1 en la lista inicial a la ventana inmediata de VBE

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

De entrada y salida:

[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 

Antigua Subversión de rutina

Subrutina que toma la entrada como una matriz pasada y salidas a la ventana inmediata de VBE.

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

Entrada / salida:

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

Sin golf

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

De entrada y salida:

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 bytes

{_,,:).%}

Bloque anónimo que espera una matriz en la pila y la reemplaza por la matriz de salida.

Pruébalo en línea!

Explicación

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

1

J, 9 bytes

>:@i.@#|[

1 ... n | lista original

| es mod


1

JavaScript (ES6), 22 bytes

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



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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.