यह मेरा जन्मदिन है: डी


112

परिचय

पिछले साल मेरा जन्मदिन था (वास्तव में!) और दुख की बात है कि मुझे अपनी पार्टी का आयोजन करना पड़ा। अच्छा, अब आप जानते हैं, क्या आप कम से कम केक नहीं बना सकते?

चुनौती

nइनपुट के रूप में पूर्णांक को देखते हुए , मोमबत्तियों के साथ जन्मदिन का केक उत्पादन करने के लिए एक पूर्ण कार्यक्रम लिखें n

उत्पादन

एक मोमबत्ती पर केक का एक टुकड़ा है:

 $
 |
---
~~~
---

और तीन मोमबत्तियों के साथ केक का एक टुकड़ा है:

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

मुझे यकीन है कि आप इससे काम कर सकते हैं

हालाँकि , इनपुट के लिए0, आपको निम्न का उत्पादन करना होगा:

Congratulations on your new baby! :D

से कम इनपुट के लिए 0, आपको एक कैंडल रहित केक का उत्पादन करना चाहिए:

---
~~~
---

कुछ भी STDERR को आउटपुट करने की अनुमति नहीं है।

अनुगामी newlines और रिक्त स्थान की अनुमति है।

जीतना

बाइट्स में सबसे छोटा कोड जीतता है।

लीडरबोर्ड

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
जन्मदिन की शुभकामनाएं!
डेनिस

1
मोमबत्ती के केक के लिए अग्रणी व्हॉट्सएप (उदाहरण के लिए 2 नईलाइन्स) की अनुमति है?
लेवल रिवर सेंट

2
@steveverrill हाँ

2
@ PaŭloEbermann 3-चौड़ाई का एक केक

4
@jvriesem नंबर यह स्निपेट के लिए कोड है।
सिगॉड

जवाबों:


36

पायथ, 73 72 71 69 67 बाइट्स

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

इसे ऑनलाइन आज़माएं ।

N <0 के लिए आउटपुट में 2 प्रमुख न्यूलाइन हैं, जैसा कि टिप्पणियों में अनुमति है । उनसे छुटकारा पाने के लिए, का उपयोग करें

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

सबसे छोटा कोड, कोडक, कम से कम मानव पठनीय प्रतीत होता है।
सतीश संजीव

डब्ल्यूटीएफ यह है ??? LOL
Starx

18

सीजेएम, 76 75 बाइट्स

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

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

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

रूबी, 120 बाइट्स

संशोधन 1 (120 बाइट्स)

18 बाइट्स ने मैनटवर्क के लिए धन्यवाद बचाया

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

संशोधन 0 (138 बाइट्स)

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

सकारात्मक संख्याओं के लिए: यह केक की प्रत्येक पंक्ति के अनुरूप स्ट्रिंग के माध्यम से पुनरावृत्त करता है। इन्हें पैड स्ट्रिंग के रूप में इस्तेमाल किया जाता है ताकि खाली स्ट्रिंग को 2 * n + 1 तक सही किया जा सके। यह विषम संख्या में वर्णों को मुद्रित करने में किसी भी जटिलता से बचा जाता है, जब प्राकृतिक पुनरावृत्ति मोमबत्तियों की पिच के बराबर होती है (यानी 2 वर्ण।) n>0&&इनपुट शून्य होने की स्थिति में एकल स्तंभ के उत्पादन से बचने के लिए आवश्यक है।

सभी संख्याओं के लिए: " n<=>0" इनपुट का संकेत पाता है। बच्चे का संदेश n = 0 के लिए आउटपुट है, और सकारात्मक n के लिए एक खाली स्ट्रिंग (जैसा कि सही आउटपुट पहले से ही ऊपर दिया गया है।) नकारात्मक n के लिए, रूबी -1 को सरणी के अंतिम तत्व के रूप में व्याख्या करता है, और मोमबत्ती रहित आउटपुट करता है। केक।


