Codes, Codierung und Artverwandtes

Moin!

Ich suche eine spezielle Art von Codierung, mir fällt nur der Name nicht ein.

Es geht darum, dass man ein Set aus Ziffern hat und anhand der Quersumme weiß man, welche Ziffern zu eben jener Quersumme beigetragen haben, weil die Kombinationen eindeutig sind.

Die Ziffern dürfen nicht einfach eine aufeinanderfolgende Reihe bilden (1, 2, 3), sondern haben bestimmte „Abstände“ (1, 4, 7 oder so was in der Art).

Weiß zufällig jemand, welche Codiermethode das ist? :sweat_smile:

Vlt. vermische ich gedanklich auch zwei Methoden, k.A. :thinking:

meinst du Primzahlen ? nur durch 1 oder sich selber teilbar?

Nene, das ist schon was anderes. ^^

Ich bilde mir ein das es einfach Quersumme heisst und das nur die Abwandlungen eigene Namen haben

bei n = 36036 die dezimale Quersumme q ( n ) = 3 + 6 + 0 + 3 + 6 = 18

Was mir spontan einfällt und auch nur weil wirs im Studium damals hatten ist das hier: https://de.wikipedia.org/wiki/Luhn-Algorithmus

3 „Gefällt mir“

Nicht uninteressant, aber leider nicht, was ich suche. :smiley:

1 „Gefällt mir“

Maybe das?

Was ist die Kaprekar-Zahl?
Die Zahl 6174 heißt Kaprekar-Zahl.
Der indische Mathematiker D.R.Kaprekar machte im Jahre 1949 die folgende Entdeckung.

(1) Man gibt eine vierstellige Zahl mit nicht gleichen Ziffern vor (abcd mit a<b<c<d).
(2) Man bildet die größte und die kleinste Zahl aus diesen vier Ziffern (dcba und abcd).
(3) Man bildet die Differenz aus den Ziffern. Es kann sein, dass diese Zahl 6174 ist (dcba-abcd=6174?).
.
Ist das nicht der Fall, so bildet man die größte und die kleinste Zahl aus den Ziffern der vierstelligen Differenz und subtrahiert diese Zahlen wiederum.
Diese Prozedur wiederholt man eventuell.
Am Ende ergibt sich immer 6174, und zwar spätestens nach 7 Schritten.

Beispiel 1: Gegeben ist die Zahl 1746.
1.Schritt: 7641 - 1467 = 6174

Beispiel 2: Gegeben ist die Zahl 5644.
1.Schritt: 6544-4456=2088
2.Schritt: 8820-0288=8532
3.Schritt: 8532-2358=6174

Beispiel 3: Gegeben ist die Zahl 7652.
1.Schritt: 7652-2567=5085
2.Schritt: 8550-0558=7992
3.Schritt: 9972-2799=7173
4.Schritt: 7731-1377=6354
5.Schritt: 6543-3456=3087
6.Schritt: 8730-0378=8352
7.Schritt: 8532-2358=6174

1 „Gefällt mir“

Sieht lustig aus, hat aber was von einer selbsterfüllenden Prophezeihung. „Rechne solange, bis du das Ergebnis hast, das du haben willst.“ :sweat_smile:

1 „Gefällt mir“

Angewandte theoretische Mathematik halt :smiley:

Toll, jetzt raucht mir der Kopf. :ugly: ^^

Du meinst aber nicht zufällig die Umwandlung von Binär in Dezimal? Damit kann man ähnliche Späße machen, wenn du die jeweilige Bedeutung der Bits als Dezimalzahl nimmst.

Beispiel:

8 4 2 1
0 0 0 1 = 1
0 0 1 0 = 2
0 1 0 0 = 4
1 0 0 0 = 8

Wenn du dann z.B. 1 + 4 rechnest kommt das hier raus.

8 4 2 1
0 1 0 1 = 5

Wird in einigen Programmiersprachen gerne für Optionen bei denen ggf. mehrere gleichzeitig aktiv sein sollen genutzt.

1 „Gefällt mir“

Ich denke, das Set nach dem du suchst, kann nicht existieren, solange du nicht auch die Länger der Quersumme begrenzt wird.
Seien k_1 und k_2 zwei Ziffern des Sets, aus dem du Zahlen zusammensetzen willst. Dann haben die Zahlen die aus k_2 mal der Zahl k_1 besteht, die gleiche Quersumme wie k_1 mal die Ziffer k_2.

Ich denke, du willst tatsächlich etwas in die Richtung von Hamming-Codes gehen. In welchem Zusammenhang taucht das Problem denn auf?

Also, ganz konkret will ich den Einzug einer Liste davon abhängig machen, wie viel Platz die Listennummern einnehmen. Und diese bestehen aus römischen Zahlen.

I.
II.
III.
IV.

XXXIII.
XXXIV.

XLIV.
XLV.
XLVI.

Da jedes der Zeichen I, V, X, L verschieden breit ist, dachte ich mir, ich wandle die in Zahlen um (bspw. 1, 4, 7, 9) und stelle dann irgendwie fest (über die oben angedachte Sache mit der Quersumme oder sonstwie), wie oft jede Zahl vorkommt, um dann die Breite zu berechnen.

Aber das war unnötig kompliziert und mit den XSL-FO-Mitteln wahrscheinlich nicht mal zu lösen. Ich habs dann so gemacht, dass ich vier Variablen aus der jeweiligen Listennummer erzeuge, bei denen immer alle Zeichen bis auf eines rausgefiltert werden.

Aus XLVII wird dann bspw:
var1=II
var2=V
var3=X
var4=L

Und dann kann ich per string-length herausfinden, wie viele Zeichen einer Sorte enthalten sind und jeweils mit einem Faktor multiplizieren, um dann auf die gewünschte dynamische Breite zu kommen.

Erst dachte ich halt, das lässt sich über ein Code-Schema ganz gut abbilden, aber ich hab dann eingesehen, dass ich da auf dem Holzweg war. :grin:

Wenn es nur um die Darstellung geht, dann hilft Dir vielleicht eine Monospace-Schriftart, in der jedes Zeichen gleich breit ist. Unter Windows gibt es zum Beispiel die Schriftart “Courier New”.

Ne, die Schriftart ist festgelegt. ^^ Sonst wäre es natürlich einfach. :smiley:

Was möglich ist, ist eine Analyse über Primfaktoren. So wäre dann XLVII zum Beispiel 75322. Durch die Eindeutigkeit der Primfaktoren kannst du zurück-lesen, welche Zeichen drin waren.

1 „Gefällt mir“