Semordnilaps (auch bekannt als Heteropalindrome, Halbpalindrome, Halbpalindrome, Umkehrgramme, Mynorethe, reversible Anagramme, Wortumkehrungen oder Anadrome) sind Wörter, die auch Wörter sind, wenn sie rückwärts geschrieben werden. Einige Beispiele sind:
- Ward <=> Draw
- Abgebautes <=> Denim
- Teile <=> Gurt
Bei einer positiven Ganzzahl N (über das Funktionsargument oder STDIN) wird eine Liste von Semordnilaps aus dieser Liste von englischen Wörtern mit genau N Buchstaben zurückgegeben / ausgegeben . Die Liste der Wörter kann lokal auf Ihrem Computer als Textdatei gespeichert werden w.txt
. Sie können die Liste auch über die URL abrufen, sie wird jedoch in die Byteanzahl einbezogen.
Regeln:
- Palindrome sind keine Semordnilaps! Daher sollten die Wörter "Mittag", "Rotor" und "Radar" nicht in die Liste aufgenommen werden.
- Nur eines der Wörter (in einem Semordnilap-Paar) sollte in die Liste aufgenommen werden. Wenn also "Hund" in der Liste steht, sollte "Gott" nicht sein (es ist egal, welcher enthalten ist.)
- Wenn es keine Semordnilaps gibt, sollte die Ausgabe eine leere Zeichenfolge sein, 0, FALSE oder etwas anderes, was darauf hinweist, dass keine Ergebnisse vorliegen. Die Funktion muss auch dann funktionieren, wenn keine Ergebnisse vorliegen.
Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Emordnilap
und der Plural seinSemordnilap
? ;)Antworten:
Pyth , 23 (18 Code, 5 notwendige STDIN)
Dies ist eine ziemlich einfache Lösung.
J
speichert die Liste der Wörter. Dann filtern wir über die Liste der Wörter (f J
) nach der Länge des Wortes, das die Eingabe (qlTQ
) ist, wobei das umgekehrte Wort in der Liste (}_TJ
) ist und die Umkehrung des Wortes größer als das Wort (>_TT
) ist. Die letzte Bedingung stellt sicherT
, dass sie nicht palindrom ist und dass nur eines der Paare gedruckt wird. Die resultierende Liste wird gedruckt.So wie Pyth funktioniert, ist der einzige Weg, eine Datei zu öffnen, den Namen auf STDIN zu erhalten. Aus diesem Grund habe ich 5 der STDIN-Bytes
w.txt
in meiner Punktzahl gezählt.Beispiellauf:
quelle
Ruby, 74 Bytes
Durchläuft die Liste, indem Elemente entfernt werden, wodurch beide Palindrome vermieden werden und sowohl "gestresste" als auch "Desserts" ausgegeben werden. Die Verwendung des gleichen Variablennamens für die Funktion und des Iterators umgeht einen Ruby-Syntaxfehler: Auch wenn dies
f=i.pop
zuvor ausgewertet wurdef.reverse
, wird die Zeile erst dann analysiert, wenn sief
bereits etwas bedeutet. Ich könnte es auch gebrauchenp
.quelle
Bash
134157118 Bytesf () { comm -12 <(sort w.txt) <(rev w.txt|sort)|while read w; do ((${#w}==$1))&&[[ $w<$(rev<<<$w) ]]&&echo $w; done; }
Dies ist kein ernstzunehmender Eintrag, sondern eine Antwort auf die Antwort von Brian's Bash . Auf diese Weise neige ich dazu, solche Dinge in Bash zu programmieren - indem ich Bash so wenig wie möglich selbst verwende und die eingebauten Tools die ganze Arbeit erledigen lasse.
quelle
&&[[ $w > $(rev<<<$w) ]]&& echo $w
immer noch vermeidetsort|tail -1
. Ich denke, Sie können damit sogar die endgültige Sortierung und Einzigartigkeit aufheben, da sie Palindrome entfernt und nur eines der Wörter ausgibt.<(sort w.txt)
ist ok.Python,
126125120 BytesZiemlich einfache Lösung.
quelle
k=c[::-1]
. Könnten Sie nicht auchset()
nur das zweite Mal anrufen ? Ich glaube nicht, dass die Datei Wiederholungen enthält.k
(9 für Definition plus 1 für Zeilenvorschub plus 1 für Leerzeichen), aber ich würde nur 10 Zeichen speichern ([::-1]
für 6 herausnehmen, aber 1 hinzufügen, weil ich dann ein Leerzeichen brauche). Über dieset
, ich mussJ
ein Satz sein, weil ich die verwendeten Wörter daraus entfernen, um die No-Dupe-Regel zu erfüllenN==len(c)and
spart Platz.=
und sollten es sein==
.CJam,
4847454238 BytesDa die URL gezählt werden muss, verwende ich denselben URL-Shortener wie das Optimierungsprogramm.
Das
§
ist Teil von Extended ASCII, so dass jedes Zeichen im Code in einem einzelnen Byte codiert werden kann.Wie im Fall von Optimizer müssen Sie den Java-Interpreter verwenden und diesen lokal aus einer Datei ausführen
semordnilap.cjam
, zum Beispiel und dannDaher wird die Eingabe als Befehlszeilenargument angegeben.
So funktioniert es (etwas veraltet):
Die resultierende Zeichenfolge wird am Ende des Programms automatisch gedruckt.
quelle
Java,
280218 BytesIm Vergleich zum Rest des Wettbewerbs habe ich absolut keine Ahnung, ob dies eine gute Punktzahl ist.
Erweitert:
Verwendet compareTo (), um Palindrome und Duplikate gleichzeitig zu ignorieren.
quelle
Files.readAllLines(Paths.get("w.txt"))
. Das ist ein nützlicher Trick.CJam, 68 Bytes
Sie müssen die Java-Version des Compilers von hier herunterladen und den obigen Code in einer Datei namens words.cjam speichern (kann ein beliebiger Name sein). Dann führen Sie den Code wie folgt aus
Zum Beispiel für
N = 8
,quelle
Node.js, 172 Bytes
Funktion:
Testen:
quelle
K, 59 Bytes
Ziemlich einfach. Lesen Sie die Liste, konstruieren Sie die umgekehrte Liste, nehmen Sie den Schnittpunkt, filtern Sie die Palindrome heraus, filtern Sie die erforderliche Anzahl, sortieren und deduplizieren Sie die Paare.
quelle
Ruby, 95 Bytes
Erläuterung
Integer
.String
(a
) in den Speicher .Array
aller Wörter (ohne Zeilenumbrüche).a
.Array
l
.l
.Ein Leerzeichen
Array
wird zurückgegeben, wenn keine qualifizierenden Wörter gefunden wurden.quelle
Node.js, CoffeeScript, 132 Bytes
Node.js, 162 Bytes
Chrome Dev Tools Console, 111 Bytes (Auf der Download-Seite)
Alle Versionen geben ein Array aller Semordnilaps der Länge zurück
n
.Node.js, 162 Bytes
Druckt alle Semordnilaps:
quelle
Julia, 101 Bytes
Das sollte eigentlich funktionieren ...
quelle
Mathematica, 105 Bytes
Manchmal teilt Import den Text automatisch in eine Liste mit Zeilen auf oder behandelt ihn als CSV oder TSV. Zu anderen Zeiten liest Import den Inhalt der Datei in eine Zeichenfolge. Letzteres erledigte der Import für die Testdaten.
quelle
BASH
Tests ...
quelle