¿Vacante o no vacante?


17

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 VACANCYse imprimirán en rojo.
Si T ≥ 200, las letras de NOtambién se imprimirán en rojo.

Por ejemplo, suponiendo que a.outes su programa y "input" = argumento de línea de comando: (Escribí y mi sistema ignora mayúsculas y minúsculas).
ingrese la descripción de la imagen aquí

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 NOdeben 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 , ¡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>


2
Hay una regla en conflicto: en la captura de pantalla y por encima de ella, se dice que imprima NO en rojo "Si T ≥ 200". Más tarde, dice que imprima en el color predeterminado "Si T ≤ 200"
Arc676

2
@ Arc676 Vaya. Bueno, lógicamente, si el hotel tiene 200 habitaciones, entonces debe ser la primera descripción correcta.
Ørjan Johansen

3
Para obtener crédito adicional, hágalo por el Hotel Hilbert, que tiene un número infinito de habitaciones.
David Conrad

¿Son válidas estas salidas: i.imgur.com/221Qxgj.png ?
sergiol

@sergiol Sí, está bien.
MD XF

Respuestas:


8

Jalea , 29 26 bytes

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

Esto usa <CSI>( 0x9b ), que es más corto que <ESC>[( 0x1b 0x5b ).

Restablece el color de primer plano con en <CSI>mlugar 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.

captura de pantalla

Cómo 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 la consola de su navegador mientras ejecuta el fragmento para ver el resultado coloreado).

captura de pantalla

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


1
NO%c VACANCY color:red?
MD XF

1
@MDXF comprueba la consola de tu navegador real. el emulador de consola de fragmentos no lo admite.
nderscore

2
Oh, buena captura. +1
MD XF

2
Las reglas estándar de JS le permiten acortar esto enormemente. Elimine console.log()ya que las reglas especifican que los retornos están bien, no es necesario que defina la función también.
MayorMonty

44
@MayorMonty esta solución aprovecha específicamente la funcionalidad de console.log para crear el texto en color, por lo que me parecería extraño no incluirlo.
nderscore

8

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

1 byte guardado gracias a Value Ink

representa un byte de esc literal (ASCII 27)

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

Un puerto de mi respuesta de Python, que es un byte varios bytes más corto. Soy nuevo en Ruby Golf pero estoy ansioso por aprender, por lo que agradezco sus comentarios.


1
->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 y pse puede usar como sustituto de nil.
Value Ink

6

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

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

