Cuộc đua số xuống


10

Nhiệm vụ của bạn là tạo ra một chương trình thêm các số ngẫu nhiên vào các khoản tiền trước đó trong cuộc đua tranh số cuối cùng.

Mỗi tay đua (cột) bắt đầu từ 0 và thêm 1 hoặc 0 vào tổng trước đó ở mỗi bước của cuộc đua cho đến khi tất cả các tay đua đạt được số điểm cần thiết để giành chiến thắng. Nên chọn 1 hoặc 0 một cách ngẫu nhiên (định nghĩa chuẩn của ngẫu nhiên có thể được tìm thấy ở đây ). Đầu ra sẽ hiển thị kết quả của cuộc đua, với mỗi cột đại diện cho một tay đua, theo định dạng này:

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

Lưu ý: chỉ bao gồm các số, + và = cần được đưa vào đầu ra.

Đầu vào

Chương trình của bạn sẽ chấp nhận hai tham số sau làm đầu vào:

  1. số lượng tay đua (cột), phải lớn hơn hai
  2. số điểm cần thiết để giành chiến thắng, phải lớn hơn một

Đây là code-golf - chương trình có ít byte nhất sẽ thắng.

Chỉnh sửa: có điểm tối đa không thể thi hành là 9 - điều này là để duy trì tính toàn vẹn của cột. Ngoài ra, khoảng cách giữa các cột có thể được bỏ qua trong đầu ra.


Số lượng cột tối đa và điểm tối đa cần được hỗ trợ là bao nhiêu?
nanofarad

Không có giá trị tối đa được xác định, do đó, nó sẽ giống như mức tối thiểu: ít nhất ba cột và số điểm là hai.
đồ học

3
Điểm yêu cầu sẽ có hai chữ số?
Leaky Nun

4
"chỉ các số, + và = cần được đưa vào đầu ra." Còn không gian thì sao?
Rò rỉ Nun

Các không gian không cần phải được bảo tồn, chúng là ví dụ cho rõ ràng. Câu hỏi hay về hai chữ số - Tôi cho rằng có một điểm tối đa, là chín. Tôi sẽ chỉnh sửa câu hỏi.
đồ học

Câu trả lời:


5

Thạch, 37 36 33 byte

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

3 byte nhờ Dennis.

Dùng thử trực tuyến

Giải trình

,‘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.

Bạn có thể thay thế liên kết người trợ giúp đầu tiên bằng ,‘X(cặp với n tăng , lựa chọn ngẫu nhiên). Trong liên kết chính ṫ2có thể được thay thế bằng (dequeue) và với biến .
Dennis


2

TSQL, 367 345 341 byte

Chơi gôn

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

Dùng thử trực tuyến

Ung dung:

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

Lưu ý rằng hạt giống ngẫu nhiên trên trang web thử nghiệm sẽ luôn giống nhau, cho cùng một kết quả mỗi lần, trong quản lý studio, nó sẽ cho kết quả khác nhau. Có thể sử dụng các giá trị khác nhau cho các tay đua và mục tiêu để có được một bức tranh khác


1

Python 3, 237 byte

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

Một hàm nhận đầu vào thông qua đối số và in ra STDOUT. Cách tiếp cận này sử dụng thực tế là đầu ra tuân theo chu kỳ của giai đoạn bốn, có dạng '+ value = value', cho tất cả các tay đua. Bằng cách sử dụng bộ đếm modulo bốn, một danh sách chứa giá trị mong muốn cho mỗi bước dưới dạng chuỗi có thể được lập chỉ mục và kết quả được đánh giá bằng hàm eval của Python.

Làm thế nào nó hoạt động

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.

Hãy thử nó trên Ideone


1

Python 2 , 191 byte

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

Hãy thử trực tuyến!


Python 3 , 200 byte

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)

Hãy thử trực tuyến!


0

Python 2, 278 byte

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

trong đó r là không. của các tay đua và w là điểm số để giành chiến thắng

Hãy thử nó ở đây!


2
Tôi đã thử nghiệm chương trình của bạn, nó không hiển thị kết quả như được mô tả trong câu hỏi, mọi thứ đã được chuyển sang bên trái.
t-clausen.dk

0

Perl 5 , 150 byte

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

Hãy thử trực tuyến!

Đầu vào đầu tiên là số tay đua, thứ hai là điểm cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.