2P by GN⁺ | ★ favorite | 댓글 1개
  • 아이가 만든 Duplo 기차 트랙이 겉보기에는 닫힌 루프지만, 조각을 억지로 맞춘 상태인지 각도와 위치 조건으로 따져보는 퍼즐임
  • 수학적 판정은 곡선 조각의 좌우 회전 수 차이가 12의 배수인지 확인한 뒤, 각 조각의 변위 벡터 합이 0인지 계산하는 방식임
  • 가장 높은 평가를 받은 해법은 각도 조건은 맞지만 변위 합이 4.5 -3 -2 0.5로 0이 아니어서 응력 없는 루프가 아니라고 계산함
  • 정확히 맞추려면 일부 조각을 제거·추가해야 하며, 단일 조각만 추가한다면 첫 번째 회색 곡선 뒤 등에 2-2 직선 조각을 넣는 방안이 나옴
  • 실제로는 트랙의 평탄성, 이음부의 휨·간격, 기차 주행 중 탈선이나 객차 분리 여부를 함께 보면 무리한 장력인지 판단할 수 있음

Duplo 트랙이 억지로 닫혔는지 판단하기

  • 질문자는 아이들이 만든 Duplo 기차 트랙이 마음에 들었지만, 조각이 과도한 장력을 받아 손상될 가능성이 있는지 확인하고 싶어 함
  • 트랙은 곡선 레일과 직선 레일로 구성됨
    • 도로 건널목은 사실상 직선 레일 1개와 같은 역할로 취급됨
    • 12개의 곡선 레일은 원을 자연스럽게 만들지만, 13개 곡선 레일을 억지로 원형으로 맞추면 트랙에 장력이 생길 수 있음
  • 질문의 초점은 두 가지임
    • 장력 여부를 빠르게 논리적으로 판단하는 방법이 있는지
    • 장력을 줄이려면 조각 1개를 빼거나 더할 때 어느 조각·위치가 나은지

각도 조건: 곡선 조각의 좌우 차이

  • 첫 번째 검사는 각도 불일치 여부임
  • Duplo 곡선 조각 12개가 완전한 원을 만들기 때문에, 왼쪽 곡선 조각 수와 오른쪽 곡선 조각 수의 차이는 12의 배수여야 함
  • 가장 높은 평가를 받은 해법은 교차점에서 시작해 반시계 방향으로 각도를 추적했고, 제시된 배치가 이 조건을 만족한다고 봄
  • 다른 답변도 곡선만 있을 때는 “안쪽으로 휘는 조각 수 - 바깥쪽으로 휘는 조각 수”가 12여야 깔끔하게 맞는다고 정리함
  • 다만 이 조건은 필요조건에 가까워, 만족하더라도 반드시 응력 없는 배치가 되지는 않음

위치 조건: 변위 벡터 합이 0이어야 함

  • 두 번째 검사는 위치 불일치 여부이며, 각 조각의 시작점에서 끝점까지의 변위 벡터를 모두 더해 0이 되는지 확인함
  • 직선 조각 길이를 1로 두면 방향에 따라 직선 조각의 벡터를 계산할 수 있음
    • 각도 0의 직선 0-0(1, 0)
    • 각도 1, 즉 30도의 직선 1-1(cos 30°, sin 30°) = (√3/2, 1/2)
  • 곡선 조각은 직선 조각 길이의 2배인 반지름을 가진 것으로 다룸
    • 0-1 곡선은 (2 sin 30°, 2(1 - cos 30°)) = (1, 2 - √3)
  • 모든 조각 방향의 좌표는 유리수 부분과 √3이 곱해진 유리수 부분으로 나뉘므로, 해법은 이를 4개 숫자 목록으로 표현해 합산함
  • 루프가 장력 없이 닫히려면 각 조각의 4개 숫자를 모두 더한 결과가 네 개의 0이어야 함

계산 결과: 현재 배치는 정확히 닫히지 않음

  • 제시된 배치의 조각들을 모두 더한 결과는 4.5 -3 -2 0.5
  • 실제 변위로 쓰면 (4.5 - 3√3, -2 + 0.5√3)에 해당함
  • 이 값은 0이 아니므로, 해당 배치는 응력 없는 상태가 아님
  • 계산상 이상적인 경로를 그리면 닫힌 루프가 아니라 끝점이 어긋난 형태가 됨
  • 답변은 5개 미만의 조각 조합으로는 이 루프를 완성할 수 없다고 정리함

