Kullanıcı Skor Kodu Golf - Elmas Çizim [deneysel]


11

Bu zorluk aşağı yukarı geleneksel bir golfü gibi davranacaktır . Tek fark, cevapları karakter veya bayt sayısına göre puanlamak yerine, kullanıcıların yorumlarda farklı karakterlere ağırlık atayacağı ve en düşük kümülatif ağırlığa sahip programın kazanacağıdır.

Meydan okuma

Göreviniz, dize alan ve ilk karakterin merkezde başladığı ve sonraki karakterlerin en son yerleştirilen karakter grubuna dikey boş alanları kapladığı bir elmas şekli basan bir program yazmaktır. Dolgu için boşluklar ( ) kullanılacaktır.

Örneğin, girdi CATüretmek

  T  
 TAT 
TACAT
 TAT 
  T  

ve ()üretecekti

 ) 
)()
 ) 

ve  dessertsüretecekti

        s        
       sts       
      strts      
     strerts     
    streserts    
   stressserts   
  stressesserts  
 stressedesserts 
stressed desserts
 stressedesserts 
  stressesserts  
   stressserts   
    streserts    
     strerts     
      strts      
       sts       
        s        

ve 9üretecekti 9.

ayrıntılar

  • Kod yalnızca yazdırılabilir ASCII ve yeni satırlar içerebilir . (Aşağıdaki nedenlere bakın.)

  • Giriş / çıkış stdin / stdout yoluyla olmalı veya mümkün değilse benzer alternatifler kullanmalıdır.

  • Giriş dizesinin yalnızca yazdırılabilir ASCII (boşluk dahil) içerdiğini varsayabilirsiniz.

  • Baklava deseninde herhangi bir kısmını içermeyen gelen boşluklar kolonları olan değil çıkış izin verdi. Sondaki boşlukların herhangi bir miktarına ve kombinasyonuna izin verilir.

  • İsteğe bağlı olarak çıktıda sondaki bir satırsonu olabilir.

  • Cevabınızı istediğiniz kadar düzenleyebilirsiniz.

puanlama

Tüm kodlar yalnızca yeni satırlar ve yazdırılabilir 95 ASCII karakteri kullanılarak yazılmalıdır:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(Stack Exchange bunları kod bloklarında boşluk olarak oluşturduğu için sekmelere izin verilmez.)

Bu 96 karakterin her biri, onunla ilişkili bir ağırlık değerine sahiptir . Varsayılan olarak, tüm ağırlıklar 97'dir.

Bir programın puanı, karakterlerinin her biri için ağırlık değerlerinin toplamıdır. Örneğin, program print(4)ve ağırlığı 470 olsaydı, ancak diğer her şey için değişmemiş olsaydı, skor olurdu 749 = 97+97+97+97+97+97+70+97.

Bu sorudaki etkinlik neredeyse hiçbir şeye yerleşmediğinde, en düşük puanlı başvuru kazanır. Muhtemelen olası bir beraberlik durumunda, kazananlar en yüksek oyu alan cevaba gider.

Ağırlıkları Değiştirme

Yanıtlamış olsun ya da olmasın, her kullanıcı 96 karakterden birinin ağırlığını 1'den 96'ya kadar benzersiz bir değere değiştirebilir. Bunu yapmak için, formun bu sorusuna bir yorum ekleyin #### W -> C ####; burada W, 1 ila 96 ve C karakterdir (kendisi gibi, tırnak işareti yok, ters tırnak yok). Yığın Değişimi arka arkaya 3 boşluk sıkıştırdığından \n, yeni satırlar ve \sboşluk için C yerine kullanın . Yukarıdaki print(4)örnek yorumda bulunabilirdi #### 70 -> 4 ####.

Her kullanıcı böyle bir yorum yapabilir ve yalnızca karakter ve ağırlık değeri daha önce yapılmış bir açıklamada kullanılmamışsa geçerlidir. Sonuç olarak #### W -> C ####, hepsi farklı kullanıcılardan, hepsi farklı karakterlere farklı ağırlıklar atanmış 96 yorum olabilir .

Kullanıcılar istedikleri takdirde kendi yorumlarını silebilirler, ya da başka biri tekrar yorum yapana kadar karakterlerinin ağırlığını 97'ye geri yükleyebilirler. Onları da düzenleyebilirler. Farklı kullanıcılar / ağırlıklar / karakterler hakkındaki kurallara uymayan yorumlar silinmeli veya "yapıcı değil" olarak işaretlenmelidir. Kurallar ve diğer şeyler hakkında genel yorumlar iyidir ancak asgari düzeyde tutulmalıdır.

Bu yığın snippet'i bu sorunun resmi lider tablosu. Her çalıştırıldığında yorumlardan ağırlıkları toplayarak tüm gönderimler için puanları otomatik olarak hesaplar. Bağları idare etmez. Bir programın sahip olacağı puanı kontrol etmek için de kullanabilirsiniz.

right-click -> Open link in new tabBağlantılar için muhtemelen gerekecek .

