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 VACANCY
serão impressas em vermelho.
Se T ≥ 200, as letras de NO
também serão impressas em vermelho.
Por exemplo, supondo que a.out
seja seu programa e "input" = argumento da linha de comando: (digitei e meu sistema ignora maiúsculas e minúsculas).
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[31m
funcionará. - 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
NO
devem 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 code-golf , 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>
Respostas:
Geléia ,
2926 bytesIsso usa
<CSI>
( 0x9b ), que é menor que<ESC>[
( 0x1b 0x5b ).Ele redefine a cor do primeiro plano com em
<CSI>m
vez 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.
Como funciona
fonte
Javascript (ES6), 60 bytes
(Abra o console do navegador enquanto executa o snippet para ver o resultado colorido.)
fonte
NO%c VACANCY color:red
?console.log()
como as regras especificam que os retornos são bons, você não precisa definir a função também.Ruby (* terminal no estilo nix),
5448454443 bytes1 byte economizado graças ao Value Ink
␛
significa um byte esc literal (ASCII 27)Uma porta da minha resposta python, que é
um bytevários bytes mais curto. Eu sou novo no ruby golf, mas estou ansioso para aprender, portanto o feedback é apreciado.fonte
->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 ep
pode ser usada como um substitutonil
.Python 3 (* terminal no estilo nix),
5554 bytesIsso usa códigos de escape ANSI.
\033[31m
Torna o terminal vermelho. Se x for menor que 200, começaremos com um tornandoNO
vermelho; caso contrário, teremos um apósNO
torná-lo vermelho de qualquer maneira. Quando terminamos,\033[m
limpa a cor do terminal.fonte
HTML,
7271 bytesfonte
Java (OpenJDK 9) ,
102898851 bytesSim Java. : P Isso funciona apenas em terminais * nix.
fonte
bash, 41 bytes
onde ␛ representa um caractere ESC literal (ASCII \ 033).
fonte
Go ,
8281 bytesIsso funciona apenas em terminais * nix.
Gostaria de saber como seria fácil portar isso para Java ...Feito.fonte
BASH / MKSH,
48 4746 bytesNota: ^ [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.
fonte
Excel VBA,
767372 bytesFunção de janela imediata anônima do VBE que recebe a entrada do tipo esperado
Integer
da célula[A1]
e gera um sinal de (NÃO) VACANCY nas célulasA2:B2
-3 bytes para mudar
rgbRed
para255
fonte
iif
e isso retorna o valor correto se a entrada for igual a 200?[A1]>200
me faz pensar o contrário.iif
(abreviado dei
nlineif
), no entanto, você está certo que deve ser>199
uma>200
boa captura!HTML + CSS + JavaScript (ES6),
7459 bytesRecebe entrada como argumento de função de
f
, comof(100)
.HTML
CSS
JavaScript (ES6)
Snippet de teste
fonte
f=a=>n.id=a>199&&"r"
j,#r
para salvar 3 bytes.Haskell ,
5453 bytesEDITAR:
0
argumento na sequência de escape final pode ser descartado.f
pega um número inteiro e retorna uma string. Use comoputStrLn$f 200
.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 0
para 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:fonte
f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m"
.concat
era mais curto do queid=<<
por causa dos parênteses.Script Bash, 60 bytes
fonte
Bash script, 64 bytes
.Mathematica, 67 bytes
ou (60 bytes, mas pode ser considerado trapaça)
Na verdade
Times["NO","VACANCY"]
, isso parece estar correto.fonte
BASH, 100 bytes
Provavelmente isso pode ser praticado, mas estou com pouco tempo. Voltarei a isso mais tarde.
-5 bytes graças a @R. Kap
fonte
if [ $1 -le 200 ]
porif(($1<200))
salva 5 bytes e corrige o erro da saída que não aparece em vermelho com uma entrada de200
.Mathematica, 47 bytes
fonte
C (* terminal estilo nix),
50555251 bytes-1 graças ao Assistente de Trigo
␛ significa o literal byte ESC, ASCII 27.
Ligue com
f(200)
, sendo 200 o número. ImprimeNO VACANCY
colorido de acordo com as especificações.fonte
␛[0m
to␛[m
PHP, 41 bytes
␛ represents the Escape character.
fonte
shortC, 48 bytes
Where ␛ stands for ASCII 27, the ESCAPE byte.
fonte
GW-BASIC,
787465 bytes-12 thanks to Orjan Johansen
Prompts user for an integer. Output:
fonte
:
?BASICA
para obter algo próximo o suficiente, embora possa não ter cor.PRINT
. No entanto, você não precisa de espaços após os números das linhas ePRINT
pode ser abreviado para?
.?
=PRINT
. Updating...x
.Tcl/Tk, 96 bytes
fonte