Đó là sinh nhật của tôi: D


112

Giới thiệu

Năm ngoái là sinh nhật của tôi (thực sự!) Và thật buồn khi tôi phải tổ chức bữa tiệc của riêng mình. Chà, bây giờ bạn đã biết, ít nhất bạn có thể làm bánh không?

Thử thách

Cho một số nguyên nlàm đầu vào, viết một chương trình đầy đủ để xuất ra một chiếc bánh sinh nhật có nnến.

Đầu ra

Một miếng bánh với một cây nến trên là:

 $
 |
---
~~~
---

Và một miếng bánh có ba cây nến trên là:

 $ $ $
 | | |
-------
~~~~~~~
-------

Tôi chắc rằng bạn có thể giải quyết nó từ đó

Tuy nhiên , đối với đầu vào0, bạn phải xuất ra như sau:

Congratulations on your new baby! :D

Đối với đầu vào ít hơn 0, bạn nên xuất ra một chiếc bánh không có nến:

---
~~~
---

Không có gì được phép xuất ra STDERR.

Trailing newlines và không gian được cho phép.

Chiến thắng

Mã ngắn nhất trong byte thắng.

Bảng xếp hạng

var QUESTION_ID=57277;OVERRIDE_USER=30525;function answersUrl(e){return"http://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"http://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>


161
Chúc mừng sinh nhật!
Dennis

1
khoảng trắng hàng đầu (ví dụ 2 dòng mới) được phép cho bánh không nến?
Cấp sông St

2
@steveverrill Có

2
@ PaŭloEbermann Một bánh 3-chiều rộng

4
@jvriesem Không. Đó là mã cho đoạn trích.
sigod

Câu trả lời:


36

Pyth, 73 72 71 69 67 byte

?Qjb+m*+\ dQ"$|"*RhyeS,1Q"-~-""Congratulations on your new baby! :D

Hãy thử trực tuyến .

Đầu ra cho n <0 chứa 2 dòng mới hàng đầu, như được phép trong các nhận xét . Để thoát khỏi chúng, sử dụng

?QjbfT+jR*\ hQ"$|"*RhyeS,1Q"-~-""Congratulations on your new baby! :D

Mã nhỏ nhất, dĩ nhiên, dường như ít người đọc nhất.
Sathish Sanjeevi

WTF là đây ??? LOL
Starx

18

CJam, 76 75 byte

ri_W>\_1e>)" $ |--~~--"2/f*Wf<N*"Congratulations on your new baby! :D"?_8>?

Hãy thử trực tuyến trong trình thông dịch CJam .

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

ri           e# Read an integer from STDIN.
_W>          e# Check if it is greater than -1.
\_           e# Swap input and Boolean and copy the input.
1e>)         e# Take the maximum of input and 1 and increment the result.
             e# Let's call the result R.
" $ |--~~--" e# Push that string.
2/           e# Split it into [" $" " |" "--" "~~" "--"].
f*           e# Repeat each chunk R times.
Wf<          e# Discard the last character of each repeated chunk.
N*           e# Join the repreated chunks, separating by linefeeds.

"Congratulations on your new baby! :D"

?            e# If the input is non-zero, select the cake; else, keep the string.
_8>          e# Push a copy and discard the first 8 characters (single candle).
?            e# Select the unmodified cake/string if the input was non-negative,
             e# a candleless cake otehrwise.

11

Ruby, 120 byte

Bản sửa đổi 1 (120 byte)

18 byte được lưu nhờ vào thao tác

n=gets.to_i
puts ['Congratulations on your new baby! :D',%w{\ $ \ | - ~ -}.map{|e|e.ljust 2*n+1,e},'---
~~~
---'][n<=>0]

Sửa đổi 0 (138 byte)

n=gets.to_i
n>0&&[' $',' |',?-,?~,?-].each{|e|puts''.rjust(2*n+1,e)}
puts ['Congratulations on your new baby! :D','','---
~~~
---'][n<=>0]

Đối với số dương: số này lặp qua một chuỗi tương ứng với từng dòng bánh. Chúng được sử dụng làm chuỗi pad để xác minh đúng chuỗi trống có độ dài 2 * n + 1. Điều này tránh bất kỳ sự phức tạp nào khi phải in một số ký tự lẻ, khi độ lặp lại tự nhiên bằng với độ cao của nến (tức là 2 ký tự.) n>0&&Là cần thiết để tránh xuất ra một cột trong trường hợp đầu vào bằng 0.

Đối với tất cả các số: " n<=>0" tìm thấy dấu hiệu của đầu vào. Thông báo con là đầu ra cho n = 0 và một chuỗi trống cho n dương (vì đầu ra chính xác đã được đưa ra ở trên.) Đối với n âm, Ruby diễn giải -1 có nghĩa là phần tử cuối cùng của mảng và xuất ra không có nến bánh ngọt.


1
Không có quá nhiều putssao? n=gets.to_i puts ['Congratulations on your new baby! :D',%w{\ $ \ | - ~ -}.map{|e|''.rjust 2*n+1,e},'--- ~~~ ---'][n<=>0]
manatwork

1
Thêm một: ''.rjuste.ljust.
manatwork

@manatwork cảm ơn, tôi nên phát hiện ra điều đó, nhưng tôi đã làm điều này rất nhanh. Tôi không biết về dấu gạch chéo ngược với% w. Và e.just: rất thông minh.
Cấp sông St

11

R, 157

write(if(n<-scan()){
z=matrix(c("$","|","-","~","-"),N<-2*max(1,n)+1,5,T)
z[seq(1,N,1+(n>0)),1:2]=" "
z}else"Congratulations on your new baby! :D","",N,F,"")

2
Tôi đang học hỏi rất nhiều về việc viết tham số ở đó. Brilliant one
Tensibai

10

R, 228 226 220 221 byte


Lần chỉnh sửa cuối cùng để sửa chiếc bánh không có nến, cũng rộng như cái tích cực đối với các trường hợp tiêu cực, cảm ơn @CathG và @jbaums vì phản hồi

n=scan()
s=strsplit
p=paste0
a=b='-~-'
if(!n)cat('Congratulations on your new baby! :D')else{
if(n>0){a=p('  ',a);b=p('$|',b)}else n=1
a=s(a,'')
b=s(b,'')
d=data.frame(rep(c(a,b),n),a)
cat(do.call(p,d),sep="\n")}

1
Một vài byte có thể được lưu: <-có thể =và bạn có thể sử dụng a=b='-~-'.
jbaums

Ho, cảm ơn @jbaums hãy quên cái đầu tiên = và mặc dù không có sự phân công kép
Tensibai

Bạn có một vấn đề về khung ở đâu đó, tôi nhận đượcError: unexpected '}'
flodel

@flodel sửa. Vấn đề sao chép / dán
Tensibai

10

JavaScript ES6, 136

Sử dụng cảnh báo cho đầu ra - phông chữ tỷ lệ xấu và kết quả là xấu. Trong đoạn trích bên dưới cảnh báo là chuyển hướng đến cơ thể bị cắt, cho kết quả tốt hơn.
Dòng mới bên trong backticks là đáng kể và được tính.

Kiểm tra chạy đoạn mã trong Firefox.

/* Redefine alert for testing purpose */ alert=x=>O.innerHTML=x;

alert((n=+prompt())?[...'$|-~-'].map((c,i)=>(i>1?c:' '+c).repeat(i>1?n>0?n-~n:3:n>0&&n)).join`
`:'Congratulations on your new baby! :D')
<pre id=O></pre>

Ít chơi gôn

n=+prompt(); // get input and convert to number

if (n) { // if n != 0 prepare the cake
   output = [...'$|-~-'].map( // for each char of the five lines
     (c,i) => (i>1 ? c : ' '+c) // in line 0 and 1 symbols are space separated
     // if n < 0 repeat count is 0 for line 0 and 1, 3 for the other
     // if n > 0 repeat count is n for line 0 and 1, n+n+1 for the other
     .repeat(i>1 ? n>0 ? n-~n : 3 : n>0 && n) // 
   ).join`\n`;
}
else {
    output = 'Congratulations on your new baby! :D');
}

alert(output);

Hãy thử điều này $('div pre code')[2].innerHTML;)
Vasu Adari

