The Travelling Customer (Coding, Training)

题目描述

In this programming challenge you need to solve the following problem:
You are represented a pricelist, an itemamount and a sum, as well as the stock parameter.
Your job is to select itemamount items which will result in the sum.
You may not select more items than stock from each type.

Example:
Chips=4
Eggs=2

Items=5
Sum=14
Stock=3
Level=1

An accepted answer would be: 2Chips3Eggs

Visit problem.php to request a new problem.
Send your answers to [answer.php?answer=answer] with the format NItemnameNItemname.
You need to solve 5 problems and your timelimit for each problem is 3 seconds.

Good Luck!

在这个编程挑战中你需要解决如下问题:

你将看到一个pricelist、一个itemamount和一个sum,以及stock参数。

你的工作是选出结果为sum的tiems的itemamount。

你选出的每种类型的itemamount不能超过stock

例子:

Chips = 4

Eggs = 2

Items = 5

Sum = 14

Stock = 3

Level = 1

一种承认的答案是:2Chips3Eggs

访问 problem.php 来请求一个新问题。

将你的答案以NItemnameNItemname的格式发送到answer.php?answer=[answer]

你需要解决5道题,每道题的时间限制为3秒。

祝你好运!

似乎是一个背包问题,但是这里已经给出最大价值,变成了一个约束求解的问题,解题思路很清楚,从problem.php得到数据,然后解出答案提交到answer.php,只不过有3秒的时间限制,手速快点还是有机会的,我手速比较慢,就写一个脚本代劳了。

这里使用的是Z3约束求解器来完成的,只需要定义好未知数(x),添加好约束条件(0<x<Stock, sum(x) == items, sum(x*pricelist(x)) == sum)即可快速解出未知数(如果有解的话),然后提交结果即可

直接上代码(每一个print都是一个学习的点啊!),

from z3 import *
import requestsdef SolveProblem():exec(ProblemResult.text)problemdata = locals()#print(problemdata)items = problemdata['Items']sum = problemdata['Sum']stock = problemdata['Stock']level = problemdata['Level']problemdata.pop('Items')problemdata.pop('Sum')problemdata.pop('Stock')problemdata.pop('Level')#print(problemdata)s = Solver()key = list(problemdata.keys())value = [problemdata[i] for i in key]x = [Int('x%d' %i) for i in range(len(problemdata))]#print(value)#print(x)for i in range(len(x)):s.add(x[i] < stock)s.add(x[i] > 0)#个人感觉这里可以优化,但是没去深入研究if level == 1:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] == sum)if level == 2:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] == sum)if level == 3:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] == sum)if level == 4:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] + value[10]*x[10] == sum)if level == 5:s.add(x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] == items)s.add(value[0]*x[0] + value[1]*x[1] + value[2]*x[2] + value[3]*x[3] + value[4]*x[4] + value[5]*x[5] + value[6]*x[6] + value[7]*x[7] + value[8]*x[8] + value[9]*x[9] + value[10]*x[10] + value[11]*x[11] == sum)solution = []answer = ''if s.check() == sat:m = s.model()for i in range(len(x)):solution.append(m[x[i]].as_long())answer += str(solution[i])+key[i]#print(level,answer)return answerProblemUrl = 'http://www.wechall.net/challenge/training/programming/knapsaak/problem.php'
AnswerUrl = 'http://www.wechall.net/challenge/training/programming/knapsaak/answer.php'
cookie = {}#用你自己的Cookie
ProblemResult= requests.post(url=ProblemUrl,cookies=cookie)
#print(ProblemResult.text)
Answer = SolveProblem()
#print(Answer)AnswerUrl += '?answer=['+Answer+']'
AnswerResult = requests.post(url=AnswerUrl,cookies=cookie)
print(AnswerResult.text)

只需要用自己的Cookie运行5次脚本即可解题(个人感觉还能优化,不过懒得弄了)。

