Vacance ou pas de vacance?


17

Nous avons tous vu les panneaux sur les motels nous indiquant s'il y a un poste vacant ou non:

En règle générale, ceux-ci auront en permanence les lettres de VACANCE allumées et les lettres de NON allumées s'il n'y a pas de place dans le motel.

Le défi

Aux États-Unis, un motel moyen compte 200 chambres.

Vous écrirez un programme / fonction qui prend un entier T (pour les salles occupées) comme seule entrée.
Votre programme affichera alors les mots NO VACANCY. Les lettres de VACANCYseront imprimées en rouge.
Si T ≥ 200, les lettres deNO seront également imprimées en rouge.

Par exemple, en supposant que a.outvotre programme est et "input" = argument de ligne de commande: (J'ai fait une faute de frappe et mon système ignore la casse.)
enter image description here

Les règles

  • Votre programme / fonction doit afficher (ou, si lambda, renvoyer ) la chaîne exacteNO VACANCY , y compris la casse.
  • Votre programme / fonction peut uniquement définir la couleur de premier plan du texte sur rouge et non sur l'arrière-plan.
  • Si vous le souhaitez, vous pouvez utiliser les codes d'échappement ANSI pour imprimer la couleur rouge - \x1b[31m cela fonctionnera.
  • Votre programme / fonction peut ne pas modifier la couleur du texte de votre shell une fois terminé.
  • Votre programme / fonction doit se terminer normalement.
  • Votre programme / fonction doit imprimer uniquement sur la sortie standard.
  • Votre programme / fonction doit utiliser la couleur d'arrière-plan par défaut de votre shell / terminal / IDE. (Si vous choisissez d'avoir une sortie graphique, vous pouvez choisir la couleur de votre choix, sauf le rouge.)
  • Si T ≤ 200, les lettres de NOdoivent être imprimées dans la couleur de premier plan par défaut de votre shell / terminal / IDE. (Si vous choisissez d'avoir une sortie graphique, vous pouvez à nouveau choisir la couleur de votre choix)
  • Si, pour une raison quelconque, la couleur par défaut du premier plan / arrière-plan de votre shell / terminal / IDE est rouge, vous devez imprimer avec un fond noir et un premier plan blanc par défaut.
  • Si vous choisissez d'utiliser la sortie graphique, le rouge ne peut être utilisé que s'il est spécifié dans le programme (par exemple, votre couleur d'arrière-plan ou la couleur de texte par défaut peut ne pas être rouge).

Le gagnant

Comme d'habitude avec le , le programme le plus court gagne! Points brownie pour la sortie graphique.
J'accepte la réponse la plus courte en une semaine. Bon golf!

Classement

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
Il existe une règle contradictoire: dans et au-dessus de la capture d'écran, il est indiqué d'imprimer NON en rouge "Si T ≥ 200". Plus tard, vous dites d'imprimer dans la couleur par défaut "Si T ≤ 200"
Arc676

2
@ Arc676 Oups. Eh bien, logiquement, si l'hôtel dispose de 200 chambres, ce doit être la première description qui est correcte.
Ørjan Johansen

3
Pour un crédit supplémentaire, faites-le pour l'hôtel Hilbert, qui dispose d'un nombre infini de chambres.
David Conrad

Ces sorties sont-elles valides: i.imgur.com/221Qxgj.png ?
sergiol

@sergiol Oui, ça va.
MD XF

Réponses:


8

Gelée , 29 26 octets

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

Cela utilise <CSI>( 0x9b ), qui est plus court que <ESC>[( 0x1b 0x5b ).

Il réinitialise la couleur de premier plan avec <CSI>mau lieu de <CSI>0m, car le 0 est implicite.

Vérification

Notez que votre émulateur de terminal (par exemple, Konsole) doit être réglé sur ISO 8859-1 ou similaire.

screenshot

Comment ça fonctionne

<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 octets

(Ouvrez la console de votre navigateur lors de l'exécution de l'extrait pour voir le résultat coloré.)

screenshot

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 vérifie votre console de navigateur actuelle. l'émulateur de console d'extrait ne le prend pas en charge.
nderscore

2
Oh, bonne prise. +1
MD XF

2
Les règles JS standard vous permettent de raccourcir considérablement cela. Supprimez console.log()car les règles spécifient que les retours sont corrects, vous n'avez pas besoin de définir la fonction également.
MayorMonty

4
@MayorMonty cette solution tire spécifiquement parti de la fonctionnalité console.log pour créer le texte en couleur, donc je me sentirais bizarre de ne pas l'inclure.
nderscore

8

Ruby (* terminal de style nix), 54 48 45 44 43 octets

1 octet économisé grâce à Value Ink

remplace un octet esc littéral (ASCII 27)

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

Un port de ma réponse python, c'est-à-dire un octet plus court de plusieurs octets. Je suis nouveau au golf rubis, mais j'ai hâte d'apprendre, donc les commentaires sont appréciés.


1
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}enregistre un octet. L'astuce est le fait que dans l'interpolation de chaîne, "#{nil}"sera évalué comme une chaîne vide et ppeut être utilisé comme substitut nil.
Value Ink

6

Python 3 (* terminal de style nix), 55 54 octets

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

Cela utilise des codes d'échappement ANSI. \033[31mRend le terminal rouge, si x est inférieur à 200, nous commencerons par un rendre NOrouge, sinon nous en aurons un après l'avoir NOrendu rouge de toute façon. Lorsque nous avons terminé, \033[mefface la couleur du terminal.


La multiplication de la chaîne de couleur au lieu d'une condition est brillante!
Hubert Grzeskowiak

6

HTML, 72 71 octets

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


10
Vous pouvez enregistrer 1 octet en utilisant la formulation correcte ...
Neil

6
Oh mon ... j'ai besoin de vacances.
GOTO 0

3
L'une des autres réponses définit CSS séparément. Si vous faites cela aussi, vous pourriez enregistrer 7 caractères avec "<style>" (jeu de mots voulu)
Hubert Grzeskowiak


3

bash, 41 octets

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

où ␛ représente un caractère ESC littéral (ASCII \ 033).


1
brillante multiplication!
Ipor Sircer

3

Aller , 82 81 octets

Cela ne fonctionne que sur les terminaux * nix. Je me demande combien il serait facile de porter cela sur Java ... Terminé.

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

2
Je vois arriver un port Java.
MD XF

Ninja'd de 11 secondes. XD
totalement humain

3

BASH / MKSH, 48 47 46 octets

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

Remarque: ^ [signifie un caractère ESC de 1 octet de large: 0x1b ou 27 décimal.

^ M signifie un caractère CR de 1 octet de large: 0x0d, décimal 13.


3

Excel VBA, 76 73 72 octets

Fonction de fenêtre immédiate VBE anonyme qui prend l'entrée du type attendu Integerde la cellule [A1]et émet un signe (NON) VACANCE à travers les cellulesA2:B2

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

-3 octets pour passer rgbRedà255


1
Désolé si c'est incorrect, je ne parle pas couramment Excel. Mais vouliez-vous écrire iif, et cela renvoie-t-il la valeur correcte si l'entrée est égale à 200? [A1]>200me fait penser le contraire.
MD XF

1
@MDXF Oui, je voulais vraiment écrire iif(en abrégé de inline if) cependant, vous avez raison, ce devrait être >199plutôt une >200bonne prise!
Taylor Scott

2

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

Prend l'entrée comme argument de fonction de f, comme 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

Extrait de test

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 cette parenthèse bouclée non fermée est horrible ...
Beta Decay

@BetaDecay HAHA! LOL! : D
Arjun

@BetaDecay Je me sens avec vous .... Ça fait mal au plus profond de votre <s> cœur </s> code de niveau d'assemblage ...
Roman Gräf

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

Débarrassez-vous de l'id du deuxième élément et définissez le sélecteur de règles CSS sur j,#rpour enregistrer 3 octets.
Hubert Grzeskowiak

2

Haskell , 54 53 octets

ÉDITER:

  • -1 octet: à partir de la réponse de @ Dennis's Jelly, l' 0argument de la séquence d'échappement finale peut être supprimé.

fprend un entier et retourne une chaîne. Utiliser comme putStrLn$f 200.

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

Essayez-le en ligne! Hélas, les couleurs n'apparaissent pas dans TIO, mais vous pouvez voir que les codes ANSI sont correctement placés.

Le golf semblait s'essouffler assez rapidement avec celui-ci - même le fait de ne pas nommer les cordes d'échappement ne semble rien sauver. Le bit le plus intelligent est récursif f 0pour utiliser l'autre branche comme sous-chaîne. Trois tentatives différentes d'utilisation des listes de compréhension se sont toutes révélées plus longues d'un octet. Peut-être le plus beau que j'ai trouvé:

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

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

@Laikoni Oh! J'étais si proche de cela, mais d'une manière ou d'une autre, je n'ai jamais remarqué que concatc'était plus court qu'à id=<<cause des parenthèses.
Ørjan Johansen

@Laikoni Avec la pointe de Dennis, c'est aussi 53 octets.
Ørjan Johansen

2

Script bash, 60 octets

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

4
Juste pour que vous le sachiez, le downvote a été automatiquement casté par l'utilisateur de la communauté lorsque votre réponse a été modifiée. Je considère cela comme un bug .
Dennis

@MDXF L'entrée se fait via des arguments de ligne de commande.
Dennis

@ Dennis Ah, ma mauvaise. Vous souhaiterez peut-être modifier l'en-tête Bash script, 64 bytes.
MD XF

Sauf si vous effectuez littéralement des centaines de modifications, vous pouvez modifier votre réponse chaque fois que vous avez une idée. Les modifications dans la même fenêtre de 5 minutes sont de toute façon regroupées dans une seule révision.
Dennis

1
Cela ne réinitialise pas la couleur du terminal à la fin, ce qui est requis.
Post Rock Garf Hunter

1

Mathematica, 67 octets

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

ou (60 octets, mais peut être considéré comme de la triche).
En fait Times["NO","VACANCY"], cela semble correct.

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

1

BASH, 100 octets

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

Cela peut probablement être joué au golf, mais je manque de temps. J'y reviendrai plus tard.

-5 octets grâce à @R. Kap


Le remplacement if [ $1 -le 200 ]par if(($1<200))sauvegarde 5 octets et corrige le bug de la sortie n'apparaissant pas en rouge avec une entrée de 200.
R. Kap

@ R.Kap Merci. OP a demandé une couleur par défaut inférieure ou égale à 200 cependant.
Arc676

Non, OP a demandé toutes les sorties rouges pour des entrées supérieures ou égales à 200.
R. Kap

1

Mathematica, 47 octets

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

1

C (* terminal de style nix), 50 55 52 51 octets

-1 grâce à Wheat Wizard

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

␛ représente l'octet ESC littéral, ASCII 27.

Appelez avec f(200), 200 étant le numéro. Impressions NO VACANCYcolorées selon les spécifications.


Dans mon terminal, cela enfreint votre règle selon laquelle il ne doit pas changer la couleur du texte du shell.
Ørjan Johansen

@ ØrjanJohansen Fixed. J'ai oublié que je lance un shell personnalisé qui définit automatiquement la couleur.
MD XF

Vous pouvez changer ␛[0mpour␛[m
Post Rock Garf Hunter

1

PHP, 41 octets

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

␛ représente le caractère d'échappement.


0

shortC , 48 octets

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

Où ␛ représente ASCII 27, l'octet ESCAPE.


0

GW-BASIC , 78 74 65 octets

-12 grâce à Orjan Johansen

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

Invite l'utilisateur à saisir un entier. Production:

output


Hm ne peut pas trouver d'interprète en ligne, mais ne peut-on pas joindre les lignes 1 et 2 :?
Ørjan Johansen

@ ØrjanJohansen Wow ... ne peux pas croire que j'ai complètement raté ça. Merci, et oui, il n'y a pas d'interprètes en ligne. Cependant, vous pouvez utiliser le premier émulateur sur pcjs.org et taper BASICApour obtenir quelque chose d'assez près, bien qu'il puisse ne pas avoir de couleur.
MD XF

En supposant que cet émulateur est assez bon: vous avez besoin d' une nouvelle ligne avant la première PRINT. Cependant, vous n'avez pas besoin d'espaces après les numéros de ligne et PRINTpouvez être abrégé en ?.
Ørjan Johansen

@ ØrjanJohansen AUCUNE FAÇON. J'utilise Microsoft BASIC depuis huit ans et je n'ai jamais entendu parler de ?= PRINT. Mise à jour ...
MD XF

Vous avez manqué les espaces des numéros de ligne et semblez avoir des minuscules parasites x.
Ørjan Johansen

0

Tcl / Tk, 96 octets

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

enter image description here

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.