1
बहुत सारे नहीं हैं puts? n=gets.to_i puts ['Congratulations on your new baby! :D',%w{\ $ \ | - ~ -}.map{|e|''.rjust 2*n+1,e},'--- ~~~ ---'][n<=>0]
11

1
एक और: ''.rjuste.ljust
मैनटवर्क

@manatwork धन्यवाद, मुझे यह देखना चाहिए था, लेकिन मैंने यह बहुत जल्दी किया। मुझे% w के साथ बैकस्लैश स्पेस के बारे में पता नहीं था। और e.just: बहुत चालाक।
लेवल रिवर सेंट

11

आर, 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
मैं वहाँ लिखने के मापदंडों पर बहुत कुछ सीख रहा हूँ। शानदार एक
तेंसिबाई

10

आर, 228 226 220 221 बाइट्स


कैंडललेस केक को सही करने के लिए अंतिम संपादन, नकारात्मक मामलों पर सकारात्मक के रूप में व्यापक था, धन्यवाद @CathG और @jba प्रतिक्रिया के लिए

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
बाइट्स के एक जोड़े को बचाया <-जा सकता है : हो सकता है =, और आप उपयोग कर सकते हैं a=b='-~-'
jbaums

हो, शुक्रिया @jbaums पहले भूल जाते हैं = और दोहरी कार्यभार के बारे में नहीं किया
Tensibai

आपके पास कहीं एक ब्रैकेट मुद्दा है, मुझे मिल जाता हैError: unexpected '}'
फ्लोडेल

@flodel सही किया गया। कॉपी / पेस्ट मुद्दा
Tensibai

10

जावास्क्रिप्ट ईएस 6, 136

आउटपुट के लिए अलर्ट का उपयोग करना - खराब आनुपातिक फ़ॉन्ट और परिणाम बदसूरत है। अलर्ट के नीचे स्निपेट में स्निप बॉडी पर पुनर्निर्देशित किया जाता है, जिससे बेहतर परिणाम मिलता है।
बैकटिक्स के अंदर की नई लाइन महत्वपूर्ण और गिनी जाती है।

फ़ायरफ़ॉक्स में स्निपेट का परीक्षण करें।

