В семье StackExchange появился сайт "Programming Puzzles & CodeGolf". Вкратце, задающий вопрос даёт всем небольшую задачу, которую отвечающие должны решить. Язык исполнения — любой, наименьшее количество символов побеждает.
Ради самообразования начал решать на Nemerle. Задача
def f(l, r, n)
{
if(n > 2)
f($"$l 1/$n", $"$(n-1)/$n $r", n - 1)
else if(n == 2)
l + " 1/2 " + r
else
l + " " + r
}
foreach(k in i)
WriteLine($"F$k=" + f("0/1", "1/1", int.Parse(k)));
За input беру
def i = ["4", "3", "1", "2", "0"];
1. Подскажите, где можно ещё "срезать" символов, не меняя алгоритма.
2. Решение на Немерле своим алгоритмом (большинство, кстати, решает через списки -> distinct -> sort, но у меня не получилось это коротко выразить на Немерле)
Кстати говоря, неплохой способ "раскрутить" Немерле
ММ>Скорее всего также коротко не получится, но всё же.
Можно попробовать перевести один в один:
// $_=def f(x)
{
// "F#$_ =def p = $"F$x = ";
// {#{(1..$_.to_i).mapdef g = $[1..x-1].Map(d=>
//{|d|(0..d).map
$[0..d-1].Map(
// {|n|n.quo d}}
n => // что такое n.quo d ??
))
// .flatten.uniq.sort*', '}}"
.. //
.. // uniq в Nemerle как делается ? |> Set() или есть метод list[T].Unique ?
}
Спасибо за отличный вариант. Такое ощущение, что с этим алгоритмом уже больше не сократишь. Разве только вместо WriteLine использовать Write, а к "1/1" добавить \n.
ММ>Спасибо за отличный вариант. Такое ощущение, что с этим алгоритмом уже больше не сократишь. Разве только вместо WriteLine использовать Write, а к "1/1" добавить \n.
Отнють!
Есть идеи как коротко организовать последовательное чтение с консоли?
BTW, не хочешь опубликовать сам в качестве ответа там? Ты уже явно больше меня работы тут проделал, так что мне как-то неудобно будет от своего имени выкладывать
Здравствуйте, Маслаков Михаил, Вы писали:
ММ>Есть идеи как коротко организовать последовательное чтение с консоли?
Вот тут заминка (руби и питон со всеми инклудами и прочим фаршем там выложены) ММ>BTW, не хочешь опубликовать сам в качестве ответа там? Ты уже явно больше меня работы тут проделал, так что мне как-то неудобно будет от своего имени выкладывать
Леньььь
У Вас алгоритм неверный. Как, например, для F8 получить 3/8, если мы строим только 1/n и (n-1)/n.
ММ>В семье StackExchange появился сайт "Programming Puzzles & CodeGolf". Вкратце, задающий вопрос даёт всем небольшую задачу, которую отвечающие должны решить. Язык исполнения — любой, наименьшее количество символов побеждает.
ММ>Ради самообразования начал решать на Nemerle. ММ>Задача
ММ>Решение сжатое (155 символов) ММ>
ММ>def f(l, r, n)
ММ>{
ММ> if(n > 2)
ММ> f($"$l 1/$n", $"$(n-1)/$n $r", n - 1)
ММ> else if(n == 2)
ММ> l + " 1/2 " + r
ММ> else
ММ> l + " " + r
ММ>}
ММ>foreach(k in i)
ММ> WriteLine($"F$k=" + f("0/1", "1/1", int.Parse(k)));
ММ>
ММ>За input беру ММ>
ММ>def i = ["4", "3", "1", "2", "0"];
ММ>
ММ>1. Подскажите, где можно ещё "срезать" символов, не меняя алгоритма. ММ>2. Решение на Немерле своим алгоритмом (большинство, кстати, решает через списки -> distinct -> sort, но у меня не получилось это коротко выразить на Немерле)
ММ>Кстати говоря, неплохой способ "раскрутить" Немерле