最可读的编程语言来模拟10,000个滑槽和梯子游戏?

Lan*_*uhn 4 language-agnostic simulation statistics

我想知道哪种语言最适合模拟游戏滑道和梯子(某些国家的蛇和梯子).我希望收集基本的统计数据,比如游戏长度的平均值和标准差(轮流),基于转弯顺序的胜利概率(谁先玩,第二等),以及您能想到的任何其他感兴趣的内容.具体来说,我正在寻找最易读,可维护和可修改的实现.它还需要非常简短.

如果你是一个成年人并且不会在年幼的孩子身上花太多时间,那么你可能不会记得游戏那么好.我会提醒你:

  • 板上有100个方块.
  • 每个玩家轮流旋转一个1-6的随机数(或掷骰子).
  • 然后玩家前进那么多正方形.
  • 有些正方形在梯子的底部; 登陆其中一个方块意味着玩家爬上梯子,将玩家的位置推进到预定的方格.
  • 一些正方形位于滑道(滑道或蛇)的顶部; 登陆其中一个方块意味着玩家必须向下滑动,将玩家的位置移回预定的方格.
  • 无论哪个玩家首先获得100位,都是赢家.

Yeh*_*atz 24

这有点粗糙,但它应该工作:

class Board
  attr_accessor :winner

  def initialize(players, &blk)
    @chutes, @ladders = {}, {}
    @players = players
    @move = 0
    @player_locations = Hash.new(0)
    self.instance_eval(&blk)
  end

  def chute(location)
    @chutes[location[:from]] = location[:to]
  end

  def ladder(location)
    @ladders[location[:from]] = location[:to]
  end

  def spin
    player = @move % @players
    die = rand(6) + 1
    location = (@player_locations[player] += die)

    if endpoint = @chutes[location] || endpoint = @ladders[location]
      @player_locations[player] = endpoint
    end

    if @player_locations[player] >= 100
      @winner = player
    end

    @move += 1
  end
end

num_players = 4

board = Board.new num_players, do
  ladder :from => 4, :to => 14
  ladder :from => 9, :to => 31
  # etc.
  chute :from => 16, :to => 6
  # etc.
end

until board.winner
  board.spin
end

puts "Player #{board.winner} is the winner!"
Run Code Online (Sandbox Code Playgroud)

  • @Ben:欢迎来到StackOverflow的投票系统,其中快速优于有用,正确看起来比正确更好,人们投票说"我喜欢这个答案"而不是"这个答案是有帮助的".:-) (8认同)
  • 我怎么得到点只是给出一个"使用ruby或python"的通用响应,而这个人真的继续前进并做到了?看起来不公平. (7认同)
  • 因为问题特别是"哪种语言最具可读性?",而不是"请为我做":-) (3认同)

Ben*_*hes 14

您应该查看Ruby或Python的内容.两者基本上都是可执行的伪代码.

你可能能够用Haskell获得一个更短,更精彩的程序,但我认为Ruby或Python可能实际上是可以理解的.

  • Python的+1,因为这个问题最具可读性. (2认同)

mat*_*ast 5

对于许多统计信息,您不需要模拟.使用马尔可夫链,您可以减少100x100矩阵上的矩阵运算的许多问题,这只需要大约1毫秒的时间来计算.