Search code examples
iosobjective-carraysnsarray

Repeating Number Array


I am having trouble creating a program that takes in numbers in an Array and returns them by a string. My following code in my

main.m file:

#import <Foundation/Foundation.h>
#import "NumberRepeater.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NumberRepeater *repeater1 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @10]]];

        [repeater1 initWithNumbers:@[@[@1, @10]]];
        NSLog(@"%@", [repeater1 process]);

        NumberRepeater *repeater2 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@1, @2], @[@2, @3]]];

        NSLog(@"%@", [repeater2 process]);

        NumberRepeater *repeater3 = [[NumberRepeater alloc] 
        initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];

        NSLog(@"%@", [repeater3 process]);
    }
    return 0;
}

The code in my NumberRepeater.h file:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NumberRepeater : NSObject
- (instancetype)initWithNumbers:(NSArray *)numbers;

- (NSString *)process;


@end

NS_ASSUME_NONNULL_END

The code in my NumberRepeater.m file:

#import <Foundation/Foundation.h>
#import "NumberRepeater.h"
@implementation NumberRepeater

- (instancetype)initWithNumbers:(NSArray *)numbers {
    NumberRepeater *repeater1 = [[NumberRepeater alloc] 
initWithNumbers: @[@[@1, @10]]];
    [repeater1 initWithNumbers:@[@[@1, @10]]];
    NSLog(@"%@", repeater1);

    return 0;
}

- (NSString *)process {


    return 0;
}

@end

My expected output should be:

1111111111
11, 222
10101010, 343434343434, 9292

This is in no way a school assignment I need solving. I would love a solution however guidance to that would be great. I feel like I almost have it as I have done questions similar to this and have got the output I need but clearly I am missing, I just don't know what. I understand my process method is missing code, it's just I don't exactly know what to put in there. Any help would be greatly appreciated!


Solution

  • • I need to Explain Array syntax for you according to your question ,

    1. First you can declare array in this way @[@1,@2,....] this array of NSNumber object as Int Value , because array contain id objects only so we can't user Int directly but we user NSnumber like that @1

    2. objects inside array can be Array its self so we can declare array of array object like this example @[@[@10, @4], @[@3, @6], @[@2, @9]] this array of array @[@[],@[],....etc]

    • according to your question i I give you NSArray with two items just give me back a String with first item repeated (second item) times

       Example :
    
            Input @[@1,@2]      repeat number#1  two times
            Output should be 11
    
            Input @[@1,@10]      repeat number#1  10 times
            Output should be 1111111111
    
           Input @[@[@1,@3],@[@3,@4]]      repeat number#1  3 times , number#3   4 time
            Output should be 111 3333
    

    Solution

    NumberRepeater.h

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface NumberRepeater : NSObject {
          NSArray * numbers; // private number array will be initialized during initialization of object
    }
    - (instancetype)initWithNumbers:(NSArray *)numbers;
    
    - (NSString *)process;
    @end
    
    NS_ASSUME_NONNULL_END
    

    NumberRepeater.m

    #import "NumberRepeater.h"
    #import <Foundation/Foundation.h>
    
    
    // NumberRepeater Extention for set private numbers
    @interface NumberRepeater ()
    @property (nonatomic,retain) NSArray *numbers;
    @end
    
    
    @implementation NumberRepeater
    @synthesize numbers;
    
    - (instancetype)initWithNumbers:(NSArray *)numbers {
    
        self = [super init];
        if (self) {
            self.numbers = numbers;
        }
        return self;
    }
    
    - (NSString *)process {
    
    // if numbers have No Data
       if (numbers.count == 0) { return  @"0"; }
    
        // Array of array  each array have two element first is number to repeat and second have number of repetation
        // Example @[@1, @2]   repeat number(1)   TWO times  so out put should be 11
     //   @[@[@1, @2], @[@2, @3]]
    
        NSMutableString * output = [NSMutableString new];
    
        for (NSArray*item in numbers) {
    
            // Array should be with this Format
              // Example @[@1, @2]   repeat number(1)   TWO times
    
                  // assert item have tow items only  like that @[@1,@2]
               NSAssert(item.count == 2,@"Array Should have Two items only");
    
            NSNumber *numberToRepeat = item[0]; // repeat
            NSNumber *repetitionCount = item[1]; //repetition Count
    
            NSMutableString * repeatdString = [NSMutableString new];
    
            for (NSInteger i= 0; i < [repetitionCount integerValue] ; i++) {
                [repeatdString appendString:[numberToRepeat stringValue]];
            }
    
            [output appendString:repeatdString];
            [output appendFormat:@" "]; // space on join with muti array
    
        }
    
    
        return output;
    }
    @end
    

    main.m

    #import <Foundation/Foundation.h>
    #import "NumberRepeater.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NumberRepeater *repeater1 = [[NumberRepeater alloc] 
            initWithNumbers: @[@[@1, @10]]];
    
            NSLog(@"%@", [repeater1 process]);
    
            NumberRepeater *repeater2 = [[NumberRepeater alloc] 
            initWithNumbers: @[@[@1, @2], @[@2, @3]]];
    
            NSLog(@"%@", [repeater2 process]);
    
            NumberRepeater *repeater3 = [[NumberRepeater alloc] 
            initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];
    
            NSLog(@"%@", [repeater3 process]);
        }
        return 0;
    }