사랑 계산


39

어렸을 때 언니는 당신이 당신의 호감과 성공적인 관계를 맺을 확률이 얼마나되는지보기 위해이 작은 사랑 계산을 보여주었습니다. 필요한 것은 2 개의 이름과 한 장의 종이입니다.

  • 남자
  • 여자

그런 다음이 이름을 Loves 단어로 구분합니다 . 이것을 한 줄 또는 새 줄에 쓸 수 있습니다.

존은 제인을
사랑한다

그런 다음 계산이 시작됩니다. 문자가 왼쪽에서 오른쪽으로 몇 번 나오는지 계산하고 처음부터 끝까지 새 줄을 사용하는 경우부터 시작합니다. 각 문자는 한 번 계산되므로 John 의 J 를 계산 한 후에 Jane을 시작할 때 다시 계산할 필요가 없습니다. 이 예제의 결과는 다음과 같습니다.

J : 2 ([J] ohn | [J] ane)
O : 2 (John | L [ves])
H : 1 ( Jon )
N : 2 (Joh [n] | Ja [n] e)
__
L : 1 ([L] oves)
O : 건너 뛴
V : 1 (Lo [v] es)
E : 2 (Lov [e] s | Jan [e])
S : 1 (Love [s ])
__
J : 건너 뛰기
A : 1 (J [a] ne)
N : 건너 뛰기
E : 건너 뛰기
__
최종 결과 : 2 2 1 2 1 1 2 1 1

다음 단계는 외부에서 중간으로 작동하는 숫자를 추가하는 것입니다.

2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 1 2 1 1 2 1 1 (1 + 2 = 3)
(2) (2) 1 2 1 1 2 1 1 (2 + 1 = 3)
2 1 2 1 1 2 1 1 (1)
__
결과 : 3 3 3 3 1

정수가 100보다 작거나 같을 때까지이 작업을 계속 수행합니다.

3 3 3 3 1
4 6 3
76 %

두 자리수의 합이 10 이상이 될 수 있습니다.이 경우 다음 행에서 숫자가 2로 나뉩니다.
예:

5 3 1 2 4 5 1 8
13 (3 1로 사용되는)
1 2 3 4 5 7
8 8 4 (8 + 4 = 12 1 2로 사용)
1 2 8
92 %

요구 사항

  • 프로그램은 적당한 길이 (100 자)의 이름을 사용할 수 있어야합니다.
  • [A..Z, a..z] 문자가 허용됩니다.
  • 대소 문자를 구분하지 않으므로 A == a

당신이 결정할 무료

  • 특수 문자 처리 방법 (Ö, è 등)
  • 예 또는 아니오를 포함하면 공백이 무시됩니다.
  • 모든 언어가 허용됩니다.

우승자는 2 월 28 일 14 일의 투표로 결정됩니다 .

행복한 코딩

추신 : 이것은 내가 여기에 무언가를 넣은 것이 처음입니다. 향상시킬 방법이 있다면 자유롭게 알려주십시오 = 3

편집 : 종료 날짜를 발렌타인 데이로 변경했습니다.이 도전에 더 적합하다고 생각했습니다. :)


예에서는 짝수의 숫자를 추가해야하거나 숫자가 2 자리 인 경우 어떻게되는지 보여주지 않습니다. 명확하게 추가 할 수 있습니다.
Kendall Frey

5
<thinking volume = "aloud"> 그래서 계산은 91 %에서 멈 춥니 다. 이상한. 나는 10 % 또는 더 나은 1 %를 계속하면 훨씬 더 현실적인 점수를 줄 수있는 많은 경우를 알고 있습니다. 계산의 명확하게 상업적인 조작으로 이것은 실제로 SMS 사랑 계산기 서비스에 의해 사용되는 것입니다 내기. </ thinking>
manatwork

8
inb4 누군가가 심장 모양의 코드를 게시하고 인기를 얻음
Cruncher

1
@ user2509848 처음 몇 글자의 열은 우연의 일치이며 요구 사항은 아닙니다. 당신은 편지의 발생 횟수를 계산합니다.
Danny

3
이름 (및 "사랑")을 ASCII 정수 코드로 변환하면 결과가 어떻게 바뀌는 지 궁금합니다. 그 문제에 대해 "사랑"을 "증오"로 1-love_result
바꾸면 어떻게 될까요?

답변:


35

깎기

글⓵닆뭶뉗밃變充梴⓶壹꺃뭩꾠⓶꺐合合替虛終梴⓷縮⓶終併❶뉀大套鈮⓶充銻⓷加⓶鈮⓶終併❶뉀大終깐

입력을 공백으로 구분 된 두 단어 (예 :)로 예상합니다 John Jane. 대소 문자를 구분하지 않지만 특수 정규식 문자가 아닌 문자 만 지원합니다 (따라서 (또는 *이름으로 사용하지 마십시오 !). 또한 두 단어 만 기대하므로 사랑에 대한 관심이 "Mary Jane"인 경우 MaryJane한 단어 를 입력해야합니다 . 그렇지 않으면 "YourName은 Mary를 사랑합니다 Jane"을 평가합니다.

설명

가장 어려운 부분은 홀수 자릿수의 경우를 처리하는 것이 었습니다. 중간 자릿수는 자체를 추가하는 대신 그대로 두어야합니다. 내 솔루션이 흥미 롭다고 생각합니다.

글⓵닆뭶뉗밃變 | replace space with "loves"
充 | while non-empty...
    梴 | get length of string
    ⓶壹 | get first character of string (let’s say it’s “c”)
    꺃뭩꾠⓶꺐合合 | construct the regex “(?i:c)”
    替虛終 | replace all matches with empty string
    梴 | get new length of that
    ⓷縮 | subtract the two to get a number
    ⓶ | move string to front
終 | end while
併 | Put all the numbers accrued on the stack into a single string
❶뉀大 | > 100
套 | while true...
    鈮⓶ | chop off the first digit
    充 | while non-empty... (false if that digit was the only one!)
        銻⓷加 | chop off last digit and add them
        ⓶鈮⓶ | chop off the first digit again
                 (returns the empty string if the string is empty!)
    終 | end while
    併 | Put all the numbers (± an empty string ;-) ) on the stack into a single string
    ❶뉀大 | > 100
終 | end while
깐 | add "%"

100 이하로 남겨두면 루프가 종료되고 응답이 스택에 있으므로 출력됩니다.


46
그리고 APL을 읽기 어렵다고 생각했습니다.
Dr. belisarius

