문화의 남자를 생성


24

이 도전은 문화 의 밈인 Men에서 영감을 얻었습니다 .

밈은 원본 캡션의 일부를 비우는 것과 관련이 있습니다.

아, 나는 당신도 문화의 사람입니다 참조하십시오.

마치 캐릭터가 다른 것을 말하는 것처럼 보이게합니다.

당신의 도전은 입력이 주어지면 입력 문자열을 달성하기 위해 원래 문장을 비울 수있는 방법을 보여주는 프로그램을 작성하는 것 입니다.

규칙 :

  • -공백 문자를 나타내는 문자를 사용하십시오 .
  • 입력 문자열을 달성하기 위해 문자를 추가하지 않아야합니다
  • 문자열 비교는 대소 문자를 구분하지 않는 것으로 취급 할 수 있습니다
  • 문자열 비교에서 공백을 무시할 수 있습니다
  • 대체가 불가능한 경우 잘못된 값을 출력하십시오.
  • -필요하지 않더라도 여분의 공백을로 대체 할 수 있습니다 .
  • 여러 솔루션이 가능한 경우 솔루션을 출력 할 수 있습니다.

테스트 사례 :

기본:

예시 밈 1

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

예시 밈 2

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

엣지 케이스 1 :

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

가장자리 사례 2 (편집 됨) :

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

중급 :

예시 밈 3

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

예시 밈 4

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

예시 밈 5

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

더 세게 :

예시 밈 6

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

예시 밈 7

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

TL; DR : 입력 문자열이 제공된 경우, 공백 문자를 나타내는 "-"를 사용하여 입력 문자열에 맞게 원래 문자열을 수정하는 방법을 나타내는 문자열을 출력하십시오. 대체가 불가능한 경우 잘못된 값을 출력하십시오.

코드 골프, 바이트 단위의 가장 짧은 코드가 이깁니다.

편집 : 설명

  • 문자열 비교에서 공백을 무시 하면 문자열을 비교 하기 전에 공백을 제거 할 수 있습니다. 예를 들면, 입력 Ah, a manual과는 Ah , a manual동일하게 처리된다. 다른 문장 부호 , ' .는 유지해야합니다. 출력의 경우 Ah, a manual와 동일합니다 Ah, amanual.

  • 대체 중복 공백 은 원래 캡션에있는 공백을 나타냅니다. "-"로 바꾸지 않아도되지만 그물을 바꾸면 더 많은 포인트를 얻을 수 있습니다.


"Orwell"출력이 잘못된 것 같습니다. 첫 번째 출력에서 ​​'f'를 'r'로 변경했습니다.
Draconis

2
어떤 결과를 "Ah,<5 SPACES HERE>a manual."산출 해야 합니까?
Lynn

3
대체가 불가능한 경우 잘못된 값을 출력하십시오. 글쎄, 입력 유효성 검사를 요구하지 않는 것이 좋습니다.
Outgolfer Erik

2
대소 문자를 구분 하지 않는 문자열 비교를 처리 할 수 ​​있으므로 입력을 대소 문자를 구분하지 않고 처리해야하거나 원하는 경우에 입력을 취할 수 있습니까? 또한 문자열 비교에서 공백을 무시할 수 있습니다. 공백을 무시해야한다는 의미입니까? "중복 공백"이란 무엇입니까?
Outgolfer Erik

1
"입력 유효성 검사"라고 생각하면 여기에 의미가 있습니다. @EriktheOutgolfer
Conor O'Brien

답변:


6

> <> , 94 바이트

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

온라인으로 사용해보십시오!

대소 문자를 구분하며 공백이나 문장 부호를 무시하지 않으며 입력이 유효하지 않은 경우 빈 문자열을 출력합니다. 다른 문자열을 시도하려면 "v또는 뒤에 "바이트가 포함되어 있지 않는 한. 다음의 첫 번째 행을 수정할 수 있습니다 .


5

레티 나 0.8.2 , 117 바이트

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

