Ich muss ein paar Kerzen anzünden. Tatsächlich muss ich eine beliebige Menge Kerzen anzünden . Aber nur die Guten.
ZIEL Gegeben ist ein Textblock (der brennende , gültige und ungültige Kerzen enthält) und eine Zahl N
als Eingabe. Schreiben Sie ein Programm oder eine Funktion, die einen Betrag genau gleich N
abzüglich der Anzahl der bereits brennenden Kerzen beleuchtet. Wenn N
größer als die Anzahl der gültigen Kerzen ist, sollte das Programm die Anzahl der fehlenden gültigen Kerzen drucken. Wenn keine Kerzen vorhanden sind, sollte die Ausgabe sein :(
.
Hier sind einige gültige Kerzen:
.
| . .
| | . \
| | | /
(Endung mit a .
, nur enthaltend |
oder ausgeglichen, nicht unbedingt benachbart \
und /
kann beliebig lang sein.)
Hier sind einige ungültige Kerzen:
. . . .
\ | | |
| | |
\ . | !
(Unausgeglichen \
, kein Kerzenhalter, nicht verbunden |
, keine Zeichen, nicht auf den Boden gepflanzt.)
Eine brennende Kerze ersetzt .
eine gültige Kerze durch eines der folgenden Zeichen (nach Ihrer Wahl):
@ ^ & " ~
Sie müssen mindestens eine verwenden, und Sie erhalten einen -10%
Bonus für jeden in Ihrem Programm verwendeten Charakter, sodass jeder Charakter auf einer brennenden Kerze erscheinen kann. Wenn Sie das 🔥
Emoji verwenden, erhalten Sie einen -15
Byte-Bonus, der vor den prozentualen Boni angewendet wird, sofern diese verwendet werden. DER BYTE COUNT WIRD ABGERUNDET!
Dies ist ein Code-Golf , also gewinnt der kürzeste Code in Bytes.
Beispiel 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: :(
Bestenlisten
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=59664,OVERRIDE_USER=8478;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>
Antworten:
Haskell, ⌊ (269 Bytes - 15) · 0,9⁵⌋ = 149
Beispiellauf:
Es wird davon ausgegangen, dass jede Eingabezeile mindestens so lang ist wie die vorherige, wie in einem Kommentar des Autors angegeben.
quelle
Python 2, 529 Bytes mit Bonus, 303
Strategie:
Tests:
quelle
JavaScript (ES6), 328 Byte (Bewertung: 184)
Ich habe versucht, die Haskell-Lösung zu übertreffen, aber das ist angesichts der notwendigen Logik ein ziemlich wettbewerbsfähiger Einstieg.
Ergebnis berechnet als
Math.floor((328-15)*Math.pow(0.9,5))
:, Bytes gezählt in einer Datei mit UTF-8-Codierung, getestet und bestätigt mitio.js --harmony_arrow_functions
.Lösung :
Anforderungen : Das Array muss mit Leerzeichen aufgefüllt sein, damit es rechteckig ist.
Erläuterung : Der gesamte eval-Wahnsinn setzt eine Variable (die Variable
k
für die Zeichenfolgereplace
, um einige Bytes zu speichern) und entfernt 11 Bytes von einer 339-Byte-Zeichenfolge, die ich als ungolfen kann:Da Beispiel-I / Os angefordert wurden, war hier die Testsuite, die ich ausgeführt habe,
quelle