5
안녕 Timwi, 난 당신이 게임에 다시 볼 수 있습니다 : p 좋은 솔루션
Pierre Arlaud

12
잠깐, 그는 codegolf에 대한 자신의 언어를 발명?! 부정 행위입니다!
Mooing Duck

2
실제로이 언어 읽을 수 있습니다 (중국어를 아는 경우).
eiennohito 2018 년

8
@MooingDuck : 규칙에 대한 이해 는 챌린지가 게시 된 후에 게시 된 언어를 사용할 수 없다는 것 입니다. 그러므로 나는 항상 이전에 소개 한 지시만을 사용하는 것을 강조합니다. 예를 들어, 나는 이 도전에 대한 응답으로 대소 문자를 구분하지 않는 문자열 대체를 도입 했지만 여기서는 사용하지 않을 것입니다.
Timwi

29

펀시 턴

이 프로그램은 입력을 공백으로 분리해야합니다 (예 :) John Jane. 문자 AZ / az의 경우 대소 문자 구분하지 않습니다 . 다른 유니 코드 문자의 경우 32와 같거나 같은 두 문자 (예 : ĀĠ, 또는 ?_) 를 "혼동" 합니다. 또한 입력에 NUL ( \0) 문자 가 포함되어 있으면이 프로그램이 무엇을 할 지 잘 모릅니다.

또한 StackExchange는 줄 간격을 너무 많이 추가하므로 pastebin의 원본 텍스트는 다음같습니다 . 또는 브라우저의 JavaScript 콘솔에서 다음 코드를 실행하여 바로 여기에서 수정하십시오.$('pre').css('line-height',1)

                               ╓───╖ ╓───╖ ╓───╖ ╓───╖ ╓───╖ ╓───╖
                               ║ Ḷ ║┌╢ Ọ ╟┐║ Ṿ ║ ║ Ẹ ║┌╢ Ṛ ╟┐║ Ṣ ╟┐
                               ╙─┬─╜│╙───╜│╙─┬─╜ ╙─┬─╜│╙─┬─╜│╙─┬─╜│
                                 │  │     │  │     │  │  │  │  │  │
                                 │  │     │  │     │  │  │  │  │  │
                                 │  │     │  │     │  │  │  │  │  │
                                 │  │     │  │     │  │  │  │  │  └───────────┐
                                 │  │     │  │     │  │  │  │  └─────────────┐│
                         ┌───────┘  │     │  │     │  │  │  └───────────────┐││
                         │┌─────────┘     │  │     │  │  └─────────────────┐│││
                         ││┌──────────────┘  │     │  └───────────────────┐││││
                         │││     ┌───────────┘     └──────────────────┐   │││││
                         │││ ┌───┴───┐  ┌─────────────────────────────┴─┐ │││││
                         │││ │ ╔═══╗ │  │                               │ ││││└─────────┐
                         │││ │ ║ 2 ║ │  │     ┌───┐   ┌───┐             │ │││└─────────┐│
                         │││ │ ║ 1 ║ │  │    ┌┴┐  │  ┌┴┐  │             │ ││└─────────┐││
                         │││ │ ║ 1 ║ │  │    └┬┘  │  └┬┘  │             │ │└─────────┐│││
