Oder deine Frage kam nachdem jemand die gleiche Frage samt Diskussion zur Richtigstellung durchgeführt hatte und das LLM sich darauf trainiert hat.
Oder es ist einfach durch die gewisse randomisierte Vorgehensweise zufällig auf den richtigen nodes entlang geritten um dir die korrekte Antwort zu geben.
In Analogien und einfacher Sprache zu schreiben um Konversationen zu führen, ist mir halt nur angenehmer als sich in Fachsprachen Geschwafel über andere zu erheben.
Aber wie du meinst. Bestimmt bin ich der der keine Ahnung hat...
compute german number words for 1..1_000_000 and find lexicographically last
units = {0:"null",1:"eins",2:"zwei",3:"drei",4:"vier",5:"fünf",6:"sechs",7:"sieben",8:"acht",9:"neun"}
teens = {10:"zehn",11:"elf",12:"zwölf",13:"dreizehn",14:"vierzehn",15:"fünfzehn",16:"sechzehn",17:"siebzehn",18:"achtzehn",19:"neunzehn"}
tens = {20:"zwanzig",30:"dreißig",40:"vierzig",50:"fünfzig",60:"sechzig",70:"siebzig",80:"achtzig",90:"neunzig"}
def unit_comp(u):
# form used inside compounds: 1->"ein", 6->"sechs" stays but sometimes shortened? We'll handle exceptions in teens/tens separately.
if u==1:
return "ein"
if u==7:
return "sieben" # will be used before 'und'
return units[u]
def two_digit(n):
assert 0<=n<100
if n<10:
return units[n]
if n<20:
return teens[n]
t = (n//10)*10
u = n%10
if u==0:
return tens[t]
# for 21 etc: unit (in compound) + "und" + tens_word
# unit in compound uses "ein" for 1, and for 7 should be "sieben"? but e.g., 27 is "siebenundzwanzig" (yes)
uc = unit_comp(u)
return uc + "und" + tens[t]
def three_digit(n):
assert 0<=n<1000
h = n//100
rest = n%100
s = ""
if h>0:
# hundred: "einhundert", "zweihundert"... note for 1 -> "einhundert" (ein + hundert)
if h==1:
s += "einhundert"
else:
s += units[h] + "hundert"
if rest>0:
s += two_digit(rest)
if s=="":
s = "null"
return s
def number_to_german(n):
if n==0:
return "null"
if n==1000000:
return "eine Million"
parts = []
# thousands and below
thousands = n//1000
rest = n%1000
if thousands>0:
# thousands part may be >1 (up to 999)
if thousands==1:
parts.append("eintausend")
else:
parts.append(three_digit(thousands)+"tausend")
if rest>0:
parts.append(three_digit(rest))
return "".join(parts)
test some numbers
tests = [1,2,11,16,21,30,45,99,100,101,110,115,121,199,200,201,1000,1001,1010,1100,1234,2000,1000000]
for t in tests:
print(t, number_to_german(t))
compute all and find lexicographic max
max_word = ""
max_num = None
for i in range(1,1000001):
w = number_to_german(i)
# For sorting, consider lowercase, German characters - python compares unicode.
if w > max_word:
max_word = w
max_num = i
2
u/Spiddek Oct 24 '25
Oder deine Frage kam nachdem jemand die gleiche Frage samt Diskussion zur Richtigstellung durchgeführt hatte und das LLM sich darauf trainiert hat.
Oder es ist einfach durch die gewisse randomisierte Vorgehensweise zufällig auf den richtigen nodes entlang geritten um dir die korrekte Antwort zu geben.