プログラミングのお題 ..
[2ch|▼Menu]
866:780
15/09/21 01:39:22.93 jBw1B4c/.net
>>815 Perl
こった解探索アルゴリズムの物はすぐできない感じなので、
愚直に1から探していくバージョンをまずは…
use feature qw{:5.16};
($s, $_) = (1, 1);
do {
 $_++;
 $s += (() = /1/g);
} while $s < $_;
say $_;

$ perl 7_814_x.pl
199981

867:デフォルトの名無しさん
15/09/21 01:53:22.45 j5q7sFQh.net
1を数えるのはそんなに難しそうになくプログラムもなくても出来ないのか?
10区切りで1のケタをみれば、1個しかなくこれがループしてるだけ。
10の位も100の位も似たようなもので精密に数えたら手計算でもできないか?

868:デフォルトの名無しさん
15/09/21 02:12:51.56 GyvZP+14.net
論よりコード。

869:780
15/09/21 02:17:07.55 jBw1B4c/.net
>>830
ある切のいい値、たとえば100とか2000-1とかまでだと机上計算でもすごく簡単なの。
下記はその筆算イメージをcode化したもの、
use feature qw{:5.16};
for ($o = 2; ; $o++) {
 $i1 = 10**$o;
 $n1 = ($i1 / 10) * $o;
 #$i1--; # fix
 $n1++;
 $i2 = 10**$o * 2;
 $n2 = $i2 / 2 + ($i2 / 10) * $o;
 $i2--; # fix
 say "$o: $i1..$i2, $n1 ~ $n2";
 last if $i2 <= $n2;
}
$ perl 7_814_1.pl
2: 100..199, 21 ~ 140
3: 1000..1999, 301 ~ 1600
4: 10000..19999, 4001 ~ 18000
5: 100000..199999, 50001 ~ 200000
これを発展させる形で、切の悪い値も、解の候補の可能性があるものを渡り歩いて
速やかな>815の求解プログラムとするには
モレ的にはもう少し方式検討が要る感じがして、>829で一旦 日和らせてもらた

870:780
15/09/21 02:30:00.52 jBw1B4c/.net
>>832
この弱点は、ある値が与えられたら、1からその値までの文字1の総和を
解析的にというか式で算出することに気がとられ、
そのような計算式にもとづき、切の悪い値の中にある>815の求解に挑む
方向に考えが流されちゃったところかな。
発想を転換した方が良いかもしれないと思った。
和を足し込みながら漸近させて行く方法などと組み合わせるとかね。
さ、寝るわ。

871:デフォルトの名無しさん
15/09/21 03:09:20.39 TV+aglfl.net
>>815
愚直に日本語
0. s=0とする
1.n=0
2. nを10進数であらわしたときに含まれる1の数
を数えそれをdとおく
3. k=0,...9として
4. k=1のときはd+1,それ以外をsに足しn+kに一致したら
出力して終了
5. 3のループを継続
6. n=n+10として1.へ
2.の処理の詳細
d=0;m=n;while(m){ d=(m % 10==1)?1:0; m/=10;}
愚直で効率が悪いのでCで書いても100m秒もかかって
しまった。

872:訂正
15/09/21 03:10:53.01 TV+aglfl.net
4.k=1のときはd+1,それ以外はdをsに足し、sがn+kに一致したら
出力して終了(n+k<2の場合は継続)

873:またもや訂正(スマンコ)
15/09/21 03:12:02.29 TV+aglfl.net
6. n=n+10として2.へ

874:デフォルトの名無しさん
15/09/21 08:29:38.04 K1QACkp5.net
>>831
>論よりコード。
超名言w

875:デフォルトの名無しさん
15/09/21 08:35:28.97 OcjZ8RWa.net
いいね
論よりコード

876:デフォルトの名無しさん
15/09/21 09:05:31.09 QVf3KibQ.net
これは良い。テンプレに入れようず

877:デフォルトの名無しさん
15/09/21 11:10:04.89 K1QACkp5.net
>>815
@Mathematica
URLリンク(ideone.com)
※ナイーブに書き下したので、2時間経っても計算が終わらない orz

878:デフォルトの名無しさん
15/09/21 11:47:33.16 TV+aglfl.net
C語で書き直し
[?]には整数型変数名を入れてください
#include <stdio.h>
static int odai814(void){
int [?]=0,[?]=0,[?],[?],[?];for(;;[?]+=10){[?]=[?],[?]=0;
while([?])[?]+=(([?]%10)==1)?1:0,[?]/=10;
for([?]=0;[?]<10;[?]++)if(([?]+=([?]==1)?[?]+1:
[?])==[?]+[?])if([?]+[?]>1)
return [?]+[?];}}
int main(void) {printf("%d\n",odai814());return 0;}

879:デフォルトの名無しさん
15/09/21 12:17:20.21 zZoSoqbh.net
>>815のnと1の総数の関係が少し面白くて、お題とはちょっとず


880:れるけど f(n)=nとなるnを全て計算してみました >>827を見るとnの桁数が大きくなると1の総数f(n)がnを追い越すことから 有限個と予想はできるのですが、実際計算してみるとf(n)=nとなる数は 0,1を入れると84個っぽい C言語:http://ideone.com/6jwkpQ



881:780
15/09/21 12:39:31.93 jBw1B4c/.net
>>842
面白い結果だね。
13:[200000]
25:[2600000]
28:[35000000]
40:[35200000]
などは一旦 f(n)>n と逆転したあとに、f(n)==nに戻ったところだね

