13 svar
342 visningar
SeriousCephalopod är nöjd med hjälpen
SeriousCephalopod 2692
Postad: 2 jun 2018 00:22 Redigerad: 25 apr 2022 11:55

Slå upp ~10^56:e ordet i ordlistan

Inspirerades till att formulera ett inte alltför originellt project-euler-artat problem av ett annat problem i en tråd även om det problemet hade en lite annan strukltur. 

Låt säga att du vill skriva en ordbok som innehåller alla tänkbara ord byggda med 29 bokstäver; a,b,c,d,...,, u,v,w,x,y,z,å,ä,ö och att du sedan börjar att lista dem i din ordbok i bokstavsoordning där kortare ord kommer före längre. De första 100 orden i ordlistan kommer alltså att vara:

a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, å, ä, ö, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aå, aä, aö, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, bå, bä, bö, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, cl,

Det 1:a ordet i denna lista är 'a', det 51:a ordet är 'av', och på  post 13141 finner man ordet 'ord' 

Vilket är det 283945058617255390073943653594695649062516685278241224665:e ordet i denna ordlista?

(Man kan även försöka hitta ord 19801 som alternativ)

Guggle 1364
Postad: 2 jun 2018 01:58

"grattis du har hittat seriouscephalopods ord"

(Jag tog mig friheten att sätta in lite mellanrum)

SeriousCephalopod 2692
Postad: 2 jun 2018 02:05

12538024700682665222940784450674945444964972656257077014573225844887

Lindehaven 820 – Lärare
Postad: 2 jun 2018 02:17

Guggle, du hann före!

Skrev ett Python-hack som skriver ut det n:te ordet, bl a nr 19801 som är "wow".

alphabet = "abcdefghijklmnopqrstuvwxyzåäö"

def letter(a):
    a -= 1
    if a>28:
        letter(a//29)
        print(alphabet[a%29], end="")

n = 283945058617255390073943653594695649062516685278241224665

letter(n)

dajamanté 5139 – Fd. Medlem
Postad: 2 jun 2018 06:52

OMG jag räckte öppna och läsa denna tråd och nu är jag hjärnskaddad 😂

dajamanté 5139 – Fd. Medlem
Postad: 2 jun 2018 08:08
Guggle skrev:

"grattis du har hittat seriouscephalopods ord"

(Jag tog mig friheten att sätta in lite mellanrum)

Jag vill ha tips om hur du gjorde!

På SeriousC. andra tråd har jag försökt följande:

QuotientRemainder[2180796798111435840484875151608, (28!)] som ger svaret 7. Så jag tänkte att om man ta bort a, vi hoppar fram 7 bokstäver, och börjar om från ''i''. och gör samma sak. Men det är uppenbarligen inte rätt sätt att gå.

Lindehaven 820 – Lärare
Postad: 2 jun 2018 11:12 Redigerad: 2 jun 2018 11:12

Konvertera talet 283945058617255390073943653594695649062516685278241224665 i basen 10 till ett "tal" i basen 29, t ex med algoritmen i www.matteguiden.se/matte-diskret/de-hela-talen/binara-och-hexadecimala-tal/.

En rekursiv funktion liknande den jag skrev lämpar sig bra till sånt. Den kan enkelt förbättras till att hantera ett alfabet av godtycklig längd. En programmeringsövning kanske?

Guggle 1364
Postad: 2 jun 2018 15:07 Redigerad: 2 jun 2018 15:08

Testa följande i Mathematica:

list = IntegerDigits[283945058617255390073943653594695649062516685278241224665, 29];
StringPart["abcdefghijklmnopqrstuvwxyzåäöo", list]

dajamanté 5139 – Fd. Medlem
Postad: 2 jun 2018 15:09

Jag var på g. nånstans i morse (!) men mitt i min lösning glömde jag varför jag gjorde det.

Jag testar din trix i mathematica :))

dajamanté 5139 – Fd. Medlem
Postad: 2 jun 2018 15:13

Oooooh Guggle du är en Mathematicagician!

Kan du förklara din kod?

AlvinB 4014
Postad: 2 jun 2018 17:07

IntegerDigits[..., 29] ger siffrorna till talet i bas 29. Eftersom alfabetet är tjugonio bokstäver långt motsvarar alltså varje siffra en bokstav.

StringPart-kommandot omvandlar helt enkelt dessa siffror till bokstäver utifrån var i alfabetet de sitter. 1 omvandlas till A eftersom A är först i "abcdefghijklmnopqrstuvwxyzåäö", 2 omvandlas till B eftersom B kommer näst och så vidare.

dajamanté 5139 – Fd. Medlem
Postad: 3 jun 2018 05:29
AlvinB skrev:

IntegerDigits[..., 29] ger siffrorna till talet i bas 29. Eftersom alfabetet är tjugonio bokstäver långt motsvarar alltså varje siffra en bokstav.

 Hur vet IntegerDigits vars börjar och vars sluttar ett tal i uttrycket (kan det kallas uttryck?) ''283945058617255390073943653594695649062516685278241224665''?

AlvinB 4014
Postad: 3 jun 2018 10:13

IntegerDigits omvandlar talet till bas 29, d.v.s. man skriver talet med olika siffror mellan 0-28 så att varje siffra är faktorn till en potens av 29. Om vi tar talet 1980119801 så ser vi att siffrorna blir

23,15,23{23,15,23}

vilket betyder att

19801=23·292+15·291+23·29019801=23\cdot 29^2+15\cdot 29^1+23\cdot 29^0

Eftersom den här uppdelningen gör så att man får en lista med tjugonio olika siffror kan man koppla varje siffra till en bokstav i alfabetet och därefter utläsa ordet.

dajamanté 5139 – Fd. Medlem
Postad: 3 jun 2018 14:01

Just det. Det var vad förklarades i artikeln som Lindehaven skickade igår.

Svara Avbryt
Close