/* 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>

कम गोल्फ वाला

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);

यह कोशिश करो $('div pre code')[2].innerHTML;)
वासु अडारी सेप

7

आर, 279 बाइट्स

इंटरएक्टिव संस्करण (286 बाइट्स):

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=""))}
}

इंटरेक्टिव संस्करण नहीं (279 बाइट्स):

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 / ऑक्टेव, 194 198 195 189 171 167 बाइट्स

आपको जन्मदिन मुबारक हो बीटा डेके! :)

4 बाइट्स बंद करने के लिए HamtaroWarrior को धन्यवाद!


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)]);

नमूना चलाता है

मैंने इसे एक स्क्रिप्ट फ़ाइल में रखा happy_birthday.m, फिर इसे कमांड प्रॉम्प्ट में कुछ बार चलाया। ध्यान दें कि जब आप एक ऋणात्मक संख्या में प्रवेश करते हैं, तो दो प्रमुख कैरिज रिटर्न होते हैं, लेकिन इस चुनौती में अनुमति दी जाती है:

>> 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
 $ $ $ $ $ 
 | | | | | 
-----------
~~~~~~~~~~~
-----------

कोड रिक्ति और स्पष्टीकरण के साथ

% 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)]);

अंत में प्रदर्शित करने वाला भाग संभवतः कोड का सबसे अधिक बाधित हिस्सा है। यह एक 5 पंक्ति वर्ण मैट्रिक्स प्रदर्शित करने जा रहा है जहां पहली दो पंक्तियों में मोमबत्तियाँ होती हैं और अंतिम तीन पंक्तियों में केक का आधार होता है।

प्रदर्शन के शीर्ष आधे के लिए आधार या तो स्तंभ में दो रिक्त स्थान होते हैं, इसके बाद दूसरे स्तंभ में दो अन्य स्थान होते हैं, इस मामले में कि आयु नकारात्मक है, या $,-एक स्तंभ में दो रिक्त स्थान के बाद दूसरे स्तंभ में। यह एक 2 x 2 वर्ण का मैट्रिक्स है। प्रदर्शन के निचले आधे हिस्से का आधार एकल स्तंभ वेक्टर है -,~,-जिसमें 3 x 1 वर्ण मैट्रिक्स है।

प्रदर्शन कमांड पहले कॉलम में दो स्थानों को रखकर केक की पहली दो पंक्तियों से निपटता है, इसके बाद $,-या यदि nकिसी स्थान के स्तंभ का स्तंभ नकारात्मक है, जिसे बदल दिया जाता है n=1, और दो रिक्त स्थान का एक और कॉलम पूरे के लिए दोहराया जाता है कुल nबार। अगली तीन पंक्तियाँ बस आधार के साथ मोमबत्तियों को संरेखित करने के -,$,-लिए कॉलम वेक्टर को 2*n + 1बार-बार दोहराती हैं, इस प्रकार तस्वीर को पूरा करती हैं।

इसे ऑनलाइन आज़माएं!

आप IDEOne के ऑक्टेव कंपाइलर: http://ideone.com/4qXDdJ का उपयोग करके इसे ऑनलाइन आज़मा सकते हैं - हालाँकि, मानक इनपुट से मानों को पढ़ते समय थोड़ी बग होती है। जैसे, स्क्रिप्ट थोड़ी संशोधित है जहाँ आपको nकोड की शुरुआत में मूल्य बदलना होगा । स्क्रिप्ट का एक नया संस्करण फोर्क करें और जो भी आउटपुट जैसा दिखता है उसे देखने के लिए इसे पूर्णांक मान के अनुसार बदल दें।


1
दया आप डॉट को नहीं बचा सकते हैं ' '.'!
लुइस मेन्डो सिप

1
@LuisMendo - मुझे पता है! ... हालांकि मुझे यकीन है कि आप इस तरह से बदलाव के उपयोग पर कोई आपत्ति नहीं करते हैं :)
रेयेरेंग सेप

1
Hahaha। मुझे एक बार यहां बताया गया था कि यह साइट भाषा को गाली देने के लिए है। और मैं उस नियम का ईमानदारी से पालन करता हूँ!
लुइस मेन्डो सिप

1
@LuisMendo - मैं वास्तव में डॉट से छुटकारा पाना चाहता था ... लेकिन क्योंकि MATLAB स्ट्रिंग में एक एकल उद्धरण के रूप में व्याख्या नहीं कर सकता :(। मुझे कुछ बाइट्स बचा होगा ... लेकिन कई पुनरावृत्तियों के बाद, यह। सबसे अच्छा मैं साथ आ सकता है।
रेयेंग सेंग

@LuisMendo - इसे 171 तक कम करने में कामयाब रहा!
रेयरेंग सेंग

6

जावास्क्रिप्ट, 143 153 बाइट्स

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')

मोनो स्पेस फॉन्ट में आउटपुट देखने के लिए 'कंसोल' को 'कंसोल.लॉग' से बदलें


PPCG में आपका स्वागत है! :)

2
अफसोस की बात यह है कि नकारात्मक इनपुट के लिए भी बधाई संदेश प्रदर्शित करता है।
मैनटवर्क

@ बटेडेके tnx :-)
नैनामॉम

मैनटवर्क का अधिकार: / मुझे मदद के लिए पर्याप्त JS नहीं पता है

@manatwork हाँ तुम सही हो! मैंने गलत समझा!
नैनोमोम

5

मूनस्क्रिप्ट, 141 बाइट्स

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
प्रोग्रामिंग पहेलियाँ और कोड गोल्फ में आपका स्वागत है!
डेनिस


4

जावास्क्रिप्ट ES6, 154 वर्ण

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

और एक और (154 भी)

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

मोनोपास फॉन्ट में आउटपुट देखने के लिए (और कंसोल में ouptut को स्थानांतरित करें) उपयोग करें

alert=x=>console.log(x)

4

माउस , 164 161 बाइट्स

?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:)"!"@

माउस स्पष्ट रूप से इस कार्य के लिए एक आदर्श विकल्प नहीं है, लेकिन यह मजेदार था।

Ungolfed:

? 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
@

स्टैक में केवल पूर्णांक हो सकते हैं। !'स्टैक से पूर्णांक लेता है और उस कोड के साथ ASCII वर्ण प्रिंट करता है।


4

कॉफ़ीस्क्रिप्ट, 160 बाइट्स

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"

Ungolfed:

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

इसका उपयोग करें जैसे:

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

इसे ऑनलाइन आज़माएं: लिंक (कुछ कस्टम डिस्प्ले कोड शामिल है, इसलिए सब कुछ बहुत अच्छा लगता है ...)

उफ़, यह लगभग भूल गया! जन्मदिन मुबारक हो, @BetaDecay!


4

सी, 392 बाइट्स

(ज्ञात विभाजन दोष यदि कोई तर्क नहीं दिया जाता है)

#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("--","-")}}

निर्विवाद और मैथुनपूर्ण रूप से स्थान दिया गया

#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 ( "--", "-" )
        }   
}


PPCG में आपका स्वागत है! यह एक बहुत अच्छा जवाब है - मैं विशेष रूप से मैक्रो के दुरुपयोग के साथ पसंद करता हूं A। मुझे कुछ और स्थान दिखाई देते हैं जिन्हें हटाया जा सकता है, और आप इसके बजाय लूप वेरिएबल iका उपयोग करके छुटकारा पा सकते हैं c। इसके अलावा, कम से कम gcc के साथ, जिसमें stdio.h भी शामिल है या मुख्य के रिटर्न प्रकार को निर्दिष्ट करना () आवश्यक नहीं है: संकलक इसके बारे में शिकायत करता है, लेकिन हे, यह कोड गोल्फ है। ;)
DLosc

4

पॉवरशेल, 139 134 132 126 बाइट्स

$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'}

के $inputबजाय का उपयोग करके आप 5 बाइट्स बचा सकते हैं $args[0](सवाल +$n=+$input;
स्टडिन के

+ $ इनपुट काम नहीं करता था - यह शिकायत करता था कि $ इनपुट एक एन्यूमरेटर है और इसके अतिरिक्त ऑपरेटर नहीं है। हालांकि, $args[0]एक वास्तविक इंट हो सकता है और हमें कम से कम ड्रॉप करने की अनुमति देता है [int]
जस्टिन डनलप

1
तो, यह वास्तव में पुराना है, लेकिन आप इनपुट बाइट को एक युगल बाइट में सहेज सकते हैं ifऔर 122 बाइट्स के elseलिए स्वैप कर सकते हैं ;exit-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

सीलोन, 322 307 300 282 278 260 बाइट्स

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"));}}

अभी तक गॉल्फर्ड ओरिजिनल (निगेटिव केक की चौड़ाई 3 की बजाय –2 · 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) + "-");
        }
    }
}

यह स्टेटमेंट लिस्ट को if स्टेटमेंट में दर्शाती है, प्रत्येक कंडीशन निम्न मान और शरीर में प्रयोग करने योग्य मान को परिभाषित करती है। क्योंकि उनके पास है exist, शर्त केवल तभी पूरी होती है जब मान शून्य नहीं होते हैं, और इस प्रकार संकलक को पता होता है कि मान निम्न कोड के लिए शून्य नहीं है। (यदि कुछ भी दर्ज नहीं किया गया है (EOF), तो रीडलाइन शून्य हो जाती है। यदि parseInteger एक गैर-पूर्णांक को हिट करता है, तो यह भी अशक्त हो जाता है। हमारा प्रोग्राम तब कुछ नहीं करता है। जैसा कि उन मामलों के लिए व्यवहार को परिभाषित नहीं किया गया था, मुझे लगता है कि यह ठीक है।)

इसके अलावा हमारे पास <=>ऑपरेटर है, जो Comparable.compareविधि के लिए मैप करता है, और एक Comparisonऑब्जेक्ट लौटाता है , अर्थात equal, smallerऔर में से एक larger। संकलक जानता है कि वे Comparisonप्रकार समाप्त हो जाते हैं , इसलिए elseहमारे switchबयान में कोई खंड की आवश्यकता नहीं है ।

repeatक्लास स्ट्रिंग की विधि वह करती है जो कोई अपेक्षा करता है। यह वास्तव में इंटरफ़ेस में समान नाम वाली विधि Iterable से विरासत में मिला है (जैसा कि एक स्ट्रिंग है, अन्य सामानों के बगल में, सिर्फ पात्रों की एक सूची है)।

एक-अक्षर वाले मेरे पहचानकर्ताओं को बदलना और अनावश्यक सफेद स्थान को हटाने से 322 अक्षर मिलते हैं:

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)+"-");}}}

printस्पष्ट \ns (और एक एकल print) की श्रृंखला को प्रतिस्थापित करने से यह 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)+"-");}}}

मैंने कोशिश की के उपनाम-आयात repeatके रूप में rहै, लेकिन यह मदद नहीं करता है (आयात घोषणा 40 अक्षर कहते हैं, और हम केवल जगह से 25 को बचा सकता है repeatके साथ r)।

क्या थोड़ा मदद करता है, के n.signबजाय का उपयोग कर रहा है n<=>0। जबकि इन दो भाव एक ही शाब्दिक लंबाई है, वे विभिन्न प्रकार के होते हैं: उत्तरार्द्ध एक प्रकार की है Comparisonसे पहले (जो तीन मूल्य हैं उल्लेख किया smaller, largerऔर equal), पूर्व एक प्रकार है Integer, मूल्यों के साथ -1, 1, 0... और क्योंकि Integerहै कई और मूल्य, हमें एक elseखंड भी चाहिए । यह 300 वर्ण लंबा है:

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

यहाँ व्हाट्सएप के साथ:

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

हम अपने स्विच स्टेटमेंट के बारे में इस्तीफा देकर और if282 अक्षरों (= बाइट्स) पर आकर कुछ और सुरक्षित कर सकते हैं :

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)+"-");}}}

प्रारूपित:

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) + "-");
        }
    }
}

हम चारों ओर के मामलों की अदला-बदली करके एक और बाइट को सुरक्षित कर सकते हैं, क्योंकि इससे >छोटा है ==। एक और "झुंझलाहट" दोहराया जाता है repeat(n)- हम एक स्थानीय फ़ंक्शन (एक बंद, इसे nपरिभाषित ब्लॉक से याद करते हैं) को छोटे नाम से परिभाषित कर सकते हैं :

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

यह इसको लिखने का एक छोटा तरीका है:

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

हम functionटाइप इंट्रेंस के लिए रिटर्न टाइप के बजाय इस्तेमाल कर सकते हैं , लेकिन यह छोटा नहीं है। यह हमें 278 बाइट देता है:

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");}}}

प्रारूपित:

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");
        }
    }
}

दरअसल, बयानों के बजाय ऑपरेटरों thenऔर elseऑपरेटरों का उपयोग करने से ifहमें print(और कुछ ब्रेसिज़) की कुछ कॉलों को बचाने की अनुमति मिलती है :

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"));
    }
}

यह सिर्फ 261 बाइट्स है:

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"));}}

(मैंने फ़ंक्शन नाम के runबजाय उपयोग किया था bक्योंकि इस तरह इसे ceylon runबिना फ़ंक्शन नाम पास किए चलाया जा सकता है ।)

मेरे गितुब भंडार का एक टिप्पणी संस्करण है


3

पायथन 2, 158 बाइट्स


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

गोल्फलुआ, 113 वर्ण

\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"-"$

नमूना रन:

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

पायथन 2, 150 बाइट्स

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"

लेखक के अजगर के करीब :(


3

पर्ल, 139 127 117 बाइट्स

'-N' या '-p' विकल्प की आवश्यकता नहीं है।

संशोधन 3 (डोम हेस्टिंग्स के लिए नीचे धन्यवाद के साथ):

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

संशोधन 2:

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

संशोधन 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'):(' $',' |','-','~','-')

यहां 3 संशोधन का एक संस्करण है जिसमें नकारात्मक इनपुट पर अग्रणी रिक्त नई लाइनें नहीं हैं - 132 बाइट्स।

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

अरे वहाँ, आपका स्वागत है! सोचा था कि आप कुछ बाइट्स को बचा सकते हैं कुछ तरीके साझा करेंगे! आप कोष्ठक को चारों ओर छोड़ सकते हैं "Congratulations..."और यदि आप प्रतिस्थापित ' $',' |','-','~','-'करते split 0,' $0 |0-0~0-'हैं तो आप उन कोष्ठकों को भी गिरा सकते हैं। एक और बचत के $n=<>;$n==0साथ बदल रहा है ($n=<>)==0। इसके अलावा अपने ?1:हो सकता है ||के रूप में आप कह होगी $n==0(1 है) या अपने गणना। उम्मीद है की वो मदद करदे!
डोम हेस्टिंग्स 19

अरे, इसके लिए धन्यवाद। वे कोष्ठक एक अच्छे हैं, और मुझे शब्दार्थ की याद दिलाने में ||बहुत मददगार हैं - यह मुझे $=मूल रूप chompसे इनपुट की याद दिलाता है , विशिष्ट 0 मान परीक्षणों की आवश्यकता को समाप्त करता है। मुझे यकीन नहीं है कि आपका क्या मतलब है $n=<>;$n==0- मेरे गोल्फ के पास ऐसा नहीं है, और मैंने इनपुट = 0 केस को इनपुट के रूप में हैंडल किया है map{}(), मुझे यकीन नहीं है कि यह कैसे लागू होगा? वैसे भी, आपकी टिप्पणियों को लेने और $=मेरे चर के रूप में उपयोग करने के लिए , यह 117 पार्बाइट्स तक नीचे पहुंच गया है। बहुत बहुत धन्यवाद!
फिलिप

बिल्कुल भी परेशानी नहीं है! खुशी है कि मदद की है! मेरे कहने का मतलब यह था कि आपके पास $n=<>;शुरुआत में है और फिर $n==0सबसे पीछे map{}...इसलिए मुझे लगता है कि आपके पास चेक हो सकता है ($n=<>)==0लेकिन यदि आप $=इसके बजाय उपयोग कर रहे हैं तो आप इसे और अधिक सिकोड़ सकते हैं! मैं हमेशा भूल जाता हूं कि कौन सा नकारात्मक हो सकता है $-या $=नहीं, इसलिए मैं इसका उल्लेख नहीं करना चाहता और गलत हो सकता हूं! :)
डोम हेस्टिंग्स

3

पिप, 74 + 1 = 75 बाइट्स

आयु को एक कमांड-लाइन तर्क के रूप में लेता है। -nध्वज की आवश्यकता है ।

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

पिप के लिए गितुब भंडार

कमांड-लाइन तर्क में संग्रहीत है a। हम "-~-"वर्णों की एक सूची में विभाजित करते हैं और Yइसे चर में अंकित करते हैं y। कार्यक्रम के बाकी हिस्सों में एक बड़ी तीखी अभिव्यक्ति है:

  • a?
    यदि aसत्य है (अर्थात शून्य नहीं):
    • a<0?yX3
      यदि aनकारात्मक है, तो yप्रत्येक तत्व के साथ 3 बार वापस लौटें :["---";"~~~";"---"]
    • एल्स ( aसकारात्मक है):
      • (s.^"$|")Xa
        "$|"वर्णों की एक सूची में विभाजित करें , sप्रत्येक के लिए एक स्थान ( ) पूर्व निर्धारित करें और प्रत्येक परिणामी तत्व aबार दोहराएं
      • yX2*a+1
        प्रत्येक तत्व को y 2*a+1बार-बार दोहराएं
      • AL
        दो सूचियों को जोड़ो
  • एल्स ( aशून्य है), बधाई स्ट्रिंग वापस करें

कार्यक्रम के अंत में, -nध्वज यह सुनिश्चित करता है कि सूचियों को अलग-अलग रेखाओं पर तत्वों के साथ मुद्रित किया जाता है, इस प्रकार एक ठीक से स्तरित केक प्रदर्शित होता है।

यहां इनपुट के लिए चरण दिए गए हैं 2:

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

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

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

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

जन्मदिन की शुभकामनाएं!


2

पर्ल, 144 बाइट्स

143 बाइट्स कोड, प्लस एक अतिरिक्त बाइट के लिए -nस्विच स्टड पर कब्जा करने के लिए।

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).$/!gerकेक के लिए?
मैनटवर्क

यदि आप इस पर स्विच बदलते हैं तो -pयह भी काम करेगा:$_=$_!=0?($_>0?' $'x$_.$/." |"x$_:""x($_=1))."-~-"=~s!.!$/.$&x($_*2+1)!ger:"Congratulations on your new baby! :D"
मैनटवर्क

2

SpecBAS, 164

नई लाइन पर जाने के लिए एपोस्ट्रोफ शॉर्टकट का उपयोग करता है

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

आसान पढ़ने के लिए प्रारूपित

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

पायथन 3, 169 बाइट्स

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

जूलिया, 143 बाइट्स

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

बहुत सीधा। Ungolfed:

# 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

लुआ, 299 बाइट्स

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
PPCG में आपका स्वागत है! आपका कोड जैसा कि खड़ा है attempt to compare string with number, एक त्रुटि देता है ( ), लेकिन मेरे लिए इसे ठीक करने 0+से पहले जोड़ना io.read()। आप एकल-वर्ण चर को असाइन करके printऔर कुछ बाइट्स भी बचा सकते हैं string.rep
DLosc

@DLosc धन्यवाद अच्छा विचार :) और हाँ, आप उस त्रुटि के बारे में खेद के साथ सही थे
FabiF

2

गणितज्ञ, 164 बाइट्स

अतिरिक्त 15 वर्णों को जोड़कर, n <0 के लिए मोमबत्ती-कम केक को पूरी तरह से याद किया

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
PPCG में आपका स्वागत है, इस चुनौती को कोड गोल्फ के रूप में जाना जाता है, जहाँ आप कोशिश करते हैं और अपने कोड को यथासंभव छोटा बनाते हैं। यह अनावश्यक व्हाट्सएप को हटाने और चर नामों को छोटा करके किया जा सकता है।

धन्यवाद @ BetaDecay मुझे एक तेज़ संस्करण मिल रहा था .. अब कम से कम। चीयर्स: डी
मार्टिन जॉन हैडली

कोई दिक्कत नहीं है। अच्छा लग रहा है :)

2

पीबी , 567 बाइट्स

^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]

मुझे कुछ पछतावा है।

कुछ तरीके हैं जिनसे यह बेहतर हो सकता है। उदाहरण के लिए, यह पता लगाने पर कि इनपुट ऋणात्मक है, मैं इसके बाद यह ऋणात्मक संख्या घटाने के लिए आगे बढ़ता हूं। यह अनावश्यक है, और शायद एक दिन मैं इसे रोकने के लिए इस कोड में वापस गोता लगाऊंगा।

इसे pbi के "वॉच" मोड में चलाने की कोशिश न करें, यदि आप एक ऋणात्मक इनपुट करते हैं तो इसे प्रिंट करने का प्रयास करते समय क्रैश हो जाएगा chr(-1)

यहाँ समझाया गया संस्करण संस्करण है जहाँ मैंने कार्यक्रम लिखते समय नोट्स लिए। यदि आप बेहतर तरीके से यह समझना चाहते हैं कि यह कैसे काम करता है ... शुभकामनाएं, और मुझे बताएं कि क्या आप इसे समझ सकते हैं।

# 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 (C # स्क्रिप्ट), 221 बाइट्स

जाहिर है कि यह कोई पुरस्कार नहीं जीतेगा, लेकिन ...

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)))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.