Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
17
Cevap
6922
Tıklama
0
Öne Çıkarma
Programlama Yarışması, Bütün Diller Serbest :)
E
14 yıl (163 mesaj)
Teğmen
Konu Sahibi

Merhaba;

Sağa sola bakarken, şöyle bir site buldum.
http://challenge.greplin.com/

Bu sitede üç soru var, her bir soruda bir problem verilmiş, bu problemin çözümünün nasıl yapılacağı anlatılmış.
Sizden; verilen problemlerin çözülmesi için programlama yapmanız isteniyor, ve yazdığınız kodun çıktısı, o sorunun parolası oluyor.
Eğer doğru parolayı bulabilirseniz, diğer soruya geçme hakkı kazanıyorsunuz.

Ve sorular (en azından doğru cevabı bulabilmek için yapmanız gerekenler ) orta-üst seviye algoritmalardan oluşuyor.

Yarışmanın güzelliği, istediğiniz programlama dilini kullanabilmeniz. Bence bu konuda kendine güvenen herkes, bunu denemeli.
Hem, aynı sorunlara farklı yaklaşımlarla çözümler üretebiliriz, yazdığımız kodları burada paylaşıp, herkesin bunlardan faydalanmasını sağlayabiliriz diye düşünüyorum.

Benim kullandığım programlama dili Java :

SORU 1 :
================

The Greplin Programming Challenge

Level 1
----------------------------------------

Embedded in this block of text is the password for level 2.
The password is the longest substring that is the same in reverse.

As an example, if the input was "I like racecars that go fast"
the password would be "racecar".

Türkçe Açıklama :
Aşağıdaki metnin içinde, düz ve ters yazılımı aynı olan en uzun parçayı bul.
Örnek : "I like racecars that go fast" metnindeki düzden ve tersten yazılımı aynı olan en uzun parça racecar

İncelememiz Gereken Metin Burada

 
public class Soru1
{
public static void main(String[] args)
{
// Orjinal Text
String o =
"Fourscoreandsevenyearsagoourfaathersbroughtforthonthiscontainentanew"+
"nationconceivedinzLibertyanddedicatedtothepropositionthatallmenarecr"+
"eatedequalNowweareengagedinagreahtcivilwartestingwhetherthatnaptiono"+
"ranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatba"+
"ttlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinal"+
"restingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItis"+
"altogetherfangandproperthatweshoulddothisButinalargersensewecannotde"+
"dicatewecannotconsecratewecannothallowthisgroundThebravelmenlivingan"+
"ddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddorde"+
"tractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitca"+
"nneverforgetwhattheydidhereItisforusthelivingrathertobededicatedhere"+
"totheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvanced"+
"Itisratherforustobeherededicatedtothegreattdafskremainingbeforeustha"+
"tfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheyg"+
"avethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedead"+
"shallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffre"+
"edomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperis"+
"hfromtheearth";
// Tersten Yazılmış Text
String t = getTers(o);
// Uygun Parçanın Uzunluğu
int maxLen = 0;
// Uygun Parça
String maxStr = "";
// Orjinal Text'teki Her Harakter İçin
for (int i = 0; i<o.length(); i++)
{
// Orjinal Text'teki i. Karakteri x String'ine Ekle
String x = ""+o.charAt(i);
// Tersteki i. Karakterinden Sonraki Her Karakter İçin (En Son Hariç)
for (int j = i+1; j<t.length()-1; j++)
{
// X'e Okunan Karakteri Ekle
x+=""+o.charAt(j);
// Eğer Ters Metnin Herhangi Bir Yerinde X String'i Bulunduysa
if (t.contains(x))
{
// Bulunan X String'inin Boyutunu Al
int len = x.length();
// Eğer X String'inin Boyutu, MaxLen'den Fazlaysa
if (len > maxLen)
{
// Yeni MaxLen, X String'inin Boyutu
maxLen = len;
// Yeni Max Str, X String'i Olur
maxStr = x;
}
}
}
}
// En Son Bulunan, MaxStr'yi Ekrana Bastır : ranynar
System.out.println("Password : "+maxStr);
}

// Bu Method Kendisine Gonderilen String'in Tersini Olusturup Geri Gonderir
public static String getTers(String s)
{
String ters = "";
// String'teki Son Karakterden İlk Karaktere Kadar Loop
for (int i = s.length() - 1; i >= 0; i--)
ters += "" + s.charAt(i); // i. Karakteri ters Stringinin Sonuna Ekle
return ters;
}
}


