Arama butonu
Bu konudaki kullanıcılar: 1 misafir
196
Cevap
12760
Tıklama
8
Öne Çıkarma
Cevap: Reddit, HN, Euler, DH gibi sitelerden iş görüşmesi soruları + ödev soruları (3. sayfa)
G
6 yıl
Er

programlamayla amatör olarak ilgileniyorum çok bilgili değilim edindiğim tectübelere göre rekürsif kodun döngülerle alakası olmadığı.

bu kod verilen isme göre alt klasörler dahil tüm dosya klasör isimlerini karşılaştırıyor, bunu rekürsif kullanmadan dögüyle yazabilirmisin? yada rekürsif kullanıp döngü kullanmadan.


int SearchFile(const char* fPath,const char *SearchName)
{
HANDLE hFind;
WIN32_FIND_DATA FindData;

char lPath[MAX_PATH];
char fName[MAX_PATH];

sprintf(lPath,"%s\\*",fPath);
sprintf(fName,"%s\\",fPath);

if((hFind = FindFirstFile(lPath,&FindData)) != INVALID_HANDLE_VALUE)
{
strcpy(lPath,fName);
do
{
if(FindData.cFileName[0] != '.')
{
strcat(fName,FindData.cFileName);
if((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if(strstr(FindData.cFileName,SearchName))
printf("Folder: %s\n",fName);
SearchFile(fName,SearchName);
strcpy(fName,lPath);
}
else
{
if(strstr(FindData.cFileName,SearchName))
printf("File: %s\n",fName);
strcpy(fName,lPath);
}
}
}while(FindNextFile(hFind,&FindData));

FindClose(hFind);
}
return 0;
}


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

Bir projede öyle birşey çıkarsa yazabilirim. Ancak burada yazmam cunku demo açısından bir esprisi olmaz.

rekürsif kod döngülerle alakalı cunku döngü ile aynı sonucu veriyor, fakat kod yapısı daha sade ve bazı şartlarda çalışması daha hızlı. Bazı yapay zeka algoritmalarında rekürsif kodlama, kodun cok daha açık olmasını sağlıyor.




Bu mesajda bahsedilenler: @Webtimes
T
6 yıl
Yarbay
Konu Sahibi

Perl 6'da Haskell gibi matematik formül gösterimine yakın dizi oluşturma özellikleri var. Nitekim orada Paskal üçgenini öyle oluşturmuş. Oradaki { } içindeki kod, dizide bir sonraki elemanın nasıl olacağını belirtiyor.

Perl 6 ile fibonacci serisini tek satırda oluşturabilirsin:

quote:

my @fib = 0,1,->$a,$b {$a+$b} ... Inf;


Sondaki Inf Infinity operatörü. O yüzden bu şekilde oluşturulan dizilerden slice / dilim almak gerekiyor:

quote:

say @fib[0..10]; # -> (0 1 1 2 3 5 8 13 21 34 55)


Oradaki 0,1, dizinin ilk iki elemanını belirliyor -> devamını $a,$b değişkenlerine atıyor { } içinde ise sonraki eleman $a+$b yani bir önceki 2 elemanın toplamı olacağı tanımlanıyor.





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 16 Ağustos 2019; 14:58:29 >


Bu mesajda bahsedilenler: @Gökşen PASLI
T
6 yıl
Yarbay
Konu Sahibi

Çok başarılı dediğin C ile, kullanıcıdan alınan rakama kadar Fibonacci dizisini kaç satırda yazabilirsin? Perl 6 ile tek satırda yazabiliyorum:

< Resime gitmek için tıklayın >


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Webtimes
G
6 yıl
Er

https://www.programiz.com/c-programming/examples/fibonacci-series
for (int n=1, i = 1, t1 = 0, t2 = 1,nextTerm; i <= n; i==1?scanf("%d", &n):i=i,printf("%d, ", t1), nextTerm = t1 + t2, t1 = t2, t2 = nextTerm,++i);;

c dili türkçemiz gibi esnek bir dildir, ikisinin de kıymetini bilelim





< Bu mesaj bu kişi tarafından değiştirildi Guest-D992B0457 -- 16 Ağustos 2019; 22:5:56 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

Kullanıcıdan alınan rakama kadar Paskal ücgenini yazdırmak:< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 4 Eylül 2020; 17:16:12 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Guest-D992B0457
G
6 yıl
Er

hiç tek satırdan fazla yaptığın bir şey yokmu?





< Bu mesaj bu kişi tarafından değiştirildi Guest-D992B0457 -- 16 Ağustos 2019; 22:48:44 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz
T
6 yıl
Yarbay
Konu Sahibi

uygulamalar cok satırlı olur fakat buradaki konumuz uygulamalar değil orta-temel programcılık soruları ve onları en kısa şekilde çözmek için fonksiyonel stilde program yazmak. Yukarda gördüğün son 2 çözüm, salt fonksiyonel çözüm örneğin...




Bu mesajda bahsedilenler: @Webtimes
T
6 yıl
Yarbay
Konu Sahibi

Temel düzey programlama sorusu (19.Ağu.2019)

Kullanıcı 2020TL, 3400TL, 5500TL gibi maaş listesi ve her bir maaşa uygulanacak artış oran listesi ve para birimi girecek.
Örnek:

Kullanıcı şunları girecek:

maaş_listesi: (2020, 3400, 5500)
artis_oran_listesi: (1.25, 1.1, 1.0)
para_birimi: "TL"

Program şunu basacak:

Maaş:2020, Yeni: 2525.00TL
Maaş:3400, Yeni: 3740.00TL
Maaş:5500, Yeni: 5500.00TL

Bu program Scheme ile 3, Perl 6 ile tek satırda okunaklı şekilde yazılabiliyor.





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 29 Eylül 2019; 13:6:34 >

T
6 yıl
Yarbay
Konu Sahibi

Asal sayı dizisi.

Kullanıcının girdiği rakam kadar asal sayı dizisi çıkaran kod yazınız.
Örneğin kullanıcı 10 girdiyse

2 3 5 7 11 13 17 19 23 29

gibi.

Not: Bu soruyu sadece 1 satırda kodladım :)


