Course aux nombres descendants

10

Votre tâche consiste à créer un programme qui ajoute des nombres aléatoires aux sommes précédentes dans l'épreuve de force ultime de course aux nombres.

Chaque coureur (colonne) commence à 0 et ajoute 1 ou 0 à la somme précédente à chaque étape de la course jusqu'à ce que tous les coureurs atteignent le score requis pour gagner. Le 1 ou le 0 doit être choisi au hasard (la définition standard du hasard peut être trouvée ici ). La sortie affichera le résultat de la course, chaque colonne représentant un coureur, dans ce format:

>> racers:5,score needed:2

0 0 0 0 0 # all racers start at 0
+ + + + + # add
1 0 0 0 1 # random 1 or 0
= = = = = # equals
1 0 0 0 1 # sum
+ + + + +
0 0 0 0 1
= = = = =
1 0 0 0 2 # winner!
+ + + +  
1 1 1 1  
= = = =  
2 1 1 1  
  + + +  
  1 1 1  
  = = =  
  2 2 2   # losers

Remarque: seuls les nombres, + et = doivent être inclus dans la sortie.

Contribution

Votre programme acceptera les deux paramètres suivants en entrée:

  1. le nombre de coureurs (colonnes), qui doit être supérieur à deux
  2. le score requis pour gagner, qui doit être supérieur à un

C'est le code-golf - le programme avec le moins d'octets gagne.

Edit: il y a un score maximum non exécutoire de 9 - c'est pour préserver l'intégrité de la colonne. De plus, les espaces entre les colonnes peuvent être omis dans la sortie.

atlasologue
la source
Quel est le nombre maximum de colonnes et le score maximum qui devraient être pris en charge?
nanofarad
Il n'y a pas de max défini, donc ce serait le même que le minimum: au moins trois colonnes et un score de deux.
atlasologist
3
Le score requis aura-t-il deux chiffres?
Leaky Nun
4
"seuls les nombres, + et = doivent être inclus dans la sortie." qu'en est-il des espaces?
Leaky Nun
Les espaces n'ont pas besoin d'être préservés, ils sont dans l'exemple pour plus de clarté. Bonne question sur les deux chiffres - je suppose qu'il y a un score maximum, qui est de neuf. Je vais modifier la question.
atlasologist

Réponses:

5

Gelée, 37 36 33 octets

,‘X
0Ç<³$пµżIFµ“+=”ṁṖ⁸żF
ÇСḊz⁶G

3 octets grâce à Dennis.

Essayez-le en ligne

Explication

,‘X                    Helper link. Argument: n. Radomly return n or n+1.

 ‘                     Increment n
,                      Pair. Yield [n, n+1]
  X                    Return a random item from the pair.

0Ç<³$пµżIFµ“+=”ṁṖ⁸żF   Monadic link. Argument: s. Generate one racer.

0                       Start with value 0.
  <³$пµ                While value is less than s:
 Ç                        Use helper link to increment current value.
                        Collect intermediate results in a list.
         I              Compute consecutive differences.
        ż               Zip intermediate results with their next increment value 0 or 1.
          Fµ            Flatten. Let's call the current list A.
                        Odd items of A are racer state and even items are random 0 or 1.
            “+=”        Yield "+=".
                 Ṗ      Yield A without its last element.
                ṁ       Mold i.e Repeat the characters of the string until it contains length(A)-1 characters.
                  ⁸ż    Zipwith. Pair the elements of A with the correponding characters
                    F   Flatten.

