ธีมวันเกิดของฉัน: ลุกเป็นไฟ


18

ฉันต้องจุดเทียน อันที่จริงฉันต้องจุดเทียนจำนวนหนึ่งตามอำเภอใจ แต่คนดีเท่านั้น

วัตถุประสงค์มีกลุ่มข้อความ (ประกอบด้วยจุดเทียนที่ถูกต้องและไม่ถูกต้อง) และตัวเลขNเป็นอินพุตเขียนโปรแกรมหรือฟังก์ชั่นที่ให้จำนวนเท่ากับเท่ากับNลบจำนวนเทียนที่จุดแล้ว หากNมากกว่าจำนวนเทียนที่ถูกต้องโปรแกรมควรพิมพ์จำนวนเทียนที่ถูกต้องที่ขาดหายไป :(ถ้าไม่มีเทียนเป็นปัจจุบันการส่งออกที่ควรจะเป็น

นี่คือเทียนที่ถูกต้องบางส่วน:

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

(ลงท้ายด้วย a .มีเพียง|หรือสมดุลไม่จำเป็นต้องอยู่ติดกัน\และ/สามารถมีความยาวได้)

นี่คือเทียนที่ไม่ถูกต้อง:

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

(ไม่สมดุล\, ไม่มีแท่งเทียน, ตัดการเชื่อมต่อ, ไม่ใช่|ตัวอักษร, ไม่ปลูกบนพื้น)

เทียนที่จุดแล้วจะแทนที่.เทียนที่ถูกต้องด้วยอักขระต่อไปนี้ (ตัวเลือกของคุณ):

@ ^ & " ~

คุณต้องใช้อย่างน้อยหนึ่งตัวและคุณจะได้รับ-10%โบนัสสำหรับตัวละครแต่ละตัวที่ใช้ในโปรแกรมของคุณในลักษณะที่ตัวละครแต่ละตัวสามารถปรากฏบนเทียนที่จุดได้ หากคุณใช้🔥อิโมจิคุณจะได้รับ-15โบนัสเป็นจำนวนไบต์ซึ่งจะถูกนำไปใช้ก่อนเปอร์เซ็นต์โบนัสหากใช้ นับไบต์จะถูกรวมลง!

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง 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: :(

ลีดเดอร์

นี่คือตัวอย่างข้อมูลเพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# 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


โอ้และมันเป็นวันเกิดของฉัน
Conor O'Brien

10
สุขสันต์วันเกิด!
Level River St

@steveverrill ขอบคุณ ^ _ ^
Conor O'Brien

เราสามารถสมมติว่าอินพุตนั้นถูกเติมด้วยช่องว่างเพื่อสร้างสี่เหลี่ยมผืนผ้าได้หรือไม่?
Downgoat

คำตอบ:


4

Haskell, ⌊ (269 ไบต์ - 15) ·0.9⁵⌋ = 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 |

สมมติว่าแต่ละบรรทัดอินพุตมีอย่างน้อยตราบใดที่บรรทัดก่อนหน้าตามที่อนุญาตโดยหนึ่งในความคิดเห็นของผู้เขียน


ดูเหมือนว่าเราจะมีที่หนึ่งใหม่!
Conor O'Brien

5

Python 2, 529 bytes พร้อมโบนัส, 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,  
. . .

. .      .
| |      |

. . .     

🔥 ~      "
| |      |

คุณสามารถแก้ไขเพื่อชี้แจงคะแนนก่อนและหลังโบนัสได้หรือไม่และการนับไบต์นั้นมีหรือไม่มีความคิดเห็นหรือไม่
Conor O'Brien

ฉันกำลังพยายามตีกอล์ฟต่อไป และฉันต้องการลองรุ่น Pyth
user193661

1
เย็น! ขอบคุณ ขอให้โชคดีกับ Pyth! ^ _ ^
Conor O'Brien

1
ทำไมคุณไม่กำจัดความคิดเห็นบรรทัดใหม่ ฯลฯ ทั้งหมด?
RK

คุณสามารถกำจัดบิต `ต้องการเทียนได้มากกว่า '; เอาท์พุทตัวเลขจะถือว่าเป็นเช่นนั้น
Conor O'Brien

3

JavaScript (ES6), 328 ไบต์ (คะแนน: 184)

ฉันพยายามเอาชนะโซลูชั่น Haskell แต่จริงๆแล้วเป็นรายการแข่งขันที่ค่อนข้างให้ตรรกะทั้งหมดที่ต้องเกิดขึ้น

คะแนนคำนวณดังนี้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'))

ข้อกำหนด : อาเรย์นั้นจะต้องมีที่ว่างในอวกาศเพื่อให้เป็นรูปสี่เหลี่ยมผืนผ้า

คำอธิบาย : eval insanity ทั้งหมดตั้งค่าหนึ่งตัวแปร (ตัวแปรkให้กับสตริงreplaceเพื่อบันทึกบางไบต์) และโกน 11 ไบต์ออกจากสตริง 339- ไบต์ซึ่งฉันสามารถยกเลิกการเล่นกอล์ฟเป็น:

(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?
Conor O'Brien

1
เพิ่ม @ CᴏɴᴏʀO'Bʀɪᴇɴแล้ว
CR Drost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.