Generuj ludzi kultury

24

To wyzwanie jest inspirowane memem Men of Culture .

Mem polega na usunięciu części oryginalnego podpisu,

Ach, widzę, że jesteś także kulturą.

aby wyglądało na to, że postać mówi coś innego.

Wyzwanie polega na napisaniu programu, który, biorąc pod uwagę dane wejściowe, pokaże, w jaki sposób oryginalne zdanie można usunąć, aby uzyskać ciąg wejściowy.

Zasady:

  • Użyj -znaku, aby przedstawić wygaszoną postać.
  • Nie można dodawać dodatkowych liter, aby uzyskać ciąg wejściowy
  • Możesz traktować porównania ciągów jako bez rozróżniania wielkości liter
  • Możesz zignorować białe znaki w porównaniach ciągów
  • Jeśli podstawienie nie jest możliwe, wypisz wartość fałszowania.
  • Nadmiarowe białe znaki możesz również zastąpić -, choć nie jest to wymagane.
  • Tam, gdzie możliwych jest wiele rozwiązań, możesz wypisać dowolne z nich.

Przypadki testowe:

Podstawowy:

Przykładowy mem 1

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

Przykładowy mem 2

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

Obudowa krawędzi 1:

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

Przypadek krawędzi 2 (edytowany):

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

Pośredni:

Przykładowy mem 3

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

Przykładowy mem 4

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

Przykładowy mem 5

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

Trudniej:

Przykładowy mem 6

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

Przykładowy mem 7

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

TL; DR: Biorąc pod uwagę ciąg wejściowy, wypisz ciąg, który reprezentuje sposób, w jaki oryginalny ciąg powinien zostać zmodyfikowany, aby pasował do ciągu wejściowego, używając „-” do przedstawienia wygaszonego znaku. Jeśli podstawienie nie jest możliwe, wypisz wartość fałszowania.

Code golf, więc wygrywa najkrótszy kod w bajtach.

Edycja: Wyjaśnienia

  • Ignoruj ​​białe znaki w porównaniach ciągów oznacza, że ​​możesz usunąć białe znaki przed porównaniem ciągów. Na przykład, wielkości wejściowe Ah, a manuali Ah , a manualsą traktowane jako równe. Inne znaki interpunkcyjne , ' .muszą zostać zachowane. Podobnie dla wyjścia, Ah, a manualjest równe Ah, amanual.

  • zastępcze zbędne białe znaki oznaczają spacje obecne w oryginalnym podpisie. Nie musisz zamieniać ich na „-”, ale jeśli zastępujesz sieci, dostajesz więcej punktów, to idź dalej.

chesnutcase
źródło
Twoje wyjście „Orwell” wydaje się nieprawidłowe: w pierwszym zmieniłeś „f” na „r”.
Draconis,
2
Jaka wydajność powinna "Ah,<5 SPACES HERE>a manual."dać?
Lynn
3
Jeśli podstawienie nie jest możliwe, wypisz wartość fałszowania. Cóż, wymaganie weryfikacji danych wejściowych jest wysoce odradzane.
Erik the Outgolfer
2
Możesz traktować porównania ciągów jako bez rozróżniania wielkości liter, czy to oznacza, że ​​musimy traktować dane wejściowe jako bez rozróżniania wielkości liter lub że możemy przyjmować dane wejściowe w dowolnym przypadku? Również przez jeśli możesz zignorować białe znaki w porównaniach ciągów , czy masz na myśli, że musimy zignorować spacje? Czym jest „zbędne białe znaki”?
Erik the Outgolfer,
1
Myślę, że „sprawdzanie poprawności danych wejściowych”, jeśli można to tak nazwać, ma sens tutaj @EriktheOutgolfer
Conor O'Brien

Odpowiedzi:

6

> <> , 94 bajty

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

Wypróbuj online!

Rozróżniana jest wielkość liter, nie ignoruje się białych znaków ani interpunkcji i wyświetla pusty ciąg znaków, jeśli dane wejściowe są nieprawidłowe. Jeśli chcesz wypróbować inne ciągi, możesz po prostu zmodyfikować pierwszy wiersz po "v, o ile nie zawiera on "ani bajtu zerowego.

Jo King
źródło
5

Siatkówka 0.8.2 , 117 bajtów

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

Wypróbuj online!Można zaoszczędzić 1 bajt, wymagając rozróżniania wielkości liter. Można zapisać 3 bajty, zwracając --, - --- ---'-- - --- -- ------- -- ----.puste dane wejściowe. Wyjaśnienie:

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

Wstaw żądany tekst do wprowadzania.

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

