プログラミングのお題スレ

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミングの練習に誰かが面白いお題を提案するスレ
取り敢えず初心者はここで練習しよう
2デフォルトの名無しさん:2013/01/03(木) 15:58:44.71
【萌え画像】お正月だから、うちの子猫に巫女さんの格好させてみた(*´Д`)ハァハァ
http://ikura.2ch.net/test/read.cgi/kyoto/1336628583/
3デフォルトの名無しさん:2013/01/03(木) 16:06:11.28
言語は?
4デフォルトの名無しさん:2013/01/03(木) 16:16:59.88
アイちゃん語
5デフォルトの名無しさん:2013/01/03(木) 17:08:14.52
オセロ
自動販売機のシミュレート
簡単なファイル検索ソフト
6デフォルトの名無しさん:2013/01/03(木) 17:41:07.34
自動販売機のシミュレート
⇒ユニットごとの制御(冷却、加温、電磁コイル、ディスプレイ、音声等)
 ユニットのエラーセンサも実装すること
7デフォルトの名無しさん:2013/01/03(木) 17:49:03.54
つり銭制御も大切
8デフォルトの名無しさん:2013/01/03(木) 19:18:28.29
組み込みかよ
9デフォルトの名無しさん:2013/01/03(木) 19:32:29.38
注意書きが遅いけど京都大学霊長類研究所は正月休みなのか?
正月の間もアイちゃんの世話は必要だろ
10デフォルトの名無しさん:2013/01/03(木) 19:49:28.19
出されたお題をコーディングして罵られるスレ
http://toro.2ch.net/test/read.cgi/tech/1354393458/
11デフォルトの名無しさん:2013/01/03(木) 20:38:03.75
自動販売機

・お金を受け取る
・お金か確認する
・お金が足りているか確認する
・商品を排出する
・お釣りを計算する
・お金を返金する
・商品を補充する

とりあえずこんなもんか
12デフォルトの名無しさん:2013/01/03(木) 21:47:58.41
これも必要かな
・在庫切れの商品のランプを消灯する
・現在の投入金額によって購入可能な商品のランプを点す
・つり銭を補充する
・つり銭切れの場合販売中止にする
13デフォルトの名無しさん:2013/01/03(木) 22:44:08.31
>>9
当番の人以外は休み
14デフォルトの名無しさん:2013/01/04(金) 10:38:16.36
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
15デフォルトの名無しさん:2013/01/05(土) 00:07:49.06
初心者ですが出来ました!

http://ideone.com/rvkoBh
16デフォルトの名無しさん:2013/01/06(日) 01:28:30.92
Juicesで読むのやめた
17デフォルトの名無しさん:2013/01/06(日) 04:14:42.78
>>15
商品はどうやって表現してるの?
18デフォルトの名無しさん:2013/01/08(火) 20:01:43.17
2階建エレベーター
19デフォルトの名無しさん:2013/01/09(水) 06:34:17.55
役や点数などローカルルール等が柔軟に設定できる通信対戦型麻雀
20デフォルトの名無しさん:2013/01/15(火) 01:52:36.77
結局誰も作らない
21デフォルトの名無しさん:2013/01/15(火) 01:58:49.47
そうだね
22デフォルトの名無しさん:2013/01/15(火) 02:03:58.90
シンプルな2chブラウザ、オープンソースで
23デフォルトの名無しさん:2013/01/19(土) 08:42:00.95
ルービックキューブ
24片山博文MZパンク ◆0lBZNi.Q7evd :2013/01/24(木) 07:17:48.62
こっちのスレは初心者向けということでいいな?

○×ゲーム
25デフォルトの名無しさん:2013/01/25(金) 03:21:44.66
>>11
テキストベースでやってみました。
http://www1.axfc.net/uploader/so/2767370.zip

スパゲティなのは仕様です。
26デフォルトの名無しさん:2013/01/25(金) 09:24:23.06
組み込み系はやったことないから分からん
27デフォルトの名無しさん:2013/01/25(金) 18:34:16.53
お金はCompositeパターンか
2825:2013/01/26(土) 21:51:10.27
今改めて見るとBufferedReaderクローズし忘れてました。短いソースなんで問題ないと思うけど。
というか、お題を読む限りGUIで作れって方針ぽいですね。

>>24
AIの方針ってどうすればいいですかね?
プレイヤーが負けか引き分けのみってのもどうかなと考えています。
29デフォルトの名無しさん:2013/01/26(土) 23:11:59.32
商品の在庫管理は必須だろjk
30デフォルトの名無しさん:2013/01/27(日) 02:13:47.39
○×ゲーム難しい・・・
31片山博文MZパンク ◆0lBZNi.Q7evd :2013/01/27(日) 07:06:31.50
ヒント。if ((a[0][0]=='O' && a[0][1]=='O' && a[0][2]=='O') || ...) {Oの勝ち}
32デフォルトの名無しさん:2013/01/27(日) 09:21:41.52
それヒントじゃなくてただのマルバツゲームのルールじゃん。
アルゴリズムじゃない。ただのルール。

AI考える上でどういう思考パターンにすべきかって質問でしょ?
33デフォルトの名無しさん:2013/01/27(日) 12:01:39.15
>>31
まさかこんな人が業務用プログラムを組んでるって事はないだろうな...(心配)
34デフォルトの名無しさん:2013/01/27(日) 12:25:15.06
>>31
勝利判定するのに8通りもダラダラこんな記述するなんてスマートじゃないよね
×も考慮したら16通りも記述しないといけないし良い方法ないかな
35デフォルトの名無しさん:2013/01/27(日) 13:25:41.33
・盤面をa[3][3]じゃなくてa[9]としてアクセス
・あらかじめ作った勝利パターンの9bit値群とand取る
36デフォルトの名無しさん:2013/01/27(日) 13:37:13.50
インデックスをベタ書きで配列化しておくのも
ifを8通り記述するのも
ハードコーディングしてる点では同じだわな

インデックスのパターンを予めループで生成するのも
直接ループで判定するのも大して変わらない気もする
37デフォルトの名無しさん:2013/01/27(日) 13:54:01.15
C/C++の宿題片付けます 161代目
http://toro.2ch.net/test/read.cgi/tech/1354070278/

に3目並べの回答が2個あった。
judge() がそれに当たる。

ttp://ideone.com/u2SEqK 〜 ベタ
ttp://ideone.com/JRObzy 〜 スマート
38デフォルトの名無しさん:2013/01/27(日) 15:22:25.37
>>37
どっちもべた書きしたほうがマシだな
ボードの大きさが変わるなら話は変わるけど
39デフォルトの名無しさん:2013/01/28(月) 01:43:38.62
ボードの大きさが変わる。。。
チップサイズとrowsとcolsからwidth、heightを定義すればguiはいけそうだ
サイズ変わってもAIが機能するってのは少々難しそうですな
40デフォルトの名無しさん:2013/01/28(月) 02:45:15.47
>>37
2つ目は、board[][] がメモリ上で連続した配列である必要があるけど、boardを不連続にする必要は
特にないし、どちらの勝利判定もボードサイズやプレイヤ数(○×に加えて△とか♪とか)の変化に
対応できるね。
41片山博文MZパンク ◆0lBZNi.Q7evd :2013/01/29(火) 22:10:41.57
バカにも分かるようにヒント出したのだが。○×はみんなできたな?
次のお題。ペット育成ゲーム
42デフォルトの名無しさん:2013/01/29(火) 22:13:42.56
重大なヒント出したと思ってる馬鹿が何か言ってるが
43デフォルトの名無しさん:2013/01/29(火) 22:18:51.47
たまごっちみたいな?
44デフォルトの名無しさん:2013/01/29(火) 22:44:28.49
>>42
馬鹿と言われて悔しいならお題を解いてみろ
45デフォルトの名無しさん:2013/01/29(火) 23:08:24.42
>>31がヒント?
アホじゃねーの
46片山博文MZパンク ◆0lBZNi.Q7evd :2013/01/29(火) 23:15:33.30
ヒント:ペット育成ゲームの作り方でググれ
47デフォルトの名無しさん:2013/03/09(土) 14:39:09.28
○×ゲームのプログラムまだか
48デフォルトの名無しさん:2013/03/18(月) 22:24:11.79
パスワードジェネレーターつくったった

from random import sample
import string

LENGTH = 16
arrowed_letters = string.letters + string.digits + '_'

print ''.join(sample(arrowed_letters, LENGTH))
49デフォルトの名無しさん:2013/04/21(日) 19:59:21.43
test
50デフォルトの名無しさん:2013/05/21(火) 00:33:06.78
>>48
( '_' )
51デフォルトの名無しさん:2013/08/11(日) 21:05:42.60
どう書くorgがエラーで放置とか恥ずかしいからどうにかしろ
52デフォルトの名無しさん:2013/08/13(火) 23:58:49.23
おまえらコレを見ろ
ミニブログ『Croudia』がレートリミット無制限のAPIを公開
http://croudia.co.jp/NR20130731.html

TwitterのAPIを超えた!ミニブログ『Croudia』がレートリミット無制限のAPIを公開!
http://togetter.com/li/546360
53デフォルトの名無しさん:2013/11/22(金) 18:59:21.86
お題:nの階乗の末尾の連続した0の個数を求める。
54デフォルトの名無しさん:2013/11/22(金) 21:40:12.86
>>53
dc
?[5/dd0<a+]dsaxp

100!→24個
55デフォルトの名無しさん:2013/11/22(金) 21:54:23.61
>>53 Squeak Smalltalk 。思考停止系で

(n factorial asString reversed findFirst: [:chr | chr ~= $0]) - 1
56デフォルトの名無しさん:2013/11/22(金) 23:26:46.34
出されたお題をコーディングして罵られるスレ
http://toro.2ch.net/test/read.cgi/tech/1354393458/

は、このスレに合流します。
57デフォルトの名無しさん:2013/11/22(金) 23:32:16.58
>>53 common lisp
(defun fact-zero (x)
(let ((retval 0) (dim 1) (d 0))
(loop (if (equal (setf d (floor x (expt 5 dim))) 0)
(return retval))
(incf retval d) (incf dim))))

(fact-zero 100) -> 24
58デフォルトの名無しさん:2013/11/23(土) 00:15:36.87
>>53 Io
f := method(n,
r:=0
for(i, 1, n log(5) floor, r = r + (n / (5 ** i)) floor)
)

Io> f(100)
==> 24
Io> f(12345678)
==> 3086416
59デフォルトの名無しさん:2013/11/23(土) 00:58:01.68
>>53 Clojure
(->> n bigint inc (range 1N) (reduce *) str (re-find #"0*$") count)
60デフォルトの名無しさん:2013/11/23(土) 06:02:42.73
>>53 java/C/C++
int f(int n){
 int z,i,t;
 for(z=0,i=5;(t=n/i)>0;i*=5,z+=t);
return z;
}
61デフォルトの名無しさん:2013/11/23(土) 07:39:27.35
>>53 Lua
function f(n)
r=0
while n>0 do
n=math.floor(n/5)
r=r+n
end
return r
end

> =f(100)
24
62デフォルトの名無しさん:2013/11/23(土) 09:59:29.66
>> 53 Haskell

import Numeric
import Data.Char
main = print $ f 100
f n = (`div` 4) $ (n -) $ sum $ map digitToInt $ showIntAtBase 5 intToDigit n ""

24
63デフォルトの名無しさん:2013/11/23(土) 10:20:13.43
>>53
@Mathematica

tailZerosInFactorial[n_]:=Factorial[n]//
  IntegerDigits//
  Reverse//
  TakeWhile[#,#==0&]&//
  Length;

In := tailZerosInFactorial[100]
Out = 24
64デフォルトの名無しさん:2013/11/23(土) 11:06:24.96
>>53 python3

def f(n):
  i = 0
  #xs = range(1, n+1)
  len_xs = n
  while len_xs > 0:
    #xs = map(lambda x: x / 5, filter(lambda x: x % 5 == 0, xs))
    len_xs //= 5
    i += len_xs
  return i
print(f(100))
65デフォルトの名無しさん:2013/11/23(土) 12:18:16.71
   |番兵|__
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)
66デフォルトの名無しさん:2013/11/23(土) 13:49:24.95
>>53 HSP
n=25
mes fact_zero(n)
stop

#defcfunc fact_zero int x
if x<5 : return 0
return x/5+fact_zero(x/5)
67デフォルトの名無しさん:2013/11/23(土) 14:41:14.63
>>53 J
f=:3 :'+/5=,q:>:i.y'
f 100
24

>>62 の真似
(%&4@- [:+/5#.inv]) 1234567
308638
68デフォルトの名無しさん:2013/11/23(土) 17:55:42.69
お題:文字列をランダムに並べ替える。
ただし、どの文字も元と同じ位置ではないこと。
69デフォルトの名無しさん:2013/11/23(土) 18:57:48.38
>>68
極端な例だけど aaaaa とかどうするの?
70デフォルトの名無しさん:2013/11/23(土) 19:41:12.90
>>69
なるほど。たにかに、並べ替えても見た目は同じになってしまいますね。
結果として見た目が同じでも、ちゃんと並べ替えの操作がおこなわれていれば
okとしましょう。
71デフォルトの名無しさん:2013/11/23(土) 20:06:30.05
>>68 Squeak Smalltalk
| string shuffled |
string := 'abc'.
string size < 2 ifTrue: [^string].
[ shuffled := (1 to: string size) asArray shuffled.
  shuffled noneSatisfy: [:each | (shuffled indexOf: each) = each]
] whileFalse.
^shuffled inject: '' into: [:acc :idx | acc, (string at: idx)] "=> 'cab' "
72デフォルトの名無しさん:2013/11/23(土) 20:18:26.59
>>68
C++だと簡単!
ttp://ideone.com/WKvGp1

C++で階乗は多倍長精度演算がまだ入ってない事もあって扱いづらいし、自作すると遅い!
73デフォルトの名無しさん:2013/11/23(土) 20:19:49.76
>>68
@Mathematica

randomizeString[str_]:=Module[{checkPair,regulatedRandomNumber,char,len},

  checkPair[lst1_,lst2_]:=MapThread[List,{lst1,lst2}]//
    Map[Not[#[[1]]==#[[2]]]&,#]&//
    Apply[And,#]&;

  regulatedRandomNumber[n_]:=Module[{rn},

    rn=RandomChoice[Permutations[Range[n]]];

    If[checkPair[Range[n],rn],
      rn,
      regulatedRandomNumber[n]]
  ];

  char=Characters[str];

  len=char//
    Length;

  regulatedRandomNumber[len]//
    MapThread[List,{#,char}]&//
    Map[#[[1]]->#[[2]]&,#]&//
    ReplacePart[char,#]&//
    StringJoin
];

In : = randomizeString["abc"]
Out = bac
74デフォルトの名無しさん:2013/11/23(土) 20:22:23.50
お題:
00:00〜23:59までのデジタル時計のゾロ目を羅列せよ。表示形式は問わない。
75デフォルトの名無しさん:2013/11/23(土) 20:29:27.00
>>72
げ、shuffle関数ってムーブするんか。ワザワザ選んで使ったというのに。
std::random_shuffleというベタな関数があるのでそっちに置き換えてください。
76デフォルトの名無しさん:2013/11/23(土) 20:43:36.36
何が言いたいのかよくわからんがrandom_shuffleよりshuffleを積極的に使っていった方がいい
77デフォルトの名無しさん:2013/11/23(土) 20:43:48.05
>>74
@Mathematica

pickRepdigit[]:=Module[{repdigitQ},

  repdigitQ[str_]:=Module[{char},

    char=Characters[str];

    char[[1]]==char[[2]]==char[[4]]==char[[5]]
  ];

  Table[DatePlus[{2000,1,1,0,0},{i,"Minute"}],{i,0,24*60-1}]//
    Map[DateString[#,{"Hour",":","Minute"}]&,#]&//
    Select[#,repdigitQ]&
];

In := pickRepdigit[]
Out = {"00:00", "11:11", "22:22"}
78デフォルトの名無しさん:2013/11/23(土) 21:05:07.25
>>74
もしかして俺間違ってる?
ttp://ideone.com/PMvL0r
79片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 21:06:56.85
>>68
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

void shuf(char *first, char *last) {
for (char *p = first + 1; p != last; ++p) {
int m = p - first;
int n = rand() % m;
swap(*p, *(first + n));
}
}
int main(void) { char buf[256];
cout << "input: "; cin.getline(buf, 256);
shuf(buf, buf + strlen(buf));
cout << buf << endl;
return 0; }
80デフォルトの名無しさん:2013/11/23(土) 21:07:35.20
>>76
いや、ランダムオブジェクトをムーブしちゃうんで二周目エラーになるんじゃないかなーと。
81デフォルトの名無しさん:2013/11/23(土) 21:09:22.65
>>78
いや、お察しの通り俺の出題が曖昧でした。
狙いはまさにそれですw
82デフォルトの名無しさん:2013/11/23(土) 21:10:17.83
>>68 java

import java.util.Random;
public class Test{
 void shuffle(char[] s,Random r){
  for(int i=s.length-1;i>0;i--){
   int j=r.nextInt(i);
   char exchange=s[i];
   s[i]=s[j];
   s[j]=exchange;
  }
 }

 public static void main(String args) {
  Test t=new Test();
  char[] abc="abcdefg".toCharArray();
  Random r=new Random();
  t.shuffle(abc,r);
  System.out.println(abc);
 }
}
8382:2013/11/23(土) 21:15:01.31
すんませんバグありましたString args →String[] args
84デフォルトの名無しさん:2013/11/23(土) 21:15:48.14
>>68 Clojure
aaaaaとか渡すと停止しなくなるけど
http://ideone.com/pnp2L6

位置を考慮しないなら
(apply str (shuffle (seq "hoge")))
85デフォルトの名無しさん:2013/11/23(土) 21:17:34.29
>>74 Squeak Smalltalk
('00:00' asTime asSeconds to: '23:59' asTime asSeconds by: 1 minute asSeconds)
 collect: [:secs | (Time fromSeconds: secs) print24 first: 5]
 thenSelect: [:print24first5 | print24first5 asSet size = 2]
"=> #('00:00' '11:11' '22:22') "
86デフォルトの名無しさん:2013/11/23(土) 21:20:29.97
>>81
そりゃ良かった。ラッキラッキー。
87デフォルトの名無しさん:2013/11/23(土) 21:21:55.30
>>74 Clojure
手抜き
(map #(format "%d%d:%d%d" % % % %) (range 3))
88デフォルトの名無しさん:2013/11/23(土) 21:26:50.26
>>80
ムーブされないよ
89デフォルトの名無しさん:2013/11/23(土) 21:28:43.28
>>88
え、そうなの?なんか引数に&&ついてたからてっきり・・・。
このへんの仕様はまだよくわかってないんだよね。勉強不足ぅ〜。
検証ありがとう。
90デフォルトの名無しさん:2013/11/23(土) 21:28:54.98
>>81 Squeak Smalltalk
('00:00' asTime asSeconds to: '23:59' asTime asSeconds by: 1 minute asSeconds)
 collect: [:secs | (Time fromSeconds: secs) print24 first: 5]
 thenSelect: [:print24first5 |
  (print24first5 first = $0
   ifTrue: [print24first5 allButFirst]
   ifFalse: [print24first5]
  ) asSet size = 2]
"=> #('00:00' '01:11' '02:22' '03:33' '04:44' '05:55' '11:11' '22:22') "
9177:2013/11/23(土) 21:31:27.56
>>74,78,81
@Mathematica

pickRepdigit[]:=Module[{repdigitQ},

  repdigitQ[str_]:=Module[{char},

    char=Characters[str];

    Which[
      Length[char]==4,char[[1]]==char[[3]]==char[[4]],
      Length[char]==5,char[[1]]==char[[2]]==char[[4]]==char[[5]],
      True,{}]
  ];

  Table[DatePlus[{2000,1,1,0,0},{i,"Minute"}],{i,0,24*60-1}]//
    Map[DateString[#,{"HourShort",":","Minute"}]&,#]&//
    Select[#,repdigitQ]&
];

In := pickRepdigit[]
Out := {"0:00", "1:11", "2:22", "3:33", "4:44", "5:55", "11:11", "22:22"}
92デフォルトの名無しさん:2013/11/23(土) 21:33:56.29
やっぱ出題者は自分で書いたのをideone.comとかの出力付きでまず出すべきだよ。
93デフォルトの名無しさん:2013/11/23(土) 21:35:04.86
なんか宿題やってる感あるよなー。
94デフォルトの名無しさん:2013/11/23(土) 21:35:48.76
コードはなくとも入力出力例は欲しい
95デフォルトの名無しさん:2013/11/23(土) 21:38:01.76
コードも欲しい。宿題やらされ、むちゃぶり、齟齬が防げる。
96デフォルトの名無しさん:2013/11/23(土) 21:39:46.19
>>93
ドラえもんに頼っているのび太君はフィクションでは科学者になったが、
実際は多分ダメ人間になってしまうと思う。
97デフォルトの名無しさん:2013/11/23(土) 21:44:21.73
原作じゃ科学者になってないしな
98デフォルトの名無しさん:2013/11/23(土) 21:44:22.17
答え(出力)の例を書いてもらうのが良いと思う。
前スレのタイル塗り問題の時みたいに。

解答も大事だけど、どちらかというとコードを書く方が主旨だから、
出題と同時に答えを書いても問題ないと思うんだけど。

言語指定があると宿題感が強いけど、
フリースタイルだからまだ良いかなと思う。
99デフォルトの名無しさん:2013/11/23(土) 21:44:58.23
>>96
アレはドラえもんが壊れたから科学者になれたんだよ。ちゃんと乳離れできたって意味で。
まー、宿題をこんなところでやってるようじゃ社会人になってからPGとしては産廃だろうね。
それを容認するのかどうか。でも個人的にはあんまりいい感じはしないね。
100デフォルトの名無しさん:2013/11/23(土) 21:49:43.03
のび太君は田代みたいにお風呂のノゾキ魔になって最終的に薬物中毒で投獄されるだろう。
101デフォルトの名無しさん:2013/11/23(土) 21:52:37.66
>>68 HSP
s="hoge"
l=strlen(s)
repeat l-1
r=rnd(l-1-cnt)+cnt+1
a=peek(s, cnt)
b=peek(s, r)
poke s, cnt, b
poke s, r, a
loop
mes s
102片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 22:28:17.18
お題:ローマ数字電卓を作れ。入力する数字は半角のみとする。
? I+IV
V
? II+II
IV
10374:2013/11/23(土) 22:29:32.28
>>92
$ ruby -v -e "('00'..'23').each {|hh| ('00'..'59').each {|mm| puts hh + ':' + mm if /0(\d)\1\1|(\d)\2\2\2/ =~ hh + mm}}"
ruby 1.8.6
00:00
01:11
02:22
03:33
04:44
05:55
11:11
22:22
104片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 22:45:21.75
お題:アナログ時計の長針と短針が重なる時刻を求めよ。
105片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 23:01:13.05
お題:厚さ0.7mmの紙を百回折ると厚さは最大でどのくらいになるか?
106片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 23:09:27.34
お題:鏡に写ったアナログ時計の時刻から元の時刻を求めるプログラム。
? 11:00
01:00
107片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 23:15:11.26
お題:「Merry Christmas」と表示するだけのプログラム。
108デフォルトの名無しさん:2013/11/23(土) 23:36:40.69
>>104
あってるかな?
ttp://ideone.com/yXdjOP
ゲーム作ったことあったら、作るかもしれないプログラムだな。
109片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 23:50:34.02
お題:以下のそれぞれの当たり判定を行う関数。
(1)円と円。中心と半径が与えられる。
(2)線分と線分。端点座標が与えられる。
(3)点と三角形。点は位置座標が、三角形は頂点座標が与えられる。
110デフォルトの名無しさん:2013/11/23(土) 23:55:08.50
片山博文MZコスモとやらがうざいんだが、みんな非表示にしてるの?
111片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/23(土) 23:57:59.22
追記:(4)円と線分 (5)円と三角形 (6)点と多角形
112デフォルトの名無しさん:2013/11/23(土) 23:58:13.82
>>68
(defun str-random (s)
(let ((retval (copy-seq s)) (num (length s)) buf pos)
(dotimes (i (1- num))
(setf pos (+ i (random (- num i)))
buf (elt retval i)
(elt retval i) (elt retval pos)
(elt retval pos) buf))
retval))

(str-random "12345") -> "31254"
113デフォルトの名無しさん:2013/11/24(日) 00:00:53.39
書き忘れたけど、>>112の言語はcommon lispね
114デフォルトの名無しさん:2013/11/24(日) 00:02:51.74
このスレはクールダウンが必要だ。
>>99の言い分が強すぎた。

>>99をやっつけろー。
115片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/24(日) 00:13:12.22
>>108
== trueと? true : falseはいらない
116デフォルトの名無しさん:2013/11/24(日) 00:32:38.56
>>115
採点ありがとう。後者はたしかにいらないね。
前者はマイルールでワザとやってるんだけど一般的じゃないのかなぁ。
117デフォルトの名無しさん:2013/11/24(日) 00:59:07.39
true比較なんて完全に可読性の好みでしかないからリーダブルコーディングスレあたりでやればいいんでね
118デフォルトの名無しさん:2013/11/24(日) 01:03:36.06
>>102 手元のruby v1.8.6で確認。肝心のローマ数字→整数処理はどっかのサイトを参考にした。ほぼ丸パク。
def rcs2i(rcs)
c2i = {'M' => 1000, 'D' => 500, 'C' => 100, 'L' => 50, 'X' => 10, 'V' => 5, 'I' => 1}
maxn = 0
rcs.upcase.reverse.scan(/./).inject(0) {|sum, c|
n = c2i[c]
if n >= maxn
maxn = n
sum += n
else
sum -= n
end
}
end
def roman2arabic(roman)
return roman.gsub(/([IVXLCDM]+)/) { rcs2i($1).to_s }
end
def f102(roman)
arabic = roman2arabic(roman)
puts roman
puts '=' + arabic
puts '=' + eval(arabic).to_s
end
f102("XXIV+XI")
119デフォルトの名無しさん:2013/11/24(日) 01:19:27.02
>>117
おk。俺はマイルールつづけるよ!
120118:2013/11/24(日) 01:26:26.77
あら?よく読んだら結果もローマ数字表記か(ヽ´ω`)
121デフォルトの名無しさん:2013/11/24(日) 01:28:03.67
>>102 Squeak Smalltalk
| exp ops tokens |
exp := 'I+IV'.
ops := '+-*/()'.
tokens := (exp findTokens: ops keep: ops) collect: [:tok |
  (tok noneSatisfy: #isLetter) ifTrue: [tok] ifFalse: [tok romanNumber asString]].
tokens replaceAll: '/' with: '//'.
(Compiler evaluate: tokens asStringWithCr) printStringRoman "=> 'V' "
122sage:2013/11/24(日) 03:37:13.70
>>112
「どの文字も元と同じ位置ではないこと」という条件を満たせていないみたい。

テストを書いてみました。
ideone.com/zJYz7K
123デフォルトの名無しさん:2013/11/24(日) 04:00:32.38
>>119
bool isA();
bool isB();
だったとして、
bool isC() {return isA() == true && isB() == true;}
とか書いちゃうの?w
んで、
bool isD() {return isC() == true;}
とか際限なく書くとかww
元を糺せば、このiD()のisC()呼び出しをインラインに展開したとして
bool isD() {return (isA() == true && isB() == true) == true;}
のような意味のないことをやっているのが分からんのかな。

そんなに自信がないならいっそ、isA() == true == true == true == true == true 位書いておけばいいんじゃね?w
124デフォルトの名無しさん:2013/11/24(日) 04:13:09.10
可読性とか好みの話だったのに意味とか自信とか言い出す辺り日本語の読解力に難があると見える
125デフォルトの名無しさん:2013/11/24(日) 04:31:50.70
>>122
ご指摘ありがとうございます。入れ替える数値がずれてました。
(defun str-random (s)
(let ((retval (copy-seq s)) (num (length s)) buf pos)
(dotimes (i (1- num))
(setf pos (+ 1 i (random (- num i 1)))
buf (elt retval i)
(elt retval i) (elt retval pos)
(elt retval pos) buf))
retval))
126デフォルトの名無しさん:2013/11/24(日) 09:27:29.30
>>106 C
#include <stdio.h>
#include <stdlib.h>

int main()
{
int h, m;

scanf("%d:%d", &h, &m);//11:00
h = abs(h - 12) % 12;
m = abs(m - 60) % 12;
printf("%s%d:%s%d", (h / 10 == 0) ? "0" : "", h, (m / 10 == 0) ? "0" : "", m);// 01:00
return 0;
}
127片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/24(日) 09:42:01.08
>>126
不正解。2:30→9:30とならなければいけない。
%s%dの代わりに%02d使えよ
128デフォルトの名無しさん:2013/11/24(日) 10:10:23.63
>>127
2:30→10:30 じゃなくて?
129128:2013/11/24(日) 10:10:57.56
ああ、理解しました。すんません
130片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/24(日) 10:20:51.49
よくわかる解説:
2:10は2:00から10分進んでいる。
時計の針が進むと鏡の世界では針が戻ったように見える。
2:10は鏡の世界では10:00から10分戻ったように見える。
131デフォルトの名無しさん:2013/11/24(日) 12:27:09.20
>>106 J
f =: 12 60 & ([ #: 720 - #.)
f 11 0
1 0
f 9 30
2 30
f 9 23
2 37
132デフォルトの名無しさん:2013/11/24(日) 14:38:14.86
>>104 J
12 60 60 #:(i.11)*12*60*60%11
0 0 0
1 5 27.2727
2 10 54.5455
3 16 21.8182
4 21 49.0909
5 27 16.3636
6 32 43.6364
7 38 10.9091
8 43 38.1818
9 49 5.45455
10 54 32.7273
133片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/24(日) 15:18:15.09
>>108は不正解。
>>104のよくわかる解説:
0:00から1時間経つと1:00になる。
この間、長針は一回転し、短針は1/12だけ進む。
よって長針と短針の相対角速度は360*11÷12度/時となる。
0:00から相対角変位が360になるたびに長針と短針が重なる。
134デフォルトの名無しさん:2013/11/24(日) 15:39:30.39
>>106 common lisp
(defun rev-clock(h m)
(let ((ah (floor (/ (- 2 (+ (* h 1/6) (/ m 360))) 1/6)))
(am (- 60 m)))
(if (eql am 60) (setf am 0))
(format t "~2,'0D:~2,'0D" ah am)))

(rev-clock 2 30) -> 09:30
135デフォルトの名無しさん:2013/11/24(日) 15:59:20.32
>> 104 common lisp
分以下の端数は四捨五入するとして
(defun clock-cross ()
(dotimes (i 11)
(format t "~2,'0D:~2,'0D~%"
i (round (float (* (/ i 11) 60))))))

(clock-cross) ->

00:00
01:05
02:11
03:16
04:22
05:27
06:33
07:38
08:44
09:49
10:55
136デフォルトの名無しさん:2013/11/24(日) 16:25:28.21
>>133
で、そうなる時刻で秒単位で割り切れるのは0:00以外にはない。
137デフォルトの名無しさん:2013/11/24(日) 18:19:30.14
お題:自分の身長と体重から地球の重さを概算するプログラム
138デフォルトの名無しさん:2013/11/24(日) 18:45:25.48
それコーディングの問題なの?
139デフォルトの名無しさん:2013/11/25(月) 20:01:23.60
お題:A0サイズの用紙の面積は1uである。辺の比は1:√2である。
B0サイズの用紙の長辺はA0の対角線の長さであり、短辺はA1の対角線の長さである。
A、Bに続く数字が大きくなるたびに用紙の面積は半分になる。
A0からA10、B0からB10の用紙サイズをmm単位で求める。
140デフォルトの名無しさん:2013/11/25(月) 20:34:38.19
IQ問題集からしょうもない問題もってきてるだけだろw
141デフォルトの名無しさん:2013/11/25(月) 20:57:46.39
>>137
万有引力定数とかコリオリ力とか‥
142デフォルトの名無しさん:2013/11/25(月) 21:45:17.59
お題:√2 を小数点以下@10桁、A1000桁まで展開せよ
出展:http://pc11.2ch.net/test/read.cgi/tech/1208268461/111
143デフォルトの名無しさん:2013/11/25(月) 22:37:22.51
>>142
| x delta | Squeak Smalltalk 。Aだけ
x := 1.
[(delta := -2 * x * x + 1 * x / 2) abs > (1/1e1000)] whileTrue: [x := x + delta].
^x * 2s1000
144デフォルトの名無しさん:2013/11/25(月) 22:47:29.31
>>139の関連
C0〜C10
 …
Z0〜Z10
も求めっろ
145デフォルトの名無しさん:2013/11/25(月) 23:24:32.45
>>143
http://ideone.com/AKrlKn
ideone で確認するにはどうすればいいの?
146デフォルトの名無しさん:2013/11/25(月) 23:27:50.46
スモールトーク知らないけど、STDOUTにprint文当たりで出力すればいいんじゃないかな。
147デフォルトの名無しさん:2013/11/25(月) 23:48:02.76
>>145
ideone には対応してないんで、出力はっとく。

1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
3501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147
0109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989
6872533965463318088296406206152583523950547457502877599617298355752203375318570113543746034084988471
6038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723
5288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162
0758474922657226002085584466521458398893944370926591800311388246468157082630100594858704003186480342
1948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698
6836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112
0249441341728531478105803603371077309182869314710171111683916581726889419758716582152128229518488472s1000
148デフォルトの名無しさん:2013/11/26(火) 00:27:12.66
勝手に弄ってすまん。
門外漢なのでどういう理屈かわからんけど出力自体はできた。
ただ、あってるのかよくわからない。
ttp://ideone.com/4VpJCm
149デフォルトの名無しさん:2013/11/26(火) 00:42:00.19
>>142 common lisp
(defun multi-sqrt (x num)
(let* ((base x) (int (floor (sqrt x)))(sq int))
(loop (if (and (<= (* sq sq) base)
(<= base (* (1+ sq) (1+ sq))))
(progn
(when (< (expt 10 num) sq)(return))
(setf sq (* sq 10) base (* base 100)))
(incf sq)))
(format t "~D.~A" int
(subseq (write-to-string sq)
(length (write-to-string int))))))

1. (multi-sqrt 2 10) -> 1.4142135620
2. (multi-sqrt 2 1000) -> 1.414213562373095048801688724209698078...8229518488472
150デフォルトの名無しさん:2013/11/26(火) 00:44:52.15
>>149
1.の結果張り間違えた。
1. (multi-sqrt 2 10) -> 1.4142135623
151デフォルトの名無しさん:2013/11/26(火) 00:47:34.73
>>148
こちらでもいろいろと試してみたんですが、この ideone で使われている
GNU Smalltalk って Smalltalk 処理系は、どうも駄目な子らしくて、
今回の Squeak Smalltalk のコードはまともに動かせられないみたいです。
152デフォルトの名無しさん:2013/11/26(火) 00:50:36.73
>>151
なるほど。それは余計なことしてしまったね。
しかし、多倍長演算羨ましいなー。
C++はいま策定中だからね。
153デフォルトの名無しさん:2013/11/26(火) 12:49:44.57
>>142 bc
scale=10; sqrt(2)
1.4142135623

scale=1000; sqrt(2)
1.414213562373095048801688724209698078569671875376948073176679737990\
...
71111683916581726889419758716582152128229518488472
154片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/26(火) 12:58:08.56
もう授業では開平法を習わないのかな?
155デフォルトの名無しさん:2013/11/26(火) 13:13:53.64
>>139 Io
f := method(
g := method(n, (n + 0.2) floor)
for(i, 0, 10,
writeln("[A", i, " ", g(c), " ", g(2 sqrt * c),
"] [B", i, " ", g((3 / 2) sqrt * c), " ", g(3 sqrt * c), "]")
)
)

Io> f
[A0 841 1189] [B0 1030 1456]
[A1 594 841] [B1 728 1030]
[A2 420 594] [B2 515 728]
[A3 297 420] [B3 364 515]
[A4 210 297] [B4 257 364]
[A5 148 210] [B5 182 257]
[A6 105 148] [B6 128 182]
[A7 74 105] [B7 91 128]
[A8 52 74] [B8 64 91]
[A9 37 52] [B9 45 64]
[A10 26 37] [B10 32 45]
156デフォルトの名無しさん:2013/11/26(火) 13:20:00.03
間違えました。訂正します。 >>155
>>139 Io
f := method(
g := method(n, (n + 0.2) floor)
for(i, 0, 10,
c := 2 ** (- 1 / 4 - i / 2) * 1000
writeln("[A", i, " ", g(c), " ", g(2 sqrt * c),
"] [B", i, " ", g((3 / 2) sqrt * c), " ", g(3 sqrt * c), "]")
)
)
157デフォルトの名無しさん:2013/11/26(火) 13:41:05.37
>>139
ttp://ideone.com/5EMGUD
--
[A0:841 1189], [B0:1030 1456]
[A1:594 841], [B1:728 1030]
[A2:420 594], [B2:515 728]
[A3:297 420], [B3:364 515]
[A4:210 297], [B4:257 364]
[A5:148 210], [B5:182 257]
[A6:105 148], [B6:128 182]
[A7:74 105], [B7:91 128]
[A8:52 74], [B8:64 91]
[A9:37 52], [B9:45 64]
[A10:26 37], [B10:32 45]
158デフォルトの名無しさん:2013/11/26(火) 16:00:03.69
>>139 Squeak Smalltalk
| size next seriesA seriesB |
size := 1000 / 2 sqrt sqrt.
next := [:n | size := size * 2 sqrt / 2].
seriesA := {size := (1@2 sqrt) * size}, ((1 to: 10) collect: next).
seriesB := {size := seriesA second r @ seriesA first r}, ((1 to: 10) collect: next).
^(seriesA, seriesB + 0.2) floor

=> {
841@1189 . 594@841 . 420@594 . 297@420 . 210@297 . 148@210 . 105@148 . 74@105 . 52@74 . 37@52 . 26@37 .
1030@1456 . 728@1030 . 515@728 . 364@515 . 257@364 . 182@257 . 128@182 . 91@128 . 64@91 . 45@64 . 32@45}
159デフォルトの名無しさん:2013/11/26(火) 17:15:52.31
お題:値が奇数のデータだけ昇順にソートする。

37,61,86,9,81,50 -> 9,37,86,61,81,50
160デフォルトの名無しさん:2013/11/26(火) 19:06:46.33
>>159 Haskell
{-# LANGUAGE TupleSections #-}
import Control.Monad
import Data.List
f xs = fst $ foldr g ([], reverse $ sort $ filter odd xs) $ map (mfilter even . Just) xs
g x (r, yys@(y:ys)) = maybe (y : r, ys) ((, yys) . (: r)) x
g _ (r, _) = (r, [])
161デフォルトの名無しさん:2013/11/26(火) 20:01:33.01
>>159
@Mathematica

sortOdd[lst_]:=Module[{even,odd,sortedodd},

  {even,odd}=lst//
    MapIndexed[{#1,#2[[1]]}&,#]&//
    {Select[#,EvenQ[#[[1]]]&],Select[#,OddQ[#[[1]]]&]}&;

  sortedodd=odd//
    {Map[#[[1]]&,#],Map[#[[2]]&,#]}&//
    Map[Sort,#]&//
    MapThread[List,#]&;
  
  {even,sortedodd}//
    Flatten[#,1]&//
    Sort[#,#1[[2]]<#2[[2]]&]&//
    Map[#[[1]]&,#]&
];

In := sortOdd[{37,61,86,9,81,50}]
Out = {9,37,86,61,81,50}
162デフォルトの名無しさん:2013/11/26(火) 20:05:54.65
>>159 Squeak Smalltalk
| data evens odds |
data := #(37 61 86 9 81 50).
evens := (data select: #even) readStream.
odds := (data select: #odd) sort readStream.
^data collect: [:each | each odd ifTrue: [odds next] ifFalse: [evens next]]

=> #(9 37 86 61 81 50)
163デフォルトの名無しさん:2013/11/26(火) 20:13:52.58
>>159 ruby 1.8.6
a = [37,61,86,9,81,50]
odds = a.dup.reject!{|n| n % 2 == 1}
p a.sort.map {|n| n % 2 == 1 ? n : odds.shift}
164163:2013/11/26(火) 20:17:40.94
アッw 変数名w
165デフォルトの名無しさん:2013/11/26(火) 20:28:11.64
>>163
いろいろダメだろ…^^;
166デフォルトの名無しさん:2013/11/26(火) 20:29:00.67
たとえば [5,4,4,3,2,1] でできる?
167デフォルトの名無しさん:2013/11/26(火) 20:54:02.14
>>165
ハハッw ほんとすまんw
168160:2013/11/26(火) 21:22:51.19
>>159 Haskell
訂正
{-# LANGUAGE TupleSections #-}
import Control.Monad
import Data.List
main = print $ f [4,8,18,10,2,6]
f xs = fst $ foldr g ([], reverse $ sort $ filter odd xs) $ map (mfilter even . Just) xs
 where
  g x (r, yys@(y:ys)) = maybe (y : r, ys) ((, yys) . (: r)) x
  g (Just x) (r, []) = (x : r, [])
169デフォルトの名無しさん:2013/11/26(火) 21:24:49.68
>>159
; Common Lisp
(loop with r
   with l = '(37 61 86 9 81 50)
   with odds = (sort (remove-if #'evenp l) #'<)
   for i in l
   do (push (if (oddp i) (pop odds) i) r)
   finally (return (nreverse r)))
170デフォルトの名無しさん:2013/11/26(火) 21:33:27.46
>>166 ruby 1.8.6 デバッグついでにちょっと整理しといた
a, eos = [5,4,4,3,2,1], [[], []]
a.each {|n| eos[n % 2] << n}
eos[1].sort!
p a
p a.map {|n| eos[n % 2].shift}
171デフォルトの名無しさん:2013/11/26(火) 22:11:35.09
>>159 Squeak Smalltalk 別解。>>170 をヒントに。
| buffer |
buffer := {SortedCollection new. OrderedCollection new}.
^#(5 4 4 4 3 2 1)
  do: [:x | (buffer atWrap: x) add: x];
  collect: [:x | (buffer atWrap: x) removeFirst]

=> #(1 4 4 4 3 2 5)
172デフォルトの名無しさん:2013/11/26(火) 22:18:41.65
>>159 J
( /:~@:{`[`]}~ [:I.2|]) 37 61 86 9 81 50
9 37 86 61 81 50
173片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/26(火) 23:01:30.11
お題:あるCUIプログラムの標準出力を少しずつ読み込みながら、小文字をすべて大文字に変換して出力する。
174デフォルトの名無しさん:2013/11/26(火) 23:39:34.40
>>159
あってるかな?C++
ttp://ideone.com/qIRbxq
175デフォルトの名無しさん:2013/11/27(水) 00:07:40.18
>>173 Io
File standardInput foreach(asCharacter do(if(isLowercase,asUppercase, ..)print))
176デフォルトの名無しさん:2013/11/27(水) 00:19:02.85
>>173
; Common Lisp
(loop do (write-char (char-upcase (read-char))))
177デフォルトの名無しさん:2013/11/27(水) 00:39:45.77
>>173
C言語ってこれでいいんだっけ?
#include <stdio.h>
#include <ctype.h>

int main(){
int ch = EOF;
while ((ch = getchar()) != EOF){
ch = toupper(ch);
putc(ch, stdout);
}
return 0;
}
178デフォルトの名無しさん:2013/11/27(水) 00:53:12.01
>>159 c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int a[] = {37,61,86,9,81,50}, *oes = malloc(sizeof a);
int i, *o, *e, len = sizeof a / sizeof *a;
for (i = 0; i < len; i++) printf("%2d ", a[i]); puts("");
for (i = 0, o = oes, e = oes + len - 1; i < len; i++) {
a[i] % 2 ? (*o++ = a[i]) : (*e-- = a[i]);
}
qsort(oes, o - oes, sizeof (int), cmp);
for (i = 0, o = oes, e = oes + len - 1; i < len; i++) {
printf("%2d ", a[i] % 2 ? *o++ : *e--);
}
return 0;
}
179デフォルトの名無しさん:2013/11/27(水) 00:55:15.63
>>173 Io
File standardInput foreach(asCharacter asUppercase print)

小文字かどうかのチェックはいらなかった
180デフォルトの名無しさん:2013/11/27(水) 02:19:03.31
>>159 Clojure
ideone.com/g6IkwE
再帰に手を出すと敗北感が
181デフォルトの名無しさん:2013/11/27(水) 02:20:32.88
>>173 Squeak Smalltalk
| process |
process := (Smalltalk at: #OSProcess) thisOSProcess.
[process stdOut nextPut: process stdIn next asUppercase] repeat
182デフォルトの名無しさん:2013/11/27(水) 04:55:26.05
僕はジャーヴァのプログラマです
いいですか

int main()
{
while(1)
{
static const char wwwwwww[] = "wwwwwwwwww";
char* java = new char[9999999];
}

}
183デフォルトの名無しさん:2013/11/27(水) 06:44:36.20
   |._番兵|._
  ( ・ω・) んもー
  ○={=}〇,
   |:::::::::\, ', ´ガリガリガリガリ
、、、、し 、、、(((.@)wwwww[] = "wwwwwwwwww";
184デフォルトの名無しさん:2013/11/27(水) 06:56:36.93
>>173
perl -pe 'tr/a-z/A-Z/'
185デフォルトの名無しさん:2013/11/27(水) 07:51:07.71
>>159 R
a <- c(37,61,86,9,81,50)
b <- a %% 2 == 1
a[b] <- sort(a[b])
cat(a)

9 37 86 61 81 50
186デフォルトの名無しさん:2013/11/27(水) 08:29:00.60
>>176はEOFを受け取ったときエラー。
(ただし sbcl --script FILE だとなぜか正常終了)。

あと、>>176>>177は「一文字ずつ読み込んで一文字ずつ出力」を意図してい
るのだろうけれど、そうだとすると不十分。改行が来るまで何も表示されない。
(他の言語は知らないので未確認。CLはSBCLで確認。CLISP、Clozure CLではす
ぐに出力された)。

確認用の入力生成スクリプト(test173.bash):
#!/bin/bash
input=(H e l l o , ' ' w o r l d !);
for c in "${input[@]}"; do printf '%s' "$c"; sleep 0.3; done;
echo

使用例:
$ bash test173.bash | sbcl --script upcase-stdin.lisp
187デフォルトの名無しさん:2013/11/27(水) 11:39:52.62
>> 173
import System.Exit
import System.IO
import Control.Monad
import Data.Char
main :: IO ()
main = forever $ hIsEOF stdin >>= flip when exitSuccess >> ((>>) (hFlush stdout) . putChar =<< fmap toUpper getChar)

bash test173.bash | ./upperstdin
HELLO, WORLD!
188デフォルトの名無しさん:2013/11/27(水) 12:09:52.45
>>173 Haskell 訂正
import System.Exit
import System.IO
import Control.Monad
import Data.Char
main :: IO ()
main = forever $ hIsEOF stdin >>= flip when exitSuccess >> ((>> hFlush stdout) . putChar =<< fmap toUpper getChar)

bash test173.bash | ./upperstdin
HELLO, WORLD!
189デフォルトの名無しさん:2013/11/27(水) 15:14:38.76
>>173

>>177の訂正
これでどうやろ?イデオンでEOFの入れ方わからんかった。
システムが勝手に突っ込んでるような気がするけど。
ttp://ideone.com/0ByfHI
190デフォルトの名無しさん:2013/11/27(水) 16:18:36.80
>>173
Perlerが飛びつくようなお題だな、とおもったらすぐ>>184でワロタw
191デフォルトの名無しさん:2013/11/27(水) 16:31:15.70
>>173
GNU sed version 4.1.5
echo katayama | sed 's/\(.*\)/\U\1/'

GNU Awk 3.1.6
echo katayama | awk '{ print toupper($0) }'

tr (GNU coreutils) 6.10
echo katayama | tr a-z A-Z
192デフォルトの名無しさん:2013/11/27(水) 20:21:58.34
>>189
入力から改行を取除いてしまうバグが入ってるよ。

あと、もし>>186で指摘した件(一文字ずつ逐次表示されない)の「訂正」という
のならばそれは解決していないけれど、単に一文字ずつの入出力をやめて行毎
の入出力に仕様変更したってこと?

「標準入力から一文字ずつ読み込んで、大文字化して、それを直ぐに表示」と
いう仕様でよければ、>>177の putc(ch, stdout); の後に fflush(stdout); を
書き足すだけで良いと思う。
193デフォルトの名無しさん:2013/11/27(水) 20:26:43.16
>>189
それから、なぜかEOFを削除しようとしてるみたいだけど、>>186の「EOFを受け
取ったときエラー」ってのは>>176(Common Cisp)のことで、>>177(C)とは関係
ないよ。そういう処理は不要。

そもそも>>186の言い方がまずかったか。あれで誤解させたかもしれない。
正しくは「(>>176は)ストリームが終端に達したときEOFエラーを生ずる」です。
>>186の言い方だと「EOF *文字* を受け取ったらエラー」だと思うわな、普通。
194デフォルトの名無しさん:2013/11/27(水) 20:27:58.71
>>193
参考:
d.hatena.ne.jp/katona/20070802/p4
> EOFは文脈によって3つの意味がある
> 1)EOFマクロ(#define EOF)
> 2)ファイルの終端(End Of File)
> 3)MS-DOSファイルのEOFコード

>>186で言いたかったのは 2) の「EOF」。
195デフォルトの名無しさん:2013/11/27(水) 20:46:13.78
>>192-194
ご指摘ありがとう。
元々の問題が標準入力から少量のバッファに読みながら出力という問題なので、
別にバッファの数が1でも1024でも少量だろうという話です。
改行を削除してるのは俺のミスです。いや、Stdinが改行見ないとバッファリングやめないのでもしかして必要ないかなー??
と思った次第です。完全に目算違いでした。
テキストファイル突っ込んだ時のこと失念してました。コンソールで開発してたもんで邪魔に見えました。
同様にgetcharの仕様って\n取らないとバッファリングとブロッキングやめないと思うのでgetcharの出番は無いと思います。
昔からブロッキングのないgetcharがあったらゲーム開発もはかどったんだと思うんですがねぇ。fgetsはブロッキングしないはずです。
ちなみにウインドウズですがハローワールドのプログラムをeof付きでパイプしてみたんですよ。
そしたら、コンソールに-1がゴミとして現れましてねそれを削除しています。
今思ったらputchでEOF出力してもEOF変換サれてない気がします。

言い訳が長くなりました。すみません。
ちょっとこれから多少実験してみます。
196デフォルトの名無しさん:2013/11/27(水) 21:18:04.17
http://ideone.com/cioPLo

懺悔タイムです。
全力でごめんなさい。色々認識不足でした。
そもそも、パイプの場合stdinに文字列が詰まってるのでgetcharはブロッキングしませんね。完全に勘違いしてました。
というわけで、>>192-194はご指摘ありがとう。そして、ごめんなさい。
それと、EOFの処理はいらなかったですね。

で、なんだかんだで2種類出来上がってしまいました。
ちょうどいいのでもっと罵ってくだしあ!!!!!!Orz
197デフォルトの名無しさん:2013/11/27(水) 21:25:51.62
あれ?もしかして、ブロッキングするのって、関数の仕様じゃなくてstdinの仕様?
俺、余計なことしてコケるタイプだな。
198デフォルトの名無しさん:2013/11/27(水) 21:27:12.34
お題:チャンパーノウン定数を表示せよ。
表示された文字列中に"991"を一つだけ含むこと。
199デフォルトの名無しさん:2013/11/27(水) 21:38:01.84
>>198はC言語では大変なので今日はこのへんで。
皆様おやすみなさい!
200 ◆QZaw55cn4c :2013/11/27(水) 22:32:06.14
おはようございます
>>198
http://codepad.org/pcvd5RNU
>>199
表示するだけなら特に大変とは‥
201デフォルトの名無しさん:2013/11/27(水) 22:37:32.87
>>198
; Common Lisp
(loop for i upfrom 1
   for s = (princ-to-string i)
   for champernowne = (concatenate 'string "0." s) then (concatenate 'string champernowne s)
   until (search "991" champernowne
           :test #'equal
           :start2 (- (length champernowne) (length s) 2))
   finally (print champernowne))
202デフォルトの名無しさん:2013/11/27(水) 23:43:25.91
>>198 Squeak Smalltalk
| digits |
digits := String new.
1 to: Float infinity do: [:n |
 digits := digits, n asString.
 (digits includesSubString: '991') ifTrue: [^'0.', digits]]
203デフォルトの名無しさん:2013/11/27(水) 23:45:44.78
>>200
なん・・・だと・・・。俺のパターン認識甘すぎ。
204デフォルトの名無しさん:2013/11/28(木) 00:34:26.67
>>198 Clojure
(->> (iterate inc 1) (map #(->> % range rest (apply str))) (filter #(re-find #"991" %)) first (str "0."))
205デフォルトの名無しさん:2013/11/28(木) 01:15:39.22
Lispのコンパイラの導入方法がいまいちわからんのだが誰か教えてエロい人
206デフォルトの名無しさん:2013/11/28(木) 01:17:09.21
CommonLisp?
207デフォルトの名無しさん:2013/11/28(木) 01:27:53.82
>>206
そうそう。
208デフォルトの名無しさん:2013/11/28(木) 01:31:29.78
あ、スレチかな?
209デフォルトの名無しさん:2013/11/28(木) 01:33:25.92
>>208
【入門】Common Lisp その10【質問よろず】
toro.2ch.net/test/read.cgi/tech/1361341876/
210デフォルトの名無しさん:2013/11/28(木) 01:45:14.79
>>198 sh
s= i=1; while echo $s | grep -qv 991; do s=$s$i; i=`expr $i + 1`; done; echo 0.$s
211デフォルトの名無しさん:2013/11/28(木) 01:48:11.36
>>209
申し訳ない
212デフォルトの名無しさん:2013/11/28(木) 07:03:26.22
>>198 Prolog

'お題:チャンパーノウン定数を表示せよ。表示された文字列中に"991"を一つだけ含むこと。' :-
    'チャンパーノウン定数を表示せよ。表示された文字列中に"991"を一つだけ含むこと。'(1,'0.').

'チャンパーノウン定数を表示せよ。表示された文字列中に"991"を一つだけ含むこと。'(N,A) :-
    count(sub_atom(A,_,3,_,'991'),2),!,fail.
'チャンパーノウン定数を表示せよ。表示された文字列中に"991"を一つだけ含むこと。'(N,A) :-
    atom_number(B,N),
    atom_concat(A,B,C),
    '表示された文字列中に"991"を一つだけ含むこと。'(N,C).

'表示された文字列中に"991"を一つだけ含むこと。'(N,_チャンパーノウン定数) :-
    '文字列中に"991"を一つだけ含むこと。'(_チャンパーノウン定数),
    writef('%t\n',[_チャンパーノウン定数]).
'表示された文字列中に"991"を一つだけ含むこと。'(N,C) :-
    N_2 is N + 1,
    チャンパーノウン定数を表示せよ。表示された文字列中に"991"を一つだけ含むこと。'(N_2,C,_チャンパーノウン定数).

'文字列中に"991"を一つだけ含むこと。'(_チャンパーノウン定数) :-
    count(sub_atom(_チャンパーノウン定数,_,3,_,'991'),1).

count(P,N) :- findall(1,P,L),length(L,Count).
213212:2013/11/28(木) 07:07:05.55
>>198
4行目の末尾に改行が入ってしまった。これは改行なしで '(1,'0.1'). と
続かなくてはいけない。下の方にもう一箇所似たような誤りがある。
214デフォルトの名無しさん:2013/11/28(木) 10:25:23.51
>>198 Haskell
main = putStrLn $ "0." ++ (show $ f 1000)
f :: Integer -> Integer
f 0 = 0
f n = 10 ^ (floor $ logBase 10 (fromIntegral n) + 1) * (f (n - 1)) + n
215デフォルトの名無しさん:2013/11/28(木) 10:26:34.24
>>198 Haskell ミスった
main = putStrLn $ "0." ++ (show $ f 100)
f :: Integer -> Integer
f 0 = 0
f n = 10 ^ (floor $ logBase 10 (fromIntegral n) + 1) * (f (n - 1)) + n
216デフォルトの名無しさん:2013/11/28(木) 11:57:44.41
>>198 HSP
result="0."
repeat ,1
result+=str(cnt)
q=instr(result, p, "991")
if q>=0 {
count++
if count>=2 {
poke result, p+q+2, 0
break
}
p+=q+1
}
loop
mes result
217198:2013/11/28(木) 19:59:52.93
$ ruby -v -e "puts '0.'+(1..100).to_a.join"
ruby 1.8.6
0.123456789101112131415161718192021222324252627282930313233343536373839404142434
44546474849505152535455565758596061626364656667686970717273747576777879808182838
4858687888990919293949596979899100

解説:
任意精度のライブラリの使用と、"991"の検出は不要。
この二つは引っ掛けのつもりなので笑って許していただきたい。
どの言語でも簡単に書けて、出力結果も長くならないようにした。
その点でまんまと引っかかってくれた>>199さんはMVP。
あっさり両方突破した>>200がネタバレのようにもなってしまったので、
それ以降のひとは多分あえて"991"の検索を入れて趣向を凝らしてみてくれたと判断。
みんなが文字列を前提にしてる中での>>214さんの活躍も光る。
Haskellまったく読めないが、見事に演算でアプローチしている。多分。
218デフォルトの名無しさん:2013/11/28(木) 20:31:47.19
>>217
???
出力には "991" が1回含まれているのが条件なだけだから
許容範囲は広いんじゃないの?
219デフォルトの名無しさん:2013/11/28(木) 20:47:57.48
チャンパーウノンの定理で最初に991が発見される条件って厳密に決まってると言っていいと思うの。
220デフォルトの名無しさん:2013/11/28(木) 20:49:46.87
例外があるなら途中の桁から計算始めるとかだね。
221デフォルトの名無しさん:2013/11/28(木) 20:52:40.37
>>218
これでもいいもんね。
(loop for i upfrom 1
for s = (princ-to-string i)
for champernowne = (concatenate 'string "0." s)
then (concatenate 'string champernowne s)
and previous-champernowne = champernowne
for first-911 = (search "991" champernowne :test #'equal)
for second-911 = (search "991" champernowne :from-end t :test #'equal)
until (and first-911
(/= first-911 second-911))
finally (print previous-champernowne))
222221:2013/11/28(木) 20:55:03.52
>>221
変数名の911は991のまちがい。
223デフォルトの名無しさん:2013/11/28(木) 20:58:56.55
「一つだけ含むこと」となるとあの位置でしかないからね。
あとは>>220のように解釈するくらいしか。
224デフォルトの名無しさん:2013/11/28(木) 21:03:37.30
1回目の 991 と2回目の 991 の間ならどこで切ってもおkでしょ
225デフォルトの名無しさん:2013/11/28(木) 21:09:09.31
そこは数学は無駄が嫌いって言うことじゃないかと。
226198:2013/11/28(木) 21:09:25.87
>>224
もちろん。
出力結果がチャンパーノウン定数であって、
991が一個だけであれば正解。それだけ。
どこまで出すかは回答者の気分で。

そういう意味では>>218さんの言ってる通り問題としてはユルユル。
227デフォルトの名無しさん:2013/11/29(金) 16:53:24.19
>>198
@Mathematica

champernowneConstant[pattstr_]:=Module[{joinedNumber,lst,n},

  joinedNumber[n_]:=Range[1,n]//
    Map[ToString,#]&//
    StringJoin;

  lst={};n=1;While[StringFreeQ[joinedNumber[n],pattstr],
    lst=Append[lst,joinedNumber[n+1]];n++];

  Last[lst]//
    StringJoin["0.",#]&
];

In := champernowneConstant["991"]
Out = 0.1234567891011121314151617181920212223242526272829303132333
   435363738394041424344454647484950515253545556575859606162636
   465666768697071727374757677787980818283848586878889909192939
   49596979899100
228デフォルトの名無しさん:2013/11/29(金) 19:11:14.90
お題: 任意の数の自然数を与えた時、それらの自然数を四則演算した結果が、
期待した自然数になる式を全て列挙するコードを作成しなさい。
ただし、式中の乗除算は加減算より先に計算するものとする。
また数の並びは変更出来ず、括弧は使わないものとする。

例: 1 5 3 6 : 10
->
1 * 5 / 3 * 6
1 + 5 * 3 - 6

1 5 3 6 7 : 10
->
1 + 5 + 3 - 6 + 7
229デフォルトの名無しさん:2013/11/29(金) 20:00:49.44
>>228
@Mathematica

buildArithmetic[lst_]:=Module[{arithmeticQ},

  arithmeticQ[lstx_,opx_]:=Module[{val},

    val=Riffle[Map[ToString,lstx[[1]]],opx]//
      StringJoin//
      ToExpression;

    val==lstx[[2]]
  ];

  {" + "," - "," * "," / "}//
    Tuples[#,Length[lst[[1]]]-1]&//
    Select[#,arithmeticQ[lst,#]&]&//
    Map[Riffle[Map[ToString,lst[[1]]],#]&,#]&//
    Map[StringJoin,#]&
];

In := buildArithmetic[{{1, 5, 3, 6}, 10}]
Out = {"1 + 5 * 3 - 6", "1 * 5 / 3 * 6"}

In := buildArithmetic[{{1, 5, 3, 6, 7}, 10}]
Out = {"1 + 5 + 3 - 6 + 7"}
230デフォルトの名無しさん:2013/11/29(金) 21:46:24.65
>>228
ttp://ideone.com/biIc7g
とりあえず作ったは作ったんだが1/2が0になるなどの不具合がある。
仕様がよくわからないのでよくわからない。
ideonで2つ目のstdinに数字を突っ込む方法がよくわからない。
気が向いたらバグフィックスする。疲れた〜。
231デフォルトの名無しさん:2013/11/29(金) 21:55:31.46
>>228 ruby 1.8.6
パターンの羅列が面倒。Array#productは1.8.7から。
計算部分もグダグダ。forcalcが恥ずかしい。
def arbitrary_decimal(orgs, digit, i)
(0...digit).inject([]) {|a, n|
orgs_i = i % orgs.size
i /= orgs.size
a.insert(0, orgs[orgs_i])
}
end
def arbitrary_decimals(orgs, digit)
(0...orgs.size ** digit).inject([]) {|a, i| a << arbitrary_decimal(orgs, digit, i)}
end
def f228(s)
nums, targets = s.split(':').map{|x| x.split}
targets.each{|target|
arbitrary_decimals(%w(+ - * /), nums.size - 1).each {|ops|
s = nums.zip(ops).join + '==' + target
forcalc = s.gsub(/(\/\d+)(\*\d+)/, '\2\1').gsub(/(\d+)/,'\1.0')
puts s if eval(forcalc)
}
}
end
f228('1 5 3 6 : 10 ')
f228('1 5 3 6 7 : 10 ')
232デフォルトの名無しさん:2013/11/29(金) 23:02:54.06
>>228 Squeak Smalltalk
| fourArithOps |
fourArithOps := [:assoc |
 | results expr0 |
 results := OrderedCollection new.
 expr0 := assoc key allButLast collectWithIndex: [:num :idx | num asString, '{', idx, '}'].
 expr0 := '(', (expr0 concatenation as: String), assoc key last, ')=', assoc value.
 #(')+(' ')-(' '*' '/') asDigitsToPower: assoc key size - 1 do: [:ops |
  | expr |
  (Compiler evaluate: (expr := expr0 format: ops))
   ifTrue: [results add: (expr copyWithoutAll: '()')]].
 results asArray].

fourArithOps value: #(1 5 3 6) -> 10. "=> #('1+5*3-6=10' '1*5/3*6=10') "
fourArithOps value: #(1 5 3 6 7) -> 10. "=> #('1+5+3-6+7=10') "
233デフォルトの名無しさん:2013/11/29(金) 23:55:56.93
>>228 with Python
自然数には 0 を含まないものとする

//@@
import itertools as it
from fractions import Fraction
r1 = Fraction(1,1) # rational 1 number

givenNums=(1,5,3,6)
targetNum=10
strGivenNums=[str(k) for k in givenNums]

N=len(givenNums)-1
for strOperators in it.product(*['+-*/']*(N)):
strAt="r1*"+strGivenNums[0]+"".join(strOperators[k]+strGivenNums[k+1] for k in range(N))
if eval(strAt) == targetNum:
print strAt[3:]

//@@@
1+5*3-6
1*5/3*6
234デフォルトの名無しさん:2013/11/29(金) 23:59:47.69
ごめん。Indent が消えた
//@@
import itertools as it
from fractions import Fraction
r1 = Fraction(1,1) # rational 1 number

givenNums=(1,5,3,6)
targetNum=10
strGivenNums=[str(k) for k in givenNums]

N=len(givenNums)-1
for strOperators in it.product(*['+-*/']*(N)):
  strAt="r1*"+strGivenNums[0]+"".join(strOperators[k]+strGivenNums[k+1] for k in range(N))
  if eval(strAt) == targetNum:
    print strAt[3:]

//@@@
1+5*3-6
1*5/3*6
235デフォルトの名無しさん:2013/11/30(土) 11:33:42.67
>>228 Haskell

import Data.List
main :: IO ()
main = mapM_ (print . find4A) ["1 5 3 6 : 10", "1 5 3 6 7 : 10"]
find4A :: String -> [String]
find4A s = (flip (map . (!!)) =<< elemIndices y . map expr) $ conbo [x1] opPlusDigitList
 where
  conbo as []   = as
  conbo as (n:t) = conbo [a ++ b | a <- as, b <- n] t
  opPlusDigitList = map (\x -> [op ++ x | op <- ops]) $ xs
  (xs0, y0)    = break (==':') s
  x1:xs      = words xs0
  y        = read $ tail y0     :: Double
  ops       = [" + ", " - ", " * ", " / "]
expr :: String -> Double
expr s = go id (map read xxs) yys
 where
  (xxs, yys) = partition (`notElem` ["+", "-", "*", "/"]) $ words s
  go f [x1]    _    = f x1
  go f (x1:xs)  ("*":ys) = go (f . (x1 *))  xs ys
  go f (x1:x2:xs) ("/":ys) = go id ((f x1 / x2) : xs) ys
  go f (x1:xs)  ("+":ys) = go ((f x1) +)   xs ys
  go f (x1:xs)  ("-":ys) = go ((f x1) -)   xs ys
  go _ _     _    = -1
236235:2013/11/30(土) 12:01:08.70
割り算のところでミスってた
237235:2013/11/30(土) 12:08:19.85
>>228 Haskell
import Data.List
main :: IO ()
main = mapM_ (print . find4A) ["1 5 3 6 : 10", "1 5 3 6 7 : 10"]
find4A :: String -> [String]
find4A s = (flip (map . (!!)) =<< elemIndices y . map expr) $ conbo [x1] opPlusDigitList
where
conbo as [] = as
conbo as (n:t) = conbo [a ++ b | a <- as, b <- n] t
opPlusDigitList = map (\x -> [op ++ x | op <- ops]) $ xs
(xs0, y0) = break (==':') s
x1:xs = words xs0
y = read $ tail y0 :: Double
ops = [" + ", " - ", " * ", " / "]
expr :: String -> Double
expr s = go id (map read xxs) yys
where
(xxs, yys) = partition (`notElem` ["+", "-", "*", "/"]) $ words s
go f [x1] _ = f x1
go f (x1:x2:xs) ("*":ys) = go f ((x1 * x2) : xs) ys
go f (x1:x2:xs) ("/":ys) = go f ((x1 / x2) : xs) ys
go f (x1:xs) ("+":ys) = go (f . (x1 +)) xs ys
go f (x1:xs) ("-":ys) = go (f . (x1 -)) xs ys
go _ _ _ = -1

多分0以外なら大丈夫

["1 + 5 * 3 - 6","1 * 5 / 3 * 6"]
["1 + 5 + 3 - 6 - 7"]
238235:2013/11/30(土) 12:12:54.24
やっぱ解けてないじゃん
239235:2013/11/30(土) 12:23:48.16
>>228 Haskell
import Data.List
main :: IO ()
main = mapM_ (print . find4A) ["1 5 3 6 : 10", "1 5 3 6 7 : 10"]
find4A :: String -> [String]
find4A s = (flip (map . (!!)) =<< elemIndices y . map expr) $ conbo [x1] opPlusDigitList
 where
  conbo as []   = as
  conbo as (n:t) = conbo [a ++ b | a <- as, b <- n] t
  opPlusDigitList = map (\x -> [op ++ x | op <- ops]) $ xs
  (xs0, y0)    = break (==':') s
  x1:xs      = words xs0
  y        = read $ tail y0     :: Double
  ops       = [" + ", " - ", " * ", " / "]
expr :: String -> Double
expr s = go id (map read xxs) yys
 where
  (xxs, yys) = partition (`notElem` ["+", "-", "*", "/"]) $ words s
  go f [x1]    _    = f x1
  go f (x1:x2:xs) ("*":ys) = go f ((x1 * x2) : xs) ys
  go f (x1:x2:xs) ("/":ys) = go f ((x1 / x2) : xs) ys
  go f (x1:xs)  ("+":ys) = go (f . (x1 +))  xs ys
  go f (x1:x2:xs) ("-":ys) = go (f . (x1 + )) ((-x2):xs) ys
  go _ _     _    = -1

スレ汚しすみませんでした
240235:2013/11/30(土) 12:38:26.89
fいらんかった
241デフォルトの名無しさん:2013/11/30(土) 14:05:33.22
>>228 ruby 1.8.6 ちょっとだけ整理した。
require 'rational'
def f228(s)
nums, targets = s.split(':').map{|x| x.split}
search, replace = '1023', '-+*/'
rationals = nums.map{|num| num.gsub(/(\d+)/, 'Rational(\1,1)')}
targets.each {|target|
(0...replace.size ** (nums.size - 1)).each {|i|
ops = i.to_s(replace.size).rjust(nums.size - 1, '0').tr(search, replace).scan(/./)
s = nums.zip(ops).join + '==' + target
forcalc = rationals.zip(ops).join + '==' + target
puts s if eval(forcalc)
}
}
end
f228('1 5 3 6 : 10 ')
f228('1 5 3 6 7 : 10 ')
242235:2013/11/30(土) 14:36:37.83
>>228 Haskell
conboとかいうのとfを修正 http://ideone.com/Ht2Hgp
243デフォルトの名無しさん:2013/11/30(土) 15:03:08.59
244230:2013/11/30(土) 18:21:10.60
>>228
http://ideone.com/vYiK4G
>>230を適当に改良。
浮動小数系のバグが出るかと思ったら問題が良く出来てて出なかった。反省!

>>243には頭が上がらん・・・。俺は贋作製作者だー!Orz
245デフォルトの名無しさん:2013/11/30(土) 18:31:32.58
>>244
ちょっともう我慢できないから聞くけど、
変数名の頭を大文字にするのってどういう文化?
C++触るまえに何触ってたの?

あとこの、
typedef std::vector<double> DB;
typedef std::vector<int> IB;
Bってなに?バッファ?

もしよかったらおしえてくんろ。
246244:2013/11/30(土) 18:50:23.99
>>245
それは申し訳ない。
基本的に独学なので特定のコーディング規約に触ったことはない。
アッパーキャメルなのは個人的な趣味だ。

ちなみにC/C++の前はポケコンのBasicを触っていた。もう10年前くらいの話だ。

IB => intbuffer
DB => doublebuffer

巨大なライブラリ使ってるわけではないので推測で判断できそうなものは省略している。
あと、コーディングスピードが結構成果を左右するタイプなのでそこで深い思考はしてない。

ところで、俺そんなにうざいですか?KYだとはよく言われます。
247デフォルトの名無しさん:2013/11/30(土) 18:54:10.84
>>246
1mmもうざくないよ。疑問を尋ねただけ。
Bのバッファ説が正解しており嬉しいよ。
あと、ひょっとしたらBASIC触ってたのかなこの人とも思ってたから、
それも正解しておりニンマリだわ。お手数おかけしてどうもすんまそん。
248デフォルトの名無しさん:2013/11/30(土) 19:00:28.90
>>247
それは良かった。素養が悪いのは今後の課題です。
個人的に1ソース200行に抑えられれば制御できるのでその範囲で書いてます。
超えるとかなり大変です。えへへっ。
249デフォルトの名無しさん:2013/11/30(土) 21:29:04.58
   |._番兵|_
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)ull null null null
250片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/30(土) 23:17:51.51
お題:国民の休日を区別して明記した万年カレンダー。
251片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/30(土) 23:21:40.36
※注記:未来のカレンダーについては現行法に従うものとする
252片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/11/30(土) 23:45:51.68
お題:入力補完ができるメニュー選択型UI。
253デフォルトの名無しさん:2013/11/30(土) 23:47:58.80
片山以外のお題キボン
254デフォルトの名無しさん:2013/11/30(土) 23:51:08.56
うむ片山以外のお題はマトモで関心する。
255デフォルトの名無しさん:2013/11/30(土) 23:58:04.73
明治時代の休日なんて知るかよ
256デフォルトの名無しさん:2013/12/01(日) 00:02:11.25
ローマの休日
257片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/01(日) 00:14:47.72
コンソールで入力補完や進行状況を表示させるには、'\r'を使うといい。
'\r'は出力位置、キャレットを行の最初に移動させる制御文字。
258デフォルトの名無しさん:2013/12/01(日) 00:20:25.34
明治どころかハッピーマンデー? なにそれおいしいの?
259片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/01(日) 00:24:46.55
>>255
変体かなや草書体が読めないのに、歴史教科書を読んだだけ
で昔の事を理解したつもりになってるのはおかしくないか?
過去のことに永遠にアクセスできないなんて悲しいよ。
260デフォルトの名無しさん:2013/12/01(日) 01:26:16.50
>>228
Common Lisp
http://ideone.com/WWVy4P
やっとできた。
261デフォルトの名無しさん:2013/12/01(日) 09:40:37.25
>>260
Beautiful!
262デフォルトの名無しさん:2013/12/01(日) 10:12:48.53
>>251 >>259

春分の日(_年,_月,_日) :-
    '「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。'
(_年,_月,_日),!.
263262:2013/12/01(日) 10:15:20.89
% 訂正。最後の(_年,_月,_日). の前の改行はなしです。

春分の日(_年,_月,_日) :-
    '「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。'(_年,_月,_日),!.
264デフォルトの名無しさん:2013/12/01(日) 11:41:53.00
Baise 統計の問題です。下に元の問題があります。
O'Reilly Webcast: Bayesian Statistics Made Simple;;http://www.youtube.com/watch?v=m067f4WA_Is#t=585
http://www.generalfiles.biz/download/gs626d21ach32i0/thinkbayes.pdf.html

四面体、六面体、八面体、十二面体、二十面体と五種類のサイコロが一個ずつあるとします。

問題 I:: 無作為にサイコロを選択し振ってみました。6 の目が出ました。このとき選
択されたサイコロが、四面体・六面体・八面体・十二面体・二十面体である尤度を求め
よ。

問題 II:: 無作為にサイコロを一回だけ選択し、六回振ってみました。[4,8,7,7,2,6]
の目が出ました。このとき選択されたサイコロが、四面体・六面体・八面体・十二面
体・二十面体である尤度を求めよ。
265デフォルトの名無しさん:2013/12/01(日) 11:44:01.96
【回答値】
問題 I:: [ 0. 0.39215686 0.29411765 0.19607843 0.11764706]
問題 II:: [ 0. 0. 0.91584527 0.08040343 0.0037513 ]

video では下の答えになっています。特に問題IIで計算誤差以上に値が異なりますが、
上の私の計算の方が正しいと思います。

問題 I:: [0, 0.39, 0.30, 0.19, 0.12]
問題 II:: [0, 0, 0.94, 0.055, 0.005]
266デフォルトの名無しさん:2013/12/01(日) 14:09:27.92
>>264 python3

ns = [4,6,8,12,20]
f = lambda n: lambda x, k: x/n if k <= n else 0
fs = [f(n) for n in ns]
def g(ks):
  xs = [1]*len(ns)
  for k in ks:
    ys = [f(x,k) for (f,x) in zip(fs, xs)]
    sum_ys = sum(ys)
    xs = [y/sum_ys for y in ys]
  return xs
print(g([6]))
print(g([4,8,7,7,2,6]))
267片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/01(日) 17:11:18.95
>>250
レベルが高すぎたので修正。

お題:与えられた年の国民の休日の名称とその日付を列挙するプログラム。
※注記:未来のカレンダーについては現行法に従うものとする。
268デフォルトの名無しさん:2013/12/01(日) 17:17:48.14
片山以外のお題キボン
269デフォルトの名無しさん:2013/12/01(日) 17:19:25.14
>>267
以前に書いたもので恐縮ですが。余計な事満載。
http://nojiriko.asia/prolog/c146_371_4.html
270デフォルトの名無しさん:2013/12/01(日) 18:19:11.44
>>264 Haskell
http://www.greenteapress.com/thinkbayes/train3.py
http://www.greenteapress.com/thinkbayes/dice.py
このpythonのコードを実行すると確かにそうなるけど、
[6,4,8,7,7,2,6]を引数にするとそれっぽい数字が出る

http://ideone.com/Xo3OfZ

>>228 Haskell
filterえばいいのにわざわざインデックス使ってるし読みにくいし書き直した

http://ideone.com/kxLDfA
271デフォルトの名無しさん:2013/12/01(日) 18:33:32.46
引数の順序逆にしたい
272デフォルトの名無しさん:2013/12/01(日) 18:42:20.69
>>264 Haskell 我慢できずに逆にしたのを投稿
http://ideone.com/bn7q9j
273デフォルトの名無しさん:2013/12/01(日) 18:47:27.70
>>264 Squeak Smalltalk
| dices normalizeFor probabilitiesOf |
dices := #(4 6 8 12 20).
normalizeFor := [:arr | arr / arr sum].
probabilitiesOf := [:kk | dices collect: [:dice | dice < kk ifTrue: [0] ifFalse: [1s5 / dice]]].
normalizeFor value: (probabilitiesOf value: 6).
"=> {0.00000s5 . 0.39215s5 . 0.29411s5 . 0.19607s5 . 0.11764s5} "
normalizeFor value: ((#(4 8 7 7 2 6) collect: probabilitiesOf) reduce: #*)
"=> {0.00000s5 . 0.00000s5 . 0.91584s5 . 0.08040s5 . 0.00375s5} "
274デフォルトの名無しさん:2013/12/01(日) 20:13:26.99
>>264 Haskell >>273を参考に書き直し http://ideone.com/kg1XpV
275デフォルトの名無しさん:2013/12/01(日) 20:21:12.99
fはこっちの方がいいか
f [] = []
f xs = let zs = foldr p ([1,1..]) xs in map (/ sum zs) zs
276デフォルトの名無しさん:2013/12/01(日) 20:45:25.79
>>264 しつこく修正 http://ideone.com/9EmtA3
277デフォルトの名無しさん:2013/12/01(日) 20:48:43.63
お題:与えられた文字列が回文かどうかチェックせよ。
半角アルファベット文字のみを判定の対象とする。大文字小文字の区別はしない。
判定対象文字列のサイズがゼロの場合の判定結果はどちらでもよい。

回答例:
#include <stdio.h>
int is_palindrome(const char *cs) {
const char *head = cs, *tail = cs + strlen(cs) - 1, *p, *q;
for (p = head, q = tail; p < q; p++, q--) {
while (!isalpha(*p) && p <= tail) p++;
while (!isalpha(*q) && head <= q) q--;
if (tolower(*p) != tolower(*q)) return 0;
}
return 1;
}
void check_palindrome(const char *cs) {
printf("\"%s\" %s a palindrome.\n", cs, is_palindrome(cs) ? "is" : "is NOT");
}
int main() {
check_palindrome("boo");
check_palindrome("A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!");
check_palindrome("A tin mug for a jar of gum, Nita.");
check_palindrome("A Toyota! Race fast, safe car! A Toyota!");
return 0;
}

出力例:
"boo" is NOT a palindrome.
"A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!" is a palindrome.
"A tin mug for a jar of gum, Nita." is a palindrome.
"A Toyota! Race fast, safe car! A Toyota!" is a palindrome.
278デフォルトの名無しさん:2013/12/01(日) 20:59:35.16
279デフォルトの名無しさん:2013/12/01(日) 21:01:07.91
回分ってなんだっけ?
逆から読んでも同じやつだけだっけ?
同じ単語が混じってたら回分?
280デフォルトの名無しさん:2013/12/01(日) 21:09:02.24
あぁ、とりあえず逆から同じように読めればいいのね。
281デフォルトの名無しさん:2013/12/01(日) 21:12:30.18
最後の回文旨いことで来てるなー。
C言語の解答出てるからC++で書くと移植になっちゃうなぁ。
なんか面白い解法無いもんか。
282デフォルトの名無しさん:2013/12/01(日) 21:42:15.98
283 ◆QZaw55cn4c :2013/12/01(日) 22:23:22.21
284デフォルトの名無しさん:2013/12/01(日) 22:32:22.52
ttp://ideone.com/bAaStw 
C++ 結局移植になってしまった。
新規性で言えばリバースイテレータを使ってみたという点位。
それでもちょっと無駄があるなぁ。

ほんだがらったへんだがらったふんだがらったふんふん。
285デフォルトの名無しさん:2013/12/01(日) 22:45:57.42
>>277 Squeak Smalltalk
| isPalindrome |
isPalindrome := [:str | (str select: #isLetter) asLowercase in: [:letters | letters reversed = letters]].

isPalindrome value: 'boo'. "=> false "
isPalindrome value: 'A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!'. "=> true "
286片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/01(日) 23:45:18.05
お題:線分(x0,y0)〜(x1,y1),(x2,y2)〜(x3,y3)の交点を求める。
287デフォルトの名無しさん:2013/12/02(月) 00:36:38.23
>>286
交点なかったらどうすんの?
288デフォルトの名無しさん:2013/12/02(月) 00:41:57.63
289デフォルトの名無しさん:2013/12/02(月) 00:43:08.54
交点なしと表示する
290デフォルトの名無しさん:2013/12/02(月) 00:50:39.03
大成功!q >o< p
291デフォルトの名無しさん:2013/12/02(月) 01:04:17.26
>>277 J
f =: (-: |.)@((toupper ~: ]) # ])@tolower

f 'boo'
0
f 'A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!'
1
f 'A tin mug for a jar of gum, Nita.'
1
f 'A Toyota! Race fast, safe car! A Toyota!'
1
292 ◆QZaw55cn4c :2013/12/02(月) 05:30:49.98
>>277 c++
>>283 を直しました
http://codepad.org/vBSFYyVa
293デフォルトの名無しさん:2013/12/02(月) 07:57:46.32
>>277
perl -e '$_ = $ARGV[0]; tr/A-Z/a-z/; s/\s+//g; print "palindrome\n" if (substr($_, 0, length($_)/2) eq reverse(substr($_, -length($_)/2, length($_)/2)))'
これでいいのかな
294デフォルトの名無しさん:2013/12/02(月) 07:59:46.81
おっと length の $_ は省略可か
295デフォルトの名無しさん:2013/12/02(月) 10:10:19.00
>>286
お題を出すなら、入出力例を添えろと何度言ったら…
296デフォルトの名無しさん:2013/12/02(月) 13:52:31.19
>>286 Squeak Smalltalk
| A B C D V0 V1 crossProd P |
V0 := (B := -3.0@ -3.0) - (A := [email protected]).
V1 := (D := [email protected]) - (C := 0.0@ -2.0).
(crossProd := V0 crossProduct: V1) abs < Float epsilon ifTrue: [^'交点なし'].
P := (C - A crossProduct: V1) / crossProd * V0 + A.
^((P onLineFrom: A to: B within: Float epsilon) and: [P onLineFrom: C to: D within: Float epsilon])
  ifTrue: [P] ifFalse: ['交点なし']
"=> -1.0@ -1.0 "
297デフォルトの名無しさん:2013/12/02(月) 15:09:51.13
>>277 Lua
function f(s)
s = s:gsub("%W", ""):upper()
return s == s:reverse()
end
298デフォルトの名無しさん:2013/12/02(月) 15:27:24.01
299298:2013/12/02(月) 15:29:47.29
あ、線分だったか、ま、いっか
300298:2013/12/02(月) 17:34:00.56
>>286 Haskell 無理矢理線分の上にあるか判定
http://ideone.com/UdUQlp
301デフォルトの名無しさん:2013/12/02(月) 19:42:24.83
>>277 ruby 1.8.6
普通に書いたら>>297さんとほぼ同じになっちゃうので少しグネッて一行で書いた。
def f277(s)
s.downcase.gsub(/[^a-z]/, '').inject(0){|b, x| x == x.reverse}
end
302デフォルトの名無しさん:2013/12/02(月) 23:52:27.19
お題 : 6面のサイコロを振る試行を繰り返すことで、
円周率の値を、有効数字3桁程度の精度で予想しなさい。
またその時に出たそれぞれの目の回数を表示しなさい。

解答例 :
pi: 3.14472
1: 133393 16.7%
2: 133271 16.7%
3: 133270 16.7%
4: 133290 16.7%
5: 132931 16.6%
6: 133845 16.7%
303298:2013/12/02(月) 23:55:42.93
304 ◆QZaw55cn4c :2013/12/03(火) 01:55:25.93
305デフォルトの名無しさん:2013/12/03(火) 11:53:36.80
お題:ふたつの自然数の公約数をすべて求める。

201312, 12222 -> 1, 2, 3, 6, 9, 18
306デフォルトの名無しさん:2013/12/03(火) 12:02:18.59
>>302 Squeak Smalltalk
| dice M N max bag rand count |
dice := 6. M := 4. N := 1e5.
max := (dice raisedTo: M) - 1.
bag := Bag new.
rand := [((1 to: M) inject: 0.0 into: [:acc :idx | acc * dice + ((bag add: dice atRandom) - 1)]) / max].
count := 0.
N timesRepeat: [(rand value raisedTo: 2) + (rand value raisedTo: 2) < 1 ifTrue: [count := count + 1]].
^{#pi -> (count / N * 4.0). bag sortedElements}
"=> {#pi->3.14896 . {1->133302 . 2->133594 . 3->133354 . 4->133025 . 5->133377 . 6->133348}} "
307デフォルトの名無しさん:2013/12/03(火) 12:20:59.16
>>305 Squeak Smalltalk
| factorsOf commonFactorsOf |
factorsOf := [:n | (1 to: n) select: [:m | n isDivisibleBy: m]].
commonFactorsOf := [:a :b | ((factorsOf value: a) intersection: (factorsOf value: b)) asSortedArray].
commonFactorsOf value: 201312 value: 12222 "=> #(1 2 3 6 9 18) "
308デフォルトの名無しさん:2013/12/03(火) 13:23:45.82
>>305
; Common Lisp
(defun all-common-denominators (&rest integers)
 (loop with gcd = (apply #'gcd integers)
    for i from 1 to gcd
    when (zerop (mod gcd i))
    collect i))

(all-common-denominators 201312 12222)
309片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/03(火) 13:52:04.80
>>302 さいころからどうやって円周率に結びつけるの?
310デフォルトの名無しさん:2013/12/03(火) 15:53:19.41
>>309
モンテカルロ法。
311デフォルトの名無しさん:2013/12/03(火) 17:33:03.93
>>305 ruby 1.8.6
def common_divisors(m, n)
(1..m).inject([]){|a, i| m % i == 0 ? a << i : a}.inject([]){|a, i| n % i == 0 ? a << i : a}
end
p common_divisors(201312, 12222)
312デフォルトの名無しさん:2013/12/03(火) 18:05:47.44
>>310
それだけじゃ片山にはわからんだろう…
313デフォルトの名無しさん:2013/12/03(火) 18:35:05.56
>>305 ruby 1.8.6 可変長引数版。
def common_divisors(*args)
n = args.shift
a = args.size < 1 ? (1..n).to_a : common_divisors(*args)
a.delete_if {|i| n % i != 0}
end
p common_divisors(201312, 12222, 27)

[1, 3, 9]
314 ◆QZaw55cn4c :2013/12/03(火) 18:41:56.59
>>309
>>310
+六進法
315デフォルトの名無しさん:2013/12/03(火) 19:19:01.75
>>305
>>307 はちょっとあれなので >>313 を参考に Squeak Smalltalk 別解
#(201312 12222 27) in: [:xs | xs sort inject: (1 to: xs first) into: [:acc :x | acc select: [:n | x isDivisibleBy: n]]]
"=> #(1 3 9) "
316デフォルトの名無しさん:2013/12/03(火) 22:33:16.15
>>310
三平方の定理
317デフォルトの名無しさん:2013/12/03(火) 23:16:23.48
>>315
横槍いれるけどSqueakよりPharoの方がよくね
318デフォルトの名無しさん:2013/12/03(火) 23:44:04.30
>>317
そう? Pharo使うくらいならVisualWorks使うなぁ…
Squeakは、その節操のなさが好き。良し悪しはともかく。
319デフォルトの名無しさん:2013/12/03(火) 23:47:07.83
>>305 Clojure

(->> [n m] (map #(filter (fn [x] (zero? (mod % x))) (range 1 (/ % 2)))) (map set) (apply clojure.set/intersection))
320デフォルトの名無しさん:2013/12/03(火) 23:50:34.80
>>318
Visual Worksってええの?
補完が出来ないとかクリックで派生Class作れないとか(偏見)
古臭い感じがするけど。
321デフォルトの名無しさん:2013/12/04(水) 00:07:29.04
>>320
補完は AutoComplete パーセル入れればできるでしょ。
「クリックで派生Class作」るってPharoでどうやるの?
322デフォルトの名無しさん:2013/12/04(水) 00:48:51.60
>>321
Refactoringメニューでgenerate subclass的なメニューを押すと作れるよ。
他にもTestClass生成したりsuper class生成したりRefactoringとは
到底思えない便利機能が色々有るよ。

あと聞かれた内容に関係ないけど、
Pharoは文字列を選択してClassを検索したり
Selectorを検索したりできる。
他にも検索機能が充実しててそれが便利で
Squeakから移っちゃった。
323デフォルトの名無しさん:2013/12/04(水) 01:35:31.25
>>305 Scala
List(n, m) map(x => (1 to x / 2) filter(x % _ == 0)) reduceLeft((x, y) => x intersect y)
324デフォルトの名無しさん:2013/12/04(水) 01:52:29.48
>>305 c++
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> *common_divisors(const std::vector<int> *nums) {
if (!nums) return 0;

int min = *std::min_element(nums->begin(), nums->end());
std::vector<int> *cds = new std::vector<int>();
for (int i = 1; i <= min; i++) {
std::vector<int>::const_iterator it;
for (it = nums->begin(); it != nums->end(); it++) {
if (*it % i) break;
}
if (it == nums->end()) cds->push_back(i);
}
return cds;
}
void p(std::vector<int> *is) {
std::cout << "[";
for (int i = 0; i < is->size(); i++) {
if (0 < i) std::cout << ", ";
std::cout << is->at(i);
}
std::cout << "]" << std::endl;
}
325デフォルトの名無しさん:2013/12/04(水) 01:53:55.08
>>324の続き
int main() {
std::vector<int> nums;
nums.push_back(201312);
nums.push_back(12222);
nums.push_back(27);
std::vector<int> *cds = common_divisors(&nums);
p(&nums);
p(cds);
return 0;
}

[201312, 12222, 27]
[1, 3, 9]
326デフォルトの名無しさん:2013/12/04(水) 02:34:43.23
>>305 HSP
#module
#defcfunc gcd2 int a, int b, \
local x, local y, local z
if a<0 : return b
if b<0 : return a
x=a : y=b
repeat
z=x\y
if z=0 : break
x=y
y=z
loop
return y

#deffunc calc array arr, int n, \
local arr_num
repeat n, 1
if (n\cnt)=0 {
arr(arr_num)=cnt
arr_num++
}
loop
return arr_num

#define global ctype gcd4(%1=-1,%2=-1,%3=-1,%4=-1) gcd2(gcd2(%1,%2),gcd2(%3,%4))
#global

calc result, gcd4(201312,12222,27)
repeat stat
mes result(cnt)
loop
327デフォルトの名無しさん:2013/12/04(水) 05:50:51.73
>>305 Octave
function z = f(a, b)
c = gcd(a, b);
d = 1:c;
z = d(mod(c, d) == 0);
endfunction

> f(201312,12222)
ans =
1 2 3 6 9 18
> f(96,96)
ans =
1 2 3 4 6 8 12 16 24 32 48 96
328デフォルトの名無しさん:2013/12/04(水) 08:54:42.82
>>322
なるほど。Pharoの開発には他言語の近代的なIDEで育った若い人たちが
Squeakに比べておおく参加しているので、よく使う機能が前面に押し出されており
これからSmalltalkを始める人にはわかりやすくてよいかもしれませんね。
329デフォルトの名無しさん:2013/12/04(水) 11:07:45.81
>>302 サイコロを複数回振って細かくて平らな乱数を作る方法がわからないので無理
>>305 Haskell
commonDivsors ys = [x | x <- [1 .. mininimum ys], all (==0) $ map (`mod` x) ys]
f a b = commonDivisors [a, b]

f 201312 12222
[1,2,3,6,9,18]

f 96 96
[1,2,3,4,6,8,12,16,24,32,48,96]
330デフォルトの名無しさん:2013/12/04(水) 11:18:21.30
>>305 Haskell ミス修正
commonDivisors ys = [x | x <- [1 .. minimum ys], all (==0) $ map (`mod` x) ys]
f a b = commonDivisors [a, b]
331デフォルトの名無しさん:2013/12/04(水) 11:59:37.38
332 ◆QZaw55cn4c :2013/12/04(水) 12:35:51.83
>>329
>サイコロを複数回振って細かくて平らな乱数を作る方法
>>314
333デフォルトの名無しさん:2013/12/04(水) 13:07:10.98
>>302 HSP
#include "hspmath.as"

#module dice_mod
#defcfunc dice local r
r=rnd(6)+1
g_count@(r)++
g_total@++
return r

#defcfunc dice_rnd int n, local ret
repeat n
ret=ret*6+dice()-1
loop
return ret
#global

#const DICE_NUM 10
#const PLOT_NUM 1000000

randomize
repeat PLOT_NUM
x=pow(6, -DICE_NUM)*dice_rnd(DICE_NUM)
y=pow(6, -DICE_NUM)*dice_rnd(DICE_NUM)
if x*x+y*y<=1.0 : inside++
await
loop
mes strf("pi=%.6f", 4.0*inside/PLOT_NUM)
repeat 6, 1
mes strf("%d %d %.4f%%", cnt, g_count(cnt), 100.0*g_count(cnt)/g_total)
loop
334デフォルトの名無しさん:2013/12/04(水) 15:44:56.91
>>332 わからないので>>333からパクった
>>302
http://ideone.com/l7P8jq
335デフォルトの名無しさん:2013/12/04(水) 18:07:06.76
>>305 J
f =: 1+[:I.0=(|~1+i.)@(+./)

f 201312 12222
1 2 3 6 9 18

f 201312 12222 27
1 3 9
336デフォルトの名無しさん:2013/12/04(水) 18:15:48.73
>>305 Io
Range
gcd := method(a, b, if(b == 0, a, gcd(b, a % b)))
f := method(a, b, c := gcd(a, b); 1 to(c) select(i, c % i == 0))

Io> f(201312,12222)
==> list(1, 2, 3, 6, 9, 18)
337デフォルトの名無しさん:2013/12/04(水) 18:54:06.11
f =: 1+[:I.0=(|~1+i.)@(+./)

(+./) gcd
@関数の合成
1+i.4 -> 1 2 3 4
~で引数を逆にする
1 2 3 4 | 4 -> 0 0 1 0
I.0= index of 0
[: 多分一旦値を取り出す
1+ 0 1 3 -> 1 2 4
338デフォルトの名無しさん:2013/12/04(水) 18:56:54.35
あ、~は f g a = f a (g a)ってことか
339デフォルトの名無しさん:2013/12/04(水) 20:27:48.67
>>305
@Mathematica

commonDivisors[n1_,n2_]:=Module[{commonDivisorQ},

  commonDivisorQ[nx_,n1x_,n2x_]:=Module[{},

    {n1x,n2x}//
      Map[Mod[#,nx]==0&,#]&//
      Apply[And,#]&
  ];

  Range[1,GCD[n1,n2]]//
    Select[#,commonDivisorQ[#,n1,n2]&]&
];

In := commonDivisors[201312, 12222]
Out = {1, 2, 3, 6, 9, 18}
340デフォルトの名無しさん:2013/12/04(水) 20:56:12.64
>>305 Haskell まあ素直にgcdを使うべきだったのは確かだけど
main :: IO ()
main = print $ f 201312 12222
commonDivisors :: [Integer] -> [Integer]
commonDivisors ys = let z = foldl1 gcd ys in [x | x <- [1 .. z], z `mod` x == 0]
f a b = commonDivisors [a, b]
341デフォルトの名無しさん:2013/12/04(水) 21:13:17.49
最近効率を無視するのが楽しいから困る
342 ◆QZaw55cn4c :2013/12/04(水) 21:15:29.61
お題:http://toro.2ch.net/test/read.cgi/tech/1381909900/403
ひさびさにいいお題が
343デフォルトの名無しさん:2013/12/04(水) 22:04:20.04
>>342
お前、自分が解き損なったからって……
344デフォルトの名無しさん:2013/12/04(水) 22:11:18.63
Cはよくわからんけどポインタから文字列の長さを引いたりできないのか
345デフォルトの名無しさん:2013/12/04(水) 22:22:28.42
intのために使うメモリの節約とか意地とか見栄そういうの?
346 ◆QZaw55cn4c :2013/12/04(水) 22:25:34.05
>>343
うん
まあいいお題とは思ったんだ意気消沈して焼け酎をあおっている‥
347デフォルトの名無しさん:2013/12/05(木) 00:43:25.93
>>305 Objective Caml version 3.08.1
はるか昔に準備しておいてずっと放置していたocamlに挑戦。
関数型言語に馴染みがまったく無いのでどうもヘンな感じだ。

let rec range a b = if a > b then [] else a :: range (a+1) b;;
let rec gcd n m = if m = 0 then n else gcd m (n mod m);;
let cds n m = List.filter (fun i -> n mod i = 0 && m mod i = 0) (range 1 (gcd n m));;
cds 201312 12222;;

- : int list = [1; 2; 3; 6; 9; 18]
348デフォルトの名無しさん:2013/12/05(木) 01:52:09.23
>>305 C
Cで書いてみた
多分色々間違ってる
http://codepad.org/Sa8cvS6j
349デフォルトの名無しさん:2013/12/05(木) 04:49:13.40
>>305 では「ふたつの」と指定してありますが、
「任意の数の」に変えたらコードはどう変化しますか?

お題:任意の数の自然数の公約数をすべて求める。


201312, 12222 -> 1, 2, 3, 6, 9, 18
201312, 12222, 27 -> 1, 3, 9
201312, 12222, 27, 3 -> 1, 3
350デフォルトの名無しさん:2013/12/05(木) 09:48:26.09
>>349 HSP
#module
#defcfunc gcd int a, int b, local x, local y, local z
x=a
y=b
repeat
z=x\y
if z=0 : break
x=y
y=z
loop
return y

#deffunc calc array result, array value, int value_num, local t, local result_num
t=value(0)
repeat value_num-1, 1
t=gcd(value(cnt), t)
loop
repeat t, 1
if (t\cnt)=0 {
result(result_num)=cnt
result_num++
}
loop
return result_num
#global

value=201312, 12222, 27
calc result, value, length(value)
repeat stat
mes result(cnt)
loop
351339:2013/12/05(木) 12:25:22.98
>>349
@Mathematica

commonDivisors2[nlst_]:=Module[{commonDivisorQ},

  commonDivisorQ[nx_,nlstx_]:=Module[{},

    nlst//
      Map[Mod[#,nx]==0&,#]&//
      Apply[And,#]&
  ];

  nlst//
    Apply[GCD,#]&//
    Range[1,#]&//
    Select[#,commonDivisorQ[#,nlst]&]&
];

In := commonDivisors2[{201312,12222,27}]
Out = {1,3,9}

In := commonDivisors2[{201312,12222,27,3}]
Out = {1,3}
352 ◆QZaw55cn4c :2013/12/05(木) 12:32:12.61
>>349
ここに証明を書いておいたhttps://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95
要は最大公約数自身の約数を列挙すればよい
ユークリッドの互助法に限らないのではないか
353デフォルトの名無しさん:2013/12/05(木) 13:41:59.77
354デフォルトの名無しさん:2013/12/05(木) 13:53:25.23
>>349 Haskell
main :: IO ()
main = print $ commonDivisors [201312, 12222, 27]
commonDivisors :: [Integer] -> [Integer]
commonDivisors ys = let z = foldl1 gcd ys in [x | x <- [1 .. z], z `mod` x == 0]
355デフォルトの名無しさん:2013/12/05(木) 13:59:26.02
>>349
>>353
配列の長さを関数に渡したり-1で止めたりってやめた方がいいんですかね
http://codepad.org/kRWHQK85
356デフォルトの名無しさん:2013/12/05(木) 14:13:11.83
>>355
>配列の長さを関数に渡したり-1で止めたりってやめた方がいいんですかね

両方とも一般的な手法だから、良いんじゃないかな。
データに0が含まれないと判っていれば、「0で止める」だけなので。
357デフォルトの名無しさん:2013/12/05(木) 14:19:13.82
なるほど
358デフォルトの名無しさん:2013/12/05(木) 18:21:26.62
>>349 ruby 1.8.6
require 'rational'
def ds(n)
(1..n).select {|i| n % i == 0}
end
def gcd(*nums)
nums.inject(0) {|r, n| r.gcd(n)}
end
def cds(*nums)
ds(gcd(*nums))
end
>>349 Objective Caml version 3.08.1
let rec range a b = if a > b then [] else a::range (a + 1) b;;
let rec gcd2 a b = if a = 0 then b else if b = 0 then a else if a > b then gcd2 b (a mod b) else gcd2 a (b mod a);;
let gcd nums = List.fold_left gcd2 0 nums;;
let ds n = List.filter (fun i -> n mod i = 0) (range 1 n);;
let cds nums = ds (gcd nums);;
359デフォルトの名無しさん:2013/12/05(木) 20:11:41.19
>>342 c
#include <stdio.h>
char *SEARCH(char *s, char *p) {
if (!p || *p == '\0') return s;
if (!s || *s == '\0') return 0;
return *s == *p ? SEARCH(s + 1, p + 1) - 1 : SEARCH(s + 1, p);
}
void check(char *s, char *p) {
printf("%s|%s|%s\n", s, p, SEARCH(s, p));
}
int main() {
check("12345", "23");
check("12345", "");
check("12345", 0);
check("12345", "5");
check("12345", "1");
return 0;
}
360359:2013/12/05(木) 20:17:41.06
ゴメン、まったく解けてなかったw
361片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/05(木) 23:34:00.68
>>342
char *SEARCH(char *s, char *p) {
if (!*s) return NULL;
if (!*p) return s;
if (*s == *p && SEARCH(s + 1, p + 1) == s + 1) return s;
return SEARCH(s + 1, p);
}
362デフォルトの名無しさん:2013/12/05(木) 23:57:29.48
>>349

Clojure
(->> [201312 12222 27 9] (map #(filter (fn [x] (zero? (mod % x))) (range 1 %))) (map set) (apply clojure.set/intersection))

Scala
List(201312, 12222, 27) map(x => 1 to x filter(x % _ == 0)) reduceLeft((x, y) => x intersect y)

今見たら>>319>>323も間違えてるじゃないか
363デフォルトの名無しさん:2013/12/06(金) 15:19:14.67
364デフォルトの名無しさん:2013/12/06(金) 16:11:58.17
>>304 Haskell map readをまとめた http://ideone.com/3pa7VP
365デフォルトの名無しさん:2013/12/06(金) 16:46:45.03
お題:偶数の目が奇数の目より二倍でやすいイカサマさいころの実装と、
それを実際に10万回ふって出た目の数を集計し出力するコード。

出力例
1: 11103
2: 22287
3: 11114
4: 22170
5: 11089
6: 22237

余力があれば、任意の目の数と出やすさに対応できるコードにしてください。
366デフォルトの名無しさん:2013/12/06(金) 17:00:30.42
>>302 Haskell IOを追い出した http://codepad.org/YAg1I3Lz
367デフォルトの名無しさん:2013/12/06(金) 17:01:45.51
diceって複数形だったのか
368デフォルトの名無しさん:2013/12/06(金) 17:01:56.48
>>365
@Mathematica

spuriousDiceCounter[n_]:=Module[{spuriousDice},

  spuriousDice[]:=RandomChoice[{1,2,2,3,4,4,5,6,6}];

  Table[spuriousDice[],{i,n}]//
    Tally//
    Sort[#,#1[[1]]<#2[[1]]&]&//
    Map[{ToString[#[[1]]]<>" : "<>ToString[#[[2]]]}&,#]&//
    Grid
];

In := spuriousDiceCounter[100000]
Out = 1 : 10865
   2 : 22420
   3 : 11291
   4 : 22187
   5 : 11019
   6 : 22218
369デフォルトの名無しさん:2013/12/06(金) 17:15:55.19
>>365 Squeak Smalltalk
| probDist thresholds bag dice randGen |
probDist := #(1 2 1 2 1 2).
probDist := probDist / probDist sum.
thresholds := probDist inject: #(0) into: [:acc :prob | acc, {acc last + prob}].
randGen := Random new.
dice := [ | rnd | rnd := randGen next. thresholds findLast: [:thre | thre < rnd]].
bag := Bag new.
1e5 timesRepeat: [bag add: dice value].
^bag sortedElements "=> {1->10906 . 2->22107 . 3->11161 . 4->22417 . 5->11119 . 6->22290} "
370デフォルトの名無しさん:2013/12/06(金) 17:30:31.42
>>302 Haskell 修正 http://ideone.com/sPeMI1
>>365
import qualified Data.IntMap as I
import System.Random

main :: IO ()
main = do
rd <- fmap (take 100000) rollIkasamaDice
let im = foldr (I.update ((Just $!) . succ)) im0 rd
im0 = I.fromList $ zip [1..6] [0,0..]
print im

rollIkasamaDice :: IO [Int]
rollIkasamaDice = do
gen <- getStdGen
let rs = filter (/=0) $ map f $ randomRs (1, 12) gen
f x | x `elem` [8, 10, 12] = x - 6
| x `elem` [7, 9, 11] = 0
| otherwise = x
return $ rs

fromList [(1,11230),(2,22116),(3,11021),(4,22235),(5,11150),(6,22248)]

多分他の場合には簡単に対応できない
371デフォルトの名無しさん:2013/12/06(金) 17:40:29.74
>>365
> 余力があれば、任意の目の数と出やすさに対応できるコードにしてください。

たとえば、目の数の平方根に比例した出方をする四面のイカサマさいころの場合とか
372デフォルトの名無しさん:2013/12/06(金) 17:49:26.98
>>365
ttp://ideone.com/7bK1Od
普通にライブラリで対応。どうしてそうなるのかは分からない。Orz=3
373デフォルトの名無しさん:2013/12/06(金) 17:51:34.36
>>371 Haskell http://ideone.com/nNsRFx 合ってるかは知らん
374デフォルトの名無しさん:2013/12/06(金) 17:51:38.62
>>365
; Common Lisp
(defun roll-dice ()
 (let ((n (1+ (random 9))))
  (if (<= n 6)
    n
    (* 2 (- n 6)))))

(loop with a = (make-array 6 :initial-element 0)
   repeat 1e5
   do (incf (elt a (1- (roll-dice))))
   finally (loop for i upfrom 1
          for n across a
          do (format t "~a: ~a~%" i n)))

1: 11137
2: 22280
3: 11152
4: 22207
5: 11218
6: 22006
375デフォルトの名無しさん:2013/12/06(金) 17:53:16.64
あ9でよかったか
376373:2013/12/06(金) 18:02:52.62
実行したら全然合ってなかった
377373:2013/12/06(金) 18:05:44.97
考えれば当たり前だけど
378368:2013/12/06(金) 18:07:06.65
>>365,371
@Mathematica サイコロ作り直し版

spuriousDiceCounter[diceweight_,n_]:=Module[{spuriousDice},

  spuriousDice[diceweightx_]:=Module[{dice,weight},

    dice=diceweightx//
      Map[#[[1]]&,#]&;

    weight=diceweightx//
      Map[#[[2]]&,#]&;

    RandomChoice[weight->dice]
  ];

  Table[spuriousDice[diceweight],{i,n}]//
    Tally//
    Sort[#,#1[[1]]<#2[[1]]&]&//
    Map[{ToString[#[[1]]]<>" : "<>ToString[#[[2]]]}&,#]&//
    Grid
];

In := spuriousDiceCounter[{{1,Sqrt[1]},{2,Sqrt[2]},{3,Sqrt[3]},{4,Sqrt[4]}},100000]
Out = 1 : 16501
   2 : 23022
   3 : 28008
   4 : 32469
379デフォルトの名無しさん:2013/12/06(金) 18:20:58.67
Haskellの標準ライブラリでは分布指定とかrandomChoiceみたいなのはないのか
乱数勉強するなら解析? 離散? 統計?
380デフォルトの名無しさん:2013/12/06(金) 18:37:51.24
整数にこだわらず最初から[0..1]のDoubleを確率で区切ればいいのか
381デフォルトの名無しさん:2013/12/06(金) 18:40:20.29
>>369がそれやってるっぽいけど読めない
382デフォルトの名無しさん:2013/12/06(金) 19:09:45.96
>>365 Haskell http://ideone.com/LxO5Uh
多分これで合ってる
383デフォルトの名無しさん:2013/12/06(金) 19:15:05.45
>>365 Haskell http://ideone.com/LxO5Uh fromList [(1,11201),(2,22006),(3,11115),(4,22412),(5,11043),(6,22223)]
>>371 Haskell http://ideone.com/AC3xEU fromList [(1,16321),(2,23232),(3,27827),(4,32620)]
384デフォルトの名無しさん:2013/12/06(金) 19:20:21.01
つーか確率のリストを渡せばいいだけだった >>365 >>371 Haskell http://ideone.com/z2tBRU
385デフォルトの名無しさん:2013/12/06(金) 19:30:26.94
よく考えれば色んなサイコロに対応できるコードになってるなよかったよかった
386デフォルトの名無しさん:2013/12/06(金) 19:31:25.33
>>365 HSP
#module
#defcfunc rndf
return (double(rnd(1024))/1024+double(rnd(1024)))/1024
#deffunc fake_dice_init array r, local s
s=0.0
repeat 6
s+=r(cnt)
loop
repeat 6
s_r(cnt)=double(r(cnt))/s
if cnt : s_r(cnt)+=s_r(cnt-1)
loop
return
#defcfunc fake_dice local r, local ret
r=rndf()
repeat 6
if r<s_r(cnt) : ret=cnt+1 : break
loop
return ret
#global
randomize
r=1.0, 2.0, 1.0, 2.0, 1.0, 2.0
fake_dice_init r
repeat 100000
x=fake_dice()
count(x)++
loop
repeat 6, 1
mes strf("%d: %d", cnt, count(cnt))
loop
387デフォルトの名無しさん:2013/12/06(金) 20:45:43.73
>>365 ruby 1.8.6 厳密に言うと正しくない箇所があるかも。
class Dice
def initialize(waits)
@scale = waits.inject([]) {|r, w| r << (r.last||0) + w}
end
def next
x = rand * @scale.last
@scale.each_index {|i| return i if x < @scale[i]}
end
end
def f365(labels, waits, n_times)
d = Dice.new(waits)
m = (1..n_times).inject(Hash.new(0)){|h, i| h[d.next] += 1; h}
labels.each_index{|i| puts "#{labels[i]}: #{m[i]}"}
end
f365(('1'..'6').to_a, [1,2,1,2,1,2], 100000)
f365(('sqrt1'..'sqrt4').to_a, (1..4).map{|i|Math.sqrt i}, 100000)

1: 10997
2: 22468
3: 11065
4: 22109
5: 11099
6: 22262
sqrt1: 16047
sqrt2: 23121
sqrt3: 28288
sqrt4: 32544
388デフォルトの名無しさん:2013/12/06(金) 20:51:37.75
>>365 Haskell これで最終にしよう http://codepad.org/WfNEfmTG
fromList [(1,11094),(2,22366),(3,11148),(4,22113),(5,11133),(6,22146)]
fromList [(1,16469),(2,22947),(3,28054),(4,32530)]
fromList [(1,10937),(2,11007),(3,11150),(4,11349),(5,11141),(6,11109),(7,11164),(8,11105),(9,11038)]
389デフォルトの名無しさん:2013/12/06(金) 20:53:48.10
メモ:空letは通る
390デフォルトの名無しさん:2013/12/06(金) 21:26:19.52
>>387
厳密じゃなくてもweightだろうな。
391デフォルトの名無しさん:2013/12/06(金) 21:28:26.07
スリープソートみたいなことやってると思ってた
rubyとsmalltalkは高尚すぎて読めない
392デフォルトの名無しさん:2013/12/06(金) 21:41:39.79
>>390
良い事を教えてあげようか?
俺の顔はいまスイカの断面よりも真っ赤だ…。
393デフォルトの名無しさん:2013/12/06(金) 21:57:08.95
>>392
ドンマイw
394デフォルトの名無しさん:2013/12/06(金) 22:45:20.03
その比喩はちょっとわかりにくい
頭の断面が真っ赤なのかと思ったわー
そして季節外れだし、今ならサンタクロースの服とかだろーねー
知らんわ
395デフォルトの名無しさん:2013/12/06(金) 23:29:07.86
>>37
Cではグローバル変数を使うべきだな
396デフォルトの名無しさん:2013/12/07(土) 00:55:38.68
>>365 J
/:~(~.,.#/.~)(?100000#9){1 2 2 3 4 4 5 6 6
1 11152
2 22416
3 10971
4 22224
5 11006
6 22231
397デフォルトの名無しさん:2013/12/07(土) 01:28:51.14
398デフォルトの名無しさん:2013/12/07(土) 02:35:40.79
>>365,371 Objective Caml version 3.08.1
Random.self_init ();;
type entry = {label:string; level:float; mutable freq:int};;
let f365 labels weights n_times =
let levels = List.tl (List.rev (List.fold_left (fun a w -> List.hd a +. w::a) [0.0] weights)) in
let entries = List.rev (List.fold_left2 (fun a la le -> {label = la; level = le; freq = 0}::a) [] labels levels) in
let maxlevel = (List.hd (List.rev entries)).level in
let find arg es = List.find (fun {level = le} -> arg < le) es in
let countup e = e.freq <- (e.freq + 1) in
for i = 1 to n_times do
countup (find (Random.float maxlevel) entries)
done;
List.iter (fun e -> Printf.printf "%s: %d\n" e.label e.freq) entries
;;
f365 ["1";"2";"3";"4";"5";"6"] [1.0;2.0;1.0;2.0;1.0;2.0] 100000;;
f365 ["sqrt1";"sqrt2";"sqrt3";"sqrt4";] [sqrt 1.0;sqrt 2.0;sqrt 3.0;sqrt 4.0] 100000;;

1: 11075
2: 22202
3: 11261
4: 22159
5: 11255
6: 22048
sqrt1: 16182
sqrt2: 22881
sqrt3: 28099
sqrt4: 32838
399デフォルトの名無しさん:2013/12/07(土) 06:21:43.14
>>365
偶数の目が奇数の目より二倍でやすいイカサマさいころ(_イカサマさいころの目) :-
    _乱数値 is random(9),
    nth0(_乱数値,[1,2,3,4,5,6,2,4,6],_イカサマさいころの目),!.

偶数の目が奇数の目より二倍でやすいイカサマさいころを実際に10万回ふって出た目の数を集計し出力する :-
    偶数の目が奇数の目より二倍でやすいイカサマさいころを実際にふって出た目の数を集計し([],[],[],[],[],[],[],Ln,_1,_2,_3,_4,_5,_6),
    length(Ln,100000),
    出力する(_1,_2,_3,_4,_5,_6).

偶数の目が奇数の目より二倍でやすいイカサマさいころを実際にふって出た目の数を集計し(Ln,_1,_2,_3,_4,_5,_6,Ln,_1,_2,_3,_4,_5,_6).
偶数の目が奇数の目より二倍でやすいイカサマさいころを実際にふって出た目の数を集計し(Ln_1,LL_1,Ln,LL) :-
    偶数の目が奇数の目より二倍でやすいイカサマさいころ(_イカサマさいころの目),
    出た目の数を集計し(_イカサマさいころの目,LL_1,LL_2),
    偶数の目が奇数の目より二倍でやすいイカサマさいころを実際にふって出た目の数を集計し([_|Ln_1],LL_2,Ln,LL).

出た目の数を集計し(_イカサマさいころの目,LL_1,LL_2) :-
    length([_|LL0],_イカサマさいころの目),
    append(LL0,[L|LL2],LL_1),
    append(LL0,[[_|L]|LL2],LL_2),!.

出力する(_1,_2,_3,_4,_5,_6) :-
    forall((nth1(_nth1,[_1,_2,_3,_4,_5,_6],L),length(L,_集計値)),
        writef('%t: %t\n',[_nth1,_集計値]).
400デフォルトの名無しさん:2013/12/07(土) 07:58:01.92
お題:一辺の長さがmの正三角形がある。ひとつの頂点に
長さnの糸がつながっている。まず糸をすべて正三角形に巻きつける。
糸をピンと張った状態でほどいていき、そのまま逆向きにすべてを
巻きつけた時の糸の先端の軌跡の長さを求める。小数点以下四捨五入。

m=100, n=200, -> 1466
401デフォルトの名無しさん:2013/12/07(土) 09:18:01.25
>>400 Squeak Smalltalk
| m n pi len |
m := 100.
n := 200.
pi := Float pi.
len := 2 * pi * n * (5 / 12).
[(n := n - m) > 0] whileTrue: [len := len + (2 * pi * n * (1 / 3))].
^(len * 2) rounded "=> 1466 "
402デフォルトの名無しさん:2013/12/07(土) 09:27:34.16
>>400 Haskell
import Data.Function
main :: IO ()
main = print $ f 200 100
f :: Double -> Double -> Double
f n m = ((+) `on` sum ) =<< tail $ zipWith arcLength ((2 * pi / 3) : repeat (5 * pi / 3)) $ takeWhile (> 0) $ iterate (+ (- m)) n
arcLength :: Num a => a -> a -> a
arcLength angle radius = angle * radius
403デフォルトの名無しさん:2013/12/07(土) 09:29:53.77
>>400 Haskell
import Data.Function
main :: IO ()
main = print $ f 200 100
f :: Double -> Double -> Double
f n m = ((+) `on` sum ) =<< tail $ zipWith (*) ((2 * pi / 3) : repeat (5 * pi / 3)) $ takeWhile (> 0) $ iterate (+ (- m)) n

arcLength いらねえ
404デフォルトの名無しさん:2013/12/07(土) 09:33:24.74
>>400 Haskell はい四捨五入 http://codepad.org/gJREKYA0
405デフォルトの名無しさん:2013/12/07(土) 10:48:39.16
>>365,371 Haskell INLINEつけたら0.2秒速くなったけど整理したら0.1秒遅くなった http://codepad.org/rfxdYxis
406デフォルトの名無しさん:2013/12/07(土) 11:29:21.99
>>400 ruby 1.8.6
考え方が良く分からなかったので、
折り返すとき1/2回転、それ以外1/3回転として考えた。

def rsts(x, y)
d, m = y.divmod(x)
rs = (1..d).inject([m]){|a, i|a << a.last + x}.delete_if{|r| r == 0}
rs = rs + rs.reverse
ts = Array.new(rs.size, 2 * Math::PI / 3)
ts[rs.size / 2] = 2 * Math::PI / 2 # 折り返し
[rs, ts]
end
def f400(n, m)
rs, ts = rsts(n, m)
rs.zip(ts).inject(0){|sum, (r, t)| sum += r * t}.round
end
p f400(100, 200)
407デフォルトの名無しさん:2013/12/07(土) 12:03:40.09
>>400 HSP
#module
#defcfunc calc2 double m, double n
if n<=0.0 : return 0.0
return calc2(m, n-m)+2.0*M_PI*n/3

#defcfunc calc double m, double n
return (calc2(m, n)+2.0*M_PI*n/12)*2
#global

mes strf("%.0f", calc(100, 200))
408デフォルトの名無しさん:2013/12/07(土) 12:09:15.18
>>400 Haskell 最初から2倍しておく http://codepad.org/NFZu6J2p
409デフォルトの名無しさん:2013/12/07(土) 12:13:03.80
>>400 ruby 1.8.6 良く考えたら半分計算して二倍でよかった。
def rsts(x, y)
d, m = y.divmod(x)
rs = (1..d).inject([m]){|a, i|a << a.last + x}.delete_if{|r| r == 0}
[rs, Array.new(rs.size - 1, 2 * Math::PI / 3) << 2 * Math::PI * 5 / 12]
end
def f400(n, m)
rs, ts = rsts(n, m)
(rs.zip(ts).inject(0){|sum, (r, t)| sum += r * t} * 2).round
end
p f400(100, 200)
410デフォルトの名無しさん:2013/12/07(土) 12:21:08.55
>>400 Haskell 後で2倍するのをパクって無駄に他の角度にも対応 http://codepad.org/UWbpvaSf 合ってるかは知らん
411デフォルトの名無しさん:2013/12/07(土) 12:37:41.03
>>400
仕上げは、一辺に沿っていていいのかな。
そうでないと何処まで戻せばよいかわからない。
412デフォルトの名無しさん:2013/12/07(土) 13:05:56.74
>>400 Haskell とりあえず正多角形の一つの角を渡すようにしてみた http://codepad.org/jfjOA3Ge 合ってるかはわからない
413デフォルトの名無しさん:2013/12/07(土) 13:21:02.73
>>400 Haskell 正p角形 http://codepad.org/vLdQKrop
414デフォルトの名無しさん:2013/12/07(土) 13:41:23.84
>>403は角度逆だったな糸の長さが短いから解けてたwwwwww
415デフォルトの名無しさん:2013/12/07(土) 13:45:38.79
俺ってケアレスミス多すぎでスレ汚しまくりだよなあ
これからはお題だけ拾って書き込むのは控えるわwwwwwwwwwwwwwwwwwwwwwww
416デフォルトの名無しさん:2013/12/07(土) 13:49:49.83
書き込んでから気付くんだよなぁ、不思議とw
417デフォルトの名無しさん:2013/12/07(土) 17:21:18.56
>>400 Io
f:=method(m,n,((1 atan*4)*(((((n-m)/m)floor)*n/3+n%m)*2+n*10/6))round)

Io> f(100,50)
==> 471
Io> f(100,250)
==> 2147
Io> f(100,920)
==> 20358
418デフォルトの名無しさん:2013/12/07(土) 19:47:18.38
>>159 HSP
#module
#deffunc swap var a, var b, local c
c=a : a=b : b=c
return
#deffunc odd_sort array data, local odd_data, local odd_num, local h, local is_changed, local odd_index
foreach data
if data(cnt) & 1 : odd_data(odd_num)=data(cnt) : odd_num++
loop
h=odd_num*10/13
repeat
is_changed=0
repeat odd_num-h
if odd_data(cnt)>odd_data(cnt+h) {
swap odd_data(cnt), odd_data(cnt+h)
is_changed=1
}
loop
if h>1 : h=h*10/13 : else : if is_changed=0 : break
loop
foreach data
if data(cnt) & 1 : data(cnt)=odd_data(odd_index) : odd_index++
loop
return
#global

data=37,61,86,9,81,50
odd_sort data
foreach data
mes data(cnt)
loop
419デフォルトの名無しさん:2013/12/08(日) 08:31:45.78
お題:この書き込みをネットから読み込むプログラム。
420デフォルトの名無しさん:2013/12/08(日) 10:28:30.62
>>419 ruby 1.8.6
require 'net/http'
puts Net::HTTP.get('toro.2ch.net', '/tech/dat/1357191974.dat').split("\n")[418]
421デフォルトの名無しさん:2013/12/08(日) 11:43:30.61
>>419 Squeak Smalltalk
| url contents |
url := 'http://toro.2ch.net/tech/dat/1357191974.dat'.
contents := (HTTPSocket httpGetDocument: url) contents convertFromEncoding: 'shift-jis'.
^contents lines at: 419
422デフォルトの名無しさん:2013/12/08(日) 13:24:45.38
>>419
@Mathematica

http://ideone.com/7OIWYn

In := twoChannelPicker["http://toro.2ch.net/test/read.cgi/tech/1357191974/",419]
Out = 419 名前: デフォルトの名無しさん Mail: sage 投稿日: 2013/12/08(日) 08:31:45.78

     お題:この書き込みをネットから読み込むプログラム。
423デフォルトの名無しさん:2013/12/08(日) 13:25:38.30
>>419 番外編
wget -q -O - http://toro.2ch.net/tech/dat/1357191974.dat | awk 'NR==419'
424デフォルトの名無しさん:2013/12/08(日) 15:58:58.40
>>419 R
cat(readLines(a)[419])

aには>>420さんと同じurlがはいっているのですが、リテラルとしてかくと
「リンクは禁止です」というエラーになって書き込みできませんでした。
425デフォルトの名無しさん:2013/12/08(日) 16:02:51.71
>>424
ninjaのレベルが低いんだろう。
URLをURLとして認識されないように途中で切って、文字列値として連結するように書けばおk
426424:2013/12/08(日) 16:17:20.41
>>425
どうもありがとうございます
427デフォルトの名無しさん:2013/12/08(日) 17:02:41.26
>>419 java 1.6
import java.util.*;
import java.io.*;
import java.net.*;
public class Odai419 {
public static void main(String[] args) throws Exception {
URL url = new URL("http://toro.2ch.net/tech/dat/1357191974.dat");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
List<String> lines = new ArrayList<String>();
for (String line = null; (line = in.readLine()) != null; ) {
lines.add(line);
}
System.out.println(lines.get(418));
}
}
428デフォルトの名無しさん:2013/12/08(日) 19:20:01.60
この書き込みをネットから「書き込む」プログラム

だったら解けなかったな。
429デフォルトの名無しさん:2013/12/08(日) 19:46:35.39
>>428
書き込むのはやめといたほうがいいw
運営にボット扱いされたら、フシアナ処理されるからw
俺それで一回リモホさらされて焦ったことあるw
430デフォルトの名無しさん:2013/12/08(日) 20:04:24.71
>>428
へー、そんなことあるんだ。

あぶない、あぶない。
431 ◆QZaw55cn4c :2013/12/08(日) 20:30:44.48
>>416
それよくわかる。プログラミングでも、いったん寝かせて(忘れるくらいの期間)熟成させないといけないらしい
432デフォルトの名無しさん:2013/12/09(月) 00:36:38.08
   |._番兵|_
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)cp udp tcp udp
433デフォルトの名無しさん:2013/12/09(月) 02:18:20.98
>>68 c++
#include <iostream>
#include <vector>
#include <algorithm>
char *shuffle68(char *cs) {
int len = strlen(cs);
if (len <= 1) return cs;

std::vector<int> is;
for (int i = 0; i < len; i++) is.push_back(i);
std::random_shuffle(is.begin(), is.end());
std::vector<int>::iterator it = is.begin();
if (3 <= is.size() && is.size() % 2) {
int i = *it++, j = *it++, k = *it++;
char csj = cs[j], csk = cs[k];
cs[j] = cs[i];cs[k] = csj;cs[i] = csk;
}
for (;it != is.end();) {
int i = *it++, j = *it++;
char csj = cs[j];
cs[j] = cs[i];cs[i] = csj;
}
return cs;
}
434デフォルトの名無しさん:2013/12/09(月) 02:19:03.34
>>433のつづき
void check(const char *cs) {
char *_cs = strdup(cs);
std::cout << cs << std::endl;
std::cout << shuffle68(_cs) << std::endl;
free(_cs);
}
int main() {
std::srand(unsigned(std::time(0)));
check("");
check("1");
check("12");
check("123456789");
return 0;
}
435デフォルトの名無しさん:2013/12/09(月) 14:49:39.96
お題:1から100をチャンパーノウン定数での出現順に(出現位置が同じ場合は
元のデータの順に)表示する。
436デフォルトの名無しさん:2013/12/09(月) 17:06:39.21
>>434
echo 112223334445556667778889991101121133114411551166117711881199220223224422552266227722882299330334335533663377338833994404454466447744884499
550556557755885599660667668866997707787799880889990100
437デフォルトの名無しさん:2013/12/09(月) 17:07:23.32
>>435
echo 112223334445556667778889991101121133114411551166117711881199220223224422552266227722882299330334335533663377338833994404454466447744884499550556557755885599660667668866997707787799880889990100
438デフォルトの名無しさん:2013/12/09(月) 18:23:34.30
お題:入力された手牌が最短で何向聴かとその役は何かを出力する。役なしの場合は役なしと表示する。
439デフォルトの名無しさん:2013/12/09(月) 18:51:23.01
>>435 Squeak Smalltalk
| champernowne |
champernowne := (1 to: 100) inject: '0.' into: [:acc :n | acc, n].
^((1 to: 100) collect: [:n | (champernowne findString: n asString) -> n]) sort collect: #value

=> #(1 12 2 23 3 34 4 45 5 56 6 67 7 78 8 89 9 91 10 11 21 13 31 14 41 15 51 16 61 17
71 18 81 19 92 20 22 32 24 42 25 52 26 62 27 72 28 82 29 93 30 33 43 35 53 36 63 37
73 38 83 39 94 40 44 54 46 64 47 74 48 84 49 95 50 55 65 57 75 58 85 59 96 60 66 76
68 86 69 97 70 77 87 79 98 80 88 99 90 100)
440デフォルトの名無しさん:2013/12/09(月) 19:22:54.72
>>435 ruby 1.8.6
s = (1..100).to_a.join
p (1..100).inject(Array.new(s.size){[]}) {|a, n| a[s.index(n.to_s)] << n; a}.flatten

[1, 12, 2, 23, 3, 34, 4, 45, 5, 56, 6, 67, 7, 78, 8, 89, 9, 91, 10, 11, 21, 13,
31, 14, 41, 15, 51, 16, 61, 17, 71, 18, 81, 19, 92, 20, 22, 32, 24, 42, 25, 52,
26, 62, 27, 72, 28, 82, 29, 93, 30, 33, 43, 35, 53, 36, 63, 37, 73, 38, 83, 39,
94, 40, 44, 54, 46, 64, 47, 74, 48, 84, 49, 95, 50, 55, 65, 57, 75, 58, 85, 59,
96, 60, 66, 76, 68, 86, 69, 97, 70, 77, 87, 79, 98, 80, 88, 99, 90, 100]
441デフォルトの名無しさん:2013/12/09(月) 20:41:01.79
>>435 HSP
sdim buf
repeat 100
buf+=str(cnt+1)
loop
repeat 100
p=instr(buf, 0, str(cnt+1))
addr(cnt)=(p<<8)|(cnt+1)
loop
for i, 0, 100-1
for j, 0, 100-1-i
if addr(j)>addr(j+1) {
t=addr(j)
addr(j)=addr(j+1)
addr(j+1)=t
}
next
next
repeat 100
mes addr(cnt)&$ff
loop
442デフォルトの名無しさん:2013/12/09(月) 21:22:08.66
>>435 c
#include <stdio.h>
int midnum435(int l, int r) {
while (10 <= r) r /= 10;
return (l % 10) * 10 + r;
}
int main() {
int i = 0, a, b, c;
char printed[101] = {0};
for (i = 1; i <= 100; i++) {
a = i;c = i + 1;b = midnum435(a, c);
if (!printed[a] && (printed[a] = 1)) printf("%d ", a);
if (!printed[b] && (printed[b] = 1)) printf("%d ", b);
if (!printed[c] && (printed[c] = 1)) printf("%d ", c);
}
return 0;
}

1 12 2 23 3 34 4 45 5 56 6 67 7 78 8 89 9 91 10 11 21 13 31 14 41 15 51 16 61 17
71 18 81 19 92 20 22 32 24 42 25 52 26 62 27 72 28 82 29 93 30 33 43 35 53 36 6
3 37 73 38 83 39 94 40 44 54 46 64 47 74 48 84 49 95 50 55 65 57 75 58 85 59 96
60 66 76 68 86 69 97 70 77 87 79 98 80 88 99 90 100
443デフォルトの名無しさん:2013/12/09(月) 22:11:33.39
>>435 HSP
sdim buf
repeat 100
buf+=str(cnt+1)
loop
l=strlen(buf)
dim flag, 100+1
repeat l
s=cnt
repeat 3, 1
n=int(strmid(buf, s, cnt))
if 1<=n and n<=100 {
if flag(n)=0 : mes n : flag(n)=1
}
loop
loop
444デフォルトの名無しさん:2013/12/09(月) 23:12:57.61
>>435
; Common Lisp
(mapcar #'cdr (sort (loop with n = 100
             for i from 1 to n
             for s = (prin1-to-string i)
             for champernowne = (concatenate 'string "0." s) then (concatenate 'string champernowne s)
             collect (cons (search s champernowne) i))
          #'< :key #'car))
445デフォルトの名無しさん:2013/12/10(火) 06:22:19.90
>>435 Io
Range
c:=1 to(100)asList join
1 to(100)map(i,list(c findSeq(i asString),i))sort map(last)
446片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/10(火) 11:43:40.64
お題:枠組みを決めて画像を貼り付けるだけで誰でも簡単にホームページが作れるソフト。
447 ◆QZaw55cn4c :2013/12/10(火) 12:38:06.70
448デフォルトの名無しさん:2013/12/10(火) 19:27:29.30
>>435 J
5 20 $ (/: (({.@I.@E.&":)"0 1 ([:;":&.>)))1+i.100
1 12 2 23 3 34 4 45 5 56 6 67 7 78 8 89 9 91 10 11
21 13 31 14 41 15 51 16 61 17 71 18 81 19 92 20 22 32 24 42
25 52 26 62 27 72 28 82 29 93 30 33 43 35 53 36 63 37 73 38
83 39 94 40 44 54 46 64 47 74 48 84 49 95 50 55 65 57 75 58
85 59 96 60 66 76 68 86 69 97 70 77 87 79 98 80 88 99 90 100
449デフォルトの名無しさん:2013/12/10(火) 20:20:27.26
お題:与えられた配列をなるべくN等分せよ。
要素の順番は入れ替えず、配列の配列として返す。
Nは1以上とする。
データ構造は、リスト、ベクタ、タプルなどでも可。

回答例およびチェック用出力例: ruby 1.8.6
def narudiv(a, n)
d, m = a.size.divmod(n)
(1..n).map {|i| a.slice!(0, d + (i <= m ? 1 : 0))}
end
p narudiv((1..10).to_a, 3)
p narudiv((1..15).to_a, 4)

[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15]]
450デフォルトの名無しさん:2013/12/10(火) 21:05:16.12
>>449 HSP
#module arr_mod m_data, m_data_num
#modfunc arr_add int data
m_data(m_data_num)=data
m_data_num++
return
#modcfunc arr_info local ret
ret=""
repeat m_data_num
if cnt : ret+=","
ret+=strf("%d", m_data(cnt))
loop
return ret
#deffunc arrdiv array result, array arr, int N, local i
dimtype result, 5
repeat N
newmod result, arr_mod
work=result.cnt
repeat limit(length(arr)*(cnt+1)/N-i, 0, $7fffffff)
arr_add work, arr(i)
i++
loop
loop
return
#deffunc result_disp array result
foreach result : mes strf("[%s]", arr_info(result(cnt))) : loop
return
#global

repeat 10 : arr(cnt)=cnt+1 : loop
arrdiv result, arr, 3
result_disp result
451デフォルトの名無しさん:2013/12/10(火) 23:22:14.96
>>449
; Common Lisp
; 末尾再帰ではないけれど
(defun narudiv (a n)
 (if (zerop n)
   nil
   (let ((d (ceiling (length a) n)))
    (cons (subseq a 0 d) (narudiv (subseq a d) (1- n))))))

(narudiv (loop for i from 1 to 10 collect i) 3) ; ((1 2 3 4) (5 6 7) (8 9 10))
(narudiv (loop for i from 1 to 15 collect i) 4) ; ((1 2 3 4) (5 6 7 8) (9 10 11 12) (13 14 15))
452デフォルトの名無しさん:2013/12/10(火) 23:22:36.51
>>449 J
f=:4 :'((1+<.((#y)%x)*i.1+x) +/@(=/) y)<;.1 y'

3 f 1+i.10
+-----+-----+--------+
|1 2 3|4 5 6|7 8 9 10|
+-----+-----+--------+
5 f 1+i.15
+-----+-----+-----+--------+--------+
|1 2 3|4 5 6|7 8 9|10 11 12|13 14 15|
+-----+-----+-----+--------+--------+
6 f 1+i.15
+---+-----+---+------+-----+--------+
|1 2|3 4 5|6 7|8 9 10|11 12|13 14 15|
+---+-----+---+------+-----+--------+
453デフォルトの名無しさん:2013/12/10(火) 23:29:18.98
>>449
-- Haskell
f449 :: Int -> [a] -> [[a]]
f449 n xs = if n >= 1 then f m xs
else error $ "invalid number: " ++ show n
where
(d, m) = length xs `divMod` n
f _ [] = []
f k ys = as : f (k - i) bs
where
i = signum k
(as, bs) = splitAt (d + i) ys

main = do
print $ f449 4 [1..15]
print $ f449 3 [1..10]
print $ f449 6 [1..10]
print $ f449 3 [1..9]
print $ f449 0 [1..9]
454デフォルトの名無しさん:2013/12/10(火) 23:57:27.34
>>449 Squeak Smalltalk
| naruDiv |
naruDiv := [:arr :N |
 | stream d m |
 stream := arr readStream.
 d := stream size // N.
 m := stream size \\ N.
 (1 to: N) collect: [:idx | stream next: d + (idx <= m ifTrue: [1] ifFalse: [0])]
].

naruDiv value: (1 to: 10) value: 3. "=> #(#(1 2 3 4) #(5 6 7) #(8 9 10)) "
naruDiv value: (1 to: 15) value: 4. "=> #(#(1 2 3 4) #(5 6 7 8) #(9 10 11 12) #(13 14 15)) "
455デフォルトの名無しさん:2013/12/11(水) 00:08:08.39
>>449 Io
Range
f := method(x, n,
a := x size / n
1 to(n) map(i, x slice((i - 1) * a, i * a))
)

Io> f(1 to(10)asList,3)
==> list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9, 10))
Io> f(1 to(15)asList,4)
==> list(list(1, 2, 3), list(4, 5, 6, 7), list(8, 9, 10, 11), list(12, 13, 14, 15))
456デフォルトの名無しさん:2013/12/11(水) 08:37:05.62
>>449
@Mathematica

almostEquallyDivide[lst_,n_]:=Module[{div1,div2},

  div1=lst//
    Quotient[Last[#],n]&//
    Table[#,{i,n}]&;

  div2=lst//
    Mod[Last[#],n]&//
    Table[1,{i,#}]&//
    PadRight[#,n]&;

  div1+div2//
    Accumulate//
    Prepend[#,0]&//
    Partition[#,2,1]&//
    Map[{#[[1]]+1,#[[2]]}&,#]&//
    Map[Take[lst,#]&,#]&
];

In := almostEquallyDivide[Range[1,10],3]
Out = {{1,2,3,4},{5,6,7},{8,9,10}}

In := almostEquallyDivide[Range[1,15],4]
Out = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15}}
457デフォルトの名無しさん:2013/12/11(水) 11:51:20.30
>>449
N=3で10要素だと、解は3通りあるけれど、1解で良いの?
458デフォルトの名無しさん:2013/12/11(水) 16:33:02.35
>>449 Haskell 必死でポイントフリーにした http://ideone.com/eRCuAm
459デフォルトの名無しさん:2013/12/11(水) 17:32:14.18
>>449 Haskell >>445のパクリ
g :: Float -> [a] -> [[a]]
g n xs = map (\i -> take (ceiling $ a) $ drop (ceiling $ (i - 1) * a) xs) [1..n]
  where a = (fromIntegral $ length xs) / n
460デフォルトの名無しさん:2013/12/11(水) 17:45:23.62
>>449
スーパー後出しジャンケン。C++ライク。
ttp://ideone.com/WyRFEM
適当に組んでそのまま動いちゃったのでバグが怖いなー。
461デフォルトの名無しさん:2013/12/11(水) 18:06:43.95
462デフォルトの名無しさん:2013/12/11(水) 18:13:27.54
>>419 Haskell http://ideone.com/PhZHeu 読み込むだけならSHIFT_JISX0213でも大丈夫
463デフォルトの名無しさん:2013/12/11(水) 20:35:07.70
>>449 c++
ttp://codepad.org/iEfBhyHD
少し出力してすぐ終わるプログラムなのでdeleteのケア一切なし。
ここに直接貼り付けようとしたらエラーが出て書き込めなかった。
464デフォルトの名無しさん:2013/12/11(水) 21:05:02.79
newを恐れないなんて、そこにシビれるあこがれる〜。
465デフォルトの名無しさん:2013/12/11(水) 21:53:52.27
お題:与えられた文字列中の各文字数をカウントして表示せよ。
表示順や形式は定めない。

回答例およびチェック用出力例: c
#include <stdio.h>
void check(const char *cs) {
int i, counts[256] = {0};
for (i = 0; cs[i] != '\0'; i++) counts[cs[i]] += 1;
for (i = 0; i < 256; i++) {
if (counts[i]) printf("'%c'=>%d, ", (char)i, counts[i]);
}
}
int main() {
check("We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.");
return 0;
}

' '=>16, ','=>2, '.'=>1, ':'=>1, 'W'=>1, 'a'=>7, 'b'=>1, 'c'=>2, 'd'=>2, 'e'=>14
, 'f'=>1, 'g'=>3, 'h'=>3, 'i'=>6, 'l'=>4, 'm'=>3, 'n'=>4, 'o'=>6, 'p'=>3, 'r'=>8
, 's'=>4, 't'=>6, 'u'=>4, 'v'=>2, 'w'=>1, 'y'=>1, 'z'=>1,
466デフォルトの名無しさん:2013/12/11(水) 22:18:55.97
>>465 Squeak Smalltalk
| str |
str := 'We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.'.
^str asBag sortedElements

=> {Character space->16 . $,->2 . $.->1 . $:->1 . $W->1 . $a->7 . $b->1 . $c->2 . $d->2 . $e->14 .
$f->1 . $g->3 . $h->3 . $i->6 . $l->4 . $m->3 . $n->4 . $o->6 . $p->3 . $r->8 .
$s->4 . $t->6 . $u->4 . $v->2 . $w->1 . $y->1 . $z->1}
467デフォルトの名無しさん:2013/12/11(水) 22:23:17.62
>>465
s="We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."
dim count, 256
repeat strlen(s)
count(peek(s, cnt))++
loop
foreach count
if count(cnt) : mes strf("'%c'->%d", cnt, count(cnt))
loop
468デフォルトの名無しさん:2013/12/11(水) 22:23:21.02
安価だらけと解釈されてBB2Cが荒らし扱いしよるぐぬぬ
469デフォルトの名無しさん:2013/12/11(水) 22:23:48.23
>>467
は HSP
470465:2013/12/11(水) 22:38:04.92
>>468
その点、マジすみません。書き込んだ直後にアッと思いました。
出力結果を省いていただくか、
">%d"の形にならないように出力していただければ幸いです…。
471デフォルトの名無しさん:2013/12/11(水) 22:51:05.35
>>465 J
load 'misc'
nubcount 'hello'
+-+-+
|h|1|
+-+-+
|e|1|
+-+-+
|l|2|
+-+-+
|o|1|
+-+-+
472デフォルトの名無しさん:2013/12/11(水) 23:01:25.92
JSで愚直に

var s="hello,world!!";var r={};for(var i=0 ; i<s.length ; i++){if(!r[s.charAt(i)])r[s.charAt(i)]=0;r[s.charAt(i)]++}console.log(r);

コンソール出力結果(改行省略)
!: 2 ,: 1 d: 1 e: 1 h: 1 l: 3 o: 2 r: 1 w: 1 __proto__: Object
473デフォルトの名無しさん:2013/12/11(水) 23:03:10.80
>>465 Io
Range
a:="hello";
0 to(a size-1)map(i,a at(i)asCharacter)uniqueCount
==> list(list("h", 1), list("e", 1), list("l", 2), list("o", 1))
474デフォルトの名無しさん:2013/12/11(水) 23:07:08.27
>>472>>465の解答でしたスマソ
謝罪ついでに12文字減らせたので改めて

>>465
var s="hello,world!!";var r={};for(var i=0 ; i<s.length ; i++){var t=s.charAt(i);if(!r[t])r[t]=0;r[t]++}console.log(r);

結果は>>472と同
475デフォルトの名無しさん:2013/12/11(水) 23:17:37.25
476デフォルトの名無しさん:2013/12/11(水) 23:47:59.67
477デフォルトの名無しさん:2013/12/11(水) 23:52:30.72
>>465 java 1.6
import java.util.*;
public class Odai465 {
private void check(String s) {
char[] cs = s.toCharArray();
Map<Character, Integer> map = new TreeMap<Character, Integer>();
for (int i = 0; i < cs.length; i++) {
Character c = new Character(cs[i]);
int last = !map.containsKey(c) ? 0 : map.get(c).intValue();
map.put(c, new Integer(last + 1));
}
System.out.println(map);
}
public static void main(String[] args) {
Odai465 odai = new Odai465();
odai.check("We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.");
}
}

{ =16, ,=2, .=1, :=1, W=1, a=7, b=1, c=2, d=2, e=14, f=1, g=3, h=3, i=6, l=4, m=
3, n=4, o=6, p=3, r=8, s=4, t=6, u=4, v=2, w=1, y=1, z=1}
478デフォルトの名無しさん:2013/12/12(木) 00:04:22.07
>>465
ttp://ideone.com/RyBLWT
C++もどき。移植にならないように気をつけた。表示もランキング方式にした。
最後のソートがGCCでうまく動かなくて泣きながらバブルソート実装した。
479デフォルトの名無しさん:2013/12/12(木) 00:51:06.28
お題:バブルソートとその変形であるコムソートの実行時間を比較する。
480478:2013/12/12(木) 00:56:34.49
あー、バブルソートで実装したのは時間なかったからだ。
For文2個覚えておけばいいので簡単なんだよ。計算量はともかく・・・。
481デフォルトの名無しさん:2013/12/12(木) 00:58:16.70
>>465 Clojure

(->> "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."
  seq sort (group-by identity) (map (fn [[k v]] [(str k) (count v)])))
482デフォルトの名無しさん:2013/12/12(木) 01:42:59.57
>>479
ttp://ideone.com/Hfv2Nf
C++ライク。
コムソートはえーな。初めて実装したわ。
しかし、Ideon俺より良いPC使ってんな。裏山。
483デフォルトの名無しさん:2013/12/12(木) 01:45:41.29
>>465
@Mathematica

countCharacters[str_]:=str//
  Characters//
  Tally;

In := countCharacters["We will encourage you to develop the three great
   virtues of a programmer: laziness, impatience, and hubris."]
Out = {{W,1},{e,14},{ ,16},{w,1},{i,6},{l,4},{n,4},{c,2},{o,6},{u,4},{r,8},
    {a,7},{g,3},{y,1},{t,6},{d,2},{v,2},{p,3},{h,3},{s,4},{f,1},{m,3},
    {:,1},{z,1},{,,2},{b,1},{.,1}}
484デフォルトの名無しさん:2013/12/12(木) 01:54:32.97
イテレータでコムソート実装するの面倒くさいな。俺の場合なんか汚くなるわ。
現状綺麗とは言わないがなるべく無駄は無いはずだ。いや、俺が無駄って話は置いといて・・・。

>>483
短っ!!
485デフォルトの名無しさん:2013/12/12(木) 02:19:12.10
アン ドゥ トロワ。・・・ポン!
魔法やがな。
486デフォルトの名無しさん:2013/12/12(木) 04:12:29.04
>>465 with python
//@@
strAt=("We will encourage you to develop the three great virtues of a programmer:"
"laziness, impatience, and hubris.")
dct={}
[dct.update({ch:dct[ch]+1}) if ch in dct else dct.update({ch:1}) for ch in strAt]
print sorted(zip(dct.keys(), dct.values()), key=lambda x:x[1])[::-1]
//@@@
[(' ', 16), ('e', 14), ('r', 8), ('a', 7), ('t', 6), ('o', 6), ('i', 6), ('u', 4),
('s', 4), ('n', 4), ('l', 4), ('p', 3), ('m', 3), ('h', 3), ('g', 3), ('v', 2),
('d', 2), ('c', 2), (',', 2), (':', 1), ('y', 1), ('w', 1), ('f', 1), ('z', 1),
('.', 1), ('W', 1), ('b', 1)]

one-liner だと書き込めないので ばらした
487デフォルトの名無しさん:2013/12/12(木) 06:14:55.15
>>478
バブルソートを覚えておくよりも、挿入ソートを覚えていた方が使い回しが利いたのに。
30年前、パソコンベーシックで実装されたマージャンゲームのツモったときの処理が最小値ソートで余りにも遅いので挿入ソートで置き換えた。
そこでお題、ツモったときに挿入ソートをすることには最小値ソートと比べてどんなメリットがあるか述べよ。なんてねw
今時なら、たった13個のデータのソートなんて何をどうしても誤差だからなぁ。
488デフォルトの名無しさん:2013/12/12(木) 08:51:42.53
>>487
ボゴソートなら誤差じゃ済まないZE!
489483:2013/12/12(木) 09:21:57.79
>>484,485
|∀・)ニヤニヤ

|彡サッ
490デフォルトの名無しさん:2013/12/12(木) 09:55:37.59
>>479 Squeak Smalltalk
| bubbleSort combSort |
bubbleSort := [:arr |
 arr size - 1 to: 1 by: -1 do: [:limit |
   1 to: limit do: [:idx |
     (arr at: idx) > (arr at: idx + 1) ifTrue: [arr swap: idx with: idx + 1]]].
  arr].

combSort := [:arr |
  | width size |
  width := size := arr size.
  [  width := width // 1.3 min: 1.
   [  | changed |
     changed := false.
     1 to: size - width do: [:idx |
      (arr at: idx) > (arr at: idx + width)
        ifTrue: [changed := true. arr swap: idx with: idx + width]].
   changed] whileTrue.
  width = 1] whileFalse.
  arr].

^{#bubble. bubbleSort. #comb. combSort} pairsCollect: [:sym :sort |
  | shuffled |
  shuffled := (1 to: 1000) asArray shuffled.
  sym -> [1000 timesRepeat: [sort value: shuffled]] timeToRun]

"=> {#bubble->13807 . #comb->80} "
491デフォルトの名無しさん:2013/12/12(木) 10:08:16.82
>>490
いろいろと間違っているみたいなので取り下げます。ごめんなさい。
492デフォルトの名無しさん:2013/12/12(木) 10:29:23.58
>>479 Squeak Smalltalk 訂正版。スレ汚しすみません。
| bubbleSort combSort |
bubbleSort := [:arr |
 arr size - 1 to: 1 by: -1 do: [:limit |
  1 to: limit do: [:idx |
    (arr at: idx) > (arr at: idx + 1) ifTrue: [arr swap: idx with: idx + 1]]].
 arr].

combSort := [:arr |
 | width size |
 width := size := arr size.
 [ | changed |
  changed := false.
  width := width // 1.3 min: 1.
  1 to: size - width do: [:idx |
   (arr at: idx) > (arr at: idx + width)
    ifTrue: [changed := true. arr swap: idx with: idx + width]].
 width = 1 and: [changed]] whileFalse.
 arr].

^{#bubble. bubbleSort. #comb. combSort} pairsCollect: [:sym :sort |
 sym -> [1000 timesRepeat: [sort value: (1 to: 1000) asArray shuffled]] timeToRun]

"=> {#bubble->36401 . #comb->671} "
493デフォルトの名無しさん:2013/12/12(木) 12:36:53.63
>>465
perl -e '$_=$ARGV[0]; while (/(.)/g) {$h{$1}++;} foreach (sort keys %h) {printf("\"%s\" => %s\n", $_, $h{$_});}' "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."
494デフォルトの名無しさん:2013/12/12(木) 13:35:32.22
>>492
すいません。コムソートがgdgdでした。三度目の正直…

combSort := [:arr |
 | width size |
 width := size := arr size.
 [ | changed |
  changed := false.
  width := width // 1.3 max: 1.
  1 to: size - width do: [:idx |
   (arr at: idx) > (arr at: idx + width)
    ifTrue: [changed := true. arr swap: idx with: idx + width]].
 width = 1 and: [changed not]] whileFalse.
 arr].

self assert: (combSort value: #(5 4 3 2 1)) isSorted.

結果も少し変わります。

"=> {#bubble->36993 . #comb->1817} "
495デフォルトの名無しさん:2013/12/12(木) 13:59:02.69
>>449,465 Haskell ドットをArrowの演算子に置き換えたのと>>459の修正 http://ideone.com/mTtjiC
496495:2013/12/12(木) 14:02:35.43
書き換える途中でミスったのか結果が違ってる
497495:2013/12/12(木) 14:09:54.34
最初のswapの位置を修正 http://ideone.com/mTtjiC
498デフォルトの名無しさん:2013/12/12(木) 14:22:30.52
>>479
#include "d3m.hsp"
#module
#deffunc swap var a, var b, local c
c=a : a=b : b=c : return
#deffunc bubble_sort array data, int data_num
repeat data_num-1
repeat data_num-1-cnt
if data(cnt)>data(cnt+1) : swap data(cnt), data(cnt+1)
loop
loop
return
#deffunc comb_sort array data, int data_num, local h, local f
h=data_num*10/13
repeat
f=0
repeat data_num-h
if data(cnt)>data(cnt+h) : swap data(cnt), data(cnt+h) : f=1
loop
if h>1 : h=h*10/13 : else : if f=0 : break
loop
return
#global
#const DATA_NUM 10000
dim data_org, DATA_NUM : dim data, DATA_NUM
repeat DATA_NUM : data_org(cnt)=rnd(10000) : loop
memcpy data, data_org, 4*DATA_NUM
s=d3timer() : bubble_sort data, DATA_NUM : e=d3timer()
mes strf("bubble_sort %.3f [sec]", 0.001*(e-s))
memcpy data, data_org, 4*DATA_NUM
s=d3timer() : comb_sort data, DATA_NUM : e=d3timer()
mes strf("comb_sort %.3f [sec]", 0.001*(e-s))
499デフォルトの名無しさん:2013/12/12(木) 14:26:19.47
>>479 Haskell リストではコムソートをそのままの意味で実装するのは無理っぽいのでパス
500デフォルトの名無しさん:2013/12/12(木) 14:42:19.34
また忘れてた
>>498 は HSP
501デフォルトの名無しさん:2013/12/12(木) 15:04:08.24
>>465
@Python 2.7

def countCharacters(string):

  def characters(string):
    lst = []
    for i in range(0,len(string)):
      lst = lst + [string[i]]
    return lst

  def tally(lst):  
    import collections
    cnt = collections.Counter()
    for number in lst:
      cnt[number] += 1
    return map(lambda x: list(x), cnt.items())
  
  return tally(characters(string))

print countCharacters("We will encourage you to develop the three great ¥
virtues of a programmer: laziness, impatience, and hubris.")

[[' ', 16], [',', 2], ['.', 1], [':', 1], ['W', 1], ['a', 7], ['c', 2],
['b', 1], ['e', 14], ['d', 2], ['g', 3], ['f', 1], ['i', 6], ['h', 3],
['m', 3], ['l', 4], ['o', 6], ['n', 4], ['p', 3], ['s', 4], ['r', 8],
['u', 4], ['t', 6], ['w', 1], ['v', 2], ['y', 1], ['z', 1]]
502デフォルトの名無しさん:2013/12/12(木) 17:04:46.24
お題:再帰を使わずにアッカーマン関数を書け。
503デフォルトの名無しさん:2013/12/12(木) 17:53:05.51
>>479
; Common Lisp
あっている……はず!
http://ideone.com/nw5Qy7
504デフォルトの名無しさん:2013/12/12(木) 18:15:34.55
>>487
ウィキペディア情報だと計算量が挿入ソートはオーダーがN^2なので、俺の書いたバブルソートより遅いよ。
俺の書いた最速バブルソートはオーダーはN*(N/2-1)位なので多少早い。ホント微妙に。
シェルソートにすればいいんだろうけど、単純さでバブルソート最強説をとるね。
それに記憶に刻まれてて変えるのも難しい。でも、コムソートはぜひ覚えたい位の計算オーダーだな。
505 ◆QZaw55cn4c :2013/12/12(木) 18:26:58.56
>>504
>オーダーはN*(N/2-1)位
それもΟ(N^2) というんだよ
挿入ソートもバブルソートもΟ(N^2) という意味では同等
506デフォルトの名無しさん:2013/12/12(木) 18:30:41.44
>>502 HSP
#module
#defcfunc ack int m, int n
switch m
case 0 : return n+1
case 1 : return 2+(n+3)-3
case 2 : return 2*(n+3)-2
case 3
if n<=28 : return (1<<(n+3))-3
swbreak
case 4
if n=0 : return 13
if n=1 : return 65533
swbreak
case 5
if n=0 : return 65533
swbreak
swend
mes "Overflow"
return -1
#global

mes ack(3, 28)
507デフォルトの名無しさん:2013/12/12(木) 18:32:01.97
>>504
オーダー記法分かって無いだろwww
508デフォルトの名無しさん:2013/12/12(木) 18:32:19.74
>>465
python3
s = "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."
[print('{}: {}'.format(char, s.count(char))) for char in set(s)]
509508:2013/12/12(木) 18:34:58.23
こっちのほうが見やすいか
print(['{}: {}'.format(char, s.count(char)) for char in set(s)])
510デフォルトの名無しさん:2013/12/12(木) 18:44:57.56
>>504
ソート済み配列に一データ追加する場合のコストを比較してみよう。
511デフォルトの名無しさん:2013/12/12(木) 18:45:23.00
>>505
あれ?そうなの??
一応N^2の半分位のオーダーになってるんだけどな。
うーん。残念だ。
512デフォルトの名無しさん:2013/12/12(木) 18:48:21.42
オーダー記法では、O(N) = O(N/2)だな。
513デフォルトの名無しさん:2013/12/12(木) 18:50:21.74
>>511
(N^2)/1000 だろうが (N^2)*1000 だろうが係数は無視して O(N^2) って表現することになってる
514デフォルトの名無しさん:2013/12/12(木) 18:50:36.50
>>510
末尾に一個何らかの値をプッシュバックした場合のソートだと挿入ソートはブロックで移動するので多少マシかな。
でもソート済み判定を途中で入れるとなるとそれはそれで処理食うし。よほどデータ量無いとあんまりペイしないなー。
515デフォルトの名無しさん:2013/12/12(木) 18:58:48.81
>>512-513
おぉ。こりゃ勉強になる。
もっと厳密な値だと思ってたよ。
そんなにアバウトだったのか・・・。

説明すると、二重ループの外側はNなんだけど、
内側は外側のカウンタと同じ値まではソート済みなので、内側の開始条件が外側のカウンタから始めても問題無い。
っていう改良なんだけど。なので、内側は、平均でN/2になるんだよ。
スワップ回数でオーダー測ってると思ってたんだけど、どういう計算なんだろう?
わからなくなってきた。
516デフォルトの名無しさん:2013/12/12(木) 19:06:30.21
>>465 ruby 1.8.6
def f465(s)
s.scan(/./).inject(Hash.new(0)) {|h, c| h[c]+= 1; h}.sort.map{|a| '('+a.join+')'}.join
end
puts f465("We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.")

( 16)(,2)(.1)(:1)(W1)(a7)(b1)(c2)(d2)(e14)(f1)(g3)(h3)(i6)(l4)(m3)(n4)(o6)(p3)(r
8)(s4)(t6)(u4)(v2)(w1)(y1)(z1)

>>465 Objective Caml version 3.08.1
module CharMap = Map.Make (Char);;
let countup c m =
let n = if CharMap.mem c m then succ (CharMap.find c m) else 1 in
CharMap.add c n m;;
let s2cs s =
let rec _s2cs i l = if i < 0 then l else _s2cs (i - 1) (s.[i] :: l) in
_s2cs (String.length s - 1) [];;
let f465 s =
let m = List.fold_left (fun m c -> countup c m) CharMap.empty (s2cs s) in
CharMap.iter (fun key value -> Printf.printf "(%c%d)" key value) m;;
f465 "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.";;

( 16)(,2)(.1)(:1)(W1)(a7)(b1)(c2)(d2)(e14)(f1)(g3)(h3)(i6)(l4)(m3)(n4)(o6)(p3)(r
8)(s4)(t6)(u4)(v2)(w1)(y1)(z1)
517デフォルトの名無しさん:2013/12/12(木) 19:23:58.23
>>502 Squeak Smalltalk
| Ack |
Ack := [:m :n |
 m caseOf: {
  [0]->[n+1].
  [1]->[n+2].
  [2]->[2*n+3].
  [3]->[(2 raisedTo: n+3)-3].
  [4]->[((2 to: n+3) inject: 2 into: [:acc :idx | 2 raisedTo: acc])-3]}
].

Ack value: 4 value: 0. "=> 13 "
Ack value: 4 value: 1. "=> 65533 "
Ack value: 4 value: 2. "=> 2003529930...5719156733 "
518デフォルトの名無しさん:2013/12/12(木) 19:24:35.74
俺のこの無知をさらけ出した時のしらけ感。
もっとナジって。あはぁーん。
519デフォルトの名無しさん:2013/12/12(木) 20:34:52.56
Smalltalkの速度は今どのくらい出るん?
JITコンパイラ入った?
520デフォルトの名無しさん:2013/12/12(木) 20:53:34.59
>>519
JIT は
VisualWorks(商用処理系)はずいぶん前から入ってます。
Squeak やその派生の Pharo には CogVM という名前で2年くらい前に入りました。

単純なフィボナッチベンチだと、VW が C と同等、Squeak で3倍遅いくらいでしょうか。
http://d.hatena.ne.jp/sumim/20100621/p1
521デフォルトの名無しさん:2013/12/12(木) 22:12:17.00
ぱーりん・のいず!
522デフォルトの名無しさん:2013/12/13(金) 00:49:34.00
>>479 c
数年前にその二つのソートをcで書いてたので基本的にコピペ。
時間経過はとりあえずclock()で測ったがベストかどうか不明。
あと、バブルソートが遅すぎるのでバグっているのかもしれない。

ttp://codepad.org/WH8cwslm
配列の要素数を30000にしたらタイムアウト。

ttp://ideone.com/8wYrg9
サイトを変えたがタイムアウト。
要素数だけ25000に変更したら結果を出してくれたが、
バブルソートが遅すぎて比較にならない。

ちなみに、テスト環境では要素数30000で、
qsort: 0.015000
bsort: 20.266000
csort: 0.047000
という具合。
523デフォルトの名無しさん:2013/12/14(土) 03:07:34.35
お題:このスレの次スレを検索する
次スレのスレタイ:「プログラミングのお題 Part2」「プログラミングの問題を出すスレ」
スレタイリスト(http://toro.2ch.net/tech/subject.txt)を適当に編集してシミュレートせよ
出力:候補ベスト3に入るようにせよ(以下例)
1. プログラミングの問題を出すスレ
2. プログラミングのお題 Part2
3. 日本語プログラミング言語『なでしこ』スレ5
524デフォルトの名無しさん:2013/12/14(土) 11:35:49.55
よくわかんないな
525デフォルトの名無しさん:2013/12/14(土) 13:04:41.36
526523:2013/12/14(土) 22:00:11.44
http://codepad.org/IFZVDlxT
アルゴリズムの指定はありません
これでダメだったら無視してください
527デフォルトの名無しさん:2013/12/15(日) 00:27:10.21
つまり、スレタイリストからこのスレに似てるタイトルを
3つ抽出せよ。アルゴリズムは問わない。とかそんな感じ?
528デフォルトの名無しさん:2013/12/15(日) 00:38:46.06
その通りです
529デフォルトの名無しさん:2013/12/15(日) 02:02:56.75
# -*- coding: UTF-8 -*-
# ruby1.9.3
a=["推薦図書/必読書のためのスレッド 71",
"Windowsストアアプリ開発について語れ",
"C#,C#の宿題片付けます。",
"C言語なら俺に聞け(入門編)Part 123",
"バージョン管理システムについて語るスレ9",
"プログラミングの問題を出すスレ",
"C++相談室 part108",
"プログラミングのお題 Part2",
"C言語なら俺に聞け(入門編)Part 122",
"VBScriptについて必死に話し合うスレ",
"Lisp Scheme Part37",
"構造化ウェブプログラミング言語Dart2"]

b="プログラミングのお題スレ".split('')
c=a.map { |e|[e.size-(e.split('')-b).size,e]}.sort.reverse[0,3].map { |e| puts e[1] }
530デフォルトの名無しさん:2013/12/15(日) 09:20:58.88
>>528
ああ、わかった、わかった。
スレタイリストにこのスレの次スレタイトル案を加えて
たとえ細部の表現が多少変わった場合でも
それが上位に来るようなソートができるコードを書けっていう
そういうことね。
531デフォルトの名無しさん:2013/12/15(日) 11:56:33.26
つまりレーベンシュタイン距離ね
532デフォルトの名無しさん:2013/12/15(日) 18:01:17.91
>>530
そうです。説明が雑すぎました
533デフォルトの名無しさん:2013/12/15(日) 19:53:08.49
534デフォルトの名無しさん:2013/12/15(日) 20:16:35.32
お題:与えられた正の整数を2進文字列表現で出力せよ。

回答例およびチェック用出力例: c
#include <stdio.h>
#include <limits.h>
void printbits(unsigned int n) {
int i;
for (i = sizeof (int) * 8 - 1; 0 <= i; i--) {
printf("%c", n & (1 << i) ? '1' : '0');
}
puts("");
}
void check(unsigned int n) {
printf("%u\n", n);
printbits(n);
}
int main() {
check(0);
check(1);
check(UINT_MAX);
return 0;
}

0
00000000000000000000000000000000
1
00000000000000000000000000000001
4294967295
11111111111111111111111111111111
535534:2013/12/15(日) 20:31:17.94
捕捉:
文字列左側はゼロで埋めても埋めなくてもいい。
00000000000000000000000000000001
でなくて、
1
でもいい。
536デフォルトの名無しさん:2013/12/15(日) 21:37:46.21
>>534 C++
#include <iostream>
#include <limits>
#include <string>
#include <bitset>
using namespace std;
template <typename Integer> string binary_string(Integer n) {
return bitset<sizeof(n) * 8>(n).to_string();
}
template <typename Integer> void test_binary_string(Integer n) {
cout << n << " -> " << binary_string(n) << endl;
}
int main() {
test_binary_string('A');
test_binary_string(L'あ');
test_binary_string<unsigned short>(54321);
test_binary_string(0);
test_binary_string(1);
test_binary_string(numeric_limits<unsigned int>::max());
test_binary_string(0xaaaaaaaaaaaaaaaa);
}
537デフォルトの名無しさん:2013/12/15(日) 21:45:12.75
>>534
#module
#defcfunc binary_str int x, local buf
sdim buf
repeat 32
if x & (1<<(31-cnt)) : buf+="1" : else : buf+="0"
loop
return buf
#global

mes binary_str(0)
mes binary_str(1)
mes binary_str(4294967295)
538デフォルトの名無しさん:2013/12/15(日) 22:16:11.30
>>534
#ruby1.9.3
p 123.to_s(2)
539デフォルトの名無しさん:2013/12/16(月) 01:27:55.93
>>534 Prolog

'与えられた正の整数を2進文字列表現で出力せよ。'(_与えられた正の整数) :-
    与えられた正の整数を(_与えられた正の整数),
    '2進文字列表現で'(_与えられた正の整数,[],_2進文字列表現),
    出力せよ(_2進文字列表現).

与えられた正の整数を(_与えられた正の整数) :-
    integer(_与えられた正の整数),
    _与えられた正の整数 > 0.

'2進文字列表現で'(0,L,_2進文字列表現) :-
    atomic_list_concat(L,_2進文字列表現),!.
'2進文字列表現で'(_正の整数,L,_2進文字列表現) :-
    _2で割った商 is _正の整数 // 2,
    _2で割った剰余 is _正の整数 mod 2,
    '2進文字列表現で'(_2で割った商,[_2で割った剰余|L],_2進文字列表現).

出力せよ(_2進文字列表現) :-
    writef('%t\n',[_2進文字列表現]).
540デフォルトの名無しさん:2013/12/16(月) 01:31:09.51
お題:正方形領域[i,j]内部の点(x,y)を{ 100*i <= x < 100*(i+1) , 100*j <= y < 100*(j+1) }と定義します。
単調増加もしくは単調減少関数であるy=f(x)が通過する正方形領域[i,j]を全て求めよ。
541540:2013/12/16(月) 01:34:26.95
補足 y=f(x) の定義域はx0<=x<=x1としますw
542540:2013/12/16(月) 01:43:56.52
もう1つ補足 i,jは整数です
543デフォルトの名無しさん:2013/12/16(月) 02:00:23.20
すみません問題を整理します。
i,jは整数、 x,yは実数、 領域[i,j]内部の点(x,y)を100*i<=x<100*(i+1),100*j<=y<100*(y+1)と定義する。
定義域がx0 <= x <=x1である単調関数y=f(x) が通過する領域[i,j]を全て求めよ。
544デフォルトの名無しさん:2013/12/16(月) 02:01:30.09
うぅああもうやになった100*(y+1)は100*(j+1)です
545デフォルトの名無しさん:2013/12/16(月) 09:02:41.51
546デフォルトの名無しさん:2013/12/16(月) 10:51:14.62
>>534
ほぼそのままだが、printbitsの変数がビットパターンになってるのが好き。
登場する型名が unsigned int に統一されるのも気持ちいい。
/*前略*/
#define ___ /* empty */
void printbits(unsigned int n) {
___ unsigned int bit;
___ ___ for (bit = 1U << (sizeof(unsigned int)*8 - 1); bit>=1U; bit>>=1) { /* MSB to LSB */
___ ___ printf("%c", n & bit ? '1' : '0');
___ }
___ puts("");
}
/*後略*/
547デフォルトの名無しさん:2013/12/16(月) 10:51:46.66
↑インデント間違えたw
548デフォルトの名無しさん:2013/12/16(月) 11:54:27.86
printf("%c", ...)はfputc(..., stdout)にしたいところだな。
549デフォルトの名無しさん:2013/12/16(月) 13:09:52.93
>>523 Squeak Smalltalk
| key titles |
key := 'プログラミングのお題スレ'.
titles := #('推薦図書/必読書のためのスレッド 71'
'Windowsストアアプリ開発について語れ'
'C#,C#の宿題片付けます。'
'C言語なら俺に聞け(入門編)Part 123'
'バージョン管理システムについて語るスレ9'
'プログラミングの問題を出すスレ'
'C++相談室 part108'
'プログラミングのお題 Part2'
'C言語なら俺に聞け(入門編)Part 122'
'VBScriptについて必死に話し合うスレ'
'Lisp Scheme Part37'
'構造化ウェブプログラミング言語Dart2').
(titles sortBy: [:a :b | (a alike: key) > (b alike: key)]) asArray first: 3

=> #('プログラミングのお題 Part2'
'プログラミングの問題を出すスレ'
'VBScriptについて必死に話し合うスレ')
550デフォルトの名無しさん:2013/12/16(月) 13:11:08.86
>>534 Squeak Smalltalk
4294967295 radix: 2

=> '11111111111111111111111111111111'
551デフォルトの名無しさん:2013/12/16(月) 15:50:35.64
552デフォルトの名無しさん:2013/12/16(月) 18:55:42.61
>>534 JDK1.0.2以降
String s = Integer.toBinaryString(Integer.MAX_VALUE);
553デフォルトの名無しさん:2013/12/16(月) 20:44:05.68
>>534 Haskell if'を定義してg534もポイントフリー化 http://ideone.com/nyZAPT
554デフォルトの名無しさん:2013/12/16(月) 21:56:34.76
555片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/16(月) 22:09:42.00
お題:円の中心点と半径が与えられるとき、その円と円の内部に
含まれる格子点(座標成分がすべて整数になる点)の個数を数える。
例)
? 1 1 1
5
? 0.5 0.5 1
4
556片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/16(月) 22:24:10.88
お題:球の中心点と半径が与えられるとき、その球面と球の内部に
含まれる格子点(座標成分がすべて整数になる点)の個数を数える。
例)
? 1 1 1 1
7
? 0.5 0.5 0.5 1
8
557デフォルトの名無しさん:2013/12/16(月) 22:42:02.70
558デフォルトの名無しさん:2013/12/16(月) 22:43:33.75
559片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/16(月) 22:53:26.55
bool inside(double x,double y,double x0,double y0,double r0)
{
return (x - x0)*(x - x0)+(y - y0)*(y - y0)<=r0*r0;
}
int count(double x0,double y0,double r0)
{
int c=0;
for (int y=y0-r0; y<=y0+r0+1; y++)
for (int x=x0-r0; x<=x0+r0+1; x++)
if (inside(x,y,x0,y0,r0))c++;
return c;
}
560片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/16(月) 22:55:43.10
種明かしみたいで嫌なんですけど
561デフォルトの名無しさん:2013/12/16(月) 23:26:17.87
>>556 Squeak Smalltalk
| latticePointsInSphere |
latticePointsInSphere := [:ori :r |
 | x0 y0 z0 range count |
 x0 := ori first. y0 := ori second. z0 := ori third.
 count := 0.
 ((range := r negated to: r) + x0) floor do: [:x |
  (range + y0) floor do: [:y |
   (range + z0) floor do: [:z |
    (x - x0 raisedTo: 2) + (y - y0 raisedTo: 2) + (z - z0 raisedTo: 2) <= (r * r)
     ifTrue: [count := count + 1]]]].
 count].

latticePointsInSphere value: #(1 1 1) value: 1. "=> 7 "
latticePointsInSphere value: #(0.5 0.5 0.5) value: 1. "=> 8 "
562デフォルトの名無しさん:2013/12/16(月) 23:58:01.07
>>534 Objective Caml version 3.08.1
let char_of_bits_at bits pos = if (bits land (1 lsl pos)) != 0 then '1' else '0';;
let chars_of_bits bits =
let rec f a pos =
if pos < 0 then a else f (char_of_bits_at bits pos::a) (pred pos) in
f [] 31;;
let f534 n =
print_int n;print_newline ();
List.iter (fun c -> print_char c) (List.rev (chars_of_bits n));
print_newline ();;
f534 0;;
f534 1;;
f534 Pervasives.max_int;;

0
00000000000000000000000000000000
1
00000000000000000000000000000001
1073741823
00111111111111111111111111111111
563デフォルトの名無しさん:2013/12/17(火) 00:11:52.06
564デフォルトの名無しさん:2013/12/17(火) 01:09:27.90
お題:まず、適当に32ビット整数Xを決めて引数がXと同じなら0を、Xより
大きければ1を小さければ-1を返すaboutX関数を用意します。
この関数を使ってXを求める。
565デフォルトの名無しさん:2013/12/17(火) 01:40:22.04
566デフォルトの名無しさん:2013/12/17(火) 01:59:21.32
>>564
むか〜しの雑誌(初歩のラジオ)で、
「(BASICで書いた)aboutXがたまにウソをつく用に改変し、
 (人間が)その関数を使ってXを求めてみよ」
ってのがあったよ。
567565:2013/12/17(火) 02:04:24.56
負の整数に対応できてなかった
568デフォルトの名無しさん:2013/12/17(火) 02:15:08.71
>>555 ruby 1.8.6
class CircleBounds
def initialize(x, y, r)
@x, @y, @r = x, y, r
end
def contains(x, y)
(@x - x) ** 2 + (@y - y) ** 2 <= @r ** 2
end
end
def f555(x, y, r)
bounds = CircleBounds.new(x, y, r)
def irange(a, b) (a - b).to_i..(a + b).to_i end
xsys = irange(x, r).inject([]) {|a, ix| irange(y, r).inject(a) {|a, iy| a << [ix, iy]}}
points = xsys.select {|(x, y)| bounds.contains(x, y)}
p points.size
end
f555 1, 1, 1
f555 0.5, 0.5, 1

5
4
569デフォルトの名無しさん:2013/12/17(火) 02:17:44.49
>>564
ttp://ideone.com/1IiTrt
C++もどき。なるべく無駄口は叩かないようにするよ。
俺が天然なのは仕様なので荒れちゃうみたいだし。
今回は、メイン処理とジャッジを分けてみた。
570565:2013/12/17(火) 02:30:45.97
>>569を参考にした。Word32が符号なしInt32らしいのでそれを使う http://ideone.com/sMoqbQ
571デフォルトの名無しさん:2013/12/17(火) 02:59:48.69
>>564 ruby 1.8.6
定番の解き方があるのかないのか分からないまま、
直感で加速させた。眠い時に書くとだいたいこうなる。
class C564
def initialize()
@x = rand(2147483647)
end
def aboutX(y)
@x == y ? 0 : @x < y ? 1 : -1
end
def answer
@x
end
end
obj = C564.new
i, a = 0, 1
while true
c = obj.aboutX(i)
break if c == 0
if 0 < c
a = 0 < a ? - 1 : a - 1
else
a = a < 0 ? 1 : a + 1
end
i += a
end
p i, obj.answer
572デフォルトの名無しさん:2013/12/17(火) 03:05:07.08
>>564
ttp://ideone.com/10zVme
C++ライク。負の整数に対応しないといけないっぽいので対応。
参考にされるのは正直嬉しい。<3
573デフォルトの名無しさん:2013/12/17(火) 03:09:48.24
>>564 HSP
#module
#deffunc aboutX_set int x
s_ans=x
return

#defcfunc aboutX int x
if x<s_ans : return -1
return x>s_ans
#global

aboutX_set -123456
s=$80000000
e=$7fffffff
repeat
c=(s+e)/2
r=aboutX(c)
if r=0 : break
if r>0 : e=c-1 : else : s=c+1
loop
mes c
574デフォルトの名無しさん:2013/12/17(火) 03:15:59.92
>>564 HSP
>>573 の s+e が int の範囲を超える場合にバグってたのを修正
#module
#deffunc aboutX_set int x
s_ans=x
return
#defcfunc aboutX int x
if x<s_ans : return -1
return x>s_ans
#global

aboutX_set $7fffffff
s=$80000000
e=$7fffffff
repeat
c=int((double(s)+e)/2) // 修正
r=aboutX(c)
if r=0 : break
if r>0 : e=c-1 : else : s=c+1
loop
mes c
575565:2013/12/17(火) 03:40:55.38
>>564 Haskell わからないので絶対値をとって対応 http://ideone.com/g0sBYk
576565:2013/12/17(火) 07:00:09.44
32bitのInt 解けないのでボツ
577デフォルトの名無しさん:2013/12/17(火) 12:56:04.52
>>564 Squeak Smalltalk
| aboutX genAboutX guess max min sign |
genAboutX := [:X | [:arg | (arg - X) sign]].
aboutX := genAboutX value: 928790609.

min := -1 << 31. max := 1 << 31 - 1.
guess := (min to: max) atRandom.

[(sign := aboutX value: guess) = 0] whileFalse: [
 sign < 0 ifTrue: [min := guess] ifFalse: [max := guess].
 guess := (min + max) // 2].

^guess "=> 928790609 "
578デフォルトの名無しさん:2013/12/17(火) 15:40:11.96
>>564 Haskell 上限下限のある数値に慣れる必要がある http://ideone.com/cE4rDX
579デフォルトの名無しさん:2013/12/17(火) 17:42:42.20
ARDUINOを使ってアナログ入力信号3つを、それぞれの信号の大きさで3段階に分けて3つのピンに出力させたいのですがまったくできません
お願いします

アナログIN→A/D変換→デジタルOUT
この動作を3つのピンでしたいのです
A0→D9
A1→D10
A2→D11
このピンになる様にしたいです
580デフォルトの名無しさん:2013/12/17(火) 17:48:55.66
何がしたいのお前?
581デフォルトの名無しさん:2013/12/17(火) 18:13:53.54
スレ違いっぽいけど適当にググった
http://arduino.cc/en/Reference/analogRead
http://arduino.cc/en/Reference/pinMode
analogRead(pin)で返ってくる[0, 1023]の値を341で分けて
適当にpinMode(pin, mode)すればいい
582デフォルトの名無しさん:2013/12/17(火) 18:28:15.54
>>564 c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
int nextint() {
return (rand() % 2 ? 1 : -1) * rand();
}
int aboutX(int x, int y) {
return x == y ? 0 : x < y ? 1 : -1;
}
int main() {
srand(time(NULL));
int x = nextint();
int low = INT_MIN, mid, high = INT_MAX, cmpvalue;
while (low <= high) {
mid = low / 2 + high / 2;
cmpvalue = aboutX(x, mid);
if (cmpvalue == 0) break;
else if (cmpvalue > 0) high = mid - 1;
else if (cmpvalue < 0) low = mid + 1;
}
printf("%d %d\n", x, mid);
return 0;
}
583デフォルトの名無しさん:2013/12/17(火) 18:29:14.18
digitalWriteで出力か
どちらにせよ書いてある通りにやってできない理由があるならそれをどうにかすればいいだけだろう
584デフォルトの名無しさん:2013/12/17(火) 18:31:17.05
>>582
先に半分にすればいいのか。全く気付かなかった
585デフォルトの名無しさん:2013/12/17(火) 18:34:51.04
やってみたけどなぜか上手くいかなかった
586デフォルトの名無しさん:2013/12/17(火) 23:03:30.96
x = 2147483647
2147483647 / 2 = 1073741823
mid = 1073741823 + 1073741823 = 2147483646
x == 2147483646 -> False
以下ループ
587デフォルトの名無しさん:2013/12/17(火) 23:30:50.02
>>575
>>572のコードは、整数って0を分岐点にして増減の性質の対称性があるわけね。
プラスでもマイナスでも増えるっていうことは、+の動作なんよ。減るっていうことは-の動作なんよ。
ちょっと表現難しいけど。
んで、もし数字がマイナス側だったらフラグで対称性をひっくり返してやって、プラス動作と同等のことをやってる。
まぁ、短いコードだからこういうフェークが使えるんだよな。
588デフォルトの名無しさん:2013/12/18(水) 00:29:01.27
なるほど
589デフォルトの名無しさん:2013/12/18(水) 11:07:34.36
http://i.imgur.com/0AoVGDO.jpg
http://i.imgur.com/uoYlQbT.jpg

誰か教えてください
ポインタ難しいです
590デフォルトの名無しさん:2013/12/18(水) 13:54:15.69
>>589 HSP
a=12
p_a=varptr(a)
b=3.45
p_b=varptr(b)

disp "a", "%d", a
disp "p_a", "0x%08X", p_a
disp "b", "%.2f", b
disp "p_b", "0x%08X", p_b
stop
#deffunc disp str name, str fmt, var x
mes strf("%s のアドレスは 0x%08X", name, varptr(x))
mes strf("%s の値は、"+fmt, name, x)
return
591デフォルトの名無しさん:2013/12/18(水) 13:59:57.18
>>589 HSP
c='A'
p=varptr(c)
dupptr pc, p, 4
mes strf("%c", pc)
pc+=2
mes strf("%c", pc)
592デフォルトの名無しさん:2013/12/18(水) 16:52:18.55
593デフォルトの名無しさん:2013/12/18(水) 17:11:50.26
お題:文字列のアスキーコードの平均値を求め、その整数部分を
アスキーコードとする文字を返す。

"BASIC" -> "F"
594デフォルトの名無しさん:2013/12/18(水) 17:15:21.90
>>592
pokeで書いてpeekで読むのか
俺もやろうとしたけどmallocしてからどうすればいいのかわからずにprintfをforeign importして終わった
595デフォルトの名無しさん:2013/12/18(水) 17:22:14.42
>>593 Haskell
import Data.Char
import Control.Arrow
main = putChar $ f "BASIC"
f = chr . uncurry div . (sum &&& length) . map ord
596デフォルトの名無しさん:2013/12/18(水) 17:23:18.02
>>593 HSP
#module
#defcfunc ave_str str s_, local s, local sum, local len
s=s_
len=strlen(s)
repeat len
sum+=peek(s, cnt)
loop
return strf("%c", sum/len)
#global
mes ave_str("BASIC")
597デフォルトの名無しさん:2013/12/18(水) 17:24:21.27
>>590-592
ヤバイ普段書いてるソースコードと全く違う
598デフォルトの名無しさん:2013/12/18(水) 17:25:03.02
>>593 Haskell ちょっと整理した。もっといい書き方があるなら教えてください http://ideone.com/gvDzjY
599デフォルトの名無しさん:2013/12/18(水) 17:25:35.27
>>593 Squeak Smalltalk
'BASIC' asByteArray average integerPart asCharacter "=> $F "
600デフォルトの名無しさん:2013/12/18(水) 17:31:14.55
c++で書くと答えになっちゃうので・・・。
あれだ、ポインタ?それって美味しいの?
C++は参照とイテレータがあるのでポインタはnewするときくらいしか使いません。あと、ハード叩く時と。
そして、それで間に合ってます。
601デフォルトの名無しさん:2013/12/18(水) 17:47:04.14
>>593
; Common Lisp
(let ((str "BASIC"))
 (code-char (floor (apply #'+ (map 'list (lambda (c) (char-code c)) str)) (length str))))
602デフォルトの名無しさん:2013/12/18(水) 17:47:53.35
>>593
ttp://ideone.com/5tcIZC
ほぼC。こんな感じでいかがでしょ?
603デフォルトの名無しさん:2013/12/18(水) 18:13:59.80
fortran興味あるけどgfortranやg95はすぐオーバーフローするし多倍長使うのが面倒で全然触ってない
604デフォルトの名無しさん:2013/12/18(水) 18:14:41.04
誤爆
605デフォルトの名無しさん:2013/12/18(水) 18:27:23.38
フォートランは自分から検索しないと文法すら見かけないな。
俺がC++使ってるのは、VCのデバッガあるからだし。
606デフォルトの名無しさん:2013/12/18(水) 20:41:33.84
fortranやっぱ無理
エラーが意味不明
607デフォルトの名無しさん:2013/12/18(水) 21:42:19.41
fortran使うなら、intelコンパイラがいいんじゃないか。確か用途によってはフリーだった気がする
あとf95よりはf99の方が使いやすいらしい

でも今はスパコンじゃなければ、Cの方が計算早いこと多いけどね
608デフォルトの名無しさん:2013/12/18(水) 22:39:32.11
>>534 Arc
arc> (def to-binary (n) (coerce n 'string 2))
#<procedure: to-binary>
arc> (to-binary 255)
"11111111"
609デフォルトの名無しさん:2013/12/19(木) 00:47:20.64
>>593 OCaml version 4.01.0
let s2cs s =
let rec _s2cs i l = if i < 0 then l else _s2cs (i - 1) (s.[i] :: l) in
_s2cs (String.length s - 1) [];;
let f593 s =
let sum = List.fold_left (fun sum c -> sum + int_of_char c) 0 (s2cs s) in
char_of_int (sum / String.length s);;
print_char (f593 "BASIC");;

F
610デフォルトの名無しさん:2013/12/19(木) 01:02:47.98
611610:2013/12/19(木) 01:13:48.69
ちょい見やすく http://ideone.com/wAhHdT
612デフォルトの名無しさん:2013/12/19(木) 01:16:55.29
>>610 おもろいな、おい。このスレのHaskellはあなたに任せました。ぼくは三年くらい修行してきます。
613デフォルトの名無しさん:2013/12/19(木) 01:22:53.52
なんだいこれはw
614デフォルトの名無しさん:2013/12/19(木) 01:23:39.44
>>607 じゃあCやります
615デフォルトの名無しさん:2013/12/19(木) 01:27:38.49
ダミーの何もしない行とかよくできてるな、ほんとw
616610:2013/12/19(木) 01:30:39.36
ラスト。main行をスッキリさせた http://ideone.com/eb8dko
>>612 
そんなこと言わずに、僕も修行中でたまたま立ち寄っただけなの
617デフォルトの名無しさん:2013/12/19(木) 01:45:41.79
>>593 with Python
strAt="BASIC"; chr(int(sum(ord(ch) for ch in strAt)/len(strAt)))
===============================
F
618デフォルトの名無しさん:2013/12/19(木) 01:54:57.24
>>593 Arc
(def str-avg-char (str)
(coerce (trunc:avg (map int (coerce str 'cons))) 'char))

arc> (str-avg-char "ARC")
#\G
619デフォルトの名無しさん:2013/12/19(木) 01:56:05.03
>>616
ありがとう!!
一枚目のもCで解いてくれると非常に嬉しいです
620デフォルトの名無しさん:2013/12/19(木) 14:37:57.76
   |._番兵|_
  ( ・ω・) <C/C++の宿題片付けます 166代目
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)ttp://toro.2ch.net/test/read.cgi/tech/1381909900/
621デフォルトの名無しさん:2013/12/19(木) 18:10:03.94
お題:原点を中心として最初に半径1の円をかく。そのあとすでにかかれた円より
大きく格子点を通る最小の円を順番にかいていく。n番目の円の半径は?

n=1 -> 1.00
n=2 -> 1.41
n=5 -> 2.82
622デフォルトの名無しさん:2013/12/19(木) 19:20:09.51
>>621 Squeak Smalltalk
| radiusAt |
radiusAt := [:n |
 | m |
 m := (((8 * n + 1) sqrt - 1) / 2 + 1) asInteger.
 ((1 to: m) gather: [:x | (0 to: x) collect: [:y | (x@y) r]]) asSet asSortedArray at: n].

radiusAt value: 1. "=> 1 "
radiusAt value: 2. "=> 1.414213562373095 "
radiusAt value: 5. "=> 2.82842712474619 "
623デフォルトの名無しさん:2013/12/19(木) 19:45:40.78
>>621 ruby 1.8.6
あってるかどうか分からない上に妙に無駄が多い。
def points(x)
(1..x).inject([]) {|a, y| a << x / Math.cos(Math.atan(y.to_f/x))}
end
def f621(n)
r = (1..n).inject([]) {|a, i| a << points(i) << i.to_f}.flatten.uniq.sort[n - 1]
puts 'n=' + n.to_s + ' -> ' + r.to_s
end
f621 1
f621 2
f621 5

n=1 -> 1.0
n=2 -> 1.41421356237309
n=5 -> 2.82842712474619
624デフォルトの名無しさん:2013/12/19(木) 19:57:27.17
>>622 Squeak Smalltalk 。いろいろとダメだったので差し替え。
| radiusAt |
radiusAt := [:n |
 | set x |
 set := Set new.
 x := 1.
 [set size < n] whileTrue: [(0 to: x) do: [:y | set add: (x@y) r.]. x := x+1].
 set asSortedArray at: n].

radiusAt value: 1. "=> 1 "
radiusAt value: 2. "=> 1.414213562373095 "
radiusAt value: 5. "=> 2.82842712474619 "
625デフォルトの名無しさん:2013/12/19(木) 19:57:41.73
>>623 ruby 1.8.6 ちょろっと整理。あとpointsって何だpointsって修正。
def f621(n)
def rs(x) (0..x).inject([]) {|a, y| a << x / Math.cos(Math.atan(y.to_f/x))} end
r = (1..n).inject([]) {|a, i| a += rs(i)}.uniq.sort[n - 1]
puts 'n=' + n.to_s + ' -> ' + r.to_s
end
626デフォルトの名無しさん:2013/12/19(木) 20:42:06.33
>>621 HSP
#module
#deffunc data_add int v, local s, local e, local c, local h
s=0 : e=s_data_num-1
repeat
if s>e : break
c=(s+e)/2
if s_data(c)=v : h=-1 : break
if s_data(c)>v : e=c-1 : h=c : else : s=c+1 : h=c+1
loop
if h<0 : return
s_data(s_data_num)=0
memcpy s_data, s_data, 4*(s_data_num-h), 4*(h+1), 4*h
s_data(h)=v : s_data_num++
return
#defcfunc nth_circle int n, local r_max, local y_max, local d, local d_num, local x, local y, local i, local j
if n<s_data_num : return sqrt(s_data(n))
repeat
for x, 0, s_r+1
for y, int(sqrt((s_r-1)*(s_r-1)-x*x-0.1)), x+1
if x*x+y*y>s_r*s_r : _break
data_add x*x+y*y
next
next
s_r++
if s_data_num>n : break
loop
return nth_circle(n)
#global
repeat 20, 1
mes strf("n=%d -> %.10f", cnt, nth_circle(cnt))
loop
627デフォルトの名無しさん:2013/12/19(木) 20:53:15.80
>>621 HSP
>>626 から使ってない変数削除と少しコードの短縮
#module
#deffunc data_add int v, local s, local e, local c, local h
s=0 : e=s_data_num-1
while 1
if s>e : _break
c=(s+e)/2
if s_data(c)=v : return
if s_data(c)>v : e=c-1 : h=c : else : s=c+1 : h=c+1
wend
s_data(s_data_num)=0
memcpy s_data, s_data, 4*(s_data_num-h), 4*(h+1), 4*h
s_data(h)=v : s_data_num++
return
#defcfunc nth_circle int n, local x, local y
while 1
if n<s_data_num : return sqrt(s_data(n))
for x, int(sqrt(s_r*s_r/2-0.1)), s_r+1
for y, int(sqrt((s_r-1)*(s_r-1)-x*x-0.1)), x+1
if x*x+y*y>s_r*s_r : _break
data_add x*x+y*y
next
next
s_r++
wend
#global
repeat 20, 1
mes strf("n=%d -> %.10f", cnt, nth_circle(cnt))
loop
628デフォルトの名無しさん:2013/12/19(木) 21:00:31.08
>>625 ruby 1.8.6
とりあえず、余計に計算させるのを止めさせた。
あと、ピタゴラスさんのことを考えると俺の顔面はスイカの断面より真っ赤になる。
def f621(n)
def r(x, y) Math.sqrt(x * x + y * y) end
def succ(x, y) x == y ? [x + 1, 0] : [x, y + 1] end
rs, x, y = Hash.new(0), 1, 0
while rs.size < n
rs[r(x,y)] += 1
x, y = succ x, y
end
puts 'n=' + n.to_s + ' -> ' + rs.keys.sort[n - 1].to_s
end
f621 1
f621 2
f621 5
629デフォルトの名無しさん:2013/12/19(木) 21:13:57.53
>>616 じゃあ
>>621 Haskell 合ってるのか不安 http://ideone.com/lGKyE6
630デフォルトの名無しさん:2013/12/19(木) 21:46:54.28
>>628のデバッグ版。最小限に出そうとしてちょっとケア不足だった。
そもそも、あってるかどうかは分からない。
def f621(n)
def r(x, y) Math.sqrt(x * x + y * y) end
def succ(x, y) x == y ? [x + 1, 0] : [x, y + 1] end
rs, x, y = Hash.new(0), 1, 0
while rs.size < n
r = r(x,y)
if r < x + 1
rs[r] += 1
x, y = succ x, y
else
x, y = x + 1, 0
end
end
puts 'n=' + n.to_s + ' -> ' + rs.keys.sort.last.to_s
end
(5..15).each{|n| f621 n}

n=5 -> 2.82842712474619
n=6 -> 3.0
n=7 -> 3.16227766016838
n=8 -> 3.60555127546399
n=9 -> 4.0
n=10 -> 4.12310562561766
n=11 -> 4.47213595499958
n=12 -> 5.0
n=13 -> 5.09901951359278
n=14 -> 5.3851648071345
n=15 -> 5.8309518948453
631デフォルトの名無しさん:2013/12/19(木) 21:47:48.42
>>621 J
f=: 3 :'y{(~./:~,|@j./~i.>.%:4*y)'

f 1
1
f 2
1.41421
f 10
4.12311
f 20
6.32456
f 1000
58.0086
f 999
58
632デフォルトの名無しさん:2013/12/19(木) 21:48:09.74
633デフォルトの名無しさん:2013/12/19(木) 21:48:40.98
いや、こういう風にしてしまうのもまた駄目だなw
>>628>>630も駄目。
634629:2013/12/19(木) 22:23:58.69
>>621 Haskell
>>631を丸パクリhttp://ideone.com/lGKyE6
635629:2013/12/19(木) 22:39:34.56
正直4*の意味がわからない
636デフォルトの名無しさん:2013/12/19(木) 22:58:09.30
>>621 HSP
#module
#defcfunc data_get int v, var h, local s, local e
h=0 : s=0 : e=s_data_num-1
while 1
if s>e : return 0
c=(s+e)/2
if s_data(c)=v : h=c : return 1
if s_data(c)>v : e=c-1 : h=c : else : s=c+1 : h=c+1
wend

#deffunc data_add int v, local h
if data_get(v, h) : return
s_data(s_data_num)=0
memcpy s_data, s_data, 4*(s_data_num-h), 4*(h+1), 4*h
s_data(h)=v : s_data_num++
return

#defcfunc nth_circle int n, local h
while 1
if data_get(s_x*s_x, h) : if h>=n-1 : return sqrt(s_data(n-1))
s_x++
repeat s_x+1
data_add s_x*s_x+cnt*cnt
loop
wend
#global

repeat 20, 1
mes strf("n=%d -> %.10f", cnt, nth_circle(cnt))
loop
637デフォルトの名無しさん:2013/12/19(木) 22:59:46.14
>>635
最初は2倍して平方根を取っていたのですが、nが大きくなるとうまくいかず
掛ける数字がだんだん大きくなったといういい加減な数字です。
638デフォルトの名無しさん:2013/12/19(木) 23:05:09.52
>>624 Squeak Smalltalk 。三度目の正直。
| radiusAt |
radiusAt := [:n |
 ((1 to: (8 * n + 1) sqrt - 1 / 2 sqrt) gather: [:x |
  (0 to: x) collect: [:y | (x@y) r ]]) asSet asSortedArray at: n].

radiusAt value: 999. "=> 58 "
639629:2013/12/20(金) 01:17:46.97
>>621 Haskell 型変換が面倒くさいという現実 http://ideone.com/SjAHVA

>>637 なるほど
640デフォルトの名無しさん:2013/12/20(金) 05:04:22.89
>>621 Io
Range
f := method(n,
1 to((n sqrt * 2) floor) map(i,
0 to(i) map(j,
i * i + j * j
)
) flatten sort unique at(n - 1) sqrt
)

Io> f(1)
==> 1
Io> f(5)
==> 2.8284271247461903
Io> f(10)
==> 4.1231056256176606
Io> f(100)
==> 16.15549442140351
641デフォルトの名無しさん:2013/12/21(土) 01:15:42.97
   |._番兵|_
  ( ・ω・) <雪かきするよ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)now nil snow nil snow snow
642デフォルトの名無しさん:2013/12/21(土) 05:19:59.67
お題:"1"を「1個の"1"」として数字だけ抜き出し並べて"11"を返す。
"11"なら「2個の"1"」で"21"を返す。"21"なら「1個の"2"、1個の"1"」で"1211"を
返す。"1"から始めてこの操作を10回繰り返し、途中経過を表示する。

1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211
11131221133112132113212221
643デフォルトの名無しさん:2013/12/21(土) 06:07:35.80
>>642 Haskell いわゆる思考停止 http://ideone.com/vNUaOv
644デフォルトの名無しさん:2013/12/21(土) 08:21:46.38
>>642 Squeak Smalltalk 。同じく思考停止系で。
| str |
str := '1'.
Transcript open; show: str.
10 timesRepeat: [
 str := String streamContents: [:ss |
  (str as: RunArray) runsAndValuesDo: [:run :val | ss nextPutAll: run asString, val]].
 Transcript cr; show: str]
645デフォルトの名無しさん:2013/12/21(土) 10:06:52.68
>>642 ruby 1.8.6
def f642(s)
s.scan(/(\d)(\1*)/).map{|a| (a[1].size + 1).to_s + a[0]}.join
end
puts (1..10).inject(['1']) {|a, i| a << f642(a.last)}
646デフォルトの名無しさん:2013/12/21(土) 11:15:50.37
>>642
#module
#defcfunc func var s, local d, local n, local c, local pc
d=""
repeat strlen(s)+1
pc=c
c=peek(s, cnt)
if c=pc : n++ : continue
if n : d+=strf("%d%c", n, pc)
n=1
loop
return d
#global

s="1"
mes s
repeat 10
s=func(s)
mes s
loop
647デフォルトの名無しさん:2013/12/21(土) 11:27:41.43
>>642 HSP
>>641 も HSP
#module
#defcfunc func var s, local d, local n, local c, local i
d=""
repeat strlen(s)+1
c=peek(s, i)
if c=0 : break
n=0
repeat
i++ : n++
if peek(s, i)!c : break
loop
d+=strf("%d%c", n, c)
loop
return d
#global

s="1"
mes s
repeat 10
s=func(s)
mes s
loop
648デフォルトの名無しさん:2013/12/21(土) 12:31:39.38
>>642 J
load 'regex'
'(.)\1*' (":@#,{.) rxapply ^:(<10)'1'
649デフォルトの名無しさん:2013/12/21(土) 16:03:00.20
650デフォルトの名無しさん:2013/12/21(土) 17:04:26.73
>>642 Io
f := method(a,
a = a .. " "
v := a at(0)
c := 0
r := ""
a foreach(x,
if(x == v,
c = c + 1
,
r = r .. c .. v - 48
v = x
c = 1
)
)
r
)

a := "1"
10 repeat(a = f(a println))
651デフォルトの名無しさん:2013/12/21(土) 17:35:39.86
>>642
ttp://ideone.com/xr7QPi
C++ライク。あんまり効率良くない。
652デフォルトの名無しさん:2013/12/21(土) 18:47:43.88
>>642 c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char *f642(const char *cs) {
const char *p, *q;
char *buff = malloc(strlen(cs) * 2 + 1), *bp = buff;
for (p = q = cs; *p != '\0'; p++) {
if (*q != *(p + 1)) {
*bp++ = p - q + '1';
*bp++ = *q;
q = p + 1;
}
}
*bp = '\0';
return buff;
}
int main() {
const char *css[11] = {0}; css[0] = "1";
int i, len = sizeof css / sizeof *css;
for (i = 1; i < len; i++) css[i] = f642(css[i - 1]);
for (i = 0; i < len; i++) printf("%s\n", css[i]);
return 0;
}
653デフォルトの名無しさん:2013/12/21(土) 21:28:37.45
>>652 に既に書かれていたけど、作ったのでup。
ttp://ideone.com/p0DwaV
654デフォルトの名無しさん:2013/12/22(日) 01:04:22.19
>>642
>>643のfork。モナド使ったらスッキリしたので http://ideone.com/qhsRPc
655デフォルトの名無しさん:2013/12/22(日) 08:37:29.19
>>642 R
a <- "1"
for(i in 1:10){
cat(a, "\n", sep="")
a <- rle(a)
a <- c(rbind(a[[1]], a[[2]]))
}
656デフォルトの名無しさん:2013/12/22(日) 10:36:18.91
お題:1から100000までの整をすべて足せ。
すべて足したら、その合計を表示せよ。

回答例: Objective Caml version 3.08.1
let sum1to n =
let rec f sum n =
if n = 0 then sum
else f (sum + n) (n - 1) in
f 0 n;;
print_int (sum1to 100000);;

705082704
657656:2013/12/22(日) 10:37:08.61
×整
○数
658デフォルトの名無しさん:2013/12/22(日) 10:56:07.47
任意精度整数モジュールを使ってバグ修正したかったが、
諸事情でそれもできなかったので出題の意図を縮小して訂正。

お題:1から10000までの整をすべて足せ。
すべて足したら、その合計を表示せよ。

回答例: Objective Caml version 3.08.1
let sum1to n =
let rec f sum n =
if n = 0 then sum
else f (sum + n) (n - 1) in
f 0 n;;
print_int (sum1to 10000);;

50005000
659デフォルトの名無しさん:2013/12/22(日) 14:33:21.59
>>656 >>658 Io
f : = method(n, n * (n + 1) / 2)

Io> f(10000)
==> 50005000
Io> f(100000)
==> 5.000050e+009
Io> f(10000000)
==> 5.000001e+013
Io> f(10000000)asString(0,0)
==> 50000005000000
660デフォルトの名無しさん:2013/12/22(日) 15:18:38.07
>>654 concatMapは>>=でいけたか。
661デフォルトの名無しさん:2013/12/22(日) 15:39:51.24
>>656 >>658 Objective Caml version 3.08.1
Big_int使えるようになったので一応。
これで思う存分、足しまくることができる。

let sum1to n =
let rec f sum n =
if n = 0 then sum
else f (Big_int.add_int_big_int n sum) (n - 1) in
f Big_int.zero_big_int n;;
let f658 n = Printf.printf "%s\n" (Big_int.string_of_big_int (sum1to n));;
f658 100000;;
f658 10000000;;
662デフォルトの名無しさん:2013/12/22(日) 18:54:29.19
>>656
ttp://ideone.com/svcXCp
ふっふっふ、そんな生っちょろい数字ではCゲンガーは殺せん!
とは言え、あんまりデカイ数字出されても困るんだけどね・・・。Orz
数字があわなくてあれ?ッて思ってたら区間間違えてた。
"<="なのね。いつも"<"のみで判定してるから一瞬ビビった。
663デフォルトの名無しさん:2013/12/22(日) 19:08:46.12
C++の多倍長演算は現在乱立中で当面大変な状況だ。
何とかならんかねー。Orz
664デフォルトの名無しさん:2013/12/22(日) 19:52:21.54
>>656 HSP
sum=0.0
repeat 100000, 1
sum+=cnt
loop
mes strf("%.0f", sum)
665デフォルトの名無しさん:2013/12/22(日) 23:36:17.93
>>656 Squeak Smalltalk
(1 to: 100000) sum "=> 5000050000 "
666デフォルトの名無しさん:2013/12/23(月) 00:23:59.39
>>642 java 1.6
import java.util.*;
import java.util.regex.*;
public class Odai642 {
private Pattern p = Pattern.compile("(\\d)(\\1*)");
private String f642(String s) {
StringBuffer buff = new StringBuffer();
for (Matcher m = p.matcher(s); m.find(); ) {
buff.append(m.group(0).length()).append(m.group(1));
}
return buff.toString();
}
public static void main(String[] args) {
Odai642 odai = new Odai642();
List<String> list = new ArrayList<String>();
list.add("1");
for (int i = 0; i < 10; i++) list.add(odai.f642(list.get(i)));
for (String s : list) System.out.println(s);
}
}
667デフォルトの名無しさん:2013/12/24(火) 08:41:09.62
Cゲンガーの逆襲!
スレにコントリビュートするために問題作ったよ!!
64ビット変数の基数62のハッシュを作ってみよう。
あぁ、別に64ビットじゃなくてもいいや。とにかく基数62のハッシュを作ってみよう。
これを知っていると、例えばURLの字数短縮したりとかまぁチョイチョイ使い道がある。
数学苦手だからこの程度しかできなくてごめんね。

ちなみに62なのは、数字と、アルファベットの大文字小文字を全部足すと62になるから。
64のほうがキリがいいよね。

http://ideone.com/57sb8e
あと、バグ報告も歓迎。
668デフォルトの名無しさん:2013/12/24(火) 10:03:47.93
自分で書いておいてアレだが、変数名ダサイなー。
669デフォルトの名無しさん:2013/12/24(火) 10:12:59.03
>>667 HSP
#module
#defcfunc mod62 var x, local c, local y, local m, local f
sdim y
m=0
repeat strlen(x)
c=peek(x, cnt)-'0'
if c<0 or 9<c : poke x, cnt : break
m=m*10+c
if m/62 : f=1
if f : y+=strf("%c", '0'+m/62)
m\=62
loop
if y="" : y="0"
x=y
return m

#defcfunc radix62 str x_, local x, local y
x=x_
symbol="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
sdim y
repeat
if x="0" : break
y=strmid(symbol, mod62(x), 1)+y
loop
return y
#global

mes radix62("18446744073709551615")
670デフォルトの名無しさん:2013/12/24(火) 10:22:12.12
671デフォルトの名無しさん:2013/12/24(火) 10:57:56.71
>>670
あそっか。
C++でもStringの長さとれるからそれ基数扱いにすればよかったんだった。勉強になった。
自分の書いたアルゴリズムを他の言語で書いてくるとそれとなく読めて面白いね。
知見がひろがるわー。
672デフォルトの名無しさん:2013/12/24(火) 12:18:29.73
>>667 Squeak Smalltalk
| radix62 |
radix62 := [:n |
 | chars base buff |
 chars := '0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ'.
 base := chars size.
 buff := OrderedCollection new.
 [n = 0] whileFalse: [buff addFirst: (chars at: n \\ base + 1). n := n // base].
 buff as: String].

radix62 value: 18446744073709551615 "=> 'lYGhA16ahyf' "
673デフォルトの名無しさん:2013/12/24(火) 18:38:30.99
>>667 ruby 1.8.6
class Integer
def mods(base)
a, i = [], self
begin
a << i % base
end until (i /= base) == 0
a.reverse
end
def f667(table)
cs = table.scan(/./)
mods(cs.size).map {|m| cs[m]}.join
end
end
s = "0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ"
puts 18446744073709551615.f667(s)
puts 0.f667(s)

lYGhA16ahyf
0
674デフォルトの名無しさん:2013/12/24(火) 20:07:27.14
>>670は、関数型言語だと面倒くさいと思ったけど、意外と素直に実装してくるな。
なるほどなるほど。
675デフォルトの名無しさん:2013/12/24(火) 20:24:32.61
>>667 Prolog
'64ビット変数の基数62のハッシュを作ってみよう。'(_64ビット整数) :-
atom_chars('0123456789abcdefghijkomnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',_変換符号ならび),
基数62のハッシュを作る(_64ビット整数,_変換符号ならび,[],_ハッシュ値),
writef('%t -> %t\n',[_64ビット整数,_ハッシュ値]),!.

基数62のハッシュを作る(0,_,L,_ハッシュ値) :-
atomic_list_concat(L,_ハッシュ値),!.
基数62のハッシュを作る(_実,_変換符号ならび,L,_ハッシュ値) :-
基数62のハッシュ符号化(_実,_変換符号ならび,_剰余,_変換された符号),
基数62のハッシュを作る(_剰余,_変換符号ならび,[_変換された符号|L],_ハッシュ値).

radix62符号化(_実,_変換符号ならび,_商,_変換された符号) :-
_剰余 is _実 mod 62,
_商 is _実 // 62,
    nth0(_剰余,_変換符号ならび,_変換された符号).

基数62のハッシュを作る(0,_,L,_ハッシュ値) :-
    atomic_list_concat(L,_ハッシュ値),!.
基数62のハッシュを作る(_実,_変換符号ならび,L,_ハッシュ値) :-
    基数62のハッシュ符号化(_実,_変換符号ならび,_商,_変換された符号),
    基数62のハッシュを作る(_商,_変換符号ならび,[_変換された符号|L],_ハッシュ値).

radix62符号化(_実,_変換符号ならび,_商,_変換された符号) :-
    _剰余 is _実 mod 62,
    _商 is _実 // 62,
    nth0(_剰余,_変換符号ならび,_変換された符号).
676デフォルトの名無しさん:2013/12/24(火) 20:28:19.90
>>667 Prolog すみません。書き直し。

'64ビット変数の基数62のハッシュを作ってみよう。'(_64ビット整数) :-
    atom_chars('0123456789abcdefghijkomnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',_変換符号ならび),
    基数62のハッシュを作る(_64ビット整数,_変換符号ならび,[],_ハッシュ値),
    writef('%t -> %t\n',[_64ビット整数,_ハッシュ値]),!.

基数62のハッシュを作る(0,_,L,_ハッシュ値) :-
    atomic_list_concat(L,_ハッシュ値),!.
基数62のハッシュを作る(_実,_変換符号ならび,L,_ハッシュ値) :-
    基数62のハッシュ符号化(_実,_変換符号ならび,_商,_変換された符号),
    基数62のハッシュを作る(_商,_変換符号ならび,[_変換された符号|L],_ハッシュ値).

radix62符号化(_実,_変換符号ならび,_商,_変換された符号) :-
    _剰余 is _実 mod 62,
    _商 is _実 // 62,
    nth0(_剰余,_変換符号ならび,_変換された符号).
677676:2013/12/24(火) 20:31:14.81
まだインデントが不十分でした。恐縮。
atom_charsから始まる行を8文字分右へずらして読んで下さい。その上も一行改行が
多くなっています。
678676:2013/12/24(火) 20:32:39.98
さらにミス発見 radix62符号化という述語名は勿論間違いで、変換し損ないました。
ここは 基数62のハッシュ符号化 です。
679デフォルトの名無しさん:2013/12/24(火) 20:57:00.19
>>667 Haskell よくわかってない http://ideone.com/cEHHz2
680デフォルトの名無しさん:2013/12/24(火) 21:24:44.70
>>667
import Numeric

showIntAtBase62 :: Integer -> String
showIntAtBase62 i = showIntAtBase 62 (xs !!) i ""
where xs = ['0'..'9'] ++ ['a'..'z'] ++ ['A'..'Z']

main = putStrLn $ showIntAtBase62 18446744073709551615 -- lYGhA16ahyf
681670:2013/12/24(火) 22:33:09.31
>>674
Common Lispのloopは関数型っぽくはないと思う。
多分これが関数型言語っぽい書き方。
http://ideone.com/OxG8ky
682デフォルトの名無しさん:2013/12/24(火) 22:45:19.65
>>680 そういえばそういうことか
683デフォルトの名無しさん:2013/12/24(火) 23:02:20.64
>>681
あー確かに、Cゲンガーの俺には読みにくい感じだわ。(汗
これだよこれ。

>>679
とある自然数Nに基数Rを与える。基数R上で桁を一桁増やすときは基数RのRを掛ける。基数10で10掛けると桁が上がるようにね。減らすときは割る。
基数Rの一桁目の数を調べるとき、その桁の数の上限がRなので自然数NからRで余剰を取ると一桁目がわかる。
ちなみに、俺には任意のの桁をO(1)でぶち抜く方法はよくわからん。Orz
基数10のように0を適当に増やすだけでは無理なので普段使いで使ってないとパッとは出てこないね。
そういう意味で10進数は旨いことできてると思う。
684デフォルトの名無しさん:2013/12/25(水) 01:45:29.35
お題: ランダムに装飾された大きさの異なるクリスマスツリーを7個作れ

出力: http://codepad.org/9Qm1zRxy

一番上の「☆」と土台の「||」は固定でよい
装飾は適当な文字(例:N,i,X,J,o,%,bなど)を利用する

解答例: http://codepad.org/aR7eI9F2
685 ◆QZaw55cn4c :2013/12/25(水) 02:27:34.57
>>667
http://ideone.com/ea6Wna
>>681 は Radix62b(), Radix62c() のうちのどっちの流儀なの? 
686デフォルトの名無しさん:2013/12/25(水) 02:30:37.31
>>684 HSP
#module
#define ctype spacer(%1) strf(strf("%%%%%%ds", %1), "")
#deffunc xmas_tree int n, local buf, local symbol
symbol="No%objX*****"
mes spacer(n-1)+"☆"
repeat n, 1
buf=spacer(n-cnt)
repeat cnt*2
buf+=strmid(symbol, rnd(strlen(symbol)), 1)
loop
mes buf
loop
mes spacer(n-1)+"||"
return
#global

repeat 7, 1
xmas_tree cnt
loop
687デフォルトの名無しさん:2013/12/25(水) 02:55:52.20
>>684 Haskell 自分なりに書いた http://ideone.com/2t2ql6
688670:2013/12/25(水) 08:14:03.73
>>685
Radix62b()だね。
そうしないと末尾再帰にならないので。
Common Lispは末尾再帰最適化が仕様になっていないけれど、多くの実装で最適化してくれるらしい。
689デフォルトの名無しさん:2013/12/25(水) 09:57:56.37
>>684 Squeak Smalltalk
| xmasTree |
xmasTree := [:r |
 | tree leaves |
 tree := #('☆' '||') asOrderedCollection.
 leaves := [:w | (1 to: w*2) inject: '' into: [:acc :idx | acc, '*********NiXJo%b' atRandom]].
 1 to: r do: [:wd |
  wd > 1 ifTrue: [tree doWithIndex: [:each :idx | tree at: idx put: ' ', each]].
  tree add: (leaves value: wd) before: tree last].
 tree asStringWithCr].

^((1 to: 7) - 1 collect: xmasTree) asStringWithCr
690デフォルトの名無しさん:2013/12/25(水) 10:04:31.50
691 ◆QZaw55cn4c :2013/12/25(水) 12:33:49.20
>>688
c は末尾再帰、b はそうではないので、>>681 は末尾再帰ではないのですか?私まだよく理解できてないな‥‥
692670:2013/12/25(水) 12:56:15.43
>>691
ごめん、cだわ。
693デフォルトの名無しさん:2013/12/25(水) 18:08:29.45
>>684 ruby 1.8.6
def print_xmastree(h, w = h * 2)
cs = "*******NiXJo%b".scan(/./)
tree = (1..h).inject(['☆']) {|tree, i| tree << '**' * i} << '||'
tree = tree.map {|s| s.gsub(/\*/) {cs[rand(cs.size)]}}
tree.each {|s| puts s.center(w)}
end
(0...7).each {|i| print_xmastree(i)}
694デフォルトの名無しさん:2013/12/25(水) 19:32:17.42
eJxrdGh0UAAjELEfTHCBOBAIFG9apKOTrB5/EioU1xjQ6NvY0pQHlIyPz7HL
t8mJj+eCGQJCyfqNrgqNro2+TQfBIvk66KAWZFJ8TXx8Y+GpxqJ4IIsLbh0I
aairN85RUFdXV9AEi2c2+jS6Nl8DmdmYBVJQo6+vXwMhETqBhH/LMv/mXKCu
J9GNAU1HmnMbA2LBbAiMRVbcOLdlRdNW9ca5CmD2/Jb5jbGNc2FsIG8uFwDE
C2lB

ヒント:DしてIする。
695デフォルトの名無しさん:2013/12/25(水) 19:46:37.87
アイが分からない
696687:2013/12/25(水) 21:12:34.13
>>684 Haskell 一から書き直した。 http://codepad.org/0JRrV4Qx
697デフォルトの名無しさん:2013/12/25(水) 21:44:33.97
>>684
ttp://ideone.com/bGGvKc
ちょっと反則技使った。アルゴリズムは要求通り書いたつもりだが、綺麗なツリーにならなかった。Orz
主よ、赦したまへ〜。

25日のうちに作れてよかったよ。
698デフォルトの名無しさん:2013/12/25(水) 22:23:50.74
   |._番兵|_
  ( ・ω・) <メリークリスマス
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)5 26 27 28 29 30 31
699687:2013/12/25(水) 23:58:41.54
700デフォルトの名無しさん:2013/12/26(木) 00:14:42.24
>>684
Common Lisp
無理にformatの機能を使ってみた。
http://ideone.com/pEyO7r
701687:2013/12/26(木) 00:18:14.61
702687:2013/12/26(木) 01:31:30.61
>>684 Haskell discrete削除。飾り付けをパーセントで指定 http://codepad.org/kzcEvTqU
703687:2013/12/26(木) 01:40:48.88
gen使い回してた。終了。
704687:2013/12/26(木) 01:49:28.85
>>684 Haskell 適当にdropしてごまかす http://codepad.org/5VNCq4gU
705687:2013/12/26(木) 02:01:12.82
>>684 Haskell newStdGenってのがあった http://codepad.org/V5iqTOyK
706687:2013/12/26(木) 02:17:36.40
やっぱdiscreteないと連続でもいけるみたいになるからつけとこう。
707687:2013/12/26(木) 02:19:37.55
あ、スレ汚しすみません。次の問題貼っときます。

694 :デフォルトの名無しさん:2013/12/25(水) 19:32:17.42
eJxrdGh0UAAjELEfTHCBOBAIFG9apKOTrB5/EioU1xjQ6NvY0pQHlIyPz7HL
t8mJj+eCGQJCyfqNrgqNro2+TQfBIvk66KAWZFJ8TXx8Y+GpxqJ4IIsLbh0I
aairN85RUFdXV9AEi2c2+jS6Nl8DmdmYBVJQo6+vXwMhETqBhH/LMv/mXKCu
J9GNAU1HmnMbA2LBbAiMRVbcOLdlRdNW9ca5CmD2/Jb5jbGNc2FsIG8uFwDE
C2lB

ヒント:DしてIする。
708 ◆QZaw55cn4c :2013/12/26(木) 04:25:36.82
いや、だから、「僕の考えた最強の暗号を解いてみろ」じゃないんだから
ちゃんと問題を記述してよ
709694:2013/12/26(木) 11:11:04.29
>>707
いえw 問題でもお題でもないので完全スルーでお願いします。
解けた人だけ、こっそりレスしてくれたら満足です。

>>695
アイは膨らませる。あとはアイだけあればいい。
いろいろゴニョゴニョしたりする必要は無い。
710デフォルトの名無しさん:2013/12/26(木) 23:02:05.26
そろそろテンプレが必要かね
711デフォルトの名無しさん:2013/12/28(土) 21:35:18.35
   |._番兵|_
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)
712デフォルトの名無しさん:2013/12/29(日) 18:18:34.95
以前どこかで見かけた問題だけど
「デジタル式の時計をアナログ式に変換する」
入出力サンプル
http://codepad.org/XcWCtEF5
目盛りをo、短針をX、長針をxで表す
重なったときはXで表す
ただし短針は最も近い目盛りを指すようにする
713デフォルトの名無しさん:2013/12/29(日) 19:12:27.99
714デフォルトの名無しさん:2013/12/29(日) 20:02:06.39
>>712
Haskell http://codepad.org/ANR1mjIq
思い出したけどcodegolfの問題だった。細かいところは違ったけど
715デフォルトの名無しさん:2013/12/29(日) 20:56:31.89
>>713 の修正
clock_pos_get hour*360/12+min*15/60, 12, x, y

clock_pos_get hour*360/12+min*30/60, 12, x, y
716デフォルトの名無しさん:2013/12/30(月) 00:30:25.58
717デフォルトの名無しさん:2013/12/30(月) 15:36:43.08
>>712 Squeak Smalltalk
| analogClock |
analogClock := [:time |
  | clock ticks pos |
  time := time asTime.
  clock := #(
  '     o'
  '  o     o'
  ''
  ' o        o'
  ''
  'o         o'
  ''
  ' o        o'
  ''
  '  o     o'
  '     o') deepCopy.
  ticks := {10@1. 15@2. 18@4. 19@6. 18@8. 15@10. 10@11. 5@10. 2@8. 1@6. 2@4. 5@2}.
  pos := ticks at: (time minutes roundTo: 5) / 5 + 1.
  (clock at: pos y) at: pos x put: $x.
  pos := ticks at: time hour \\ 12 + 1.
  (clock at: pos y) at: pos x put: $X.
  clock asStringWithCr].

analogClock value: '18:35'.
analogClock value: '00:00'.
analogClock value: '10:03'.
718デフォルトの名無しさん:2013/12/30(月) 17:10:52.07
>>712 ruby 1.8.6
class Canvas
def initialize(r = 8)
@r = r
@css = Array.new(1 + r * 2) {Array.new(1 + r * 2) {' '}}
end
def put_char_on_rim(c, t)
x = @r + @r * Math.cos(t)
y = @r + @r * Math.sin(t)
@css[x.round][y.round] = c
end
def to_s
@css.reverse.map {|cs| cs.join(' ').chomp}.join($/)
end
end
def f712(s)
hh, mm = s.split(/:/).map{|x| x.to_i}
roundedmm = (mm / 5.0).round * 5
c, pi2 = Canvas.new(8), 2 * Math::PI
(0...12).each {|i| c.put_char_on_rim('o', pi2 * i / 12)}
c.put_char_on_rim('x', pi2 * roundedmm / 60)
c.put_char_on_rim('X', pi2 * hh / 12)
puts s
puts c.to_s
end
f712('18:35')
f712('00:00')
f712('10:03')
719デフォルトの名無しさん:2013/12/30(月) 17:42:26.30
>>718
変数名を変更し、内部の配列の使い方を直感的なものに修正。
def put_char_on_rim(c, t)
x = @r + @r * Math.sin(t)
y = @r - @r * Math.cos(t)
@css[y.round][x.round] = c
end
def to_s
@css.map {|cs| cs.join(' ').chomp}.join($/)
end
720デフォルトの名無しさん:2013/12/31(火) 08:57:29.86
>>712
ttp://ideone.com/4pgEFj
ほぼC言語。綺麗な円がかけなかった。Orz
フレームバッファ確保しようかと思ったけど冗長すぎて却下した。
模範解答の空白の数を数えるのが一番大変だった。うまくいかなかったけど・・・。
721デフォルトの名無しさん:2013/12/31(火) 17:50:58.01
>>712 c
#include <stdio.h>
#include <string.h>
#include <math.h>
void f712(const char *hhmm) {
char dial[] = " a\n l b\n\n k c\n\nj d\n\n i e\n\n h f\n g";
char *p, symbols[] = "oooooooooooo";
int h, m, i, slen = strlen(symbols);
if (sscanf(hhmm, "%d:%d", &h, &m) != 2) return;
symbols[(int)round(m / 5.0) % slen] = 'x';
symbols[h % slen] = 'X';
for (i = 0; i < slen; i++) {
p = strchr(dial, 'a' + i);
if (p) *p = symbols[i];
}
puts(hhmm);
puts(dial);
}
int main() {
f712("18:35");
f712("00:00");
f712("10:03");
return 0;
}
722デフォルトの名無しさん:2013/12/31(火) 17:56:53.26
>>721
スペース圧縮されてるので一応codepadも。
ttp://codepad.org/3Vm1ujZY
723デフォルトの名無しさん:2014/01/02(木) 01:21:58.66
>>667 J
a=:'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
b=:1319718474975x
(62#.inv b){a

newYear
724デフォルトの名無しさん:2014/01/02(木) 07:20:31.83
お題:対ウイルス用プログラムは作れるのか実験せよ!

対ウイルス用プログラムとは
ウイルスを自動検出し、どこでかかったかを特定。特定した相手にウイルス
を感染させるプログラム。


総員、直にかかれぇ!
725デフォルトの名無しさん:2014/01/02(木) 10:30:09.19
>>724
見えなくしてるんでコテハンはずさないでください
726デフォルトの名無しさん:2014/01/02(木) 11:03:37.86
お題:連続した自然数の和が2014になるものをすべて求める。
727デフォルトの名無しさん:2014/01/02(木) 11:55:54.73
お題の質を向上させるために出した人はまずサンプルを載せてね
どんなに最悪でもテストまたは正解を書くこと
728デフォルトの名無しさん:2014/01/02(木) 11:58:50.04
>>726 Squeak Smalltalk
(1 to: 2013)
 collect: [:start | start to: ((start to: 2013)
  detect: [:end | (start + end) * (end - start + 1) / 2 = 2014] ifNone: [0])]
 thenSelect: [:range | range notEmpty]

"=> {(12 to: 64) . (97 to: 115) . (502 to: 505)} "
729デフォルトの名無しさん:2014/01/02(木) 12:00:04.29
730デフォルトの名無しさん:2014/01/02(木) 12:00:54.97
アンカミスった
>>712 ですた。
731デフォルトの名無しさん:2014/01/02(木) 12:03:27.44
>>726 ruby 1.8.6
アルゴリズムというか考え方は、ぐぐってしまった。しかし正解かどうか不明。
>>727
この場合、正解があってくれたら助かるね。
def f726(n)
oes = (2...n).select {|i| n % i == 0 && i % 2 == 1}.map{|o| [o, n / o]}
numss = oes.map{|(o, e)| (1..o/2).inject([e]){|a, i| a.unshift(e - i).push(e + i)}}
numss.map{|nums| 0 < nums[0] ? nums : nums.delete_if{|n| n <= -nums[0]}}
end
numss = f726(2014)
p numss
p numss.map{|nums| nums.inject(0){|sum, n| sum += n}}

[[97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 1
13, 114, 115], [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], [502, 503,
504, 505]]
[2014, 2014, 2014]
732デフォルトの名無しさん:2014/01/02(木) 12:21:20.42
>>731 ちょっとデバッグ&変数名をわずかに改善。
def f726(n)
dss = (1..n).select {|i| n % i == 0 && i % 2 == 1}.map{|i| [i, n / i]}
numss = dss.map{|(d0, d1)| (1..d0/2).inject([d1]){|nums, i| nums.unshift(d1 - i).push(d1 + i)}}
numss.map{|nums| 0 < nums[0] ? nums : nums.delete_if{|n| n <= -nums[0]}}
end
numss = f726(2014)
p numss
p numss.map{|nums| nums.inject(0){|sum, n| sum += n}}
733デフォルトの名無しさん:2014/01/02(木) 12:31:36.00
JS
function func(n) {
for (var a=[],i=(n/2+1)|0; i>0; i--)
for (var b=[],s=0,j=i; j>0; j--) {
s+=j;if(s>n)break
b.push(j);if(s==n)a.push(b)
}
return a
}

func(2014)
734デフォルトの名無しさん:2014/01/02(木) 14:29:01.89
>>727
入出力例だけあればいいよ
サンプルは無いほうがいい
答え丸出しのパズルは面白くない
735デフォルトの名無しさん:2014/01/02(木) 14:32:32.84
>>726 HSP
for i, 1, 2014+1
sum+=i
while sum>2014
sum-=j
j++
wend
if sum=2014 : mes strf("%d...%d", j, i)
next
736デフォルトの名無しさん:2014/01/02(木) 14:51:48.11
>>726
ruby 1.9.3

N = 2014
2.upto(N){|n|
next if N % n != 0
next if n % 2 + N / n % 2 != 1
if n % 2 == 1
a = (N/n-n/2..N/n+n/2)
else
a = (N/n/2-n+1..N/n/2+n)
end
p a if a.to_a[0] > 0
}
737デフォルトの名無しさん:2014/01/02(木) 14:55:58.51
別にアルゴリズムは1つじゃないだろうし
出すからには一番真剣にサンプルくらい載せてほしいな
738デフォルトの名無しさん:2014/01/02(木) 15:33:53.37
スレに直接書かなければ選択の余地がある
739デフォルトの名無しさん:2014/01/02(木) 15:35:54.70
お題
与えられたキーワードを1回ずつ使って、できるだけ面積の小さなクロスワードを作って返す


input
スイカ、カイバ、イヌ

output
ス□□
イ□□
カイバ
□ヌ□

注意
ス□□
イヌ□
カイバ

は不可
2文字以上文字が連続する部分はキーワードでないといけない
この場合「ヌイ」がアウト
740デフォルトの名無しさん:2014/01/02(木) 15:46:47.85
補足
1.各キーワードは2字以上、そうでなければエラー
2.それさえ満たせば繋げられなくても問題ないので、解は必ず出せる


input
マンガ、バター

output
マンガ
□□□
バター

3.キーワードの重複は認める
741デフォルトの名無しさん:2014/01/02(木) 16:37:18.79
742デフォルトの名無しさん:2014/01/02(木) 17:03:18.27
PowerShell
https://gist.github.com/anonymous/8216229

遅いし美しくない。いまいち。
743742:2014/01/02(木) 17:28:10.05
遅いのは操作の方向が悪かったから。
改善版

PowerShell
https://gist.github.com/anonymous/8216399
744デフォルトの名無しさん:2014/01/02(木) 17:56:12.86
>>726 Haskell
sum2014 :: [(Int, Int)]
sum2014 = foldr f [] [1..2014]
where
f x acc = maybe acc (\y -> (x,y):acc) $ g x x
g x s | s > 2014 = Nothing
| s == 2014 = Just x
| otherwise = g (x+1) (s+x+1)

main = print sum2014 -- => [(12,64),(97,115),(502,505),(2014,2014)]
745デフォルトの名無しさん:2014/01/02(木) 18:01:21.27
連続とはいったい!?
うごごごご…
746デフォルトの名無しさん:2014/01/02(木) 19:51:38.03
>>726
ttp://ideone.com/xXTlFZ
ideon混んでるなー。コンパイルが終わらない。こんな短いのに。
2014の中の半分位の数は二倍すると2014超えるのでそこを最適化したら微妙に早くなった。
747デフォルトの名無しさん:2014/01/02(木) 20:37:06.98
二桁連続、三桁連続、四桁連続、五桁連続・・・
これでおk
748デフォルトの名無しさん:2014/01/02(木) 20:45:16.23
>>739
長方形の周囲長にしないと
面積だと1マス空けになる

スイカ□カイバ□イヌ

みたいに
749デフォルトの名無しさん:2014/01/02(木) 21:12:54.76
>>748
又は全てのワードが連結していることを求めるか、だな。
750デフォルトの名無しさん:2014/01/02(木) 21:13:10.60
>>740
> 2.それさえ満たせば繋げられなくても問題ないので、解は必ず出せる
これを撤回して、各単語は少なくとも一つの単語と重なりを持つという条件を加えれば
面積でも問題ない?
751デフォルトの名無しさん:2014/01/02(木) 22:49:46.69
>>726

C# でギッタンバッコン
ttp://ideone.com/qeF9CD

ideoneじゃTuple使えないのね。
752デフォルトの名無しさん:2014/01/02(木) 23:10:28.09

解の公式のところ間違えた。

× int last = (int)(-1 + Math.Sqrt(1.0 + 8 * n) / 2);
○ int last = (int)((-1 + Math.Sqrt(1.0 + 8 * n)) / 2);

n=2014 ではどっちでも同じみたいだけど。
753デフォルトの名無しさん:2014/01/02(木) 23:23:17.73
>>749,750
では全て一続きに連結するという条件でお願いします
754デフォルトの名無しさん:2014/01/03(金) 00:44:04.33
>>726 Io
f := method(n,
a := 1
b := (n * 2) sqrt floor
s := (a + b) * (b - a + 1) / 2
e := (n / 2) floor + 1
while(b < e,
if(s == n,
writeln(a, ":", b)
b = b + 1
s = s + b
,
if(s > n,
s = s - a
a = a + 1
,
b = b + 1
s = s + b
)
)
)
nil
)

Io> f(2014)
12:64
97:115
502:505
755デフォルトの名無しさん:2014/01/03(金) 18:51:33.57
>>726 Maxima
f(n) := map(
lambda([x],[if (a:n/x-(x-1)/2)<=0 then 1-a else a,n/x+(x-1)/2]),
subset(rest(divisors(n)),oddp)
);

(%i23) f(2014);
(%o23) {[12, 64], [97, 115], [502, 505]}
(%i24) f(123456);
(%o24) {[130, 513], [901, 1028], [41151, 41153]}
756デフォルトの名無しさん:2014/01/04(土) 12:59:30.06
お題:ジグザグに表示する。

123456789
 ↓
1 3 5 7 9
2 4 6 8

The earth turns around the sun.
 ↓
T e e r h t r s a o n h u .
h a t u n r u d t e s n
757デフォルトの名無しさん:2014/01/04(土) 13:50:48.83
>>756
ttp://ideone.com/H1Yumt
思ったよりすんなりできたな。いっちばーん!?
758 ◆QZaw55cn4c :2014/01/04(土) 14:24:13.62
759デフォルトの名無しさん:2014/01/04(土) 14:25:49.35
>>756 c
#include <stdio.h>
void f756(const char *cs) {
const char *p, *end = cs + strlen(cs);
for (p = cs; p < end; p += 2) printf("%c ", *p);
puts("");
for (p = cs + 1; p < end; p += 2) printf(" %c", *p);
puts("");
}
int main() {
f756("123456789");
f756("The earth turns around the sun.");
return 0;
}
76018:2014/01/04(土) 14:33:32.65
>>757
二行目は空白からだよ。
761デフォルトの名無しさん:2014/01/04(土) 14:41:07.35
>>756,760
ttp://ideone.com/TpvzVm
くっ。
エディットできなかったのでフォークして直しておいた。
762デフォルトの名無しさん:2014/01/04(土) 14:54:57.65
763デフォルトの名無しさん:2014/01/04(土) 15:11:20.98
>>756
void func(const char *cs)
{
const int base = 2;
for (int remain = 0; remain < base; ++remain) {
for (int i = 0; cs[i]; ++i)
putchar(i % base == remain ? cs[i] : ' ');
puts("");
}
}
764デフォルトの名無しさん:2014/01/04(土) 15:18:55.62
>>759 一応修正しとく。
#include <stdio.h>
void f756(const char *cs) {
const char *p, *end = cs + strlen(cs);
char *buff = malloc(strlen(cs) + 1), *bp;
for (p = cs, bp = buff; p < end; p++) if (!isspace(*p)) *bp++ = *p;
for (p = buff; p < bp; p += 2) printf("%c ", *p);
puts("");
for (p = buff + 1; p < bp; p += 2) printf(" %c", *p);
puts("");
free(buff);
}
int main() {
f756("123456789");
f756("The earth turns around the sun.");
return 0;
}
765デフォルトの名無しさん:2014/01/04(土) 15:52:43.43
>>756 HSP
#module
#deffunc f756 str s_, local s, local buf1, local buf2
s=s_
buf1=""
buf2=""
repeat strlen(s)
if (cnt\2)=0 {
buf1+=strf("%c ", peek(s, cnt))
} else {
buf2+=strf(" %c", peek(s, cnt))
}
loop
mes buf1
mes buf2
return
#global

f756 "123456789"
f756 "The earth turns around the sun."
766デフォルトの名無しさん:2014/01/04(土) 16:46:19.28
767デフォルトの名無しさん:2014/01/04(土) 17:09:26.77
768764:2014/01/04(土) 17:15:20.16
修正じゃなくて>>759のままでよかった。
新年早々なにやってんだか…。脳が腐ってる。
769デフォルトの名無しさん:2014/01/04(土) 18:17:24.89
>>756
-- Haskell
zigzag :: String -> [String]
zigzag = foldr (\x [as, bs] -> [x:bs, ' ':as]) [[], []]

main = mapM_ (mapM_ putStrLn . zigzag) ["123456789", "The earth turns around the sun."]
770デフォルトの名無しさん:2014/01/04(土) 19:22:24.93
>>756 Io
f := method(s,
a := s asMutable
b := s asMutable
for(i, 0, s size, if(i isOdd, a, b) atPut(i, 32))
writeln(a, "\n", b)
)
771デフォルトの名無しさん:2014/01/04(土) 21:45:37.64
>>739
総当り以上に頭悪そうなHaskell http://ideone.com/IuKYDH
772デフォルトの名無しさん:2014/01/04(土) 21:53:14.50
>>756 Squeak Smalltalk
| zigzag |
zigzag := [:str |
  (str inject: #(' ' '') into: [:acc :chr | {acc second, chr, ' '. acc first}]) asStringWithCr].

zigzag value: '123456789'.
zigzag value: 'The earth turns around the sun.'
773デフォルトの名無しさん:2014/01/04(土) 23:16:26.46
>>756
正規表現置換 (Clojure) で

http://ideone.com/I8ealr
774デフォルトの名無しさん:2014/01/04(土) 23:34:50.46
>>756 Octave
function f(s)
a = b = s;
a(2:2:end) = " ";
b(1:2:end) = " ";
printf("%s\n%s\n",a,b);
endfunction

> f("123456789")
1 3 5 7 9
2 4 6 8
775片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/05(日) 01:18:31.92
お題:文字を円形に並べる。一番上が最初の文字。時計回りに等間隔で並べる。
半径は文字間隔が離れすぎず近すぎない程度になるよう適当に選ぶ。
776デフォルトの名無しさん:2014/01/05(日) 02:46:12.61
>>775
ttp://ideone.com/fHHfck
アフィン変換の式はあんまり人に見せたくないんだが、あまりにレイアウトがうまくいかないもんでマジで作ってしまた。
それでも厳しいな。シャッフル自体は数分でできたんだけどね・・・。
しかし、遺跡の石版みたいになったなぁ。
777デフォルトの名無しさん:2014/01/05(日) 04:22:58.58
なんか歪んでね?てかシャッフルする意味が判らん・・・
http://ideone.com/1aipvB
778デフォルトの名無しさん:2014/01/05(日) 05:11:30.59
>>777
シャッフルしたのはフレームバッファ使わないためだよ。
並びが明確なので、後はスペースの区切り方なんだが、それが上手いこといかない。
円の性質ってそういえばよく知らないな。
779デフォルトの名無しさん:2014/01/05(日) 05:57:02.99
>>778
そういうことか。
あ、それで1行2文字の制限になって歪んでるのか。
・・・バッファ節約しなきゃならんサイズの円だと相当大きい円にしない限りゆがみがひどい事になりそ
780デフォルトの名無しさん:2014/01/05(日) 06:28:05.70
781デフォルトの名無しさん:2014/01/05(日) 12:29:21.15
>>775 ruby 1.8.6
>>718のCanvas再利用。
def f775(s)
cs = s.scan(/./)
canvas, pi2 = Canvas.new(8), 2 * Math::PI
cs.each_index{|i| canvas.put_char_on_rim(cs[i], pi2 * i / cs.size)}
puts s
puts canvas.to_s
end
f775(('A'..'L').to_a.join)
f775(('A'..'C').to_a.join)
f775(('A'..'X').to_a.join)
782デフォルトの名無しさん:2014/01/05(日) 14:14:58.63
783デフォルトの名無しさん:2014/01/05(日) 16:40:11.70
>>775 HSP
#module
#deffunc f775 str s_, local s, local cx, local cy
cx=ginfo_cx
cy=ginfo_cy
mes
s=s_
l=strlen(s)
r=double(ginfo_mesy)*l/6
if r<0.5*ginfo_mesy : r=0.5*ginfo_mesy
repeat l
pos r*(1.0+sin(2.0*M_PI*cnt/l))+cx, r*(1.0-cos(2.0*M_PI*cnt/l))+cy
mes strmid(s, cnt, 1)
loop
pos cx, r*2+cy : mes
return
#global

f775 "HappyNewYear"
f775 "12345"
784デフォルトの名無しさん:2014/01/05(日) 22:18:59.80
>>775 Io
f := method(s,
n := s size
w := List clone setSize(n*2+1)map("__"repeated(n*2+1))
pi2:=1 atan*8
for(i,0,n-1,
a := i*pi2/n-pi2/4
w at((a sin*n)round+n) atPut(((a cos*n)round+n)*2+1,s at(i))
)
w
)

Io> f("12345")map(println)
___________1__________
______________________
______________________
_5___________________2
______________________
______________________
______________________
______________________
______________________
_____4___________3____
______________________
785デフォルトの名無しさん:2014/01/06(月) 01:25:20.92
786片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/06(月) 05:45:41.66
誤差を小さくしたいなら切り捨てより四捨五入
787片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/06(月) 15:01:42.13
文字の位置は左上コーナーの座標ではなく中心点にあるとするのが人間工学的になんちゃらなんちゃら
788デフォルトの名無しさん:2014/01/06(月) 17:46:48.59
>>775 R
f <- function(s){
n <- nchar(s)
pie(rep(1,n),unlist(strsplit(s,"")),clock=T,dens=0,lty=0,init=90+360/n/2)
}

円グラフをかくpieを使ってラベル以外を全部消す作戦だったが
中心に向かう短い補助線が消せなかった。
789デフォルトの名無しさん:2014/01/07(火) 01:27:16.40
お題:1000以下の自然数で各桁がすべて奇数のものを求める。

121 -> ng //偶数の桁がある
357 -> ok
790デフォルトの名無しさん:2014/01/07(火) 01:36:25.37
>>789 ruby 1.8.6
def f789(n)
n.to_s.scan(/./).all?{|c| c.to_i % 2 == 1} ? 'ok' : 'ng'
end
puts f789(121)
puts f789(357)

ng
ok
791デフォルトの名無しさん:2014/01/07(火) 01:43:55.44
あ、それとも
p (1..1000).select{|i| i.to_s.scan(/./).all?{|c| c.to_i % 2 == 1}}
こうとか?
p (100..1000).select{|i| i.to_s.scan(/./).all?{|c| c.to_i % 2 == 1}}
こうとか?
792デフォルトの名無しさん:2014/01/07(火) 01:54:17.63
>>789
ttp://ideone.com/3Orka2
こんな感じでいいのかな?
793デフォルトの名無しさん:2014/01/07(火) 03:16:39.98
grep { /^[13579]+$/ && print "$_\n";} (1 ... 1000)
794デフォルトの名無しさん:2014/01/07(火) 04:15:22.10
>>789
; Common Lisp
(loop for i from 1 to 1000
   do (format t "~4d -> ~:[ng~;ok~]~%"
         i
         (every (lambda (c)
             (oddp (parse-integer (string c))))
            (princ-to-string i))))
795デフォルトの名無しさん:2014/01/07(火) 08:28:07.86
796デフォルトの名無しさん:2014/01/07(火) 11:52:11.47
>>775 Squeak Smalltalk
| str pi ori ps r grid |
str := '0123456789AB' readStream.
pi := Float pi.
ori := 3 * pi / 2.
ps := (1 to: str size * 2) - 1 collect: [:idx |
 | theta |
 theta := pi / str size * idx + ori.
 theta cos @ theta sin].
r := (1 to: str size * 2) detect: [:n | (ps * n * (2@1)) rounded asSet size = ps size].
r := r + 1.
grid := (Array new: r*2+1 withAll: (String new: r*4+1 withAll: $_)) deepCopy.
ps := ((ps+1) * r * (2@1)) rounded + 1 pairsDo: [:p1 :p2 | (grid at: p1 y) at: p1 x put: str next].
^grid asStringWithCr

=> '
________0________
____B_______1____
_A_____________2_
_________________
9_______________3
_________________
_8_____________4_
____7_______5____
________6________'
797デフォルトの名無しさん:2014/01/07(火) 12:03:28.90
>>789 Squeak Smalltalk
(1 to: 1000) select: [:n | n asString allSatisfy: [:digChar | digChar digitValue odd]]
798デフォルトの名無しさん:2014/01/07(火) 12:19:05.08
>>789 Lua
f = function(n)
local i = 0
while true do
local a = i
local r = ""
repeat
r = (a % 5 * 2 + 1) .. r
a = math.floor(a / 5)
until a <= 0
if tonumber(r) > n then
return
else
print(r)
i = i + 1
end
end
end
799デフォルトの名無しさん:2014/01/07(火) 12:58:42.66
>>798
100番台が抜けてしまいます。ボツにします。
800デフォルトの名無しさん:2014/01/07(火) 16:02:06.49
801デフォルトの名無しさん:2014/01/07(火) 18:20:04.33
>>789
Python3 スマートでない解法
http://ideone.com/AssCQQ
802デフォルトの名無しさん:2014/01/07(火) 18:59:35.68
>>789 HSP
#module
#defcfunc f789 int x
y=x
while y>0
if (y&1)=0 : return "ng"
y/=10
wend
return "ok"
#global

mes f789(121)
mes f789(357)
803デフォルトの名無しさん:2014/01/07(火) 19:54:24.39
>>789
Ruby1.9.3

x="24680".split(//)
1.upto(1000) { |n|
a=n.to_s.split(//)
p n if a==(a-x)
}
804デフォルトの名無しさん:2014/01/07(火) 20:01:58.29
805デフォルトの名無しさん:2014/01/07(火) 21:38:00.37
>>789 J
~.;&.>}.,{a;a;<a=.a:,;/'13579'
806デフォルトの名無しさん:2014/01/07(火) 23:12:47.78
>>797 Squeak Smalltalk 別解
(1 to: 1000) reject: [:n | n asString includesAnyOf: '02468']
807デフォルトの名無しさん:2014/01/07(火) 23:24:45.03
お題:辺の長さが1の正3角柱、正4角注、正5角柱がある。これをひもで束ねるとき
結ぶための部分の長さは別としてひもの長さの最小値を求める。
808デフォルトの名無しさん:2014/01/08(水) 02:33:38.76
>>807
8.354くらい?
809デフォルトの名無しさん:2014/01/08(水) 04:56:57.53
>>808
8よりは小さいんじゃないか?
810デフォルトの名無しさん:2014/01/08(水) 09:54:29.23


の下に五角柱が来るから、紐を角柱に沿わせるなら8になる。
実際には五角柱の方が幅が広いから紐が角柱から離れるので8より小さくなるね。
811デフォルトの名無しさん:2014/01/08(水) 12:25:44.50
>>789 Lua
f = function(n)
local i = 1
while true do
local a = i
local r = ""
while a > 0 do
a = a - 1
r = (a % 5 + 1) * 2 - 1 .. r
a = math.floor(a / 5)
end
if tonumber(r) > n then
return
else
print(r)
i = i + 1
end
end
end
812デフォルトの名無しさん:2014/01/08(水) 21:41:40.27
>>810
最短という条件なら
五角柱は下じゃなくて右か左かにくるはず

そんな条件ないけど
813デフォルトの名無しさん:2014/01/08(水) 22:39:54.09
>>807
質問です
どのように配置すれば最小値になるのですか?
814デフォルトの名無しさん:2014/01/08(水) 22:57:01.54
お題:辺の長さが1の正n角形の頂点の座標位置を求め回転と平行移動が指定できる関数。
815デフォルトの名無しさん:2014/01/08(水) 23:39:28.37
>>814
数学ダメだから、辺長1の正N角形の求め方がわかりません。
とある角度rの弧の求め方ってどうするんだっけ?
回転平行移動自体はアフィン変換でどうでもなるんだけど・・・。
816デフォルトの名無しさん:2014/01/08(水) 23:43:14.50
>>814 Squeak Smalltalk
| polygonVertics |
polygonVertics := [:n :angle :move |
  (((0 to: n-1) collect: [:idx |
    | theta |
    theta := 2 * Float pi * idx / n + angle.
    theta cos @ theta sin]) + move) roundTo: 0.0001].

polygonVertics value: 3 value: 0 value: 0.
"=> {[email protected] . [email protected] . -0.5@ -0.866} "

polygonVertics value: 4 value: 0 value: 0.
"=> {[email protected] . [email protected] . [email protected] . 0.0@ -1.0} "

polygonVertics value: 4 value: Float pi / 4 value: 0.
"=> {[email protected] . [email protected] . -0.7071@ -0.7071 . 0.7071@ -0.7071} "

polygonVertics value: 4 value: Float pi / 4 value: 2 sqrt / 2.
"=> {[email protected] . [email protected] . [email protected] . [email protected]} "

polygonVertics value: 4 value: 0 value: 1@0.
"=> {[email protected] . [email protected] . [email protected] . 1.0@ -1.0} "
817片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 00:20:21.05
>>815
よく分かる解説:
慣例として角度にrは使わない。rは半径(radius)に使う。角度にはθ(シータ)を使うことが多い。
円周率をπ(パイ)とすると、円周の長さは2πr。一回転の角度は360度(2π)。
円の中心から360度をN等分する(2π÷N)角度の半直線を引き、それぞれが円と交わった点を順番に結ぶと正N角形となる。
単純のために円の中心が原点にあると仮定し、さらにある頂点がx軸と正の成分で交わると仮定すれば、
角θにある円周上の点のxy座標は(x,y)==(r cosθ,r sinθ)と表せる。θ==2π÷Nとすれば
多角形の頂点の一つは(x,y)==(r cos(2π/N),r sin(2π/N))と表せる。角度をk倍すると
(x,y)==(r cos(2πk/N),r sin(2πk/N))となる(※)。
0<=k<Nとすれば※が(k+1)番目の頂点を表す座標となる。
818片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 00:25:14.57
円の中心が原点にないときは、各座標成分をずらす(平行移動)とよい。
円の中心が(α,β)であれば
(x,y)==(α+r cos(2πk/N),β+r sin(2πk/N))となる。
819片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 00:30:38.48
三角関数を使えば円や円運動を描くことができるので、別名「円関数」とも呼ばれる
820デフォルトの名無しさん:2014/01/09(木) 00:38:47.28
>>814
ttp://ideone.com/gZEHcJ
多分間違ってるけど一応作ったよ。
Rの式は頭のなかで変形したからオカシイかもしれん。今気づいたけど拡大いらね・・・。
ゲーム作るときはこれくらいはかけないとね。これでもまだ全ッ然足りないけどね。
デバッグ歓迎。

>>816
すげー綺麗だね。Orz

>>817-819
そういう証明とか説明とか理解できなくて数学赤点だったんだよ・・・。(ToT
とかいってもしょうがないけどね。
説明ありがとう。一応理解できるように努力はしてみる。。。
821デフォルトの名無しさん:2014/01/09(木) 00:43:01.21
>>816 Squeak Smalltalk 別解(APL や J っぽく配列のまま計算できる機能をフル活用して)
| polygonVertics |
polygonVertics := [:n :angle :move |
  | xs |
  xs := 2 * Float pi * (0 to: n-1) / n + angle.
  xs cos @ xs sin + move roundTo: 0.0001
].

polygonVertics value: 3 value: 0 value: 0.
"=> {[email protected] . [email protected] . -0.5@ -0.866} "

polygonVertics value: 4 value: 0 value: 0.
"=> {[email protected] . [email protected] . [email protected] . 0.0@ -1.0} "

polygonVertics value: 4 value: Float pi / 4 value: 0.
"=> {[email protected] . [email protected] . -0.7071@ -0.7071 . 0.7071@ -0.7071} "

polygonVertics value: 4 value: Float pi / 4 value: 2 sqrt / 2.
"=> {[email protected] . [email protected] . [email protected] . [email protected]} "

polygonVertics value: 4 value: 0 value: 1@0.
"=> {[email protected] . [email protected] . [email protected] . 1.0@ -1.0} "
822片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 00:50:59.09
プログラミングで重要な式はこれ:
(x,y)==(α+r cosθ,β+r sinθ)
この式を使えば(α,β)を中心とし、半径がrの円と円運動を描画できる。(x,y)は円周上の点。θは角度。
θを変化させるだけで位置がくるくる回転するぞ!!!
823820:2014/01/09(木) 01:01:53.50
>>822
ちょうどいいから質問なんだけど、
アフィン変換の式で、回転成分はXとYの両成分に、X成分とY成分の両方を含んでいるけど、
今示された式とどちらが正解なんだい?
824デフォルトの名無しさん:2014/01/09(木) 01:06:09.38
正N角形の頂点2点A,Bがx軸を挟んで対称にある図を考える。(AB=1, ∠AOB=2π/N)
A,Bの座標は A(x,1/2) B(x,-1/2) とおく。
(1/2)/x=tan(π/N) ⇒ x=(1/2) /tan(π/N)
よって正N角形の全頂点を通る円の半径rは
r=sqrt(x^2+(1/2)^2)
=(1/2)*sqrt(1+1/(tan(π/N)^2))
825片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 01:09:23.13
計算してみればどちらも正解。
アフィンの特殊化。
変換前のX,Yと変換後のx,yを混同したら駄目だよ。
826デフォルトの名無しさん:2014/01/09(木) 01:10:40.48
>>824
俺、バカだからそういう説明がわからないんですよ。
それで任意の辺の長さの数字を得る時ってどうするの?
それって、辺の長さ1に正規化されてるの?
827デフォルトの名無しさん:2014/01/09(木) 01:13:04.53
>>825
そうなんだ。解答ありがとう。
アフィン変換の方は行列を解いたらたまたまそうなったという感じだと思うのだけど、
どっちも行けるんであれば、今後は簡単な方をつかうことにするよ。
828デフォルトの名無しさん:2014/01/09(木) 01:18:18.12
>>826
一辺の長さがLなら
r=(L/2)*sqrt(1+1/(tan(π/N)^2))
829デフォルトの名無しさん:2014/01/09(木) 01:22:06.08
>>828
そうやってパッと答えられるのはすごいと思う。結構マジで。
俺にはどうやって導き出したのかさっぱりだよ・・・。Orz
ちょっと組み込んでみる。
830片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 01:26:03.90
幾何学(きかがく)の基本がわかってないみたいだな…
831デフォルトの名無しさん:2014/01/09(木) 01:28:01.00
いかんいかん。
辺の長さじゃなくて半径1で書いてた。^^; >>816,821
832デフォルトの名無しさん:2014/01/09(木) 01:42:20.53
ピタゴラスイッチ
833デフォルトの名無しさん:2014/01/09(木) 01:49:04.74
>>831
一応組み込んでみたよ。なんかそれっぽい数字になったような気がする。
ttp://ideone.com/UwxHwP

>>830
はっきり言って、俺さ、大学行ってない底辺だからね。
高校の成績も最後から数えたほうがすんげー早かったよ。
一応、工業高校は行ったんだけどね。
834デフォルトの名無しさん:2014/01/09(木) 02:03:30.89
うぅ。また余計なことを言ってしまった。
どうしてくれようか。
835デフォルトの名無しさん:2014/01/09(木) 02:13:08.22
   |._番兵|_
  ( ・ω・) <笑えばいいと思うお
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)in cos tan asin acos atan
836デフォルトの名無しさん:2014/01/09(木) 07:15:58.65
番兵は死語 はっきりわかんだね
837デフォルトの名無しさん:2014/01/09(木) 10:05:55.86
>>831 Squeak Smalltalk 。辺の長さが1になるように修正。
| polygonVertics |
polygonVertics := [:n :angle :move |
  | xs |
  xs := 2 * Float pi * (0 to: n-1) / n + angle.
  xs := xs cos @ xs sin.
  xs / (xs second - xs first) r + move roundTo: 0.0001
].

polygonVertics value: 3 value: Float pi / 2 value: 0.5@(3 sqrt / 6)
"=> {[email protected] . [email protected] . [email protected]} "
838デフォルトの名無しさん:2014/01/09(木) 20:13:42.30
>>807
辺をひったりくっつける場合
3|4|5 で 7.951
4|3|5 で 7.554
4|3|5 から 4 をずらしていくと 7.415
839片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 20:36:00.34
次のお題は難易度高いぞ。これができたらパズルゲーム会社に提出すること。

お題:数独パズルの難易度を1、2、3、4、5の五段階で判定するプログラムを作れ。
840デフォルトの名無しさん:2014/01/09(木) 20:59:06.80
私としては、バッティングセンターの打ちごろの球、3手の詰将棋、ぐらいがいいです。
841片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 21:16:14.05
ヒント:与えられた問題の解法をすべて探索し、解法の個数
と各解法のそれぞれの手の発見の難しさを総合的に評価する。
842デフォルトの名無しさん:2014/01/09(木) 21:20:11.51
お題:スタックオーバーフローせよ。

回答例および実行例:
public class StackOverflowErrorTest {
private void recurse(int i) {
try {
recurse(i + 1);
} catch (StackOverflowError e) {
System.out.println(i);
}
}
public static void main(String[] args) {
new StackOverflowErrorTest().recurse(0);
}
}

5776
843デフォルトの名無しさん:2014/01/09(木) 21:44:46.02
>>842 Io
f := method(n, f(1 + n println))
Io> f(0)
0
1
...
4365
4366
844デフォルトの名無しさん:2014/01/09(木) 21:58:08.77
>>842 C
#include <stdio.h>
void recurse(int n) {
 printf("%d\n", n);
 recurse(n + 1);
}
int main(void) {
 recurse(0);
 return 0;
}

...
65090
65091
845デフォルトの名無しさん:2014/01/09(木) 22:02:47.20
>>842 Lua
f = function(n) print(n) f(n+1) end

> f(0)
0
1
...
19993
19994
stack overflow
stack traceback:
[C]: in function 'print'
stdin:1: in function 'f'
stdin:1: in function 'f'
...
stdin:1: in function 'f'
stdin:1: in main chunk
[C]: ?
846デフォルトの名無しさん:2014/01/09(木) 22:17:49.96
>>842 Haskell
import Control.Exception
main = f 0 where f x = f (x + 1) `catch` \StackOverflow -> print x
-- > 677789
847片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 22:38:20.44
>>846
これは本当にスタックなのか?
848片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/09(木) 22:40:19.84
ごめん、>>847は無視して
849デフォルトの名無しさん:2014/01/10(金) 01:55:37.08
>>842
ttp://ideone.com/D2Cvg9
これもありだよね!
GCCだと64ビット変数をINTMAX確保してもまともに動いてしまった。
850デフォルトの名無しさん:2014/01/10(金) 05:07:17.37
>>842 J
f =: 3 : 0
smoutput y
f >:y
)

f 0
0
1
...
9996
9997
|stack error: smoutput
| smoutput y
851デフォルトの名無しさん:2014/01/10(金) 05:09:34.92
>>842 HSP
recursive

#deffunc recursive
recursive
return
852デフォルトの名無しさん:2014/01/11(土) 13:24:44.59
>>842 Squeak Smalltalk
| recurse |
recurse := nil.
recurse := [:i | i asString displayAt: 100 asPoint. recurse value: i+1].
recurse value: 0

4960335 を出力したところでメモリ不足で停止。
853デフォルトの名無しさん:2014/01/11(土) 21:09:40.03
   |=番兵|_
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)
854デフォルトの名無しさん:2014/01/11(土) 23:48:34.04
四つの塔がある。幽霊に任意の座標を与えたとき、そこから最も近くにある塔を出力しなさい。

塔A、B、C、Dの座標:
A(2, 2) B(5, 2) C(2, 5) D(5, 5)

幽霊の座標:
0≦y≦7, 0≦x≦7,

図1:塔の配置
□□□□□□□□
□□□□□□□□
□□A □□B,□□
□□□□□□□□
□□□□□□□□
□□C □□D,□□
□□□□□□□□
□□□□□□□□

図2:幽霊の座標(3, 3)
□□□□□□□□
□□□□□□□□
□□A □□B,□□
□□□幽□□□□
□□□□□□□□
□□C □□D,□□
□□□□□□□□
□□□□□□□□

入力と出力例:
in  : (3, 3)
out : A
855デフォルトの名無しさん:2014/01/11(土) 23:51:42.22
ひっかけ?
856デフォルトの名無しさん:2014/01/12(日) 00:14:02.74
>>855

なんでですか?
857デフォルトの名無しさん:2014/01/12(日) 00:15:24.78
>>854 Squeak Smalltalk
| towers gohstPos |
towers := {#A->(2@2). #B->(5@2). #C->(2@5). #D->(5@5)}.
gohstPos := 3@3.
(towers detectMin: [:tower | (tower value - gohstPos) r]) key "=> #A "
858デフォルトの名無しさん:2014/01/12(日) 08:37:53.88
#include <stdio.h>
int main(void)
{
int x, y;

scanf("%d%d", &x, &y);

printf("%c", 'A' + (x > 3) + (y > 3) * 2);

return 0;
}
859デフォルトの名無しさん:2014/01/12(日) 10:47:50.27
>>854
> 最も近くにある塔を出力しなさい。

複数あったら?
860デフォルトの名無しさん:2014/01/12(日) 10:55:48.64
図の意味が理解できないバカが来た
861デフォルトの名無しさん:2014/01/12(日) 17:32:14.06
>>854
ttp://ideone.com/nTF6NO
適当に組んでみたが合ってるか???
一応、複数表示対応。
862デフォルトの名無しさん:2014/01/12(日) 17:35:27.21
>>860
そういった知恵は極力先に働かせないのがプログラミングだろう。
863デフォルトの名無しさん:2014/01/12(日) 17:57:20.46
お題: >>854をn次元ユークリッド空間に拡張すれ

in:
A(26.4, 46.3, -3.0, 19.8) B(-20.9, 39.8, 33.2, -4.1) C(-26.2, -26.7, 26.1, -0.3) D(-29.2, -12.0, 24.3, 45.1)
(0.4, 30, 7.8, 19.1)
out:
A
864デフォルトの名無しさん:2014/01/12(日) 19:10:35.77
>>863 Squeak Smalltalk
| towers gohstPos |
towers := {#A->#(26.4 46.3 -3.0 19.8). #B->#(-20.9 39.8 33.2 -4.1). #C->#(-26.2 -26.7 26.1 -0.3). #D->#(-29.2 -12.0 24.3 45.1)}.
gohstPos := #(0.4 30 7.8 19.1).
(towers detectMin: [:tower | (tower value - gohstPos raisedTo: 2) sum sqrt]) key "=> #A "
865デフォルトの名無しさん:2014/01/12(日) 20:04:36.53
複数の座標を出力するか最も早く見つけた座標の値を出力するか
866デフォルトの名無しさん:2014/01/12(日) 20:38:20.39
>>862
いや、この場合図と配置から意図は汲んでやるべきだろう。
867デフォルトの名無しさん:2014/01/12(日) 21:10:29.24
先に知恵を働かせてコンピュータにさせる計算を極力減らすのがプログラミングだろw
868デフォルトの名無しさん:2014/01/12(日) 22:05:56.36
869デフォルトの名無しさん:2014/01/12(日) 22:35:44.05
与えられた複数の文字列を並べて、同じ文字が同一カラムになるように□を挿入してください。
複数の解が存在する場合、幅が最小となる物を一つ出力してください。

123
134
 ↓
123
1□34


1212
1322
1122
  ↓
1□□2□12
1□422
11□22

※文字は全角か半角のどちらかに統一して構いません。
半角の場合は□ではなく半角スペースを挿入してください。
870デフォルトの名無しさん:2014/01/12(日) 22:39:29.60
みすった、
下から二段目は

1□422

じゃなく

1□322


っすね。
871デフォルトの名無しさん:2014/01/13(月) 00:15:39.61
>>863
ttp://ideone.com/vvAtep
あのね、あのね。僕ね、3次元までしか扱ったことがないのー。
だからね、このコードが合ってるかどうか解らないのー。
こういうのってどういう感じで絵を見ればいいのかなぁ??

ちょっとボケてみたけど、これ合ってるのか??
今回はちょっとわからないのでランダムしなかった。
872デフォルトの名無しさん:2014/01/13(月) 01:12:38.60
>>869
1212
1322
1122
  ↓
12□12
1□3□22
1□□122
じゃない?
873デフォルトの名無しさん:2014/01/13(月) 02:13:20.43
>>869 Squeak Smalltalk
| align multiAlign |
align := [:seq1 :seq2 |
  | mat score gap traceback |
  mat := Matrix rows: seq1 size + 1 columns: seq2 size + 1.
  mat atRow: 1 put: (Array new: mat columnCount withAll: #left->0).
  mat atColumn: 1 put: (Array new: mat rowCount withAll: #up->0).
  mat at: 1 at: 1 put: nil->0.
  score := [:a :b | (seq1 at: a-1) = (seq2 at: b-1) ifTrue: [1] ifFalse: [-1]]. gap := 0.
  2 to: mat columnCount do: [:j | 2 to: mat rowCount do: [:i |
    | vals max |
    max := (vals := {
      (mat at: i-1 at: j-1) value + (score value: i value: j).
      (mat at: i-1 at: j) value + gap.
      (mat at: i at: j-1) value + gap}) max.
    mat at: i at: j put: (#(upLeft up left) at: (vals indexOf: max)) -> max]].
  traceback := nil.
  gap := seq1 isByteString ifTrue: ['-'] ifFalse: ['□'].
  traceback := [:i :j | (mat at: i at: j) key caseOf: {
    [nil]->[#('' '' '')].
    [#upLeft]->[(traceback value: i-1 value: j-1) with: {seq1 at: i-1. seq1 at: i-1. seq2 at: j-1} collect: #,].
    [#up]->[(traceback value: i-1 value: j) with: {seq1 at: i-1. seq1 at: i-1. gap} collect: #,].
    [#left]->[(traceback value: i value: j-1) with: {seq2 at: j-1. gap. seq2 at: j-1} collect: #,]}].
  traceback value: mat rowCount value: mat columnCount].
multiAlign := [:seqs |
  | common |
  common := seqs allButFirst inject: seqs first into: [:acc :seq | (align value: acc value: seq) first].
  (seqs collect: [:seq | (align value: common value: seq) last]) asStringWithCr].
multiAlign value: #('1212' '1322' '1122').
□1□212
□132□2
11□2□2
874デフォルトの名無しさん:2014/01/13(月) 02:34:04.31
>>869
ttp://ideone.com/7PDNIU
そこはかとなくバグっている。
もう無理ー。Orz
グッチャグチャ。
875デフォルトの名無しさん:2014/01/13(月) 06:29:39.87
LCSっぽいんだけど対象が3つ以上の場合どうすればいいかわからん〜
876デフォルトの名無しさん:2014/01/13(月) 13:28:33.98
これちゃんと出題者は自分でいちど書いてみて、規模的に適性と判断したのかね。
877デフォルトの名無しさん:2014/01/13(月) 19:14:40.32
>>869 python
#!/usr/bin/python
def func(ss, sd):
  for a in ss:
    if len(a): break
  else: return '',ss,sd
  caps = [a[0] for a in ss if len(a)]
  results = []
  for i, c in enumerate(caps):
    ss_work, sd_work = ss[:], sd[:]
    for j, a in enumerate(ss):
      c_dst = "_"
      if len(a) and (a[0] == c):
        c_dst, ss_work[j] = a[0], a[1:]
      sd_work[j] = sd_work[j] + c_dst
    sc, ss_work, sd_work = func(ss_work, sd_work)
    results.append((c+sc, ss_work, sd_work))
  min_len_c = min([len(c) for (c,s,d) in results])
  for c,s,d in results:
    if len(c) == min_len_c: return c,s,d
if __name__ == "__main__":
  import sys
  if len(sys.argv) <= 1: sys.exit(0)
  src = sys.argv[1:]
  cols, dummy, dst = func(src, ["" for a in src])
  for s in dst: print s

$ python 20140112.py 1212 1322 1122
121_2_
1__322
1_1_22
一晩以上考えて結局力技になってもた。
878デフォルトの名無しさん:2014/01/13(月) 21:10:40.59
879デフォルトの名無しさん:2014/01/13(月) 22:43:11.37
>>869 ruby 1.8.6
class Cell
def initialize(value, space = ' ', n_spaces = 0)
@value, @space, @n_spaces = value, space, n_spaces
end
def into(a)
(1..@n_spaces).inject(a){|a, i| a << @space} << @value
end
def to_s
@space * @n_spaces + @value
end
attr_writer :n_spaces
end
def f869(lines)
space, base = '_', 3 # 最大base-1個のスペースを挿入
cellss = lines.map{|s| s.scan(/./).map {|c| Cell.new(c, space)}}
flatten = cellss.flatten
minsize = base * flatten.size
(0..base ** flatten.size).each {|i|
n_spacess = i.to_s(base).rjust(flatten.size, '0').scan(/./).map{|s| s.to_i}
flatten.each_index {|i| flatten[i].n_spaces = n_spacess[i]}
inflated = cellss.map{|cells| cells.inject([]) {|a, cell| cell.into(a)}}
maxsize = inflated.map {|cells| cells.size}.max
inflated.map! {|cells| cells + [space] * (maxsize - cells.size)}
if inflated.transpose.all? {|cols| cols.uniq.delete_if{|c| c == space}.size <= 1} && maxsize <= minsize
puts 'width = ' + maxsize.to_s + $/ + cellss.map {|cells| cells.join}.join($/) + $/ * 2
minsize = maxsize
end
}
end
f869 %w(123 134)
f869 %w(1212 1322 1122)
880デフォルトの名無しさん:2014/01/13(月) 22:48:24.78
>>879
スペース押し込んでチェックをひたすら。
以下、出力例抜粋。

width = 4
123
1_34

width = 6
121_2
1__322
1_1_22

width = 6
121_2
__1322
1_1_22
881デフォルトの名無しさん:2014/01/13(月) 23:20:15.43
>>879 あまり役に立ってなかったクラス廃止し、ちょい整理。
def f869(lines)
space, base = '_', 3 # 文字の直前に最大base-1個のスペースを挿入
css, n_chars = lines.map{|s| s.scan(/./)}, lines.join.size
minsize = base * n_chars
(0..base ** n_chars).each {|i|
n_spacess = i.to_s(base).rjust(n_chars, '0').scan(/./).map{|s| s.to_i}
inflated = css.map {|cs| cs.map{|c| [space] * n_spacess.shift + [c]}.flatten}
maxsize = inflated.map {|cs| cs.size}.max
transposed = inflated.map {|cs| cs + [space] * (maxsize - cs.size)}.transpose
if transposed.all? {|cols| cols.uniq.delete_if{|c| c == space}.size <= 1} && maxsize <= minsize
puts 'width = ' + maxsize.to_s + $/ + inflated.map {|cs| cs.join}.join($/) + $/ * 2
minsize = maxsize
end
}
end
f869 %w(123 134)
f869 %w(1212 1322 1122)
882デフォルトの名無しさん:2014/01/14(火) 07:28:57.27
>>867 この話ちょっとおもしろいと思う。別解がないことの証明を求められる 可能性はあるね。
883デフォルトの名無しさん:2014/01/14(火) 23:53:03.02
>>873 Squeak Smalltalk >>878を参考に別解
| multiAlign |
multiAlign := [:seqs |
  | queue common |
  seqs := seqs collect: #readStream.
  queue := OrderedCollection with: ''->(Array new: seqs size withAll: 0).
  [:exit | [queue notEmpty] whileTrue: [
    common := queue first key.
    queue removeFirst value with: seqs do: [:pos :seq | seq position: pos].
    (seqs allSatisfy: #atEnd) ifTrue: [exit value].
    ((seqs reject: #atEnd) collect: #peek) asSet do: [:chr |
      | incs |
      (incs := seqs select: [:seq | seq peek = chr]) do: #next.
      queue add: common, chr -> (seqs collect: #position).
      incs do: #back]].
  ] valueWithExit.
  (seqs collect: [:seq |
    seq reset.
    common collect: [:chr | chr = seq peek ifTrue: [seq next] ifFalse: [$-]]]
  ) asStringWithCr].

multiAlign value: #('1212' '1322' '1122').

12-12-
1-3-22
1--122
884デフォルトの名無しさん:2014/01/15(水) 07:55:13.20
>>869
Haskell ただの再帰 http://ideone.com/GYXHG0
885デフォルトの名無しさん:2014/01/15(水) 11:23:57.47
886デフォルトの名無しさん:2014/01/16(木) 20:46:13.96
   |=番兵|_
  ( ・ω・) <ステンバーイ
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)
887片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 03:56:03.63
お題:与えられたファイルがMS-DOSで実行可能か判定するプログラム。
実行可能ならば「実行可能です」と表示し、可能でなければ
「実行可能ではありません」と表示する。
888片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 04:27:08.12
お題:開平法により、正の実数rの正の平方根の十進表示を小数点以下n桁まで求めるプログラム。
889片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 04:58:06.84
お題:循環小数を次のようなルールに従って文字列で表記する。
※小数点以下において循環する最初の部分をカッコで囲み、それ以下を省略する。
例)2.2111111…→2.2(1)
  2.020202…→2.(02)
  12.3123123…→12.(312)

この表記に従った2つの循環小数の和を求めるプログラムを作れ。
例)2.2(1)+2.(02)=4.2(31)
  2.(02)+12.(312)=14.(332514)
890デフォルトの名無しさん:2014/01/17(金) 05:03:17.79
>>887
ヘッダのチェックしか検査項目は無いがCOM形式も想定するとだとそれすら不要。
お題を出すなら出すでもうちょい頭使ってお題考えろよ。
それともあれか。
プログラムがクラッシュするかどうか、停止性問題でも解けってのか?あほらしい。
891片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 05:09:14.08
>>890
.batと.comについては、拡張子チェックだけでOKとします。
892片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 05:35:28.03
.exeについては、MZで始まるDOSヘッダがありPEヘッダがないものをOKとします
893デフォルトの名無しさん:2014/01/17(金) 09:54:19.63
宿題やらされてる感w
894デフォルトの名無しさん:2014/01/17(金) 18:02:16.39
ありありw
895デフォルトの名無しさん:2014/01/17(金) 18:42:31.67
このクソコテは発作か何かで発言してるの?
896片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 19:33:50.01
お題:単語データファイル「words.txt」から英単語リストを読み取り、アルファベットでしりとりを行い、
一番長いしりとりの単語列を出力せよ。同じ単語は二度使わない。
897片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 20:02:33.98
お題:光学ドライブのトレイの開閉
898片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 20:05:09.46
お題:イライラ棒ゲーム
899片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/17(金) 20:17:21.99
さあ、究極の挫折感を味わい尽くせ!!!
900デフォルトの名無しさん:2014/01/18(土) 00:35:53.85
>>895
プログラマの成れの果て。将来のおまえら。
901デフォルトの名無しさん:2014/01/18(土) 01:48:54.80
コイツの出したお題はレベル低すぎて手を出す気にもならん奴が大半だろうな
902デフォルトの名無しさん:2014/01/18(土) 02:08:19.10
>>854 J
t=:2j2 5j2 2j5 5j5
w=:'ABCD'
f=:3 :'w{~I.(= <./)|t-y'

f 3j3
A
f 4j3
B
903デフォルトの名無しさん:2014/01/18(土) 04:37:41.41
>>901
くそコテ擁護になって申し訳ないがお前のレベル判定とコード記述能力の方が疑問
904デフォルトの名無しさん:2014/01/18(土) 04:51:43.96
>>903
お前はリファレンス通りに叩くだけな>>887>>897を自信満々で>>899って宣言されてやる気になれんの?
905デフォルトの名無しさん:2014/01/18(土) 05:14:49.19
>>854 Io
f:=method(x,y,if(x<4,if(y<4,"A","C"),if(y<4,"B","D")))

Io> f(3,3)
==> A
Io> f(3,4)
==> C
Io> f(4,3)
==> B
Io> f(4,4)
==> D
906デフォルトの名無しさん:2014/01/18(土) 19:07:14.67
>>904
はいはい、解く気も出題する気もない人はこのスレから出ていってくれないか?
それとも、名誉を賭けてわたくしと三番勝負のタイトルマッチでもするか?
はたまた、数百万円ほどのはした金や人の命を賭けたらやる気になるかい? 全人類の命を賭けてわたくしとご勝負致しますかね?
907デフォルトの名無しさん:2014/01/18(土) 19:20:54.26
するわけねーだろ
908デフォルトの名無しさん:2014/01/18(土) 19:45:31.93
まさかメモリマップトファイルとか??????????
909デフォルトの名無しさん:2014/01/18(土) 20:11:17.69
>>906
QZと勝負してくれよ酉つけて長期戦でさ
ここで待ってればいつかくるよ
910デフォルトの名無しさん:2014/01/18(土) 20:22:01.76
お題:2文字以上の文字列が与えられたとき、隣り合う文字の大きい方の文字を
隣り合う文字の間に挿入した文字列を返す。

"Personal" -> "Peerrsssoonnall"
"Hello, world!" -> "Heellllooo,, wwworrrlldd!"
911デフォルトの名無しさん:2014/01/18(土) 20:53:29.36
>>910 Squeak Smalltalk
| lengthen |
lengthen := [:str |
  | out |
  out := String new writeStream.
  str overlappingPairsDo: [:a :b | out nextPutAll: {a. a max: b}].
  out nextPut: str last; contents].

lengthen value: 'Personal'. "=> 'Peerrsssoonnall' "
lengthen value: 'Hello, world!'. "=> 'Heellllooo,, wwworrrlldd!' "
912片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/18(土) 20:54:55.69
>>910 C 携帯から
#include <stdio.h>
#include <string.h>
main(){char s[256];int i,len;
fgets(s,256,stdin);len=strlen(s);s[--len]=0;putchar(s[0]);
for (i=1;i<len-1;i++){
if (s[i-1]>s[i]) putchar(s[i-1]);else putchar(s[i]);
putchar(s[i]);
if (s[i]>s[i+1]) putchar(s[i]);else putchar(s[i+1]);
}putchar(s[len-1]);}
913デフォルトの名無しさん:2014/01/18(土) 21:04:24.94
>>910
; Common Lisp
(let ((str "Personal"))
 (format nil "~{~{~c~c~}~}"
     (map 'list
        (lambda (x y) (list x (if (char< x y) y x)))
        str
        (subseq str 1))))
914デフォルトの名無しさん:2014/01/18(土) 21:23:17.03
>>910 Haskell
intersperseMaxNbr :: Ord a => [a] -> [a]
intersperseMaxNbr [] = []
intersperseMaxNbr [x] = [x]
intersperseMaxNbr (x:y:ys) = x : max x y : intersperseMaxNbr (y:ys)

main = print $ intersperseMaxNbr "Hello, world!" -- > "Heellllooo,, wwworrrlldd!"
915デフォルトの名無しさん:2014/01/18(土) 21:28:30.13
>>910 Python
#!/usr/bin/python
import sys
a = unicode(sys.argv[1], 'utf-8')
b = [max([a[i],a[i+1]]) for i in range(len(a)-1)] + ['']
print "".join(["".join(ab) for ab in zip(a,b)])
916デフォルトの名無しさん:2014/01/18(土) 21:39:02.38
>>910 c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *f910(const char *cs) {
int i, len = strlen(cs), blen = len * 2 - 1;
char *buff = malloc(blen + 1);
for (i = 0; i < len; i++) buff[i * 2] = cs[i];
for (i = 1; i < blen; i += 2) {
buff[i] = buff[i - 1] < buff[i + 1] ? buff[i + 1] : buff[i - 1];
}
buff[blen] = '\0';
return buff;
}
void check(const char* cs) {
char *p = f910(cs);
printf("%s\n%s\n", cs, p);
free(p);
}
int main() {
check("Personal");
check("Hello, world!");
return 0;
}
917デフォルトの名無しさん:2014/01/18(土) 21:44:07.50
>>910 HSP
#module
#define ctype max(%1,%2) (((%1)>(%2))*((%1)-(%2))+(%2))
#defcfunc f910 str s_
s=s_
ret=strmid(s, 0, 1)
repeat strlen(s)-1
ret+=strf("%c%c", max(peek(s, cnt), peek(s, cnt+1)), peek(s, cnt+1))
loop
return ret
#global

mes f910("Personal")
mes f910("Hello, world!")
918デフォルトの名無しさん:2014/01/18(土) 22:10:31.89
>>910 C
#include <stdio.h>
void func(char *s)
{
  int a, b;
  if ((a = *s++) == '\0') return;
  for (putchar(a); b = *s++; a > b ? putchar(a) : putchar(b), putchar(b), a = b);
  putchar('\n');
}
int main(int argc, char **argv)
{
  if (argc >= 2) func(argv[1]);
  return 0;
}
919デフォルトの名無しさん:2014/01/18(土) 22:41:07.05
>>911 Squeak Smalltalk 別解。>>914 を参考に
| lengthen |
lengthen := nil.
lengthen := [:str |
  str size < 2 ifTrue: [str] ifFalse: [
    (str first: 1), (str first: 2) max, (lengthen value: str allButFirst)]].

lengthen value: 'Personal'. "=> 'Peerrsssoonnall' "
lengthen value: 'Hello, world!'. "=> 'Heellllooo,, wwworrrlldd!' "
920デフォルトの名無しさん:2014/01/18(土) 22:52:23.68
>>910 ruby 1.8.6
def f910(s)
cs = s.scan(/./)
cs.zip((0...cs.size - 1).inject([]) {|a, i| a << cs[i, 2].max}).join
end
p f910('Personal')
p f910('Hello, world!')
921デフォルトの名無しさん:2014/01/18(土) 23:11:52.93
>>906
適切なお題だと思ってるのに挑戦しないお前のほうがこのスレに居るべきじゃない人間だな。
お前はアレが手頃な難易度もしくは十分高い難易度の適切なお題だと思ってるんだろ?
922片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/18(土) 23:40:08.73
誰と話してるん?
923デフォルトの名無しさん:2014/01/18(土) 23:46:11.86
もう一人のお前
924デフォルトの名無しさん:2014/01/19(日) 00:21:46.29
>>910 Io
Range
f:=method(s,
0 to(s size-1)map(i,s slice(i,i+1))reduce(c,d,
c .. if(e>d,e,d).. e:=d
)
)

Io> f("Personal")
==> Peerrsssoonnall
Io> f("Hello, world!")
==> Heellllooo,, wwworrrlldd!
925デフォルトの名無しさん:2014/01/19(日) 00:39:47.03
>>924 訂正
>>910 Io
Range
f:=method(s,
a:=0 to(s size-1)map(i,s slice(i,i+1))
e:=a first
a reduce(c,d,c .. if(e>d,e,d).. e=d)
)
926デフォルトの名無しさん:2014/01/19(日) 00:51:47.04
>>910 Objective Caml version 3.08.1
let cs2s cs = String.concat "" (List.map (fun c -> String.make 1 c) cs);;
let f910 s =
let rec f cs i =
if i == 0 then s.[i]::cs
else f (max s.[i - 1] s.[i]::s.[i]::cs) (pred i) in
cs2s (f [] (String.length s - 1));;
print_string (f910 "Personal");;
print_newline ();;
print_string (f910 "Hello, world!");;
927デフォルトの名無しさん:2014/01/19(日) 01:06:34.82
>>910 Python >>915別解
#!/usr/bin/python
import sys
if len(sys.argv)<2 or len(sys.argv[1])==0: sys.exit(0)
a = unicode(sys.argv[1], 'utf-8')
print reduce(lambda x,y: x+max(x[-1],y)+y, a)
928デフォルトの名無しさん:2014/01/19(日) 03:58:03.19
>>910 c++
#include <iostream>
#include <vector>
#include <numeric>
std::string f(std::string s, char c) {
return s.empty() ? s + c : s + (s[s.size() - 1] < c ? c : s[s.size() - 1]) + c;
}
std::string f910(std::string s) {
return std::accumulate(s.begin(), s.end(), std::string(), f);
}
void check(std::string s) {
std::cout << s << std::endl;
std::cout << f910(s) << std::endl;
}
int main() {
check("Personal");
check("Hello, world!");
return 0;
}
929デフォルトの名無しさん:2014/01/19(日) 06:32:54.47
お題:3次元の配列を連番で初期化する。
Jの場合
a=:i.2 3 4
a
0 1 2 3
4 5 6 7
8 9 10 11

12 13 14 15
16 17 18 19
20 21 22 23

(<1;2;3){a
23
930デフォルトの名無しさん:2014/01/19(日) 07:06:47.81
>>929
i.2 3 4 の意味がわからない。
931930:2014/01/19(日) 07:12:54.92
わかりました。
932デフォルトの名無しさん:2014/01/19(日) 08:21:54.44
>>929 Haskell
とりあえずリストで http://ideone.com/T7vRQg
933デフォルトの名無しさん:2014/01/19(日) 10:21:48.16
>>929 ruby 1.8.6
require 'enumerator'
def a3d(x, y, z)
(0...x * y * z).enum_slice(y * z).map {|xa| xa.enum_slice(z).to_a}
end
p a3d(2, 3, 4)

[[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 1
9], [20, 21, 22, 23]]]
934デフォルトの名無しさん:2014/01/19(日) 12:56:47.90
>>929
ttp://ideone.com/JJHFOL
べたーC。Jは強力だなー。俺には読めないのが残念だ。
935デフォルトの名無しさん:2014/01/19(日) 13:42:10.01
>>929 十進BASIC
DIM a(2,3,4)
FOR i=1 TO 2
FOR j=1 TO 3
FOR k=1 TO 4
LET a(i,j,k)=i*j*k
NEXT K
NEXT J
NEXT I
MAT PRINT a;
END

1 2 3 4
2 4 6 8
3 6 9 12

2 4 6 8
4 8 12 16
6 12 18 24
936デフォルトの名無しさん:2014/01/19(日) 13:58:24.74
>>929
# R
array(0:23, 4:2)
937デフォルトの名無しさん:2014/01/19(日) 14:38:01.97
>>910 十進BASIC
FUNCTION f$(s$)
LET a$ = s$(1:1)
FOR i = 2 TO LEN(s$)
IF s$(i-1:i-1) < s$(i:i) THEN
LET c$ = s$(i:i)
ELSE
LET c$ = s$(i-1:i-1)
END IF
LET a$ = a$ & c$ & s$(i:i)
NEXT I
LET f$ = a$
END FUNCTION

PRINT f$("BASIC")
END
実行結果
BBASSSIIC
938デフォルトの名無しさん:2014/01/19(日) 17:09:38.14
>>929 Maxima
f(a,b,c):=fillarray(make_array(fixnum,a,b,c),makelist(i,i,0,a*b*c-1));

(%i110) f(2,3,4);
(%o110) {Array: #3A(((0 1 2 3) (4 5 6 7) (8 9 10 11))
((12 13 14 15) (16 17 18 19) (20 21 22 23)))}
(%i114) f(2,3,4)[1,2,3];
(%o114) 23
939デフォルトの名無しさん:2014/01/19(日) 23:57:12.35
>>929 Squeak Smalltalk
| multiDimIota a |
multiDimIota := [:arr |
  arr allButFirst reversed inject: (0 to: (arr reduce: #*)-1)
    into: [:acc :m | acc groupsOf: m atATimeCollect: [:g | g]]].

a := multiDimIota value: #(2 3 4).
"=> #(#(#(0 1 2 3) #(4 5 6 7) #(8 9 10 11)) #(#(12 13 14 15) #(16 17 18 19) #(20 21 22 23))) "

((a at: 2) at: 3) at: 4 "=> 23 "
940デフォルトの名無しさん:2014/01/20(月) 03:26:54.86
お題: 二次元空間を整数グリッドで表わし、すべての整数グリッド座標を辿る関数。
出力(例):
(0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1) (2, 0) (2, 1) ...
出力(例):
(0, 0) (1, 0) (0, 1) (-1, 0) (0, -1) (2, 0) (1, 1) (0, 2) (-1, 1) (-2, 0) (-1, -1) (0, -2) (1, -1) (3, 0) (2, 1) ...

お題: 中心を原点とする円の半径が与えられたとき、その円内のすべての整数グリッド座標を辿る関数。
入力(例): 2
出力(例):
(0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1) (2, 0) (0, 2) (-2, 0) (0, -2)
出力(例):
(0, 0) (1, 0) (0, 1) (-1, 0) (0, -1) (2, 0) (1, 1) (0, 2) (-1, 1) (-2, 0) (-1, -1) (0, -2) (1, -1)
941デフォルトの名無しさん:2014/01/20(月) 03:29:33.71
Polygon関数系?
942デフォルトの名無しさん:2014/01/20(月) 03:43:05.12
>>888>>889 はいい問題なんだが、根気よくこつこつと積み上げるのが大変だね‥‥>>896 もなんとか手をつけたいね‥‥
今日は ::new[](std::nothrow) ではまってしまった‥‥やっぱり例外はちゃんと把握しないといけないのかな‥‥
943デフォルトの名無しさん:2014/01/20(月) 06:10:39.76
日記帳っぷりが片山そっくり
944デフォルトの名無しさん:2014/01/20(月) 07:28:14.40
>>940 J
f1=:3 :'+/\0,((2#>:i.y)#4|i.+:y){1j0 0j1 _1j0 0j_1'
f1 3
0 1 1j1 0j1 _1j1 _1 _1j_1 0j_1 1j_1 2j_1 2 2j1 2j2

f2=:3 :';(<@#"1~ y>:|)(|.j.~/])i:y'
f2 2
0j2 _1j1 0j1 1j1 _2 _1 0 1 2 _1j_1 0j_1 1j_1 0j_2

座標を複素数で表しています。虚数部が0の場合、省略して表示されています。
945デフォルトの名無しさん:2014/01/20(月) 08:00:19.33
946デフォルトの名無しさん:2014/01/20(月) 19:38:19.42
>>940 ruby 1.8.6
def f940a(n)
(1..n).inject([[0, 0]]){|a, i|
(1 - i..i).each {|x| a << [x, -i]}
(1 - i..i).each {|y| a << [i, y]}
(1 - i..i).each {|x| a << [-x, i]}
(1 - i..i).each {|y| a << [-i, -y]}; a
}
end
def f940b(r)
f940a(r).select{|a| a.first ** 2 + a.last ** 2 <= r ** 2}
end
p f940a(2)
p f940b(2)

[[0, 0], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [
-1, -2], [0, -2], [1, -2], [2, -2], [2, -1], [2, 0], [2, 1], [2, 2], [1, 2], [0,
2], [-1, 2], [-2, 2], [-2, 1], [-2, 0], [-2, -1], [-2, -2]]
[[0, 0], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [
0, -2], [2, 0], [0, 2], [-2, 0]]
947デフォルトの名無しさん:2014/01/20(月) 21:02:05.68
お題:実数の整数部分と小数点以下を入れ換える。
1.23 -> 23.1
20.24 -> 24.2
2.24 -> 24.2
0.01 -> 1.0
948デフォルトの名無しさん:2014/01/20(月) 21:09:13.95
>>947 ruby 1.8.6
def f947(value)
value.to_s.gsub(/(\d+).(\d+)/, '\2.\1').to_f
end
p f947(1.23)
p f947(20.24)
p f947(2.24)
p f947(0.01)

23.1
24.2
24.2
1.0
949デフォルトの名無しさん:2014/01/20(月) 21:44:36.09
>>947 Squeak Smalltalk
| swapIntFracPartOf |
swapIntFracPartOf := [:x | ((x asString subStrings: '.') reduce: [:int :frac | frac, '.', int]) asNumber].
swapIntFracPartOf value: 1.23. "=> 23.1 "
swapIntFracPartOf value: 20.24. "=> 24.2 "
swapIntFracPartOf value: 2.24. "=> 24.2 "
swapIntFracPartOf value: 0.01. "=> 1.0 "
950デフォルトの名無しさん:2014/01/21(火) 00:43:29.82
>>947
ttp://ideone.com/lA9iTk
ほぼC。小数点以下の誤差でうまく動かなかったので半手動で動いている。
こんな面倒なこと毎回やってられん。複雑な問題になったらバグの元だなぁ・・・。Orz
今回はラッキーだった。
951デフォルトの名無しさん:2014/01/21(火) 00:45:18.79
>>940 Python
def f940(r):
  yield (0,0)
  for i in range(1,1+r):
    for j in range(i): yield (i,j)
    for j in range(i*2): yield (i-j,i)
    for j in range(i*2): yield (-i,i-j)
    for j in range(i*2): yield (j-i,-i)
    for j in range(i): yield (i,j-i)
r = 2
print list(f940(r))
print [(x,y) for (x,y) in f940(r) if x*x+y*y<=r*r]
952デフォルトの名無しさん:2014/01/21(火) 04:08:25.70
953デフォルトの名無しさん:2014/01/21(火) 12:34:45.69
>>940 Squeak Smalltalk
| gridIntersecs gridIntersecsInCircle |
gridIntersecs := Generator on: [:g |
  | pen |
  g yield: ((pen := Pen new) up; place: 0@0; location).
  1 to: Float infinity do: [:n |
    2 timesRepeat: [pen turn: 90. n timesRepeat: [g yield: (pen go: 1; location) rounded]]]].
(gridIntersecs next: 12) asArray.
"=> {0@0 . 1@0 . 1@1 . 0@1 . -1@1 . -1@0 . -1@ -1 . 0@ -1 . 1@ -1 . 2@ -1 . 2@0 . 2@1} "

gridIntersecsInCircle := [:radius |
  | intersecs |
  intersecs := gridIntersecs copy reset.
  Generator on: [:g |
    [intersecs peek abs <= radius asPoint] whileTrue: [
      intersecs next in: [:next | next r <= radius ifTrue: [g yield: next]]]]].
(gridIntersecsInCircle value: 2) contents
"=> {0@0 . 1@0 . 1@1 . 0@1 . -1@1 . -1@0 . -1@ -1 . 0@ -1 . 1@ -1 . 2@0 . 0@2 . -2@0 . 0@ -2} "
954デフォルトの名無しさん:2014/01/21(火) 13:03:34.67
955デフォルトの名無しさん:2014/01/21(火) 19:09:07.91
お題:自然数nの階乗の素因数2の個数を求める。(2014年センター試験)
n=5 -> 3
n=13 -> 10
956デフォルトの名無しさん:2014/01/21(火) 19:44:42.33
>>955
; Common Lisp
(defun f955 (n)
 (loop for i from 1 to n
    sum (loop for j = (/ i 2) then (/ j 2)
         while (integerp j)
         count t)))
957デフォルトの名無しさん:2014/01/21(火) 20:11:41.40
>>955 Squeak Smalltalk
| factorTwosInFactorialOf |
factorTwosInFactorialOf := [:n |
  (2 to: n) inject: 0 into: [:acc :m |
    [m isDivisibleBy: 2] whileTrue: [acc := acc + 1. m := m // 2].
    acc
  ]
].

factorTwosInFactorialOf value: 5. "=> 3 "
factorTwosInFactorialOf value: 13. "=> 10 "
958デフォルトの名無しさん:2014/01/21(火) 20:24:36.67
>>955 ruby 1.8.6
def f955(n)
def f(m, d, c = 0) m % d != 0 ? c : f(m / d, d, c + 1) end
(1..n).inject(0) {|sum, i| sum += f(i, 2)}
end
p f955(5)
p f955(13)

3
10
959デフォルトの名無しさん:2014/01/21(火) 21:30:12.29
>>955 PARI/GP
f(n)=factor(n!)[1,2]

? f(5)
%2 = 3
? f(13)
%3 = 10
? f(1000)
%4 = 994
960デフォルトの名無しさん:2014/01/21(火) 22:01:02.73
>>955 Haskell
import Data.Function

f955 :: Integer -> Integer
f955 n = foldr ((+) . fix (\f k -> if odd k then 0 else f (div k 2) + 1)) 0 [2,4..n]

main = print $ map f955 [1,2,3,4,5,13,1000] -- > [0,1,1,3,3,10,994]
961デフォルトの名無しさん:2014/01/21(火) 22:09:17.93
>>955 HSP
#module
#defcfunc f955 int x, local y, local r
y=x
while y
y/=2
r+=y
wend
return r
#global

list=1,2,3,4,5,13,1000
foreach list
mes f955(list.cnt)
loop
962デフォルトの名無しさん:2014/01/21(火) 23:18:23.12
>>961
すごい。whileループひとつでできちゃうのか。
963デフォルトの名無しさん:2014/01/21(火) 23:30:34.91
>>955 C

#include <stdio.h>
void f(int n){
printf("%d\n", n - __popcountsi2(n));
}
int main(){
f(5);
f(13);
f(1000);
return 0;
}


3
10
994
964デフォルトの名無しさん:2014/01/22(水) 00:59:03.22
>>955 Perl
use 5.016;
use warnings;

sub f { length join('', map{ (sprintf("%b", $_) =~ m/(0*)$/)[0] } (2 .. shift)) }

say f(5);
say f(13);
say f(1000);
965デフォルトの名無しさん:2014/01/22(水) 01:52:24.57
>>955 Io
f:=method(n,n-n asBinary asNumber%9)

Io> f(5)
==> 3
Io> f(13)
==> 10
Io> f(1000)
==> 994
966デフォルトの名無しさん:2014/01/22(水) 04:07:51.86
>>955 with Python

N= 5; import sympy as ts; ts.factorint(ts.factorial(N))[2]
===============================
3

N=13; import sympy as ts; ts.factorint(ts.factorial(N))[2]
===============================
10
967 ◆QZaw55cn4c :2014/01/22(水) 04:23:26.70
>>963
__popcountsi2 ...
968デフォルトの名無しさん:2014/01/22(水) 07:38:47.57
C++いつも書いてるものだが、数学はサッパリだ。Orz
お前らが羨ましいぜ。
969デフォルトの名無しさん:2014/01/22(水) 13:32:57.36
死ねゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミゴミwwwww
970デフォルトの名無しさん:2014/01/22(水) 15:12:30.99
お題:行編集のまねごと。
最初はカーソルのみの状態で文字をカーソルの前に挿入する。
'['でカーソルを前へ、']'で後ろに移動する。

"abc[-[[/" -> "a/b-c"
"a[b[c]]d" -> "cbad"
971デフォルトの名無しさん:2014/01/22(水) 15:58:11.89
>>970 HSP
#module
#define global ctype f970(%1="", %2="", %3=0) f970_(%1,%2,%3)
#define ctype max(%1,%2) (((%1)-(%2))*((%1)>(%2))+(%2))
#define ctype min(%1,%2) (((%1)-(%2))*((%1)<(%2))+(%2))
#defcfunc f970_ str cmd_, str s_, int p_, local cmd, local s, local p, local l, local t
s=s_
cmd=cmd_
l=strlen(s)
p=max(min(p_, l), 0)
repeat strlen(cmd)
c=peek(cmd, cnt)
switch c
case '['
p=max(p-1, 0)
swbreak
case ']'
p=min(p+1, l)
swbreak
default
s=strf("%s%c%s", strmid(s, 0, p), c, strmid(s, p, l-p))
p++
l++
swbreak
swend
loop
mref t, 64 : t=p
return s
#global

mes f970("abc[-[[/")
mes f970("a[b[c]]d")
972デフォルトの名無しさん:2014/01/22(水) 17:27:27.61
973デフォルトの名無しさん:2014/01/22(水) 17:28:08.80
>>970 ruby 1.8.6
def f970(s)
l, r = [], []
s.scan(/./).each {|c|
case c
when '['
r.unshift l.pop if !l.empty?
when ']'
l.push r.shift if !r.empty?
else
l << c
end
}
[l, r].join
end
p f970("abc[-[[/")
p f970("a[b[c]]d")

"a/b-c"
"cbad"

>>955 ruby 1.8.6 mathn使用
require 'mathn'
def f955(n)
n == 1 ? 0 : (2..n).inject(1) {|r, i| r * i}.prime_division[0][1]
end
p [1,2,3,4,5,13,1000].map {|n| f955(n)}

[0, 1, 1, 3, 3, 10, 994]
974デフォルトの名無しさん:2014/01/22(水) 18:21:38.24
>>970 Squeak Smalltalk
| lineEdit |
lineEdit := [:str |
  | cursor |
  cursor := 0.
  (str inject: OrderedCollection new into: [:coln :chr |
    chr caseOf: {
      [$[]->[cursor := cursor - 1].
      [$]]->[cursor := cursor + 1]
    } otherwise: [coln add: chr afterIndex: cursor. cursor := cursor + 1].
  coln]) as: String
].

lineEdit value: 'abc[-[[/'. "=> 'a/b-c' "
lineEdit value: 'a[b[c]]d'. "=> 'cbad' "
975デフォルトの名無しさん:2014/01/22(水) 18:28:54.77
>>947 HSP
#module
#defcfunc f947 double x
if x<0.0 : return "-"+f947_int(strf("%.10f", -x))
return f947_int(strf("%.10f", x))

#defcfunc f947_int str s_, local s, local l, local r, local p
s=s_
l="" : r=""
p=instr(s, 0, ".")
l=strmid(s, 0, p)
r=strmid(s, p+1, strlen(s))
remove_tail_zero(r)
repeat strlen(r)-1
if peek(r, 0)!'0' : break
r=strmid(r, 1, strlen(r))
loop
remove_tail_zero(l)
return strf("%s.%s", r, l)

#deffunc remove_tail_zero var s, local i
for i, strlen(s)-1, 0, -1
if peek(s, i)!'0' : _break
poke s, i, 0
next
return
#global

mes f947(1.23)
mes f947(20.24)
mes f947(2.24)
mes f947(-0.01)
976デフォルトの名無しさん:2014/01/22(水) 19:33:55.08
977デフォルトの名無しさん:2014/01/22(水) 19:51:23.60
978デフォルトの名無しさん:2014/01/22(水) 20:44:23.92
>>970
ttp://ideone.com/xEfyeD
なんとかできたかな。
自分がゴミなのはわかってるけど、数学できなくてもコードは書ける証明。ってことで。
979デフォルトの名無しさん:2014/01/22(水) 21:13:18.97
>>970 Python
def f970(ss):
  i = 0
  xx = ""
  sft = {"[":-1,"]":1}
  for c in ss:
    if c in sft.keys():
      i += sft[c]
    else:
      xx = xx[:i] + c + xx[i:]
      i += 1
  return xx

for ss in ["abc[-[[/", "a[b[c]]d", "abcd[[@]]@efg"]:
  print "%s -> %s" % (ss, f970(ss))
980デフォルトの名無しさん:2014/01/22(水) 21:33:39.81
>>979 Io
Range
f method(s,
r := list
p := 0
a := 0 to(s size - 1) map(v, s at(v) asCharacter)
a foreach(c,
if(c == "[",
p = 0 max(p - 1)
,
if(c == "]", p = r size min(p + 1), r insertAt(c, p); p = p + 1)
)
)
r join
)

Io> f("abc[-[[/")
==> a/b-c
Io> f("a[b[c]]d")
==> cbad
981デフォルトの名無しさん:2014/01/22(水) 21:49:37.79
>>979
forの中で、iの範囲を制限するのが抜けてました。(_ _)
i = min(max(0,i),len(xx))
982デフォルトの名無しさん:2014/01/22(水) 21:56:23.44
>>978 の エラー制御板。
デバッガで開発してるのでエラーで吹き飛ぶのはあんまり考慮してません。開発中は止まったほうが有難いですし。
#include <iostream>
#include <string>
#include <algorithm>
std::string EditLine(std::string Command){
std::string ret;
int Cur = 0;
for (std::size_t i = 0; i < Command.size(); i++){
if (Command[i] == '['){
if (Cur > 0) Cur--;
continue;
}
if (Command[i] == ']'){
if (Cur <= ret.size()) Cur++;
continue;
} auto ins = std::inserter(ret, ret.begin() + (Cur++));
ins = Command[i];
} return ret;
} int main(){
std::string str = "abc[-[[/";
std::string str2 = "a[b[c]]d";
std::string R;
R = EditLine(str);
std::cout << str << " -> " << R << std::endl;
R = EditLine(str2);
std::cout << str2<< " -> " << R << std::endl;
return 0;
}
983デフォルトの名無しさん:2014/01/22(水) 22:27:27.43
>>973
def f970 s
  s.chars.inject [[],[]] do | ( l , r ) , c |
    case c
    when '['
      r.unshift l.pop if !l.empty?
    when ']'
      l.push r.shift if !r.empty?
    else
      l << c
    end
    [ l , r ]
  end.join
end
p f970("abc[-[[/")
p f970("a[b[c]]d")
984デフォルトの名無しさん:2014/01/22(水) 23:34:08.87
>>955 J
f =: - +/@#:

f 5
3
f 13
10
f 1000
994
985デフォルトの名無しさん:2014/01/23(木) 00:45:31.69
>>984
これ、- は何しているんですか?
986デフォルトの名無しさん:2014/01/23(木) 01:41:29.62
えーと。説明へただしなあ。本当にJ言語に興味があるなら基本知識は
自分で調べてください。
「-」自体は二項演算子の減算です。
f =: - +/@#:
は、引数をyで表す書き方をすると
f =:3 :'y - +/@#: y'
>>963
n - __popcountsi2(n)
に相当します。
987デフォルトの名無しさん:2014/01/23(木) 10:37:47.55
なるほど。分かりました。ありがとうございます。
988930:2014/01/23(木) 11:47:47.40
>>955 Prolog

'自然数nの階乗の素因数2の個数を求める。(2014年センター試験)'(_n,_自然数nの階乗の素因数2の個数) :-
    findsum(_ある自然数の素因数2の個数,(
          between(1,_n,_ある自然数),
          ある自然数の素因数2の個数を求める(_ある自然数,_ある自然数の素因数2の個数)),
        _自然数nの階乗の素因数2の個数).

ある自然数の素因数2の個数を求める(_ある自然数,_ある自然数の素因数2の個数) :-
    nth0(_ある自然数の素因数2の個数,_,_),
    \+(0 is _ある自然数 mod (2 ^ (_ある自然数の素因数2の個数 + 1))),!.

findsum(_選択項,_副目標,_合計) :-
    findall(_選択項,_副目標,_選択項ならび),
    sumlist(_選択項ならび,_合計).
989デフォルトの名無しさん:2014/01/23(木) 20:12:46.12
>>970 J
L=:3 : 0
if. 0<#a do.
b=:({:a),b
a=:}:a
end.
)
R=:3 : 0
if. 0<#b do.
a=:a,{.b
b=:;}.b
end.
)
A=:3 : 'a=:a,y'
f=:3 : 0
L`R`A @.('[]'&i.)"0 y
a,b
)

f'a[b[c]]d' [ a=:b=:''
cbad
f'abc[-[[/' [ a=:b=:''
a/b-c
990デフォルトの名無しさん:2014/01/23(木) 22:06:04.88
お題:円周率の歴史の長さからみれば出来立てほやほやのBBPの式を使って
円周率を小数点以下15桁まで求める。
  ∞
π=Σ(4/(8*k+1)-1/(4*k+2)-1/(8*k+5)-1/(8*k+6))/(16^k)
  k=0
991デフォルトの名無しさん:2014/01/23(木) 23:20:12.36
>>990 Squeak Smalltalk
| pi k epsilon delta |
pi := k := 0.
epsilon := 1/1e15.
[ delta := (4/(8*k+1))-(1/(4*k+2))-(1/(8*k+5))-(1/(8*k+6))/(16 raisedTo: k).
  k := k + 1.
  pi := pi + delta.
  delta > epsilon] whileTrue.
pi asScaledDecimal: 15 "=> 3.141592653589793s15 "
992デフォルトの名無しさん:2014/01/24(金) 03:22:22.23
次のスレ立ててくれ
993デフォルトの名無しさん:2014/01/24(金) 04:15:00.66
>>990
http://ideone.com/gIeEAT
数学できない俺にもできて嬉しい。<3
994デフォルトの名無しさん:2014/01/24(金) 10:00:10.62
次スレ
プログラミングのお題スレ Part3
http://toro.2ch.net/test/read.cgi/tech/1390525149/
995デフォルトの名無しさん:2014/01/24(金) 12:16:38.83
>>990 Perl
use 5.016;
use warnings;
use bignum;

sub imp {
(4 / (8 * $_[0] + 1) - 1 / (4 * $_[0] + 2) - 1 /
(8 * $_[0] + 5) - 1 / ( 8 * $_[0] + 6)) / (16 ** $_[0])
}

sub f {
sub {
$_[2] < 1.0e-15 ?
$_[1] :
__SUB__->($_[0] + 1, $_[1] + $_[2], imp($_[0] + 1))
}->(0, 0, imp(0))->ffround(-15)
}

say f();
996デフォルトの名無しさん:2014/01/24(金) 18:01:52.94
>>990 Io
r:=0
for(k,0,10,r=r+(4/(8*k+1)-1/(4*k+2)-1/(8*k+5)-1/(8*k+6))/(16**k))asString(0,15)
==> 3.141592653589793
997デフォルトの名無しさん:2014/01/24(金) 19:54:42.06
>>990 Haskell
pi' :: (Enum a, RealFrac a) => a
pi' = sum $ takeWhile (1/1e15 <) [(4/(8*k+1) - 1/(4*k+2) - 1/(8*k+5) - 1/(8*k+6))/(16^floor k) | k <- [0..]]

main = print pi' -- 3.141592653589793
998デフォルトの名無しさん:2014/01/25(土) 08:48:55.06
>>990 Lua
r=0
k=0
repeat
a=(4/(8*k+1)-1/(4*k+2)-1/(8*k+5)-1/(8*k+6))/(16^k)
r=r+a
k=k+1
until a<1e-15
print(("%.15f"):format(r))


3.141592653589793
999デフォルトの名無しさん:2014/01/25(土) 09:53:41.21
>>955 SWI-Prolog
?- N is 13,X is N - popcount(N).
N = 13,
X = 10.
1000デフォルトの名無しさん:2014/01/25(土) 14:25:16.59
うんこ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。