Sol Orta Sağ (LCR) kodu golf


10

Bir partide LCR oyunuyla tanıştım. Beceri yok ama sadece rastgele bir şans olduğu için şimdi harika bir oyun değil. Ama beni düşündürdü, bunu kodlayabilirim ve oyunu modellemek için R'de hızlı bir program yaptım.

Oyunun kuralları, Wikipedia'dan nasıl oynadığımıza uyacak şekilde değiştirildi:

Her oyuncuya en az 3 fiş verilir. Oyuncular sırayla, her biri bir tarafta "L", "C", "R" ve kalan üç tarafta tek bir nokta ile işaretlenmiş altı adet altı taraflı zar atmak için alırlar. Atılan her "L" veya "R" için, oyuncu sırasıyla oyuncuya bir çip sola veya sağa geçirmelidir. "C", merkeze (çip) giden bir çipi gösterir. Bir noktanın etkisi yoktur.

Bir oyuncunun üçten az fişi kaldıysa, hala oyundalar, ancak fişlerinin sayısı, üçünü de yuvarlamak yerine sıralarında oynadıkları zar sayısıdır. Bir oyuncu sıfır fişe sahip olduğunda, zarları sırayla geçirir, ancak diğerlerinden fiş alabilir ve buna göre bir sonraki turunu alabilir. Kazanan, fişleri merkeze koyan son oyuncudur.

Yarışma: kendi dilinizde oyuncu sayısı ve başlangıç ​​fişi sayısı için girdi alan ve her oyuncu yuvarlandıktan sonra oyunun durumunu gösteren bir LCR oyunu simüle eden bir program yazın.

Örneğin, bir oyun şu şekilde çıkarılabilir:

[[[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

Çıktı tam olarak böyle görünmek zorunda değildir, ancak zar atışını, her oyuncunun kaç fişi olduğunu ve merkezin her turda kaç fişi olduğunu kolayca ayırt etmek gerekir.

Bu kod golf yani en kısa kod kazanır.


3
"zar atışını ayırt etmek kolay olmalı" - sıra tabanlı olduğu için, yuvarlanan oyuncu gibi, çip durumlarından dolaylı (dolayısıyla kolayca ayırt edilebilir). Ben bu örnek çıktı gerekli her şeye sahip olduğunu iddia ediyorum: [[[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]]- durum böyle mi?
Jonathan Allan

1
@JonathanAllan, bu benim için çalışıyor.
CT Salonu

1
@ KevinCruijssen, güzel soru, sanırım her iki şekilde de izin vereceğim.
CT Salonu

1
@CTHall Bu durumda cevaplarımı (Java ve 05AB1E) düzenledim ve hem birlikte hem de hariç tuttum. :)
Kevin Cruijssen

1
Neredeyse her talimat göstergesinin belirli bir oyuncu gibi davrandığı Runic'de bunu yapmak istiyorum. Yapabileceğimden emin değilim (oyuncu sayısını girdiyse bile), ama yapabilseydim temiz olurdu.
Draco18s artık SE

Yanıtlar:


4

Emacs Lisp , 279 bayt

(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)))

Bu işlevi olarak kullanın (f 4 3).

Daha iyi okunabilir versiyon:

(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)))

Çıktı örneği:

(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)

3

Java 8, 281 277 275 274 253 bayt

Bir turnuva oyuncusunda 0 çip kaldığında aynı durumu veren sürüm:

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

Dizideki üçüncü oynatıcıyla başlar.

Çevrimiçi deneyin.

0 fişi kalan oyuncuları atlayan sürüm (274 bayt):

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

Dizideki ilk oynatıcıdan başlar.

Çevrimiçi deneyin.

@ OlivierGrégoire sayesinde -7 bayt .

Açıklama (ikinci versiyonun):

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

1
Benim oyumu (minik) bir golf olmadan bırakabilir: D s=0;for(int C:c)s+=C;(21 bayt) s=A.stream(c).sum();(20 bayt) ile değiştirilebilir
Olivier Grégoire

Ayrıca, tamam olup olmadığını emin değilim: c[i%p]-=r<3?1:0c[i%p]-=1-r/3. Bu 2 bayt tasarruf sağlayacaktır.
Olivier Grégoire

1
OlivierGrégoire Ah, akıllı bir şekilde @ yeniden kullanarak Agelen java.util.Arrays. : D Ve yarı kolondan tasarruf etmek için döngüye koyarak -2 bayt. Ve 1-r/3gerçekten doğrudur ( buraya bakın ). Teşekkürler.
Kevin Cruijssen

