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

1デフォルトの名無しさん2018/09/28(金) 10:09:07.13ID:phwOkayR
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

前スレ
プログラミングのお題スレ Part10
https://mevius.5ch.net/test/read.cgi/tech/1514772904/

プログラミングのお題スレ Part11
https://mevius.5ch.net/test/read.cgi/tech/1524570314/

116デフォルトの名無しさん2018/10/13(土) 17:46:23.51ID:QtssFnIu

117デフォルトの名無しさん2018/10/15(月) 17:32:39.82ID:lmCCx0VP
回答一人で出題者からの返事がないとあってるかどうかわからないから困る

118デフォルトの名無しさん2018/10/17(水) 11:31:35.00ID:UkGf74ne
お題
[0,1]の一様乱数をN個発生させ、小さい順に並べてa(1), ..., a(N)とする
同様にもうN個作って小さい順にb(1), ..., b(N)とする

同じ順位同士で(a(1), b(1)), ..., (a(N), b(N)) とペアを作った時、a>bとなるペアの個数は0〜N個になるが、その分布は?
またa, bを一様分布以外の分布から取ってくるとどうなる?

119デフォルトの名無しさん2018/10/17(水) 12:32:44.20ID:DKH+Jm9W
>>118
それはプログラミングで解くお題なのか?

120デフォルトの名無しさん2018/10/17(水) 13:07:54.93ID:OYXuI76a
>>119
シミュレーションしてみるのも面白いかなと

121デフォルトの名無しさん2018/10/17(水) 13:50:50.88ID:8efdFbKL
趣味で

122デフォルトの名無しさん2018/10/17(水) 14:07:56.22ID:4awkQadJ
これはひどい

123デフォルトの名無しさん2018/10/17(水) 15:35:45.15ID:5mPHIqhK
プログラミングで解くということに挑戦することから逃げるプログラマー

124デフォルトの名無しさん2018/10/17(水) 15:55:41.32ID:mC+TJhph
数学に逃げちゃ駄目だ。

125デフォルトの名無しさん2018/10/17(水) 17:12:22.62ID:DXXGfTNm
乱数全部同じパターンを引いてもその結果のみから分布を論じてかまわないというならそれでもいいがな

126デフォルトの名無しさん2018/10/17(水) 17:34:51.31ID:slnS35LM
ちょっとやってみた
J で

NB. monadic sort operator
sort=: /:~

NB. monadic operator returns count of a_n > b_n
NB. where a and b is sorted y-length array of rand(1000)
do1=: verb define
a =. sort ?y$1000
b =. sort ?y$1000
+/ (a>b)
)

NB. dyad operator returns count of number x in array y
count=: dyad define
+/ (x = y)
)

続く

127デフォルトの名無しさん2018/10/17(水) 17:35:05.08ID:IG2KKzqQ
>>118 Squeak/Pharo Smalltalkでシミュレーションのみ
擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller)

| N M random bag |
N := 10.
M := 1e6.
random := Random new.
bag := Bag new.
M timesRepeat: [
| pairs count |
pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}].
count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair].
bag add: count
].
bag sortedElements

"Squeak =>{
0->981.
1->9873.
2->44008.
3->117136.
4->205258.
5->246203.
6->204286.
7->117345.
8->44247.
9->9702.
10->961} "

128デフォルトの名無しさん2018/10/17(水) 17:38:20.84ID:cKcilnbV
>>118 Squeak/Pharo Smalltalkでシミュレーションのみ
擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller)

| N M random bag |
N := 10.
M := 1e6.
random := Random new.
bag := Bag new.
M timesRepeat: [
| pairs count |
pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}].
count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair].
bag add: count
].
bag sortedElements

"Squeak =>{
0->981.
1->9873.
2->44008.
3->117136.
4->205258.
5->246203.
6->204286.
7->117345.
8->44247.
9->9702.
10->961} "

129デフォルトの名無しさん2018/10/17(水) 17:40:58.97ID:wdgUzBYj
あ、誤連投&Jのにきスマン

