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

■ このスレッドは過去ログ倉庫に格納されています
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/
135デフォルトの名無しさん
垢版 |
2018/10/17(水) 22:28:34.01ID:Ny9Q/0jK
ハローワークへ行きなさい
2018/10/17(水) 22:47:23.45ID:ysrRFDeq
>>134
echoかfizz buzzでもやれば
2018/10/17(水) 23:45:01.56ID:DyWl92+N
>>136
>echo
138デフォルトの名無しさん
垢版 |
2018/10/18(木) 09:27:49.01ID:xtVP5nmJ
>>137
echoコマンドの実装ってことじゃない?
\0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。
2018/10/18(木) 19:47:17.70ID:3zhbamE0
136本人が出てきて答えなさい
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
2018/10/19(金) 18:18:43.95ID:rCjk/mnI
>>143 Brainfuck
,[.,]
2018/10/19(金) 18:19:25.68ID:rCjk/mnI
安価ミス >>143 -> >>141
2018/10/19(金) 20:16:34.44ID:qai0UNii
お題
マルチバイト文字だけ文字化けさせて出力
147デフォルトの名無しさん
垢版 |
2018/10/19(金) 20:39:51.48ID:5dseSh/K
>>146 Python
https://ideone.com/sT2p2O
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
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の数字だけで良いわ。
状態の意味はわかったけど、状態の文字は要らんね。
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文字が入る。

面倒臭かったからステータスは数字に直さず文字そのまま使った。
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) => {}
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行に分けて書いてある。
2018/10/21(日) 09:26:11.61ID:3Rh2KUxU
>>151 java
https://ideone.com/fpKVdM
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
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
167デフォルトの名無しさん
垢版 |
2018/10/21(日) 18:51:44.61ID:7SU77e8C
>>160
Python3
https://ideone.com/BBteSk
infは対応してないので1億とか適当な大きい値で代用
168デフォルトの名無しさん
垢版 |
2018/10/21(日) 22:29:32.21ID:4ZLg1Jin
>>141 Lua
io.write(io.read("*a"))
169デフォルトの名無しさん
垢版 |
2018/10/22(月) 01:45:31.26ID:mc31Kn/b
>>2
これおかしくね?
2018/10/23(火) 19:00:32.44ID:eWhef4/P
>>116-117
返答遅れてすみません
数値はあってるようです
私の稚拙なコードでよければ参考までに

Haskell
https://www.ideone.com/9Z0xOX
2018/10/23(火) 21:37:05.53ID:HCMpmlk6
お題
Excel列番号の数字表記とアルファベット表記を相互変換せよ

A => 1
AA => 27
ABC => ?
26 => Z
266379 => ?
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
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
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的な物なのかこんがらがる…
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) が答え.
2018/10/24(水) 00:19:21.73ID:kOQJNkO6
マジカルインクリメント!マジカルインクリメントじゃないか!!
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' "
179デフォルトの名無しさん
垢版 |
2018/10/25(木) 12:50:39.12ID:hw/Q19JU
>>175
それ Z の時に失敗しない?

他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。
2018/10/25(木) 16:24:37.58ID:aKbYC4uC
>>171 python3
https://ideone.com/zOajDg
ここにソースを書いたらブロックされたからideoneで
2018/10/25(木) 16:39:59.02ID:wLNEFoo1
>>176
>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]使った横着は出来ないのか…
2018/10/25(木) 17:18:04.60ID:BFrEhhQu
perlのbasecalcだとマジカルなことができる
2018/10/25(木) 17:29:09.19ID:/ssDOiD4
>>181
文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい
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行では説明しにくい
2018/10/25(木) 17:52:55.69ID:Toapoewp
27進だろ…
187デフォルトの名無しさん
垢版 |
2018/10/25(木) 17:53:10.85ID:hw/Q19JU
>>182
もう一捻り必要なんだよ。
考えてくと何れわかる。
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
189デフォルトの名無しさん
垢版 |
2018/10/25(木) 19:37:38.82ID:gO/HWAcm
>>171
この問題を思い出した
http://riverplus.net/codeiq/DigitalTaboo.pdf
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/

