Vaga ou nenhuma vaga?


17

Todos nós vimos as placas nos motéis nos dizendo se há uma vaga ou não:

Normalmente, estas terão permanentemente as letras de VACANCY acesas e as letras de NÃO , se não houver espaço no motel.

O desafio

O motel médio nos EUA tem 200 quartos.

Você escreverá um programa / função que usa um número inteiro T (para salas ocupadas) como sua única entrada.
Seu programa exibirá as palavras NO VACANCY. As letras de VACANCYserão impressas em vermelho.
Se T ≥ 200, as letras de NOtambém serão impressas em vermelho.

Por exemplo, supondo que a.outseja seu programa e "input" = argumento da linha de comando: (digitei e meu sistema ignora maiúsculas e minúsculas).
insira a descrição da imagem aqui

As regras

  • Seu programa / função deve exibir (ou, se lambda, retornar ) a sequência exata NO VACANCY, incluindo maiúsculas e minúsculas.
  • Seu programa / função pode definir apenas a cor do primeiro plano do texto para vermelho e não para o segundo plano.
  • Se desejar, você pode usar códigos de escape ANSI para imprimir a cor vermelha - \x1b[31mfuncionará.
  • Seu programa / função não pode alterar a cor do texto do seu shell após o término.
  • Seu programa / função deve terminar normalmente.
  • Seu programa / função deve imprimir apenas na saída padrão.
  • Seu programa / função deve usar a cor de fundo padrão do shell / terminal / IDE. (Se você optar pela saída gráfica, poderá escolher a cor que desejar, exceto o vermelho.)
  • Se T ≤ 200, as letras de NOdevem ser impressas na cor de primeiro plano padrão do shell / terminal / IDE. (Se você optar por obter saída gráfica, mais uma vez poderá escolher a cor que desejar)
  • Se, por algum motivo, a cor padrão do primeiro plano / plano de fundo do shell / terminal / IDE for vermelha, imprima com um plano de fundo preto e um primeiro plano branco padrão.
  • Se você optar por usar a saída gráfica, o vermelho poderá ser usado apenas quando especificado no programa (por exemplo, a cor do plano de fundo ou a cor do texto padrão podem não ser vermelhas).

O vencedor

Como de costume no , o programa mais curto vence! Brownie aponta para saída gráfica.
Aceito a resposta mais curta em uma semana. Feliz golfe!

Entre os melhores

var QUESTION_ID=123146,OVERRIDE_USER=61563;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


2
Há uma regra conflitante: na imagem acima, ela diz para imprimir NÃO em vermelho "If T ≥ 200". Mais tarde, você diz para imprimir na cor padrão "If T ≤ 200"
Arc676

2
@ Arc676 Ops. Bem, logicamente, se o hotel tiver 200 quartos, deve ser a primeira descrição correta.
Ørjan Johansen

3
Para crédito extra, faça-o no Hilbert Hotel, que possui um número infinito de quartos.
David Conrad

Essas saídas são válidas: i.imgur.com/221Qxgj.png ?
sergiol

@ Bergiol Sim, tudo bem.
MD XF

Respostas:


8

Geléia , 29 26 bytes

<200o-“NO“ɓ31m”m“=ȤŻ»Œu“ɓm

Isso usa <CSI>( 0x9b ), que é menor que <ESC>[( 0x1b 0x5b ).

Ele redefine a cor do primeiro plano com em <CSI>mvez de <CSI>0m, pois o 0 está implícito.

Verificação

Observe que o emulador de terminal (por exemplo, Konsole) deve estar definido como ISO 8859-1 ou similar.

captura de tela

Como funciona

<200o-“NO“ɓ31m”m“=ȤŻ»Œu“ɓm  Main link. Argument: n (integer)

<200                        Compare with 200, yielding 1 if true, 0 if not.
    o-                      Logical OR -1; map 0 to -1 (and 1 to 1).
      “NO“ɓ31m”             Yield ["NO", "\x9b31m"].
               m            Take the list "modulo" 1 or -1, keeping it as is for 1,
                            reversing it for -1.
                “=ȤŻ»       Implicitly print the previous result and yield the
                            string " vacancy". This is achieved by indexing into
                            Jelly's in-built dictionary.
                     Œu     Convert to uppercase.
                       “ɓm  Implicitly print the previous result and yield the
                            string "\x9bm", which is printed on exit.

11

Javascript (ES6), 60 bytes

(Abra o console do navegador enquanto executa o snippet para ver o resultado colorido.)

captura de tela

f=
n=>console.log((n>199?'%cNO':'NO%c')+' VACANCY','color:red')
<input oninput=f(this.value)>


11
NO%c VACANCY color:red?
MD XF

11
O @MDXF verifica o console do navegador atual. o emulador de console do snippet não é compatível.
Ndscore

2
Oh, boa captura. +1
MD XF

2
As regras JS padrão permitem que você reduza muito isso. Remova console.log()como as regras especificam que os retornos são bons, você não precisa definir a função também.
MayorMonty

4
@ MayorMonty, esta solução tira proveito específico da funcionalidade console.log para criar o texto colorido, então eu me sentiria estranho se não o incluísse.
Nderscore # 29/17

8

Ruby (* terminal no estilo nix), 54 48 45 44 43 bytes

1 byte economizado graças ao Value Ink

significa um byte esc literal (ASCII 27)

->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}

Uma porta da minha resposta python, que é um byte vários bytes mais curto. Eu sou novo no ruby ​​golf, mas estou ansioso para aprender, portanto o feedback é apreciado.


11
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}salva um byte. O truque é o fato de que, na interpolação de cadeias, "#{nil}"será avaliada como uma cadeia vazia e ppode ser usada como um substituto nil.
Value Ink

