Você precisa de um suporte de copo?

8

Você vai replicar o software da piada do porta-copos dos anos 90.

Aqui está o que ele fez e você precisa fazer:

  • Exibir a mensagem Do you need a cup holder?
  • Se o usuário confirmar, insira um loop infinito que continua abrindo a unidade de CDROM.
  • Se o usuário não confirmar, saia silenciosamente.

Você pode exibir a mensagem usando uma mensagem do console (a confirmação é y, o declínio é n) ou pode exibir uma janela de mensagem com as duas opções "Sim" e "Não". Você pode assumir a unidade de CD-ROM padrão (ou mais comum) ( D:no Windows, /cdromno Linux etc.). As brechas padrão (exceto as incorporadas) são proibidas. Nenhuma entrada ou saída adicional pode estar envolvida. Se o seu PC não possui uma unidade física ou outro "estilo" de bandeja, verifique se o programa é válido.

, o programa mais curto em bytes vence.

Curiosidades: O loop existe para impedir que alguém feche a unidade. Nas unidades de área de trabalho, o comando reabrir será enviado enquanto a unidade estiver sendo fechada, permanecendo aberta e não "derramando café".

mınxomaτ
fonte
2
Menos a chamada necessária do sistema de ejeção de CD, acho que isso é muito semelhante ao codegolf.stackexchange.com/questions/62732/…
Digital Trauma
4
Penso que o requisito de interagir com o hardware torna isso suficientemente distinto de Implementar uma máquina da verdade.
Alex A.
FYI meta.codegolf.stackexchange.com/a/8214/8478 (especificamente "tendo longas seqüências de saída fixas que se beneficiam da compactação").
Martin Ender

Respostas:

4

Bash, 115 69 68 66 bytes

Isso foi escrito no Mac OS X, mas também deve funcionar em outros sistemas baseados em BSD.

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

Nós echosolicitamos, recebemos informações set 1qe determinamos se o usuário confirmou com grep y. Se o usuário disse y, canalizamos a saída infinita yescom a string drutil ejectpara o shell, que ejeta continuamente a bandeja do disco.

Economizou 50 bytes graças ao Digital Trauma!

Alex A.
fonte
1
@DigitalTrauma Você é o mestre do bash!
Alex A.
Você pode salvar bytes substituindo sede greppor read?
CousinCocaine
Não deveria ser drutil tray eject?
Addison Crump #
@VoteToClose drutil ejecté sinônimo de drutil tray open. Funciona como esperado. ;)
Alex A.
1
@CousinCocaine que eu estava usando readem uma revisão anterior, mas precisaria de uma verificação de igualdade, o que a torna mais longa no geral. Você pode dar uma olhada no histórico de revisões para entender o que quero dizer.
Alex A.
4

Vitsy + Mac OSX bash, 55 bytes

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

Espera entrada como y ou n. Se for n, executará a linha 2 (loop infinito com o comando shell), caso contrário, será interrompida.

Addison Crump
fonte
2

Python (3.5) 84 bytes

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

No linux

editar: corrigir contagem de bytes;)

Erwan
fonte
FYI: Eu notei isso porque estou usando esse script , que (entre outras coisas) adiciona um contador de bytes / char acima dos blocos de código no 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

Ninguém nunca responderá nada no AutoIt :)

mınxomaτ
fonte
0

Python 3.5 no 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
fonte