(Erste Herausforderung, lass es mich wissen, wenn es irgendwelche Probleme damit gibt.)
Ein Heterogramm ist ein Wort, bei dem kein Buchstabe des Alphabets mehr als einmal vorkommt, und ein Palindrom ist eine Phrase, die vorwärts und rückwärts gleich ist.
Hier besteht die Herausforderung darin, einen Code zu schreiben, der ein Wort (nur Buchstaben) als Eingabe aufnimmt und ausgibt, ob es ein Heterogramm ist oder nicht (wahr / falsch). Der Haken ist, dass das Programm ein Palindrom sein muss - liest das gleiche vor und zurück. Die Groß- und Kleinschreibung spielt hier keine Rolle. Damit das Heterogramm gültig ist, kann es zum Beispiel nicht sowohl q als auch Q haben. Es sind keine Kommentare zulässig, und Sie können keine Zeichenfolgen platzieren, die Ihren Code (oder einen wesentlichen Teil Ihres Codes) enthalten, um den Palindrom-Teil zu vereinfachen: P
Das ist Code-Golf, also gewinnt der kürzeste Code. Viel Glück!
BEARBEITEN: Parens, Klammern oder andere Symbole mit linker und rechter Form müssen für den Palindrom-Teil entsprechend umgekehrt werden. Also (helloolleh) ist ein Palindrom, aber (helloolleh) ist es nicht. Anscheinend wird dies ein bequemes Palindrom genannt.
BEARBEITEN 2: Sie erhalten keine leere Eingabe, Eingabe mit mehreren Wörtern oder Eingabe mit anderen Zeichen als Buchstaben. Also mach dir keine Sorgen :)
quelle
(hellolleh)
ein gültiges Palindrom? Ähnlich für[]
,{}
und<>
(falls zutreffend).asdsa
die als gleich angesehen werdenasd\nsa
?Antworten:
Pyth - 11 Bytes
(Nachgestellte und führende Leerzeichen notwendig und gezählt).
Test Suite .
quelle
Pyth, 17 Bytes
Probieren Sie es hier online aus.
Der führende Raum ist notwendig. Ich habe es gezählt und das nachfolgende Leerzeichen in der Byteanzahl.
Hier ist die Aufteilung:
quelle
.q
in Ihren Kommentaren, aber eine.w
in Ihrem Programm.Python 3, 125
Das Hauptproblem besteht darin, die Umkehrung des Codes analysierbar zu machen. Dann können wir Fehler aus undefinierten Bezeichnern herauslassen.
quelle
<
in eine ändern>
!Perl, 43 Bytes
Anwendungsbeispiel:
quelle
> <> ,
137131 BytesAls ich diese Herausforderung sah, dachte ich, dass> <> endlich eine gute Wahl für die Sprache sein könnte, da man mit ihr Palindrome meist ignorieren kann. Es ist einfach sicherzustellen, dass der Zeiger nur dort bleibt, wo er sollte. Obwohl dies zutrifft, macht> <> die Golfbedingungen leider unerträglich (oder nur allgemein). Ich hoffe, dass ich einige seltsame Tricks anwenden kann, um dies zu kompensieren, aber hier ist eine "schnelle" Antwort (nicht wirklich, sowohl in Bezug auf Programme als auch in Bezug auf die Erstellung). Sie können es hier online ausprobieren .
Gibt 1 für wahr und -1 für falsch zurück (ich könnte es in 0 ändern, aber die Länge würde leider gleich bleiben)
Lassen Sie mich wie immer wissen, wenn dies nicht funktioniert und Sie Ideen haben, wie Sie Golf spielen können. Ich habe es mit ein paar Testfällen getestet, aber es kann immer eine Ausnahme geben.
Hier ist eine andere Version, von der ich denke, dass sie etwas schlauer ist, aber leider sind es zehn Bytes mehr. Die Wahrheits- / Falschheitswerte sind diesmal 1 und ein Fehler (
something smells fishy...
):Erläuterung:
Hier ist der Code ohne den Teil, der hinzugefügt wurde, um daraus ein Palindrom zu machen. In diesem Fall werden die "clevereren" Tricks, die ich für die alternative Version verwendet habe, nicht verwendet. Daher ist es etwas einfacher zu erklären (falls jemand Interesse an einer Erklärung für die "Tricks" hat, würde ich gerne einen geben obwohl).
Linie 1:
So funktioniert das verschlungene Tauschen (
:{:@=?v$
) - Ich verwende einen Testfall dieses Stapels:[5,1,8,1]
Dabei ist das letzte Zeichen das oberste.:{
Die Oberseite des Stapels wird dupliziert[5,1,8,1,1]
und der Stapel nach links verschoben:[1,8,1,1,5]
:@
Der obere Bereich wird dupliziert:[1,8,1,1,5,5]
Dann werden die oberen drei Werte nach rechts verschoben:[1,8,1,5,1,5]
=?v
Unnötig für diesen Teil der Erklärung$
Der oberste Wert wird noch einmal getauscht[1,8,1,5]
, was, wie Sie sehen werden, bedeutet, dass der ursprüngliche Stapel einmal verschoben wurde (als ob{
dies der einzige Befehl gewesen wäre).Das heißt, auf Englisch ("Gott sei Dank, er erklärt die Dinge") wird der gesamte Stapel mit dem Höchstwert verglichen und zu einem Punkt in der zweiten Zeile verschoben, wenn ein Wert dem Höchstwert entspricht. Diese Überprüfung erfolgt proportional zu der Anzahl der Werte im Stapel (
l - 1
wobeil
die Länge des Stapels angegeben ist), sodass alle Werte gegeneinander überprüft werden.Zeile 2:
quelle
><>
ist ein Palindrom selbst (nur keine bequeme)PHP, 126 Bytes
Sie müssen dies mit dem laufen
short_tags
ini - Richtlinie einge ab in 5.4 oder höher.Das erste Golf überhaupt. Zwei Kopien, die erste druckt einen ganzen Haufen Müll mit dem falschen / wahren Ergebnis:
Diese Version gibt keinen Jargon (162 Bytes) aus:
Führen Sie von der Kommandozeile aus mit
Wahrscheinlich kann man ein bisschen weiter golfen
quelle
?><?
können Sie verwenden//\\
. Das sollte diese Anforderung beseitigen. Und statt__halt_compiler()
Verwendungreturn;
return;
ist immer noch gültig.05AB1E, 9 Bytes
Probieren Sie es online aus.
* Fügen Sie etwas über den gesamten Weg zurück zu meiner ersten Herausforderung *
Nach dieser Herausforderung wurde seit 05AB1E kein Wettbewerb mehr durchgeführt.
Erläuterung
quelle
Brachylog , 3 Bytes, Sprachnachstellung
Probieren Sie es online!
Dies ist eines der wenigen Programme, die sowohl in Brachylog 1 als auch in Brachylog 2 funktionieren. Die TIO-Verknüpfung ist aus alten Gründen mit Brachylog 1 verknüpft. Ebenfalls ungewöhnlich für Brachylog ist dies ein vollständiges Programm, keine Funktion. (Vollständige Programme in Brachylog geben implizit Boolesche Werte aus. Genau das möchten wir für diese Frage.)
Das allgemeine Prinzip hier ist, dass das Platzieren eines Prädikats zwischen einem Paar identischer Großbuchstaben eine Behauptung ist, dass der aktuelle Wert unter diesem Prädikat unveränderlich ist. So sieht man oft Dinge wie
AoA
"ist sortiert" ("invariant unter Sortieren");A↔A
würde (in Brachylog 2) bedeuten "ist ein Palindrom" ("invariant unter Umkehrung") und so weiter. Dieses Programm ist "unveränderlich beim Entfernen von Duplikaten", dh "enthält keine Duplikate". Es ist sehr praktisch, dass diese Methode zur Angabe der Invarianz ein Palindrom ist.quelle
Brachylog , 3 Bytes
Probieren Sie es online!
Das Prädikat ist erfolgreich, wenn die Eingabe ein Heterogramm ist, und schlägt fehl, wenn dies nicht der Fall ist.
quelle
MATL , 7 Bytes
Probieren Sie es online!
Gibt Liste [1, 1] zurück, wenn die Eingabe ein Heterogramm ist, und [0, 0], wenn nicht.
Erläuterung:
quelle