- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
public static int index(string word, char comp)
{
int k = -1;
for (int i = 0; i < word.Length; i++)
if (word[i] == comp)
{
k = i;
break;
}
return k;
}
public static char[] strtocharr(string str)
{
char[] tmp = new char[str.Length];
for (int i = 0; i < tmp.Length; i++)
tmp[i] = str[i];
return tmp;
}
public static string charrtostr(char[] charr)
{
string tmp = null;
for (int i = 0; i < charr.Length; i++)
tmp = String.Format("{0}{1}", tmp, charr[i]);
return tmp;
}
public static char maskfromword(string word)
{
return word[word.Length - 1];
}
public static string maskfromword(string word, int n)
{
string mask = null;
for (int i = 0; i < n; i++)
mask = String.Format("{0}{1}", mask, word[word.Length - 1]);
return mask;
}
public static char Counter(char crnt, string word)
{
if (crnt != maskfromword(word))
crnt = word[index(word, crnt) + 1];
else
crnt = word[0];
return crnt;
}
public static string Counter(string prev, string word, int k)
{
char[] tmp = strtocharr(prev);
if (k >= prev.Length - 1)
k = prev.Length - 1;
else
for (int i = k + 1; i < prev.Length; i++)
tmp[i] = word[0];
if (tmp[k] == maskfromword(word))
return MultiCounter(prev, word, k - 1);
else
tmp[k] = Counter(tmp[k], word);
return charrtostr(tmp);
}
Список методов, позволяющие сделать счетчик по словарю (полезно для генераторов словарей) на любое количество символов.
Vero92 19.08.2017 11:06 # 0
bormand 19.08.2017 12:20 # +2
З.Ы. Хотя... настоящий сишник всяко бы не стал клеить строки форматом.
subaru 19.08.2017 13:06 # +2
bormand 19.08.2017 13:51 # +1
inkanus-gray 20.08.2017 20:01 # 0
Desktop 20.08.2017 20:05 # +4
inkanus-gray 20.08.2017 20:12 # +1
Desktop 20.08.2017 20:15 # 0
dxd 31.08.2017 17:22 # +1
Lokich 24.08.2017 19:55 # 0
нахрена оно надо?
Vero92 24.08.2017 22:43 # 0
вот у тебя есть словарик типа "0123456789ABCDEF"
И тебе надо сгенерировать строки типа:
000000
000001
...
00000F
000010
000011
...
FFFFFF
С помощью этих методов все сводится к вызову одной функции с последующим выводом на экран.
З.Ы. Количество символов при этом может быть произвольной
roman-kashitsyn 24.08.2017 23:05 # +2
Vero92 24.08.2017 23:09 # 0
bormand 25.08.2017 18:22 # +2
> на C#
/0
Vero92 24.08.2017 23:11 # 0
Lokich 25.08.2017 20:30 # 0
d_fomenok 26.08.2017 22:50 # 0
Enumerable.Range(0, 1024).Select(I => i.ToString("X6"));
Vero92 27.08.2017 14:18 # 0
roman-kashitsyn 27.08.2017 22:12 # 0
На самом деле, решение не сильно отличается. Нужно только функцию перевода в нужную систему счисления написать.
roman-kashitsyn 27.08.2017 23:41 # +1
subaru 28.08.2017 00:06 # 0
doctor_stertor 28.08.2017 00:11 # 0
bormand 28.08.2017 09:40 # +1
roman-kashitsyn 28.08.2017 09:51 # +1
bormand 29.08.2017 05:03 # 0
roman-kashitsyn 29.08.2017 16:38 # 0
О_о не знаю, но оказалось, что в OCaml тоже нельзя:
Vero92 29.08.2017 18:01 # 0
bormand 29.08.2017 18:06 # +1
Vero92 29.08.2017 18:14 # 0
https://ideone.com/DKiN8E
Я в плане "Что тут не так?" (может, у меня просто не дошли руки до F#).
P.S. Можно по подробнее расписать каждый шаг (что за чем делается)? Просто такая задача на СиШарпе делалась рекурсией.
bormand 29.08.2017 18:28 # +1
В строке 4 определяем количество символов в алфавите (оно же будет основанием системы счисления).
В строке 5 бьём число на "цифры" (для b=10 и index=100500 получается бесконечная последовательность(IEnumerable) в духе [0, 0, 5, 0, 0, 1, 0, 0, 0, 0,...]. Вверх-ногами, да.
В строке 6 оставляем из них width первых, в строке 7 переворачиваем. В строке 8 конвертим "цифры" в соотв. символы твоего алфавита. Ну и в строке 9 клеим сиквенс символов в строку.
Vero92 29.08.2017 21:07 # 0
P.S. Теперь с полной уверенностью можно сказать, что мой код на C# - говнокод (см. название сайта) xD
roman-kashitsyn 29.08.2017 22:32 # 0
CHayT 30.08.2017 01:27 # +1
Нет, всё бессмысленно T____T
https://ideone.com/kF21DL
roman-kashitsyn 30.08.2017 11:42 # 0
Да, можно быстро посчитать k-тый в лексикографическом порядке элемент декартова произведения, только мороки чуть больше.
> sequence
да я знаю, что replicateM k = sequence . replicate k, так просто менее очевидно, где рекурсия.
CHayT 30.08.2017 21:39 # +1
roman-kashitsyn 30.08.2017 21:45 # 0
Stylish в помощь.