Gå til innhold

Hjelp med å erstatte deler av en string


Anbefalte innlegg

Hei, trenger hjelp med å erstatte deler av en string.

 

En slik type string: $string = '13|33|33|5|53';

I denne stringen er det da disse verdiene: (programmerer blackjack, A = ess)

5|A|A|3|A

 

Det jeg skal: jeg skal gjøre om verdien til essene om de overstiger 21. Om det ikke overstiger 21 skal det har verdien 11.

 

Altså, eksempelet over vil jeg at skal bli: 5|11|1|3|1

 

Har kommet dit at jeg henter ut første ESS, men sliter litt med å få til resten (erstatte resten av essene med verdien 1).

Noen som kan hjelpe? :)

 

<?php

function KortVerdi($kort) {
	if($kort >= 1 && $kort <= 4) $value = 2;
	if($kort >= 5 && $kort <= 8) $value = 3;
	if($kort >= 9 && $kort <= 12) $value = 4;
	if($kort >= 13 && $kort <= 16) $value = 5;
	if($kort >= 17 && $kort <= 20) $value = 6;
	if($kort >= 21 && $kort <= 24) $value = 7;
	if($kort >= 25 && $kort <= 28) $value = 8;
	if($kort >= 29 && $kort <= 32) $value = 9;
	if($kort >= 33 && $kort <= 36) $value = 1;
	if($kort >= 37 && $kort <= 40) $value = 10;
	if($kort >= 41 && $kort <= 44) $value = 10;
	if($kort >= 45 && $kort <= 48) $value = 10;
	if($kort >= 49 && $kort <= 52) $value = 10;
	if($kort >= 53 && $kort <= 56) $value = 11;
	return $value;
}

$string = '13|33|33|5|53';

$q = explode('|', $string);
$c = count($q);
$spillerTotal = 0;
$a = 0;
$ny = '';

/** henter ut total sum på kort **/
for($i = 0; $i <= ($c-1); $i++)
		$spillerTotal = KortVerdi($q[$i]) + $spillerTotal;

/** sjekker om det er ess i stringen **/
for($i = 0; $i <= (count($q)-1); $i++) {
	if(in_array($q[$i], array(33, 34, 35, 36, 53, 54, 55, 56))) {
		$a = $a + 1;
		/** tar ut første esset **/
		if($a == 1) {
			$f = $i;
		}
	}
}

/** hvis det er fler enn et ess **/
if($a > 1) {
	for($i = 0; $i <= (count($q)-1); $i++) {
		/** når man kommer til første ess i stringen **/
		if($i == $f) {

		}
		else {

		}
	}
}

echo 

$string . '<br><br>
Gammel sum: ' . $spillerTotal . '<br>
Ny sum: '.$ny.'<br><br>
Det er ' . $a . ' ess blandt kortene! Første ess er(index): ' . $f;

?>

Lenke til kommentar
Videoannonse
Annonse

Burde du ikke vurdere å behandle hånden som en tabell heller enn som en string?

Er du sikker på at det er mer praktisk å behandle ess med verdi 1 og 11 som to kort med ulik identitet? Slik det er nå har du i praksis 56 kort i kortstokken.

 

Jeg ville ha implementert en enkel sorteringsalgoritme som først sorterte hånden i stigende rekkefølge (der ess teller 11) - kan vel så gjerne sorteres etter ID dersom det er mest praktisk, men da må ess ha høyest ID-verdi. Deretter ville jeg ha summert, og fortløpende vurdert om summen overstiger 21. Dersom den gjør det, vil ess automatisk bli å telle 1.

 

Dette ble en svært overfladisk forklaring. Jeg får sette meg grundigere inn i det i morgen dersom du trenger mer hjelp ;)

 

En logisk brist i eksempelet ditt er at du har to kort med samme ID, f.eks. to sparess. Vel mulig at du aldri vil få utdelt to identiske kort, men dette er også noe du må være obs på.

Endret av srbz
Lenke til kommentar

Burde du ikke vurdere å behandle hånden som en tabell heller enn som en string?

Er du sikker på at det er mer praktisk å behandle ess med verdi 1 og 11 som to kort med ulik identitet? Slik det er nå har du i praksis 56 kort i kortstokken.

 

