빈방이 있습니까?


17

우리는 모두 공석이 있는지 여부를 알려주는 모텔 표지판을 보았습니다.

일반적으로, 이들은 VACANCY 의 문자가 영구적으로 켜지고 모텔에 방이 없으면 NO 의 문자가 켜집니다.

도전

미국의 평균 모텔에는 200 개의 객실이 있습니다.

정수 T (실내)를 유일한 입력으로 사용 하는 프로그램 / 함수를 작성합니다 .
그러면 프로그램이 단어를 표시합니다 NO VACANCY. 글자는 VACANCY빨간색으로 인쇄됩니다.
경우 T ≥ (200)의 글자 NO도 빨간색으로 인쇄됩니다.

예를 들어, a.out프로그램 이라고 가정 하고 "input"= 명령 줄 인수 : (내가 타이포하고 내 시스템은 대소 문자를 무시합니다.)
enter image description here

규칙

  • 프로그램 / 함수는 대소 문자를 포함 하여 정확한 문자열을 표시 해야 합니다 (또는 람다 인 경우 return ) 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"으로 NO를 인쇄하라는 메시지가 표시됩니다. 나중에 기본 색상 "If T ≤ 200"으로 인쇄한다고 말하면
Arc676

2
@ Arc676 죄송합니다. 논리적으로, 호텔에 200 개의 객실이 있다면 정확한 첫 번째 설명이어야합니다.
Ørjan Johansen '

3
추가 크레딧을 얻으려면 무한한 수의 객실이있는 힐버트 호텔을 이용하십시오.
David Conrad

이 출력은 유효 합니까? i.imgur.com/221Qxgj.png ?
sergiol 2016 년

@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

