Der kürzeste Code, der alle eindeutigen "Sub-Palindrome" einer Zeichenfolge findet, d. H. Alle Teilzeichenfolgen mit einer Länge> 1, die ein Palindrom sind.
zB.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
zB.2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
quelle
quelle
333
sein? Naiv würden Sie am Ende33
zweimal druckenAntworten:
J, 24,
31,40Beispielgebrauch:
Nehmen Sie das, GolfScript!
quelle
/dev/random
hier aus eine Müllkippe angelegt , um uns zum Narren zu halten ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 Zeichen) gekürzt werden ?Python 124
quelle
Haskell 98, 88
9196quelle
Python -
138136Dieser Code dupliziert keine Subpalindrome.
quelle
'"'+t+'"'
zut
, um Platz zu sparen, obwohl einfache Anführungszeichen verwendet werden.Ruby -
126 10297 Zeichenquelle
Golfscript, 48 Zeichen
subpalindrome.gs
Verwendung:
Die erste Operation
{,}{(;}/
wandelt eine Zeichenfolge in eine Liste von nachfolgenden Teilzeichenfolgen um. Eine ähnliche Leading-Substrings-Transformation wird dann auf das Ergebnis abgebildet. Dann mit abflachen{+}*
, mit dem Prädikat nach Palindromen filtern.,1>\.-1%=*
, mit eindeutige Werte erfassen.&
, dann hübsch drucken.Es wäre sinnvoller, die Trailing-Substrings-Transformation als Block zu extrahieren und als Ersatz für Leading-Substrings nach dem Umkehren jedes Trailing-Substrings wiederzuverwenden, aber ich kann mir keine prägnante Methode dafür vorstellen.
quelle
Haskell -
170, 153quelle
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
durchmain=getLine>>=putStrLn.intercalate", ".toList.p
. Ich würde auch einen Anrufp
durch seinen Körper ersetzen .subsequences
! Ihr Programm meldet mehr Subpalindrome als die Referenzausgabe, zum Beispiel 1. ("1111" zum Beispiel)J, 48
z.B
quelle
Prolog, 92
Beispielgebrauch:
quelle
Windows PowerShell, 104
109111Dies erwartet die Eingabe von stdin und wirft alle gefundenen Palindrome pro Zeile auf stdout:
(Wenn
cmd
es ausgeführt wird, hatecho 12131331|powershell -file subp.ps1
es nur$input
eine etwas andere Bedeutung, abhängig davon, wie das Skript aufgerufen wurde, aber es kann stdin sein, nur nicht interaktiv.)2011-01-30 13:57 (111) - Erster Versuch.
2011-01-30 13:59 (109) - Inline-Variablendeklaration.
2011-06-02 13:18 (104) - Erneutes Finden von Teilzeichenfolgen durch Verbinden eines
.Substring()
Zeichen- Arrays anstelle eines Aufrufs und etwas mehr Inlining.quelle
Q, 78
Verwendung
quelle
Retina ,
3427 BytesProbieren Sie es online!
Die Testsuite benötigt eine
M
da sich eine weitere Phase anschließt, in der Leerzeilen zwischen Testfällen eingefügt werden.Erläuterung
Drucken (
!
) Sie alle eindeutigen (@
), überlappenden (&
) Übereinstimmungen des regulären Ausdrucks(.)+.?(?<-1>\1)+(?(1)^)
. Dies entspricht einem Palindrom mit einer Länge von 2 oder mehr, das Bilanzgruppen verwendet. Der Teil "Alle überlappenden Matches" hat eine Einschränkung: Wir können höchstens ein Match pro Startposition erzielen. Beginnen jedoch zwei Palindrome unterschiedlicher Länge an derselben Position, erscheint das kürzere Palindrom wieder am Ende des längeren Palindroms. Und da die Gier+
längerer Übereinstimmungen Prioritäten setzt, bekommen wir sowieso alle Palindrome.quelle
05AB1E ,
1110 BytesProbieren Sie es online!
quelle
1›
zu≠
. :)Perl, 112
quelle
JavaScript (ES6), 120 Byte
Diese Funktion nimmt einen String als Eingabe und gibt ein Array aus.
quelle
Clojure, 81 Bytes
for
war eine perfekte Übereinstimmung hier :) Könnte verwendet werden,:when(=(reverse p)p)
wenn die Eingabe eine Liste von Zeichen oder eine vollständige Zeichenfolge war, die nicht als Palindrom gezählt wurde, tatsächlich könnte in diesem Fall der maximale Bereichi
auch sein(count %)
.Kompaktester Fall als Referenz:
quelle
Python, 83
102ZeichenDie Phrase
(t[1:]or())and...
ist äquivalent zu(...)if t[1:]else()
und speichert ein Zeichen! Darauf bin ich angesichts der Einsparungen sehr stolz.Beispiel:
quelle
Scala 127
Um dies und den Vergleich von Apfel zu Apfel mit der anderen Antwort von Scala zu halten, habe ich mir auch ein Objekt gemacht, das App erweitert. Anstatt die Eingabezeichenfolge manuell zu iterieren und Teilzeichenfolgen zu verwenden, habe ich slide () verwendet, um eine Sequenz aller Teilzeichenfolgen für mich zu erstellen.
quelle
Scala 156
170quelle
Perl 6 ,
3532 BytesProbier es aus
Probier es aus
Erweitert:
quelle
Kokosnuss , 69 Bytes
Probieren Sie es online!
Python 2 , 73 Bytes
Probieren Sie es online!
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Classic) , 27 Byte
Probieren Sie es online!
quelle
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
gültig.Japt , 14 Bytes
Probieren Sie es online!
Erläuterung:
quelle
PowerShell , 99 Byte
Probieren Sie es online!
Weniger golfen:
quelle
Brachylog , 11 Bytes
Probieren Sie es online!
(Die Kopfzeile im Link ist zum Zeitpunkt der Veröffentlichung unterbrochen. Hier ist also das Vergleichselement (funktionsäquivalent in Brachylog) nur für den ersten Testfall mit einem
w
am Ende, um die Ausgabe tatsächlich zu drucken.)Ich habe das Gefühl, dass es eine kürzere Möglichkeit gibt, um zu überprüfen, ob die Länge größer als 1 ist. (Wenn es keine trivialen Palindrome herausfiltern würde, wäre es einfach
{s.↔}ᵘ
.)quelle
APL (NARS), 65 Zeichen, 130 Byte
Prüfung:
es weiß jemand besser warum, und kann dies besser erklären, ohne dies alles zu ändern ... Ich bin mir dieses Codes nicht so sicher, möglich, wenn Testbeispiele zahlreicher sind, wird etwas schief gehen ...
quelle
Japt , 9 Bytes
Versuch es
quelle
Java 8,
202201199 BytesProbieren Sie es hier aus.
Wenn eine Funktion nicht zulässig ist und ein vollständiges Programm erforderlich ist, sind es stattdessen
256255253 Bytes :Probieren Sie es hier aus.
Erläuterung:
quelle
JavaScript (ES6), 107 Byte
Gibt ein Set zurück .
Testfälle
Code-Snippet anzeigen
quelle