CEVAP : ranynar

SORU 2 :
================

The Greplin Programming Challenge

Level 2
----------------------------------------

Congratulations. You have reached level 2.

To get the password for level 3, write code to find the first prime
fibonacci number larger than a given minimum. For example, the first
prime fibonacci number larger than 10 is 13.

For the second portion of this task, note that for the number 12 we consider
the sum of the prime divisors to be 2 + 3 = 5. We do not include 2 twice
even though it divides 12 twice.

Türkçe Açıklama :
227 000'den büyük ilk asal fibonacci sayisini bul (Sayının adı x olsun)
x sayısına 1 ekle (y olsun)
y sayısının bütün asal bölenlerinin toplamını bul.

Step 1.
Use your code to compute the smallest prime fibonacci number
greater than 227,000. Call this number X.

Step 2.
The password for level 3 is the sum of prime divisors of X + 1.

 
public class Soru2
{
// n. Fibonacci Sayisini Bulan Method
public static int fib(int n)
{
if (n < 2) return n;
return fib(n-1)+fib(n-2);
}

// n Sayisinin Asal Sayi Olup Olmadigini Bulan Method
public static boolean isPrime(int n)
{
for (int i = 2; i<n; i++)
if (n % i == 0) return false;
return true;
}

// n Sayisinin Asal Bolenlerinin Toplamini Donduren Method
public static int getSumOfPrimeDivisors(int n)
{
int total = 0;
int primeCheck = 1;
// 1'den n'e Kadarki Bütün Sayilar
for (int i = 1; i<= n; i++)
{
// Eger Sayi n'i Kalansiz Boluyorsa
if (n % i == 0)
{
// 2'den i'ye Kadarki Butun Sayilar
for (int j = 2; j<i; j++)
{
// Eger j, i'yi Kalansiz Boluyorsa
if (i % j == 0)
{
// Bu Sayi Asal Degildir
primeCheck = 1;
break;
}
// Eger Bolemiyorsa, Bu Sayi Asaldir
else primeCheck = 0;
}
// Eger i == 2 veya primeCheck == 0
if (primeCheck == 0 || i == 2)
total += i; // Total'e Bu Sayiyi Ekle
}
}
// Total'i Dondur
return total;
}

public static void main(String[] args)
{
boolean sayiBulundu = false;
int cnt = 0;
int x = -1;
// Dongu
while(sayiBulundu == false)
{
// i. Fibonacci Sayisini Bul
x = fib(cnt++);
// Eger i. Fibonacci Sayisi 227000'den Buyukse ve Asal Sayi Ise
if (x >= 227000 && isPrime(x))
{
System.out.println("X : "+x); // 514229
sayiBulundu = true; // while Dongusunu Kir
}
}
// x'i 1 Arttir y = 514230
int y = x+1;
// y'nin Asal Bolenlerinin Toplamini Ekrana Bastir : 352
System.out.println("Password : "+getSumOfPrimeDivisors(y));
}
}


CEVAP : 352

SORU 3 :
================

The Greplin Programming Challenge

Level 3
----------------------------------------

For the final task, you must find all subsets of an array
where the largest number is the sum of the remaining numbers.
For example, for an input of:

(1, 2, 3, 4, 6)

the subsets would be

1 + 2 = 3
1 + 3 = 4
2 + 4 = 6
1 + 2 + 3 = 6

The password is the number of subsets. In the above case the
answer would be 4.

Türkçe Açıklama :
Elimizde bir dizi sayılar var. Bu sayılardan bazılarının toplamı, dizideki başka bir sayıyı veriyor.
Bu toplam kombinasyonlarının sayısını bul.

Örnek :
Elimizdeki sayı dizisi : (1, 2, 3, 4, 6)
1 + 2 = 3
1 + 3 = 4
2 + 4 = 6
1 + 2 + 3 = 6

Toplam 4 farklı kombinasyon var.

Kullanılacak Array : {3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99}

 
import java.util.ArrayList;
import java.util.Arrays;

