Skip to content

Commit 870d574

Browse files
authored
All your base v3 (#667)
* Added solution and test class for all-your-base exercise. * Added all-your-base exercise to exercise output directory. * Removed AllYourBase class from work-in-progress package.
1 parent 8ffe850 commit 870d574

File tree

14 files changed

+927
-263
lines changed

14 files changed

+927
-263
lines changed

config.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,21 @@
466466
"pattern_recognition"
467467
]
468468
},
469+
{
470+
"slug" : "all-your-base",
471+
"name" : "All Your Base",
472+
"uuid" : "d7c5ed6b-d42c-406a-9912-9ee952a955ba",
473+
"practices" : [ ],
474+
"prerequisites" : [ ],
475+
"difficulty" : 4,
476+
"topics" : [
477+
"numbers",
478+
"while-loops",
479+
"lists",
480+
"math-operators",
481+
"exceptions"
482+
]
483+
},
469484
{
470485
"slug" : "grade-school",
471486
"name" : "Grade School",

dev/src/BaselineOfExercism/BaselineOfExercism.class.st

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ BaselineOfExercism class >> exercisePackageNames [
2020
"Answer the list of exercise package names (as we don't yet have proper projects)"
2121

2222

23-
^ #('Exercise@Acronym' 'Exercise@Allergies' 'Exercise@Anagram' 'Exercise@ArmstrongNumbers' 'Exercise@AtbashCipher' 'Exercise@Binary' 'Exercise@BinarySearchTree' 'Exercise@Bowling' 'Exercise@CircularBuffer' 'Exercise@Clock' 'Exercise@CollatzConjecture' 'Exercise@Darts' 'Exercise@Diamond' 'Exercise@Die' 'Exercise@Etl' 'Exercise@FlattenArray' 'Exercise@Forth' 'Exercise@Gigasecond' 'Exercise@GradeSchool' 'Exercise@Grains' 'Exercise@Hamming' 'Exercise@HelloWorld' 'Exercise@HighScores' 'Exercise@IsbnVerifier' 'Exercise@Isogram' 'Exercise@Leap' 'Exercise@Luhn' 'Exercise@MatchingBrackets' 'Exercise@Matrix' 'Exercise@Minesweeper' 'Exercise@OcrNumbers' 'Exercise@Pangram' 'Exercise@Proverb' 'Exercise@Raindrops' 'Exercise@Rectangles' 'Exercise@ResistorColorDuo' 'Exercise@ReverseString' 'Exercise@RobotSimulator' 'Exercise@RomanNumerals' 'Exercise@SecretHandshake' 'Exercise@Sieve' 'Exercise@SimpleCipher' 'Exercise@SpaceAge' 'Exercise@SumOfMultiples' 'Exercise@Tournament' 'Exercise@TwelveDays' 'Exercise@TwoFer' 'Exercise@Welcome' 'Exercise@WordCount' 'Exercise@WordSearch')
23+
^ #('Exercise@Acronym' 'Exercise@Allergies' 'Exercise@AllYourBase' 'Exercise@Anagram' 'Exercise@ArmstrongNumbers' 'Exercise@AtbashCipher' 'Exercise@Binary' 'Exercise@BinarySearchTree' 'Exercise@Bowling' 'Exercise@CircularBuffer' 'Exercise@Clock' 'Exercise@CollatzConjecture' 'Exercise@Darts' 'Exercise@Diamond' 'Exercise@Die' 'Exercise@Etl' 'Exercise@FlattenArray' 'Exercise@Forth' 'Exercise@Gigasecond' 'Exercise@GradeSchool' 'Exercise@Grains' 'Exercise@Hamming' 'Exercise@HelloWorld' 'Exercise@HighScores' 'Exercise@IsbnVerifier' 'Exercise@Isogram' 'Exercise@Leap' 'Exercise@Luhn' 'Exercise@MatchingBrackets' 'Exercise@Matrix' 'Exercise@Minesweeper' 'Exercise@OcrNumbers' 'Exercise@Pangram' 'Exercise@Proverb' 'Exercise@Raindrops' 'Exercise@Rectangles' 'Exercise@ResistorColorDuo' 'Exercise@ReverseString' 'Exercise@RobotSimulator' 'Exercise@RomanNumerals' 'Exercise@SecretHandshake' 'Exercise@Sieve' 'Exercise@SimpleCipher' 'Exercise@SpaceAge' 'Exercise@SumOfMultiples' 'Exercise@Tournament' 'Exercise@TwelveDays' 'Exercise@TwoFer' 'Exercise@Welcome' 'Exercise@WordCount' 'Exercise@WordSearch')
2424
]
2525

2626
{ #category : 'baselines' }
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
Class {
2+
#name : 'AllYourBase',
3+
#superclass : 'Object',
4+
#category : 'Exercise@AllYourBase',
5+
#package : 'Exercise@AllYourBase'
6+
}
7+
8+
{ #category : 'exercism' }
9+
AllYourBase >> convertDecimal: aDecimal outputBase: outputBase [
10+
11+
|remainder division resultDigits|
12+
outputBase >= 2 ifFalse: [Error signal: 'output base must be >= 2' ].
13+
resultDigits := OrderedCollection new.
14+
division := aDecimal.
15+
[
16+
remainder := division \\ outputBase.
17+
division := division // outputBase.
18+
resultDigits addFirst: remainder.
19+
] doWhileFalse: [ division isZero ].
20+
^ resultDigits asArray
21+
]
22+
23+
{ #category : 'exercism' }
24+
AllYourBase >> convertToDecimal: digitsArray fromBase: inputBase [
25+
26+
^ (digitsArray reversed withIndexCollect: [
27+
:digit :i |
28+
(digit >= 0 and: [digit < inputBase])
29+
ifFalse: [ Error signal: 'all digits must satisfy 0 <= d < input base' ].
30+
digit * (inputBase raisedTo: i - 1)
31+
]) sumNumbers
32+
]
33+
34+
{ #category : 'exercism' }
35+
AllYourBase >> rebaseInputBase: inputBase digits: digitsArray outputBase: outputBase [
36+
37+
|aDecimal|
38+
inputBase >= 2 ifFalse: [Error signal: 'input base must be >= 2' ].
39+
aDecimal := self convertToDecimal: digitsArray fromBase: inputBase.
40+
^ self convertDecimal: aDecimal outputBase: outputBase
41+
]

0 commit comments

Comments
 (0)