diff --git a/README.md b/README.md deleted file mode 100644 index 600901c..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# toolkit -My most frequently used tools in programming - -- [Plural](/plural) (TS, PHP) diff --git a/plural/README.md b/plural/README.md deleted file mode 100644 index fc29dba..0000000 --- a/plural/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Функция изменения формы слов в зависимости от числительного - -Часто встречается задача вывода правильного окончания слова с предшествующим ему числом. - -Например: - -- 1 депутат -- 2–4 депутат**а** -- 0, 5-9 или 10 депутат**ов** - -## Примеры исользования - -### Typescript -```typescript -import { plural } from 'plural'; - -const totalOrders = 2; - -const words = ['заказ', 'заказа', 'заказов']; - -const result = `${totalOrders} ${plural(totalOrders, words)}`; - -console.log(result); // 2 заказа -``` - -### PHP -```php -include 'plural.php'; - -$totalOrders = 2; - -$words = ['заказ', 'заказа', 'заказов']; - -$result = "{$totalOrders} {plural($totalOrders, $words)}"; - -echo result; // 2 заказа -``` diff --git a/plural/php/index.php b/plural/php/index.php deleted file mode 100644 index 77dafea..0000000 --- a/plural/php/index.php +++ /dev/null @@ -1,9 +0,0 @@ - 4 && $count % 100 < 20 ? 2 : $cases[min($count % 10, 5)] - ]; -} \ No newline at end of file diff --git a/plural/typescript/index.ts b/plural/typescript/index.ts deleted file mode 100644 index c5c207f..0000000 --- a/plural/typescript/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type WordForms = [string, string, string]; - -export const plural = (count: number, words: WordForms): string => { - const cases = [2, 0, 1, 1, 1, 2]; - return words[ - count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)] - ]; - }; \ No newline at end of file diff --git a/type-challenges/ip.ts b/type-challenges/ip.ts deleted file mode 100644 index 7d3c31f..0000000 --- a/type-challenges/ip.ts +++ /dev/null @@ -1,66 +0,0 @@ -type Split = S extends '' - ? [] - : S extends `${infer T}${D}${infer U}` - ? [T, ...Split] - : [S]; - -type UnwrapNumbers = T extends number | number[] - ? T - : T extends string - ? T extends `${infer N extends number}` - ? N - : never - : T extends [infer H extends string, ...infer T extends string[]] - ? UnwrapNumbers extends never - ? never - : [UnwrapNumbers, ...UnwrapNumbers] - : []; - -type IPv4Octets = [number, number, number, number]; -type IPv6Octets = string[]; - -type IPv4 = Split extends [ - infer IP extends string, - infer SUBNET extends string, -] - ? UnwrapNumbers> extends infer OCTETS - ? OCTETS extends never - ? never - : OCTETS extends IPv4Octets - ? UnwrapNumbers extends never - ? never - : CIDR - : never - : never - : never; - -type IPv6 = Split extends [ - infer IP extends string, - infer SUBNET extends string, -] - ? Split extends IPv6Octets - ? UnwrapNumbers extends never - ? never - : CIDR - : never - : never; - -type Test_1 = IPv4<'0.0.0.0/0'>; -type Test_2 = IPv4<'255.255.255.255/32'>; -type Test_3 = IPv4<'127.0.0.0.1/32'>; -type Test_4 = IPv4<'a'>; -type Test_5 = IPv4<'1.1.1.a/32'>; -type Test_6 = IPv4<'1.1.1.1'>; -type Test_7 = IPv4<'1.1.1.1/'>; -type Test_8 = IPv4<'1.1.1.1/a'>; - -type Test_9 = IPv6<'::1/0'>; -type Test_10 = IPv6<'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'>; -type Test_11 = IPv6<'::1/128'>; -type Test_12 = IPv6<'a'>; -type Test_13 = IPv6<'1:1:1:1:1:1:1:1/128'>; -type Test_14 = IPv6<'1:1:1:1:1:1:1:1'>; -type Test_15 = IPv6<'1:1:1:1:1:1:1:1/'>; -type Test_16 = IPv6<'1:1:1:1:1:1:1:1/a'>; - -// TODO: fully-typed ipv6 (unwrap hex, full and abbreviated address representations)