<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = document.referrer.split("/")[4]; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 0; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
1
и9
!!@#$%^&*()
; то, что должно вернуться*
.Ответы:
Matlab, 121 байт
Matlab просто не для строк = (
источник
disp
заявление?Mathematica,
174168163 байтаДелает первый шаг, затем вычисляет цифровой корень.
источник
Рубин,
9774 персонажаОбразец прогона:
источник
Perl,
91 89 7674 байта73 + 1 для
-p
выключателятесты
Спасибо @manatwork за помощь в экономии
2 14 16 1517 символов!... Я думал о:
N % 32 + Y
может заменить( N & 31 ) + Y
!источник
$1
равно$&
. Так что лучше удали захват и поменяй имя переменной.while
Блок может быть$t="*";s/\d/$t+=$&/eg;$_=$t
.-p
переключатель в счетчик.echo -n "$test" | perl -pe '…'
чтобы увидеть, что я имею в виду.) Вы можете решить это, изменивwhile
условие на!/^[\d*]$/
. В то время, чтобы уменьшить потери балла, вы можете заменить весьwhile
с этим:$t="*",s/\d/$t+=$&/eg,$_=$t until/^[\d*]$/
.&
имеет более низкий приоритет , чем+
, в то время как%
имеет более высокое, изменение&31
→%32
и вы можете удалить скобки вокруг этого подвыражения.ES6, 98 байт
Ungolfed:
94-байтовая версия, которая работает только на коротких строках:
Использование
match
,map
иjoin
оказалось короче, чем использование вreplace
два раза:Проверьте это здесь: https://jsbin.com/zizosayisi/edit?js,console
источник
00 0 00
["0"]
как0
и я не мог сказать разницу.> '@'
,& 31
а|| 9
?> '@'
просто различает буквы и цифры.& 31
полезный способ игнорировать разницу между кодами символов в верхнем и нижнем регистре, поскольку он также удобно напрямую отображает коды символов в значения 1..26.|| 9
используется потому, что% 9
возвращает 0 для кратных 9, но многократное добавление цифр возвращает 9 для ненулевых кратных 9. В коде для гольфа, который я использую(t + 8) % 9 + 1
вместо этого, происходит то же самое.Гема, 161 персонажа
(Написано только для того, чтобы проверить, работают ли рекурсивные доменные вызовы.)
Образец прогона:
источник
JavaScript (ES6),
162159157 байтВсе еще пытаюсь найти способ использовать неявный возврат во внешней функции.
Ungolfed + Unminified
isNaN
функцию (которая вводит свои данные), чтобы проверить, не является ли это числоисточник
00 0 00
, вывод*
вместо0
!_=>{expr;return expr}
=>_=>(expr,expr)
Haskell, 126 байт
Использование:
f "Hello, world!"
->"7"
.l
таблица поиска символов для списка целых чисел (одноэлементный список, если символ найден, пустой список в противном случае).f
просматривает каждый символ его аргумента и выравнивает возвращенный список списков в простой список целых чисел и вызывает,g
чтобы проверить условие конца (пустой список (->*
) или одно целое число) или вызватьf
сумму списка для другого раунда.источник
MATL , 64 байта
При этом используется текущая версия (4.0.0) языка.
У меня такое ощущение, что это можно сделать короче ...
Контрольные примеры
источник
Серьезно, 50 байтов
Шестнадцатеричный дамп:
Попробуйте онлайн
Разъяснение:
источник
Pyth, 39 байт
Попробуйте онлайн
Я просто делаю это, потому что не могу спать. Может быть, я объясню это завтра ...
источник
Чистый bash,
199194 байта(разрыв второй строки предназначен только для обхода полосы прокрутки)
Тестовое правило:
источник
JavaScript (ES6), 78
83Рекурсивное решение. Будучи хвостовой рекурсией, переменные t и r не должны быть локальными.
Разъяснения
Тестовый фрагмент
источник
Python, 154 байта
источник
00 0 00
!Mathematica, 133 байта
Немного отличается от LegionMammal978 выше. Моя функция превращает все в символьный код, затем отфильтровывает не алфавитно-цифровые элементы (заменяя их пустыми строками). Если алфавитно-цифровых символов нет, то возвращается *, в противном случае он принимает цифровой корень. Это могло бы быть значительно (~ 15B) короче, если бы мне не приходилось иметь дело со случаем со всеми нулями. Такова жизнь.
Mathematica magic, для непосвященных:
foo//.a_:>Tr@IntegerDigits@a
это повторяющаяся замена: она заменяет любые числаa
в foo суммой их цифр, затем она заменяет снова, пока не достигнет фиксированной точки, то естьa
перестает меняться при замене.тесты:
источник