/* 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
to jest to oficjalna nazwa :)False
”?Odpowiedzi:
Pyth,
161312 bajtówDzięki @Thomas Kwa za przypomnienie mi o titlecase.
Pakiet testowy .
źródło
Siatkówka, 13 bajtów
Wypróbuj online | Zestaw testowy (Dane wyjściowe
0
oznaczają brak pasujących ciągów, co jest oczekiwane).Gdy Retina jest dostarczana tylko z jednym wierszem kodu, wyświetla liczbę razy, gdy wyrażenie pasowało do ciągu wejściowego, więc wyświetli
1
(prawda), jeśli pasuje, a zatem jest oficjalną nazwą i0
(fałsz), jeśli nie jest.Awaria
źródło
TeaScript, 12 bajtów
Nadużywa
O
funkcji.Wypróbuj to online
Pakiet testowy
Wyjaśnienie
O
Funkcja sprawia, że w ten sposób:Następnie funkcja O sprawdza, czy wyrażenie regularne pasuje
x
.Alternatywnie, niekonkurencyjna odpowiedź na TeaScript 3 o 7 bajtach :
źródło
isChar
dodaną funkcją. Ale możesz wyjaśnić bardziej szczegółowo tym, którzy nie wiedzą.JavaScript (ES6), 26
Przez: Edcsixtyfive
źródło
n=>n.match`^[A-Z][a-z]+$`
/./.test.bind(/^[A-Z][a-z]+$/)
Python,
5958 bajtówJestem pewien, że nie ma prawdziwego sposobu na pokonanie wersji Retina, ponieważ jest to w zasadzie tylko ta wersja Pythona. Ale myślę, że to moje pierwsze zgłoszenie;)
Jest to bardzo dziwna prawdziwa wartość:
(I to wymaga
""
wokół ciągów ze spacjami, jeśli przechodzi przez powłokę)źródło
^
nie jest potrzebne, ponieważre.match()
pasuje tylko na początku łańcucha.lambda s:re.match('[A-Z][a-z]+$',s) import re
Java, 53 bajty
źródło
s->s.matches("[A-Z][a-z]+")
Python,
50454341 bajtówZwraca,
True
jeśli jest to oficjalna nazwa lubFalse
jeśli nie jest.źródło
f=
pod uwagę, oszczędzając dwa bajty. Ponadto(len(s)>1)
oszczędza 5 bajtóws[1:].islower()
. :)BotEngine ,
20318029x6 = 174Powinienem naprawdę dodać wbudowane identyfikatory wielkich i małych liter. Byłoby to o wiele bardziej zwięzłe niż sprawdzanie każdej litery osobno.
Tłumaczenie z grubsza:
źródło
C,
129122121111 bajtówWypróbuj online
źródło
VB6, 48 bajtów
źródło
MATL , 18 bajtów
Używana jest aktualna wersja ( 4.0.0 ) języka.
Dotyczy to tego samego wyrażenia regularnego, co odpowiedź NinjaBearMonkey :
Dane wyjściowe to ciąg znaków (co jest zgodne z prawdą ), jeśli jest to oficjalna nazwa, i nic (co jest fałszem ), jeśli nie jest.
Przykłady
źródło
Haskell, 61 bajtów
źródło
Gema, 17 znaków
Przykładowy przebieg:
źródło
Rubinowy, 28 bajtów
-2 bajty (dzięki manatwork)
źródło
p
powiązanych wskazówek w Porady dla golfa w Ruby .p !!gets[/^[A-Z][a-z]+$/]
Kod maszynowy IA-32, 19 bajtów
Funkcja, która odbiera wskaźnik do łańcucha zakończonego znakiem null
ecx
i zwraca 0 lub 1 weax
(zgodnie zfastcall
konwencją).Hexdump kodu:
W języku asemblera:
Pierwszy bajt nazwy wejściowej ma swój 5. bit odwrócony (za
xor
pomocą32
), aby przekonwertować go z dużej na małą. To ładuje 32eax
, używając 3 bajtów kodu:Aby sprawdzić, czy bajt jest małą literą:
Jeśli nie, ten kod przechodzi. Aby zwrócić 0 w tym przypadku, wstawia 0
al
przed wykonaniem skoku warunkowego:Wartość 0 w
al
służy również jako maska xor (lub jej brak) dla następujących bajtów nazwy wejściowej.Pomyślne wyjście następuje, gdy napotka on bajt zerowy, który pozostaje zerowy po
xor
:Zakłada się, że nazwa wejściowa nie jest pusta. Wydaje mi się, że jest to rozsądne założenie dotyczące nazwy (a nie dowolnego ciągu)!
źródło
grep
, 16 bajtówOto wzór:
Jeśli używasz
-E
i-x
i-c
przełącznikigrep
wypisze liczbę pasujących linii wejściowych. Więc jeśli podasz jedną linię, otrzymasz 1 lub 0. Myślę, że tak to działa.Wzór ma 11 znaków, cała linia poleceń to 23. Widziałem, jak ludzie używają
sed
skryptów bez polecenia, więc nie wiem, co jest. Ale odczytuje stdin, więc możesz po prostu pisać. Otoecho
:źródło
grep -Exc
aby nie trzeba było liczyć tylu bajtów dla przełączników.Mathematica 10.1, 46 bajtów
Wykorzystuje jeden bajt mniej niż standardowe rozwiązanie wyrażenia regularnego. Wykonuje trzy kontrole.
LetterQ@#
zapewnia, że ciąg jest w całości złożony z liter iStringLength@#>1
unieważnia ciągi jednoliterowe.#==ToCamelCase@#
ma jednak mniej sensu.ToCamelCase
to nieudokumentowana funkcja, którą znalazłem, która pobiera ciąg wejściowy AndOutputsItLikeThis. Ponieważ jest tylko jedno słowo, pierwsza litera będzie pisana wielką literą, więc sprawdzamy, czy ciąg znaków jest taki sam.źródło
ToCamelCase
nowy w 10.3? Nie wydaje się działać w 10.2.ToCamelCase["foo bar baz"]
?ToCamelCase[foo bar baz]
). Dziwne! Może ktoś może sprawdzić 10.3?bash / zsh / ksh, 25 bajtów
Aby faktycznie tego użyć, utwórz plik z jedyną linią i spraw, aby plik był wykonywalny; pliki wykonywalne nierozpoznane jako znany typ binarny są traktowane jak skrypty powłoki (w
/bin/sh
szczególności).źródło
bash
,ksh
azsh
, ale nie ma szans na pracę w standardzie POSIXsh
lub kompatybilnydash
iyash
. Aby uniknąć nieporozumień, sugeruję zmienić tytuł odpowiedzi.printf
zamiast,echo
aby utworzyć plik, a otrzymasz 25 bajtów.C # 4, 89 bajtów
Moja pierwsza próba w Code Golf. Oto nadchodzi:
Zobacz to w akcji na Dot Net Fiddle .
źródło
bool o(string i)=>System.Text.RegularExpressions.Regex.IsMatch(i,"^[A-Z][a-z]+$");
Java, 28 bajtów
Używa wyrażenia regularnego, aby upewnić się, że łańcuch składa się z wielkich liter, po których następuje co najmniej jeden mały znak.
-1 bajty dzięki Benjaminowi Urquhartowi
źródło
k4, 39 bajtów
Pierwszy znak jest wyższy, wszystkie pozostałe są niższe, liczą się więcej niż jeden.
Na przykład:
źródło
Poważnie, 16 bajtów
Hex Dump:
Wypróbuj online
Poważnie nie ma jeszcze obsługi wyrażeń regularnych, więc najlepsze, co możemy zrobić, to:
źródło
Ocaml,
231216197166 bajtówPrzykładowe użycie:
Niegolfowane (z prawdziwymi nazwami funkcji):
źródło
if … then 0 else
przez… ||
. I w tym przypadku, używając operatorów boolowskich zamiastmatch
i zakresów, np.n.[0]>'@'&n.[0]<'['&e(l-1)
SpecBAS - 39 bajtów
SpecBAS obsługuje wyrażenia regularne za pomocą
MATCH
polecenia. Wyjście wynosi 0 dla fałszu i 1, jeśli prawda.źródło
Swift 2, 116 bajtów
Regex jest tak gadatliwy w Swift, że robienie tego jest znacznie krótsze
Zwróci to
0
lub-1
(w przypadku braku danych wejściowych) dla nieoficjalnych nazwisk i numeru> 0
(która jest równa długości łańcucha - 1), jeśli nazwa jest oficjalnaNie golfił
źródło
C #, 188 bajtów
Wyrażenia regularne byłyby właściwym sposobem na rozwiązanie tego problemu, ale oto próba bez niego.
Pismo ręczne
Z przyjemnością poradzę, jak skrócić małe litery, być może bez pętli. Właśnie zacząłem uczyć się języka i wykorzystałem to jako praktykę, pomyślałem, że i tak podzielę się swoim wynikiem.
źródło
Perl 5
-p
, 18 bajtówWypróbuj online!
źródło
PowerShell , 29 bajtów
Wypróbuj online!
Czy ta sama sztuczka regularna, której wszyscy inni używają. Musi używać funkcji
c
wrażliwychmatch
na ase, aby poprawnie to zrobić kosztem bajtu.źródło
Japt , 9 bajtów
Zwraca
1
lub0
.Spróbuj
źródło
Perl 6 , 17 bajtów
Zwraca
Match
obiekt, jeśli jest to oficjalna nazwa iNil
inaczej.Wypróbuj online!
źródło
m