Golf de código centro izquierda derecha (LCR)

10

En una fiesta, me presentaron el juego LCR. Ahora no es un gran juego ya que no hay habilidad sino solo una oportunidad aleatoria. Pero me hizo pensar que podía codificar esto e hice un programa rápido en R para modelar el juego.

Reglas del juego modificadas de Wikipedia para coincidir con la forma en que jugamos:

Cada jugador recibe al menos 3 fichas. Los jugadores se turnan para lanzar tres dados de seis lados, cada uno de los cuales está marcado con "L", "C", "R" en un lado y un solo punto en los tres lados restantes. Por cada "L" o "R" lanzado, el jugador debe pasar una ficha al jugador a su izquierda o derecha, respectivamente. Una "C" indica una ficha al centro (bote). Un punto no tiene efecto.

Si a un jugador le quedan menos de tres fichas, todavía están en el juego, pero su número de fichas es el número de dados que tira en su turno, en lugar de tirar los tres. Cuando un jugador tiene cero fichas, pasa los dados en su turno, pero puede recibir fichas de otros y tomar su siguiente turno en consecuencia. El ganador es el último jugador en poner fichas en el centro.

Concurso: escriba un programa en el idioma de su elección que tome datos para el número de jugadores y el número de fichas iniciales y simule un juego de LCR, que muestre el estado del juego después de que cada jugador haya rodado.

Por ejemplo, un juego puede salir como:

