AV/BV conversion with Scratch!

本文引用通告至奇怪的 AV 号–BV 号转换程序增加了!,该文用两种奇诡的编程语言实现转换。Scratch 有一定限制,如不支持异或,比较字符不区分大小写,因此 BV 转 AV 实际用全半角字符区分。源码在

Scratch 中即使变量也非一等公民。变量与过程即新建积木均依赖角色,甚至不可创建带返回值的函数。因此调用积木只是写入 返回 变量。

定义[A]异或[B]
	将[返回]设为{0}
	将[i]设为{1}
	将[a]设为[A]
	将[b]设为[B]
	重复执行直到([a]={0})或([b]={0})
		如果([[a]除以{2}的余数]=[[b]除以{2}的余数])
			将[返回]增加[i]
		将[i]增加[i]
		将[a]设为[向下取整[[a]/{2}]]
		将[b]设为[向下取整[[b]/{2}]]
	将[返回]增加[[i]*[[a]+[b]]]

定义[张家庄]的第几个字符是[张]
	将[i]设为{1}
	将[返回]设为{0}
	重复执行直到(([i]>[[张家庄]的字符数])或([返回]>{0}))
		如果([[张家庄]的第[i]个字符]=[张])那么
			将[返回]设为[i]
		否则
			将[i]增加[1]

定义[AV号]转BV号
	删除[栈]的全部项目
	[AV号]异或{177451812}
	将[a]设为[返回]
	将[返回]设为{BV}
	将[i]设为{1}
	重复执行{10}次
		将[a]增加[连接[{0501111431}的第[i]个字符]和[{6537733013}的第[i]个字符]]
		将[[a]除以{58}的余数]加入[栈]
		将[a]设为[向下取整[[a]/{58}]]
		将[i]增加{1}
	将[i]设为{1}
	重复执行{10}次
		将[b]设为[{73596X4821}的第[i]个字符]
		如果([b]={X})那么
			将[b]设为{10}
		将[返回]设为[连接[返回]和[{fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF}的第[{1}+[[栈]的第[b]项]]个字符]]
		将[i]增加{1}

定义[BV号]转AV号
	删除[栈]的全部项目
	将[i]设为{1}
	重复执行{10}次
		将{0}加入[栈]
	重复执行{10}次
		将[b]设为[{73596X4821}的第[i]个字符]
		如果([b]={X})那么
			将[b]设为{10}
		将[a]设为[i]
		{fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF}的第几个字符是[[BV号]的第[i]个字符]
		将[栈]的第[b]项替换为[[返回]-{1}]
		将[i]设为[{1}+[a]]
	将[返回]设为{0}
	重复执行{10}次
		将[i]增加{-1}
		将[返回]设为[[{58}*[返回]]+[[[栈]的第[i]项]-[连接[{0501111431}的第[i]个字符]和[{6537733013}的第[i]个字符]]]
	[返回]异或{177451812}

{170001}转BV号
思考[返回]{2}秒
{17x411w7KC}转AV号
思考[返回]{2}秒