function compute(){var e=computeScore($("#code").val());$("#score").val(e==-1?"Invalid characters":e)}function computeScore(e){var t=0;for(var n=0;n<e.length;n++){if(weights.hasOwnProperty(e[n])){t+=weights[e[n]]}else{return-1}}return t}function htmlDecode(e){var t=document.createElement("div");t.innerHTML=e;return t.childNodes.length===0?"":t.childNodes[0].nodeValue}function addLeaderboard(){validAnswers.sort(function(e,t){return e.score>t.score});var e=1;var t="";for(var n=0;n<validAnswers.length;n++){var r=validAnswers[n];t+="<tr><td>"+e+"</td><td><a href='"+r.link+"'>"+r.owner.display_name+"</a></td><td>"+r.score+"</td><td>"+r.length+"</td></tr>";if(n+1<validAnswers.length&&validAnswers[n+1].score>r.score){e++}}$("#leaderboard").append(t)}function addAnalytics(){var e="";for(var t in weights){if(weights.hasOwnProperty(t)&&weights[t]!=defaultWeight){e+=(t=="\n"?"\\n":t)+"="+weights[t]+" "}}$("#weights").val(e);var n="";for(var t in usedChars){if(usedChars.hasOwnProperty(t)&&usedChars[t]==false){n+=t=="\n"?"\\n":t}}$("#unusedc").val(n);var r="";for(var t in usedWeights){if(usedWeights.hasOwnProperty(t)&&usedWeights[t]==false){r+=t+" "}}$("#unusedw").val(r);var i="";if(invalidComments.length>0){for(var s=0;s<invalidComments.length;s++){var o=invalidComments[s];i+="<a href='#"+o.link+"'>"+o.owner.display_name+"</a> "}}else{i="none"}$("#comments").html(i);var u="";if(invalidAnswers.length>0){for(var s=0;s<invalidAnswers.length;s++){var a=invalidAnswers[s];u+="<a href='#"+a.link+"'>"+a.owner.display_name+"</a> "}}else{u="none"}$("#answers").html(u)}function checkAnswers(e){for(var t=0;t<e.items.length;t++){var n=e.items[t];var r=answerPattern.exec(n.body);if(r){var i=htmlDecode(r[1]);var s=computeScore(i);if(s==-1){invalidAnswers.push(n)}else{n.length=i.length;n.score=s;validAnswers.push(n)}}else{invalidAnswers.push(n)}}addLeaderboard();addAnalytics()}function checkComments(e){for(var t=0;t<e.items.length;t++){var n=e.items[t];var r=commentPattern.exec(htmlDecode(n.body));if(r){var i=n.owner.user_id;var s=parseInt(r[1]);var o=r[2]=="\\n"?"\n":r[2]=="\\s"?" ":r[2];if(userIDs.hasOwnProperty(i)||!usedWeights.hasOwnProperty(s)||usedWeights[s]||!usedChars.hasOwnProperty(o)||usedChars[o]){invalidComments.push(n)}else{userIDs[i]=true;usedWeights[s]=true;usedChars[o]=true;weights[o]=s}}}$.get(answersURL,checkAnswers)}function refresh(){$.get(commentsURL,checkComments)}questionID=45040;commentsURL="https://api.stackexchange.com/2.2/questions/"+questionID+"/comments?order=asc&sort=creation&site=codegolf&filter=!t)IWLXOkOvAuPe8m2xJrXOknWcw(ZqZ";answersURL="https://api.stackexchange.com/2.2/questions/"+questionID+"/answers?order=desc&sort=activity&site=codegolf&filter=!.FjsvG2LuND(frE*)WTvqQev1.lyu";commentPattern=/^#### (\d+) -> (\\(?:n|s)|[ -~]) ####$/;answerPattern=/<pre><code>((?:\n|.)*?)\n<\/code><\/pre>/;chars="\n !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";validAnswers=[];invalidAnswers=[];invalidComments=[];userIDs={};usedWeights={};usedChars={};weights={};defaultWeight=chars.length+1;for(var i=0;i<chars.length;i++){usedChars[chars[i]]=false;usedWeights[i+1]=false;weights[chars[i]]=defaultWeight}refresh()
*{font-family:Helvetica,Arial,sans-serif}table{border:3px solid green;border-collapse:collapse}button{font-size:100%}th{background-color:green;color:#fff;padding:6pt}td{border:1px solid green;padding:6pt}.large{font-size:140%}.title{font-weight:700;margin:6pt 0}textarea{font-family:"Courier New";white-space:nowrap;overflow:auto}input[readonly]{background-color:#dcdcdc}.analytics{font-size:90%;padding:4pt 0 0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div class='large title'>Leaderboard</div><table id='leaderboard'> <tr> <th>Place</th> <th>Submitter</th> <th>Score</th> <th>Program Length</th> </tr></table><br><div class='title'>Compute Score</div><textarea id='code' rows='5' cols='40' placeholder='paste code here...'></textarea><br><button type='button' onclick='compute()'>Compute</button> Score: <input type='text' id='score' readonly><br><br><div class='title'>Analytics</div><div class='analytics'>Assigned weights: <input type='text' id='weights' readonly></div><div class='analytics'>Unused characters: <input type='text' id='unusedc' readonly> (all weight 97)</div><div class='analytics'>Unused weights: <input type='text' id='unusedw' readonly></div><div class='analytics'>Invalid comments (duplicate user/char/weight):&nbsp;<span id='comments'></span></div><div class='analytics'>Invalid answers (illegal characters or no code block):&nbsp;<span id='answers'><span></div><br><button type='button' onclick='refresh'>Refresh</button>

Bu skor tablosunun çalışması için yorumların yukarıda açıklanan biçimde olması ve program kodunuzun yanıtınızdaki ilk çok satırlı kod bloğunda olması gerekir <pre><code>...</code></pre>. Sözdizimi vurgulamayı kullanmayın, aksi takdirde kodunuz doğru şekilde okunmaz. Snippet'in güncellenmesi bir veya iki dakika sürebilir.

Parçacığı tam olarak test etmedim, ancak bu yarışma devam ederken göz kulak olacağım. Herhangi bir hata fark ederseniz lütfen bana bildirin. İşte küçültülmemiş bir sürüm:

Bu puanlama sisteminin tamamen yeni ve deneysel olduğunu unutmayın. Umarım Stack Exchange, tonlarca yorum içerdiğini düşünmez. : P

İlgili zorluk: Bu elması yazdır


#### 1 -> * ####
Martin Ender

Yorumlar 5 dakika boyunca düzenlenebilir, bu nedenle düzenlenmelerine izin verilmesi tekrarlanmayan kurallara tamamen zarar verebilir.
Peter Taylor

@PeterTaylor Ancak yorum düzenlemelerini nasıl durdurabilirim? Ayrıca tamamen düzenlenmiş olanları görmezden gelmek. 5 dakika oldukça hızlı gidiyor.
Calvin'in Hobileri

1
Bu puanlama sistemini hiç sevmiyorum (sohbete bakın), ancak eğer kullanacaksanız, düzenlenen yorumları görmezden gelmek kesinlikle yapılacak doğru şeydir.
Peter Taylor

#### 2 ->: ####
Mantık Şövalye

Yanıtlar:


4

CJam, 144 , 150 bayt

"x*3:*3:3*::33:3:::333*::333*3::***3::**::33:3::3*:::::*3:3:3:**33*333333::33*:*333:*3*3**:**3:**:3*3:33*3:3*:333**:3**33:*3:::*:3*::3"'3/'b*3b127b:c~

Bazı kodlamayı denedim ...

Ağırlığı bdeğiştiği için güncellendi.

Teoride sadece daha iyi olan başka bir kodlama (140 bayt):

":***(*3:**3*I**:3*****:*3*******: ::::*:***II@3*******: :**I:**:***:*3***3*I3I:3***33:::*I**3I***3***:3:*I*3I"{"*:I3( **@"#1a*~0}%2b126b:c~

5

Python 2, 120 bayt

T=raw_input()
L=len(T)
r=[b[::-1]+b[1:]for b in [T[-b:]+' '*(L-b)for b in range(1,L+1)]]
for b in r[:-1]+r[::-1]:print b

Düzenleme: Bazı daha ucuz karakterlerle daha düşük maliyet.




1

J, 45 karakter

(({~((]*]<#@[)>:@(+/~)@:|@i:@(2-#)))@(' '&,))

Uzunca bir çözüm, bazı ucuz karakterlerle golf oynayacak ...

Çevrimiçi deneyin. (Giriş dizesini tek tırnak işareti ile ekleyin.)


1

PHP (131 karakter)

function f($s){for($i=-($l=strlen($s));$i<$l;$I=abs(++$i)){$t=substr($s,$I);echo str_repeat(' ',$I).strrev($t).substr($t,1)."\n";}}

http://3v4l.org/9Vvkm

Ağırlıklandırma netleştikten sonra optimize eder.


Kodunuz yeniden yazılabilir: function f($s){for($i=-($l=strlen($s));$i<$l;)echo str_repeat(' ',$I=abs(++$i)),strrev($t=substr($s,$I)),substr($t,1),"\n";}bu işe yaramayabilir. Ama 6 bayt daha kısa! Muhtemelen buradan bir şey alabilirsin.
Ismael Miguel

0

Java, 318 bayt

class N{public static void main(String[]a){char[]s=new java.util.Scanner(System.in).nextLine().toCharArray();int l=s.length,m=l-1,$=0,b;String t="";for(;$<l;$++,t+='\n')for(b=0;b<l+$;b++)t+=b+$<m?' ':s[b>m?m-b+$:b+$-m];for($=l-2;$>-1;$--,t+='\n')for(b=0;b<l+$;b++)t+=b+$<m?' ':s[b>m?m-b+$:b+$-m];System.out.print(t);}}
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.