typestar

temp_stats.zig en Zig

Una semana de máximas diarias reducida a mínima, máxima y media, con una barra por día.

// One week of daily highs: spread, mean, and a scaled bar chart.
const std = @import("std");

const days = [_][]const u8{ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
const temps = [_]i32{ 61, 68, 74, 79, 72, 65, 58 };

pub fn main() void {
    var lo: i32 = temps[0];
    var hi: i32 = temps[0];
    var sum: i32 = 0;
    for (temps) |t| {
        if (t < lo) lo = t;
        if (t > hi) hi = t;
        sum += t;
    }
    const mean = @as(f32, @floatFromInt(sum)) / temps.len;
    const span = @max(hi - lo, 1);

    std.debug.print("day temp range                 diff\n", .{});
    std.debug.print("------------------------------------\n", .{});
    // Bars scale to the week's spread; the +1 keeps Sunday visible.
    const bars = "#####################";
    var warm_days: u32 = 0;
    for (days, temps) |day, t| {
        const width: usize = @intCast(@divTrunc(20 * (t - lo), span) + 1);
        const diff = @as(f32, @floatFromInt(t)) - mean;
        const sign: []const u8 = if (diff >= 0) "+" else "";
        if (diff > 0) warm_days += 1;
        std.debug.print("{s} {d:>4}  {s:<21} {s}{d:.1}\n", .{
            day, t, bars[0..width], sign, diff,
        });
    }
    std.debug.print("------------------------------------\n", .{});
    std.debug.print("low {d}, high {d}, mean {d:.1}\n", .{ lo, hi, mean });
    std.debug.print("days above the mean: {d}\n", .{warm_days});
}

Cómo funciona

  1. Una pasada rastrea el día más fresco, el más cálido y la suma corriente.
  2. for (days, temps) recorre ambos arreglos al paso — los largos deben coincidir.
  3. Las barras escalan a la amplitud rebanando una cadena de numerales; el signo se elige a mano.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
36
Caracteres a escribir
1246
Tokens
389
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 359 segundos.

Escribe este fragmento

Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.

← Anterior