JavaScript 변환 함수 작성

6740 단어

예를 들어, 당신은 붐비는 야외 시장을 돌아다니고 있는데, 예모를 쓴 큰 눈의 남자가 당신에게 손을 흔들고 있다.그는 세 개의 컵이 있는 책상 뒤에 서서 공을 가운데 컵 밑에 놓고 컵을 왼쪽으로 돌렸다.그는 좌우 두 개의 컵을 바꾸었다.가운데 컵과 오른쪽 컵, 가운데 컵과 왼쪽 컵.너무 빨라서 너는 따라갈 수 없다.그는 단지 10달러면 공이 어느 컵 안에 있는지 알아맞힐 수 있다고 말했다.만약 네가 맞혔다면, 너는 100달러를 이길 것이다.
너는 네가 이런 기회를 좋아한다고 생각하지만, 너는 확실하지 않다.다행히도 당신은 노트북과 와이파이 신호를 가지고 있습니다.Chrome을 열고 개발자의 도구를 입력하여 JavaScript로 빠르게 계산합니다.
const cups = ['left', 'center', 'right'];
let odds = 1 / cups.length;
let overUnder = 10 / 100;
console.log(odds > overUnder);
너의 승산이 너의 승산보다 크기 때문에 이것은 매우 좋은 노름돈이다.너는 10달러를 지불하고 중앙잔을 선택해라.주사위 없어!왼쪽을 골라야지.너는 계속 놀 수 있지만 함정이 있다.다음 라운드에서 그는 상금을 배로 올릴 것이지만, 너는 반드시 두 번 연속해서 맞혀야 한다.거래의 흡인력을 높이기 위해서, 당신은 5달러만 지불할 수 있습니다.다라운드 경기에서 너의 밑바닥을 찾아내는 것은 좀 까다롭다.한 라운드에서 왼쪽, 중간 또는 오른쪽의 세 가지 가능성이 있다.그런데 두 개는요?매 라운드의 결과를 수조 항목으로 표시합니다.두 번 모두 왼쪽 컵 아래에 있을 가능성이 있어 보인다.
[left, left];
2라운드의 결과는 센터나 우익일 수도 있다.
  [left, left]
  [left, center]
  [left, right]
네가 반드시 두 번 맞혀야 하기 때문에, 1라운드의 결과는 여전히 알 수 없다.그것은 옳을 수도 있고, 중간일 수도 있다.따라서 잠재적인 결과 목록은 다음과 같습니다.
  [left, left]
  [left, center]
  [left, right]
  [center, left]
  [center, center]
  [center, right]
  [right, left]
  [right, center]
  [right, right]
아홉 가지 가능성이 있다.너는 200달러를 얻을 것이며, 총 매입가는 15달러 (5달러에 원래의 10달러) 이다.그래서 너는 너의 개발 도구를 참고할 수 있다.
odds = 1 / 9;
overUnder = 15 / 200;
console.log(odds > overUnder);
가능성은 여전히 너에게 유리하지만, 얼마나 지속됩니까?너는 라운드당 5달러의 가격으로 이 게임을 계속 할 수 있다. 그는 계속 보너스를 배로 받을 것이다.그러나 만약 네가 2라운드에 불합격한다면, 너는 반드시 세 번 연속해서 맞혀야 한다.만약 네가 3라운드에서 실패한다면 네 번이다.어느 라운드의 배상률이 너무 높습니까?



