Doğum günümün teması: alevler içinde


18

Biraz mum yakmam gerek. Aslında, rastgele miktarda mum yakmam gerekiyor. Ama sadece iyi olanlar.

AMAÇ Bir metin bloğu (yanan, geçerli ve geçersiz mumlar içeren) ve Ngirdi olarak bir sayı verildiğinde N, önceden yanan mumların sayısı eksi olarak tam olarak eşit miktarda yanan bir program veya işlev yazın . Eğer Ngeçerli mum sayısından daha büyük, program eksik, geçerli mum sayısını yazdırmak gerekir. Mum yoksa, çıktı olmalıdır :(.

İşte bazı geçerli mumlar:

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

(ile biten . , yalnızca |veya dengeli içeren , mutlaka bitişik olmayan \ve /herhangi bir uzunlukta olabilir.)

İşte bazı geçersiz mumlar:

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

(dengesiz \ , mum çubuğu yok, bağlantısı kesilmiş, |karakter olmayan , yere dikilmemiş.)

Yanan bir mum .geçerli bir mumun yerine aşağıdaki karakterlerden herhangi birini (seçiminizi) getirir:

@ ^ & " ~

En az bir tane kullanmalısınız ve -10%programınızda kullanılan her karakter için, her karakterin yanan bir mumda görünebileceği şekilde bir bonus kazanmalısınız. 🔥Emoji kullanırsanız, -15kullanıldığında, bonusların yüzdesinden önce uygulanan bir bayt bonusu alırsınız . BYTE SAYISI AŞAĞI YUVARLAK!

Bu bir , bu nedenle bayttaki en kısa kod kazanır.

Örnek ES'ler

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: :(

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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


Oh, ve bu benim doğum günüm.
Conor O'Brien

10
İyi ki doğdun!
Level River St

@steveverrill Teşekkürler ^ _ ^
Conor O'Brien

Girdinin dikdörtgen oluşturmak için boşluklarla doldurulduğunu varsayabilir miyiz?
Downgoat

Yanıtlar:


4

Haskell, ⌊ (269 bayt - 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

Örnek çalışma:

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

Her giriş satırının, yazarın yorumlarından birinin izin verdiği ölçüde en az bir önceki satır kadar uzun olduğunu varsayar.


Yeni bir yerimiz var gibi görünüyor!
Conor O'Brien

5

Python 2, 529 bayt bonusu, 303

  • İlk satırın üzerinde bir tamsayı olduğunu varsayar.
  • Tutarlı aralık bırakmaz. Mumların sütununun boş olduğunu varsaymaz.

Strateji:

  • Girişi liste olarak alın.
  • Ters çevirin ve bir sütun listesine eşleyin.
  • Test edin ve çalıştırın.
  • Satırlara geri eşleyin, ters çevirin, çizgilere katılın.

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

Testler:

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

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

3,
. . .       
| \ |

1 more candles required

3,  
. . .

. .      .
| |      |

. . .     

🔥 ~      "
| |      |

Bonuslardan önce ve sonra skoru ve bayt sayısının yorumlu veya yorumsuz olup olmadığını netleştirmek için düzenleyebilir misiniz?
Conor O'Brien

Daha fazla golf oynamaya çalışıyorum. Ve Pyth versiyonunu denemek istiyorum.
user193661

1
Güzel! Teşekkürler. Pyth ile iyi şanslar! ^ _ ^
Conor O'Brien

1
Neden tüm yorumlardan, haber satırlarından vb. Kurtulmuyorsunuz?
RK.

"Gerekli daha fazla mum" bitinden kurtulabilirsiniz; sayısal bir çıktının bu şekilde olduğu varsayılır.
Conor O'Brien

3

JavaScript (ES6), 328 bayt (puan: 184)

Haskell çözümünü yenmeye çalıştım ama olması gereken tüm mantık göz önüne alındığında bu oldukça rekabetçi bir giriş.

Skor şu şekilde hesaplanır: Math.floor((328-15)*Math.pow(0.9,5))UTF-8 kodlaması olan bir dosyada sayılan baytlar, test edilir ve ile onaylanır io.js --harmony_arrow_functions.

Çözüm :

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

Gereksinimler : dizinin dikdörtgen olması için boşlukla doldurulmuş olması gerekir.

Açıklama : Tüm değerlendirme deliliği bir değişkeni ( bazı baytları kaydetmek kiçin dizeye değişken) ayarlar replaceve golf olarak şu şekilde kullanabileceğim 339 baytlık bir dizenin 11 baytını tıraş eder:

(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(/\@/,'🔥')
}

Örnek G / Ç'ler istendiğinden, burada çalıştırdığım test takımı vardı,

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:
:(

Bazı örnek I / OS?
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ ekledi.
CR Drost
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.