┌────────────────────────┘││ │ ║ 1 ║ │  │   ┌─┴─╖ │ ┌─┴─╖ │     ┌───╖   │ └─────────┐││││
│┌────────────────────────┘│ │ ║ 0 ║ │  │   │ ♯ ║ │ │ ♯ ║ ├─────┤ ℓ ╟───┴─┐         │││││
││┌────────────────────────┘ │ ║ 6 ║ │  │   ╘═╤═╝ │ ╘═╤═╝ │     ╘═══╝   ┌─┴─╖       │││││
│││                    ┌─────┘ ║ 3 ║ │  │    ┌┴┐  │  ┌┴┐  └─────────────┤ · ╟──────┐│││││
│││┌───────────────────┴┐┌───╖ ║ 3 ║ │  │    └┬┘  │  └┬┘                ╘═╤═╝      ││││││
││││                   ┌┴┤ = ╟─╢ 3 ║ │  │ ┌───┘   └───┴─────┐         ┌───┴───┐    ││││││
││││      ╔════╗ ┌───╖ │ ╘═╤═╝ ║ 1 ║ │  │ │ ╔═══╗         ┌─┴─╖       │ ╔═══╗ │    ││││││
││││      ║ 37 ╟─┤ ‼ ╟─┘ ┌─┘   ║ 9 ║ │  │ │ ║ 1 ║ ┌───────┤ · ╟─┐     │ ║ 0 ║ │    ││││││
││││      ╚════╝ ╘═╤═╝  ┌┴┐    ║ 6 ║ │  │ │ ╚═╤═╝ │       ╘═╤═╝ ├─────┘ ╚═╤═╝ │    ││││││
││││ ┌───╖ ┌───╖ ┌─┴─╖  └┬┘    ║ 3 ║ │  │ │ ┌─┴─╖ │ ╔═══╗ ┌─┴─╖ │ ╔═══╗ ┌─┴─╖ │    ││││││
│││└─┤ Ẹ ╟─┤ Ṿ ╟─┤ ? ╟───┤     ║ 3 ║ │  │ └─┤ ʃ ╟─┘ ║ 1 ╟─┤ ʃ ╟─┘ ║ 1 ╟─┤ ʃ ╟─┘    ││││││
│││  ╘═══╝ ╘═══╝ ╘═╤═╝  ┌┴┐    ║ 7 ║ │  │   ╘═╤═╝   ╚═══╝ ╘═╤═╝   ╚═══╝ ╘═╤═╝      ││││││
│││                │    └┬┘    ╚═══╝ │  │     │  ┌──────────┘             └──────┐ ││││││
│││              ╔═══╗ ┌─┴─╖ ┌───╖   │  │     │  │ ┌─────────╖ ┌───╖ ┌─────────╖ │ ││││││
│││              ║ 3 ╟─┤ > ╟─┤ ℓ ╟───┘  │     │  └─┤ str→int ╟─┤ + ╟─┤ str→int ╟─┘ ││││││
│││              ╚═══╝ ╘═══╝ ╘═══╝      │     │    ╘═════════╝ ╘═╤═╝ ╘═════════╝   ││││││
││└───────────────────────────────────┐ │     │             ┌────┴────╖            ││││││
│└───────────────────────────────┐    │ │     │             │ int→str ║            ││││││
│          ╔═══╗                 │    │ │     │ ┌───╖ ┌───╖ ╘════╤════╝            ││││││
│          ║ 0 ║                 │    │ │     └─┤ Ẹ ╟─┤ ‼ ╟──────┘                 ││││││
│          ╚═╤═╝                 │    │ │       ╘═══╝ ╘═╤═╝   ┌────────────────────┘│││││
│    ╔═══╗ ┌─┴─╖                 │    │ │             ┌─┴─╖ ┌─┴─╖ ╔═══╗             │││││
│    ║ 1 ╟─┤ ʃ ╟─────────────────┴┐   │ └─────────────┤ ? ╟─┤ ≤ ║ ║ 2 ║             │││││
│    ╚═══╝ ╘═╤═╝                  │   │               ╘═╤═╝ ╘═╤═╝ ╚═╤═╝             │││││
│          ┌─┴─╖                  │   │                 │     └─────┘               │││││
│        ┌─┤ Ṣ ╟──────────────────┴┐  │    ╔═══╗   ┌────────────────────────────────┘││││
│        │ ╘═╤═╝                   │  │    ║   ║   │  ┌──────────────────────────────┘│││
│        │ ┌─┴─╖                   │  │    ╚═╤═╝   │  │    ┌──────────────────────────┘││
│        └─┤ · ╟─────────────┐     │  │    ┌─┴─╖   │┌─┴─╖┌─┴─╖                         ││
│          ╘═╤═╝             │     │  │    │ Ḷ ║   └┤ · ╟┤ · ╟┐                        ││
│      ┌─────┴───╖         ┌─┴─╖ ┌─┴─╖│    ╘═╤═╝    ╘═╤═╝╘═╤═╝│                        ││
│      │ int→str ║ ┌───────┤ · ╟─┤ · ╟┴┐     │      ┌─┴─╖  │  │                        ││
│      ╘═════╤═══╝ │       ╘═╤═╝ ╘═╤═╝ │           ┌┤ · ╟──┘  │                        ││
│            │   ┌─┴─╖ ┌───╖ │     │   │         ┌─┘╘═╤═╝   ┌─┴─╖                      ││
│            │   │ ‼ ╟─┤ Ọ ╟─┘     │   │         │ ┌──┴─────┤ · ╟───────┐              ││
│            │   ╘═╤═╝ ╘═╤═╝       │   │         │ │ ╔════╗ ╘═╤═╝ ╔═══╗ │              ││
│            └─────┘     │         │   │         │ │ ║ 21 ║   │   ║ 2 ║ │              ││
│                ┌───╖ ┌─┴─╖       │   │  ┌──────┘ │ ╚═══╤╝   │   ║ 0 ║ │              ││
│            ┌───┤ Ṿ ╟─┤ ? ╟───────┘   │  │┌───╖ ┌─┴─╖ ┌─┴──╖ │   ║ 9 ║ │              ││
│            │   ╘═══╝ ╘═╤═╝           │ ┌┴┤ ♯ ╟─┤ Ṛ ╟─┤ >> ║ │   ║ 7 ║ │              ││
│            │           │             │ │ ╘═══╝ ╘═╤═╝ ╘══╤═╝ │   ║ 1 ║ │              ││
│            └─────────┐   ┌───────────┘ │ ╔═══╗ ┌─┴─╖    ├───┴─┬─╢ 5 ║ │              ││
└───────────────────┐  └───┘             │ ║ 0 ╟─┤ ? ╟────┘     │ ║ 1 ║ │              ││
╔════╗              │                    │ ╚═══╝ ╘═╤═╝   ┌──────┤ ╚═══╝ │              ││
║ 21 ║              │                    │       ┌─┴─╖ ┌─┴─╖ ╔══╧══╗    │              ││
╚═╤══╝              │                    └───────┤ ? ╟─┤ ≠ ║ ║ −33 ║    │              ││
┌─┴─╖ ┌────╖        │                            ╘═╤═╝ ╘═╤═╝ ╚══╤══╝   ┌┴┐             ││
│ × ╟─┤ >> ╟────────┴────────────┐                 │     └──────┤      └┬┘             ││
╘═╤═╝ ╘═╤══╝ ┌───╖   ╔═════════╗ │                              └───────┘              ││
┌─┴─╖   └────┤ ‼ ╟───╢ 2224424 ║ │                ┌────────────────────────────────────┘│
│ ♯ ║        ╘═╤═╝   ║ 4396520 ║ │                │    ┌────────────────────────────────┘
╘═╤═╝        ┌─┴─╖   ║ 1237351 ║ │                │    │    ┌─────────────────────┐
  └──────────┤ · ╟─┐ ║ 2814700 ║ │                │  ┌─┴─╖  │     ┌─────┐         │
             ╘═╤═╝ │ ╚═════════╝ │              ┌─┴──┤ · ╟──┤     │    ┌┴┐        │
 ╔═══╗ ┌───╖ ┌─┴─╖ │   ╔════╗    │            ┌─┴─╖  ╘═╤═╝┌─┴─╖   │    └┬┘        │
 ║ 0 ╟─┤ Ọ ╟─┤ ‼ ║ │   ║ 32 ║    │   ┌────────┤ · ╟────┴──┤ Ṛ ╟───┤   ┌─┴─╖       │
 ╚═══╝ ╘═╤═╝ ╘═╤═╝ │   ╚═╤══╝    │   │        ╘═╤═╝       ╘═╤═╝   │   │ ♯ ║       │
         │   ┌─┴─╖ ├─┐ ┌─┴─╖     │ ┌─┴─╖      ┌─┴─╖       ╔═╧═╗   │   ╘═╤═╝       │
           ┌─┤ ʃ ╟─┘ └─┤ ʘ ║     │┌┤ · ╟──────┤ · ╟───┐   ║ 1 ║   │    ┌┴┐        │
           │ ╘═╤═╝     ╘═╤═╝     ││╘═╤═╝      ╘═╤═╝   │   ╚═══╝   │    └┬┘        │
           │ ╔═╧═╗       ├───────┘│  │       ┌──┴─╖ ┌─┴─╖ ┌───╖ ┌─┴─╖ ┌─┴─╖ ╔═══╗ │
           │ ║ 0 ║       │        │  │       │ >> ╟─┤ Ṣ ╟─┤ ‼ ╟─┤ · ╟─┤ ʃ ╟─╢ 0 ║ │
           │ ╚═══╝       │        │  │       ╘══╤═╝ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╚═══╝ │
           └─────────────┘        │  │ ╔════╗ ┌─┴─╖ ┌─┴─╖ ┌─┴─╖ ┌─┘     ├─────────┘
                                  │  │ ║ 21 ╟─┤ × ╟─┤ · ╟─┤ · ╟─┴─┐     │
                                  │  │ ╚════╝ ╘═══╝ ╘═╤═╝ ╘═╤═╝   │     │
                                  │  └────────────────┘   ┌─┴─╖   │     │
                                  │                   ┌───┤ ? ╟───┴┐    │
                                  │                   │   ╘═╤═╝    │    │
                                  │           ┌───╖ ┌─┴─╖   │    ┌─┴─╖  │
                                  └───────────┤ ♯ ╟─┤ · ╟─┐   ┌──┤ ? ╟─ │
                                              ╘═══╝ ╘═╤═╝ └───┘  ╘═╤═╝  │
                                                      │          ╔═╧═╗  │
                                                      │          ║ 0 ║  │
                                                      │          ╚═══╝  │
                                                      └─────────────────┘

