Genera uomini di cultura


24

Questa sfida è ispirata al meme Men of Culture .

Il meme prevede l'oscuramento di parti della didascalia originale,

Ah, vedo che anche tu sei un uomo di cultura.

per far sembrare che il personaggio stia dicendo qualcos'altro.

La tua sfida è scrivere un programma che, dato un input, mostri come la frase originale può essere cancellata per ottenere la stringa di input.

Regole:

  • Usa un -personaggio per rappresentare un personaggio cancellato.
  • Non è necessario aggiungere ulteriori lettere per ottenere la stringa di input
  • È possibile trattare i confronti di stringhe come maiuscole e minuscole
  • È possibile ignorare gli spazi bianchi nei confronti delle stringhe
  • Se non è possibile la sostituzione, emettere un valore errato.
  • È possibile sostituire anche uno spazio ridondante con uno -, anche se non richiesto.
  • Laddove sono possibili più soluzioni, è possibile produrne una qualsiasi.

Casi test:

Di base:

Esempio meme 1

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

Esempio Meme 2

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

Custodia per bordi 1:

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

Edge case 2 (modificato):

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

Intermedio:

Esempio meme 3

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

Esempio meme 4

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

Esempio meme 5

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

Più forte:

Esempio meme 6

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

Esempio meme 7

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

TL; DR: data una stringa di input, genera una stringa che rappresenta il modo in cui la stringa originale deve essere modificata per adattarla alla stringa di input, usando un "-" per rappresentare un carattere cancellato. Se una sostituzione non è possibile, emettere un valore errato.

Codice golf, quindi vince il codice più breve in byte.

Modifica: chiarimenti

  • Ignorare lo spazio bianco nei confronti delle stringhe significa che è possibile rimuovere lo spazio bianco prima di confrontare le stringhe. Ad esempio, gli input Ah, a manuale Ah , a manualsono considerati uguali. Altre punteggiatura , ' .devono essere preservate. Allo stesso modo per l'output, Ah, a manualè uguale a Ah, amanual.

  • lo spazio bianco ridondante sostitutivo si riferisce agli spazi presenti nella didascalia originale. Non è necessario sostituirli con "-", ma se si sostituiscono le reti più punti si procede.


Il tuo output "Orwell" sembra sbagliato: hai cambiato una 'f' in una 'r' nella prima.
Draconis,

2
Quale output dovrebbe "Ah,<5 SPACES HERE>a manual."produrre?
Lynn,

3
Se una sostituzione non è possibile, emettere un valore errato. Bene, richiedere la convalida dell'input è altamente scoraggiato.
Erik the Outgolfer,

2
È possibile trattare i confronti di stringhe come maiuscole / minuscole , ciò significa che dobbiamo considerare l'input come maiuscole / minuscole o che siamo in grado di accettare input in qualunque caso desideriamo? Inoltre, puoi ignorare gli spazi bianchi nei confronti delle stringhe , vuoi dire che dobbiamo ignorare gli spazi? E cos'è lo "spazio bianco ridondante"?
Erik the Outgolfer,

1
Penso che "input validation", se potessi chiamarlo così, ha senso qui @EriktheOutgolfer
Conor O'Brien,

Risposte:


6

> <> , 94 byte

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

Provalo online!

La distinzione tra maiuscole e minuscole, non ignora gli spazi bianchi o la punteggiatura e genera una stringa vuota se l'input non è valido. Se vuoi provare altre stringhe, puoi semplicemente modificare la prima riga dopo il "v, purché non contenga un "byte nullo.


5

Retina 0.8.2 , 117 byte

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

Provalo online! Potrebbe salvare 1 byte richiedendo la distinzione tra maiuscole e minuscole. Potrebbe salvare 3 byte ritornando --, - --- ---'-- - --- -- ------- -- ----.su input vuoto. Spiegazione:

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

Prepara il testo desiderato all'input.

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

Sposta il maggior numero possibile di caratteri dal testo desiderato al risultato. Se il carattere è una lettera, deve anche corrispondere alla lettera successiva nell'input, che viene quindi eliminata.

}1`¶\w
-¶

Se non è presente alcuna lettera corrispondente nell'input, cambiarla in a -e riprovare.

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

Se ci sono ancora lettere nell'input, elimina tutto, altrimenti elimina il resto dell'input.


5

Gelatina , 58 55 48 45 byte

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

Provalo online!


Versione più leggibile:

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

Analisi della compressione delle stringhe:

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

3

Python 2 , 126 114 byte

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

Provalo online!


Python 2 , 108 106 byte

L'input è un elenco di caratteri.

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==[])

Provalo online!


Non potrebbe (i=='')essere (i<' ')(utilizzando una scheda, il carattere stampabile più basso)?
Jonathan Frech,

@JonathanFrech questo è possibile, ma sono entrambi 7 byte
ovs

Bene, hai un punto lì ...
Jonathan Frech,

2

JavaScript (Node.js) , 122 120 byte

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)

Provalo online!

Spiegazione :

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

Può essere ulteriormente ridotto ma sostituisce anche gli spazi bianchi con '-'. Se questo è accettabile, allora

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):'-')

Provalo online!

Ridotto ulteriormente, sostituisce solo gli spazi bianchi che seguono la stringa data con '-'.

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):'-')

Provalo online!


1
Non passareWhat did you just say about me, you little
l4m2

Non sto ottenendo un output corretto per il tuo codice per il What did you just say about me, you littletest case. Il tuo programma produce --- - --- ------ - --- -- ------- -- w----come output che non è ciò che richiede la specifica della sfida.
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)

Provalo online!

Se "può" significare fare o non fare va bene, allora

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)

Provalo online!


2

Brain-Flak , 764 600 byte

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

Provalo online!

Grandi miglioramenti grazie a Jo King , specialmente nella costruzione delle stringhe ma anche alcune modifiche logiche nel corpo principale. Spiegazione da lui

Fa distinzione tra maiuscole e minuscole (quindi "Ah, vedo che sei Orwell." Non corrisponde, ma "Ah, vedo che sei orwell."), Lo spazio bianco in input non viene ignorato e lo spazio bianco senza pari nella stringa originale è convertito in -. Secondo la mia comprensione, tutte queste sono opzioni valide.

Spiegazione:

(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

Sai, prima c'era una domanda per aiutare ad automatizzare la produzione di test arbitrari per Brain-Flak. La mia presentazione può (con un paio di modifiche) portare il testo a 506 byte
Jo King

Con un paio di altri miglioramenti, ho ottenuto il totale fino a 604 byte
Jo King,



@JoKing sei molto bravo a migliorare il mio Brain-Flak a quanto pare
Kamil Drakari

2

Haskell , 182 174 172 171 170 169 byte

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

Provalo 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

1

Prolog (SWI) , 109 byte

[]+[]+[].
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.

Provalo online!

Distinzione tra maiuscole e minuscole e spazi bianchi. Il -/2predicato è il predicato principale con il suo primo argomento come stringa di input e il secondo argomento come stringa di output.


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

Provalo online!

Che tiene conto del maiuscolo o minuscolo.


0

Pyth , 78 byte SBCS

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

Test suite
Caratteri non stampabili presenti nel codice, vedere il link per la versione corretta.
Case sensitive, non ignora gli spazi bianchi.


0

Perl 5 -F , 192 byte

@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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.