(aa จะเป็นหนึ่งในหลาย ๆ bb จะไม่)
ฉันคิดว่ามันจะเป็น 10! / 8! แต่เห็นได้ชัดว่าฉันกำลังทำอะไรผิด ทุกคนสามารถช่วยฉันออกเพราะฉันนิ่งงัน
(aa จะเป็นหนึ่งในหลาย ๆ bb จะไม่)
ฉันคิดว่ามันจะเป็น 10! / 8! แต่เห็นได้ชัดว่าฉันกำลังทำอะไรผิด ทุกคนสามารถช่วยฉันออกเพราะฉันนิ่งงัน
คำตอบ:
คุณมี 6 ตัวอักษรที่แตกต่างกัน: a, b, c, d, e, f ซึ่งคุณสามารถสร้าง 6 x 5 = 30 คำด้วยตัวอักษรที่แตกต่างกันสองตัว นอกจากนี้คุณสามารถสร้าง 3 คำ aa, cc, dd ด้วยตัวอักษรเดียวกันสองครั้ง ดังนั้นจำนวนคำทั้งหมดคือ 30 + 3 = 33
ทางเลือกของวิธีการของ Zahava: มีวิธีในการจับคู่สองตัวอักษร af แต่มีไม่ได้ 2 B, E หรือ F ตัวอักษรเพื่อให้ "บีบี", "จ" และ "FF" จะไม่ได้ทำให้จำนวนคำ36 - 3 = 33
วิธีที่คุณพยายามเข้าถึงปัญหาดูเหมือนจะเพิกเฉยต่อความจริงที่ว่าไม่มีตัวอักษรที่แตกต่างกัน 10 ตัว หากคุณมี 10 ตัวอักษรที่แตกต่างกันแล้วคำตอบของคุณจะถูกต้อง
หากคุณไม่สามารถให้เหตุผลได้ด้วยวิธีที่ "ฉลาด" มักจะคุ้มค่าที่จะลองใช้กำลังดุร้าย ลองนึกภาพพยายามจดรายการคำที่เรียงตามตัวอักษรของคำทั้งหมดที่คุณสามารถทำได้
สามารถเริ่มต้นด้วย "A" ได้กี่รายการ ทว่า "A" สามารถตามด้วย A, B, C, D, E หรือ F ได้นั่นคือหกวิธี
สามารถเริ่มต้นด้วย "B" ได้กี่รายการ ที่สามารถตามด้วย A, C, D, E หรือ F ซึ่งเป็นเพียงห้าวิธีเนื่องจากไม่มี "B" ที่สอง
สามารถเริ่มต้นด้วย "C" ได้กี่รายการ เนื่องจาก "C" ปรากฏขึ้นสามครั้งในรายการของคุณจึงสามารถติดตามได้ด้วยตัวเองหรือตามตัวอักษรห้าตัวอื่น ๆ ดังนั้นเช่นเดียวกับ "A" มีหกวิธี โปรดทราบว่าเราไม่ได้รับวิธี "พิเศษ" ใด ๆ เพียงเพราะ "C" ปรากฏมากกว่าเวลา "A" สิ่งที่เกินกว่าลักษณะที่สองคือซ้ำซ้อน
หวังว่าเป็นที่ชัดเจนว่าตัวอักษรแต่ละตัวที่ปรากฏเพียงครั้งเดียวในรายการของคุณสามารถปรากฏที่จุดเริ่มต้นของห้าคำและตัวอักษรที่ปรากฏสองครั้งหรือมากกว่านั้นสามารถปรากฏที่จุดเริ่มต้นของหกคำ ตัวอักษรที่ปรากฏเพียงครั้งเดียวคือ "B", "E" และ "F" ซึ่งแต่ละตัวสามารถอยู่ที่จุดเริ่มต้นของคำห้าคำดังนั้นจึงทำให้ 5 + 5 + 5 = 15 คำ ตัวอักษรที่ปรากฏขึ้นสองครั้งหรือมากกว่านั้นคือ "A", "C" และ "D" ซึ่งแต่ละตัวสามารถอยู่ที่จุดเริ่มต้นของคำหกคำดังนั้นจึงทำให้ 6 + 6 + 6 = 18 คำ ทั้งหมดมี 15 + 18 = 33 คำ
นี่เป็นวิธีที่ยืดยาวกว่าวิธีอื่น ๆ แต่โดยการลองคิดถึงคำตอบในวิธีที่เป็นระบบนี้คุณอาจจะสามารถ "มองเห็น" หนึ่งในวิธีที่เร็วกว่า
โปรดทราบว่าถ้าเรื่องนี้ได้รับการเรียบเรียงเป็นคำถามที่น่าจะเป็นความชอบครั้งแรกของคุณอาจจะได้รับการวาดออกมาเป็นแผนภาพต้นไม้ มันจะเริ่มต้นด้วยหกกิ่งสำหรับตัวอักษรตัวแรก แต่สำหรับตัวอักษรตัวที่สองจะมีหกกิ่งออกมาจาก "A", "C" และ "D" (เพราะพวกเขาสามารถตามด้วยตัวอักษรหกตัวใดก็ได้) แต่มีเพียงห้าสาขาที่ออกมาจาก "B", "E" และ "F" (เพราะพวกเขาไม่สามารถติดตามได้ด้วยตนเอง) รูปแบบการแตกแขนงนี้มีประสิทธิภาพเช่นเดียวกับคำตอบของฉัน แต่คุณอาจต้องการที่จะมองเห็นมันในต้นไม้มากขึ้น
จากมุมมองทางคณิตศาสตร์การแก้ปัญหาคือชุดขององค์ประกอบของผลิตภัณฑ์คาร์ทีเซียนระหว่างรายการและตัวเองเมื่อลบเส้นทแยงมุม คุณสามารถแก้ปัญหานี้โดยใช้อัลกอริทึมนี้:
ชุดคือชุดของวัตถุที่แตกต่างกันดังนั้นวัตถุจะไม่ถูกทำซ้ำ
from itertools import product
import numpy as np
letters = list("aabcccddef")
cartesianproduct = np.array(["".join(i) for i in product(letters,letters)]).reshape(10,10)
cartesianproduct
Out :
array([['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bb', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ee', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe', 'ff']],
dtype='|S2')
เราลบเส้นทแยงมุม
diagremv = np.array([ np.delete(arr,index) for index,arr in enumerate(cartesianproduct)])
diagremv
array([['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
['ba', 'ba', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ef'],
['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe']],
dtype='|S2')
เราคำนวณความยาวของชุดองค์ประกอบ:
len(set(list(diagremv.flatten())))
Out: 33
ฉันคิดว่าเหตุผลที่บางคนคิดว่าคำถามนั้นไม่ชัดเจนเพราะมันใช้คำว่า "คำ 2 ตัวอักษร" เมื่อวิธีที่ทุกคนเข้าหาโซลูชันพวกเขาทั้งหมดตีความ "คำ 2 ตัวอักษร" เพื่อแปลความหมายเช่น "ตัวอักษรคู่" ในฐานะผู้เล่น Scrabble ตัวยงฉันจึงถามคำถามโดยทันทีว่า "มีตัวอักษร 2 ตัวที่ถูกต้องตามกฎหมายจากจดหมายเหล่านี้กี่ตัว?" และว่าคำตอบคือ - 12! อย่างน้อยตามเวอร์ชั่นล่าสุดของพจนานุกรม Scrabble Players Dictionary (OSPD5) ฉบับล่าสุด คำคือ aa, ab, ad, ae, ba, be, da, de, ed, ef, fa, และ fe (โปรดจำไว้ว่าความจริงที่ว่าคุณไม่เคยได้ยินคำศัพท์เหล่านี้จำนวนมากไม่ส่งผลต่อความถูกต้องของพวกเขา!); o)
แค่ "ความรู้สึก 2" ของฉัน
วิธีการนับอื่นที่ไม่มีแรงเดรัจฉาน:
หากตัวอักษรตัวแรกคือ a, c หรือ d มีตัวเลือกที่เหลืออยู่ 6 ตัวเลือกที่ชัดเจนสำหรับตัวอักษรตัวที่สอง
แต่ถ้าตัวอักษรตัวแรกคือ b, e หรือ f มีเพียง 5 ตัวเลือกที่เหลือสำหรับจดหมายฉบับที่สอง
ดังนั้นจึงมี คำสองตัวอักษรที่แตกต่างกัน
มีปัญหาในวิธีที่คุณถามคำถาม การกระทำใดที่ได้รับอนุญาตในบรรทัด "aabcccddef" เพื่อใช้คำ 2 ตัวอักษร? เราสามารถแทนที่อันหลังหรือข้ามสิ่งที่ไม่จำเป็นได้หรือไม่? ฉันพบคำตอบที่เป็นไปได้สองข้อขึ้นอยู่กับเงื่อนไขนี้:
1) เราสามารถแทนที่ตัวอักษรในวิธีใดก็ได้คำตอบเป็น 33 ตามที่ได้กล่าวไว้ก่อนหน้านี้ ตัวอักษรที่ต่างกัน 30 คู่ (6 * 5) และตัวอักษรที่คล้ายกัน 3 คู่
2) หากเราไม่สามารถเปลี่ยนตำแหน่งของตัวอักษรและข้ามได้เพียงอย่างเดียวเราจะได้คำตอบน้อยกว่ามาก ลองนับตั้งแต่ต้นจนจบ เริ่มต้นด้วย "a" เรามีตัวอักษร 6 ตัวให้เป็นตัวที่สองเริ่มต้นด้วย "b" แค่ 4 "c" ก็มี 4, "d" - 3 และ "e" - 1 นั่นคือ 18 ทั้งหมด
คำตอบสำหรับคำถามของฉัน: คุณสามารถได้คำสองคำจาก aabcccddef ได้กี่คำ
* // ประเด็นคือคำถามที่อ่านว่า "คำ" ไม่ใช่การรวมกันของคู่ การใช้คำที่ตัวอักษรจะต้องปรากฏสองครั้งเพื่อใช้คำมากกว่าหนึ่งครั้งตัวอย่างเช่นมีตัวอักษร 'a' สองตัวและสองตัวอักษร 'd' ดังนั้นจึงเป็นไปได้ที่จะเขียน 'ad' เป็นคำสองครั้ง
[self-study]
แท็กและอ่านของวิกิพีเดีย