public class Soru3
{
static int subTotalCount = 0; // gecerliToplamSayaci

// Bu Method, Sayi Kumesi, Ulasilacak Hedef Sayi, ve Kullanilabilir Sayilari Parametre Olarak Alir
public static void recursive_topla(ArrayList<Integer> numbers, int target, ArrayList<Integer> partial)
{
// Toplam = 0;
int sum = 0;
// Kullanilabilir Sayilari Topla
for (int i = 0; i<partial.size(); i++)
sum += partial.get(i);
// Eger Kullanilabilir Sayilar Hedef Sayiya Esitse
if (sum == target)
// Gecerli Toplam Sayacini 1 Arttir
subTotalCount +=1;
// Eger Toplam Hedef Sayiyi Gectiyse
if (sum >= target)
// Hic Bisey Yapma
return;

// Elimizdeki Sayilar Kadar Loop
for(int i=0; i<numbers.size(); i++)
{
// Eger Su An Bakilan Sayi, Hedef Sayiya Esit Degilse
if (numbers.get(i) != target)
{
// Kullanilabilir Sayilari Toplamak Icin ArrayList Ac
ArrayList<Integer> remaining = new ArrayList<Integer>();
// Su An Bakilan Sayiyi n Olarak Kaydet
int n = numbers.get(i);
// Bakilan Sayidan Sonraki Her Sayi Icin Loop
for (int j=i+1; j<numbers.size();j++)
// Kullanilabilir Sayilari ArrayList'e Ekle
remaining.add(numbers.get(j));

// Kullanilabilir Sayilarin Bir Kopyasını Cikar
ArrayList<Integer> partial_rec = new ArrayList<Integer>(partial);
// Bu Kumeye n Sayisini Ekle
partial_rec.add(n);
// Fonksiyonu Elimizdeki Butun Sayilar, Hedef Sayi ve
// Guncel Kullanilabilir Sayilar Parametreleriyle Tekrar Cagir
recursive_topla(remaining,target,partial_rec);
}
}
}

// Bu Method Sayi Kumesini ve Ulasilacak Hedef Sayiyi Parametre Olarak Alir
public static void topla(ArrayList<Integer> numbers, int target)
{
recursive_topla(numbers,target,new ArrayList<Integer>());
}

public static void main(String args[])
{
// Sayi Kumesi
Integer[] numbers = {3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99};

// Sayi Kumesi Boyutu Kadar Loop
for (int i = 1; i<numbers.length; i++)
{
int target = numbers[i]; // Bulunmak Istenen Sayi kumenin i. Elemani
topla(new ArrayList<Integer>(Arrays.asList(numbers)),target);
}
// GecerliSubToplamSayacini Ekrana Bas : 179
System.out.println("Password : "+subTotalCount);
}
}


CEVAP : 179


Ben Java için kendi yazdıklarımı verdim, Java yada başka dilde, farklı yaklaşımlar kullanarak çözülen cevapları paylaşalım lütfen.
Mutlaka birilerinin işine yarayacağını düşünüyorum.

Kolay Gelsin :)

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



G
14 yıl (21343 mesaj)
Yarbay

haha mükemmel

gece gece uğraş çıktı.


Bu mesaja 1 cevap geldi.
E
14 yıl (163 mesaj)
Teğmen
Konu Sahibi

:)



U
14 yıl (454 mesaj)
Yüzbaşı

Çok güzel, programlamaya bu sene başladım java derslerinde gördüğüm kadarıyla denedim beceremedim. Sonra contains methodunu gördüm haberimiz yokmuş :) çözdüm aynı olmuş sizinle ama substringle daha basit gibi geldi. Contains dışında text in içinde bir yazıyı aramak için ne kullanabileceğimi bilmediğimi farkettim aklınıza gelenleri söyleyebilir misiniz araştırayım biraz. Devamını yarın denerim.

public class Password1 { 

public static String reverse(String str) {
String reversed = "";
for (int i=str.length(); i!=0;i--)
reversed += str.charAt(i-1);
return reversed;
}

public static void main(String[] args) {

String pass = "FourscoreandsevenyearsagoourfaathersbroughtforthonthiscontainentanewnationconceivedinzLibertyanddedicatedtothepropositionthatallmenarecreatedequalNowweareengagedinagreahtcivilwartestingwhetherthatnaptionoranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatbattlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinalrestingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItisaltogetherfangandproperthatweshoulddothisButinalargersensewecannotdedicatewecannotconsecratewecannothallowthisgroundThebravelmenlivinganddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddordetractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitcanneverforgetwhattheydidhereItisforusthelivingrathertobededicatedheretotheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvancedItisratherforustobeherededicatedtothegreattdafskremainingbeforeusthatfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheygavethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedeadshallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffreedomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperishfromtheearth";
String passr = reverse(pass);
String scn ,password = "";
int longest = 0;

for(int i=0;i<pass.length();i++) {
for(int j=i;j<pass.length();j++) {
scn = pass.substring(i,j);
if (passr.contains(scn) && scn.length()> longest) {
longest = scn.length();
password = scn;
}
}
}
System.out.println(password);
}
}





