Vị trí tuyển dụng hay không có chỗ trống?


17

Tất cả chúng ta đã nhìn thấy các dấu hiệu trên các nhà nghỉ cho chúng ta biết có chỗ trống hay không:

Thông thường, những thư này sẽ vĩnh viễn có chữ VACANCY sáng lên và chữ cái KHÔNG sáng lên nếu không có phòng trong nhà nghỉ.

Các thách thức

Nhà trọ trung bình ở Mỹ có 200 phòng.

Bạn sẽ viết một chương trình / hàm lấy một số nguyên T (cho các phòng đã lấy) làm đầu vào duy nhất của nó.
Chương trình của bạn sau đó sẽ hiển thị các từ NO VACANCY. Các chữ cái VACANCYsẽ được in màu đỏ.
Nếu T 200, các chữ cái NOcũng sẽ được in màu đỏ.

Ví dụ: giả sử a.outlà chương trình của bạn và "input" = đối số dòng lệnh: (Tôi đánh máy và hệ thống của tôi bỏ qua trường hợp.)
nhập mô tả hình ảnh ở đây

Những quy định

  • Chương trình / chức năng của bạn phải hiển thị (hoặc, nếu lambda, trả về ) chuỗi chính xác NO VACANCY, bao gồm cả trường hợp.
  • Chương trình / chức năng của bạn chỉ có thể đặt màu nền trước của văn bản thành màu đỏ chứ không phải nền.
  • Nếu bạn muốn, bạn có thể sử dụng mã thoát ANSI để in màu đỏ - \x1b[31msẽ hoạt động.
  • Chương trình / chức năng của bạn có thể không thay đổi màu văn bản của trình bao sau khi kết thúc.
  • Chương trình / chức năng của bạn phải chấm dứt bình thường.
  • Chương trình / chức năng của bạn phải chỉ in ra đầu ra tiêu chuẩn.
  • Chương trình / chức năng của bạn phải sử dụng màu nền mặc định của shell / terminal / IDE. (Nếu bạn chọn có đầu ra đồ họa, bạn có thể chọn bất kỳ màu nào bạn thích, ngoại trừ màu đỏ.)
  • Nếu T ≤ 200, các chữ cái NOphải được in bằng màu nền trước mặc định của shell / terminal / IDE. (Nếu bạn chọn có đầu ra đồ họa, một lần nữa bạn có thể chọn bất kỳ màu nào bạn thích)
  • Nếu vì một lý do nào đó, màu nền / nền mặc định của shell / terminal / IDE của bạn là màu đỏ, bạn phải in với nền đen và nền trước trắng mặc định.
  • Nếu bạn chọn sử dụng đầu ra đồ họa, màu đỏ chỉ có thể được sử dụng khi được chỉ định trong chương trình (ví dụ: màu nền hoặc màu văn bản mặc định của bạn có thể không có màu đỏ).

Người chiến thắng

Như thường lệ với , chương trình ngắn nhất sẽ thắng! Điểm Brownie cho đầu ra đồ họa.
Tôi sẽ chấp nhận câu trả lời ngắn nhất trong một tuần. Chúc bạn chơi golf vui vẻ!

Bảng xếp hạng

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
Có một quy tắc mâu thuẫn: trong và trên ảnh chụp màn hình, nó nói là in NO bằng màu đỏ "Nếu T 200". Sau đó, bạn nói sẽ in bằng màu mặc định "Nếu T 200"
Arc676

2
@ Arc676 Rất tiếc. Vâng, về mặt logic, nếu khách sạn có 200 phòng thì đó phải là mô tả đầu tiên là chính xác.
Ørjan Johansen

3
Để có thêm tín dụng, hãy làm điều đó cho Khách sạn Hilbert, nơi có vô số phòng.
David Conrad

Các đầu ra này có hợp lệ không: i.imgur.com/221Qxgj.png ?
sergiol

@sergiol Vâng, điều đó tốt.
MD XF

Câu trả lời:


8

Thạch , 29 26 byte

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

Cái này sử dụng <CSI>( 0x9b ), ngắn hơn <ESC>[( 0x1b 0x5b ).

Nó đặt lại màu nền trước <CSI>mthay vì <CSI>0m, như 0 là ẩn.

xác minh

Lưu ý rằng trình giả lập thiết bị đầu cuối của bạn (ví dụ: Konsole) phải được đặt thành ISO 8859-1 hoặc tương tự.

ảnh chụp màn hình

Làm thế nào nó hoạt động

<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 byte

(Mở bảng điều khiển của trình duyệt trong khi chạy đoạn trích để xem kết quả được tô màu.)

ảnh chụp màn hình

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 kiểm tra bảng điều khiển trình duyệt thực tế của bạn. trình giả lập giao diện điều khiển đoạn trích không hỗ trợ nó.
nderscore

2
Oh, bắt tốt. +1
MD XF

2
Các quy tắc JS tiêu chuẩn cho phép bạn rút ngắn điều này rất nhiều. Xóa console.log()vì các quy tắc xác định rằng trả về là tốt, bạn không phải xác định chức năng là tốt.
MayorMonty

4
@MayorMonty giải pháp này đặc biệt tận dụng chức năng console.log để tạo văn bản màu, vì vậy tôi sẽ cảm thấy kỳ lạ khi không bao gồm nó.
nderscore

8

Ruby (thiết bị đầu cuối kiểu * nix), 54 48 45 44 43 byte

Lưu 1 byte nhờ vào Ink Ink

là viết tắt của một byte ký tự bằng chữ (ASCII 27)

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

Một cổng của câu trả lời python của tôi, đó là một byte ngắn hơn vài byte. Tôi mới chơi golf ruby ​​nhưng ham học hỏi nên phản hồi được đánh giá cao.


1
->x{"#{x>199?"␛[31m":p}NO␛[31m VACANCY␛[m"}tiết kiệm một byte. Thủ thuật là thực tế là trong phép nội suy chuỗi, "#{nil}"sẽ đánh giá thành một chuỗi rỗng và pcó thể được sử dụng thay thế cho nil.
Mực giá trị

6

Python 3 (thiết bị đầu cuối kiểu * nix), 55 54 byte

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

Điều này sử dụng mã thoát ANSI. \033[31mLàm cho thiết bị đầu cuối có màu đỏ, nếu x nhỏ hơn 200, chúng ta sẽ bắt đầu với một NOmàu đỏ, nếu không chúng ta sẽ có một NOmàu sau khi làm cho nó có màu đỏ. Khi chúng ta hoàn thành \033[mxóa màu khỏi thiết bị đầu cuối.


Phép nhân của chuỗi màu thay vì điều kiện là tuyệt vời!
Hubert Grzeskowiak

6

HTML, 72 71 byte

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


10
Bạn có thể tiết kiệm 1 byte bằng cách sử dụng từ ngữ chính xác ...
Neil

6
Ôi ... tôi cần một kỳ nghỉ.
GOTO 0

3
Một trong những câu trả lời khác định nghĩa CSS riêng. Nếu bạn cũng làm như vậy, bạn có thể lưu 7 ký tự với "<style>" (ý định chơi chữ)
Hubert Grzeskowiak


3

bash, 41 byte

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

trong đó ␛ đại diện cho một ký tự ESC theo nghĩa đen (ASCII \ 033).


1
nhân rực rỡ!
Ipor Sircer

3

Đi , 82 81 byte

Điều này chỉ hoạt động trên các thiết bị đầu cuối * nix. Tôi tự hỏi làm thế nào dễ dàng để chuyển cái này sang Java ... Xong.

func f(x int)string{v:="NO\033[31m VACANCY\033[m";if(x>199){v=v[2:7]+v};return v}

2
Tôi thấy một cổng Java sắp tới.
MD XF

Ninja 11 giây. XD
hoàn toàn là

3

BASH / MKSH, 48 47 46 byte

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

Lưu ý: ^ [có nghĩa là ký tự ESC rộng 1 byte: 0x1b hoặc thập phân 27.

^ M có nghĩa là ký tự CR rộng 1 byte: 0x0d, thập phân 13.


3

VBA Excel, 76 73 72 byte

Hàm cửa sổ tức thời VBE ẩn danh nhận đầu vào của loại dự kiến Integertừ ô [A1]và xuất ra dấu (VACANCY) (NO) trên các ôA2:B2

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

-3 byte để thay đổi rgbRedthành255


1
Xin lỗi nếu điều này không chính xác, tôi không rành về Excel. Nhưng ý của bạn là viết iifvà điều này có trả về giá trị đúng không nếu đầu vào bằng 200? [A1]>200làm tôi nghĩ khác
MD XF

1
@MDXF Vâng, tôi đã có nghĩa là để ghi iif(viết tắt từ inline if) Tuy nhiên, bạn là đúng mà nên >199chứ không phải >200nắm bắt tốt!
Taylor Scott

2

HTML + CSS + JavaScript (ES6), 74 59 byte

Lấy đầu vào là đối số chức năng của f, như 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

Kiểm tra đoạn trích

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 rằng khung xoăn không được tiết lộ là khủng khiếp ...
Beta Decay

@BetaDecay HAHA! CƯỜI LỚN! : D
Arjun

@BetaDecay Tôi cảm thấy với bạn .... Nó đau sâu trong mã cấp độ lắp ráp <s> heart </ s> của bạn ...
Roman Gräf

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

Loại bỏ id của phần tử thứ hai và đặt bộ chọn quy tắc CSS j,#rđể lưu 3 byte.
Hubert Grzeskowiak

2

Haskell , 54 53 byte

BIÊN TẬP:

  • -1 byte: Từ câu trả lời Jelly của @ Dennis, 0đối số trong chuỗi thoát cuối cùng có thể được loại bỏ.

flấy một số nguyên và trả về một chuỗi. Sử dụng như putStrLn$f 200.

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

Hãy thử trực tuyến! Than ôi, màu sắc không hiển thị trong TIO, nhưng bạn có thể thấy rằng mã ANSI được đặt chính xác.

Chơi golf dường như giải quyết khá nhanh với điều này - thậm chí không đặt tên cho chuỗi thoát dường như để tiết kiệm bất cứ điều gì. Bit thông minh nhất là đệ quy f 0để sử dụng nhánh khác làm chuỗi con. Ba nỗ lực khác nhau trong việc sử dụng khả năng hiểu danh sách đều tăng lên một byte dài hơn. Có lẽ tốt nhất tôi tìm thấy:

f t=foldr drop"\27[31mNO \27[31mVACANCY\27[m"[5|t<200]

Thay thế 54 byte : f t=concat["\27[31m"|t>199]++"NO \27[31mVACANCY\27[0m".
Laikoni

@Laikoni ơi! Tôi đã rất gần với điều đó nhưng bằng cách nào đó không bao giờ nhận thấyconcat là ngắn hơn id=<<vì dấu ngoặc đơn.
Ørjan Johansen

@Laikoni Với mẹo của Dennis cũng là 53 byte.
Ørjan Johansen

2

Tập lệnh Bash, 60 byte

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

4
Để bạn biết, downvote được người dùng Cộng đồng tự động bỏ khi câu trả lời của bạn được chỉnh sửa. Tôi coi đây là một lỗi .
Dennis

@MDXF Input là thông qua các đối số dòng lệnh.
Dennis

@Dennis Ah, xấu của tôi. Bạn có thể muốn thay đổi tiêu đề thành Bash script, 64 bytes.
MD XF

Trừ khi bạn thực hiện hàng trăm chỉnh sửa, bạn có thể chỉnh sửa câu trả lời của mình mỗi khi bạn có ý tưởng. Chỉnh sửa trong cùng một cửa sổ 5 phút được nhóm thành một bản sửa đổi duy nhất.
Dennis

1
Điều này không thiết lập lại màu thiết bị đầu cuối ở cuối, được yêu cầu.
Thuật sĩ lúa mì

1

Toán học, 67 byte

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

hoặc (60 byte, nhưng có thể được coi là gian lận)
Đây thực sự làTimes["NO","VACANCY"] , nhưng dường như là chính xác.

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

1

BASH, 100 byte

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

Điều này có thể được chơi golf, nhưng tôi không đúng giờ. Tôi sẽ trở lại vấn đề này sau.

-5 byte nhờ @R. Kap


Thay thế if [ $1 -le 200 ]bằng if(($1<200))tiết kiệm 5 byte và sửa lỗi đầu ra không xuất hiện với màu đỏ với đầu vào là 200.
R. Kap

@ R.Kap Cảm ơn. OP yêu cầu màu mặc định ít hơn hoặc bằng 200 mặc dù.
Arc676

Không, OP đã yêu cầu tất cả thông số đỏ cho các đầu vào lớn hơn hoặc bằng 200.
R. Kap

1

Toán học, 47 byte

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

1

Thiết bị đầu cuối kiểu C (* nix), 50 55 52 51 byte

-1 cảm ơn Wheat Wizard

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

Là viết tắt của byte ESC theo nghĩa đen, ASCII 27.

Gọi với f(200), 200 là số. In NO VACANCYmàu theo thông số kỹ thuật.


Trong thiết bị đầu cuối của tôi, điều đó phá vỡ quy tắc của bạn rằng nó không nên thay đổi màu văn bản của trình bao.
Ørjan Johansen

@ RjanJohansen Đã sửa. Tôi quên rằng tôi chạy một vỏ tùy chỉnh tự động đặt màu.
MD XF

Bạn có thể đổi ␛[0mthành␛[m
Wheat Wizard


0

shortC , 48 byte

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

Trong đó ␛ là viết tắt của ASCII 27, byte ESCAPE.


0

GW-BASIC , 78 74 65 byte

-12 cảm ơn Orjan Johansen

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

Nhắc người dùng cho một số nguyên. Đầu ra:

đầu ra


H'm không thể tìm thấy một thông dịch viên trực tuyến, nhưng không thể tham gia dòng 1 và 2 :?
Ørjan Johansen

@ RjanJohansen Wow ... không thể tin rằng tôi hoàn toàn bỏ lỡ điều đó. Cảm ơn, và vâng, không có thông dịch viên trực tuyến. Tuy nhiên, bạn có thể sử dụng trình giả lập đầu tiên trên pcjs.org và gõ BASICAđể có được một cái gì đó đủ gần, mặc dù nó có thể không có màu.
MD XF

Giả sử rằng trình giả lập là đủ tốt: Bạn cần một dòng mới trước dòng đầu tiên PRINT. Tuy nhiên, bạn không cần khoảng trắng sau số dòng và PRINTcó thể được viết tắt ?.
Ørjan Johansen

@ RjanJohansen KHÔNG CÓ CÁCH. Tôi đã sử dụng Microsoft BASIC được tám năm và tôi chưa bao giờ biết về ?= PRINT. Đang cập nhật ...
MD XF

Bạn đã bỏ lỡ các không gian số dòng và dường như có chữ thường đi lạc x.
Ørjan Johansen

0

Tcl / Tk, 96 byte

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

enter image description here

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.