Posto vacante o nessun posto vacante?


17

Abbiamo visto tutti i cartelli sui motel che ci dicono se c'è un posto vacante o meno:

In genere, questi avranno permanentemente le lettere di VACANCY illuminate e le lettere di NO illuminate se non c'è spazio nel motel.

La sfida

Il motel medio negli Stati Uniti ha 200 camere.

Scriverai un programma / funzione che accetta un intero T (per le stanze prese) come unico input.
Il programma visualizzerà quindi le parole NO VACANCY. Le lettere di VACANCYsaranno stampate in rosso.
Se T ≥ 200, anche le lettere di NOverranno stampate in rosso.

Ad esempio, supponendo che a.outsia il tuo programma e "input" = argomento della riga di comando: (ho sbagliato a scrivere e il mio sistema ignora il caso).
enter image description here

Le regole

  • Il tuo programma / funzione deve visualizzare (o, se lambda, restituire ) la stringa esatta NO VACANCY, incluso il caso.
  • Il tuo programma / funzione può solo impostare il colore di primo piano del testo su rosso e non sullo sfondo.
  • Se lo si desidera, è possibile utilizzare i codici di escape ANSI per stampare il colore rosso - \x1b[31mfunzionerà.
  • Il tuo programma / funzione potrebbe non cambiare il colore del testo della tua shell al termine.
  • Il tuo programma / funzione deve terminare normalmente.
  • Il programma / funzione deve stampare solo sullo standard output.
  • Il programma / funzione deve utilizzare il colore di sfondo predefinito della shell / terminale / IDE. (Se scegli di avere un output grafico puoi scegliere qualsiasi colore ti piaccia, tranne il rosso.)
  • Se T ≤ 200, le lettere di NOdevono essere stampate con il colore di primo piano predefinito della shell / terminale / IDE. (Se scegli di avere un output grafico, puoi scegliere di nuovo il colore che preferisci)
  • Se per qualche motivo il colore di primo piano / sfondo predefinito della shell / terminale / IDE è rosso, è necessario stampare con uno sfondo nero e un primo piano bianco predefinito.
  • Se si sceglie di utilizzare l'output grafico, il rosso può essere utilizzato solo se specificato nel programma (ad es. Il colore di sfondo o il colore del testo predefinito potrebbero non essere rossi).

Il vincitore

Come al solito con il , vince il programma più corto! Punti brownie per output grafico.
Accetterò la risposta più breve in una settimana. Buon golf!

Classifica

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
C'è una regola in conflitto: dentro e sopra lo screenshot, dice di stampare NO in rosso "Se T ≥ 200". Successivamente, si dice di stampare con il colore predefinito "Se T ≤ 200"
Arc676,

2
@ Arc676 Oops. Beh, logicamente, se l'hotel ha 200 camere, allora deve essere la prima descrizione che è corretta.
Ørjan Johansen,

3
Per ulteriore credito, fallo per l'Hotel Hilbert, che ha un numero infinito di camere.
David Conrad,

Sono validi questi output: i.imgur.com/221Qxgj.png ?
sergiol,

@sergiol Sì, va bene.
MD XF,

Risposte:


8

Gelatina , 29 26 byte

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

Questo utilizza <CSI>( 0x9b ), che è più corto di <ESC>[( 0x1b 0x5b ).

Reimposta il colore di primo piano con <CSI>minvece di <CSI>0m, poiché lo 0 è implicito.

Verifica

Si noti che l'emulatore di terminale (ad es. Konsole) deve essere impostato su ISO 8859-1 o simile.

screenshot

Come funziona

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

(Apri la console del browser mentre esegui lo snippet per vedere il risultato colorato.)

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 controlla la tua console del browser attuale. l'emulatore della console dello snippet non lo supporta.
nderscore,

2
Oh, buona cattura. +1
MD XF,

2
Le regole JS standard consentono di abbreviare notevolmente questo aspetto. Rimuovi console.log()poiché le regole specificano che i ritorni vanno bene, non è necessario definire anche la funzione.
MayorMonty

4
@MayorMonty questa soluzione sfrutta in modo specifico la funzionalità console.log per creare il testo colorato, quindi mi sentirei strano non includerlo.
nderscore,

8

Rubino (* terminale in stile nix), 54 48 45 44 43 byte

1 byte risparmiato grazie a Value Ink

indica un byte esc letterale (ASCII 27)

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

Una porta della mia risposta Python, ovvero un byte più corto di alcuni byte. Sono nuovo nel golf ruby ​​ma desideroso di imparare, quindi il feedback è apprezzato.


1
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}salva un byte. Il trucco è il fatto che nell'interpolazione di stringhe "#{nil}"verrà valutata una stringa vuota e che ppuò essere utilizzata come sostituto nil.
Value Ink

6

Python 3 (* terminale in stile * nix), 55 54 byte

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

Questo utilizza codici di escape ANSI. \033[31mRende il terminale rosso, se x è inferiore a 200 inizieremo con uno NOche diventa rosso, altrimenti ne avremo uno dopo NOaverlo reso rosso comunque. Quando abbiamo finito \033[mcancella il colore dal terminale.


La moltiplicazione della stringa di colori invece di una condizione è eccezionale!
Hubert Grzeskowiak,

6

HTML, 72 71 byte

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


10
Puoi salvare 1 byte usando la dicitura corretta ...
Neil,

6
Oh mio ... ho bisogno di una vacanza.
GOTO 0

3
Una delle altre risposte definisce i CSS separatamente. Se lo fai anche tu, potresti salvare 7 caratteri con "<style>" (gioco di
parole


3

bash, 41 byte

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

dove ␛ rappresenta un carattere ESC letterale (ASCII \ 033).


1
brillante moltiplicazione!
Ipor Sircer,

3

Vai , 82 81 byte

Funziona solo su terminali * nix. Mi chiedo quanto sarebbe facile portarlo su Java ... Fatto.

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

2
Vedo arrivare una porta Java.
MD XF,

Ninja di 11 secondi. XD
totalmente umano

3

BASH / MKSH, 48 47 46 byte

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

Nota: ^ [indica un carattere ESC largo 1 byte: 0x1b o 27 decimale.

^ M significa carattere CR largo 1 byte: 0x0d, decimale 13.


3

Excel VBA, 76 73 72 byte

Funzione di finestra immediata VBE anonima che accetta l'input del tipo previsto Integerdalla cella [A1]e genera un segno (NO) VACANCY tra le celleA2:B2

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

-3 byte per passare rgbReda255


1
Scusate se non è corretto, non sono fluente con Excel. Ma intendevi scrivere iif, e questo restituisce il valore corretto se l'ingresso è uguale a 200? [A1]>200mi fa pensare diversamente.
MD XF,

1
@MDXF Sì, intendevo scrivere iif(abbreviato da inline if) tuttavia, hai ragione, dovrebbe essere >199piuttosto che una >200buona cattura!
Taylor Scott,

2

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

Accetta input come argomento di funzione di f, come 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

Test dello snippet

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 quella parentesi graffa non chiusa è terribile ...
Decadimento beta

@BetaDecay HAHA! LOL! : D
Arjun,

@BetaDecay Mi sento con te .... Fa molto male nel tuo codice <s> cuore </s> a livello di assemblaggio ...
Roman Gräf,

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

Sbarazzati dell'id del secondo elemento e imposta il selettore di regole CSS su j,#rper salvare 3 byte.
Hubert Grzeskowiak,

2

Haskell , 54 53 byte

MODIFICARE:

  • -1 byte: dalla risposta Jelly di @Dennis, l' 0argomento nella sequenza di escape finale può essere abbandonato.

faccetta un numero intero e restituisce una stringa. Usa come putStrLn$f 200.

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

Provalo online! Purtroppo, i colori non vengono visualizzati in TIO, ma puoi vedere che i codici ANSI sono posizionati correttamente.

Il golf sembra essersi esaurito abbastanza rapidamente con questo - nemmeno nominare le stringhe di fuga sembra salvare nulla. Il bit più intelligente ricorre f 0per usare l'altro ramo come sottostringa. Tre diversi tentativi di utilizzare la comprensione dell'elenco sono aumentati di un byte in più. Forse il più bello che ho trovato:

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

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

@Laikoni Oh! Ero così vicino a questo, ma in qualche modo mai notato che concatera più breve di quello a id=<<causa delle parentesi.
Ørjan Johansen,

@Laikoni Con la punta di Dennis che è anche 53 byte.
Ørjan Johansen,

2

Script di Bash, 60 byte

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

4
Proprio per questo sai, il downvote è stato lanciato automaticamente dall'utente della Community quando la tua risposta è stata modificata. Lo considero un bug .
Dennis,

@MDXF L'input avviene tramite argomenti della riga di comando.
Dennis,

@Dennis Ah, mia cattiva. Potresti voler cambiare l'intestazione in Bash script, 64 bytes.
MD XF,

A meno che tu non faccia letteralmente centinaia di modifiche, puoi modificare la tua risposta ogni volta che hai un'idea. Le modifiche nella stessa finestra di 5 minuti vengono comunque raggruppate in un'unica revisione.
Dennis,

1
Questo non reimposta il colore del terminale alla fine, che è richiesto.
Post Rock Garf Hunter,

1

Mathematica, 67 byte

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

o (60 byte, ma può essere considerato un imbroglio)
Questo è in realtà Times["NO","VACANCY"], ma sembra essere corretto.

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

1

BASH, 100 byte

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

Questo può essere probabilmente giocato a golf, ma ho poco tempo. Tornerò su questo più tardi.

-5 byte grazie a @R. Kap


La sostituzione if [ $1 -le 200 ]con if(($1<200))salva 5 byte e corregge il bug dell'output che non appare in rosso con un input di 200.
R. Kap,

@ R.Kap Grazie. OP ha richiesto il colore predefinito per un valore inferiore o uguale a 200.
Arc676,

No, OP ha richiesto tutte le uscite rosse per input maggiori o uguali a 200.
R. Kap

1

Mathematica, 47 byte

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

1

C (* terminale in stile nix), 50 55 52 51 byte

-1 grazie a Wheat Wizard

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

␛ stands for the literal ESC byte, ASCII 27.

Call with f(200), 200 being the number. Prints NO VACANCY colored to the spec.


In my terminal, that breaks your rule that it shouldn't change the text color of the shell.
Ørjan Johansen

@ØrjanJohansen Fixed. I forgot that I run a custom shell which automatically sets the color.
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... can't believe I completely missed that. Thanks, and yeah, there are no online interpreters. However, you can use the first emulator on pcjs.org and type BASICA to get something close enough, although it may not have color.
MD XF

Assuming that emulator is good enough: You need a new line before the first PRINT. However, you don't need spaces after the line numbers, and PRINT can be abbreviated to ?.
Ø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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.