Einführung
Ein rekursives Akronym ist ein Akronym, das sich selbst enthält oder auf sich selbst verweist, zum Beispiel:
Fish
könnte ein rekursives Akronym sein für Fish is shiny hero
, beachten Sie, wie das auch das Akronym selbst enthält. Ein anderes Beispiel ist Hi
-> Hi igloo
. Oder sogar ppcg paints
->ppcg paints cool galaxies pouring acid into night time stars
Im Grunde genommen ist ein Satz ein rekursives Akronym, wenn die ersten Buchstaben jedes der Wörter das erste Wort oder die ersten Wörter buchstabieren.
Herausforderung
Erstellen Sie ein Programm, das eine Zeichenfolge aus einem oder mehreren durch ein Leerzeichen getrennten Wörtern verwendet und ein rekursives Akronym oder eine leere Zeichenfolge ausgibt, wenn dies nicht möglich ist. Es ist unmöglich , ein rekursive Akronym für eine Zeichenfolge wie zum Beispiel zu machen, ppcg elephant
weil man das , indem man beginnen würde p
von ppcg
dann fügen hinzu , dass auf das Akronym, dann nehmen die e
aus elephant
. Aber jetzt haben wir einen Widerspruch, da das Akronym derzeit "pe .." bedeutet, was mit "pp .." in Konflikt steht. Dies ist beispielsweise auch der Fall hi
. Sie würden das h
von nehmen hi
, aber der Satz ist jetzt vorbei und es gibt keine Buchstaben mehr zu buchstabieren hi
und wir bleiben nur mit h
denen, die nicht übereinstimmenhi
. (Die Zeichenfolge benötigt eine Anzahl von Wörtern, die größer oder gleich der Anzahl der Buchstaben im Akronym ist.)
Bei der Eingabe und Ausgabe wird nicht zwischen Groß- und Kleinschreibung unterschieden
Beschränkungen
- Alles, was in Ihr Programm eingegeben wird, sind gültige englische Wörter. Sie müssen jedoch sicherstellen, dass auch gültige englische Wörter ausgegeben werden (Sie können eine Datenbank verwenden oder einfach ein Wort für jeden der 26 Buchstaben speichern).
- Es gelten Standardlücken und Standard-E / A-Regeln
Testfälle
hi igloo -> hi
ppcg paints -> (impossible)
ppcg paints cool giraffes -> ppcg
ppcg paints cool galaxies pouring acid into night time stars -> ppcgpaints
ppcg paints cool galaxies pouring acid into night time -> ppcg
ppcg questions professional pool challengers greatly -> (impossible)
I -> I
Wertung
Dies ist Code-Golf , also gewinnt der kleinste Quellcode in Bytes
ppcg paints cool galaxies pouring acid into night time
wäre "ppcgpaint", wenn es zu einem Akronym gemacht wird, aber die Ausgabe sollte seinppcg
, obwohl es nur eine teilweise Übereinstimmung ist?Antworten:
Japt , 13 Bytes
Probieren Sie es online aus!
quelle
ppcg paints cool galaxies pouring acid into night time stars
Testfall fehl05AB1E , 16 Bytes
Probieren Sie es online aus!
quelle
ð¡
statt#
in Ihrer letzten Bearbeitung geändert ? Einige spezielle Testfälle, die ich nicht berücksichtige?#
die Eingabe einzelner Wörter anstelle einer leeren Zeichenfolge fehlschlagen würde.#
sollte sich genausoð¡
verhalten wie ... Gibt es einen Anwendungsfall, bei dem Sie sich vorstellen können, wo Sie eine Zeichenfolge in Leerzeichen aufteilen möchten, aber wenn es kein Leerzeichen enthält, sollte es die Zeichenfolge bleiben (anstelle der Zeichenfolge in eine Liste eingewickelt)? Andere Leute, die dies lesen; Zu Ihrer Information: Wenn Sie#
eine Zeichenfolge ohne Leerzeichen verwenden (auf Leerzeichen aufteilen), wird die Zeichenfolge unverändert (dh"test" -> "test"
). Wenn Sieð¡
eine Zeichenfolge ohne Leerzeichen verwenden (auf Leerzeichen aufteilen), wird die Zeichenfolge in eine Liste (dh"test" -> ["test"]
) eingeschlossen.#
dass es auch alsquit if true
(was seine Hauptfunktion ist) verwendet wird. Wenn#
false zurückgegeben wird, möchten Sie wahrscheinlich nicht, dass der überprüfte Wert in eine Liste eingeschlossen wird, die auf dem Stapel verbleibt.Haskell,
5148 BytesBearbeiten: -3 Bytes dank @xnor.
Findet Akronym.
Probieren Sie es online aus!
quelle
x
,(\w-> ...).words
wäre das Komponieren kürzer.Perl 6 ,
50 42 5849 Bytes-9 Bytes dank nwellnhof
Probieren Sie es online aus!
Erste Wahl.
Ich nutze die Tatsache, dassOder der reguläre Ausdruck aus der Antwort von Mondherz ist kürzerord
nur der Ordnungswert des ersten Buchstabens einer Zeichenfolge zurückgegeben wird, währendchrs
eine Liste von Ordnungen erstellt und eine Zeichenfolge zurückgegeben wird.:(
. Als Referenz war die vorherige Antwort.words>>.ord.chrs
anstelle von[~] m:g/<<./
Erläuterung:
quelle
Retina 0,8,2 , 60 Bytes
Probieren Sie es online aus! Findet das rekursive Akronym, falls vorhanden. Erläuterung:
Duplizieren Sie die Eingabe.
Reduzieren Sie die Wörter in der ersten Zeile auf ihre Anfangsbuchstaben.
Fügen Sie nach Möglichkeit Leerzeichen ein, die mit den ursprünglichen Wörtern übereinstimmen.
Geben Sie die erste Zeile aus, wenn es sich um ein Präfix der zweiten Zeile handelt.
quelle
pp
nur ein Teil des ersten Wortes geschrieben wird, anstatt allesPerl 6 , 56 Bytes
Probieren Sie es online aus!
Bisher waren Regexe für mich verwirrend und unbrauchbar. Plötzlich verstehe ich sie perfekt. Was ist mit mir passiert: P.
Erfüllt Auswahl 1.
quelle
ppcgpaints
Test nicht, sonst hätte ich so etwas$!∈.words
für die if-Bedingung vorgeschlagenK (ngn / k) , 40 Bytes
Erste Wahl:
Probieren Sie es online aus!
quelle
Rust, 155, probieren Sie es online!
Ausgewählt: Problem 1: Akronym finden
Ungolfed, nur ein bisschen:
Oder wenn wir davon ausgehen können, dass die Eingabe nur in Kleinbuchstaben geschrieben ist, nur 130:
quelle
Gelee , 9 Bytes
Ein Vollprogramm, das die rekursive Abkürzung druckt, wenn es möglich ist.
Probieren Sie es online aus!
Wie?
quelle
JavaScript [ES6], 74 Bytes
Erstellt einen regulären Ausdruck, der übereinstimmt. Siehe Beispiele im Code.
Alle Testfälle:
quelle
increase i
Python 2 , 106 Bytes
Erste Option - Rekursives Akronym finden.
Gibt das Ergebnis in der Liste zurück.
Probieren Sie es online aus!
Python 2 , 120 Bytes
Erste Option - Rekursives Akronym finden.
Probieren Sie es online aus!
quelle
Javascript, 71 Bytes
Ansatz 1
Ungolfed:
quelle
Ruby
-apl
, 57 BytesProbieren Sie es online aus!
quelle
Python 2 , 109 Bytes
Probieren Sie es online aus!
quelle
Scala, 76 Bytes
Lösung für den einfachen Fall (Akronyme ohne Leerzeichen)
Scala,
144 Bytes100 Bytes (siehe Lösung nur durch ASCII in den Kommentaren)Test in REPL
quelle
:::
ersetzt werden durch++
? AuchList[String]
->Seq[Any]
?