¿No puedes ver emoji? Haga clic aquí .
Simulará una máquina expendedora. Los elementos son 56 emojis diferentes, que se pueden representar como dos caracteres UTF-8 sustitutos, desde: 🍅 (U + D83C U + DF45) hasta 🍼 (U + D83C U + DF7C). En HTML, estos emojis se pueden representar en forma UTF-16 como & # x1F345 a través de & # x1F37C . En la base 10, el primer personaje UTF-8 tiene el valor 55356 . El valor del segundo carácter varía de 57157 a 57212 . Aquí hay un programa CJam que genera todos los emojis relevantes. Para evitar confusiones, este desafío se puntuará en caracteres, no en bytes . Algunos emojis son de 2 caracteres, algunos son de 3. http://www.lettercount.com le dará un recuento preciso para este desafío.
Precios 💵💵💵
Hay 8 categorías de precios diferentes:
- $ 1.00: 🍅🍆🍇🍈🍉🍊🍋
- $ 1.50: 🍌🍍🍎🍏🍐🍑🍒
- $ 2.00: 🍓🍔🍕🍖🍗🍘🍙
- $ 2.50: 🍚🍛🍜🍝🍞🍟🍠
- $ 3.00: 🍡🍢🍣🍤🍥🍦🍧
- $ 3.50: 🍨🍩🍪🍫🍬🍭🍮
- $ 4.00: 🍯🍰🍱🍲🍳🍴🍵
- $ 4.50: 🍶🍷🍸🍹🍺🍻🍼
Mostrar la máquina expendedora
Esto es lo que ve el usuario cuando se inicia el programa y después de realizar una compra. Puede usar números regulares en lugar de números emoji, pero los números emoji tienen el beneficio de ser del mismo ancho que otros emojis. Si usa números emoji, puede restar 14 caracteres de su puntaje, porque los números emoji son de 3 caracteres cada uno.
1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣
A 🍅🍆🍇🍈🍉🍊🍋
B 🍌🍍🍎🍏🍐🍑🍒
C 🍓🍔🍕🍖🍗🍘🍙
D 🍚🍛🍜🍝🍞🍟🍠
E 🍡🍢🍣🍤🍥🍦🍧
F 🍨🍩🍪🍫🍬🍭🍮
G 🍯🍰🍱🍲🍳🍴🍵
H 🍶🍷🍸🍹🍺🍻🍼
Si el usuario ingresa, G5
selecciona 🍳. Al ingresar se E6
selecciona 🍦.
Agregar efectivo 💸💸💸
Para agregar dinero, el usuario debe ingresar /
y luego el código de una moneda o billete. Las monedas son (N) ickel ($ 0.05), (D) ime ($ 0.10) y (Q) uarter ($ 0.25). Los billetes son (O) ne ($ 1.00), (F) ive ($ 5.00), (T) en ($ 10.00). Cada vez que el usuario agrega un billete o una moneda, el programa debe salir Balance: [New Balance]
. Solo se puede agregar un billete o moneda cada vez. Aquí hay un ejemplo que contiene tres líneas de entrada:
/D
Balance: $0.10
/Q
Balance: $0.35
/F
Balance: $5.35
Seleccionar elementos
El usuario selecciona un artículo ingresando el código del artículo, como B2
o C3
. Si el usuario no ha agregado dinero, el programa debería salir Item Cost: [Cost of Item]
. Si el usuario ha agregado dinero, pero no es suficiente para comprar el artículo, la salida debería serlo Insufficient Funds. Item Cost: [Cost of Item]
. Si el usuario no poner suficiente dinero, el programa debe ser la salida: Item at [Item Location] Purchased. Remaining Balance: [Balance - Cost of Item]
. Luego, en su propia línea, imprima el emoji del artículo comprado. Luego imprima toda la máquina expendedora (consulte "Visualización de la máquina expendedora") con el artículo comprado reemplazado por 🚫 (U + D83D U + DEAB) Base 10: (55357 57003).
Finalizando el programa
Si el usuario compra un artículo que reduce su saldo a $ 0.00, el programa debería finalizar automáticamente. Alternativamente, si el usuario ingresa "Listo" en cualquier momento, el programa debe darle al usuario el saldo restante en cambio. El cambio debe ser solo en níqueles, monedas de diez centavos y cuartos, y debe ser la menor cantidad de monedas posible. Por ejemplo, si el saldo restante es $ 1.45, la salida debería ser QQQQQDD
.
Ejecución de muestra
(La entrada comienza con "-")
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
- Si la entrada comienza con
/
pero no es una entrada de dinero válida, salidaMoney not Accepted
. - Si la entrada es un artículo que ya ha sido comprado, salida
Item out of stock
- Si la entrada es una combinación de dígitos y letras que no está dentro del rango (como
A0
oJ2
, salida "Código inválido" - Para todas las demás entradas no válidas, salida "Error"
Bonificación (-15%): Mermelada
Al vender un artículo, hay un 10% de posibilidades de que la máquina se atasque y el artículo se atasque. Salida JAM!!!
una vez. En este caso, el usuario debe ingresar "golpe" o "patada". Cada vez que el usuario lo hace, hay un 20% de posibilidades de que el artículo se libere y se venda normalmente. Hasta que desaparezca el atasco, las únicas entradas reconocidas son "puñetazo" y "patada". Todas las demás entradas no hacen nada. Aquí hay una muestra:
-A4
Item at A4 purchased. Remaining Balance: $1.00
JAM!!!
-punch
-kick
-kick
-punch
-punch
🍚
(El atasco se ha eliminado. Reanude de la forma habitual)
Bonificación (-10%): ID
Si el usuario intenta comprar una bebida alcohólica (cualquier artículo en la última fila, excepto el biberón), debe exigir un comprobante de edad. Para hacerlo, le pide al usuario que multiplique dos números aleatorios entre 13 y 19 (inclusive). Salida ID required: [13-19]x[13-19] = ?
. Si el usuario responde correctamente, la compra puede realizarse. Si no, imprima 🔞 (U + D83D U + DD1E) base 10: (55357 56606)
Desafío alternativo: Minecraft
Este desafío parece algo posible en Minecraft. Para crear con éxito una versión de Minecraft de este programa, el jugador debe
- Tenga una cuadrícula de 8x7 para seleccionar entre 56 artículos únicos
- Sea capaz de agregar dinero al saldo (tal vez use diferentes tipos de piedras para las diferentes denominaciones descritas anteriormente).
- Déle al usuario el artículo que él / ella selecciona si ha puesto suficiente "dinero"
- Devuelva al usuario la cantidad apropiada de cambio al final.
Modo de compatibilidad
Solo puedo tomar información al comienzo del programa
- No se preocupe, puede hacer un programa que tome todas las entradas por adelantado. Si su programa no ha finalizado después de evaluar todas las entradas, suponga que se llama "Listo" al final. Si hace este método, no será elegible para ningún bono.
No puedo ver / generar emojis
- Puede copiar y pegar su entrada y salida en este fragmento de pila (o aquí ). Puede comprender tanto emojis unicode como códigos HTML para emojis. Si su salida se ve correcta en esta página, su programa pasa. Intente pegar algunas de las entradas / salidas de muestra para ver cómo se ve.
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>
Aquí hay una versión abreviada en modo de compatibilidad de la pantalla de la máquina expendedora que puede probar en el Fragmento de pila:
1⃣2⃣3⃣4⃣5⃣...
A🍅🍆🍇🍈🍉...
B
...
Puedo generar emojis, pero no STDOUT.
- Aparentemente, la Terminal Mac OS X es la única que se sabe que puede generar emojis. Si no puede generar emojis en su terminal, sus otras opciones son
- Enviar toda la salida a un archivo.
- Mostrar todos los resultados en una ventana.
- Use la técnica descrita en "No puedo ver / generar emojis".
- Aparentemente, la Terminal Mac OS X es la única que se sabe que puede generar emojis. Si no puede generar emojis en su terminal, sus otras opciones son
$ can be replaced with your local currency
no tiene mucho sentido si luego requiere que las monedas sean (N) ickels (D) imes y (Q) uarters. Le sugiero que lo elimine, ya que agrega confusión.$
símbolo es parte del conjunto de caracteres ASCII, por lo que es seguro asumir que casi todos los teclados e idiomas pueden manejarlo. Es el único símbolo de moneda en el conjunto de caracteres ASCII de 7 bits. Como resultado, otros símbolos como el símbolo GBP o el símbolo EUR € pueden representarse incorrectamente debido a codificaciones de cadenas incompatibles, pero prácticamente nunca sucede con$
.$
símbolo tiene un significado especial en la mayoría de los lenguajes de programación, por lo que no tenerlo disponible en el teclado sería una seria limitación. Estoy escribiendo esto en mi teclado español y en realidad es más fácil obtener $ (shift + 4) que € (alt gr + E) para que pueda ver que este último símbolo se agregó como una ocurrencia tardía.Respuestas:
PHP, (1295 - 14) - 25% = 960.75 caracteres
Puntajes antiguos
1315135113611295989977Eso fue divertido, y es la primera respuesta, sí.
Como las máquinas expendedoras me recuerdan los años 90 que usaba
goto
y para los artículos comprados se muestra el Space Invader👾
. La máquina se vuelve a dibujar después de cada comando.Sin golf (de alguna manera)
👾 Probado en OS X con PHP 5.5 y 5.6 👾
Ediciones
Done
y golf algunas cuerdas.[A-Z][0-9]
) paraInvalid code
..=
en=
aplicables.fuente
J5
, debería recibir el mensaje: "Código no válido".Invalid code
ahora. Es un desafío divertido, a pesar de que tiene muchas opciones ... 1K personajes hablan por sí mismos ... :)C # 6 (.Net Framework 4.6),
135613241304131113071238123512311220 Letras - 14 Letras (Números Emoji) - (15% Bono Jam + 10% Bono ID) =1017993978972.75969.75918915.75904.5 Letrasun poco más sin golf para usar en LinqPad 5 (C # 6). Use h = System.Console en F4.
editar: gracias por la sugerencia for (;;);)
editar: Strike !! Mejor que PHP ;-)
editar: Eliminado 24 letras. Todavía queda algo para php.
editar: Se eliminaron 20 letras al cambiar de decimal a doble.
editar: Se eliminaron 7 letras al cambiar a los números de Emoji
editar: Se eliminaron 4 letras al cambiar todo a doble en lugar de una combinación de doble e int.
editar: Se eliminaron 69 letras - se encontró código muerto o_O Mejor entrada C #: D
editar: Se eliminaron 3 letras - se cambió la última instrucción if-else
editar: Se eliminaron 4 letras - se cambió de operadores de cortocircuito (&& y ||) a normal & y |
editar: Se eliminaron 11 letras: se cambió de h.WriteLine a w () con una cadena textual condicional.
fuente
??
.