Начиная с Java 1.7 вы можете использовать Files.createFile:
Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
26 chars функция для одного числа:
?dZsl2^dZ1+ll-2/Ar^/All^%p
37 chars с циклом 10 циклов:
?dZsl[2^dZ1+ll-2/Ar^/All^%pdzB>L]dsLx
Объяснение функции:
? Input n dZ calculate number of digits sl store in register l 2^ calculate n^2 dZ calculate number of digits of square 1+ll-2/Ar^/ n/(10^((squaredigits+1-l)/2)) int division truncates last digits All^% n%(10^l) modulus truncates first digits p print the number
Тест:
dc msml.dc 45678 86479 78617 80632 1519 30736 47016 10504 3340 11556 35411
Начальное значение предоставляется через стандартный ввод. Добавлены новые строки для удобства чтения:
@n=($n=pop)=~/./g;
for(0..9){
@s=$n**2=~/./g;
$n=join$\,splice@s,(@s-@n)/2,@n;
print$/,$n+0
}
function a(s,n){m=(s+'').length;while(n--)c=''+s*s,s=1*c.substr((c.length-m)/2,m);return s}
Использование:
a(3456, 4); // 4th seed of 3456: Returns: 7024
a(8653, 2); // 2nd seed of 8653: Returns: 4575
a(843, 10); // 10th seed of 843: Returns: 22
a(45678, 6); // 6th seed of 45678: Returns: 47016
Полные тестовые примеры:
var tests = [3456, 8653, 843, 45678];
for (var i = 0; i < tests.length; i++) {
console.log('-------------');
console.log('| Seed: ' + tests[i]);
console.log('-------------');
for(var j = 1; j <= 10; j++) {
console.log('| ' + a(tests[i], j));
}
console.log('~~~~~~~~~~~~~');
}
Результаты тестирования:
------------- -------------
| Seed: 3456 | Seed: 8653
------------- -------------
| 9439 | 8744
| 947 | 4575
| 9680 | 9306
| 7024 | 6016
| 3365 | 1922
| 3232 | 6940
| 4458 | 1636
| 8737 | 6764
| 3351 | 7516
| 2292 | 4902
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
------------- -------------
| Seed: 843 | Seed: 45678
------------- -------------
| 106 | 86479
| 123 | 78617
| 512 | 80632
| 621 | 1519
| 856 | 30736
| 327 | 47016
| 69 | 10504
| 476 | 3340
| 265 | 11556
| 22 | 35411
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
Предполагается, что вводятся целые числа:
def r s,l=s.to_s.size;x=(s*s).to_s;y=x.size;x[(y-l)/2,l].to_i;end
s=args[0]as int;def r(){f=s*s;g=f as String;t=g.size()/2;g=g[t-2..t+1];s=g as int}
с использованием первого аргумента в качестве начального числа и вывода, состоящего из 4 цифр base10, как в ваших примерах ..
$ s = $ _; $ d = length $ s; map {$ s * = $ s; print 0 + ($ s = substr $ s, ($ s = ~ y /// c- $ d) / 2, $ d), $ /} 0..9
echo -n 3456 | perl -ne '$s=$_;$d=length$s;map{$s*=$s;print 0+($s=substr$s,($s=~y///c-$d)/2,$d),$/}0..9'
9439
947
9680
7024
3365
3232
4458
8737
3351
2292
function r(i)
l=string.len
b=i or b
s=i or s
p=s*s..""
e=(l(p)-l(b))/2
s=tonumber(p:sub(e+1,e+l(b)))
return s
end
Начинает с одним аргументом и возвращает первое случайное целое число MSM ; последующие вызовы без аргументов возвращают следующее случайное целое число MSM. Вызов будет другое целое число для повторного заполнения.
Тест:
> =r(3456)
9439
> =r()
947
> =r()
9680
> =r()
7024
> =r()
3365
> =r()
3232
> =r()
4458
> =r()
8737
> =r()
3351
> =r()
2292
> =r(8653)
8744
> =r()
4575
> =r()
9306
> =r()
6016
> =r()
1922
> =r()
6940
> =r()
1636
> =r()
6764
> =r()
7516
> =r()
4902
> =r(843)
106
> =r()
123
> =r()
512
> =r()
621
> =r()
856
> =r()
327
> =r()
69
> =r()
476
> =r()
265
> =r()
22
> =r(45678)
86479
> =r()
78617
> =r()
80632
> =r()
1519
> =r()
30736
> =r()
47016
> =r()
10504
> =r()
3340
> =r()
11556
> =r()
35411
>
Журнал изменений
Мой код:
int F(int s, int l)
{
var r = "" + 1d*s*s;
return int.Parse(r.Substring((r.Length - l) / 2, l));
}
Пример использования:
int s = 8653;
int l = 4;
for(int i = 0; i< 10; i++)
{
s = F(s, l);
Console.WriteLine(s);
}
Результаты
---8653---
8744
4575
9306
6016
1922
6940
1636
6764
7516
4902
---843---
106
123
512
621
856
327
69
476
265
22
---45678---
86479
78617
80632
1519
30736
47016
10504
3340
11556
35411
Perl - 112 - сейчас, 108 - теперь 95 (благодаря идее Зейда) - символы без пробелов, исключая цикл тестового драйвера (например, я посчитал код только для генерации 1 последовательности) - код в теле цикла foreach.
@s=(8653,843,45678,3456);
foreach $s (@s){
for(0..9){$s*=$s;$l=length($s);$L||=($l+1)/2;$H=($l+$L+1)/2;
$s=substr($s,-$H,$L)+0;
print "$s,"
}
print "\n";
$L=0; @S=(); # Reset for next loop
}
Вывод:
8744,4575,9306,6016,1922,6940,1636,6764,7516,4902,
106,123,512,621,856,327,69,476,265,22,
86479,78617,80632,1519,30736,47016,10504,3340,11556,35411,
9439,947,9680,7024,3365,3232,4458,8737,3351,2292,
Сжатый код, который был 112:
for(0..9){$s*=$s;$l=length($s);$L||=($l+1)/2;$H=($l+$L+1)/2;$s=substr($s,-$H,$L)+0;print "$s,"}
r=input()
l=len(str(r))
while 1:
x=str(r*r)
y=(len(x)-l)/2
r=int(x[y:y+l])
print r
Создает бесконечную последовательность для стандартного вывода. Обратите внимание, что трюк с обратной кавычкой не будет работать, по крайней мере, в более старых версиях с типом long
из-за окончания L
в представлении. Python 3 print
as функция добавит еще 1 символ для закрывающего символа.
=MID(C2^2,LEN(C2^2)/2-LEN(C2)/2+1,LEN(C2))
Использование:
C2
, и перетащите формулу для всей последовательности. Тестовые примеры:
Снимок экрана:
Code Golf: Генератор случайных чисел MSM http://img59.imageshack.us/img59/6830/golfo.png
Ограничения:
INT ()
. Возможно, все еще можно сократить. Создает бесконечную последовательность или, по крайней мере, встречает 0, и в этом случае происходит сбой.
i(f:l)x=x:i l(f x)
m n=head.filter((==n).length).i(cycle[init,tail])
b r n=n:b r(read$m r$show$n*n)
Использование: b <длина числа> <число>
*Main> b 5 45678
[45678,86479,78617,80632,1519,30736,47016,10504,3340,11556,35411...
Объяснение
Вместо применения подстроки и использования арифметики длины строки эта программа выполняет итерацию между удалением последнего символа ( init
) и удаляя первый символ ( хвост
), пока не будет достигнута желаемая длина.
Как iterate
, так и большинство функций Haskell предполагают, что используемая функция является постоянной. Поскольку у нас меняется сама функция, нам нужно реализовать специальную версию iterate
.
n=gets
l=n.size
10.times{n=n.to_i;x=(n*n).to_s;p n=x[(x.size-l)/2,l]}
Читает из стандартного ввода.
Выход
> ruby rand.rb < 3456
9439
947
9680
7024
3365
3232
4458
8737
3351
2292
> ruby rand.rb < 8653
8744
4575
9306
6016
1922
6940
1636
6764
7516
4902
> ruby rand.rb < 843
106
123
512
621
856
327
69
476
265
22
> ruby rand.rb < 45678
86479
78617
80632
1519
30736
47016
10504
3340
11556
35411
(из командной строки)
$n=pop;$l=length$n;map{$n*=$n;print 0+($n=substr$n,(length($n)-$l)/2,$l),$/}0..9
Примечание: получается бесконечный список, содержащий MSM случайных чисел.
l=length
m k n=take k$drop(div(l n-k)2)n
r n=iterate(read.m(l$show n).show.(^2))n
Пример использования:
r 34562
Пример вывода:
[34562,94531,36109,3859,48918,92970,...
l=length
m k n=take k$drop(div(l n-k)2)n
r n=iterate(read.m(l$show n).show.(^2))n
main=readLn>>=print.r