temp_stats.m en Objective-C
Una semana de temperaturas: extremos, media, barras y saltos.
// Summarize a week of temperature readings: extremes, mean, swings.
#import <Foundation/Foundation.h>
int main(void) {
@autoreleasepool {
NSArray<NSString *> *days =
@[ @"Mon", @"Tue", @"Wed", @"Thu", @"Fri", @"Sat", @"Sun" ];
NSArray<NSNumber *> *temps =
@[ @(-4.0), @(-1.5), @2.0, @3.5, @1.0, @(-2.5), @(-6.0) ];
NSUInteger coldest = 0, warmest = 0;
double sum = 0;
for (NSUInteger i = 0; i < [temps count]; i++) {
double t = [temps[i] doubleValue];
sum += t;
if (t < [temps[coldest] doubleValue]) coldest = i;
if (t > [temps[warmest] doubleValue]) warmest = i;
}
NSLog(@"Coldest: %@ at %@ C", days[coldest], temps[coldest]);
NSLog(@"Warmest: %@ at %@ C", days[warmest], temps[warmest]);
NSLog(@"Mean: %.1f C", sum / (double)[temps count]);
// Chart each day against the freezing line.
for (NSUInteger i = 0; i < [temps count]; i++) {
double t = [temps[i] doubleValue];
NSUInteger len = t + 7 > 1 ? (NSUInteger)(t + 7) : 1;
NSString *bar = [@"" stringByPaddingToLength:len
withString:@"#"
startingAtIndex:0];
NSLog(@"%-4s %5.1f %@ %@", [days[i] UTF8String], t, bar,
t > 0 ? @"above" : @"below");
}
double sharpest = 0;
for (NSUInteger i = 1; i < [temps count]; i++) {
double swing = [temps[i] doubleValue]
- [temps[i - 1] doubleValue];
if (swing < 0) swing = -swing;
if (swing > sharpest) sharpest = swing;
}
NSLog(@"Sharpest overnight swing: %.1f C", sharpest);
}
return 0;
}
Cómo funciona
- Arreglos paralelos guardan los días y las lecturas encajonadas.
- Una sola pasada indexada encuentra los récords y la suma.
stringByPaddingToLength:dibuja cada barra contra el congelamiento.
Palabras clave y builtins usados aquí
NSArrayNSNumberNSStringdoubleforifintreturnvoid
El intento, en números
- Líneas
- 45
- Caracteres a escribir
- 1384
- Tokens
- 400
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 400 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.