882:デフォルトの名無しさん
15/09/21 13:22:00.66 o5zq47rX.net
>>815 Emacs Lisp
(require 'cl-lib)
cl-lib
(defun f (n &optional m)
(if m (+ m (cl-count ?1 (format "%d" n)))
(cl-loop for i from 0 to n sum (cl-count ?1 (format "%d" i)))))
f
(f 1) 1
(f 13) 6
(f 99) 20
(f 999) 300
(f 199999) 200000
(let* ((n 2) (sum (f (1- n))))
(cl-loop (when (= (setq sum (f n sum)) n) (return n)) (incf n)))
199981

883:デフォルトの名無しさん
15/09/21 14:13:32.12 vwg3dHwd.net
数字1の出現を見抜けるかどうかか
Google問題は
ヒントを知ると容易
ヒントが無ければ、f(1)=1, f(13)=6で一生悩む
>>842
深いな

884:780
15/09/21 16:14:22.83 jBw1B4c/.net
>>833 >815 のお題で1の出現回数を0から足し込んでいくのではなく
ある値が与えられたら、0からその値までの間に出現する1の個数を式で一気に求めることができた。
言語:perl
use feature qw{:5.16};
sub fn {
 my ($o, $w, $s) = (0 x 3);
 my $d = shift;
 if (defined $d) {
  $s = fn(@_);
  $o = scalar @_; # aboid $#_ problem
  $w = 10**$o;
  $s += $d * $o * $w / 10
   if $o > 0;
  if ($d > 1) {
   $s += $w;
  } elsif ($d == 1) {
   $s += 1 + join '', @_; # `1 +' means including 0
  }
  #say "$d, $o, $w: $s";
 }
 $s
}
@vals = qw{1 10 11 13 99 100 110 111 199 200 999 1000 19999 199980 199981 199982};
say "$_ : ", fn(split '', $_)
 for @vals;

885:780
15/09/21 16:16:19.84 jBw1B4c/.net
>>846 の実行例(行が多すぎたので2レスに分割)
$ perl 7_814.pl
1 : 1
10 : 2
11 : 4
13 : 6
99 : 20
100 : 21
110 : 33
111 : 36
199 : 140
200 : 140
999 : 300
1000 : 301
19999 : 18000
199980 : 199979
199981 : 199981
199982 : 199982
あとは解の候補があり得る値の所を飛び飛びで上手にわたって行くようなmainを作ることができれば、
0から足し込んで探すナイーブな解法に対し、演算量を劇的に低減できるかもしれない。
時間があったらやって見ますワ

886:デフォルトの名無しさん
15/09/21 23:29:01.05 TV+aglfl.net


887:814
15/09/22 06:19:38.15 0pZRAY1l.net
非公認 Googleの入社試験、竹内薫、2008。
竹内さんは、NHKの「サイエンスZERO」に出ている人だね
Googleが試験問題を公表していないから、
外国のサイトを見まくって、問題を探し出して、
仲間と頭をひねりながら、解答を作って、
本にまとめてくれたことに感謝します
日本人のサイトでは、
あまりGoogleの試験問題は載っていないようだから、
本にまとめるのに苦労したみたい

888:デフォルトの名無しさん
15/09/22 06:46:32.71 8xBEIW2I.net
つまり試験を受けた人のブログをコピペして、外国語だからばれないだろう
みたいな感じで佐野ったのか。

889:814
15/09/22 07:08:18.21 0pZRAY1l.net
竹内さんは、外人のブログをコピペしてはいない



890:外人は試験問題を、正確には書いていないから、 どういう問題が出たのか、色々なサイトを見て、 推測して書いているのだろう それにブログに書いてある解答も、 たいてい間違っているらしい



891:デフォルトの名無しさん
15/09/22 07:27:00.80 8xBEIW2I.net
>>851
だからコピーじゃなくて佐野ったんだろ?

892:デフォルトの名無しさん
15/09/22 07:58:51.34 8xBEIW2I.net
フォントが違うからコピーじゃないとかなんとか。

893:839
15/09/22 09:34:36.06 hBy/MoF0.net
一晩放置したら答えが出てました。
ということで、コードを微調整。
@Mathematica
URLリンク(ideone.com)
※最後の結果に +1 してます。

894:839
15/09/22 11:55:24.83 hBy/MoF0.net
連投スマソ。>>847 を参考に改良。
@Mathematica
URLリンク(ideone.com)
変更点:
1. n と nまでに含まれる”1”の個数 の差を
  次に計算する n の推定(guess)に利用。
2. FixedPoint で解が収束するまで計算。
結果:
・約80ステップで解に収束。
・計算時間が約20時間 → 1分弱に改善。

895:780
15/09/22 13:57:33.62 ungOuZXX.net
>>855
先に作られてしもたw その収束アルゴリズムはよく理解できていないけど、やるな…
解が埋もれているかもしれない範囲を飛ばすことなく速やかにかつ確実に解に漸近していくアルゴリズムを
考え込んでしまい、モレはまだmainができていないよ。下記のようなn, fn(n), 差分f(n)-n, 差分f(n)-n
の増加/減少トレドを見るmain書いて眺めてた。それはそれで結構面白かったけど。
use feature 'say';
sub fn {
 my ($d, $o, $w, $s) = (undef, 0 x 3);
 if (defined ($d = shift)) {
  $s = fn(@_);
  $o = scalar @_; # avoid shifted $#_ problem
  $w = 10**$o;
  $s += $d * $o * $w / 10;
  if ($d > 1) {
   $s += $w;
  } elsif ($d == 1) {
   $s += 1 + join '', @_; # `1 +' includes 0
  } #say "$d, $o, $w: $s";
 } $s }
my ($i0, $fn0, $diff0, $sign0, $indi) = (1,1,1,1,0);
for my $i (1..200000) {
 my $fn = fn(split '', $i);
 my $diff = $fn - $i; my $sign = $diff0 cmp $diff;
 if ($sign != $sign0) {
  say "$i0 p $fn0; $diff0: $sign0" unless $indi;
  say "$i : $fn; $diff: $sign";
  $indi = 1;
 } else {
  $indi = 0;
 }
 ($i0, $fn0, $diff0, $sign0) = ($i, $fn, $diff, $sign);
}

896:デフォルトの名無しさん
15/09/22 18:55:55.46 gQIVdZQM.net
お題:正の整数n が与えられたとき,√n を連分数展開せよ
連分数:URLリンク(ja.wikipedia.org)

897:デフォルトの名無しさん
15/09/22 19:18:25.94 0pZRAY1l.net
「Googleの入社試験」より
ネイピア数 e の連続した桁で見つかる、
最初の10桁の素数は?
参考までに、
その数nを、11桁(100億)の平方根、
6桁(10万)までの素数で割って、
割り切れなければ素数である
10万までの素数の数は、素数定理により約、
100,000 / log 100,000 = 8,686
答え 7,427,466,391
ただし、計算に1時間かかるらしいので、
もう少し桁数を少なくして、
また円周率PIについても、同様に求めてください。
e,PI、素数表は、どこかのサイトで探して

898:デフォルトの名無しさん
15/09/22 19:41:21.21 fdpESrCr.net
1時間もかかる??
100ミリ秒とかからず終わったけど
$ time ruby e.rb
7427466391 is prime at 98
ruby e.rb 0.07s user 0.02s system 100% cpu 0.089 total

899:デフォルトの名無しさん
15/09/22 19:58:30.28 81sVtoLn.net
>>858 Java
URLリンク(ideone.com)

900:デフォルトの名無しさん
15/09/22 20:03:13.08 uU2JaX25.net
やってないからわからないけど、手間・計算時間はある程度かかるはずだろ。短縮不可能な。
10ケタ最小fは一瞬だったら、11ケタ、12ケタの最小素数にしたらどうか?

901:デフォルトの名無しさん
15/09/22 21:11:01


902:.82 ID:2QChAl7u.net



903:デフォルトの名無しさん
15/09/22 21:17:43.58 uU2JaX25.net
円周率、Eは計算が面倒で、このような後ろに順番を追加していく数ならどうか?
これでなるべく数字を追加せずに、11ケタの素数部分を見つける問題。本質的な探索部分は同じでは。

1
12
123
・・・
123456789
12345678910
1234567891011

904:デフォルトの名無しさん
15/09/22 21:38:02.27 fdpESrCr.net
>>862
10桁の数のうち素数は5%くらいなんだから
50個ぐらい見つかるのは期待値通り

905:デフォルトの名無しさん
15/09/22 22:01:37.16 81sVtoLn.net
>>863
45678910111

906:デフォルトの名無しさん
15/09/22 22:23:27.01 uU2JaX25.net
自分のは簡単だったな

907:デフォルトの名無しさん
15/09/22 22:52:27.25 vtuBryJI.net
>>858 Emacs Lisp
(require 'cl-lib)
cl-lib
(defun primep (n)
(if (= n 2) t
(let ((d 2))
(cl-loop (when (= (% n d) 0) (cl-return nil)) (when (<= n (* d d)) (cl-return t))
(incf d)))))
(defun e (column) ; スレリンク(tech板:695番)
(let* ((D 10000) (a (make-string D ?0)))
(cl-block aaa
(cl-loop for j from 3333 downto 1 do
(let ((k 1))
(cl-loop for i from 0 below D do (progn
(setq k (+ (* (% k j) 10) (- (aref a i) ?0))) (setf (aref a i) (+ (/ k j) ?0))
(when (and (= j 1) (<= (1- column) i))
(let ((x (string-to-number (substring a (- i (1- column)) (1+ i)))))
(when (primep x) (cl-return-from aaa (format "%d is prime at %d" x (- i (1- column))))))))))))))
e
(e 2)
"71 is prime at 0"
(e 10)
"7427466391 is prime at 98"
(e 11)
"75724709369 is prime at 36"

908:857
15/09/22 22:56:05.44 0pZRAY1l.net
>>859
Rubyで、0.1秒ですか?
2008年の本に、マセマティカのFactorIntegerで、
1時間かかったと書いてあったので
暇なら、e,PI,√2,√3などの数列を使って、
素数を求めてくだされ

909:デフォルトの名無しさん
15/09/22 23:01:55.10 2QChAl7u.net
eの計算以外の部分はそんなところ
多くが小さな素数で割れる合成数だし。

910:デフォルトの名無しさん
15/09/22 23:19:06.09 uU2JaX25.net
数列計算は瞬時で、素数判定がキモでは?
フルイで素数表をつくろうとすると、10ケタがギリギリで11ケタは厳しくないか。
奇素数限定で、1つの数を1bitで表現したとしても10ケタの表は、
10^10 * 1/2 *1/8 * 1/2^20 メガバイト = 596メガバイト。
11ケタ全体にするとこの10倍容量。メモリもループ回数も厳しい。
表は持たずに判定してくしかないか。

911:デフォルトの名無しさん
15/09/22 23:26:00.73 2QChAl7u.net
10桁の合成数でも最大素因子は高々5桁
なので、100000までの素数を篩で求めてお
いて、小さい素数から片っ端から割っていく
方法でも、十分だった

912:デフォルトの名無しさん
15/09/22 23:28:35.29 2QChAl7u.net
ゴメソ 最小素因子の間違いね

913:デフォルトの名無しさん
15/09/23 07:48:02.68 HiyuM5m6.net
>>858
@Mathematica
URLリンク(ideone.com)
※ 計算時間は3msでした。

914:デフォルトの名無しさん
15/09/23 09:06:06.22 o5eDyHvE.net
>>858 C
URLリンク(ideone.com)

915:デフォルトの名無しさん
15/09/23 11:14:10.28 o5eDyHvE.net
>>857 C
URLリンク(ideone.com)

916:デフォルトの名無しさん
15/09/23 14:11:29.28 ByrCNK4a.net
eでだとえば一分以内に11ケタや、12ケタは計算完了できるか?

917:780
15/09/23 14:26:50.38 22OCfLbN.net
>>876 何言ってるの君は、十数桁までの算出なら_秒のレンジでしょに
一番簡単なatanの式でも
例、言語: MIT C Scheme
(* 4 (atan 1.0))
;Value: 3.141592653589793
doubleまでをサポートする言語でも16桁くらいまでは一瞬だよ。

918:780
15/09/23 14:28:33.20 22OCfLbN.net
>>877
おと間違えた、こりゃπだ。
でもeも同様に桁数が余り長くなければ_秒だよ。

919:デフォルトの名無しさん
15/09/23 14:50:46.49 ByrCNK4a.net
eの部分列が、だとえば一分以内に11ケタや12ケタの素数となるのを発見するのはできるか?

920:デフォルトの名無しさん
15/09/23 16:08:06.43 0scTCNwp.net
多項式時間アルゴリズムならできるんじゃね?AKSとか。
AKSの実装みたことねーな。

921:デフォルトの名無しさん
15/09/23 16:09:56.27 m6puvBDg.net
>>815
Ruby
答えの桁が少ないから終わるけど桁が増えるともっと工夫しないとダメだろうな
てかこんなんでいいのか
URLリンク(ideone.com)

922:880
15/09/23 16:13:24.63 m6puvBDg.net
あ、間違えてた
こうだな
URLリンク(ideone.com)

923:デフォルトの名無しさん
15/09/24 11:37:12.32 NZgcXNyR.net
>>118
亀レスですみません。
シルバーウィークで暇だったので面白そうな奴を組んでみました。
ほぼ計算結果は同じですが、違っていた奴
11個:半径=5.00
(0,0)(1,3)(0,6)・・・以下略
17個:半径=72.50
(0,0)(1,12)(0,24)・・・以下略
18個:半径=25.00
(0,0)(13,9)(20,10)・・・以下略
19個:半径=25.00
(0,0)(13,9)(18,24)・・・以下略
34個:半径=145.00
(0,0)(5,5)(18,16)・・・以下略
35個:半径=145.00
(0,0)(13,11)(18,16)・・・以下略

924:デフォルトの名無しさん
15/09/24 19:16:18.59 MUn8GANW.net
>>883
見逃してる点があるだけじゃね?
半径5 中心(-4,3) 12個
(0,0)(1,3)(0,6)(-1,7)(-4,8)(-7,7)(-8,6)(-9,3)(-8,0)(-7,-1)(-4,-2)(-1,-1)

925:デフォルトの名無しさん
15/09/25 19:32:25.19 RV77AIll.net
>>881,881 を Python で。
URLリンク(ideone.com)
短っ!

926:デフォルトの名無しさん
15/09/26 02:51:47.44 i0zKrV8k.net
お題:以下を出力する
1
12
123
1234
12345
123456
1234567
12345678
123456789

927:デフォルトの名無しさん
15/09/26 03:32:13.06 P25DxxnJ.net
>>886 Python3
for i in range(1,10):print('123456789'[:i])
43文字

928:デフォルトの名無しさん
15/09/26 03:43:25.43 nw7tAYJX.net
>>886
Ruby
a=0;9.times{|i|p a=a*10-~i}
27文字

929:デフォルトの名無しさん
15/09/26 03:46:20.54 VXPsa0vt.net
>>886
+++>>+++++++[<+++++++<+>>-]+++++++++[>+[>+<<<.+>>-]>[<+<<->>>-]<<<<.>>><-]

930:デフォルトの名無しさん
15/09/26 03:50:47.76 P25DxxnJ.net
>>886 Go
package main;func main(){for i:=1;i<10;i++{println("123456789"[:i])}}
69文字

931:デフォルトの名無しさん
15/09/26 03:53:30.71 VXPsa0vt.net
>>889
><とか全く無意味なところが残ってた恥ずかしい

932:デフォルトの名無しさん
15/09/26 04:18:45.09 P25DxxnJ.net
>>886 OCaml
let p,s=print_endline,"123456789"
let rec f=function|9->p s|n->p(String.sub s 0 n);f(n+1)
f 1
改行2回含んで93文字

933:デフォルトの名無しさん
15/09/26 04:19:39.31 MTElpeKZ.net
>>886
URLリンク(ideone.com)
C++。ワンライナーにはかなわんな。

934:デフォルトの名無しさん
15/09/26 04:34:02.86 P25DxxnJ.net
let p,s=print_endline,"123456789"
let rec f=function|9->p s|n->p(String.sub s 0 n);f(n+1);;f 1
>>892はミス、94文字に修正

935:デフォルトの名無しさん
15/09/26 04:43:12.51 P25DxxnJ.net
>>886 Bash
for i in {1..9};do s=$s$i;echo $s;done
38文字、sが空の状態であることが条件

936:デフォルトの名無しさん
15/09/26 04:56:05.75 LKYoiOWF.net
>>886 C++
URLリンク(ideone.com)

937:デフォルトの名無しさん
15/09/26 05:08:10.78 i8DjA5eB.net
>>886
@Mathematica
Range[9]//Map[{StringTake["123456789",#]}&,#]&//Grid
52文字

938:デフォルトの名無しさん
15/09/26 05:21:25.74 OT+


939:Fkj/0.net



940:デフォルトの名無しさん
15/09/26 05:41:15.64 VPLzo2d+.net
>>858 Squeak Smalltalk
| len e x delta digits lastPos |
len := 10.
e := 2 asScaledDecimal.
x := 1.
lastPos := 2.
[ | ans |
 [e := e + (delta := 1 / (x := x + 1) factorial). delta log negated > len] whileFalse.
 digits := (e asScaledDecimal: delta log asInteger negated) asString upTo: $s.
 lastPos + 1 to: digits size - len + 1 do: [:pos |
  ((digits at: (lastPos := pos)) ~= $0) ifTrue: [
   ans := (digits copyFrom: pos to: pos + len - 1) asInteger.
   ((Integer primesUpTo: ans sqrt + 1) noneSatisfy: [:p | ans isDivisibleBy: p])
    ifTrue: [^ans]
  ]
 ]
] repeat "=> 7427466391 "

941:デフォルトの名無しさん
15/09/26 06:05:35.48 i0zKrV8k.net
>>886 Io
for(i,2,10,writeln(((10**i-1)/9-i)/9))

942:デフォルトの名無しさん
15/09/26 06:08:21.02 VPLzo2d+.net
>>886 GNU Smalltalk
(1 to: 9) inject: 0 into: [:prev :i | (prev * 10 + i) printNl]
URLリンク(ideone.com)

943:デフォルトの名無しさん
15/09/26 06:36:11.10 8isGWqIv.net
>>889
ナイスとしかいいようがない,ideoneに実行系があるよ
URLリンク(ideone.com)

944:デフォルトの名無しさん
15/09/26 06:47:48.50 wxxd8WLg.net
暗号系言語って何らかのトランスレータがあるんだろうか?

945:780
15/09/26 11:54:35.31 HlXxu/MY.net
>>886 Perl
say 1..$_ for 1..9;

946:デフォルトの名無しさん
15/09/26 11:54:36.10 gfTU519R.net
>>886 c
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 9; i++) printf("%.*s\n", i, "123456789");
return 0;
}