이 문제를 해결하기 위해서, 이 함수는 임의로 주어진 바퀴 수에서 가능한 결과를 출력할 수 있는 변환 함수를 만들어야 합니다.함수를 바꾸어 원소의 모든 변화를 생성합니다.그것들은 사람을 곤혹스럽게 하고 효율이 낮으며 곱하기 O(n!)를 가지고 있다.시간의 복잡성.그러나 그것들은 단어의 완전한 글자 수수께끼 목록 같은 데이터를 얻는 유일한 방법이다.혹은 일련의 컵 기교의 가능성 있는 결과.대형 복잡한 배열에 필요한 급등 시간을 계산하는 것이 암호 안전을 확보하는 이유다.이렇게 많은 변체를 만들어 낼 수 있기 때문에, 설령 속도가 빠른 컴퓨터라도 수주, 심지어 수년의 시간이 걸려서 이 변체들을 모두 소모시킬 수 있다.
텀블러 결과 함수를 만드는 케이스를 만듭니다.
function flipCup(tries) {
  const cups = ['left', 'center', 'right'];
  const outcomeList = [];
  let outcomes = [];
  /**
   * A BUNCH OF LOOPS
   * OR SOMETHING
   **/
  return outcomeList;
}
너는 결국 네가 어떻게 일련의 플러그인 순환을 안배하든지 간에 그것들은 임무를 완성할 수 없다는 것을 깨닫게 될 것이다.너는 반드시 귀속을 사용해야 한다.따라서, 모든 게임 결과의 그룹을 만들기 위해 귀속 함수를 구축하기 시작합니다. 기본적인 상황부터 시작합니다.
function generate(outcome) {
    if (outcome.length === tries) {
      outcomeList.push(outcome);
      return;
    }
}
이 기능은 결과의 가치만 바꿀 뿐이다.그것은 어떤 내용도 되돌려주지 않지만, 어떻게든 리턴 문장을 포함해서 끝내야 한다.현재, 가능한 결과 그룹에서 순환하고, 순환에서 함수를 호출해야 합니다.
for (let i = 0; i < cups.length; i++) {
      outcomes = outcome.concat(cups[i]);
      generate(outcomes);
    }

for 순환을 중첩된 "generate"함수에 넣고 "generate"를 부모flipCup 함수에 넣습니다."generate"를 즉시 호출하고 완성된 그룹을 되돌려줍니다.최종 코드는 다음과 같습니다.
function flipCup(tries) {
  const cups = ['left', 'center', 'right'];
  //parent array
  const outcomeList = [];
  //nested array
  let outcomes = [];
  function generate(outcome) {
    //base case
    if (outcome.length === tries) {
      outcomeList.push(outcome);
      return;
    }
    //loop through cups array, recursively call generate
    for (let i = 0; i < cups.length; i++) {
      outcomes = outcome.concat(cups[i]);
      generate(outcomes);
    }
  }
  generate(outcomes);
  return outcomeList;
}
숫자 3을 함수에 삽입하면 대량의 가능성을 얻을 수 있다.
  [ 'left', 'left', 'left' ],
  [ 'left', 'left', 'center' ],
  [ 'left', 'left', 'right' ],
  [ 'left', 'center', 'left' ],
  [ 'left', 'center', 'center' ],
  [ 'left', 'center', 'right' ],
  [ 'left', 'right', 'left' ],
  [ 'left', 'right', 'center' ],
  [ 'left', 'right', 'right' ],
  [ 'center', 'left', 'left' ],
  [ 'center', 'left', 'center' ],
  [ 'center', 'left', 'right' ],
  [ 'center', 'center', 'left' ],
  [ 'center', 'center', 'center' ],
  [ 'center', 'center', 'right' ],
  [ 'center', 'right', 'left' ],
  [ 'center', 'right', 'center' ],
  [ 'center', 'right', 'right' ],
  [ 'right', 'left', 'left' ],
  [ 'right', 'left', 'center' ],
  [ 'right', 'left', 'right' ],
  [ 'right', 'center', 'left' ],
  [ 'right', 'center', 'center' ],
  [ 'right', 'center', 'right' ],
  [ 'right', 'right', 'left' ],
  [ 'right', 'right', 'center' ],
  [ 'right', 'right', 'right' ]
모두 27개입니다.너는 너의 알고리즘을 다시 한 번 찾아봐라.
let odds = 1 / 27;
let overUnder = 20 / 300;
console.log(odds > overUnder);
초저급은 이미 너의 배상률을 초과했다.이 사기꾼이 돈을 몇 배로 벌었든지 간에 가능한 결과의 지수급 증가에 비하면 여전히 부족하다.너는 돈을 조심하려고 노력하고 있기 때문에 다른 라운드를 하지 않기로 선택했다.

결론:

  • 배열은 사람과 기계에 모두 힘들다
  • 그것들은 곱하기 0(n!)이 있다.시간의 복잡도가 매우 나쁘다
  • 이해하지만 가능한 한 피한다
  • 교환된 총수를 찾으려면 전체 목록이 없는 상황에서 함수를 작성하여 3을 n의 멱으로 끌어올릴 수 있습니다.
  • 어두운 광희절 껍질 벗기는 자에게 너의 돈을 주지 마라
  • 좋은 웹페이지 즐겨찾기