Эта задача будет вести себя более или менее как традиционный код-гольф . Единственное отличие состоит в том, что вместо оценки ответов по количеству символов или байтов пользователи будут назначать веса различным символам в комментариях, и победит программа с наименьшим совокупным весом.
Вызов
Ваша задача - написать программу, которая берет строку и печатает ромбовидную форму, где первый символ начинается в центре, а последующие символы занимают пустые места, ортогональные множеству символов, которые были помещены последними. Пробелы ( ) будут использоваться для заполнения.
Например, ввод CAT
будет производить
T
TAT
TACAT
TAT
T
и ()
будет производить
)
)()
)
и desserts
будет производить
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
и 9
будет производить 9
.
подробности
Код может содержать только печатные ASCII и новые строки. (Смотрите почему ниже.)
Ввод / вывод должен осуществляться через stdin / stdout или, если это невозможно, использовать аналогичные альтернативы.
Вы можете предположить, что входная строка содержит только печатный ASCII (включая пробел).
Столбцы начальных пространств, не содержащие какой-либо части ромбовидного узора, не допускаются на выходе. Разрешается любое количество и комбинация пробелов в конце.
При желании может быть завершающий перевод строки.
Вы можете редактировать свой ответ столько, сколько хотите.
счет
Весь код должен быть написан с использованием только новых строк и 95 печатаемых символов ASCII:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(К сожалению, вкладки не допускаются, потому что Stack Exchange отображает их как пробелы в блоках кода.)
Каждый из этих 96 символов имеет значение веса, связанное с ним. По умолчанию все веса равны 97.
Оценка программы - это сумма значений веса для каждого из ее символов. Например, если бы программа была print(4)
и вес 4
был равен 70, но не изменился для всего остального, счет был бы 749 = 97+97+97+97+97+97+70+97
.
Как только активность в этом вопросе сводится практически к нулю, выигрывает представление с наименьшей оценкой. В предположительно маловероятном случае ничьи выигрыши переходят к ответу, получившему наибольшее количество голосов.
Изменение веса
Каждый пользователь, независимо от того, ответил он или нет, может изменить вес одного из 96 символов на уникальное значение от 1 до 96. Для этого добавьте комментарий к этому вопросу в форме #### W -> C ####
, где W - целое число из От 1 до 96 и C - символ (как таковой, без кавычек, без обратных кавычек). Используйте \n
вместо C для перевода строки и \s
пробела, так как Stack Exchange сжимает 3 пробела подряд. В print(4)
приведенном выше примере был бы комментарий #### 70 -> 4 ####
.
Каждый пользователь может сделать ОДИН комментарий, подобный этому, и он будет действителен, только если и символ, и значение веса не были использованы в ранее сделанном комментарии. Таким образом, в конечном итоге может быть 96 #### W -> C ####
комментариев, все от разных пользователей, все с разными весами, назначенными разным персонажам.
Пользователи могут удалить свой собственный комментарий, если захотят, сбрасывая вес своих персонажей до 97, пока они или кто-то еще не прокомментируют снова. Они также могут редактировать их. Комментарии, не соответствующие правилам для отдельных пользователей / весов / символов, должны быть удалены или помечены как «неконструктивные». Общие комментарии о правилах и других вещах хороши, но должны быть сведены к минимуму.
Этот фрагмент стека является официальным списком лидеров по этому вопросу. Он автоматически вычисляет баллы для всех представлений, собирая веса из комментариев при каждом запуске. Это не обрабатывает связи. Вы также можете использовать его, чтобы проверить счет программы.
Вероятно, вам понадобятся right-click -> Open link in new tab
ссылки.
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): <span id='comments'></span></div><div class='analytics'>Invalid answers (illegal characters or no code block): <span id='answers'><span></div><br><button type='button' onclick='refresh'>Refresh</button>
Чтобы эта таблица лидеров работала, комментарии должны быть в точном формате, описанном выше, и код вашей программы должен быть в первом блоке многострочного кода в вашем ответе ( <pre><code>...</code></pre>
те, что указаны). Не используйте подсветку синтаксиса, иначе ваш код не будет прочитан правильно. Фрагмент может занять минуту или две, прежде чем он обновится.
Я не проверил фрагмент полностью, но буду следить за ним, так как этот конкурс начинается. Если вы заметили какие-либо ошибки, пожалуйста, сообщите мне. Вот не минимизированная версия:
Имейте в виду, что эта система начисления баллов является абсолютно новой и экспериментальной. Надеемся, что Stack Exchange не будет возражать, что в нем содержится множество комментариев. :П
Связанная задача: Распечатать этот бриллиант
источник
Ответы:
CJam,
144150 байтПробовал некоторую кодировку ...
Обновлено, потому что вес
b
изменился.Другая кодировка, которая только лучше в теории (140 байт):
источник
Python 2, 120 байт
Изменить: Снижена стоимость с некоторыми более дешевыми персонажами.
источник
Pyth , 21 байт
Попробуйте онлайн: Pyth Compiler / Executor
источник
CJam, 31 байт
Просто адаптация моего ответа на Печать этого алмаза на данный момент. Я мог бы настроить его, когда вес изменился.
Проверьте это здесь.
источник
J, 45 символов
Длинное решение, будет играть в гольф с некоторыми дешевыми символами ...
Попробуйте онлайн. (Добавьте входную строку с одинарными кавычками.)
источник
PHP (131 символ)
http://3v4l.org/9Vvkm
Оптимизируем, как только весы станут понятнее.
источник
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";}
что может не работать. Но это на 6 байт короче! Возможно, вы могли бы взять что-то отсюда.Java, 318 байт
источник