/* 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
es un nombre oficial :)False
"?Respuestas:
Pyth,
161312 bytesGracias a @Thomas Kwa por recordarme sobre titlecase.
Test Suite .
fuente
Retina, 13 bytes
Pruébalo en línea | Conjunto de pruebas (el resultado
0
significa que ninguna de las cadenas coincide, lo que se espera).Cuando Retina solo se proporciona con una sola línea de código, genera la cantidad de veces que la expresión coincide con la cadena de entrada, por lo que generará
1
(verdadero) si coincide y, por lo tanto, es un nombre oficial y0
(falso) si no lo es.Descompostura
fuente
TeaScript, 12 bytes
Abusa de la
O
función.Prueba esto en línea
Banco de pruebas
Explicación
La
O
función hace esto:Luego, la función O verifica si la expresión regular coincide
x
.Alternativamente, una respuesta de TeaScript 3 no competitiva a 7 bytes :
fuente
isChar
función que agregaste. Pero es posible que desee explicar con más detalle para aquellos que no lo saben.JavaScript (ES6), 26
Por: Edcsixtyfive
fuente
n=>n.match`^[A-Z][a-z]+$`
/./.test.bind(/^[A-Z][a-z]+$/)
Python,
5958 bytesEstoy seguro de que no hay una forma real de vencer a la versión Retina, ya que esto es básicamente eso dentro de Python. Pero creo que esta es mi primera presentación;)
Es muy extraño valor de verdad :
(Y requiere
""
alrededor de cadenas con espacios, si se pasa a través del shell)fuente
^
no es necesario ya quere.match()
solo coincide al principio de la cadena.lambda s:re.match('[A-Z][a-z]+$',s) import re
Java, 53 bytes
fuente
s->s.matches("[A-Z][a-z]+")
Python,
50454341 bytesDevuelve
True
si es un nombre oficial oFalse
si no lo es.fuente
f=
en cuenta el ahorro de dos bytes. Además,(len(s)>1)
ahorra 5 bytess[1:].islower()
. :)BotEngine ,
20318029x6 = 174Realmente debería agregar builtins para identificar letras mayúsculas y minúsculas. Eso sería mucho más conciso que verificar cada letra individualmente.
Traducción aproximada:
fuente
C,
129122121111 bytesPruébalo en línea
fuente
VB6, 48 bytes
fuente
MATL , 18 bytes
Se utiliza la versión actual ( 4.0.0 ) del idioma.
Esto aplica la misma expresión regular que la respuesta de NinjaBearMonkey :
La salida es la cadena (que es verdadera ) si es un nombre oficial, y nada (que es falso ) si no lo es.
Ejemplos
fuente
Haskell, 61 bytes
fuente
Gema, 17 personajes
Ejecución de muestra:
fuente
Rubí, 28 bytes.
-2 bytes (gracias a manatwork)
fuente
p
consejos relacionados en Consejos para jugar al golf en Rubí .p !!gets[/^[A-Z][a-z]+$/]
Código de máquina IA-32, 19 bytes
Una función que recibe el puntero a una cadena de terminación nula
ecx
y devuelve 0 o 1 pulgeax
(de acuerdo confastcall
convención).Hexdump del código:
En lenguaje ensamblador:
El primer byte del nombre de entrada tiene su quinto bit invertido (
xor
con32
) para convertirlo de mayúscula a minúscula. Esto carga 32 eneax
, usando 3 bytes de código:Para verificar si el byte es una letra minúscula:
Si no, este código falla. Para devolver 0 en este caso, pone 0
al
antes de hacer el salto condicional:El 0 in
al
también sirve como una máscara xor (o ausencia de ella) para los siguientes bytes del nombre de entrada.Una salida exitosa es cuando encuentra un byte cero, que permanece cero después de
xor
:Se supone que el nombre de entrada no está vacío. ¡Supongo que es una suposición razonable sobre un nombre (no una cadena arbitraria)!
fuente
grep
, 16 bytesEste es el patrón:
Si usa el
-E
y-x
e-c
interruptoresgrep
se imprimirán un recuento de las líneas de entrada coincidentes. Entonces, si le das una línea, obtienes un 1 o un 0. Creo que así es como funciona este lugar.El patrón es de 11 caracteres, la línea de comando completa es 23. He visto a personas usar
sed
scripts sin el comando, así que no sé qué es qué. Pero, lee stdin, por lo que puede escribirlo. Aquí estáecho
:fuente
grep -Exc
para que no necesite contar tantos bytes para los conmutadores.Mathematica 10.1, 46 bytes
Utiliza un byte menos que la solución estándar de expresiones regulares. Hace tres verificaciones.
LetterQ@#
garantiza que la cadena esté completamente compuesta de letras eStringLength@#>1
invalida las cadenas de una letra.#==ToCamelCase@#
Sin embargo, tiene menos sentido.ToCamelCase
es una función no documentada que encontré que toma una cadena de entrada AndOutputsItLikeThis. Dado que solo hay una palabra, capitalizará la primera letra, por lo que verificaremos si la cadena es igual a esa.fuente
ToCamelCase
nuevo en 10.3? No parece funcionar en 10.2.ToCamelCase["foo bar baz"]
?ToCamelCase[foo bar baz]
). ¡Extraño! Tal vez alguien puede verificar 10.3?bash / zsh / ksh, 25 bytes
Para usar esto realmente, cree un archivo con él como la única línea y haga que el archivo sea ejecutable; Los archivos ejecutables que no se reconocen como un tipo binario conocido se tratan como scripts de shell (
/bin/sh
específicamente).fuente
bash
,ksh
yzsh
, pero no tiene posibilidad de funcionar en POSIX estándarsh
o en el compatibledash
yyash
. Para evitar confusiones, sugiero cambiar el título de la respuesta.printf
lugar deecho
crear el archivo y obtendrá 25 bytes.C # 4, 89 bytes
Mi primer intento en Code Golf. Aquí viene:
Véalo en acción en Dot Net Fiddle .
fuente
bool o(string i)=>System.Text.RegularExpressions.Regex.IsMatch(i,"^[A-Z][a-z]+$");
Java, 28 bytes
Utiliza expresiones regulares para asegurarse de que la cadena consta de un carácter en mayúscula seguido de al menos un carácter en minúscula.
-1 bytes gracias a Benjamin Urquhart
fuente
k4, 39 bytes
El primer carácter es superior, todos los demás son inferiores, cuentan más de uno.
P.ej:
fuente
En serio, 16 bytes
Hex Dump:
Pruébalo en línea
En serio, todavía no tiene soporte para expresiones regulares, por lo que lo mejor que podemos hacer es:
fuente
Ocaml,
231216197166 bytesEjemplo de uso:
Sin golf (con nombres de funciones reales):
fuente
if … then 0 else
por… ||
. Y para el caso, utilizando operadores booleanos en lugar dematch
y rangos, por ejemplon.[0]>'@'&n.[0]<'['&e(l-1)
SpecBAS - 39 bytes
SpecBAS maneja expresiones regulares a través del
MATCH
comando. La salida es 0 para falso y 1 si es verdadero.fuente
Swift 2, 116 bytes
Regex es tan detallado en Swift que hacer esto es mucho más corto
Esto regresará
0
o-1
(en el caso de no entrada) para nombres no oficiales, y un número> 0
(que es igual a la longitud de la cadena - 1) si el nombre es oficialSin golf
fuente
C #, 188 bytes
Las expresiones regulares habrían sido la forma correcta de abordar esto, pero aquí hay un intento sin él.
Escritura común a mano
Me encantaría recibir consejos sobre cómo hacer que la verificación en minúsculas sea más corta, quizás sin el bucle. Recién comencé a aprender el idioma, y usé esto como práctica, pensé que compartiría mi resultado de todos modos.
fuente
Perl 5
-p
, 18 bytesPruébalo en línea!
fuente
PowerShell , 29 bytes
Pruébalo en línea!
¿Tiene el mismo truco regex que todos los demás están usando? Tiene que usar
c
ase-sensitivematch
para hacerlo correctamente a costa de un byte.fuente
Japt , 9 bytes
Devoluciones
1
o0
.Intentalo
fuente
Perl 6 , 17 bytes
Devuelve un
Match
objeto si este es un nombre oficial y de loNil
contrario.Pruébalo en línea!
fuente
m