Skip to content

Kotlin Multiplatform Knapsack solver targeting Android, Web, iOS and Desktop

License

Notifications You must be signed in to change notification settings

Flyfish233/MoeTax

Repository files navigation

Kotlin Multiplatform Knapsack solver targeting Android, Web, iOS and Desktop, aiming for experience Compose Multiplatform.

MoeTax 是纯 Kotlin 背包问题求解器。它用于按要求打包包裹。使用户海淘了大量物品时,能够保证每个包裹的进口税小于或等于 50 人民币的免征税额度,一个包裹最多含 5 个物品,同时包裹的数量最少。输出各个包裹的内含物和关税值。方法可能不是最佳的。

背景

如果您时间紧,您可以跳过此部分。

集美 高松灯 特别羡慕初中生 山田杏奈 的大仍子,所以特别喜欢购入 我心危吧唧。但是 海鲜市场 的倒🐶倒✌️实在太多了所以不收 国现。她比较怕生,很不安,没有找 煤炉代切,而是在软件上单机切煤,但是她把剩余的时间都用来做题、偷带手机在寝室里看日本 TV 动画或者在小红书上分享自己的 朋克摇滚。而且她只会 天体力学,摆弄石头以解决三体问题,并不怎么会计算进口税 (tariff)。

高松灯吃谷不多,也不会买什么 冷捆热h 价谷,因此咪只会购买下面好价谷子:

  • 单个商品的进口税小于等于 50 人民币。关税若有小于 1 人民币的余数 CNY 48.01,均视为 1 人民币。取整即 CNY 49.00

  • 她购买的物品,品类要不就是收 13% 进口税,要不就是收 20% 进口税的。

  • 完税金额 (海关认定最低价) 没有考虑,需要自己判断并填入;她看起来不会购买电子产品、 3 套以上的印刷品或音像制品。

  • 她购买的商品都是可以过关的非 R 清水本 等在列商品。

程序不需要计算海关认定最低价。需要她手动检查并输入商品价格。

由于她住在鬼门关,选择 EMS 肯定会带来额外的进口税,而快递费本身也负担不起。她很害怕。就这些垃圾屋捡来的小垃圾,为什么要花时间弄报关呢。因此她只能选择使用 代清关物流 或者 阳光报税物流 。但是代清关小包能发的东西不多。比如她想购买一张 MyGO!!!!! 1st Album「迷跡波」【通常盤】,但被告知 CD 不能经手代清关。

因此辗转反侧后她决定使用阳光报税物流。阳光报税的意思是切煤平台会提前收完整的税,由不得你,但是价格还是最舒服的,只要不超过税额。有的切煤平台叫中通清关,有的叫什么竹蜻蜓,萌特快,还有倒闭的喵急便。

由于高松灯买的是多个小件,高松灯希望能多打几个包裹发货,来避免收税。

其中,阳光报税物流有一定要求:

  • 单个包裹的进口税不超过 50 人民币。

    • 如果超过了,就要交全额的进口税;

    • 如果没超过,就正大光明的免税了!

  • 单个包裹小于等于 5 个订单。

    • 她在骏河屋上盲抽了山田杏奈的 3 组初伤钥匙扣,产生了 3 个订单。

    • 她在雅虎日拍上捡到了 Azarashi Soft (海豹社) 的三张 甜蜜女友 2+ 的 Galgame 原声带 CD。这算一个订单。

    • 她在煤炉上找樱花妹切了 25 个啤酒烧烤的特典书签,这算一个订单。不过很可惜!由于这个订单属于量贩,因此不能走阳光报税物流。

不过不要紧!相信高松灯自己会填写的。

因此,如果一个包裹装不下,那就再打一个包裹。即使这样,也比使用 EMS 或者海运更省钱了...

根据海关总署 2010 年第 43 号(关于调整进出境个人邮递物品管理措施有关事宜)公告,个人邮寄进境的物品只有应征进口税税额在人民币 50 元(含 50 元)以下的才能免于征税,否则将依法征收进口税。

用法

写 MoeTax 的目的是做出来一个真正能用的完全 Kotlin 跨平台、代码包括 UI 都几乎完全共享的程序。它不求复杂,也不需要难搞的第三方库依赖。使用的唯一一个第三方库 Kolor 是为了动态取色主题。

这是一个 Compose Multiplatform 项目,用于体验界面的。这又不是竞技性编程,死刷没用的题,反正以后都用 ChadGPT 做 CodeForced 或者 liitcode 了。此外我不和那些臭做题家一样,不仅我会打包成 exe ,也支持 Web 和 Android。由于我没有 Apple 设备,所以我没办法测试,但是应该是能用的。这是为了高松灯能更好地切谷。

