Wszyscy widzieliśmy znaki na motelach informujące nas, czy jest wolne miejsce, czy nie:
Zazwyczaj będą one na stałe zapalone litery VACANCY i zaświecą się litery NO , jeśli w motelu nie będzie miejsca.
Wyzwanie
Przeciętny motel w USA ma 200 pokoi.
Napisz program / funkcję, która przyjmuje jako liczbę całkowitą T (dla zajętych pomieszczeń).
Twój program wyświetli słowa NO VACANCY
. Litery VACANCY
zostaną wydrukowane na czerwono.
Jeśli T ≥ 200, litery NO
zostaną również wydrukowane na czerwono.
Na przykład, zakładając, że a.out
jest to twój program i argument „input” = argument wiersza poleceń: (wpisałem literę, a mój system ignoruje wielkość liter).
Zasady
- Twój program / funkcja musi wyświetlać (lub, jeśli lambda, zwraca ) dokładny ciąg
NO VACANCY
, w tym wielkość liter. - Twój program / funkcja może ustawić tylko kolor pierwszego planu tekstu na czerwony, a nie tło.
- Jeśli chcesz, możesz użyć kodów ucieczki ANSI, aby wydrukować czerwony kolor -
\x1b[31m
będzie działać. - Twój program / funkcja może nie zmienić koloru tekstu powłoki po jej zakończeniu.
- Twój program / funkcja musi zakończyć się normalnie.
- Twój program / funkcja musi drukować tylko na standardowe wyjście.
- Twój program / funkcja musi używać domyślnego koloru tła powłoki / terminala / IDE. (Jeśli zdecydujesz się na wyjście graficzne, możesz wybrać dowolny kolor, z wyjątkiem czerwonego).
- Jeżeli T ≤ 200, litery z
NO
muszą być wydrukowane w domyślnym kolorze pierwszego planu powłoki / terminala / IDE. (Jeśli zdecydujesz się na wyjście graficzne, ponownie możesz wybrać dowolny kolor) - Jeśli z jakiegoś powodu domyślny kolor pierwszego planu / tła powłoki / terminala / IDE jest czerwony, musisz wydrukować na czarnym tle i domyślnym białym planie.
- Jeśli zdecydujesz się użyć wyjścia graficznego, czerwonego można używać tylko wtedy, gdy jest określony w programie (np. Kolor tła lub domyślny kolor tekstu może nie być czerwony).
Zwycięzca
Jak zwykle w przypadku golfa kodowego , wygrywa najkrótszy program! Punkty Brownie za wynik graficzny.
Przyjmę najkrótszą odpowiedź za tydzień. Miłej gry w golfa!
Tabela liderów
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>
Odpowiedzi:
Galaretka ,
2926 bajtówUżywa
<CSI>
( 0x9b ), który jest krótszy niż<ESC>[
( 0x1b 0x5b ).Resetuje kolor pierwszego planu za pomocą
<CSI>m
zamiast<CSI>0m
, jako 0 jest niejawne.Weryfikacja
Należy pamiętać, że emulator terminala (np. Konsole) musi być ustawiony na ISO 8859-1 lub podobny.
Jak to działa
źródło
JavaScript (ES6), 60 bajtów
(Otwórz konsolę przeglądarki podczas uruchamiania fragmentu, aby zobaczyć kolorowy wynik).
źródło
NO%c VACANCY color:red
?console.log()
ponieważ reguły określają, że zwroty są w porządku, nie musisz również definiować funkcji.Ruby (terminal w stylu * nix),
5448454443 bajty1 bajt zapisany dzięki Value Ink
␛
oznacza dosłowny bajt esc (ASCII 27)Port mojej odpowiedzi na python, to
bajtkrótszy o kilka bajtów. Jestem początkującym w ruby golfie, ale chętnie się uczę, więc doceniam opinie.źródło
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}
zapisuje bajt. Sztuczka polega na tym, że w interpolacji ciągów"#{nil}"
zostanie oceniony na pusty ciąg ip
można go użyć jako zamiennikanil
.Python 3 (terminal w stylu * nix),
5554 bajtówThis uses ANSI escape codes.
\033[31m
Makes the terminal red, if x is less than 200 we will start with one makingNO
red, otherwise we will have one afterNO
making it red anyway. When we are done\033[m
clears the color from the terminal.źródło
HTML,
7271 bytesźródło
Java (OpenJDK 9),
102898851 bytesYes, Java. :P This only works on *nix terminals.
źródło
bash, 41 bytes
where ␛ represents a literal ESC character (ASCII \033).
źródło
Go,
8281 bytesThis only works on *nix terminals.
I wonder how easy it would be to port this to Java...Done.źródło
BASH / MKSH,
48 4746 bytesNote: ^[ means 1 byte wide ESC character: 0x1b or decimal 27.
^M means 1 byte wide CR character: 0x0d, decimal 13.
źródło
Excel VBA,
767372 BytesAnonymous VBE immediate window function that takes input of expected type
Integer
from cell[A1]
and outputs a (NO) VACANCY sign across cellsA2:B2
-3 Bytes for changing
rgbRed
to255
źródło
iif
, and does this return the correct value if the input is equal to 200?[A1]>200
makes me think otherwise.iif
(abbreviated fromi
nlineif
) however, you are right that should be>199
rather than>200
good catch!HTML + CSS + JavaScript (ES6),
7459 bytesTakes input as function argument of
f
, likef(100)
.HTML
CSS
JavaScript (ES6)
Test Snippet
źródło
f=a=>n.id=a>199&&"r"
j,#r
to save 3 bytes.Haskell,
5453 bytesEDIT:
0
argument in the final escape sequence can be dropped.f
takes an integer and returns a string. Use asputStrLn$f 200
.Try it online! Alas, the colors don't show up in TIO, but you can see that the ANSI codes are correctly placed.
Golfing seemed to peter out pretty quickly with this one - not even naming the escape strings seems to save anything. The cleverest bit is recursing with
f 0
to use the other branch as a substring. Three different attempts at using list comprehensions all turned up one byte longer. Perhaps the nicest I found:źródło
f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m"
.concat
was shorter thanid=<<
because of the parentheses.Bash script, 60 bytes
źródło
Bash script, 64 bytes
.Mathematica, 67 bytes
or (60 bytes, but may be considered cheating)
This is actually
Times["NO","VACANCY"]
, but appear to be correct.źródło
BASH, 100 bytes
This can be probably be golfed, but I'm low on time. I'll come back to this later.
-5 bytes thanks to @R. Kap
źródło
if [ $1 -le 200 ]
withif(($1<200))
saves 5 bytes and fixes the bug of the output not appearing in all red with an input of200
.Mathematica, 47 bytes
źródło
C (*nix style terminal),
50555251 bytes-1 thanks to Wheat Wizard
␛ stands for the literal ESC byte, ASCII 27.
Call with
f(200)
, 200 being the number. PrintsNO VACANCY
colored to the spec.źródło
␛[0m
to␛[m
PHP, 41 bytes
␛ represents the Escape character.
źródło
shortC, 48 bytes
Where ␛ stands for ASCII 27, the ESCAPE byte.
źródło
GW-BASIC,
787465 bytes-12 thanks to Orjan Johansen
Prompts user for an integer. Output:
źródło
:
?BASICA
to get something close enough, although it may not have color.PRINT
. However, you don't need spaces after the line numbers, andPRINT
can be abbreviated to?
.?
=PRINT
. Updating...x
.Tcl/Tk, 96 bytes
źródło