空缺还是没有空缺?


17

我们都看到过汽车旅馆的迹象,告诉我们是否有空房:

通常,这些将永久点亮VACANCY的字母,并且如果汽车旅馆中没有任何房间,则点亮NO的字母。

挑战

美国的汽车旅馆平均有200间客房。

您将编写一个程序/函数,它以整数T(对于已占用房间)为唯一输入。
然后,您的程序将显示单词NO VACANCY。的字母VACANCY将以红色打印。
如果Ť ≥200的字母NO也将在红色打印。

例如,假设a.out您的程序是“ input” =命令行参数:(我打错了字,系统忽略了大小写。)
在此处输入图片说明

规则

  • 您的程序/函数必须显示(或返回 lambda )确切的字符串NO VACANCY(包括大小写)。
  • 您的程序/功能只能将文本前景色设置为红色,而不是背景。
  • 如果愿意,可以使用ANSI转义码来打印红色- \x1b[31m可以使用。
  • 完成后,您的程序/功能可能不会更改外壳的文本颜色。
  • 您的程序/功能必须正常终止。
  • 您的程序/功能必须仅打印到标准输出。
  • 您的程序/功能必须使用外壳程序/终端/ IDE的默认背景色。(如果选择具有图形输出,则可以选择任意颜色,红色除外)。
  • 如果牛逼 ≤200,中的字母NO必须在你的shell /终端/ 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
有一个冲突的规则:在屏幕截图的上方和上方,都显示以红色“如果T≥200”打印NO。稍后,您说要使用默认颜色“ If
T≤200

2
@ Arc676糟糕。好吧,从逻辑上讲,如果酒店有200间客房,那么它必须是正确的第一个描述。
与Orjan约翰森

3
对于额外的积分,可以在Hilbert Hotel(拥有无限房间数量)中使用。
戴维·康拉德

这些输出是否有效:i.imgur.com/221Qxgj.png
sergiol

@sergiol是的,很好。
MD XF

Answers:


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()因为规则指定返回值是正确的),则不必也定义函数。
MayorMonty

4
@MayorMonty此解决方案专门利用console.log功能来创建彩色文本,所以我不包含它会感到很奇怪。
nderscore

8

Ruby(* nix样式的终端),54 48 45 44 43字节

使用Value Ink节省了1个字节

代表文字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 2015年

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}


10
您可以使用正确的措辞来保存1个字节...
尼尔

6
哦,我...我需要休假。
GOTO

3
其他答案之一是分别定义CSS。如果您也这样做,则可以使用“ <style>”(双关语)保存7个字符
Hubert Grzeskowiak


3

bash,41个字节

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

其中␛表示文字ESC字符(ASCII \ 033)。


1
辉煌的乘法!
Ipor Sircer's

3

Go82 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}

2
我看到Java端口即将到来。
MD XF

忍者了11秒。XD
完全人类的,

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]并在单元格之间输出(NO)VACANCY符号A2:B2

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

-3字节更改rgbRed255


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那个封闭的花括号太可怕了……
Beta Decay

@BetaDecay哈哈!大声笑!:D
Arjun

@BetaDecay,我和您在一起……。在您的<s>心脏</ s>汇编级别代码中,它深深地伤害着我
RomanGräf

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

摆脱第二个元素的ID,并将CSS规则选择器设置j,#r为保存3个字节。
休伯特(Hubert Grzeskowiak)

2

Haskell54 53字节

编辑:

  • -1个字节:从@Dennis的Jelly答案中,0可以删除最后一个转义序列中的参数。

f接受一个整数并返回一个字符串。用于putStrLn$f 200

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

在线尝试!las,颜色不会在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"
Laikoni '17

@Laikoni哦!我离那很近,但是由于括号的原因,它从来没被注意到过concatid=<<
与Orjan约翰森

@Laikoni丹尼斯的技巧也是53字节。
与Orjan约翰森

2

Bash脚本,60个字节

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

4
众所周知,编辑您的答案时,社区用户自动投下了反对票。我认为这是一个错误
丹尼斯,

@MDXF输入是通过命令行参数输入的。
丹尼斯

@丹尼斯啊,我不好。您可能需要将标题更改为Bash script, 64 bytes
MD XF

除非您进行了数百次编辑,否则您每次获得想法时都可以编辑答案。无论如何,在同一5分钟窗口内进行的编辑都会归为一个修订版本。
丹尼斯

1
这不会在最后重置终端颜色,这是必需的。
发布Rock Garf Hunter,

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"&

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。卡普


替换if [ $1 -le 200 ]为会if(($1<200))节省5个字节,并修复了输入为时输出未全部显示为红色的错误200
卡普

@ R.Kap谢谢。OP要求的默认颜色小于或等于200。
Arc676 '17

不,OP要求所有红色输出中的投入超过或等于200
R.金甲

1

Mathematica,47个字节

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

1

C(* nix型终端),50 55 52 51字节

-1感谢Wheat Wizard

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

␛代表文字ESC字节ASCII 27。

用拨打f(200),号码为200。打印NO VACANCY符合规格的颜色。


在我的终端中,这违反了您不应更改外壳文本颜色的规则。
与Orjan约翰森

@ØrjanJohansen固定。我忘了我运行一个自定义外壳,该外壳会自动设置颜色。
MD XF

您可以更改␛[0m␛[m
发布Rock Garf Hunter,

1

PHP,41字节

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

␛代表转义字符。


0

shortC,48个字节

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

其中␛表示ASCII 27(ESCAPE字节)。


0

GW-BASIC78 74 65字节

-12感谢Orjan Johansen

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

提示用户输入整数。输出:

output


找不到在线翻译,但是第一行和第二行不能与:吗?
与Orjan约翰森

@ØrjanJohansen哇...简直无法相信我。谢谢,是的,没有在线口译员。但是,您可以使用pcjs.org上的第一个仿真器并键入BASICA以使内容足够接近,尽管它可能没有颜色。
MD XF

假设仿真器足够好:在first之前需要换行PRINT。但是,行号后不需要空格,PRINT可以将其缩写为?
与Orjan约翰森

@ØrjanJohansen没办法。我已经使用Microsoft BASIC八年了,我从不陌生?= PRINT。正在更新...
MD XF

您错过了行号空格,并且似乎有一个小写的小写字母x
与Orjan约翰森

0

Tcl / Tk,96个字节

grid [label .n -text NO -fg [expr \$argv>199?"red":"tan"]]
grid [label .v -text VACANCY -fg red]

enter image description here

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.