빠른 설명

  • 프로그램은 STDIN을 가져 와서 호출 합니다.

  • 문자열에서 첫 번째 공백을 찾아 공백으로 바꾸고 loves결과를로 전달합니다 .

  • 입력 문자열에서 첫 번째 문자를 반복적으로 가져 와서 호출 하고 결과 수에 발생 횟수를 연결합니다. 입력 문자열이 비어 있으면 결과 문자열을 호출 합니다.

  • 반복적으로 호출 이 중 하나와 동일한 결과를 얻을 때까지 "100"(또는 길이 이하 3.이있다 100: 입력을 고려 실제로 발생할 수 있습니다 lovvvv eeeeeess.) 그것을하면, 그것은 추가 "%"반환이 있습니다.

  • 사랑 계산 알고리즘의 하나의 완전한 반복을 계산하고; 즉, 그것은 자릿수 문자열을 취하여 다음 자릿수 문자열을 리턴합니다.

  • 건초 더미바늘을 가져와 가짜 대소 문자 구분 기준 ( )을 사용하여 건초 더미 에서 바늘 이 처음 나타나는 지수를 찾습니다 .or 32

  • 소요 건초 더미바늘을 반복적으로 적용 의 모든 인스턴스를 제거하기 위해 바늘을 . 모든 제거 및 제거 횟수 후 최종 결과를 반환합니다.


12
나는 여기서 무슨 일이 일어나고 있는지 전혀 모른다. 그러나 그것은 매우 인상적이다!
squeamish ossifrage

27

루비

     f=IO.         read(
   __FILE__)     .gsub(/[^
 \s]/x,?#);s=   $**'loves';s
.upcase!;i=1;a =s.chars.uniq.
map{|c|s.count(c)};loop{b='';
b<<"#{a.shift.to_i+a.pop.to_i
 }"while(a.any?);d=b.to_i;a=
   b.chars;d<101&&abort(d>
     50?f:f.gsub(/^.*/){
       |s|i=13+i%3;s[\
         i...i]=040.
           chr*3;s
             })}
              V

관계의 확률이 50 %를 초과하면 마음을 인쇄합니다

$ ruby ♥.rb sharon john
     #####         #####
   #########     #########
 ############   ############
############## ##############
#############################
#############################
 ###########################
   #######################
     ###################
       ###############
         ###########
           #######
             ###
              #

기회가 50 % 미만인 경우 상한 마음을 인쇄합니다.

$ ruby ♥.rb sharon epidemian
     #####            #####
   #########        #########
 ############      ############
##############    ##############
###############   ##############
#############   ################
 #############   ##############
   ############   ###########
     ########   ###########
       #######   ########
         ######   #####
           ##   #####
             #   ##
              # 

흔들리는 존 ...

어쨌든 대소 문자를 구분하지 않으며 일부 다 처형 쿼리 (예 :)를 지원합니다 ruby ♥.rb Alice Bob Carol Dave.


1
그건 순수 예술입니다 :)

11

APL, 80

{{n←⍎∊⍕¨(⍵[⌈m]/⍨m≠⌊m),⍨+/(⌊m←2÷⍨≢⍵)↑[1]⍵,⍪⌽⍵⋄n≤100:n⋄∇⍎¨⍕n}∪⍦32|⎕UCS⍺,'Loves',⍵}

사랑은 사랑 이기 때문에 (그렇지 않더라도)

필수 ♥ ︎ 모양 버전 :

    {f←{m←  2÷⍨≢⍵
  n←+/(⌊m)↑[1]⍵,⍪⌽⍵
n←⍎∊⍕¨n,(⍵[⌈m]/⍨m≠⌊m)
n≤100:n⋄∇⍎¨⍕n}⋄u←⎕UCS
   s←u⍺,'Loves',⍵
       f∪⍦32|s
          }

골프 버전은 ∪⍦NARS 개발자와 함께 조사하고 있는 버그 때문에 다소 불규칙한 행동을합니다 .

      'John'{{n←⍎∊⍕¨(⍵[⌈m]/⍨m≠⌊m),⍨+/(⌊m←2÷⍨≢⍵)↑[1]⍵,⍪⌽⍵⋄n≤100:n⋄∇⍎¨⍕n}∪⍦32|⎕UCS⍺,'Loves',⍵}'Jane'
VALUE ERROR

그러나 나는 그것을 부분적으로 실행하고 올바른 결과를 얻을 수있었습니다.

      'John'{∪⍦32|⎕UCS⍺,'Loves',⍵}'Jane'
2 2 1 2 1 1 2 1 1
      {n←⍎∊⍕¨(⍵[⌈m]/⍨m≠⌊m),⍨+/(⌊m←2÷⍨≢⍵)↑[1]⍵,⍪⌽⍵⋄n≤100:n⋄∇⍎¨⍕n}2 2 1 2 1 1 2 1 1
76

8

자바 스크립트

아마도 더 깨끗할 수는 있지만 작동합니다. 자세한 예

function z(e) {
    for (var t = 0, c = '', n = e.length - 1; n >= t; n--, t++) {
        c += n != t ? +e[t] + (+e[n]) : +e[t];
    }
    return c
}
for (var s = prompt("Name 1").toLowerCase() + "loves" + prompt("Name 2").toLowerCase(),b = '', r; s.length > 0;) {
    r = new RegExp(s[0], "g");
    b+=s.match(r).length;
    s = s.replace(r, "")
}
for (; b.length > 2; b = z(b)) {}
console.log("Chances of being in love are: " + b + "%")