수정안: 정확한 해법과 단일 조각 추가안

  • 정확히 응력 없는 해법을 만들려면 특정 조각들을 제거하고 다른 조각을 추가해야 함
  • 한 해법은 다음 조합을 사용함
    • 10-9, 9-10, 5-5를 제거
    • 1-1, 8-8을 추가
  • 해법은 3-4 3-4 1-1 8-8 11-11 조합이 필요한 변위를 채운다고 계산함
    • 같은 변위를 만드는 5개 조합이 3개 더 있지만, 곡선 조각 수가 홀수가 되어 각도 불일치를 만든다고 봄
  • 단일 조각만 바꾸는 현실적 수정이라면 2-2 조각을 추가하는 방안이 있음
    • 예시 위치는 첫 번째 회색 곡선 뒤임
  • 더 간단한 정렬 방식으로는 직선 조각을 서로 평행한 쌍으로 두되, 순곡선 6단위만큼 떨어진 반대쪽에 재배치하는 방법이 나옴

빠른 실용 검사: 평탄성, 이음부, 실제 주행

  • 수학 계산 전 먼저 볼 신호는 트랙이 평평하게 놓이는지
    • 억지로 맞춘 루프는 2차원 평면이 아니라 약간 3차원으로 휘어질 수 있음
  • “너무 많은 장력”은 주관적이며, 연결부는 어느 정도의 측면 불일치를 허용하고 루프 전체로 분산할 수 있음
  • 과도한 장력은 이음부에서 드러날 수 있음
    • 일부 연결부가 곧지 않고 휘어 보임
    • 레일 사이 간격이 넓거나 계단처럼 어긋남
    • 손으로 만져 확인할 수 있음
  • 최종적인 실용 테스트는 실제 기차를 달려보는 것임
    • 주행이 꽤 부드럽고 안정적이면 트랙이 그 하중을 현재는 견딜 수 있음
  • 다른 답변은 객차 2~4개를 연결해 달렸을 때 객차가 분리되거나 탈선하면 트랙이 너무 팽팽한 것으로 보는 재미 중심 기준을 제시함

댓글과 토론

