Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
109
Task/Four-is-magic/Delphi/four-is-magic.delphi
Normal file
109
Task/Four-is-magic/Delphi/four-is-magic.delphi
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
program Four_is_magic;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
System.SysUtils;
|
||||
|
||||
// https://rosettacode.org/wiki/Number_names#Delphi
|
||||
const
|
||||
smallies: array[1..19] of string = ('one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen',
|
||||
'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen');
|
||||
tens: array[2..9] of string = ('twenty', 'thirty', 'forty', 'fifty', 'sixty',
|
||||
'seventy', 'eighty', 'ninety');
|
||||
|
||||
function domaxies(number: int64): string;
|
||||
const
|
||||
maxies: array[0..5] of string = (' thousand', ' million', ' billion',
|
||||
' trillion', ' quadrillion', ' quintillion');
|
||||
begin
|
||||
domaxies := '';
|
||||
if number >= 0 then
|
||||
domaxies := maxies[number];
|
||||
end;
|
||||
|
||||
function doHundreds(number: int64): string;
|
||||
begin
|
||||
Result := '';
|
||||
if number > 99 then
|
||||
begin
|
||||
Result := smallies[number div 100];
|
||||
Result := Result + ' hundred';
|
||||
number := number mod 100;
|
||||
if number > 0 then
|
||||
Result := Result + ' and ';
|
||||
end;
|
||||
if number >= 20 then
|
||||
begin
|
||||
Result := Result + tens[number div 10];
|
||||
number := number mod 10;
|
||||
if number > 0 then
|
||||
Result := Result + '-';
|
||||
end;
|
||||
if (0 < number) and (number < 20) then
|
||||
Result := Result + smallies[number];
|
||||
end;
|
||||
|
||||
function spell(number: int64): string;
|
||||
var
|
||||
scaleFactor: int64;
|
||||
maxieStart, h: int64;
|
||||
begin
|
||||
if number = 0 then
|
||||
exit('zero');
|
||||
|
||||
scaleFactor := 1000000000000000000;
|
||||
Result := '';
|
||||
if number < 0 then
|
||||
begin
|
||||
number := -number;
|
||||
Result := 'negative ';
|
||||
end;
|
||||
|
||||
maxieStart := 5;
|
||||
if number < 20 then
|
||||
exit(smallies[number]);
|
||||
while scaleFactor > 0 do
|
||||
begin
|
||||
if number > scaleFactor then
|
||||
begin
|
||||
h := number div scaleFactor;
|
||||
Result := Result + doHundreds(h) + domaxies(maxieStart);
|
||||
number := number mod scaleFactor;
|
||||
if number > 0 then
|
||||
Result := Result + ', ';
|
||||
end;
|
||||
scaleFactor := scaleFactor div 1000;
|
||||
dec(maxieStart);
|
||||
end;
|
||||
end;
|
||||
//****************************************************\\
|
||||
|
||||
const
|
||||
numbers: array of Int64 = [0, 4, 6, 11, 13, 75, 100, 337, -164, int64.MaxValue];
|
||||
|
||||
function fourIsMagic(n: int64): string;
|
||||
var
|
||||
s: string;
|
||||
begin
|
||||
s := spell(n);
|
||||
s[1] := upcase(s[1]);
|
||||
var t := s;
|
||||
|
||||
while n <> 4 do
|
||||
begin
|
||||
n := s.Length;
|
||||
s := spell(n);
|
||||
t := t + ' is ' + s + ', ' + s;
|
||||
end;
|
||||
t := t + ' is magic.';
|
||||
exit(t);
|
||||
end;
|
||||
|
||||
begin
|
||||
// writeln(spell(4));
|
||||
for var n in numbers do
|
||||
writeln(fourIsMagic(n));
|
||||
readln;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue