Dies ähnelt dem Erstellen eines Akronyms , es gibt jedoch einige wesentliche Unterschiede, einschließlich der Methode zum Abrufen des Akronyms und dieser Herausforderung, einschließlich der flexiblen Ausgabe.
Aufgabe
Bei einer Zeichenfolge (Liste mit Zeichen / Länge 1 ist zulässig), die nur druckbares ASCII enthält, alle Großbuchstaben in der Eingabe ausgeben, denen entweder ein Leerzeichen oder ein Bindestrich vorangestellt ist, oder die das erste Zeichen in der Eingabe sind. Leere Zeichenfolge ist undefiniertes Verhalten.
Testfälle:
Die Ausgabe kann im Format sein "TEST"
, ["T","E","S","T"]
für Sie, oder was auch immer funktioniert.
Self-contained Underwater Breathing Apparatus
SUBA
a Programming Language
PL
NATO Atlantic TREATY Organization
NATO
DEFCON 2
D
hello, world!
light-Emitting dioDe
E
What Does the Fox Say?
WDFS
3D mov-Ies
I
laugh-Out Lou-D
OLD
Best friends FOREVE-r
BF
--
<space>
-- --a - - --
-- -- - - -- A
A
Step-Hen@Gmail-Mail Mail.CoM m
SHMM
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
[email protected]
.Antworten:
V , 7 Bytes
Probieren Sie es online!
Hier ist ein Hexdump, um die Byteanzahl zu beweisen:
Erläuterung:
Dies ist alles dank der wunderbaren Regex-Komprimierung von V kurz .
quelle
-
erlaubt sind.R ,
6663 BytesProbieren Sie es online!
-3 Bytes dank Scarabee
Eine anonyme Funktion; Gibt das Akronym als Vektor zurück,
c("N","A","T","O")
der implizit gedruckt wird.Für einmal ist das in R nicht so schlimm! teilt
-
oder auf(space)
, nimmt das erste Element von jedem dieser Elemente und gibt dann die Großbuchstaben zurück (LETTERS
ist ein R mit Großbuchstaben), in der Reihenfolge.quelle
function(s)(s=substr(strsplit(s,' |-')[[1]],1,1))[s%in%LETTERS]
Python 2 ,
5956 Bytes-3 Bytes dank Lynn
Probieren Sie es online!
quelle
'@'<b<'['
, sehr schöne Lösung +1'@'<b<'['>a in' -'
Spart 3 Bytes.Javascript 21 Bytes
Übernimmt eine Zeichenfolgeeingabe und gibt ein Array von Zeichenfolgen aus, die die Akronymzeichen enthalten
Erläuterung
Es ist nur eine globale Regex-Übereinstimmung für die Wortgrenze, gefolgt von einem Großbuchstaben.
quelle
Netzhaut ,
2117 BytesProbieren Sie es online!
Erläuterung
Gibt die Übereinstimmungen des regulären Ausdrucks
(?<=^| |-)[A-Z]
in der Eingabe aus, eine pro Zeile (!
).quelle
Dyalog APL,
2923 BytesBonus Testfall: Eine Programmiersprache (APL).
Gibt ein Array von Zeichen zurück (wird als Leerzeichen in TIO angezeigt).
Probieren Sie es online!
Älterer Beitrag, 29 Bytes
Probieren Sie es online!
Wie?
'(\w)\w+'⎕R
- Ersetzen Sie jede Gruppe alphabetischer Zeichen'\1'
- mit seinem ersten Zeichen~⍨
- Entfernen Sie alle Zeichen(⎕AV~⎕A)
- Das ist kein ASCII-Großbuchstabequelle
Python, 53 Bytes
Probieren Sie es online!
Ein einfacher regulärer Ausdruck mit einem Lookahead für Leerzeichen oder Bindestrich. Stellen Sie ein Leerzeichen voran, anstatt es mit dem Start abzugleichen.
quelle
C #
8478 Bytes6 Bytes dank @jkelm eingespart .
Probieren Sie es online!
Voll / Formatierte Version:
quelle
using System.Linq
in die Byteanzahl einbeziehen, wenn diesusing System.Collections.Generic
ausgenommen ist? Gibt es einen Konsens darüber, welcheusing
abzählbar sind?using System.Linq;
wird für den Linq-Code in meiner Antwort benötigt. IstIEnumerbale<char>
jedoch nicht Teil der Antwort und das ist der Teil des Codes,using System.Collections.Generic;
der kompiliert werden muss.Julia 0.6.0 (57 Bytes)
Erklärung: Dies ist mein erster Code-Golf. Ziemlich einfach. Teilen Sie die Wörter, und drucken Sie jeweils den ersten oberen Buchstaben.
Wahrscheinlich einfach, mit Regex besser umzugehen, aber ich bin neu in diesem Bereich
quelle
05AB1E , 11 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) , 108 Byte
Probieren Sie es online!
quelle
if
in ternär werden möglicherweise Byte gespart. Dies beginnt bei Index2
statt1
, ändern Sie einfachint i=1
auf ,int i=0
es zu beheben. Ansonsten kann man hier wohl nicht viel mehr machen.Jelly ,
11 bis10 Bytes-1 Byte dank Erik dem Outgolfer (
Ḳ
teilt sich in Leerzeichen> _ <)Eine monadische Verknüpfung, die Listen von Zeichen aufnimmt und zurückgibt.
Als volles Programm akzeptiert ein String und druckt das Ergebnis.
Probieren Sie es online! oder sehen Sie sich eine Testsuite an .
Wie?
quelle
Ḳ
statt verwendenṣ⁶
?Perl 5 , 25 Bytes
24 Byte Code + 1 für
-n
.Ärgerlich, dass
grep -P
Unterstützung für Look- Behind mit variabler Länge, aber Perl nicht :(.-1 Byte danke an @Dada !
Probieren Sie es online! - Beinhaltet
-l
das gleichzeitige Ausführen aller Tests.quelle
s///
oder$_=
negieren konnteprint
...s///
zu lösen, aber es ist nicht offensichtlich ... Ich bin auf der Arbeit, vielleicht versuche ich es später noch einmal!MATL , 19 Bytes
Probieren Sie es online!
quelle
Brachylog ,
252322 BytesProbieren Sie es online!
(-2 Bytes dank @Fatalize.)
quelle
Ṣ
anstelle von" "
zwei Bytes speichernJapt ,
191614 Bytes-2 Bytes dank Shaggy
Probieren Sie es online!
quelle
"(^| |-)%A"
um/^| |-)\A/
ein Byte zu speichernmf\A
->mÌ
um 2 Bytes zu sparen.Swift 5 , 110 Bytes
-5 danke an Cœur
Ausführliche Erklärung
import Foundation
- Importiert das ModulFoundation
, das fürzip()
den Hauptteil dieses Codes von entscheidender Bedeutung ist.func f(s:[String]){...}
- Erstellt eine Funktion mit einem Parameters
, dh einer Liste von Zeichenfolgen, die die Zeichen der Eingabe darstellen.for i in zip(s,[" "]+s){...}
- Iteriert miti
durch die Zip- Datei der Eingabe und der Eingabe mit einem Leerzeichen am Anfang, das ist sehr hilfreich ist, um das vorherige Zeichen in der Zeichenfolge abzurufen.if
- Überprüft, ob:i.0==i.0.uppercased()
- Das aktuelle Zeichen ist in Großbuchstaben geschrieben.&&"- ".contains(i.1)
- und Wenn das vorherige Zeichen ein Leerzeichen oder ein Bindestrich ist.Wenn die obigen Bedingungen erfüllt sind, dann:
print(i.0)
- Das Zeichen wird gedruckt, da es Teil des Akronyms ist.quelle
import UIKit
stattimport Foundation
.PowerShell , 43 Byte
Probieren Sie es online!
Abgerollt:
quelle
Python 3 , 67 Bytes
Probieren Sie es online!
quelle
Python 3 ,
73-70BytesProbieren Sie es online!
Erläuterung
lambda n:
- Erzeugt eine anonyme Lambda-Funktion mit einem String-Parametern
.n[x]
- Erhält den Charakter vonn
at indexx
.for x in range(len(n))
- Iteriert von0
bis zur Längen
und benennt die Variablex
.if
- Schecks:'@'<n[x]<'['
- Wenn das Zeichen in Großbuchstaben geschrieben ist,and(' '+n)[x]in' -'
- und wenn davor ein Leerzeichen oder ein Bindestrich in der Zeichenfolge steht, die durch ein Leerzeichen und gebildet wirdn
.quelle
i supper
, und ich habe keine Ahnung warum?.isupper()
, ich habe keine Ahnung, was Sie lesen: pJavaScript (SpiderMonkey) , 62 Byte
Probieren Sie es online!
quelle
QuadS , 17 Bytes
Probieren Sie es online!
quelle
Pyth,
15 bis16 BytesTestsuite
quelle
Pyth, 12 Bytes
Testsuite hier.
quelle
Bash (grep),
2928 BytesEin Port meiner Python-Antwort, aber da er
pgrep
Lookbehinds mit variabler Länge unterstützt, ist er merklich kürzer (sogar unter Berücksichtigung des Overheads von Python). Stecken Sie die Testfälle in eine Datei mit dem Namena
. Die Ausgabe beträgt 1 Zeichen pro Zeile.-1 Danke an Neil
quelle
^| |-
könnte ein kürzerer Test sein?RProgN 2 , 18 Bytes
Erklärt
Probieren Sie es online!
quelle
PHP, 62 Bytes
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .andere Lösungen:
quelle
C ++, 168 Bytes
Ausgabe erfolgt über den Parameter
quelle
#include<string>
das Arguments
a vollständig zu entfernen und anzunehmenstd::string
?Lua ,
7975 BytesVersuch es!
Ich habe ein print () vor dem endgültigen Ende in der try it-Version geklebt, weil es sonst ein Durcheinander ist. Dieses Programm entspricht perfekt den Anforderungen von I / O und Matching, aber ohne diese zusätzliche neue Zeile ist es ziemlich schwer zu lesen.
Die Eingabe erfolgt in Form einer Zahlentabelle: Zeichenfolge, die jeweils um 1 erhöht wird und bei 1 beginnt.
Erläuterung:
Es for durchläuft eine Übereinstimmung jeder Eingabezeichenfolge. Die Gmatch-Suche sieht wie folgt aus:
[% - | ] - Gruppe, Suche nach einem - oder einem Leerzeichen
% u - Suche nach einem Großbuchstaben
Dann wird es für jede Übereinstimmung ohne den vorangegangenen Gedankenstrich oder das vorangegangene Leerzeichen gedruckt
Bearbeiten: 4 Bytes wurden abgelegt, indem die Deklaration von 'a' entfernt und der Eingabe innerhalb der for-Schleife ein Leerzeichen hinzugefügt wurde. Außerdem wurde die Sub-Eingabe auf nur 2 anstatt auf 2,2 geändert (was zu äquivalenten Ergebnissen führt).
quelle
Pyth , 12 Bytes
Erstellt ein Jahr nach der ersten Antwort.
Probieren Sie es online!
Pyth , 21 Bytes
Erste Antwort.
Probieren Sie es online!
quelle
-|
ist ein Byte weniger als[ -]