7

파이썬

글쎄, 나는 그것이 라고 생각했다 ...

a=filter(str.isalpha,raw_input()+"loves"+raw_input()).lower();a=[x[1]for x in sorted(set(zip(a,map(str.count,[a]*len(a),a))),key=lambda(x,y):a.index(x))]
while reduce(lambda x,y:x*10+y,a)>100:a=reduce(list.__add__,map(lambda x: x<10 and[x]or map(int,str(x)),[a[n]+a[-n-1]for n in range(len(a)/2)]+(len(a)%2 and[a[len(a)/2]]or[])))
print str(reduce(lambda x,y:x*10+y,a))+"%"

언 골프 드 :

a = filter(str.isalpha,
           raw_input() + "loves" + raw_input()).lower()

a = [x[1] for x in sorted(set(zip(a,
                                  map(str.count, [a] * len(a), a))),
                          key=lambda (x, y): a.index(x))]

while reduce(lambda x, y: x * 10 + y, a) > 100:
    a = reduce(list.__add__,
               map(lambda x: x < 10 and [x] or map(int, str(x)), 
                   [a[n] + a[-n - 1] for n in range(len(a) / 2)] + (len(a) % 2 and [a[len(a) / 2]] or [])))

print str(reduce(lambda x, y: x * 10 + y, a)) + "%"

당신은 가능한 짧게 그것을 확인하려면, 당신은 대체 할 수 reduce(list.__add__,xyz)와 함께 sum(xyz,[]). :)
flornquake

5

PHP

<?php

$name1 = $argv[1];
$name2 = $argv[2];

echo "So you think {$name1} and {$name2} have any chance? Let's see.\nCalculating if \"{$name1} Loves {$name2}\"\n";

//prepare it, clean it, mince it, knead it
$chances = implode('', array_count_values(str_split(preg_replace('/[^a-z]/', '', strtolower($name1.'loves'.$name2)))));
while(($l = strlen($chances))>2 and $chances !== '100'){
    $time = time();
    $l2 = intval($l/2);
    $i =0;
    $t = '';
    while($i<$l2){
        $t.=substr($chances, $i, 1) + substr($chances, -$i-1, 1);
        $i++;
    }
    if($l%2){
        $t.=$chances[$l2];
    }
    echo '.';
    $chances = $t;
    while(time()==$time){}
}

echo "\nTheir chances in love are {$chances}%\n";
$chances = intval($chances);
if ($chances === 100){
    echo "Great!!\n";
}elseif($chances > 50){
    echo "Good for you :) !!\n";
}elseif($chances > 10){
    echo "Well, it's something.\n";
}else{
    echo "Ummm.... sorry.... :(\n";
}

샘플 결과

$ php loves.php John Jane
So you think John and Jane have any chance? Let's see.
Calculating if "John Loves Jane"
...
Their chances in love are 76%
Good for you :) !!

4

GolfScript

GolfScript의 필수 코드 골프 답변 :

' '/'loves'*{65- 32%65+}%''+:x.|{{=}+x\,,}%{''\{)\(@+@\+\.(;}do 0+{+}*+{[]+''+~}%.,((}do{''+}%''+

공백으로 구분 된 이름으로 입력을 허용합니다. 예 :

echo 'John Jane' | ruby golfscript.rb love.gs
-> 76

4

씨#

using System;
using System.Collections.Generic;
using System.Linq;

namespace LovesMeWhat
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 2) throw new ArgumentException("Ahem, you're doing it wrong.");

            Func<IEnumerable<Int32>, String> fn = null;
            fn = new Func<IEnumerable<Int32>, String> (input => {
                var q = input.SelectMany(i => i.ToString().Select(c => c - '0')).ToArray();

                if (q.Length <= 2) return String.Join("", q);

                IList<Int32> next = new List<Int32>();
                for (int i = 0, j = q.Length - 1; i <= j; ++i, --j)
                {
                    next.Add(i == j ? q[i] : q[i] + q[j]);
                }
                return fn(next);
            });

            Console.Write(fn(String.Concat(args[0], "LOVES", args[1]).ToUpperInvariant().GroupBy(g => g).Select(g => g.Count())));
            Console.Write("%");
            Console.ReadKey(true);
        }
    }
}

q[i] + q[j]10 이상일 때 올바르게 작동합니까 ?
Danny

@Danny fn의 첫 번째 줄은 입력에서 각 정수를 가져 와서 각각을 문자열로 변환 한 다음이 문자열의 모든 문자를 0에서 9 (c- '0'부분)의 정수로 변환하여 반환합니다. IOW, it 입력의 각 숫자로 구성된 정수 배열을 구성합니다. 요구 사항이 유효하지 않은 경우 :-)
Luc

아보고 싶었어
Danny

4

하스켈

내 버전은 꽤 길다. 가독성에 중점을두기로 결정했기 때문에 코드에서 알고리즘을 공식화하는 것이 흥미로울 것이라고 생각했다. 왼쪽 폴드 에 문자 수를 모으고 기본적으로 함께 눈덩이를 내며 순서는 문자열에서 순서대로 나타납니다. 또한 일반적으로 배열 인덱싱이 필요한 알고리즘 부분을 목록 굽힘 으로 대체했습니다 . 알고리즘에는 기본적으로 숫자 목록을 반으로 접고 정렬 된 숫자를 추가하는 것이 포함됩니다. 굽힘에 대한 두 가지 경우가 있습니다. 심지어 목록이 중간에 멋지게 분할되고 홀수 목록이 중심 요소 주위로 구부러지고 해당 요소가 추가로 참여하지 않습니다. 분열 은 목록을 가져와 더 이상 한 자리가 아닌 숫자를 나눕니다.> = 10 . 나는 내 자신의 unfoldl 을 작성 해야했다. 실제로 unfoldl 인지 확실하지 않지만 , 내가 필요한 것을하는 것처럼 보인다. 즐겨.

import qualified Data.Char as Char
import qualified System.Environment as Env

-- | Takes a seed value and builds a list using a function starting 
--   from the last element
unfoldl :: (t -> Maybe (t, a)) -> t -> [a]
unfoldl f b  =
  case f b of
   Just (new_b, a) -> (unfoldl f new_b) ++ [a]
   Nothing -> []

-- | Builds a list from integer digits
number_to_digits :: Integral a => a -> [a]
number_to_digits n = unfoldl (\x -> if x == 0 
                                     then Nothing 
                                     else Just (div x 10, mod x 10)) n