に自動で書き込む方法はありますでしょうか?
長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、
2018/10/25(木) 20:16:07.42ID:na0fZQbz
>>190

http://www.cjh.com.cn/



http://nweb.cjh.com.cn/sssqold.html

からでもOKです。
2018/10/25(木) 20:33:47.72ID:TSZxWHJ/
sssqold.htmlのソース見たが読むほうは簡単そうだな
書き込む方はしらん
2018/10/25(木) 20:33:50.34ID:BSekExc/
スレタイ
2018/10/25(木) 23:54:56.07ID:Hzy8+5Se
あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ
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]
}
2018/10/26(金) 01:56:21.09ID:zqmCYDLg
無駄に一行だな
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"))))
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
2018/10/26(金) 20:45:47.09ID:yqPKU+uE
>>195
おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!
200デフォルトの名無しさん
垢版 |
2018/10/26(金) 20:51:49.05ID:8JGFizba
>>198
2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?
201デフォルトの名無しさん
垢版 |
2018/10/29(月) 19:22:44.11ID:PHNS982/
>>171
Kotlin
https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ

入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。
2018/10/30(火) 17:20:53.74ID:xBpFVgTt
>>198 python3
https://ideone.com/DIFmAW
最適もへったくれもないゴリ押しですわ…
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]
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);
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))
206デフォルトの名無しさん
垢版 |
2018/10/30(火) 22:54:52.47ID:N8SwgYLQ
うまく貼れなかった
https://ideone.com/2ch1r3
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]') "
2018/11/02(金) 23:41:59.56ID:8MYT0pgk
三峡水? 02日 23?00分 174.53 -(入)14700(出)
209デフォルトの名無しさん
垢版 |
2018/11/03(土) 04:09:45.11ID:vg8hCxXN
>>203
Kotlin
https://paiza.io/projects/Zb6Ey6FbQYsGjsi5GBK9lQ

折角日本語使えるんだからたまには使わないとな。
2018/11/03(土) 08:08:00.00ID:BMDI0yEn
>>171 rust
https://ideone.com/xaLIC6

>>203 rust
https://ideone.com/UxomHc
2018/11/03(土) 23:34:36.36ID:BMDI0yEn
>>171 c
https://ideone.com/W9eW0R

>>203 c
https://ideone.com/pL0QmX
212デフォルトの名無しさん
垢版 |
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"]
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"]
2018/11/05(月) 17:57:48.99ID:GRwYYoWB
お題
3つの自然数A,B,Cが与えられる。
初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。
含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。
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)
2018/11/05(月) 20:25:58.31ID:0wNeh4D8
同じもの
ttps://ideone.com/Dff2U9
2018/11/05(月) 21:15:45.04ID:b01o/g5T
>>214 rust
https://ideone.com/8R5UmH
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
219デフォルトの名無しさん
垢版 |
2018/11/06(火) 03:12:12.75ID:BD76rR44
>>214
Kotlin
https://paiza.io/projects/aLPj37Gr548Ba0214az42Q
220デフォルトの名無しさん
垢版 |
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;
}
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
>>221
今まで投稿されてるコード見る限りは最初に見つけた時点で停止。

>>222
自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。
2018/11/06(火) 12:34:42.11ID:jAy4xbYh
>>214 Squeak/Pharo Smalltalk

| fibGen fn |

fibGen := [:fst :snd |
Generator on: [:g |
| a b |
a := fst. b := snd.
g yield: a. [b := a+b. g yield: (a := b-a)] repeat
]
].

fn := [:A :B :C |
| count fib last |
count := 1. fib := fibGen value: A value: B.
[(last := fib next) < C] whileTrue: [count := count + 1].
last = C ifTrue: [count] ifFalse: [false]
].

fn value: 1 value: 1 value: 89. "=> 11 "
fn value: 1 value: 1 value: 90. "=> false "
227デフォルトの名無しさん
垢版 |
2018/11/06(火) 14:46:16.34ID:GFB90oOd
Haskell

