Generiere Männer der Kultur

24

Diese Herausforderung ist vom Meme Men of Culture inspiriert .

Das Mem beinhaltet das Ausblenden von Teilen der Originalunterschrift.

Ah, ich sehe, du bist auch ein Mann der Kultur.

um es so aussehen zu lassen, als würde der Charakter etwas anderes sagen.

Ihre Herausforderung besteht darin, ein Programm zu schreiben, das anhand einer Eingabe zeigt, wie der ursprüngliche Satz ausgeblendet werden kann , um die Eingabezeichenfolge zu erhalten.

Regeln:

  • Verwenden Sie ein -Zeichen, um ein ausgeblendetes Zeichen darzustellen.
  • Sie dürfen keine zusätzlichen Buchstaben hinzufügen, um die Eingabezeichenfolge zu erhalten
  • Sie können Zeichenfolgenvergleiche als unabhängig von Groß- und Kleinschreibung behandeln
  • Sie können Leerzeichen bei Zeichenfolgenvergleichen ignorieren
  • Wenn keine Substitution möglich ist, geben Sie einen falschen Wert aus.
  • Sie können auch redundantes Leerzeichen durch ein ersetzen -, obwohl dies nicht erforderlich ist.
  • Wenn mehrere Lösungen möglich sind, können Sie eine davon ausgeben.

Testfälle:

Basic:

Beispiel Meme 1

Ah, I see you're a well.
> Ah, I see you're a --- -- ------- -- well.

Beispiel Meme 2

Ah, I see well.
> Ah, I see ------ - --- -- ------- -- well.

Randfall 1:

What did you just say about me, you little
> false

Kantenfall 2 (bearbeitet):

*no input*
> --- - --- ------ - --- -- ------- -- -----

Mittlere:

Beispiel Meme 3

Ah, I see you're Orwell.
> Ah, I see you're - --- o- -----r- -- well.

Beispiel Meme 4

Ah, ymca.
> Ah, - --- y----- - m-- -- c------ a- ----.

Beispiel Meme 5

Ah, a manual.
> Ah, - --- ------ a man -- -u----- a- --l-.
OR: > Ah, - --- ------ a man -- -u----- a- ---l.

Schwerer:

Beispiel Meme 6

tea.
> --- - --- ------ - --- -- ---t--e a- ----.

Beispiel Meme 7

eeeee
> --- - -ee -----e - --- -- ------e -- -e---

TL; DR: Geben Sie bei gegebener Eingabezeichenfolge eine Zeichenfolge aus, die angibt, wie die ursprüngliche Zeichenfolge an die Eingabezeichenfolge angepasst werden soll, indem Sie ein "-" für ein ausgeblendetes Zeichen verwenden. Wenn eine Substitution nicht möglich ist, geben Sie einen falschen Wert aus.

Code Golf, so dass der kürzeste Code in Bytes gewinnt.

Bearbeiten: Erläuterungen

  • Wenn Sie Leerzeichen in Zeichenfolgenvergleichen ignorieren , können Sie Leerzeichen entfernen, bevor Sie Zeichenfolgen vergleichen. Zum Beispiel werden die Eingaben Ah, a manualund Ah , a manualals gleich behandelt. Andere Zeichensetzung , ' .muss erhalten bleiben. In ähnlicher Weise ist für die Ausgabe Ah, a manualgleich Ah, amanual.

  • Ersatzredundantes Leerzeichen bezieht sich auf die in der ursprünglichen Beschriftung vorhandenen Leerzeichen. Sie müssen sie nicht durch "-" ersetzen, aber wenn Sie Netze ersetzen, erhalten Sie mehr Punkte.

