Вакансия или нет вакансии?

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 по умолчанию красный, вы должны печатать с черным фоном и белым передним планом по умолчанию.
  • Если вы решите использовать графический вывод, красный цвет можно использовать только в том случае, если он указан в программе (например, цвет фона или цвет текста по умолчанию могут не быть красным).

Победитель

Как обычно с , выигрывает самая короткая программа! Брауни очки для графического вывода.
Я приму самый короткий ответ за неделю. Удачного игры в гольф!

Leaderboard

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>

MD XF
источник
2
Существует противоречивое правило: на скриншоте и над ним написано, что красный NO должен быть напечатан «Если T ≥ 200». Позже вы говорите, чтобы напечатать цвет по умолчанию «Если T ≤ 200»
Arc676
2
@ Arc676 Упс. Ну, по логике, если в отеле 200 номеров, то это должно быть первое правильное описание.
Орьян Йохансен,
3
Для дополнительного кредита, сделайте это для Hilbert Hotel, который имеет бесконечное количество номеров.
Дэвид Конрад
Являются ли эти выходные данные действительными: i.imgur.com/221Qxgj.png ?
sergiol
@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)>

nderscore
источник
1
NO%c VACANCY color:red?
MD XF
1
@MDXF проверьте вашу актуальную консоль браузера. эмулятор консоли сниппета не поддерживает его.
nderscore
2
О, хороший улов. +1
MD XF
2
Стандартные правила JS позволяют значительно сократить это. Удалите, так console.log()как правила указывают, что с возвратами все в порядке, вам также не нужно определять функцию.
MayorMonty
4
@MayorMonty - это решение специально использует преимущества console.log для создания цветного текста, поэтому я бы чувствовал себя странно, не включая его.
nderscore
8

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

1 байт сохранен благодаря Value Ink

