Muszę zapalić kilka świec. W rzeczywistości muszę zapalić dowolną liczbę świec. Ale tylko dobre.
CEL Biorąc pod uwagę blok tekstu (zawierający zapalone, ważne i nieważne świece) i liczbę N
jako dane wejściowe, napisz program lub funkcję, która zapala ilość dokładnie równą N
, minus liczba już zapalonych świec. Jeśli N
jest większa niż liczba prawidłowych świec, program powinien wydrukować liczbę brakujących, ważnych świec. Jeśli nie ma żadnych świec, wyjście powinno być :(
.
Oto kilka ważnych świec:
.
| . .
| | . \
| | | /
(kończące się na .
, zawierające tylko |
lub zrównoważone, niekoniecznie sąsiadujące \
i /
mogą mieć dowolną długość).
Oto niektóre nieprawidłowe świece:
. . . .
\ | | |
| | |
\ . | !
(niezrównoważony \
, brak świecy, rozłączony, bez |
znaków, nie sadzony na ziemi).
Zapalona świeca zastąpi świecę .
na ważnej dowolną z następujących postaci (do wyboru):
@ ^ & " ~
Musisz użyć co najmniej jednego, a otrzymasz -10%
bonus za każdą postać użytą w twoim programie, w taki sposób, aby każda postać mogła pojawić się na zapalonej świecy. Jeśli używasz 🔥
emoji, dostajesz -15
premię bajtową, która jest stosowana przed bonusami procentowymi, jeśli są używane. Liczba bajtów jest zaokrąglona!
To jest golfowy kod , więc wygrywa najkrótszy kod w bajtach.
Przykładowe IO
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: :(
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](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>
Odpowiedzi:
Haskell, ⌊ (269 bajtów - 15) · 0,9⁵⌋ = 149
Przykładowy przebieg:
Zakłada, że każdy wiersz wejściowy jest co najmniej tak długi, jak poprzedni wiersz, na co pozwala jeden z komentarzy autora.
źródło
Python 2, 529 bajtów z bonusem, 303
Strategia:
Testy:
źródło
JavaScript (ES6), 328 bajtów (wynik: 184)
Próbowałem pokonać rozwiązanie Haskell, ale w rzeczywistości jest to dość konkurencyjne wejście, biorąc pod uwagę całą logikę, która musi się wydarzyć.
Wynik obliczony jako
Math.floor((328-15)*Math.pow(0.9,5))
:, bajty zliczone w pliku z kodowaniem UTF-8, przetestowane i potwierdzone za pomocąio.js --harmony_arrow_functions
.Rozwiązanie :
Wymagania : tablica musi być wypełniona spacją, aby była prostokątna.
Objaśnienie : wszystkie eval szaleństwo ustawiają jedną zmienną (zmienną
k
na ciąg znaków,replace
aby zaoszczędzić niektóre bajty) i golą 11 bajtów z 339-bajtowego ciągu, który mogę odblokować jako:Ponieważ poproszono o przykładowe We / Wy, oto testowany zestaw testów, który uruchomiłem,
źródło