Não consegue ver o emoji? Clique aqui .
Você simulará uma máquina de venda automática. Os itens são 56 emojis diferentes, que podem ser representados como dois caracteres UTF-8 substitutos, de: 🍅 (U + D83C U + DF45) a 🍼 (U + D83C U + DF7C). Em HTML, esses emojis podem ser representados no formato UTF-16 como & # x1F345 a & # x1F37C . Na base 10, o primeiro caractere UTF-8 possui o valor 55356 . O valor do segundo caractere varia de 57157 a 57212 . Aqui está um programa CJam que gera todos os emojis relevantes. Para evitar confusão, esse desafio será pontuado em caracteres, não em bytes . Alguns emojis têm 2 caracteres, outros 3. Http://www.lettercount.com fornecerá uma contagem precisa para esse desafio.
Preços 💵💵💵
Existem 8 categorias de preços diferentes:
- US $ 1,00: 🍅🍆🍇🍈🍉🍊🍋
- US $ 1,50: 🍌🍍🍎🍏🍐🍑🍒
- US $ 2,00: 🍓🍔🍕🍖🍗🍘🍙
- US $ 2,50: 🍚🍛🍜🍝🍞🍟🍠
- US $ 3,00: 🍡🍢🍣🍤🍥🍦🍧
- US $ 3,50: 🍨🍩🍪🍫🍬🍭🍮
- US $ 4,00: 🍯🍰🍱🍲🍳🍴🍵
- US $ 4,50: 🍶🍷🍸🍹🍺🍻🍼
Exibindo a máquina de venda automática
É o que o usuário vê quando o programa é iniciado e após a compra. Você pode usar números regulares em vez de números emoji, mas os números emoji têm a vantagem de ter a mesma largura que outros emojis. Se você usar números emoji, poderá subtrair 14 caracteres da sua pontuação, porque os números emoji têm 3 caracteres cada.
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
Se o usuário digitar, G5
selecione 🍳. Inserir E6
seleciona 🍦.
Adicionando dinheiro 💸💸💸
Para adicionar dinheiro, o usuário deve inserir /
e, em seguida, o código de uma moeda ou nota. As moedas são (N) ickel ($ 0,05), (D) ime ($ 0,10) e (Q) mais tarde ($ 0,25). As faturas são (O) ne (US $ 1,00), (F) cinco (US $ 5,00), (T) en (US $ 10,00). Sempre que o usuário adiciona uma nota ou moeda, o programa deve ser exibido Balance: [New Balance]
. Apenas uma nota ou moeda pode ser adicionada a cada vez. Aqui está um exemplo que contém três linhas de entrada:
/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35
Selecionando itens
O usuário seleciona um item digitando o código do item, como B2
ou C3
. Se o usuário não adicionou nenhum dinheiro, o programa deve ser exibido Item Cost: [Cost of Item]
. Se o usuário adicionou dinheiro, mas não é suficiente comprar o item, a saída deve ser Insufficient Funds. Item Cost: [Cost of Item]
. Se o usuário adicionou dinheiro suficiente, o programa deve gerar:Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item]
. Em seguida, em sua própria linha, imprima o emoji do item comprado. Em seguida, imprima toda a máquina de venda automática (consulte "Exibindo a máquina de venda automática") com o item adquirido substituído por Base (U + D83D U + DEAB) Base 10: (55357 57003).
Finalizando o programa
Se o usuário comprar um item que reduz seu saldo a US $ 0,00, o programa será encerrado automaticamente. Como alternativa, se o usuário digitar "Concluído" a qualquer momento, o programa deverá fornecer ao usuário o saldo restante em alteração. A mudança deve ser feita apenas em níquel, moeda de dez centavos e quarto de moeda e deve ser a menor quantidade possível de moedas. Por exemplo, se o saldo restante for de US $ 1,45, a saída deverá serQQQQQDD
.
Execução de amostra
(A entrada começa com "-")
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
Códigos inválidos
- Se a entrada começar com,
/
mas não for uma entrada válida em dinheiro, faça a saídaMoney not Accepted
. - Se a entrada for um item que já foi comprado, a saída
Item out of stock
- Se a entrada for uma combinação de dígitos e letras que não está no intervalo (como
A0
ouJ2
, imprima "Código inválido" - Para todas as outras entradas inválidas, imprima "Erro"
Bônus (-15%): Atolamento
Ao vender um item, há 10% de chance de a máquina travar e o item ficar preso. Saída JAM!!!
uma vez. Nesse caso, o usuário deve inserir "punch" ou "kick". Cada vez que o usuário faz isso, há 20% de chance de o item se libertar e vendê-lo normalmente. Até o atolamento desaparecer, as únicas entradas reconhecidas são "soco" e "chute". Todas as outras entradas não fazem nada. Aqui está uma amostra:
-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
🍚
(O atolamento foi eliminado. Continue como normal.)
Bônus (-10%): ID
Se o usuário tentar comprar uma bebida alcoólica (qualquer item na última linha, exceto a mamadeira), você deverá exigir uma prova de idade. Para fazer isso, você pede ao usuário que multiplique dois números aleatórios entre 13 e 19 (inclusive). Saída ID required: [13-19]x[13-19] = ?
. Se o usuário responder corretamente, a compra poderá ser concluída. Caso contrário, imprima 🔞 (U + D83D U + DD1E) base 10: (55357 56606)
Desafio alternativo: Minecraft
Esse desafio parece ser algo possível no Minecraft. Para criar com sucesso uma versão Minecraft deste programa, o jogador deve
- Tenha uma grade 8x7 para selecionar entre 56 itens exclusivos
- Poder adicionar dinheiro à balança (talvez use tipos diferentes de pedras para as diferentes denominações descritas acima.)
- Forneça ao usuário o item que ele / ela seleciona se ele tiver investido "dinheiro" suficiente
- Retorne ao usuário a quantidade apropriada de alteração no final.
Modo de compatibilidade
Só posso receber sugestões no início do programa
- Não se preocupe, você pode criar um programa que leve todas as informações à frente. Se o seu programa não foi finalizado após avaliar todas as entradas, suponha que "Concluído" seja chamado no final. Se você usar esse método, não terá direito a nenhum bônus.
Não consigo visualizar / emitir emojis
- Você pode copiar e colar sua entrada e saída neste snippet de pilha (ou aqui ). Ele pode entender emojis unicode e códigos HTML para emojis. Se sua saída parecer correta nesta página, seu programa será aprovado. Tente colar algumas das entradas / saídas de amostra para ver como fica.
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>
Aqui está uma versão abreviada do modo de compatibilidade da exibição da máquina de venda automática que você pode testar no Snippet da pilha:
1⃣2⃣3⃣4⃣5⃣...
A🍅🍆🍇🍈🍉...
B
...
Posso produzir emojis, mas não para STDOUT.
- Aparentemente, o Mac OS X Terminal é o único conhecido por ser capaz de emitir emojis. Se você não conseguir emitir emojis no seu terminal, suas outras opções serão
- Envie toda a saída para um arquivo.
- Exibe toda a saída em uma janela.
- Use a técnica descrita em "Não consigo visualizar / exibir emojis".
- Aparentemente, o Mac OS X Terminal é o único conhecido por ser capaz de emitir emojis. Se você não conseguir emitir emojis no seu terminal, suas outras opções serão
$ can be replaced with your local currency
não faz muito sentido se você exigir que as moedas sejam (N) ickels (D) imes e (Q) uarters. Eu sugiro que você o remova, pois isso adiciona confusão.$
símbolo faz parte do conjunto de caracteres ASCII, portanto, é seguro assumir que praticamente todos os teclados e idiomas podem lidar com isso. É o único símbolo de moeda no conjunto de caracteres ASCII de 7 bits. Como resultado, outros símbolos, como o símbolo GBP ou o símbolo EUR, podem ser renderizados incorretamente devido a codificações de string incompatíveis, mas isso quase nunca acontece com ele$
.$
símbolo tem um significado especial na maioria das linguagens de programação, portanto, não tê-lo disponível no teclado seria uma limitação séria. Estou digitando isso no meu teclado em espanhol e é realmente mais fácil obter $ (shift + 4) do que € (alt gr + E) para que você possa ver que o último símbolo foi adicionado como uma reflexão tardia.Respostas:
PHP, (1295-14) - 25% = 960,75 caracteres
Pontuações antigas
1315135113611295989977Isso foi divertido, e é a primeira resposta - sim.
Como as máquinas de venda automática me lembram os anos 90 que eu usei
goto
e para itens comprados, o Space Invader👾
é mostrado. A máquina é redesenhada após cada comando.Ungolfed (de alguma forma)
👾 Testado no OS X com PHP 5.5 e 5.6 👾
Edições
Done
e tacou algumas cordas.[A-Z][0-9]
) paraInvalid code
..=
em=
aplicáveis.fonte
J5
, devo receber a mensagem: "Código inválido".Invalid code
enquanto. É um desafio divertido - mesmo que ele tem muitas opções ... 1K personagens falam por si ... :)C # 6 (.Net Framework 4.6),
135613241304131113071238123512311220 Letras - 14 letras (números Emoji) - (15% de bônus de atolamento + 10% de bônus de identificação) =1017993978972,75969,75 969,75918915,75904,5 letrasum pouco mais desregrado para uso no LinqPad 5 (C # 6). Use h = System.Console em F4.
edit: obrigado pela (;;) dica;)
editar: greve !! Melhor que PHP ;-)
edit: Removido 24 letras. Ainda resta algo para php.
edit: Removidas 20 letras mudando de decimal para duplo.
edit: Removidas 7 letras ao mudar para Emoji Numbers
edit: Removido 4 letras, alternando tudo para dobrar em vez de uma mistura de duplas e ints.
edit: Removidas 69 letras - encontrado código morto o_O Melhor entrada C #: D
edit: Removidas 3 letras - última instrução if-else alterada
edit: Removidas 4 letras - trocadas de operadores de curto-circuito (&& e ||) para normal & e |
edit: Removidas 11 letras - alternadas de h.WriteLine para w () com string literal condicional.
fonte
??
.