Вакансія чи відсутність вакансії?


17

Всі ми бачили таблички на мотелях, які говорять нам, чи є вакансія чи ні:

Як правило, на них постійно висвітлюються літери ВАКАНЦІЇ , а літери НЕ запалюються, якщо в мотелі немає жодної кімнати.

Змагання

Середній мотель у США має 200 номерів.

Ви напишете програму / функцію, яка приймає ціле число T (для прийнятих кімнат) як єдиний вхід.
Потім ваша програма відобразить слова NO VACANCY. Букви VACANCYвіддруковані червоним кольором.
Якщо T ≥ 200, літери NOтакож будуть надруковані червоним кольором.

Наприклад, якщо припустити, що a.outце ваша програма і "input" = аргумент командного рядка: (Я вводив текст і моя система ігнорує випадок.)
enter image description here

Правила

  • Ваша програма / функція повинна відображати (або, якщо лямбда повертати ) точний рядок NO VACANCY, включаючи регістр.
  • Ваша програма / функція може встановлювати лише колір переднього плану червоного кольору, а не фон.
  • За бажанням ви можете скористатися ANSI кодами втечі для друку червоного кольору - \x1b[31mспрацює.
  • Ваша програма / функція може не змінювати колір тексту вашої оболонки після її завершення.
  • Ваша програма / функція повинна нормально припинятися.
  • Ваша програма / функція повинна друкувати лише на стандартний вихід.
  • Ваша програма / функція повинна використовувати колір тла оболонки / терміналу / IDE за замовчуванням. (Якщо ви вирішили мати графічний вихід, ви можете вибрати будь-який колір, який вам подобається, крім червоного.)
  • Якщо T ≤ 200, літери NOповинні бути надруковані у кольорі переднього плану для оболонки / терміналу / IDE. (Якщо ви вирішили мати графічний вихід, ви знову можете вибрати будь-який колір, який вам подобається)
  • Якщо з якихось причин передній план / колір фону для оболонки / термінала / IDE є червоним, ви повинні надрукувати чорний фон та білий передній план за замовчуванням.
  • Якщо ви вирішили використовувати графічний вихід, червоний може використовуватися лише тоді, коли зазначено в програмі (наприклад, колір тла або колір тексту за замовчуванням може бути не червоним).

Переможець

Як зазвичай у , найкоротша програма виграє! Окуляри брауні для графічного виводу.
Я прийму найкоротшу відповідь за тиждень. Щасливого гольфу!

Таблиця лідерів

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
Існує суперечливе правило: на скріншоті і вище він пише, що друкувати НІ червоним кольором "If T ≥ 200". Пізніше ви скажете надрукувати в кольорі за замовчуванням "If T ≤ 200"
Arc676,

2
@ Arc676 На жаль Ну, логічно, якщо в готелі 200 номерів, то це повинен бути перший правильний опис.
Ørjan Johansen

3
Щоб отримати додатковий кредит, зробіть це для готелю Hilbert, який має нескінченну кількість номерів.
Девід Конрад

Чи дійсні ці виходи: i.imgur.com/221Qxgj.png ?
серхіол

@sergiol Так, це добре.
MD XF

Відповіді:


8

Желе , 29 26 байт

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

Для цього використовується <CSI>( 0x9b ), що коротше, ніж <ESC>[( 0x1b 0x5b ).

Він замінює колір переднього плану <CSI>mзамість <CSI>0m, оскільки 0 неявний.

Перевірка

Зверніть увагу, що ваш емулятор терміналу (наприклад, Konsole) повинен бути встановлений на ISO 8859-1 або подібний.

screenshot

Як це працює

<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 байт

(Відкрийте консоль веб-переглядача під час запуску фрагмента, щоб побачити кольоровий результат.)

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 перевірити фактичну консоль браузера. емулятор консолі фрагмента не підтримує його.
nderscore

2
О, хороший улов. +1
MD XF

2
Стандартні правила JS дозволяють значно скоротити це. Видаліть, console.log()оскільки правила вказують, що повернення в порядку, вам також не потрібно визначати функцію.
МерМонти

4
@MayorMonty це рішення спеціально використовує функцію console.log для створення кольорового тексту, тому мені буде дивно не включати його.
nderscore

8

Ruby (термінал у стилі nix), 54 48 45 44 43 байт

1 байт збережено завдяки Value Ink

стоїть в базі для прямого ессе (ASCII 27)

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

Порт моєї відповіді python, тобто байт на кілька байтів коротший. Я новачок у рубіновому гольфі, але бажаю вчитися, тому оцінюються відгуки.


1
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}зберігає байт. Хитрість полягає в тому, що в рядковій інтерполяції "#{nil}"буде оцінено порожній рядок, і pйого можна використовувати як заміну nil.
Значення чорнила

6

Python 3 (термінал у стилі nix), 55 54 байти

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

Для цього використовуються коди аварійних відхилень ANSI. \033[31mЗробить термінал червоним, якщо х менше 200, ми почнемо з одного зробити NOчервоним, інакше ми будемо мати його після NOтого, як все одно стане червоним. Коли ми закінчимо, \033[mочищає колір від терміналу.


Множення кольорового рядка замість умови геніальне!
Губерт Ґжесков'як

6

HTML, 72 71 байт

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


10
Ви можете зберегти 1 байт, скориставшись правильним формулюванням ...
Ніл

6
О мій ... мені потрібна відпустка.
GOTO 0

3
Одна з інших відповідей визначає CSS окремо. Якщо ви теж зробите це, ви можете зберегти 7 символів за допомогою "<style>" (призначений каламбур)
Hubert Grzeskowiak




3

BASH / MKSH, 48 47 46 байт

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

Примітка: ^ [означає 1 байт широкого символу ESC: 0x1b або десятковий 27.

^ M означає 1 байт широкого символу CR: 0x0d, десятковий 13.


3

Excel VBA, 76 73 72 байт

Анонімна функція негайного вікна VBE, яка приймає вхід очікуваного типу Integerз комірки [A1]та видає знак (НІ) VACANCY через клітинкиA2:B2

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

-3 байти для зміни rgbRedна255


1
Вибачте, якщо це неправильно, я не вільно володію Excel. Але ви мали на увазі написати iif, і чи повертає це правильне значення, якщо вхід дорівнює 200? [A1]>200змушує мене думати інакше.
MD XF

1
@MDXF Так, я мав на увазі писати iif(скорочено від inline if), однак, ти маєш рацію, що це має бути, >199а не >200хороший улов!
Тейлор Скотт

2

HTML + CSS + JavaScript (ES6), 74 59 байт

Приймає введення як аргумент функції f, як 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

Тест-фрагмент

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 that unclosed curly bracket is awful...
Beta Decay

@BetaDecay HAHA! LOL! :D
Arjun

@BetaDecay I feel with you.... It hurts deep down in your <s>heart</s> assembly level code...
Roman Gräf

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

Get rid of second element's id and set the CSS rule selector to j,#r to save 3 bytes.
Hubert Grzeskowiak

2

Haskell, 54 53 bytes

EDIT:

  • -1 byte: From @Dennis's Jelly answer, the 0 argument in the final escape sequence can be dropped.

f takes an integer and returns a string. Use as putStrLn$f 200.

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

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:

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! I was so close to that but somehow never noticed concat was shorter than id=<< because of the parentheses.
Ørjan Johansen

@Laikoni With Dennis's tip that's also 53 bytes.
Ørjan Johansen

2

Bash script, 60 bytes

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

4
Just so you know, the downvote was cast automatically by the Community user when your answer was edited. I consider this a bug.
Dennis

@MDXF Input is via command-line arguments.
Dennis

@Dennis Ah, my bad. You may want to change the header to Bash script, 64 bytes.
MD XF

Unless you literally make hundred of edits, you can edit your answer every time you get an idea. Edits within the same 5-minute window get grouped into a single revision anyway.
Dennis

1
This doesn't reset the terminal color at the end, which is required.
Post Rock Garf Hunter

1

Mathematica, 67 bytes

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

or (60 bytes, but may be considered cheating)
This is actually Times["NO","VACANCY"], but appear to be correct.

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

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


Replacing if [ $1 -le 200 ] with if(($1<200)) saves 5 bytes and fixes the bug of the output not appearing in all red with an input of 200.
R. Kap

@R.Kap Thanks. OP requested default color for less than or equal to 200 though.
Arc676

No, OP asked for all red ouput for inputs more than or equal to 200.
R. Kap


1

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

-1 thanks to 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.