자바 스크립트 (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

루비 (* nix 스타일 터미널), 54 48 45 44 43 바이트

Value Ink 덕분에 1 바이트 절약

리터럴 esc 바이트 (ASCII 27)를 나타냅니다.

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

내 파이썬 대답 포트, 즉 바이트 여러 바이트가 짧아. 나는 루비 골프를 처음 접했지만 배우기를 열망하므로 피드백에 감사드립니다.


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터미널에서 색상이 지워 집니다 .


조건 대신 색상 문자열의 곱셈이 훌륭합니다!
허버트 Grzeskowiak

6

HTML, 72 71 바이트

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


10
올바른 단어를 사용하여 1 바이트를 절약 할 수 있습니다.
Neil

6
오 마이 ... 휴가가 필요합니다.
GOTO 0

3
다른 답변 중 하나는 CSS를 별도로 정의합니다. 그렇게하면 "<style>"을 사용하여 7 개의 문자를 절약 할 수 있습니다 (pun 의도)
Hubert Grzeskowiak


3

bash, 41 바이트

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

여기서 ␛는 리터럴 ESC 문자를 나타냅니다 (ASCII \ 033).


1
화려한 곱셈!
Ipor Sircer


3

배쉬 / MKSH, 48 47 46 바이트

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

참고 : ^ [는 1 바이트 너비 ESC 문자 : 0x1b 또는 10 진수 27을 의미합니다.

^ M은 1 바이트 너비 CR 문자 : 0x0d, 10 진수 13을 의미합니다.


3

엑셀 VBA, 76 73 72 바이트

Integer셀에서 예상되는 유형의 입력을 가져와 셀 [A1]에서 (NO) VACANCY 부호를 출력하는 익명의 VBE 즉시 창 기능A2:B2

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

로 변경 rgbRed하기 위한 -3 바이트255


1
이것이 정확하지 않으면 죄송합니다. Excel에 능숙하지 않습니다. 그러나을 쓰려고 iif했습니까? 입력이 200과 같으면 올바른 값을 반환합니까? [A1]>200다르게 생각하게합니다.
MD XF

1
@MDXF 예, iif( inline 에서 약칭) 을 쓰려고 if했지만 잘 잡는 >199것이 아니라 맞아야 합니다 >200.
Taylor Scott

2

HTML + CSS + 자바 스크립트 (ES6), 74 59 바이트

함수 인수로 입력을받습니다. f 등, f(100).

HTML

<x id=n>NO <j id=r>VACANCY

CSS

#r{color:red

자바 스크립트 (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는 것을 닫히지 않은 중괄호는 ... 끔찍
베타 붕괴

@BetaDecay HAHA! 롤! : D
Arjun

@BetaDecay 나는 당신과 느낌 .... 그것은 당신의 <s> 심장 </ s> 어셈블리 레벨 코드에서 깊이 아프다 ...
Roman Gräf

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

두 번째 요소의 ID를 제거하고 CSS 규칙 선택기를 j,#r3 바이트를 저장 하도록 설정하십시오 .
허버트 Grzeskowiak

2

하스켈 , 54 53 바이트

편집하다:

  • -1 바이트 : @Dennis의 Jelly 답변 0에서 최종 이스케이프 시퀀스 의 인수를 삭제할 수 있습니다.

f정수를 받아서 문자열을 반환합니다. 로 사용하십시오 putStrLn$f 200.

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

온라인으로 사용해보십시오!아아, 색상이 TIO에 표시되지 않지만 ANSI 코드가 올바르게 배치되어 있음을 알 수 있습니다.

골프는 이걸로 꽤 빨리 빠져 나가는 것처럼 보였습니다. 탈주 줄의 이름조차도 아무것도 절약하지 못하는 것 같습니다. 영리한 비트는 f 0다른 분기를 하위 문자열로 사용하기 위해 반복됩니다 . 리스트 이해를 사용하려는 세 가지 시도는 모두 1 바이트 더 길어졌습니다. 아마도 내가 찾은 가장 좋은 것 :

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

@Laikoni 오! 나는 그것에 너무 가까웠지만 어떻게 든 괄호로 인해 결코 concat짧은 것을 눈치 채지 못했습니다 id=<<.
Ørjan Johansen 님이

@Laikoni Dennis의 팁은 53 바이트입니다.
Ørjan Johansen

2

배쉬 스크립트, 60 바이트

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

4
알다시피, downvote는 커뮤니티 사용자가 답변을 편집 할 때 자동으로 전송되었습니다. 나는 이것이 버그라고 생각한다 .
Dennis

@MDXF 입력은 명령 줄 인수를 통해 이루어집니다.
Dennis

@ 데니스 아, 내 나쁜. 헤더를로 변경할 수 있습니다 Bash script, 64 bytes.
MD XF

말 그대로 수백 번의 편집을하지 않으면 아이디어를 얻을 때마다 답을 편집 할 수 있습니다. 동일한 5 분 동안의 편집 내용은 단일 개정으로 그룹화됩니다.
데니스

1
이렇게하면 끝에 터미널 색상이 재설정되지 않습니다.
Post Rock Garf Hunter

1

수학, 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'

이것은 아마도 골프를 칠 수 있지만 시간이 부족합니다. 나중에 다시 올게요.

@R 덕분에 -5 바이트 캅


교체 if [ $1 -le 200 ]로하는 if(($1<200))5 바이트 및 수정 출력의 입력 모든 적색 표시되지의 버그를 저장 200.
R. Kap

@ R.Kap 감사합니다. OP는 200 이하의 기본 색상을 요청했습니다.
Arc676

OP는 200 이상의 입력에 대해 모든 빨간색 출력을 요구했습니다.
R. Kap

1

수학, 47 바이트

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

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사양에 따라 컬러 인쇄 합니다.


터미널에서 쉘의 텍스트 색상을 변경해서는 안된다는 규칙을 어 깁니다.
Ørjan Johansen

@ ØrjanJohansen 수정. 색상을 자동으로 설정하는 사용자 지정 셸을 실행하는 것을 잊었습니다.
MD XF

다음 ␛[0m으로 변경 가능␛[m
Post 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-BASIC , 78 74 65 바이트

Orjan Johansen에게 감사합니다.

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

정수를 입력하라는 메시지를 표시합니다. 산출:

output


온라인 통역사를 찾을 수 없지만 1 행과 2 행은 :?
Ørjan Johansen 님이

@ ØrjanJohansen 와우 ... 내가 그것을 완전히 놓쳤다는 것을 믿을 수 없습니다. 감사합니다. 예, 온라인 통역사가 없습니다. 그러나, 당신의 첫 번째 에뮬레이터 사용할 수 있습니다 pcjs.org를 하고 입력 BASICA이 색이 없을 수 있지만, 뭔가 가까이를 충분히 얻을 수 있습니다.
MD XF

에뮬레이터가 충분하다고 가정하면 첫 번째 줄 앞에 새 줄 이 필요 합니다 PRINT. 그러나 줄 번호 뒤에 공백이 필요하지 않으며 PRINT로 축약 될 수 있습니다 ?.
Ørjan Johansen '

@ ØrjanJohansen NO WAY. 8 년 동안 Microsoft BASIC을 사용해 왔으며 ?= 에 대해 전혀 새로운 적이 없습니다 PRINT. 업데이트 중 ...
MD XF

줄 번호 공백을 놓쳤으며 소문자가 흩어져있는 것 같습니다 x.
Ørjan Johansen '

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.