Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

rekursive Zahlenreihe

Diskussion: rekursive Zahlenreihe im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Python mit RegEx PHP-Code: import re def expander ( numstring ,  steps ):      numparser  =  re . compile ( '1+|2+|3+|4+|5+|6+|7+|8+|9+' ...

Antwort
Alt 20.10.10, 23:38   #16 (permalink)
CDW
Moderator
Themenstarter
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Anzeige

Python mit RegEx

PHP-Code:
import re

def expander
(numstringsteps):
    
numparser re.compile('1+|2+|3+|4+|5+|6+|7+|8+|9+')
    
    for 
step in range(steps):
        
result = []
        for 
group in numparser.findall(numstring):
            
result.extend((str(len(group)), group[0]))
            
        
numstring "".join(result)
        
    return 
numstring 
Interaktion:
Code:
>>> expander("1",1)
'11'
>>> expander("1",2)
'21'
>>> expander("1",3)
'1211'
>>> expander("1",4)
'111221'
>>> expander("1",5)
'312211'
>>> len(expander("1",30))
5808
>>> expander("1",30)[:60] # die ersten 60 Stellen
'132113213221133112132123123112111311222112132113311213211231'
>>> len(expander("1",50))
1166642
>>> expander("1",50)[:60] # die ersten 60 Stellen
'311311222113111231133211121312211231131112311211133112111312'
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 30.11.10, 12:04   #17 (permalink)
 
Registriert seit: 10.11.10
DMRMcK Leistung: Z3
Likes: 0
Standard Lösung in VB

Meine Lösung in VB
Als erster Wert wird hier die 11 ausgegeben - also der erste "umgewandelte", wodurch hierbei nach 30 Durchläufen die Zahl mit 5808 Stellen angegeben wird.

VB   
Code:
Module Module1

    Sub Main()

        Dim a As String = "1", b As String = ""
        Dim x As Integer

        For x = 1 To 30
            Do While a.Length > 0
                Select Case a.Length

                    Case Is > 2
                        If a.Substring(0, 1) = a.Substring(1, 1) And a.Substring(1, 1) = a.Substring(2, 1) Then
                            b &= "3" & a.Substring(0, 1)
                            If a.Length > 3 Then
                                a = a.Substring(3)
                            Else
                                a = ""
                            End If
                        ElseIf a.Substring(0, 1) = a.Substring(1, 1) Then
                            b &= "2" & a.Substring(0, 1)
                            a = a.Substring(2)
                        Else
                            b &= "1" & a.Substring(0, 1)
                            a = a.Substring(1)
                        End If

                    Case Is > 1
                        If a.Substring(0, 1) = a.Substring(1, 1) Then
                            b &= "2" & a.Substring(0, 1)
                            If a.Length > 2 Then
                                a = a.Substring(2)
                            Else
                                a = ""
                            End If
                        Else
                            b &= "1" & a.Substring(0, 1)
                            a = a.Substring(1)
                        End If

                    Case Is = 1
                        b &= "1" & a
                        a = ""

                End Select
            Loop
            a = b
            b = ""
            Console.WriteLine(x)
            Console.WriteLine(a)
            Console.WriteLine(a.Length.ToString)
            Console.WriteLine()
        Next
        
        Console.ReadLine()

    End Sub

End Module
DMRMcK ist offline   Mit Zitat antworten
Alt 18.03.11, 20:02   #18 (permalink)
 
Registriert seit: 16.03.11
chuck Leistung: Z3
Likes: 0
Standard

Habe das Problem mit einer funktionalen Programmiersprache gelöst, Standard ML.
Standard ML   
fun literally' n c nil = (Int.toString n) ^ (Char.toString c)
| literally' n c (c'::cs) = if c=c' then literally' (n+1) c cs else (Int.toString n) ^ (Char.toString c) ^ (literally' 1 c' cs)
fun literally str = case (explode str) of nil => "" | (c::cs) => literally' 1 c cs

