PHP Python kodunu dönüştürmek bir mantık hata bulma

3 Cevap php

Piton kodu ile ise 1 giriş 7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4, PHP kodu ile 0 döndürür: 0 tersi anlamına gelirken 1, 4x4 sihirli kare toplamları aynı olduğu anlamına gelir. Piton kodu doğru.

PHP kod sorunu fonksiyonu gibi görünüyor divide 's-döngü, PHP çok paralar verir çünkü.

How does the logic of PHP code differ from Piton's?

PHP

$data = "7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4";
$array = explode("|", $data);

# Calculate the unique sums of the four figures
# @return array int
function divide ( $array ) {
        $sum = array_map('array_sum', array_chunk($array, 4));
        $apu_a = array();
        for ( $i = 0; $i < count( $sum ); $i++ ) {
                if ( $i % 5 == 0 )
                        $apu_a []= $array[$i];
        }
        $sum []= array_sum( $apu_a );

        $apu_a = array();
        for ( $i = 0; $i < count( $sum ); $i++ ) {
                if ( $i % 3 == 0 and $i != 15 and $i != 0 )
                        $apu_a []= $array[$i];
        }
        $sum []= array_sum( $apu_a );

        $result = array_unique($sum);
        return $result;
}

Piton

data = "7|12|1|14|2|13|8|11|16|3|10|5|9|6|15|4"
lista = map(int,data.split("|"))

def divide( lista ):
        summat = [sum(lista[i:i+4]) for i in range(0,len(lista),4)]
        summat += [sum(lista[0::5]) for i in range(0, len(lista), 16)]
        summat += [sum(a for i,a in enumerate(lista) if i %3==0 and i != 15 and i != 0)]
        return set(summat)

3 Cevap

Sorun PHP uyumludur:

for ( $i = 0; $i < count( $sum ); $i++ ) {

istedim:

for ( $i = 0; $i < count( $array ); $i++ ) {

Her iki yerde de bunu düzeltmek ve doğru cevap olsun.

BTW: Sadece ana diyagonalleri kontrol edilir, ama aynı zamanda diğer sarma diyagonalleri kontrol edebilir, ve Greg işaret ettiği gibi, sen sütunları toplamı asla.

Python kodunda, var:

    summat += [sum(lista[0::5]) for i in range(0, len(lista), 16)]

Ben bu bunu yapmak niyetinde ne yaptığını değil eminim. len(lista) 16 olduğunu, bu nedenle bu aralık range(0, 16, 16) hangi ise [0]. Sonra, hatta liste anlama sol tarafta i kullanarak değil, sadece ana diyagonal boyunca değerleri toplayarak ediyoruz. Bu ana kösegenler boyunca özetlemek için tasarlanmıştır, bu yerine ve basit ile aşağıdaki satırı yapabilirsiniz:

    summat += [sum(lista[0::5])]
    summat += [sum(lista[3:15:3])]

Son olarak, tüm sihirli meydanında columns in toplamları hesaplama değildir. Sen gibi bir şey gerekir:

    summat += [sum(lista[i::4]) for i in range(4)]

Cevabınız için Ned'e bakın; Bu sadece PHP gelişmeler dikkat etmektir:

    $s = 0;
    for ( $i = 0; $i < count( $array ); $i += 5 ) {
        $s += $array[$i];
    }
    $sum[]=$s;

    $s=0;
    for ( $i = 3; $i < 15; $i+=3 ) {
        $s += $array[$i];
    }
    $sum[]=$s;