Hasilkan Pria Budaya

24

Tantangan ini diinspirasi oleh meme Men of Culture .

Meme itu melibatkan pengosongan bagian dari teks aslinya,

Ah, saya melihat Anda seorang pria budaya juga.

untuk membuatnya tampak seolah-olah karakter mengatakan sesuatu yang lain.

Tantangan Anda adalah menulis sebuah program yang, jika diberi input, menunjukkan bagaimana kalimat aslinya dapat dihapus untuk mencapai string input.

Aturan:

  • Gunakan -karakter untuk mewakili karakter kosong.
  • Anda tidak harus menambahkan huruf tambahan untuk mencapai string input
  • Anda dapat memperlakukan perbandingan string sebagai tidak peka huruf besar-kecil
  • Anda dapat mengabaikan spasi putih dalam perbandingan string
  • Jika tidak ada substitusi yang mungkin, hasilkan nilai palsu.
  • Anda dapat mengganti spasi putih berlebihan dengan -juga, meskipun tidak diperlukan.
  • Jika beberapa solusi dimungkinkan, Anda dapat mengeluarkan salah satu dari mereka.

Kasus uji:

Dasar:

Contoh Meme 1

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

Contoh Meme 2

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

Kasus tepi 1:

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

Tepi kasus 2 (diedit):

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

Menengah:

Contoh Meme 3

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

Contoh Meme 4

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

Contoh Meme 5

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

Lebih keras:

Contoh Meme 6

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

Contoh Meme 7

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

TL; DR: Diberikan string input, output string yang mewakili bagaimana string asli harus dimodifikasi agar sesuai dengan string input, dengan menggunakan "-" untuk mewakili karakter kosong. Jika substitusi tidak memungkinkan, hasilkan nilai palsu.

Golf kode, jadi kode terpendek dalam byte menang.

Edit: Klarifikasi

  • Abaikan spasi putih dalam perbandingan string berarti Anda dapat menghapus spasi putih sebelum Anda membandingkan string. Misalnya, input Ah, a manualdan Ah , a manualdiperlakukan sama. Tanda baca lain , ' .harus dipertahankan. Demikian pula untuk output, Ah, a manualsama dengan Ah, amanual.

  • spasi putih pengganti mengacu pada ruang yang ada dalam teks asli. Anda tidak perlu menggantinya dengan "-", tetapi jika mengganti jaring Anda lebih banyak poin, silakan.

kotak kue
sumber
Output "Orwell" Anda tampaknya salah: Anda telah mengubah 'f' menjadi 'r' di yang pertama.
Draconis
2
Output apa yang harus "Ah,<5 SPACES HERE>a manual."dihasilkan?
Lynn
3
Jika substitusi tidak memungkinkan, hasilkan nilai palsu. Nah, membutuhkan validasi input sangat tidak disarankan.
Erik the Outgolfer
2
Anda dapat memperlakukan perbandingan string sebagai case-insensitive apakah artinya kita harus memperlakukan input sebagai case-insensitive atau bahwa kita dapat mengambil input dalam kasus apa pun yang kita inginkan? Juga, dengan Anda dapat mengabaikan spasi putih dalam perbandingan string , maksud Anda, kami harus mengabaikan spasi? Dan apa itu "ruang kosong redundan"?
Erik the Outgolfer
1
Saya pikir "input validasi," jika Anda bisa menyebutnya demikian, masuk akal di sini @EriktheOutgolfer
Conor O'Brien

Jawaban:

6

> <> , 94 byte

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

Cobalah online!

Peka huruf besar-kecil, tidak mengabaikan spasi putih atau tanda baca dan menghasilkan string kosong jika input tidak valid. Jika Anda ingin mencoba string lain, Anda bisa memodifikasi baris pertama setelah "v, asalkan tidak mengandung a "atau byte nol.

Jo King
sumber
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.*|¶.*¶.*

