Mit Erlaubnis von @Downgoat gestohlen
Der Punkt dieser Herausforderung ist, die Debatte über die Aussprache von "gif" (nicht) zu regeln.
Die Aussprache von gif ist umstritten, und obwohl angenommen wird (und sollte) , dass es jif ist , ist es immer noch umstritten.
In dieser Herausforderung erhalten Sie eine Reihe von Wörtern mit einem g oder j , die den Klang darstellen, mit dem das Wort ausgesprochen wird. Sie erhalten auch einen Text, in dem Sie die falschen Schreibweisen von GIF korrigieren müssen .
Denn das ist das Internet und jeder irrt sich immer. Es ist (nicht) üblich, sie zu korrigieren.
Ein Beispiel für eine falsche Aussprache wäre:
Es war ein gif einer Maus einen Burrito essen
Die falsche Schreibweise von GIF ? Inakzeptabel! Dies muss sofort korrigiert werden:
Da war ein Jif (wie im Glas) einer Maus, die einen Burrito aß
Sind wir fertig? Nein, du liegst immer noch falsch.
Du liegst immer falsch
Das muss anders funktionieren:
Im Jif trug die Katze einen Katzenhut
Diese offensichtliche Rechtschreibfehler müssen behoben werden, wir werden dies korrigieren:
Im GIF (wie in der Grafik) trug die Katze einen Katzenhut
Regeln
- Die Eingabe ist eine Zeichenfolge (der Satz) und ein Array von Zeichenfolgen (oder eine sinnvolle Alternative, z. B. eine durch Kommas getrennte Zeichenfolge) in beliebiger Reihenfolge
- Sie können die Wörter
g
undj
in beliebiger Reihenfolge verwenden. Sie können separat eingenommen werden. - Jede Instanz von
gif
(auf jeden Fall) in dem Satz muss durch "jif (as in ___)
where" ersetzt werden, wobei___
ein einheitlich zufällig ausgewähltes Wortj
aus dem Array von Zeichenfolgen beginnt , und umgekehrt fürjif
Wörter, die mit "" beginneng
. - NUR die Wörter
gif
undjif
sollten ersetzt werden (dh "jiffy" sollte nicht geändert werden). Diese Worte haben nichts falsch gemacht. - Es ist garantiert, dass mindestens ein Wort im Array mit
g
und mindestens ein Wort mit beginntj
. - Groß- / Kleinschreibung muss erhalten bleiben (zB
GiF
->JiF
). - Sie können ein Programm oder eine Funktion schreiben
- Es gelten Standardlücken
- Wir müssen die Debatte (nicht) schnell beenden; kürzester Code in Bytes gewinnt
Beispiele
Eingabe und Ausgabe durch eine einzige Zeile getrennt:
graphic, jar, jam, gram
I saw a jif of how to pronounce gif that showed gif is pronounced jif
I saw a gif (as in graphic) of how to pronounce jif (as in jar) that showed jif (as in jam) is pronounced gif (as in gram)
gravy, jeff
G is for gIf, h is for JiF, i is for gIF, j is for JIf
G is for jIf (as in jeff), h is for GiF (as in gravy), i is for jIF (as in jeff), j is for JIf (as in gravy)
joke, june, gorilla, great
Jiffy should not be treated as a GIF or JIF, like gifted.
Jiffy should not be treated as a JIF (as in june) or GIF (as in great), like gifted.
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.
FTFY;)Antworten:
Mathematica,
164165 BytesDies ist ein Gräuel, aber ich möchte, dass jemand meinen Schmerz teilt.
Function
Dies erwartet, dass das erste Argument#
der zu korrigierende Satz und das zweite Argument#2
eine durch Kommas getrennte Folge von Wörtern ist.f[f@"g"="j"]="g";f[f@"G"="J"]="G"
definiert eine Funktion ,f
die die Buchstaben nimmtg
,G
,j
, undJ
in den entsprechenden Ersetzungen. Das ist schon mal so etwas kürzer alsf@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G"
.Ich habe auch
z
gleich gesetzt,IgnoreCase->True
da ich es zweimal verwenden werde.x:"g"|"j"~~y:"if "
ist ein,StringExpression
das mit"gif "
oder übereinstimmt"jif "
und den ersten Buchstabenx
und die letzten drei Zeichen benennty
. Da die Optionz
(auch bekannt alsIgnoreCase->True
) übergeben wirdStringReplace
, können diese Buchstaben in beliebiger Kombination aus Groß- und Kleinschreibung eingegeben werden.Ich ersetze dann jedes solche Spiel mit
RandomChoice@StringCases[#2,f@x~~Except[","]..,z]
Wählt zufällig ein Wort aus dem zweiten Argument aus,#2
das mit "f[x]
Groß- / Kleinschreibung ignorieren" beginnt , da die Optionz
angegeben ist.quelle
IgnoreCase->True
=>IgnoreCase->1<2
True
zu1>0
, nur nicht in meiner Erklärung :)z
gleichzusetzenIgnoreCase->True
. Ich habe das Gleiche später gemacht: "was beginnt mitf[x]
".¯\_(ツ)_/¯
Ruby ,
888791 Bytes-1 Byte von ETHproductions. +4 Byte, da Wörter, die "gif" oder "jif" enthalten, nicht ersetzt werden sollten. -2 Bytes, da Ersatzwortlisten jetzt separat verwendet werden können.
Probieren Sie es online!
quelle
([gj])
zu(g|j)
? (Idk viel Ruby, aber ich weiß, Regex)CJam , 78 Bytes
Probieren Sie es online!
Erfordert, dass die Liste der Ersatzzeichen durch Kommas getrennt wird.
Erläuterung:
quelle
Python 3 , 237 Bytes
Probieren Sie es online!
Das ist das Beste, was ich tun kann - es könnte eine Möglichkeit sein, es schneller zu machen (wahrscheinlich mit regulären Ausdrücken), aber mein Gehirn tut jetzt weh.
Erklärung:
q
ist eine einfache Wörterbuchzuordnung, ich hoffe das ist klar.s,g,j
sind die Eingabezeichenfolge, die Liste der G-Wörter und die Liste der J-Wörter.' '.join
fügt das Listenverständnis zusammen, das herüber erfolgtfor w in s.split()
ist, ist deshalb für die Liste der Wörter in s.Das mittlere Stück ist schwarze Magie, die ich stückweise auflösen werde. Zuerst die Bedingung
False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!.")
.w[0]in q
Überprüft, ob sich das erste Zeichen in dessen Schlüsselnq
befindet'g','G','j','J'
. Der Grund für die Trennungq
als Variable ist, dass wir sie später auch als Diktat / Map verwenden.w[1:2]in ['i','I']
prüft, ob das zweite Zeichen entweder i oder I ist. Das: 2 ist notwendig, da nur das Setzenw[1]
eines Zeichens zu einem Absturz bei Wörtern mit einem Buchstaben führen würde.w[2:3]in ['f','F']
ist analog. Ich hatte dies kurz als nur 2: bevor mir klar wurde, dass ich GIF oder JIF berücksichtigen musste, gefolgt von Interpunktion!w[3:]in",;!?."
prüft, ob die nachfolgenden Zeichen Interpunktion sind. Ich gebe zu, dass mein Code nicht funktioniert, wenn jemand 'gif ?!' aber ich kann nicht perfekt sein. Jemand anderes kann sich auch der Herausforderung stellen, Zitate vor gif oder jif zu eröffnen.False in(,,,)
ist im Grunde ein großer NAND. Eigentlich ist es dasselbe wie das Trennen von vier Elementen mitand
und Vertauschen der Argumente, aber das sieht cooler aus und funktioniert besser, wenn Sie es auf eine fünfteand
Sache erweitern müssen.w if
bedeutet, dass wenn Falsch in der Bedingungsliste steht, wir das Wort nur unverändert zurückgeben - es entspricht nicht unseren Kriterien.else
ändern wir es zu:q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]
OKAY.
q[w[0]]
Ersetzt den ersten Buchstaben korrekt.w[1:3]
Wenden Sie das i oder I und f oder F an, undw[3:]
wenden Sie eine nachfolgende Interpunktion an. Damit bleibt die as in-Klausel." (as in "+choice(g if w[0]in 'jJ'else j)+')'
Wenn Sie das offensichtliche Zeichenfolgenliteral am Anfang und die nachstehende Klammer eingeben, ist das interessante Bit hier,choice(g if w[0]in 'jJ'else j)
das zufällig ausg
oder auswähltj
, je nachdem, obw[0]
in'jJ'
. und mir wurde gerade klar, dass ich dieses bisschen rückwärts hatte, so dass ich es durchgehend reparierte.Es war ein langer Tag.
choice
Imrandom
Modul befindet sich daher der Import. Ich denke das ist alles.quelle
JavaScript (ES6), 142 Byte
Nimmt getrennte
g
undj
Wortlisten.quelle
Javascript (ES6), 151 Byte
Ich kann wahrscheinlich den ternären Teil mehr Golf spielen, aber ich kann mir jetzt nicht vorstellen, wie. Außerdem werden die Wörter g und j getrennt verwendet.
quelle