업데이트 : 나는 매우 심하게 질문을한다는 것을 알고 있습니다. 여기에 두 번째 실행이 있습니다.Python, Ruby, Haskell (또는 무엇이든)에서 반복 목록
는 다음과 같은 기능을 고려
myList = []
optimumList = []
def findOptimumListItems():
n = 5
for i in range (n + 1):
for j in range (n + 1 - i):
myList.append((i, j, n-i-j))
for i in myList:
win = 0.0
draw = 0.0
for j in myList:
score = 0
if (i[0] > j[0]):
score += 1
if (i[0] == j[0]):
score += 0.5
if (i[1] > j[1]):
score += 1
if (i[1] == j[1]):
score += 0.5
if (i[2] > j[2]):
score += 1
if (i[2] == j[2]):
score += 0.5
if (score == 2):
win += 1
if (score == 1.5):
draw += 1
if (win/(len(myList)-win-draw) > 1.0):
optimumList.append(i)
return optimumList
먼저 내가 목록을 확인하십시오. n = 5의 경우 생성 된 목록은 다음과 같습니다.
[(0, 0, 5), (0, 1, 4), (0, 2, 3), (0, 3, 2), (0, 4, 1),
(0, 5, 0), (1, 0, 4), (1, 1, 3), (1, 2, 2), (1, 3, 1),
(1, 4, 0), (2, 0, 3), (2, 1, 2), (2, 2, 1), (2, 3, 0),
(3, 0, 2), (3, 1, 1), (3, 2, 0), (4, 0, 1), (4, 1, 0),
(5, 0, 0)]
그런 다음이 함수는 목록의 각 요소를 가져 와서 목록 자체와 비교합니다. 이것이 당신이하는 방법입니다 : [3, 1, 1]과 [0, 0, 5]를 비교한다고 가정 해보십시오. 0은 3 점을 잃고 0 점은 1 점을 잃어 포인트가 없으며 1 점은 5 점을 얻는다. 끌기가 0.5 점을 얻으면 승리는 1 점을 얻습니다. 모든 항목에 대해, 승리가 손실보다 많으면 해당 항목은 최적의 것으로 간주되어 최적 목록에 추가됩니다.
N = 5의 경우, 최적의 목록입니다 :
[(0, 2, 3), (0, 3, 2), (1, 1, 3), (1, 2, 2), (1, 3, 1), (2, 0, 3),
(2, 1, 2), (2, 2, 1), (2, 3, 0), (3, 0, 2), (3, 1, 1), (3, 2, 0)]
내 질문은 : 나는 간결 방법으로 위의 기능을 쓸 수 있습니까? 나는 특히 기능적 알고리즘에 관심이있다. 파이썬, 루비, 자바, 하스켈의 답변을 주시면 감사하겠습니다. (말하자면, 어떤 언어로든 깔끔한 해결책이 있다면 괜찮습니다.)
같은 질문을 반복해서 드려 죄송합니다. 나는 원래의 질문이 지저분하고 이해하기 어렵다는 것에 동의한다. 나는 그것이 지금 분명하기를 바란다.
업데이트 (rampion 님의 의견에 따르면) :이 유형 (또는이 유형)에 대한 효율적인 알고리즘이 있습니까?
나는 여전히 혼란 스럽다. 'item_','item_0' 및'item_n'은 무엇입니까? – senderle
정상적인 (파이썬 용) 중첩리스트 구문을 사용하여'myList [0] [0]','myList [0] [1]'등과 같은 것들을 말하면 더 명확해질 것이다. – senderle
다른 항목이 같은 경우 점수가 없습니까? –