The Travelling Customer (Coding, Training)相关推荐

  1. wechall靶场training系列通关记录

    wechall靶场Training系列通关记录 Training: Get Sourced 第一题很简单,获取藏在网页源代码中的密码.F12查看网页中的注释即可找到答案: Training: Steg ...

  2. 自我成长和学习的32个网站,每天逛一逛都有不同的收获

    社区类 1.GitHub 开源代码的平台. 2.stackoverflow 程序员最好的问答网站. 3.CSDN 博客平台. 4.v2ex 创意工作者的社区. 5.quora 国外版知乎. 7.掘金 ...

  3. HANA S/4 标准表(MARC MBEW COBL)增强流程

    S/4系统中对某些表如(MARC.MBEW.COBL)进行增强的时候,需要同时更新CDSVIEW的DDL,否则就会报如下的错误导致标准表无法激活. SAP在NOTE 2242679 - Redirec ...

  4. 程序员的必备网站 - 合集(找资源?看我一个就够了)

    目录 目录 "网站的搬运工" 一,做饭要有菜谱 - 导航类 1. 学吧导航,该网站收录了国内外众多优质学习平台,这些学习平台囊括了综合类,外语类,编程算法类,电脑办公类,百科类,设 ...

  5. 操纵Review被封店,申诉信

    标签: 测评被封 亚马逊申诉 操纵评价申诉 分类: 亚马逊申诉模板 Hello,We recently contacted you about product review manipulation. ...

  6. 刷题网站LeetCode/牛客/LintCode介绍

    首先说明,这绝不是刷题网站软文啊.作为一个注册csdn有7年的用户,还一直没有在csdn贡献自己的文章,在这里拜读了不少,但无论技术还是思想,不输出就无法内化成自己的东西.现在也push自己去输出啦~ ...

  7. SPII翻译软件测试简历,软件测试工程师英文求职简历范文

    英文简历是使用英文写的简历.英文简历(resume)并无固定不变的单一形式,应聘者完全可以根据个人的具体情况来确定采用何种形式,灵活设计. name: xxx sex: male ethnic: ch ...

  8. Thingworx自定义扩展开发(一)- 开发环境搭建、Extension Demo Coding

    系列 Thingworx自定义扩展开发(一)- 开发环境搭建.Extension Demo Coding Thingworx自定义扩展开发(二)- Widget Demo Coding Thingwo ...

  9. LLMs之InstructGPT:《Training language models to follow instructions with human feedback》翻译与解读

    LLMs之InstructGPT:<Training language models to follow instructions with human feedback>翻译与解读 导读 ...

最新文章

  1. 如何使用Transformer来做物体检测?
  2. linux命令查看cpu负载,Linux下使用w命令和uptime命令查看系统负载
  3. java remote desktop_Remote Desktop
  4. ktor框架用到了netty吗_如何使用 Ktor 快速开发 Web 项目
  5. yaml 数组_接口测试:A01_HttpRunner基础_05_YAML格式测试用例
  6. 第一次作业(李奇峰 201731062426)
  7. 通达信公式大全_通达信MACD金叉的选股公式大全
  8. 41款常用APP被爆过度索取权限、数据共享给第三方
  9. 超简单的内网邮件服务器搭建(CentOS7 postfix+dovecot)
  10. 服务器IIS配置添加下载扩展名
  11. adb官方最新下载链接和常用操作
  12. outlook2019配置QQ邮箱
  13. 56个民族服饰:介绍56个民族的56个美女,衣服真的好漂亮
  14. DoDataExchange(CDataExchange* pDX)没有执行到原因
  15. [附源码]Python计算机毕业设计高校社团管理系统
  16. C++数学与算法系列之初等数论
  17. 运行VUE项目时,出现npm ERR! A complete log of this run can be found in:...报错
  18. Eric靶机渗透测试通关全教程
  19. Java 基础学习记录
  20. 虚拟化系统镜像下载地址及Linux更新国内源

热门文章

  1. 林老师最后一次大作业:Project 10 – RTSP Windows Client: RFC 2326
  2. 快速认识联邦学习及其难点问题
  3. Python基础记录1
  4. 分享插件 jiaThis
  5. cmd shutdown命令:关机,重启,休眠
  6. 山西大学计算机复试题,山大复试历年真题资料
  7. 解压缩带有中文名文件的ZIP包
  8. 001. 黄帝内经随笔
  9. 263-虚拟内存的地址翻译
  10. 关于《后浪》的B站弹幕分析总结(三)——怎么制作好看的交互式词云