main = mapM_
(\x -> putStr (show x ++ ":") >> print (fibin 0 1 x))
[0..6]

fibin 0 0 c | c /= 0 = Nothing
fibin a b c = lookup c $
zip (take (10 + c) fib) [1..]
where fib = a:b:(zipWith (+) fib (tail fib))
2018/11/06(火) 18:51:28.38ID:2YnZy0Ze
>>214 ruby
https://ideone.com/Q6aVfo

AとB足してゼロ問題に対しては
fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}}
2018/11/06(火) 22:17:30.30ID:Nv8RqtnA
お題
xy平面上の点がn+1個与えられる(各点のx座標は互いに異なる)
与えられた点をすべて通る関数 y=a[i]x^n+...+a[1]x+a[0] の係数a[i]を求めよ

[入力]
点の個数(n+1)
x[0] y[0]
...
x[n] y[n]

[出力]
a[n] ... a[0]

2
0 1
1 3
=> 2 1 (y=2x+1)


1
100 100
=> 100

5
0 1
-1 5
2 2
4 -1
1 0
=> -2/15 4/15 49/30 -83/30 1
2018/11/06(火) 23:24:52.38ID:bpzsP6yI
【ラグランジュ補間】
Σ[i=1,n] )y[i]Π[k≠i](x-x[k])/ (x[i]-x[k])
この係数を計算するだけ。

こういう純数学的な処理は、お題としてはどうかな?
応用上、常に展開した係数を求めるのに意味がある
とも限らんし、精度評価が重要だったりとか
231デフォルトの名無しさん
垢版 |
2018/11/06(火) 23:43:20.04ID:iVEsbroy
>>229
線形代数は偉大

import numpy as np
N = int(input())
x, y = [], []
for i in range(N):
_x, _y = map(float, input().split())
x.append(_x)
y.append(_y)

x = np.array(x)
y = np.array(y)
px = np.array([x**k for k in range(N)])

a = np.dot(y, np.linalg.inv(px))
print(a[::-1])
2018/11/06(火) 23:51:57.59ID:bpzsP6yI
[1 x[0] x[0]^2...x[0]^n] [a[n]] =[y[0]]
[1 x[1] x[1]^2... x[1]^n] [a[n-1]]=[y[1]
[1 x[2] x[2]^2...x[2]^n] [a[n-2]]=[y[2]]
...
[1 x[n] x[n]^2 .... x[n]^n] [a[0] ]=[y[n]]

を解かせたというわけか...
2018/11/07(水) 00:03:06.07ID:q3WQuIHF
また数学板から荒らしにきたのか
234デフォルトの名無しさん
垢版 |
2018/11/07(水) 00:56:30.16ID:yYgCxC/p
お題: 四則演算の文字列を受け取って計算結果を返す
1+2+3+4
=> 10

4+5*6-2*3
=> 28

5+12*(2+9/3)/((2+3)*5-7*3)
=> 20
2018/11/07(水) 00:58:06.61ID:B66LtM9k
>>229 Ruby
s = ->a, b{a.zip(b).map{|i, j| i - j}}
t = ->a, k{a.map{|i| i * k}}
n = gets.to_i - 1
m = $<.read.split($/).map{|e| f[n, *e.split.map(&:to_r)]}
(1..n+1).each do |r|
(nonzero = m[r- 1..-1].find_index{|e| e[r].nonzero?} + r - 1) && next
m[r - 1], m[nonzero] = m[nonzero], m[r - 1]
m[r - 1] = t[m[r - 1], 1/m[r - 1][r]]
[*[*(0..n)] - [r - 1]].each{|i| m[i] = s[m[i], t[m[r - 1], m[i][r]/m[r - 1][r]]]}
end
puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '

2
0 1
1 3
#=> 2 1 (y=2x+1)

3
1 1 1 1
5 4 2 1
8 9 3 1
#=> -1/2 11/2 -4
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況