プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part17
https://mevius.5ch.net/test/read.cgi/tech/1584031367/
プログラミングのお題スレ Part18
■ このスレッドは過去ログ倉庫に格納されています
2020/07/14(火) 13:53:46.47ID:jW5p6F/e
177デフォルトの名無しさん
2020/08/04(火) 20:43:45.04ID:ZgraBKAX 筆算じゃないの
101 b
110 a (+
---------
0
1010
10100
---------
11110
101 b
110 a (+
---------
0
1010
10100
---------
11110
178蟻人間 ◆T6xkBnTXz7B0
2020/08/04(火) 20:47:15.02ID:pnjegpbT お題: 総務省統計局の1990〜2019年までの人口データを使用して2020〜2024年の日本の人口の推計値を求めよ。人口データ以外は使用しないものとする。
179蟻人間 ◆T6xkBnTXz7B0
2020/08/04(火) 21:14:16.49ID:pnjegpbT これは電子政府の使い勝手のテストである。だれも解けないなら、電子データは活かされていないと判断する。
180デフォルトの名無しさん
2020/08/04(火) 21:16:21.27ID:02jYvMNw181デフォルトの名無しさん
2020/08/04(火) 21:26:04.52ID:lImhU2CT チューリングマシンを使って重くて複雑な乗算を再現して何の意味があるのかと思ってそうだな
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている
182デフォルトの名無しさん
2020/08/04(火) 21:58:22.27ID:JHqDXk92 お題を出して解くスレで電子データは活かされていないとかどうでもいいんですが…
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ
183デフォルトの名無しさん
2020/08/04(火) 22:11:15.82ID:02jYvMNw 片山博文MZ◆NveQN6OtcI
184デフォルトの名無しさん
2020/08/04(火) 23:36:46.28ID:L0dS0CTZ お題
両替をしてください
貨幣は次の文字列で表されます
1円 = (1)
5円 = (5)
10円 = (10)
50円 = (50)
100円 = (100)
500円 = (500)
例
入力: (1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)
出力: (10)(10)(1)(1)(1)(1)
入力: (5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)
出力: (100)(50)(10)(10)(10)(10)(5)(1)(1)(1)
両替をしてください
貨幣は次の文字列で表されます
1円 = (1)
5円 = (5)
10円 = (10)
50円 = (50)
100円 = (100)
500円 = (500)
例
入力: (1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)
出力: (10)(10)(1)(1)(1)(1)
入力: (5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)
出力: (100)(50)(10)(10)(10)(10)(5)(1)(1)(1)
185デフォルトの名無しさん
2020/08/05(水) 00:05:23.10ID:DlE2lfwB 書きたいけど寝たい
186デフォルトの名無しさん
2020/08/05(水) 02:29:32.18ID:prJIGLTT >>175
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
187デフォルトの名無しさん
2020/08/05(水) 02:55:46.54ID:wv4r4oF2 >>184 Ruby
def change( coin )
sum = coin.split(/[^\d]+/)[1..].inject(0){|r,c| r + c.to_i }
ret = ''
[500,100,50,10,5,1].each{|c|
next unless sum >= c
r, sum = sum.divmod( c )
ret << "(#{c})" * r
}
ret
end
[ '(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)',
'(5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)' ].each{|coin|
puts "入力: #{coin}"
puts "出力: #{change( coin ) }\n\n"
}
def change( coin )
sum = coin.split(/[^\d]+/)[1..].inject(0){|r,c| r + c.to_i }
ret = ''
[500,100,50,10,5,1].each{|c|
next unless sum >= c
r, sum = sum.divmod( c )
ret << "(#{c})" * r
}
ret
end
[ '(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)',
'(5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)' ].each{|coin|
puts "入力: #{coin}"
puts "出力: #{change( coin ) }\n\n"
}
188デフォルトの名無しさん
2020/08/05(水) 11:37:38.85ID:kVNaCqIg File "C:\Users\NEC-PCuser\.spyder-py3\temp.py", line 23, in <module>
my_data = genfromtxt('SingleECG.csv')
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\npyio.py", line 1772, in genfromtxt
fid = np.lib._datasource.open(fname, 'rt', encoding=encoding)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 269, in open
return ds.open(path, mode, encoding=encoding, newline=newline)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 623, in open
raise IOError("%s not found." % path)
グラフをプロットしたらこのエラーが出ました。対処法を教えてください
my_data = genfromtxt('SingleECG.csv')
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\npyio.py", line 1772, in genfromtxt
fid = np.lib._datasource.open(fname, 'rt', encoding=encoding)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 269, in open
return ds.open(path, mode, encoding=encoding, newline=newline)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 623, in open
raise IOError("%s not found." % path)
グラフをプロットしたらこのエラーが出ました。対処法を教えてください
189デフォルトの名無しさん
2020/08/05(水) 12:05:51.48ID:DlE2lfwB 斬新なお題だなNEC-PCuserさん
190デフォルトの名無しさん
2020/08/05(水) 12:16:18.65ID:IZQzbQjk >>188<対処法を教えるお題
一行目と最後の行IOError("%s not found." % path) から
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py"
のパスが間違えていると思われるので
temp.pyを添付するか確認するように進言します
一行目と最後の行IOError("%s not found." % path) から
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py"
のパスが間違えていると思われるので
temp.pyを添付するか確認するように進言します
191デフォルトの名無しさん
2020/08/05(水) 14:35:10.99ID:xKYyZvTf 心電図装置に繋がってるデバイスが機能停止したんだろ
192デフォルトの名無しさん
2020/08/05(水) 15:30:05.18ID:prJIGLTT >>184
Kotlin
https://paiza.io/projects/cVm9G2FkQCosaGf9_fQz-Q
最初は割り算したり余り出したりしてやろうと思ったんだけど、よく考えたらこの場合はその計算は無駄な感じがしたので合計から引けたらその貨幣を出すのを繰り返すようにした。
Kotlin
https://paiza.io/projects/cVm9G2FkQCosaGf9_fQz-Q
最初は割り算したり余り出したりしてやろうと思ったんだけど、よく考えたらこの場合はその計算は無駄な感じがしたので合計から引けたらその貨幣を出すのを繰り返すようにした。
193デフォルトの名無しさん
2020/08/05(水) 16:44:00.29ID:73CDpa/5 ふむ。コイン切れの対処もし易いな。
194蟻人間 ◆T6xkBnTXz7B0
2020/08/05(水) 17:59:02.96ID:TWR5sasY お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。
ダミーのfeedは、次のようなプログラムとする:
- 現在日時と「えさをやりました。」を出力する。
ダミーのfeedは、次のようなプログラムとする:
- 現在日時と「えさをやりました。」を出力する。
195蟻人間 ◆T6xkBnTXz7B0
2020/08/05(水) 18:08:26.66ID:UZ8wPONY >>194 C++/Win32
#include <windows.h>
int main(void) {
for (;;) {
Sleep(60 * 60 * 1000);
ShellExecuteA(NULL, NULL, "feed.exe", NULL, NULL, SW_SHOWNORMAL);
}
}
// feed.cpp
#include <windows.h>
#include <stdio.h>
int main(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%04d.%02d.%02d %02d:%02d:%02d えさをやりました。\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
#include <windows.h>
int main(void) {
for (;;) {
Sleep(60 * 60 * 1000);
ShellExecuteA(NULL, NULL, "feed.exe", NULL, NULL, SW_SHOWNORMAL);
}
}
// feed.cpp
#include <windows.h>
#include <stdio.h>
int main(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%04d.%02d.%02d %02d:%02d:%02d えさをやりました。\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
196デフォルトの名無しさん
2020/08/05(水) 19:40:23.44ID:VitQNdTl は、はやい・・・
197デフォルトの名無しさん
2020/08/05(水) 20:19:52.45ID:wv4r4oF2 >>194 Ruby (Windows)
# feed_ignition.rb
loop do
system( 'start "" feed.rb' )
sleep 60*60
end
# feed.rb
puts "#{Time.new.strftime('%Y/%m/%d %T')} えさをやりました。"
sleep 3 # 表示確認用
# feed_ignition.rb
loop do
system( 'start "" feed.rb' )
sleep 60*60
end
# feed.rb
puts "#{Time.new.strftime('%Y/%m/%d %T')} えさをやりました。"
sleep 3 # 表示確認用
198デフォルトの名無しさん
2020/08/05(水) 23:41:13.11ID:prJIGLTT >>194
Linux 等の UNIX系OS だったら普通なら crond が動いているので crontab 設定すると楽だ。
(Windows の場合はタスクの設定で似たような事ができる)。
例えばこのようにすると毎時0分に feed コマンドが実行される。
0 * * * * feed
ただ問題はこのままだと標準出力がリダイレクトされていないのでその出力がcrondからメールで送られて来る事になる。
(見たい場合は mail コマンドを使って見る)。
コマンドラインから直接やるとしたら watch コマンドというのもある。これは実行するたびに出力が変化する
ようなコマンドを定期的に動かしてその出力を画面上に表示するためのコマンドだが毎回出力が同じでも
あるいは何も出力しなかったとしても問題はない。1時間ごとに動かすならこうなる。
watch -n 3600 feed
もっと単純にシェルでループさせて実現する方法もある。(これだとようやっとプログラムっぽい見た目になる)
sh -c 'while : ; do feed ; sleep 3600 ; done'
feed コマンドについてはシェルスクリプトなら例えばこうしておけば良い。
#!/bin/sh
echo 'えさをやりました。'
Linux 等の UNIX系OS だったら普通なら crond が動いているので crontab 設定すると楽だ。
(Windows の場合はタスクの設定で似たような事ができる)。
例えばこのようにすると毎時0分に feed コマンドが実行される。
0 * * * * feed
ただ問題はこのままだと標準出力がリダイレクトされていないのでその出力がcrondからメールで送られて来る事になる。
(見たい場合は mail コマンドを使って見る)。
コマンドラインから直接やるとしたら watch コマンドというのもある。これは実行するたびに出力が変化する
ようなコマンドを定期的に動かしてその出力を画面上に表示するためのコマンドだが毎回出力が同じでも
あるいは何も出力しなかったとしても問題はない。1時間ごとに動かすならこうなる。
watch -n 3600 feed
もっと単純にシェルでループさせて実現する方法もある。(これだとようやっとプログラムっぽい見た目になる)
sh -c 'while : ; do feed ; sleep 3600 ; done'
feed コマンドについてはシェルスクリプトなら例えばこうしておけば良い。
#!/bin/sh
echo 'えさをやりました。'
199デフォルトの名無しさん
2020/08/05(水) 23:51:48.40ID:prJIGLTT >>198はfeedで現在の日付を出すのを忘れた。
日付付けるなら例えばこうする。
#!/bin/sh
echo `date` 'えさをやりました。'
date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。
#!/bin/sh
date '+%F %T えさをやりました。'
日付付けるなら例えばこうする。
#!/bin/sh
echo `date` 'えさをやりました。'
date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。
#!/bin/sh
date '+%F %T えさをやりました。'
200蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 18:50:53.87ID:mzjhTFla お題: 現実世界でコイにえさをやるプログラム。
できるのか?
できるのか?
202デフォルトの名無しさん
2020/08/06(木) 19:06:41.72ID:cHZDAcP7 >>200
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。
ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。
ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。
203蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 19:21:15.27ID:mzjhTFla ハードウェアだとソフトウェア制御できない。成長を細かく制御したい。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。
204デフォルトの名無しさん
2020/08/06(木) 19:23:23.77ID:nx4HEXSE >>203
ピ・タ・ゴ・ラ・スイッチ
ピ・タ・ゴ・ラ・スイッチ
205デフォルトの名無しさん
2020/08/06(木) 19:37:26.52ID:/QKQvkvR なぜ何度ツッコまれてもスレタイからずれようとするんですか?
学習できないんですか?
学習できないんですか?
206蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 19:46:21.15ID:mzjhTFla >>205
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会
207デフォルトの名無しさん
2020/08/06(木) 19:58:03.18ID:AWtnj9QL CDトレイを開閉するソフトを作りそれで餌やり器のボタンを押せ
209デフォルトの名無しさん
2020/08/06(木) 20:18:11.34ID:nx4HEXSE 【お題】正解にたどり着くようにアシストした得点を算出するプログラムを作れ
スケールは1点以上100点未満とする
スケールは1点以上100点未満とする
211デフォルトの名無しさん
2020/08/06(木) 20:37:37.85ID:sjF+gr/I クソコテ死ねよマジで
212デフォルトの名無しさん
2020/08/06(木) 20:53:50.09ID:O/aURmUk213蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 21:07:24.02ID:mzjhTFla214蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 21:16:15.64ID:mzjhTFla IchigoJamというのもあるみたい。
215デフォルトの名無しさん
2020/08/06(木) 21:29:05.63ID:8sSWlLgK スレチ
◆QZaw55cn4c はうせろ
◆QZaw55cn4c はうせろ
>>215
突然、どうしたのですか?
突然、どうしたのですか?
217デフォルトの名無しさん
2020/08/06(木) 22:38:17.00ID:8sSWlLgK >>216
呼んでねえよハゲ消えろ
呼んでねえよハゲ消えろ
218蟻人間 ◆T6xkBnTXz7B0
2020/08/06(木) 23:02:55.51ID:mzjhTFla お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。
(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。
(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
219デフォルトの名無しさん
2020/08/07(金) 00:08:41.77ID:TzYKRTqH よく、ラズパイコンテストでやってる
水槽の中の金魚に、エサをやる装置とか
水槽の中の金魚に、エサをやる装置とか
220デフォルトの名無しさん
2020/08/07(金) 11:29:33.41ID:uQ4nbdFf 債務が多い
221デフォルトの名無しさん
2020/08/07(金) 12:51:36.49ID:lb7vo/Jy お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください
入力: D a B c d c C A E c e B b
出力: (a A) (B B b) (c c C c) (D d) (E e)
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください
入力: D a B c d c C A E c e B b
出力: (a A) (B B b) (c c C c) (D d) (E e)
222デフォルトの名無しさん
2020/08/07(金) 13:43:57.69ID:uQ4nbdFf >>221 js
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = {}
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return Object.values(groups).sort((g1, g2) => charVal(g1[0]) - charVal(g2[0])).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = {}
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return Object.values(groups).sort((g1, g2) => charVal(g1[0]) - charVal(g2[0])).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
223デフォルトの名無しさん
2020/08/07(金) 13:48:23.69ID:uQ4nbdFf const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = []
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return groups.filter(Boolean).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
sort いらなかった
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = []
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return groups.filter(Boolean).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
sort いらなかった
224デフォルトの名無しさん
2020/08/07(金) 14:51:48.30ID:5vmbSLbR >>221 Ruby
# その 1
def igrouping( str )
gList = {}
str.split.each{|ch|
k = ch.downcase
gList[ k ] ||= []
gList[ k ] << ch
}
gList.keys.sort.map{|k| '(' + gList[ k ].join(' ') + ')' }.join(' ')
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
# その 1
def igrouping( str )
gList = {}
str.split.each{|ch|
k = ch.downcase
gList[ k ] ||= []
gList[ k ] << ch
}
gList.keys.sort.map{|k| '(' + gList[ k ].join(' ') + ')' }.join(' ')
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
225デフォルトの名無しさん
2020/08/07(金) 14:52:06.69ID:5vmbSLbR >>221 Ruby
# その 2
def igrouping( str )
i = 0
'(' + str.split.sort_by{|x| [ x.downcase, i += 1 ] }.join(' ').gsub( /(\w) (?!\1)/i ){"#{$1}) (#{$2}"} + ')'
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
# その 2
def igrouping( str )
i = 0
'(' + str.split.sort_by{|x| [ x.downcase, i += 1 ] }.join(' ').gsub( /(\w) (?!\1)/i ){"#{$1}) (#{$2}"} + ')'
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
226デフォルトの名無しさん
2020/08/07(金) 16:23:53.54ID:uQ4nbdFf <<=って演算子ほしいな
227デフォルトの名無しさん
2020/08/07(金) 19:28:59.75ID:P4+Ga4Bm >>221 Ruby
$><<gets.split.group_by{|c| c.ord % 32}.sort.map{|a| "(#{a.last.join ' '})"}.join(' ')
# => (a A) (B B b) (c c C c) (D d) (E e)
$><<gets.split.group_by{|c| c.ord % 32}.sort.map{|a| "(#{a.last.join ' '})"}.join(' ')
# => (a A) (B B b) (c c C c) (D d) (E e)
228デフォルトの名無しさん
2020/08/08(土) 00:04:29.62ID:b55CcwAR JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い
Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式
そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
やっぱり、Ruby の方が、メソッドチェーンできるから良い
Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式
そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
229デフォルトの名無しさん
2020/08/08(土) 07:24:36.17ID:u/td9dv4 lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど
一応 lodash/fpもあるけど
230デフォルトの名無しさん
2020/08/08(土) 07:26:45.92ID:u/td9dv4 いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
231デフォルトの名無しさん
2020/08/08(土) 09:18:46.19ID:b55CcwAR >>221
Elixir
input_str = "D a B c d c C A E c e B b"
list = input_str
|> String.split # 文字列を空白で分割して、配列化する
|> Enum.group_by( &String.downcase/1 ) # 小文字へ変換して、グループ化する
|> Map.values # 値を取り出す
|> Enum.map( fn list -> Enum.join( list, " " ) end ) # 各要素を空白でつなげて、1つの文字列にする
|> Enum.map( fn str -> "(" <> str <> ")" end ) # 文字列を、( ) で囲む
# IO.inspect list
Enum.join( list, " " ) # 各要素を空白でつなげて、1つの文字列にする
|> IO.puts
Elixir
input_str = "D a B c d c C A E c e B b"
list = input_str
|> String.split # 文字列を空白で分割して、配列化する
|> Enum.group_by( &String.downcase/1 ) # 小文字へ変換して、グループ化する
|> Map.values # 値を取り出す
|> Enum.map( fn list -> Enum.join( list, " " ) end ) # 各要素を空白でつなげて、1つの文字列にする
|> Enum.map( fn str -> "(" <> str <> ")" end ) # 文字列を、( ) で囲む
# IO.inspect list
Enum.join( list, " " ) # 各要素を空白でつなげて、1つの文字列にする
|> IO.puts
232デフォルトの名無しさん
2020/08/08(土) 14:04:33.02ID:JvTsLjL+233デフォルトの名無しさん
2020/08/08(土) 14:58:00.03ID:gFRxrH0y234デフォルトの名無しさん
2020/08/08(土) 15:53:05.60ID:xsg1wzC9235デフォルトの名無しさん
2020/08/08(土) 16:11:32.49ID:yUCBpeXj >>232
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
https://ideone.com/Tsio0O
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
https://ideone.com/Tsio0O
236デフォルトの名無しさん
2020/08/08(土) 17:07:51.92ID:HH2BebFt237デフォルトの名無しさん
2020/08/08(土) 21:09:30.55ID:JvTsLjL+238デフォルトの名無しさん
2020/08/08(土) 21:20:24.22ID:bf+w2Xl6 code golfなら基本はperlで、次点がRubyじゃないですかね
239デフォルトの名無しさん
2020/08/08(土) 21:56:24.61ID:JvTsLjL+ >>238
そういうものなのね
そういうものなのね
240231
2020/08/08(土) 22:49:25.00ID:b55CcwAR 関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから
Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる
str = "a b c"
# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )
str
|> String.split
|> IO.inspect
出力は、どちらも
["a", "b", "c"]
長く、チェーンできるから
Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる
str = "a b c"
# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )
str
|> String.split
|> IO.inspect
出力は、どちらも
["a", "b", "c"]
241231
2020/08/08(土) 22:54:29.83ID:b55CcwAR 基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ
Python の内包表記みたいなのは、可読性が悪い
メソッドチェーンで、英語のように、左から右へ読めないとダメ
Python の内包表記みたいなのは、可読性が悪い
242デフォルトの名無しさん
2020/08/08(土) 23:09:35.53ID:n6UBlQy6 ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
243デフォルトの名無しさん
2020/08/08(土) 23:14:07.63ID:ifN2bgU4244デフォルトの名無しさん
2020/08/08(土) 23:32:15.70ID:ifN2bgU4245デフォルトの名無しさん
2020/08/09(日) 00:17:54.90ID:/K790vfJ javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな
utilが充実してるな
246デフォルトの名無しさん
2020/08/09(日) 00:41:46.15ID:uywZ9h5A247デフォルトの名無しさん
2020/08/09(日) 02:47:46.35ID:Mt0Kh35r >>221
c#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var input = "D a B c d c C A E c e B b";
foreach (var itm in input.Split(" ").GroupBy(p => p.ToUpper()).OrderBy(p => p.Key))
{
Console.Write("(" + string.Join(" ", itm) + ") ");
}
}
}
c#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var input = "D a B c d c C A E c e B b";
foreach (var itm in input.Split(" ").GroupBy(p => p.ToUpper()).OrderBy(p => p.Key))
{
Console.Write("(" + string.Join(" ", itm) + ") ");
}
}
}
248デフォルトの名無しさん
2020/08/09(日) 04:58:28.52ID:bQgrv4ZF249デフォルトの名無しさん
2020/08/09(日) 16:07:42.42ID:HZ7sqguG お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる
2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください
入力: abcde deabc
出力: true
入力: abcde cdeba
出力: false
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる
2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください
入力: abcde deabc
出力: true
入力: abcde cdeba
出力: false
250デフォルトの名無しさん
2020/08/09(日) 16:42:31.20ID:/K790vfJ >>249 js
const isRotateStr = (a, b) => (a + a).indexOf(b) != -1
console.log(isRotateStr("abcde", "deabc"))
// true
console.log(isRotateStr("abcde", "cdeba"))
// false
const isRotateStr = (a, b) => (a + a).indexOf(b) != -1
console.log(isRotateStr("abcde", "deabc"))
// true
console.log(isRotateStr("abcde", "cdeba"))
// false
251デフォルトの名無しさん
2020/08/09(日) 16:56:20.10ID:DzMx1xPb 問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
252デフォルトの名無しさん
2020/08/09(日) 16:59:23.64ID:Uo9rXbdx aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
文字サイズを最初にチェックすればいいかな?
253253
2020/08/09(日) 19:01:45.47ID:UiQUiAYf >>221 Perl5
push(@{$h{uc$_}}, $_) for qw{D a B c d c C A E c e B b};
print map{"(@{$h{$_}}) "} sort keys %h;
実行結果
~ $ perl 18_221_NCS_sort_grp.pl
(a A) (B B b) (c c C c) (D d) (E e)
push(@{$h{uc$_}}, $_) for qw{D a B c d c C A E c e B b};
print map{"(@{$h{$_}}) "} sort keys %h;
実行結果
~ $ perl 18_221_NCS_sort_grp.pl
(a A) (B B b) (c c C c) (D d) (E e)
254253
2020/08/09(日) 19:17:23.16ID:A1LNtpwx >>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
say "出力 ", "$a$a" =~ /$b/ ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
say "出力 ", "$a$a" =~ /$b/ ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
255デフォルトの名無しさん
2020/08/09(日) 20:09:27.60ID:sb6ynJ/q Jニキも披露してくれよ
256デフォルトの名無しさん
2020/08/09(日) 22:00:05.82ID:BOQzPYI8257253
2020/08/09(日) 22:27:07.62ID:iNMqPGBy >>253 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正
>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = "$a$a" =~ /^(.*)($b)(.*)$/;
say "出力 ", (@a and "$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
入力 aaaaa aaa
出力 false
>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = "$a$a" =~ /^(.*)($b)(.*)$/;
say "出力 ", (@a and "$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
入力 aaaaa aaa
出力 false
258デフォルトの名無しさん
2020/08/09(日) 22:40:05.17ID:/K790vfJ octave文法好みだけど結構古い言語なんだな
259253
2020/08/09(日) 23:21:31.30ID:dFp53gtH >>221 Python3
s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
u = c.upper()
if u in d: d[u] += ' ' + c
else: d[u] = c
ks = sorted(d.keys())
print(' '.join(map(lambda x: '(%s)' % d[x], ks)))
実行結果
~ $ py 18_221_NCS_sort_grp.py
(a A) (B B b) (c c C c) (D d) (E e)
s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
u = c.upper()
if u in d: d[u] += ' ' + c
else: d[u] = c
ks = sorted(d.keys())
print(' '.join(map(lambda x: '(%s)' % d[x], ks)))
実行結果
~ $ py 18_221_NCS_sort_grp.py
(a A) (B B b) (c c C c) (D d) (E e)
260デフォルトの名無しさん
2020/08/09(日) 23:56:04.43ID:DzMx1xPb Perlだとこの程度でも正規表現使わないといかんのか?
261253
2020/08/10(月) 00:02:07.64ID:5Aj+dIHX263253
2020/08/10(月) 01:07:06.98ID:mTkq56mc >>260
>>257は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので
>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = split "$b", "$a$a", 3;
say "出力 ", ("$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
…でもsplitも実は正規表現で分離する機能を持つので、起きていることは実は>>257と一緒なんだよね
>>257は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので
>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = split "$b", "$a$a", 3;
say "出力 ", ("$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
…でもsplitも実は正規表現で分離する機能を持つので、起きていることは実は>>257と一緒なんだよね
264253
2020/08/10(月) 01:18:32.03ID:mTkq56mc265253
2020/08/10(月) 01:58:56.02ID:5YDTUTIu267デフォルトの名無しさん
2020/08/10(月) 05:44:26.44ID:SKFyjjt9 お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください
入力: https://github.com/pablojorge/brainfuck/blob/master/programs/hello.bf
出力: "Hello World!"
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください
入力: https://github.com/pablojorge/brainfuck/blob/master/programs/hello.bf
出力: "Hello World!"
268デフォルトの名無しさん
2020/08/10(月) 08:49:19.32ID:SwBLGnEH >>267 Ruby
require 'open-uri'
str = open('https://raw.githubusercontent.com/pablojorge/brainfuck/master/programs/hello.bf').read
M = 256
i = p = s = 0
h = Hash.new(0)
m = [0] * M
while i < str.length
case str[i]
when ?+ then m[p] += 1
when ?- then m[p] -= 1
when ?[ then h[s += 1] = i
when ?] then m[p].zero? ? s -= 1 : i = h[s]
when ?> then p += 1
when ?< then p -= 1
when ?. then $><<m[p].chr
when ?, then m[p] += $<.getc.ord
end
i += 1
end
# => Hello World!
require 'open-uri'
str = open('https://raw.githubusercontent.com/pablojorge/brainfuck/master/programs/hello.bf').read
M = 256
i = p = s = 0
h = Hash.new(0)
m = [0] * M
while i < str.length
case str[i]
when ?+ then m[p] += 1
when ?- then m[p] -= 1
when ?[ then h[s += 1] = i
when ?] then m[p].zero? ? s -= 1 : i = h[s]
when ?> then p += 1
when ?< then p -= 1
when ?. then $><<m[p].chr
when ?, then m[p] += $<.getc.ord
end
i += 1
end
# => Hello World!
269デフォルトの名無しさん
2020/08/10(月) 08:49:26.47ID:OSJh6/O/270デフォルトの名無しさん
2020/08/10(月) 17:10:10.24ID:Z7zFlWuQ >>249
Kotlin
簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。
https://paiza.io/projects/TxupVLPTStBv7o1MiTuDEQ
Kotlin
簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。
https://paiza.io/projects/TxupVLPTStBv7o1MiTuDEQ
271デフォルトの名無しさん
2020/08/10(月) 17:10:16.38ID:SKFyjjt9272デフォルトの名無しさん
2020/08/10(月) 18:01:14.12ID:Z7zFlWuQ >>267
Kotlin
とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。
https://paiza.io/projects/q8vkgGoAei9W2gfLA4xP4Q
こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)
$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
Kotlin
とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。
https://paiza.io/projects/q8vkgGoAei9W2gfLA4xP4Q
こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)
$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
273デフォルトの名無しさん
2020/08/10(月) 18:43:36.36ID:TsKVv45J274デフォルトの名無しさん
2020/08/10(月) 21:10:04.86ID:EfqLUS40 >>249 Python3
def f(a, b): return len(a) == len(b) and a in b + b
def f(a, b): return len(a) == len(b) and a in b + b
275デフォルトの名無しさん
2020/08/10(月) 22:32:27.25ID:tDeKMBiv■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 中国人「高市早苗が首相になってからの日本での中国人観光客の1日がこれらしいw」中国でバカウケ [165981677]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- >>3と>>5のワードを使ってai生成する
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- ガバガバなんだよ
