PHP :: Aufgabe #274

1 Lösung Lösung öffentlich

Anzahl an Nachbar-Dupletten in einem Array

Anfänger - PHP von thunderbird - 28.04.2020 um 09:38 Uhr
Es sollen die Anzahl von den Nachbar-Dubletten eines Zahlen-Arrays ermittelt werden. Die Nachbar-Dubletten sind gleiche benachbarte Zahlen in einem Array.
Es soll außerdem auf folgendes geachtet werden: Die Nachbar-Dubletten sind genau nur für zwei benachbarte Mitglieder definiert - sollte ein drittes Mitglied dabei benachbart sein, wird es nicht mitgezählt, weil es noch einen gleichen Nachbar braucht.

Beispiel:
Array = [3,3,7] : Ausgabe = 1
Array = [3,3,3] : Ausgabe = 1 (Mitglieder von Index 0 und 1 sind benachbart, Index 2 braucht auch ein Nachbar aber hat keinen)
Array = [3,3,3,3] : Ausgabe = 2
Array = [0, 3, 3, 3, 2, 7, 7, 7, 7, 3, 2, 1, 1, -2, 4, 4, 8, 9, 8, 6 ] : Ausgabe = 5

Zusatzanforderungen:
- Unter 30 Zeilen Code
- Variable Länge der Arrays
- Alle reellen Zahlen werden akzeptiert

Lösungen:

1 Kommentar
vote_ok
von Exception (6730 Punkte) - 30.04.2020 um 17:49 Uhr
Abzüglich des Test-Arrays sind es inkl. Leerzeilen ca. 10 Zeilen.
Für die Funktionsweise des Regex siehe Bild im Anhang.

Quellcode ausblenden PHP-Code
<?php

$items = [
  [ 3, 3, 7 ],
  [ 3, 3, 3 ],
  [ 3, 3, 3, 3 ],
  [ 0, 3, 3, 3, 2, 7, 7, 7, 7, 3, 2, 1, 1, -2, 4, 4, 8, 9, 8, 6 ],
  [ -3, -3, 5, 44, 44, -55, -55 ] // (negative) multiple digits
];

$results = [];

foreach ($items as $key => $item) {

  $val = implode(',', $item);
  preg_match_all('/([^,]+?),\1/', $val, $matches);

  $results[$key]['value'] = $val;
  $results[$key]['doublets'] = $matches[0];
}

var_dump($results);


Konsolenausgabe:

array(5) {
[0]=>
array(2) {
["value"]=>
string(5) "3,3,7"
["doublets"]=>
array(1) {
[0]=>
string(3) "3,3"
}
}
[1]=>
array(2) {
["value"]=>
string(5) "3,3,3"
["doublets"]=>
array(1) {
[0]=>
string(3) "3,3"
}
}
[2]=>
array(2) {
["value"]=>
string(7) "3,3,3,3"
["doublets"]=>
array(2) {
[0]=>
string(3) "3,3"
[1]=>
string(3) "3,3"
}
}
[3]=>
array(2) {
["value"]=>
string(40) "0,3,3,3,2,7,7,7,7,3,2,1,1,-2,4,4,8,9,8,6"
["doublets"]=>
array(5) {
[0]=>
string(3) "3,3"
[1]=>
string(3) "7,7"
[2]=>
string(3) "7,7"
[3]=>
string(3) "1,1"
[4]=>
string(3) "4,4"
}
}
[4]=>
array(2) {
["value"]=>
string(21) "-3,-3,5,44,44,-55,-55"
["doublets"]=>
array(3) {
[0]=>
string(5) "-3,-3"
[1]=>
string(5) "44,44"
[2]=>
string(7) "-55,-55"
}
}
}