모리바사 소설 속 문제를 루비로 해결했다
12675 단어 Ruby
열흘째는 @Yuki-Inoue씨가 쓴'Daru에 대한 상세 설명: Index, Vector, 데이터 Frame에 대한 데이터 구조입니다.
다만 "수학 문제를 루비로 해결했다"는 기사가 나왔다.
잘못 붙인 것 같지만 달력이 하늘밖에 없어서 미끄러져 들어갔어요.
의사 일정
개요
웃지 않는 수학자 MATHMATICAL GOODBYE -
센보사 저 1996년 9월 강담사 간행물
천재수학자 천왕사 박사가 작품에서 수학 문제를 제기하다.
극중 답을 밝히지 않아 이야기는 끝났다.
읽은 후에 나는 그 문제에 도전했지만 결국 수학을 열심히 배워서 몇 년 동안 풀지 못했다.
하지만 그간 배운 루비를 이용해 드디어 답을 찾았기 때문에 이번에는 기사를 써봤다.
답은 마지막이며, 시간이 있는 사람은 스스로 해답을 시도해 볼 수 있다책을 손에 들고 좀 보아라.
별말이지만 루비는 아무렇게나 쓸 수 있는 느낌을 좋아한다.나와 동갑인 곳도 괜찮다.형제object.c나랑 같은 날 태어났어.나는 언제 너에게 보양을 해 주고 싶다.
루비이스트 님께서'더 짧게 써도 돼요!'"이게 뭐냐, 그 비주얼 코드는"이라고 토로해 주세요.잡담이 끝나다.
문제.
"그럼 질문 하나 더 할게요. 당구 다섯 개를 진주 목걸이처럼 반지에 연결해 주세요.
옥에는 각각 번호가 쓰여 있다.그러면 이 다섯 개의 공 중 몇 개를 뽑을 수 있지만 인접한 연속구만 뽑을 수 있다.하나, 둘, 다섯 개 다 돼요.하지만 멀리 있는 물건은 찾을 수 없어요.
이 조건에서 얻은 옥의 번호를 더하면 1부터 21까지의 모든 수량이 될 수 있다고 생각합니다.그렇다면 어떤 번호의 옥을 어떻게 배열해서 목걸이를 만들면 좋을까요?
※ 당구의 디지털 볼은 1~15종
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
각본
나는 내가 알고 있는 루비의 문법(극소수)을 활용하여 상술한 문제를 해결하는 스크립트를 썼다.
몇 가지 답이 나왔지만 귀찮아서 그냥 같은 배열을 보여줬어요.답은 똑같을 거야.반대로 배열 패턴을 넣으면 두 개가 되겠죠.
15부터 5순까지 모든 조합을 만들어 1-21의 숫자를 만들 수 있는지 판정한다.무력으로 해결하다.
mathematical_goodbye.rb
# ビリヤードの数字球は1-15
billiard_ball = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
# [f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f]
# 22個のフラグ(可読性の為に22個用意、0番目は未使用)
# 5つのビリヤード球から1を作れたら1番目をtに、15を作れたら15番目をtに…
generated = Array.new(22, false)
# [f,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t]
# 1-21の数字を作れた場合の22個のフラグの状態。
# 最終的にgeneratedとの比較に使用する。
# 0番目のみがfになっている
goal = Array.new(22, true)
goal[0] = false
# 15球から5つを選んだ場合の順列、全ての組み合わせに対して
billiard_ball.to_a.permutation(5).to_a.each do |combination|
# インデックス0,1,2,3,4
(0..4).each do |n|
# 数字球1つによる数字のフラグをtに
generated[ combination[n] ] = true
# 数字球2つ〃
# 配列インデックスにおいて0未満を指定すると配列末尾にアクセス
generated[ combination[n-1] + combination[n] ] = true
# 数字球3つ〃
generated[ combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球4つ〃
generated[ combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球5つ〃
generated[ combination[n-4] + combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
end
# 1-21を作れた場合、その順列を表示
p combination if generated == goal
# フラグを初期化 - すべてがFになる(笑
generated = Array.new(22, false)
end
사고의 방향
여기서 루비를 벗어나면 관심 없는 사람이 쏘기 때문이다답안.
중도를 고려해 포기하는 부분을 설명하겠다.
문제문을 읽고 필수적인 옥, 배제할 수 있는 옥 등을 열거하며 조합을 축소했다.상세한 해설을 알고 싶은 사람옛 격식이 얻을 수 있다면 수학적으로 답을 도출할 수 있는 기사를 찾을 수 있을 것이다.
1. 규칙에 따라 만들 수 있는 숫자의 종류는 21가지이다
한 옥...5종, 인접한 연속 2개...5종, 인접한 연속 3개...5종, 인접한 연속 4개...5종, 5옥...1종
따라서 1~21씩 한 조씩 만들어야 한다.
2. 1 과 2가 있어야 합니다.
1과 2는 숫자구로 조합할 수 없다.그러므로使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11,12,13,14,15」
3. 공 5개를 뽑았을 때 가장 큰 숫자는 21이다.
1과 2는 이미 확정되었기 때문에 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 중 3개를 선택한다.
이 세 개는 총계 21-1-2=18이다.
12를 선택했다면 나머지 2개는 어느 팀 3개를 선택했는지 총 18개가 넘는다.따라서 12를 제외한다.
같은 이유로 13, 14, 15도 제외했다.그러므로使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11」
그리고 촌스러움...
3, 4, 5, 6, 7, 8, 9, 10, 11 중 3개를 선택해 총 18개로 구성했다.
이를 만족시키는 조합은:(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8), (5,6,7)
(이 세 공에 1,2.)
그중 (5,6,7)
4를 만들 수 없기 때문에 제외
나머지 조합은요.(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
여기에 3이 포함된 4조, 1, 2는 인접할 수 없다(∵3이 되어 이미 있는 3개의 공과 중복된다)
또한 4가 포함된 두 그룹은 1, 2와 인접해야 한다(∵3을 만들기 위해)(3,4,11)
이러한 조건을 동시에 충족할 수 없으므로 제외
따라서 축소(3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
할 수 있다.
숫자구 한두 개를 더하다(1,2,3,5,10), (1,2,3,6,9), (1,2,3,7,8), (1,2,4,5,9), (1,2,4,6,8)
되다
여기에 투항합니다!\(^o^)/
이 정도면 나머지는 종이와 연필로도 힘을 쓸 수 있다?
난 못해.
말하자면 그룹 문제가 잘 해결된다면 이런 지루한 말을 쓸 필요가 없을지도 모른다.
천왕사 박사서천 선생님에게 해법을 알려주세요.
그나저나 지금까지 사용한 당구는 1, 2
과3,4,5,6,7,8,9,10から3つ
로, 스크립트billiard_ball
에서 11개 이상의 숫자를 삭제하면 계산량을 줄여 컴퓨터를 편하게 할 수 있다.
답안
(1, 3, 10, 2, 5)
(1, 5, 2, 10, 3)
각 숫자의 취법을 생략하다.
끝맺다
올해가 사회 첫해였고 익숙하지 않은 부분도 있었다. 이렇게 여유롭게 advent callendar에 투고할 수 있어서 한숨 돌렸다.
새해 복 많이 받으세요!2019년에도 좋은 해가 됐으면 좋겠다.
그럼 신원호를 일찍 알고 싶군요!원림그럼 어떡해.
Reference
이 문제에 관하여(모리바사 소설 속 문제를 루비로 해결했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tachiyama/items/c7faf3cc2029a10a1cd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"그럼 질문 하나 더 할게요. 당구 다섯 개를 진주 목걸이처럼 반지에 연결해 주세요.
옥에는 각각 번호가 쓰여 있다.그러면 이 다섯 개의 공 중 몇 개를 뽑을 수 있지만 인접한 연속구만 뽑을 수 있다.하나, 둘, 다섯 개 다 돼요.하지만 멀리 있는 물건은 찾을 수 없어요.
이 조건에서 얻은 옥의 번호를 더하면 1부터 21까지의 모든 수량이 될 수 있다고 생각합니다.그렇다면 어떤 번호의 옥을 어떻게 배열해서 목걸이를 만들면 좋을까요?
※ 당구의 디지털 볼은 1~15종
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
각본
나는 내가 알고 있는 루비의 문법(극소수)을 활용하여 상술한 문제를 해결하는 스크립트를 썼다.
몇 가지 답이 나왔지만 귀찮아서 그냥 같은 배열을 보여줬어요.답은 똑같을 거야.반대로 배열 패턴을 넣으면 두 개가 되겠죠.
15부터 5순까지 모든 조합을 만들어 1-21의 숫자를 만들 수 있는지 판정한다.무력으로 해결하다.
mathematical_goodbye.rb
# ビリヤードの数字球は1-15
billiard_ball = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
# [f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f]
# 22個のフラグ(可読性の為に22個用意、0番目は未使用)
# 5つのビリヤード球から1を作れたら1番目をtに、15を作れたら15番目をtに…
generated = Array.new(22, false)
# [f,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t]
# 1-21の数字を作れた場合の22個のフラグの状態。
# 最終的にgeneratedとの比較に使用する。
# 0番目のみがfになっている
goal = Array.new(22, true)
goal[0] = false
# 15球から5つを選んだ場合の順列、全ての組み合わせに対して
billiard_ball.to_a.permutation(5).to_a.each do |combination|
# インデックス0,1,2,3,4
(0..4).each do |n|
# 数字球1つによる数字のフラグをtに
generated[ combination[n] ] = true
# 数字球2つ〃
# 配列インデックスにおいて0未満を指定すると配列末尾にアクセス
generated[ combination[n-1] + combination[n] ] = true
# 数字球3つ〃
generated[ combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球4つ〃
generated[ combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球5つ〃
generated[ combination[n-4] + combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
end
# 1-21を作れた場合、その順列を表示
p combination if generated == goal
# フラグを初期化 - すべてがFになる(笑
generated = Array.new(22, false)
end
사고의 방향
여기서 루비를 벗어나면 관심 없는 사람이 쏘기 때문이다답안.
중도를 고려해 포기하는 부분을 설명하겠다.
문제문을 읽고 필수적인 옥, 배제할 수 있는 옥 등을 열거하며 조합을 축소했다.상세한 해설을 알고 싶은 사람옛 격식이 얻을 수 있다면 수학적으로 답을 도출할 수 있는 기사를 찾을 수 있을 것이다.
1. 규칙에 따라 만들 수 있는 숫자의 종류는 21가지이다
한 옥...5종, 인접한 연속 2개...5종, 인접한 연속 3개...5종, 인접한 연속 4개...5종, 5옥...1종
따라서 1~21씩 한 조씩 만들어야 한다.
2. 1 과 2가 있어야 합니다.
1과 2는 숫자구로 조합할 수 없다.그러므로使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11,12,13,14,15」
3. 공 5개를 뽑았을 때 가장 큰 숫자는 21이다.
1과 2는 이미 확정되었기 때문에 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 중 3개를 선택한다.
이 세 개는 총계 21-1-2=18이다.
12를 선택했다면 나머지 2개는 어느 팀 3개를 선택했는지 총 18개가 넘는다.따라서 12를 제외한다.
같은 이유로 13, 14, 15도 제외했다.그러므로使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11」
그리고 촌스러움...
3, 4, 5, 6, 7, 8, 9, 10, 11 중 3개를 선택해 총 18개로 구성했다.
이를 만족시키는 조합은:(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8), (5,6,7)
(이 세 공에 1,2.)
그중 (5,6,7)
4를 만들 수 없기 때문에 제외
나머지 조합은요.(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
여기에 3이 포함된 4조, 1, 2는 인접할 수 없다(∵3이 되어 이미 있는 3개의 공과 중복된다)
또한 4가 포함된 두 그룹은 1, 2와 인접해야 한다(∵3을 만들기 위해)(3,4,11)
이러한 조건을 동시에 충족할 수 없으므로 제외
따라서 축소(3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
할 수 있다.
숫자구 한두 개를 더하다(1,2,3,5,10), (1,2,3,6,9), (1,2,3,7,8), (1,2,4,5,9), (1,2,4,6,8)
되다
여기에 투항합니다!\(^o^)/
이 정도면 나머지는 종이와 연필로도 힘을 쓸 수 있다?
난 못해.
말하자면 그룹 문제가 잘 해결된다면 이런 지루한 말을 쓸 필요가 없을지도 모른다.
천왕사 박사서천 선생님에게 해법을 알려주세요.
그나저나 지금까지 사용한 당구는 1, 2
과3,4,5,6,7,8,9,10から3つ
로, 스크립트billiard_ball
에서 11개 이상의 숫자를 삭제하면 계산량을 줄여 컴퓨터를 편하게 할 수 있다.
답안
(1, 3, 10, 2, 5)
(1, 5, 2, 10, 3)
각 숫자의 취법을 생략하다.
끝맺다
올해가 사회 첫해였고 익숙하지 않은 부분도 있었다. 이렇게 여유롭게 advent callendar에 투고할 수 있어서 한숨 돌렸다.
새해 복 많이 받으세요!2019년에도 좋은 해가 됐으면 좋겠다.
그럼 신원호를 일찍 알고 싶군요!원림그럼 어떡해.
Reference
이 문제에 관하여(모리바사 소설 속 문제를 루비로 해결했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tachiyama/items/c7faf3cc2029a10a1cd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# ビリヤードの数字球は1-15
billiard_ball = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
# [f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f]
# 22個のフラグ(可読性の為に22個用意、0番目は未使用)
# 5つのビリヤード球から1を作れたら1番目をtに、15を作れたら15番目をtに…
generated = Array.new(22, false)
# [f,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t]
# 1-21の数字を作れた場合の22個のフラグの状態。
# 最終的にgeneratedとの比較に使用する。
# 0番目のみがfになっている
goal = Array.new(22, true)
goal[0] = false
# 15球から5つを選んだ場合の順列、全ての組み合わせに対して
billiard_ball.to_a.permutation(5).to_a.each do |combination|
# インデックス0,1,2,3,4
(0..4).each do |n|
# 数字球1つによる数字のフラグをtに
generated[ combination[n] ] = true
# 数字球2つ〃
# 配列インデックスにおいて0未満を指定すると配列末尾にアクセス
generated[ combination[n-1] + combination[n] ] = true
# 数字球3つ〃
generated[ combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球4つ〃
generated[ combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
# 数字球5つ〃
generated[ combination[n-4] + combination[n-3] + combination[n-2] + combination[n-1] + combination[n]] = true
end
# 1-21を作れた場合、その順列を表示
p combination if generated == goal
# フラグを初期化 - すべてがFになる(笑
generated = Array.new(22, false)
end
여기서 루비를 벗어나면 관심 없는 사람이 쏘기 때문이다답안.
중도를 고려해 포기하는 부분을 설명하겠다.
문제문을 읽고 필수적인 옥, 배제할 수 있는 옥 등을 열거하며 조합을 축소했다.상세한 해설을 알고 싶은 사람옛 격식이 얻을 수 있다면 수학적으로 답을 도출할 수 있는 기사를 찾을 수 있을 것이다.
1. 규칙에 따라 만들 수 있는 숫자의 종류는 21가지이다
한 옥...5종, 인접한 연속 2개...5종, 인접한 연속 3개...5종, 인접한 연속 4개...5종, 5옥...1종
따라서 1~21씩 한 조씩 만들어야 한다.
2. 1 과 2가 있어야 합니다.
1과 2는 숫자구로 조합할 수 없다.그러므로
使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11,12,13,14,15」
3. 공 5개를 뽑았을 때 가장 큰 숫자는 21이다.
1과 2는 이미 확정되었기 때문에 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 중 3개를 선택한다.
이 세 개는 총계 21-1-2=18이다.
12를 선택했다면 나머지 2개는 어느 팀 3개를 선택했는지 총 18개가 넘는다.따라서 12를 제외한다.
같은 이유로 13, 14, 15도 제외했다.그러므로
使用する玉「1,2,?,?,?」
残りの玉「3,4,5,6,7,8,9,10,11」
그리고 촌스러움...
3, 4, 5, 6, 7, 8, 9, 10, 11 중 3개를 선택해 총 18개로 구성했다.
이를 만족시키는 조합은:
(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8), (5,6,7)
(이 세 공에 1,2.)그중
(5,6,7)
4를 만들 수 없기 때문에 제외나머지 조합은요.
(3,4,11), (3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
여기에 3이 포함된 4조, 1, 2는 인접할 수 없다(∵3이 되어 이미 있는 3개의 공과 중복된다)또한 4가 포함된 두 그룹은 1, 2와 인접해야 한다(∵3을 만들기 위해)
(3,4,11)
이러한 조건을 동시에 충족할 수 없으므로 제외따라서 축소
(3,5,10), (3,6,9), (3,7,8), (4,5,9), (4,6,8)
할 수 있다.숫자구 한두 개를 더하다
(1,2,3,5,10), (1,2,3,6,9), (1,2,3,7,8), (1,2,4,5,9), (1,2,4,6,8)
되다여기에 투항합니다!\(^o^)/
이 정도면 나머지는 종이와 연필로도 힘을 쓸 수 있다?
난 못해.
말하자면 그룹 문제가 잘 해결된다면 이런 지루한 말을 쓸 필요가 없을지도 모른다.
천왕사 박사서천 선생님에게 해법을 알려주세요.
그나저나 지금까지 사용한 당구는
1, 2
과3,4,5,6,7,8,9,10から3つ
로, 스크립트billiard_ball
에서 11개 이상의 숫자를 삭제하면 계산량을 줄여 컴퓨터를 편하게 할 수 있다.답안
(1, 3, 10, 2, 5)
(1, 5, 2, 10, 3)
각 숫자의 취법을 생략하다.
끝맺다
올해가 사회 첫해였고 익숙하지 않은 부분도 있었다. 이렇게 여유롭게 advent callendar에 투고할 수 있어서 한숨 돌렸다.
새해 복 많이 받으세요!2019년에도 좋은 해가 됐으면 좋겠다.
그럼 신원호를 일찍 알고 싶군요!원림그럼 어떡해.
Reference
이 문제에 관하여(모리바사 소설 속 문제를 루비로 해결했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tachiyama/items/c7faf3cc2029a10a1cd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
올해가 사회 첫해였고 익숙하지 않은 부분도 있었다. 이렇게 여유롭게 advent callendar에 투고할 수 있어서 한숨 돌렸다.
새해 복 많이 받으세요!2019년에도 좋은 해가 됐으면 좋겠다.
그럼 신원호를 일찍 알고 싶군요!원림그럼 어떡해.
Reference
이 문제에 관하여(모리바사 소설 속 문제를 루비로 해결했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tachiyama/items/c7faf3cc2029a10a1cd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)