заменяет буквенный ESC-байт (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.
Value Ink
6

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

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

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

Пост Рок Гарф Хантер
источник
Умножение цветовой строки вместо условия просто великолепно!
Юбер Гжесковяк
6

HTML, 72 71 байт

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

GOTO 0
источник
10
Вы можете сохранить 1 байт, используя правильную формулировку ...
Нил
6
О, мой ... мне нужен отпуск.
0
3
Один из других ответов определяет CSS отдельно. Если вы тоже это сделаете, вы можете сохранить 7 символов с помощью «<style>» (каламбур)
Hubert Grzeskowiak
4

Java (OpenJDK 9) , 102 89 88 51 байт

Да, ява : P Это работает только на * nix терминалах.

x->(x>199?"\033[31m":"")+"NO\033[31m VACANCY\033[m"
totallyhuman
источник
3

bash, 41 байт

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

где ␛ представляет буквальный символ ESC (ASCII \ 033).

Йоанн
источник
1
блестящее умножение!
Ипор Сирсер
3

Go , 82 81 байт

Это работает только на * nix терминалах. Интересно, как легко было бы перенести это на Java ... Готово.

func f(x int)string{v:="NO\033[31m VACANCY\033[m";if(x>199){v=v[2:7]+v};return v}
totallyhuman
источник
2
Я вижу прибытие порта Java.
MD XF
Ниндзя на 11 секунд. XD
полностью человек
3

BASH / MKSH, 48 47 46 байтов

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

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

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

Ипор Сирсер
источник
3

Excel VBA, 76 73 72 байта

Функция анонимного непосредственного окна VBE, которая принимает данные ожидаемого типа Integerиз ячейки [A1]и выводит знак (НЕТ) ВАКАНСИИ через ячейки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
Гах, что незакрытая фигурная скобка ужасна ...
Beta Decay
@BetaDecay ХАХА! ЛОЛ! : D
Арджун
@BetaDecay Я чувствую себя с тобой .... Это глубоко в душе в твоем <s> сердце </ s> коде уровня сборки ...
Роман
1
-1:f=a=>n.id=a>199&&"r"
nderscore
Избавьтесь от идентификатора второго элемента и установите селектор правил CSS на j,#r3 байта.
Юбер Гжесковяк
2

Haskell , 54 53 байта

РЕДАКТИРОВАТЬ:

  • -1 байт: из ответа Jelly @ Dennis, 0аргумент в последней последовательности escape может быть отброшен.

fпринимает целое число и возвращает строку Использовать как putStrLn$f 200.

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

Попробуйте онлайн!Увы, цвета не отображаются в TIO, но вы можете видеть, что коды ANSI расположены правильно.

Гольф, казалось, довольно быстро прекратился с этим - даже не называя последовательности, кажется, что-то спасает. Самый умный бит повторяется с f 0использованием другой ветви в качестве подстроки. Три разные попытки использования списочных представлений оказались на один байт длиннее. Возможно, самое хорошее, что я нашел:

f t=foldr drop"\27[31mNO \27[31mVACANCY\27[m"[5|t<200]
Орджан Йохансен
источник
54 байта альтернатива: f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m".
Лайкони
@ Лайкони О! Я был так близок к этому, но почему-то никогда не замечал, concatбыл короче, чем id=<<из-за скобок.
Орджан Йохансен,
@Laikoni С наконечником Денниса это также 53 байта.
Орьян Йохансен,
2

Скрипт bash, 60 байт

c="\e[1;31m";((199<$1))&&printf $c;printf "NO$c VACANCY\e[m"
JC
источник
4
Точно так же, вы знаете, что пользователь сообщества автоматически произнес отрицательный ответ при редактировании вашего ответа. Я считаю это ошибкой .
Деннис
@MDXF Ввод осуществляется через аргументы командной строки.
Деннис
@ Денис Ах, мой плохой. Вы можете изменить заголовок на Bash script, 64 bytes.
MD XF
Если вы буквально не вносите сотни правок, вы можете редактировать свой ответ каждый раз, когда у вас появляется идея. В любом случае, изменения в одном и том же 5-минутном окне группируются в одну ревизию.
Деннис
1
Это не сбрасывает цвет терминала в конце, что необходимо.
Пост Рок Гарф Хантер
1

Mathematica, 67 байт

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

или (60 байт, но это может считаться мошенничеством)
Это действительно так Times["NO","VACANCY"], но кажется правильным.

(s=Style[#,FontColor->Red]&;If[#>200,s,#&]@"NO")s@"VACANCY"&
user202729
источник
1

BASH, 100 байт

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

Это может быть, вероятно, в гольф, но у меня мало времени. Я вернусь к этому позже.

-5 байт благодаря @R. Kap

Arc676
источник
Замена if [ $1 -le 200 ]на if(($1<200))5 сохраняет байты и исправляет ошибку вывода, не отображаемую красным цветом при вводе 200.
Р. Кап
@ R.Kap Спасибо. OP запросил цвет по умолчанию для значения, меньшего или равного 200.
Arc676
Нет, OP запросил весь красный выход для входов, больше или равных 200.
R. Kap
1

Mathematica, 47 байт

(If[#>199,Style[NO,Red],NO]Style[VACANCY,Red])&
J42161217
источник
1

C (* терминал в стиле nix), 50 55 52 51 байт

-1 благодаря Мастеру Пшеницы

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

␛ обозначает буквальный байт ESC, ASCII 27.

Позвоните f(200), номер 200. NO VACANCYЦветные отпечатки по спецификации.

MD XF
источник
В моем терминале это нарушает ваше правило, согласно которому не следует изменять цвет текста оболочки.
Орджан Йохансен,
@ ØrjanJohansen Исправлено. Я забыл, что запускаю собственную оболочку, которая автоматически устанавливает цвет.
MD XF
Вы можете изменить ␛[0mна␛[m
Post Rock
1

PHP, 41 байт

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

␛ представляет символ побега.

user63956
источник
0

shortC , 48 байтов

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

Где ␛ обозначает ASCII 27, байт ESCAPE.

MD XF
источник
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

MD XF
источник
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

sergiol
источник