Vakanz oder keine Vakanz?


17

Wir haben alle die Schilder an den Motels gesehen, die uns sagen, ob es eine freie Stelle gibt oder nicht:

In der Regel leuchten die Buchstaben von VACANCY permanent und die Buchstaben von NO , wenn im Motel kein Platz vorhanden ist.

Die Herausforderung

Das durchschnittliche Motel in den USA hat 200 Zimmer.

Sie schreiben ein Programm / eine Funktion, deren einzige Eingabe eine ganze Zahl T (für belegte Räume) ist.
Ihr Programm zeigt dann die Wörter an NO VACANCY. Die Buchstaben von VACANCYwerden rot gedruckt.
Wenn T ≥ 200 ist, werden die Buchstaben von NOebenfalls rot gedruckt.

Angenommen, a.outIhr Programm und "Eingabe" = Befehlszeilenargument: (Ich habe getippt und mein System ignoriert Groß- und Kleinschreibung.)
enter image description here

Die Regeln

  • Ihr Programm / Ihre Funktion muss die genaue Zeichenfolge einschließlich Groß- / Kleinschreibung anzeigen (oder bei Lambda zurückgeben ) NO VACANCY.
  • Ihr Programm / Ihre Funktion setzt möglicherweise nur die Vordergrundfarbe des Texts auf Rot und nicht den Hintergrund.
  • Wenn Sie möchten, können Sie ANSI-Escape-Codes verwenden, um die rote Farbe zu drucken - \x1b[31mfunktioniert.
  • Ihr Programm / Ihre Funktion ändert möglicherweise nicht die Textfarbe Ihrer Shell, nachdem es abgeschlossen ist.
  • Ihr Programm / Ihre Funktion muss normal enden.
  • Ihr Programm / Ihre Funktion darf nur auf Standardausgabe drucken.
  • Ihr Programm / Ihre Funktion muss die Standardhintergrundfarbe Ihrer Shell / Ihres Terminals / Ihrer IDE verwenden. (Wenn Sie eine grafische Ausgabe wünschen, können Sie eine beliebige Farbe außer Rot auswählen.)
  • Wenn T ≤ 200, müssen die Buchstaben von NOin der Standardvordergrundfarbe Ihrer Shell / Ihres Terminals / Ihrer IDE gedruckt werden. (Wenn Sie eine grafische Ausgabe wünschen, können Sie erneut eine beliebige Farbe auswählen.)
  • Wenn aus irgendeinem Grund die Standardfarbe für den Vordergrund / Hintergrund Ihrer Shell / Ihres Terminals / Ihrer IDE rot ist, müssen Sie mit einem schwarzen Hintergrund und einem Standardvordergrund in Weiß drucken.
  • Wenn Sie sich für die grafische Ausgabe entscheiden, darf Rot nur verwendet werden, wenn dies im Programm angegeben ist (z. B. darf Ihre Hintergrundfarbe oder Standardtextfarbe nicht Rot sein).

Der Gewinner

Wie beim , gewinnt das kürzeste Programm! Brownie-Punkte für die grafische Ausgabe.
Ich akzeptiere die kürzeste Antwort in einer Woche. Viel Spaß beim Golfen!

Bestenliste

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
Es gibt eine widersprüchliche Regel: In und über dem Screenshot heißt es, NEIN in rot "Wenn T ≥ 200" zu drucken. Später sagen Sie, Sie sollen in der Standardfarbe "If T ≤ 200"
drucken

2
@ Arc676 Ups. Wenn das Hotel 200 Zimmer hat, muss logischerweise die erste Beschreibung stimmen.
Ørjan Johansen

3
Tun Sie es für eine zusätzliche Gutschrift für das Hilbert Hotel, das über eine unendliche Anzahl von Zimmern verfügt.
David Conrad

Sind diese Ausgaben gültig: i.imgur.com/221Qxgj.png ?
Sergiol

@sergiol Ja, das ist in Ordnung.
MD XF

Antworten:


8

Jelly , 29 26 Bytes

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

Dies verwendet <CSI>( 0x9b ), was kürzer ist als <ESC>[( 0x1b 0x5b ).

Es setzt die Vordergrundfarbe mit <CSI>mstatt mit zurück <CSI>0m, da die 0 implizit ist.

Nachprüfung

Beachten Sie, dass Ihr Terminal-Emulator (z. B. Konsole) auf ISO 8859-1 oder ähnlich eingestellt sein muss.

screenshot

Wie es funktioniert

<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

(Öffnen Sie die Konsole Ihres Browsers, während Sie das Snippet ausführen, um das farbige Ergebnis anzuzeigen.)

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 Überprüfen Sie Ihre aktuelle Browserkonsole. Der Snippet-Konsolenemulator unterstützt dies nicht.
Nderscore

2
Oh, guter Fang. +1
MD XF

2
Standard-JS-Regeln ermöglichen es Ihnen, dies erheblich zu verkürzen. Entfernen, console.log()da die Regeln festlegen, dass Rückgaben in Ordnung sind, müssen Sie die Funktion auch nicht definieren.
MayorMonty

4
@MayorMonty Diese Lösung nutzt speziell die console.log-Funktionalität , um den farbigen Text zu erstellen. Ich würde mich komisch fühlen, wenn ich ihn nicht einbeziehe .
nderscore

8

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

Dank Value Ink 1 Byte gespart

steht für ein buchstäbliches Esc-Byte (ASCII 27)

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

Ein Port meiner Python-Antwort, der ein Byte mehrere Bytes kürzer ist. Ich bin neu in Ruby Golf, aber lernbegierig, daher ist Feedback erwünscht.


1
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}Speichert ein Byte. Der Trick ist die Tatsache, dass bei der Zeichenfolgeninterpolation "#{nil}"eine leere Zeichenfolge ausgewertet wird und pals Ersatz für verwendet werden kann nil.
Value Ink

6

Python 3 (Terminal im * nix-Stil), 55 54 Byte

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

Dies verwendet ANSI-Escape-Codes. \033[31mMacht das Terminal rot, wenn x kleiner als 200 ist, beginnen wir mit einem, der NOrot macht, sonst haben wir einen, nachdem NOwir ihn trotzdem rot gemacht haben. Wenn wir fertig sind, wird \033[mdie Farbe vom Terminal gelöscht.


Die Multiplikation der Farbkette anstelle einer Bedingung ist genial!
Hubert Grzeskowiak

6

HTML, 72 71 Bytes

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


10
Sie können 1 Byte speichern, indem Sie den richtigen Wortlaut verwenden ...
Neil

6
Oh mein ... ich brauche Urlaub.
GOTO 0

3
Eine der anderen Antworten definiert CSS separat. Wenn Sie das auch tun, können Sie mit "<style>" (Wortspiel beabsichtigt) 7 Zeichen sparen
Hubert Grzeskowiak


3

Bash, 41 Bytes

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

Dabei steht ␛ für ein buchstäbliches ESC-Zeichen (ASCII \ 033).


1
brillante multiplikation!
Ipor Sircer

3

Los , 82 81 Bytes

Dies funktioniert nur auf * nix-Terminals. Ich frage mich, wie einfach es wäre, dies nach Java zu portieren ... Fertig.

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

2
Ich sehe einen Java-Port kommen.
MD XF

Ninja'd um 11 Sekunden. XD
total menschlich

3

BASH / MKSH, 48 47 46 Bytes

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

Hinweis: ^ [bedeutet 1 Byte breites ESC-Zeichen: 0x1b oder Dezimalzahl 27.

^ M bedeutet 1 Byte breites CR-Zeichen: 0x0d, dezimal 13.


3

Excel VBA, 76 73 72 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben des erwarteten Typs Integervon der Zelle entgegennimmt [A1]und ein (NO) VACANCY-Zeichen über die Zellen ausgibtA2:B2

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

-3 Bytes für den Wechsel rgbRedzu255


1
Tut mir leid, wenn das nicht stimmt, ich beherrsche Excel nicht fließend. Aber wollten Sie schreiben iif, und gibt dies den richtigen Wert zurück, wenn die Eingabe gleich 200 ist? [A1]>200lässt mich anders denken.
MD XF

1
@MDXF Ja, ich wollte schreiben iif(abgekürzt von inline if), aber du hast recht, das sollte >199eher sein als ein >200guter Fang!
Taylor Scott

2

HTML + CSS + JavaScript (ES6), 74 bis 59 Byte

Nimmt Eingaben als Funktionsargument von f, like 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

Testschnipsel

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, dass nicht geschlossene geschweifte Klammer schrecklich ist ...
Beta Decay

@BetaDecay HAHA! LOL! : D
Arjun

@BetaDecay Ich fühle mit dir .... Es tut tief in deinem Herzen weh Code auf Assembly-Ebene ...
Roman Gräf

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

Entfernen Sie die ID des zweiten Elements und setzen Sie den CSS-Regelselektor auf j,#r, um 3 Bytes zu sparen.
Hubert Grzeskowiak

2

Haskell , 54 53 Bytes

BEARBEITEN:

  • -1 Byte: Aus der Antwort von @ Dennis's Jelly kann das 0Argument in der letzten Escape-Sequenz entfernt werden.

fNimmt eine Ganzzahl und gibt einen String zurück. Verwenden Sie als putStrLn$f 200.

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

Probieren Sie es online! Leider werden die Farben in TIO nicht angezeigt, aber Sie können sehen, dass die ANSI-Codes korrekt platziert sind.

Das Golfen schien bei diesem Modell ziemlich schnell vorbei zu sein - nicht einmal die Bezeichnung der Escape-Saiten scheint etwas zu retten. Das klügste Bit ist das rekursive f 0Verwenden des anderen Zweigs als Teilzeichenfolge. Drei verschiedene Versuche, Listenverständnisse zu verwenden, tauchten jeweils ein Byte länger auf. Vielleicht das schönste was ich gefunden habe:

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

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

@ Laikoni Oh! Ich war so nah dran, aber irgendwie ist mir nie aufgefallen, dass concates kürzer war als id=<<wegen der Klammern.
Ørjan Johansen

@Laikoni Mit Dennis Tipp sind das auch 53 Bytes.
Ørjan Johansen

2

Bash-Skript, 60 Bytes

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

4
Nur damit Sie wissen, wurde die Downvote automatisch vom Community-Benutzer abgegeben, als Ihre Antwort bearbeitet wurde. Ich halte das für einen Bug .
Dennis

@MDXF Die Eingabe erfolgt über Befehlszeilenargumente.
Dennis

@ Tennis Ah, meine schlechte. Möglicherweise möchten Sie die Kopfzeile in ändern Bash script, 64 bytes.
MD XF

Sofern Sie nicht buchstäblich Hunderte von Bearbeitungen vornehmen, können Sie Ihre Antwort jedes Mal bearbeiten, wenn Sie eine Idee haben. Änderungen innerhalb desselben 5-Minuten-Fensters werden trotzdem in einer einzigen Revision zusammengefasst.
Dennis

1
Dies setzt die Terminalfarbe am Ende nicht zurück, was erforderlich ist.
Weizen-Zauberer

1

Mathematica, 67 Bytes

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

oder (60 Bytes, kann aber als Betrug angesehen werden)
Dies ist tatsächlich Times["NO","VACANCY"], scheint aber korrekt zu sein.

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

Dies kann wahrscheinlich Golf sein, aber ich bin wenig pünktlich. Ich werde später darauf zurückkommen.

-5 Bytes dank @R. Kap


Ersetzen if [ $1 -le 200 ]durch if(($1<200))spart 5 Bytes und behebt den Fehler, dass die Ausgabe bei einer Eingabe von nicht ganz rot angezeigt wird 200.
R. Kap

@ R.Kap Danke. OP forderte jedoch eine Standardfarbe von 200 oder weniger an.
Arc676

Nein, OP hat nach allen roten Ausgaben für Eingaben von mehr als oder gleich 200 gefragt.
R. Kap

1

Mathematica, 47 Bytes

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

1

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

-1 dank Weizen-Assistent

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

␛ steht für das wörtliche ESC-Byte ASCII 27.

Rufen Sie mit an f(200), wobei 200 die Nummer ist. Druckt NO VACANCYfarbig nach Spezifikation.


In meinem Terminal verstößt dies gegen die Regel, dass die Textfarbe der Shell nicht geändert werden soll.
Ørjan Johansen

@ ØrjanJohansen Behoben. Ich habe vergessen, dass ich eine benutzerdefinierte Shell starte, die die Farbe automatisch einstellt.
MD XF

Sie können ␛[0mauf␛[m
Weizen-Assistent

1

PHP, 41 Bytes

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

␛ steht für das Escape-Zeichen.


0

shortC , 48 bytes

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

Wobei ␛ für ASCII 27 steht, das ESCAPE-Byte.


0

GW-BASIC , 78 74 65 Bytes

-12 danke an Orjan Johansen

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

Fordert den Benutzer zur Eingabe einer Ganzzahl auf. Ausgabe:

output


Hm kann keinen Online-Dolmetscher finden, kann aber nicht mit Zeile 1 und 2 verbunden werden :?
Ørjan Johansen

@ ØrjanJohansen Wow ... kann nicht glauben, dass ich das komplett verpasst habe. Danke, und ja, es gibt keine Online-Dolmetscher. Sie können jedoch den ersten Emulator auf pcjs.org verwenden und BASICAetwas eingeben , das nah genug ist, obwohl es möglicherweise keine Farbe hat.
MD XF

Vorausgesetzt, der Emulator ist gut genug: Sie benötigen eine neue Zeile vor der ersten PRINT. Sie brauchen jedoch keine Leerzeichen nach den Zeilennummern und PRINTkönnen mit abgekürzt werden ?.
Ørjan Johansen

@ ØrjanJohansen NO WAY. Ich benutze Microsoft BASIC seit acht Jahren und habe noch nie etwas über ?= erfahren PRINT. Aktualisierung ...
MD XF

Sie haben die Zeilennummern verpasst und scheinen Kleinbuchstaben zu haben 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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.