プログラミングのお題スレ
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/01/03(木) 14:46:14.42取り敢えず初心者はここで練習しよう
0002デフォルトの名無しさん
2013/01/03(木) 15:58:44.71http://ikura.2ch.net/test/read.cgi/kyoto/1336628583/
0003デフォルトの名無しさん
2013/01/03(木) 16:06:11.280004デフォルトの名無しさん
2013/01/03(木) 16:16:59.880005デフォルトの名無しさん
2013/01/03(木) 17:08:14.52自動販売機のシミュレート
簡単なファイル検索ソフト
0006デフォルトの名無しさん
2013/01/03(木) 17:41:07.34⇒ユニットごとの制御(冷却、加温、電磁コイル、ディスプレイ、音声等)
ユニットのエラーセンサも実装すること
0007デフォルトの名無しさん
2013/01/03(木) 17:49:03.540008デフォルトの名無しさん
2013/01/03(木) 19:18:28.290009デフォルトの名無しさん
2013/01/03(木) 19:32:29.38正月の間もアイちゃんの世話は必要だろ
0010デフォルトの名無しさん
2013/01/03(木) 19:49:28.19http://toro.2ch.net/test/read.cgi/tech/1354393458/
0011デフォルトの名無しさん
2013/01/03(木) 20:38:03.75・お金を受け取る
・お金か確認する
・お金が足りているか確認する
・商品を排出する
・お釣りを計算する
・お金を返金する
・商品を補充する
とりあえずこんなもんか
0012デフォルトの名無しさん
2013/01/03(木) 21:47:58.41・在庫切れの商品のランプを消灯する
・現在の投入金額によって購入可能な商品のランプを点す
・つり銭を補充する
・つり銭切れの場合販売中止にする
0013デフォルトの名無しさん
2013/01/03(木) 22:44:08.31当番の人以外は休み
0014デフォルトの名無しさん
2013/01/04(金) 10:38:16.36言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0015デフォルトの名無しさん
2013/01/05(土) 00:07:49.06http://ideone.com/rvkoBh
0016デフォルトの名無しさん
2013/01/06(日) 01:28:30.920017デフォルトの名無しさん
2013/01/06(日) 04:14:42.78商品はどうやって表現してるの?
0018デフォルトの名無しさん
2013/01/08(火) 20:01:43.170019デフォルトの名無しさん
2013/01/09(水) 06:34:17.550020デフォルトの名無しさん
2013/01/15(火) 01:52:36.770021デフォルトの名無しさん
2013/01/15(火) 01:58:49.470022デフォルトの名無しさん
2013/01/15(火) 02:03:58.900023デフォルトの名無しさん
2013/01/19(土) 08:42:00.950024片山博文MZパンク ◆0lBZNi.Q7evd
2013/01/24(木) 07:17:48.62○×ゲーム
0025デフォルトの名無しさん
2013/01/25(金) 03:21:44.66テキストベースでやってみました。
http://www1.axfc.net/uploader/so/2767370.zip
スパゲティなのは仕様です。
0026デフォルトの名無しさん
2013/01/25(金) 09:24:23.060027デフォルトの名無しさん
2013/01/25(金) 18:34:16.53002825
2013/01/26(土) 21:51:10.27というか、お題を読む限りGUIで作れって方針ぽいですね。
>>24
AIの方針ってどうすればいいですかね?
プレイヤーが負けか引き分けのみってのもどうかなと考えています。
0029デフォルトの名無しさん
2013/01/26(土) 23:11:59.320030デフォルトの名無しさん
2013/01/27(日) 02:13:47.390031片山博文MZパンク ◆0lBZNi.Q7evd
2013/01/27(日) 07:06:31.500032デフォルトの名無しさん
2013/01/27(日) 09:21:41.52アルゴリズムじゃない。ただのルール。
AI考える上でどういう思考パターンにすべきかって質問でしょ?
0033デフォルトの名無しさん
2013/01/27(日) 12:01:39.15まさかこんな人が業務用プログラムを組んでるって事はないだろうな...(心配)
0034デフォルトの名無しさん
2013/01/27(日) 12:25:15.06勝利判定するのに8通りもダラダラこんな記述するなんてスマートじゃないよね
×も考慮したら16通りも記述しないといけないし良い方法ないかな
0035デフォルトの名無しさん
2013/01/27(日) 13:25:41.33・あらかじめ作った勝利パターンの9bit値群とand取る
0036デフォルトの名無しさん
2013/01/27(日) 13:37:13.50ifを8通り記述するのも
ハードコーディングしてる点では同じだわな
インデックスのパターンを予めループで生成するのも
直接ループで判定するのも大して変わらない気もする
0037デフォルトの名無しさん
2013/01/27(日) 13:54:01.15http://toro.2ch.net/test/read.cgi/tech/1354070278/
に3目並べの回答が2個あった。
judge() がそれに当たる。
ttp://ideone.com/u2SEqK 〜 ベタ
ttp://ideone.com/JRObzy 〜 スマート
0038デフォルトの名無しさん
2013/01/27(日) 15:22:25.37どっちもべた書きしたほうがマシだな
ボードの大きさが変わるなら話は変わるけど
0039デフォルトの名無しさん
2013/01/28(月) 01:43:38.62チップサイズとrowsとcolsからwidth、heightを定義すればguiはいけそうだ
サイズ変わってもAIが機能するってのは少々難しそうですな
0040デフォルトの名無しさん
2013/01/28(月) 02:45:15.472つ目は、board[][] がメモリ上で連続した配列である必要があるけど、boardを不連続にする必要は
特にないし、どちらの勝利判定もボードサイズやプレイヤ数(○×に加えて△とか♪とか)の変化に
対応できるね。
0041片山博文MZパンク ◆0lBZNi.Q7evd
2013/01/29(火) 22:10:41.57次のお題。ペット育成ゲーム
0042デフォルトの名無しさん
2013/01/29(火) 22:13:42.560043デフォルトの名無しさん
2013/01/29(火) 22:18:51.470044デフォルトの名無しさん
2013/01/29(火) 22:44:28.49馬鹿と言われて悔しいならお題を解いてみろ
0045デフォルトの名無しさん
2013/01/29(火) 23:08:24.42アホじゃねーの
0046片山博文MZパンク ◆0lBZNi.Q7evd
2013/01/29(火) 23:15:33.300047デフォルトの名無しさん
2013/03/09(土) 14:39:09.280048デフォルトの名無しさん
2013/03/18(月) 22:24:11.79from random import sample
import string
LENGTH = 16
arrowed_letters = string.letters + string.digits + '_'
print ''.join(sample(arrowed_letters, LENGTH))
0049デフォルトの名無しさん
2013/04/21(日) 19:59:21.430050デフォルトの名無しさん
2013/05/21(火) 00:33:06.78( '_' )
0051デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0052デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.ANミニブログ『Croudia』がレートリミット無制限のAPIを公開
http://croudia.co.jp/NR20130731.html
TwitterのAPIを超えた!ミニブログ『Croudia』がレートリミット無制限のAPIを公開!
http://togetter.com/li/546360
0053デフォルトの名無しさん
2013/11/22(金) 18:59:21.860054デフォルトの名無しさん
2013/11/22(金) 21:40:12.86dc
?[5/dd0<a+]dsaxp
100!→24個
0055デフォルトの名無しさん
2013/11/22(金) 21:54:23.61(n factorial asString reversed findFirst: [:chr | chr ~= $0]) - 1
0056デフォルトの名無しさん
2013/11/22(金) 23:26:46.34http://toro.2ch.net/test/read.cgi/tech/1354393458/
は、このスレに合流します。
0057デフォルトの名無しさん
2013/11/22(金) 23:32:16.58(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
0058デフォルトの名無しさん
2013/11/23(土) 00:15:36.87f := 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
0059デフォルトの名無しさん
2013/11/23(土) 00:58:01.68(->> n bigint inc (range 1N) (reduce *) str (re-find #"0*$") count)
0060デフォルトの名無しさん
2013/11/23(土) 06:02:42.73int f(int n){
int z,i,t;
for(z=0,i=5;(t=n/i)>0;i*=5,z+=t);
return z;
}
0061デフォルトの名無しさん
2013/11/23(土) 07:39:27.35function f(n)
r=0
while n>0 do
n=math.floor(n/5)
r=r+n
end
return r
end
> =f(100)
24
0062デフォルトの名無しさん
2013/11/23(土) 09:59:29.66import Numeric
import Data.Char
main = print $ f 100
f n = (`div` 4) $ (n -) $ sum $ map digitToInt $ showIntAtBase 5 intToDigit n ""
24
0063デフォルトの名無しさん
2013/11/23(土) 10:20:13.43@Mathematica
tailZerosInFactorial[n_]:=Factorial[n]//
IntegerDigits//
Reverse//
TakeWhile[#,#==0&]&//
Length;
In := tailZerosInFactorial[100]
Out = 24
0064デフォルトの名無しさん
2013/11/23(土) 11:06:24.96def 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))
0065デフォルトの名無しさん
2013/11/23(土) 12:18:16.71( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0066デフォルトの名無しさん
2013/11/23(土) 13:49:24.95n=25
mes fact_zero(n)
stop
#defcfunc fact_zero int x
if x<5 : return 0
return x/5+fact_zero(x/5)
0067デフォルトの名無しさん
2013/11/23(土) 14:41:14.63f=:3 :'+/5=,q:>:i.y'
f 100
24
>>62 の真似
(%&4@- [:+/5#.inv]) 1234567
308638
0068デフォルトの名無しさん
2013/11/23(土) 17:55:42.69ただし、どの文字も元と同じ位置ではないこと。
0069デフォルトの名無しさん
2013/11/23(土) 18:57:48.38極端な例だけど aaaaa とかどうするの?
0070デフォルトの名無しさん
2013/11/23(土) 19:41:12.90なるほど。たにかに、並べ替えても見た目は同じになってしまいますね。
結果として見た目が同じでも、ちゃんと並べ替えの操作がおこなわれていれば
okとしましょう。
0071デフォルトの名無しさん
2013/11/23(土) 20:06:30.05| 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' "
0072デフォルトの名無しさん
2013/11/23(土) 20:18:26.59C++だと簡単!
ttp://ideone.com/WKvGp1
C++で階乗は多倍長精度演算がまだ入ってない事もあって扱いづらいし、自作すると遅い!
0073デフォルトの名無しさん
2013/11/23(土) 20:19:49.76@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
0074デフォルトの名無しさん
2013/11/23(土) 20:22:23.5000:00〜23:59までのデジタル時計のゾロ目を羅列せよ。表示形式は問わない。
0075デフォルトの名無しさん
2013/11/23(土) 20:29:27.00げ、shuffle関数ってムーブするんか。ワザワザ選んで使ったというのに。
std::random_shuffleというベタな関数があるのでそっちに置き換えてください。
0076デフォルトの名無しさん
2013/11/23(土) 20:43:36.360077デフォルトの名無しさん
2013/11/23(土) 20:43:48.05@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"}
0078デフォルトの名無しさん
2013/11/23(土) 21:05:07.25もしかして俺間違ってる?
ttp://ideone.com/PMvL0r
0079片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 21:06:56.85#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; }
0080デフォルトの名無しさん
2013/11/23(土) 21:07:35.20いや、ランダムオブジェクトをムーブしちゃうんで二周目エラーになるんじゃないかなーと。
0081デフォルトの名無しさん
2013/11/23(土) 21:09:22.65いや、お察しの通り俺の出題が曖昧でした。
狙いはまさにそれですw
0082デフォルトの名無しさん
2013/11/23(土) 21:10:17.83import 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);
}
}
008382
2013/11/23(土) 21:15:01.310084デフォルトの名無しさん
2013/11/23(土) 21:15:48.14aaaaaとか渡すと停止しなくなるけど
http://ideone.com/pnp2L6
位置を考慮しないなら
(apply str (shuffle (seq "hoge")))
0085デフォルトの名無しさん
2013/11/23(土) 21:17:34.29('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') "
0086デフォルトの名無しさん
2013/11/23(土) 21:20:29.97そりゃ良かった。ラッキラッキー。
0087デフォルトの名無しさん
2013/11/23(土) 21:21:55.30手抜き
(map #(format "%d%d:%d%d" % % % %) (range 3))
0088デフォルトの名無しさん
2013/11/23(土) 21:26:50.26ムーブされないよ
0089デフォルトの名無しさん
2013/11/23(土) 21:28:43.28え、そうなの?なんか引数に&&ついてたからてっきり・・・。
このへんの仕様はまだよくわかってないんだよね。勉強不足ぅ〜。
検証ありがとう。
0090デフォルトの名無しさん
2013/11/23(土) 21:28:54.98('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') "
009177
2013/11/23(土) 21:31:27.56@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"}
0092デフォルトの名無しさん
2013/11/23(土) 21:33:56.290093デフォルトの名無しさん
2013/11/23(土) 21:35:04.860094デフォルトの名無しさん
2013/11/23(土) 21:35:48.760095デフォルトの名無しさん
2013/11/23(土) 21:38:01.760096デフォルトの名無しさん
2013/11/23(土) 21:39:46.19ドラえもんに頼っているのび太君はフィクションでは科学者になったが、
実際は多分ダメ人間になってしまうと思う。
0097デフォルトの名無しさん
2013/11/23(土) 21:44:21.730098デフォルトの名無しさん
2013/11/23(土) 21:44:22.17前スレのタイル塗り問題の時みたいに。
解答も大事だけど、どちらかというとコードを書く方が主旨だから、
出題と同時に答えを書いても問題ないと思うんだけど。
言語指定があると宿題感が強いけど、
フリースタイルだからまだ良いかなと思う。
0099デフォルトの名無しさん
2013/11/23(土) 21:44:58.23アレはドラえもんが壊れたから科学者になれたんだよ。ちゃんと乳離れできたって意味で。
まー、宿題をこんなところでやってるようじゃ社会人になってからPGとしては産廃だろうね。
それを容認するのかどうか。でも個人的にはあんまりいい感じはしないね。
0100デフォルトの名無しさん
2013/11/23(土) 21:49:43.030101デフォルトの名無しさん
2013/11/23(土) 21:52:37.66s="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
0102片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 22:28:17.18? I+IV
V
? II+II
IV
010374
2013/11/23(土) 22:29:32.28$ 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
0104片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 22:45:21.750105片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 23:01:13.050106片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 23:09:27.34? 11:00
01:00
0107片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 23:15:11.260108デフォルトの名無しさん
2013/11/23(土) 23:36:40.69あってるかな?
ttp://ideone.com/yXdjOP
ゲーム作ったことあったら、作るかもしれないプログラムだな。
0109片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 23:50:34.02(1)円と円。中心と半径が与えられる。
(2)線分と線分。端点座標が与えられる。
(3)点と三角形。点は位置座標が、三角形は頂点座標が与えられる。
0110デフォルトの名無しさん
2013/11/23(土) 23:55:08.500111片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/23(土) 23:57:59.220112デフォルトの名無しさん
2013/11/23(土) 23:58:13.82(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"
0113デフォルトの名無しさん
2013/11/24(日) 00:00:53.390114デフォルトの名無しさん
2013/11/24(日) 00:02:51.74>>99の言い分が強すぎた。
>>99をやっつけろー。
0116デフォルトの名無しさん
2013/11/24(日) 00:32:38.56採点ありがとう。後者はたしかにいらないね。
前者はマイルールでワザとやってるんだけど一般的じゃないのかなぁ。
0117デフォルトの名無しさん
2013/11/24(日) 00:59:07.390118デフォルトの名無しさん
2013/11/24(日) 01:03:36.06def 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")
0119デフォルトの名無しさん
2013/11/24(日) 01:19:27.02おk。俺はマイルールつづけるよ!
0120118
2013/11/24(日) 01:26:26.770121デフォルトの名無しさん
2013/11/24(日) 01:28:03.67| 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' "
0122sage
2013/11/24(日) 03:37:13.70「どの文字も元と同じ位置ではないこと」という条件を満たせていないみたい。
テストを書いてみました。
ideone.com/zJYz7K
0123デフォルトの名無しさん
2013/11/24(日) 04:00:32.38bool 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
0124デフォルトの名無しさん
2013/11/24(日) 04:13:09.100125デフォルトの名無しさん
2013/11/24(日) 04:31:50.70ご指摘ありがとうございます。入れ替える数値がずれてました。
(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))
0126デフォルトの名無しさん
2013/11/24(日) 09:27:29.30#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;
}
0127片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/24(日) 09:42:01.08不正解。2:30→9:30とならなければいけない。
%s%dの代わりに%02d使えよ
0128デフォルトの名無しさん
2013/11/24(日) 10:10:23.632:30→10:30 じゃなくて?
0129128
2013/11/24(日) 10:10:57.560130片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/24(日) 10:20:51.492:10は2:00から10分進んでいる。
時計の針が進むと鏡の世界では針が戻ったように見える。
2:10は鏡の世界では10:00から10分戻ったように見える。
0131デフォルトの名無しさん
2013/11/24(日) 12:27:09.20f =: 12 60 & ([ #: 720 - #.)
f 11 0
1 0
f 9 30
2 30
f 9 23
2 37
0132デフォルトの名無しさん
2013/11/24(日) 14:38:14.8612 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
0133片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/24(日) 15:18:15.09>>104のよくわかる解説:
0:00から1時間経つと1:00になる。
この間、長針は一回転し、短針は1/12だけ進む。
よって長針と短針の相対角速度は360*11÷12度/時となる。
0:00から相対角変位が360になるたびに長針と短針が重なる。
0134デフォルトの名無しさん
2013/11/24(日) 15:39:30.39(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
0135デフォルトの名無しさん
2013/11/24(日) 15:59:20.32分以下の端数は四捨五入するとして
(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
0136デフォルトの名無しさん
2013/11/24(日) 16:25:28.21で、そうなる時刻で秒単位で割り切れるのは0:00以外にはない。
0137デフォルトの名無しさん
2013/11/24(日) 18:19:30.140138デフォルトの名無しさん
2013/11/24(日) 18:45:25.480139デフォルトの名無しさん
2013/11/25(月) 20:01:23.60B0サイズの用紙の長辺はA0の対角線の長さであり、短辺はA1の対角線の長さである。
A、Bに続く数字が大きくなるたびに用紙の面積は半分になる。
A0からA10、B0からB10の用紙サイズをmm単位で求める。
0140デフォルトの名無しさん
2013/11/25(月) 20:34:38.190141デフォルトの名無しさん
2013/11/25(月) 20:57:46.39万有引力定数とかコリオリ力とか‥
0142デフォルトの名無しさん
2013/11/25(月) 21:45:17.59出展:http://pc11.2ch.net/test/read.cgi/tech/1208268461/111
0143デフォルトの名無しさん
2013/11/25(月) 22:37:22.51| x delta | Squeak Smalltalk 。�Aだけ
x := 1.
[(delta := -2 * x * x + 1 * x / 2) abs > (1/1e1000)] whileTrue: [x := x + delta].
^x * 2s1000
0144デフォルトの名無しさん
2013/11/25(月) 22:47:29.31C0〜C10
…
Z0〜Z10
も求めっろ
0145デフォルトの名無しさん
2013/11/25(月) 23:24:32.45http://ideone.com/AKrlKn
ideone で確認するにはどうすればいいの?
0146デフォルトの名無しさん
2013/11/25(月) 23:27:50.460147デフォルトの名無しさん
2013/11/25(月) 23:48:02.76ideone には対応してないんで、出力はっとく。
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
3501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147
0109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989
6872533965463318088296406206152583523950547457502877599617298355752203375318570113543746034084988471
6038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723
5288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162
0758474922657226002085584466521458398893944370926591800311388246468157082630100594858704003186480342
1948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698
6836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112
0249441341728531478105803603371077309182869314710171111683916581726889419758716582152128229518488472s1000
0148デフォルトの名無しさん
2013/11/26(火) 00:27:12.66門外漢なのでどういう理屈かわからんけど出力自体はできた。
ただ、あってるのかよくわからない。
ttp://ideone.com/4VpJCm
0149デフォルトの名無しさん
2013/11/26(火) 00:42:00.19(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
0150デフォルトの名無しさん
2013/11/26(火) 00:44:52.151.の結果張り間違えた。
1. (multi-sqrt 2 10) -> 1.4142135623
0151デフォルトの名無しさん
2013/11/26(火) 00:47:34.73こちらでもいろいろと試してみたんですが、この ideone で使われている
GNU Smalltalk って Smalltalk 処理系は、どうも駄目な子らしくて、
今回の Squeak Smalltalk のコードはまともに動かせられないみたいです。
0152デフォルトの名無しさん
2013/11/26(火) 00:50:36.73なるほど。それは余計なことしてしまったね。
しかし、多倍長演算羨ましいなー。
C++はいま策定中だからね。
0153デフォルトの名無しさん
2013/11/26(火) 12:49:44.57scale=10; sqrt(2)
1.4142135623
scale=1000; sqrt(2)
1.414213562373095048801688724209698078569671875376948073176679737990\
...
71111683916581726889419758716582152128229518488472
0154片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/26(火) 12:58:08.560155デフォルトの名無しさん
2013/11/26(火) 13:13:53.64f := 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]
0156デフォルトの名無しさん
2013/11/26(火) 13:20:00.03>>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), "]")
)
)
0157デフォルトの名無しさん
2013/11/26(火) 13:41:05.37ttp://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]
0158デフォルトの名無しさん
2013/11/26(火) 16:00:03.69| 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}
0159デフォルトの名無しさん
2013/11/26(火) 17:15:52.31例
37,61,86,9,81,50 -> 9,37,86,61,81,50
0160デフォルトの名無しさん
2013/11/26(火) 19:06:46.33{-# 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, [])
0161デフォルトの名無しさん
2013/11/26(火) 20:01:33.01@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}
0162デフォルトの名無しさん
2013/11/26(火) 20:05:54.65| 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)
0163デフォルトの名無しさん
2013/11/26(火) 20:13:52.58a = [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}
0164163
2013/11/26(火) 20:17:40.940165デフォルトの名無しさん
2013/11/26(火) 20:28:11.64いろいろダメだろ…^^;
0166デフォルトの名無しさん
2013/11/26(火) 20:29:00.670167デフォルトの名無しさん
2013/11/26(火) 20:54:02.14ハハッw ほんとすまんw
0168160
2013/11/26(火) 21:22:51.19訂正
{-# 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, [])
0169デフォルトの名無しさん
2013/11/26(火) 21:24:49.68; 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)))
0170デフォルトの名無しさん
2013/11/26(火) 21:33:27.46a, 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}
0171デフォルトの名無しさん
2013/11/26(火) 22:11:35.09| 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)
0172デフォルトの名無しさん
2013/11/26(火) 22:18:41.65( /:~@:{`[`]}~ [:I.2|]) 37 61 86 9 81 50
9 37 86 61 81 50
0173片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/26(火) 23:01:30.110174デフォルトの名無しさん
2013/11/26(火) 23:39:34.40あってるかな?C++
ttp://ideone.com/qIRbxq
0175デフォルトの名無しさん
2013/11/27(水) 00:07:40.18File standardInput foreach(asCharacter do(if(isLowercase,asUppercase, ..)print))
0176デフォルトの名無しさん
2013/11/27(水) 00:19:02.85; Common Lisp
(loop do (write-char (char-upcase (read-char))))
0177デフォルトの名無しさん
2013/11/27(水) 00:39:45.77C言語ってこれでいいんだっけ?
#include <stdio.h>
#include <ctype.h>
int main(){
int ch = EOF;
while ((ch = getchar()) != EOF){
ch = toupper(ch);
putc(ch, stdout);
}
return 0;
}
0178デフォルトの名無しさん
2013/11/27(水) 00:53:12.01#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;
}
0179デフォルトの名無しさん
2013/11/27(水) 00:55:15.63File standardInput foreach(asCharacter asUppercase print)
小文字かどうかのチェックはいらなかった
0180デフォルトの名無しさん
2013/11/27(水) 02:19:03.31ideone.com/g6IkwE
再帰に手を出すと敗北感が
0181デフォルトの名無しさん
2013/11/27(水) 02:20:32.88| process |
process := (Smalltalk at: #OSProcess) thisOSProcess.
[process stdOut nextPut: process stdIn next asUppercase] repeat
0182デフォルトの名無しさん
2013/11/27(水) 04:55:26.05いいですか
int main()
{
while(1)
{
static const char wwwwwww[] = "wwwwwwwwww";
char* java = new char[9999999];
}
}
0183デフォルトの名無しさん
2013/11/27(水) 06:44:36.20( ・ω・) んもー
○={=}〇,
|:::::::::\, ', ´ガリガリガリガリ
、、、、し 、、、(((.@)wwwww[] = "wwwwwwwwww";
0184デフォルトの名無しさん
2013/11/27(水) 06:56:36.93perl -pe 'tr/a-z/A-Z/'
0185デフォルトの名無しさん
2013/11/27(水) 07:51:07.71a <- c(37,61,86,9,81,50)
b <- a %% 2 == 1
a[b] <- sort(a[b])
cat(a)
9 37 86 61 81 50
0186デフォルトの名無しさん
2013/11/27(水) 08:29:00.60(ただし 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
0187デフォルトの名無しさん
2013/11/27(水) 11:39:52.62import 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!
0188デフォルトの名無しさん
2013/11/27(水) 12:09:52.45import 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!
0189デフォルトの名無しさん
2013/11/27(水) 15:14:38.76>>177の訂正
これでどうやろ?イデオンでEOFの入れ方わからんかった。
システムが勝手に突っ込んでるような気がするけど。
ttp://ideone.com/0ByfHI
0190デフォルトの名無しさん
2013/11/27(水) 16:18:36.80Perlerが飛びつくようなお題だな、とおもったらすぐ>>184でワロタw
0191デフォルトの名無しさん
2013/11/27(水) 16:31:15.70GNU 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
0192デフォルトの名無しさん
2013/11/27(水) 20:21:58.34入力から改行を取除いてしまうバグが入ってるよ。
あと、もし>>186で指摘した件(一文字ずつ逐次表示されない)の「訂正」という
のならばそれは解決していないけれど、単に一文字ずつの入出力をやめて行毎
の入出力に仕様変更したってこと?
「標準入力から一文字ずつ読み込んで、大文字化して、それを直ぐに表示」と
いう仕様でよければ、>>177の putc(ch, stdout); の後に fflush(stdout); を
書き足すだけで良いと思う。
0193デフォルトの名無しさん
2013/11/27(水) 20:26:43.16それから、なぜかEOFを削除しようとしてるみたいだけど、>>186の「EOFを受け
取ったときエラー」ってのは>>176(Common Cisp)のことで、>>177(C)とは関係
ないよ。そういう処理は不要。
そもそも>>186の言い方がまずかったか。あれで誤解させたかもしれない。
正しくは「(>>176は)ストリームが終端に達したときEOFエラーを生ずる」です。
>>186の言い方だと「EOF *文字* を受け取ったらエラー」だと思うわな、普通。
0194デフォルトの名無しさん
2013/11/27(水) 20:27:58.71参考:
d.hatena.ne.jp/katona/20070802/p4
> EOFは文脈によって3つの意味がある
> 1)EOFマクロ(#define EOF)
> 2)ファイルの終端(End Of File)
> 3)MS-DOSファイルのEOFコード
>>186で言いたかったのは 2) の「EOF」。
0195デフォルトの名無しさん
2013/11/27(水) 20:46:13.78ご指摘ありがとう。
元々の問題が標準入力から少量のバッファに読みながら出力という問題なので、
別にバッファの数が1でも1024でも少量だろうという話です。
改行を削除してるのは俺のミスです。いや、Stdinが改行見ないとバッファリングやめないのでもしかして必要ないかなー??
と思った次第です。完全に目算違いでした。
テキストファイル突っ込んだ時のこと失念してました。コンソールで開発してたもんで邪魔に見えました。
同様にgetcharの仕様って\n取らないとバッファリングとブロッキングやめないと思うのでgetcharの出番は無いと思います。
昔からブロッキングのないgetcharがあったらゲーム開発もはかどったんだと思うんですがねぇ。fgetsはブロッキングしないはずです。
ちなみにウインドウズですがハローワールドのプログラムをeof付きでパイプしてみたんですよ。
そしたら、コンソールに-1がゴミとして現れましてねそれを削除しています。
今思ったらputchでEOF出力してもEOF変換サれてない気がします。
言い訳が長くなりました。すみません。
ちょっとこれから多少実験してみます。
0196デフォルトの名無しさん
2013/11/27(水) 21:18:04.17懺悔タイムです。
全力でごめんなさい。色々認識不足でした。
そもそも、パイプの場合stdinに文字列が詰まってるのでgetcharはブロッキングしませんね。完全に勘違いしてました。
というわけで、>>192-194はご指摘ありがとう。そして、ごめんなさい。
それと、EOFの処理はいらなかったですね。
で、なんだかんだで2種類出来上がってしまいました。
ちょうどいいのでもっと罵ってくだしあ!!!!!!Orz
0197デフォルトの名無しさん
2013/11/27(水) 21:25:51.62俺、余計なことしてコケるタイプだな。
0198デフォルトの名無しさん
2013/11/27(水) 21:27:12.34表示された文字列中に"991"を一つだけ含むこと。
0199デフォルトの名無しさん
2013/11/27(水) 21:38:01.84皆様おやすみなさい!
>>198
http://codepad.org/pcvd5RNU
>>199
表示するだけなら特に大変とは‥
0201デフォルトの名無しさん
2013/11/27(水) 22:37:32.87; 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))
0202デフォルトの名無しさん
2013/11/27(水) 23:43:25.91| digits |
digits := String new.
1 to: Float infinity do: [:n |
digits := digits, n asString.
(digits includesSubString: '991') ifTrue: [^'0.', digits]]
0203デフォルトの名無しさん
2013/11/27(水) 23:45:44.78なん・・・だと・・・。俺のパターン認識甘すぎ。
0204デフォルトの名無しさん
2013/11/28(木) 00:34:26.67(->> (iterate inc 1) (map #(->> % range rest (apply str))) (filter #(re-find #"991" %)) first (str "0."))
0205デフォルトの名無しさん
2013/11/28(木) 01:15:39.220206デフォルトの名無しさん
2013/11/28(木) 01:17:09.210207デフォルトの名無しさん
2013/11/28(木) 01:27:53.82そうそう。
0208デフォルトの名無しさん
2013/11/28(木) 01:31:29.780209デフォルトの名無しさん
2013/11/28(木) 01:33:25.92【入門】Common Lisp その10【質問よろず】
toro.2ch.net/test/read.cgi/tech/1361341876/
0210デフォルトの名無しさん
2013/11/28(木) 01:45:14.79s= i=1; while echo $s | grep -qv 991; do s=$s$i; i=`expr $i + 1`; done; echo 0.$s
0211デフォルトの名無しさん
2013/11/28(木) 01:48:11.36申し訳ない
0212デフォルトの名無しさん
2013/11/28(木) 07:03:26.22'お題:チャンパーノウン定数を表示せよ。表示された文字列中に"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).
0213212
2013/11/28(木) 07:07:05.554行目の末尾に改行が入ってしまった。これは改行なしで '(1,'0.1'). と
続かなくてはいけない。下の方にもう一箇所似たような誤りがある。
0214デフォルトの名無しさん
2013/11/28(木) 10:25:23.51main = putStrLn $ "0." ++ (show $ f 1000)
f :: Integer -> Integer
f 0 = 0
f n = 10 ^ (floor $ logBase 10 (fromIntegral n) + 1) * (f (n - 1)) + n
0215デフォルトの名無しさん
2013/11/28(木) 10:26:34.24main = putStrLn $ "0." ++ (show $ f 100)
f :: Integer -> Integer
f 0 = 0
f n = 10 ^ (floor $ logBase 10 (fromIntegral n) + 1) * (f (n - 1)) + n
0216デフォルトの名無しさん
2013/11/28(木) 11:57:44.41result="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
0217198
2013/11/28(木) 19:59:52.93ruby 1.8.6
0.123456789101112131415161718192021222324252627282930313233343536373839404142434
44546474849505152535455565758596061626364656667686970717273747576777879808182838
4858687888990919293949596979899100
解説:
任意精度のライブラリの使用と、"991"の検出は不要。
この二つは引っ掛けのつもりなので笑って許していただきたい。
どの言語でも簡単に書けて、出力結果も長くならないようにした。
その点でまんまと引っかかってくれた>>199さんはMVP。
あっさり両方突破した>>200がネタバレのようにもなってしまったので、
それ以降のひとは多分あえて"991"の検索を入れて趣向を凝らしてみてくれたと判断。
みんなが文字列を前提にしてる中での>>214さんの活躍も光る。
Haskellまったく読めないが、見事に演算でアプローチしている。多分。
0218デフォルトの名無しさん
2013/11/28(木) 20:31:47.19???
出力には "991" が1回含まれているのが条件なだけだから
許容範囲は広いんじゃないの?
0219デフォルトの名無しさん
2013/11/28(木) 20:47:57.480220デフォルトの名無しさん
2013/11/28(木) 20:49:46.870221デフォルトの名無しさん
2013/11/28(木) 20:52:40.37これでもいいもんね。
(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))
0223デフォルャgの名無しさん
2013/11/28(木) 20:58:56.55あとは>>220のように解釈するくらいしか。
0224デフォルトの名無しさん
2013/11/28(木) 21:03:37.300225デフォルトの名無しさん
2013/11/28(木) 21:09:09.310226198
2013/11/28(木) 21:09:25.87もちろん。
出力結果がチャンパーノウン定数であって、
991が一個だけであれば正解。それだけ。
どこまで出すかは回答者の気分で。
そういう意味では>>218さんの言ってる通り問題としてはユルユル。
0227デフォルトの名無しさん
2013/11/29(金) 16:53:24.19@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
0228デフォルトの名無しさん
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
0229デフォルトの名無しさん
2013/11/29(金) 20:00:49.44@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"}
0230デフォルトの名無しさん
2013/11/29(金) 21:46:24.65ttp://ideone.com/biIc7g
とりあえず作ったは作ったんだが1/2が0になるなどの不具合がある。
仕様がよくわからないのでよくわからない。
ideonで2つ目のstdinに数字を突っ込む方法がよくわからない。
気が向いたらバグフィックスする。疲れた〜。
0231デフォルトの名無しさん
2013/11/29(金) 21:55:31.46パターンの羅列が面倒。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 ')
0232デフォルトの名無しさん
2013/11/29(金) 23:02:54.06| 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') "
0233デフォルトの名無しさん
2013/11/29(金) 23:55:56.93自然数には 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
0234デフォルトの名無しさん
2013/11/29(金) 23:59:47.69//@@
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
0235デフォルトの名無しさん
2013/11/30(土) 11:33:42.67import 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
0236235
2013/11/30(土) 12:01:08.700237235
2013/11/30(土) 12:08:19.85import 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"]
0238235
2013/11/30(土) 12:12:54.240239235
2013/11/30(土) 12:23:48.16import 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
スレ汚しすみませんでした
0240235
2013/11/30(土) 12:38:26.890241デフォルトの名無しさん
2013/11/30(土) 14:05:33.22require '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 ')
0242235
2013/11/30(土) 14:36:37.83conboとかいうのとfを修正 http://ideone.com/Ht2Hgp
0243デフォルトの名無しさん
2013/11/30(土) 15:03:08.59C++
http://ideone.com/wS9HYD
0244230
2013/11/30(土) 18:21:10.60http://ideone.com/vYiK4G
>>230を適当に改良。
浮動小数系のバグが出るかと思ったら問題が良く出来てて出なかった。反省!
>>243には頭が上がらん・・・。俺は贋作製作者だー!Orz
0245デフォルトの名無しさん
2013/11/30(土) 18:31:32.58ちょっともう我慢できないから聞くけど、
変数名の頭を大文字にするのってどういう文化?
C++触るまえに何触ってたの?
あとこの、
typedef std::vector<double> DB;
typedef std::vector<int> IB;
Bってなに?バッファ?
もしよかったらおしえてくんろ。
0246244
2013/11/30(土) 18:50:23.99それは申し訳ない。
基本的に独学なので特定のコーディング規約に触ったことはない。
アッパーキャメルなのは個人的な趣味だ。
ちなみにC/C++の前はポケコンのBasicを触っていた。もう10年前くらいの話だ。
IB => intbuffer
DB => doublebuffer
巨大なライブラリ使ってるわけではないので推測で判断できそうなものは省略している。
あと、コーディングスピードが結構成果を左右するタイプなのでそこで深い思考はしてない。
ところで、俺そんなにうざいですか?KYだとはよく言われます。
0247デフォルトの名無しさん
2013/11/30(土) 18:54:10.841mmもうざくないよ。疑問を尋ねただけ。
Bのバッファ説が正解しており嬉しいよ。
あと、ひょっとしたらBASIC触ってたのかなこの人とも思ってたから、
それも正解しておりニンマリだわ。お手数おかけしてどうもすんまそん。
0248デフォルトの名無しさん
2013/11/30(土) 19:00:28.90それは良かった。素養が悪いのは今後の課題です。
個人的に1ソース200行に抑えられれば制御できるのでその範囲で書いてます。
超えるとかなり大変です。えへへっ。
0249デフォルトの名無しさん
2013/11/30(土) 21:29:04.58( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)ull null null null
0250片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/30(土) 23:17:51.510251片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/30(土) 23:21:40.360252片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/30(土) 23:45:51.680253デフォルトの名無しさん
2013/11/30(土) 23:47:58.800254デフォルトの名無しさん
2013/11/30(土) 23:51:08.560255デフォルトの名無しさん
2013/11/30(土) 23:58:04.730256デフォルトの名無しさん
2013/12/01(日) 00:02:11.250257片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/01(日) 00:14:47.72'\r'は出力位置、キャレットを行の最初に移動させる制御文字。
0258デフォルトの名無しさん
2013/12/01(日) 00:20:25.340259片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/01(日) 00:24:46.55変体かなや草書体が読めないのに、歴史教科書を読んだだけ
で昔の事を理解したつもりになってるのはおかしくないか?
過去のことに永遠にアクセスできないなんて悲しいよ。
0260デフォルトの名無しさん
2013/12/01(日) 01:26:16.50Common Lisp
http://ideone.com/WWVy4P
やっとできた。
0261デフォルトの名無しさん
2013/12/01(日) 09:40:37.25Beautiful!
0262デフォルトの名無しさん
2013/12/01(日) 10:12:48.53春分の日(_年,_月,_日) :-
'「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。'
(_年,_月,_日),!.
0263262
2013/12/01(日) 10:15:20.89春分の日(_年,_月,_日) :-
'「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。'(_年,_月,_日),!.
0264デフォルトの名無しさん
2013/12/01(日) 11:41:53.00O'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]
の目が出ました。このとき選択されたサイコロが、四面体・六面体・八面体・十二面
体・二十面体である尤度を求めよ。
0265デフォルトの名無しさん
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]
0266デフォルトの名無しさん
2013/12/01(日) 14:09:27.92ns = [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]))
0267片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/01(日) 17:11:18.95レベルが高すぎたので修正。
お題:与えられた年の国民の休日の名称とその日付を列挙するプログラム。
※注記:未来のカレンダーについては現行法に従うものとする。
0268デフォルトの名無しさん
2013/12/01(日) 17:17:48.140269デフォルトの名無しさん
2013/12/01(日) 17:19:25.14以前に書いたもので恐縮ですが。余計な事満載。
http://nojiriko.asia/prolog/c146_371_4.html
0270デフォルトの名無しさん
2013/12/01(日) 18:19:11.44http://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
0271デフォルトの名無しさん
2013/12/01(日) 18:33:32.460272デフォルトの名無しさん
2013/12/01(日) 18:42:20.69http://ideone.com/bn7q9j
0273デフォルトの名無しさん
2013/12/01(日) 18:47:27.70| 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} "
0274デフォルトの名無しさん
2013/12/01(日) 20:13:26.990275デフォルトの名無しさん
2013/12/01(日) 20:21:12.99f [] = []
f xs = let zs = foldr p ([1,1..]) xs in map (/ sum zs) zs
0276デフォルトの名無しさん
2013/12/01(日) 20:45:25.790277デフォルトの名無しさん
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.
0278デフォルトの名無しさん
2013/12/01(日) 20:59:35.160279デフォルトの名無しさん
2013/12/01(日) 21:01:07.91逆から読んでも同じやつだけだっけ?
同じ単語が混じってたら回分?
0280デフォルトの名無しさん
2013/12/01(日) 21:09:02.240281デフォルトの名無しさん
2013/12/01(日) 21:12:30.18C言語の解答出てるからC++で書くと移植になっちゃうなぁ。
なんか面白い解法無いもんか。
0282デフォルトの名無しさん
2013/12/01(日) 21:42:15.98Common Lisp
http://ideone.com/yBEqLY
0284デフォルトの名無しさん
2013/12/01(日) 22:32:22.52C++ 結局移植になってしまった。
新規性で言えばリバースイテレータを使ってみたという点位。
それでもちょっと無駄があるなぁ。
ほんだがらったへんだがらったふんだがらったふんふん。
0285デフォルトの名無しさん
2013/12/01(日) 22:45:57.42| 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 "
0286片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/01(日) 23:45:18.050287デフォルトの名無しさん
2013/12/02(月) 00:36:38.23交点なかったらどうすんの?
0288デフォルトの名無しさん
2013/12/02(月) 00:41:57.63一応C++
http://ideone.com/zDmNFo
0289デフォルトの名無しさん
2013/12/02(月) 00:43:08.540290デフォルトの名無しさん
2013/12/02(月) 00:50:39.030291デフォルトの名無しさん
2013/12/02(月) 01:04:17.26f =: (-: |.)@((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
>>283 を直しました
http://codepad.org/vBSFYyVa
0293デフォルトの名無しさん
2013/12/02(月) 07:57:46.32perl -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)))'
これでいいのかな
0294デフォルトの名無しさん
2013/12/02(月) 07:59:46.810295デフォルトの名無しさん
2013/12/02(月) 10:10:19.00お題を出すなら、入出力例を添えろと何度言ったら…
0296デフォルトの名無しさん
2013/12/02(月) 13:52:31.19| 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 "
0297デフォルトの名無しさん
2013/12/02(月) 15:09:51.13function f(s)
s = s:gsub("%W", ""):upper()
return s == s:reverse()
end
0298デフォルトの名無しさん
2013/12/02(月) 15:27:24.01http://ideone.com/lREXQO
0299298
2013/12/02(月) 15:29:47.290300298
2013/12/02(月) 17:34:00.56http://ideone.com/UdUQlp
0301デフォルトの名無しさん
2013/12/02(月) 19:42:24.83普通に書いたら>>297さんとほぼ同じになっちゃうので少しグネッて一行で書いた。
def f277(s)
s.downcase.gsub(/[^a-z]/, '').inject(0){|b, x| x == x.reverse}
end
0302デフォルトの名無しさん
2013/12/02(月) 23:52:27.19円周率の値を、有効数字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%
0303298
2013/12/02(月) 23:55:42.930305デフォルトの名無しさん
2013/12/03(火) 11:53:36.80例
201312, 12222 -> 1, 2, 3, 6, 9, 18
0306デフォルトの名無しさん
2013/12/03(火) 12:02:18.59| 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}} "
0307デフォルトの名無しさん
2013/12/03(火) 12:20:59.16| 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) "
0308デフォルトの名無しさん
2013/12/03(火) 13:23:45.82; 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)
0310デフォルトの名無しさん
2013/12/03(火) 15:53:19.41モンテカルロ法。
0311デフォルトの名無しさん
2013/12/03(火) 17:33:03.93def 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)
0312デフォルトの名無しさん
2013/12/03(火) 18:05:47.44それだけじゃ片山にはわからんだろう…
0313デフォルトの名無しさん
2013/12/03(火) 18:35:05.56def 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]
0315デフォルトの名無しさん
2013/12/03(火) 19:19:01.75>>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) "
0316デフォルトの名無しさん
2013/12/03(火) 22:33:16.15三平方の定理
0317デフォルトの名無しさん
2013/12/03(火) 23:16:23.48横槍いれるけどSqueakよりPharoの方がよくね
0318デフォルトの名無しさん
2013/12/03(火) 23:44:04.30そう? Pharo使うくらいならVisualWorks使うなぁ…
Squeakは、その節操のなさが好き。良し悪しはともかく。
0319デフォルトの名無しさん
2013/12/03(火) 23:47:07.83(->> [n m] (map #(filter (fn [x] (zero? (mod % x))) (range 1 (/ % 2)))) (map set) (apply clojure.set/intersection))
0320デフォルトの名無しさん
2013/12/03(火) 23:50:34.80Visual Worksってええの?
補完が出来ないとかクリックで派生Class作れないとか(偏見)
古臭い感じがするけど。
0321デフォルトの名無しさん
2013/12/04(水) 00:07:29.04補完は AutoComplete パーセル入れればできるでしょ。
「クリックで派生Class作」るってPharoでどうやるの?
0322デフォルトの名無しさん
2013/12/04(水) 00:48:51.60Refactoringメニューでgenerate subclass的なメニューを押すと作れるよ。
他にもTestClass生成したりsuper class生成したりRefactoringとは
到底思えない便利機能が色々有るよ。
あと聞かれた内容に関係ないけど、
Pharoは文字列を選択してClassを検索したり
Selectorを検索したりできる。
他にも検索機能が充実しててそれが便利で
Squeakから移っちゃった。
0323デフォルトの名無しさん
2013/12/04(水) 01:35:31.25List(n, m) map(x => (1 to x / 2) filter(x % _ == 0)) reduceLeft((x, y) => x intersect y)
0324デフォルトの名無しさん
2013/12/04(水) 01:52:29.48#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;
}
0325デフォルトの名無しさん
2013/12/04(水) 01:53:55.08int 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]
0326デフォルトの名無しさん
2013/12/04(水) 02:34:43.23#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
0327デフォルトの名無しさん
2013/12/04(水) 05:50:51.73function 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
0328デフォルトの名無しさん
2013/12/04(水) 08:54:42.82なるほど。Pharoの開発には他言語の近代的なIDEで育った若い人たちが
Squeakに比べておおく参加しているので、よく使う機能が前面に押し出されており
これからSmalltalkを始める人にはわかりやすくてよいかもしれませんね。
0329デフォルトの名無しさん
2013/12/04(水) 11:07:45.81>>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]
0330デフォルトの名無しさん
2013/12/04(水) 11:18:21.30commonDivisors ys = [x | x <- [1 .. minimum ys], all (==0) $ map (`mod` x) ys]
f a b = commonDivisors [a, b]
0331デフォルトの名無しさん
2013/12/04(水) 11:59:37.380333デフォルトの名無しさん
2013/12/04(水) 13:07:10.98#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
0334デフォルトの名無しさん
2013/12/04(水) 15:44:56.91>>302
http://ideone.com/l7P8jq
0335デフォルトの名無しさん
2013/12/04(水) 18:07:06.76f =: 1+[:I.0=(|~1+i.)@(+./)
f 201312 12222
1 2 3 6 9 18
f 201312 12222 27
1 3 9
0336デフォルトの名無しさん
2013/12/04(水) 18:15:48.73Range
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)
0337デフォルトの名無しさん
2013/12/04(水) 18:54:06.11(+./) 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
0338デフォルトの名無しさん
2013/12/04(水) 18:56:54.350339デフォルトの名無しさん
2013/12/04(水) 20:27:48.67@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}
0340デフォルトの名無しさん
2013/12/04(水) 20:56:12.64main :: 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]
0341デフォルトの名無しさん
2013/12/04(水) 21:13:17.49ひさびさにいいお題が
0343デフォルトの名無しさん
2013/12/04(水) 22:04:20.04お前、自分が解き損なったからって……
0344デフォルトの名無しさん
2013/12/04(水) 22:11:18.630345デフォルトの名無しさん
2013/12/04(水) 22:22:28.42うん
まあいいお題とは思ったんだ意気消沈して焼け酎をあおっている‥
0347デフォルトの名無しさん
2013/12/05(木) 00:43:25.93はるか昔に準備しておいてずっと放置していた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]
0348デフォルトの名無しさん
2013/12/05(木) 01:52:09.23Cで書いてみた
多分色々間違ってる
http://codepad.org/Sa8cvS6j
0349デフォルトの名無しさん
2013/12/05(木) 04:49:13.40「任意の数の」に変えたらコードはどう変化しますか?
お題:任意の数の自然数の公約数をすべて求める。
例
201312, 12222 -> 1, 2, 3, 6, 9, 18
201312, 12222, 27 -> 1, 3, 9
201312, 12222, 27, 3 -> 1, 3
0350デフォルトの名無しさん
2013/12/05(木) 09:48:26.09#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
0351339
2013/12/05(木) 12:25:22.98@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}
ここに証明を書いておいた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
要は最大公約数自身の約数を列挙すればよい
ユークリッドの互助法に限らないのではないか
0353デフォルトの名無しさん
2013/12/05(木) 13:41:59.77ttp://codepad.org/rkxtPIZt
0354デフォルトの名無しさん
2013/12/05(木) 13:53:25.23main :: 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]
0355デフォルトの名無しさん
2013/12/05(木) 13:59:26.02>>353
配列の長さを関数に渡したり-1で止めたりってやめた方がいいんですかね
http://codepad.org/kRWHQK85
0356デフォルトの名無しさん
2013/12/05(木) 14:13:11.83>配列の長さを関数に渡したり-1で止めたりってやめた方がいいんですかね
両方とも一般的な手法だから、良いんじゃないかな。
データに0が含まれないと判っていれば、「0で止める」だけなので。
0357デフォルトの名無しさん
2013/12/05(木) 14:19:13.820358デフォルトの名無しさん
2013/12/05(木) 18:21:26.62require '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);;
0359デフォルトの名無しさん
2013/12/05(木) 20:11:41.19#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;
}
0360359
2013/12/05(木) 20:17:41.060361片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/05(木) 23:34:00.68char *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);
}
0362デフォルトの名無しさん
2013/12/05(木) 23:57:29.48Clojure
(->> [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も間違えてるじゃないか
0363デフォルトの名無しさん
2013/12/06(金) 15:19:14.67http://ideone.com/NcqBLG
0364デフォルトの名無しさん
2013/12/06(金) 16:11:58.170365デフォルトの名無しさん
2013/12/06(金) 16:46:45.03それを実際に10万回ふって出た目の数を集計し出力するコード。
出力例
1: 11103
2: 22287
3: 11114
4: 22170
5: 11089
6: 22237
余力があれば、任意の目の数と出やすさに対応できるコードにしてください。
0366デフォルトの名無しさん
2013/12/06(金) 17:00:30.420367デフォルトの名無しさん
2013/12/06(金) 17:01:45.510368デフォルトの名無しさん
2013/12/06(金) 17:01:56.48@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
0369デフォルトの名無しさん
2013/12/06(金) 17:15:55.19| 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} "
0370デフォルトの名無しさん
2013/12/06(金) 17:30:31.42>>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)]
多分他の場合には簡単に対応できない
0371デフォルトの名無しさん
2013/12/06(金) 17:40:29.74> 余力があれば、任意の目の数と出やすさに対応できるコードにしてください。
たとえば、目の数の平方根に比例した出方をする四面のイカサマさいころの場合とか
0372デフォルトの名無しさん
2013/12/06(金) 17:49:26.98ttp://ideone.com/7bK1Od
普通にライブラリで対応。どうしてそうなるのかは分からない。Orz=3
0373デフォルトの名無しさん
2013/12/06(金) 17:51:34.360374デフォルトの名無しさん
2013/12/06(金) 17:51:38.62; 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
0375デフォルトの名無しさん
2013/12/06(金) 17:53:16.640376373
2013/12/06(金) 18:02:52.620377373
2013/12/06(金) 18:05:44.970378368
2013/12/06(金) 18:07:06.65@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
0379デフォルトの名無しさん
2013/12/06(金) 18:20:58.67乱数勉強するなら解析? 離散? 統計?
0380デフォルトの名無しさん
2013/12/06(金) 18:37:51.240381デフォルトの名無しさん
2013/12/06(金) 18:40:20.290382デフォルトの名無しさん
2013/12/06(金) 19:09:45.96多分これで合ってる
0383デフォルトの名無しさん
2013/12/06(金) 19:15:05.45>>371 Haskell http://ideone.com/AC3xEU fromList [(1,16321),(2,23232),(3,27827),(4,32620)]
0384デフォルトの名無しさん
2013/12/06(金) 19:20:21.010385デフォルトの名無しさん
2013/12/06(金) 19:30:26.940386デフォルトの名無しさん
2013/12/06(金) 19:31:25.33#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
0387デフォルトの名無しさん
2013/12/06(金) 20:45:43.73class 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
0388デフォルトの名無しさん
2013/12/06(金) 20:51:37.75fromList [(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)]
0389デフォルトの名無しさん
2013/12/06(金) 20:53:48.100390デフォルトの名無しさん
2013/12/06(金) 21:26:19.52厳密じゃなくてもweightだろうな。
0391デフォルトの名無しさん
2013/12/06(金) 21:28:26.07rubyとsmalltalkは高尚すぎて読めない
0392デフォルトの名無しさん
2013/12/06(金) 21:41:39.79良い事を教えてあげようか?
俺の顔はいまスイカの断面よりも真っ赤だ…。
0393デフォルトの名無しさん
2013/12/06(金) 21:57:08.95ドンマイw
0394デフォルトの名無しさん
2013/12/06(金) 22:45:20.03頭の断面が真っ赤なのかと思ったわー
そして季節外れだし、今ならサンタクロースの服とかだろーねー
知らんわ
0395デフォルトの名無しさん
2013/12/06(金) 23:29:07.86Cではグローバル変数を使うべきだな
0396デフォルトの名無しさん
2013/12/07(土) 00:55:38.68/:~(~.,.#/.~)(?100000#9){1 2 2 3 4 4 5 6 6
1 11152
2 22416
3 10971
4 22224
5 11006
6 22231
0397デフォルトの名無しさん
2013/12/07(土) 01:28:51.14Common Lisp
http://ideone.com/NmtRP7
0398デフォルトの名無しさん
2013/12/07(土) 02:35:40.79Random.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
0399デフォルトの名無しさん
2013/12/07(土) 06:21:43.14偶数の目が奇数の目より二倍でやすいイカサマさいころ(_イカサマさいころの目) :-
_乱数値 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,_集計値]).
0400デフォルトの名無しさん
2013/12/07(土) 07:58:01.92長さnの糸がつながっている。まず糸をすべて正三角形に巻きつける。
糸をピンと張った状態でほどいていき、そのまま逆向きにすべてを
巻きつけた時の糸の先端の軌跡の長さを求める。小数点以下四捨五入。
例
m=100, n=200, -> 1466
0401デフォルトの名無しさん
2013/12/07(土) 09:18:01.25| 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 "
0402デフォルトの名無しさん
2013/12/07(土) 09:27:34.16import 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
0403デフォルトの名無しさん
2013/12/07(土) 09:29:53.77import 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 いらねえ
0404デフォルトの名無しさん
2013/12/07(土) 09:33:24.740405デフォルトの名無しさん
2013/12/07(土) 10:48:39.160406デフォルトの名無しさん
2013/12/07(土) 11:29:21.99考え方が良く分からなかったので、
折り返すとき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)
0407デフォルトの名無しさん
2013/12/07(土) 12:03:40.09#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))
0408デフォルトの名無しさん
2013/12/07(土) 12:09:15.180409デフォルトの名無しさん
2013/12/07(土) 12:13:03.80def 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)
0410デフォルトの名無しさん
2013/12/07(土) 12:21:08.550411デフォルトの名無しさん
2013/12/07(土) 12:37:41.03仕上げは、一辺に沿っていていいのかな。
そうでないと何処まで戻せばよいかわからない。
0412デフォルトの名無しさん
2013/12/07(土) 13:05:56.740413デフォルトの名無しさん
2013/12/07(土) 13:21:02.730414デフォルトの名無しさん
2013/12/07(土) 13:41:23.840415デフォルトの名無しさん
2013/12/07(土) 13:45:38.79これからはお題だけ拾って書き込むのは控えるわwwwwwwwwwwwwwwwwwwwwwww
0416デフォルトの名無しさん
2013/12/07(土) 13:49:49.830417デフォルトの名無しさん
2013/12/07(土) 17:21:18.56f:=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
0418デフォルトの名無しさん
2013/12/07(土) 19:47:18.38#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
0419デフォルトの名無しさん
2013/12/08(日) 08:31:45.780420デフォルトの名無しさん
2013/12/08(日) 10:28:30.62require 'net/http'
puts Net::HTTP.get('toro.2ch.net', '/tech/dat/1357191974.dat').split("\n")[418]
0421デフォルトの名無しさん
2013/12/08(日) 11:43:30.61| url contents |
url := 'http://toro.2ch.net/tech/dat/1357191974.dat'.
contents := (HTTPSocket httpGetDocument: url) contents convertFromEncoding: 'shift-jis'.
^contents lines at: 419
0422デフォルトの名無しさん
2013/12/08(日) 13:24:45.38@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
お題:この書き込みをネットから読み込むプログラム。
0423デフォルトの名無しさん
2013/12/08(日) 13:25:38.30wget -q -O - http://toro.2ch.net/tech/dat/1357191974.dat | awk 'NR==419'
0424デフォルトの名無しさん
2013/12/08(日) 15:58:58.40cat(readLines(a)[419])
aには>>420さんと同じurlがはいっているのですが、リテラルとしてかくと
「リンクは禁止です」というエラーになって書き込みできませんでした。
0425デフォルトの名無しさん
2013/12/08(日) 16:02:51.71ninjaのレベルが低いんだろう。
URLをURLとして認識されないように途中で切って、文字列値として連結するように書けばおk
0427デフォルトの名無しさん
2013/12/08(日) 17:02:41.26import 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));
}
}
0428デフォルトの名無しさん
2013/12/08(日) 19:20:01.60だったら解けなかったな。
0429デフォルトの名無しさん
2013/12/08(日) 19:46:35.39書き込むのはやめといたほうがいいw
運営にボット扱いされたら、フシアナ処理されるからw
俺それで一回リモホさらされて焦ったことあるw
0430デフォルトの名無しさん
2013/12/08(日) 20:04:24.71へー、そんなことあるんだ。
あぶない、あぶない。
それよくわかる。プログラミングでも、いったん寝かせて(忘れるくらいの期間)熟成させないといけないらしい
0432デフォルトの名無しさん
2013/12/09(月) 00:36:38.08( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)cp udp tcp udp
0433デフォルトの名無しさん
2013/12/09(月) 02:18:20.98#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;
}
0434デフォルトの名無しさん
2013/12/09(月) 02:19:03.34void 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;
}
0435デフォルトの名無しさん
2013/12/09(月) 14:49:39.96元のデータの順に)表示する。
0436デフォルトの名無しさん
2013/12/09(月) 17:06:39.21echo 112223334445556667778889991101121133114411551166117711881199220223224422552266227722882299330334335533663377338833994404454466447744884499
550556557755885599660667668866997707787799880889990100
0437デフォルトの名無しさん
2013/12/09(月) 17:07:23.32echo 112223334445556667778889991101121133114411551166117711881199220223224422552266227722882299330334335533663377338833994404454466447744884499550556557755885599660667668866997707787799880889990100
0438デフォルトの名無しさん
2013/12/09(月) 18:23:34.300439デフォルトの名無しさん
2013/12/09(月) 18:51:23.01| 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)
0440デフォルトの名無しさん
2013/12/09(月) 19:22:54.72s = (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]
0441デフォルトの名無しさん
2013/12/09(月) 20:41:01.79sdim 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
0442デフォルトの名無しさん
2013/12/09(月) 21:22:08.66#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
0443デフォルトの名無しさん
2013/12/09(月) 22:11:33.39sdim 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
0444デフォルトの名無しさん
2013/12/09(月) 23:12:57.61; 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))
0445デフォルトの名無しさん
2013/12/10(火) 06:22:19.90Range
c:=1 to(100)asList join
1 to(100)map(i,list(c findSeq(i asString),i))sort map(last)
0446片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/10(火) 11:43:40.640448デフォルトの名無しさん
2013/12/10(火) 19:27:29.305 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
0449デフォルトの名無しさん
2013/12/10(火) 20:20:27.26要素の順番は入れ替えず、配列の配列として返す。
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]]
0450デフォルトの名無しさん
2013/12/10(火) 21:05:16.12#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
0451デフォルトの名無しさん
2013/12/10(火) 23:22:14.96; 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))
0452デフォルトの名無しさん
2013/12/10(火) 23:22:36.51f=: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|
+---+-----+---+------+-----+--------+
0453デフォルトの名無しさん
2013/12/10(火) 23:29:18.98-- 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]
0454デフォルトの名無しさん
2013/12/10(火) 23:57:27.34| 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)) "
0455デフォルトの名無しさん
2013/12/11(水) 00:08:08.39Range
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))
0456デフォルトの名無しさん
2013/12/11(水) 08:37:05.62@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}}
0457デフォルトの名無しさん
2013/12/11(水) 11:51:20.30N=3で10要素だと、解は3通りあるけれど、1解で良いの?
0458デフォルトの名無しさん
2013/12/11(水) 16:33:02.350459デフォルトの名無しさん
2013/12/11(水) 17:32:14.18g :: 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
0460デフォルトの名無しさん
2013/12/11(水) 17:45:23.62スーパー後出しジャンケン。C++ライク。
ttp://ideone.com/WyRFEM
適当に組んでそのまま動いちゃったのでバグが怖いなー。
0461デフォルトの名無しさん
2013/12/11(水) 18:06:43.950462デフォルトの名無しさん
2013/12/11(水) 18:13:27.540463デフォルトの名無しさん
2013/12/11(水) 20:35:07.70ttp://codepad.org/iEfBhyHD
少し出力してすぐ終わるプログラムなのでdeleteのケア一切なし。
ここに直接貼り付けようとしたらエラーが出て書き込めなかった。
0464デフォルトの名無しさん
2013/12/11(水) 21:05:02.790465デフォルトの名無しさん
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,
0466デフォルトの名無しさん
2013/12/11(水) 22:18:55.97| 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}
0467デフォルトの名無しさん
2013/12/11(水) 22:23:17.62s="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
0468デフォルトの名無しさん
2013/12/11(水) 22:23:21.020469デフォルトの名無しさん
2013/12/11(水) 22:23:48.23は HSP
0470465
2013/12/11(水) 22:38:04.92その点、マジすみません。書き込んだ直後にアッと思いました。
出力結果を省いていただくか、
">%d"の形にならないように出力していただければ幸いです…。
0471デフォルトの名無しさん
2013/12/11(水) 22:51:05.35load 'misc'
nubcount 'hello'
+-+-+
|h|1|
+-+-+
|e|1|
+-+-+
|l|2|
+-+-+
|o|1|
+-+-+
0472デフォルトの名無しさん
2013/12/11(水) 23:01:25.92var 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
0473デフォルトの名無しさん
2013/12/11(水) 23:03:10.80Range
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))
0474デフォルトの名無しさん
2013/12/11(水) 23:07:08.27謝罪ついでに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と同
0475デフォルトの名無しさん
2013/12/11(水) 23:17:37.250476デフォルトの名無しさん
2013/12/11(水) 23:47:59.67Common Lisp
http://ideone.com/3qX97b
0477デフォルトの名無しさん
2013/12/11(水) 23:52:30.72import 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}
0478デフォルトの名無しさん
2013/12/12(木) 00:04:22.07ttp://ideone.com/RyBLWT
C++もどき。移植にならないように気をつけた。表示もランキング方式にした。
最後のソートがGCCでうまく動かなくて泣きながらバブルソート実装した。
0479デフォルトの名無しさん
2013/12/12(木) 00:51:06.280480478
2013/12/12(木) 00:56:34.49For文2個覚えておけばいいので簡単なんだよ。計算量はともかく・・・。
0481デフォルトの名無しさん
2013/12/12(木) 00:58:16.70(->> "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)])))
0482デフォルトの名無しさん
2013/12/12(木) 01:42:59.57ttp://ideone.com/Hfv2Nf
C++ライク。
コムソートはえーな。初めて実装したわ。
しかし、Ideon俺より良いPC使ってんな。裏山。
0483デフォルトの名無しさん
2013/12/12(木) 01:45:41.29@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}}
0484デフォルトの名無しさん
2013/12/12(木) 01:54:32.97現状綺麗とは言わないがなるべく無駄は無いはずだ。いや、俺が無駄って話は置いといて・・・。
>>483
短っ!!
0485デフォルトの名無しさん
2013/12/12(木) 02:19:12.10魔法やがな。
0486デフォルトの名無しさん
2013/12/12(木) 04:12:29.04//@@
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 だと書き込めないので ばらした
0487デフォルトの名無しさん
2013/12/12(木) 06:14:55.15バブルソートを覚えておくよりも、挿入ソートを覚えていた方が使い回しが利いたのに。
30年前、パソコンベーシックで実装されたマージャンゲームのツモったときの処理が最小値ソートで余りにも遅いので挿入ソートで置き換えた。
そこでお題、ツモったときに挿入ソートをすることには最小値ソートと比べてどんなメリットがあるか述べよ。なんてねw
今時なら、たった13個のデータのソートなんて何をどうしても誤差だからなぁ。
0488デフォルトの名無しさん
2013/12/12(木) 08:51:42.53ボゴソートなら誤差じゃ済まないZE!
0490デフォルトの名無しさん
2013/12/12(木) 09:55:37.59| 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} "
0491デフォルトの名無しさん
2013/12/12(木) 10:08:16.82いろいろと間違っているみたいなので取り下げます。ごめんなさい。
0492デフォルトの名無しさん
2013/12/12(木) 10:29:23.58| 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} "
0493デフォルトの名無しさん
2013/12/12(木) 12:36:53.63perl -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."
0494デフォルトの名無しさん
2013/12/12(木) 13:35:32.22すいません。コムソートが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} "
0495デフォルトの名無しさん
2013/12/12(木) 13:59:02.690496495
2013/12/12(木) 14:02:35.430497495
2013/12/12(木) 14:09:54.340498デフォルトの名無しさん
2013/12/12(木) 14:22:30.52#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))
0499デフォルトの名無しさん
2013/12/12(木) 14:26:19.470500デフォルトの名無しさん
2013/12/12(木) 14:42:19.34>>498 は HSP
0501デフォルトの名無しさん
2013/12/12(木) 15:04:08.24@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]]
0502デフォルトの名無しさん
2013/12/12(木) 17:04:46.240503デフォルトの名無しさん
2013/12/12(木) 17:53:05.51; Common Lisp
あっている……はず!
http://ideone.com/nw5Qy7
0504デフォルトの名無しさん
2013/12/12(木) 18:15:34.55ウィキペディア情報だと計算量が挿入ソートはオーダーがN^2なので、俺の書いたバブルソートより遅いよ。
俺の書いた最速バブルソートはオーダーはN*(N/2-1)位なので多少早い。ホント微妙に。
シェルソートにすればいいんだろうけど、単純さでバブルソート最強説をとるね。
それに記憶に刻まれてて変えるのも難しい。でも、コムソートはぜひ覚えたい位の計算オーダーだな。
>オーダーはN*(N/2-1)位
それもΟ(N^2) というんだよ
挿入ソートもバブルソートもΟ(N^2) という意味では同等
0506デフォルトの名無しさん
2013/12/12(木) 18:30:41.44#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)
0507デフォルトの名無しさん
2013/12/12(木) 18:32:01.97オーダー記法分かって無いだろwww
0508デフォルトの名無しさん
2013/12/12(木) 18:32:19.74python3
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)]
0509508
2013/12/12(木) 18:34:58.23print(['{}: {}'.format(char, s.count(char)) for char in set(s)])
0510デフォルトの名無しさん
2013/12/12(木) 18:44:57.56ソート済み配列に一データ追加する場合のコストを比較してみよう。
0511デフォルトの名無しさん
2013/12/12(木) 18:45:23.00あれ?そうなの??
一応N^2の半分位のオーダーになってるんだけどな。
うーん。残念だ。
0512デフォルトの名無しさん
2013/12/12(木) 18:48:21.420513デフォルトの名無しさん
2013/12/12(木) 18:50:21.74(N^2)/1000 だろうが (N^2)*1000 だろうが係数は無視して O(N^2) って表現することになってる
0514デフォルトの名無しさん
2013/12/12(木) 18:50:36.50末尾に一個何らかの値をプッシュバックした場合のソートだと挿入ソートはブロックで移動するので多少マシかな。
でもソート済み判定を途中で入れるとなるとそれはそれで処理食うし。よほどデータ量無いとあんまりペイしないなー。
0515デフォルトの名無しさん
2013/12/12(木) 18:58:48.81おぉ。こりゃ勉強になる。
もっと厳密な値だと思ってたよ。
そんなにアバウトだったのか・・・。
説明すると、二重ループの外側はNなんだけど、
内側は外側のカウンタと同じ値まではソート済みなので、内側の開始条件が外側のカウンタから始めても問題無い。
っていう改良なんだけど。なので、内側は、平均でN/2になるんだよ。
スワップ回数でオーダー測ってると思ってたんだけど、どういう計算なんだろう?
わからなくなってきた。
0516デフォルトの名無しさん
2013/12/12(木) 19:06:30.21def 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)
0517デフォルトの名無しさん
2013/12/12(木) 19:23:58.23| 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 "
0518デフォルトの名無しさん
2013/12/12(木) 19:24:35.74もっとナジって。あはぁーん。
0519デフォルトの名無しさん
2013/12/12(木) 20:34:52.56JITコンパイラ入った?
0520デフォルトの名無しさん
2013/12/12(木) 20:53:34.59JIT は
VisualWorks(商用処理系)はずいぶん前から入ってます。
Squeak やその派生の Pharo には CogVM という名前で2年くらい前に入りました。
単純なフィボナッチベンチだと、VW が C と同等、Squeak で3倍遅いくらいでしょうか。
http://d.hatena.ne.jp/sumim/20100621/p1
0521デフォルトの名無しさん
2013/12/12(木) 22:12:17.000522デフォルトの名無しさん
2013/12/13(金) 00:49:34.00数年前にその二つのソートをcで書いてたので基本的にコピペ。
時間経過はとりあえずclock()で測ったがベストかどうか不明。
あと、バブルソートが遅すぎるのでバグっているのかもしれない。
ttp://codepad.org/WH8cwslm
配列の要素数を30000にしたらタイムアウト。
ttp://ideone.com/8wYrg9
サイトを変えたがタイムアウト。
要素数だけ25000に変更したら結果を出してくれたが、
バブルソートが遅すぎて比較にならない。
ちなみに、テスト環境では要素数30000で、
qsort: 0.015000
bsort: 20.266000
csort: 0.047000
という具合。
0523デフォルトの名無しさん
2013/12/14(土) 03:07:34.35次スレのスレタイ:「プログラミングのお題 Part2」「プログラミングの問題を出すスレ」
スレタイリスト(http://toro.2ch.net/tech/subject.txt)を適当に編集してシミュレートせよ
出力:候補ベスト3に入るようにせよ(以下例)
1. プログラミングの問題を出すスレ
2. プログラミングのお題 Part2
3. 日本語プログラミング言語『なでしこ』スレ5
0524デフォルトの名無しさん
2013/12/14(土) 11:35:49.550525デフォルトの名無しさん
2013/12/14(土) 13:04:41.36>>92
0526523
2013/12/14(土) 22:00:11.44アルゴリズムの指定はありません
これでダメだったら無視してください
0527デフォルトの名無しさん
2013/12/15(日) 00:27:10.213つ抽出せよ。アルゴリズムは問わない。とかそんな感じ?
0528デフォルトの名無しさん
2013/12/15(日) 00:38:46.060529デフォルトの名無しさん
2013/12/15(日) 02:02:56.75# 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] }
0530デフォルトの名無しさん
2013/12/15(日) 09:20:58.88ああ、わかった、わかった。
スレタイリストにこのスレの次スレタイトル案を加えて
たとえ細部の表現が多少変わった場合でも
それが上位に来るようなソートができるコードを書けっていう
そういうことね。
0531デフォルトの名無しさん
2013/12/15(日) 11:56:33.260532デフォルトの名無しさん
2013/12/15(日) 18:01:17.91そうです。説明が雑すぎました
0533デフォルトの名無しさん
2013/12/15(日) 19:53:08.49http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Levenshtein_distance
0534デフォルトの名無しさん
2013/12/15(日) 20:16:35.32回答例およびチェック用出力例: 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
0535534
2013/12/15(日) 20:31:17.94文字列左側はゼロで埋めても埋めなくてもいい。
00000000000000000000000000000001
でなくて、
1
でもいい。
0536デフォルトの名無しさん
2013/12/15(日) 21:37:46.21#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);
}
0537デフォルトの名無しさん
2013/12/15(日) 21:45:12.75#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)
0538デフォルトの名無しさん
2013/12/15(日) 22:16:11.30#ruby1.9.3
p 123.to_s(2)
0539デフォルトの名無しさん
2013/12/16(月) 01:27:55.93'与えられた正の整数を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進文字列表現]).
0540デフォルトの名無しさん
2013/12/16(月) 01:31:09.51単調増加もしくは単調減少関数であるy=f(x)が通過する正方形領域[i,j]を全て求めよ。
0541540
2013/12/16(月) 01:34:26.950542540
2013/12/16(月) 01:43:56.520543デフォルトの名無しさん
2013/12/16(月) 02:00:23.20i,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]を全て求めよ。
0544デフォルトの名無しさん
2013/12/16(月) 02:01:30.090545デフォルトの名無しさん
2013/12/16(月) 09:02:41.51Common Lisp
http://ideone.com/QnFn0t
0546デフォルトの名無しさん
2013/12/16(月) 10:51:14.62ほぼそのままだが、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("");
}
/*後略*/
0547デフォルトの名無しさん
2013/12/16(月) 10:51:46.660548デフォルトの名無しさん
2013/12/16(月) 11:54:27.860549デフォルトの名無しさん
2013/12/16(月) 13:09:52.93| 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について必死に話し合うスレ')
0550デフォルトの名無しさん
2013/12/16(月) 13:11:08.864294967295 radix: 2
=> '11111111111111111111111111111111'
0551デフォルトの名無しさん
2013/12/16(月) 15:50:35.640552デフォルトの名無しさん
2013/12/16(月) 18:55:42.61String s = Integer.toBinaryString(Integer.MAX_VALUE);
0553デフォルトの名無しさん
2013/12/16(月) 20:44:05.680554デフォルトの名無しさん
2013/12/16(月) 21:56:34.76http://ideone.com/AE5SX7
0555片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/16(月) 22:09:42.00含まれる格子点(座標成分がすべて整数になる点)の個数を数える。
例)
? 1 1 1
5
? 0.5 0.5 1
4
0556片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/16(月) 22:24:10.88含まれる格子点(座標成分がすべて整数になる点)の個数を数える。
例)
? 1 1 1 1
7
? 0.5 0.5 0.5 1
8
0557デフォルトの名無しさん
2013/12/16(月) 22:42:02.70>>92
0558デフォルトの名無しさん
2013/12/16(月) 22:43:33.75>>92
0559片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/16(月) 22:53:26.55{
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;
}
0560片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/16(月) 22:55:43.100561デフォルトの名無しさん
2013/12/16(月) 23:26:17.87| 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 "
0562デフォルトの名無しさん
2013/12/16(月) 23:58:01.07let 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
0563デフォルトの名無しさん
2013/12/17(火) 00:11:52.060564デフォルトの名無しさん
2013/12/17(火) 01:09:27.90大きければ1を小さければ-1を返すaboutX関数を用意します。
この関数を使ってXを求める。
0565デフォルトの名無しさん
2013/12/17(火) 01:40:22.040566デフォルトの名無しさん
2013/12/17(火) 01:59:21.32むか〜しの雑誌(初歩のラジオ)で、
「(BASICで書いた)aboutXがたまにウソをつく用に改変し、
(人間が)その関数を使ってXを求めてみよ」
ってのがあったよ。
0567565
2013/12/17(火) 02:04:24.560568デフォルトの名無しさん
2013/12/17(火) 02:15:08.71class 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
0569デフォルトの名無しさん
2013/12/17(火) 02:17:44.49ttp://ideone.com/1IiTrt
C++もどき。なるべく無駄口は叩かないようにするよ。
俺が天然なのは仕様なので荒れちゃうみたいだし。
今回は、メイン処理とジャッジを分けてみた。
0570565
2013/12/17(火) 02:30:45.970571デフォルトの名無しさん
2013/12/17(火) 02:59:48.69定番の解き方があるのかないのか分からないまま、
直感で加速させた。眠い時に書くとだいたいこうなる。
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
0572デフォルトの名無しさん
2013/12/17(火) 03:05:07.08ttp://ideone.com/10zVme
C++ライク。負の整数に対応しないといけないっぽいので対応。
参考にされるのは正直嬉しい。<3
0573デフォルトの名無しさん
2013/12/17(火) 03:09:48.24#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
0574デフォルトの名無しさん
2013/12/17(火) 03:15:59.92>>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
0575565
2013/12/17(火) 03:40:55.380576565
2013/12/17(火) 07:00:09.440577デフォルトの名無しさん
2013/12/17(火) 12:56:04.52| 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 "
0578デフォルトの名無しさん
2013/12/17(火) 15:40:11.960579デフォルトの名無しさん
2013/12/17(火) 17:42:42.20お願いします
アナログIN→A/D変換→デジタルOUT
この動作を3つのピンでしたいのです
A0→D9
A1→D10
A2→D11
このピンになる様にしたいです
0580デフォルトの名無しさん
2013/12/17(火) 17:48:55.660581デフォルトの名無しさん
2013/12/17(火) 18:13:53.54http://arduino.cc/en/Reference/analogRead
http://arduino.cc/en/Reference/pinMode
analogRead(pin)で返ってくる[0, 1023]の値を341で分けて
適当にpinMode(pin, mode)すればいい
0582デフォルトの名無しさん
2013/12/17(火) 18:28:15.54#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;
}
0583デフォルトの名無しさん
2013/12/17(火) 18:29:14.18どちらにせよ書いてある通りにやってできない理由があるならそれをどうにかすればいいだけだろう
0584デフォルトの名無しさん
2013/12/17(火) 18:31:17.05先に半分にすればいいのか。全く気付かなかった
0585デフォルトの名無しさん
2013/12/17(火) 18:34:51.040586デフォルトの名無しさん
2013/12/17(火) 23:03:30.962147483647 / 2 = 1073741823
mid = 1073741823 + 1073741823 = 2147483646
x == 2147483646 -> False
以下ループ
0587デフォルトの名無しさん
2013/12/17(火) 23:30:50.02>>572のコードは、整数って0を分岐点にして増減の性質の対称性があるわけね。
プラスでもマイナスでも増えるっていうことは、+の動作なんよ。減るっていうことは-の動作なんよ。
ちょっと表現難しいけど。
んで、もし数字がマイナス側だったらフラグで対称性をひっくり返してやって、プラス動作と同等のことをやってる。
まぁ、短いコードだからこういうフェークが使えるんだよな。
0588デフォルトの名無しさん
2013/12/18(水) 00:29:01.270589デフォルトの名無しさん
2013/12/18(水) 11:07:34.36http://i.imgur.com/uoYlQbT.jpg
誰か教えてください
ポインタ難しいです
0590デフォルトの名無しさん
2013/12/18(水) 13:54:15.69a=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
0591デフォルトの名無しさん
2013/12/18(水) 13:59:57.18c='A'
p=varptr(c)
dupptr pc, p, 4
mes strf("%c", pc)
pc+=2
mes strf("%c", pc)
0592デフォルトの名無しさん
2013/12/18(水) 16:52:18.55Haskell http://ideone.com/l2Wyc0
0593デフォルトの名無しさん
2013/12/18(水) 17:11:50.26アスキーコードとする文字を返す。
例
"BASIC" -> "F"
0594デフォルトの名無しさん
2013/12/18(水) 17:15:21.90pokeで書いてpeekで読むのか
俺もやろうとしたけどmallocしてからどうすればいいのかわからずにprintfをforeign importして終わった
0595デフォルトの名無しさん
2013/12/18(水) 17:22:14.42import Data.Char
import Control.Arrow
main = putChar $ f "BASIC"
f = chr . uncurry div . (sum &&& length) . map ord
0596デフォルトの名無しさん
2013/12/18(水) 17:23:18.02#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")
0597デフォルトの名無しさん
2013/12/18(水) 17:24:21.27ヤバイ普段書いてるソースコードと全く違う
0598デフォルトの名無しさん
2013/12/18(水) 17:25:03.020599デフォルトの名無しさん
2013/12/18(水) 17:25:35.27'BASIC' asByteArray average integerPart asCharacter "=> $F "
0600デフォルトの名無しさん
2013/12/18(水) 17:31:14.55あれだ、ポインタ?それって美味しいの?
C++は参照とイテレータがあるのでポインタはnewするときくらいしか使いません。あと、ハード叩く時と。
そして、それで間に合ってます。
0601デフォルトの名無しさん
2013/12/18(水) 17:47:04.14; Common Lisp
(let ((str "BASIC"))
(code-char (floor (apply #'+ (map 'list (lambda (c) (char-code c)) str)) (length str))))
0602デフォルトの名無しさん
2013/12/18(水) 17:47:53.35ttp://ideone.com/5tcIZC
ほぼC。こんな感じでいかがでしょ?
0603デフォルトの名無しさん
2013/12/18(水) 18:13:59.800604デフォルトの名無しさん
2013/12/18(水) 18:14:41.040605デフォルトの名無しさん
2013/12/18(水) 18:27:23.38俺がC++使ってるのは、VCのデバッガあるからだし。
0606デフォルトの名無しさん
2013/12/18(水) 20:41:33.84エラーが意味不明
0607デフォルトの名無しさん
2013/12/18(水) 21:42:19.41あとf95よりはf99の方が使いやすいらしい
でも今はスパコンじゃなければ、Cの方が計算早いこと多いけどね
0608デフォルトの名無しさん
2013/12/18(水) 22:39:32.11arc> (def to-binary (n) (coerce n 'string 2))
#<procedure: to-binary>
arc> (to-binary 255)
"11111111"
0609デフォルトの名無しさん
2013/12/19(木) 00:47:20.64let 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
0610デフォルトの名無しさん
2013/12/19(木) 01:02:47.98C http://ideone.com/ho8q5w
0611610
2013/12/19(木) 01:13:48.690612デフォルトの名無しさん
2013/12/19(木) 01:16:55.290613デフォルトの名無しさん
2013/12/19(木) 01:22:53.520614デフォルトの名無しさん
2013/12/19(木) 01:23:39.440615デフォルトの名無しさん
2013/12/19(木) 01:27:38.490616610
2013/12/19(木) 01:30:39.36>>612
そんなこと言わずに、僕も修行中でたまたま立ち寄っただけなの
0617デフォルトの名無しさん
2013/12/19(木) 01:45:41.79strAt="BASIC"; chr(int(sum(ord(ch) for ch in strAt)/len(strAt)))
===============================
F
0618デフォルトの名無しさん
2013/12/19(木) 01:54:57.24(def str-avg-char (str)
(coerce (trunc:avg (map int (coerce str 'cons))) 'char))
arc> (str-avg-char "ARC")
#\G
0619デフォルトの名無しさん
2013/12/19(木) 01:56:05.03ありがとう!!
一枚目のもCで解いてくれると非常に嬉しいです
0620デフォルトの名無しさん
2013/12/19(木) 14:37:57.76( ・ω・) <C/C++の宿題片付けます 166代目
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)ttp://toro.2ch.net/test/read.cgi/tech/1381909900/
0621デフォルトの名無しさん
2013/12/19(木) 18:10:03.94大きく格子点を通る最小の円を順番にかいていく。n番目の円の半径は?
例
n=1 -> 1.00
n=2 -> 1.41
n=5 -> 2.82
0622デフォルトの名無しさん
2013/12/19(木) 19:20:09.51| 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 "
0623デフォルトの名無しさん
2013/12/19(木) 19:45:40.78あってるかどうか分からない上に妙に無駄が多い。
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
0624デフォルトの名無しさん
2013/12/19(木) 19:57:27.17| 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 "
0625デフォルトの名無しさん
2013/12/19(木) 19:57:41.73def 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
0626デフォルトの名無しさん
2013/12/19(木) 20:42:06.33#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
0627デフォルトの名無しさん
2013/12/19(木) 20:53:15.80>>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
0628デフォルトの名無しさん
2013/12/19(木) 21:00:31.08とりあえず、余計に計算させるのを止めさせた。
あと、ピタゴラスさんのことを考えると俺の顔面はスイカの断面より真っ赤になる。
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
0629デフォルトの名無しさん
2013/12/19(木) 21:13:57.53>>621 Haskell 合ってるのか不安 http://ideone.com/lGKyE6
0630デフォルトの名無しさん
2013/12/19(木) 21:46:54.28そもそも、あってるかどうかは分からない。
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
0631デフォルトの名無しさん
2013/12/19(木) 21:47:48.42f=: 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
0632デフォルトの名無しさん
2013/12/19(木) 21:48:09.74Common Lisp
http://ideone.com/rkrDkd
0633デフォルトの名無しさん
2013/12/19(木) 21:48:40.98>>628も>>630も駄目。
0634629
2013/12/19(木) 22:23:58.69>>631を丸パクリhttp://ideone.com/lGKyE6
0635629
2013/12/19(木) 22:39:34.560636デフォルトの名無しさん
2013/12/19(木) 22:58:09.30#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
0637デフォルトの名無しさん
2013/12/19(木) 22:59:46.14最初は2倍して平方根を取っていたのですが、nが大きくなるとうまくいかず
掛ける数字がだんだん大きくなったといういい加減な数字です。
0638デフォルトの名無しさん
2013/12/19(木) 23:05:09.52| 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 "
0639629
2013/12/20(金) 01:17:46.97>>637 なるほど
0640デフォルトの名無しさん
2013/12/20(金) 05:04:22.89Range
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
0641デフォルトの名無しさん
2013/12/21(土) 01:15:42.97( ・ω・) <雪かきするよ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)now nil snow nil snow snow
0642デフォルトの名無しさん
2013/12/21(土) 05:19:59.67"11"なら「2個の"1"」で"21"を返す。"21"なら「1個の"2"、1個の"1"」で"1211"を
返す。"1"から始めてこの操作を10回繰り返し、途中経過を表示する。
例
1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211
11131221133112132113212221
0643デフォルトの名無しさん
2013/12/21(土) 06:07:35.800644デフォルトの名無しさん
2013/12/21(土) 08:21:46.38| 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]
0645デフォルトの名無しさん
2013/12/21(土) 10:06:52.68def 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)}
0646デフォルトの名無しさん
2013/12/21(土) 11:15:50.37#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
0647デフォルトの名無しさん
2013/12/21(土) 11:27:41.43>>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
0648デフォルトの名無しさん
2013/12/21(土) 12:31:39.38load 'regex'
'(.)\1*' (":@#,{.) rxapply ^:(<10)'1'
0649デフォルトの名無しさん
2013/12/21(土) 16:03:00.20Common Lisp
http://ideone.com/EvOyso
0650デフォルトの名無しさん
2013/12/21(土) 17:04:26.73f := 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))
0651デフォルトの名無しさん
2013/12/21(土) 17:35:39.86ttp://ideone.com/xr7QPi
C++ライク。あんまり効率良くない。
0652デフォルトの名無しさん
2013/12/21(土) 18:47:43.88#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;
}
0653デフォルトの名無しさん
2013/12/21(土) 21:28:37.45ttp://ideone.com/p0DwaV
0654デフォルトの名無しさん
2013/12/22(日) 01:04:22.19>>643のfork。モナド使ったらスッキリしたので http://ideone.com/qhsRPc
0655デフォルトの名無しさん
2013/12/22(日) 08:37:29.19a <- "1"
for(i in 1:10){
cat(a, "\n", sep="")
a <- rle(a)
a <- c(rbind(a[[1]], a[[2]]))
}
0656デフォルトの名無しさん
2013/12/22(日) 10:36:18.91すべて足したら、その合計を表示せよ。
回答例: 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
0657656
2013/12/22(日) 10:37:08.61○数
0658デフォルトの名無しさん
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
0659デフォルトの名無しさん
2013/12/22(日) 14:33:21.59f : = 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
0660デフォルトの名無しさん
2013/12/22(日) 15:18:38.070661デフォルトの名無しさん
2013/12/22(日) 15:39:51.24Big_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;;
0662デフォルトの名無しさん
2013/12/22(日) 18:54:29.19ttp://ideone.com/svcXCp
ふっふっふ、そんな生っちょろい数字ではCゲンガーは殺せん!
とは言え、あんまりデカイ数字出されても困るんだけどね・・・。Orz
数字があわなくてあれ?ッて思ってたら区間間違えてた。
"<="なのね。いつも"<"のみで判定してるから一瞬ビビった。
0663デフォルトの名無しさん
2013/12/22(日) 19:08:46.12何とかならんかねー。Orz
0664デフォルトの名無しさん
2013/12/22(日) 19:52:21.54sum=0.0
repeat 100000, 1
sum+=cnt
loop
mes strf("%.0f", sum)
0665デフォルトの名無しさん
2013/12/22(日) 23:36:17.93(1 to: 100000) sum "=> 5000050000 "
0666デフォルトの名無しさん
2013/12/23(月) 00:23:59.39import 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);
}
}
0667デフォルトの名無しさん
2013/12/24(火) 08:41:09.62スレにコントリビュートするために問題作ったよ!!
64ビット変数の基数62のハッシュを作ってみよう。
あぁ、別に64ビットじゃなくてもいいや。とにかく基数62のハッシュを作ってみよう。
これを知っていると、例えばURLの字数短縮したりとかまぁチョイチョイ使い道がある。
数学苦手だからこの程度しかできなくてごめんね。
ちなみに62なのは、数字と、アルファベットの大文字小文字を全部足すと62になるから。
64のほうがキリがいいよね。
http://ideone.com/57sb8e
あと、バグ報告も歓迎。
0668デフォルトの名無しさん
2013/12/24(火) 10:03:47.930669デフォルトの名無しさん
2013/12/24(火) 10:12:59.03#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")
0670デフォルトの名無しさん
2013/12/24(火) 10:22:12.12Common Lisp
http://ideone.com/idwzpE
0671デフォルトの名無しさん
2013/12/24(火) 10:57:56.71あそっか。
C++でもStringの長さとれるからそれ基数扱いにすればよかったんだった。勉強になった。
自分の書いたアルゴリズムを他の言語で書いてくるとそれとなく読めて面白いね。
知見がひろがるわー。
0672デフォルトの名無しさん
2013/12/24(火) 12:18:29.73| 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' "
0673デフォルトの名無しさん
2013/12/24(火) 18:38:30.99class 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
0674デフォルトの名無しさん
2013/12/24(火) 20:07:27.14なるほどなるほど。
0675デフォルトの名無しさん
2013/12/24(火) 20:24:32.61'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(_剰余,_変換符号ならび,_変換された符号).
0676デフォルトの名無しさん
2013/12/24(火) 20:28:19.90'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(_剰余,_変換符号ならび,_変換された符号).
0677676
2013/12/24(火) 20:31:14.81atom_charsから始まる行を8文字分右へずらして読んで下さい。その上も一行改行が
多くなっています。
0678676
2013/12/24(火) 20:32:39.98ここは 基数62のハッシュ符号化 です。
0679デフォルトの名無しさん
2013/12/24(火) 20:57:00.190680デフォルトの名無しさん
2013/12/24(火) 21:24:44.70import Numeric
showIntAtBase62 :: Integer -> String
showIntAtBase62 i = showIntAtBase 62 (xs !!) i ""
where xs = ['0'..'9'] ++ ['a'..'z'] ++ ['A'..'Z']
main = putStrLn $ showIntAtBase62 18446744073709551615 -- lYGhA16ahyf
0681670
2013/12/24(火) 22:33:09.31Common Lispのloopは関数型っぽくはないと思う。
多分これが関数型言語っぽい書き方。
http://ideone.com/OxG8ky
0682デフォルトの名無しさん
2013/12/24(火) 22:45:19.650683デフォルトの名無しさん
2013/12/24(火) 23:02:20.64あー確かに、Cゲンガーの俺には読みにくい感じだわ。(汗
これだよこれ。
>>679
とある自然数Nに基数Rを与える。基数R上で桁を一桁増やすときは基数RのRを掛ける。基数10で10掛けると桁が上がるようにね。減らすときは割る。
基数Rの一桁目の数を調べるとき、その桁の数の上限がRなので自然数NからRで余剰を取ると一桁目がわかる。
ちなみに、俺には任意のの桁をO(1)でぶち抜く方法はよくわからん。Orz
基数10のように0を適当に増やすだけでは無理なので普段使いで使ってないとパッとは出てこないね。
そういう意味で10進数は旨いことできてると思う。
0684デフォルトの名無しさん
2013/12/25(水) 01:45:29.35出力: http://codepad.org/9Qm1zRxy
一番上の「☆」と土台の「||」は固定でよい
装飾は適当な文字(例:N,i,X,J,o,%,bなど)を利用する
解答例: http://codepad.org/aR7eI9F2
http://ideone.com/ea6Wna
>>681 は Radix62b(), Radix62c() のうちのどっちの流儀なの?
0686デフォルトの名無しさん
2013/12/25(水) 02:30:37.31#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
0687デフォルトの名無しさん
2013/12/25(水) 02:55:52.200688670
2013/12/25(水) 08:14:03.73Radix62b()だね。
そうしないと末尾再帰にならないので。
Common Lispは末尾再帰最適化が仕様になっていないけれど、多くの実装で最適化してくれるらしい。
0689デフォルトの名無しさん
2013/12/25(水) 09:57:56.37| 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
0690デフォルトの名無しさん
2013/12/25(水) 10:04:31.50おっPython3!
http://ideone.com/vOLa5e
0693デフォルトの名無しさん
2013/12/25(水) 18:08:29.45def 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)}
0694デフォルトの名無しさん
2013/12/25(水) 19:32:17.42t8mJj+eCGQJCyfqNrgqNro2+TQfBIvk66KAWZFJ8TXx8Y+GpxqJ4IIsLbh0I
aairN85RUFdXV9AEi2c2+jS6Nl8DmdmYBVJQo6+vXwMhETqBhH/LMv/mXKCu
J9GNAU1HmnMbA2LBbAiMRVbcOLdlRdNW9ca5CmD2/Jb5jbGNc2FsIG8uFwDE
C2lB
ヒント:DしてIする。
0695デフォルトの名無しさん
2013/12/25(水) 19:46:37.870696687
2013/12/25(水) 21:12:34.130697デフォルトの名無しさん
2013/12/25(水) 21:44:33.97ttp://ideone.com/bGGvKc
ちょっと反則技使った。アルゴリズムは要求通り書いたつもりだが、綺麗なツリーにならなかった。Orz
主よ、赦したまへ〜。
25日のうちに作れてよかったよ。
0698デフォルトの名無しさん
2013/12/25(水) 22:23:50.74( ・ω・) <メリークリスマス
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)5 26 27 28 29 30 31
0699687
2013/12/25(水) 23:58:41.540700デフォルトの名無しさん
2013/12/26(木) 00:14:42.24Common Lisp
無理にformatの機能を使ってみた。
http://ideone.com/pEyO7r
0701687
2013/12/26(木) 00:18:14.610702687
2013/12/26(木) 01:31:30.610703687
2013/12/26(木) 01:40:48.880704687
2013/12/26(木) 01:49:28.850705687
2013/12/26(木) 02:01:12.820706687
2013/12/26(木) 02:17:36.400707687
2013/12/26(木) 02:19:37.55694 :デフォルトの名無しさん:2013/12/25(水) 19:32:17.42
eJxrdGh0UAAjELEfTHCBOBAIFG9apKOTrB5/EioU1xjQ6NvY0pQHlIyPz7HL
t8mJj+eCGQJCyfqNrgqNro2+TQfBIvk66KAWZFJ8TXx8Y+GpxqJ4IIsLbh0I
aairN85RUFdXV9AEi2c2+jS6Nl8DmdmYBVJQo6+vXwMhETqBhH/LMv/mXKCu
J9GNAU1HmnMbA2LBbAiMRVbcOLdlRdNW9ca5CmD2/Jb5jbGNc2FsIG8uFwDE
C2lB
ヒント:DしてIする。
0709694
2013/12/26(木) 11:11:04.29いえw 問題でもお題でもないので完全スルーでお願いします。
解けた人だけ、こっそりレスしてくれたら満足です。
>>695
アイは膨らませる。あとはアイだけあればいい。
いろいろゴニョゴニョしたりする必要は無い。
0710デフォルトの名無しさん
2013/12/26(木) 23:02:05.260711デフォルトの名無しさん
2013/12/28(土) 21:35:18.35( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0712デフォルトの名無しさん
2013/12/29(日) 18:18:34.95「デジタル式の時計をアナログ式に変換する」
入出力サンプル
http://codepad.org/XcWCtEF5
目盛りをo、短針をX、長針をxで表す
重なったときはXで表す
ただし短針は最も近い目盛りを指すようにする
0713デフォルトの名無しさん
2013/12/29(日) 19:12:27.99http://codepad.org/JZATtMu2
0714デフォルトの名無しさん
2013/12/29(日) 20:02:06.39Haskell http://codepad.org/ANR1mjIq
思い出したけどcodegolfの問題だった。細かいところは違ったけど
0715デフォルトの名無しさん
2013/12/29(日) 20:56:31.89clock_pos_get hour*360/12+min*15/60, 12, x, y
↓
clock_pos_get hour*360/12+min*30/60, 12, x, y
0716デフォルトの名無しさん
2013/12/30(月) 00:30:25.58Common Lisp
http://ideone.com/RmvQTV
0717デフォルトの名無しさん
2013/12/30(月) 15:36:43.08| 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'.
0718デフォルトの名無しさん
2013/12/30(月) 17:10:52.07class 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')
0719デフォルトの名無しさん
2013/12/30(月) 17:42:26.30変数名を変更し、内部の配列の使い方を直感的なものに修正。
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
0720デフォルトの名無しさん
2013/12/31(火) 08:57:29.86ttp://ideone.com/4pgEFj
ほぼC言語。綺麗な円がかけなかった。Orz
フレームバッファ確保しようかと思ったけど冗長すぎて却下した。
模範解答の空白の数を数えるのが一番大変だった。うまくいかなかったけど・・・。
0721デフォルトの名無しさん
2013/12/31(火) 17:50:58.01#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;
}
0722デフォルトの名無しさん
2013/12/31(火) 17:56:53.26スペース圧縮されてるので一応codepadも。
ttp://codepad.org/3Vm1ujZY
0723デフォルトの名無しさん
2014/01/02(木) 01:21:58.66a=:'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
b=:1319718474975x
(62#.inv b){a
newYear
0724デフォルトの名無しさん
2014/01/02(木) 07:20:31.83対ウイルス用プログラムとは
ウイルスを自動検出し、どこでかかったかを特定。特定した相手にウイルス
を感染させるプログラム。
総員、直にかかれぇ!
0725デフォルトの名無しさん
2014/01/02(木) 10:30:09.19見えなくしてるんでコテハンはずさないでください
0726デフォルトの名無しさん
2014/01/02(木) 11:03:37.860727デフォルトの名無しさん
2014/01/02(木) 11:55:54.73どんなに最悪でもテストまたは正解を書くこと
0728デフォルトの名無しさん
2014/01/02(木) 11:58:50.04(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)} "
0729デフォルトの名無しさん
2014/01/02(木) 12:00:04.29PowerShellで
https://gist.github.com/anonymous/8214328
0730デフォルトの名無しさん
2014/01/02(木) 12:00:54.97>>712 ですた。
0731デフォルトの名無しさん
2014/01/02(木) 12:03:27.44アルゴリズムというか考え方は、ぐぐってしまった。しかし正解かどうか不明。
>>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]
0732デフォルトの名無しさん
2014/01/02(木) 12:21:20.42def 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}}
0733デフォルトの名無しさん
2014/01/02(木) 12:31:36.00function 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)
0734デフォルトの名無しさん
2014/01/02(木) 14:29:01.89入出力例だけあればいいよ
サンプルは無いほうがいい
答え丸出しのパズルは面白くない
0735デフォルトの名無しさん
2014/01/02(木) 14:32:32.84for i, 1, 2014+1
sum+=i
while sum>2014
sum-=j
j++
wend
if sum=2014 : mes strf("%d...%d", j, i)
next
0736デフォルトの名無しさん
2014/01/02(木) 14:51:48.11ruby 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
}
0737デフォルトの名無しさん
2014/01/02(木) 14:55:58.51出すからには一番真剣にサンプルくらい載せてほしいな
0738デフォルトの名無しさん
2014/01/02(木) 15:33:53.370739デフォルトの名無しさん
2014/01/02(木) 15:35:54.70与えられたキーワードを1回ずつ使って、できるだけ面積の小さなクロスワードを作って返す
例
input
スイカ、カイバ、イヌ
output
ス□□
イ□□
カイバ
□ヌ□
注意
ス□□
イヌ□
カイバ
は不可
2文字以上文字が連続する部分はキーワードでないといけない
この場合「ヌイ」がアウト
0740デフォルトの名無しさん
2014/01/02(木) 15:46:47.851.各キーワードは2字以上、そうでなければエラー
2.それさえ満たせば繋げられなくても問題ないので、解は必ず出せる
例
input
マンガ、バター
output
マンガ
□□□
バター
3.キーワードの重複は認める
0741デフォルトの名無しさん
2014/01/02(木) 16:37:18.79Common Lisp
http://ideone.com/DBVQv2
0742デフォルトの名無しさん
2014/01/02(木) 17:03:18.27https://gist.github.com/anonymous/8216229
遅いし美しくない。いまいち。
0743742
2014/01/02(木) 17:28:10.05改善版
PowerShell
https://gist.github.com/anonymous/8216399
0744デフォルトの名無しさん
2014/01/02(木) 17:56:12.86sum2014 :: [(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)]
0745デフォルトの名無しさん
2014/01/02(木) 18:01:21.27うごごごご…
0746デフォルトの名無しさん
2014/01/02(木) 19:51:38.03ttp://ideone.com/xXTlFZ
ideon混んでるなー。コンパイルが終わらない。こんな短いのに。
2014の中の半分位の数は二倍すると2014超えるのでそこを最適化したら微妙に早くなった。
0747デフォルトの名無しさん
2014/01/02(木) 20:37:06.98これでおk
0748デフォルトの名無しさん
2014/01/02(木) 20:45:16.23長方形の周囲長にしないと
面積だと1マス空けになる
スイカ□カイバ□イヌ
みたいに
0749デフォルトの名無しさん
2014/01/02(木) 21:12:54.76又は全てのワードが連結していることを求めるか、だな。
0750デフォルトの名無しさん
2014/01/02(木) 21:13:10.60> 2.それさえ満たせば繋げられなくても問題ないので、解は必ず出せる
これを撤回して、各単語は少なくとも一つの単語と重なりを持つという条件を加えれば
面積でも問題ない?
0751デフォルトの名無しさん
2014/01/02(木) 22:49:46.69C# でギッタンバッコン
ttp://ideone.com/qeF9CD
ideoneじゃTuple使えないのね。
0752デフォルトの名無しさん
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 ではどっちでも同じみたいだけど。
0753デフォルトの名無しさん
2014/01/02(木) 23:23:17.73では全て一続きに連結するという条件でお願いします
0754デフォルトの名無しさん
2014/01/03(金) 00:44:04.33f := 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
0755デフォルトの名無しさん
2014/01/03(金) 18:51:33.57f(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]}
0756デフォルトの名無しさん
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
0757デフォルトの名無しさん
2014/01/04(土) 13:50:48.83ttp://ideone.com/H1Yumt
思ったよりすんなりできたな。いっちばーん!?
0759デフォルトの名無しさん
2014/01/04(土) 14:25:49.35#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;
}
0761デフォルトの名無しさん
2014/01/04(土) 14:41:07.35ttp://ideone.com/TpvzVm
くっ。
エディットできなかったのでフォークして直しておいた。
0762デフォルトの名無しさん
2014/01/04(土) 14:54:57.65http://codepad.org/BRBRX8v5
0763デフォルトの名無しさん
2014/01/04(土) 15:11:20.98void 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("");
}
}
0764デフォルトの名無しさん
2014/01/04(土) 15:18:55.62#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;
}
0765デフォルトの名無しさん
2014/01/04(土) 15:52:43.43#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."
0766デフォルトの名無しさん
2014/01/04(土) 16:46:19.28Common Lisp
http://ideone.com/r2ES2Q
0767デフォルトの名無しさん
2014/01/04(土) 17:09:26.77python3
http://ideone.com/66kZLL
0769デフォルトの名無しさん
2014/01/04(土) 18:17:24.89-- Haskell
zigzag :: String -> [String]
zigzag = foldr (\x [as, bs] -> [x:bs, ' ':as]) [[], []]
main = mapM_ (mapM_ putStrLn . zigzag) ["123456789", "The earth turns around the sun."]
0770デフォルトの名無しさん
2014/01/04(土) 19:22:24.93f := 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)
)
0771デフォルトの名無しさん
2014/01/04(土) 21:45:37.64総当り以上に頭悪そうなHaskell http://ideone.com/IuKYDH
0772デフォルトの名無しさん
2014/01/04(土) 21:53:14.50| 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.'
0773デフォルトの名無しさん
2014/01/04(土) 23:16:26.46正規表現置換 (Clojure) で
http://ideone.com/I8ealr
0774デフォルトの名無しさん
2014/01/04(土) 23:34:50.46function 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
0775片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/05(日) 01:18:31.92半径は文字間隔が離れすぎず近すぎない程度になるよう適当に選ぶ。
0776デフォルトの名無しさん
2014/01/05(日) 02:46:12.61ttp://ideone.com/fHHfck
アフィン変換の式はあんまり人に見せたくないんだが、あまりにレイアウトがうまくいかないもんでマジで作ってしまた。
それでも厳しいな。シャッフル自体は数分でできたんだけどね・・・。
しかし、遺跡の石版みたいになったなぁ。
0777デフォルトの名無しさん
2014/01/05(日) 04:22:58.58http://ideone.com/1aipvB
0778デフォルトの名無しさん
2014/01/05(日) 05:11:30.59シャッフルしたのはフレームバッファ使わないためだよ。
並びが明確なので、後はスペースの区切り方なんだが、それが上手いこといかない。
円の性質ってそういえばよく知らないな。
0779デフォルトの名無しさん
2014/01/05(日) 05:57:02.99そういうことか。
あ、それで1行2文字の制限になって歪んでるのか。
・・・バッファ節約しなきゃならんサイズの円だと相当大きい円にしない限りゆがみがひどい事になりそ
0780デフォルトの名無しさん
2014/01/05(日) 06:28:05.70Haskell http://ideone.com/cPoXNQ
0781デフォルトの名無しさん
2014/01/05(日) 12:29:21.15>>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)
0782デフォルトの名無しさん
2014/01/05(日) 14:14:58.63javascript + html5
https://gist.github.com/anonymous/8264687
0783デフォルトの名無しさん
2014/01/05(日) 16:40:11.70#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"
0784デフォルトの名無しさん
2014/01/05(日) 22:18:59.80f := 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____
______________________
0785デフォルトの名無しさん
2014/01/06(月) 01:25:20.92Python3
ttp://ideone.com/16qIbK
0786片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/06(月) 05:45:41.660787片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/06(月) 15:01:42.130788デフォルトの名無しさん
2014/01/06(月) 17:46:48.59f <- function(s){
n <- nchar(s)
pie(rep(1,n),unlist(strsplit(s,"")),clock=T,dens=0,lty=0,init=90+360/n/2)
}
円グラフをかくpieを使ってラベル以外を全部消す作戦だったが
中心に向かう短い補助線が消せなかった。
0789デフォルトの名無しさん
2014/01/07(火) 01:27:16.40例
121 -> ng //偶数の桁がある
357 -> ok
0790デフォルトの名無しさん
2014/01/07(火) 01:36:25.37def f789(n)
n.to_s.scan(/./).all?{|c| c.to_i % 2 == 1} ? 'ok' : 'ng'
end
puts f789(121)
puts f789(357)
↓
ng
ok
0791デフォルトの名無しさん
2014/01/07(火) 01:43:55.44p (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}}
こうとか?
0792デフォルトの名無しさん
2014/01/07(火) 01:54:17.63ttp://ideone.com/3Orka2
こんな感じでいいのかな?
0793デフォルトの名無しさん
2014/01/07(火) 03:16:39.980794デフォルトの名無しさん
2014/01/07(火) 04:15:22.10; 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))))
0795デフォルトの名無しさん
2014/01/07(火) 08:28:07.86python3
http://ideone.com/ibiYQ0
0796デフォルトの名無しさん
2014/01/07(火) 11:52:11.47| 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________'
0797デフォルトの名無しさん
2014/01/07(火) 12:03:28.90(1 to: 1000) select: [:n | n asString allSatisfy: [:digChar | digChar digitValue odd]]
0798デフォルトの名無しさん
2014/01/07(火) 12:19:05.08f = 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
0799デフォルトの名無しさん
2014/01/07(火) 12:58:42.66100番台が抜けてしまいます。ボツにします。
0800デフォルトの名無しさん
2014/01/07(火) 16:02:06.49Haskell http://ideone.com/DThx5t
0801デフォルトの名無しさん
2014/01/07(火) 18:20:04.33Python3 スマートでない解法
http://ideone.com/AssCQQ
0802デフォルトの名無しさん
2014/01/07(火) 18:59:35.68#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)
0803デフォルトの名無しさん
2014/01/07(火) 19:54:24.39Ruby1.9.3
x="24680".split(//)
1.upto(1000) { |n|
a=n.to_s.split(//)
p n if a==(a-x)
}
0804デフォルトの名無しさん
2014/01/07(火) 20:01:58.29Haskell http://ideone.com/VLeOC9
0805デフォルトの名無しさん
2014/01/07(火) 21:38:00.37~.;&.>}.,{a;a;<a=.a:,;/'13579'
0806デフォルトの名無しさん
2014/01/07(火) 23:12:47.78(1 to: 1000) reject: [:n | n asString includesAnyOf: '02468']
0807デフォルトの名無しさん
2014/01/07(火) 23:24:45.03結ぶための部分の長さは別としてひもの長さの最小値を求める。
0808デフォルトの名無しさん
2014/01/08(水) 02:33:38.768.354くらい?
0809デフォルトの名無しさん
2014/01/08(水) 04:56:57.538よりは小さいんじゃないか?
0810デフォルトの名無しさん
2014/01/08(水) 09:54:29.23□
の下に五角柱が来るから、紐を角柱に沿わせるなら8になる。
実際には五角柱の方が幅が広いから紐が角柱から離れるので8より小さくなるね。
0811デフォルトの名無しさん
2014/01/08(水) 12:25:44.50f = 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
0812デフォルトの名無しさん
2014/01/08(水) 21:41:40.27最短という条件なら
五角柱は下じゃなくて右か左かにくるはず
そんな条件ないけど
0813デフォルトの名無しさん
2014/01/08(水) 22:39:54.09質問です
どのように配置すれば最小値になるのですか?
0814デフォルトの名無しさん
2014/01/08(水) 22:57:01.540815デフォルトの名無しさん
2014/01/08(水) 23:39:28.37数学ダメだから、辺長1の正N角形の求め方がわかりません。
とある角度rの弧の求め方ってどうするんだっけ?
回転平行移動自体はアフィン変換でどうでもなるんだけど・・・。
0816デフォルトの名無しさん
2014/01/08(水) 23:43:14.50| 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} "
0817片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 00:20:21.05よく分かる解説:
慣例として角度に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)番目の頂点を表す座標となる。
0818片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 00:25:14.57円の中心が(α,β)であれば
(x,y)==(α+r cos(2πk/N),β+r sin(2πk/N))となる。
0819片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 00:30:38.480820デフォルトの名無しさん
2014/01/09(木) 00:38:47.28ttp://ideone.com/gZEHcJ
多分間違ってるけど一応作ったよ。
Rの式は頭のなかで変形したからオカシイかもしれん。今気づいたけど拡大いらね・・・。
ゲーム作るときはこれくらいはかけないとね。これでもまだ全ッ然足りないけどね。
デバッグ歓迎。
>>816
すげー綺麗だね。Orz
>>817-819
そういう証明とか説明とか理解できなくて数学赤点だったんだよ・・・。(ToT
とかいってもしょうがないけどね。
説明ありがとう。一応理解できるように努力はしてみる。。。
0821デフォルトの名無しさん
2014/01/09(木) 00:43:01.21| 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} "
0822片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 00:50:59.09(x,y)==(α+r cosθ,β+r sinθ)
この式を使えば(α,β)を中心とし、半径がrの円と円運動を描画できる。(x,y)は円周上の点。θは角度。
θを変化させるだけで位置がくるくる回転するぞ!!!
0823820
2014/01/09(木) 01:01:53.50ちょうどいいから質問なんだけど、
アフィン変換の式で、回転成分はXとYの両成分に、X成分とY成分の両方を含んでいるけど、
今示された式とどちらが正解なんだい?
0824デフォルトの名無しさん
2014/01/09(木) 01:06:09.38A,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))
0825片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 01:09:23.13アフィンの特殊化。
変換前のX,Yと変換後のx,yを混同したら駄目だよ。
0826デフォルトの名無しさん
2014/01/09(木) 01:10:40.48俺、バカだからそういう説明がわからないんですよ。
それで任意の辺の長さの数字を得る時ってどうするの?
それって、辺の長さ1に正規化されてるの?
0827デフォルトの名無しさん
2014/01/09(木) 01:13:04.53そうなんだ。解答ありがとう。
アフィン変換の方は行列を解いたらたまたまそうなったという感じだと思うのだけど、
どっちも行けるんであれば、今後は簡単な方をつかうことにするよ。
0828デフォルトの名無しさん
2014/01/09(木) 01:18:18.12一辺の長さがLなら
r=(L/2)*sqrt(1+1/(tan(π/N)^2))
0829デフォルトの名無しさん
2014/01/09(木) 01:22:06.08そうやってパッと答えられるのはすごいと思う。結構マジで。
俺にはどうやって導き出したのかさっぱりだよ・・・。Orz
ちょっと組み込んでみる。
0830片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 01:26:03.900831デフォルトの名無しさん
2014/01/09(木) 01:28:01.00辺の長さじゃなくて半径1で書いてた。^^; >>816,821
0832デフォルトの名無しさん
2014/01/09(木) 01:42:20.530833デフォルトの名無しさん
2014/01/09(木) 01:49:04.74一応組み込んでみたよ。なんかそれっぽい数字になったような気がする。
ttp://ideone.com/UwxHwP
>>830
はっきり言って、俺さ、大学行ってない底辺だからね。
高校の成績も最後から数えたほうがすんげー早かったよ。
一応、工業高校は行ったんだけどね。
0834デフォルトの名無しさん
2014/01/09(木) 02:03:30.89どうしてくれようか。
0835デフォルトの名無しさん
2014/01/09(木) 02:13:08.22( ・ω・) <笑えばいいと思うお
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)in cos tan asin acos atan
0836デフォルトの名無しさん
2014/01/09(木) 07:15:58.650837デフォルトの名無しさん
2014/01/09(木) 10:05:55.86| 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]} "
0838デフォルトの名無しさん
2014/01/09(木) 20:13:42.30辺をひったりくっつける場合
3|4|5 で 7.951
4|3|5 で 7.554
4|3|5 から 4 をずらしていくと 7.415
0839片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 20:36:00.34お題:数独パズルの難易度を1、2、3、4、5の五段階で判定するプログラムを作れ。
0840デフォルトの名無しさん
2014/01/09(木) 20:59:06.800841片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/09(木) 21:16:14.05と各解法のそれぞれの手の発見の難しさを総合的に評価する。
0842デフォルトの名無しさん
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
0843デフォルトの名無しさん
2014/01/09(木) 21:44:46.02f := method(n, f(1 + n println))
Io> f(0)
0
1
...
4365
4366
0844デフォルトの名無しさん
2014/01/09(木) 21:58:08.77#include <stdio.h>
void recurse(int n) {
printf("%d\n", n);
recurse(n + 1);
}
int main(void) {
recurse(0);
return 0;
}
↓
...
65090
65091
0845デフォルトの名無しさん
2014/01/09(木) 22:02:47.20f = 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]: ?
0846デフォルトの名無しさん
2014/01/09(木) 22:17:49.96import Control.Exception
main = f 0 where f x = f (x + 1) `catch` \StackOverflow -> print x
-- > 677789
0849デフォルトの名無しさん
2014/01/10(金) 01:55:37.08ttp://ideone.com/D2Cvg9
これもありだよね!
GCCだと64ビット変数をINTMAX確保してもまともに動いてしまった。
0850デフォルトの名無しさん
2014/01/10(金) 05:07:17.37f =: 3 : 0
smoutput y
f >:y
)
f 0
0
1
...
9996
9997
|stack error: smoutput
| smoutput y
0851デフォルトの名無しさん
2014/01/10(金) 05:09:34.92recursive
#deffunc recursive
recursive
return
0852デフォルトの名無しさん
2014/01/11(土) 13:24:44.59| recurse |
recurse := nil.
recurse := [:i | i asString displayAt: 100 asPoint. recurse value: i+1].
recurse value: 0
4960335 を出力したところでメモリ不足で停止。
0853デフォルトの名無しさん
2014/01/11(土) 21:09:40.03( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0854デフォルトの名無しさん
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
0855デフォルトの名無しさん
2014/01/11(土) 23:51:42.220856デフォルトの名無しさん
2014/01/12(日) 00:14:02.74?
なんでですか?
0857デフォルトの名無しさん
2014/01/12(日) 00:15:24.78| 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 "
0858デフォルトの名無しさん
2014/01/12(日) 08:37:53.88int main(void)
{
int x, y;
scanf("%d%d", &x, &y);
printf("%c", 'A' + (x > 3) + (y > 3) * 2);
return 0;
}
0859デフォルトの名無しさん
2014/01/12(日) 10:47:50.27> 最も近くにある塔を出力しなさい。
複数あったら?
0860デフォルトの名無しさん
2014/01/12(日) 10:55:48.640861デフォルトの名無しさん
2014/01/12(日) 17:32:14.06ttp://ideone.com/nTF6NO
適当に組んでみたが合ってるか???
一応、複数表示対応。
0862デフォルトの名無しさん
2014/01/12(日) 17:35:27.21そういった知恵は極力先に働かせないのがプログラミングだろう。
0863デフォルトの名無しさん
2014/01/12(日) 17:57:20.46例
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
0864デフォルトの名無しさん
2014/01/12(日) 19:10:35.77| 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 "
0865デフォルトの名無しさん
2014/01/12(日) 20:04:36.530866デフォルトの名無しさん
2014/01/12(日) 20:38:20.39いや、この場合図と配置から意図は汲んでやるべきだろう。
0867デフォルトの名無しさん
2014/01/12(日) 21:10:29.240868デフォルトの名無しさん
2014/01/12(日) 22:05:56.36ttp://codepad.org/YS0yhzkZ
0869デフォルトの名無しさん
2014/01/12(日) 22:35:44.05複数の解が存在する場合、幅が最小となる物を一つ出力してください。
123
134
↓
123
1□34
1212
1322
1122
↓
1□□2□12
1□422
11□22
※文字は全角か半角のどちらかに統一して構いません。
半角の場合は□ではなく半角スペースを挿入してください。
0870デフォルトの名無しさん
2014/01/12(日) 22:39:29.60下から二段目は
1□422
じゃなく
1□322
っすね。
0871デフォルトの名無しさん
2014/01/13(月) 00:15:39.61ttp://ideone.com/vvAtep
あのね、あのね。僕ね、3次元までしか扱ったことがないのー。
だからね、このコードが合ってるかどうか解らないのー。
こういうのってどういう感じで絵を見ればいいのかなぁ??
ちょっとボケてみたけど、これ合ってるのか??
今回はちょっとわからないのでランダムしなかった。
0872デフォルトの名無しさん
2014/01/13(月) 01:12:38.601212
1322
1122
↓
12□12
1□3□22
1□□122
じゃない?
0873デフォルトの名無しさん
2014/01/13(月) 02:13:20.43| 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
0874デフォルトの名無しさん
2014/01/13(月) 02:34:04.31ttp://ideone.com/7PDNIU
そこはかとなくバグっている。
もう無理ー。Orz
グッチャグチャ。
0875デフォルトの名無しさん
2014/01/13(月) 06:29:39.870876デフォルトの名無しさん
2014/01/13(月) 13:28:33.980877デフォルトの名無しさん
2014/01/13(月) 19:14:40.32#!/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
一晩以上考えて結局力技になってもた。
0878デフォルトの名無しさん
2014/01/13(月) 21:10:40.59perl
http://ideone.com/YfE0bE
0879デフォルトの名無しさん
2014/01/13(月) 22:43:11.37class 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)
0880デフォルトの名無しさん
2014/01/13(月) 22:48:24.78スペース押し込んでチェックをひたすら。
以下、出力例抜粋。
width = 4
123
1_34
width = 6
121_2
1__322
1_1_22
width = 6
121_2
__1322
1_1_22
0881デフォルトの名無しさん
2014/01/13(月) 23:20:15.43def 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)
0882デフォルトの名無しさん
2014/01/14(火) 07:28:57.270883デフォルトの名無しさん
2014/01/14(火) 23:53:03.02| 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
0884デフォルトの名無しさん
2014/01/15(水) 07:55:13.20Haskell ただの再帰 http://ideone.com/GYXHG0
0885デフォルトの名無しさん
2014/01/15(水) 11:23:57.47メモ化 http://ideone.com/lmBube
0886デフォルトの名無しさん
2014/01/16(木) 20:46:13.96( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0887片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 03:56:03.63実行可能ならば「実行可能です」と表示し、可能でなければ
「実行可能ではありません」と表示する。
0888片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 04:27:08.120889片山博文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)
0890デフォルトの名無しさん
2014/01/17(金) 05:03:17.79ヘッダのチェックしか検査項目は無いがCOM形式も想定するとだとそれすら不要。
お題を出すなら出すでもうちょい頭使ってお題考えろよ。
それともあれか。
プログラムがクラッシュするかどうか、停止性問題でも解けってのか?あほらしい。
0891片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 05:09:14.08.batと.comについては、拡張子チェックだけでOKとします。
0892片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 05:35:28.030893デフォルトの名無しさん
2014/01/17(金) 09:54:19.630894デフォルトの名無しさん
2014/01/17(金) 18:02:16.390895デフォルトの名無しさん
2014/01/17(金) 18:42:31.670896片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 19:33:50.01一番長いしりとりの単語列を出力せよ。同じ単語は二度使わない。
0897片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 20:02:33.980898片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 20:05:09.460899片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 20:17:21.990900デフォルトの名無しさん
2014/01/18(土) 00:35:53.85プログラマの成れの果て。将来のおまえら。
0901デフォルトの名無しさん
2014/01/18(土) 01:48:54.800902デフォルトの名無しさん
2014/01/18(土) 02:08:19.10t=:2j2 5j2 2j5 5j5
w=:'ABCD'
f=:3 :'w{~I.(= <./)|t-y'
f 3j3
A
f 4j3
B
0903デフォルトの名無しさん
2014/01/18(土) 04:37:41.41くそコテ擁護になって申し訳ないがお前のレベル判定とコード記述能力の方が疑問
0904デフォルトの名無しさん
2014/01/18(土) 04:51:43.96お前はリファレンス通りに叩くだけな>>887>>897を自信満々で>>899って宣言されてやる気になれんの?
0905デフォルトの名無しさん
2014/01/18(土) 05:14:49.19f:=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
0906デフォルトの名無しさん
2014/01/18(土) 19:07:14.67はいはい、解く気も出題する気もない人はこのスレから出ていってくれないか?
それとも、名誉を賭けてわたくしと三番勝負のタイトルマッチでもするか?
はたまた、数百万円ほどのはした金や人の命を賭けたらやる気になるかい? 全人類の命を賭けてわたくしとご勝負致しますかね?
0907デフォルトの名無しさん
2014/01/18(土) 19:20:54.260908デフォルトの名無しさん
2014/01/18(土) 19:45:31.930909デフォルトの名無しさん
2014/01/18(土) 20:11:17.69QZと勝負してくれよ酉つけて長期戦でさ
ここで待ってればいつかくるよ
0910デフォルトの名無しさん
2014/01/18(土) 20:22:01.76隣り合う文字の間に挿入した文字列を返す。
例
"Personal" -> "Peerrsssoonnall"
"Hello, world!" -> "Heellllooo,, wwworrrlldd!"
0911デフォルトの名無しさん
2014/01/18(土) 20:53:29.36| 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!' "
0912片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/18(土) 20:54:55.69#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]);}
0913デフォルトの名無しさん
2014/01/18(土) 21:04:24.94; 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))))
0914デフォルトの名無しさん
2014/01/18(土) 21:23:17.03intersperseMaxNbr :: 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!"
0915デフォルトの名無しさん
2014/01/18(土) 21:28:30.13#!/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)])
0916デフォルトの名無しさん
2014/01/18(土) 21:39:02.38#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;
}
0917デフォルトの名無しさん
2014/01/18(土) 21:44:07.50#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!")
0918デフォルトの名無しさん
2014/01/18(土) 22:10:31.89#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;
}
0919デフォルトの名無しさん
2014/01/18(土) 22:41:07.05| 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!' "
0920デフォルトの名無しさん
2014/01/18(土) 22:52:23.68def 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!')
0921デフォルトの名無しさん
2014/01/18(土) 23:11:52.93適切なお題だと思ってるのに挑戦しないお前のほうがこのスレに居るべきじゃない人間だな。
お前はアレが手頃な難易度もしくは十分高い難易度の適切なお題だと思ってるんだろ?
0922片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/18(土) 23:40:08.730923デフォルトの名無しさん
2014/01/18(土) 23:46:11.860924デフォルトの名無しさん
2014/01/19(日) 00:21:46.29Range
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!
0925デフォルトの名無しさん
2014/01/19(日) 00:39:47.03>>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)
)
0926デフォルトの名無しさん
2014/01/19(日) 00:51:47.04let 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!");;
0927デフォルトの名無しさん
2014/01/19(日) 01:06:34.82#!/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)
0928デフォルトの名無しさん
2014/01/19(日) 03:58:03.19#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;
}
0929デフォルトの名無しさん
2014/01/19(日) 06:32:54.47Jの場合
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
0930デフォルトの名無しさん
2014/01/19(日) 07:06:47.81i.2 3 4 の意味がわからない。
0931930
2014/01/19(日) 07:12:54.920932デフォルトの名無しさん
2014/01/19(日) 08:21:54.44とりあえずリストで http://ideone.com/T7vRQg
0933デフォルトの名無しさん
2014/01/19(日) 10:21:48.16require '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]]]
0934デフォルトの名無しさん
2014/01/19(日) 12:56:47.90ttp://ideone.com/JJHFOL
べたーC。Jは強力だなー。俺には読めないのが残念だ。
0935デフォルトの名無しさん
2014/01/19(日) 13:42:10.01DIM 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
0936デフォルトの名無しさん
2014/01/19(日) 13:58:24.74# R
array(0:23, 4:2)
0937デフォルトの名無しさん
2014/01/19(日) 14:38:01.97FUNCTION 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
0938デフォルトの名無しさん
2014/01/19(日) 17:09:38.14f(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
0939デフォルトの名無しさん
2014/01/19(日) 23:57:12.35| 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 "
0940デフォルトの名無しさん
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)
0941デフォルトの名無しさん
2014/01/20(月) 03:29:33.710942デフォルトの名無しさん
2014/01/20(月) 03:43:05.12今日は ::new[](std::nothrow) ではまってしまった‥‥やっぱり例外はちゃんと把握しないといけないのかな‥‥
0943デフォルトの名無しさん
2014/01/20(月) 06:10:39.760944デフォルトの名無しさん
2014/01/20(月) 07:28:14.40f1=: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の場合、省略して表示されています。
0945デフォルトの名無しさん
2014/01/20(月) 08:00:19.33Haskell http://ideone.com/3MVfVy
0946デフォルトの名無しさん
2014/01/20(月) 19:38:19.42def 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]]
0947デフォルトの名無しさん
2014/01/20(月) 21:02:05.681.23 -> 23.1
20.24 -> 24.2
2.24 -> 24.2
0.01 -> 1.0
0948デフォルトの名無しさん
2014/01/20(月) 21:09:13.95def 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
0949デフォルトの名無しさん
2014/01/20(月) 21:44:36.09| 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 "
0950デフォルトの名無しさん
2014/01/21(火) 00:43:29.82ttp://ideone.com/lA9iTk
ほぼC。小数点以下の誤差でうまく動かなかったので半手動で動いている。
こんな面倒なこと毎回やってられん。複雑な問題になったらバグの元だなぁ・・・。Orz
今回はラッキーだった。
0951デフォルトの名無しさん
2014/01/21(火) 00:45:18.79def 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]
0952デフォルトの名無しさん
2014/01/21(火) 04:08:25.70>>924 http://ideone.com/r8AW8f
>>929 http://ideone.com/ErsNJA
>>940 http://ideone.com/UTl6rN
0953デフォルトの名無しさん
2014/01/21(火) 12:34:45.69| 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} "
0954デフォルトの名無しさん
2014/01/21(火) 13:03:34.67http://codepad.org/nrVOrKEv
0955デフォルトの名無しさん
2014/01/21(火) 19:09:07.91n=5 -> 3
n=13 -> 10
0956デフォルトの名無しさん
2014/01/21(火) 19:44:42.33; 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)))
0957デフォルトの名無しさん
2014/01/21(火) 20:11:41.40| 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 "
0958デフォルトの名無しさん
2014/01/21(火) 20:24:36.67def 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
0959デフォルトの名無しさん
2014/01/21(火) 21:30:12.29f(n)=factor(n!)[1,2]
? f(5)
%2 = 3
? f(13)
%3 = 10
? f(1000)
%4 = 994
0960デフォルトの名無しさん
2014/01/21(火) 22:01:02.73import 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]
0961デフォルトの名無しさん
2014/01/21(火) 22:09:17.93#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
0962デフォルトの名無しさん
2014/01/21(火) 23:18:23.12すごい。whileループひとつでできちゃうのか。
0963デフォルトの名無しさん
2014/01/21(火) 23:30:34.91#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
0964デフォルトの名無しさん
2014/01/22(水) 00:59:03.22use 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);
0965デフォルトの名無しさん
2014/01/22(水) 01:52:24.57f:=method(n,n-n asBinary asNumber%9)
Io> f(5)
==> 3
Io> f(13)
==> 10
Io> f(1000)
==> 994
0966デフォルトの名無しさん
2014/01/22(水) 04:07:51.86N= 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
__popcountsi2 ...
0968デフォルトの名無しさん
2014/01/22(水) 07:38:47.57お前らが羨ましいぜ。
0969デフォルトの名無しさん
2014/01/22(水) 13:32:57.360970デフォルトの名無しさん
2014/01/22(水) 15:12:30.99最初はカーソルのみの状態で文字をカーソルの前に挿入する。
'['でカーソルを前へ、']'で後ろに移動する。
例
"abc[-[[/" -> "a/b-c"
"a[b[c]]d" -> "cbad"
0971デフォルトの名無しさん
2014/01/22(水) 15:58:11.89#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")
0972デフォルトの名無しさん
2014/01/22(水) 17:27:27.61http://ideone.com/tylueC
0973デフォルトの名無しさん
2014/01/22(水) 17:28:08.80def 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]
0974デフォルトの名無しさん
2014/01/22(水) 18:21:38.24| 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' "
0975デフォルトの名無しさん
2014/01/22(水) 18:28:54.77#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)
0976デフォルトの名無しさん
2014/01/22(水) 19:33:55.08ttp://codepad.org/eUkd6Lbu
0977デフォルトの名無しさん
2014/01/22(水) 19:51:23.60ttp://codepad.org/s8ZY0JJa
0978デフォルトの名無しさん
2014/01/22(水) 20:44:23.92ttp://ideone.com/xEfyeD
なんとかできたかな。
自分がゴミなのはわかってるけど、数学できなくてもコードは書ける証明。ってことで。
0979デフォルトの名無しさん
2014/01/22(水) 21:13:18.97def 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))
0980デフォルトの名無しさん
2014/01/22(水) 21:33:39.81Range
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
0981デフォルトの名無しさん
2014/01/22(水) 21:49:37.79forの中で、iの範囲を制限するのが抜けてました。(_ _)
i = min(max(0,i),len(xx))
0982デフォルトの名無しさん
2014/01/22(水) 21:56:23.44デバッガで開発してるのでエラーで吹き飛ぶのはあんまり考慮してません。開発中は止まったほうが有難いですし。
#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;
}
0983デフォルトの名無しさん
2014/01/22(水) 22:27:27.43def 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")
0984デフォルトの名無しさん
2014/01/22(水) 23:34:08.87f =: - +/@#:
f 5
3
f 13
10
f 1000
994
0985デフォルトの名無しさん
2014/01/23(木) 00:45:31.69これ、- は何しているんですか?
0986デフォルトの名無しさん
2014/01/23(木) 01:41:29.62自分で調べてください。
「-」自体は二項演算子の減算です。
f =: - +/@#:
は、引数をyで表す書き方をすると
f =:3 :'y - +/@#: y'
で>>963の
n - __popcountsi2(n)
に相当します。
0987デフォルトの名無しさん
2014/01/23(木) 10:37:47.550988930
2014/01/23(木) 11:47:47.40'自然数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(_選択項ならび,_合計).
0989デフォルトの名無しさん
2014/01/23(木) 20:12:46.12L=: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
0990デフォルトの名無しさん
2014/01/23(木) 22:06:04.88円周率を小数点以下15桁まで求める。
∞
π=Σ(4/(8*k+1)-1/(4*k+2)-1/(8*k+5)-1/(8*k+6))/(16^k)
k=0
0991デフォルトの名無しさん
2014/01/23(木) 23:20:12.36| 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 "
0992デフォルトの名無しさん
2014/01/24(金) 03:22:22.230993デフォルトの名無しさん
2014/01/24(金) 04:15:00.66http://ideone.com/gIeEAT
数学できない俺にもできて嬉しい。<3
0994デフォルトの名無しさん
2014/01/24(金) 10:00:10.62プログラミングのお題スレ Part3
http://toro.2ch.net/test/read.cgi/tech/1390525149/
0995デフォルトの名無しさん
2014/01/24(金) 12:16:38.83use 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();
0996デフォルトの名無しさん
2014/01/24(金) 18:01:52.94r:=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
0997デフォルトの名無しさん
2014/01/24(金) 19:54:42.06pi' :: (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
0998デフォルトの名無しさん
2014/01/25(土) 08:48:55.06r=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
0999デフォルトの名無しさん
2014/01/25(土) 09:53:41.21?- N is 13,X is N - popcount(N).
N = 13,
X = 10.
1000デフォルトの名無しさん
2014/01/25(土) 14:25:16.5910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。