[[[3,3,3,3],0],[[1,4,3,4],0],[[1,4,3,4],0],[[1,4,1,4],2],[[1,4,1,2],4],
[[0,4,1,3],4],[[0,3,2,3],4],[[0,3,0,3],6],[[0,3,1,1],7],[[0,3,1,1],7],
[[2,0,1,1],8],[[2,0,0,1],9],[[2,0,0,0],10],[[0,1,0,0],11],
[[1,0,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[0,0,0,0],12]]

ht: JonathanAllan

La salida no tiene que verse exactamente así, pero debería ser fácil discernir el lanzamiento de dados, cuántas fichas tiene cada jugador y cuántas fichas tiene el centro para cada turno.

Es el código de golf, por lo que gana el código más corto.

CT Hall
fuente
3
"debería ser fácil discernir la tirada de dados": es implícito (por lo tanto, fácil de discernir) de los estados de la ficha, como lo es el jugador que lanzó, ya que es por turno. Yo diría que este resultado de ejemplo tiene todo lo necesario: [[[3,3,3,3],0],[[1,4,3,4],0],[[1,4,3,4],0],[[1,4,1,4],2],[[1,4,1,2],4],[[0,4,1,3],4],[[0,3,2,3],4],[[0,3,0,3],6],[[0,3,1,1],7],[[0,3,1,1],7],[[2,0,1,1],8],[[2,0,0,1],9],[[2,0,0,0],10],[[0,1,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[1,0,0,0],11],[[0,0,0,0],12]]¿es ese el caso?
Jonathan Allan
1
@ JonathanAllan, eso funciona para mí.
CT Hall
1
@KevinCruijssen, buena pregunta, supongo que lo permitiré de cualquier manera.
CT Hall
1
@CTHall En ese caso, edité mis dos respuestas (Java y 05AB1E) e incluí ambas con y sin. :)
Kevin Cruijssen
1
Casi quiero hacer esto en Runic, donde cada puntero de instrucción actúa como un jugador determinado. No estoy seguro de que pueda (incluso ignorando la cantidad de entrada de jugadores), pero sería genial si pudiera.
Draco18s ya no confía en SE

Respuestas:

4

Emacs Lisp , 279 bytes

(defmacro n(i)`(incf(nth ,i c)))
(defun f(p s)(g(let((a'(0)))(dotimes(i p)(push s a))(princ a))0 p))
(defun g(c v p)(dotimes(i(min(nth v c)3))(decf(nth v c))(case(random 6)(0(n(mod(1- v)p)))(1(n(mod(1+ v)p)))(2(n p))(t(n v))))(princ c)(or(eq(-sum c)(nth p c))(g c(mod(1+ v)p)p)))

Use esta función como (f 4 3).

Versión mejor legible:

(defmacro n (i) `(incf (nth ,i c)))

(defun f(p s)
  (g
   (let ((a '(0)))
     (dotimes (i p)
       (push s a))
     (princ a))
   0
   p))

(defun g (c v p)
  (dotimes (i (min (nth v c) 3))
    (decf (nth v c))
    (case (random 6)
      (0 (n (mod (1- v) p)))
      (1 (n (mod (1+ v) p)))
      (2 (n p))
      (t (n v))))
    (princ c)
    (or (eq (-sum c) (nth p c))
    (g c (mod (1+ v) p) p)))

Ejemplo de salida:

(3 3 3 3 0)(1 4 3 4 0)(2 2 4 4 0)(2 2 2 5 1)(4 2 2 3 1)(2 2 2 4 2)(2 1 3 4 2)(2 2 0 4 4)(2 2 0 4 4)(1 2 0 4 5)(2 1 0 4 5)(2 1 0 4 5)(2 1 1 3 5)(0 1 1 3 7)(1 0 1 3 7)(1 0 1 3 7)(1 0 3 1 7)(1 0 3 1 7)(1 0 3 1 7)(1 1 2 1 7)(1 1 3 0 7)(0 1 3 0 8)(1 0 3 0 8)(1 1 1 1 8)(1 1 2 0 8)(0 1 2 1 8)(0 1 2 1 8)(0 1 1 1 9)(0 1 1 1 9)(0 1 1 1 9)(0 1 1 1 9)(0 1 1 1 9)(0 1 1 0 10)(0 1 1 0 10)(0 0 1 0 11)(0 0 1 0 11)(0 0 1 0 11)(0 0 1 0 11)(0 0 1 0 11)(0 0 0 0 12)
adl
fuente
3

Java 8, 281 277 275 274 253 bytes

Versión que genera el mismo estado cuando un jugador de turno tiene 0 fichas restantes:

p->n->{java.util.Arrays A=null;int c[]=new int[p],i=0,t,r,s=1,u,f=9;for(A.fill(c,n);s>0;f=0,System.out.print(A.toString(c)))for(t=c[++i%p],t=t>3?3:t;t-->f;r*=Math.random(),c[i%p]-=1-r/3,s=c[u=(i+r-1+p)%p]+=1-r&1-r/4,c[u]=s<0?0:s,s=A.stream(c).sum())r=6;}

Comienza con el tercer jugador en la matriz.

Pruébalo en línea.

Versión que omite jugadores con 0 fichas restantes (274 bytes):

p->n->{java.util.Arrays A=null;int c[]=new int[p],i=p,t,r,s=1,u,f=9;for(A.fill(c,n);s>0;f=0,System.out.print(A.toString(c))){for(t=c[i%p],t=t>3?3:t;t-->f;r*=Math.random(),c[i%p]-=1-r/3,s=c[u=(i+r-1+p)%p]+=1-r&1-r/4,c[u]=s<0?0:s)r=6;for(s=A.stream(c).sum();s>0&c[++i%p]<1;);}}

Comienza en el primer jugador de la matriz.

Pruébalo en línea.

-7 bytes gracias a @ OlivierGrégoire .

Explicación (de la segunda versión):

p->n->{                      // Method with two integer parameters and no return-type
  java.util.Arrays A=null;   //  Create a static Arrays-object to save bytes
  int c[]=new int[p],        //  Integer-array with chips of each player (0 by default)
      i=p,                   //  Index integer, starting at the amount of players
      t,                     //  Temp integer to roll 3 dice
      r,                     //  Temp integer for the dice-result
      s=1,u,                 //  Temp integers (and `s` is also the total-sum integer)
      f=9;                   //  Flag integer, starting at a single digit above 3
  for(A.fill(c,n);           //  Give each player in the array the chips
      s>0                    //  Loop as long as the total-sum is not 0 yet
      ;                      //    After every iteration:
       f=0,                  //     Set the flag to 0
       System.out.print(A.toString(c))){
                             //     Print the current state
    for(t=c[i%p],            //   Set `t` to the current player's chips
        t=t>3?3:t;           //   If this is larger than 3: set it to 3 instead
        t-->f                //   Loop that many times (1, 2, or 3)
                             //   (the flag is used to skip this loop the first iteration,
                             //   so we can print the initial state)
        ;                    //     After every iteration:
         r*=Math.random(),   //      Roll the dice in the range [0,5]
         c[i%p]-=r<3?        //      If the dice-roll is 0, 1 or 2:
                  1          //       Remove a chip from this player
                 :0,         //      Else: Leave the chip-amount the same
         s=c[u=(i+r-1+p)%p]  //      If the dice-roll is 0, go to the player left
                             //      If the dice-roll is 2, go to the player right
             +=1-r&1-r/4,    //       And add a chip to this player
         c[u]=s<0?0:s)       //      Change negative amount of chips to 0
      r=6;                   //    Reset the dice-roll to 6 so we can roll again
    for(s=A.stream(c).sum(); //   Calculate the total sum of the chips of the players
        s>0&                 //   If this sum is larger than 0:
         c[++i%p]<1;);}}     //    Determine the next player in line with at least 1 chip
Kevin Cruijssen
fuente
1
Podría dejar mi voto a favor sin un (pequeño) golf: D s=0;for(int C:c)s+=C;(21 bytes) puede ser reemplazado por s=A.stream(c).sum();(20 bytes)
Olivier Grégoire
Además, no estoy seguro si está completamente bien: c[i%p]-=r<3?1:0c[i%p]-=1-r/3. Esto ahorraría 2 bytes.
Olivier Grégoire
1
@ OlivierGrégoire Ah, forma inteligente de reutilizar el Ade java.util.Arrays. : D Y al ponerlo en el bucle para guardar en el punto y coma son -2 bytes. Y de 1-r/3hecho es correcto ( ver aquí ). Gracias.
Kevin Cruijssen
Buen truco con la disminución de la comparación de bucles. Podría robar eso.
Stackstuck
1
Ignora mi comentario eliminado anterior: mi tabla de verdad estaba apagada. Este es el fijo: s=c[u=(i+r-1+p)%p]+=1-r&1-r/4(ahorra 2 bytes, en comparación con s=c[u=(i+r%2*2-1+p)%p]+=r<2?1:0)
Olivier Grégoire
2

Python 2 , 159148 bytes

from random import*
n,c=input()
g=[c]*n;i=0
while sum(g):exec"r=randrange(6);g[i]-=1;g[i-[0,1,~-n][max(0,r-3)]]+=r>0;"*min(3,g[i]);i=(i+1)%n;print g

Pruébalo en línea!

Imprime todas las fichas de los jugadores después de cada tirada

TFeld
fuente
Buen intento, pero el código no muestra la cantidad de fichas en el centro.
CT Hall
3
@CTHall Las fichas en el centro siempre son iguales a n*c - sum(players). Si necesito escribirlo explícitamente, lo haré
TFeld
es verdad. Lo permitiré
CT Hall
2

Jalea , 39 bytes

+2 para corregir el comportamiento de repetición ( ¡debe ir precedido de un nilad, así que «3Ḣ$-> ⁸FḢ«3)

Si podemos definir las listas de salida que se rotarán para que las fichas pertenezcan al jugador que actuó previamente a la izquierda, podemos eliminar el más a la derecha 6 bytes por 33 bytes (sin embargo, en mi opinión, es algo incómodo leer eso).

ẋµ’1¦‘.,2ŻX¤¦$¹Ø.X¤?⁸FḢ«3¤¡ṙ1µSпṙ"JC$$

Un enlace diádico que acepta fichas por jugador a la izquierda y número de jugadores a la derecha, lo que genera una lista de fichas de jugadores al comienzo del juego y después de cada turno (incluidos los turnos donde 0 fichas fuerzan un pase) .

Pruébalo en línea!

¿Cómo?

Cada jugador por turno, hasta tres veces, dependiendo de su conteo de fichas, lanza una moneda. Cuando un jugador voltea cabezas no hace nada, pero si lanza colas, tira un dado de tres lados y pierde una ficha a L, C o R. (Tenga en cuenta que 0 voltea cuando un jugador tiene 0 fichas es equivalente a pasar).
Esto se repite. hasta que la suma de las fichas de los jugadores sea 0.
La implementación gira a los jugadores a la izquierda un lugar cada turno y luego gira los estados resultantes para que todos estén alineados como si no lo estuvieran.

ẋµ’1¦‘.,2ŻX¤¦$¹Ø.X¤?⁸«3Ḣ¤¡ṙ1µSпṙ"JC$$ - Link: chipsPerPlayer, C; numberOfPlayers, P
ẋ                                      - repeat C P times (making a list of P Cs)
                              п       - collect up results in a list while...
                             S         - ...п condition: sum (while players have chips)
 µ                          µ          - ...п do: the monadic chain:
                         ¡             -   repeat...
                        ¤              -   ...¡ number of times: nilad and link(s) as a nilad:
                    ⁸                  -     chain's left argument (the chip list)
                     «3                -     minimum with three (vectorises)
                       Ḣ               -     head -- i.e. min(left-most player's chips, 3)
                   ?                   -   ...¡ action: if...
                  ¤                    -     ...? clause: nilad and link(s) as a nilad:
               Ø.                      -       the list [0,1]
                 X                     -       random choice (0 is falsey while 1 is truthy)
             $                         -     ...? then: last two links as a monad:
    ¦                                  -       sparsely apply...
   1                                   -       ...¦ to indices: one (the left-most)
  ’                                    -       ...¦ action: decrement (player lost a chip)
            ¦                          -       sparsely apply...
           ¤                           -       ...¦ to indices: nilad and link(s) as a nilad:
      .,2                              -         literal pair of literals .5 and two = [.5,2]
         Ż                             -         prepend a zero = [0,0.5,2]
          X                            -         random choice
                                       -         -- Note application to index .5 is a no-op
                                       -                 index 0 is the right-most entry (L) 
                                       -                 index 2 is the second entry (R) 
                          ṙ1           -   rotate the list left by one for the next п loop
                                     $ - last two links as a monad:
                                    $  -   last two links as a monad:
                                  J    -     range of length -- i.e. [1,2,3,...,turns+1]
                                   C   -     complement = 1-x        [0,-1,-2,...,-turns]
                                 "     -   zipped-appliction of:
                                ṙ      -     rotate left by
                                       -   -- i.e. rotate 1st left by 0, 2nd left by -1, ...)
Jonathan Allan
fuente
Estoy un poco impresionado en cuanto a cómo las personas codifican en estos idiomas que parecen ruido de línea. :) Pero entonces solo sé un par de idiomas, así que tal vez con más experiencia vendrá.
CT Hall
2
Puedes ver el tutorial en la wiki, es bastante bueno. Una vez que publique el desglose del código, con suerte seguirás lo que he hecho ...
Jonathan Allan
... sin embargo, este es un comportamiento sutilmente incorrecto? Según las especificaciones, debes lanzar los tres dados, no solo un lanzamiento de moneda. A menos que la descripción sea errónea y el código esté bien.
Stackstuck
@Stackstuck: la descripción general es ligeramente engañosa, la moneda se lanza cada vez; Lo arreglaré, gracias. Fwiw la descripción desglose código es correcto - el lanzamiento de moneda ramificación, Ø.X¤?se desliza por el interior de la repetición-up-to-3-times instrucción, ⁸«3Ḣ¤¡.
Jonathan Allan
Ah bien. Me alegro de poder ayudar.
Stackstuck
1

C #, 356? +13? Bytes

Requiere using System;un total de +13 bytes para el código que se muestra a continuación, si debo contar eso. De lo contrario, simplemente colóquelo en cualquier clase y llame L(players, starting chips);.

static int i,j,k,l;public static void L(int p,int s){var r=new Random();var x=new int[p];for(i=0;i<p;i++)x[i]=s;
for(i=0;i<s*p;){for(j=0;j<p;j++){for(l=0;l<x[j]&l<3;l++){k=r.Next(-1,5);if(k<2){if(k==0){x[j]--;i++;}else{x[(p+j+k)%p]++;x[j]--;}}}Console.Write(a(x)+i);}}}public static string a(int[] x){var n="|";for(l=0;l<x.Length;)n+=x[l++]+" ";
return n;}

Ejemplo de salida para un juego 2,2:

|1 3 0|2 2 0|1 3 0|1 3 0|0 4 0|0 3 1|0 3 1|2 1 1|1 2 1|1 2 1|0 3 1|0 3 1|0 3 1|1 1 2|1 1 2|1 1 2|0 2 2|1 1 2|0 1 3|1 0 3|0 1 3|0 1 3|0 1 3|1 0 3|1 0 3|1 0 3|0 1 3|1 0 3|0 1 3|0 0 4

Versión menos golfizada:

using System;
//class omitted.
static int i,j,k,l;
public static void LCR(int pl, int sc){
var r=new Random();
var state = new int[pl];
for(i=0;i<pl;i++)state[i]=sc;
for(i=0;i<sc*pl;){
    for(j=0;j<pl;j++){
        for(l=0;l<state[j] && l<3;l++){
            k=r.Next(-1,5);
            if(k<2){
                if(k==0){state[j]--;i++;}else{state[(pl+j+k)%pl]++;state[j]--;}
            }
        }
        Console.Write(a(state)+i);
    }
}
}
public static string a(int[] x){
    var n="|";
    for(l=0;l<x.Length;)n+=x[l++]+" ";
    return n;
}
Stackstuck
fuente
Bueno, esta es mi primera respuesta aquí. Por favor no me comas.
Stackstuck
Ah, mocoso. Obtuve mi comportamiento de impresión de matriz confundido con Java. Solo estaré ... de vuelta con una revisión.
Stackstuck
Bien, eso está arreglado, la salida definitivamente debería funcionar.
Stackstuck
... oh, no, hay un error más.
Stackstuck
La gente que dice módulo cuando el comportamiento es realmente el resto no debería ... hacer eso. Allí, estoy 90% seguro de que esto funciona ahora.
Stackstuck
1

C # (compilador interactivo de Visual C #) , 201 199 bytes

n=>m=>{var r=new Random();var j=Enumerable.Repeat(n,m).ToList();for(int i=0;j.Any(c=>c>0);i++,Print(j))for(int k=0,x=r.Next(6);k++<Math.Min(j[i%m],3);j[((x<1?-1:1)+i+m)%m]+=x<2?1:0,j[i%m]-=x<3?1:0);}

Pruébalo en línea!

startingChips=>playerNum=>{
//Instantiate a new random number generator
var rng = new Random();
//Create a list of chips
var players = Enumerable.Repeat(startingChips, playerNum ).ToList();
//Loop as long any player still has chips
for(int turnNum = 0;players.Any(c=>c>0);
//And print the result every iteration
i++,Print(j))
//Get a random number within the range of 0-5 and loop for...
for(int k = 0,randomNum = rng.Next(6);
//either 3 or the amount of chips we have, whichever is smaller
k++<Math.Min(players[turnNum % playerNum ],3);
//Increment either the right player if the random number is 1, else increment the right player if it is 0
players[((randomNum<1?-1:1)+ turnNum + playerNum ) % playerNum ]+=x<2?1:0,
//Decrement current player if the die roll is under 3
players[ turnNum % playerNum ]-=x<3?1:0);}
Encarnación de la ignorancia
fuente
1

Carbón , 61 bytes

≔⁰ηWΣθ«≔Eθ⭆⌊⟦κ׳⁼λη⟧‽⁶ιUMθ⁻⁺⁺κ№§ι⊕λ3№§ι⊖λ5LΦ§ιλ›μ2≔﹪⊕ηLθη⟦⪫θ,

Pruébalo en línea! El enlace es a la versión detallada del código. Alterna entre la salida de los dados y las fichas restantes (ni la cantidad inicial de fichas ni la cantidad de fichas en el centro se incluyen en la salida). Explicación:

≔⁰η

Comience con el primer jugador.

WΣθ«

Repita hasta que a nadie le queden fichas.

≔Eθ⭆⌊⟦κ׳⁼λη⟧‽⁶ι

Lanza hasta tres dados para el jugador actual. Estos dados están etiquetados 0-5, donde 0-2 representa el punto, 3 se pasa a la izquierda, 4 es al centro, 5 es a la derecha.

UMθ⁻⁺⁺κ№§ι⊕λ3№§ι⊖λ5LΦ§ιλ›μ2

Agregue la cantidad de fichas que el jugador de la derecha pasó a la izquierda y la cantidad de fichas que el jugador de la izquierda pasó a la derecha, pero reste la cantidad de fichas que el jugador pasó.

≔﹪⊕ηLθη

Avanza al siguiente jugador.

⟦⪫θ,

Salida de los nuevos números de fichas en poder de los jugadores.

En realidad, es más simple para todos lanzar sus dados simultáneamente, lo que se puede hacer en 50 bytes, incluida la impresión de los dados y las fichas restantes:

WΣθ«≔Eθ⭆⌊⟦κ³⟧‽⁶ιUMθ⁻⁺⁺κ№§ι⊕λ3№§ι⊖λ5LΦ§ιλ›μ2⟦⪫ι,⪫θ,

Pruébalo en línea! El enlace es a la versión detallada del código.

Neil
fuente
No estoy seguro, pero no parece que explique la cantidad de fichas que se tienen después de cada rol, no en cada ronda.
CT Hall
@CTHall Oh, ¿te refieres a que cada jugador tira individualmente y luego se actualiza el número de fichas? Lo siento, pasé por alto eso. Actualizaré mi respuesta tan pronto como tenga tiempo.
Neil
1

05AB1E (heredado) , 58 50 49 52 bytes

Versión que genera el mismo estado cuando un jugador de turno tiene 0 fichas restantes ( 50 49 52 bytes ):

и[=ÐO_#¾è3‚Ws\F5ÝΩ©3‹iε¾¹%NQ-}®≠iε®<¾+¹%NQ+}}}}D0›*¼

Pruébalo en línea.

Versión que omite jugadores con 0 fichas restantes ( 58 57 60 bytes ):

и[=DO_#[D¾èDĀ#\¼}3‚Ws\F5ÝΩ©3‹iε¾¹%NQ-}®≠iε®<¾+¹%NQ+}}}}D0›*¼

Pruébalo en línea.

Ambos +3 bytes usando la versión heredada, porque la nueva versión 05AB1E tiene un error extraño. Debería funcionar con Ws\(empujar mínimo sin reventar; intercambiar; descartar lista) reemplazado con ß(lista pop y empujar mínimo) y 0›(verificar si es mayor que 0) reemplazado con d(verificar si no es negativo / mayor que o igual a 0) en el nueva versión, pero por alguna razón, el orden de la lista cambia después del final ¼! .. : S (y la nueva versión también es extremadamente lenta y agota el tiempo de espera después de 60 segundos antes de terminar el resultado ..>.>)

La primera entrada es la cantidad de jugadores, la segunda entrada es la cantidad de fichas por jugador.

Explicación (de la segunda versión):

и                    # Create a list with a size of the (first) implicit input,
                     # filled with the second (implicit) input
[                    # Start an infinite loop:
 =                   #  Print the list with trailing newline, without popping the list
 DO_#                #  If the total amount of chips is 0: stop the infinite loop
 [                   #  Start an inner infinite loop:
  D¾è                #   Get the chips of the I'th player (I is 0 by default)
     D               #   Duplicate this
      Ā#             #   If it is NOT 0: stop the inner infinite loop
        \            #   Remove the duplicated chips for the next iteration
         ¼           #   And increase I by 1
 }                   #  After the inner infinite loop:
 3Ws\               #  If the amount of chips is larger than 3: use 3 instead
      F              #  Loop that many times:
       5ÝΩ           #   Roll a random dice in the range [0,5]
       ©3i          #   If the dice-roll is 0, 1, or 2:
           ε¾¹%NQ-}  #    Remove a chip from the I'th player
           ®≠i       #    If the dice-roll is NOT 1:
              ε®<¾+  #     Go to the player left if 0; or right if 2
              ¹%NQ+} #     And increase that player's chips by 1
      }}}            #  Close both if-statements and the loop
         D0›*        #  Make any negative amount of chips 0
             ¼       #  Increase I by 1