Döngü karşılaştırma azalan güzel hile. Bunu çalabilirim.
Stackstuck

1
Önceki silinen yorumumu yoksay: doğruluk tablom kapalı. Bu sabit olan: s=c[u=(i+r-1+p)%p]+=1-r&1-r/4(2 bayt tasarruf, karşılaştırıldığında s=c[u=(i+r%2*2-1+p)%p]+=r<2?1:0)
Olivier Grégoire

2

Python 2 , 159148 bayt

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

Çevrimiçi deneyin!

Her rulodan sonra tüm oyuncuların fişlerini basar


İyi deneme, ancak kod merkezdeki cips miktarını göstermiyor.
CT Salonu

3
@CTHall Merkezdeki yongalar her zaman eşittir n*c - sum(players). Açıkça
yazmam

bu doğru. İzin vereceğim.
CT Salonu

2

Jöle , 39 bayt

Tekrarlama davranışını düzeltmek için +2 ( ¡bir nilad ile başlamalıdır «3Ḣ$-> ⁸FḢ«3)

Daha önce solda oynayan oyuncuya ait fişleri döndürmek için çıkış listelerini tanımlayabilirsek, en sağdaki ile uzaklaşabiliriz 33 bayt için 6 bayt (ancak bence, bunu okumak biraz garip).

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

Soldaki oyuncu başına fişleri ve sağdaki oyuncu sayısını kabul eden, oyunun başlangıcında ve her turdan sonra oyuncuların çip sayımlarının bir listesini veren ikili bir Bağlantı (0 fişin bir geçişi zorladığı dönüşler dahil) .

Çevrimiçi deneyin!

Nasıl?

Her oyuncu sırayla, çip sayısına bağlı olarak üç kata kadar bir bozuk para çevirir. Daha sonra L, C veya R için bir çip kaybetmeden, bir üç kenarlı kalıp rulo da kapak kuyrukları (0 oyuncu 0 fiş olduğunda geçen eşdeğerdir çevirir unutmayın.), Bir oyuncu kafaları döndürüldüğünde hiçbir şey yapmak ama
tekrarlanır Oyuncu çiplerinin toplamı 0 olana kadar
. Uygulama, her turda bir oyuncu kalan oyuncuları döndürür ve sonra ortaya çıkan durumları sanki sanki sanki hizalanmamış gibi geri döndürür.

ẋµ’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, ...)

İnsanların bu dillerde hat gürültüsüne benzeyen kodlamalarından biraz etkilendim. :) Ama sonra sadece birkaç dil biliyorum, bu yüzden belki daha fazla deneyim ile gelecek.
CT Salonu

2
Wiki'deki öğreticiye göz atabilirsiniz, oldukça iyi. Kod dökümünü
Jonathan Allan

... bu ince bir davranış olsa da? Spesifikasyon başına, sadece bir jeton flip değil, üç zarı da yuvarlamanız gerekir. Açıklama hatalı değilse ve kod iyi değilse.
Stackstuck

@Stackstuck - açıklamaya genel bakış biraz yanıltıcıdır, madeni para her seferinde çevrilir; Düzelteceğim - teşekkürler. FWIW kod dökümü açıklaması doğrudur - bozuk para çevirme dallanması, Ø.X¤?3 defaya kadar tekrarlama talimatının içine yerleştirilmiştir ⁸«3Ḣ¤¡.
Jonathan Allan

Ah tamam. Yardımcı olduğuma sevindim.
Stackstuck

1

C #, 356? +13? Bayt

Gerektirir using System;Bunu saymak için gerekli ediyorsam koduna 13 bayt toplam Aşağıda gösterilen için. Aksi takdirde herhangi bir sınıfta işaretleyin ve arayın 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;}

2,2 oyun için örnek çıktı:

|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

Daha az golf versiyonu:

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

Bu benim ilk cevabım. Lütfen beni yeme.
Stackstuck

Ah, canım. Dizi yazdırma davranışımı Java ile karıştırdım. Ben sadece ... bir revizyonla döneceđim.
Stackstuck

Tamam, bu sabit, çıktı kesinlikle işe yaramalı.
Stackstuck

... oh, hayır, bir hata daha var.
Stackstuck

Davranışlar gerçekten geride kaldığında modulo diyen insanlar bunu yapmamalı. Orada bunun% 90 olduğundan eminim.
Stackstuck

1

C # (Visual C # Etkileşimli derleyicisi) , 201 199 bayt

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

Çevrimiçi deneyin!

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

1

Kömür , 61 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Zar atma ve kalan fişlerin çıkışları arasında alternatifler (ne ilk fiş sayısı ne de merkezdeki fiş sayısı çıkışa dahil değildir). Açıklama:

