<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
i9
!!@#$%^&*()
; coś, co powinno wrócić*
.Odpowiedzi:
Matlab, 121 bajtów
Matlab po prostu nie jest stworzony dla ciągów = (
źródło
disp
oświadczenia?Mathematica,
174168163 bajtówWykonuje pierwszy krok, a następnie oblicza cyfrowy root.
źródło
Ruby,
9774 znakówPrzykładowy przebieg:
źródło
Perl,
91 89 7674 bajtów73 + 1 dla
-p
przełącznikaTesty
Dzięki @manatwork za pomoc w uratowaniu
2 14 16 1517 znaków !!... Myślałem o:
N % 32 + Y
może zastąpić( N & 31 ) + Y
!źródło
$1
jest równy$&
. Więc lepiej usuń przechwytywanie i zmień nazwę zmiennej.while
blok może być$t="*";s/\d/$t+=$&/eg;$_=$t
.-p
przełącznik w liczeniu.echo -n "$test" | perl -pe '…'
aby zobaczyć, co mam na myśli.) Możesz to rozwiązać, zmieniającwhile
warunek na!/^[\d*]$/
. Chociaż nie, aby zmniejszyć straty gola, można wymienić caływhile
z tym:$t="*",s/\d/$t+=$&/eg,$_=$t until/^[\d*]$/
.&
ma niższy priorytet niż+
, podczas gdy%
ma wyższy, zmień&31
→%32
i możesz usunąć nawiasy wokół tego podwyrażenia.ES6, 98 bajtów
Nie golfowany:
Wersja 94-bajtowa, która działa tylko na krótkich ciągach:
Korzystanie
match
,map
ajoin
okazało się być krótsza niż przy użyciureplace
dwukrotnie:Przetestuj tutaj: https://jsbin.com/zizosayisi/edit?js,console
źródło
00 0 00
["0"]
jak0
więc nie mogłem odróżnić.> '@'
,& 31
i|| 9
?> '@'
po prostu rozróżnia litery i cyfry.& 31
jest użytecznym sposobem ignorowania różnicy między wielkimi i małymi kodami znaków, ponieważ umożliwia także bezpośrednie mapowanie kodów znaków na wartości 1..26.|| 9
jest używana, ponieważ% 9
zwraca 0 dla wielokrotności 9, ale wielokrotne dodawanie cyfr zwraca 9 dla niezerowych wielokrotności 9. W kodzie golfowym używam(t + 8) % 9 + 1
zamiast tego, co dochodzi do tego samego.Gema, 161 znaków
(Napisane tylko w celu sprawdzenia, czy działają rekurencyjne wywołania domeny).
Przykładowy przebieg:
źródło
JavaScript (ES6),
162159157 bajtówWciąż próbuję znaleźć sposób na użycie niejawnego zwrotu w funkcji zewnętrznej.
Niegolfowany + nieupoważniony
isNaN
funkcji globalnej (która przekazuje dane wejściowe), aby sprawdzić, czy nie jest to liczbaźródło
00 0 00
, wyjście*
zamiast0
!_=>{expr;return expr}
=>_=>(expr,expr)
Haskell, 126 bajtów
Zastosowanie:
f "Hello, world!"
->"7"
.l
to tablica przeglądowa znaków do listy liczb całkowitych (lista singletonów, jeśli znaleziono char, w przeciwnym razie pusta lista).f
sprawdza każdy znak swojego argumentu i spłaszcza zwróconą listę list do prostej listy liczb całkowitych i wywołań,g
aby sprawdzić warunek końcowy (pusta lista (->*
) lub pojedyncza liczba całkowita) lub zadzwonićf
z sumą listy dla kolejnej rundy.źródło
MATL , 64 bajty
Używa bieżącej wersji (4.0.0) języka.
Mam wrażenie, że można go skrócić ...
Przypadki testowe
źródło
Poważnie, 50 bajtów
Hex Dump:
Wypróbuj online
Wyjaśniono:
źródło
Pyth, 39 bajtów
Wypróbuj online
Po prostu to robię, bo nie mogę spać. Może wyjaśnię to jutro ...
źródło
Pure Bash,
199194 bajtów(podział drugiej linii służy jedynie uniknięciu paska przewijania)
Reguła testu:
źródło
JavaScript (ES6), 78
83Rozwiązanie rekurencyjne. Jako rekurencja ogona zmienne t i r nie muszą być lokalne.
Wyjaśniono
Testowy fragment kodu
źródło
Python, 154 bajty
źródło
00 0 00
!Mathematica, 133 bajty
Trochę różni się od powyższego LegionMammal978. Moja funkcja przekształca wszystko w kod znakowy, a następnie odfiltrowuje rzeczy niealfanumeryczne (zastępując je pustymi ciągami znaków). Jeśli nie ma znaków alfanumerycznych, zwraca *, w przeciwnym razie bierze cyfrowy katalog główny. To może być znacznie (~ 15B) krótsze, gdybym nie musiał zajmować się przypadkiem ciągów zerowych. C'est la vie.
Magia matematyczna dla niewtajemniczonych:
foo//.a_:>Tr@IntegerDigits@a
jest powtarzanym zamiennikiem: zastępuje dowolne liczbya
w foo sumą ich cyfr, a następnie zamienia się ponownie, aż osiągnie ustalony punkt, tj.a
Przestaje się zmieniać w trakcie zastępowania.Testy:
źródło