Menu
Coddy logo textTech

Özet: Veri İşleme

Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 45 / 68.

challenge icon

Görev

Kolay

Üç girdi alacaksınız: virgülle ayrılmış çalışan isimleri listesi, bu çalışanların haftalık çalışma saatlerine karşılık gelen virgülle ayrılmış bir liste ve bir minimum saat eşiği. İlk girdi Alice,Bob,Charlie,Diana,Eve formatında isimleri içerir, ikinci girdi 45,32,50,28,40 formatında sayı olarak saatleri içerir ve üçüncü girdi sayı olarak minimum saat eşiğidir (örnek: 35).

Her üç girdiyi de okuyun ve bunları uygun dizilere dönüştürün. Çalışan isimlerinin anahtar (key) ve çalışma saatlerinin değer (value) olduğu birleştirilmiş bir ilişkisel dizi (associative array) oluşturun. Ardından, yüksek seviyeli dizi fonksiyonlarını (higher-order array functions) kullanarak aşağıdaki işlemleri gerçekleştirin:

  1. Yalnızca minimum saat eşiğinde veya üzerinde çalışanları tutmak için özel bir geri çağırma (callback) fonksiyonu ile array_filter() kullanın.
  2. Filtrelenmiş çalışanlar için fazla mesai ücretini hesaplamak üzere özel bir geri çağırma fonksiyonu ile array_map() kullanın (fazla mesai, 40 saatin üzerindeki her saattir ve normal saatlik 25$ ücretin 1.5 katı oranında ödenir).
  3. Tüm filtrelenmiş çalışanlar arasındaki toplam fazla mesai ücretini hesaplamak için özel bir geri çağırma fonksiyonu ile array_reduce() kullanın.

Sonuçları aşağıdaki formatta yazdırın:

  • İlk olarak, her bir nitelikli çalışanın adını ve fazla mesai ücretini ayrı satırlarda Name: $Amount formatında yazdırın (ondalık kısım 2 basamağa yuvarlanmış olarak).
  • Son olarak, toplam fazla mesai ücretini Total: $Amount formatında yazdırın (ondalık kısım 2 basamağa yuvarlanmış olarak).

Hesaplama detayları:

  • Normal çalışma saatleri (40 saate kadar): saat başına 25$
  • Fazla mesai saatleri (40 saatin üzeri): saat başına 37.50$ (1.5 kat oran)
  • Bir çalışan 40 saat veya daha az çalışmışsa, fazla mesai ücreti 0.00$'dır.

Girdi formatı:

  • Birinci satır: Virgülle ayrılmış çalışan isimleri (örnek: Alice,Bob,Charlie,Diana,Eve)
  • İkinci satır: Sayı olarak virgülle ayrılmış çalışma saatleri (örnek: 45,32,50,28,40)
  • Üçüncü satır: Sayı olarak minimum saat eşiği (örnek: 35)

Beklenen çıktı: Her bir nitelikli çalışan ve fazla mesai ücretleri ayrı satırlarda, ardından toplam fazla mesai ücreti; tüm tutarlar ondalık kısım 2 basamak olacak şekilde formatlanmalıdır.

Kendin dene

<?php
// Girdileri oku
$names = explode(',', trim(fgets(STDIN)));
$hours = explode(',', trim(fgets(STDIN)));
$minHours = intval(trim(fgets(STDIN)));

// Saatleri tam sayıya dönüştür
$hours = array_map('intval', $hours);

// İsimleri ve saatleri birleştiren ilişkisel dizi oluştur
$employees = array_combine($names, $hours);

// TODO: Kodunuzu aşağıya yazın
// 1. Minimum çalışma saatinde veya üzerinde çalışan personelleri tutmak için array_filter() kullanın
// 2. Filtrelenmiş personeller için fazla mesai ücretini hesaplamak üzere array_map() kullanın
// 3. Toplam fazla mesai ücretini hesaplamak için array_reduce() kullanın

// Sonuçları yazdır
// Her bir kalifiye personelin fazla mesai ücretini yazdır
// Toplam fazla mesai ücretini yazdır

?>

Mantık ve Akış bölümündeki tüm dersler