7

R, 279 byte

Phiên bản tương tác (286 byte):

b<-function(){
n=scan()
if(n==0)cat("Congratulations on your new baby! :D\n")
if(n>0){k=2*n+1;m=rep("-",k);cat(paste(c(rep(c(" ","$"),l=k),"\n",rep(c(" ","|"),l=k),"\n",m,"\n",rep("~",k),"\n",m,"\n"),collapse=""))}
if(n<0){m=rep("-",3);cat(paste(c(m,"\n",rep("~",3),"\n",m,"\n"),collapse=""))}
}

Không phải phiên bản tương tác (279 byte):

b<-function(n){
if(n==0)cat("Congratulations on your new baby! :D\n")
if(n>0){k=2*n+1;m<-rep("-",k);cat(paste(c(rep(c(" ","$"),l=k),"\n",rep(c(" ","|"),l=k),"\n",m,"\n",rep("~",k),"\n",m,"\n"),collapse=""))}
if(n<0){m=rep("-",3);cat(paste(c(m,"\n",rep("~",3),"\n",m,"\n"),collapse=""))}
}

7

MATLAB / Octave, 194 198 195 189 171 167 byte

Chúc mừng sinh nhật bạn Beta Decay! :)

Cảm ơn HamtaroWar Warrior đã cạo sạch 4 byte!