-- | Builds a number from a list of digits
digits_to_number :: Integral t => [t] -> t
digits_to_number ds = number
  where (number, _) = foldr (\d (n, p) -> (n+d*10^p, p+1)) (0,0) ds

-- | Bends a list at n and returns a tuple containing both parts 
--   aligned at the bend
bend_at :: Int -> [a] -> ([a], [a])
bend_at n xs = let 
                 (left, right) = splitAt n xs
                 in ((reverse left), right)

-- | Takes a list and bends it around a pivot at n, returns a tuple containing 
--   left fold and right fold aligned at the bend and a pivot element in between
bend_pivoted_at :: Int -> [t] -> ([t], t, [t])
bend_pivoted_at n xs
  | n > 1 = let 
              (left, pivot:right) = splitAt (n-1) xs
              in ((reverse left), pivot, right)

-- | Split elements of a list that satisfy a predicate using a fission function
fission_by :: (a -> Bool) -> (a -> [a]) -> [a] -> [a]
fission_by _ _ [] = []
fission_by p f (x:xs)
  | (p x) = (f x) ++ (fission_by p f xs)
  | otherwise = x : (fission_by p f xs)

-- | Bend list in the middle and zip resulting folds with a combining function.
--   Automatically uses pivot bend for odd lists and normal bend for even lists
--   to align ends precisely one to one
fold_in_half :: (b -> b -> b) -> [b] -> [b]
fold_in_half f xs
  | odd l = let 
              middle = (l-1) `div` 2 + 1
              (left, pivot, right) = bend_pivoted_at middle xs
              in pivot:(zipWith f left right)
  | otherwise = let 
                  middle = l `div` 2
                  (left, right) = bend_at middle xs
                  in zipWith f left right
  where 
    l = length xs

-- | Takes a list of character counts ordered by their first occurrence 
--   and keeps folding it in half with addition as combining function
--   until digits in a list form into any number less or equal to 100 
--   and returns that number
foldup :: Integral a => [a] -> a
foldup xs
  | n > 100 = foldup $ fission $ reverse $ (fold_in_half (+) xs)
  | otherwise = n
  where 
    n = (digits_to_number xs)
    fission = fission_by (>= 10) number_to_digits 

-- | Accumulate counts of keys in an associative array
count_update :: (Eq a, Integral t) => [(a, t)] -> a -> [(a, t)]
count_update [] x = [(x,1)]
count_update (p:ps) a
  | a == b = (b,c+1) : ps
  | otherwise = p : (count_update ps a)
  where
    (b,c) = p

-- | Takes a string and produces a list of character counts in order 
--   of their first occurrence
ordered_counts :: Integral b => [Char] -> [b]
ordered_counts s = snd $ unzip $ foldl count_any_alpha [] s
  where 
    count_any_alpha m c
      | Char.isAlpha c = count_update m (Char.toLower c)
      | otherwise = m

-- | Take two names and perform the calculation
love_chances n1 n2 =  foldup $ ordered_counts (n1 ++ " loves " ++ n2) 

main = do
   args <- Env.getArgs
   if (null args) || (length args < 2)
     then do
            putStrLn "\nUSAGE:\n"
            putStrLn "Enter two names separated by space\n"
     else let 
            n1:n2:_ = args 
            in putStrLn $ show (love_chances n1 n2) ++ "%"

일부 결과 :

"Romeo" "Juliet"97 %- 경험적 테스트가 중요합니다
"Romeo" "Julier"88 %- 최신 요약 버전 ...
"Horst Draper" "Jane"20 %
"Horst Draper" "Jane (Horse)"70 %- 개발 ...가있었습니다
"벤더 벤더 로드리게스" "페니 Wenchworth -"41 % 접는 여성을위한 벤더가 말한다 ""!
"Philip Fry" "Turanga Leela"53 %- "Maria" "Abraham" 과 결혼하는 데 7 시즌이 걸린 이유를 알 수 있습니다 -98
%
"John" "Jane"76 %


3

루비

math = lambda do |arr|
  result = []
  while arr.any?
    val = arr.shift + (arr.pop || 0)
    result.push(1) if val >= 10
    result.push(val % 10)
  end
  result.length > 2 ? math.call(result) : result
end
puts math.call(ARGV.join("loves").chars.reduce(Hash.new(0)) { |h, c| h[c.downcase] += 1; h }.values).join

축소 :

l=->{|a|r=[];while a.any?;v=a.shift+(a.pop||0);r.push(1) if v>=10;r.push(v%10) end;r[2]?l[r]:r}
puts l[ARGV.join("loves").chars.reduce(Hash.new(0)){|h, c| h[c.downcase]+=1;h}.values].join

불러라:

$ ruby love.rb "John" "Jane"
76

1
더 작게를하려면 사용할 수있는 l=->a{...}대신에 l=lambda do|a|...end, 당신은 또한 할 수있는 l[...]대신에 l.call(...).
Doorknob

좋은 지적입니다.
Andrew Hubbs

2

파이썬 3

모듈을 사용하지 않는 간단한 솔루션입니다. I / O는 꽤 충분합니다.

두 번째 반복자가 범위를 벗어 났을 때 오류 캐치를 백업으로 사용했습니다. 파이썬의 인덱스 오류를 잡으면 1로 가정합니다.

names = [input("Name 1: ").lower(), "loves", input("Name 2: ").lower()]
checkedLetters = []

def mirrorAdd(n):
    n = [i for i in str(n)]
    if len(n) % 2:
        n.insert(int(len(n)/2), 0)
    return(int(''.join([str(int(n[i]) + int(n[len(n)-i-1])) for i in range(int(len(n)/2))])))

cn = ""

positions = [0, 0]
for i in [0, 1, 2]:
    checkAgainst = [0, 1, 2]
    del checkAgainst[i]
    positions[0] = 0
    while positions[0] < len(names[i]):
        if not names[i][positions[0]] in checkedLetters:
            try:
                if names[i][positions[0]] in [names[checkAgainst[0]][positions[1]], names[checkAgainst[1]][positions[1]]]:
                    positions[1] += 1
                    cn = int(str(cn) + "2")
                else:
                    cn = int(str(cn) + "1")
            except:
                cn = int(str(cn) + "1")
            checkedLetters.append(names[i][positions[0]])
        positions[0] += 1

print("\n" + str(cn))

while cn > 100:
    cn = mirrorAdd(cn)
    print(cn)

print("\n" + str(cn) + "%")

다음은 샘플 실행입니다.

