`
piecehealth
  • 浏览: 47589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby解24点

阅读更多
今天培训python,讲课老师无意间提及他用python解24点用了48行代码,心中默念:challenge accepted!于是写了一个ruby版本,用了26行~

def calculator number, *factors
	if factors.size == 1
		if number.to_f.round(10) == factors[0].to_f.round(10)
			return factors[0].to_s
		else
			return nil # nil stand for no solution
		end
	else
		factors.each_with_index do |factor, idx|
			[[:+, :-], [:-, :+], [:*, :/], [:/, :*]].each do |operator|
				temp_nmuber = number.send(operator[0], factor.to_f)
				temp_factors = factors.clone
				temp_factors.delete_at(idx)
				return "(#{calculator(temp_nmuber, * temp_factors)} #{operator[1]} #{factor})" if !calculator(temp_nmuber, *temp_factors).nil?
				if operator[0] == :- or operator[0] == :/
					temp_nmuber = factor.send(operator[0], number.to_f)
					if !calculator(temp_nmuber, * temp_factors).nil?
						return "(#{factor} #{operator[0]} #{calculator(temp_nmuber, * temp_factors)})"
					end
				end
			end
		end
	end
	nil
end

#ret = calculator 3, 1, 2
ret = calculator 24, 8, 9, 5, 9
puts ret


其实有点耍赖皮,因为ruby中加减乘除不是关键字,是方法,所以能省掉很多代码,而且有的能写成一句太长我也自觉分成三行了。不过想想python也省掉很多end,大家都耍赖皮,就无所谓了,哈哈。
ruby数组操作实在太牛逼了,我相信一定有更变态更短的方法存在,欢迎大家po代码比较!

提供一个测试连接:http://app.baidu.com/app/enter?appid=123723
1
2
分享到:
评论

相关推荐

    Redis集群安装配置加图片详解清晰版

    #### 知识点四:安装Ruby环境 Redis集群的安装和管理需要用到Ruby语言环境。因此需要安装Ruby及其相关的库管理工具RubyGems。通过命令安装Ruby和Redis的gem包,此处指定的版本是3.2.1。 #### 知识点五:下载和安装...

    testQA:Para Vitta

    b)解压缩到C:\ Ruby24-x64 \ devkit目录 c)在控制台上,通过命令行访问安装DEVKIT的文件夹。 d)然后输入命令:ruby dk.rb init e)现在打开生成的config.yml文件 f)文件的最后一行必须包含值:-C:/ Ruby24-...

    第一百二十四课:解决无meterpreter shell添加虚拟路由映射第一季1

    1. Meterpreter:Meterpreter 是一个基于 Ruby 语言的扩展框架,提供了许多实用的功能,例如端口扫描、文件上传下载、密码破解等。然而,在某些情况下,Meterpreter 无法在 Reverse Shell 环境下工作,本资源将解决...

    pushpop-starter:克隆此存储库以开始编写和部署您自己的 Pushpop 作业

    解压缩包并将 pushpop-starter 文件夹放在您想要的任何位置 打开终端,然后cd到您的 pushpop-starter 存储库 bundle install 为确保一切正常,请运行pushpop jobs:run_once --file=jobs/example_job.rb - 您应该...

    Android_近百个项目的源代码

    26. **AndroidRuby**:Ruby语言在Android平台上的支持库,可能涉及到JRuby的集成和Ruby语法的编译执行。 27. **Android-N810**:针对Nokia N810设备的Android移植项目,涉及到硬件适配、驱动重写和系统层定制。 28...

    metasploit开发使用详细解析.docx

    四、Metasploit 攻击方法分类 Metasploit 的攻击方法包括但不限于:网络扫描、端口扫描、漏洞利用、会话管理、密码破解、信息收集等。每种方法都有对应的模块,用户可以根据目标系统和需求选择合适的方法。 五、...

    玩转Metasploit初级系列课程

    Metasploit框架由Ruby编程语言编写,主要包括四个核心组件:数据库、工作空间、模块和会话。数据库用于存储扫描和攻击结果;工作空间帮助管理不同的项目或目标;模块是Metasploit的核心,包含各种预编写的漏洞利用...

    Ubuntu 11.04 搭建Android开发环境

    sudo apt-get install openjdk-6-jdk eclipse ruby rubygems ruby-dev libnokogiri-ruby git ant libxml2 libxml2-dev libxslt1-dev ``` 如果您使用的是64位系统,则还需要安装以下两个软件包: ```bash sudo ...

    Go 语言圣经 中文版

    類似Python、Ruby、JavaScript的腳本語言,因此我們不會像對完全的編程語言初學者那樣解釋所有的 細節。因爲Go語言的?變量、常量、表達式、控製流和函數等基本語法也是類似的。 第一章包含了本敎程的基本結構,通過...

    一份关于后端开发框架的大纲教程!!!!!

    #### 二十四、开发一个简单的应用程序示例 - **需求分析**:明确应用的目标用户和主要功能。 - **架构设计**:规划整体结构和技术栈选择。 - **代码实现**:编写业务逻辑和界面展示代码。 #### 二十五、案例分析:...

    matasano:matasano 加密挑战、旅程和解决方案

    又野 分享我进展和解决方案。 显然,这是一大剧透。 你被警告了。 目前状态:暂停设置 1 -完成-完成-完成-完成-完成-完成 -完成 -...从其输出克隆 MT19937 RNG -完成24.创建 MT19937 流密码并破解它-完成设置 4 25.中断

    Cloud Foundry平台概述

    其中,IaaS主要关注于硬件资源的虚拟化和自动化管理,实现了人与机器的解耦合,提高了资源分配和管理的效率,但可能牺牲了一定程度的性能。PaaS进一步提升了自动化管理的层级,实现了应用与操作系统之间的解耦,使得...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics