मेरे जन्मदिन का थीम: आग की लपटों में


18

मुझे कुछ मोमबत्तियाँ जलाने की ज़रूरत है। वास्तव में, मुझे मोमबत्तियों की एक मनमानी मात्रा को हल्का करने की आवश्यकता है । लेकिन केवल अच्छे वाले।

OBJECTIVE पाठ के एक ब्लॉक (जलाया, वैध और अमान्य मोमबत्तियाँ) और Nइनपुट के रूप में एक संख्या को देखते हुए , एक प्रोग्राम या फ़ंक्शन लिखें जो Nपहले से ही जलाई गई मोमबत्तियों की संख्या के बराबर , शून्य से कम रोशनी देता है। यदि Nवैध मोमबत्तियों की संख्या से अधिक है, तो कार्यक्रम को लापता, वैध मोमबत्तियों की संख्या को प्रिंट करना चाहिए। यदि कोई मोमबत्तियां मौजूद नहीं हैं, तो आउटपुट होना चाहिए :(

यहाँ कुछ मान्य मोमबत्तियाँ हैं:

.   
|   .       .
|   |   .   \
|   |   |   /

(एक के साथ समाप्त ., केवल |या संतुलित, जरूरी नहीं कि आसन्न \और /, किसी भी लम्बाई का हो सकता है।)

यहाँ कुछ अमान्य मोमबत्तियाँ हैं:

.       .   .   .
\       |   |   |
|           |   |
\   .   |   !   

(असंतुलित \, कोई मोमबत्ती की छड़ी, डिस्कनेक्ट नहीं किया गया, गैर- |अक्षर, जमीन पर नहीं लगाया गया।)

एक जला हुआ मोमबत्ती .वैध मोमबत्ती पर निम्नलिखित में से किसी भी अक्षर (आपकी पसंद) को प्रतिस्थापित करेगा :

@ ^ & " ~

आपको कम से कम एक का उपयोग करना चाहिए, और आपको -10%अपने कार्यक्रम में उपयोग किए जाने वाले प्रत्येक चरित्र के लिए एक बोनस मिलता है , इस तरह से कि प्रत्येक चरित्र एक जली हुई मोमबत्ती पर दिखाई दे। यदि आप 🔥इमोजी का उपयोग करते हैं , तो आपको एक -15बाइट बोनस मिलता है , जो यदि उपयोग किया जाता है, तो प्रतिशत बोनस से पहले लागू किया जाता है। BYTE कूंट नीचे बैठ गया है!

यह एक , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।

उदाहरण IOs

input: 8,
.         .
| . ! . . |.  . . .
| | | | | | | | | |
output:
@         @
| @ ! @ @ |.  @ @ @
| | | | | | | | | |
input: 14,
   // nothing
output: :(
input: 15,
.   ..  . .  ". .
| . ||  | |  || !
output: 9 // more candles required; 15 - (6 unlit) = 9 (thanks to @AndersKaseorg for catching my mistakes (plural)!)
input: 7,
.
/        ~
|        \  .
/  &   " /  |
\  | @ | | . . . . .
\  | | | | | 1 l I |
output: 
&
/        ~
|        \  .
/  &   " /  |
\  | @ | | ^ . . . 🔥
\  | | | | | 1 l I |
input: 5,
. .             |
i Q no candl es . |3-.
output: :(

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिख रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# Language Name, N bytes

Nआपके प्रस्तुत करने का आकार कहां है। यदि आप अपने स्कोर में सुधार करते हैं, तो आप पुराने अंकों को हेडलाइन में रख सकते हैं , उनके माध्यम से स्ट्राइक करके। उदाहरण के लिए:

# Ruby, <s>104</s> <s>101</s> 96 bytes

यदि आप अपने हेडर में कई संख्याओं को शामिल करना चाहते हैं (जैसे कि आपका स्कोर दो फ़ाइलों का योग है या आप दुभाषिया ध्वज दंड को अलग से सूचीबद्ध करना चाहते हैं), तो सुनिश्चित करें कि हेडर में वास्तविक अंक अंतिम संख्या है:

# Perl, 43 + 2 (-p flag) = 45 bytes

आप भाषा के नाम को एक लिंक भी बना सकते हैं जो लीडरबोर्ड स्निपेट में दिखाई देगा:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


ओह, और यह मेरा जन्मदिन है।
कॉनर ओ'ब्रायन

10
जन्मदिन की शुभकामनाएं!
लेवल रिवर सेंट

@steveverrill धन्यवाद ^ _ ^
कॉनर ओ'ब्रायन

क्या हम मान सकते हैं कि इनपुट आयत बनाने के लिए रिक्त स्थान के साथ गद्देदार है?
डाउनगेट

जवाबों:


4

हास्केल, ask (269 बाइट्स - 15) · 0.9 149 = 149

h('.',0)(e:f,c,o)=(f,2:c,e:o)
h(k,b)(f,c,o)|Just x<-lookup k$zip"\\|/"[4,0..]=(f,x+2*div b 2:c,k:o)|0<1=(f,2:c,k:o)
g l(f,c,o)=foldr h(f,[],'\n':o)$zip l c
d("",_,o)=o
d('@':_,_,_)=":("
d(f,_,_)=show$length f
f n=d.foldr g(take n$'@':cycle"🔥^&\"~",repeat 1,"").lines

उदाहरण रन:

*Main> putStr s
.
/        ~
|        \  .
/  &   " /  |
\  | @ | | . . . . .
\  | | | | | 1 l I |
*Main> putStr (f 3 s)
^
/        ~
|        \  .
/  &   " /  |
\  | @ | | 🔥 . . . @
\  | | | | | 1 l I |

मानता है कि प्रत्येक इनपुट लाइन कम से कम पिछली पंक्ति के समान है, जैसा कि लेखक की टिप्पणियों में से एक द्वारा अनुमत है।


लगता है कि हमारे पास एक नया 1 स्थान है!
कॉनर ओ'ब्रायन

5

पायथन 2, बोनस के साथ 529 बाइट्स, 303

  • मान लेता है कि पहली पंक्ति में पूर्णांक है।
  • लगातार रिक्ति नहीं मानता है। मोमबत्ती का कॉलम खाली नहीं है।

रणनीति:

  • सूची के रूप में इनपुट प्राप्त करें।
  • इसे उल्टा करें और इसे स्तंभों की सूची में मैप करें।
  • परीक्षण और संचालन।
  • इसे पंक्तियों में वापस मैप करें, इसे उल्टा करें, लाइनों में शामिल हों।

import re;R=raw_input;C=str.count;G=lambda x:[y if y else' 'for y in x];H=lambda x:[''.join(G(v))for v in map(None,*x)];F=re.findall;t,r,i,g,d=0,u"🔥~\"&^@",[],r'^[|/\\]+[%s](?=\s|$)',R()
while d:i+=[d];d=R()
c=int(F('\d+',i.pop(0))[0]);i=i[::-1];m=H(i)
t+=sum(1 for x in m if F(g%r,x))
for p,n in enumerate(m):
 try:b=F(g%'\.',n)[0]
 except:continue
 if C(b,'/')==C(b,'\\')and t<c:t+=1;m[p]=re.sub('\.',r[0],n,1)
 if len(r)>1:r=r[1:]
m='\n'.join(H(m)[::-1])
d=":("if t<1 else`c-t`+" more candles required"if t<c else m;print d

टेस्ट:

5,
*      *               *
  *        *
*
                 *
@     @       @     @
|     |   .   |     |
|     |   |   |     |

*      *               *
  *        *            
*                       
                 *      
@     @       @     @   
|     |   🔥  |     |   
|     |   |   |     |   

3,
. . .       
| \ |

1 more candles required

3,  
. . .

. .      .
| |      |

. . .     

🔥 ~      "
| |      |

क्या आप बोनस से पहले और बाद में स्कोर को स्पष्ट करने के लिए संपादित कर सकते हैं और बाइट-काउंट टिप्पणियों के साथ या बिना है या नहीं?
कॉनर ओ'ब्रायन

मैं आगे गोल्फ का प्रयास कर रहा हूं। और मैं एक पायथ संस्करण की कोशिश करना चाहता हूं।
user193661

1
ठंडा! धन्यवाद। पायथ के साथ गुड लक! ^ _ ^
कॉनर ओ'ब्रायन

1
आप सभी टिप्पणियों, newlines, आदि से छुटकारा क्यों नहीं लेते हैं?
आर.के.

आप `अधिक मोमबत्तियाँ आवश्यक` बिट से छुटकारा पा सकते हैं; एक संख्यात्मक उत्पादन इस प्रकार माना जाता है।
कॉनर ओ'ब्रायन

3

जावास्क्रिप्ट (ईएस 6), 328 बाइट्स (स्कोर: 184)

मैंने हास्केल समाधान को हरा देने की कोशिश की, लेकिन वास्तव में एक बहुत ही प्रतिस्पर्धी प्रविष्टि है जिसे सभी तर्क दिए जाने चाहिए।

के रूप में गणना की स्कोर:, Math.floor((328-15)*Math.pow(0.9,5))बाइट UTF-8 एन्कोडिंग के साथ एक फ़ाइल में गिना जाता है, परीक्षण और के साथ पुष्टि की io.js --harmony_arrow_functions

समाधान :

eval("(n,s)=>{q=x=>x[0].map((_,c)=>x#[c]));h='Q';c=5;t=n;m=q(s.split('\\n')X#.match(/^ *[Q][\\\\//|]+$/)&&xR\\L==xR/L&&t-->0?xR./,c>1?h[c--]:'@'):x);return t==n?':(':t>0?1+t:q(mX.join('\\n')R@/,'🔥')}"[k='replace'](/[A-Z]/g,x=>({X:"#.split('')))#.join(''))",R:"[k](/\\",Q:'.@^&"~',L:"/g,'').length"}[x]))[k](/#/g,'.map(x=>x'))

आवश्यकताएँ : आयताकार होने के लिए सरणी को अंतरिक्ष-पेड होना चाहिए।

स्पष्टीकरण : सभी इंसुलिन पागलपन एक चर ( कुछ बाइट्स को बचाने के kलिए स्ट्रिंग के replaceलिए चर ) सेट करता है और एक 339-बाइट स्ट्रिंग से 11 बाइट्स निकालता है, जिसे मैं अन-गोल्फ कर सकता हूं:

(num_candles_desired, string) => {
    transpose = array => array[0].map((_, index) => array.map(row => row[index]));
    candle_tips = '.@^&"~';
    c = 5; // decrementing index into candle_tips when > 1.
    candles_left = num_candles_desired;
    transposed_normal_output = transpose(
            string.split('\n').map(line => line.split(''))
        ).map(col_array => col_array.join(''))
         // the next map does the actual logic: finds possible candles with
         // a regex, checks that the \ chars match the / chars in number,
         // then decrements the candles_left index while changing the . to a
         // lit flame.
         .map(col => col.match(/^ *[.@^&"~][\\//|]+$/) 
                   && col.replace(/\\/g,'').length == col.replace(/\//g,'').length
                   && candles_left-- > 0 ? x.replace(/\./, c > 1 ? candle_tips[c--] 
                                                                 : '~')
                                         : x);
    return candles_left == num_candles_desired ? ':('
                  : candles_left > 0 ? 1 + candles_left 
                  : transpose(
                        transposed_normal_output.map(col => col.split(''))
                    ).map(row_array => row_array.join('')).join('\n')
                     // as promised, we include the emoji at least once if we can.
                     // the leading backslash is unnecessary and comes from the
                     // above metaprogramming-compression with eval().
                     .replace(/\@/,'🔥')
}

उदाहरण के लिए I / Os का अनुरोध किया गया था, यहाँ मैं परीक्षण सूट था,

Reference example #1, lighting 8 candles...
Input:
.         .        
| . ! . . |.  . . .
| | | | | | | | | |
Output:
~         🔥        
| " ! & ^ |.  @ @ @
| | | | | | | | | |
Reference example #2, lighting 14 candles...
Input:

Output:
:(
Reference example #3, lighting 15 candles...
Input:
.   ..  . .  ". .
| . ||  | |  || !
Output:
9
Reference example #4, lighting 7 candles...
Input:
.                   
/        ~          
|        \  .       
/  &   " /  |       
\  | @ | | . . . . .
\  | | | | | 1 l I |
Output:
~                   
/        ~          
|        \  .       
/  &   " /  |       
\  | 🔥 | | @ . . . @
\  | | | | | 1 l I |
Reference example #5, lighting 5 candles...
Input:
. .             |     
i Q no candl es . |3-.
Output:
:(

कुछ उदाहरण I / OS?
कॉनर ओ'ब्रायन

1
@ C @O'Bʀɪᴇɴ गयी।
सीआर ड्रॉस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.