Name 1: John
Name 2: Jane

221211211
33331
463
76

76%

fornames직접 실행하는 것이 더 명확하지 않습니까?
Einacio

@Einacio 그렇다면 어떻게 간결하게 확인할 수 있는지 어떻게 알 수 있습니까?
cjfaure

"Maria"와 "Abraham"의 결과는 무엇입니까?
Einacio

@ 아 이나시오 나는 75 %를 얻었다.
cjfaure

나는 98을 얻었다, 이것은 단계 25211111111.363221.485.98이다. 코드에 5 "a"를 추가하지 못하는 것
같습니다

2

자바

2 자리수의 합이 10보다 커질 수 있습니다.이 경우 다음 행에서 숫자가 2로 나뉩니다.

숫자가 10이면 어떻게 되나요? 방금 1과 0을 추가했는데 맞습니까?

나는 사건을 무시하기로 결정했다.

public class LoveCalculation {
    public static void main(String[] args) {
        String chars = args[0].toLowerCase() + "loves" + args[1].toLowerCase();
        ArrayList<Integer> charCount = new ArrayList<Integer>();
        HashSet<Character> map = new HashSet<Character>();
        for(char c: chars.toCharArray()){
            if(Pattern.matches("[a-z]", "" + c) && map.add(c)){
                int index = -1, count = 0;
                while((index = chars.indexOf(c, index + 1)) != -1)
                    count++;
                charCount.add(count);
            }
        }
        while(charCount.size() > 2){
            ArrayList<Integer> numbers = new ArrayList<Integer>();
            for(int i = 0; i < (charCount.size()/2);i++)
                addToArray(charCount.get(i) + charCount.get(charCount.size()-1-i), numbers);
            if(charCount.size() % 2 == 1){
                addToArray(charCount.get(charCount.size()/2), numbers);
            }
            charCount = new ArrayList<Integer>(numbers);
        }
        System.out.println(Arrays.toString(charCount.toArray()).replaceAll("[\\]\\[,\\s]","") + "%");
    }
    public static ArrayList<Integer> addToArray(int number, ArrayList<Integer> numbers){
        LinkedList<Integer> stack = new LinkedList<Integer>();
        while (number > 0) {
            stack.push(number % 10);
            number = number / 10;
        }
        while (!stack.isEmpty())
            numbers.add(stack.pop());
        return numbers;
    }
}

입력:

Maria
Abraham

산출:

98%

입력:

Wasi
codegolf.stackexchange.com

산출:

78%

나는이 답변이 킥과 킥킥 웃음으로 골프를 보는 것을 좋아할 것입니다!
Josh

144자를 빼고 몇 줄을 만듭니다. 난 그냥 읽기 및 메모리 효율적인 프로그램을 사용하는 데 사용됩니다 ...
Rolf ツ

그렇기 때문에 Java 골프를 보는 것이 항상 나를 깨뜨립니다.
Josh

나를 위해 이것은 골프 같은 언어를 만드는 재미입니다. 랜덤 자바 클래스를 골프하는 것이 얼마나 재미 있을지 상상 해보세요. XD가 2 배 작아 질 것입니다.
Rolf ツ

1
자바는 골프에있어 최악의 언어입니다. 불행히도 그것은 내가 잘 아는 언어 일뿐입니다. 글쎄, 적어도 여기서 읽을 수 있습니다.
Andrew Gies

2

많은 개선이 있을지 모르지만 이것은 코딩하기에 재미있었습니다.

#include <stdio.h>
#include <string.h>
int i, j, k, c, d, r, s = 1, l[2][26];
char a[204], *p, *q;

main(int y, char **z) {
    strcat(a, z[1]);
    strcat(a, "loves");
    strcat(a, z[2]);
    p = a;
    q = a;
    for (; *q != '\0'; q++, p = q, i++) {
        if (*q == 9) {
            i--;
            continue;
        }
        l[0][i] = 1;
        while (*++p != '\0')
            if ((*q | 96) == (*p | 96)&&*p != 9) {
                (l[0][i])++;
                *p = 9;
            }
    }
    for (;;) {
        for (j = 0, k = i - 1; j <= k; j++, k--) {
            d = j == k ? l[r][k] : l[r][j] + l[r][k];
            if (d > 9) {
                l[s][c++] = d % 10;
                l[s][c++] = d / 10;
            } else l[s][c++] = d;
            if (k - j < 2)break;
        }
        i = c;
        if (c < 3) {
            printf("%d", l[s][0]*10 + l[s][1]);
            break;
        }
        c = r;
        r = s;
        s = c;
        c = 0;
    }
}

물론 필수 골프 버전 : 496

#include <stdio.h>
#include <string.h>
int i,j,k,c,d,r,s=1,l[2][26];char a[204],*p,*q;main(int y,char **z){strcat(a,z[1]);strcat(a,"loves");strcat(a,z[2]);p=q=a;for(;*q!='\0';q++,p=q,i++){if(*q==9){i--;continue;}l[0][i]=1;while(*++p!='\0')if((*q|96)==(*p|96)&&*p!=9){(l[0][i])++;*p=9;}}for(;;){for(j=0,k=i-1;j<=k;j++,k--){d=j==k?l[r][k]:l[r][j]+l[r][k];if(d>9){l[s][c++]=d%10;l[s][c++]=d/10;}else l[s][c++]=d;if(k-j<2)break;}i=c;if(c<3){printf("%d",l[s][0]*10+l[s][1]);break;}c=r;r=s;s=c;c=0;}}

2

파이썬 3

입력으로 두 가지 이름이 사용됩니다. 여분의 공백을 제거한 다음 사랑을 계산하십시오. 자세한 내용은 입력 출력을 확인하십시오.

s=(input()+'Loves'+input()).strip().lower()
a,b=[],[]
for i in s:
    if i not in a:
        a.append(i)
        b.append(s.count(i))