Chesnutcase
quelle
Ihre "Orwell" -Ausgabe scheint falsch zu sein: Sie haben in der ersten ein "f" in ein "r" geändert.
Draconis
2
Welche Leistung soll "Ah,<5 SPACES HERE>a manual."erbracht werden?
Lynn
3
Wenn eine Ersetzung nicht möglich ist, geben Sie einen falschen Wert aus. Von der Eingabeüberprüfung wird dringend abgeraten.
Erik der Outgolfer
2
Sie können Zeichenfolgenvergleiche als unabhängig von der Groß- und Kleinschreibung behandeln. Bedeutet dies, dass die Eingabe unabhängig von der Groß- und Kleinschreibung behandelt werden muss oder dass wir in der Lage sind, Eingaben in jedem gewünschten Fall vorzunehmen? Müssen wir Leerzeichen ignorieren , wenn Sie Leerzeichen in Zeichenfolgenvergleichen ignorieren? Und was ist "redundantes Leerzeichen"?
Erik der Outgolfer
1
Ich denke, "Eingabevalidierung", wenn Sie es so nennen könnten, macht hier Sinn @EriktheOutgolfer
Conor O'Brien

Antworten:

6

> <> 94 Bytes

"vAh, I see you're a Man of Culture as well.
0/i~ <r
!\:?!^:}=0={:@*:@"-"$?$~}$:@?
<>~i+0)?;>o

Probieren Sie es online!

Groß- und Kleinschreibung beachten, Leerzeichen oder Interpunktion nicht ignorieren und eine leere Zeichenfolge ausgeben, wenn die Eingabe ungültig ist. Wenn Sie andere Zeichenfolgen ausprobieren möchten, können Sie einfach die erste Zeile nach der ändern "v, sofern sie kein "oder kein Null-Byte enthält.

Scherzen
quelle
5

Retina 0.8.2 , 117 Bytes

^.
¶Ah, I see you're a Man of Culture as well.¶$&
{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3
}1`¶\w
-¶
.*¶.*¶.*\w.*|¶.*¶.*

Probieren Sie es online! Kann 1 Byte einsparen, wenn Groß- und Kleinschreibung beachtet wird. Konnte 3 Bytes einsparen, indem --, - --- ---'-- - --- -- ------- -- ----.bei leerer Eingabe zurückgekehrt wurde. Erläuterung:

^.
¶Ah, I see you're a Man of Culture as well.¶$&

Stellen Sie den gewünschten Text vor die Eingabe.

{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3

Bewegen Sie so viele Zeichen wie möglich vom gewünschten Text zum Ergebnis. Wenn das Zeichen ein Buchstabe ist, muss es auch mit dem nächsten Buchstaben in der Eingabe übereinstimmen, der dann gelöscht wird.

}1`¶\w
-¶

Wenn die Eingabe keinen übereinstimmenden Buchstaben enthält, ändern Sie ihn in a -und versuchen Sie es erneut.

.*¶.*¶.*\w.*|¶.*¶.*

Wenn die Eingabe noch Buchstaben enthält, löschen Sie alles, andernfalls den Rest der Eingabe.

Neil
quelle
5

Jelly , 58 55 48 45 Bytes

“¬²Ẉ,ȷCIbƝɼeỴƤ/ɓIŒ;ṫṚS⁶_ŀỤ ṂB⁾÷ƈ»Ḣ”-1ị⁼ɗ?@€xṆ

Probieren Sie es online!


Mehr lesbare Version:

“Ah, I see you're a man of culture as well.”Ḣ”-1ị⁼ɗ?@€xṆ

Aufschlüsselung der String-Komprimierung:

Ah, I{short: see}{short: you}'re a{short: man} of{long: culture} as{short: we}ll.
user202729
quelle
3

Python 2 , 126 114 Bytes

i=input()
r=''
for c in"Ah, I see you're a man of culture as well.":x=c==i[:1];r+=c*x or'-';i=i[x:]
print(i=='')*r

Probieren Sie es online!


Python 2 , 108 106 Bytes

Die Eingabe ist eine Liste von Zeichen.

lambda i:''.join(c==`i`[2:3]and i.pop(0)or'-'for c in"Ah, I see you're a man of culture as well.")*(i==[])

