Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Paragraph X (Kleinprojekte)

§ XXII besagt: Dieser Paragraph sei 22 (in Worten: zweiundzwanzig, binär: 10110) Zeichen lang.


Das geübte Auge bemerkt sieht sofort: dieser Paragraph widerspricht sich. Er ist nicht 22, sondern ganze 94 Zeichen lang.


Ihre Aufgabe: 

Finden Sie alle widerspruchsfreien Paragraphen in der Form:


§ [R] besagt: Dieser Paragraph sei [D] (in Worten: [W], binär: ‌[B]) Zeichen lang.

(Wobei [R] = Länge des Satzes als römische Zahl, [D] = Länge des Satzes als Dezimalzahl, [B] = Länge des Satzes als Binärzahl.)

Sollten Sie bereits die Programmieraufgaben

  • »Römische Zahlen« (Webcode sv9k-jktq) o.ä.
  • »Zahlensystemumrechner --- Dual/Binär, Hexadezimal und Dezimal« (Webcode wbc9-3sou) o.ä.
  • »Deutsche Zahlnamen« (Webcode s8y6-rqfn)

erfüllt haben, setzen Sie Ihren dort deponierten Code unmodifiziert zur Umformung ein (Stichwort: Wiederverwendbarkeit).

Machen Sie sich außerdem zuvor Gedanken über die untere und obere Grenze der zu prüfenden Zahlen.

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

virgil 3. Mai 2022 21:43   reply report
Herrje. Diese Seite ist sogar von Leerzeichen in Quellcodes überfordert. :(
Die Form sei diese:
§ [R] besagt: Dieser Paragraph sei [D] (in Worten: [W], binär: ‌[B]) Zeichen lang.

3 Lösung(en)

import { romanNumerals } from '../römischeZahlen/code.js';
import { Number.prototype.verbalDe } from '../deutscheZahlnamen/code.js';

let i = 78, j = i * 2;

for (i; i < j; i++) {
  let phrase = (`
    § ${romanNumerals(i)} besagt: Dieser Paragraph sei ${i}
    (in Worten: ${i.verbalDe()}, binär: ${i.toString(2)}) Zeichen lang.
  `);
  if (phrase.length == i) console.log(phrase);
}
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022

var rn = new RomanNumber();
var sn = new NumberSpelling();
for (int i = 70; i < 200; i++) {
    var t = $"§ {rn.DecToRom(i)} besagt: Dieser Paragraph sei {i} (in Worten: {sn.NumSpell(i)}, binär: {Convert.ToString(i, 2)}) Zeichen lang.";
    if (t.Length == i)
        Console.WriteLine(t);
}

/*
§ XCV besagt: Dieser Paragraph sei 95 (in Worten: fünfundneunzig, binär: 1011111) Zeichen lang.
§ XCVIII besagt: Dieser Paragraph sei 98 (in Worten: achtundneunzig, binär: 1100010) Zeichen lang.
 */
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <bitset>

std::string number_spelling(int);
std::string dec_to_rom(int);

int main() {
    for (auto i{ 70 }; i < 200; i++) {
        const auto R{ dec_to_rom(i) };
        const auto D{ std::to_string(i) };
        const auto W{ number_spelling(i) };
        const auto B{ std::bitset<8>(i).to_string()};
        const std::string t{ "\43 " + R + " besagt: Dieser Paragraph sei " + D + " (in Worten: " + W + ", bin\341r: " + B + ") Zeichen lang." };
        if (t.length() - 1 == i)
            std::cout << t << "\n";
    }
}

struct RomNum {
    std::string rom_str{};
    int rom_val{ 0 };
};

std::string dec_to_rom(int n) {
    const std::vector<RomNum>& rom_num{ {"M", 1000}, {"CM", 900}, {"D", 500}, {"CD", 400}, {"C", 100}, {"XC", 90}, {"L", 50}, {"XL", 40}, {"X", 10}, {"IX", 9}, {"V", 5}, {"IV", 4}, {"I", 1} };
    auto i{ 0 };
    std::string res{};
    while (n) {
        auto t{ rom_num[i].rom_val };
        while (n >= t) {
            res += rom_num[i].rom_str;
            n -= t;
        }
        i++;
    }
    return res;
}

std::string number_spelling(int n) {
    std::string r{};
    const std::vector<std::string>& v{ "null", "ein|s", "zwei", "drei", "vier", "f\365nf", "sech|s", "sieb|en", "acht", "neun", "zehn", "elf", "zw\357lf" };
    const auto fst{ [&v](int k) { return v[k].substr(0, v[k].find('|')); } };
    const auto all{ [&v, &fst](int k) { return fst(k) + (v[k].find('|') == -1 ? "" : v[k].substr(v[k].find('|') + 1)); } };

    const auto _0_12{ [&]() { r += all(n); } };
    const auto _13_19{ [&]() { r += fst(n % 10) + "zehn"; } };
    const auto _20_99{ [&]() {
        if (n % 10 != 0) r += (n % 10 == 1 ? fst(n % 10) : all(n % 10)) + "und";
        if (n / 10 == 2) r += "zwanzig";
        else if (n / 10 == 3) r += "drei\341ig";
        else r += fst(n / 10) + "zig"; }
    };
    const auto _100_999{ [&]() {
       r += (n / 100 == 1 ? fst(n / 100) : all(n / 100)) + "hundert";
       if (n % 100 != 0) {
           n %= 100;
           if (n < 13) _0_12();
           else if (n < 20) _13_19();
           else _20_99();
       } }
    };
    if (n < 0 || n > 999) return "unknown";
    else if (n < 13) _0_12();
    else if (n < 20) _13_19();
    else if (n < 100) _20_99();
    else _100_999();

    return r;
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Es gibt zwei Lösungen dieser Aufgabe im Zahlenraum 1–1000. Die eine ist:

§ XCV besagt: Dieser Paragraph sei 95 (in Worten: fünfundneunzig, binär: 1011111) Zeichen lang.

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: Mittel
Webcode: 0kiz-szxu
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen