注册
登录
新闻动态
其他科技
返回
娜塔莉编程语言
作者:
糖果
发布时间:
2024-03-29 12:22:28 (6小时前)
来源:
https://natalie-lang.org/
Natalie 是一个正在进行中的 Ruby 实现,由Tim Morgan编译为 C++ 。 - 关注开发:GitHub - 观看黑客会议:YouTube ##### 娜塔莉能做什么? 我很高兴地宣布,到 2021 年,Natalie 是一个足够好的 Ruby 编译器,可以自行编译!(因为 Natalie 编译器是用 Ruby 编写的。) 但由于这很难在一个段落中展示,这里有一个我为我孩子的学校数学游戏编写的示例脚本,它展示了 Natalie 与 Ruby 的大量兼容性: #!/usr/bin/env ruby # 此脚本使用 #3 给定数字(通过掷骰子选择 )为 6x6 数字网格 (1-36) 计算解决方案。见 https://p.widencdn.net/gxkq6m/Howtoplayguide # class BoardSlam BOARD = 1 .. 36 OPERATIONS = %w(+ - * /) def 初始化(x, y, z) @numbers = [x, y, z] @answers = {} end attr_reader :numbers , :answers 定义 变体(数量) [num, "#{ num }^0" , "#{ num }^2" , "#{ num }^3" ] 结束 def expand (num) 如果num.is_a?( Integer ),则返回num num, exp = num.split( '^' ).map(& :to_i ) 数量 ** exp 结尾 def 结果 each_order do |x_base, y_base, z_base| each_variant(x_base, y_base, z_base)做|(x_pretty, x), (y_pretty, y), (z_pretty, z)| 每个操作对做|op1, op2| 结果 1 = x.send(op1, y) 下一个 if op1 == '/' && x % y != 0 result2 = result1.send(op2, z) 下一个 if op2 == '/' && result1 % z != 0 if BOARD .include?(result2) and !answers.key?(result2) 答案[result2] = "#{ x_pretty.to_s.ljust( 3 ) } #{ op1 } #{ y_pretty.to_s.ljust( 3 ) } #{ op2 } #{ z_pretty.to_s.ljust( 3 ) }" end end 结束 结束 答案 结尾 def each_order @numbers .permutation.each do |(x, y, z)| yield x, y, z end end def each_variant (x_base, y_base, z_base) 变体(x_base)。每个都做|x| x_expanded = 展开(x) 变体(y_base)。每个都做|y| y_expanded = 展开(y) 变体(z_base)。每个都做|z| z_expanded = 展开(z) yield ([x, x_expanded], [y, y_expanded], [z, z_expanded]) end end end end def each_operation_pair OPERATIONS .each do |op1| 操作.each做|op2| yield (op1, op2) yield (op2, op1) end end end 高清 失踪 BOARD .to_a - results.keys 结束 结束 if $0 == __FILE__ if ARGV .size != 3 puts 'usage: bin/natalie examples/boardslam.rb 3 5 1' exit end board = BoardSlam .new(* ARGV .map(& :to_i )) board.results.sort.each做|结果,方程| puts equation.ljust( 15 ) + ' = ' + result.to_s end puts if board.missing.any? 看跌期权 “失踪的答案:#{ board.missing.join(‘’)}” 别人 放 ‘可能所有的答案!’ 结束 结束 输出: → bin/natalie 示例/boardslam.rb 3 5 1 3 - 5^0 - 1 = 1 3 - 5^0 * 1 = 2 3 + 5^0 - 1 = 3 3 + 5^0 * 1 = 4 3 + 5^0 + 1 = 5 3^0 + 5 * 1 = 6 3 + 5 - 1 = 7 3 + 5 * 1 = 8 3 + 5 + 1 = 9 3^2 + 5^0 * 1 = 10 3^2 + 5^0 + 1 = 11 5 - 1 * 3 = 12 3^2 + 5 - 1 = 13 3 * 5 - 1 = 14 3 * 5 * 1 = 15 3 * 5 + 1 = 16 5^2 - 3^2 + 1 = 17 5 + 1 * 3 = 18 3 + 1 * 5 = 20 3^3 - 5 - 1 = 21 3^3 - 5 * 1 = 22 3^3 - 5 + 1 = 23 3^0 * 5^2 - 1 = 24 3^0 + 5^2 - 1 = 25 3^0 + 5^2 * 1 = 26 3 + 5^2 - 1 = 27 3 + 5^2 * 1 = 28 3 + 5^2 + 1 = 29 3^3 + 5 - 1 = 31 3^3 + 5 * 1 = 32 3^2 + 5^2 - 1 = 33 3^2 + 5^2 * 1 = 34 3^2 + 5^2 + 1 = 35 5 - 1 * 3^2 = 36 缺少答案:19, 30 帮忙 你可以帮助娜塔莉的发展!有许多问题 记录在GitHub的项目,如果你想要一些方向。或者更好的是,您可能想在自己的脚本上尝试 Natalie,看看有什么问题。那就修吧!:-)
收藏
举报
1 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论