Ein Akronym machen

24

Zielsetzung

Ihr Ziel ist es, ein Programm zu erstellen, das eine Eingabe in ein Akronym umwandelt. Ihre Eingabe enthält garantiert nur Buchstaben und Leerzeichen. Die Eingabe enthält genau ein Leerzeichen zwischen den Wörtern. Sie müssen das Akronym der Eingabe ausgeben.

Regeln

  • Ihr Code kann nicht zwischen Groß- und Kleinschreibung unterscheiden (z. B. foound Foosind gleich)
  • Ihr Code muss die folgenden Wörter ignorieren und darf sie nicht in das Akronym einfügen: and or by of
  • Sie können nicht davon ausgehen, dass alle Wörter in Kleinbuchstaben geschrieben sind.
  • Die Ausgabe muss vollständig in Großbuchstaben ohne Trennung zwischen den Zeichen erfolgen.
  • Ein abschließender Zeilenumbruch wird akzeptiert, ist aber nicht erforderlich.
  • Wenn in Ihrer Sprache eine Akronymfunktion eingebaut ist, können Sie diese möglicherweise nicht verwenden.

Beispiele

(Ein- / Ausgänge gruppiert)

United States of America
USA

Light Amplification by Stimulation of Emitted Radiation
LASER

united states of america
USA

Jordan Of the World
JTW

Wertung

Dies ist eine Herausforderung, bei der der kürzeste Code gewinnt.

