Tạo ra những người đàn ông của văn hóa


24

Thử thách này được lấy cảm hứng từ meme Men of Culture .

Các meme liên quan đến việc bỏ trống các phần của chú thích ban đầu,

Ah, tôi thấy bạn là một người đàn ông của văn hóa.

để làm cho nó xuất hiện như thể nhân vật đang nói điều gì khác.

Thử thách của bạn là viết một chương trình, đưa ra một đầu vào, cho thấy cách câu gốc có thể được làm trống để đạt được chuỗi đầu vào.

Quy tắc:

  • Sử dụng một -ký tự để thể hiện một nhân vật trống rỗng.
  • Bạn không được thêm chữ cái để đạt được chuỗi đầu vào
  • Bạn có thể coi các so sánh chuỗi là không phân biệt chữ hoa chữ thường
  • Bạn có thể bỏ qua khoảng trắng trong so sánh chuỗi
  • Nếu không có sự thay thế nào là có thể, hãy đưa ra một giá trị giả.
  • Bạn cũng có thể thay thế khoảng trắng dư thừa bằng một -mặc dù không bắt buộc.
  • Khi có nhiều giải pháp khả thi, bạn có thể xuất bất kỳ giải pháp nào trong số đó.

Các trường hợp thử nghiệm:

Căn bản:

Ví dụ Meme 1

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

Ví dụ Meme 2

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

Trường hợp cạnh 1:

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

Trường hợp cạnh 2 (đã chỉnh sửa):

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

Trung gian:

Ví dụ Meme 3

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

Ví dụ Meme 4

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

Ví dụ Meme 5

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

Khó hơn:

Ví dụ Meme 6

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

Ví dụ Meme 7

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

TL; DR: Đưa ra một chuỗi đầu vào, xuất ra một chuỗi đại diện cho cách sửa đổi chuỗi gốc để phù hợp với chuỗi đầu vào, bằng cách sử dụng "-" để biểu thị một ký tự trống. Nếu không thể thay thế, hãy xuất giá trị giả.

Mã golf, vì vậy mã ngắn nhất trong byte thắng.

Chỉnh sửa: Làm rõ

  • Bỏ qua khoảng trắng trong so sánh chuỗi có nghĩa là bạn có thể loại bỏ khoảng trắng trước khi so sánh chuỗi. Ví dụ, các đầu vào Ah, a manualAh , a manualđược coi là bằng nhau. Các dấu câu khác , ' .phải được bảo tồn. Tương tự cho đầu ra, Ah, a manualbằng Ah, amanual.

  • khoảng trắng dự phòng thay thế đề cập đến các khoảng trắng có trong chú thích ban đầu. Bạn không cần thay thế chúng bằng "-", nhưng nếu thay thế lưới bạn có nhiều điểm hơn thì hãy tiếp tục.


Đầu ra "Orwell" của bạn có vẻ sai: bạn đã thay đổi 'f' thành 'r' trong lần đầu tiên.
Draconis

2
Sản lượng nào nên "Ah,<5 SPACES HERE>a manual."mang lại?
Lynn

3
Nếu không thể thay thế, hãy xuất giá trị giả. Vâng, yêu cầu xác nhận đầu vào là rất khuyến khích.
Erik the Outgolfer

2
Bạn có thể coi các so sánh chuỗi là không phân biệt chữ hoa chữ thường, điều đó có nghĩa là chúng ta phải coi đầu vào là không phân biệt chữ hoa chữ thường hoặc chúng ta có thể lấy đầu vào trong bất kỳ trường hợp nào chúng ta muốn? Ngoài ra, bởi Bạn có thể bỏ qua khoảng trắng trong so sánh chuỗi , bạn có nghĩa là chúng ta phải bỏ qua khoảng trắng? Và "khoảng trắng dư thừa" là gì?
Erik the Outgolfer

1
Tôi nghĩ rằng "xác thực đầu vào", nếu bạn có thể gọi nó là như vậy, có ý nghĩa ở đây @EriktheOutgolfer
Conor O'Brien

Câu trả lời:


6

> <> , 94 byte

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

Hãy thử trực tuyến!

Phân biệt chữ hoa chữ thường, không bỏ qua khoảng trắng hoặc dấu chấm câu và xuất ra một chuỗi trống nếu đầu vào không hợp lệ. Nếu bạn muốn thử các chuỗi khác, bạn chỉ có thể sửa đổi dòng đầu tiên sau "v, miễn là nó không chứa một "hoặc một byte null.