z=int(''.join(str(i) for i in b))
while z>100:
    x=len(b)
    t=[]
    for i in range(x//2):
        n=b[-i-1]+b[i]
        y=n%10
        n//=10
        if n:t.append(n)
        t.append(y)
    if x%2:t.append(b[x//2])
    b=t
    z=int(''.join(str(i) for i in b))
print("%d%%"%z)

입력:

Maria
Abraham

산출:

98%

또는 이것을 시도하십시오;)

입력:

Wasi Mohammed Abdullah
code golf

산출:

99%

2

k, 80

{{$[(2=#x)|x~1 0 0;x;[r:((_m:(#x)%2)#x+|x);$[m=_m;r;r,x@_m]]]}/#:'.=x,"loves",y}

여기에 실행이 있습니다 :

{{$[(2=#x)|x~1 0 0;x;[r:((_m:(#x)%2)#x+|x);$[m=_m;r;r,x@_m]]]}/#:'.=x,"loves",y}["john";"jane"]
7 6

2

제이

다음은 J의 간단한 것입니다.

r=:({.+{:),$:^:(#>1:)@}:@}.
s=:$:^:(101<10#.])@("."0@(#~' '&~:)@":"1)@r
c=:10#.s@(+/"1@=)@(32|3&u:@([,'Loves',]))
exit echo>c&.>/2}.ARGV

명령 행에 다음과 같은 이름이 사용됩니다. 예 :

$ jconsole love.ijs John Jane
76

2

멋진, 근사한

다음은 테스트와 함께 그루비 버전입니다.

countChars = { res, str -> str ? call(res+str.count(str[0]), str.replace(str[0],'')) : res }
addPairs = { num -> def len = num.length()/2; (1..len).collect { num[it-1].toInteger() + num[-it].toInteger() }.join() + ((len>(int)len) ? num[(int)len] : '') }
reduceToPct = { num -> /*println num;*/ num.length() > 2 ? call( addPairs(num) ) : "$num%" }

println reduceToPct( countChars('', args.join('loves').toLowerCase()) )

assert countChars('', 'johnlovesjane') == '221211211'
assert countChars('', 'asdfasdfateg') == '3222111'
assert addPairs('221211211') == '33331'
assert addPairs('33331') == '463'
assert addPairs('463') == '76'
assert addPairs('53125418') == '13457'
assert addPairs('13457') == '884'
assert addPairs('884') == '128'
assert addPairs('128') == '92'
assert reduceToPct( countChars('','johnlovesjane') ) == '76%'

설명:

  • "countChars"는 단순히 문자열을 만드는 동안 되풀이되고 제거됩니다.
  • "addPairs"는 **에서 외부에서 숫자를 추가하는 한 자릿수의 문자열을 사용합니다. "collect..join"은 외부에서 작동하는 숫자를 추가하고 문자열로 다시 결합합니다. ** "+ (... c [ c가 홀수 길이 인 경우 (int) len]) "가 중간 자릿수에 다시 발생합니다.
  • "recudeToPct"는 3 자리 미만이 될 때까지 페어를 추가하여 자신을 호출합니다.

CodeGolf Groovy, 213 자

이것이 하면 클로저를 인라인하고 다음과 같이 얻을 수 있습니다.

println({c->l=c.length()/2;m=(int)l;l>1?call((1..m).collect{(c[it-1]as int)+(c[-it]as int)}.join()+((l>m)?c[m]:'')):"$c%"}({r,s->s?call(r+s.count(s[0]),s.replace(s[0],'')):r}('',args.join('loves').toLowerCase())))

lovecalc.groovy로 저장하십시오. "groovy lovecalc john jane"실행

산출:

$ groovy lovecalc john jane
76%
$ groovy lovecalc romeo juliet
97%
$ groovy lovecalc mariah abraham
99%
$ groovy lovecalc maria abraham
98%
$ groovy lovecalc al bev
46%
$ groovy lovecalc albert beverly
99%

1

자바

시작시 2 개의 문자열 매개 변수를 사용하고 각 문자의 수와 결과를 인쇄합니다.

import java.util.ArrayList;
import java.util.LinkedHashMap;

public class LUV {
    public static void main(String[] args) {
        String str = args[0].toUpperCase() + "LOVES" + args[1].toUpperCase();
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < str.length(); i++) {
            if (!map.containsKey(String.valueOf(str.charAt(i)))) {
                map.put(String.valueOf(str.charAt(i)), 1);
            } else {
                map.put(String.valueOf(str.charAt(i)), map.get(String.valueOf(str.charAt(i))).intValue() + 1);
            }
        }
        System.out.println(map.toString());
        System.out.println(addValues(new ArrayList<Integer>(map.values()))+"%");
    }

    private static int addValues(ArrayList<Integer> list) {
        if ((list.size() < 3) || (Integer.parseInt((String.valueOf(list.get(0)) + String.valueOf(list.get(1))) + String.valueOf(list.get(2))) == 100)) {
            return Integer.parseInt((String.valueOf(list.get(0)) + String.valueOf(list.get(1))));
        } else {
            ArrayList<Integer> list2 = new ArrayList<Integer>();
            int size = list.size();
            for (int i = 0; i < size / 2; i++) {
                int temp = list.get(i) + list.get(list.size() -1);
                if (temp > 9) {
                    list2.add(temp/10);
                    list2.add(temp%10);
                } else {
                    list2.add(temp);
                }
                list.remove(list.get(list.size()-1));
            }
            if (list.size() > list2.size()) {
                list2.add(list.get(list.size()-1));
            }
            return addValues(list2);
        }
    }
}

분명히 가장 짧은 것 (Java)은 아니지만 명확하고 읽기 쉬운 것입니다.

전화하면

java -jar LUV.jar JOHN JANE

당신은 출력을 얻을

{J=2, O=2, H=1, N=2, L=1, V=1, E=2, S=1, A=1}
76%

1

아르 자형

압축 상을 수상하지는 않지만 어쨌든 재미있었습니다.

problove<-function(name1,name2, relation='loves') {
sfoo<-tolower( unlist( strsplit(c(name1,relation,name2),'') ) )
startrow <- table(sfoo)[rank(unique(sfoo))]
# check for values > 10 . Not worth hacking an arithmetic approach
startrow <- as.integer(unlist(strsplit(as.character(startrow),'')))
while(length(startrow)>2 ) {
    tmprow<-vector()
    # follow  by tacking on middle element if length is odd
    srlen<-length(startrow)
     halfway<-trunc( (srlen/2))
    tmprow[1: halfway] <- startrow[1:halfway] + rev(startrow[(srlen-halfway+1):srlen])
    if ( srlen%%2) tmprow[halfway+1]<-startrow[halfway+1]
    startrow <- as.integer(unlist(strsplit(as.character(tmprow),'')))
    }
as.numeric(paste(startrow,sep='',collapse=''))
}

테스트 : 'john'& 'jane'및 'romeo'& 'juliet'에 유효합니다. 질문 아래 내 의견에 따라

Rgames> problove('john','jane','hates')
[1] 76
Rgames> problove('romeo','juliet','hates')
[1] 61
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.