Bu mesaja 1 cevap geldi.
T
6 yıl
Yarbay
Konu Sahibi

Yukarda temel Computer Science konusu olan asal sayı - prime number sorusuna yanıt gelmedi.

Başka bir soru:

Formul kullanarak Altın Oranı (yaklaşık olarak) bulunuz.
Örnek (Perl 6)


# formül ile altın oranı bulan program
my $onceki=2;
my $oanki;
for (1 .. 10) {
say $oanki = 1 + 1/$onceki;
$onceki = $oanki;
}
say "Altın Oran: $oanki";
Çıktı:
1.5
1.666667
1.6
1.625
1.615385
1.619048
1.617647
1.618182
1.617978
1.618056
Altın Oran: 1.618056


Bu kod örnek amaçlı ve kommentler, blok işaretleri { } ve sonraki ekstra satır hariç 5 satır. Perl 6 ile bunu 1 satırda kodladım.





< Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 8 Şubat 2021; 0:55:25 >

T
6 yıl
Yarbay
Konu Sahibi

SORU: Kullanıcının girdiği dizide "a e i o u" sırasını en uzun içeren seriyi bulmak. Örnekler:


"aeiaaioaauaeiou"
en uzun seri: a a a a a a e i o u uzunluğu: 10

"aeiioaeiou"
en uzun seri: a e i i i o u uzunluğu: 7

"eiioaeiooouu"
en uzun seri: a e i o o o u u uzunluğu: 8

"eiooouu"
en uzun seri: uzunluğu: (cunku başta a yok)

"aeioo"
en uzun seri: uzunluğu: (cunku sonda u yok)


Bu soru 1-2 yıl evvel forumda bir ödev sorusu olarak sorulmuştu.
Benim çözümüm 3 satır fakat biraz kasarak 2 hatta 1 satıra indirebilirim.



T
6 yıl
Yarbay
Konu Sahibi

Soru: 1 Milyonunu fibonacci sayısını bulunuz.

4 satırlık kod ile yaklaşık 20sn'de buldum. Sayının uzunluğu 208988 basamak!

Not1: Cok büyük rakamları tutabilen SBCL derleyici kullandım
Not2: 1 Milyonuncu fibonacci sayısının uzunluğunu program kodu ile değil, editörden ölçerek buldum.



A
6 yıl
Yarbay

< Resime gitmek için tıklayın >
Fibonacci genel teriminde N yerine 1 milyon yazınca çıkar.

——
2 elemanlı bir queue( tek yönlü olandan, dequeue olmayan dı galiba) oluşturalım
1 1 olsun
Sonra for döndürüp 1 milyon kere{
İçindeki ikisini topla queue ye ekle
Sonra diğer kenardaki elemanı çıkart
}
Böylece queue muz
1,1
1,2
2,3
3,5
5,8
... gibi oldu
1 milyonu da bulunca yazdırırız
Buna dynamic programming deniyor galiba, dinamik programala nedir diye 1-2 örnek bakmıştım
Map, tablo falan kullanıyordu.
——
Recursion ile de yapılabilir
F(n)=f(n-1)+f(n-2) gibi
Bunlarda javada depth hatası verir gibi, ama başka özel yolu vardır belki



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
T
6 yıl
Yarbay
Konu Sahibi

O formülü hatırladım fakat o fibonacci sayısını yaklaşık olarak hesaplıyor diye biliyorum yani tam degeri vermiyor.

Tam değeri bulmak için optimize edilmiş rekürsif fonksiyon en hızlı yol. Ancak sonuç 1 milyonuncu fibonacci sayısı 208988 rakam uzunluğunda olduğu için sadece optimizasyon da yeterli değil, dev rakamları tutacak compiler veya C# için BigInt gibi kütüphane gerekli. SBCL (Steel Bank Common Lisp) compiler dev rakamları tutabildiği için onu kullandım 30sn gibi sürde buldu. Şu an başında olduğum bilgisayarda SBCL ile eşdeğer fakat biraz daha düşük performanslu CMUCL (Carneige Mellon University Common Lisp) derleyici var ve 32bit o yüzden sanırım 1dk dan fazla sürdü (yine tam ölçmedim 20-30sn sonra bilgisayarın başından kalktım birkaç dk sonra döndüğümde hesaplamıştı)

