대명사


24

도전

하나 이상의 주관적인 대명사 로 구성된 문자열 을 + 부호로 구분 하여 인수로 사용하는 함수 또는 프로그램을 작성하십시오 . 결과는 단일 대명사 여야합니다. 즉, 다음 단락에서 정의 된 관계의 결과입니다.

물론, 반드시 존재하는 문법 오류를 수정하기 위해 자유롭게 편집하십시오.)

이것은 코드 골프 도전이므로 가장 짧은 코드가 승리합니다.

관계

이 작업의 목표는 우리가 매일 사용하는 것을 "수학"으로 번역하는 것입니다. 우리는 "당신과 나"에 대해 어떻게 생각합니까? 글쎄, "우리", 그렇지 않습니까? 따라서 입력이 You+I출력이면 string이어야합니다 We. 대명사가 두 개 이상인 경우 다음과 같이 표시됩니다 You+He+They.->You

관계는이 테이블로 정의됩니다.

      I  You    He   We   You   They
I     I  We     We   We   We    We
You      You    You  We   You   You
He              He   We   You   They
We                   We   We    We
You                       You   You
They                            They

'당신'문제

보시다시피, 저는 영어 원어민이 아닙니다. 내 언어 (이탈리아어) 복수의 차이 거기에 당신이 ( VOI 이탈리아어)과 단일 사용자 ( TU가 ). 이 도전을 생각했을 때 나는 영어로 생각하지 않았기 때문에, 복수형 또는 단수형을 사용하고 있는지를 인식 할 수 없다는 문제가 있습니다. 다행히도 (또는 분명히?) 입력 / 출력은 두 가지 형태로 변하지 않으므로 그 중 하나를 사용할 수 있으며 두 경우 모두를 커버하게됩니다!

입력 정보

입력은 항상 "대명사 + 대명사 + 대명사"형식입니다. 대명사는 첫 글자가 대문자이고 나머지는 소문자입니다. 플러스는 공백으로 둘러싸인 것이 아니라 대명사로만 둘러싸입니다. 빈 입력이 가능하며 결과는 빈 출력이어야합니다.

보너스

프로그램이 두 개의 새로운 대명사를 관리한다면 15 %의 약간의 보너스 : 그녀그것 . 그들은 분명히 그분과 같습니다. 이 관계는 반사적이므로, 그녀는-> 그녀와--그것입니다. 따라서 She, He 또는 It 만 포함하는 모든 조합은 이들을 출력해야합니다.

You+I          -> We
You+He+They    -> You
I+You+He+They  -> We
They           -> They
They+You       -> You
You+You+I+You  -> We

For Bonus
She            -> She
She+He         -> They
I+It+He        -> We
It+You         -> You

@ Timwi, 당신이 옳은 예에 대해 이야기하고 있다면, 몇 가지를 추가 할 것입니다. 어쨌든,이 "플러스"관계는 반사적이므로 He + He는 He, I + I는 I ....
Simone Chelo

5
나는 "GET I+I=I"하나가 될 수 있기 때문에, " I특정 스피커에서". 그러나 " He+He=They"을 (를) 할 수 없었 습니까? 일반적 He으로이 구성에서 " "를 두 번 말하면 동일한 두 번이 아닌 두 개의 다른 남성 대상을 의미합니다 .
Darrel Hoffman

영어의 많은 방언에는 voi 와 동등한 것이 있습니다. 광산에서는 y'all 이며 공식 레지스터에서 사용됩니다. 다른 하나는 yous 이지만, 공식적인 연설에 실제로 사용되지는 않는다고 생각합니다. 전통적으로, 당신은 또한이 너희를 잘 많은 사람들에게 알려져 있기 때문에 특정 성경 번역에서 그것의 일반적인. 당신은이 중 하나에 추가하거나에 던져해야 네가 물건을 흔들어 정말뿐만 아니라합니다.
user0721090601

답변:


9

망막, 62 61 56 53 52 바이트

(.+)\+(?=\1)

.*(W|.I|I.).*
We
.*Y.*
You
.{4,}
They

추가 골프와 설명은 나중에 나옵니다.

4 개의 대체 단계는 다음을 수행합니다.

  • 여러 번 그 자체가
  • We 또는 I + anyhing이 있으면 결과는 We
  • 당신을 포함하는 다른 어떤 것에 대한 결과는 당신입니다
  • 우리가 여전히 여러 부분이나 밑창을 가지고 있다면 그들은 오직 그분과 마찬가지로 남을 수 있습니다

여기에서 온라인으로 사용해보십시오.

Martin Büttner 덕분에 3 바이트가 절약되었습니다.


마지막 단계를 제외하고 는 대문자 대신 또는 뒤에 허용되는 유일한 문자이기 때문에 .대신 대신 사용할 수 있습니다 . \+I
Martin Ender

6

자바 스크립트 (ES6), 130 바이트

s=>(a=",I,You,He,We,They".split`,`,m="012345014444042242042345044444042545",r=0,s.split`+`.map(p=>r=m[+m[a.indexOf(p)]+r*6]),a[r])

설명

s=>(

  // a = array of each pronoun (including an empty string at index 0)
  a=",I,You,He,We,They".split`,`,

  // m = 6 x 6 map of pronoun indices for each combination of pronouns
  m="012345014444042242042345044444042545",

  r=0,                        // r = index of result pronoun
  s.split`+`.map(p=>          // for each pronoun in the input string
    r=m[+m[a.indexOf(p)]+r*6] // combine each pronoun with the previous one
  ),
  a[r]                        // return the resulting pronoun
)

테스트


와우, 나는이 접근법을 좋아한다! 보너스가 매우 좋지 않다고 생각합니다. 여기에 도달하려면 배열에 7 바이트 ( ", She, It")를 추가하고 행렬에 28 바이트를 추가하여 165 -15 % = 140에 도달해야합니다.
Simone Chelo

2

펄 5, 67 바이트

실제로는 79 바이트이지만 15 %의 보너스가 있습니다.

$a{$_}=""for split/[+\s]/,<>;@_=%a;say@_<3?@_:I~~@_||We~~@_?We:You~~@_?You:They

2

파이썬 159153 바이트

편집 : 감사합니다 @ Pietu1998

이것은 Javascript ES6 답변의 직접 번역입니다.

a=",I,You,He,We,They".split(',')
m="012345014444042242042345044444042545"
r=0
for p in raw_input().split('+'):r=int(m[int(m[a.index(p)])+r*6])
print a[r]

여기 사용해보십시오


s변수 일 필요는 없으며 forr=행 사이의 추가 행 및 공백을 제거 할 수 있습니다 . 또한 이것이 함수로 더 짧을 수 있는지 확인하고 싶을 수도 있습니다.
PurkkaKoodari

1

루비 150 136 131 119 111 바이트

ARGV.each{|a|puts %w[We You I He They][a.bytes.inject(0){|m,c|m|({87=>15,73=>7,89=>11,84=>9,72=>8}[c]||0)}%5]}

보너스 기능 : 동일한 명령 행에서 여러 표현식을 처리합니다.

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