Robienie akronimu

24

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. fooI Foosą 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 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>

Aplet123
źródło
Dodałem 2 przypadki testowe.
Aplet123
1
@ Aplet123 Czy na pewno chcesz tego? Ponieważ w takim przypadku wyzwanie sprowadza się do usuwania spacji i małych liter. (Np 4 bajty w Retina: T` l)
Martin Ender
4
Trochę za późno, aby to zmienić, ale ogólnie można oczekiwać, że słowa takie jak „a”, „an”, „the”, „for”, „to” itp. Zostaną usunięte.
Darrel Hoffman
2
Odsuwa to na bok fakt, że USA nie są akronimem, to skrót? NASA to akronim, ponieważ wymawiasz słowo „nasa”. Jeśli przeliterujesz litery, to nie jest to skrót.
corsiKa 13.03.16
1
Czy możemy założyć, że dane wejściowe zawsze będą niepuste?
Downgoat 13.03.16

Odpowiedzi:

10

Pyth, 25 21 20 bajtów

shM-crz1dc4."@YK½¼

Wypróbuj tutaj!

Dzięki @Jakube za uratowanie jednego bajtu!

Wyjaśnienie

shM-crz1dc4. "@ YK½¼ # z = wejście

     rz1 # przekonwertować wejście na wielkie litery
    cd # podziel wejście na spacje
         c4. "@ YK½¼ # utwórz listę słów z zapakowanego ciągu, które należy zignorować
   - # odfiltruj te słowa
 hM # bierze tylko pierwszą literę wszystkich słów
s # połącz je w jeden ciąg

Spakowany ciąg staje się ANDBYOROF

Denker
źródło
Mała sztuczka pakowania strun: ."@YK½¼oszczędza jeden bajt "ANDORBYOF. Jest w zasadzie @ANDBYOROFzapakowany.
Jakube,
Dang, non-ascii-chars zostały usunięte. Po prostu spakuj @ANDBYOROFi zobacz, co dostajesz.
Jakube,
@Jakube Thanks! Próbowałem go wcześniej spakować, ale zawsze kończyło się taką samą lub dłuższą.
Denker
10

Galaretka , 21 20 bajtów

,“°ɲịĊs°gɗ»ṣ€⁶Œuḟ/Ḣ€

Wypróbuj online!

(-1 dzięki @Dennis.)

,“°ɲịĊs°gɗ»              Pair input with the string "OR OF by AND"
           ṣ€⁶           Split both by spaces
              Œu         Uppercase
                ḟ/       Reduce filter (removing ignored words from input)
                  Ḣ€     Keep first letters of remaining words

Słownik galaretki jest trochę dziwny, ponieważ ma ANDwielkie litery, ale bymałe ...

Sp3000
źródło
8

Retina, 29 31 36 bajtów

T`l`L
 |(AND|OR|BY|OF)\b|\B.

Planowana nowa linia na końcu.

Podziękowania dla Martina Büttnera za oszczędność 5 bajtów

Wypróbuj online

T`l`L                  # Replace lowercase with uppercase
 |(AND|OR|BY|OF)\b|\B. # Regex match, it doesn't matter if we match 'AND' in SHAND
                       #   since the 'SH' will still become 'S' or am I missing something?
                       # Replace with nothing
andlrc
źródło
Nie znam siatkówki. Co ma T`l`Lzrobić?
Cyoce
@Cyoce Zobacz aktualizację z objaśnieniem
andlrc
6

JavaScript (ES6), 56 bajtów

Zapisano bajt dzięki @ edc65.

s=>s.toUpperCase().replace(/\B.| |(AND|O[RF]|BY)\b/g,"")

Wyjaśnienie

Kod jest oczywisty, wyjaśnię tylko regex:

\B.          // Matches any character (`.`), that's not the start of a word
|            // Matches spaces
|(...)\b     // Matches all the words that should be ignored

Usunął wszystkie te dopasowane znaki i wielkie litery tego słowa

Downgoat
źródło
1
umieszczając .toUpperCase () przed wyrażeniem regularnym można było uniknąć iflagi
edc65
@ edc65 inteligentny pomysł, dzięki!
Downgoat
Całkiem pewne, że pareny nie są tu potrzebne
Shaun H
5

JavaScript, 61 64 66 63 bajtów

a=>a.toUpperCase().replace(/(AND|O[FR]|BY|(\w)\w+)( |$)/g,"$2")

Używa wyrażenia regularnego, aby znaleźć słowa, których nie ma na liście: and, or, of, byi przechwytuje pierwszą literę. Następnie wielką literą powstaje ciąg liter.

EDYCJA: 64 bajtów - Naprawiono, że słowa zaczynają się odof,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 !

jdidion
źródło
Nie działa dlaFoo Offline Bar
Downgoat
Panuje ogólna zgoda co do tego, że nie trzeba przypisywać funkcji do zmiennej.
Cyoce
umieszczając .toUpperCase () przed wyrażeniem regularnym można było uniknąć iflagi
edc65
5

vim, 46

gUU:s/ /\r/g<cr>:g/\vAND|OR|OF|BY/d<cr>:%s/.\zs.*\n<cr>
gUU                      make line uppercase
:s/ /\r/g<cr>            replace all spaces with newlines
:g/\vAND|OR|OF|BY/d<cr>  remove unwanted words
:%s/.\zs.*\n<cr>         remove all non-initial characters and newlines

Szczególnie podoba mi się ten ostatni kawałek. Pierwszy .w wyrażeniu regularnym odpowiada pierwszemu znakowi linii. Następnie używamy \zsdo uruchomienia części „faktycznie zastępowanej”, skutecznie nie zastępując początkowej postaci. .*dopasowuje resztę wiersza i \ndopasowuje znak nowej linii. Ponieważ nie określamy ciągu zastępującego, vim po prostu usuwa wszystko z dopasowania, pozostawiając tylko inicjały.

Klamka
źródło
vimjest językiem programowania
CousinCocaine
4

CJam, 28 24 22 bajtów

qeuS/"AOBONRYFD"4/z-:c

Wypróbuj online . Dziękujemy Sp3000 za wskazanie błędu i zasugerowanie poprawki oraz Dennisowi za zaoszczędzenie 4 6 (!) Bajtów.

Wyjaśnienie

qeuS/  e# Convert the input to uppercase and split on spaces
"AOBONRYFD"4/z  e# Push the array of short words. See more below
-      e# Remove each short word from the input words
:c     e# Cast the remaining words to characters, which is a
       e# shorter way of taking the first letter

Dennis zasugerował tę sztuczkę, aby skrócić listę słów: dzielimy AOBONRYFDsię na cztery części

AOBO
NRYF
D

Przenosząc kolumny do wierszy za pomocą zoperatora, otrzymujemy odpowiednie słowa!

NinjaBearMonkey
źródło
4

Julia, 72 63 61 55 bajtów

s->join(matchall(r"\b(?!AND|OR|OF|BY)\S",uppercase(s)))

Jest 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)\Sjako tablicę i joinciąg znaków.

Zaoszczędź 8 bajtów dzięki Dennisowi!

Alex A.
źródło
3

Rubinowy, 45 43 bajtów

->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}

Jest 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)\Si łączy w ciąg.

Wypróbuj tutaj

Zaoszczędzono 2 bajty dzięki manatwork!

Alex A.
źródło
3
.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']
manatwork
@manatwork Och, dziękuję!
Alex A.
3

PHP, 92 bajty

Pierwsza próba golfa kodowego.

foreach(explode(" ",str_replace(["AND","OR","BY","OF"],"",strtoupper($s)))as$x){echo$x[0];}

Zmienna $sto fraza do konwersji:$s = "United States of America" .

Wymaga PHP 5.4 lub nowszego, aby składnia krótkiej tablicy działała.

Justin
źródło
Po prostu FYI, kody do golfa są punktowane, byteschyba że zaznaczono inaczej, i możesz użyć tylko a #na początku linii, aby utworzyć nagłówek.
kot
2
Jest pewien problem. Używanie $swymaga register_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 ( $argvargument funkcji lub podobny).
aross
3

Bash + GNU coreutils, 103 76 bajtów

for i in ${@^^};do grep -qE '\b(AND|OR|BY|OF)\b'<<<$i||echo -n ${i:0:1};done

Biegnij z

./codegolf.sh Light Amplification BY Stimulation of Emitted Radiationofo

z jednym cytowanym argumentem lub z wieloma argumentami.

(I zniekształcony ostatnie słowo zawierać od ).


60 bajtów

Dzięki @manatwork.

for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
rexkogitans
źródło
Przepraszam, ale to awkpołączenie wygląda okropnie. Co powiesz na zastąpienie go ${@^^}?
manatwork
@manatwork, uwaga, nie myślałem o tym ...
rexkogitans
Wygląda znacznie lepiej. Teraz zamień greppołączenie na [[ $i = @(AND|OR|BY|OF) ]]. ;) I dzięki temu możesz również usunąć część „+ GNU coreutils” z nagłówka postu.
manatwork
I jeszcze jedno: można wymienić echoz printf. 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;}
manatwork
Szukałem notacji bash podobny do grep „s \bale couldnot go znaleźć ... A ja nie wiedziałem, że do...donemożna zastąpić klamrami.
rexkogitans
3

JavaScript, 104 85 bajtów

Zaoszczę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.

a=_=>_.split` `.map(v=>/\b(o(f|r)|and|by)\b/i.test(v)?"":v[0]).join("").toUpperCase()

Nie golfowany:

function a(_) {
       _ = _.split` `; //Split on spaces
       _ = _.map(function(v){return new RegExp("\b(o(f|r)|and|by)\b","i").test(v)}); //Check if the banned words are in the result
       _ = _.join(""); //Join it into a string
       _ = _.toUpperCase(); //Convert it to uppercase
};
clamchowder314
źródło
Dlaczego na końcu jest backtick? Powoduje błąd i nie ma tam być. Prawdopodobnie powinieneś usunąć backtick.
Aplet123
Nie potrzebujesz też var. Nie martwimy się o zanieczyszczenie globalnego zasięgu w golfowym kodzie: P
NinjaBearMonkey
To nie działa. Jeśli spojrzysz na przykłady, dane wejściowe `stany zjednoczone ameryki 'dają wynik` usa `nie` USA `
wynik` nie`
Tak, zauważyłem to. Głupie, bardzo długie nazwy wbudowanych funkcji.
clamchowder314
Możesz ustawić Z na _.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 Zlinią return Z.join("").toUpperCase()
Aplet123
3

MATL , 34 27 bajtów

1 bajt mniej dzięki @AandN

KkYb'OF AND OR BY'YbX-c1Z)!