Probieren Sie es online!

ovs
quelle
Konnte (i=='')nicht sein (i<' ')(unter Verwendung eines Tabulators das niedrigste druckbare Zeichen)?
Jonathan Frech
@ JonathanFrech dies ist möglich, aber es ist beide 7 Bytes
Ovs
Nun, da haben Sie
Jonathan Frech
2

JavaScript (Node.js) , 122 120 Bytes

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c>' '?/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-':c)

Probieren Sie es online!

Erklärung:

x =>                 // It takes in 'x' as parameter for function a string
    "Ah, I see you're a Man of Culture as well.". // What the actual is 
            .replace(                             // Now we are gonna replace 
                    /./g,     // selects everything 
                    c =>      // lambda function with param c
                        c > ' ' ?                 
                        /^(.)\1/i.test(           // does it all
                            c + x ) ?            // checks if there is a match
                            (x=x.slice(1). // returns everything from 1 to end in an array
                                trim`` ,   // removes whitespaces
                            c : '-' : c)   // and done

Kann weiter reduziert werden, ersetzt jedoch auch Leerzeichen durch '-'. Wenn dies akzeptabel ist, dann

JavaScript (Node.js) , 112 Byte

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-')

Probieren Sie es online!

Noch weiter reduziert, ersetzt nur Leerzeichen, die nach dem angegebenen String stehen, durch '-'.

JavaScript (Node.js) , 105 Byte

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1),c):'-')

Probieren Sie es online!

Muhammad Salman
quelle
1
Nicht passierenWhat did you just say about me, you little
l4m2
Ich erhalte keine korrekte Ausgabe für Ihren Code für den What did you just say about me, you littleTestfall. Ihr Programm erzeugt --- - --- ------ - --- -- ------- -- w----eine Ausgabe, die nicht den Anforderungen der Herausforderungsspezifikation entspricht.
0
2

JavaScript (Node.js) , 135 Byte