>>886 ruby
puts (1..9).map {|i| "123456789"[0, i]}

947:デフォルトの名無しさん
15/09/26 12:10:27.50 s3bG5fjE.net
>>886
C#
namespace Odai885
{
class Program
{
static void Main(string[] args)
{
Enumerable.Range(1, 9).Select(l => { Console.WriteLine("123456789".Substring(0, l)); return 0; }).ToArray();
}
}
}

948:デフォルトの名無しさん
15/09/26 12:29:53.29 i0zKrV8k.net
>>886 R
for(i in 1:9)cat(1:i,sep="",fill=T)

949:デフォルトの名無しさん
15/09/26 13:24:18.37 Bwgz8l1o.net
>>886 Rust
fn main() {
for i in 1..10 {
for j in 1..i+1 {
print!("{}", j);
}
println!("");
}
}

950:デフォルトの名無しさん
15/09/26 15:15:42.63 O4axx1wD.net
>>886 Emacs Lisp
((lambda (l) (when l (f (cdr l)) (mapcar (lambda (x) (princ x)) (reverse l)) (terpri))) (reverse '(1 2 3 4 5 6 7 8 9)))
1
12
123
1234
12345
123456
1234567
12345678
123456789
t

951:デフォルトの名無しさん
15/09/26 15:26:42.53 O4axx1wD.net
>>886 Emacs Lisp
>>909 は間違えました。
(require 'cl-lib)
cl-lib
(cl-labels ((f (l) (when l (f (cdr l)) (mapcar (lambda (x) (princ x)) (reverse l)) (terpri))))
(f (reverse '(1 2 3 4 5 6 7 8 9))))
1
12
123
1234
12345
123456
1234567
12345678
123456789
t

952:デフォルトの名無しさん
15/09/26 19:11:36.57 nw7tAYJX.net
>>886
Clojure
(doseq [x (range 1 10)] (println (subs "123456789" 0 x)))

953:デフォルトの名無しさん
15/09/26 19:17:34.86 O4axx1wD.net
>>886 Emacs Lisp
>>909 で誤って依存していた大域関数f
(defun f (l) (when l (f (cdr l)) (mapcar (lambda (x) (princ x)) (reverse l)) (terpri)))
をYコンビネータ導出の手順を使用して変形し、fへの依存をなくしました。
(require 'cl-lib)
cl-lib
(funcall (funcall #'(lambda (procedure)
(lexical-let ((procedure procedure))
(lambda (l) (when l (funcall (funcall procedure procedure) (cdr l)) (mapcar (lambda (x) (princ x)) (reverse l)) (terpri)))))
#'(lambda (procedure)
(lexical-let ((procedure procedure))
(lambda (l) (when l (funcall (funcall procedure procedure) (cdr l)) (mapcar (lambda (x) (princ x)) (reverse l)) (terpri))))))
(reverse '(1 2 3 4 5 6 7 8 9)))
1
12
123
1234
12345
123456
1234567
12345678
123456789
t

954:デフォルトの名無しさん
15/09/26 19:25:19.04 y7bGrwOk.net
>>912
無名再帰にすると長くなるのは仕方ないな
無理


955:せず名前使えば?



956:デフォルトの名無しさん
15/09/27 17:50:15.20 NRLqsz4V.net
>>857
出題者想定:スレリンク(tech板:13番)
>>875
ありがとうございます.
1.double で処理,とは思いつきませんでした.考えてみればこれもありですか,参りました.
URLリンク(codepad.org)
2.桁を一つ見つけるごとに部分和を出して誤差チェックとは丁寧ですね

957:デフォルトの名無しさん
15/09/27 21:49:56.02 5rMt3yA4.net
+++++++++>>++++++++++<<[>>>[+>]>>+++++++[<+++++++[<+>-]>-]<<[.<]<-]
少し長いけどこちらのほうがわかりやすいかな?

958:デフォルトの名無しさん
15/09/27 21:54:01.34 bMt5Z1cQ.net
お題:3の倍数でnで始まりnで終わる最小値を求める

n=1 -> 111
n=2 -> 222
n=3 -> 3

959:デフォルトの名無しさん
15/09/27 22:19:00.57 pud21hSw.net
>>916 Java
URLリンク(ideone.com)

960:デフォルトの名無しさん
15/09/27 22:21:41.45 pud21hSw.net
おっと、>>917じゃダメだな
n=11とか111じゃないといかん

961:デフォルトの名無しさん
15/09/27 22:38:32.88 pud21hSw.net
>>916 Java
URLリンク(ideone.com)
今度こそ?

962:デフォルトの名無しさん
15/09/27 22:49:58.77 OMWJkqrz.net
>>916
ruby2.0
def func(n)
return n%3==0?n:(n.to_s+(n%3).to_s+n.to_s).to_i
end
(1..100).map{|e|p [e,func(e)]}

963:デフォルトの名無しさん
15/09/27 22:51:10.31 pud21hSw.net
>>919もバグってた件orz
>>916 Java
URLリンク(ideone.com)

964:デフォルトの名無しさん
15/09/27 23:11:22.94 OMWJkqrz.net
Cで。
URLリンク(ideone.com)

965:デフォルトの名無しさん
15/09/28 00:40:18.05 7hkQ4YH6.net
>>916
URLリンク(ideone.com)
C++。なんか妙な並びだな。これバグってないよね。

966:デフォルトの名無しさん
15/09/28 00:48:29.00 Qdjt+JHs.net
出題があいまいだから何とも言えない

967:915
15/09/28 01:01:15.83 gcp0/eNc.net
n=11 の場合111のつもりです

968:780
15/09/28 01:13:38.21 1qg2YL0F.net
>>916 Perl

%h = map{substr($_,-1) => $_} qw(0 3 6 9 12 15 18 21 24 27);
for my $n (1..9) {
 my $m = $h{$n};
 while (substr($m,0,1) ne $n) {
  $m += 30;
 }
 print "$n->$m\n";
}

$perl 8_915.pl
1->111
2->222
3->3
4->415
5->526
6->6
7->718
8->829
9->9

969:780
15/09/28 01:16:00.39 1qg2YL0F.net
>>925
二桁以上対応要だたのか…
n=12 とかの場合、どういう解が要求されるわけよ?

970:780
15/09/28 01:22:19.87 1qg2YL0F.net
>>926
だめだこれぜんぜん間違っている。
検証不十分でアップしちゃってごめんね。

971:780
15/09/28 01:26:45.99 1qg2YL0F.net
>>928
たびたびゴメン,1-9まではこれで合ってるわ。検算の電卓叩き間違えてた。
二桁以上対応は、また時間のあるときにねハート

972:デフォルトの名無しさん
15/09/28 01:59:41.01 nBnRDQZn.net
>>916 Haskell
深いこと考えずに
main = putStrLn . solve =<< readLn
solve :: Int -> String
solve n = head . filter (test $ show n) . map show $ [3, 6..]
test n m = take l m == n && drop (length m - l) m == n
where
l = length n

973:929
15/09/28 02:11:22.67 nBnRDQZn.net
>>916 Haskell
1から100まで列挙
URLリンク(ideone.com)

974:デフォルトの名無しさん
15/09/28 02:13:48.56 etdYPLZ6.net
>>927
12なら12でいいんじゃないかな

975:デフォルトの名無しさん
15/09/28 02:14:47.60 7hkQ4YH6.net
>>916
URLリンク(ideone.com)
C++。書き直した。けど例と食い違ってるんだが、なんかバグってる?

976:デフォルトの名無しさん
15/09/28 02:19:12.61 7hkQ4YH6.net
あー、始まってっていうの忘れてた。

977:デフォルトの名無しさん
15/09/28 02:27:54.45 7hkQ4YH6.net
>>916
URLリンク(ideone.com)
C++。デバッグ完了!?あってるかな。
腹減った。

978:デフォルトの名無しさん
15/09/28 02:51:52.43 etdYPLZ6.net
>>916
Ruby
URLリンク(ideone.com)
適当に総当り
6桁くらいあると1秒じゃ終わらないかも

979:デフォルトの名無しさん
15/09/28 03:05:01.50 etdYPLZ6.net
>>916,935
なんで関数でreturnしないでputsしてたんだろ
というわけでちょっと修正
URLリンク(ideone.com)

980:デフォルトの名無しさん
15/09/28 03:15:11.76 g87qhbj3.net
>>916 Emacs Lisp
(defun f (a b)
(let* ((as (format "%d" a)) (al (length as))
(bs (format "%d" b)) (bl (length bs)))
(when (<= bl al)
(let ((a1 (string-to-number (substring as 0 bl)))
(a2 (string-to-number (substring as (- al bl) al))))
(and (= a1 b) (= a2 b))))))
f
(defun g (m n)
(let ((m0 m))
(while (not (and (f m n) (princ (format "n=%d -> %d\n" n m))))
(setq m (+ m m0)))))
g
(g 3 1) n=1 -> 111
(g 3 2) n=2 -> 222
(g 3 3) n=3 -> 3
(g 3 11) n=11 -> 111

981:デフォルトの名無しさん
15/09/28 06:17:28.02 kAFkU9e5.net
>>916 Python3
def f(n):
 s = str(n)
 m = sum(map(int, s)) * 2 % 3
 if not m:
  return n
 for i, (f, b) in enumerate(zip(s, s[::-1]), 1):
  if f != b:
   break
  t = s + s[i:]
  if int(t) % 3 == 0:
   return int(t)
 return int(s + str(3-m) + s)
f(n=10) -> 10110
f(n=11) -> 111
f(n=12) -> 12
f(n=100) -> 1001100
f(n=101) -> 10101
f(n=102) -> 102

982:デフォルトの名無しさん
15/09/28 14:16:16.25 ZDExReCM.net
>>916
O(n*m)ぐらいまで抑えてみた

C++
URLリンク(ideone.com)

983:デフォルトの名無しさん
15/09/28 15:28:26.19 etdYPLZ6.net
>>916
Ruby
URLリンク(ideone.com)
たぶん1万桁程度は通るようになったと思う
アルゴリズムは>>939と大体同じかな
Pythonわからないけど

984:デフォルトの名無しさん
15/09/28 15:52:38.55 /qYU1fFl.net
n=22の時も、重複ありなら222、無しなら22122

985:デフォルトの名無しさん
15/09/28 16:16:50.63 gXusLmLr.net
>>916 Squeak/Pharo Smalltalk

| fn |
fn := [:n |
 | digs m ret |
 digs := n asString asArray collect: #digitValue.
 [:exit |
  digs size to: 0 by: -1 do: [:nDup |
   (digs last: nDup) = (digs first: nDup) ifTrue: [
    ret := digs, (digs last: digs size - nDup).
    (m := ret sum \\ 3) = 0 ifTrue: [exit value]
   ]
  ].
  ret := digs, {3 - m}, digs
 ] valueWithExit.
 ret reversed polynomialEval: 10
].

fn value: 9. "=> 9 "
fn value: 10. "=> 10110 "
fn value: 11. "=> 111 "
fn value: 12. "=> 12 "
fn value: 100. "=> 1001100 "
fn value: 101. "=> 10101 "
fn value: 102. "=> 102 "
fn value: 104. "=> 1042104 "
fn value: 23452345. "=> 234523452345 "

986:デフォルトの名無しさん
15/09/28 17:35:15.25 gxHFtnk4.net
案内

競技プログラミングにハマるプログラマのスレ [転載禁止]?2ch.net
スレリンク(prog板)

987:デフォルトの名無しさん
15/09/28 21:31:45.59 EgikiZYG.net
ruby2.0で。

def func(n)
w=n%3
n=n.to_s
return n if w==0
len=n.length
return n[0]*(len/3+1)*3 if n.count(n[0])==len
return n.to_s+w.to_s+n.to_s
end
(1..1111).map{|e|p [e,func(e)]}

988:デフォルトの名無しさん
15/09/28 23:32:04.93 A92rPhFQ.net
>>916 c
URLリンク(ideone.com)

989:デフォルトの名無しさん
15/09/29 03:18:10.11 7mTyt6Kl.net
お題: 3の倍数の時だけ文字化けするプログラム

12@45'78!

990:デフォルトの名無しさん
15/09/29 07:21:16.85 tl3iioqy.net
>>945
4,5,7,8の結果、おかしくない?

991:デフォルトの名無しさん
15/09/29 11:00:25.50 C4Ll/6Vj.net
>>947 Java
URLリンク(ideone.com)

992:デフォルトの名無しさん
15/09/29 15:12:35.50 ux+ZVrLF.net
文字化けって表現がおかしくね
バイナリにでもせいっちゅうことか

993:デフォルトの名無しさん
15/09/29 21:06:02.44 WN6iGBpO.net
>>947 ruby
URLリンク(ideone.com)

994:780
15/09/29 21:14:29.38 0gMRYR9e.net
>>947 Perl

@a=split '', q{!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~};
print map{/(3|6|9)/ ? do{push @a, shift @a; $a[0]} : $_} split '' for <DATA>;
__DATA__
3.14159265358979323846264338327950288
2.718281828459045235360287471352

実行例
$ perl 7_946.pl
".1415#2$5%58&7'(2)84*2+4,-8.27/50288
2.71828182845:0452;5<=0287471>52

995:780
15/10/01 00:33:57.03 O5jmaqNC.net
>>952 こう書いた方がカッチョエエか

@a=split '', q{!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~};
print map{/[369]/ ? $a[rand($#a)] : $_} split '' for <DATA>;
__DATA__
3.14159265358979323846264338327950288
2.718281828459045235360287471352

996:デフォルトの名無しさん
15/10/02 14:19:41.50 smVvYCyu.net
お題:以下を出力
1
12
123
1234
12345
123456
1234567
12345678
123456789
123456789a
123456789ab
123456789abc
123456789abcd
123456789abcde
123456789abcdef
23456789abcdef
3456789abcdef
456789abcdef
56789abcdef
6789abcdef
789abcdef
89abcdef
9abcdef
abcdef
bcdef
cdef
def
ef
f

997:デフォルトの名無しさん
15/10/02 16:43:29.98 wmMPPcd6.net
>>954 Common Lisp
URLリンク(ideone.com)

998:デフォルトの名無しさん
15/10/02 17:22:43.77 6E18S5dP.net
BrainFuckでもない限り
Cで
puts("1\n12\n123\n1234\n12345\n...\n123456789abcdef\n23456789abcdef\n...\nf");
としてるのと大差が無い件

999:デフォルトの名無しさん
15/10/02 18:03:15.17 T4kk9zpR.net
難し過ぎるのも困るけど簡単過ぎるのもやる気出ないな

1000:デフォルトの名無しさん
15/10/02 19:03:14.73 PPYCDrIp.net
>>954
@Mathematica
URLリンク(ideone.com)

1001:デフォルトの名無しさん
15/10/02 19:12:34.24 gloLINxL.net
>>954 c
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 29; i++) printf("%.*s\n", i, "123456789abcdef" + i / 15 * (i % 15));
return 0;
}

1002:953
15/10/02 19:42:21.54 smVvYCyu.net
じゃあ"123456789abcdef"を含む文字列(あるいはそれに準ずるもの)使用禁止で

1003:デフォルトの名無しさん
15/10/02 21:17:28.97 T1FCG5fN.net
>>960
なぜそうしたのか意図を聞かせてください。

1004:915
15/10/02 22:59:09.46 Q80sWlwu.net
>>954 J
smoutput &amp;> (<\ , <\.) '123456789abcdef'

1005:デフォルトの名無しさん
15/10/02 23:16:51.40 uIXobxf8.net
#include <stdio.h>
int main(void) {
int i,j;
for (i=1 ; i<31 ; i++,putchar('\n'))
for (j=i/16*i%16+1 ; j<(i/16?16:i%16) ; j++)
printf("%x",j);
return 0;
}

1006:953
15/10/02 23:19:10.41 smVvYCyu.net
>>961
数学的なアルゴリズムが出てくると思った

1007:デフォルトの名無しさん
15/10/03 07:30:34.93 hNGF9zPI.net
>>954
URLリンク(ideone.com)

++++++++++>>+++++++++[>[>>]>++++++++[<++++++++>-]<[-<<]>-]++++++[>[>>]+++>++++++
++++[<++++++++++>-]<[-<<]>-]>>+<<++++++++++++++[>>[<.>>>]+<[<<]<.>>-]>[.>>]>>+++
+++++++.<<++++++++++++++[<[<<]>>->>[<.>>]>.<<-]

>>956
やれと言われた気がした

1008:780
15/10/03 12:42:39.38 PLl1Mwjm.net
>>954 Perl

use feat


1009:ure qw{:5.16}; say for sub {  @_ ? do{   my @r = __SUB__->(@_[0..$#_-1]);   say @_;   (join('', @_), @r)  } : () }->(1..9,a..f); >>964 数学的アルゴリズムではないけkど、/とか%のマジック演算に依らずに、 再帰的構造をトラバースする形で作ってみた、まぁ遊びだね。 もうちょっとコンパクト&エレガントに書けたら良いだけれどもねェ…



1010:915
15/10/03 12:52:59.16 2lM26vpR.net
お題:n人で総当り戦をする時の対戦表をつくる

1011:780
15/10/03 13:01:08.17 PLl1Mwjm.net
>>966 ごめんこれ間違っていた、下半分の三角形に求めれれているものとは違うものを出力させてた orz
$ perl 7_953.pl
1
12
123
1234
12345
123456
1234567
12345678
123456789
123456789a
123456789ab
123456789abc
123456789abcd
123456789abcde
123456789abcdef
123456789abcdef
123456789abcde
123456789abcd
123456789abc
123456789ab
123456789a
123456789
12345678
1234567
123456
12345
1234
123
12
1

1012:デフォルトの名無しさん
15/10/03 18:51:14.51 3fp7KwDH.net
>>916 C
URLリンク(ideone.com)
>>947 C
URLリンク(ideone.com)
>>954 C
URLリンク(ideone.com)

1013:デフォルトの名無しさん
15/10/03 19:11:54.87 3fp7KwDH.net
>>965
目が回りそうなので、試しにCに自動翻訳してみた
URLリンク(ideone.com)
でも難解であることには変わりなかった><
このソースを実行した結果 URLリンク(ideone.com)

1014:デフォルトの名無しさん
15/10/03 20:56:29.61 g/NsU62v.net
>>970
規模は小さいけどまごうことなきトランスコーダじゃないですか。
GJ

1015:デフォルトの名無しさん
15/10/04 13:22:23.08 c3LOhcpj.net
お題: さくらさく (季節は秋ですが><)

縦横20字ずつ、計400字の「さ」「く」「ら」の文字がランダムに配置されています。
縦、横、斜め 全ての方向を検索して「さくらさく」がいくつ存在するか
求めてください

なお、20x20のデータは以下のように作成してください
n番目のデータ:
dn = (1234567899012345678 / n) % 3 (%は剰余、/は整数割り算)
dn = 0 : 「さ」
dn = 1 : 「く」
dn = 2 : 「ら」
20x20の左上から右へ n=1,2,3...18,19,20
右下 ...n=399,400
C言語でのデータ作成の例:URLリンク(ideone.com)

「さくらさくらさく」← 文字の始まり位置の違いで2つあるので2つと数えます
「くさらくさ」← 逆から読めるのもカウントします

解答例(C++):URLリンク(ideone.com)

1016:デフォルトの名無しさん
15/10/04 13:23:06.78 c3LOhcpj.net
データ作成がうまくいかない人は以下のデータを使ってみてください
S=さ K=く R=ら

S S S K S S R S S K K K S R K K K S S S
K R K R S S R R S S R R K S R K K K K K
K S S K R R S R K K K S R K R K K S S S
R K R K K S S S S K R S S S R R K R R S
R S K K R S R S K K K R R K R R K S S S
S R S S R R R S R R S S R S R K K K K K
S K S R R K S S K R K S S S R S R K K S
R R R K K K K K K R R R S S R K R K S S
R K R S S S S R R R K K K K S K S S S R
K S S R S K K S R R K K S R R S K S R S
K S K K R S S K S K S R K K S S R K R K
R S K S K K R K S R K S R S S S R R K R
K S R S S S K K K R S S R K R S S R S K
K S S S S K K S R K K S S K S S S R S S
R R R K S K R S R S R R S R K S S R R K
K K S K R K S K S R K R R R R R S K S S
S K K R R K K S K K K K K S S K K R K K
K R R R K R K S K S R R S K R S K K R R
K R S S R S S K S K R S R R R S R K K R
S R S R R S K R R R S S K S R S S R K S

1017:デフォルトの名無しさん
15/10/04 14:32:33.26 BoLyeOLz.net
>>972
その数字間違ってるじゃないか
× 1234567899012345678
○ 123456789012345678

1018:デフォルトの名無しさん
15/10/04 14:34:50.93 +0+r9MqJ.net
秀逸なお題乙
BrainF*ck好きな人は
ぜひBrainF*ckでよろw

1019:デフォルトの名無しさん
15/10/04 14:37:26.23 BoLyeOLz.net
>>972


1020:Haskell あんまりかっこ良くない... http://ideone.com/qac402



1021:デフォルトの名無しさん
15/10/04 15:15:48.06 c3LOhcpj.net
>>974
ご指摘ありがとです
その通りです><
123456789012345678 でお願いします

1022:デフォルトの名無しさん
15/10/04 15:17:55.57 BoLyeOLz.net
>>972 Haskell
こっちのほうがいいかな?
URLリンク(ideone.com)

1023:デフォルトの名無しさん
15/10/04 19:30:38.58 qykP8ViT.net
>>954
Ruby
a=0
1.upto(29){|i|puts (a=a*36+i).to_s(36)[i/15*i%15,15-(15-i).abs]}

1024:915
15/10/04 21:00:25.91 aEDkzaSr.net
>>954 IO
for(i,1,15,for(j,1,i,j asHex print);writeln)
for(i,2,15,for(j,i,15,j asHex print);writeln)

1025:デフォルトの名無しさん
15/10/05 07:37:53.85 Efh3UhbF.net
>>972 Python3
URLリンク(ideone.com)
正規表現の後読みアサーションでSKRSKをマッチさせる

1026:デフォルトの名無しさん
15/10/05 17:16:55.10 V+1Y1wpi.net
>>972 J
f =: 3 : 0
a =. 'SKR'{~123456789012345678x (3|<.@%)>:i.20 20
E =. E."1
R =. +/ , y E a
RU =. +/ , y E , /. a
U =. +/ , y E |. |: a
LU =. +/ , y E , /. |."1 a
L =. +/ , y E |."1 a
LD =. +/ , y E |."1 , /. a
D =. +/ , y E |."1 |: a
RD =. +/ , y E |."1 , /. |."1 a
R , RU , U , LU , L , LD , D , RD
)

f 'SKRSK'
1 0 1 1 1 6 4 1

f 'SKSKR'
1 1 4 0 2 1 1 1

1027:デフォルトの名無しさん
15/10/06 06:19:41.75 xeJsGt+1.net
>>967 J
f =: 3 : 0
((-:y*<:y),2)$;;<@,/.(>:i.y)(<@,"0)/>:i.-y
)

f 5
1 5
1 4
2 5
1 3
2 4
3 5
1 2
2 3
3 4
4 5

1028:デフォルトの名無しさん
15/10/06 18:47:41.80 hl62C8iM.net
>>967 C++
URLリンク(ideone.com)
総当たりの対戦表ということでマス目の表を想像して
手を付けてなかったけどリストで良いなら

1029:デフォルトの名無しさん
15/10/06 21:57:54.61 U0RhR/1j.net
>>972 brainfuck
URLリンク(ideone.com)

>>975
これで勘弁してくださあああああああああああああ

1030:デフォルトの名無しさん
15/10/06 22:09:39.74 fHPawY3t.net
>>985
gj.
涙なしでは見れんなぁ。発狂するぞ。

1031:デフォルトの名無しさん
15/10/06 22:10:44.24 YetVXLTi.net
>>985
あんたのこと尊敬する

1032:デフォルトの名無しさん
15/10/06 22:22:47.44 sJPwA8RM.net
最近は実用性が無いお題が多いわね。
もう少し実用性が有って役に立つお題を考えなさいよ。

1033:デフォルトの名無しさん
15/10/06 22:26:58.55 U0RhR/1j.net
過去のお題で実用性があるお題ってたとえばどんなんだ?

1034:デフォルトの名無しさん
15/10/06 22:35:33.99 sJPwA8RM.net
>>989
ただの数字を羅列するだけのお題なんてつまらないわよ。あんたもう少し気の利いたお題考えなさいよ。いいわね。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

721日前に更新/308 KB
担当:undef