fun sequence' n str = if n=0 then str else sequence' (n-1) (literally str)
fun sequence n = sequence' n "1"


Ergebnis   
> sequence 30;
val it : string = "1321132132211331121321231231121113112221121321133 11213211231232112311311222112111312211311123113322 11213211321223112111311222112\..."

> List.length (explode (sequence 30));
val it : int = 5808

Geändert von chuck (18.03.11 um 20:05 Uhr)
chuck ist offline   Mit Zitat antworten
Alt 08.05.11, 17:09   #19 (permalink)
 
Registriert seit: 08.05.11
purple Leistung: Facit NTK
Likes: 0
Standard

RegEx mit Perl:
Code:
#!/usr/bin/perl -w

$t = "1";

for (1 .. 30) { $t =~ s/((.)\2*)/length ($1). $2/ge }

print "$t\n";
die ersten 50 Ziffern
Code:
13211321322113311213212312311211131122211213211331 ...
purple ist offline   Mit Zitat antworten
Alt 07.06.11, 15:58   #20 (permalink)
 
Registriert seit: 07.06.11
NattleBet Leistung: Facit NTK
Likes: 0
Standard

Bin gerade auf das Forum gestoßen, der Teil hier gefällt mir schon mal sehr!
Meine Lösung in Java

Show   
package rekursiveZahlenreihe;

import java.util.ArrayList;
import java.util.List;

public class RekursiveZahlenreihe {

class Section {
char c;
int count = 1;

Section(Character c) {
this.c = c;
}

void inc() {
count++;
}
}

private String newNumber;
private String lastNumber;

public void start(int value) {
lastNumber = "1";
for (int i = 0; i < value - 1; i++) {
List<Section> sections = new ArrayList<Section>();
char lastChar = ' ';
for (Character c : lastNumber.toCharArray()) {
if (!c.equals(lastChar)) {
sections.add(new Section(c));
} else {
sections.get(sections.size() - 1).inc();
}
lastChar = c;
}

// die newNumber wird für jede section die Länge des Strings und der Wert dessen
StringBuilder sb = new StringBuilder();
for (Section s : sections) {
sb.append(s.count).append(s.c);
}
newNumber = sb.toString();
lastNumber = newNumber;
}
ausgabe(value);
}

private void ausgabe(int value) {
System.out.println("Wert" + value + ": " + newNumber);
System.out.println("Länge von Wert" + value + ": " + newNumber.length());
}

public static void main(String[] args) {
new RekursiveZahlenreihe().start(30);
}
}


