Todos hemos visto las señales en los moteles que nos dicen si hay una vacante o no:
Por lo general, estos tendrán permanentemente las letras de VACANTE iluminadas y las letras de NO iluminadas si no hay espacio en el motel.
El reto
El motel promedio en los Estados Unidos tiene 200 habitaciones.
Escribirás un programa / función que tome un entero T (para habitaciones ocupadas) como su única entrada.
Su programa mostrará las palabras NO VACANCY
. Las letras de VACANCY
se imprimirán en rojo.
Si T ≥ 200, las letras de NO
también se imprimirán en rojo.
Por ejemplo, suponiendo que a.out
es su programa y "input" = argumento de línea de comando: (Escribí y mi sistema ignora mayúsculas y minúsculas).
Las normas
- Su programa / función debe mostrar (o, si es lambda, devolver ) la cadena exacta
NO VACANCY
, incluido el caso. - Su programa / función solo puede establecer el color de primer plano del texto en rojo y no el fondo.
- Si lo desea, puede usar códigos de escape ANSI para imprimir el color rojo
\x1b[31m
, funcionará. - Es posible que su programa / función no cambie el color del texto de su shell después de que finalice.
- Su programa / función debe finalizar normalmente.
- Su programa / función debe imprimir solo a la salida estándar.
- Su programa / función debe usar el color de fondo predeterminado de su shell / terminal / IDE. (Si elige tener una salida gráfica, puede elegir el color que desee, excepto el rojo).
- Si T ≤ 200, las letras de
NO
deben imprimirse en el color de primer plano predeterminado de su shell / terminal / IDE. (Si elige tener salida gráfica, una vez más puede elegir el color que desee) - Si por alguna razón el color de primer plano / fondo predeterminado de su shell / terminal / IDE es rojo, debe imprimir con un fondo negro y un primer plano blanco predeterminado.
- Si elige usar la salida gráfica, el rojo solo se puede usar cuando se especifica en el programa (por ejemplo, el color de fondo o el color de texto predeterminado pueden no ser rojos).
El ganador
Como es habitual con code-golf , ¡el programa más corto gana! Puntos de brownie para salida gráfica.
Aceptaré la respuesta más corta en una semana. ¡Feliz golf!
Tabla de clasificación
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>
Respuestas:
Jalea ,
2926 bytesEsto usa
<CSI>
( 0x9b ), que es más corto que<ESC>[
( 0x1b 0x5b ).Restablece el color de primer plano con en
<CSI>m
lugar de<CSI>0m
, ya que el 0 es implícito.Verificación
Tenga en cuenta que su emulador de terminal (p. Ej., Konsole) debe establecerse en ISO 8859-1 o similar.
Cómo funciona
fuente
Javascript (ES6), 60 bytes
(Abra la consola de su navegador mientras ejecuta el fragmento para ver el resultado coloreado).
fuente
NO%c VACANCY color:red
?console.log()
ya que las reglas especifican que los retornos están bien, no es necesario que defina la función también.Ruby (* terminal de estilo nix),
5448454443 bytes1 byte guardado gracias a Value Ink
␛
representa un byte de esc literal (ASCII 27)Un puerto de mi respuesta de Python, que es
un bytevarios bytes más corto. Soy nuevo en Ruby Golf pero estoy ansioso por aprender, por lo que agradezco sus comentarios.fuente
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}
Guarda un byte. El truco es el hecho de que, en la interpolación de cadenas,"#{nil}"
se evaluará como una cadena vacía yp
se puede usar como sustituto denil
.Python 3 (* terminal de estilo nix),
5554 bytesEsto usa códigos de escape ANSI.
\033[31m
Hace que la terminal sea roja, si x es menor que 200, comenzaremos con unaNO
roja, de lo contrario tendremos una después deNO
hacerlo roja de todos modos. Cuando terminamos,\033[m
borra el color del terminal.fuente
HTML,
7271 bytesfuente
Java (OpenJDK 9) ,
102898851 bytesSi Java. : P Esto solo funciona en terminales * nix.
fuente
bash, 41 bytes
donde ␛ representa un carácter ESC literal (ASCII \ 033).
fuente
Ir ,
8281 bytesEsto solo funciona en terminales * nix.
Me pregunto qué fácil sería portar esto a Java ...Hecho.fuente
BASH / MKSH,
48 4746 bytesNota: ^ [significa 1 byte de carácter ESC: 0x1b o decimal 27.
^ M significa 1 byte de ancho de carácter CR: 0x0d, decimal 13.
fuente
Excel VBA,
767372 BytesFunción de ventana inmediata anónima VBE que toma la entrada del tipo esperado
Integer
de la celda[A1]
y emite un signo (NO) VACANCY a través de las celdasA2:B2
-3 bytes para cambiar
rgbRed
a255
fuente
iif
, y esto devuelve el valor correcto si la entrada es igual a 200?[A1]>200
me hace pensar lo contrario.iif
(abreviado dei
nlineif
), sin embargo, tienes razón, ¡eso debería ser>199
más que una>200
buena captura!HTML + CSS + JavaScript (ES6),
7459 bytesToma la entrada como argumento de función de
f
, comof(100)
.HTML
CSS
JavaScript (ES6)
Fragmento de prueba
fuente
f=a=>n.id=a>199&&"r"
j,#r
para guardar 3 bytes.Haskell ,
5453 bytesEDITAR:
0
argumento en la secuencia de escape final se puede descartar.f
toma un entero y devuelve una cadena. Usar comoputStrLn$f 200
.Pruébalo en línea!Por desgracia, los colores no se muestran en TIO, pero puede ver que los códigos ANSI están colocados correctamente.
El golf pareció agotarse bastante rápido con este, ni siquiera nombrar las cuerdas de escape parece salvar algo. El bit más inteligente es recurrente
f 0
para usar la otra rama como una subcadena. Tres intentos diferentes de usar las comprensiones de listas resultaron un byte más. Quizás lo mejor que encontré:fuente
f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m"
.concat
era más corto queid=<<
por los paréntesis.Bash script, 60 bytes
fuente
Bash script, 64 bytes
.Mathematica, 67 bytes
o (60 bytes, pero puede considerarse trampa)
Esto es realmente
Times["NO","VACANCY"]
, pero parece ser correcto.fuente
BASH, 100 bytes
Probablemente se pueda jugar golf, pero tengo poco tiempo. Volveré a esto más tarde.
-5 bytes gracias a @R. Kap
fuente
if [ $1 -le 200 ]
conif(($1<200))
ahorra 5 bytes y corrige el error de la salida que no aparece en rojo con una entrada de200
.Mathematica, 47 bytes
fuente
C (* terminal estilo nix),
50555251 bytes-1 gracias a Wheat Wizard
␛ representa el byte ESC literal, ASCII 27.
Llame con
f(200)
200 siendo el número. ImpresionesNO VACANCY
coloreadas a la especificación.fuente
␛[0m
a␛[m
PHP, 41 bytes
␛ representa el personaje de Escape.
fuente
shortC , 48 bytes
Donde ␛ representa ASCII 27, el byte ESCAPE.
fuente
GW-BASIC ,
787465 bytes-12 gracias a Orjan Johansen
Solicita al usuario un número entero. Salida:
fuente
:
?BASICA
para acercarse lo suficiente, aunque puede que no tenga color.PRINT
. Sin embargo, no necesita espacios después de los números de línea, yPRINT
puede abreviarse como?
.?
=PRINT
. Actualizando ...x
.Tcl / Tk, 96 bytes
fuente