5

Võng mạc 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.*|¶.*¶.*

Hãy thử trực tuyến! Có thể tiết kiệm 1 byte bằng cách yêu cầu phân biệt chữ hoa chữ thường. Có thể lưu 3 byte bằng cách quay lại --, - --- ---'-- - --- -- ------- -- ----.đầu vào trống. Giải trình:

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

Chuẩn bị văn bản mong muốn cho đầu vào.

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

Di chuyển càng nhiều ký tự từ văn bản mong muốn đến kết quả càng tốt. Nếu ký tự là một chữ cái thì nó cũng cần khớp với chữ cái tiếp theo trong đầu vào, sau đó sẽ bị xóa.

}1`¶\w
-¶

Nếu không có chữ cái phù hợp trong đầu vào, hãy đổi nó thành a -và thử lại.

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

Nếu vẫn còn các chữ cái trong đầu vào, hãy xóa mọi thứ, nếu không thì xóa phần còn lại của đầu vào.


5

Thạch , 58 55 48 45 byte

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

Hãy thử trực tuyến!


Phiên bản dễ đọc hơn:

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

Phân tích nén chuỗi:

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

Hãy thử trực tuyến!


Python 2 , 108 106 byte

Đầu vào là một danh sách các ký tự.

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

Hãy thử trực tuyến!


Không (i=='')thể (i<' ')(sử dụng tab, ký tự có thể in thấp nhất)?
Jonathan Frech

@JonathanFrech này là có thể, nhưng nó là cả 7 byte
OVS

Chà, bạn đã có một điểm ở đó ...
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)

Hãy thử trực tuyến!

Giải trình :

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

Có thể giảm hơn nữa nhưng cũng thay thế khoảng trắng bằng '-'. Nếu điều này được chấp nhận thì

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

Hãy thử trực tuyến!

Giảm hơn nữa, chỉ thay thế các khoảng trắng nằm sau chuỗi đã cho bằng '-'.

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

Hãy thử trực tuyến!


1
Đừng vượt quaWhat did you just say about me, you little
l4m2

Tôi không nhận được đầu ra chính xác cho mã của bạn cho What did you just say about me, you littletrường hợp thử nghiệm. Chương trình của bạn tạo ra --- - --- ------ - --- -- ------- -- w----như đầu ra không phải là những gì mà thông số kỹ thuật thách thức yêu cầu.
0 '


2

Brain-Flak , 764 600 byte

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

Hãy thử trực tuyến!

Những cải tiến lớn nhờ Jo King , đặc biệt là trong việc xây dựng chuỗi nhưng cũng có một vài điều chỉnh logic trong thân máy chính. Giải thích từ anh ấy

Nó phân biệt chữ hoa chữ thường (vì vậy "Ah, tôi thấy bạn là Orwell." Không khớp nhưng "Ah, tôi thấy bạn là orwell."), Khoảng trắng trong đầu vào không bị bỏ qua và khoảng trắng không khớp trong chuỗi gốc là chuyển đổi thành -. Theo hiểu biết của tôi, tất cả những người là lựa chọn hợp lệ.

Giải trình:

(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

Bạn biết đấy, đã có một câu hỏi trước đó để giúp tự động hóa việc sản xuất thử nghiệm tùy ý cho Brain-Flak. Trình của riêng tôi có thể (với một vài sửa đổi) có được văn bản xuống tới 506 byte
Jo King

Với một vài cải tiến khác, tôi đã giảm tổng số xuống còn 604 byte
Jo King



@JoKing bạn rất giỏi trong việc cải thiện Brain-Flak của tôi có vẻ như
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

Hãy thử trực tuyến!

Ung dung:

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.

Hãy thử trực tuyến!

Phân biệt chữ hoa chữ thường và khoảng trắng. Vị -/2từ là vị từ chính với đối số đầu tiên là chuỗi đầu vào và đối số thứ hai là chuỗi đầu ra.



0

Pyth , 78 byte SBCS

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

Bộ kiểm tra Các
ký tự không thể in có trong mã, xem liên kết để biết phiên bản chính xác.
Trường hợp nhạy cảm, không bỏ qua khoảng trắng.


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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.