¿Necesitas un portavasos?

8

Vas a replicar el software de broma del portavasos de los 90.

Esto es lo que hizo, y tienes que hacer:

  • Mostrar el mensaje Do you need a cup holder?
  • Si el usuario confirma, ingrese un bucle infinito que sigue abriendo la unidad de CDROM.
  • Si el usuario no confirma, salga silenciosamente.

Puede mostrar el mensaje utilizando un mensaje de consola (la confirmación es y, rechazar es n) o mostrar una ventana de mensaje con las dos opciones "Sí" y "No". Puede asumir la unidad de CDROM predeterminada (o la más común) ( D:en Windows, /cdromen Linux, etc.). Las lagunas estándar (excepto las incorporadas) están prohibidas. No se pueden involucrar entradas ni salidas adicionales. Si su PC no tiene una unidad física u otro "estilo" de bandeja, asegúrese de que el programa sea válido.

, por lo que gana el programa más corto en bytes.

Trivia: el bucle está ahí para evitar que alguien cierre el disco. En las unidades de escritorio, el comando de reapertura se enviará mientras la unidad se está cerrando, por lo tanto, permanece abierto y no "derrama el café".

mınxomaτ
fuente
2
Menos la llamada necesaria al sistema de expulsión de CD, creo que esto es sorprendentemente similar a codegolf.stackexchange.com/questions/62732/…
Digital Trauma
44
Creo que el requisito de interactuar con el hardware lo hace lo suficientemente distinto de Implementar una máquina de la verdad.
Alex A.
FYI meta.codegolf.stackexchange.com/a/8214/8478 (específicamente "tener cadenas de salida fijas largas que se benefician de la compresión").
Martin Ender

Respuestas:

4

Bash, 115 69 68 66 bytes

Esto fue escrito en Mac OS X pero también debería funcionar en otros sistemas basados ​​en BSD.

echo Do you need a cup holder?;sed 1q|grep y&&yes drutil\ eject|sh

Hacemos echoun aviso, recibimos información set 1qy determinamos si el usuario confirmó con grep y. Si el usuario dijo y, canalizamos la salida infinita de yescon la cadena drutil ejectal shell, que expulsará continuamente la bandeja del disco.

¡Ahorró 50 bytes gracias a Digital Trauma!

Alex A.
fuente
1
@ DigitalTrauma ¡Eres el maestro de bash!
Alex A.
¿Puedes guardar bytes reemplazando el sedy grepcon read?
CousinCocaine
¿No debería ser drutil tray eject?
Addison Crump
@VoteToClose drutil ejectes sinónimo de drutil tray open. Funciona como se esperaba. ;)
Alex A.
1
@CousinCocaine que estaba usando readen una revisión anterior, pero luego necesitaría un control de igualdad, lo que lo hace más largo en general. Puedes echar un vistazo al historial de revisiones para ver a qué me refiero.
Alex A.
4

Vitsy + Mac OSX bash, 55 bytes

'?redloh puc a deen uoy oD'ZWb2^/([1m]
<,'drutil eject'

Espera entrada como y o n. Si es n, ejecutará la línea 2 (bucle infinito con el comando de shell), de lo contrario, se detendrá.

Addison Crump
fuente
2

Python (3.5) 84 bytes

import os
i=input("Do you need a cup holder?")
while i=='y':os.system("eject cdrom")

En linux

editar: corregir el recuento de bytes;)

Erwan
fuente
FYI: Me di cuenta de esto porque estoy usando este script , que (entre otras cosas) agrega un contador de bytes / caracteres sobre bloques de código en PPCG.
3D1T0R
0

AutoIt , 85 bytes

If MsgBox(4,0,"Do you need a cup holder?")=7 Then Exit
Do
CDTray("D:","open")
Until 0

Nadie responderá nada en AutoIt de todos modos :)

mınxomaτ
fuente
0

Python 3.5 en Windows 7, 135 bytes

import ctypes
r=input('Do you need a cup holder?')
while r=='y':ctypes.windll.WINMM.mciSendStringW('set cdaudio door open',None,0,None)
MrGeek
fuente