プログラミングのお題スレです。
【出題と回答例】
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/
探検
プログラミングのお題スレ Part12
■ このスレッドは過去ログ倉庫に格納されています
2018/09/28(金) 10:09:07.13ID:phwOkayR
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)
)
続く
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} "
擬似乱数発生器は 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} "
擬似乱数発生器は 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
一様分布っぽい
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ソート忘れてないか?
>>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}].
で同じ分布になった
>>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でもやれば
echoかfizz buzzでもやれば
138デフォルトの名無しさん
2018/10/18(木) 09:27:49.01ID:xtVP5nmJ139デフォルトの名無しさん
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:veK9KPY5143デフォルトの名無しさん
2018/10/19(金) 17:15:05.14ID:gPrGaWTX >>141
cat
cat
144デフォルトの名無しさん
2018/10/19(金) 18:18:43.95ID:rCjk/mnI >>143 Brainfuck
,[.,]
,[.,]
145デフォルトの名無しさん
2018/10/19(金) 18:19:25.68ID:rCjk/mnI146デフォルトの名無しさん
2018/10/19(金) 20:16:34.44ID:qai0UNii お題
マルチバイト文字だけ文字化けさせて出力
マルチバイト文字だけ文字化けさせて出力
147デフォルトの名無しさん
2018/10/19(金) 20:39:51.48ID:5dseSh/K148デフォルトの名無しさん
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通りでサロゲートペアの文字は % になりその他は * になる。
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
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に移行せよ。
以下の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:Nttc2RvP153デフォルトの名無しさん
2018/10/20(土) 18:08:05.20ID:Nttc2RvP あれ、違うぞ?
hiが入力された時、「かつ」wake upだったら”hello”出力か。
んでsleepなら”zzz...”ね。
それ以外無視と。
了解。
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
ここは「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.")
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;
#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;
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文字が入る。
面倒臭かったからステータスは数字に直さず文字そのまま使った。
}
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) => {}
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])"
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 を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。
Kotlin
https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw
初期状態は sleep にした。
wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。
163デフォルトの名無しさん
2018/10/21(日) 04:53:27.38ID:sz/a4USN164デフォルトの名無しさん
2018/10/21(日) 09:26:11.61ID:3Rh2KUxU165デフォルトの名無しさん
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
入力は、数値ではなくメッセージで
状態推移は、クラスチェンジで(つまりインスタンス変数なし&条件分岐なし)
…な感じで、他言語では思いつきにくい実装で遊んでみました
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
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
167デフォルトの名無しさん
2018/10/21(日) 18:51:44.61ID:7SU77e8C168デフォルトの名無しさん
2018/10/21(日) 22:29:32.21ID:4ZLg1Jin >>141 Lua
io.write(io.read("*a"))
io.write(io.read("*a"))
169デフォルトの名無しさん
2018/10/22(月) 01:45:31.26ID:mc31Kn/b >>2
これおかしくね?
これおかしくね?
170デフォルトの名無しさん
2018/10/23(火) 19:00:32.44ID:eWhef4/P171デフォルトの名無しさん
2018/10/23(火) 21:37:05.53ID:HCMpmlk6 お題
Excel列番号の数字表記とアルファベット表記を相互変換せよ
A => 1
AA => 27
ABC => ?
26 => Z
266379 => ?
Excel列番号の数字表記とアルファベット表記を相互変換せよ
A => 1
AA => 27
ABC => ?
26 => Z
266379 => ?
172デフォルトの名無しさん
2018/10/23(火) 22:19:55.60ID:kr01ah20 >>171
Part6の754ですでに通った道だった
https://peace.5ch.net/test/read.cgi/tech/1418278634/754
そしてその時の俺の回答はこれだ
http://ideone.com/SM0HXt
Part6の754ですでに通った道だった
https://peace.5ch.net/test/read.cgi/tech/1418278634/754
そしてその時の俺の回答はこれだ
http://ideone.com/SM0HXt
173デフォルトの名無しさん
2018/10/23(火) 22:19:56.82ID:UJUp/CV/ >>171 Ruby
f=->n{n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+?Z}.delete ?@}
g=->s{s.tr('A-Z','0-9a-p').to_i(26)+(26**s.length-1)/25}
puts '%s => %s'%[$_.chop!,~/\d/?f[$_.to_i]:g[$_]]while gets
# =>
A => 1
AA => 27
ABC => 731
26 => Z
266379 => ODAI
f=->n{n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+?Z}.delete ?@}
g=->s{s.tr('A-Z','0-9a-p').to_i(26)+(26**s.length-1)/25}
puts '%s => %s'%[$_.chop!,~/\d/?f[$_.to_i]:g[$_]]while gets
# =>
A => 1
AA => 27
ABC => 731
26 => Z
266379 => ODAI
174デフォルトの名無しさん
2018/10/23(火) 22:31:11.04ID:fVBjYNqz iか何かが無かったような?
175デフォルトの名無しさん
2018/10/23(火) 23:51:06.93ID:H259Ae8g var trans = alpha => parseInt((parseInt(alpha, 36) - parseInt('9'.repeat(alpha.length), 36)).toString(36), 26)
trans('A')
//=> 1
trans('AA')
//=> 27
trans('ABC')
//=> 731
順変換だけやってみたけどすごい不安…
Aがゼロ的な物なのか1的な物なのかこんがらがる…
trans('A')
//=> 1
trans('AA')
//=> 27
trans('ABC')
//=> 731
順変換だけやってみたけどすごい不安…
Aがゼロ的な物なのか1的な物なのかこんがらがる…
176デフォルトの名無しさん
2018/10/24(水) 00:17:51.17ID:n2SwZ/Io >>175
Aは0扱いでよい。
与えられた文字列を str にとして x = str[A-Zの26進数] に対して
求める数 f(x) f N\{0} -> N\{0} は
f(x) = x + (26**g(x) - 1)/25
(g(x) := x == 0 ? 1 : [log_26(x)] + 1).
f は全単射なので逆写像f^(-1)が存在するので
f と f^(-1) が答え.
Aは0扱いでよい。
与えられた文字列を str にとして x = str[A-Zの26進数] に対して
求める数 f(x) f N\{0} -> N\{0} は
f(x) = x + (26**g(x) - 1)/25
(g(x) := x == 0 ? 1 : [log_26(x)] + 1).
f は全単射なので逆写像f^(-1)が存在するので
f と f^(-1) が答え.
177デフォルトの名無しさん
2018/10/24(水) 00:19:21.73ID:kOQJNkO6 マジカルインクリメント!マジカルインクリメントじゃないか!!
178デフォルトの名無しさん
2018/10/25(木) 11:51:35.92ID:3ObU9lli >>171 Pharo/Squeak Smalltalk
| fromExcelColm toExcelColm |
fromExcelColm := [:str | str asByteArray reversed - 64 polynomialEval: 26].
toExcelColm := [:n |
| nn digits |
nn := n.
digits := OrderedCollection new.
[(nn := nn - 1) >= 0] whileTrue: [digits addFirst: nn \\ 26. nn := nn // 26].
(digits asByteArray + 65) asString
].
fromExcelColm value: 'A'. "=> 1 "
fromExcelColm value: 'AA'. "=> 27 "
fromExcelColm value: 'ABC'. "=> 731 "
toExcelColm value: 26. "=> 'Z' "
toExcelColm value: 266379. "=> 'ODAI' "
fromExcelColm value: 'EXCEL'. "=> 2708874 "
toExcelColm value: 2788185942068. "=> 'MICROSOFT' "
| fromExcelColm toExcelColm |
fromExcelColm := [:str | str asByteArray reversed - 64 polynomialEval: 26].
toExcelColm := [:n |
| nn digits |
nn := n.
digits := OrderedCollection new.
[(nn := nn - 1) >= 0] whileTrue: [digits addFirst: nn \\ 26. nn := nn // 26].
(digits asByteArray + 65) asString
].
fromExcelColm value: 'A'. "=> 1 "
fromExcelColm value: 'AA'. "=> 27 "
fromExcelColm value: 'ABC'. "=> 731 "
toExcelColm value: 26. "=> 'Z' "
toExcelColm value: 266379. "=> 'ODAI' "
fromExcelColm value: 'EXCEL'. "=> 2708874 "
toExcelColm value: 2788185942068. "=> 'MICROSOFT' "
179デフォルトの名無しさん
2018/10/25(木) 12:50:39.12ID:hw/Q19JU180デフォルトの名無しさん
2018/10/25(木) 16:24:37.58ID:aKbYC4uC181デフォルトの名無しさん
2018/10/25(木) 16:39:59.02ID:wLNEFoo1 >>176
>Aは0扱いでよい。
>与えられた文字列を str にとして x = str[A-Zの26進数] に対して
それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな
>Aは0扱いでよい。
>与えられた文字列を str にとして x = str[A-Zの26進数] に対して
それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな
182デフォルトの名無しさん
2018/10/25(木) 16:46:00.18ID:9VVQwm/j やっぱり36進数[0-9a-z]使った横着は出来ないのか…
183デフォルトの名無しさん
2018/10/25(木) 17:18:04.60ID:BFrEhhQu perlのbasecalcだとマジカルなことができる
184デフォルトの名無しさん
2018/10/25(木) 17:29:09.19ID:/ssDOiD4 >>181
文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい
文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい
185デフォルトの名無しさん
2018/10/25(木) 17:46:06.11ID:wLNEFoo1 デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ
以下J
26 #. _64 + a. i. 'ABC'
==> 731
26 #. _64 + a. i. 'ODAI'
==> 266379
エンコードはちょっと1行では説明しにくい
以下J
26 #. _64 + a. i. 'ABC'
==> 731
26 #. _64 + a. i. 'ODAI'
==> 266379
エンコードはちょっと1行では説明しにくい
186デフォルトの名無しさん
2018/10/25(木) 17:52:55.69ID:Toapoewp 27進だろ…
187デフォルトの名無しさん
2018/10/25(木) 17:53:10.85ID:hw/Q19JU188デフォルトの名無しさん
2018/10/25(木) 18:17:57.30ID:wLNEFoo1 >>186
下からn桁目の重み付けが 26^n で(1番下を0桁とする)、
各桁の数字が1〜26なんだよ
これで0以外の数は表記できる
AAA は 1*26*26 + 1 *26 + 1
ABC は 1*26*26 + 2 *26 + 3
YAZ は 25*26*26 + 1*26 + 26
下からn桁目の重み付けが 26^n で(1番下を0桁とする)、
各桁の数字が1〜26なんだよ
これで0以外の数は表記できる
AAA は 1*26*26 + 1 *26 + 1
ABC は 1*26*26 + 2 *26 + 3
YAZ は 25*26*26 + 1*26 + 26
189デフォルトの名無しさん
2018/10/25(木) 19:37:38.82ID:gO/HWAcm190デフォルトの名無しさん
2018/10/25(木) 20:05:21.59ID:na0fZQbz 全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。
http://www.cjh.com.cn/
の画面左まんなか辺りの
三峡水? 25日 19?00分 174.64 -(入) 15200(出)
を自動で毎日夜21時に取得して
https://egg.5ch.net/test/read.cgi/river/1507607675/
に自動で書き込む方法はありますでしょうか?
長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、
http://www.cjh.com.cn/
の画面左まんなか辺りの
三峡水? 25日 19?00分 174.64 -(入) 15200(出)
を自動で毎日夜21時に取得して
https://egg.5ch.net/test/read.cgi/river/1507607675/
に自動で書き込む方法はありますでしょうか?
長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、
191デフォルトの名無しさん
2018/10/25(木) 20:16:07.42ID:na0fZQbz192デフォルトの名無しさん
2018/10/25(木) 20:33:47.72ID:TSZxWHJ/ sssqold.htmlのソース見たが読むほうは簡単そうだな
書き込む方はしらん
書き込む方はしらん
193デフォルトの名無しさん
2018/10/25(木) 20:33:50.34ID:BSekExc/ スレタイ
194デフォルトの名無しさん
2018/10/25(木) 23:54:56.07ID:Hzy8+5Se あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ
195デフォルトの名無しさん
2018/10/25(木) 23:59:06.56ID:9OC64j5F >>190
2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、
powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね
スクリプトはこんな感じかね
$html= Invoke-WebRequest -UseBasicParsing http://nweb.cjh.com.cn/sssqold.html
$pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`""
if ($html.RawContent -match $pattern) {
$time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3])
"三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4]
}
2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、
powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね
スクリプトはこんな感じかね
$html= Invoke-WebRequest -UseBasicParsing http://nweb.cjh.com.cn/sssqold.html
$pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`""
if ($html.RawContent -match $pattern) {
$time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3])
"三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4]
}
196デフォルトの名無しさん
2018/10/26(金) 01:56:21.09ID:zqmCYDLg 無駄に一行だな
197デフォルトの名無しさん
2018/10/26(金) 03:39:31.47ID:c84xrxY5 >>171
(fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))
(fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))
198デフォルトの名無しさん
2018/10/26(金) 19:50:36.71ID:/kG4owY9 お題
ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。
0013
0123
122.
013.
0123
=> 4
9.9.9.9.9.9
.9.9.9.9.9.
=> 1
0123
3012
2301
1230
=> 0
ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。
0013
0123
122.
013.
0123
=> 4
9.9.9.9.9.9
.9.9.9.9.9.
=> 1
0123
3012
2301
1230
=> 0
199デフォルトの名無しさん
2018/10/26(金) 20:45:47.09ID:yqPKU+uE >>195
おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!
おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!
200デフォルトの名無しさん
2018/10/26(金) 20:51:49.05ID:8JGFizba >>198
2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?
2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?
201デフォルトの名無しさん
2018/10/29(月) 19:22:44.11ID:PHNS982/ >>171
Kotlin
https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ
入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。
Kotlin
https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ
入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。
202デフォルトの名無しさん
2018/10/30(火) 17:20:53.74ID:xBpFVgTt203デフォルトの名無しさん
2018/10/30(火) 21:09:38.22ID:RM3bKAov お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。
1行目: 現在のページ番号
2行目: 総ページ数
3行目: 表示するリンク数
例1
入力:
1
10
5
出力:
[1] 2 3 4 5
例2
入力:
5
10
5
出力:
3 4 [5] 6 7
例3
入力:
10
10
5
出力:
6 7 8 9 [10]
1行目: 現在のページ番号
2行目: 総ページ数
3行目: 表示するリンク数
例1
入力:
1
10
5
出力:
[1] 2 3 4 5
例2
入力:
5
10
5
出力:
3 4 [5] 6 7
例3
入力:
10
10
5
出力:
6 7 8 9 [10]
204デフォルトの名無しさん
2018/10/30(火) 22:21:08.83ID:Mk80lxDb >>203 perl
$now = shift or die $! ;
$all = shift or die $! ;
$show = shift or die $! ;
$x = 1 + int $show/2;
$y = $all - $x + 1;
if($now <= $x){
$start = 1;
}elsif($y <= $now){
$start = $all - $show + 1;
}else{
$start = $now - int $show/2;
}
$end = $start + $show - 1;
print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end);
$now = shift or die $! ;
$all = shift or die $! ;
$show = shift or die $! ;
$x = 1 + int $show/2;
$y = $all - $x + 1;
if($now <= $x){
$start = 1;
}elsif($y <= $now){
$start = $all - $show + 1;
}else{
$start = $now - int $show/2;
}
$end = $start + $show - 1;
print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end);
205デフォルトの名無しさん
2018/10/30(火) 22:51:09.23ID:N8SwgYLQ >>203
Python3
current = int(input())
total = int(input())
n_links = int(input())
assert 1 <= current <= total and n_links <= total
if current <= n_links//2:
seq = range(1, n_links+1)
elif current >= total-n_links//2:
seq = range(total-n_links+1, total+1)
else:
left = current - n_links//2
right = current + n_links//2 + (0 if n_links%2 == 0 else 1)
seq = range(left, right)
seq = ["[{}]".format(s) if s == current else str(s) for s in seq]
print(" ".join(seq))
Python3
current = int(input())
total = int(input())
n_links = int(input())
assert 1 <= current <= total and n_links <= total
if current <= n_links//2:
seq = range(1, n_links+1)
elif current >= total-n_links//2:
seq = range(total-n_links+1, total+1)
else:
left = current - n_links//2
right = current + n_links//2 + (0 if n_links%2 == 0 else 1)
seq = range(left, right)
seq = ["[{}]".format(s) if s == current else str(s) for s in seq]
print(" ".join(seq))
206デフォルトの名無しさん
2018/10/30(火) 22:54:52.47ID:N8SwgYLQ うまく貼れなかった
https://ideone.com/2ch1r3
https://ideone.com/2ch1r3
207デフォルトの名無しさん
2018/11/02(金) 11:25:03.96ID:b7bQuZgR >>203 Squeak Smalltalk
| fn |
fn := [:pg :tot :wd |
| start pages |
start := pg - (wd // 2) min: tot - wd + 1 max: 1.
pages := start to: start + wd - 1.
(pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' '
].
#((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri]
"=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') "
| fn |
fn := [:pg :tot :wd |
| start pages |
start := pg - (wd // 2) min: tot - wd + 1 max: 1.
pages := start to: start + wd - 1.
(pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' '
].
#((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri]
"=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') "
208デフォルトの名無しさん
2018/11/02(金) 23:41:59.56ID:8MYT0pgk 三峡水? 02日 23?00分 174.53 -(入)14700(出)
209デフォルトの名無しさん
2018/11/03(土) 04:09:45.11ID:vg8hCxXN210デフォルトの名無しさん
2018/11/03(土) 08:08:00.00ID:BMDI0yEn211デフォルトの名無しさん
2018/11/03(土) 23:34:36.36ID:BMDI0yEn212デフォルトの名無しさん
2018/11/04(日) 13:46:33.88ID:pidkuN2F >>203
Haskell
main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)]
put (x,y,z) = return (pager x y z) >>= print
pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b]
pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b]
pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b]
mklist a xs = [small a xs , jst a xs , big a xs]
small a = filter (< a)
big a = filter (> a)
jst a = filter (== a)
結果
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]
Haskell
main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)]
put (x,y,z) = return (pager x y z) >>= print
pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b]
pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b]
pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b]
mklist a xs = [small a xs , jst a xs , big a xs]
small a = filter (< a)
big a = filter (> a)
jst a = filter (== a)
結果
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]
213デフォルトの名無しさん
2018/11/04(日) 13:47:27.44ID:pidkuN2F 結果が切れた。。。
改めて結果。
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]
改めて結果。
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]
214デフォルトの名無しさん
2018/11/05(月) 17:57:48.99ID:GRwYYoWB お題
3つの自然数A,B,Cが与えられる。
初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。
含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。
3つの自然数A,B,Cが与えられる。
初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。
含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。
215デフォルトの名無しさん
2018/11/05(月) 20:17:41.49ID:0wNeh4D8 >>214 python
def fibo(a, b):
_yield a
_yield b
_while True:
__yield a + b
__a, b = b, a+b
def func(fb, n):
_count = 1;
_while True:
__num = fb.next()
__print "{} th term = {}".format(count, num)
__if num >= n:
___if num == n:
____return count
___else:
____return False
__count = count + 1
_return False
a, b, c = 1, 1, 100
print func(fibo(a, b), c)
def fibo(a, b):
_yield a
_yield b
_while True:
__yield a + b
__a, b = b, a+b
def func(fb, n):
_count = 1;
_while True:
__num = fb.next()
__print "{} th term = {}".format(count, num)
__if num >= n:
___if num == n:
____return count
___else:
____return False
__count = count + 1
_return False
a, b, c = 1, 1, 100
print func(fibo(a, b), c)
216デフォルトの名無しさん
2018/11/05(月) 20:25:58.31ID:0wNeh4D8 同じもの
ttps://ideone.com/Dff2U9
ttps://ideone.com/Dff2U9
217デフォルトの名無しさん
2018/11/05(月) 21:15:45.04ID:b01o/g5T218デフォルトの名無しさん
2018/11/05(月) 23:33:04.48ID:6d8cBeMO >>214 Ruby
require 'matrix'
def hoge(a, b, c)
rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]]
(0..Float::INFINITY).each do |n|
m = fm * im
return m[1, 0] > c ? false : n if m[1, 0] >= c
fm *= rm
end
end
p hoge(0,1,88) #=> false
p hoge(0,1,89) #=> 11
p hoge(0,1,90) #=> false
require 'matrix'
def hoge(a, b, c)
rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]]
(0..Float::INFINITY).each do |n|
m = fm * im
return m[1, 0] > c ? false : n if m[1, 0] >= c
fm *= rm
end
end
p hoge(0,1,88) #=> false
p hoge(0,1,89) #=> 11
p hoge(0,1,90) #=> false
219デフォルトの名無しさん
2018/11/06(火) 03:12:12.75ID:BD76rR44220デフォルトの名無しさん
2018/11/06(火) 07:54:03.24ID:GFB90oOd C
初項の次第二項って書いてるのに、みんな何故0始まりなの。。。
#include <stdio.h>
int fibin(int,int,int);
int main(void)
{
for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i));
return 0;
}
int fibin(int fst,int snd,int num)
{
int i = 2,fib = fst;
if(fst == num) return 1;
if(snd == num) return 2;
while(fib != num)
{
fib = fst;
fib += snd;
if(fib <= num) i++;
else return -1;
fst = snd;
snd = fib;
}
return i;
}
初項の次第二項って書いてるのに、みんな何故0始まりなの。。。
#include <stdio.h>
int fibin(int,int,int);
int main(void)
{
for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i));
return 0;
}
int fibin(int fst,int snd,int num)
{
int i = 2,fib = fst;
if(fst == num) return 1;
if(snd == num) return 2;
while(fib != num)
{
fib = fst;
fib += snd;
if(fib <= num) i++;
else return -1;
fst = snd;
snd = fib;
}
return i;
}
221デフォルトの名無しさん
2018/11/06(火) 09:23:46.31ID:jl2IXbjS (A,B,C)が(0,0,0),(0,1,0),(0,1,1),(1,0,0),(1,0,1)の時はCが無限回、(1,1,1),(0,X,X),(X,0,X),(X,X,X)(2≦X)の時はCが2回出現することがあるが考慮した方が良いか?
222デフォルトの名無しさん
2018/11/06(火) 10:48:03.28ID:VF9SVEaj A,Bによっては無限ループになり得ないか?
223219
2018/11/06(火) 11:49:20.62ID:13CfGTjW そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。
224219
2018/11/06(火) 11:52:26.86ID:13CfGTjW した。見事にした。
足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。
今さら直す気は起きんが。
足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。
今さら直す気は起きんが。
225デフォルトの名無しさん
2018/11/06(火) 11:52:29.61ID:GFB90oOd■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
- 4:44:44.444
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- そもそも日本て中国に日沈む国だとか無礼な事言ってたよね
- アニメでよく日本人キャラなのに目の色だけ変えたりしてるのあるじゃん?
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- 高市早苗って「わざと」日本畳んでるよな? [419865925]
