• 20-02-2022, 23:54:28
    #1
    selamlar,
    bi code challange da karsima cikti, zaten acemiyim ama yaparim demistim, olmadi, kafayi yedim.

    Soru su:

    mesela elimizde soyle bir string var : "owoftnuoer". burda ingilizce olarak , one, two, four harflerinin karisimi var, dolayisiyla output soyle olmasi lazim : 124
    bizim oyle bir fonksiyon yazmamiz lazim ki gelen string ne kadar karisik ya da uzun olursa olsun, biz dogru sayilari return edelim. (gelen string i dogru harfler ve kombinasyon ile geldigini varsayacagiz)

    biraz arastirdim, java ve phyton cevaplari var surda ama bunu php ile nasil yapariz?

    ilk calisan fonksiyonu paylasana 150tl gonderiyorum! kucuk miktar ama en azindan belki gaza getirir bizi )
    (verdigim linkteki kodu direk php cevirip yapmayalim, biraz degistirelim, bakalim neler cikacak?)

    bazi ipuclari sunlar

    $num = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] ;

    burda
    z harfi sadece 0 da ,
    u harfi sadece 4 de,
    g harfi sadece 8 de,
    w harfi sadece 2 de,
    x harfi sadece 6 da bulunuyor
  • 21-02-2022, 00:08:12
    #2
    Codingame.com da çıkan challangelar türünde bir soru. Hasta olmasam çözümü yapardım ama gözümü zor açıyorum. Çok zor bir soru değil. str_split ile stringi dizi yapın. Sonra numaraları arayın sonra eşleşen değerleri diziden unset edip çıktıyı bastırın
  • 21-02-2022, 00:11:36
    #3
    function finddigits(string $s)
    {
        $parsed = str_split($s);
        $arr = [];
        for ($i = 0; $i < strlen($s); $i++) {
            if ($parsed[$i] == 'z')
                $arr[0]++;
            if ($parsed[$i] == 'w')
                $arr[2]++;
            if ($parsed[$i] == 'g')
                $arr[8]++;
            if ($parsed[$i] == 'x')
                $arr[6]++;
            if ($parsed[$i] == 'v')
                $arr[5]++;
            if ($parsed[$i] == 'o')
                $arr[1]++;
            if ($parsed[$i] == 's')
                $arr[7]++;
            if ($parsed[$i] == 'f')
                $arr[4]++;
            if ($parsed[$i] == 'h')
                $arr[3]++;
            if ($parsed[$i] == 'i')
                $arr[9]++;
        }
    
        $ans = "";
        foreach ($arr as $k => $v) {
            $ans .= $k;
        }
    
        return $ans;
    }
    
    echo finddigits('owoftnuoer'); // 124
    örnekteki gibi istersen;

    function finddigits(string $s)
    {
    
        $parsed = str_split($s);
        $arr = [
            0 => 0,
            1 => 0,
            2 => 0,
            3 => 0,
            4 => 0,
            5 => 0,
            6 => 0,
            7 => 0,
            8 => 0,
            9 => 0
        ];
        for ($i = 0; $i < strlen($s); $i++) {
            if ($parsed[$i] == 'z')
                $arr[0]++;
            if ($parsed[$i] == 'w')
                $arr[2]++;
            if ($parsed[$i] == 'g')
                $arr[8]++;
            if ($parsed[$i] == 'x')
                $arr[6]++;
            if ($parsed[$i] == 'v')
                $arr[5]++;
            if ($parsed[$i] == 'o')
                $arr[1]++;
            if ($parsed[$i] == 's')
                $arr[7]++;
            if ($parsed[$i] == 'f')
                $arr[4]++;
            if ($parsed[$i] == 'h')
                $arr[3]++;
            if ($parsed[$i] == 'i')
                $arr[9]++;
        }
    
        $arr[7] -= $arr[6];
        $arr[5] -= $arr[7];
        $arr[4] -= $arr[5];
        $arr[1] -= ($arr[2] + $arr[4] + $arr[0]);
        $arr[3] -= $arr[8];
        $arr[9] -= ($arr[5] + $arr[6] + $arr[8]);
    
        $ans = "";
        for ($i = 0; $i < 10; $i++) {
            for ($j = 0; $j < $arr[$i]; $j++) {
                $ans .= $i;
            }
        }
    
        return $ans;
    }
    
    echo finddigits('owoftnuoer'); // 124
    edit: editlerken arkadaşta atmış bunu
  • 21-02-2022, 00:15:22
    #4
    <?php
    function finddigits($s)
    {
        $arr = array_fill(0, 10, 0);
        $ans = "";
        $n = strlen($s);
        for ($i = 0; $i < $n; $i++)
        {
            if ($s[$i] == 'z')
            {
                $arr[0]++;
            }
            if ($s[$i] == 'w')
            {
                $arr[2]++;
            }
            if ($s[$i] == 'g')
            {
                $arr[8]++;
            }
            if ($s[$i] == 'x')
            {
                $arr[6]++;
            }
            if ($s[$i] == 'v')
            {
                $arr[5]++;
            }
            if ($s[$i] == 'o')
            {
                $arr[1]++;
            }
            if ($s[$i] == 's')
            {
                $arr[7]++;
            }
            if ($s[$i] == 'f')
            {
                $arr[4]++;
            }
            if ($s[$i] == 'h')
            {
                $arr[3]++;
            }
            if ($s[$i] == 'i')
            {
                $arr[9]++;
            }
        }
        $arr[7] -= $arr[6];
        $arr[5] -= $arr[7];
        $arr[4] -= $arr[5];
        $arr[1] -= ($arr[2] + $arr[4] + $arr[0]);
        $arr[3] -= $arr[8];
        $arr[9] -= ($arr[5] + $arr[6] + $arr[8]);
        for ($i = 0; $i < 10; $i++)
        {
            for ($j = 0; $j < $arr[$i]; $j++)
            {
                $ans .= chr(($i + ord('0')));
            }
        }
        return $ans;
    }
    
    echo finddigits('owoftnuoer'); //124
  • 21-02-2022, 01:05:58
    #5
    böyle de güzel oldu bence hatalıdır ama bu her zaman doğru verir mi sanmıyorum

    <?php
    function finddigits(string $s)
    {
        $numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
        $parsed = array_values(array_unique(str_split($s)));
    
        foreach ($numbers as $key => $value) {
            foreach (str_split($value) as $item) {
                if (!in_array($item, $parsed)) {
                    unset($numbers[$key]);
                }
            }
        }
    
        return $numbers;
    }
    
    /**
    Array
    (
      [1] => one
      [2] => two
      [4] => four
    )
     */
    finddigits('owoftnuoer');
  • 21-02-2022, 02:02:31
    #6
    biraz daha doğru sonuçlar veren çılgın bir şey daha denedim gece gece iyi beyin jimnastiği oldu iyi geceler

    function finddigits(string $s)
    {
        $numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
        $parsed = str_split($s);
        foreach ($numbers as $key => $number) if (!empty(array_diff(str_split($number), $parsed))) unset($numbers[$key]);
        foreach ($numbers as $key => $number) {
            $nKeys = []; $pKeys = [];
            foreach (str_split($number) as $item) {
                if (!isset($nKeys[$item])) $nKeys[$item] = 0; $nKeys[$item]++;
            }
            foreach ($parsed as $v) {
                if (!isset($pKeys[$v])) $pKeys[$v] = 0; $pKeys[$v]++;
            }
            foreach ($nKeys as $k => $v) if ($pKeys[$k] < $v) unset($numbers[$key]);
        }
        return $numbers;
    }
    
    /**
     * Array
     * (
     * [1] => one
     * [2] => two
     * [4] => four
     * )
     */
    finddigits('owoftnuoer');
  • 21-02-2022, 02:30:28
    #7
    @Polat;
    hocam ornege benzer yaptigin calisiyor, digerleri de calisiyor ama bazen extra sayi ekliyor

    @baransel; hocam seninkisi de calisiyor

    aslinda ben ornektekinden farkli yaklasimlar bekliyordum ama 2 nize birden 75 gondersem olur mu? iban lari PM ile iletin lutfen


    farkli bakis acisi ile cozum gelirse ona da 75 gonderecegim (1 kisi)


    fonksiyonda denemeler yapmak icin ornek stringler:

    norosezene = 017
    tifowoxoursne = 1246
    tefihnireevne= 359


    edit: mesajimin ilk bolumu cikmadi, yeniden yazdim
  • 21-02-2022, 09:12:24
    #8
    entriko adlı üyeden alıntı: mesajı görüntüle
    @Polat;
    hocam ornege benzer yaptigin calisiyor, digerleri de calisiyor ama bazen extra sayi ekliyor

    @baransel; hocam seninkisi de calisiyor

    aslinda ben ornektekinden farkli yaklasimlar bekliyordum ama 2 nize birden 75 gondersem olur mu? iban lari PM ile iletin lutfen


    farkli bakis acisi ile cozum gelirse ona da 75 gonderecegim (1 kisi)


    fonksiyonda denemeler yapmak icin ornek stringler:

    norosezene = 017
    tifowoxoursne = 1246
    tefihnireevne= 359


    edit: mesajimin ilk bolumu cikmadi, yeniden yazdim
    diğerlerinde zaten uğraş olsun diye baktım hocam gece öyle sonradan gördüm farklı muhabbeti iyi oldu gece gece göndermene gerek yok hocam onun yerine 75tl değerinde 3 kişiye 1er aylık Netflix çekiliş yapıp hediye edebilirsin.
  • 21-02-2022, 09:33:36
    #9
    Polat adlı üyeden alıntı: mesajı görüntüle
    diğerlerinde zaten uğraş olsun diye baktım hocam gece öyle sonradan gördüm farklı muhabbeti iyi oldu gece gece göndermene gerek yok hocam onun yerine 75tl değerinde 3 kişiye 1er aylık Netflix çekiliş yapıp hediye edebilirsin.
    hocam ben size gondereyim siz yapin cekilisi, olmaz mi?