<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
y9
!!@#$%^&*()
; algo que debe devolver*
.Respuestas:
Matlab, 121 bytes
Matlab simplemente no está hecho para cadenas = (
fuente
disp
declaración?Mathematica,
174168163 bytesRealiza el primer paso, luego calcula la raíz digital.
fuente
Ruby,
9774 caracteresEjecución de muestra:
fuente
Perl,
91 89 7674 bytes73 + 1 para
-p
interruptorPruebas
¡Gracias @manatwork por ayudarme a ahorrar
2 14 16 1517 caracteres!... He pensado en:
N % 32 + Y
puede reemplazar( N & 31 ) + Y
!fuente
$1
es igual a$&
. Así que mejor elimine la captura y cambie el nombre de la variable.while
El bloqueo podría ser$t="*";s/\d/$t+=$&/eg;$_=$t
.-p
interruptor en el recuento.echo -n "$test" | perl -pe '…'
para ver a qué me refiero). Puede resolverlo cambiando lawhile
condición a!/^[\d*]$/
. Una vez allí, para reducir la pérdida puntuación, es posible reemplazar la totalidadwhile
con esto:$t="*",s/\d/$t+=$&/eg,$_=$t until/^[\d*]$/
.&
tiene una precedencia menor que+
, mientras que%
tiene mayor, cambie&31
→%32
y puede eliminar los paréntesis alrededor de esa subexpresión.ES6, 98 bytes
Sin golf:
Versión de 94 bytes que solo funciona en cadenas cortas:
Usando
match
,map
yjoin
resultó ser más corto que usarreplace
dos veces:Pruébelo aquí: https://jsbin.com/zizosayisi/edit?js,console
fuente
00 0 00
["0"]
,0
así que no pude notar la diferencia.> '@'
,& 31
y|| 9
?> '@'
solo distingue entre letras y números.& 31
es una forma útil de ignorar la diferencia entre los códigos de caracteres en mayúsculas y minúsculas, ya que también asigna de forma conveniente los códigos de caracteres directamente en valores de 1..26.|| 9
se usa porque% 9
devuelve 0 para múltiplos de 9, pero la adición repetida de dígitos devuelve 9 para múltiplos distintos de cero de 9. En el código de golf que uso, en(t + 8) % 9 + 1
cambio, se trata de lo mismo.Gema, 161 caracteres
(Escrito solo para probar si las llamadas de dominio recursivo funcionan).
Ejecución de muestra:
fuente
JavaScript (ES6),
162159157 bytesTodavía trato de buscar una forma de utilizar el retorno implícito en la función externa.
Sin golf + sin minificar
isNaN
función global (que emite su entrada) para verificar si no es un númerofuente
00 0 00
, salida en*
lugar de0
!_=>{expr;return expr}
=>_=>(expr,expr)
Haskell, 126 bytes
Uso:
f "Hello, world!"
->"7"
.l
es una tabla de búsqueda de caracteres para la lista de enteros (lista única, si se encuentra char, de lo contrario, la lista está vacía).f
busca cada carácter de su argumento y aplana la lista de listas devuelta en una lista simple de enteros y llamadasg
para verificar la condición final (lista vacía (->*
) o entero único) o para llamarf
con la suma de la lista para otra ronda.fuente
MATL , 64 bytes
Esto usa la versión actual (4.0.0) del lenguaje.
Tengo la sensación de que podría acortarse ...
Casos de prueba
fuente
En serio, 50 bytes
Hex Dump:
Pruébalo en línea
Explicado:
fuente
Pyth, 39 bytes
Pruébalo en línea
Solo estoy haciendo esto porque no puedo dormir. Quizás lo explique mañana ...
fuente
Golpe pura,
199194 bytes(el segundo salto de línea es solo para evitar la barra de desplazamiento)
Regla de prueba:
fuente
JavaScript (ES6), 78
83Solución recursiva. Siendo la recursividad de la cola, las variables t y r no tienen que ser locales.
Explicado
Fragmento de prueba
fuente
Python, 154 bytes
fuente
00 0 00
!Mathematica, 133 bytes
Un poco diferente de LegionMammal978 de arriba. Mi función convierte todo en un código de caracteres, luego filtra los elementos no alfanuméricos (reemplazándolos con cadenas vacías). Si no hay caracteres alfanuméricos, devuelve *, de lo contrario toma la raíz digital. Esto podría ser significativamente (~ 15B) más corto si no tuviera que lidiar con el caso de cadena de todos ceros. Así es la vida.
La magia de Mathematica, para los no iniciados:
foo//.a_:>Tr@IntegerDigits@a
es un reemplazo repetido: reemplaza cualquier númeroa
en foo con la suma de sus dígitos, luego lo reemplaza nuevamente hasta que alcanza un punto fijo, es decir,a
deja de cambiar bajo reemplazo.Pruebas:
fuente