Haftungsausschluss: Dies ist nicht meine Herausforderung, aber ThisGuy sagte, ich sei in Ordnung zu posten.
Gelegentlich möchte ich ein Wort in das Gegenteil bringen, wie es bei happiness
geht unhappiness
. Leider geht mein Gehirn in diesem Fall manchmal leer aus. Dann, eines Tages nach dem anderen, dachte ich mir: "Dafür sind Programme da!"
Da die englische Sprache viele Ausnahmen hat, habe ich eine Liste erstellt, die das Präfix für den Anfangsbuchstaben enthält
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
Aufgabe
Bei einer Eingabe als Zeichenfolge machen Sie die Zeichenfolge zu ihrem Negativ und geben das Ergebnis aus. Sie können davon ausgehen, dass alle angegebenen Eingaben den obigen Regeln entsprechen. Einsendungen können Programme oder Funktionen sein, keine Schnipsel.
Eingang
Eine einzelne Zeichenfolge, die entweder als Parameter oder aus STDIN übernommen wird
Ausgabe
Die negierte Form dieser Zeichenfolge, die den obigen Regeln entspricht
Wie gewinnt man
Dies ist ein Code-Golf, also gewinnt der kürzeste Code
q
ohne a beginntu
?qadi
,qat
, die zuvor erwähntqi
,qirsh
undqwerty
. (Ich spiele viel Scrabble)q
immer einu
in der Zeichenfolge folgt oder nicht?u
Antworten:
Python, 55 Bytes
Probieren Sie es online!
Wir müssen 7 verschiedene Anfangsbuchstaben behandeln:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
und alles andere ->un
Wir können alle diese Negationen in einer einzigen Zeichenfolge speichern und die richtige durch Schneiden extrahieren:
Jetzt müssen wir den Startindex berechnen
i
.'rlmphq'.find
gibt 0 für'r'
, 5 fürq
und -1 für alles zurück, was nicht in der Zeichenkette enthalten ist. Um den erforderlichen Wert von 0 auf 6 zu erhalten, müssen wir den Rückgabewert von 5 subtrahieren. Dies führt zu folgendem Code:quelle
ddiiiiuiimmlrnss
undrlmphq
die Zahl5
für, warum die Scheibe 7 überspringen?GNU sed , 50 Bytes
Beinhaltet +1 für
-r
Nichts Besonderes. Verwendet
&
die Ersetzung, um einige Ersetzungen zu kombinieren undt
die letzte zu überspringen, wenn eine der ersten Ersetzungen erfolgt.Probieren Sie es online!
quelle
Gelee , 30 Bytes
Probieren Sie es online!
Wie?
Beachten Sie, dass das wiederholte Ein
r
im“qmlrrhp”
fünften Index steht, was, wenn es referenziert wird, zu einem Voranstellen führen würdeun
, sodass es genauso gut alles andere alsh
oder sein könntep
.quelle
/// ,
5956 BytesProbieren Sie es online!
Die Eingabe erfolgt nach dem allerletzten
#
.Wie es funktioniert:
Ich habe eine Optimierung vorgenommen, bei der die Größe auf 56 Byte reduziert wurde. Da dies jedoch die Dinge kompliziert, erkläre ich zunächst die Originalversion und dann den Golf.
Intuition: Die Herausforderung ist einfach genug. Fügen Sie einfach das Negative hinzu, abhängig vom Wortanfang. In /// können Sie jedoch nicht einfach
concatenate if [...]
nur etwas ersetzen, das einem bestimmten Muster folgt. In diesem Programm werden also die positiven Wortanfänge durch die negativen Wortanfänge ersetzt. Das#
wurde hinzugefügt, um sicherzustellen, dass, sobald ein neuer Anfang hinzugefügt wurde, keine neuen Anfänge mehr hinzugefügt werden. Das#
machte es auch möglich, "alles andere zu tun: un".Der Golf verfügt über eine neue Substitution an ihn beginnt:
/^/\/\/#/
. Dieser ersetzt alles^
durch//#
, was in der Originalversion ein gängiges Muster war.quelle
TI-Basic, 104 Bytes
Erfordert alle Großbuchstaben.
Erläuterung:
quelle
JavaScript (
716461 Byte)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Bearbeitungen:
charAt(0)
->[0]
)quelle
w[0]
stattdessen nicht verwendenw.charAt(0)
?w=>...
? Die eigentliche Funktionsdefinition würde beinhaltenlet f=w=>...
? (Wahrscheinlich in einer FAQ irgendwo behandelt ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
3 Bytes wenigerBatch, 114 Bytes
Überprüft das erste Zeichen des Wortes anhand der Liste der benutzerdefinierten Präfixe und ändert in diesem Fall das Präfix von
un
. Sondergehäusequ
sind zum Preis von 21 Byte möglich.quelle
Haskell, 71 Bytes
Anwendungsbeispiel:
f "legal"
->"illegal"
. Probieren Sie es online!Erstellen Sie eine Nachschlagetabelle mit Präfix- / Ersetzungspaaren, um das erste Zeichen der Eingabezeichenfolge mit dem Standardwert "
"un"
Wenn nicht gefunden" nachzuschlagen.quelle
Netzhaut , 54 Bytes
Erläuterung:
Zum ersten Mal habe ich Retina verwendet. Es ist eine ziemlich ordentliche Sprache.
Probieren Sie es online!
quelle
Javascript,
727166616059 Bytesw=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Ja, es ist immer noch länger als eine bestehende Lösung. :)Falls dies eine Erklärung erfordert, nutze ich die q / h- und m / p-Paare aus, indem ich ihren Index in der Suchzeichenfolge mit einer Modifikation 4 kombiniere und diese dann als Suche in das Präfix-Array verwende.
quelle
search
anstelle vonindexOf
. Und einige mehr, denke ich,&
anstelle von%
search
. Ich kann nicht sehen, wie der & Trick funktioniert - wäre perfekt, wenn mein Array nur aus 4 Elementen besteht.C
109107 BytesProbieren Sie es online!
quelle
Mathematica, 107 Bytes
Erläuterung:
StartOfString~~x:#:>#2<>x&
ist eine reine Funktion, bei der das erste Argument ein Zeichenfolgenmuster ist , das am Anfang der Zeichenfolge übereinstimmt, und das zweite Argument eine Zeichenfolge ist, die der Übereinstimmung vorangestellt wird. Es wird eine verzögerte Regel zurückgegeben, die für die Verwendung innerhalb von geeignet istStringReplace
. Dies wird dann auf jedes der Paare angewendet,{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
was zu einer Liste von Regeln führtSchließlich wird diese Liste übergeben, in
StringReplace
die ein Operator für Zeichenfolgen eingegeben wird.quelle
PHP, 101 Bytes
Online Version
quelle
Excel 78 Bytes
Ich habe einige enge Konkurrenten mit verschiedenen Methoden gefunden, die 81 Bytes erreicht haben:
Und 84 Bytes:
quelle
REXX, 78 Bytes
Spart ein paar Bytes durch Antworten in GROSSBUCHSTABEN, zB potent -> IMPOTENT.
quelle
Perl, 49 + 1 (
-p
Flag) = 50 BytesVerwenden von:
Probieren Sie es online aus .
quelle
Clojure, 65 Bytes
Nun, das ist langweilig ... aber ich könnte es nicht kürzer machen. Zumindest gibt es sehr wenig Leerzeichen.
quelle
OCaml, 85
Bei der anonymen Funktion wird die Mustererkennung beim ersten Zeichen verwendet.
quelle