/* Configuration */
var QUESTION_ID = 67554; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 34388; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://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 "http://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, 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.toLowerCase() > b.lang_raw.toLowerCase()) return 1;
if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) 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);
}
}
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;
}
<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>
Lololololololololololol
это официальное название :)False
»?Ответы:
Pyth,
161312 байтСпасибо @Thomas Kwa за напоминание о заглавной букве.
Тестовый пакет .
источник
Сетчатка, 13 байт
Попробуй это онлайн | Набор тестов (Вывод
0
означает, что ни одна из строк не соответствует, что ожидается.)Когда Retina предоставляется только с одной строкой кода, она выводит количество
1
совпадений выражения с входной строкой, поэтому выводит (правда), если она совпадает, и, следовательно, является официальным именем и0
(ложно), если это не так.Сломать
источник
TeaScript, 12 байт
Злоупотребляет
O
функцией.Попробуйте это онлайн
Тестирование
объяснение
O
Функция делает это:Затем функция O проверяет соответствие регулярного выражения
x
.Альтернативно, не конкурирующий ответ TeaScript 3 в 7 байтах :
источник
isChar
добавленной вами функцией. Но вы можете объяснить более подробно для тех, кто не в курсе.JavaScript (ES6), 26
Автор: Edcsixtyfive
источник
n=>n.match`^[A-Z][a-z]+$`
/./.test.bind(/^[A-Z][a-z]+$/)
Python,
5958 байтЯ уверен, что нет никакого реального способа победить версию Retina, так как это в основном только в Python. Но я думаю, что это моя первая подача;)
Это очень странная истинная ценность:
(И это действительно требует
""
строк с пробелами, если они передаются через оболочку)источник
^
не требуется, так какre.match()
совпадает только в начале строки.lambda s:re.match('[A-Z][a-z]+$',s) import re
Java, 53 байта
источник
s->s.matches("[A-Z][a-z]+")
Python,
50454341 байтВозвращает,
True
если это официальное имя илиFalse
нет.источник
f=
во внимание, сохраняя два байта. Кроме того,(len(s)>1)
экономит 5 байтовs[1:].islower()
. :)BotEngine ,
20318029x6 = 174Я действительно должен добавить встроенные функции для определения прописных и строчных букв. Это было бы гораздо более кратким, чем проверка каждого письма в отдельности.
Грубый перевод:
источник
C
129122121111 байтПопробуйте онлайн
источник
VB6, 48 байтов
источник
MATL , 18 байт
Используется текущая версия ( 4.0.0 ) языка.
Это относится к тому же регулярному выражению, что и ответ NinjaBearMonkey :
Выводом является строка (которая является правдивой ), если это официальное имя, и ничего ( если это неверно ), если это не так.
Примеры
источник
Haskell, 61 байт
источник
Гема, 17 знаков
Образец прогона:
источник
Рубин, 28 байт
-2 байта (благодаря manatwork)
источник
p
связанных советы в Советы для игры в гольф в Рубине .p !!gets[/^[A-Z][a-z]+$/]
Машинный код IA-32, 19 байтов
Функция, которая получает указатель на завершающуюся нулем строку в
ecx
и возвращает 0 или 1 вeax
(в соответствии сfastcall
соглашением).Hexdump кода:
На ассемблере:
Первый байт входного имени имеет свой 5-й бит, перевернутый (
xor
с32
), чтобы преобразовать его из заглавных букв в малые. Это загружает 32 вeax
, используя 3 байта кода:Чтобы проверить, является ли байт маленькой буквой:
Если нет, этот код проваливается. Чтобы вернуть 0 в этом случае, он помещает 0
al
перед выполнением условного перехода:0
al
также служит xor-маской (или ее отсутствием) для следующих байтов входного имени.Успешный выход - это когда встречается нулевой байт, который остается нулевым после
xor
:Предполагается, что имя ввода не является пустым. Я предполагаю, что это разумное предположение об имени (не произвольная строка)!
источник
grep
16 байтЭто шаблон:
Если вы используете и
-E
и-x
и-c
переключателиgrep
напечатает количество совпадающих строк ввода. Так что, если вы дадите ему одну строку, вы получите 1 или 0. Я думаю, именно так это место работает.Шаблон - 11 символов, вся командная строка - 23. Я видел, как люди используют
sed
сценарии без команды, поэтому я не знаю, что к чему. Но он читает stdin, и вы можете просто набрать его. Вотecho
:источник
grep -Exc
чтобы вам не нужно было подсчитывать столько байтов для переключателей.Mathematica 10,1, 46 байт
Использует на один байт меньше, чем стандартное решение регулярных выражений. Это делает три проверки.
LetterQ@#
гарантирует, что строка полностью состоит из букв, иStringLength@#>1
делает недействительными однобуквенные строки.#==ToCamelCase@#
имеет меньше смысла, однако.ToCamelCase
я обнаружил недокументированную функцию, которая принимает входную строку AndOutputsItLikeThis. Поскольку есть только одно слово, оно будет использовать заглавную первую букву, поэтому мы проверяем, равна ли строка этому.источник
ToCamelCase
новый 10.3? Кажется, не работает в 10.2.ToCamelCase["foo bar baz"]
?ToCamelCase[foo bar baz]
). Странный! Может кто-нибудь может проверить 10.3?bash / zsh / ksh, 25 байтов
Чтобы фактически использовать это, создайте файл с единственной строкой и сделайте файл исполняемым; исполняемые файлы, не распознаваемые как известный двоичный тип, рассматриваются как сценарии оболочки (в
/bin/sh
частности).источник
bash
,ksh
иzsh
, но не имеет шансов работать в стандартном POSIXsh
или совместимыхdash
иyash
. Чтобы избежать путаницы, предлагаю изменить заголовок ответа.printf
вместо того,echo
чтобы создать файл, и вы получите 25 байтов.C # 4, 89 байт
Моя первая попытка в Code Golf. Вот оно:
Посмотрите это в действии на Dot Net Fiddle .
источник
bool o(string i)=>System.Text.RegularExpressions.Regex.IsMatch(i,"^[A-Z][a-z]+$");
Java, 28 байт
Использует регулярное выражение, чтобы убедиться, что строка состоит из заглавных букв, за которыми следует хотя бы один строчный символ.
-1 байт благодаря Бенджамину Уркварту
источник
к4, 39 байт
Первый символ выше, все остальные ниже, считается больше единицы.
Например:
источник
Серьезно, 16 байт
Шестнадцатеричный дамп:
Попробуйте онлайн
Серьезно пока нет поддержки регулярных выражений, поэтому лучшее, что мы можем сделать, это:
источник
Окамль,
231216197166 байтПример использования:
Ungolfed (с реальными именами функций):
источник
if … then 0 else
на… ||
. И в этом отношении, используя логические операторы вместоmatch
и диапазонов, напримерn.[0]>'@'&n.[0]<'['&e(l-1)
SpecBAS - 39 байт
SpecBAS обрабатывает регулярные выражения с помощью
MATCH
команды. Выходное значение равно 0 для false и 1, если true.источник
Swift 2, 116 байт
Regex настолько многословен в Swift, что выполнение этого намного короче
Это вернет
0
или-1
(в случае отсутствия ввода) для неофициальных имен, и число> 0
(которое равно длине строки - 1), если имя является официальнымUngolfed
источник
C #, 188 байт
Регулярные выражения были бы правильным способом решения этой проблемы, но вот попытка без этого.
обыкновенное письмо
Очень хотелось бы посоветовать, как сделать проверку строчных букв короче, возможно, без цикла. Я только начал изучать язык и использовал это как практику, решил, что все равно поделюсь своим результатом.
источник
Perl 5
-p
, 18 байтПопробуйте онлайн!
источник
PowerShell , 29 байт
Попробуйте онлайн!
Использует ли тот же трюк с регулярными выражениями все остальные? Должен использовать
c
ase-Sensible,match
чтобы правильно сделать это за счет байта.источник
Japt , 9 байт
Возвращает
1
или0
.Попытайся
источник
Perl 6 , 17 байт
Возвращает
Match
объект, если это официальное имя и вNil
противном случае.Попробуйте онлайн!
источник
m