Bestenliste

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
quelle
Ich habe 2 Testfälle hinzugefügt.
Aplet123
1
@ Aplet123 Bist du sicher, dass du das willst? In diesem Fall besteht die Herausforderung darin, Leerzeichen und Kleinbuchstaben zu entfernen. (ZB 4 Bytes in Retina: T` l)
Martin Ender
4
Ein bisschen zu spät, um es zu ändern, aber man würde im Allgemeinen auch erwarten, dass Wörter wie "a", "an", "the", "for", "to" usw. entfernt werden.
Darrel Hoffman
2
Abgesehen davon, dass USA kein Akronym ist, sondern eine Abkürzung? Die NASA ist ein Akronym, weil Sie das Wort "NASA" sagen. Wenn Sie die Buchstaben buchstabieren, handelt es sich nicht um ein Akronym.
corsiKa
1
Können wir davon ausgehen, dass die Eingabe immer eine nicht leere Ausgabe hat?
Downgoat

Antworten:

10

Pyth, 25 21 20 Bytes

shM-crz1dc4."@YK½¼

Probieren Sie es hier aus!

Vielen Dank an @Jakube für das Speichern eines Bytes!

Erläuterung

shM-crz1dc4. "@ YK½¼ # z = Eingabe

     rz1 # konvertiert die Eingabe in Großbuchstaben
    CD # Split-Eingabe für Leerzeichen
         c4. "@ YK½¼ # Erstellt eine Liste der Wörter aus einer gepackten Zeichenfolge, die ignoriert werden soll
   - # diese Wörter herausfiltern
 hM # nimm nur den ersten Buchstaben aller Wörter
s # füge sie zu einer Zeichenkette zusammen

Der gepackte String wird ANDBYOROF

Denker
quelle
Ein kleiner Trick beim Packen von Strings: ."@YK½¼Spart ein Byte mehr "ANDORBYOF. Es ist im Grunde genommen @ANDBYOROFvoll.
Jakube
Verdammt, die Nicht-ASCII-Zeichen wurden gelöscht. Packen @ANDBYOROFSie einfach ein und sehen Sie, was Sie bekommen.
Jakube
@ Jakube Danke! Versuchte es vorher einzupacken, endete aber immer mit der gleichen Länge oder länger.
Denker
10

Jelly , 21 bis 20 Bytes

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

Probieren Sie es online!

(-1 danke an @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

Jellys Wörterbuch ist insofern etwas seltsam, als es ANDin Großbuchstaben und byin Kleinbuchstaben geschrieben ist ...

Sp3000
quelle
8

Retina, 29 31 36 Bytes

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

Geplante Newline am Ende.

Vielen Dank an Martin Büttner für die Einsparung von 5 Bytes

Probieren Sie es online aus

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
undlrc
quelle
Netzhaut ist mir unbekannt. Was macht T`l`Ldas?
Cyoce
@ Kyoce Siehe Update mit Erklärung
andlrc
6

JavaScript (ES6), 56 Byte

Dank @ edc65 wurde ein Byte gespeichert.

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

Erläuterung

Der Code ist selbsterklärend, ich erkläre nur den regulären Ausdruck:

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

Alle diese übereinstimmenden Zeichen wurden entfernt, und das Wort wurde in Großbuchstaben geschrieben

Downgoat
quelle
1
Putting .toUpperCase () vor dem regexp Sie vermeiden könnte iFlagge
edc65
@ edc65 kluge Idee, danke!
Downgoat
Ziemlich sicher, dass die Eltern hier nicht benötigt werden
Shaun H
5

JavaScript, 61 64 66 63 Bytes

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

Es verwendet einen regulären Ausdruck, um Wörter zu finden, die nicht aus der Liste: stammen and, or, of, by, und erfasst den ersten Buchstaben. Anschließend wird die resultierende Buchstabenfolge groß geschrieben.

EDIT: 64 Bytes - Fix für Wörter, die mit beginnenof,or,by,and

EDIT: 66 Bytes - Korrigiert, um alle Wörter einschließlich des letzten Wortes zu überprüfen.

EDIT: 63 Bytes - 3 Bytes gespart dank @ edc65 und @Cyoce !

jdidion
quelle
Funktioniert nicht fürFoo Offline Bar
Downgoat
Allgemeiner Konsens ist, dass Sie die Funktion keiner Variablen zuweisen müssen.
Cyoce
Putting .toUpperCase () vor dem regexp Sie vermeiden könnte iFlagge
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

Das letzte bisschen mag ich besonders. Das erste .Zeichen im regulären Ausdruck entspricht dem ersten Zeichen der Zeile. Dann beginnen wir \zsmit dem Teil "tatsächlich ersetzt werden", wobei wir das Anfangszeichen praktisch nicht ersetzen. Stimmt .*mit dem Rest der Zeile \nüberein und stimmt mit der nachfolgenden Zeile überein. Da wir keine Ersetzungszeichenfolge angeben, entfernt vim einfach alles in der Übereinstimmung und lässt nur Initialen übrig.

Türknauf
quelle
vimist eine Programmiersprache
CousinCocaine
4

CJam, 28 24 22 Bytes

qeuS/"AOBONRYFD"4/z-:c

Probieren Sie es online aus . Vielen Dank an Sp3000 für das Aufzeigen eines Fehlers und das Vorschlagen einer Lösung sowie an Dennis für das Speichern von 4 6 (!) Bytes.

Erläuterung

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 schlug diesen Trick vor, um die Wortliste zu verkürzen: AOBONRYFDWir teilen uns in Viererblöcke auf

AOBO
NRYF
D

Wenn Sie mit dem zOperator Spalten in Zeilen umwandeln, erhalten Sie die richtigen Wörter!

NinjaBearMonkey
quelle
4

Julia, 72 63 61 55 Bytes

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

Dies ist eine anonyme Funktion, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.

Wir konvertieren die Zeichenfolge in uppercase, wählen jede Übereinstimmung des regulären Ausdrucks \b(?!AND|OR|OF|BY)\Sals Array aus und konvertieren joinsie in eine Zeichenfolge.

8 Bytes gespart dank Dennis!

Alex A.
quelle
4

Perl, 32 Bytes

say uc=~/\b(?!AND|OR|OF|BY)\S/g

+1 Byte für das -nFlag.

Algorithmus aus der Julia-Antwort von @ AlexA gestohlen .

Türknauf
quelle
3

Ruby, 45 43 Bytes

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

Dies ist eine Lambda-Funktion, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu und machen f.call(input).

Es verwendet den gleichen Ansatz wie meine Julia-Antwort , nämlich in Großbuchstaben konvertieren, Übereinstimmungen mit dem regulären Ausdruck \b(?!AND|OR|OF|BY)\Sabrufen und zu einer Zeichenfolge zusammenfügen.

Probieren Sie es hier aus

2 Bytes gespart dank manatwork!

Alex A.
quelle
3
.join*''. Übrigens müssen Sie es nicht zuordnen, um es aufzurufen. ->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
Übergeben
@manatwork Oh schön, danke!
Alex A.
3

PHP, 92 Bytes

Erster Versuch, Code Golf zu spielen.

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

Die Variable $sist der Begriff umgewandelt werden: $s = "United States of America".

Erfordert PHP 5.4 oder höher, damit die Syntax für kurze Arrays funktioniert.

Justin
quelle
Nur zu Ihrer Information, Code-Golfs werden gewertet, bytessofern nicht anders angegeben, und Sie können nur ein #am Anfang der Zeile verwenden, um einen Header zu erstellen.
Katze
2
Es gibt ein Problem. Die Verwendung von $serfordert register_globals, wurde jedoch seit 5.4 aus PHP entfernt, sodass Ihre Antwort nicht funktioniert, da Sie 5.4 für die Syntax von kurzen Arrays benötigen. Sie müssen die Eingabezeichenfolge als Argument ( $argvFunktionsargument oder ähnliches) abrufen.
am
3

Bash + GNU Coreutils, 103 76 Bytes

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

Laufen Sie mit

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

entweder mit einem oder mehreren Argumenten.

(I verzerrt das letzte Wort enthalten von ).


60 Bytes

Vielen Dank an @manatwork.

for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
rexkogitans
quelle
Entschuldigung, aber dieser awkAnruf sieht schrecklich aus. Was ist mit dem Ersetzen durch ${@^^}?
Manatwork
@manatwork, guter Punkt, nicht daran gedacht ...
rexkogitans
Sieht viel besser aus. Ersetzen Sie nun den grepAnruf durch [[ $i = @(AND|OR|BY|OF) ]]. ;) Und damit kannst du auch den Teil "+ GNU coreutils" aus dem Post-Header entfernen.
Manatwork
Eine weitere Sache: Sie könnte die ersetzen echomit printf. Des Weiteren können Sie sich bewerben Digitale Trauma ‚s Klammer Spitze zu. (Mehr in Tipps zum Golfen in Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
Manatwork
Ich war auf der Suche für die Bash - Notation ähnlich wie grep s‘ , \baber es couldnot finden ... Und ich wusste nicht , dass in do...donegeschweiften Klammern werden ersetzen können.
Rexkogitans
3

JavaScript, 104 85 Bytes

19 Bytes dank @ Aplet123 gespart .

Teilt die Zeichenfolge durch Leerzeichen und überprüft dann, ob es sich um die Wörter, oder, und oder von handelt. Wenn ja, wird es ignoriert, andernfalls wird der erste Buchstabe verwendet. Anschließend wird das Array verbunden und die Zeichenfolge in Großbuchstaben geschrieben.

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

Ungolfed:

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
};
Muschelpulver314
quelle
Warum gibt es am Ende einen Backtick? Es verursacht einen Fehler und ist nicht dafür vorgesehen, dort zu sein. Sie sollten das Backtick wahrscheinlich entfernen.
Aplet123
Auch brauchst du nicht var. Wir sorgen uns nicht um die Verschmutzung des globalen Geltungsbereichs von
Codegolf
Es funktioniert nicht. Wenn Sie sich die Beispiele ansehen, die Eingabe "United States of America" ​​gibt es die Ausgabe "USA" nicht "USA"
Aplet123
Ja, das ist mir aufgefallen. Blöde super lange eingebaute Funktionsnamen.
Clamchowder314
Sie können Z auf _.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) anstelle von setzen "". Sie können Ihre _.forEach(p=>Z+=p[0].toUpperCase());Linie entfernen und Ihre return ZLinie durch return Z.join("").toUpperCase()
Aplet123
3

MATL , 34 27 Bytes

Dank @AandN 1 Byte weniger

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

Probieren Sie es 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
quelle
1
Vielleicht funktioniert das mit 33 Bytes? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
Adnan
2

05AB1E , 33 32 28 Bytes

Code:

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

Verwendet CP-1252- Codierung.

Adnan
quelle
2

Python, 81 Bytes

lambda s:''.join(c[0]for c in s.upper().split()if c not in'AND OF OR BY'.split())
shooqie
quelle
2

Haskell, 100 99 98 82 75 Bytes

Ich bin mir ziemlich sicher, dass es viel mehr verkürzt werden kann, da ich immer noch am Verwenden sauge $ , .usw., also ()benutze ich weiterhin insted =)

Danke @nimi für deine Hilfe magic!

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

Beispiel:

*Main> a "united states by america"
"USA"
Fehler
quelle
Oh, dieser .Kompositionsoperator sieht ziemlich intuitiv aus. Ich bin mir einfach nie sicher, was in welcher Reihenfolge ausgewertet wird.
Fehler
Kapitel 6 von Lerne dir eine Haskell für das Gute! hat eine gute Einführung in die Funktionsanwendung $und Komposition mit. .
Nimi
1
Zurückschalten auf Nicht-pointfree und eine Liste Verständnis ist noch kürzer: a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
Nimi
Jetzt ist das definitiv über meinem Kopf, ich werde schneller lernen müssen =)
fehlerhaft
2

Python, 103 96 Bytes

Dies ist mein erster Versuch, Code Golf zu spielen, und das könnte wahrscheinlich noch viel mehr sein. Vielen Dank an DenkerAffe für das Speichern von sieben Zeichen.

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

Es nimmt die Eingabe auf, wandelt sie in eine Liste von Wörtern um und nimmt ihren ersten Buchstaben, wenn es nicht eines der verbotenen Wörter ist, und wandelt dann alles in Großbuchstaben um.

mriklojn
quelle
2
Es wurde versucht, die Eingabe auszuführen. In Python 3 passiert das nicht. (Ich denke, es spart 2 Bytes, um zu Python 3 zu wechseln (-4 für inputvs raw_input, +2 für print("".join..)vs print"".join..) Auch kein Leerzeichen zwischen einem Symbol und einem Schlüsselwort.
CalculatorFeline
Oder du gehst einfach mit einem Lambda, das die Eingabe als Argument erhält. Dies ist hier immer erlaubt, wenn die Aufforderung dies nicht ausdrücklich verbietet.
Denker
@CatsAreFluffy Es könnte hilfreich sein, auf Python 3 umzusteigen, aber ich bevorzuge Python 2, denn wer mag schon Klammern?
mriklojn
Sie können lower () speichern, wenn Sie die Eingabe zuerst in Großbuchstaben schreiben, bevor Sie etwas tun. Ihre Filterliste wird dann zu ['AND', 'OR', ...], der Rest bleibt jedoch gleich. Sie können auch einige Leerzeichen in geschweiften Klammern setzen. x[0]for ...ist in Python vollständig gültig.
Denker
Entfernen Sie Leerzeichen zwischen Symbolen und Schlüsselwörtern (es funktioniert)
CalculatorFeline
2

JavaScript, 80 72 55 53 Bytes

Code

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,"")}

Ich habe gerade über Pfeilfunktionen gelesen und festgestellt, dass ich dies noch weiter verkürzen kann.

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

Nach diesem , zählt man nicht die Zuordnung in der Länge, so -2 Bytes.

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

Dies ist mein erstes Golf, es ist also nicht sehr gut.

ericw31415
quelle
2

PHP, 68 61 58 Bytes

Verwendet die ISO-8859-1-Codierung.

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

Laufen Sie wie folgt ( -dnur aus ästhetischen Gründen hinzugefügt):

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

Ungolfed:

// 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 & "ß";
  • 7 Bytes mit bitweisem AND statt mit gespeichert ucwords .
  • 3 Byte durch Verwendung der ISO-8859-1-Codierung und Verwendung von ß(binär 11011111) für binär ANDanstelle eines negierten Leerzeichens (binär 00100000) gespeichert .
aross
quelle
1

Mathematica, 132 117 Bytes

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

Dank @CatsAreFluffy werden 15 Byte gespeichert.

martin
quelle
1arg wird StringSplitstandardmäßig auf Leerzeichen (-5 Byte) aufgeteilt
CalculatorFeline
1
Sie können die Wortliste auch durch ersetzen "of"|"and"|"or"|"by". Auch {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. Eine letzte Sache: CharactersKarten automatisch über Listen.
CalculatorFeline
1
Die Bestenliste würde es vorziehen, wenn Sie nach Mathematica ein Komma setzen. Gern geschehen :)
CalculatorFeline
1

PowerShell, 81 Bytes

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

Erläuterung

Teilen Sie die Räume auf, um ein Array zu erstellen. Lass die beleidigenden Mitglieder fallen. Ziehe den ersten Charakter und verbinde dich. Verwenden Sie ToUpper()für die resultierende Zeichenfolge.

Matt
quelle
Erkannte, dass das mit Anderson übereinstimmen würde und ließ es fallen. 4 Bytes hinzugefügt
Matt
1

Lua, 122 Bytes

Ich würde gerne ein Muster verwenden, um die verbotenen Wörter loszuwerden, aber leider ist lua nicht dafür gemacht, Gruppen von Zeichen zuzuordnen ... Also musste ich stattdessen eine for-Schleife verwenden, was viel teurer ist.

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","").."")

Ungolfed

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
quelle
Hallo! Ich habe auch einen Lua- Beitrag eingereicht, hier: codegolf.stackexchange.com/a/75616/33183 .
Trebuchette
1

Faktor 175 Byte

Ich habe viel gelernt, indem ich das geschrieben habe.

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 

Als ein Wort:

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

Unit-Tests:

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

Bestehen!

Katze
quelle
1

Lua, 113 112 93 Bytes

arg[1]:upper():gsub("%w+",function(w)io.write(("AND OR BY OF"):find(w)and""or w:sub(0,1))end)
Trebuchette
quelle
Wow, total vergessen die Existenz von %w! Das ist großartig!
Katenkyo
Katenkyo: Nun, das würde auch funktionieren %a. %aStimmt mit Buchstaben und %wmit Buchstaben und Zahlen überein. Die Hauptsache ist die Verwendung einer benutzerdefinierten Funktion in gsub.
Trebuchette
Ja, ich sehe, dass es einfacher ist, AND OR BY OFWörter zu entfernen, wenn ich sie auswähle. Ich habe keine benutzerdefinierte Funktion verwendet, weil sie viel kosten. gsub("(%a)%a+",string.upper)
Daher
1

C #, 134 Bytes

Golf gespielt

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]);}}}}

Lesbar

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]);
            }
        }
    }
}

Von der Kommandozeile ausführen

75448.exe Lichtverstärkung durch Anregung der emittierten Strahlung

LASER

75448.exe Vereinigte Staaten von Amerika

Vereinigte Staaten von Amerika

GER
quelle
0

IPOS - nicht konkurrierend, 27 Bytes

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

Dies funktioniert in der aktuellen Version (v0.2) des Interpreters .

Beispiellauf

python IPOS.py -i "Vereinigte Staaten von Amerika" "UND | ODER | NACH | VON" ER`% S! h% S- "
Vereinigte Staaten von Amerika

Die dort angegebenen Backslashes dienen nur zum Ausblenden der Anführungszeichen und werden für das Programm nicht benötigt.

Erläuterung

u # Versehen Sie die Eingabe mit Großbuchstaben
S # Ein Leerzeichen auf den Stapel schieben
`" AND | OR | BY | OF "ER` # Drücke einen Befehl auf den Stack, der die Übereinstimmungen des regulären Ausdrucks ersetzt
                   # mit einer leeren Zeichenfolge
% # Teilen Sie die Eingabezeichenfolge in Großbuchstaben in Leerzeichen, wenden Sie den Befehl und an
                   # Auf Leerzeichen zurückgreifen. Dadurch werden die erforderlichen Wörter aus der Eingabe entfernt.
S # Ein Leerzeichen auf den Stapel schieben
! h # Drücken Sie einen Befehl, der nur das erste Zeichen einer Zeichenfolge auswählt
% # Auf Leerzeichen aufteilen, Befehl anwenden und wieder auf Leerzeichen setzen
S- # Entfernen Sie die verbleibenden Leerzeichen (vergessen, dies nutzbar zu machen
                   # mit regulären Ausdrücken, hätte mir hier ein paar Bytes gespart :()
Denker
quelle
0

Bash / GNU-Coreutils, 60 Bytes

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

meereeum
quelle
0

Pylongolf2 , 14 Bytes (UTF-8)

c| l1╨3♀~

Pylongolf2 hat viele Nicht-ASCII-Zeichen, die als 2 Bytes zählen.

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.

quelle