≔⁰η

İlk oyuncu ile başlayın.

WΣθ«

Hiç kimse cips kalmayana kadar tekrarlayın.

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

Mevcut oyuncu için üç zar atılır. Bu zarlar 0-5 olarak etiketlenir, burada 0-2 noktayı temsil eder, 3 sola geçer, 4 merkeze, 5 sağa doğrudur.

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

Sağdaki oyuncunun soldan geçen fiş sayısını ve soldaki oyuncunun sağdan aldığı fiş sayısını ekleyin, ancak oyuncunun kendisinin geçirdiği fiş sayısını çıkarın.

≔﹪⊕ηLθη

Bir sonraki oyuncuya ilerle.

⟦⪫θ,

Oyuncular tarafından tutulan yeni fiş sayısını verin.

Herkesin zarlarını aynı anda yuvarlaması daha kolaydır, ki zar ruloları ve kalan fişleri basmak da dahil olmak üzere 50 baytta yapılabilir:

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur.


Emin değilim, ama her rolden sonra tutulan fiş sayısını hesaba katıyormuş gibi görünmüyor.
CT Salonu

@CTHall Oh, yani her oyuncu ayrı ayrı yuvarlanıyor ve sonra fiş sayısı güncelleniyor mu? Üzgünüm, bunu göz ardı ettim. Zamanım olur olmaz cevabımı güncelleyeceğim.
Neil

1

05AB1E (eski) , 58 50 49 52 bayt

Bir turnuva oyuncusunda 0 fiş kaldığında aynı durumu veren sürüm ( 50 49 52 bayt ):

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

Çevrimiçi deneyin.

0 fiş kalan oyuncuları atlayan versiyon ( 58 57 60 bayt ):

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

Çevrimiçi deneyin.

Yeni 05AB1E sürümü garip bir hataya sahip olduğundan, eski sürümü kullanarak her iki +3 bayt. Bu birlikte çalışması gerekir Ws\(; değiştirilebilir; haşhaş olmaksızın, basmalı en az ıskarta listesi) ile değiştirildi ß(pop listesi ve itme minimum) ve 0›yerini (daha büyük 0 ise kontrol) d(0 eşit daha büyük ya da kontrol dışı negatifse /) içerisinde yeni sürüm, ancak bir nedenden sonra liste sırası değişiyor ¼! .. : S (ve yeni sürüm de son derece yavaş ve 60 saniye sonra sonuç bitmeden zaman aşımına uğradı ..>.>)

İlk girdi oyuncu miktarı, ikinci girdi oyuncu başına fiş miktarıdır.

Açıklama (ikinci versiyonun):

и                    # 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

Doğru çalıştığından emin değilim. Görünüşe göre oyuncular sırayla cips kazanabilirler ki bu gerçekleşmemelidir.
CT Salonu

@CTHall Emin misiniz? Dört TIO versiyonundan hangisinde bunu gördünüz? Sadece sonuncuyu kontrol ettim (oyuncuları 0 fişle atlayan eski sürüm), ancak bir oyuncuyu artırdığı tek zaman, başka bir oyuncu sırayla. İşte hangi (0 dizinli) oynatıcının sırayla olduğunu görebilmeniz için hata ayıklama satırı eklenmiş sonuncusu.
Kevin Cruijssen

1
Eski olanlar doğru gibi gözüküyor, ancak mantıksızlık bahsettiğim hataya sahip gibi görünüyor.
CT Salonu

@CTHall Ah, gerçekten haklısın. [2, 3, 3, 3]Ardından bir çizgi görüyorum [2, 2, 2, 6]..: S Nedeni bulup düzeltebileceğimi göreceğim. Değilse, her zaman silebilir ve sadece mirası kullanabilirim, çünkü zaten çok daha fazla çıktı ... Yeni sürüm, bir nedenle karmaşık döngülerle oldukça yavaş ..>.>
Kevin Cruijssen

@CTüm sorunu tespit edebildim, ancak düzeltemedim. Herhangi bir nedenle listenin sıralaması, küreselliği artırdıktan hemen sonra değişiyor counter_variable.. Sorunu daha basit bir örnekte yeniden oluşturmaya çalıştım, ancak yapamıyorum. Sonsuz döngü içindeki iç içe if ifadeleri ve haritalarla bir ilgisi var, ama kesinlikle garip .. Her neyse, bu sürümü kaldırdım ve şimdi sadece eski (ve daha hızlı) sürüm, amaçlandığı gibi çalışıyor.
Kevin Cruijssen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.