高松灯首先需要打开代切平台,抄写下实时的日元汇率。每个软件的汇率都是不一样的,不能在线获取。

然后,她需要根据软件要求填入包裹不可分割商品的最大件数 (商品总数)。例如 萌○快 是 5 件;筋○云 和 竹○蜓 是 20 件。

随后添加包裹。填写好独一无二的每个商品名称是重要的,之后可以一眼顶针地按照程序的输出来发货了。此外应该填写所有的手续费、检品等杂费费用,没有就填 0 日元。优惠券抵扣的也是要算进去的。

最后 MoeTax 将输出每个包裹中的物品,包裹的总价和包裹的税费。

现在,高松灯可以通过返回的商品名称合单发货了,或者根据计算结果再购买一些还能免税寄的小吧唧来凑单。希望她的包裹结实完好,四角方方。

截图

Desktop WebAssembly
A screenshot MoeTax in Desktop A screenshot of MoeTax in Desktop A screenshot MoeTax in Web A screenshot of MoeTax in Web
Android iOS
A screenshot MoeTax in Android A screenshot of MoeTax in Android Working on it

CLI

commonMainmain package 下,有一个 main 函数。

可以直接使用预定义的 testItem 属性进行测试,或者自行输入。

已知问题

下面的测试结果,不是本项目的问题,而是 Compose Multiplatform 的问题。 MoeTax 用于测试 Compose Multiplatform 在实际应用下的各种问题。

Compose for Web, WasmJS

  1. 无法调用系统字体,并使得中文显示为方框。 此项目使用了 3000 中文常用字字库、常见符号、片假名、日本汉字以缩减 Noto Sans CJK 至 1.12MB 并延迟加载。但仍然不尽人意。
  2. 不支持任何快捷键。 无法执行任何键盘快捷键,包括全选、复制和粘贴。部分于 Kotlin 2.0 支持。
  3. 无法输入中文。输入法将只会调用英文输入法。
  4. 不支持软键盘。我们发现在需要时, Compose 只会在控制台中输出 TODO showSoftwareKeyboard in JS
  5. 不支持缩放。和 Flutter 一样,它不支持缩放,并且在笔记本电脑用户使用触摸板进行双指缩放时,出现显示异常。
  6. 在所有的高分辨率屏幕上显示异常。 同时导致字体渲染模糊。在手机上可能显示很小,也无法进行缩放操作。不支持手机竖屏。
  7. 本程序的点击事件全部错位。其他平台均完全正常,也未见任何异常。
  8. 当单个物品的关税超过 50 人民币时,将会抛出异常。这是有意的。但是 Compose for Web 会在控制台输出异常,并冻结界面。
  9. Skiko 如果可以 fork 后删掉这个高达 772 KB 的 Roboto Regular 字体, 或者禁止其加载而使用系统字体、或者使用 Noto Sans CJK 缩减版代替,将会更快加载。
  10. 右键单击也算作左键单击。没有长按事件。
  11. STATUS_ACCESS_VIOLATION 仍然会在 Microsoft Edge 124.0.2478.6 (正式版本) dev (64 位) 上出现。 官方的 Compose for Web 也出现相同的异常。
  12. 在最新的 Google Chrome, Mozilla Firefox, Microsoft Edge 上均可能无法正常运行。错误异常是各种各样的,但更换不同版本的浏览器 (如使用相同核心的 Dev 版本,切换到旧版本或 Beta 版本) 会莫名其妙地解决问题。在打开 Microsoft Edge 的严格站点安全性 (对此网站使用增强的安全性) 后无法使用。

构建

  • 您可以使用 ./gradlew :composeApp:wasmJsBrowserDevelopmentRun 来在浏览器中运行项目。
  • 您可以使用 ./gradlew :composeApp:run 来在桌面上运行项目。

License

Common (under main package) under WTFPL, and Composable (under ui package) under Apache 2.0 cuz I copied some code from other projects, which are also written by me but licensed under Apache 2.0.

© 2077 ChadGPT, CloseAI Global LLC. / Copliliot, MacroHard Corporation. All Rights Reserved.

℗ 2077 G1GαChad, 😭CUNNY😭 & THE I.N.C.E.L.

Code is generated by LLMs with no warranty or unit tests. No human involved.

更新日志

版本 3 起支持了:

  • 自定义包裹内含商品总数最大值。高松灯开始对 任○购, 萌○ 等平台可能感到不安,而其他平台支持塞下更多的商品,即使关税仍然是五十元: 现在,她可以自填商品总数,而不是定死的 5 个。
  • 依赖更新。通过 ./gradlew refershVersion 查看最新依赖。