Не можете бачити емоджи? Натисніть тут .
Ви будете імітувати автомат. Елементи 56 різних емоджи, які можуть бути представлені у вигляді двох сурогатних символів UTF-8, від: 🍅 (U + D83C U + DF45) до 🍼 (U + D83C U + DF7C). У HTML ці емоджи можуть бути представлені у формі UTF-16 як & # x1F345 через & # x1F37C . У базі 10 перший символ UTF-8 має значення 55356 . Значення другого символу коливається від 57157 до 57212 . Ось програма CJam, яка генерує всі відповідні емоджи. Щоб уникнути плутанини, цей виклик буде оцінюватися символами, а не байтами . Деякі емоджи - це два символи, а інші - 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) ім'я ($ 0,10) і (Q) гірші (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) База 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%): ідентифікатор
Якщо користувач намагається придбати алкогольний напій (будь-який предмет останнього ряду, крім пляшечки для немовляти), потрібно вимагати підтвердження віку. Для цього ви просите користувача помножити два випадкових числа між 13 та 19 (включно). Вихідні дані ID required: [13-19]x[13-19] = ?. Якщо користувач відповість правильно, покупка може пройти. Якщо ні, надрукуйте base (U + D83D U + DD1E) на базі 10: (55357 56606)
Альтернативний виклик: Minecraft
Цей виклик здається чимось можливим у Minecraft. Щоб успішно створити Minecraft версію цієї програми, гравець повинен
- Майте сітку 8х7, щоб вибрати з 56 унікальних предметів
- Умійте додавати гроші на баланс (Можливо, використовуйте різні види каміння для різних номіналів, описаних вище.)
- Дайте користувачеві той предмет, який він / вона вибере, якщо вони вклали достатньо "грошей"
- Поверніть користувачеві відповідну кількість змін наприкінці.
Режим сумісності
Я можу взяти вклад лише на початку програми
- Не хвилюйтесь, ви можете зробити програму, яка займає весь вхід наперед. Якщо ваша програма не закінчилася після оцінки всіх вхідних даних, припустіть, що в кінці викликається "Готово". Якщо ви скористаєтеся цим методом, ви не отримаєте жодних бонусів.
Я не можу переглянути / вивести емоджи
- Ви можете скопіювати та вставити вхід та вихід у цей фрагмент стека (або тут ). Він може зрозуміти як unicode emojis, так і HTML коди для emojis. Якщо ваш результат виглядає правильним на цій сторінці, програма проходить. Спробуйте вставити деякий зразок вводу / виводу, щоб побачити, як це виглядає.
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>
Ось скорочена версія режиму сумісності дисплея торгового автомата, яку можна протестувати у фрагменті стека:
1⃣2⃣3⃣4⃣5⃣...
A🍅🍆🍇🍈🍉...
B
...
Я можу вивести емоджи, але не для STDOUT.
- Здається, що термінал Mac OS X - єдиний, кому відомо, що може виводити емоджи. Якщо ви не можете вивести емоджи на своєму терміналі, інші ваші варіанти
- Надіслати весь вихід у файл.
- Відобразити весь вихід у вікні.
- Використовуйте техніку, описану в "Я не можу переглянути / вивести емоджи".
- Здається, що термінал Mac OS X - єдиний, кому відомо, що може виводити емоджи. Якщо ви не можете вивести емоджи на своєму терміналі, інші ваші варіанти
$символ є частиною набору ASCII символів, тому можна з упевненістю припустити , майже всі клавішні і мову можуть впоратися з цим. Це єдиний символ валюти в 7-бітовому наборі символів ASCII. Як результат, інші символи, такі як символ GBP або символ EUR, можуть бути неправильно надані через несумісні кодові рядки, але це практично ніколи не буває $.
$символ має особливе значення у більшості мов програмування, тому відсутність його на клавіатурі було б серйозним обмеженням. Я набираю це на моїй іспанській клавіатурі, і насправді легше отримати $ (shift + 4), ніж € (alt gr + E), щоб ви могли бачити, що останній символ додається як думка.
$ can be replaced with your local currencyне має особливого сенсу, якщо ви вимагаєте, щоб монети були (N) ickels (D) imes та (Q) uarters. Я пропоную вам зняти його, оскільки це додасть плутанини.