20 dakika sonra ne olursa olsun kodlamaya başlamanız gibi bir kural var mı?
Hayır, ancak işe başlamadan önce sorunu analiz etmek için 20 dakikanızı harcarsanız, muhtemelen başınız belada demektir. Size belirttiğiniz gibi bir soru soran bir işveren çoğunlukla bir soruna nasıl yaklaştığınızla ilgilenir, ancak bir kodlama sorunu olarak soruyorlarsa da bazı kodları görmek isteyeceklerdir. Düşünce süreciniz boyunca onlarla konuşun ...
Buradaki bariz yaklaşım kaba kuvvettir. Üç köşeyi göz önünde bulundurarak bir dik üçgeni tanımak için bir yolum olsaydı, iki noktanın tüm kombinasyonlarını ve doğru üçgenleri arayan kökenleri geçebilirdim. Bu zor olmamalı - Dik üçgenleri tanımlamak için Pisagor Teoremini kullanan bir işlev yazabilirim. Bunu kolaylaştırmak için, mesafe formülü kullanarak iki nokta arasındaki mesafeyi belirleyen bir işlev de yazacağım ...
Bu işlevlerin yazılması yaklaşık üç dakika sürecektir. Şimdi, soruya sadece birkaç dakika içinde, temel geometriyi hatırladığınızı ve kod yazmayı gerçekten bildiğinizi zaten gösterdiniz. Ayrıca size konuşacağınız bir şey de verir:
Böylece, isRightTriangle(p1, p2, p3)
işlevi dört for
döngünün ortasına koyabiliriz ve iki değişken noktanın her biri için olası tüm seçenekleri tekrarlayabiliriz. Bakalım ... sorun, 50x50 ızgara üzerindeki başlangıç noktası da dahil olmak üzere sağ üçgen sayısını soruyor, bu yüzden kaba kuvvet yöntemini kullanmak her noktanın her koordinatı için 50 olasılığı kontrol etmemizi sağlıyor. Bu 50 ^ 4 kontroller ... Eminim daha iyisini yapabiliriz, ama kod açık, bu yüzden yazayım ...
Şimdi iç içe for
döngüler kullanan bir işlev ve isRightTriangle()
az önce yazdığınız işlevi yazıyorsunuz. Sorunu çözdünüz, ancak görüşmecinin nereye gittiğinizi görmesine de izin verdiniz. Amaçları sadece kod yazabileceğinizi görmekse, durmanızı söyleyebilirler. Büyük olasılıkla, ne yaptığını bilen biriyle konuşmaktan mutluluk duyarlar ve bunu ne kadar uzağa götürdüğünüzü görmek isterler. Yani devam et ...
Ben yazarken simetriden faydalanabileceğimi anladım. 45 ° çizgisi etrafındaki herhangi bir sağ üçgeni yansıtabiliriz, bu nedenle bu çizginin yalnızca bir tarafındaki noktalardan birini kontrol etmeyi seçersek, iki kez bulduğumuz herhangi bir sağ üçgeni sayabiliriz ... bir kez üçgen için ve bir kez yansıması için. Bu, çek sayısını yarıya indirir. Ayrıca, şimdi baktığımızda, iki nokta arasındaki mesafeyi bulmak için kare bir kök alıyoruz, ama sonra tekrar tekrar kare isRightTriangle()
...
Ve bunun gibi. Yine, genellikle mükemmel bir çözüm görmek istemiyorlar, bir çözüme nasıl ulaştığınızı görmek istiyorlar. Düşünce süreciniz yukarıdaki gibi bir şey olmak zorunda değildir - sadece yüksek sesle düşünmek için güven duymak çok şey olacaktır. Bir hata yaparsanız terlemeyin - sadece "hmmm, sanırım burada raylardan çıktım - bir adım geri döneyim ..." deyin.