Hacker News 의견들
  • Duplo/Lego 질문이 있는데, N개의 1×M 레고로 만들 수 있는 구조물 수를 세는 조합론 문제에 이름이 있는지 궁금함
    자유롭게 회전 가능한 조각은 같은 구조로 봄. 예를 들어 1×2 레고 2개는 배열 수가 2개라고 봄: 위아래가 두 돌기로 연결된 경우, 한 돌기로 연결된 경우. 한 돌기 연결은 270도 이상 자유 회전 가능하므로 좌우 돌기 차이는 회전 대칭을 고려하면 같은 구조가 됨
    제조 공차가 0인 “이상적인” 레고를 가정하고, 불법 조립 기법은 허용하지 않음. 이 문제가 잘 정의되어 있는지, 닫힌 형태의 해가 있는지, 아니면 생성 프로그램이 있는지도 궁금함
    N이 충분히 커지면 회전 자유도가 다른 회전 방향에서는 숨겨져 있던 추가 구조를 만들 수 있어서 생성기가 매우 복잡해질 것 같음

  • 친구와 비슷한 질문을 자주 이야기했음: 고정된 곡선 Duplo 기찻길 세트가 있을 때 서로 다른 폐곡선 선로 배치를 몇 개 만들 수 있는가
    직선 구간은 대체로 무시 가능함. 평행한 루프 양쪽에 한 쌍씩 추가할 수 있기 때문임. 다만 그 패턴을 깨는 흥미로운 삼각형 모양도 있음
    친구는 실제로 해를 찾는 프로그램까지 만들었고, 대체로 잘 동작하면서 흥미로운 배치를 생성했음. 분기기는 끝내 추가하지 못함
    두 선로 배치가 같은지 판별하기 어려운 경우가 많아서 결국 목걸이 문제의 수학으로 이어졌음: https://en.wikipedia.org/wiki/Necklace_problem

  • 면허 있는 기계공학자로서 말하자면, 엄밀히는 선로가 “인장” 상태인 게 아님. 굽힘 상태이고, 인장과 압축이 결합된 것임
    더 설명이 필요하면 이어서 설명 가능함

    • 나는 그걸 “binding”, 즉 조각 사이 이음부가 응력을 받고 힘을 전달한다는 뜻으로 읽었음
    • 그럼 그 코스에 대한 굽힘 모멘트 도표를 그릴 수 있나? :D
  • 링크된 사이트의 Duplo 레일 심층 소개가 더 흥미로웠음
    https://www.cailliau.org/Alphabetical/L/Lego/Duplo/Train/Rai...
    어릴 때 “신형”과 “구형” 검은 Duplo 레일을 둘 다 갖고 있었음. 네 살 때도 구형 검은 레일이 불편했고 신형을 훨씬 더 좋아했던 기억이 남

    • 그게 Weathervane 사용자가 올린 링크인가? 나머지 댓글이 왜 전부 알아볼 수 없는 문자열인지 궁금함
      “gjryir frpgvbaf qb abg znxr na rknpg pvepyr, gurer vf n fznyy bireync, naq fb znxr n pv” 같은 식임
  • 다섯 살 아이가 있어서 BRIO 나무 기찻길을 여러 구성으로 자주 조립함
    아이가 선로를 뻗어나가면 나는 보통 몇 단계 뒤에서 조용히 배치를 손봐서 과도하게 구속되지 않게 만듦. 단순하지만 꽤 재미있는 문제 풀이가 되고, 아이와 시간을 보낼 수 있어서 좋음

    • BRIO 선로가 좋은 점은 다른 플라스틱 선로 세트처럼 집을 어지럽혀 보이게 만들지 않는다는 것임
      보기 좋고 손맛도 좋음. 기차가 느리지만 토크가 높아서 경험에 “질량감” 같은 걸 줌. 크기에 비해 너무 빨리 달리면서 카펫이나 턱에서 버벅이는 많은 원격 조종 장난감과 다름
    • 나도 그렇게 함. 아들과 친구들은 큰 기차 순환선 만드는 걸 좋아함
      나도 좋아하지만 아이들보다 어디에 인장이 걸리는지 조금 더 잘 보여서, 그런 부분을 고치려고 함
    • BRIO 선로는 설계가 잘 되어 있어서 분기기 등을 포함해 수많은 방식으로 조합할 수 있지만, 보통 생기는 틈은 더 짧은 직선 선로 중 하나로 제대로 메울 수 있음
      전체 시스템에서 필요한 직선 선로 길이 종류가 작은 정수 개수에 그친다는 뜻임. 반면 TrackMaster는 훨씬 더 많이 필요함
    • 나는 이제 BRIO 여정을 시작하는 단계임. 아직 세트는 안 샀고 Magnatiles에 빠져 있음
      BRIO 선로를 직접 밀링해 본 사람이 있는지 궁금함. 표준 부품으로는 안 되는 특이한 모양을 만들기 위해서일 수도 있음
      BRIO 선로와 호환되는 바나나 차량 하나는 만들어 봤지만, 선로 제작은 아직 시도하지 않았음
  • 수학적 분석은 더 단순할 수도 있음. 선로 조각마다 2차원 벡터로 보고 모두 더하면 됨. 인장이 없는 배치에서는 합이 (0, 0)이 됨
    인장의 척도로는 위치 불일치가 고르게 분산된다고 가정하고, 모든 벡터의 평균으로 모델링할 수 있음. 따라서 같은 변위라도 조각 수가 적을수록 더 의미가 커짐
    회전을 무시하는 것처럼 보일 수 있지만, 실제로는 포함되어 있음. 선로 조각의 유효 벡터는 현재 방향과 그 조각이 더하는 변위를 함께 나타내기 때문임. 코드로 모델링하면 커서는 방향각과 (x, y) 위치를 가짐
    관련 수학으로는 다각형의 외각 합이 360도라는 사실이 있어서, 360도에서 얼마나 떨어졌는지를 또 다른 척도로 삼을 수 있음. 이 경우에는 유용하지 않지만, 복소해석의 회전수도 떠오름. 곡선을 따라 국소적으로 걸으며 어느 쪽이 “안쪽”인지, 곡선이 특정 점을 몇 번 감는지 이해하는 방법임

    • 정량적인 근거는 없지만, 전체적으로는 순인장이 0이어도 어딘가에 국소 인장이 남을 수 있을 것 같음
      약간 자기교차하는 모양을 만들어 그 구간을 인장 상태로 밀어 넣고, 보완적인 구간은 첫 구간의 음수로 합산되지만 자기교차는 없는 식일 수 있음
    • 다각형 각도 아이디어를 확장하면, 이 선로들은 각각 약 30도 굽힘을 가진 것처럼 보임
      그래서 오른쪽으로 굽는 선로가 왼쪽보다 360/30 = 12개 더 많거나 그 반대여야 함. 세어야 하긴 하지만, 선로를 따라가며 +1 또는 -1을 더하는 데 금방 익숙해질 수 있음. 끝에서 12가 나오면 완벽하고, 12에서의 거리가 인장 추정치가 됨
    • 그게 페이지에 있는 해법과 어떻게 다른가?
  • 다른 StackExchange 포럼들이 좋음. 이런 질문과 거기서 나오는 답변이 훌륭함
    몇 년 동안 항공, 사용자 경험, 수학 쪽에서 멋진 토론을 봤고, 긴 상세 답변에 흥미로운 통찰이 많았음. 몇 시간 전에도 라틴어 쪽 글이 HN에 올라왔음
    하지만 적어도 내게는 Stack Overflow는 더 이상 그렇지 않음. 예전에는 질문도 하고 답변도 했지만 뭔가 바뀌었음. 지나치게 꼼꼼한 중재자들에게 장악된 느낌이 들었고, 이제는 거의 참여하지 않게 됨

  • 위험한 약한 지점은 연결된 선로 중 한쪽의 이음 핀 목 부분이라고 이해함
    Duplo에서는 양쪽 링크에 키 핀과 구멍이 있음. 심하게 어긋난 상태에서는 키 한쪽이 추가적인 측방 압력을 받아 변형되거나 부러질 수 있음
    다만 이런 심한 인장은 마지막 이음부를 억지로 연결하거나 잠그려 할 때 주로 생길 가능성이 큼. 부모가 옆에서 가능한 조립인지 감독하지 않을 때 아이가 시도할 수 있음. 부모가 알아차릴 때는 이미 늦었거나, 성공해서 고칠 필요가 없어졌을 때일 가능성이 큼
    키 목이 부러진다면 그냥 그렇게 될 운명이었던 셈임. 큰일은 아님. 두 번째 키가 여전히 이음부를 유지함. 다만 교훈을 얻지 못하면 그 구간은 더 약한 고리가 됨
    어떻게든 루프로 우겨 넣었다면 좋음, 기관차를 굴리면 됨. 기차 차량이 강제로 벌어진 틈이나 뒤틀린 구간에서 넘어지지 않으면 계속 달리면 되고, 아니면 조정하거나 다시 만들면 됨

  • 어릴 때 선로를 따라가며 세었음. 0에서 시작해서 선로가 왼쪽으로 굽으면 1을 더하고, 오른쪽으로 굽으면 1을 뺐음
    답은 ±12, ±24 같은 값이어야 했음. 12개가 원 하나를 만들기 때문임

    • 이게 왜 참인지 다섯 살에게 설명하듯 알려줄 수 있나?
  • 루프를 끊고 시작 조각과 끝 조각 사이의 오프셋을 보면 인장을 확인할 수 있지 않나 싶음. 표면 마찰이 충분히 낮아서 조각들이 움직일 수 있다는 가정임
    퍼즐 해법으로는 각 조각 종류에 끝 오프셋과 다음 조각의 연결 각도를 배정하고, (0, 0) 좌표에서 시작해 조각들을 순회하면서 마지막 조각 위치를 갱신한 뒤, 시작과 끝 조각 사이 오프셋을 확인하면 됨
    결과는 답변의 이미지처럼 보일 것임. 다만 오프셋을 최소화하도록 선로를 업데이트하는 건 더 어려움

    • “표면 마찰이 충분히 낮다면”이라는 조건에 대해, 우리 집 1층 상당 부분을 차지하는 선로 배치까지 해본 경험으로는 인장 상태의 구간을 열고 전체 선로를 앞뒤로 조금 흔들면 단단한 나무 바닥에서도 더 이완된 상태로 자리 잡는 편임
      그 시점에서 관련 조각을 조정해, 종종 더 커진 틈을 닫을 수 있음. Wallace and Gromit의 The Wrong Trousers 기차 추격 장면 같은 배치였음
    • 그 정도 크기 선로라면 표면 마찰이 전체가 스스로 재정렬될 만큼 낮지는 않을 것 같음
      인장이 있으면 끊은 부분 근처의 선로 끝은 벌어지겠지만, 전체가 움직일 거라고는 상상하기 어려움
    • 맞음. 질문에도 그렇게 할 수 있다고 되어 있음
      “한 조각을 빼서 다시 끼우며 직접 느껴볼 수 있다는 건 압니다”
    • 에어하키 테이블 위에서 조립하면 되나?
      매끄럽고 평평한 바닥에 조립한 뒤 셔플보드 가루를 뿌리는 것도 방법일 듯