用元素拼写单词
前几天,我的任务是为我的家人制作每周测验。我决定最好做一个由10个单词组成的部分,这些单词是用化学元素的符号拼写的。问题将显示为元素名称列表,如下所示。
BariumCarbonPotassiumTungstenArgonDarmstadtium
这按以下方式分解为元素符号。
Barium = Ba Carbon = C Potassium = K Tungsten = W Argon = Ar Darmstadtium = Ds
把所有这些放在一起,我们拼出一个词。
BaCKWArDs
向后!
在考虑了我可以使用哪些词之后,我决定编写一个对我有帮助的程序。测验中的问题没有很好地解决,但我想我会把我使用的代码放在这里。
我做的第一件事是设置一个元素数组,我可以用它来比较单词的各个部分。
$elements = [ 'H' => 'Hydrogen', 'He' => 'Helium', 'Li' => 'Lithium', 'Be' => 'Beryllium', 'B' => 'Boron', 'C' => 'Carbon', //等等... ];
下一步是创建一个函数,该函数接收一个单词和元素数组,以确定是否可以使用元素符号来拼写该单词。
/** * Given a word, match elements in order to spell it. * * @param string $word * The word to match. * @param array $elements * The list of elements to match against. * * @return array * An array of matched elements that spell the word. */ function spellWordWithElements($word, $elements) { $solution = []; $wordArray = str_split($word); for ($i = 0; $i < count($wordArray); $i++) { $found = FALSE; if (!$found && isset($wordArray[$i + 1])) { //尝试匹配两个字符。 $dual = $wordArray[$i] . $wordArray[$i + 1]; foreach ($elements as $element => $name) { if ($dual == strtolower($element)) { //找到匹配。 $solution[] = $element; $found = TRUE; $i++; } } } if (!$found) { //如果未找到匹配项,则尝试单个 //字符匹配。 foreach ($elements as $element => $name) { if ($wordArray[$i] == strtolower($element)) { $solution[] = $element; $found = TRUE; } } } } //如果解决方案与原始单词匹配,那么我们发现 //正确的匹配。 if ($word == strtolower(implode($solution))) { return $solution; } return []; }
该函数通过循环遍历给定单词中的字母并尝试将它们与元素数组匹配来工作。因为有些元素有一个字母,有些元素有两个字母,所以首先需要比较两个字母元素,如果没有找到,则循环遍历单个字母元素。然后进行最终检查以确保找到的数组与原始单词相同,但情况可能并非总是如此。
该函数按照拼出单词所需的顺序返回所找到元素的数组。例如,单词“backwards”将返回以下数组。
Array ( [0] => Ba [1] => C [2] => K [3] => W [4] => Ar [5] => Ds )
为了以有用的方式打印数据,我们执行以下操作。
$elementWord = spellWordWithElements('backwards', $elements); foreach ($elementWord as $element) { $symbolString .= $element; $elementString .= $elements[$element] . ' '; } echo $word . ' = ' . $symbolString . ' = ' . $elementString;
这打印出来。
backwards=BaCKWArDs=BariumCarbonPotassiumTungstenArgonDarmstadtium
以下是此功能的更多示例。
accurate = AcCuRaTe = Actinium Copper Radium Tellurium attention = AtTeNTiON = Astatine Tellurium Nitrogen Titanium Oxygen Nitrogen championship = CHAmPIONSHIP = Carbon Hydrogen Americium Phosphorus Iodine Oxygen Nitrogen Sulfur Hydrogen Iodine Phosphorus click = ClICK = Chlorine Iodine Carbon Potassium connection = CoNNeCTiON = Cobalt Nitrogen Neon Carbon Titanium Oxygen Nitrogen essential = EsSeNTiAl = Einsteinium Selenium Nitrogen Titanium Aluminium generation = GeNeRaTiON = Germanium Neon Radium Titanium Oxygen Nitrogen newspaper = NeWSPaPEr = Neon Tungsten Sulfur Protactinium Phosphorus Erbium profession = PrOFeSSiON = Praseodymium Oxygen Iron Sulfur Silicon Oxygen Nitrogen research = ReSeArCH = Rhenium Selenium Argon Carbon Hydrogen satisfaction = SAtISFAcTiON = Sulfur Astatine Iodine Sulfur Fluorine Actinium Titanium Oxygen Nitrogen teaspoon = TeAsPoON = Tellurium Arsenic Polonium Oxygen Nitrogen virus = VIrUS = Vanadium Iridium Uranium Sulfur wolves = WOLvEs = Tungsten Oxygen Livermorium Einsteinium
这些词是通过输入常用词列表并选择一些看起来更有趣的词来找到的。