Kevin Cruijssen
fuente
No estoy seguro de que funcione correctamente. Parece que los jugadores pueden ganar fichas en su turno, lo que no debería suceder.
CT Hall
@CTHall ¿Estás seguro? ¿En cuál de las cuatro versiones de TIO viste esto? Solo verifiqué la última (versión heredada que omite jugadores con 0 fichas), pero la única vez que aumenta un jugador es cuando otro jugador está en el turno. Aquí está el último con una línea de depuración agregada para que pueda ver qué jugador (indexado a 0) está en el turno.
Kevin Cruijssen
1
Las heredadas parecen ser correctas, pero las no heredadas parecen tener el error que mencioné.
CT Hall
@CTHall Ah, de hecho tienes razón. Veo una línea [2, 3, 3, 3]seguida de [2, 2, 2, 6]...: S Veré si puedo encontrar la causa y solucionarlo. Si no, siempre puedo eliminarlo y solo usar el legado, ya que de todos modos
sale
@CTHall He podido identificar el problema, pero no he podido solucionarlo. Por alguna razón, el orden de la lista cambió inmediatamente después de aumentar el global counter_variable. Traté de reproducir el problema en un ejemplo más simple, pero no puedo. Tiene algo que ver con las declaraciones y mapas anidados dentro del bucle infinito, pero definitivamente es extraño ... De todos modos, he eliminado esa versión y ahora solo queda la versión heredada (y más rápida), que funciona según lo previsto.
Kevin Cruijssen