Cobalah online! Bisa menghemat 1 byte dengan membutuhkan case-sensitivitas. Dapat menghemat 3 byte dengan mengembalikan --, - --- ---'-- - --- -- ------- -- ----.input kosong. Penjelasan:

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

Tambahkan teks yang diinginkan ke input.

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

Pindahkan sebanyak mungkin karakter dari teks yang diinginkan ke hasil. Jika karakter adalah huruf maka itu juga harus cocok dengan huruf berikutnya di input, yang kemudian dihapus.

}1`¶\w
-¶

Jika tidak ada huruf yang cocok dalam input, ubah ke a -dan coba lagi.

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

Jika masih ada huruf yang tersisa di input, hapus semuanya, atau hapus sisa input.

Neil
sumber
5

Jelly , 58 55 48 45 byte

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

Cobalah online!


Versi yang lebih mudah dibaca:

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

Rincian kompresi string:

Ah, I{short: see}{short: you}'re a{short: man} of{long: culture} as{short: we}ll.
pengguna202729
sumber
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

Cobalah online!


Python 2 , 108 106 byte

Input adalah daftar karakter.

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

Cobalah online!

ovs
sumber
Tidak (i=='')bisa (i<' ')(menggunakan tab, karakter terendah yang dapat dicetak)?
Jonathan Frech
@ JonathanFrech ini mungkin, tetapi keduanya 7 byte
ovs
Nah, Anda ada benarnya ...
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)

Cobalah online!

Penjelasan:

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

Dapat dikurangi lebih jauh tetapi mengganti spasi putih dengan '-' juga. Jika ini dapat diterima maka

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

Cobalah online!

Mengurangi lebih jauh, hanya mengganti spasi putih setelah string yang diberikan dengan '-'.

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

Cobalah online!

Muhammad Salman
sumber
1
Jangan lulusWhat did you just say about me, you little
l4m2
Saya tidak mendapatkan output yang benar untuk kode Anda untuk What did you just say about me, you littletest case. Program Anda menghasilkan --- - --- ------ - --- -- ------- -- w----sebagai output yang bukan apa yang dibutuhkan oleh spesifikasi tantangan.
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)

Cobalah online!

Jika "mungkin" berarti melakukan atau tidak, tidak apa-apa, maka

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)

Cobalah online!

l4m2
sumber
2

Brain-Flak , 764 600 byte

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

Cobalah online!

Perbaikan besar berkat Jo King , terutama dalam konstruksi string tetapi juga beberapa penyesuaian logis di bagian utama. Penjelasan dari dia

Itu case-sensitive (jadi "Ah, saya melihat Anda sedang Orwell." Tidak cocok tetapi "Ah, saya melihat Anda Orwell sedang." Tidak), spasi di input tidak diabaikan, dan spasi yang tak tertandingi dalam string asli dikonversi menjadi -. Menurut pemahaman saya, semua itu adalah opsi yang valid.

Penjelasan:

(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
sumber
Anda tahu, ada pertanyaan sebelumnya untuk membantu mengotomatisasi pembuatan uji acak untuk Brain-Flak. Kiriman saya sendiri dapat (dengan beberapa modifikasi) mendapatkan teks hingga 506 byte
Jo King
Dengan beberapa perbaikan lainnya, saya mendapatkan total hingga 604 byte
Jo King
Penjelasan
Jo King
@JoKing Anda sangat pandai meningkatkan Brain-Flak saya
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

Cobalah online!

Tidak Disatukan:

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
pengguna9549915
sumber
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.

Cobalah online!

Case-sensitive dan whitespace sensitif. The -/2predikat adalah predikat utama dengan argumen pertama menjadi string masukan dan argumen kedua menjadi string output.

0 '
sumber
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

Cobalah online!

Hal - hal sensitif.

pengguna81655
sumber
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
Karakter yang tidak dapat dicetak hadir dalam kode, lihat tautan untuk versi yang benar.
Peka huruf besar-kecil, tidak mengabaikan spasi putih.

hakr14
sumber
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

Cobalah online!

Xcali
sumber