Gå til innhold

Tre og firsifrede tall til vektor i matlab


Anbefalte innlegg

Hei! Driver med ProjectEuler problem 4, og trenger (tror jeg da) en funksjon/måte å konvertere flersifrede tall, feks 1881 til en vektor ala [1 8 8 1]. Noen som vet hvordan jeg gjør dette? (Må selvsagt skje automatisk med ethvert flersifret tall)

 

Takk og god jul

Lenke til kommentar
Videoannonse
Annonse
Hei! Driver med ProjectEuler problem 4, og trenger (tror jeg da) en funksjon/måte å konvertere flersifrede tall, feks 1881 til en vektor ala [1 8 8 1]. Noen som vet hvordan jeg gjør dette? (Må selvsagt skje automatisk med ethvert flersifret tall)

 

Takk og god jul

Jeg sjekket akkurat min løsning for problem 4, og hvis du lurer på dette for å sjekke om tallet er et palindrom, så er antagelig den enkleste løsningen å konvertere tallet til en string og sjekke om string == string.baklengs() -- litt avhengig av hvilket språk du bruker selvsagt :)

Lenke til kommentar

Hvilket språk bruker du - og hvordan konverterer du tallet til en string der? Om det er innebygget funksjon så kan jeg muligens bruke help funksjonen, ellers kan jeg lære av metoden. Bruker matlab selv! Artig at det er flere som har kommet like langt(kort) som meg ;)

Lenke til kommentar
Hvilket språk bruker du - og hvordan konverterer du tallet til en string der?

Python er et glimrende språk,som du kan bruke i tillegg eller som erstatning for matlab.

http://vnoel.wordpress.com/2008/05/03/bye-...on-thanks-sage/

http://cauchy.math.okstate.edu/~ullrich/PyPlug/

http://www.prescod.net/python/why.html

 

Last ned 2.6.4,ikke python 3 ennå.

http://www.python.org/download/releases/2.6.4/

 

Da kan jeg bare ta en rask innføring med basis i oppgaven.

Start(IDLE) python shell,så er det bare og skrive inn.

 

>>> x = 12345
>>> x
12345
>>> type(x)
<type 'int'>
>>> #lage string
>>> s = str(x)
>>> s
'12345'
>>> type(s)
<type 'str'>
>>> s[::-1]
'54321'
>>> #lager er funksjon som tester for palindrome
>>> def is_palindrome(s):
return s == s[::-1]

>>> is_palindrome(s)
False
>>> is_palindrome('1881')
True
>>> s
'12345'
>>> #konvetere til list
>>> l = [int(num) for num in str(s)]
>>> l
[1, 2, 3, 4, 5]
>>> type(l)
<type 'list'>
>>> is_palindrome(l)
False
>>> lst = [1,8,8,1]
>>> is_palindrome(lst)
True
>>>

Endret av SNIPPSAT
Lenke til kommentar
  • 2 uker senere...
en funksjon/måte å konvertere flersifrede tall, feks 1881 til en vektor ala [1 8 8 1].

 

Her er et forslag til Matlab kode for å sjekke om et tall er et palindrom. Det brukes ikke strenger. Jeg har skrevet det i gnu octave (mener å huske at fix heter trunc i Matlab):

 

function res=palindrome(n)
 res = false;
 i = 1;
 d = ceil(log10(n));
 v = zeros(d,1);
 while (n > 0)
v(i,1) = rem(n,10);
n = fix(n/10);
i = i+1;
 end

 if flipud (v) == v 
res = true;
 end

Lenke til kommentar
Eller på en linje i haskell

palindrome x = if x == reverse x then True else False

 

Hvis det var en kommentar til min melding så tilsvarer det kun if statementet i Matlab koden. Jeg forstod det slik at trådstarter ønsket å konvertere et tall til en liste i Matlab. Hvis du skal gjøre det samme i Haskell kunne man gjøre noe som f.eks.

 

numtolist n =  if n < 10 then [n]
		   else rem n 10 : numtolist (div n 10)

palindrome x = if numtolist x == reverse (numtolist x) then True else False

 

Det blir selvsagt mer kompakt når man bruker en rekursiv definisjon. Det samme i Lisp ville bli:

 

(defun numtolist (n) 
 (if (< n 10) 
  (list n) 
  (cons (rem n 10) (numtolist (truncate n 10)))))

(defun palindrome (n)
 (equal (numtolist n) (reverse (numtolist n))))

 

Jeg kunne selvsagt ha skrevet begge funksjonene på en linje (eller begge ved bruk av labels), men det blir litt klarere slik. Det er tross alt ikke Perl.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...