Nie widzisz emoji? Kliknij tutaj .
Będziesz symulował automat. Przedmiotami jest 56 różnych emoji, które można przedstawić jako dwa zastępcze znaki UTF-8, od: 🍅 (U + D83C U + DF45) do 🍼 (U + D83C U + DF7C). W HTML emoji te mogą być reprezentowane w formie UTF-16 jako & # x1F345 do & # x1F37C . W bazie 10 pierwszy znak UTF-8 ma wartość 55356 . Wartość drugiego znaku wynosi od 57157 do 57212 . Oto program CJam, który generuje wszystkie odpowiednie emoji. Aby uniknąć nieporozumień, wyzwanie będzie oceniane postaciami, a nie bajtami . Niektóre emoji mają 2 znaki, niektóre 3. 3. http://www.lettercount.com poda dokładne wyniki tego wyzwania.
Wycena 💵💵💵
Istnieje 8 różnych kategorii cenowych:
- 1,00 USD: 🍅🍆🍇🍈🍉🍊🍋
- 1,50 USD: 🍌🍍🍎🍏🍐🍑🍒
- 2,00 USD: 🍓🍔🍕🍖🍗🍘🍙
- 2,50 USD: 🍚🍛🍜🍝🍞🍟🍠
- 3,00 USD: 🍡🍢🍣🍤🍥🍦🍧
- 3,50 USD: 🍨🍩🍪🍫🍬🍭🍮
- 4,00 $: 🍯🍰🍱🍲🍳🍴🍵
- 4,50 USD: 🍶🍷🍸🍹🍺🍻🍼
Wyświetlanie automatu vendingowego
To właśnie widzi użytkownik po uruchomieniu programu i po dokonaniu zakupu. Możesz używać zwykłych liczb zamiast numerów emoji, ale numery emoji mają tę samą szerokość, co inne emoji. Jeśli używasz liczb emoji, możesz odjąć 14 znaków od wyniku, ponieważ liczby emoji mają 3 znaki.
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
Jeśli użytkownik wejdzie G5
, wybiera 🍳. Wpisywanie E6
wybiera 🍦.
Dodawanie gotówki 💸💸💸
Aby dodać pieniądze, użytkownik powinien wprowadzić, /
a następnie kod monety lub rachunku. Monety to (N) ickel (0,05 USD), (D) ime (0,10 USD) i (Q) uarter (0,25 USD). Rachunki to (O) ne (1,00 $), (F) ive (5,00 $), (T) en (10,00 $). Za każdym razem, gdy użytkownik dodaje rachunek lub monetę, program powinien generować dane wyjściowe Balance: [New Balance]
. Za każdym razem można dodać tylko jeden banknot lub monetę. Oto przykład zawierający trzy wiersze wprowadzania:
/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35
Wybieranie przedmiotów
Użytkownik wybiera element, wprowadzając kod elementu, np . B2
Lub C3
. Jeśli użytkownik nie dodał żadnych pieniędzy, program powinien generować dane wyjściowe Item Cost: [Cost of Item]
. Jeśli użytkownik dodał pieniądze, ale nie wystarczy kupić przedmiot, wynik powinien być Insufficient Funds. Item Cost: [Cost of Item]
. Jeśli użytkownik nie dodać wystarczającą ilość pieniędzy, program powinien wypisać: Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item]
. Następnie we własnym wierszu wydrukuj emoji zakupionego przedmiotu. Następnie wydrukuj cały automat (patrz „Wyświetlanie automatu”) z zakupionym przedmiotem zastąpionym przez 🚫 (U + D83D U + DEAB) Podstawa 10: (55357 57003).
Zakończenie programu
Jeśli użytkownik kupi przedmiot, który obniży jego saldo do 0,00 USD, program powinien zostać automatycznie zakończony. Alternatywnie, jeśli użytkownik wejdzie w „Gotowe” w dowolnym momencie, program musi dać użytkownikowi jego pozostałe saldo w zamian. Zmiana musi dotyczyć tylko monet, dziesięciocentówki i ćwiartek i musi być jak najmniejszą ilością monet. Na przykład, jeśli pozostałe saldo wynosi 1,45 USD, wynik powinien wynosić QQQQQDD
.
Przykładowy przebieg
(Wejście zaczyna się od „-”)
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
Nieprawidłowe kody
- Jeśli dane wejściowe zaczynają się od,
/
ale nie są prawidłowymi danymi pieniężnymi, dane wyjścioweMoney not Accepted
. - Jeśli dane wejściowe są już zakupione, dane wyjściowe
Item out of stock
- Jeśli dane wejściowe to kombinacja cyfr i liter, która nie znajduje się w zakresie (np.
A0
LubJ2
, wpisz „Nieprawidłowy kod” - W przypadku wszystkich innych nieprawidłowych danych wejściowych wpisz „Błąd”
Premia (-15%): Dżem
Podczas sprzedaży przedmiotu istnieje 10% szansa, że maszyna się zakleszczy, a przedmiot utknie. Wyjdź JAM!!!
raz. W takim przypadku użytkownik musi wprowadzić „uderzenie” lub „kopnięcie”. Za każdym razem, gdy użytkownik to robi, istnieje 20% szans na to, że przedmiot się uwolni i sprzeda jak zwykle. Dopóki zacięcie nie zostanie usunięte, jedynymi rozpoznawanymi wejściami są „uderzenie” i „kopnięcie”. Wszystkie pozostałe dane wejściowe nic nie robią. Oto próbka:
-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
🍚
(Zacięcie zostało usunięte. Wznów normalnie.)
Premia (-10%): ID
Jeśli użytkownik próbuje kupić napój alkoholowy (dowolny element w ostatnim rzędzie oprócz butelki dla niemowląt), musisz zażądać dowodu wieku. Aby to zrobić, poproś użytkownika o pomnożenie dwóch liczb losowych między 13 a 19 (włącznie). Wyjście ID required: [13-19]x[13-19] = ?
. Jeśli użytkownik odpowie poprawnie, można dokonać zakupu. Jeśli nie, wydrukuj 🔞 (U + D83D U + DD1E) baza 10: (55357 56606)
Alternatywne wyzwanie: Minecraft
To wyzwanie wydaje się być możliwe w Minecraft. Aby pomyślnie utworzyć wersję tego programu Minecraft, gracz musi
- Posiadaj siatkę 8x7, aby wybierać spośród 56 unikalnych przedmiotów
- Być w stanie dodać pieniądze do salda (Może użyć różnych rodzajów kamieni dla różnych nominałów opisanych powyżej.)
- Daj użytkownikowi wybrany przez siebie przedmiot, jeśli włożył wystarczającą ilość „pieniędzy”
- Zwróć użytkownikowi odpowiednią ilość zmian na końcu.
Tryb zgodności
Mogę przyjmować dane tylko na początku programu
- Nie martw się, możesz stworzyć program, który pobiera wszystkie dane z góry. Jeśli twój program nie zakończył się po sprawdzeniu wszystkich danych wejściowych, załóż, że na końcu wywoływany jest „Gotowe”. Jeśli zastosujesz tę metodę, nie będziesz uprawniony do żadnych bonusów.
Nie mogę wyświetlić / wydrukować emoji
- Możesz skopiować i wkleić dane wejściowe i wyjściowe do tego fragmentu stosu (lub tutaj ). Rozumie zarówno emotikony Unicode, jak i kody HTML emoji. Jeśli Twoje wyniki wyglądają poprawnie na tej stronie, program przechodzi. Spróbuj wkleić niektóre przykładowe dane wejściowe / wyjściowe, aby zobaczyć, jak to wygląda.
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>
Oto skrócona wersja wyświetlacza automatu w trybie zgodności, którą możesz przetestować za pomocą fragmentu stosu:
1⃣2⃣3⃣4⃣5⃣...
A🍅🍆🍇🍈🍉...
B
...
Mogę wysyłać emoji, ale nie do STDOUT.
- Z pozoru terminal Mac OS X jest jedynym, który może emitować emoji. Jeśli nie możesz wyprowadzać emoji w swoim terminalu, masz inne opcje
- Wyślij wszystkie dane wyjściowe do pliku.
- Wyświetl wszystkie dane wyjściowe w oknie.
- Użyj techniki opisanej w „Nie mogę wyświetlić / wydrukować emoji”.
- Z pozoru terminal Mac OS X jest jedynym, który może emitować emoji. Jeśli nie możesz wyprowadzać emoji w swoim terminalu, masz inne opcje
$ can be replaced with your local currency
nie ma większego sensu, jeśli następnie wymagasz, aby monety były (N) ickels (D) imes i (Q) uarter. Sugeruję usunięcie go, ponieważ powoduje zamieszanie.$
symbol jest częścią zestawu znaków ASCII, więc jest bezpiecznie założyć prawie wszystkie klawiatury i języki można go obsługiwać. Jest to jedyny symbol waluty w 7-bitowym zestawie znaków ASCII. W rezultacie inne symbole, takie jak symbol GBP lub symbol EUR €, mogą być niepoprawnie renderowane z powodu niekompatybilnego kodowania ciągów, ale praktycznie tak się nie dzieje$
.$
symbol ten ma specjalne znaczenie w większości języków programowania, więc jego brak na klawiaturze byłby poważnym ograniczeniem. Piszę to na mojej hiszpańskiej klawiaturze i tak naprawdę łatwiej jest uzyskać $ (shift + 4) niż € (alt gr + E), więc widać, że ten drugi symbol został dodany po namyśle.Odpowiedzi:
PHP, (1295 - 14) - 25% = 960.75 znaków
Stare wyniki
1315135113611295989977To była zabawa i to pierwsza odpowiedź - tak.
Gdy automaty przypominają mi o latach 90., których używałem,
goto
a dla zakupionych przedmiotów pokazana jest Space Invader👾
. Maszyna jest przerysowywana po każdym poleceniu.Niegolfowany (jakoś)
👾 Testowane na OS X z PHP 5.5 i 5.6 👾
Edycje
Done
i grało w golfa niektóre struny.[A-Z][0-9]
) dlaInvalid code
..=
w=
odpowiednie.źródło
J5
, powinienem otrzymać komunikat: „Nieprawidłowy kod”.Invalid code
. To zabawne wyzwanie - mimo że ma wiele opcji… Postacie 1K mówią same za siebie… :)C # 6 (.Net Framework 4.6),
135613241304131113071238123512311220 liter - 14 liter (numery emoji) - (15% premii za dżem + 10% premii za identyfikator) =1017993978972,75969,75918915,75904,5 liternieco bardziej nie golfisty do użycia w LinqPad 5 (C # 6). Użyj h = System.Console w F4.
edycja: dzięki za podpowiedź (;;);)
edycja: Strike !! Lepsze niż PHP ;-)
edycja: Usunięto 24 litery. Nadal coś zostało dla php.
edycja: Usunięto 20 liter, zmieniając z dziesiętnego na podwójny.
edycja: Usunięto 7 liter, przechodząc do liczb Emoji
edycja: Usunięto 4 litery, zmieniając wszystko na podwójne zamiast mieszanki podwójnych i liczb całkowitych.
edycja: Usunięto 69 liter - znaleziono martwy kod o_O Najlepszy wpis C #: D
edycja: Usunięto 3 litery - zmieniono ostatnią instrukcję if-else
edycja: Usunięto 4 litery - zmieniono z operatorów zwarć (&& i ||) na normalne & i |
edit: Usunięto 11 liter - zmieniono z h.WriteLine na w () z warunkowym ciągiem dosłownym.
źródło
??
.