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.
foo
undFoo
sind 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 Code-Golf- 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>
T` l
)Antworten:
Pyth,
252120 BytesProbieren Sie es hier aus!
Vielen Dank an @Jakube für das Speichern eines Bytes!
Erläuterung
Der gepackte String wird
ANDBYOROF
quelle
."@YK½¼
Spart ein Byte mehr"ANDORBYOF
. Es ist im Grunde genommen@ANDBYOROF
voll.@ANDBYOROF
Sie einfach ein und sehen Sie, was Sie bekommen.Jelly ,
21 bis20 BytesProbieren Sie es online!
(-1 danke an @Dennis.)
Jellys Wörterbuch ist insofern etwas seltsam, als es
AND
in Großbuchstaben undby
in Kleinbuchstaben geschrieben ist ...quelle
Retina, 29
3136BytesGeplante Newline am Ende.
Vielen Dank an Martin Büttner für die Einsparung von 5 Bytes
Probieren Sie es online aus
quelle
T`l`L
das?JavaScript (ES6), 56 Byte
Dank @ edc65 wurde ein Byte gespeichert.
Erläuterung
Der Code ist selbsterklärend, ich erkläre nur den regulären Ausdruck:
Alle diese übereinstimmenden Zeichen wurden entfernt, und das Wort wurde in Großbuchstaben geschrieben
quelle
i
FlaggeJavaScript,
61646663 BytesEs 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 beginnen
of,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 !
quelle
Foo Offline Bar
i
FlaggeVim, 46
Das letzte bisschen mag ich besonders. Das erste
.
Zeichen im regulären Ausdruck entspricht dem ersten Zeichen der Zeile. Dann beginnen wir\zs
mit 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.quelle
vim
ist eine ProgrammierspracheCJam,
282422 BytesProbieren 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
46 (!) Bytes.Erläuterung
Dennis schlug diesen Trick vor, um die Wortliste zu verkürzen:
AOBONRYFD
Wir teilen uns in Viererblöcke aufWenn Sie mit dem
z
Operator Spalten in Zeilen umwandeln, erhalten Sie die richtigen Wörter!quelle
Julia,
72636155 BytesDies 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)\S
als Array aus und konvertierenjoin
sie in eine Zeichenfolge.8 Bytes gespart dank Dennis!
quelle
Perl, 32 Bytes
+1 Byte für das
-n
Flag.Algorithmus aus der Julia-Antwort von @ AlexA gestohlen .
quelle
Ruby,
4543 BytesDies 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)\S
abrufen und zu einer Zeichenfolge zusammenfügen.Probieren Sie es hier aus
2 Bytes gespart dank manatwork!
quelle
.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']
PHP, 92 Bytes
Erster Versuch, Code Golf zu spielen.
Die Variable
$s
ist der Begriff umgewandelt werden:$s = "United States of America"
.Erfordert PHP 5.4 oder höher, damit die Syntax für kurze Arrays funktioniert.
quelle
bytes
sofern nicht anders angegeben, und Sie können nur ein#
am Anfang der Zeile verwenden, um einen Header zu erstellen.$s
erfordertregister_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 ($argv
Funktionsargument oder ähnliches) abrufen.Bash + GNU Coreutils,
10376 BytesLaufen Sie mit
entweder mit einem oder mehreren Argumenten.
(I verzerrt das letzte Wort enthalten von ).
60 Bytes
Vielen Dank an @manatwork.
quelle
awk
Anruf sieht schrecklich aus. Was ist mit dem Ersetzen durch${@^^}
?grep
Anruf durch[[ $i = @(AND|OR|BY|OF) ]]
. ;) Und damit kannst du auch den Teil "+ GNU coreutils" aus dem Post-Header entfernen.echo
mitprintf
. 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;}
\b
aber es couldnot finden ... Und ich wusste nicht , dass indo...done
geschweiften Klammern werden ersetzen können.JavaScript,
10485 Bytes19 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.
Ungolfed:
quelle
var
. Wir sorgen uns nicht um die Verschmutzung des globalen Geltungsbereichs von_.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 Ihrereturn Z
Linie durchreturn Z.join("").toUpperCase()
MATL ,
3427 BytesDank @AandN 1 Byte weniger
Probieren Sie es online!
quelle
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 BytesCode:
Verwendet CP-1252- Codierung.
quelle
Python, 81 Bytes
quelle
Haskell,
10099988275 BytesIch 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!
Beispiel:
quelle
.
Kompositionsoperator sieht ziemlich intuitiv aus. Ich bin mir einfach nie sicher, was in welcher Reihenfolge ausgewertet wird.$
und Komposition mit.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Python,
10396 BytesDies 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.
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.
quelle
input
vsraw_input
, +2 fürprint("".join..)
vsprint"".join..
) Auch kein Leerzeichen zwischen einem Symbol und einem Schlüsselwort.x[0]for ...
ist in Python vollständig gültig.JavaScript,
80725553 BytesCode
Ich habe gerade über Pfeilfunktionen gelesen und festgestellt, dass ich dies noch weiter verkürzen kann.Nach diesem , zählt man nicht die Zuordnung in der Länge, so -2 Bytes.Dies ist mein erstes Golf, es ist also nicht sehr gut.
quelle
PHP,
686158 BytesVerwendet die ISO-8859-1-Codierung.
Laufen Sie wie folgt (
-d
nur aus ästhetischen Gründen hinzugefügt):Ungolfed:
ucwords
.ß
(binär11011111
) für binärAND
anstelle eines negierten Leerzeichens (binär00100000
) gespeichert .quelle
Mathematica,
132117 BytesDank @CatsAreFluffy werden 15 Byte gespeichert.
quelle
StringSplit
standardmäßig auf Leerzeichen (-5 Byte) aufgeteilt"of"|"and"|"or"|"by"
. Auch{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. Eine letzte Sache:Characters
Karten automatisch über Listen.PowerShell, 81 Bytes
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.quelle
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.
Ungolfed
quelle
Faktor 175 Byte
Ich habe viel gelernt, indem ich das geschrieben habe.
Als ein Wort:
Unit-Tests:
Bestehen!
quelle
Lua,
11311293 Bytesquelle
%w
! Das ist großartig!%a
.%a
Stimmt mit Buchstaben und%w
mit Buchstaben und Zahlen überein. Die Hauptsache ist die Verwendung einer benutzerdefinierten Funktion ingsub
.AND OR BY OF
Wörter zu entfernen, wenn ich sie auswähle. Ich habe keine benutzerdefinierte Funktion verwendet, weil sie viel kosten.gsub("(%a)%a+",string.upper)
C #, 134 Bytes
Golf gespielt
Lesbar
Von der Kommandozeile ausführen
75448.exe Lichtverstärkung durch Anregung der emittierten Strahlung
75448.exe Vereinigte Staaten von Amerika
quelle
IPOS - nicht konkurrierend, 27 Bytes
Dies funktioniert in der aktuellen Version (v0.2) des Interpreters .
Beispiellauf
Die dort angegebenen Backslashes dienen nur zum Ausblenden der Anführungszeichen und werden für das Programm nicht benötigt.
Erläuterung
quelle
Bash / GNU-Coreutils, 60 Bytes
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
quelle
Pylongolf2 , 14 Bytes (UTF-8)
Pylongolf2 hat viele Nicht-ASCII-Zeichen, die als 2 Bytes zählen.
quelle
05AB1E , 19 Bytes (nicht konkurrierend ...?)
Probieren Sie es online!
Eine sicherlich konkurrierende Version (21 Bytes):
Probieren Sie es online!
quelle