n=input('');m='$|'.';d='  '.';if(n==0)disp('Congratulations on your new baby! :D'),break;elseif(n<0)m=d;n=1;end,disp([[d repmat([m d],1,n)];repmat('-~-'.',1,2*n+1)]);

Chạy mẫu

Tôi đặt nó vào một tập tin script được gọi happy_birthday.m, sau đó chạy nó một vài lần trong dấu nhắc lệnh. Xin lưu ý rằng khi bạn nhập số âm, có hai lợi nhuận vận chuyển hàng đầu, nhưng điều đó được cho phép trong thử thách này:

>> happy_birthday
-1


---
~~~
---
>> happy_birthday
0
Congratulations on your new baby! :D
>> happy_birthday
1
 $ 
 | 
---
~~~
---
>> happy_birthday
2
 $ $ 
 | | 
-----
~~~~~
-----
>> happy_birthday
3
 $ $ $ 
 | | | 
-------
~~~~~~~
-------
>> happy_birthday
4
 $ $ $ $ 
 | | | | 
---------
~~~~~~~~~
---------
>> happy_birthday
5
 $ $ $ $ $ 
 | | | | | 
-----------
~~~~~~~~~~~
-----------

Mã với khoảng cách và giải thích

% Get the input number from the user
n=input('');

% If the number is positive, the core candle sequence is going to be a column vector of a $ followed by a | character
m='$|'.';    

%// Array of one column and it has two spaces - going to use more than once
d = '  '.';

% If the number is 0, display the congratulations message and get out
if(n==0)
    disp('Congratulations on your new baby! :D')
    break;

% m stores the core candle sequence for displaying on the screen
% If the number is negative, the core candle sequence is going to be a column of two blank spaces
elseif(n<0)
    m=d; 
    n=1; % n is set to 1 as this is the number of "blank candles" we want to display
end

% This displays candles and the base together
% The top half is the displaying of the candles
% It is a column vector of spaces, followed by pairs of $,| in a column
% and another column of spaces - repeated n times
% The bottom half is the displaying of the cake
% The bottom half is a column vector of -,~,- for the base of the cake
% and is repeated 2*n + 1 times to match the candle display
disp([[d repmat([m d],1,n)];repmat('-~-'.',1,2*n+1)]);

Phần hiển thị ở cuối có lẽ là phần khó hiểu nhất của mã. Điều này sẽ hiển thị một ma trận ký tự 5 hàng trong đó hai hàng đầu tiên bao gồm các nến và ba hàng cuối cùng bao gồm đế của bánh.

Cơ sở cho nửa trên của màn hình là hai khoảng trắng trong một cột theo sau là hai khoảng trắng khác trong cột khác trong trường hợp tuổi âm hoặc $,-một cột trong hai cột theo sau là hai khoảng trắng trong cột khác. Đây là một ma trận 2 x 2 ký tự. Cơ sở cho nửa dưới của màn hình là một vectơ cột đơn trong -,~,-đó là ma trận 3 x 1 ký tự.

Lệnh hiển thị trước tiên xử lý hai hàng đầu tiên của bánh bằng cách đặt hai khoảng trắng vào cột đầu tiên, theo sau các cặp cột $,-hoặc cột không gian nếu nâm, được thay đổi thành n=1và một cột khác có hai khoảng trắng được lặp lại cho một tổng số nlần. Ba hàng tiếp theo chỉ cần sao chép -,$,-vectơ cột theo 2*n + 1thời gian để sắp xếp các nến cùng với đế, do đó hoàn thành bức tranh.

Hãy thử trực tuyến!

Bạn có thể thử trực tuyến bằng trình biên dịch Octave của IDEOne: http://ideone.com/4qXDdJ - tuy nhiên, có một lỗi nhỏ khi đọc các giá trị từ đầu vào tiêu chuẩn. Như vậy, tập lệnh được sửa đổi một chút trong đó bạn phải thay đổi giá trị nở đầu mã. Ngã ba phiên bản mới của tập lệnh và thay đổi giá trị này thành bất kỳ giá trị số nguyên nào phù hợp với bạn để xem kết quả đầu ra trông như thế nào.


1
Đáng tiếc bạn không thể lưu dấu chấm vào ' '.'!
Luis Mendo

1
@LuisMendo - Tôi biết! ... mặc dù tôi chắc chắn rằng bạn không phản đối việc sử dụng chuyển vị theo cách đó :)
rayryeng

1
Hahaha. Tôi đã từng nói ở đây rằng trang web này là để lạm dụng ngôn ngữ. Và tôi trung thành với quy tắc đó!
Luis Mendo

1
@LuisMendo - Tôi thực sự muốn thoát khỏi dấu chấm ... nhưng không thể vì MATLAB diễn giải rằng đó là một trích dẫn trong chuỗi :(. Sẽ tiết kiệm cho tôi một vài byte ... nhưng sau nhiều lần lặp lại, điều này đã xảy ra điều tốt nhất tôi có thể nghĩ ra.
rayryeng

@LuisMendo - quản lý để thu nhỏ nó xuống còn 171!
rayryeng

6

JavaScript, 143 153 byte

for(v in k=' $ 0 | 0---0~~~0---'.split(+!(n=+prompt(c=''))))c+=k[v].repeat(n<0?1:n)+'\n';alert(n>0?c:n?c.slice(8):'Congratulations on your new baby! :D')

Để xem đầu ra trong phông chữ không gian đơn, thay thế 'alert' bằng 'console.log'


Chào mừng đến với PPCG! :)

2
Đáng buồn thay, điều này cũng hiển thị thông báo chúc mừng cho đầu vào tiêu cực.
manatwork

@BetaDecay tnx :-)
Nainemom

Đúng Manatwork của: / Tôi không biết đủ JS giúp

@manatwork có bạn đúng! tôi đã hiểu nhầm!
Nainemom

5

Moonscript, 141 byte

n=0+io.read!
m=3
f=(s='-')->print s\rep m
if n>0
 m=n
 m=1+2*m,f' $',f' |'
if n==0 print"Congratulations on your new baby! :D"else f f!,f'~'

3
Chào mừng bạn đến với Câu đố lập trình và Code Golf!
Dennis


4

JavaScript ES6, 154 ký tự

alert((n=+prompt())?((n>0?` $
 |
`:(n=1)&&"")+`--
~~
--`).replace(/../gm,x=>x.repeat(n)).replace(/(.).*/gm,"$&$1"):"Congratulations on your new baby! :D")

Và thêm một (154 nữa)

alert((n=+prompt())?` $
 |
--
~~
--`.slice(n<0?(n=1)-9:0).replace(/../gm,x=>x.repeat(n)).replace(/(.).*/gm,"$&$1"):"Congratulations on your new baby! :D")

Để xem đầu ra ở phông chữ đơn cách (và di chuyển ouptut sang bàn điều khiển), hãy sử dụng

alert=x=>console.log(x)

4

Chuột , 164 161 byte

?N:N.0=["Congratulations on your new baby"33!'" :D"$]N.0>[#P,32!'36,N.;#P,32!'124,N.;]N.0<[1N:]2N.*1+D:#P,45,D.;#P,126,D.;#P,45,D.;$P0I:(I.2%=0=^1%!'I.1+I:)"!"@

Chuột rõ ràng không phải là một lựa chọn lý tưởng cho nhiệm vụ này, nhưng nó rất vui.

Ung dung:

? N.                               ~ Read N from STDIN
N. 0 = [                           ~ Have a baby for N == 0
  "Congratulations on your new baby" 33 !' " :D" $
]
N. 0 > [                           ~ If N > 0...
  #P, 32 !' 36, N.;                ~ Print the candle flames
  #P, 32 !' 124, N.;               ~ Print the candle sticks
]
N. 0 < [                           ~ If N < 0...
  1 N:                             ~ Set N = 1
]
2 N. * 1 + D:                      ~ Assign D = 2N + 1
#P, 45, D.;                        ~ Print the top cake layer
#P, 126, D.;                       ~ Print the middle layer
#P, 45, D.;                        ~ Print the bottom
$P                                 ~ Define the printing macro...
  0 I:                             ~ Initialize I to 0
  ( I. 2% = 0 = ^                  ~ While I != the second input
    1% !'                          ~ Print the first input
    I. 1 + I:                      ~ Increment I
  )
  "!"                              ~ Print a newline
@

Ngăn xếp chỉ có thể chứa số nguyên. !'lấy một số nguyên ra khỏi ngăn xếp và in ký tự ASCII bằng mã đó.


4

CoffeeScript, 160 byte

f=(i,l=[" $ "," | ",_="---","~~~",_])->if!i then"Congratulations on your new baby! :D"else (if i<0then[_,l[3],_]else i++;(Array(i).join r for r in l)).join "\n"

Ung dung:

f=(i)->
  l = [" $ "," | ","---","~~~","---"] # The layers
  if i == 0
    return "Congratulations on your new baby! :D"
  else if i < 0
    return [l[2], l[3], l[2]].join("\n")
  else
    i++
    return (Array(i).join(r) for r in l).join("\n")

Sử dụng nó như:

f(10) # In the CoffeeScript console
alert(f(~~prompt("Y"))) # Browser, alert popup
console.log(f(~~prompt("Y"))) # Browser, log to console, and thus has monospace font

Dùng thử trực tuyến: link (Chứa một số mã hiển thị tùy chỉnh, vì vậy mọi thứ trông rất đẹp ...)

Ooops, gần như quên nó! Chúc mừng sinh nhật, @BetaDecay!


4

C, 392 byte

(lỗi phân đoạn đã biết nếu không có đối số được đưa ra)

#include <stdio.h>
#define P(s) printf(s);
#define F for(i=0;i<n;i++)
#define A(s, e) F{P(s)}P(e "\n")
int main(int c, char**v){int i,n=atoi(v[1]);if(n<0){n=3;A("-",)A("~",)A("-",)}else if(!n)P("Congratulations on your new baby! :D\n")else{A(" $",)A(" |",)A("--","-")A("~~","~")A("--","-")}}

Khoảng cách tối đa và đa dạng

#include <stdio.h>
#define P(s) printf ( s ) ;
#define F for ( i = 0 ; i < n ; i++ )
#define A(s, e) F { P ( s ) } P ( e "\n" )
int main ( int c, char ** v )
{
        int i, n = atoi ( v [ 1 ] ) ; 
        if ( n < 0 ) 
        {   
                n = 3 ; 
                A ( "-", )
                A ( "~", )
                A ( "-", )
        }   
        else if ( ! n ) 
                P ( "Congratulations on your new baby! :D\n" )
        else
        {   
                A ( " $", )
                A ( " |", )
                A ( "--", "-" )
                A ( "~~", "~" )
                A ( "--", "-" )
        }   
}

Không có C soạn sẵn số # xác định và tổng số cơ thể chính là 247.
Funmungus

Chào mừng đến với PPCG! Đây là một câu trả lời thực sự tốt - tôi đặc biệt thích lạm dụng vĩ mô với A. Tôi thấy có thêm một vài khoảng trắng có thể được loại bỏ và thay vào đó bạn có thể loại bỏ ibằng cách sử dụng cbiến vòng lặp. Ngoài ra, ít nhất là với gcc, bao gồm stdio.h hoặc chỉ định loại trả về của main () là không cần thiết: trình biên dịch phàn nàn về nó, nhưng hey, đây là mã golf. ;)
DLosc

4

Powershell, 139 134 132 126 byte

$n=$args[0];if($n){$d=3;if($n-gt0){' $'*$n;' |'*$n;$d=$n*2+1}'-'*$d;'~'*$d;'-'*$d}else{'Congratulations on your new baby! :D'}

Bạn có thể lưu 5 byte bằng cách sử dụng $inputthay vì $args[0](câu hỏi không nói là sử dụng đối số thay vì stdin) và bạn có thể sử dụng unary +để chuyển đổi thành số:$n=+$input;
briantist

+ $ input dường như không hoạt động - nó phàn nàn rằng $ input là một liệt kê và không có toán tử bổ sung. Tuy nhiên, $args[0]có thể và nên là một int thực tế, cho phép chúng ta ít nhất bỏ qua [int].
Justin Dunlap

1
Vì vậy, điều này thực sự cũ, nhưng bạn có thể lưu một vài byte bằng cách di chuyển đầu vào vào ifvà hoán đổi elsecho ;exit- 122 byte -if($n=$args[0]){$d=3;if($n-gt0){' $'*$n;' |'*$n;$d=$n*2+1}'-'*$d;'~'*$d;'-'*$d;exit}'Congratulations on your new baby! :D'
admBorkBork

4

Ceylon, 322 307 300 282 278 260 byte

shared void run(){if(exists t=process.readLine(),exists n=parseInteger(t)){String r(String s)=>s.repeat(n);print(n>0thenr(" $")+"\n"+r(" |")+"\n"+r("--")+"-\n"+r("~~")+"~\n"+r("--")+"-"else(n<0then"---\n~~~\n---"else"Congratulations on your new baby! :D"));}}

Bản gốc chưa được đánh gôn (giả sử bánh tiêu cực có chiều rộng 3 thay vì trên2 · n + 1):

shared void birthdayCake() {
    if (exists text = process.readLine(), exists number = parseInteger(text)) {
        switch (number <=> 0)
        case (equal) {
            print("Congratulations on your new baby! :D");
        }
        case (smaller) {
            print("---\n~~~\n---");
        }
        case (larger) {
            print(" $".repeat(number));
            print(" |".repeat(number));
            print("--".repeat(number) + "-");
            print("~~".repeat(number) + "~");
            print("--".repeat(number) + "-");
        }
    }
}

Điều này có tính năng danh sách điều kiện trong câu lệnh if, mỗi điều kiện xác định một giá trị có thể sử dụng trong các điều kiện sau và trong phần thân. Bởi vì chúng có exist, điều kiện chỉ được đáp ứng khi các giá trị không phải là null và do đó trình biên dịch biết các giá trị không phải là null cho mã sau. (Nếu không có gì được nhập (EOF), readline trả về null. Nếu parseInteger đánh một số nguyên, nó cũng trả về null. Chương trình của chúng tôi không làm gì cả. Vì hành vi cho những trường hợp đó không được xác định, tôi đoán điều này không sao.)

Ngoài ra chúng tôi có các <=>nhà điều hành, mà bản đồ để các Comparable.comparephương pháp, và trả về một Comparisonđối tượng, tức là một trong những equal, smallerlarger. Trình biên dịch biết rằng những loại này làm cạn kiệt Comparisonloại, vì vậy không có elsemệnh đề nào là cần thiết trong switchcâu lệnh của chúng tôi .

Các repeatphương pháp của lớp String làm những gì người ta mong đợi. Nó thực sự được kế thừa từ phương thức cùng tên trong giao diện Iterable (như một chuỗi, bên cạnh các thứ khác, chỉ là một danh sách các ký tự).

Thay thế các định danh của tôi bằng các ký tự một chữ cái và xóa khoảng trắng không cần thiết sẽ cung cấp 322 ký tự:

shared void b(){if(exists t=process.readLine(),exists n=parseInteger(t)){switch(n<=>0)case (equal){print("Congratulations on your new baby! :D");}case(smaller){print("---\n~~~\n---");}case(larger){print(" $".repeat(n));print(" |".repeat(n));print("--".repeat(n)+"-");print("~~".repeat(n)+"~");print("--".repeat(n)+"-");}}}

Thay thế chuỗi printbằng \ns rõ ràng (và một đơn print) đưa nó xuống 307:

shared void b(){if(exists t=process.readLine(),exists n=parseInteger(t)){switch(n<=>0)case(equal){print("Congratulations on your new baby! :D");}case(smaller){print("---\n~~~\n---");}case(larger){print(" $".repeat(n)+"\n"+" |".repeat(n)+"\n"+"--".repeat(n)+"-\n"+"~~".repeat(n)+"~\n"+"--".repeat(n)+"-");}}}

Tôi đã thử nhập bí danh repeatdưới dạng r, nhưng không được (khai báo nhập thêm 40 ký tự và chúng tôi chỉ có thể lưu 25 bằng cách thay thế repeatbằng r).

Những gì hơi giúp đỡ, là sử dụng n.signthay vì n<=>0. Trong khi hai biểu thức này có độ dài văn bản tương tự, họ có các loại khác nhau: Người thứ hai là loại Comparisonđã đề cập trước (trong đó có ba giá trị smaller, largerequal), là cựu có kiểu Integer, với các giá trị -1, 1, 0... và bởi vì Integercó nhiều giá trị hơn, chúng ta cũng cần một elsemệnh đề. Nó dài 300 ký tự:

shared void b(){if(exists t=process.readLine(),exists n=parseInteger(t)){switch(n.sign)case(0){print("Congratulations on your new baby! :D");}case(-1){print("---\n~~~\n---");}case(1){print(" $".repeat(n)+"\n"+" |".repeat(n)+"\n"+"--".repeat(n)+"-\n"+"~~".repeat(n)+"~\n"+"--".repeat(n)+"-");}else{}}}

Ở đây với khoảng trắng:

shared void b() {
    if (exists t = process.readLine(), exists n = parseInteger(t)) {
        switch (n.sign)
        case (0) {
            print("Congratulations on your new baby! :D");
        }
        case (-1) {
            print("---\n~~~\n---");
        }
        case (1) {
            print(" $".repeat(n) + "\n" +
                        " |".repeat(n) + "\n" +
                        "--".repeat(n) + "-\n" +
                        "~~".repeat(n) + "~\n" +
                        "--".repeat(n) + "-");
        }
        else {}
    }
}

Chúng tôi có thể an toàn hơn một chút bằng cách từ chức về câu lệnh chuyển đổi của chúng tôi và sử dụng if, sắp tới 282 ký tự (= byte):

shared void b(){if(exists t=process.readLine(),exists n=parseInteger(t)){if(n==0){print("Congratulations on your new baby! :D");}else if(n<0){print("---\n~~~\n---");}else{print(" $".repeat(n)+"\n"+" |".repeat(n)+"\n"+"--".repeat(n)+"-\n"+"~~".repeat(n)+"~\n"+"--".repeat(n)+"-");}}}

Định dạng:

shared void b() {
    if (exists t = process.readLine(), exists n = parseInteger(t)) {
        if (n == 0) {
            print("Congratulations on your new baby! :D");
        } else if (n < 0) {
            print("---\n~~~\n---");
        } else {
            print(" $".repeat(n) + "\n" +
                        " |".repeat(n) + "\n" +
                        "--".repeat(n) + "-\n" +
                        "~~".repeat(n) + "~\n" +
                        "--".repeat(n) + "-");
        }
    }
}

Chúng ta có thể an toàn một byte khác bằng cách hoán đổi các trường hợp xung quanh, vì >nó ngắn hơn ==. Một "phiền toái" khác là lặp đi lặp lại repeat(n)- chúng ta có thể định nghĩa một hàm cục bộ (một bao đóng, nó nhớ ntừ khối xác định) với một tên ngắn hơn:

String r(String s) => s.repeat(n);

Đây là một cách viết ngắn hơn này:

String r(String s) {
    return s.repeat(n);
}

Chúng ta có thể sử dụng functionthay vì kiểu trả về cho kiểu suy luận, nhưng điều này không ngắn hơn. Điều này cung cấp cho chúng tôi 278 byte:

shared void b(){if(exists t=process.readLine(),exists n=parseInteger(t)){if(n>0){String r(String s)=>s.repeat(n);print(r(" $")+"\n"+r(" |")+"\n"+r("--")+"-\n"+r("~~")+"~\n"+r("--")+"-");}else if(n<0){print("---\n~~~\n---");}else{print("Congratulations on your new baby! :D");}}}

Định dạng:

shared void b() {
    if (exists t = process.readLine(), exists n = parseInteger(t)) {
        if (n > 0) {
            String r(String s) => s.repeat(n);
            print(r(" $") + "\n" + r(" |") + "\n" + r("--") + "-\n" + r("~~") + "~\n" + r("--") + "-");
        } else if (n < 0) {
            print("---\n~~~\n---");
        } else {
            print("Congratulations on your new baby! :D");
        }
    }
}

Trên thực tế, sử dụng các toán tử thenelsetoán tử thay cho các ifcâu lệnh cho phép chúng ta lưu một số cuộc gọi của print(và một số dấu ngoặc nhọn):

shared void run() {
    if (exists t = process.readLine(), exists n = parseInteger(t)) {
        String r(String s) => s.repeat(n);
        print(n > 0 then r(" $") + "\n" +
                        r(" |") + "\n" +
                        r("--") + "-\n" +
                        r("~~") + "~\n" +
                        r("--") + "-"
                    else (n < 0
                        then "---\n~~~\n---"
                        else "Congratulations on your new baby! :D"));
    }
}

Đây chỉ là 261 byte:

shared void run(){if(exists t=process.readLine(),exists n=parseInteger(t)){String r(String s)=>s.repeat(n);print(n>0thenr(" $")+"\n"+r(" |")+"\n"+r("--")+"-\n"+r("~~")+"~\n"+r("--")+"-"else(n<0then"---\n~~~\n---"else"Congratulations on your new baby! :D"));}}

(Tôi đã sử dụng runthay bcho tên hàm vì cách này có thể được chạy ceylon runmà không cần chuyển tên hàm.)

Kho lưu trữ Github của tôi có một phiên bản nhận xét về điều này .


3

Python 2, 158 byte


i=input()
l='\n'
s=''
if i==0:s='Congratulations on your new baby! :D'
elif i<0:s='---\n~~~\n---'
else:n=i*2+1;a=l+'-'*n;s=' $'*i+l+' |'*i+a+l+'~'*n+a
print s

3

golflua, 113 ký tự

\p(c)w(S.t(c,n))~$n=I.r()+0?n==0w"Congratulations on your new baby! :D"!??n>0p" $"p" |"n=n*2+1!?n=3$p"-"p"~"p"-"$

Chạy mẫu:

bash-4.3$ golflua -e '\p(c)w(S.t(c,n))~$n=I.r()+0?n==0w"Congratulations on your new baby! :D"!??n>0p" $"p" |"n=n*2+1!?n=3$p"-"p"~"p"-"$' <<< 5
 $ $ $ $ $
 | | | | |
-----------
~~~~~~~~~~~
-----------

bash-4.3$ golflua -e '\p(c)w(S.t(c,n))~$n=I.r()+0?n==0w"Congratulations on your new baby! :D"!??n>0p" $"p" |"n=n*2+1!?n=3$p"-"p"~"p"-"$' <<< 0
Congratulations on your new baby! :D

bash-4.3$ golflua -e '\p(c)w(S.t(c,n))~$n=I.r()+0?n==0w"Congratulations on your new baby! :D"!??n>0p" $"p" |"n=n*2+1!?n=3$p"-"p"~"p"-"$' <<< -5
---
~~~
---

3

Python 2, 150 byte

m=input()
n=m-1
p="---"+"--"*n
g="\n~~~"+"~~"*n+"\n"
if m>0:print" $"*m,"\n"," |"*m
s=p+g+p
print s if m!=0 else"Congratulations on your new baby! :D"

Gần với Python của tác giả :(


3

Perl, 139 127 117 byte

Không yêu cầu tùy chọn '-n' hoặc '-p'.

Bản sửa đổi 3 (với lời cảm ơn đến Dom Hastings bên dưới):

$==<>;map{print$_ x(!$=||(/ /?$=:($=<1||$=)*2+1)).$/}!$=?'Congratulations on your new baby! :D':split 0,' $0 |0-0~0-'

Sửa đổi 2:

$n=<>;map{print$_ x($n==0?1:(/ /?$n:($n<1?1:$n)*2+1)).$/}$n==0?('Congratulations on your new baby! :D'):(' $',' |','-','~','-')

Sửa đổi 1:

$n=<>;map{print$_ x(($l=length())>2?1:($l==2?$n:($n<1?1:$n)*2+1)).$/}$n==0?('Congratulations on your new baby! :D'):(' $',' |','-','~','-')

Đây là phiên bản sửa đổi 3 không có dòng mới trống hàng đầu về đầu vào âm - 132 byte.

$==<>;map{print$_ x(!$=||(/ /?$=:($=<1||$=)*2+1)).(/ /&&$=<0?'':$/)}!$=?'Congratulations on your new baby! :D':split 0,' $0 |0-0~0-'

Chào, chào mừng! Tôi nghĩ rằng tôi sẽ chia sẻ một vài cách bạn có thể lưu một số byte! Bạn có thể thả các dấu ngoặc xung quanh "Congratulations..."và nếu bạn thay thế ' $',' |','-','~','-'bằng split 0,' $0 |0-0~0-'các dấu ngoặc cũng vậy. Một tiết kiệm khác được thay thế $n=<>;$n==0bằng ($n=<>)==0. Ngoài ra, bạn ?1:có thể ||như bạn đang nói $n==0(đó là 1) hoặc tính toán của bạn. Mong rằng sẽ giúp!
Dom Hastings

Này, cảm ơn vì điều đó. Các dấu ngoặc này là một dấu ngoặc tốt và nhắc nhở tôi về ngữ nghĩa ||là rất hữu ích - $=về cơ bản chomp, nó nhắc nhở tôi về đầu vào, loại bỏ yêu cầu đối với các bài kiểm tra giá trị 0 cụ thể. Tôi không chắc ý của bạn là gì $n=<>;$n==0- golf của tôi không có điều đó và do tôi xử lý trường hợp đầu vào = 0 làm đầu vào map{}(), tôi không chắc điều này sẽ áp dụng như thế nào? Dù sao, lấy ý kiến ​​của bạn và sử dụng $=như là biến của tôi, điều này đã được giảm xuống còn 117 parbyte. Cảm ơn rất nhiều!
phillipo

Không có vấn đề gì cả! Vui mừng vì đã giúp đỡ! Ý tôi là bạn có $n=<>;ngay từ đầu và sau đó $n==0ở phía sau map{}...nên tôi nghĩ bạn có thể kiểm tra ($n=<>)==0nhưng nếu bạn đang sử dụng $=thay vào đó, bạn có thể thu nhỏ lại nhiều hơn! Tôi luôn quên cái nào trong số $-hoặc $=không thể phủ định vì vậy tôi không muốn đề cập đến nó và sai! :)
Dom Hastings

3

Pip, 74 + 1 = 75 byte

Lấy tuổi làm đối số dòng lệnh. Yêu cầu -ncờ.

Y^"-~-"a?a<0?yX3(s.^"$|")XaALyX2*a+1"Congratulations on your new baby! :D"

Kho lưu trữ Github cho Pip

Đối số dòng lệnh được lưu trữ trong a. Chúng tôi chia "-~-"thành một danh sách các ký tự và mắt cá chân Ythành biến y. Phần còn lại của chương trình là một biểu hiện ternary lớn:

  • a?
    Nếu alà sự thật (tức là không bằng không):
    • a<0?yX3
      Nếu alà âm, trả về yvới mỗi phần tử được lặp lại 3 lần:["---";"~~~";"---"]
    • Khác ( alà tích cực):
      • (s.^"$|")Xa
        Chia "$|"thành một danh sách các ký tự, thêm một khoảng trắng ( s) cho mỗi ký tự và lặp lại từng alần phần tử kết quả
      • yX2*a+1
        Lặp lại từng yếu tố của y 2*a+1thời gian
      • AL
        Nối hai danh sách
  • Khác ( abằng không), trả về chuỗi chúc mừng

Vào cuối chương trình, -ncờ đảm bảo rằng các danh sách được in với các thành phần trên các dòng riêng biệt, do đó hiển thị một lớp bánh đúng cách.

Dưới đây là các bước cho một đầu vào của 2:

Candles
["$";"|"]
[" $";" |"]
[" $ $";" | |"]

Cake
["-";"~";"-"]
["-----";"~~~~~";"-----"]

Put it together
[" $ $";" | |";"-----";"~~~~~";"-----"]

Final output
 $ $
 | |
-----
~~~~~
-----

Chúc mừng sinh nhật!


2

Perl, 144 byte

143 byte mã, cộng thêm một byte cho -nchuyển đổi để bắt stdin.

if($_!=0){print$_>0?" \$"x$_.$/." |"x$_.$/:""x($_=1);$_=$_*2+1;print"-"x$_.$/."~"x$_.$/."-"x$_;exit}print"Congratulations on your new baby! :D"

1
print"-~-"=~s!.!$&x($_*2+1).$/!gercho bánh?
manatwork

Nếu bạn thay đổi công tắc -pnày cũng sẽ hoạt động:$_=$_!=0?($_>0?' $'x$_.$/." |"x$_:""x($_=1))."-~-"=~s!.!$/.$&x($_*2+1)!ger:"Congratulations on your new baby! :D"
manatwork

2

SpecBAS, 164

Sử dụng phím tắt dấu nháy đơn để chuyển sang dòng mới

INPUT n: IF n=0 THEN PRINT "Congratulations on your new baby! :D" ELSE IF n<0 THEN PRINT "---"'"~~~"'"---" ELSE PRINT " $"*n'" |"*n'"-";"--"*n'"~";"~~"*n'"-";"--"*n

Định dạng để đọc dễ dàng hơn

INPUT n
IF n=0 THEN PRINT "Congratulations on your new baby! :D" 
ELSE IF n<0 THEN PRINT "---"'"~~~"'"---" 
ELSE PRINT " $"*n'" |"*n'"-";"--"*n'"~";"~~"*n'"-";"--"*n

2

Python 3, 169 byte

n=int(input())
m=max(n*2+1,3)
f=' {}'*n+'\n'+' {}'*n+'\n'+'-'*m+'\n'+'~'*m+'\n'+'-'*m
if n==0:f='Congratulations on your new baby! :D'
print(f.format(*['$']*n+['|']*n))

2

Julia, 143 byte

n=int(readline())
p=println
l="\n"
n>0&&p(" \$"^n*l*" |"^n)
d=2(n<0?1:n)+1
p(d>1?"-"^d*l*"~"^d*l*"-"^d:"Congratulations on your new baby! :D")

Khá đơn giản. Ung dung:

# Read n from STDIN and convert to an integer
n = int(readline())

# Print the candles for positive n
n > 0 && println(" \$"^n * "\n" * " |"^n)

# Define d as the width of the cake
d = 2(n < 0 ? 1 : n) + 1

# Newborns can't eat cake
if d > 1
    println("-"^d * "\n" * "~"^d * "\n" * "-"^d)
else
    println("Congratulations on your new baby! :D")
end

2

Lua, 299 byte

a=0+io.read() b=string.rep p=print if a==0 then p("Congratulations on your new baby! :D") else p(b(" ",a)..b("$ ",a)..("\n")..b(" ",a)..b("| ",a)) if a<0 or a==1 then p("---\n~~~\n---") else p(b(" ",a-1).."-"..b("-",2*a).."\n"..b(" ",a-1).."~"..b("~",2*a).."\n"..b(" ",a-1).."-"..b("-",2*a))end end

1
Chào mừng đến với PPCG! Mã của bạn có vẻ như đưa ra một lỗi ( attempt to compare string with number), nhưng thêm 0+trước khi io.read()sửa nó cho tôi. Bạn cũng có thể lưu khá nhiều byte bằng cách gán printstring.repcho các biến ký tự đơn.
DLosc

@DLosc cảm ơn ý kiến ​​hay :) và vâng, bạn đã đúng với lỗi xin lỗi về điều đó
FabiF

2

Toán học, 164 byte

Hoàn toàn bỏ lỡ những chiếc bánh không có nến trong n <0, thêm 15 ký tự

r[a_,b_]:=StringRepeat[a,Abs@b];c=" $ ";t="---";m="~~~";f[n_]:=If[n>0,r[c,n]~~"\n",""]~~r[t,n]~~"\n"~~r[m,n]~~"\n"~~r[t,n];f[0]:="Congratulations on your new baby! :D"

1
Chào mừng bạn đến với PPCG, thử thách này được gọi là mã golf, nơi bạn thử và làm cho mã của mình càng ngắn càng tốt. Điều này có thể được thực hiện bằng cách loại bỏ khoảng trắng không cần thiết và rút ngắn tên biến.

Cảm ơn @BetaDecay tôi đã nhận được một phiên bản nhanh chóng .. giảm thiểu ngay bây giờ. Chúc mừng: D
Martin John Hadley

Không vấn đề gì. Có vẻ tốt :)

2

pb , 567 byte

^w[B=45]{vb[-1]^b[0]>w[B!0]{t[B]b[0]<b[T]>>}<}w[B!0]{>}b[65]w[X!0]{<b[B-48]}>w[B!65]{t[B]<t[B*10+T]b[0]>b[T]>}b[0]<t[B]b[0]<[X]>b[T]<b[T]vw[B=0]{b[1]}t[B]b[0]^b[B*T]vw[X!3]{b[45]vb[126]vb[45]^^>}^<<t[B]<b[B+T]w[B!0]{<vw[X!3]{b[0]vb[0]vb[0]^^>}^<<t[B]vvw[T!0]{b[124]^b[36]v>>t[T-1]}v<w[X!-1]{b[45]vb[126]vb[45]^^<}}^[Y]^<[X]>w[B=0]{>vvw[X!-1]{b[0]vb[0]^<}^>}t[111]b[67]>b[T]>b[110]>b[103]>b[114]>b[97]>b[116]>b[117]>b[108]>b[97]>b[116]>b[105]>b[T]>b[110]>b[115]>>b[T]>b[110]>>b[121]>b[T]>b[117]>b[114]>>b[110]>b[101]>b[119]>>b[98]>b[97]>b[98]>b[121]>b[33]>>b[58]>b[68]

Tôi có một số hối tiếc.

Có một số cách mà điều này có thể tốt hơn. Ví dụ, khi nhận ra rằng đầu vào là âm, sau đó tôi tiến hành suy ra đó là số âm nào. Điều này là không cần thiết và có thể một ngày nào đó tôi sẽ quay lại mã này để ngăn chặn nó.

Đừng cố chạy cái này trong chế độ "xem" của pbi, nếu bạn nhập âm bản thì nó sẽ bị sập khi nó cố in chr(-1).

Đây là phiên bản được giải thích nơi tôi ghi chú trong khi viết chương trình. Nếu bạn muốn hiểu rõ hơn về cách thức hoạt động của nó ... chúc may mắn và cho tôi biết nếu bạn tìm ra nó.

# parse number

^w[B=45]{vb[-1]^b[0]>     # if negative, put a -1 at (0, 0)
    w[B!0]{t[B]b[0]<b[T]>>} # move all digits left
<}
w[B!0]{>}b[65]        # put an "A" at the end of the number
w[X!0]{<b[B-48]}      # subtract 48 from each byte to get the digits of the number
>w[B!65]{             # while there's no "A" at the second digit
    t[B]<t[B*10+T]      # set T to (first digit * 10) + second digit
    b[0]                # destroy first digit
    >b[T]               # override 2nd digit with T
    >}                  # point at second digit to restart loop
b[0]<t[B]b[0]<[X]>b[T]<b[T] # move number to (0, -1) and (1, -1)
vw[B=0]{b[1]}t[B]b[0]^b[B*T] # multiply (0, -1) by -1 if required
vw[X!3]{b[45]vb[126]vb[45]^^>} # draw the negative cake
^<<t[B]<b[B+T]w[B!0]{ # if it's positive
    <vw[X!3]{b[0]vb[0]vb[0]^^>} # erase the cake
    ^<<t[B]vvw[T!0]{b[124]^b[36]v>>t[T-1]} # draw the candles
    v<w[X!-1]{b[45]vb[126]vb[45]^^<}       # draw the cake
}^[Y]^<[X]>w[B=0]{>vvw[X!-1]{b[0]vb[0]^<}^>} # erase the part of the cake that would show up
# hardcoded string for input 0
t[111]b[67]>b[T]>b[110]>b[103]>b[114]>b[97]>b[116]>b[117]>b[108]>b[97]>b[116]>b[105]>b[T]>b[110]>b[115]>>b[T]>b[110]>>b[121]>b[T]>b[117]>b[114]>>b[110]>b[101]>b[119]>>b[98]>b[97]>b[98]>b[121]>b[33]>>b[58]>b[68]

2

ScriptCS (tập lệnh C #), 221 byte

Rõ ràng điều này sẽ không giành được bất kỳ giải thưởng nào, nhưng ...

var n=int.Parse(Env.ScriptArgs[0]);Console.WriteLine(n==0?"Congratulations on your new baby! :D":string.Join("\n",new[]{" $"," |","-","~","-"}.Select((s,i)=>string.Concat(Enumerable.Repeat(s,i>1?(n>0?n:1)*2+1:n>0?n:0)))))
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.