Commit 63cfc720 authored by shrabbit's avatar shrabbit
Browse files

Add ImgAudio and Combine playgrounds and implement error handling for arguments

parent 53dd4e5b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ public class PlaygroundLauncher(Action onReload)
    {
        while (true)
        {
            var input = AnsiConsole.Ask<string?>("[magenta]TestV[/] [cyan]Playground[/][yellow1]>[/] ");
            var input = AnsiConsole.Ask<string?>("TV> ");
            
            switch (input)
            {
+53 −0
Original line number Diff line number Diff line
using Spectre.Console;
using TestV.Tools;

namespace TestV.Playgrounds;

public class Combine : IPlayground
{
    public string LaunchCmd { get; } = "comb";
    public string? Name { get; } = "Combine";
    public string? Description { get; } = "comb [[bottom]] [[top]] = C_{Arg1}^{Arg2}";
    public Task Run(string[] args)
    {
        if (args.Length >= 2)
        {
            var r = int.Parse(args[0]);
            var n = int.Parse(args[1]);

            if (n == 0 || r == n)
            {
                AnsiConsole.WriteLine("1 \n");
                return Task.CompletedTask;
            }

            if (r == 1)
            {
                AnsiConsole.WriteLine($"{n} \n");
                return Task.CompletedTask;
            }
            
            AnsiConsole.WriteLine($"{Factorial(r, n) / Factorial(n)}\n");
            
            return Task.CompletedTask;
        }
        
        Errors.NoArgs(2);
        return Task.CompletedTask;
    }

    public static int Factorial(int value, int deep = int.MaxValue)
    {
        var result = value;
        for (var i = value - 1; i >= 1; i--)
        {
            if (deep == 1)
                return result;
            
            result *= i;
            deep--;
        }

        return result;
    }
}
 No newline at end of file
+14 −0
Original line number Diff line number Diff line
using TestV.Tools;

namespace TestV.Playgrounds;

public class ImgAudio : IPlayground
{
    public string LaunchCmd { get; } = "imgaudio";
    public string? Name { get; } = "ImgAudio";
    public string? Description { get; } = null;
    public async Task Run(string[] args)
    {
        Errors.NoArgs(1);
    }
}
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -150,6 +150,8 @@ class Program
                .Add<MakeSpace>()
                .Add<RunProgram>()
                .Add<View>()
                .Add<ImgAudio>()
                .Add<Combine>()
                .Add<Exp1>();
            
            play.Startup(args);

TestV/Tools/Errors.cs

0 → 100644
+18 −0
Original line number Diff line number Diff line
using Spectre.Console;

namespace TestV.Tools;

public class Errors
{
    public static void NoArgs()
    {
        AnsiConsole.MarkupLine("  [red]└ 错误:参数太少。[/]\n");
    }

    public static void NoArgs(int needMinArgs)
    {
        AnsiConsole.MarkupLine("  [red]└ 错误:参数太少。[/]\n" + 
                              $"    [darkred]最少需要 {needMinArgs} 个。[/]\n");
    }
}