var QUESTION_ID=66731,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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="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><div id="language-list"> <h2>Winners 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><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>
foo(space)(space)(space)bar
jest to całkowicie akceptowalny wkładOdpowiedzi:
Pyth,
1917 bajtów2 bajty dzięki Jakube
Demonstracja
Myślę, że po raz pierwszy funkcja padu środkowego
.[
była użyteczna. Długość najdłuższej linii jest określana za pomocą transpozycji bez obcinania (.T
).Końcowe spacje są usuwane przez dodanie spacji do przodu, usuwanie spacji, a następnie usuwanie dodanego znaku.
źródło
vim,
433635 bajtówZbyt dobrze, aby nie publikować. Zwróć uwagę na końcowy znak nowej linii; to jest znaczące.
Dzięki @Marth za uratowanie postaci!
format przyjazny dla vima:
Wyjaśnienie:
źródło
sor!
do odwrócenia kolejności sortowania, możesz użyć,col("$")
aby uzyskać długość pierwszego wiersza (teraz najdłuższy, ponieważ kolejność jest odwrócona) zamiast używaćG$
, oszczędzając w sumie 1 bajt! edit : lub możesz zachować porządek sortowania i użyćG:let &tw=col("$")
zamiast tego.:h :sort
właśnie dowiedziałem się, że możesz przekazać wyrażenie regularne, aby pominąć pasujący tekst podczas sortowania, dzięki czemu możesz użyć:sor /./
sortowania według długości (+4 bajtów), co pozwala usunąćVGrx
(-4 bajty) i drugie cofnięcie ( -1 bajtów). Możesz także użyć|
separatorów zamiast<cr>
łańcucha poleceń, co pozwala pominąć:
poprzedniąlet
(-1 bajty) (pamiętaj, że wtedy musisz użyćsor!
rozwiązania,G
nie jest to polecenie ex). Więc:sor! /./|let &tw=col("$")|u|%ce
(z końcowym<CR>
) powinien zaoszczędzić 2 bajty.Mathematica, 96 bajtów
Nie pytaj mnie, jak to działało, po prostu majstrowałem przy nim, dopóki nie uzyskał prawidłowego wyniku.
źródło
Funciton , niekonkurencyjny
Wyzwanie to uwypukliło brak funkcji „wartości maksymalnej” (i wartości minimalnej) dla leniwych sekwencji, więc ... dodałem je do biblioteki podstawowej (nazywają się odpowiednio ⊤ i ⊥). Dlatego nie zadałem sobie trudu, aby podać to jako odpowiedź w golfa (aby była poprawna, musiałaby zawierać deklarację funkcji ⊤), więc oto tylko główny program.
Wykonać
(function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()
w konsoli przeglądarki, aby uzyskać lepsze renderowanie.Wyjaśnienie
Wierzę, że może to być pierwsza odpowiedź Funciton na tej stronie, która używa wyrażeń lambda.
ǁ
do dzielenia ciągu wejściowego na znaki nowego wiersza (ASCII 10). Zwraca to leniwą sekwencję.ɱ
(mapę), dając jej lambda, która oblicza długość każdego łańcucha, a następnie przekazujemy ostatnią sekwencję,⊤
aby uzyskać długość najdłuższej linii.ɱ
, nadając mu lambda, który oblicza długość każdej struny, odejmuje się od długości linii maksymalnego obliczonego wcześniej, podziałów, które przez 2 (faktycznie shift-prawy 1), generuje że wiele spacji (ASCII 32) a następnie łączy ciąg w te spacje. (Z powodów geometrycznych zadeklarowałem‡
funkcję, która wywołuje‼
(konkatenacja łańcucha) z odwróconymi parametrami.)ʝ
do ponownego złożenia wszystkich ciągów znaków, używając znaku nowej linii (ASCII 10) jako separatora.źródło
Retina ,
5452 bajty\t
S można zastąpić rzeczywistych kart, ale Użyłem\t
tutaj, bo inaczej SE konwersji spacje. Zauważ, że w drugim wierszu znajduje się wiodące miejsce.Wypróbuj online.
Wyjaśnienie
Podstawową ideą jest dopasowanie linii, która jest co najmniej o dwa znaki krótsza niż najdłuższa linia (lub technicznie, dwa znaki krótsze niż jakakolwiek inna linia) i otoczenie jej dwoma spacjami. Powtarzane jest to do momentu, gdy nie możemy już znaleźć takiej linii, co oznacza, że wszystkie linie znajdują się w obrębie jednego znaku maksymalnej długości (gdzie jeden znak ma uwzględniać niedopasowania parzystości, i gwarantuje, że linie te zostaną przesunięte w lewo - Centrum).
Co do rzeczywistego wyrażenia regularnego:
Po prostu dopasowuje jedną linię, jednocześnie pchając jedną grupę
1
do grupy dla każdej postaci.Jest wyglądem, który jest dopasowywany od prawej do lewej i przesuwa kursor na początek ciągu, dzięki czemu lookahead wewnątrz może sprawdzić cały ciąg. Zauważ, że z powodu braku kotwicy, lookahead można zastosować z dowolnego miejsca, ale to nie tworzy dodatkowych dopasowań. Wiemy, że
[^\t]
zawsze będzie pasować do dowolnego znaku w ciągu, ponieważ na wejściu można zagwarantować, że będą zawierały tylko spacje i linie znaków, jeśli chodzi o białe znaki.Ten lookahead próbuje znaleźć linię, która jest co najmniej o dwa znaki dłuższa niż ta, którą aktualnie dopasowujemy.
[^\t]*
przesuwa się po ciągu, aby móc dopasować dowolny wiersz.^
zapewnia, że zaczynamy od początku linii...
następnie dopasowuje dwa dodatkowe znaki, których potrzebujemy dla dłuższej linii. Teraz(?<-1>.)+
dopasowuje pojedyncze znaki w tej linii podczas wyskakiwania z grupy1
(zwróć uwagę, że.
nie można dopasować linii, więc jest to ograniczone do jednej linii). Wreszcie(?(1)^)
twierdzi, że udało nam się opróżnić całą grupę1
. Jeśli linia jest krótsza niż wymagana, nie jest to możliwe, ponieważ w linii nie ma wystarczającej liczby znaków, aby wyskoczyć z grupy 1 wystarczająco często, aby ją opróżnić.źródło
Jolf , 3 bajty
Pytanie niekonkurencyjne, aktualizacja po datach.
Wypróbuj tutaj! .
¯ \ _ (ツ) _ / ¯ Myślałem, że będzie to przydatna funkcja.
źródło
JavaScript (ES6),
9391 bajtów2 bajty zapisane dzięki @ edc65 !
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
.repeat
akceptuje i obcina wartości niecałkowite, więc nie potrzebujesz|0
CJam,
262319 bajtówPierwszy raz korzystam z CJam! Cztery bajty zapisane dzięki Martinowi Büttnerowi. Wypróbuj online.
Wyjaśnienie
źródło
qN/_z,f{1$,m2/S*\N}
LabVIEW, 3 lub 35 LabVIEW Prymitywy
Znajduje wiersze, dopóki nie zostaną żadne, a następnie oblicza liczbę spacji do dodania i łączy wszystko.
Alternatywnie możesz użyć wbudowanego wyrównania środkowego na wskaźnikach strunowych, ale to trochę przypomina oszustwo.
źródło
Python 2,
8381 bajtówDzięki @xnor za zapisanie 2 znaków
przykładowe dane wejściowe:
przykładowe dane wyjściowe:
I kończąc na drugim miejscu z 84 bajtami przy użyciu str.center () i str.rstrip (dzięki @JF).
źródło
len
do zmiennej, której używasz dwa razy - to łamie nawet przy 5 znakach (jakrange
). Możesz także użyćmap
do komp. Listy.str.rstrip()
po wywołaniu,center
aby pozbyć się końcowego miejsca.len(max(a,key=len))
, zobacz to .TeaScript , 24 bajty
Pętle przez linie, dodaje
floor((max line length - line length) / 2)
spacje na początku.Bez golfa
Wypróbuj online
źródło
PowerShell, 58
67bajtówdo 58 bajtów dzięki komentarzom @ mazzy:
$a
pętle nad każdym ciągiem z|%{...}
.string.padleft()
metodę na każdym łańcuchu za pomocą% -member
skrótu, który przyjmuje żądaną końcową długość linii jako parametr.array_longest_line_length/2 + current_line_length/2
current_line_length/2
->$_.length/2
źródło
Emacs Lisp, 203 bajty
Nie golfowany:
Wyśrodkowany:
źródło
HTML, 40 bajtów
Pokaż fragment kodu
Snippet zawiera
</xmp>
tag, ponieważ przeglądarka fragmentów kodu chce, aby moje tagi były zrównoważone.źródło
MATL , 22
31bajtówKażda linia jest wprowadzana za pomocą linii końcowej (tj enter naciśnięcia klawisza). Pusty wiersz (dwa enternaciśnięcia klawiszy) oznacza koniec wprowadzania.
Przykład
Wyjaśnienie
źródło
Rubinowy,
766861 bajtówPrzykładowy przebieg:
źródło
->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
center
pierwszej kolejności, ale jak rozumiem, samo to złamałoby zasadę „Końcowe białe znaki w wydruku nie są dozwolone”. Dziękuję za tę&:size
część - też tego spróbowałem, ale z pewnością zmieniłem coś wokół składni.Haskell,
1118177 bajtówWejście do funkcji f, wydruk nie jest drukowany.
Zastosowanie: załaduj do interpretera,
ghci center.hs
a następnie, jeśli chcesz wydrukować wynik f na danym ciąguputStr$f"Programming Puzzles\n&\nCode Golf"
Edit: Dzięki Nimi dla 34 bajtów, świetną robotę! :RE
źródło
map
:<$>
.replicate(...)' '
można zastąpić[1.. ...]>>" "
. W sumie:unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]
.l1 >> l2
tworzy (długość l1) kopie l2 i łączy je. Np."abcd" >> [1,2]
->[1,2,1,2,1,2,1,2]
(<- 4 kopie 1,2 na jednej liście). W naszym przypadku jest[1..n]>>" "
to n kopii przestrzeni, która jest taka sama jak to, coreplicate
robi.R, 126 bajtów
kod
bez golfa
Prawdopodobnie istnieją lepsze sposoby, aby to zrobić, wciąż nad tym pracując.
źródło
Gema, 160 bajtów
Napisane głównie dla mojej ciekawości, aby zobaczyć, co można zrobić w języku bez odpowiedniej struktury tablic i właściwej instrukcji pętli.
Przykładowy przebieg:
źródło
Perl 6 , 61 bajtów
stosowanie:
źródło
for @l {
golenie 2 bajtów i przechodzenieput " "
doput" "
golenia kolejnego bajtu. Czy to prawda dla Perla 6? (Nie znam Perla 6). Również twój wynik pokazany tutaj nie pasuje do wymaganego wyniku; czy to literówka?Japt,
2825Wypróbuj online!
Jak to działa
źródło
PHP , 98 bajtów
Wypróbuj online!
Nie golfowany:
Wynik:
źródło
05AB1E , 2 bajty
Wbudowane ftw ¯ \ _ (ツ) _ / ¯
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
(Preferencja po prawej stronie byłaby z kapitałem
.C
: zobacz różnice .)źródło
Japt , 1 bajt
Wypróbuj lub uruchom wszystkie przypadki testowe
źródło