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 VACANCY
werden rot gedruckt.
Wenn T ≥ 200 ist, werden die Buchstaben von NO
ebenfalls rot gedruckt.
Angenommen, a.out
Ihr Programm und "Eingabe" = Befehlszeilenargument: (Ich habe getippt und mein System ignoriert Groß- und Kleinschreibung.)
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[31m
funktioniert. - 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
NO
in 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 Code-Golf üblich , 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>
Antworten:
Jelly ,
2926 BytesDies verwendet
<CSI>
( 0x9b ), was kürzer ist als<ESC>[
( 0x1b 0x5b ).Es setzt die Vordergrundfarbe mit
<CSI>m
statt 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.
Wie es funktioniert
quelle
Javascript (ES6), 60 Byte
(Öffnen Sie die Konsole Ihres Browsers, während Sie das Snippet ausführen, um das farbige Ergebnis anzuzeigen.)
quelle
NO%c VACANCY color:red
?console.log()
da die Regeln festlegen, dass Rückgaben in Ordnung sind, müssen Sie die Funktion auch nicht definieren.Ruby (* nix style terminal),
5448454443 ByteDank Value Ink 1 Byte gespart
␛
steht für ein buchstäbliches Esc-Byte (ASCII 27)Ein Port meiner Python-Antwort, der
ein Bytemehrere Bytes kürzer ist. Ich bin neu in Ruby Golf, aber lernbegierig, daher ist Feedback erwünscht.quelle
->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 undp
als Ersatz für verwendet werden kannnil
.Python 3 (Terminal im * nix-Stil),
5554 ByteDies verwendet ANSI-Escape-Codes.
\033[31m
Macht das Terminal rot, wenn x kleiner als 200 ist, beginnen wir mit einem, derNO
rot macht, sonst haben wir einen, nachdemNO
wir ihn trotzdem rot gemacht haben. Wenn wir fertig sind, wird\033[m
die Farbe vom Terminal gelöscht.quelle
HTML,
7271 Bytesquelle
Java (OpenJDK 9) ,
102898851 BytesJa, Java. : P Dies funktioniert nur auf * nix-Terminals.
quelle
Bash, 41 Bytes
Dabei steht ␛ für ein buchstäbliches ESC-Zeichen (ASCII \ 033).
quelle
Los ,
8281 BytesDies funktioniert nur auf * nix-Terminals.
Ich frage mich, wie einfach es wäre, dies nach Java zu portieren ...Fertig.quelle
BASH / MKSH,
48 4746 BytesHinweis: ^ [bedeutet 1 Byte breites ESC-Zeichen: 0x1b oder Dezimalzahl 27.
^ M bedeutet 1 Byte breites CR-Zeichen: 0x0d, dezimal 13.
quelle
Excel VBA,
767372 BytesAnonyme VBE-Direktfensterfunktion, die Eingaben des erwarteten Typs
Integer
von der Zelle entgegennimmt[A1]
und ein (NO) VACANCY-Zeichen über die Zellen ausgibtA2:B2
-3 Bytes für den Wechsel
rgbRed
zu255
quelle
iif
, und gibt dies den richtigen Wert zurück, wenn die Eingabe gleich 200 ist?[A1]>200
lässt mich anders denken.iif
(abgekürzt voni
nlineif
), aber du hast recht, das sollte>199
eher sein als ein>200
guter Fang!HTML + CSS + JavaScript (ES6),
74 bis59 ByteNimmt Eingaben als Funktionsargument von
f
, likef(100)
.HTML
CSS
JavaScript (ES6)
Testschnipsel
quelle
f=a=>n.id=a>199&&"r"
j,#r
, um 3 Bytes zu sparen.Haskell ,
5453 BytesBEARBEITEN:
0
Argument in der letzten Escape-Sequenz entfernt werden.f
Nimmt eine Ganzzahl und gibt einen String zurück. Verwenden Sie alsputStrLn$f 200
.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 0
Verwenden 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:quelle
f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m"
.concat
es kürzer war alsid=<<
wegen der Klammern.Bash-Skript, 60 Bytes
quelle
Bash script, 64 bytes
.Mathematica, 67 Bytes
oder (60 Bytes, kann aber als Betrug angesehen werden)
Dies ist tatsächlich
Times["NO","VACANCY"]
, scheint aber korrekt zu sein.quelle
BASH, 100 Bytes
Dies kann wahrscheinlich Golf sein, aber ich bin wenig pünktlich. Ich werde später darauf zurückkommen.
-5 Bytes dank @R. Kap
quelle
if [ $1 -le 200 ]
durchif(($1<200))
spart 5 Bytes und behebt den Fehler, dass die Ausgabe bei einer Eingabe von nicht ganz rot angezeigt wird200
.Mathematica, 47 Bytes
quelle
C (* nix style terminal),
50555251 Bytes-1 dank Weizen-Assistent
␛ steht für das wörtliche ESC-Byte ASCII 27.
Rufen Sie mit an
f(200)
, wobei 200 die Nummer ist. DrucktNO VACANCY
farbig nach Spezifikation.quelle
␛[0m
auf␛[m
PHP, 41 Bytes
␛ steht für das Escape-Zeichen.
quelle
shortC , 48 bytes
Wobei ␛ für ASCII 27 steht, das ESCAPE-Byte.
quelle
GW-BASIC ,
787465 Bytes-12 danke an Orjan Johansen
Fordert den Benutzer zur Eingabe einer Ganzzahl auf. Ausgabe:
quelle
:
?BASICA
etwas eingeben , das nah genug ist, obwohl es möglicherweise keine Farbe hat.PRINT
. Sie brauchen jedoch keine Leerzeichen nach den Zeilennummern undPRINT
können mit abgekürzt werden?
.?
= erfahrenPRINT
. Aktualisierung ...x
.Tcl / Tk, 96 Bytes
quelle