Esto usa códigos de escape ANSI. \033[31mHace que la terminal sea roja, si x es menor que 200, comenzaremos con una NOroja, de lo contrario tendremos una después de NOhacerlo roja de todos modos. Cuando terminamos, \033[mborra el color del terminal.


¡La multiplicación de la cadena de color en lugar de una condición es brillante!
Hubert Grzeskowiak

6

HTML, 72 71 bytes

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


10
Puede guardar 1 byte usando la redacción correcta ...
Neil

66
Oh mi ... necesito unas vacaciones.
GOTO 0

3
Una de las otras respuestas define CSS por separado. Si haces eso también, puedes guardar 7 caracteres con "<style>" (juego de palabras)
Hubert Grzeskowiak


3

bash, 41 bytes

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

donde ␛ representa un carácter ESC literal (ASCII \ 033).


1
multiplicación brillante!
Ipor Sircer,

3

Ir , 82 81 bytes

Esto solo funciona en terminales * nix. Me pregunto qué fácil sería portar esto a Java ... Hecho.

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

2
Veo venir un puerto Java.
MD XF

Ninja'd por 11 segundos. XD
totalmente humano

3

BASH / MKSH, 48 47 46 bytes

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

Nota: ^ [significa 1 byte de carácter ESC: 0x1b o decimal 27.

^ M significa 1 byte de ancho de carácter CR: 0x0d, decimal 13.


3

Excel VBA, 76 73 72 Bytes

Funció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

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

-3 bytes para cambiar rgbReda255


1
Lo siento si esto es incorrecto, no soy fluido con Excel. Pero, ¿quiso escribir iif, y esto devuelve el valor correcto si la entrada es igual a 200? [A1]>200me hace pensar lo contrario.
MD XF

1
@MDXF Sí, quise escribir iif(abreviado de inline if), sin embargo, tienes razón, ¡eso debería ser >199más que una >200buena captura!
Taylor Scott,

2

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

Toma la entrada como argumento de función de f, comof(100) .

HTML

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

CSS

#r{color:red

JavaScript (ES6)

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

Fragmento de prueba

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, ese soporte rizado no cerrado es horrible ...
Beta Decay

@BetaDecay HAHA! Jajaja :RE
Arjun

@BetaDecay Me siento contigo ... Duele en el fondo de tu código de nivel de ensamblaje <s> heart </s> ...
Roman Gräf

1
-1:f=a=>n.id=a>199&&"r"
nderscore

Deshágase de la identificación del segundo elemento y configure el selector de reglas CSS j,#rpara guardar 3 bytes.
Hubert Grzeskowiak

2

Haskell , 54 53 bytes

EDITAR:

  • -1 byte: De la respuesta de @ Dennis's Jelly, el 0argumento en la secuencia de escape final se puede descartar.

ftoma un entero y devuelve una cadena. Usar como putStrLn$f 200.

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

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 0para 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é:

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

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

@Laikoni Oh! Estaba tan cerca de eso, pero de alguna manera nunca me di cuenta que concatera más corto que id=<<por los paréntesis.
Ørjan Johansen

@Laikoni Con el consejo de Dennis, eso también es de 53 bytes.
Ørjan Johansen

2

Bash script, 60 bytes

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

44
Para que lo sepas, el usuario de la comunidad emitió automáticamente el voto negativo cuando se editó tu respuesta. Considero que esto es un error .
Dennis

La entrada @MDXF es a través de argumentos de línea de comandos.
Dennis

@ Dennis Ah, mi mal. Es posible que desee cambiar el encabezado a Bash script, 64 bytes.
MD XF

A menos que literalmente realice cientos de ediciones, puede editar su respuesta cada vez que tenga una idea. Las ediciones dentro de la misma ventana de 5 minutos se agrupan en una sola revisión de todos modos.
Dennis

1
Esto no restablece el color del terminal al final, lo cual es obligatorio.
Post Rock Garf Hunter

1

Mathematica, 67 bytes

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

o (60 bytes, pero puede considerarse trampa)
Esto es realmente Times["NO","VACANCY"], pero parece ser correcto.

(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'

Probablemente se pueda jugar golf, pero tengo poco tiempo. Volveré a esto más tarde.

-5 bytes gracias a @R. Kap


Reemplazar if [ $1 -le 200 ]con if(($1<200))ahorra 5 bytes y corrige el error de la salida que no aparece en rojo con una entrada de 200.
R. Kap

@ R.Kap Gracias. Sin embargo, OP solicitó un color predeterminado por menos de 200
Arc676

No, OP solicitó todas las salidas rojas para entradas mayores o iguales 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 gracias a Wheat Wizard

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

␛ representa el byte ESC literal, ASCII 27.

Llame con f(200)200 siendo el número. Impresiones NO VACANCYcoloreadas a la especificación.


En mi terminal, eso rompe tu regla de que no debería cambiar el color del texto del shell.
Ørjan Johansen

@ ØrjanJohansen fijo. Olvidé que ejecuto un shell personalizado que establece automáticamente el color.
MD XF

Puede cambiar ␛[0ma␛[m
Post Rock Garf Hunter

1

PHP, 41 bytes

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

␛ representa el personaje de Escape.


0

shortC , 48 bytes

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

Donde ␛ representa ASCII 27, el byte ESCAPE.


0

GW-BASIC , 78 74 65 bytes

-12 gracias a Orjan Johansen

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

Solicita al usuario un número entero. Salida:

salida


Hm no puede encontrar un intérprete en línea, pero ¿no se pueden unir las líneas 1 y 2 :?
Ørjan Johansen

@ ØrjanJohansen Wow ... no puedo creer que me haya perdido completamente eso. Gracias, y sí, no hay intérpretes en línea. Sin embargo, puede usar el primer emulador en pcjs.org y escribir BASICApara acercarse lo suficiente, aunque puede que no tenga color.
MD XF

Suponiendo que el emulador es lo suficientemente bueno: necesita una nueva línea antes de la primera PRINT. Sin embargo, no necesita espacios después de los números de línea, y PRINTpuede abreviarse como ?.
Ørjan Johansen

@ ØrjanJohansen NO MANERA. He usado Microsoft BASIC durante ocho años y nunca he sabido sobre ?= PRINT. Actualizando ...
MD XF

Se perdió los espacios de números de línea y parece tener una minúscula perdida 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]

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.