Przenieś jak najwięcej znaków z żądanego tekstu do wyniku, jak to możliwe. Jeśli znak jest literą, musi również dopasować następną literę na wejściu, która następnie jest usuwana.

}1`¶\w
-¶

Jeśli na wejściu nie ma pasującej litery, zmień ją na a - i spróbuj ponownie.

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

Jeśli na wejściu pozostały jeszcze litery, usuń wszystko, w przeciwnym razie usuń resztę wejścia.

Neil
źródło
5

Galaretka , 58 55 48 45 bajtów

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

Wypróbuj online!


Bardziej czytelna wersja:

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

Podział kompresji struny:

Ah, I{short: see}{short: you}'re a{short: man} of{long: culture} as{short: we}ll.
użytkownik202729
źródło
3

Python 2 , 126 114 bajtów

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

Wypróbuj online!


Python 2 , 108 106 bajtów

Dane wejściowe to lista znaków.

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

Wypróbuj online!

ovs
źródło
Nie (i=='')może być (i<' ')(używając tabulatora, najniższego znaku do wydrukowania)?
Jonathan Frech
@JonathanFrech jest to możliwe, ale oba mają 7 bajtów
dniu
Cóż, masz
rację
2

JavaScript (Node.js) , 122 120 bajtów

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)

Wypróbuj online!

Objaśnienie:

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

Można jeszcze bardziej zmniejszyć, ale zastępuje również białe spacje „-”. Jeśli jest to do przyjęcia, to

JavaScript (Node.js) , 112 bajtów

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

Wypróbuj online!

Zredukowane jeszcze bardziej, zastępuje tylko białe spacje po danym ciągu ciągiem „-”.

JavaScript (Node.js) , 105 bajtów

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

Wypróbuj online!

Muhammad Salman
źródło
1
Nie What did you just say about me, you little
zaliczaj
Nie otrzymuję poprawnego wyniku dla twojego kodu dla What did you just say about me, you littleprzypadku testowego. Twój program generuje --- - --- ------ - --- -- ------- -- w----dane wyjściowe, co nie jest tym, czego wymaga specyfikacja wyzwania.
0
2

JavaScript (Node.js) , 135 bajtów

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)

Wypróbuj online!

Jeśli „może” oznaczać albo nie, albo nie, jest w porządku, to

JavaScript (Node.js) , 106 bajtów

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)

Wypróbuj online!

l4m2
źródło
2

Brain-Flak , 764 600 bajtów

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

Wypróbuj online!

Duże ulepszenia dzięki Jo Kingowi , szczególnie w konstrukcji strun, ale także kilka logicznych poprawek w głównej części. Wyjaśnienie od niego

Rozróżniana jest wielkość liter (więc „Ach, widzę, że jesteś Orwell.” Nie pasuje, ale „Ach, widzę, że jesteś Orwell.”), Białe znaki na wejściu nie są ignorowane, a niedopasowane białe znaki w oryginalnym ciągu to przekonwertowany na -. W moim rozumieniu wszystkie te opcje są prawidłowe.

Wyjaśnienie:

(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
źródło
Wiesz, wcześniej było pytanie, które pomoże zautomatyzować tworzenie arbitralnych testów dla Brain-Flak. Moje własne zgłoszenie może (z kilkoma modyfikacjami) sprowadzić tekst do 506 bajtów
Jo King
Z kilkoma innymi ulepszeniami udało mi się zmniejszyć do 604 bajtów
Jo King
Wyjaśnienie
Jo King
@JoKing, jesteś bardzo dobry w poprawianiu mojego Brain-Flak, wydaje się
Kamil Drakari
2

Haskell , 182 174 172 171 170 169 bajtów

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

Wypróbuj online!

Nie golfowany:

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
użytkownik9549915
źródło
1

Prolog (SWI) , 109 bajtów

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

Wypróbuj online!

Rozróżnia małe i wielkie litery oraz spacje. -/2Orzecznikiem jest głównym orzecznik z jego pierwszym argumentem jest ciąg wejściowy i drugi argument jest ciąg wyjściowy.

0 '
źródło
0

JavaScript (Node.js), 103 bajty

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

Wypróbuj online!

Wielkość liter ma znaczenie.

użytkownik 81655
źródło
0

Pyth , 78 bajtów SBCS

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

Pakiet
testowy Znaki niedrukowalne obecne w kodzie, patrz link do poprawnej wersji.
Rozróżniana jest wielkość liter, nie ignoruje białych znaków.

hakr14
źródło
0

Perl 5 -F , 192 bajty

@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

Wypróbuj online!

Xcali
źródło