ÇСṫ2z” G               Main link. Arguments: s (score needed), r (#racers)

ÇС                     Call the link above r times.
                        Generate a list of r racers.
   Ḋ                    Remove first element of the list (its a garbage s value)
    z⁶                  Transpose with space as fill value.
      G                 Grid. Format the result.
Essari
la source
Vous pouvez remplacer le premier lien d'assistance par ,‘X(paire avec n incrémenté , choix aléatoire). Dans le lien principal ṫ2peut être remplacé par (dequeue) et par la variable .
Dennis
5

Pyth , 38 34 octets

j.tm + j \ = jL \ + C, .u + NYJ.WnsHQ + ZO2Y0J + \ = QE
j.tmj \ = jL \ +. T, .u + NYJ.WnsHQ + ZO2Y0JE

Essayez-le en ligne!

Leaky Nun
la source
2

TSQL, 367 345 341 octets

Golfé

DECLARE @r int=20, -- racers
        @g char=2  -- goal

DECLARE @ varchar(99)=REPLICATE('0',@r)a:PRINT @
DECLARE @A varchar(99)='',@s varchar(99)='',@i int=0WHILE @i<@r
SELECT
@i+=1,@A+=char(43-x*11),@s+=IIF(x=1,' ',LEFT(y,1)),@=RIGHT(@,@r-1)+IIF(x=1,' ',REPLACE(LEFT(@,1)+y,@g+1,' '))FROM(SELECT
IIF(LEFT(@,1)IN('',@g),1,0)x,ROUND(RAND(),0)y)z
PRINT @A+'
'+@s+'
'+REPLACE(@A,'+','=')IF @>''goto a

Essayez-le en ligne

Non golfé:

DECLARE @r int=10, -- racers
        @g char=2  -- goal

DECLARE @ varchar(99)=REPLICATE('0',@r)
a:
PRINT @
DECLARE @A varchar(99)='',@s varchar(99)='',@i int=0

WHILE @i<@r
  SELECT
    @i+=1,
    @A+=char(43-x*11),
    @s+=IIF(x=1,' ',LEFT(y,1)),
    @=RIGHT(@,@r-1)+IIF(x=1,' ',REPLACE(LEFT(@,1)+y,@g+1,' '))
  FROM(SELECT IIF(LEFT(@,1)IN('',@g),1,0)x,ROUND(RAND(),0)y)z

PRINT @A+'
'+@s+'
'+REPLACE(@A,'+','=')

IF @>''GOTO a

Notez que la graine aléatoire sur le site de test sera toujours la même, donnant le même résultat à chaque fois, en gestion de studio, elle donnera des résultats différents. Peut utiliser différentes valeurs pour les coureurs et l'objectif pour obtenir une image différente

t-clausen.dk
la source
1

Python 3, 237 octets

from random import*
def f(n,t):
 x='0'*n,;i=j=0;y=''
 while' '*n!=x[i]:
  if j==n:j=0;x+=y,;y='';print(x[i]);i+=1
  y+=' 'if x[i][j]in(' ',str(t))else eval(["'+'","str(randint(0,1))","'='","str(int(x[i-3][j])+int(x[i-1][j]))"][i%4]);j+=1

Une fonction qui prend l'entrée via un argument et imprime dans STDOUT. Cette approche utilise le fait que la sortie suit un cycle de la période quatre, de la forme «+ valeur = valeur», pour tous les coureurs. En utilisant un compteur modulo quatre, une liste contenant la valeur souhaitée pour chaque étape sous forme de chaîne peut être indexée et le résultat évalué à l'aide de la fonction eval de Python.

Comment ça fonctionne

from random import*                       Import Python's random module to access the
                                          randint function
def f(n,t):                               Function with input number of racers n and target
                                          number t
x='0'*n,;i=j=0;y=''                       Initialise return tuple storage x, state number
                                          i, racer number j and append string y for x
while' '*n!=x[i]:                         Loop through all j for some i. If the current
                                          state consists only of spaces, all racers have
                                          finished, so stop
y+=...eval([...][i%4])...                 Index into list, using i mod 4, to find the
                                          desired process for the cycle step, and append to
                                          y
(If first step of cycle)
...+...                                   Plus sign
(If second step of cycle)
...str(randint(0,1))...                   Random number from (0,1)
(If third step of cycle)
...=...                                   Equals sign
(If fourth step of cycle)
...str(int(x[i-3][j])+int(x[i-1][j]))...  Addition of random number to previous racer
                                          'score'
...' 'if x[i][j]in(' ',str(t))...         But append space if the racer has previously
                                          finished, or has reached the target
...j+=1                                   Increment j
if j==n:j=0;x+=y,;y='';print(x[i]);i+=1   If j=n, all j must have been looped through.
                                          Reset j, append new state y to x, reset y, print
                                          current state to STDOUT and increment i. When
                                          this first executes, x contains only the initial
                                          state, meaning that this is printed and the cycle
                                          starts with the second state.

Essayez-le sur Ideone

TheBikingViking
la source
1

Python 2 , 191 octets

from random import*
def c(p,w,r=[],l=0):
 while p:
	p-=1;s='0'
	while`w`>s[-1]:s+="+%s="%randint(0,1);s+=`eval(s[-4:-1])`;l+=2
	r+=[s]
 for z in map("".join,zip(*(t+l*' 'for t in r))):print z

Essayez-le en ligne!


Python 3 , 200 octets

from random import*
def c(p,w,r=[],l=0):
 while p:
  p-=1;s='0'
  while str(w)>s[-1]:s+="+%s"%randint(0,1);s+="=%s"%eval(s[-3:]);l+=2
  r+=[s]
 for z in map("".join,zip(*(t+l*' 'for t in r))):print(z)

Essayez-le en ligne!

Jitse
la source
0

Python 2, 278 octets

import random
r=5
w=2
s=(0,)*r
while s.count(w)<len(s):
    print ''.join(map(lambda a:str(a),s))+"\n"+'+'*len(s)
    s = tuple(map(lambda x: x<w and x+random.randrange(2) or x,s))
    print ''.join(map(lambda a:str(a), s))+"\n"+'='*len(s)
    s = tuple([x for x in s if x!= w])

où r est le non. des coureurs et w est le score à gagner

Essayez-le ici!

Swadhikar C
la source
2
J'ai testé votre programme, il n'affiche pas le résultat comme décrit dans la question, tout a été déplacé vers la gauche.
t-clausen.dk
0

Perl 5 , 150 octets

$,=$";say@n=(0)x(@e=('=')x(@p=('+')x<>));$t=<>;while(grep$_<$t,@n){@r=map{$_+=($g=0|rand 2);$g}@n;for$l(p,r,e,n){say map{$n[$_]>$t?$":$$l[$_]}0..$#n}}

Essayez-le en ligne!

La première entrée est le nombre de coureurs, la deuxième est le score requis.

Xcali
la source