< Bu mesaj bu kişi tarafından değiştirildi umutde -- 13 Aralık 2011; 3:13:48 >
Bu mesaja 1 cevap geldi.
E
14 yıl (163 mesaj)
Teğmen
Konu Sahibi

 
String a = "I like racecars that go fast";

// Aradiginiz Parçanın Başlangıç Pozisyonunu Döndürür
System.out.println(a.indexOf("go")); // 21
System.out.println(a.indexOf("racecars")); // 7

// Eğer Yoksa -1 Döndürür
System.out.println(a.indexOf("word"));

// String Aradığınız Parça İle Başlıyorsa true Döndürür
System.out.println(a.startsWith("I"));
System.out.println(a.startsWith("I like"));

// Başlamıyorsa false Döndürür
System.out.println(a.startsWith("that"));

// String Aradığınız Parça İle Bitiyorsa true Döndürür
System.out.println(a.endsWith("st"));
System.out.println(a.endsWith("fast"));
System.out.println(a.endsWith("go fast"));

// Bitmiyorsa false Döndürür
System.out.println(a.endsWith("****"));


Bu mesaja 1 cevap geldi.
R
14 yıl (572 mesaj)
Yüzbaşı

çok güzel bir şey bulmuşsun dostum.
Tam da böyle birşey arıyordum.


Bu mesaja 1 cevap geldi.
C
14 yıl (51 mesaj)
Onbaşı

veritabanı 11. sınıf öğrencisiyim. hiç bir soruyu yapamadım. kendime acıyorum.


Bu mesaja 1 cevap geldi.
K
14 yıl (5134 mesaj)
Binbaşı

İlk soruda onlarca kez aldığım out of boundary hatalarından sonra bıraktım.


Bu mesaja 1 cevap geldi.
N
14 yıl (2262 mesaj)
Binbaşı

Sadece 3 soru var. Yapamadım diye üzülenler üzülmesin. Adam oraya soruları sormuş yapanlar mail atsın iş için falan diyor

Sorular basit görünsede algoritmayı iyi kurmak lazım. Algoritmayı kurmadan direk kabataslak başlayınca yapılmıyor :)


Bu mesaja 1 cevap geldi.
Y
14 yıl (2601 mesaj)
Binbaşı

E
14 yıl (1211 mesaj)
Yüzbaşı

İlk sorunun çözümü tesadüfen doğruyu veriyor.

Örnek metnimiz şu olsun: "asjdjelibonasbeyyebfnobilejfds"

Yukarıdaki algoritmaya göre şifre jelibon çıkacaktır, çünkü algoritma ters metinde jelibon kelimesini arayıp bulacaktır. Ancak soru bizden tersten okunuşu aynı olan en uzun kelimeyi istiyor, o da "beyyeb".

Bunun yerine metindeki her harf olası şifrenin ortanca harfi kabul edilerek bir çözüm üretilebilir. Buna göre ikinci harften başlarız ve sağındaki ile solundaki harfin aynı olup olmadığında bakarız. Aynıysa iki taraftan da birer sıra kaydırıp aynı kontrolü tekrarlarız. Bulduğumuz en uzun kelime şifremiz olur. Tabi bu işlemi "beyyeb" gibi çift merkez harfli kelimeleri de dikkate alarak hazırlamak gerekir.


Bu mesaja 1 cevap geldi.
P
14 yıl (211 mesaj)
Teğmen

quote:

Orijinalden alıntı: eblek

İlk sorunun çözümü tesadüfen doğruyu veriyor.

Örnek metnimiz şu olsun: "asjdjelibonasbeyyebfnobilejfds"

Yukarıdaki algoritmaya göre şifre jelibon çıkacaktır, çünkü algoritma ters metinde jelibon kelimesini arayıp bulacaktır. Ancak soru bizden tersten okunuşu aynı olan en uzun kelimeyi istiyor, o da "beyyeb".

