Greife auf das erste Zeichen des zweiten Wortes zu und ändere es in Großbuchstaben (licht -> Licht).

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Dennis89
User
Beiträge: 1724
Registriert: Freitag 11. Dezember 2020, 15:13

@Dennis89: Du änderst da ja nur das zweite Wort. Meine 107 Bytes beziehen sich auf alle Änderungen.
Ja, das habe ich verstanden, deswegen das "Mist". :P

44? Alleine ` R='Das licht des Mondes beleuchtet DIE Nacht.'` hat schon 47 🤔

Bitte zeige mal deine Lösung. Bestimmt wieder irgendwelhe Bitoperationen, auf die normal sterbliche nicht kommen
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14368
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89: *Das* wäre doch nur ``R=S``, ich gehe ja davon aus, dass die Eingabedaten ``S="... der Satz ..."`` schon existieren und zähle nur die Bytes die für das erstellen von `R` aus `S` notwendig sind. Und nur den ersten Buchstaben vom zweiten Wort ”vergrössern”, kann man in 44 Bytes so machen:

Code: Alles auswählen

i=S.find(" ")+1;R=S[:i]+S[i].upper()+S[i+1:]
Also nix exotisches. Das entspricht vom Vorgehen meinem ersten BASIC-Programm, das dafür 239 Bytes braucht. Wobei ich da nicht auf Bytes sparen geachtet habe. Da kommt man leicht auf 206 runter (Null-Bytes nicht mitgezählt):

Code: Alles auswählen

1 S$="Das licht des Mondes beleuchtet DIE Nacht.":I=1
2 IFMID$(S$,I,1)<>" "THENI=I+1:GOTO2
3 PRINTLEFT$(S$,I);:C$=MID$(S$,I+1,1)
4 IFC$>"`"ANDC$<"{"THENC$=CHR$(ASC(C$)-32)
5 PRINTC$;:PRINTMID$(S$,I+2)
Edit: Die Zeilen 3 und 4 habe ich nicht zusammengefasst, weil die voreingestellte Terminalbreite, und damit die Längenbegrenzung für eine Zeile, bei Altair BASIC 72 Zeichen beträgt. Wegen den weit verbreiteten TeleType 33 die als Terminals verwendet wurden, und die nur 72 Zeichen pro Zeile haben.
Who is General Failure and why is he reading my hard disk?
Kudde
User
Beiträge: 5
Registriert: Sonntag 25. Januar 2026, 13:50

Moin zusammen, vielen Dank für Eure Mühe. Das Problem bei der Aufgabe war, das ich nur die Sachen benutzen sollte, welche wir bis dahin gelernt hatten.
Benutzeravatar
__blackjack__
User
Beiträge: 14368
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kudde: Dann ergibt sich daraus für uns natürlich das Problem, dass wir nicht wissen was ihr bis dahin schon gelernt hattet. :-)

Wobei sich `capitalize()` ja durch Sachen ersetzen lässt, die auch bei den anderen Teillösungen von Dir verwendet werden, also wäre das kein Problem es richtig zu machen. Die Aufgabenformulierung spricht IMHO auch stark gegen `capitalize()`, das heisst der Aufgabensteller hat das wahrscheinlich bewusst _so_ formuliert, weil das keine der vorhandenen `str`-Methoden leistet.
Who is General Failure and why is he reading my hard disk?
Benutzeravatar
noisefloor
User
Beiträge: 4314
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Kudde: die Frage zum Wissensstand hatte ich genau deshalb hier bereits gestellt. Wenn du nochmal eine Frage zu einer Kursaufgabe hast am besten kurz noch beschreiben, was ihr schon könnt bzw. schreiben, was ihr verwenden dürft.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 14368
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oh, Reiter im Browser ist noch offen und ich habe da auch noch einen Quelltext. In C. Läuft unter anderem auch auf einem VIC-20 mit 3½ KiB freiem RAM. Und auch der Zeilenumbruch macht auf dem Gerät total Sinn, wie man an der Ausgabe auf dem nur 23 Zeichen breiten Textbildschirm sehen kann:

Code: Alles auswählen

**** cbm basic v2 ****

3583 bytes free

ready.
load"test",8

searching for test
loading
ready.
run
Das licht des Mondes b
eleuchtet DIE Nacht.

DAS Licht des Mondes
beleuchtet die Nacht.

ready.
█
Der Umbruch ist an der genau passenden Stelle um den Text auf zwei Zeilen aufzuteilen. :-)

Hier der Code:

Code: Alles auswählen

#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
/**
 * The program assumes the sentence is shorter than 255 characters, this
 * constant can be used to mean the word start index is unset.
 */
#define NO_WORD_START   0xff

char sentence[] = "Das licht des Mondes beleuchtet DIE Nacht.";
/**
 * The number of valid `word_starts` values.
 */
uint8_t word_starts_count;
/**
 * The index of each of the `word_starts_count` words first character in the
 * `sentence`.
 *
 * There can be at most half the length of the sentence words if each word is
 * just one character long.
 */
uint8_t word_starts[sizeof sentence / 2];

/**
 * Analyse the `sentence` and set `word_starts_count` and `word_starts`
 * accordingly.
 */
void init_word_starts()
{
    uint8_t i = 0, word_start = NO_WORD_START;
    char c;
    
    word_starts_count = 0;
    while ((c = sentence[i])) {
        if (word_start == NO_WORD_START) {
            if (c != ' ') word_start = i;
        } else {
            if (c == ' ') {
                word_starts[word_starts_count] = word_start;
                ++word_starts_count;
                word_start = NO_WORD_START;
            }
        }
        ++i;
    }
    if (word_start != NO_WORD_START) {
        word_starts[word_starts_count] = word_start;
        ++word_starts_count;
    }
}


int main(void)
{
    uint8_t i;
    
    puts(sentence);
    putchar('\n');
    
    init_word_starts();
    /* Upcase the first character of the second word. */
    i = word_starts[1];
    sentence[i] = toupper(sentence[i]);
    /* Upcase the first word. */
    i = word_starts[0];
    while (sentence[i] != ' ') {
        sentence[i] = toupper(sentence[i]);
        ++i;
    }
    /* Lowcase the next to last word. */
    i = word_starts[word_starts_count - 2];
    while (sentence[i] != ' ') {
        sentence[i] = tolower(sentence[i]);
        ++i;
    }
    /* Insert a line break between the fourth and fifth word. */
    i = word_starts[4] - 1;
    sentence[i] = '\n';
    
    puts(sentence);
    return 0;
}
Who is General Failure and why is he reading my hard disk?
Antworten