6

Python 3 (* terminal no estilo nix), 55 54 bytes

lambda x:"\033[31m"*(x-199)+"NO\033[31m VACANCY\033[m"

Isso usa códigos de escape ANSI. \033[31mTorna o terminal vermelho. Se x for menor que 200, começaremos com um tornando NOvermelho; caso contrário, teremos um após NOtorná-lo vermelho de qualquer maneira. Quando terminamos, \033[mlimpa a cor do terminal.


A multiplicação da sequência de cores em vez de uma condição é brilhante!
Hubert Grzeskowiak

6

HTML, 72 71 bytes

<input min=200 type=number><x>NO <y>VACANCY<style>:valid+x,y{color:red}


10
Você pode salvar 1 byte, usando o texto correto ...
Neil

6
Oh meu ... eu preciso de férias.
GOTO 0

3
Uma das outras respostas define o CSS separadamente. Se você fizer isso também, poderá salvar 7 caracteres com "<style>" (trocadilhos)
Hubert Grzeskowiak


3

bash, 41 bytes

echo ␛[$[($1>199)*31]mNO ␛[31mVACANCY␛[0m

onde ␛ representa um caractere ESC literal (ASCII \ 033).


11
multiplicação brilhante!
Ipor Sircer

3

Go , 82 81 bytes

Isso funciona apenas em terminais * nix. Gostaria de saber como seria fácil portar isso para Java ... Feito.

func f(x int)string{v:="NO\033[31m VACANCY\033[m";if(x>199){v=v[2:7]+v};return v}

2
Eu vejo uma porta Java chegando.
MD XF

Ninja'd por 11 segundos. XD
totallyhuman

3

BASH / MKSH, 48 47 46 bytes

(($1>199))&&a=^[[31m;echo $a^MNO ^[[31mVACANCY^[[m

Nota: ^ [significa um caracter ESC com 1 byte de largura: 0x1b ou decimal 27.

^ M significa um caractere CR de 1 byte de largura: 0x0d, 13 decimal.


3

Excel VBA, 76 73 72 bytes

Função de janela imediata anônima do VBE que recebe a entrada do tipo esperado Integerda célula [A1]e gera um sinal de (NÃO) VACANCY nas célulasA2:B2

[A2]="NO":[B2]="VACANCY":Range([If(A1>199,"A2:B2","B2")]).Font.Color=255

-3 bytes para mudar rgbRedpara255


11
Desculpe se isso estiver incorreto, não sou fluente em Excel. Mas você quis escrever iife isso retorna o valor correto se a entrada for igual a 200? [A1]>200me faz pensar o contrário.
MD XF

11
@MDXF Sim, eu pretendia escrever iif(abreviado de inline if), no entanto, você está certo que deve ser >199uma >200boa captura!
Taylor Scott

2

HTML + CSS + JavaScript (ES6), 74 59 bytes

Recebe entrada como argumento de função de f , como f(100).

HTML

<x id=n>NO <j id=r>VACANCY

CSS

#r{color:red

JavaScript (ES6)

f=a=>a>199?n.id="r":0

Snippet de teste

f=a=>a>199?n.id="r":0

f(prompt("Enter a number"))
#r{color:red
<x id=n>NO <j id=r>VACANCY


3
Gah esse suporte cacheado não fechado é horrível ...
Decay Beta

@BetaDecay HAHA! RI MUITO! : D
Arjun

@BetaDecay me sinto com você .... Dói no fundo do seu <s> coração </ s> código de montagem de nível ...
Roman Gräf

11
-1:f=a=>n.id=a>199&&"r"
nderscore 28/05

Livre-se do ID do segundo elemento e defina o seletor de regras CSS j,#rpara salvar 3 bytes.
Hubert Grzeskowiak

2

Haskell , 54 53 bytes

EDITAR:

  • -1 byte: Na resposta de @ Dennis's Jelly, o 0argumento na sequência de escape final pode ser descartado.

fpega um número inteiro e retorna uma string. Use como putStrLn$f 200.

f t|t>199="\27[31m"++f 0|0<1="NO \27[31mVACANCY\27[m"

Experimente online!Infelizmente, as cores não aparecem no TIO, mas você pode ver que os códigos ANSI estão corretamente colocados.

O golfe parecia esgotar-se rapidamente com esse - nem mesmo nomear as cordas de escape parece salvar alguma coisa. O bit mais inteligente está recorrendo f 0para usar o outro ramo como uma substring. Três tentativas diferentes de usar a compreensão da lista aumentaram em um byte a mais. Talvez o melhor que eu encontrei:

f t=foldr drop"\27[31mNO \27[31mVACANCY\27[m"[5|t<200]

Alternativa 54 bytes: f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m".
Laikoni 28/05

@Laikoni Oh! Eu estava tão perto disso, mas de alguma forma nunca percebi que concatera mais curto do que id=<<por causa dos parênteses.
Ørjan Johansen

@Laikoni Com a dica de Dennis, também são 53 bytes.
Ørjan Johansen

2

Script Bash, 60 bytes

c="\e[1;31m";((199<$1))&&printf $c;printf "NO$c VACANCY\e[m"

4
Para que você saiba, o voto negativo foi convertido automaticamente pelo usuário da Comunidade quando sua resposta foi editada. Eu considero isso um bug .
Dennis

A entrada @MDXF é via argumentos da linha de comando.
Dennis

@ Dennis Ah, meu mal. Você pode alterar o cabeçalho para Bash script, 64 bytes.
MD XF

A menos que você faça centenas de edições, você pode editar sua resposta sempre que tiver uma ideia. As edições na mesma janela de 5 minutos são agrupadas em uma única revisão de qualquer maneira.
Dennis

11
Isso não redefine a cor do terminal no final, o que é necessário.
Post Rock Garf Hunter

1

Mathematica, 67 bytes

Print[s=Style[#,FontColor->Red]&;If[#>200,s,#&]@"NO",s@" VACANCY"]&

ou (60 bytes, mas pode ser considerado trapaça)
Na verdade Times["NO","VACANCY"], isso parece estar correto.

(s=Style[#,FontColor->Red]&;If[#>200,s,#&]@"NO")s@"VACANCY"&

1

BASH, 100 bytes

if(($1<200));then
echo -n NO
else
echo -ne '\033[31mNO\033[0m'
fi
echo -e '\033[31m VACANCY\033[0m'

Provavelmente isso pode ser praticado, mas estou com pouco tempo. Voltarei a isso mais tarde.

-5 bytes graças a @R. Kap


Substituir if [ $1 -le 200 ]por if(($1<200))salva 5 bytes e corrige o erro da saída que não aparece em vermelho com uma entrada de 200.
R. Kap

@ R.Kap Obrigado. O OP solicitou a cor padrão para menos que ou igual a 200.
Arc676

Não, OP pediu para todos ouput vermelho para entradas igual ou superior a 200.
R. Kap

1

Mathematica, 47 bytes

(If[#>199,Style[NO,Red],NO]Style[VACANCY,Red])&

1

C (* terminal estilo nix), 50 55 52 51 bytes

-1 graças ao Assistente de Trigo

f(t){printf("␛[%dmNO ␛[31mVACANCY␛[m",t>199?31:0);}

␛ significa o literal byte ESC, ASCII 27.

Ligue com f(200), sendo 200 o número. Imprime NO VACANCYcolorido de acordo com as especificações.


No meu terminal, isso quebra sua regra de que não deve mudar a cor do texto do shell.
Ørjan Johansen

@ ØrjanJohansen Fixed. Esqueci que corro um shell personalizado que define automaticamente a cor.
MD XF

You can change ␛[0m to ␛[m
Post Rock Garf Hunter

1

PHP, 41 bytes

␛[<?=$argn<200?31:''?>mNO␛[31m VACANCY␛[m

␛ represents the Escape character.


0

shortC, 48 bytes

f(t){R"␛[%dmNO ␛[31mVACANCY␛[m",t>199?31:0

Where ␛ stands for ASCII 27, the ESCAPE byte.


0

GW-BASIC, 78 74 65 bytes

-12 thanks to Orjan Johansen

1INPUT X:IF X>199THEN COLOR 4
2?"NO ";:COLOR 4:?"VACANCY":COLOR 7

Prompts user for an integer. Output:

output


Hm can't find an online interpreter, but can't line 1 and 2 be joined with :?
Ørjan Johansen

@ ØrjanJohansen Wow ... não posso acreditar que perdi completamente isso. Obrigado, e sim, não há intérpretes online. No entanto, você pode usar o primeiro emulador no pcjs.org e digitar BASICApara obter algo próximo o suficiente, embora possa não ter cor.
MD XF

Supondo que o emulador seja bom o suficiente: você precisa de uma nova linha antes da primeira PRINT. No entanto, você não precisa de espaços após os números das linhas e PRINTpode ser abreviado para ?.
Ørjan Johansen

@ØrjanJohansen NO WAY. I've used Microsoft BASIC for eight years and I never new about ?=PRINT. Updating...
MD XF

You missed the line number spaces, and seem to have a stray lower case x.
Ørjan Johansen

0

Tcl/Tk, 96 bytes

grid [label .n -text NO -fg [expr \$argv>199?"red":"tan"]]
grid [label .v -text VACANCY -fg red]

enter image description here

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.