Bunun yerine metindeki her harf olası şifrenin ortanca harfi kabul edilerek bir çözüm üretilebilir. Buna göre ikinci harften başlarız ve sağındaki ile solundaki harfin aynı olup olmadığında bakarız. Aynıysa iki taraftan da birer sıra kaydırıp aynı kontrolü tekrarlarız. Bulduğumuz en uzun kelime şifremiz olur. Tabi bu işlemi "beyyeb" gibi çift merkez harfli kelimeleri de dikkate alarak hazırlamak gerekir.

dediğin işlem tek sayılı harfe sahip kelimeler için geçerli. üzerinde çalışıyorum ben bulursam atıcam.


Bu mesaja 1 cevap geldi.
£
14 yıl (666 mesaj)
Yüzbaşı

Harika bir paylaşım. Ellerine sağlık... Tam aradığım şey



D
14 yıl (5077 mesaj)
Yarbay

ilginçmiş



K
14 yıl (16162 mesaj)
Yarbay

Seyfiye katiliyorum. Cok bos isler bunlar. Yazilimla alakasiz beyin jimlastigi icin sanki. Beyin jimlastigi icin sudoku cozun. Yazilim ogrenmek icin yazilim yapin adam gibi



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

R
14 yıl (3395 mesaj)
Yüzbaşı

quote:

Orijinalden alıntı: seyfi84

fibonacci serisi, asal sayı, vs bunlar boş şeyler... temel matematik, 12-13 yaşında öğrenilmesi gereken şeyler. Bunlara bakıp da hiç kimseyi işe almam, o siteyi yapan da muhtemelen CV avcılığı yapan bir recruiter.
Gerçek hayattan yapacak iş bulun, bende proje çok... al sana bir örnek:
Bir Windows bilgisayar DHCP ile IP adresi ve DNS sunucu adresleri alıyor. Listesi belli siteler (URL) için kullanıcının tayin ettiği DNS sunucuları kullanan, geri kalan tüm siteler için DHCP ile gelen DNS sunucuları kullanan bir DNS proxy yazınız.
DNS protokolü ile ilgili tüm kaynak TechNet'te. Windows yazılım geliştirmek için tüm kaynak MSDN'de. Şu işi evinde kendi başına yapabilmek için hiçbir engelin yok. yaparsan hayvan gibi network programlama, windows service yazma, DNS protokolü öğrenmiş olursun.

al başka bir iş daha vereyim: bir fotoğraf var, bu fotoğraftaki cisimlerin sayısını bul, önden arkaya ve yukarıdan aşağıya sıralanışlarını çıkart. cisimleri tanımanı istemiyorum, sadece contour olarak extract et ve en arkada şu var, onun önünde şu, en öndeki şu.. diye bir sıralama yapacaksın. cep telefonunla odanda resim çek, bilgisayara aktar, başla çalışmaya.

beğenmediysen daha somut bir iş: TC mevzuatını hyperlink'li hale getirmek. örnek:http://www.tbmm.gov.tr/kanunlar/k6331.html, kanun tek sayfa halinde, tıklanabilir hiçbir şey yok, İçindekiler (TOC) yok. Bir TOC oluştur, ve gerekli bağlantıları koy, mesela madde 24'te Bu Kanun kapsamında yapılacak teftiş ve incelemelerde, 4857 sayılı Kanunun 92, 93, 96, 97 ve 107 nci maddeleri uygulanır. demiş, ben orada 92'ye tıkladığımda 4857 sayılı kanun açılsın ve 92. maddesine gitsin. hayvan gibi context dependent text parsing yapacaksın, regex üstadı olacaksın, belki hafiften yapay zekaya kayacaksın...

öyle abuk sabuk 4 işlemle asal sayılarla uğraşmayın, adam gibi işler yapın, mutlaka bir işe girmeniz gerekmiyor bunları yapmanız için.

Neyden bahsedıon sen hocu



B
14 yıl (23 mesaj)
Onbaşı

11. Sınıf web tasarım öğrencisiyim gecen sene (10.sınıf) C# dilini öğrendim karneme 80 den 4 düstü ama bir senede unutmusum herseyı :( Duyduguma gorede 12. Sınıfta tekrar C# görecekmişik :( (11.sınıfta programlama dili dersi yok)



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

G
14 yıl (14266 mesaj)
Yarbay




DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.