Ausgabe   
Wert30: 31131122211311123113321112131221123113111231121113 31121113122112132113121113222112311311221112131221 12311311222112111331121113112221121113122113121113 22211213211321322123211211131211121332211231131122 21131112212211131221121321131211132221123113112221 13111231133221121113311211131122211211131221131112 31133221121113122113121113222123211211131211121332 21121321132132211331121321132213211231132132211211 13122123211211131221222112112322211231131122211311 12311332111213213211221113122113121113222112132113 21322123211211131211121332211231131122211311123113 32111213122112311311123112112322211211133112111311 22211211131221131112311332211211131221131211132211 12131221123113111231121123222112111312211312111322 21232112111312111213111213211231132132211211131221 23211211131221222112112322211213211321322113311213 21231231121113112221121321132132211322132113213221 12311311222113311213212322211211131221131211221321 12311321322112111312211312113221133211322112211213 32211231131122211311123113321112131221123113111231 12111331121113122112132113121113222112311311221112 13122112311311222112111331121113112221121113122113 12111322211213211321223112111311222112132113213221 13312221131122112211131221131211132221232112111312 11121311121321123113213221121113122123211211131221 22211211232221121321132132211331121321231231121113 11222112132113213221132213211321322112311311222113 31121321232221121113122113121122132112311321322112 11131221131211322113321132211221121332211213211321 32211331121321231231121113112221121321133112132112 31232112311311222112111312211311123113322112132113 21223112111311222112132113213221123123211231132132 21123113112221131112311332211211131221131211132211 12131221123113111231121123222112132113213221133122 11223113112221121113122113111231133221121321132132 21133122211332111213112221133211322112211213322112 31131122211311123113321112131221123113111231121113 31121113122112132113121113222112311311221112131221 12311311222112111331121113112221121113122113121113 22211213211321322123211211131211121332211231131122 21131112311332111213122112311311123112112322211322 31131122211311123113321112131221123113111231121123 22211211131221131211132221232112111312211322111312 21121321131211132221123113112211121312211231131122 11322112211213322112132113213221133112132123123112 11131211131221223113112221131112311332211211131221 13121113221112131221123113111231121123222112132113 21322113311213212312311211131221132231121113311211 13122112132113111231132231121113213221231221132221 22211211232221121113122113121113222123211211131211 12131112132112311321322112111312212321121113122112 13111213122112132113213221123113112221133112132123 22211211131221131211221321123113213221121113122113 12111322211213111213122112132113121113222112132113 21322113311213212322211231131122211311123113223112 11131122211213211331121321122112133221121113122113 12111322212311222122132113213221123113112221133112 13212322211211131221131211132221232112111312111213 32211213111213122112132113121113222112132113213221 23211211131211121332211213211321322113311213212312 31121113112221121321133112132112211213322112311311 22211311123113321112131221123113112221132231131122 21121113122113111231133221121321132122311211131122 21121321132122211322212221121123222112111312211312 11132221232112111312111213111213211231131112311311 22112213211321322113311213212322211231131122211311 12311322311211131122211213211331121321122112133221 12111312211312111322212321121113121112131112132112 31132132211211131221232112111312212221121123222112 13111213122112132113121113222112132113213221232112 11131211121332211213211321322113311213211322132112 31132132211211131221232112111312212221121123222112 13211321322113311213212312311211131122211213211331 12132112312321123113112221121113122113111231133221 12132113212231121113112221121321132122211322212221 12112322211231131122211311123113321112131221123113 11123112111331121113122112132113121113222112311311 22111213122112311311222112111331121113112221121113 12211312111322211213211321322123211211131211121332 21123113112221131112311332111213213211221113122113 12111322211213211321322123211211131211121332211213 21132132211331121321231231121113122113223112111331 12111312212221121123222112132113213221133112132123 22211322311311222113111231133211121312211231131112 31121123222112111312211312111322212321121113121112 13111213211231132132211211131221131211221321123113 21322112311311222113111221132221232221123113112221 13221113122113121113222112132113213221133112132113 31121113122122211211132213211231131122212322211331 222113112211
Länge von Wert30: 4462
NattleBet ist offline   Mit Zitat antworten
Alt 08.06.11, 10:39   #21 (permalink)
 
Registriert seit: 08.05.11
purple Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von xeno Beitrag anzeigen
zur überprüfung auf korrektheit kann übrigens die länge der 30. Zahl angeschaut werden, die sollte im optimalfall 5808 sein

gruß und viel spaß, xeno
4462 != 5808
purple ist offline   Mit Zitat antworten
Alt 08.06.11, 10:57   #22 (permalink)
 
Registriert seit: 07.06.11
NattleBet Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von xeno Beitrag anzeigen
stimmt, hab mich verzählt. beginnt man mit der 1, dann hat der 31. wert eine länge von 5808 und der 30. 4462.
Wohl noch nicht fertig gelesen
NattleBet ist offline   Mit Zitat antworten
Alt 08.06.11, 12:01   #23 (permalink)
 
Registriert seit: 08.05.11
purple Leistung: Facit NTK
Likes: 0
Standard

gelesen schon, hab aber trotzdem den gleichen Ueberlegungsfehler gemacht wie die meisten hier. Bist einer der wenigen, die die richtige Antwort gefunden haben. Gratuliere.
purple ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » rekursive Zahlenreihe
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zahlenreihe Xalon Programmieraufgaben 63 11.11.10 15:10


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61