130デフォルトの名無しさん2018/10/17(水) 17:41:12.83ID:slnS35LM
続き
NB. 長さ100の配列で100000回試行
r =: (do1 "0) 100000$100

NB. r を表示
r
=> 43 77 58 31 23 36 59 26 85 15 73 72 4 34 0 26 22 26 85 70 95 2 64 46 22 84 22 86 78 39 51 34 92 94 68 98 47 38 68 92 48 43 19 97 80 18 13 65 76 79 17 88 19 39 72 74 16 54 32 11 99 3 80 32 94 25 87 91 ...

NB. 0...100 の各数値の出現数
(i. 101) (count "0 1) r
=> 109 107 118 94 104 93 98 100 76 87 97 102 93 98 101 94 94 90 112 107 92 103 109 97 112 89 113 118 97 108 96 81 86 103 87 102 107 101 95 90 96 102 96 87 100 88 108 115 97 119 129 104 94 100 104 101 114...

NB. グラフ化
plot (i. 101) (count "0 1) r
https://i.imgur.com/QSKqVC6.jpg

一様分布っぽい

131デフォルトの名無しさん2018/10/17(水) 17:43:54.06ID:slnS35LM
だいぶ結果が違っててわろすw
>>127ソート忘れてないか?

132デフォルトの名無しさん2018/10/17(水) 17:47:40.41ID:slnS35LM
理屈で考えると乱数がどんな分布でも a、b の分布が同じならコレの結果は常に同じ分布か

133デフォルトの名無しさん2018/10/17(水) 19:01:16.05ID:wdgUzBYj
なんか書き込めん…

>>131

たしかに^^;

pairs := (random next: N) sort with: (random next: N) sort collect: [:a :b | {a. b}].

で同じ分布になった

134デフォルトの名無しさん2018/10/17(水) 22:28:10.42ID:9jVKFKz5
ハローワールドの次にやる問題ってなんだろう

135デフォルトの名無しさん2018/10/17(水) 22:28:34.01ID:Ny9Q/0jK
ハローワークへ行きなさい

136デフォルトの名無しさん2018/10/17(水) 22:47:23.45ID:ysrRFDeq
>>134
echoかfizz buzzでもやれば

137 ◆QZaw55cn4c 2018/10/17(水) 23:45:01.56ID:DyWl92+N
>>136
>echo

138デフォルトの名無しさん2018/10/18(木) 09:27:49.01ID:xtVP5nmJ
>>137
echoコマンドの実装ってことじゃない?
\0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。

139デフォルトの名無しさん2018/10/18(木) 19:47:17.70ID:3zhbamE0
136本人が出てきて答えなさい

140デフォルトの名無しさん2018/10/18(木) 22:31:25.80ID:qi6SRLg2
ハローワールドの次ぐらいだとすごろくとかじゃない

141デフォルトの名無しさん2018/10/19(金) 16:49:17.22ID:F1UCQFsO
お題
標準入力から入力したデータをそのまま標準出力人出力する

142デフォルトの名無しさん2018/10/19(金) 17:05:33.84ID:veK9KPY5
http://3dnchu.com/archives/tree-it/
このようなソフトはvisual studioで作るんですか?
なんの言語がいいか教えてください

143デフォルトの名無しさん2018/10/19(金) 17:15:05.14ID:gPrGaWTX
>>141
cat

144デフォルトの名無しさん2018/10/19(金) 18:18:43.95ID:rCjk/mnI
>>143 Brainfuck
,[.,]

145デフォルトの名無しさん2018/10/19(金) 18:19:25.68ID:rCjk/mnI
安価ミス >>143 -> >>141

146デフォルトの名無しさん2018/10/19(金) 20:16:34.44ID:qai0UNii
お題
マルチバイト文字だけ文字化けさせて出力

147デフォルトの名無しさん2018/10/19(金) 20:39:51.48ID:5dseSh/K

148デフォルトの名無しさん2018/10/20(土) 03:08:59.15ID:gD7ZVb6v
iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん

149デフォルトの名無しさん2018/10/20(土) 05:27:36.15ID:qwv4GmvH
>>146
Kotlin
https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw

入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。
つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。
化け方は2通りでサロゲートペアの文字は % になりその他は * になる。

150デフォルトの名無しさん2018/10/20(土) 17:10:58.56ID:hxCjYBWY
>>141 Io
File standardInput contents print

151デフォルトの名無しさん2018/10/20(土) 17:46:57.83ID:cv2X893a
お題: 超簡単なステートマシン
以下の3つのデータがランダムに入力される。
1: hi
2: wake up
3: sleep
1が入力された場合、状態がwake upであれば「hello」、状態がsleepであれば「zzz...」と出力せよ。
2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。

152デフォルトの名無しさん2018/10/20(土) 18:05:02.67ID:Nttc2RvP
>>151
つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね)

データは勝手に標準入力にするけど。
(リダイレクトでファイルからに出来るし)

153デフォルトの名無しさん2018/10/20(土) 18:08:05.20ID:Nttc2RvP
あれ、違うぞ?
hiが入力された時、「かつ」wake upだったら”hello”出力か。
んでsleepなら”zzz...”ね。
それ以外無視と。
了解。

154デフォルトの名無しさん2018/10/20(土) 18:12:34.08ID:Nttc2RvP
てか、1ー3の数字だけで良いわ。
状態の意味はわかったけど、状態の文字は要らんね。

155デフォルトの名無しさん2018/10/20(土) 18:16:14.29ID:xvv7H8Vz
それ以外をどう考慮すべきかは書かれてないから、
ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉

そんなことよりステートマシンなら初期状態は与えろよw

156デフォルトの名無しさん2018/10/20(土) 18:28:45.80ID:AUqXYm6F
>>151
python3


state = "sleep"

while True:
x = input("> ")
if x == "hi":
print("zzz..." if state == "sleep" else "hello")
elif x == "wake up":
state = "wake up"
elif x == "sleep":
state = "sleep"
else:
print("invalid input.")

157デフォルトの名無しさん2018/10/20(土) 18:42:18.95ID:Nttc2RvP
#include <stdio.h>
#include <conio.h>

int main(void)
{
char c,state = 0;

while(1)
{
c = getchar();
switch(c)
{
case '1':
if(state == '2')
{
printf("hello");
}
else if(state == '3')
{
printf("zzz...");
}
break;

158デフォルトの名無しさん2018/10/20(土) 18:43:23.41ID:Nttc2RvP
case '2':
state = '2';
break;
case '3':
state = '3';
break;
default:
break;

159デフォルトの名無しさん2018/10/20(土) 18:43:31.11ID:Nttc2RvP
}
}
return 0;
}

バッファ 無い方がいいのかと思ってバッファ無し版。(押したら即時入力)
conio.hは環境依存だけど、どうせWinだろ。
stdio.hのgetcだったら、バッファがあるからEnter押さないとだけど最初の1文字が入る。

面倒臭かったからステータスは数字に直さず文字そのまま使った。

160デフォルトの名無しさん2018/10/20(土) 20:20:44.01ID:WvTfEY4N
お題
2つの区間の共通部分を出力せよ

[1,3] [2,4] => [2,3]
(1,2) [1,2] => (1,2)
[0,100) (5,+inf) => (5,100)
(-inf,2] [1,+inf) => [1,2]
[1,2) [2,3) => {}

161デフォルトの名無しさん2018/10/20(土) 21:46:37.40ID:O4sbTglp
>>151
ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])"

