Gif - Jif, Jif - Gif

24

Mit Erlaubnis von @Downgoat gestohlen

Der Punkt dieser Herausforderung ist, die Debatte über die Aussprache von "gif" (nicht) zu regeln.

Gif vs. Jif"


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 gund jin 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 Wort j aus dem Array von Zeichenfolgen beginnt , und umgekehrt für jifWörter, die mit "" beginnen g.
  • NUR die Wörter gifund jifsollten 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 gund mindestens ein Wort mit beginnt j.
  • 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.
Neil A.
quelle
3
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.FTFY;)
Draco18s
15
Giraffical Interchange Format :)
Mikhail V
3
(Der G schweigt.)
David Conrad
6
Es ist offensichtlich so wie in Johan. Wie die Geräusche machen Furries.
R ..
2
Ich bin versucht, abzulehnen, weil es mit ag und NOT AJ ausgesprochen wird
Stan Strum

Antworten:

6

Mathematica, 164 165 Bytes

Dies ist ein Gräuel, aber ich möchte, dass jemand meinen Schmerz teilt.

StringReplace[f[f@"g"="j"]="g";f[f@"G"="J"]="G";z=IgnoreCase->1>0;#,x:"g"|"j"~~y:"if ":>{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") ",z]&

FunctionDies erwartet, dass das erste Argument #der zu korrigierende Satz und das zweite Argument #2eine durch Kommas getrennte Folge von Wörtern ist.

f[f@"g"="j"]="g";f[f@"G"="J"]="G"definiert eine Funktion , fdie die Buchstaben nimmt g, G, j, und Jin den entsprechenden Ersetzungen. Das ist schon mal so etwas kürzer als f@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G".

Ich habe auch zgleich gesetzt, IgnoreCase->Trueda ich es zweimal verwenden werde.

x:"g"|"j"~~y:"if "ist ein, StringExpressiondas mit "gif "oder übereinstimmt "jif "und den ersten Buchstaben xund die letzten drei Zeichen benennt y. Da die Option z(auch bekannt als IgnoreCase->True) übergeben wird StringReplace, können diese Buchstaben in beliebiger Kombination aus Groß- und Kleinschreibung eingegeben werden.

Ich ersetze dann jedes solche Spiel mit

{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") " 

RandomChoice@StringCases[#2,f@x~~Except[","]..,z]Wählt zufällig ein Wort aus dem zweiten Argument aus, #2das mit " f[x]Groß- / Kleinschreibung ignorieren" beginnt , da die Option zangegeben ist.

Genisis
quelle
3
Warum würden Sie Mathematica dafür verwenden? Wow.
Neil A.
1
IgnoreCase->True=>IgnoreCase->1<2
CalculatorFeline
1
@CalculatorFeline ich eigentlich schon abgekürzt Truezu 1>0, nur nicht in meiner Erklärung :)
ngenisis
Sie verwenden überall vollwertige Code-Sinppets. Warum nicht dort?
CalculatorFeline
1
@CalculatorFeline Ich schätze, weil ich in diesem Fall den Code nicht in Anführungszeichen gesetzt habe, sondern beschrieben habe, was er tat, um die Variable zgleichzusetzen IgnoreCase->True. Ich habe das Gleiche später gemacht: "was beginnt mit f[x]". ¯\_(ツ)_/¯
Genisis
5

Ruby , 88 87 91 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.

->s,g,j{s.gsub(/\b(g|j)if\b/i){$&.tr("GgJj","JjGg")+" (as in #{($1[/g/i]?j:g).sample})"}}

Probieren Sie es online!

Wert Tinte
quelle
6
Könnten Sie wechseln ([gj])zu (g|j)? (Idk viel Ruby, aber ich weiß, Regex)
ETHproductions
3

CJam , 78 Bytes

l',%:A;lS%{_ela"gifjif"3/&{_V=_el:B'g=1W?Z*+V\t" (as in "A{V=elB=!},mR')}O?S}%

Probieren Sie es online!

Erfordert, dass die Liste der Ersatzzeichen durch Kommas getrennt wird.


Erläuterung:

l',%                        e# read line of input and split at commas
    :A;                     e# store in var A and pop off the stack
       lS%{...}%            e# for each word in the next line of input so:

_ela"gifjif"3/&             e#   intersection of ["gif" "jif"] and [lowercase(word)]
               {...}O?      e#   if set it non-empty, run block below, otherwise do nothing (push empty string)
                      S     e#   push space

_V=                         e#     extract first char
   _el:B                    e#     duplicate to lowercase and store in var B
        'g=1W?Z*+           e#     convert g/G <=> j/J
                 V\t        e#     store back to word
" (as in "                  e#     push string
           A{V=elB=!},      e#     filter replacements by words starting with the same char (case insensitive)
                      mR    e#     select random element
                        ')  e#     push ')' char
Siguza
quelle
Funktioniert nicht in dem Beispiel, in dem auf gif / jif ein Komma folgt.
Michael Boger
1

Python 3 , 237 Bytes

lambda s,g,j:' '.join([(w if False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!?.")else q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:])for w in s.split()])
from random import*
q=dict(zip("gGjJ","jJgG"))

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: qist eine einfache Wörterbuchzuordnung, ich hoffe das ist klar. s,g,jsind die Eingabezeichenfolge, die Liste der G-Wörter und die Liste der J-Wörter. ' '.joinfügt das Listenverständnis zusammen, das herüber erfolgt for 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üsseln qbefindet 'g','G','j','J'. Der Grund für die Trennung qals 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 Setzen w[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 mit andund Vertauschen der Argumente, aber das sieht cooler aus und funktioniert besser, wenn Sie es auf eine fünfte andSache erweitern müssen.

w ifbedeutet, 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, und w[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 aus goder auswählt j, je nachdem, ob w[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. choiceIm randomModul befindet sich daher der Import. Ich denke das ist alles.

Michael Boger
quelle
0

JavaScript (ES6), 142 Byte

(s,g,j,r=l=>l[Math.random()*l.length|0])=>s.replace(/\b[gj]if\b/gi,w=>`GJgj`[l=`JGjg`.search(w[0])]+w.slice(1)+` (as in ${r([g,j,g,j][l])})`)

Nimmt getrennte gund jWortlisten.

Neil
quelle
0

Javascript (ES6), 151 Byte

f=(s,g,j)=>s.replace(/\b(g|j)(if)\b/ig,(m,p,c)=>`${a=g,p=="j"?"g":p=="J"?"G":(a=j,p=="g"?"j":"J")}${c}(as in ${a[Math.floor(Math.random()*a.length)]})`)

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.

SuperStormer
quelle