var QUESTION_ID=86647,OVERRIDE_USER=48934;function answersUrl(e){return"http://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"http://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>
Odpowiedzi:
V ,
1514 bajtówWypróbuj online!
Dość proste rozwiązanie. Idealnym wyzwaniem dla V!
Wyjaśnienie:
Dogodnie, w zależności od tego, jak działa rekurencja, będzie ona działać raz dla każdego pojedynczego kursora.
źródło
Cheddar,
777267 bajtówBrak wyrażenia regularnego!
Uwielbiam tę odpowiedź, ponieważ jest to wspaniała demonstracja umiejętności Cheddara. Głównie dzięki funkcji zamiany dodanej przez Conor. PR do dev nigdy nie został stworzony, więc funkcja zamiany istnieje tylko w tej gałęzi (aktualizacja: Zrobiłem PR i teraz jest w najnowszej wersji beta, którą można zainstalować
npm install -g cheddar-lang
)Znalazłem sposób na grę w golfa, ale niestety niedopatrzenie powoduje, że długości przedmiotów nie są takie same:
Mógłbym zaoszczędzić wiele bajtów za pomocą wyrażeń regularnych, a tak naprawdę właśnie utworzyłem wyrażenia regularne dla Cheddar ... jedynym problemem jest brak funkcji wyrażeń regularnych: /
Wyjaśnienie
Aby uzyskać lepsze zrozumienie. Po to
.lines
wraca1^2
.turn
z obrócić to:w:
Kolejny przykład, który wyjaśni:
staje się:
Dlaczego formatować?
To, co
%-2s
robi, jest dość proste.%
określa, że rozpoczynamy „format” lub że zmienna zostanie wstawiona do tego ciągu w tym momencie.-
oznacza padanie sznurka w prawo i2
jest maksymalną długością. Domyślnie wypełnia się spacjami.s
po prostu określa, że jest to ciąg znaków. Aby zobaczyć, co robi:źródło
turn
metodę na łańcuchy?Perl, 21 + 1 = 22 bajtów
Uruchom z
-p
flagą. Zastąp♥
surowymESC
bajtem (0x1b
) i↓
pionową tabulacją (0x0b
).Pionowa zakładka to pomysł Martina Endera. Zaoszczędził dwa bajty! Dzięki.
źródło
JavaScript (ES6),
5655 bajtówOczywiście wracać na ratunek. Pierwszy zastępuje wszystkie postacie spacjami, chyba że znajdzie daszek, w którym to przypadku usuwa daszek i zatrzymuje znak za nim. (Gwarantujemy, że te postacie istnieją.) Drugi to oczywisty sposób na zastąpienie każdego karetki i następnego znaku spacją.
Edycja: Zapisano 1 bajt dzięki @Lynn, który wymyślił sposób ponownego użycia ciągu zastępującego dla drugiego zastępowania, umożliwiając zamapowanie zamienionego na tablicy wyrażeń regularnych.
źródło
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
to, że bajt jest krótszy.Python 3,
15710198858374 bajtyTo rozwiązanie śledzi, czy poprzedni znak był
^
, a następnie decyduje, czy wypisać do pierwszego czy drugiego wiersza na podstawie tego.Dane wyjściowe jako tablica
['firstline', 'secondline']
.Zaoszczędź
1315 bajtów dzięki @LeakyNun!Zaoszczędź 7 bajtów dzięki @Joffan!
źródło
a=['','']
i concatenate' '
ic
bezpośrednio poda[l]
ia[~l]
?Python 2, 73 bajty
Brak wyrażenia regularnego. Zapamiętuje, czy poprzedni znak był
^
, i umieszcza bieżący znak w górnej lub dolnej linii na tej podstawie, a spację w drugiej.źródło
Pyth, 17 bajtów
Zwraca tablicę 2 ciągów znaków. (Przygotuj się,
j
aby dołączyć do nich z nową linią).Wypróbuj online .
źródło
MATL , 18 bajtów
Wypróbuj online!
źródło
Rubinowy, 47 + 1 (
-n
flaga) = 48 bajtówUruchom tak:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
źródło
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
i-p
zamiast-n
.+$/
oznacza, że nie będzie zapisywać bajtów.puts
rzuca ci nowy wiersz automatycznie, gdy,
występuje między argumentami.ruby -p ... <<< 'input'
ale zgadzam się, jeśli brakuje nowej linii, to nie jest dobrze! Właściwie mogłem wcześniej dodać do moich testów nową linię ... To działało, ale nie mogę sprawdzić!gets
przez większość czasu zawiera końcowy znak nowej linii, ale jeśli wstawisz plik, który nie zawiera końcowego znaku nowej linii, to nie pojawi się i wynik będzie niepoprawny . Przetestuj swój kod,ruby -p ... inputfile
ponieważ Ruby przekierowujegets
do pliku, jeśli jest to argument wiersza poleceń.Python (2),
766867 bajtów-5 bajtów dzięki @LeakyNun
-3 Bajty dzięki @ KevinLau-notKenny
-1 bajtów dzięki @ValueInk
-0 bajtów dzięki @DrGreenEggsandIronMan
Ta anonimowa funkcja Lambda przyjmuje ciąg wejściowy jako jedyny argument i zwraca dwie linie wyjściowe oddzielone znakiem nowej linii. Aby go nazwać, należy nadać mu nazwę, pisząc przed nim „f =”.
Całkiem proste wyrażenie: pierwsza część zastępuje spacją: dowolną postacią i karetką
marchewkilub tylko char, ale tylko wtedy, gdy nie ma przed nimi karetki. Druga część zastępuje każdy znak w ciągu i znak po nim spacją.źródło
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
dla -1 bajtówWypukły, 24 bajty
Wypróbuj online!
źródło
Siatkówka, 16 bajtów
Port mojej odpowiedzi na Perla, wskazany przez Martina Endera. Zastąp
♥
surowymESC
bajtem (0x1b
) i↓
pionową tabulacją (0x0b
).źródło
shell + TeX + catdvi,
5143 bajtówUżywa
tex
do pisania pięknej matematyki, a następnie używacatdvi
do przedstawienia tekstu. Polecenie head usuwa śmieci (numeracja stron, końcowe znaki nowej linii), które w przeciwnym razie są obecne.Edycja: Dlaczego ta długa, właściwa rzecz i przekierowanie do
/dev/null
momentu, w którym można zignorować efekty uboczne i zapisać w pliku z jedną literą?Przykład
Wkład:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Wyjście TeXa (przycięte do równania): Wyjście końcowe:
Założenia: Zacznij od pustego katalogu (lub konkretnie katalogu bez nazwy kończącej się na „i”). Dane wejściowe to pojedynczy argument w skrypcie powłoki. Dane wejściowe nie są pustym ciągiem.
Ktoś mi powie, czy to szczególnie nadużycie zasad
catdvi
.źródło
Haskell,
745655 bajtówZwraca parę ciągów. Przykład użycia:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
tworzy listę par, gdzie pierwszy element to znak w górnej linii, a drugi element to znak w dolnej linii.unzip
zamienia go w parę list.Edycja: @xnor zasugerował,
unzip
co pozwala zaoszczędzić 18 bajtów. @Laikoni znalazł jeszcze jeden bajt do zapisania. Dzięki!źródło
j=unzip.g
?g[]=[]
zg x=x
uratować jeden bajt.Perl, 35 bajtów
34 bajty kod + 1 dla
-p
Stosowanie
Uwaga: jest to dokładnie to samo, co odpowiedź Value Ink , którą później zauważyłem. Usunie w razie potrzeby, ponieważ tak naprawdę nie dodaje się do rozwiązania Ruby.
źródło
Java 8 lambda,
132128112 znakówWersja bez golfa wygląda następująco:
Wyprowadza jako tablicę, po prostu sprawdzając, czy jest daszek, a jeśli tak, następny znak zostanie umieszczony w górnym rzędzie, w przeciwnym razie będzie spacja.
Aktualizacje
Zamieniono znaki na wartości ascii, aby zapisać 4 znaki.
Dzięki @LeakyLun za wskazanie, aby zamiast tego użyć tablicy char jako danych wejściowych.
Również dzięki @KevinCruijssen do przełączania
int
sięchar
zaoszczędzić trochę więcej znaków.źródło
char[]
i użyć,for(char c:i)
aby sprawdzić, czy można zmniejszyć liczbę bajtów.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
z"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
jako danych wejściowych. ( Ideon tych zmian. )Kokos ,
122 11496 bajtówEdycja:
826 bajtów w dół z pomocą Dziurawej Zakonnicy.Tak więc, jak się dzisiaj dowiedziałem, python ma trójskładnikowy operator warunkowy, a właściwie dwa z nich:
<true_expr> if <condition> else <false_expr>
a<condition> and <true_expr> or <false_expr>
ostatni z nich ma jeden char mniej.Wersja idealna do Pythona może być ideonowana .
Pierwsze podejscie:
Dzwonię z
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
odciskamiCzy ktoś już próbował golfa w kokosie? Wzbogaca python w bardziej funkcjonalne koncepcje programowania, takie jak dopasowanie wzorca i konkatenacja funkcji (z
..
) używane powyżej. Ponieważ jest to moja pierwsza próba kokosa, wszelkie wskazówki będą mile widziane.Można to zdecydowanie skrócić, ponieważ każdy poprawny kod Pythona jest również prawidłowym kokosem i opublikowano krótsze odpowiedzi w języku Python, jednak starałem się znaleźć rozwiązanie czysto funkcjonalne.
źródło
x and y or z
), aby zastąpićcase
.s[0]=="^"
zamiastmatch['^',c]+r in l
match['^',c]+r
zs[0]=="^"
, wtedyc
ir
nie są wiążące. Jak to by pomogło?s[1]
aby zastąpićc
is[2:]
wymienićr
.Dyalog APL, 34 bajty
Zwraca dwuelementowy wektor z dwiema liniami
Próbka (w górę z przodu jest formatowanie wektora dwuelementowego do spożycia przez ludzi):
źródło
PowerShell v2 +,
8883 bajtówTrochę dłużej niż inne, ale pokazuje trochę magii PowerShell i trochę inną logikę.
Zasadniczo ta sama koncepcja, co odpowiedzi Pythona - iterujemy wprowadzany znak po znaku, pamiętamy, czy poprzedni był znakiem karetki (
$c
), i umieszczamy bieżący znak w odpowiednim miejscu. Jednak logika i metoda określania miejsca wyjścia są obsługiwane nieco inaczej i bez krotki lub osobnych zmiennych - sprawdzamy, czy poprzedni znak był daszkiem, a jeśli tak, wypisujemy znak do potoku i konkatenujemy spację do$b
. W przeciwnym razie sprawdzamy, czy bieżący znak jest karetkąelseif($_-94)
i dopóki tak nie jest, łączymy bieżący znak z$b
i wysyłamy spację do potoku. Na koniec ustalamy, czy obecna postać jest karetką na następną rundę.Zbieramy te postacie z potoku razem w pareny, zamykamy je w ciąg,
-join
który zamienia je w ciąg, i zostawiamy to wraz z$b
potokiem. Wyjście na końcu jest niejawne z nową linią między nimi.Dla porównania, tutaj jest bezpośredni port @ XNOR za Pythona odpowiedzi na 85 bajtów :
źródło
Gema,
4241 znakówGema przetwarza dane wejściowe jako strumień, więc musisz rozwiązać je w jednym przebiegu: pierwszy wiersz jest zapisywany natychmiast po przetworzeniu, drugi wiersz jest gromadzony w zmiennej $ s, a następnie wyprowadzany na końcu.
Przykładowy przebieg:
źródło
Guma cynamonowa, 21 bajtów
Nie konkuruje. Wypróbuj online.
Wyjaśnienie
Nie jestem zbyt dużym golfistą, więc prawdopodobnie jest na to lepszy sposób.
Ciąg dekompresuje się do:
(zwróć uwagę na spację końcową)
Pierwszy
S
etap otrzymuje dane wejściowe i używa znaku negatywnego do zamiany wszystkich znaków innych niż daszki bez poprzedzającego daszka spacją, a następnie usuwa wszystkie daszki. Następnie natychmiast wyświetla zmodyfikowany ciąg wejściowy z nową linią i usuwa tenS
etap. Ponieważ STDIN jest teraz wyczerpany, a poprzedni etap nie dostarczył żadnych danych wejściowych, następnyS
etap ponownie otrzymuje ostatni wiersz STDIN, a następnie zastępuje wszystkie karetki, a następnie dowolną postacią spacją i wyświetla to.W kodzie psuedo Perla:
źródło
J ,
2827 bajtówWypróbuj online!
Musi być lepszy sposób ...
źródło