x=>!!x&&(t="Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c>' '?/^(.)\1/i.test(c+x)?(x=x.slice(1).trim(),c):'-':c),!x&&t)

Probieren Sie es online!

Wenn "darf" bedeutet, dass entweder tun oder nicht tun in Ordnung ist, dann

JavaScript (Node.js) , 106 Byte

x=>x&&(t="Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c==x[0]?(x=x.slice(1),c):'-'),!x&&t)

Probieren Sie es online!

l4m2
quelle
2

Brain-Flak , 764 600 Bytes

(((<>)))([]((((((([][][]()){}[]){})[][]){}))[[]()])[][]())([[]](([][](([][]){})[]){}())[[]])(([()()][]([[]]([()]([[]](((([()][][][])[]){}[]())[])[]))()()()))[[]])((([[][][]]((([](([()()()][]){})){})(()()()()){}())[[]])[]){})((((()((([][]){}())((()()()){}){})[[][][]]))){}{}())((()(((([]()()()())())){}{}()())[[][]]){}[])(([(()()()){}](((((()()()()){}[]))){}{}))((()()){}()){})(([()][][]([()()()][])))(((([][][]())[([]()()){}()])[]())[[]])([[]]((([]()())(()()()()){}){})()()()){([{}]<>({})){(<{}(((((()()()()())){}{})){}{})>)}{}(<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>}{}<>{{{}}<>}<>{({}<>)<>}<>

Probieren Sie es online!

Große Verbesserungen dank Jo King , insbesondere in der Saitenkonstruktion, aber auch ein paar logische Verbesserungen im Hauptkörper. Erklärung von ihm

Es ist Groß- und Kleinschreibung (so „Ah, ich sehe , du bist Orwell.“ Entspricht nicht aber „Ah, ich sehe , du bist orwell.“ Der Fall ist), Leerzeichen in der Eingabe wird nicht ignoriert, und unerreichte Leerzeichen in Original - String ist umgewandelt in -. Nach meinem Verständnis sind dies alles gültige Optionen.

Erläuterung:

(476 bytes of much improved stack manipulation) #Push string

{ #While string
  ([{}]<>({})) #Check whether the top characters are equal
  {(<{}(((((()()()()())){}{})){}{})>)}{}  #If characters are not equal, push - on top of input
  (<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>  #Take top of input (either - or matched char) and add to output
}{}
<>{{{}}<>} #Pop both stacks if input is left over
<>{({}<>)<>}<> #Reverse output
Kamil Drakari
quelle
Wissen Sie, es gab früher eine Frage , die bei der Automatisierung der Erstellung beliebiger Tests für Brain-Flak helfen sollte. Mein eigener Beitrag kann (mit ein paar Änderungen) den Text auf 506 Bytes reduzieren
Jo King,
Mit ein paar anderen Verbesserungen habe ich die Gesamtsumme auf 604 Bytes gesenkt
Jo King,
Erklärung
Jo King
@JoKing Sie sind sehr gut in der Verbesserung meiner Brain-Flak scheint
Kamil Drakari
2

Haskell , 182 174 172 171 170 169 Bytes

import Data.Char
t=toLower
a!b=(b:)<$>a
""%l=Just$'-'<$l
l@(a:b)%(c:d)|t a==t c=b%d!c|1>0=l%d!'-'
_%_=mempty
(%"Ah, I see you're a man of culture as well.").concat.words

Probieren Sie es online!

Ungolfed:

import Data.Char

template = "Ah, I see you're a man of culture as well."

-- strip spaces
preprocess :: String -> String
preprocess = filter (/=' ')

-- case-insensitive character comparison
a#b = (toLower a) == (toLower b)

strike' :: String -> String -> Maybe String
strike' "" "" = Just ""  -- base case
strike' _ "" = Nothing   -- chars are exhausted, impossible to convert
strike' "" rem = Just $ '-' <$ rem  -- full match, strike rest of chars
strike' cur@(x:xs) (r:rs)
    | x # r     =   (r:) <$> strike' xs rs  -- character matches; pop a char
    | otherwise = ('-':) <$> strike' cur rs -- no match; strike char, don't pop

strike :: String -> Maybe String
strike xs = strike' (preprocess xs) template
user9549915
quelle
1

Prolog (SWI) , 109 Bytes

[]+[]+[].
I+[B|X]+[C|O]:-(I=[B|J],B=C;I=J,C=45),J+X+O.
I-O:-I+`Ah, I see you're a man of culture as well.`+O.

Probieren Sie es online!

Groß- und Kleinschreibung und Leerzeichen. Das -/2Prädikat ist das Hauptprädikat, wobei das erste Argument die Eingabezeichenfolge und das zweite Argument die Ausgabezeichenfolge ist.

0 '
quelle
0

JavaScript (Node.js), 103 Byte

s=>!s[i=0,r="Ah, I see you're a man of culture as well.".replace(/./g,c=>c==s[i]&&++i||c-1?c:'-'),i]&&r

Probieren Sie es online!

Groß- und Kleinschreibung beachten.

user81655
quelle
0

Pyth , 78 Bytes SBCS

V." y°äz µÿéiSs¾ýØC[ócõ!ó5§n"=b.x@zZkIqbN=+kN=hZ.?=+k\-))I<Zlz!z.?k

Testsuite
Nicht druckbare Zeichen im Code, siehe Link für die korrekte Version.
Groß- und Kleinschreibung beachten, Leerzeichen nicht ignorieren.

hakr14
quelle
0

Perl 5 -F , 192 Bytes

@q="Ah, I see you're a man of culture as well."=~/./g;while($x=shift@F){$x=~/\w/||next;while($_=shift@q){push@r,/\W/?$_:/\Q$x/i?$_:'-';$r[-1]=~/\w/i&&last}@q||last}say!$x&&@r,map/\w/?'-':$_,@q

Probieren Sie es online!

Xcali
quelle