온라인으로 사용해보십시오! 대소 문자를 구분하여 1 바이트를 절약 할 수 있습니다. --, - --- ---'-- - --- -- ------- -- ----.빈 입력 을 반환 하여 3 바이트를 절약 할 수 있습니다. 설명:

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

원하는 텍스트를 입력 앞에 추가하십시오.

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

원하는 텍스트에서 결과로 가능한 한 많은 문자를 이동하십시오. 문자가 문자이면 입력의 다음 문자와 일치해야하며 삭제됩니다.

}1`¶\w
-¶

입력에 일치하는 문자가 없으면 a로 변경하고 -다시 시도하십시오.

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

입력에 여전히 글자가 남아 있으면 모든 것을 삭제하고, 그렇지 않으면 나머지 입력을 삭제하십시오.


5

젤리 , 58 55 48 45 바이트

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

온라인으로 사용해보십시오!


더 읽기 쉬운 버전 :

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

문자열 압축 분석 :

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

3

파이썬 2 , 126114 바이트

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

온라인으로 사용해보십시오!


파이썬 2 , 108106 바이트

입력은 문자 목록입니다.

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

온라인으로 사용해보십시오!


(i=='')없습니다 (i<' ')(탭, 가장 낮은 인쇄 가능한 문자를 사용)?
Jonathan Frech

@JonathanFrech 이것이 가능하지만 모두 7 바이트입니다
ovs

글쎄, 당신은 거기에 요점을 가지고 ...
Jonathan Frech

2

자바 스크립트 (Node.js를) , 122 (120) 바이트

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)

온라인으로 사용해보십시오!

설명 :

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

더 줄일 수 있지만 공백을 '-'로 바꿉니다. 이것이 허용되는 경우

자바 스크립트 (Node.js) , 112 바이트

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

온라인으로 사용해보십시오!

더 줄이면 주어진 문자열 뒤에있는 공백 만 '-'로 바꿉니다.

자바 스크립트 (Node.js) , 105 바이트

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

온라인으로 사용해보십시오!


1
통과하지 마십시오What did you just say about me, you little
l4m2

What did you just say about me, you little테스트 케이스 의 코드에 대한 올바른 출력을 얻지 못했습니다 . 프로그램 --- - --- ------ - --- -- ------- -- w----이 챌린지 사양에 요구되지 않는 출력으로 생성 합니다.
0 '


2

Brain-Flak , 764600 바이트

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

온라인으로 사용해보십시오!

Jo King 덕분에 특히 끈 구조가 개선되었지만 본체의 논리적 조정이 크게 개선되었습니다. 그에게서 설명

대소 문자를 구분합니다 (따라서 "Ah, 난 당신이 Orwell입니다."는 일치하지 않지만 "Ah, 나는 당신이 Orwell입니다."는 그렇지 않습니다), 입력의 공백은 무시 되지 않으며 , 원래 문자열의 공백은 로 변환되었습니다 -. 내 이해에 따르면, 그것들은 모두 유효한 옵션입니다.

설명:

(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

Brain-Flak에 대한 임의 테스트 생성을 자동화하는 데 도움 이되는 질문이 이전에 있었습니다 . 내 자신의 제출은 (몇 가지 수정으로) 텍스트를 506 바이트로 줄 수있다
Jo King

다른 개선의 몇 가지로, 나는에 총을 꿇고 604 바이트
조 왕



@ JoKing 당신은 내 Brain-Flak 개선에 매우 능숙합니다
Kamil Drakari

2

하스켈 , 182 174 172 171 170 169 바이트

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

온라인으로 사용해보십시오!

언 골프 드 :

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

프롤로그 (SWI) , 109 바이트

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

온라인으로 사용해보십시오!

대소 문자 구분 및 공백 구분. -/2술어는 첫 번째 인자는 입력 문자열 및 문자열 출력되는 두 번째 인자 인와 메인 선언문이다.



0

Pyth , 78 바이트 SBCS

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

테스트 스위트
코드에 인쇄 할 수없는 문자가 있습니다. 올바른 버전의 링크를 참조하십시오.
대소 문자를 구분하며 공백을 무시하지 않습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.