Carrera hacia abajo del número

10

Su tarea es crear un programa que agregue números aleatorios a sumas anteriores en el último enfrentamiento de carreras de números.

Cada corredor (columna) comienza en 0 y agrega 1 o 0 a la suma anterior en cada paso de la carrera hasta que todos los corredores alcancen el puntaje requerido para ganar. El 1 o 0 se debe elegir al azar (la definición estándar de aleatorio se puede encontrar aquí ). La salida mostrará el resultado de la carrera, con cada columna representando un corredor, en este formato:

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

Nota: solo los números, + y = deben incluirse en la salida.

Entrada

Su programa aceptará los siguientes dos parámetros como entrada:

  1. El número de corredores (columnas), que debe ser mayor que dos
  2. el puntaje requerido para ganar, que debe ser mayor que uno

Esto es code-golf: el programa con menos bytes gana.

Editar: hay un puntaje máximo no exigible de 9, esto es para preservar la integridad de la columna. Además, los espacios entre columnas se pueden omitir en la salida.

atlasólogo
fuente
¿Cuál es el número máximo de columnas y la puntuación máxima que tendrían que ser compatibles?
nanofarad
No hay un máximo definido, por lo que sería el mismo que el mínimo: al menos tres columnas y una puntuación de dos.
atlasólogo
3
¿El puntaje requerido tendrá dos dígitos?
Leaky Nun
44
"solo los números, + y = deben incluirse en la salida". ¿Qué hay de los espacios?
Leaky Nun
Los espacios no necesitan ser preservados, están en el ejemplo para mayor claridad. Buena pregunta sobre los dos dígitos: supongo que hay un puntaje máximo, que es nueve. Editaré la pregunta.
atlasólogo

Respuestas:

5

Gelatina, 37 36 33 bytes

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

3 bytes gracias a Dennis.

Pruébalo en línea

Explicación

,‘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
fuente
Puede reemplazar el primer enlace auxiliar con ,‘X(par con n incrementada , elección aleatoria). En el enlace principal ṫ2se puede reemplazar con (dequeue) y con la variable .
Dennis
5

Pyth , 38 34 bytes

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

Pruébalo en línea!

Monja permeable
fuente
2

TSQL, 367 345 341 bytes

Golfed

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

Pruébalo en línea

Sin 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

Tenga en cuenta que la semilla aleatoria en el sitio de prueba siempre será la misma, dando el mismo resultado cada vez, en la gestión del estudio dará resultados diferentes. Puede usar diferentes valores para los corredores y el objetivo para obtener una imagen diferente

t-clausen.dk
fuente
1

Python 3, 237 bytes

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

Una función que toma datos a través de argumentos e imprime en STDOUT. Este enfoque hace uso del hecho de que la salida sigue un ciclo del período cuatro, de la forma '+ valor = valor', para todos los corredores. Al usar un módulo de contador cuatro, se puede indexar una lista que contiene el valor deseado para cada paso como una cadena, y el resultado evaluado utilizando la función eval de Python.

Cómo funciona

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.

Pruébalo en Ideone

TheBikingViking
fuente
1

Python 2 , 191 bytes

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

Pruébalo en línea!


Python 3 , 200 bytes

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)

Pruébalo en línea!

Jitse
fuente
0

Python 2, 278 bytes

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

donde r es el no. de corredores yw es el marcador para ganar

Pruébalo aquí!

Swadhikar C
fuente
2
Probé su programa, no muestra el resultado como se describe en la pregunta, todo se ha movido a la izquierda.
t-clausen.dk
0

Perl 5 , 150 bytes

$,=$";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}}

Pruébalo en línea!

La primera entrada es el número de corredores, la segunda es la puntuación necesaria.

Xcali
fuente