Wypróbuj online!

Xk                  % convert to uppercase
Yb                  % split by spaces. Gives a cell array of input words
'AND OR BY OF'      % ignored words separated by spaces
Yb                  % split by spaces. Gives a cell array of ignored words
X-                  % setdiff: remove ignored words (result is stable)
c                   % convert to 2D char array, padding words with spaces
1Z)                 % take first column
!                   % transpose into a row
Luis Mendo
źródło
1
Może to działa z 33 bajtami? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
Adnan
2

05AB1E , 33 32 28 bajtów

Kod:

‘€ƒ€—€‚€‹‘ð¡)Uuð¡)vXyQO>iy¬?

Wykorzystuje kodowanie CP-1252 .

Adnan
źródło
2

Python, 81 bajtów

lambda s:''.join(c[0]for c in s.upper().split()if c not in'AND OF OR BY'.split())
shooqie
źródło
2

Haskell, 100 99 98 82 75 bajtów

Jestem 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ę!

import Data.Char
w=words
x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]

Przykład:

*Main> a "united states by america"
"USA"
wada
źródło
Och, ten .operator kompozycji wygląda dość intuicyjnie. Po prostu nigdy nie jestem pewien, co jest oceniane w jakiej kolejności.
flawr
rozdział 6: Naucz się Haskell dla wielkiego dobra! ma dobre wprowadzenie do aplikacji funkcji $i kompozycji z. .
nimi
1
Przełączenie z powrotem do nieprzestrzegania pointfree i listowego jest jeszcze krótszy: a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
nimi
Teraz to zdecydowanie nad moją głową, będę musiał nauczyć się szybciej =)
flawr
2

