Cel
Twoim celem jest stworzenie programu, który konwertuje dane wejściowe na akronim. Twoje dane wejściowe mają tylko litery i spacje. Dane wejściowe będą miały dokładnie jedną spację między słowami. Musisz podać akronim wejścia.
Zasady
- W kodzie nie jest rozróżniana wielkość liter (np.
foo
IFoo
są takie same) - Twój kod musi zignorować następujące słowa i nie umieszczać ich w akronimie:
and or by of
- Nie możesz założyć, że wszystkie słowa są małe.
- Wynik musi być w całości pisany wielkimi literami, bez oddzielania znaków.
- Końcowy znak nowej linii jest akceptowany, ale nie konieczny.
- Jeśli twój język ma wbudowaną funkcję akronimu, nie możesz jej używać.
Przykłady
(zgrupowane wejścia / wyjścia)
United States of America
USA
Light Amplification by Stimulation of Emitted Radiation
LASER
united states of america
USA
Jordan Of the World
JTW
Punktacja
Jest to wyzwanie dla golfa, więc wygrywa najkrótszy kod.
Tabela liderów
var QUESTION_ID=75448,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>
T` l
)Odpowiedzi:
Pyth,
252120 bajtówWypróbuj tutaj!
Dzięki @Jakube za uratowanie jednego bajtu!
Wyjaśnienie
Spakowany ciąg staje się
ANDBYOROF
źródło
."@YK½¼
oszczędza jeden bajt"ANDORBYOF
. Jest w zasadzie@ANDBYOROF
zapakowany.@ANDBYOROF
i zobacz, co dostajesz.Galaretka ,
2120 bajtówWypróbuj online!
(-1 dzięki @Dennis.)
Słownik galaretki jest trochę dziwny, ponieważ ma
AND
wielkie litery, aleby
małe ...źródło
Retina, 29
3136bajtówPlanowana nowa linia na końcu.
Podziękowania dla Martina Büttnera za oszczędność 5 bajtów
Wypróbuj online
źródło
T`l`L
zrobić?JavaScript (ES6), 56 bajtów
Zapisano bajt dzięki @ edc65.
Wyjaśnienie
Kod jest oczywisty, wyjaśnię tylko regex:
Usunął wszystkie te dopasowane znaki i wielkie litery tego słowa
źródło
i
flagiJavaScript,
61646663 bajtówUżywa wyrażenia regularnego, aby znaleźć słowa, których nie ma na liście:
and, or, of, by
i przechwytuje pierwszą literę. Następnie wielką literą powstaje ciąg liter.EDYCJA: 64 bajtów - Naprawiono, że słowa zaczynają się od
of,or,by,and
EDYCJA: 66 bajtów - Naprawiono, aby sprawdzać wszystkie słowa, w tym ostatnie słowo.
EDYCJA: 63 bajtów - Zapisano 3 bajty dzięki @ edc65 i @Cyoce !
źródło
Foo Offline Bar
i
flagivim, 46
Szczególnie podoba mi się ten ostatni kawałek. Pierwszy
.
w wyrażeniu regularnym odpowiada pierwszemu znakowi linii. Następnie używamy\zs
do uruchomienia części „faktycznie zastępowanej”, skutecznie nie zastępując początkowej postaci..*
dopasowuje resztę wiersza i\n
dopasowuje znak nowej linii. Ponieważ nie określamy ciągu zastępującego, vim po prostu usuwa wszystko z dopasowania, pozostawiając tylko inicjały.źródło
vim
jest językiem programowaniaCJam,
282422 bajtówWypróbuj online . Dziękujemy Sp3000 za wskazanie błędu i zasugerowanie poprawki oraz Dennisowi za zaoszczędzenie
46 (!) Bajtów.Wyjaśnienie
Dennis zasugerował tę sztuczkę, aby skrócić listę słów: dzielimy
AOBONRYFD
się na cztery częściPrzenosząc kolumny do wierszy za pomocą
z
operatora, otrzymujemy odpowiednie słowa!źródło
Julia,
72636155 bajtówJest to anonimowa funkcja, która przyjmuje ciąg i zwraca ciąg. Aby go wywołać, przypisz go do zmiennej.
Konwertujemy ciąg znaków
uppercase
, wybieramy każde dopasowanie wyrażenia regularnego\b(?!AND|OR|OF|BY)\S
jako tablicę ijoin
ciąg znaków.Zaoszczędź 8 bajtów dzięki Dennisowi!
źródło
Perl, 32 bajty
+1 bajt dla
-n
flagi.Algorytm skradziony z odpowiedzi Julii @ AlexA .
źródło
Rubinowy,
4543 bajtówJest to funkcja lambda, która przyjmuje ciąg i zwraca ciąg. Aby go wywołać, przypisz go do zmiennej i zrób
f.call(input)
.Wykorzystuje to samo podejście, co moja odpowiedź Julii , mianowicie konwertuje na wielkie litery, pobiera dopasowania wyrażenia regularnego
\b(?!AND|OR|OF|BY)\S
i łączy w ciąg.Wypróbuj tutaj
Zaoszczędzono 2 bajty dzięki manatwork!
źródło
.join
→*''
. Nawiasem mówiąc, nie trzeba przypisywać go do niczego, aby to nazwać. Wystarczy przekazać argumenty jako indeks dolny:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
PHP, 92 bajty
Pierwsza próba golfa kodowego.
Zmienna
$s
to fraza do konwersji:$s = "United States of America"
.Wymaga PHP 5.4 lub nowszego, aby składnia krótkiej tablicy działała.
źródło
bytes
chyba że zaznaczono inaczej, i możesz użyć tylko a#
na początku linii, aby utworzyć nagłówek.$s
wymagaregister_globals
, ale zostało to usunięte z PHP od 5.4, więc twoja odpowiedź nie może działać, ponieważ potrzebujesz 5.4 dla składni krótkiej tablicy. Musisz uzyskać ciąg wejściowy jako argument ($argv
argument funkcji lub podobny).Bash + GNU coreutils,
10376 bajtówBiegnij z
z jednym cytowanym argumentem lub z wieloma argumentami.
(I zniekształcony ostatnie słowo zawierać od ).
60 bajtów
Dzięki @manatwork.
źródło
awk
połączenie wygląda okropnie. Co powiesz na zastąpienie go${@^^}
?grep
połączenie na[[ $i = @(AND|OR|BY|OF) ]]
. ;) I dzięki temu możesz również usunąć część „+ GNU coreutils” z nagłówka postu.echo
zprintf
. Ponadto można zastosować cyfrowe Trauma „s wskazówka nawiasów zbyt. (Więcej w Wskazówki dotyczące gry w golfa w Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
\b
ale couldnot go znaleźć ... A ja nie wiedziałem, żedo...done
można zastąpić klamrami.JavaScript,
10485 bajtówZaoszczędzono 19 bajtów dzięki @ Aplet123 .
Dzieli ciąg znaków na spacje, a następnie sprawdza, czy są to słowa, lub, i, lub przez. Jeśli tak, ignoruje to, w przeciwnym razie bierze pierwszą literę. Następnie łączy się z tablicą i tworzy ciąg wielkich liter.
Nie golfowany:
źródło
var
. Nie martwimy się o zanieczyszczenie globalnego zasięgu w golfowym kodzie: P_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0])
zamiast""
. Możesz usunąć_.forEach(p=>Z+=p[0].toUpperCase());
linię i zastąpić jąreturn Z
liniąreturn Z.join("").toUpperCase()
MATL ,
3427 bajtów1 bajt mniej dzięki @AandN
Wypróbuj online!
źródło
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 bajtówKod:
Wykorzystuje kodowanie CP-1252 .
źródło
Python, 81 bajtów
źródło
Haskell,
10099988275 bajtówJestem pewien, może zostać skrócony o wiele więcej, jak ja nadal ssać w użyciu$
,.
itd., Więc nadal używać()
insted =)Dzięki @nimi za twoją pomoc magię!
Przykład:
źródło
.
operator kompozycji wygląda dość intuicyjnie. Po prostu nigdy nie jestem pewien, co jest oceniane w jakiej kolejności.$
i kompozycji z.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Python,
10396 bajtówTo moja pierwsza próba gry w golfa kodowego, która prawdopodobnie mogłaby być znacznie bardziej popularna. Dzięki DenkerAffe za uratowanie siedmiu znaków.
Pobiera dane wejściowe, przekształca je w listę słów i bierze pierwszą literę, jeśli nie jest to jedno z zabronionych słów, a następnie zamienia wszystko na wielkie litery.
źródło
input
vsraw_input
, +2 dlaprint("".join..)
vsprint"".join..
) Również brak spacji między symbolem a słowem kluczowym.x[0]for ...
jest całkowicie poprawny w Pythonie.JavaScript,
80725553 bajtówKod
Właśnie przeczytałem o funkcjach strzałek i zdałem sobie sprawę, że mogę to jeszcze bardziej skrócić.Zgodnie z tym nie liczysz długości zadania, więc -2 bajty.To jest mój pierwszy golf, więc nie jest zbyt dobry.
źródło
PHP,
686158 bajtówWykorzystuje kodowanie ISO-8859-1.
Działaj w ten sposób (
-d
dodano tylko dla estetyki):Nie golfowany:
ucwords
.ß
(binarny11011111
) dla binarnegoAND
zamiast zanegowanej spacji (binarny00100000
).źródło
Mathematica,
132117 bajtów15 bajtów zapisanych dzięki @CatsAreFluffy.
źródło
StringSplit
Domyślnie 1arg dzieli się na białe znaki (-5 bajtów)"of"|"and"|"or"|"by"
. Również{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. I ostatnia rzecz:Characters
automatycznie mapuje listy.PowerShell, 81 bajtów
Wyjaśnienie
Podziel na spacje, tworząc tablicę. Upuść obrażających członków. Pociągnij pierwszą postać i połącz się. Użyj
ToUpper()
na wynikowym ciągu.źródło
Lua, 122 bajtów
Chciałbym użyć wzoru, aby pozbyć się zakazanych słów, ale niestety lua nie jest dopasowana do grup znaków ... Więc zamiast tego musiałem użyć pętli for, która jest znacznie droższa.
Bez golfa
źródło
Współczynnik, 175 bajtów
Wiele się nauczyłem, pisząc to.
Jednym słowem:
Testy jednostkowe:
Przechodzić!
źródło
Lua,
11311293 bajtówźródło
%w
! To wspaniale!%a
;%a
dopasowuje litery i%w
dopasowuje litery i cyfry. Najważniejsze jest użycie niestandardowej funkcji wgsub
.AND OR BY OF
przy wyborze słów ... Nie użyłem żadnej funkcji niestandardowej, ponieważ kosztują dużo, więc pomyślałem, żegsub("(%a)%a+",string.upper)
po usunięciu byłoby lepiejC #, 134 bajty
Grał w golfa
Czytelny
Wykonaj z wiersza poleceń
75448.exe Wzmocnienie światła przez stymulację emitowanego promieniowania
75448.exe stany zjednoczone ameryki
źródło
IPOS - niekonkurujący, 27 bajtów
Działa to w bieżącej wersji (v0.2) interpretera .
Przykładowy przebieg
Ukośniki odwrotne służą tylko do ucieczki cytatów i nie są potrzebne programowi.
Wyjaśnienie
źródło
coreutils bash / GNU, 60 bajtów
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
źródło
Pylongolf2 , 14 bajtów (UTF-8)
Pylongolf2 ma wiele znaków spoza ASCII, które liczą się jako 2 bajty.
źródło
05AB1E , 19 bajtów (niekonkurencyjne ...?)
Wypróbuj online!
Z pewnością konkurencyjna wersja (21 bajtów):
Wypróbuj online!
źródło