Şimdi Ara

Programlama Yarışması, Bütün Diller Serbest :)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
18
Cevap
0
Favori
6.746
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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 :)







  • haha mükemmel

    gece gece uğraş çıktı.
  • :)
  • Ç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 >




  •  
    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("****"));




  • çok güzel bir şey bulmuşsun dostum.
    Tam da böyle birşey arıyordum.
  • veritabanı 11. sınıf öğrencisiyim. hiç bir soruyu yapamadım. kendime acıyorum.
  • İlk soruda onlarca kez aldığım out of boundary hatalarından sonra bıraktım.
  • 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 :)
  • güzel site.teşekkürler.
  • İ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.




  • 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.




  • Harika bir paylaşım. Ellerine sağlık... Tam aradığım şey
  • ilginçmiş
  • 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ı >
  • 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




  • 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ı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.