Valuation
Ruby is cool:
Code: Select all
string = '93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx'
value = 0
xx = 0
while string.include?('x')
i = string.index('x')
xx += string[i-2,1].to_i + string[i-1,1].to_i
string.sub!('x','')
end
string.each_byte do |s|
value += s.chr.to_i
end
p value + xx
-
- Posts: 1
- Joined: Tue Dec 23, 2008 11:19 pm
Did it with perl
$s='93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx';
while (1)
{
$l= substr($s,$i,1);
last if ($l eq "");
if ($l eq "x")
{ $all=$all+($last+$lastbefore); }
else
{ $all= $all + $l;
$lastbefore=$last;
$last=$l;
}
$i++;
}
print "$all";
while (1)
{
$l= substr($s,$i,1);
last if ($l eq "");
if ($l eq "x")
{ $all=$all+($last+$lastbefore); }
else
{ $all= $all + $l;
$lastbefore=$last;
$last=$l;
}
$i++;
}
print "$all";
took me 3 approaches before i had all logical errors out. counting principle is the easiest
Code: Select all
<?php
$input = '93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx';
$num_appear = array( 0 => 0,
1 => 0,
2 => 0,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
7 => 0,
8 => 0,
9 => 0
);
$curr = 0;
for($i = 0; $i < strlen($input); $i++)
{
if($input[$i] == 'x')
{
$num_appear[$last]++;
$num_appear[$curr]++;
}
else
{
$last = $curr;
$curr = $input[$i];
$num_appear[$curr]++;
}
}
$sum = 0;
for($x = 1; $x < 10; $x++)
$sum += $x * $num_appear[$x];
echo 'The resulting sum is: '.$sum;
?>
Code: Select all
<?php
$cipher = "93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx";
$sum = 0;
for($j = 0; $j < strlen($cipher); $j++){
$x = substr($cipher, $j, 1);
if($x == "x") {
$cipher = substr_replace($cipher, "", $j, 1);
$j -= 3;
}
else $sum += $x;
echo "$x\n";
}
echo "$sum";
?>
Javascript for me too
[/code]
Code: Select all
<script type="text/javascript">
var wort = "93752xxx746...";
var erg = 0;
var tmpwort="";
for(i=0;i<wort.length;i++){
if(wort.charAt(i)=='x'){
tmpwort = wort.slice(0,i);
tmpwort = tmpwort + wort.slice(i+1);
wort = tmpwort;
i = i -3;
}
else {
erg = erg + parseInt(wort.charAt(i));
}
}
document.write("<p style=\"color:red\">" + erg + "</p>");
</script>
VBA of excel
VBA works also fine:
Sub summier()
Dim wert1 As String
Dim wert2 As String
Dim wert3 As String
Dim erg As Long
zahl = 1
wert1 = Workbooks("Mappe1.xls").Worksheets("Tabelle1").Cells(1, 1).Value
laenge = Len(wert1)
Do
akt = Mid(wert1, zahl, 1)
If akt = "x" Then
wert2 = Mid(wert1, 1, zahl - 1)
wert3 = Mid(wert1, zahl + 1, laenge - zahl)
laenge = laenge - 1
zahl = zahl - 3
wert1 = wert2 + wert3
End If
If akt = "L" Then MsgBox (erg)
erg = erg + Val(akt)
zahl = zahl + 1
Loop Until akt = "L"
End Sub
... 5 minutes to work
Sub summier()
Dim wert1 As String
Dim wert2 As String
Dim wert3 As String
Dim erg As Long
zahl = 1
wert1 = Workbooks("Mappe1.xls").Worksheets("Tabelle1").Cells(1, 1).Value
laenge = Len(wert1)
Do
akt = Mid(wert1, zahl, 1)
If akt = "x" Then
wert2 = Mid(wert1, 1, zahl - 1)
wert3 = Mid(wert1, zahl + 1, laenge - zahl)
laenge = laenge - 1
zahl = zahl - 3
wert1 = wert2 + wert3
End If
If akt = "L" Then MsgBox (erg)
erg = erg + Val(akt)
zahl = zahl + 1
Loop Until akt = "L"
End Sub
... 5 minutes to work
c++ - ways to complicated!
Hi
I´m relatively new in the field of programming, but i tried to cope with the "Valuation Challange" via c++
I haven´t grown a custom of using elements of <strings> or streams yet, so tried to master it with
regular c-strings and pointers. Here´s my solution, but if i take a look at other people´s programmes, i get a little emberassed
There are some german comments, so please don´t feel irritated, if you don´t understand it
I´m relatively new in the field of programming, but i tried to cope with the "Valuation Challange" via c++
I haven´t grown a custom of using elements of <strings> or streams yet, so tried to master it with
regular c-strings and pointers. Here´s my solution, but if i take a look at other people´s programmes, i get a little emberassed
There are some german comments, so please don´t feel irritated, if you don´t understand it
Code: Select all
include<iostream>
using namespace std;
int main()
{
char text[] = "93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx";
int summe = 0;
unsigned int i = 0;
while (text[i] != '\0') // String wird Zeichen für zeichen durchgegangen
{
char zahl[2];
char *ptr = text;
char *ptr2 = zahl;
if ((text[i] != 'x')) // hier sucht er Zeichen für Zeichen nach Zahlen
{
*ptr2 = text[i];
summe = summe + atoi(zahl); // und addiert sie zu der Summe
i++;
}
else if (text[i] == 'x') // Sucht String nach 'x' ab und
{
int summe2 = 0;
int j = 0;
while(text[i] == 'x')
{
//und durchläuft j schleifen
j+=1;
*ptr2 = text[i-j];
summe2 += atoi(zahl);
if(text[i-(j+1)] != 'x') //prüft, ob 2 plätze links vom 1. x, Zahl oder x ist
{
*ptr2 = text[i-(j+1)];
summe2 += atoi(zahl);
}
else if (text[i-(j+1)] == 'x')
{
int k=1;
while (text[i-(j+1)-k] == 'x')
{
k++;
}
*ptr2 = text[i-(j+1)-k];
summe2 += atoi(zahl);
}
i++;
}
cout <<" Gesamtsumme: " << summe2 << "\n"; //zur manuellen Nachkontrolle
cout <<" Anzahl x: " << j << "\n";
summe = summe + summe2;
}
}
cout << summe << '\n';
return 0 ;
}
c++ - ways to complicated!
Hi
I´m relatively new in the field of programming, but i tried to cope with the "Valuation Challange" via c++
I haven´t grown a custom of using elements of <strings> or streams yet, so tried to master it with
regular c-strings and pointers. Here´s my solution, but if i take a look at other people´s programmes, i get a little emberassed
There are some german comments, so please don´t feel irritated, if you don´t understand it
I´m relatively new in the field of programming, but i tried to cope with the "Valuation Challange" via c++
I haven´t grown a custom of using elements of <strings> or streams yet, so tried to master it with
regular c-strings and pointers. Here´s my solution, but if i take a look at other people´s programmes, i get a little emberassed
There are some german comments, so please don´t feel irritated, if you don´t understand it
Code: Select all
include<iostream>
using namespace std;
int main()
{
char text[] = "93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx";
int summe = 0;
unsigned int i = 0;
while (text[i] != '\0') // String wird Zeichen für zeichen durchgegangen
{
char zahl[2];
char *ptr = text;
char *ptr2 = zahl;
if ((text[i] != 'x')) // hier sucht er Zeichen für Zeichen nach Zahlen
{
*ptr2 = text[i];
summe = summe + atoi(zahl); // und addiert sie zu der Summe
i++;
}
else if (text[i] == 'x') // Sucht String nach 'x' ab und
{
int summe2 = 0;
int j = 0;
while(text[i] == 'x')
{
//und durchläuft j schleifen
j+=1;
*ptr2 = text[i-j];
summe2 += atoi(zahl);
if(text[i-(j+1)] != 'x') //prüft, ob 2 plätze links vom 1. x, Zahl oder x ist
{
*ptr2 = text[i-(j+1)];
summe2 += atoi(zahl);
}
else if (text[i-(j+1)] == 'x')
{
int k=1;
while (text[i-(j+1)-k] == 'x')
{
k++;
}
*ptr2 = text[i-(j+1)-k];
summe2 += atoi(zahl);
}
i++;
}
cout <<" Gesamtsumme: " << summe2 << "\n"; //zur manuellen Nachkontrolle
cout <<" Anzahl x: " << j << "\n";
summe = summe + summe2;
}
}
cout << summe << '\n';
return 0 ;
}
Wow. Some code-examples here seem to be kinda ... bloated
Its so easy with Java (and nice to read as well )
Its so easy with Java (and nice to read as well )
Code: Select all
public class Valuation {
public int calculate(String s){
StringBuffer sb = new StringBuffer(s);
int result=0, pos=0;
while(pos < sb.length()){
if(sb.charAt(pos) != 'x'){
result += Integer.parseInt(sb.substring(pos, pos+1));
pos++;
}
else {
sb.deleteCharAt(pos);
pos-=2;
}
}
return result;
}
public static void main(String[] args) {
Valuation v = new Valuation(); System.out.println(v.calculate("93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx"));
}
}
my php solver:
Code: Select all
#!/usr/bin/env php
<?php
$a = '93752xxx746x27x1754xx90x93xxxxx238x44x75xx08750912738x8461x8759383xx328x4x4935903x6x5550360535004x0xx945958961296x267x8842xxx5x6xx61x4x48482x80xxx83316843x7x4x83x9521731xxx25x51xx457x6x5x9698222x771237745034x5133592x27xx8x87xx35221x36x0x50x23x7x63x998418xx';
$sum = 0;
$idx = 0;
do {
if ($a[$idx] == 'x') {
$a = substr_replace($a, '', $idx, 1);
$idx -= 2;
} else {
$sum += (int)$a[$idx++];
}
} while ($idx < strlen($a));
print "$sum\n";
?>
Delphi (no kidding, people use that! no error checking either):
JS in convenient bookmarklet-form:
Code: Select all
function Challenge153(Input: string): Integer;
var s: string; p: Integer;
begin
s := Input; Result := 0; p := 1;
while (p <= Length(s)) do
begin
if s[p] in ['0'..'9'] then begin
Inc(Result, Ord(s[p])-48);
end else if s[p] = 'x' then begin
s := Copy(s, 1, p-1)+Copy(s, p+1, Length(s));
Dec(p, 3);
end;
Inc(p);
end;
end;
Code: Select all
javascript:
function a(s) {
s = s.replace(/[^0-9x]/g, '');
var p = 0, x = 0, c;
while (p < s.length) {
c = s.charCodeAt(p);
if (c == 120) {
s = s.slice(0, p) + s.slice(p+1);
p -= 3;
if (p < 0) { p = 0; }
} else if (c > 48 && c < 58) {
x += c-48;
}
p++;
}
return x;
}
alert(a(window.getSelection().toString()));
-
- Posts: 1
- Joined: Wed Dec 03, 2008 9:08 pm
Did it with Delphi^^
muhahahaha 10 min coding with delphi
greez
Code: Select all
procedure delx;
var i:integer; st1:tstringlist;
begin
st1:=tstringlist.Create;
for i:=1 to length(form1.memo1.Text) do
begin
if lowercase(form1.memo1.Text[i])='x' then
begin
form1.memo1.Text:=copy(form1.memo1.text,1,i-1)+copy(form1.memo1.text,i-2,2)+copy(form1.memo1.text,i+1,length(form1.Memo1.Text));
end;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,count:integer; st1:tstringlist;
begin
while stringcount(memo1.Text,'x')>0 do delx;
memo1.Text:=stringreplace(memo1.Text,#13#10,'',[rfreplaceall]);
for i:=1 to length(memo1.Text) do
begin
count:=count+strtointdef(memo1.Text[i],0);
end;
showmessage(inttostr(count));
end;