Roblox OA|NG OA CodeSignal + 造车 + 工厂经营全流程复盘
Roblox NG OA 分三部分:CodeSignal 编程、造车小游戏、工厂经营小游戏。本文完整复盘工厂经营的七步盈利策略、造车的方案组合,以及两道 Coding 题(商品销售统计、单灯照亮计数)的完整代码。
Roblox NG OA 一共分为三部分:第一部分是常规的 CodeSignal 编程测试,会直接影响后续流程,建议尽量拿到满分;第二部分造车小游戏;第三部分工厂经营小游戏。除了算法,这套 OA 也很重视资源规划、逻辑判断和快速试错。
工厂经营小游戏:先盈利,再优化产能
新版界面会直接显示产品成本和售价,所以第一步不是盲目扩产,而是先算清楚哪些产品能盈利。有些产品的生产成本高于售价,生产越多亏得越多,这也是很多人忙了很久、最后资金反而低于初始值的原因。一套稳定的操作顺序是:
1. 先筛出所有盈利产品,只生产有正利润的产品。 2. 从最终产品向上游倒推,将盈利产品的产能尽量拉满。 3. 如果某个零件成为瓶颈,根据它的最大供应量调整下游产能,避免生产过剩的中间件。 4. 检查能否通过 Buff 提升瓶颈环节的产能,但要重新计算成本,防止升级后产品由盈利变成亏损。 5. 对原本亏损的产品,看成本集中在哪个环节,如果 Buff 能显著降低成本使它转盈利,再考虑扩大产能。 6. 如果两种产品共用同一种瓶颈零件,按单位资源带来的利润分配产能,把有限零件优先给利润更高的产品。 7. 游戏支持版本回退,遇到不确定的升级先尝试、再对比利润变化,不合适就恢复;最后阶段微调资源分配挤出剩余分数。
造车小游戏:先分析约束,再组合方案
造车游戏共有两轮,从 20 多种零件里选组件,每辆车最多安装 4 个零件,目标是让车辆顺利通过地图障碍,主要考察场景分析和方案组合。例如遇到悬崖可以装降落伞或护盾让车辆落地后继续行驶,要根据每轮地图的地形和限制不断调整配置,而不是固定用同一套零件。
思路的核心是快速理解每个方案解决什么问题、组合后是否冲突。问题不在算法,而在实验速度——很多人最终造出的车辆数不多,但只要能通过这一轮就行。
Coding:两题完整实现
Q1:商品销售统计系统
题意:实现一个简化商品销售统计系统。输入商品原价表 pricelist 和按时间顺序排列的交易日志 logs。日志有三种操作:sell 表示销售指定数量的商品;discount_start 表示为某件商品开启优惠,最多有指定数量的商品可以按「原价减优惠金额」出售,超过部分仍按原价;discount_end 表示结束该商品优惠。依次处理全部日志,返回最终销售总收入。
思路:用哈希表保存每件商品的原价,再用另一个哈希表维护当前生效的优惠金额和剩余优惠数量。遇到 sell 时,令优惠数量为 min(销售数量, 剩余优惠数量),这部分按优惠价计算,其余按原价计算,同时扣减剩余额度。
def solution(pricelist, logs):
pr = {a: int(b) for a, b in (s.split(":") for s in pricelist)}
dc = {}
res = 0
for g in logs:
p = g.replace(",", "").split()
if p[0] == "sell":
k, c = p[1], int(p[2])
u = pr[k]
m, r = dc.get(k, [0, 0])
d = min(c, r)
res += d * (u - m) + (c - d) * u
if r > 0:
dc[k][1] -= d
elif p[0] == "discount_start":
dc[p[1]] = [int(p[2]), int(p[3])]
else:
dc[p[1]] = [0, 0]
return res
整体时间 O(P + L),空间 O(P),P 是商品数量、L 是日志数量。容易漏的是「优惠额度扣到 0 之后仍继续 sell」的情况——那部分必须回到原价计算。
Q2:数轴上的单灯照亮计数
题意:数轴上有若干盏灯,每盏灯由位置 x 和照明半径 r 表示,可以照亮闭区间 [x-r, x+r]。计算数轴上有多少个整数坐标恰好被一盏灯照亮。
思路:使用差分事件和扫描线。对每盏灯的区间 [l, r],在 l 处记录 +1、在 r+1 处记录 -1,再对所有事件坐标排序并从左到右扫描。处理当前位置的变化量后,如果当前覆盖次数等于 1,就把当前位置到下一个事件坐标之间的整数数量加入答案,无需遍历巨大坐标范围。
def solution(lamps):
d = {}
for x, r in lamps:
s, e = x - r, x + r + 1
d[s] = d.get(s, 0) + 1
d[e] = d.get(e, 0) - 1
res = c = 0
p = None
for k in sorted(d):
if p is not None and c == 1:
res += k - p
c += d[k]
p = k
return res
时间 O(n log n)(排序事件坐标),空间 O(n)。差分把「区间覆盖」压成两个端点事件,扫描线按坐标推进,只统计覆盖次数恰好为 1 的段,是这类区间计数题的标准做法。
FAQ
工厂经营游戏为什么先算盈利再扩产?
因为有的产品生产成本高于售价,扩产越多亏得越多。先筛出正利润产品、再倒推产能,才能避免「忙了很久资金反而下降」。瓶颈零件还要按单位利润分配产能。
差分扫描线为什么比直接遍历坐标快?
直接遍历每个整数坐标需要 O(坐标范围),灯少但坐标大时会超时。差分只处理区间的两个端点事件,按事件坐标排序扫描,复杂度与灯数相关而非坐标范围。
参考来源
联系 VOPathway
如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。
- 微信:Coding0201
- 邮箱:[email protected]
- Telegram:@OAVOProxy
- WhatsApp:+86 178 6396 8105
可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。
本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。
预约一次训练复盘 ↗