Python, 103 96 bajtów

To 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.

lambda x:"".join([x[0]for y in x.split(" ") if y.lower() not in ['and','or','of','by']]).upper()

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.

mriklojn
źródło
2
To była stara się wykonać wejście. W Pythonie 3 tak się nie dzieje. (Myślę, że oszczędza 2 bajty na przejściu na Python 3 (-4 dla inputvs raw_input, +2 dla print("".join..)vs print"".join..) Również brak spacji między symbolem a słowem kluczowym.
CalculatorFeline
Lub po prostu używasz lambda, która otrzymuje dane wejściowe jako argument. Jest to zawsze dozwolone tutaj, jeśli wyzwanie nie zabrania tego wprost.
Denker
@CatsAreFluffy Pomocne może być przejście na Python 3, ale zdecydowanie wolę Python 2, ponieważ kto lubi nawiasy?
mriklojn
Możesz zapisać lower (), kiedy najpierw wprowadzisz wielkie litery, zanim cokolwiek zrobisz. Twoja lista filtrów zmieni się na [„AND”, „OR”, ...]., Ale reszta pozostanie taka sama. Możesz także upuścić kilka białych spacji za nawiasy klamrowe. x[0]for ...jest całkowicie poprawny w Pythonie.
Denker
Usuń spacje między symbolami i słowami kluczowymi (to działa)
CalculatorFeline
2

JavaScript, 80 72 55 53 bajtów

Kod

function a(t){t=t.toUpperCase();t=t.replace(/AND|OR|BY|OF|\B.| |/g,"");return t}

function a(t){return t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")}

Właśnie przeczytałem o funkcjach strzałek i zdałem sobie sprawę, że mogę to jeszcze bardziej skrócić.

a=t=>t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")

Zgodnie z tym nie liczysz długości zadania, więc -2 bajty.

t=>t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")

To jest mój pierwszy golf, więc nie jest zbyt dobry.

ericw31415
źródło
2

PHP, 68 61 58 bajtów

Wykorzystuje kodowanie ISO-8859-1.

for(;$w=$argv[++$x];)stripos(_AND_OR_BY_OF,$w)||print$w&ß;

Działaj w ten sposób ( -ddodano tylko dla estetyki):

php -d error_reporting=30709 -r 'for(;$w=$argv[++$x];)stripos(_AND_OR_BY_OF,$w)||print$w&ß; echo"\n";' united states oF america

Nie golfowany:

// Iterate over the CLI arguments (words).
for(;$w = $argv[++$x];)
    // Check if the word is one of the excluded words by substring index.
    // The check is case insensitive.
    stripos("_AND_OR_BY_OF", $w) ||
        // Print the word, converting to uppercase and getting only the
        // first char by using bitwise AND.
        print $w & "ß";
  • Zapisano 7 bajtów za pomocą bitowego AND zamiast za pomocą ucwords.
  • Zaoszczędzono 3 bajty, stosując kodowanie ISO-8859-1 i używając ß(binarny 11011111) dla binarnego ANDzamiast zanegowanej spacji (binarny 00100000).
aross
źródło
1

Mathematica, 132 117 bajtów

ToUpperCase[First/@Characters@DeleteCases[StringDelete[StringSplit@#,"of"|"and"|"or"|"by",IgnoreCase->True],""]<>""]&

15 bajtów zapisanych dzięki @CatsAreFluffy.

jaskółka oknówka
źródło
StringSplitDomyślnie 1arg dzieli się na białe znaki (-5 bajtów)
CalculatorFeline
1
Możesz także zamienić listę słów na "of"|"and"|"or"|"by". Również {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. I ostatnia rzecz: Charactersautomatycznie mapuje listy.
CalculatorFeline
1
W tabeli wyników wolisz wstawić przecinek za Mathematica. Również mile widziane :)
CalculatorFeline
1

PowerShell, 81 bajtów

(-join($args[0].Split(" ")|?{$_-notmatch"^(and|or|by|of)$"}|%{$_[0]})).ToUpper()

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.

Matt
źródło
Zrozumiałem, że pasowałoby do Andersona i upuścił je. Dodano 4 bajty
Matt
1

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.

s=arg[1]for k,v in next,{"of","and","by","or"}do
s=s:gsub(v,"")end
print(s:gsub("(%a)%a+",string.upper):gsub("%s","").."")

Bez golfa

s=arg[1]                               -- initialise s with the argument
for k,v in next,{"of","and","by","or"} -- iterate over the array of banned words
do
    s=s:gsub(v,"")                     -- replace the occurences of v by 
end                                    --   an empty string
print(s:gsub("(%a)%a+",                -- replace words (separated by spaces)
              string.upper)            -- by their first letter capitalised
         :gsub("%s","")                -- replace spaces with empty strings
                       .."")           -- concatenate to prevent the number of 
                                       -- substitutions to be shown
Katenkyo
źródło
Hej! Złożyłem również Lua, tutaj: codegolf.stackexchange.com/a/75616/33183 .
Trebuchette
1

Współczynnik, 175 bajtów

Wiele się nauczyłem, pisząc to.

USING: strings ascii sets splitting kernel sequences math.ranges ;
>lower " " split [ { "and" "or" "by" "of" } in? not ] filter [ first dup [a,b] >string ] map "" join >upper 

Jednym słowem:

USING: strings ascii sets splitting kernel sequences math.ranges ;

: >initialism ( str -- str )
  >lower " " split                            ! string.lower.split(" ")
  [ { "and" "or" "by" "of" } in? not ] filter ! word in { } ?
  [ first dup [a,b] >string ]          map    ! word[0]
  "" join >upper ;                            ! "".join.upper

Testy jednostkowe:

USING: tools.test mk-initialism ;
IN: mk-initialism.tests

{ "LASER" } [ "Light Amplification by Stimulation of Emitted Radiation" >initialism ] unit-test
{ "USA"   } [ "United States OF Americaof" >initialism ]                              unit-test
{ "USA"   } [ "united states and america" >initialism ]                               unit-test
{ "JTW"   } [ "Jordan Of the World" >initialism ]                                     unit-test

Przechodzić!

kot
źródło
1

Lua, 113 112 93 bajtów

arg[1]:upper():gsub("%w+",function(w)io.write(("AND OR BY OF"):find(w)and""or w:sub(0,1))end)
Trebuchette
źródło
Wow, całkowicie zapomniałem o istnieniu %w! To wspaniale!
Katenkyo,
Katenkyo: Cóż, to też działałoby %a; %adopasowuje litery i %wdopasowuje litery i cyfry. Najważniejsze jest użycie niestandardowej funkcji w gsub.
Trebuchette
Tak, widzę, że łatwiej jest usunąć AND OR BY OFprzy wyborze słów ... Nie użyłem żadnej funkcji niestandardowej, ponieważ kosztują dużo, więc pomyślałem, że gsub("(%a)%a+",string.upper)po usunięciu byłoby lepiej
Katenkyo
1

C #, 134 bajty

Grał w golfa

class P{static void Main(string[] a){foreach (var s in a){if(!"AND OR BY OF".Contains(s.ToUpper())){Console.Write(s.ToUpper()[0]);}}}}

Czytelny

class P
{
    static void Main(string[] a)
    {
        foreach (var s in a)
        {
            if (!"AND OR BY OF".Contains(s.ToUpper()))
            {
                Console.Write(s.ToUpper()[0]);
            }
        }
    }
}

Wykonaj z wiersza poleceń

75448.exe Wzmocnienie światła przez stymulację emitowanego promieniowania

LASER

75448.exe stany zjednoczone ameryki

USA

GER
źródło
0

IPOS - niekonkurujący, 27 bajtów

uS`"AND|OR|BY|OF"ER`%S!h%S-

Działa to w bieżącej wersji (v0.2) interpretera .

Przykładowy przebieg

python IPOS.py -i "United States of America" ​​uS` \ "AND | OR | BY | OF \" ER`% S! h% S-
USA

Ukośniki odwrotne służą tylko do ucieczki cytatów i nie są potrzebne programowi.

Wyjaśnienie

u # Ustaw wielkie litery na wejściu
S # Wciśnij spację na stos
`" AND | OR | BY | OF "ER` # Wciśnij polecenie do stosu, który zastępuje dopasowania wyrażenia regularnego
                   # z pustym ciągiem
% # Podziel ciąg znaków na wielkie litery na spacje, zastosuj polecenie i
                   # dołącz ponownie do spacji. To usuwa wymagane słowa z danych wejściowych.
S # Wciśnij spację na stos
! h # Naciśnij polecenie, które wybiera tylko pierwszy znak ciągu
% # Podziel na spacje, zastosuj polecenie i połącz ponownie w spacje
S- # Usuń pozostałe spacje (zapomniałem uczynić to możliwym do użycia
                   # z wyrażeniami regularnymi, zaoszczędziłbym tutaj trochę bajtów :()
Denker
źródło
0

coreutils bash / GNU, 60 bajtów

sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'

meereeum
źródło
0

Pylongolf2 , 14 bajtów (UTF-8)

c| l1╨3♀~

Pylongolf2 ma wiele znaków spoza ASCII, które liczą się jako 2 bajty.

c| l1╨3♀~
c         read input
 |        split by space (note the space after |)
   l1     substring(0, 1)
     ╨3   convert to uppercase
       ♀~ pop the array into the stack and print it.

źródło
0

05AB1E , 19 bajtów (niekonkurencyjne ...?)

lð¡“€ƒ€—€‹€‚“#K€нJu

Wypróbuj online!

Z pewnością konkurencyjna wersja (21 bajtów):

lð¡“€ƒ€—€‹€‚“#Kvy0èuJ

Wypróbuj online!

Erik the Outgolfer
źródło