看不到表情符号?请点击这里。
您将模拟自动售货机。这些项目是56种不同的表情符号,可以表示为两个替代UTF-8字符,从🍅(U + D83C U + DF45)到🍼(U + D83C U + DF7C)。在HTML中,这些表情符号可以UTF-16形式表示为&#x1F345到&#x1F37C。在基数10中,第一个UTF-8字符的值为55356。第二个字符的值的范围是57157至57212。这是一个生成所有相关表情符号的CJam程序。为避免混淆,此挑战将以字符而不是字节来评分。有些表情符号是2个字符,有些是3个字符。http://www.lettercount.com将为您提供准确的计数以应对这一挑战。
定价💵💵💵
有8种不同的价格类别:
- $ 1.00:🍅🍆🍇🍈🍉🍊🍋
- $ 1.50:🍌🍍🍎🍏🍐🍑🍒
- $ 2.00:🍓🍔🍕🍖🍗🍘🍙
- $ 2.50:🍚🍛🍜🍝🍞🍟🍠
- $ 3.00:🍡🍢🍣🍤🍥🍦🍧
- $ 3.50:🍨🍩🍪🍫🍬🍭🍮
- $ 4.00:🍯🍰🍱🍲🍳🍴🍵
- $ 4.50:🍶🍷🍸🍹🍺🍻🍼
显示自动售货机
这是程序启动时和购买后用户所看到的。您可以使用常规数字代替表情符号数字,但是表情符号数字的优点是与其他表情符号的宽度相同。如果您使用表情符号数字,则可以从乐谱中减去14个字符,因为表情符号数字各为3个字符。
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
如果用户输入G5
,则选择🍳。输入E6
选择🍦。
加现金💸💸💸
要加钱,用户应输入/
,然后输入硬币或钞票的代码。硬币为(N)镍($ 0.05),(D)ime($ 0.10)和(Q)uarter($ 0.25)。帐单为(O)ne($ 1.00),(F)ive($ 5.00),(T)en($ 10.00)。每次用户添加纸币或硬币时,程序都应输出Balance: [New Balance]
。每次只能添加一张钞票或硬币。以下是包含三行输入的示例:
/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35
选择项目
用户通过输入商品代码(例如B2
或)来选择商品C3
。如果用户未加任何钱,则程序应输出Item Cost: [Cost of Item]
。如果用户已加钱,但不足以购买该物品,则输出应为Insufficient Funds. Item Cost: [Cost of Item]
。如果用户确实添加了足够的钱,则程序应输出:Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item]
。然后在其自己的行上,打印出所购买商品的表情符号。然后打印出整个自动售货机(请参阅“显示自动售货机”),将所购买的物品替换为🚫(U + D83D U + DEAB)Base 10:(55357 57003)。
结束程序
如果用户购买了将其余额降低到$ 0.00的商品,则该程序应自动终止。或者,如果用户在任何时候输入“完成”,则程序必须向用户提供其剩余零钱余额。零钱只能是镍币,角钱和硬币,并且必须是最小数量的硬币。例如,如果余额为$ 1.45,则输出应为QQQQQDD
。
样品运行
(输入以“-”开头)
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
-E1
Item Cost: $3.00
-/F
Balance: $5.00
-E1
Item at E1 Purchased. Remaining Balance: $2.00
🍡
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🚫🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
-Done
QQQQQQQQ
无效的代码
- 如果输入以
/
但不是有效的货币输入开头,则输出Money not Accepted
。 - 如果输入的是已经购买的商品,则输出
Item out of stock
- 如果输入是不在范围内的数字字母组合(例如
A0
或J2
,则输出“无效代码” - 对于所有其他无效输入,输出“错误”
奖励(-15%):卡纸
出售物品时,机器有10%的机会被卡住,物品被卡住。输出JAM!!!
一次。在这种情况下,用户必须输入“打孔”或“踢”。每次用户这样做时,商品就有20%的机会会挣脱并正常出售。在清除卡纸之前,唯一识别的输入是“打孔”和“踢”。所有其他输入均不执行任何操作。这是一个示例:
-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
🍚
(卡纸已清除。恢复正常。)
红利(-10%):ID
如果用户试图购买含酒精的饮料(除了奶瓶,最后一行上的任何物品),您都必须提供年龄证明。为此,您要求用户将13和19(含)之间的两个随机数相乘。输出ID required: [13-19]x[13-19] = ?
。如果用户回答正确,则购买可以通过。如果不是,请打印🔞(U + D83D U + DD1E)以10为基数:(55357 56606)
替代挑战:《我的世界》
在Minecraft中,这一挑战似乎是可能的。要成功创建此程序的Minecraft版本,播放器必须
- 拥有8x7网格,可从56个独特物品中进行选择
- 能够向余额中添加资金(也许对上述不同面额使用不同类型的宝石。)
- 如果用户投入了足够的“钱”,则给用户他/她选择的项目
- 最后向用户返回适当的更改量。
兼容模式
我只能在程序开始时输入
- 不用担心,您可以制作一个程序,将所有输入都放在前面。如果您的程序在评估所有输入后仍未终止,则假定在最后调用了“完成”。如果您采用这种方法,您将没有资格获得任何奖金。
我无法查看/输出表情符号
- 您可以将输入和输出复制并粘贴到此Stack Snippet中(或在此处)。它既可以理解unicode表情符号,也可以理解表情符号的HTML代码。如果此页面上的输出看起来正确,则程序通过。尝试粘贴一些示例输入/输出以查看其外观。
function parse() {
var o = document.getElementById("output");
var text = document.getElementById("in").value;
o.innerHTML = text.replace(/\n/g,"<br/>").replace(/ /g," ");
twemoji.parse(o);
}
<head>
<script src="//twemoji.maxcdn.com/twemoji.min.js"></script>
</head>
<body>
<h1>Emoji to Image</h1>
<textarea id="in" rows="10" cols="50"></textarea>
<input type="submit" onclick="parse()">
<div id="output"></div>
</body>
这是自动售货机显示屏的兼容模式的缩写版本,您可以在Stack Snippet中进行测试:
1⃣2⃣3⃣4⃣5⃣...
A🍅🍆🍇🍈🍉...
B
...
我可以输出表情符号,但不能输出到STDOUT。
- 貌似,Mac OS X Terminal是已知的唯一能够输出表情符号的终端。如果您无法在终端中输出表情符号,则其他选择是
- 将所有输出发送到文件。
- 在窗口中显示所有输出。
- 使用“我无法查看/输出表情符号”中描述的技术。
- 貌似,Mac OS X Terminal是已知的唯一能够输出表情符号的终端。如果您无法在终端中输出表情符号,则其他选择是
$
符号是ASCII字符集的一部分,因此可以安全地假设几乎所有键盘和语言都可以使用它。它是7位ASCII字符集中的唯一货币符号。结果,由于不兼容的字符串编码,其他符号(例如GBP符号或EUR符号€)可能会错误地呈现,但实际上不会发生$
。
$
符号在大多数编程语言中都有特殊含义,因此,键盘上无法使用该符号将是一个严重的限制。我在西班牙语键盘上输入该字符,实际上获得$(shift + 4)比获得€(alt gr + E)更容易,因此您可以看到后面的符号被添加了。
$ can be replaced with your local currency
如果您然后要求硬币为(N)根(D)imes和(Q)uarters,则没有任何意义。我建议您删除它,因为它会增加混乱。