community
cancel
Showing results for 
Search instead for 
Did you mean: 
Do you have the skills to make it to the top? Subscribe to our weekly challenges. Try your best to solve the problem, share your solution, and see how others tackled the same problem. We share our answer too.
Weekly Challenge
Do you have the skills to make it to the top? Subscribe to our weekly challenges. Try your best to solve the problem, share your solution, and see how others tackled the same problem. We share our answer too.
Unable to display your progress at this time. Please try again a little later, or contact an administrator if you continue to see this error.
Getting started with Designer? | Start your journey with our new Learning Path!

Challenge #47: Vehicle Identification Number Test

Alteryx Alumni (Retired)

Happy Halloween loyal weekly exercise participants, here is an exercise I hope does not scare you too much. Hopefully is a treat and not a trick.  The link to last week’s challenge  is HERE.

 

Halloween.jpg

 

Use case: An Alteryx subscriber needs to build a process to validate VIN numbers to test for data quality issues across the fleet data. The algorithm is provided at the below wiki link.

 

http://en.wikipedia.org/wiki/Vehicle_identification_number

 

Objective: Please take the VIN numbers from the Input and create a new column for the check digit. Compare the check digit with the calculated check digit value. If the two values do not match (and there was no error in the calculation), then there is a mistake in the VIN. Out of the six VINs, how many vehicles have invalid codes?

Quasar
Quasar

I took on the challenge of doing this without lookup tables.

 

Spoiler
Here is my calculation to get the weighted value:
IF [Position]=8 THEN 10 ELSE 9-MOD([Position],10) ENDIF
*
IF IsInteger([Letter]) THEN ToNumber(Letter)
ELSE CharToInt([Letter])-
IF CharToInt([Letter])<=73 THEN 64
ELSEIF CharToInt([Letter])<=82 THEN 73
ELSE 81 ENDIF ENDIF

and then to convert the sum to the check digit:
IF !REGEX_Match([VIN ID], '^[^IOQ]+$')
OR !REGEX_Match([VIN ID], '^[A-Z_0-9]+$')
THEN Null()
ELSEIF Mod([Value],11)=10 THEN 'X'
ELSE ToString(Mod([Value],11)) ENDIF

I think the VIN of "ABCDEFGHIJKLMNOPQ" should come back with a Null because it is invalid as it contains an I,O,Q. I also verify that it is only capital letters and numbers.

VIN.png
Creative Director
Creative Director

A solution has been posted

Spoiler
2016-11-07 09_08_13-Alteryx Designer x64 BETA - Analysis_ValidateVIN_Solution.yxmd.png
Tara McCoy
Alteryx Partner
Spoiler
near-spoiler alert

This was a great skill-builder exercise for me.  Now, I appreciate the value of parsing a string into (readers' guess: Columns or Rows), in order to allow for all of that SQL-esque stuff.  Good stuff!

Alteryx Certified Partner
Alteryx Certified Partner

working on earning a badge ... 

 

Cheers,

Mark

Alteryx ACE & Top Community Contributor

Chaos reigns within. Repent, reflect and reboot. Order shall return.
Nebula
Nebula

Great challenge - loved the fact that it required research.

 

My solution was kind of a hybrid solution (when I compared it afterwards to some of the other solutions)

 

Spoiler
I used the simple regex to tokenise into rows (like @MarqueeCrew and @Joe_Mako did too) but split it into streams like @TaraM

For anyone who needs the lookup tables they are in the attached flow.

 

Magnetar
Magnetar

My solution. I remember solving this one last year trying to prep for the Grand Prix qualification rounds! But I didn't save my solution... and I didn't know how to use several of the tools I used this time... so no idea how I did it a year ago!

Spoiler
WeeklyChallenge47.JPG
Pulsar
Pulsar

Added the fun of parsing the lookup tables from the Wiki page (to avoid any typos)

Alteryx Certified Partner

Not the neatest solution but it works, so I'm satisfied

 

Spoiler
Weekly Challenge 47.png
Alteryx Certified Partner

Here's my solution.  I've mostly used formula tools because they suit the way my brain works.  Enjoyed this one lots!

 

Spoiler
Untitled.png