< Resime gitmek için tıklayın >
Emacs editörün durum çubuğundaki Bot (?? 208988) sonucun karakter sayısını gösteriyor yani 1 Milyonuncu Fibonacci 208988 rakam uzunluğunda.

Senin formuldeki (1+kök 5) / 2 altın oran rakamı bu arada. fibonacci dizisi ile altın oran arasında matematiksel ilişki var.



< Bu ileti mini sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @alimmm78
G
6 yıl
Yarbay

bu işlerde makine gücü de önemlidir ama bendeki makine de 15 saniye civarı hesaplıyor en kısa kod işine bakmıyorum tabi



using System;
using System.Numerics;

namespace ddds
{
class Program
{

static BigInteger[] f = new BigInteger[1000001];
public static BigInteger fib(int n)
{

if (n == 0)
return 0;

if (n == 1 || n == 2)
return (f[n] = 1);

if (f[n] != 0)
return f[n];

int k = (n & 1) == 1 ? (n + 1) / 2
: n / 2;
f[n] = (n & 1) == 1 ? (fib(k) * fib(k) +
fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) *
fib(k);

return f[n];
}


public static void Main(string[] args)
{

Console.Write(fib(1000000).ToString().Length);
Console.ReadKey(true);
}
}
}


Bu mesaja 1 cevap geldi.
T
6 yıl
Yarbay
Konu Sahibi

Evet 15 sn sürüyor fakat fibonacci sayısının sadece uzunluğunu ilettiği için. Sayının kendisini konsola yazdırması (ToString().Length'i kaldırarak) dakikalar sürdü ve bir hata ile sonlandı:
< Resime gitmek için tıklayın >
Sayının kendisini yazdırmak bu soruya dahil.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gökşen PASLI
G
6 yıl
Yarbay

Bende console a yazdırma da bir problem çıkmadı süresi de aynı



< Bu ileti mobil sürüm kullanılarak atıldı >

H
6 yıl
Binbaşı

bu sorularda matrix exponentiation kullanilir ki soyle:
|1 1| * |F1 0| = |F2 0|
|1 0| * |F0 0| = |F1 0|



|1 1| n |F1 0| = |Fn+1 0|
|1 0| * |F0 0| = |Fn 0|


(ilk matrisin n inci kuvvetini aliyoruz ilk matrisimiz ile carpiyoruz)

bu yontemde matrisin n. kuvvetini hesaplamak icin fast exponentiation kullanilir.
ornek python kodu burada(kodu ben yazmadim ornege uysun diye sayilari degistim sadece ):


def mul(A,B):
return [ [ sum(A[r][i]*B[i][c] for i in range(2)) for c in range(2) ] for r in range(2) ]

def exp(A,n):
if n==0: return [ [1,0], [0,1] ]
C = exp(A,n//2)
C = mul(C,C)
return mul(A,C) if n%2 else C

n = int( input() )
print( mul(exp( [ [1,1], [1,0] ], n ),[[1,0],[0,0]])[0][0])





< Bu mesaj bu kişi tarafından değiştirildi hynx -- 20 Eylül 2019; 0:13:5 >
Bu mesaja 1 cevap geldi.
T
6 yıl
Yarbay
Konu Sahibi

Matriks ile üs hesaplama kodu biraz karışık. Ve o kod milyonuncu fibonacci yi ne kadar sürede hesaplar o da belli değil.
Benim kod en kısa ve C# tan sonra en hızlı. Aşağıdaki milyonuncu fibonacciyi hesaplama süresini ölçtüm, yaklaşık 50sn.
@Gökşen PASLI C# BigInt modülünü cok iyi yazmışlar, yüzbinlerce rakam uzunluğunda Int 'i bile sorunsuz hesaplıyor. Fakat senin kodu mono-4.2.1 kurulu Mac OS X'te denerken
error CS0234: The type or namespace name `Console' does not exist in the namespace `System'. Are you missing an assembly reference?
hatası verdi. Kullandığım build dosyası:
quote:


binary=$1
platform=-platform:x64
mcs "$binary.cs" -pkg:dotnet "$platform"
-lib:/Library/Frameworks/Mono.framework/Versions/4.2.1/lib//mono/xbuild-frameworks/.NETPortable/v4.5
-reference:System.Numerics.dll
-reference:System.dll
-reference:System.Core.dll
-reference:System.Net.dll

Oradaki System.Numerics.dll 'i sorunsuz kullanıyor, ardından gelen 3 System.xxx.dll'i ben ekledim, Console 'u bulur diye, bulamadı. mono-4.2.1'de Console desteği yok gibi. İlginç bir eksiklik. O çalışsaydı, Mac'te senin kodu deneyebilecektim.
< Resime gitmek için tıklayın >



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gökşen PASLI , @rekteo