162デフォルトの名無しさん2018/10/21(日) 04:42:48.87ID:sz/a4USN
>>151
Kotlin
https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw

初期状態は sleep にした。
wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。

163デフォルトの名無しさん2018/10/21(日) 04:53:27.38ID:sz/a4USN
>>151
Perl の1行プログラム

perl -ne 'BEGIN{$s=0;%x=("sleep"=>0,"wake up"=>1);%r=(0=>"zzz...",1=>"hello")}print ">> $_";chomp;\
if(defined($x{$_})){$s=$x{$_}}elsif($_ eq "hi"){print"$r{$s}\n"}else{print "ERROR\n"}'

仕様は>>162と同じ。
1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。

164デフォルトの名無しさん2018/10/21(日) 09:26:11.61ID:3Rh2KUxU

165デフォルトの名無しさん2018/10/21(日) 09:40:05.59ID:UVDgsDD7
>>151 GNU Smalltalk
入力は、数値ではなくメッセージで
状態推移は、クラスチェンジで(つまりインスタンス変数なし&条件分岐なし)
…な感じで、他言語では思いつきにくい実装で遊んでみました

Object subclass: Machine [
wakeUp [ ^self ]
sleep [ ^self ]
hi [ self subclassResponsibility ]
state [ ^self class displayNl ]
Other := nil.
]
Machine class extend [ new [ ^WakeUp basicNew ] ]
Machine subclass: WakeUp [ hi [ 'hello' displayNl ] ]
Machine subclass: Sleep [ hi [ 'zzz...' displayNl ] ]
Machine extend [ Other := Sleep basicNew ]
WakeUp extend [ sleep [ ^self become: Other ] ]
Sleep extend [ wakeUp [ ^self become: Other ] ]

| machine |
machine := Machine new.
machine state. "=> WakeUp "
machine hi. "=> hello "
machine sleep; state. "=> Sleep "
machine hi. "=> zzz... "
machine wakeUp; state. "=> WakeUp "
machine wakeUp; state. "=> WakeUp "
machine sleep; state. "=> Sleep "
machine sleep; state. "=> Sleep "

https://ideone.com/vyCRfq

166デフォルトの名無しさん2018/10/21(日) 11:09:36.22ID:S2kctYlU
>>151
PowerShell、初期状態は 'Sleep'

function StateMachine {
 param([parameter(ValueFromPipeline=$true)][string]$Event)
 begin { $InSleep = $true }
 process {
  switch($Event){
  'hi'{ Write-Host "$(if($InSleep){'zzz...'}else{'hellow'})"}
  'wake up'{$InSleep=$false}
  'sleep'{$InSleep=$true}
  }
 }
}
'hi','sleep','hi','wake up','hi' | StateMachine

新着レスの表示
レスを投稿する