Jeg ville ha implementert en enkel sorteringsalgoritme som først sorterte hånden i stigende rekkefølge (der ess teller 11) - kan vel så gjerne sorteres etter ID dersom det er mest praktisk, men da må ess ha høyest ID-verdi. Deretter ville jeg ha summert, og fortløpende vurdert om summen overstiger 21. Dersom den gjør det, vil ess automatisk bli å telle 1.

 

Dette ble en svært overfladisk forklaring. Jeg får sette meg grundigere inn i det i morgen dersom du trenger mer hjelp ;)

 

En logisk brist i eksempelet ditt er at du har to kort med samme ID, f.eks. to sparess. Vel mulig at du aldri vil få utdelt to identiske kort, men dette er også noe du må være obs på.

 

Kunne trenkt noe hjelp med denne biten, ja. Vil ikke poste hele koden her, pga folk kommer til å stjele den :)

 

Hva som skal skje:

- Når totalsummen overstiger 21 med ess skal den gjøres om til 1 istedenfor 11.

- F.eks: 9, A = 20. Trekker du da en 5 blir det da A, 9, 5 = 15.

 

Noen som kan hjelpe med det ved å bruke testkoden i førstepost?

 

 

 

Edit:

Løste det selv! :)

 

<?php

function KortVerdi($kort) {
	if($kort >= 1 && $kort <= 4) $value = 2;
	if($kort >= 5 && $kort <= 8) $value = 3;
	if($kort >= 9 && $kort <= 12) $value = 4;
	if($kort >= 13 && $kort <= 16) $value = 5;
	if($kort >= 17 && $kort <= 20) $value = 6;
	if($kort >= 21 && $kort <= 24) $value = 7;
	if($kort >= 25 && $kort <= 28) $value = 8;
	if($kort >= 29 && $kort <= 32) $value = 9;
	if($kort >= 33 && $kort <= 36) $value = 11;
	if($kort >= 37 && $kort <= 40) $value = 10;
	if($kort >= 41 && $kort <= 44) $value = 10;
	if($kort >= 45 && $kort <= 48) $value = 10;
	if($kort >= 49 && $kort <= 52) $value = 10;
	return $value;
}

$string = '9|33|37';

$q = explode('|', $string);
$c = count($q);
$spillerTotal = 0;
$a = 0;
$ny = 0;
$ny1 = 0;
$j = 0;
$m = array();
$n = array();
$z = array();
$p = array();


/** vi legger essene i egen array, vanlige tall i annen array **/
for($i = 0; $i <= ($c-1); $i++) {
	do {
		if(!in_array($q[$i], array(33, 34, 35, 36))) {
			array_push($m, $q[$i]);
		}
		if(in_array($q[$i], $m)) {
		}
		else {
			if(in_array($q[$i], array(33, 34, 35, 36))) {
				array_push($n, $q[$i]);
			}
		}
	} while($c == ($c-1));
}

/** henter ut total sum av kortene som ikke er ess **/
for($i = 0; $i <= (count($m)-1); $i++)
	$ny1 = KortVerdi($m[$i]) + $ny1;

/** teller antall ess **/
$v = count($n);

/** legger essen til i array med kortet **/
foreach($n as $b)
	array_push($z, $q[array_search($b, $q)]);

if(count($n) > 1) {
	$ny2 = 0;
	for($i2 = 0; $i2 <= (count($m)-1); $i2++) {
		$ny2 = (KortVerdi($m[$i2]) + $ny2);
	}
	foreach($n as $h => $u) {
		if((KortVerdi($u) + ($ny2)) > 21) {
			array_push($p, 1);
			$ny2 = $ny2 + 1;
		}
		else {
			if((KortVerdi($u) + ($ny2)) > 21) {
				array_push($p, 1);
				$ny2 = $ny2 + 1;
			}
			else {
				array_push($p, 11);
				$ny2 = $ny2 + 11;
			}
		}
	}
}
else {
	for($i = 0; $i <= ($v-1); $i++) {
		if((KortVerdi($z[$i]) + ($ny1)) > 21) {
			array_push($p, 1);
		}
		else {
			array_push($p, 11);
		}
	}
}

$ny = array_sum($p) + $ny1;

echo $string.'<br>Sum før ess: '.$ny1.'<br>Antall ess: '.$v.'<br>Sum: '.$ny.'<br><br>';

?>

Endret av Thomas.
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...