??xml version="1.0" encoding="utf-8" standalone="yes"?>
庯曎ͼ(x)“克明得?#8221;大甲曎ͼ(x)“諟天之明命?#8221;帝典曎ͼ(x)“克明dd?#8221;皆自明也?/font>
汤之盘铭曎ͼ(x)“苟日斎ͼ日日斎ͼ又日新?#8221;庯曎ͼ(x)“作新民?#8221;诗曰Q?#8220;周虽旧邦Q其命惟新?#8221;是故君子无所不用其极?/font>
庯_(d)(x)“能够弘扬光明的品得?#8221;太甲_(d)(x)“念念不忘q上天赋予的光明性?#8221;典_(d)(x)“能够弘扬崇高的品得?#8221;q些都是说要自己弘扬光明正大的品得?/font>
商汤王刻在ʎ盆上的箴a_(d)(x)“如果能够有一天自斎ͼ应保持天天自新Q永q不断自新?#8221;庯中说Q?#8220;鼓励Z弃旧图新?#8221;诗经中说Q?#8220;周朝虽然是古老的国家Q但却禀受了(jin)天命Q自我更新?#8221;所以,品d高尚的h无处不追求完善?/font>
软g开发乃至IT行业的更新速度极快Q今天出个JAVAQ明天出?netQ后天又来个什么ruby。所以咱们要不断的学?fn),不断的进步才能跟上技术的更新速度Q才能不被淘汰?/font>
但什么叫自新Q这个自C是说今天Z(jin)JAVAQ呼啦呼啦的全买thinking in javaM(jin)Q明天出?net又呼啦呼听的全安.net 2005M(jin)。自新是一个发掘和汲取的过E。别一天到晚的看不起struts嫌他ȝ(ch)Q瞧不上hibernate嫌他费性能。h家的技术能在全世界行Q必然有qh之处。想想他Z么能在全世界行Q他体现的是哪种设计思想。多学学人家的优点,惛_法把q些优点用在自己的代码上?/font>
诗云Q?#8220;邦畿千里Q惟民所止?#8221;诗云Q?#8220;~蛮黄鸟Q止于丘隅?#8221;子曰Q?#8220;于止Q知其所止,可以不如鸟乎!”
诗云Q?#8220;I穆文王Q于~熙敬止Q?#8221;Zh君,止于仁;Zh臣,止于敬;Zh子,止于孝;ZhӞ止于慈;与国ZQ止于信?/font>
诗经_(d)(x)“京城?qing)其周围Q都是老百姓向往的地斏V?#8221;诗经又说Q?#8220;‘~蛮’叫着的黄鸟,栖息在山丘的角落上?#8221;孔子_(d)(x)“q黄鸟都知道它该栖息在什么地方,N能不如一只鸟儿吗Q?#8221;
诗经_(d)(x)“品d高尚的文王啊Qؓ(f)人光明磊落,做事始终庄重谨慎?#8221;做国君的Q要做到仁义Q做臣子的,要做到恭敬;做子女的Q要做到孝顺Q做父亲的,要做到慈爱;与他Z往Q要做到讲信用?/font>
l常看到论坛上有人抱怨,自己的工作单调只不过是复制粘贴别人的代码。可你有没有惌Z么去复制_脓(chung)Q是因ؓ(f)他的代码写得太好?jin),攑ֈ哪里都能用?q是架构设计得不合理Q需要重构。如果是好,他好在哪里,他ؓ(f)什么这么写。如果不好,又不好在哪里Q应该怎么改,如果是你来设计,你又?x)怎么做来避免犯这L(fng)错误?/font>
很多人抱怨自己在一个小公司不得志,可有没有惌Z么在q种公司。你有没有给IBMQgoogleq样的公司投q简历,投了(jin)历有没有面试Q面试了(jin)q些大公ؓ(f)什么不要你Q而是录用?jin)别人。要摆正?j)态,扑ֈ自己的位|。你可以觉得不得志,但要有真才实学。庞l那么大的才Q到?jin)刘备手下不q是先被发配d县o(h)。是金子l要发光的,后来刘备不也l于认识到庞l的才能q委以重d。可如果你啥都不?x),看这个看不vQ瞧那个瞧不上。一天到晚就知道上网聊天打游戏(chng)MM。就到?jin)曹营也当个蒋qԌ成事不败事有余。要本着谦虚学习(fn)的态度来对待工作对待周围的人,要学?x)从别hw上发现优点?/font>
诗云Q?#8220;d淇澳Q菉竹猗猗。有斐君子,如切如磋Q如琢如。瑟兮僩兮,赫兮喧兮。有斐君子,l不可諠兮!”如切如磋者,道学也;如琢如磨者,自修也;瑟兮僩兮者,恂栗也;赫兮喧兮者,威A也;有斐君子Q终不可諠兮者,道盛徯善,民之不能忘也?/font>
诗经_(d)(x)“看那淇水弯弯的岸边,嫩绿的竹子郁郁葱葱。有一位文质{彬的君子Q研I学问像加工骨器一P不断切磋Q修D己像打磨玉Q反复琢。他庄重而开朗,仪表堂堂。这L(fng)一个文质{彬的君子Q真是o(h)人难忘啊Q?#8221;
q里所说的“加工骨器Q反复琢?#8221;Q是指做学问的态度Q?#8220;像打美玉,反复琢磨”Q是指自我修炼的_Q说?#8220;庄重而开?#8221;Q是指他内心(j)谨慎而有所戒惧Q说?#8220;仪表堂堂”Q是指他非常庄重Q说“q样一个文质{彬的君子Q真是o(h)人难忘啊Q?#8221;是指׃他品德非帔R,辑ֈ?jin)最完善的境界,所以人难以忘怀?/font>
不要Z(jin)工作而工作,Z(jin)写代码而写代码。既然干?jin)这行?jin)pq好Q即使不求名扬天下,臛_要也对得赯p么多q的努力吧。我带过几个手下Q我每次安排d后都?x)说Q认真干z,只要q完z,你去打CS我都不管。我说这话的目的是不想给大家太多压力Q大安苦都不容易。只要干完活Q该聊天该上|随便你。可如果真正?x)学习(fn)的人,应该明白,自己q的那些z,永远是别人安排的。要惛_学东西,q得Ҏ(gu)自己的特点和能力补充知识。自己写的代码是不是已经无懈可击?jin),有什么地方值得优化Q实现方法是不是可以用更优雅的方式?/font>
MQ心(j)中要想着不断q步Q要么不做,做了(jin)p做到更好?/font>
今天休息Q在家翻?jin)翻书柜Q读一d学。蓝色字是原文,U色的字是我的一些理解,如果有错的地方,q望大家指正Q谢谢?/font>
大学之道Q在明明P在亲民,在止于至善。知止而后有定Q定而后能静Q静而后能安Q安而后能虑Q虑而后能得。物有本末,事有l始Q知所先后Q则q道矣?/font>
大学的宗旨在于弘扬光明正大的品dQ在于人弃旧图斎ͼ在于使h辑ֈ最完善的境界。知道应辑ֈ的境界才能志向坚定;志向坚定才能够镇静而不?jing)躁Q镇静而不?jing)躁才能够?j)安理得;?j)安理得才能够思虑周详Q思虑周详才能够有所收获。每样东襉K有根本和枝末Q每件事都有开始和l结(q记得黑客帝?里,先知说的那句话吗QEverything that has a beginning has an end。大概先知也读过大学)。明白了(jin)q本末始l的道理Q就接近事物发展的规律了(jin)?/font>
在Y件开发过E中Q我们经怼(x)遇到很多问题。其实每一个客户需求都是一个大问题Q是一堆问题的d。这需要我们在~程之前Q明白自p做什么(知止而后有定Q,要认真的分析我们的需求和目标。这h能不被一堆稀奇古怪的问题吓倒,能够让我们从容的面对q些工作Q定而后能静Q。初学者经常犯一个错误,是不分析问题。调试出错代码的时候,l常是一遍一遍的q行错误的代码,然后看着报错信息发呆。而不知道如何分析错误所在,也不知道在哪里打印几行标志来扑և出错的代码的位置。于是越看越乱,ؕ心(j)慌。这时候就需要先静下?j)来不要被一个报错信息吓刎ͼ静而后能安Q。只有静下心(j)来,才能惛_其实M报错信息Q都是有Ҏ(gu)据的Q只要根据提CZ息中l出的线索,或者在代码中打印几条标志信息,或者根据你输入的信息运行的cLҎ(gu)L理,p够找到出错的地方Q安而后能虑Q。当你做到这一步,你就扑ֈ问题的所在了(jin)Q经验值又增加?jin)(虑而后能得Q?
像刚才所_(d)M代码M错误Q都是有Ҏ(gu)据不?x)凭I出现。我们Y件开发h员的工作Q就是解决一个一个的问题。只要能把这些问题分析得当,条理清晰的列出来Q就L功不q了(jin)?/font>
很多初学~程或刚刚工作的人都?x)报怨,看不懂代码,不知道业务逻辑所以没法工作。其实做事的时候,不要一上来想一ơ解决问题,要@序渐q,你连代码出错出在哪里都不知道Q怎么M攚w误。要先找到出错的代码是哪个文Ӟ是从哪里q入的,又经q哪些方法的调用Q要明白q些代码的业务逻辑。如果不明白先注释h。初学的时候要学会(x)分析问题的方法,扑ֈ问题的关键点Q每行代码其实都是在调动数据Q但有些调动是对当前业务没有影响的这些可以先排除掉,那些?x)对后面的业务逻辑产生影响的,都是问题的关键点。初学者不要嫌ȝ(ch)Q遇到这些关键点一定要注释。就不明白整个的业务逻辑Q单独一行代码的意思总该明白吧,无非是d查改和方法调用嘛。当你把q些代码通读一遍ƈ都注释后Q就可以把这些注释当成读说一栯下来Q再复杂的业务逻辑也应该能L白了(jin)?/font>
古之Ʋ明明d于天下者,先治其国Q欲d国者,先齐其家Q欲齐其家者,先修其nQ欲修其w者,先正其心(j)Q欲正其?j)者,先诚其意Q欲诚其意者,先致其知Q致知在格物?br> 物格而后知至Q知臌后意诚Q意诚而后?j)正Q心(j)正而后w修Qn修而后安Q家齐而后国治Q国治而后天下q?br>
古代那些惛_天下弘扬光明正大品d的hQ先要治理好自己的国Ӟ要想ȝ好自q国家Q先要管理好自己的家庭和家族Q要想管理好自己的家庭,先要修养自n的品性;要想修养自n的品性,先要端正自己的心(j)思;要想端正自己的心(j)思,先要使自q意念真诚Q要想自己的意늜诚,先要使自p得知识;获得知识的途径在于认识和研I万事万物。通过对万事万物的认识Q研I后才能获得知识Q获得知识后意念才能真诚Q意늜诚后?j)思才能端正;?j)思端正后才能修养品性;品性修d才能理好家庭和家族Q管理好家庭后才能治理好国家Q治理好国家后天下才能太q?/font>
׃先不说什么治国之论,单就软g开发这个行业来讌Ӏ很多h都在抱怨公司小挣钱管理乱感觉屈才之cȝ。可你真的有q么大才吗,那些刚刚毕业的学生,在学校里玩儿?jin)四q。到公司时什么都不会(x)白纸一张,像我以前发q的一个文?/a>里说的。都不用说敬业精,当你q最L(fng)的认真工作都做不到时Q还有什么资D公司l你的工资太,对不起你的工作量?/font>
要么别做q䆾工作Q别接受q个dQ既然做?jin)就要做好。不要把工资当成不认真工作的借口。你再不认真工作Q该被剥削的地方谁也跑不?jin),老板q是要赚他的钱。但工作l验是自q呀Q!Q 软g开发这个工作需要不断学?fn)不断的q步才能保持自己的位|。而Y件开发正是需要认真工作,才能体会(x)出其中的奥妙Q体?x)其中的_֍所在。要惌自己来有好的发展,p先做到自律,休息的时候当然要玩儿Q但上班的时候就要以工作为重。要惌律就要提高自w修养,提高自己对工作重要性的认识。要x高自w修养,p端正自己的心(j)态,上班的时候不要d想什么窗外的高楼街上的美奟뀂要想端正心(j)态,p让自q意念真诚Q要真心(j)的认真负责的对待自己的工作,对待自己手中写出的每一行代码。这时就需要先获得知识Q要学会(x)q些技术,不然什么都不懂的h只能复制_脓(chung)别h的代码,却不知道q些代码在干什么,往往复制错了(jin)自己却然不知?/font>
自天子以至于庶hQ壹是皆以修wؓ(f)本。其本ؕ而末治者否矣,其所厚者薄Q而其所薄者厚Q未之有也!
上自国家君王Q下臛_^民百姓,Zh都要以修d性ؓ(f)Ҏ(gu)。若q个Ҏ(gu)被扰׃(jin)Q是不可能治理好家庭甚至国家天下的。不分轻重缓急,本末倒置却想做好事情Q这也同h不可能的?/font>
像刚才说的Q刚工作的h工资工作篏q是事实情况Q大安是从q一步走q来的。只有经历过q一步,才能明白认真工作和提高工作效率的重要性。要x高工作效率,p提高自n能力Q就要积累工作经验。可工作l验q东西ƈ不是说来来的,需要自己刻苦努力才能得来。ƈ不是说明天把你送到IBM或者什么大公司Q给你好多好多钱Q给你换?jin)一个超的工作环境。你q然什么都?x)?jin)什么都懂了(jin)。当你什么都不会(x)q净犯错的时候,真的C(jin)q种环境中,周围都是高手Q你q好意思和别h打招呼吗Q?/font>
几天的时间收C(jin)很多|友的回?
我发q个帖子? q不是想讨论技术问? 也不是ؓ(f)?jin)抱? 只是想以另一U方? 来提醒一下编E的初学? 和一些所?l验丰富"的老程序员. 因ؓ(f)我发Cl的写一编E规范的文档, gq不能引起大家够的重视. 垃圾代码仍然一出再?
我在帖子中所说的问题, 也ƈ不需要太多的技术经验和深厚的专业知? 都是一些随手而来的小问题, 解决q些问题的方法只需要工作时认真负责, 多动动脑子就行了(jin).
在帖子的回复? 有几个回复让我很在意:
==================================================================
q的太,能对付过d完了(jin)
C会(x)上什么行业不是这P能对付就行了(jin) ?/p>
要改变这U情况, 那还要上Ҏ(gu)改变的想法,改善一下工作环境,{等??/p>
老板们吃的是良心(j)Q拉的是思想
我们那么认真q啥
=====================================================================
我对q种说法非常的不赞同, 代码写的再差, 老板q是要赚他的? 该被剥削q是跑不?
可如果把q个当成不认真工作的理由, 那就只能永远自己吃亏?
如果Lq么不认真工? 不养成良好的工作?fn)? 自已思考的?fn)? 那就永远不能q步
只能当一辈子代码民工, 一辈子l这U垃圾老板打工.
要明白一? 好的~程?fn)? 思考能? 都是在^时工作当? 一点一滴的U篏h?
q不是当有hl了(jin)你一个好的工作环境后, 惛_出来p立刻变出来的.
老板对不起咱们是另一回事, 但自己是不是能对得v自己, 那就看你自己的想法了(jin)
态度军_一?br />
q有人用拼音做变量名Ҏ(gu)名,q(zhn)英文不好,E微查一下金p霸行不行Q现在百度和 GOOGLE 都有译功能Q稍微查一下英文,也当是学p?jin)行不行Q?/span> (zhn)实在太忙的话,不查也就了(jin)Q拼韛_拼音吧,好赖也算是中国话的?/span> 可是(zhn)就别用拼音写了(jin)Q英文简写还认不出来呢, (zhn)还用拼音的开头字母当变量名, 那我 TM 上哪儿猜dQ?/span>
三, 不明里的代?/span>
pȝ中经怼(x)出现q样的代码,其是在 controller 里居多:(x)
// some code
If(flag .equals(“submit?){
model.getInfo();
}else{
model.getInfo();
}
我没写错Q?/span> if ?/span> else 调用的方法完全一P大家也放?j),我仔l的看过调用的代码,调用的方法里Q也没有Ҏ(gu)其它情况来改变他的运行\Uѝ我׃明白Z么要做这?/span> if 判断?jin)。担?j)?x)有什么特D的业务逻辑Q?/span> 所以也不赶随便L他?/span> 猜了(jin)半天Q感觉最理想的答案是写代码的人,担心(j)以后?x)有新的逻辑分支Q?/span> 所以在q里?/span> if 预留?jin)一个位|, 以后改的时候方ѝ?/span>
数日之后有幸遇见?jin)当初写q代码的老兄Q问q之后立L倒,原来是这个代码是参照别的模块的样子写的,别的模块在这里都?/span> N 个程序分支,通过 if 来判断后军_调用哪个 model 里的Ҏ(gu)。但他这个模块很单,没有什么分支,是调用那一个方法,但他写代码时Q看别h的模块在q里都进?/span> if 判断?jin),所以觉得自׃应该判断一下,于是出C(jin)上面q样的代码?/span>
四, 面向q程式的~程Ҏ(gu)
遇到q好几次 2000 多行的方法,所有业务逻辑Q一气呵成,q?jin)一个方法搞定。如果是单的逻辑也就了(jin)Q?/span> 可是几千行的代码全放在一个方法里Q一个类里有无数的重复代码?/span> q回到好Q重构那本书没白看, 现在有了(jin)实践的机?x)?jin)?/span>
N(zhn)自p试的时候就不觉得麻?ch)吗Q?/span> 我在q里不想讨论什么面向过E还是面向对象,也别和我说什么方法多?jin)也不一定就是面向对象的思想?/span> qx对自己写的代码多上点?j)?/span> 大家都是在这行干?jin)几q的Z(jin)Q把代码写的漂亮Ҏ(gu)什么不好?/span>
五, 代码~进混ؕ
我们公司有规定,改代码的时候,不许修改原有代码的格式?/span> 不管他多乱,也不许改?/span> 我不明白q是Z么,也许是检查代码的人,要用文g比较工具吧?/span>
但这下苦坏我?jin)?/span> 代码的格式那叫一个ؕ?/span> 有顶着行头写的Q?/span> 有向后空?/span> N 格的Q大概是写代码的人, Z(jin)方便自己扑ֈ正在调试的那D代码,所以把代码的羃q变得和其它代码与众不同吧?/span> 那?zhn)调试完?jin)到是重新排一下版呀Q?/span> q真的不累~~, 现在?/span> IDE 工具都有自动排版代码的功能, 一个快捷键搞定了(jin)Q稍微勤快一点行吗?Q?/span>
最 BT 的一D代码是~进居然Z(jin)屏幕Q!Q?/span> 你吃׃(jin)撑的呀Q?/span> 没事~那么远q吗Q?/span> 我根据后台输出找?jin)半天也没找到那D代码在哪儿Q?/span> 原来是因为羃q的太远?jin),不在屏幕范围之内Q?/span> 向右拉了(jin)半天滚动条才扑ֈ?/span> 你丫是不是写着代码睡着?jin)?/span> 脸正好砸?/span> TAB 键上?/span>
六, 多余的后台输?/span>
好几个@环嵌套在一P~~ 也行Q?/span> q是因Z务逻辑需要,没别的办法也就?jin)?/span> 好几个@环嵌套在一h数据库, ׃最好还是开动一下脑{, 看看有什么更好的办法。如果还是没别的办法Q?/span> 那也凑合?jin)?/span> 可这U情冉|别在后台输?/span> SQL 语句啦, 每次一执行E序Q成百上千个 SQL 语句在后台输出, 查数据库才用?jin)一两秒Q结果输?/span> SQL q?jin)半分钟?/span> (zhn)自己就没觉出程序慢在哪里吗Q?/span> (zhn)调试程序的时候输Z下也q?jin)?/span> 提交到正式运行的环境Ӟ麻?ch)(zhn)Q劳(zhn)大驾~?/span> 把那些输出注释掉吧,实在不行留几个重要的输出p?jin)?/span> 让这U代码媄(jing)响系l性能~~ 也太冤了(jin)吧?/span>
七, 打肿脸充胖子
我也不知道这条算不算恶习(fn)Q也怸,在有些h眼里q是好事。但也要看具体情况,l常有些人写代码不喜Ƣ用 IDE Q只?/span> EDITPLUS q类工具。按常理_(d)初学者都应该量用这些编辑器写代码,对加深学?fn)印象有好处。也有h说高手不屑于用那?/span> IDE Q我见多怪, q种l顶高手我没见过?/span>
但咱qx工作的时候,要的是效率,(zhn)不是那U高手就乖乖的用 IDE 吧。经常见到有些hQؓ(f)查一个方法的调用Q搜来搜ȝ。真正的高手是工作效率最高的人,不是用最单工L(fng)人?/span>
//20061019 start
一些补?
可他把时间全耽误在这上了(jin), q样的工作效? 加班都是z该?br />//20061019 end
今天写q么多,
大家q遇到过什么样的编E恶?fn),Ƣ迎补充?/span>
大家不要L抱怨什么工资太,工作量太大。工作效率这玩意儿是要经验来做基Q这没错Q经验少也没事。咱qx写程序的时候多上点?j),多对自己的代码思考一下,多动动脑子。自然就能ȝ出最好的工作l验?jin),工作效率自然提高?jin)?/span>
也别L说什?/span> STRUTS 不好Q?/span> HIBERNATE 太慢Q不屑去用它。h家的E序能在全世界流行,自然有他的过Z处。多读读他的代码Q学?fn)一下他到底好在哪里Q如何才能把q些优点应用到自q代码上。这才是最重要的?br />
也许׃写不Z么高的代码技巧,写不Z么华丽的法Q但如果能在一些习(fn)惯,l节上做到精益求_,那也对得赯q代码?jin)?br />
写出上面q些代码的hQ如果你的工资真的很,那我只能惋惜的说一句:(x)你的工资是可怜了(jin)点,但看(zhn)写的这代码Q连q点工资都不应该l你Q!
好在我也自知水^有限,目标只是Z(jin)掺和
------------------------------------------------------------------------------------------------------
250的:(x)
Problem Statement
You are given a String input. You
are to find the longest substring of input such that the reversal of the
substring is also a substring of input. In case of a tie, return the string that
occurs earliest in input.
Definition
Class:
ReverseSubstring
Method:
findReversed
Parameters:
String
Returns:
String
Method
signature:
String findReversed(String input)
(be sure your method is
public)
Notes
-
The substring and its reversal may overlap
partially or completely.
-
The entire original string is itself a valid
substring (see example 4).
Constraints
-
input will contain between 1
and 50 characters, inclusive.
-
Each character of input will be an
uppercase letter ('A'-'Z').
Examples
0)
"XBCDEFYWFEDCBZ"
Returns: "BCDEF"
We see that the reverse of BCDEF is
FEDCB, which appears later in the string.
1)
"XYZ"
Returns:
"X"
The best we can do is find a one character substring, so we implement the
tie-breaker rule of taking the earliest one first.
2)
"ABCABA"
Returns: "ABA"
The string ABA is a palindrome (it's its own
reversal), so it meets the criteria.
3)
"FDASJKUREKJFDFASIREYUFDHSAJYIREWQ"
Returns: "FDF"
4)
"ABCDCBA"
Returns: "ABCDCBA"
Here, the entire string is its own
reversal.
750的:(x)
Problem Statement
You are given a String[] grid
representing a rectangular grid of letters. You are also given a String find, a
word you are to find within the grid. The starting point may be anywhere in the
grid. The path may move up, down, left, right, or diagonally from one letter to
the next, and may use letters in the grid more than once, but you may not stay
on the same cell twice in a row (see example 6 for clarification).
You are to
return an int indicating the number of ways find can be found within the grid.
If the result is more than 1,000,000,000, return -1.
Definition
Class:
WordPath
Method:
countPaths
Parameters:
String[],
String
Returns:
int
Method signature:
int countPaths(String[] grid,
String find)
(be sure your method is public)
Constraints
-
grid will contain between 1 and 50 elements,
inclusive.
-
Each element of grid will contain between 1 and 50 uppercase
('A'-'Z') letters, inclusive.
-
Each element of grid will contain the same
number of characters.
-
find will contain between 1 and 50 uppercase
('A'-'Z') letters, inclusive.
Examples
0)
{"ABC",
"FED",
"GHI"}
"ABCDEFGHI"
Returns: 1
There is only
one way to trace this path. Each letter is used exactly once.
1)
{"ABC",
"FED",
"GAI"}
"ABCDEA"
Returns: 2
Once we get to
the 'E', we can choose one of two directions for the final 'A'.
2)
{"ABC",
"DEF",
"GHI"}
"ABCD"
Returns: 0
We can trace a path
for "ABC", but there's no way to complete a path to the letter 'D'.
3)
{"AA",
"AA"}
"AAAA"
Returns: 108
We can start from any of the
four locations. From each location, we can then move in any of the three
possible directions for our second letter, and again for the third and fourth
letter. 4 * 3 * 3 * 3 = 108.
4)
{"ABABA",
"BABAB",
"ABABA",
"BABAB",
"ABABA"}
"ABABABBA"
Returns:
56448
There are a lot of ways to trace this path.
5)
{"AAAAA",
"AAAAA",
"AAAAA",
"AAAAA",
"AAAAA"}
"AAAAAAAAAAA"
Returns:
-1
There are well over 1,000,000,000 paths that can be traced.
6)
{"AB",
"CD"}
"AA"
Returns: 0
Since we can't stay on the same
cell, we can't trace the path at all.