Skip to content

Instantly share code, notes, and snippets.

@Regenhardt
Created August 29, 2023 12:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Regenhardt/9c3ef2974becd12589287c3cccb530ef to your computer and use it in GitHub Desktop.
Save Regenhardt/9c3ef2974becd12589287c3cccb530ef to your computer and use it in GitHub Desktop.
#!meta
{"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"name":"csharp"}]}}
#!csharp
static string[] ones = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
static string[] teens = { "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
static string[] tens = { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
static string[] suffixes = { "", "thousand", "million", "billion" };
#!csharp
static string NumberToWords(int number)
{
if (number >= 1 && number <= 10)
{
return ones[number - 1];
}
else if (number >= 11 && number <= 19)
{
return teens[number - 11];
}
else if (number >= 20 && number <= 99)
{
var remainder = number % 10;
return $"{tens[number / 10]}{(remainder != 0 ? $"-{ones[remainder - 1]}" : "")}";
}
else if (number >= 100 && number <= 999)
{
var remainder = number % 100;
return $"{ones[number / 100 - 1]} hundred{(remainder != 0 ? $" and {NumberToWords(remainder)}" : "")}";
}
else
{
for (int i = suffixes.Length - 1; i >= 0; i--)
{
var magnitude = (int)Math.Pow(10, 3 * i);
if (number >= magnitude)
{
var quotient = number / magnitude;
var remainder = number % magnitude;
return $"{NumberToWords(quotient)} {suffixes[i]}{(remainder != 0 ? $" {NumberToWords(remainder)}" : "")}";
}
}
return "zero";
}
}
#!csharp
NumberToWords(1)
#!csharp
NumberToWords(10)
#!csharp
NumberToWords(100)
#!csharp
NumberToWords(151)
#!csharp
NumberToWords(1111)
#!csharp
NumberToWords(1125)
#!csharp
static void Main(string[] args)
{
while (true)
{
Console.Write("< ");
var input = Console.ReadLine();
try
{
var sanitized = input.Replace("_", "");
var words = NumberToWords(int.Parse(sanitized));
Console.WriteLine("> " + words);
}
catch (Exception ex)
{
Console.WriteLine(ex);
break;
}
}
}
@Regenhardt
Copy link
Author

Haven't actually run the last cell there

@mr5z
Copy link

mr5z commented Aug 29, 2023

Hmm, how does this work?

@Regenhardt
Copy link
Author

It's basically a leaner version of an ipynb. Install Polyglot Notebooks extension for vscode and enjoy interactive notebooks with C#, F#, javscript and probably a few other languages I forget. Even all in one notebook sharing variables if you like that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment