1 名前:デフォルトの名無しさん mailto:sage [2019/07/28(日) 19:39:57.54 ID:832c/ukY.net] プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part14 mevius.5ch.net/test/read.cgi/tech/1558168409/
496 名前:蟻人間 mailto:sage [2019/09/19(木) 03:17:38.21 ID:fzYUHnaE.net] お題: 明日の東京都の天気を教えてくれる「お天気ねえさん」を実装せよ。 https://www.drk7.jp/weather/ ここのXMLデータを参考に、明日の東京都の天気を優しく説明してくれるような説明テキストを生成せよ。 例) 明日XX月YY日の東京都の天気は○○です。○○注意報が出ています。傘を忘れないでね。
497 名前:蟻人間 mailto:sage [2019/09/19(木) 03:40:46.99 ID:fzYUHnaE.net] ある種のデータは石油のように重要だから、データ自動生成は条件が揃えばお金儲けにつながる。まあ、とことんチャレンジしたまえ。
498 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 04:53:29.17 ID:kXMoSLFb.net] >>485 sh と perl5 https://pastebin.com/3dXzkYvR https://i.imgur.com/G3ehbXa.png colorlizerの中がperl入りで 見やすくするユーティリティー
499 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 20:26:10.81 ID:tW2U1Dga.net] google の検索結果を 10 づつ合計 1000 件ダウンロードするプログラム
500 名前:さまよえる蟻人間 mailto:sage [2019/09/19(木) 20:38:41.32 ID:fzYUHnaE.net] >>488 ボットはあかん
501 名前:デフォルトの名無しさん [2019/09/19(木) 21:01:33.69 ID:Iq+eqHsU.net] >>467 Lua マルチバイト文字には対応していない。 function f(s) local r,c="",1 for i=1,#s do if s:sub(i,i)==s:sub(i+1,i+1) then c=c+1 else r=r..s:sub(i,i) if c>1 then r=r..c c=1 end end end return(r) end print(f("aaabbc")) 実行結果 a3b2c
502 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 21:11:19.84 ID:VNRPdI7o.net] >>460 octave https://ideone.com/0BVjSC >>467 ruby https://ideone.com/GR4Uu2
503 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 21:20:20.35 ID:7Zlc7qce.net] >>467 perl5 デバッガが日本語で化けるんで英語だけ print("aabbccddd" =~ s{ (.) \1* }{ "$1" . length"$&" }xgre); a2b2c2d3
504 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:35:55.08 ID:brDhMnbX.net] >>485 Perl5 (LWP::UserAgent、LWP::Protocol::https、XML::Simple のinstallしてあるPCで) # -*- coding: utf-8 -*- use utf8; use Data::Dump 'dump'; use Data::Dumper; binmode STDOUT, ':encoding(utf-8)'; use feature say; $pno = 13; # ex) 01:北海道, 13:東京, 20:長野, 47:沖縄 $url = "https://www.drk7.jp/weather/xml/$pno.xml"; require LWP::UserAgent; # with LWP::Protocol::https $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko'); $xml = LWP::UserAgent->new->get($url)->content; use XML::Simple; my $xs = new XML::Simple; #(keyattr => ['area']); # (forcearray => ['info'], keyattr => ['pref']); my $data = $xs->XMLin($xml); say "$_: $data->{$_}" for qw{title link description pubDate author managingEditor}; $pref = $data->{pref}; say "都道府県: $pref->{id}"; %area = %{$pref->{area}}; for $region (keys %area) { $area = $area{$region}; printf "地域: $region (緯度=%s, 経度=%s)\n", @{$area->{geo}}{qw{lat long}}; for $info (@{$area->{info}}) { say " $info->{date} 天気:$info->{weather} (画像 $info->{img})"; $info->{$_} and say ' 'x9, $info->{$_} for qw{weather_detail wave}; %temp = %{$info->{temperature}}; say ' 'x6, " 気温[$temp{unit}]: ", join 'から', sort map{"$_->{content}°"} @{$temp{range}}; %rfc = %{$info->{rainfallchance}}; say ' 'x6, " 降水確率 : ", join ', ', map{"$_->{hour}時:$_->{content}$rfc{unit}"} @{$rfc{period}}; } }
505 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:38:16.81 ID:brDhMnbX.net] 実行結果(例) ~ $ perl 15_485.pl title: weather forecast xml link: www.drk7.jp/weather/xml/13.xml description: 気象庁の天気予報情報を XML で配信。1日1回 AM 6:00 ごろ更新。 pubDate: Thu, 19 Sep 2019 18:00:01 +0900 author: 気象庁 managingEditor: drk7.jp 都道府県: 東京都 地域: 伊豆諸島南部 (緯度=33.2419, 経度=139.8418) 2019/09/19 天気:くもり時々雨 (画像 www.drk7.jp/MT/images/MTWeather/202.gif ) 北東の風 やや強く くもり 夜のはじめ頃 雨 八丈島 では 夜遅く 雷を伴い 激しく 降る 波 3メートル うねり を伴う 気温[摂氏]: 21°から23° 降水確率 : 00-06時:0%, 06-12時:80%, 12-18時:50%, 18-24時:50% 2019/09/20 天気:くもり時々雨 (画像 www.drk7.jp/MT/images/MTWeather/203.gif ) 東の風 やや強く くもり 一時 雨 波 4メートル のち 3メートル ただし 三宅島 では 3メートル 気温[摂氏]: 20°から23° 降水確率 : 00-06時:50%, 06-12時:60%, 12-18時:60%, 18-24時:50% 2019/09/21 天気:くもり一時雨 (画像 www.drk7.jp/MT/images/MTWeather/202.gif ) 気温[摂氏]: 21°から26° 降水確率 : 00-06時:70%, 06-12時:70%, 12-18時:70%, 18-24時:70% 2019/09/22 天気:くもり一時雨 (画像 www.drk7.jp/MT/images/MTWeather/202.gif ) 気温[摂氏]: 23°から29° 降水確率 : 00-06時:50%, 06-12時:50%, 12-18時:50%, 18-24時:50% 2019/09/23 天気:くもり一時雨 (画像 www.drk7.jp/MT/images/MTWeather/202.gif ) 気温[摂氏]: 25°から29° 降水確率 : 00-06時:50%, 06-12時:50%, 12-18時:50%, 18-24時:50% …(後略
506 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:09:22.21 ID:brDhMnbX.net] お天気おねぃさんとは、ほど遠いなコリャ…
507 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 04:34:57.12 ID:vpcMUgg5.net] お題 以下の、列区切りが空白である入力文字列を、 最後の列の数値が、小さい順番で、行を並べ替えよ 答えは、上下が反転する a b c 44 x y 33 z 22 11
508 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 07:37:10.18 ID:ZVVuMGcz.net] >>496 cat text a b c 44 x y 33 z 22 11 cat text | perl -pe 's/.*? \s? (\d+)/$1:$&/xgm' | sort -n | perl -pe 's/^\d+://' 11 z 22 x y 33 a b c 44
509 名前:デフォルトの名無しさん [2019/09/20(金) 08:14:00.92 ID:ImrTQZdo.net] >>467 Common Lisp https://ideone.com/1VXrLk Perl https://ideone.com/8SVG3V JavaScript https://ideone.com/Cn73uX
510 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 09:52:16.00 ID:PYkAN+VQ.net] >>496 Ruby puts <<~EOS.each_line.sort_by{|s| s[/\S+\n?/].to_i} a b c 44 x y 33 z 22 11 EOS # => 11 z 22 x y 33 a b c 44
511 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 13:59:42.96 ID:fZRbtgUM.net] >>489 合法的? にやるにはどうすればいいの?
512 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 14:08:52.93 ID:qcElLt/f.net] >>500 初手でウエイト入れないで読みに行って、アクセス規制法に引っかかるのとかありそう。 鯖落としたら、怒られるからな。警察に。
513 名前:デフォルトの名無しさん [2019/09/20(金) 15:01:57.40 ID:8HAndpSr.net] >>496 J echo@>(/: {: @:(0&".) &.>) <;._2 stdin ''
514 名前:デフォルトの名無しさん [2019/09/20(金) 15:07:26.20 ID:uyZD/oLi.net] appmarketinglabo.net/osaka-bakurotalk/ Q、hamonさん、ここだけの面白い話は何かありますか? hamon: 絶対にこれをつくれば海外で10万DLされるという「超鉄板ジャンル」がある。 それは「3Dのリアルな人間をつかった実在のスポーツゲーム」、中身がクソでも10万DLはされる。 「ボクシングvs腕相撲」という実質もぐらたたきのようなゲームが30万DLいった。 「スキージャンプ アルティメイタム」というゲームが10万DLくらい。 マイナーなスポーツでもそのような結果なので、競技人口のベスト10のスポーツを調べてつくれば10万DLは固い。 普通につくるとコストがかかるが、UNITYでつくればストア上でモーションも売っているのでかなり稼げると思う。
515 名前:デフォルトの名無しさん [2019/09/21(土) 00:27:57.30 ID:dB3ZeAcF.net] お題: 同じ文字列がいくつあるか数えるプログラムを作成しなさい。 ※出力は出現回数順でソートされている必要はありません。 入力 Hoge Fuga Foo Fuga Foo Hoge Bar Fuga 出力 Hoge 2 Fuga 3 Foo 2 Bar 1
516 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 00:39:37.54 ID:6wFtRpPA.net] >>504 Perl5 $h{$_}++ for qw{Hoge Fuga Foo Fuga Foo Hoge Bar Fuga}; print "$_ $h{$_}\n" for keys %h; 実行結果 ~ $ perl 15_504.pl Fuga 3 Hoge 2 Bar 1 Foo 2
517 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 00:45:45.24 ID:Ei1MM/mp.net] >>504 https://ideone.com/5PI58a C++。今回はメインロジックの記述が少なくて楽だった。
518 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 00:46:28.49 ID:YPz6oCKs.net] >>504 cat text Hoge Fuga Foo Fuga Foo Hoge Bar Fuga cat text | perl -ne '$dirs{ s/\R//r } += 1; END{for $key (keys %dirs) {printf "%-4s %s\n", $key, $dirs{$key} } }' Foo 2 Fuga 3 Bar 1 Hoge 2
519 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 00:50:19.09 ID:Ei1MM/mp.net] うほっ。C++のunordered_mapはオーダー要求しないから、そこを使って最適化物故むとかやるんかいな。 VCとGCCと挙動違う。
520 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 00:59:47.45 ID:6wFtRpPA.net] >>496 Perl5 sub f {$_[0] =~ /(\d+)/; $1}; print sort{ f($a) <=> f($b) } <DATA>; __DATA__ a b c 44 x y 33 z 22 11 実行結果 ~ $ perl 15_496.pl 11 z 22 x y 33 a b c 44
521 名前:デフォルトの名無しさん [2019/09/21(土) 04:32:25.24 ID:DxluyDWg.net] >>496 Kotlin https://paiza.io/projects/6vObtBsKGF8CSWLHW8cUSQ
522 名前:デフォルトの名無しさん [2019/09/21(土) 05:21:21.47 ID:DxluyDWg.net] >>504 Kotlin https://paiza.io/projects/iaaP87ST43fSPdMkOiqSGQ
523 名前:デフォルトの名無しさん [2019/09/21(土) 05:37:07.36 ID:RmdAWOHY.net] >>504 Ruby a=readlines.map(&:chomp) a.uniq.each{|v| puts("#{v} #{a.count(v)}")}
524 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 15:59:00.83 ID:uZ0K83Mw.net] >>496 ruby https://ideone.com/VtI7C7 puts readlines.sort_by {|s| s[/\d+$/].to_i} >>504 ruby https://ideone.com/Sw6k17 puts $<.read.scan(/\w+/).group_by(&:itself).map {|a, b| '%s %d' % [a, b.size]}
525 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 16:12:27.45 ID:ZyFDPzPp.net] お題:正の整数が与えられるので、英語の序数に変換せよ 1 => 1st 23 => 23rd 12 => 12th
526 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 16:40:16.71 ID:6wFtRpPA.net] >>514 Perl5 %o = qw{1 st 2 nd 3 rd}; $o = $o{$_}//'th', print "$_$o\n" for 1..10,12,23; 実行 ~ $ perl 15_514.pl 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th 12th 23th
527 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 16:54:30.22 ID:6wFtRpPA.net] >>514 Perl5、 >>515 はもう少しコンパクトに書けた %o = qw{1 st 2 nd 3 rd}; printf "$_%s\n", $o{$_}//'th' for 1..10,12,23;
528 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 17:38:27.55 ID:uZ0K83Mw.net] >>514 ruby https://ideone.com/3Mupna
529 名前:デフォルトの名無しさん [2019/09/21(土) 18:24:27.24 ID:9SoaGQ4l.net] >>504 Common Lisp https://ideone.com/VW5xja Perl https://ideone.com/kfn4xI
530 名前:デフォルトの名無しさん [2019/09/21(土) 19:12:36.02 ID:AojYT9zq.net] 1st 2nd 3rd 11th 12th 13th 21st 22nd 23rd 101st 102nd 103rd 111th 112th 113th 121st 122nd 123rd 皆さんここらへん大丈夫?
531 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 19:41:28.17 ID:6wFtRpPA.net] >>514 Perl5、>>519 で指摘された誤りの修正 テヘペロ %h = qw{1 st 2 nd 3 rd}; for (1..4,11,12,13,21,22,23,101,102,103,111,112,113,121,122,123) { /(\d?)(\d)$/; printf "$_ => $_%s\n", $1 eq 1 ? 'th' : $h{$2}//'th'; } 実行結果 ~ $ perl 15_514.pl 1 => 1st 2 => 2nd 3 => 3rd 4 => 4th 11 => 11th 12 => 12th 13 => 13th 21 => 21st 22 => 22nd 23 => 23rd 101 => 101st 102 => 102nd 103 => 103rd 111 => 111th 112 => 112th 113 => 113th 121 => 121st 122 => 122nd 123 => 123rd
532 名前:さまよえる蟻人間 mailto:sage [2019/09/21(土) 20:51:54.21 ID:BmADEcuL.net] お題: 与えられた西暦年月日を年号年月日に変換しなさい。ただし、変換するのは大正時代から令和までとし、範囲外であればERRORを表示しなさい。
533 名前:さまよえる蟻人間 mailto:sage [2019/09/21(土) 21:04:33.10 ID:BmADEcuL.net] お題: YYYY/MM/DD形式で与えられた西暦年月日の文字列が正しい年月日を表しているかどうか判定せよ。
534 名前:蟻人間 mailto:sage [2019/09/21(土) 21:24:10.22 ID:BmADEcuL.net] >>522 , >>521 の順に解いて下さい。 1970/01/05 1990/12/31 2019/04/28 2019/05/01 1920/02/29
535 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 22:12:07.89 ID:y97V3EOz.net] >>522 Perl5 use Time::Piece; for (<DATA>) { chomp; my $t; eval {$t = Time::Piece->strptime($_, '%Y/%m/%d')}; $t //= 'Invalid'; print "$_: $t\n"; } __DATA__ 1970/01/05 1990/12/31 2019/04/28 2019/05/01 1920/02/29 0000/13/32 実行結果 1970/01/05: Mon Jan 5 00:00:00 1970 1990/12/31: Mon Dec 31 00:00:00 1990 2019/04/28: Sun Apr 28 00:00:00 2019 2019/05/01: Wed May 1 00:00:00 2019 1920/02/29: Sun Feb 29 00:00:00 1920 0000/13/32: Invalid
536 名前:524 mailto:sage [2019/09/21(土) 22:29:42.44 ID:y97V3EOz.net] >>524 Time::Piece->strptime は 1900/01/01 よりも前の日付だと 正しい西暦の年月日を入力しても parse結果が不定となってしまうということがさっき分かりました。 したがって残念ながら>>524 のcodeは>>522 の題意を満たしているとは 言いがたいものでした。ゴメンね〜
537 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 22:37:53.07 ID:tuxPF//K.net] >>521-523 Java https://ideone.com/5XMVPB
538 名前:蟻人間 mailto:sage [2019/09/21(土) 22:44:04.41 ID:7nrsNPcd.net] 令和1年を令和元年にしないといけないという落とし穴があるようだ。
539 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 22:45:06.50 ID:Awwp+36u.net] >>504 Ruby p $<.map(&:chomp).yield_self{|e| e.uniq.map{|v| [v, e.count(v)]}} # => [["Hoge", 2], ["Fuga", 3], ["Foo", 2], ["Bar", 1]]
540 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 23:03:57.96 ID:tuxPF//K.net] >>527 Java https://ideone.com/q1JPJ5 しゅうせいしまった
541 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:12:38.88 ID:35++XhB6.net] >>496 Squeak Smalltalk #('a b c 44' 'x y 33' 'z 22' '11') sortBy: [:x | x splitInteger last] ascending "=> an OrderedCollection('11' 'z 22' 'x y 33' 'a b c 44') "
542 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:25:15.35 ID:35++XhB6.net] >>504 Pharo/Squeak Smalltalk 'Hoge Fuga Foo Fuga Foo Hoge Bar Fuga' lines asBag sortedElements "=> {'Bar'->1 . 'Foo'->2 . 'Fuga'->3 . 'Hoge'->2} "
543 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:56:51.52 ID:35++XhB6.net] >>467 Pharo/Squeak Smalltalk | fn | fn := [:str | String streamContents: [:ss | (str as: RunArray) runsAndValuesDo: [:n :x | ss nextPut: x; nextPutAll: (n = 1 ifTrue: [''] ifFalse: [n asString]) ] ]]. fn value: 'あいうえお'. "=> 'あいうえお' " fn value: 'ああいいうう'. "=> 'あ2い2う2' " fn value: 'あいうあいう'. "=> 'あいうあいう' "
544 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 08:19:31.82 ID:uuB9aO9i.net] >>514 Ruby suffixes = %w[th st nd rd] f = -> n {(-(-((n - 10) / 10 % 10) / 9)) * 41 / (n % 10 * 10 + 11) * (n % 10)} [ 1, 2, 3, 4, 11, 12, 13, 21, 22, 23, 101, 102, 103, 111, 112, 113, 121, 122, 123 ].each{|v| puts '%1$d => %1$d%2$s' % [v, suffixes[f[v]]]} # => 1 => 1st 2 => 2nd 3 => 3rd 4 => 4th 11 => 11th 12 => 12th 13 => 13th 21 => 21st 22 => 22nd 23 => 23rd 101 => 101st 102 => 102nd 103 => 103rd 111 => 111th 112 => 112th 113 => 113th 121 => 121st 122 => 122nd 123 => 123rd
545 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 08:57:02.33 ID:yY5QhyPL.net] >>533 ruby知らんけどそのfって何?
546 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 09:05:16.49 ID:8u0YwnlN.net] ラムダ式じゃねーの おれもruby知らんが
547 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 09:16:58.95 ID:W3ewN8v1.net] (dolist (n (list 1 2 3 11 12 13 21 22 23 101 102 103 111 112 113 121 122 123) ) (format t "~:R~%" n)) first second third eleventh twelfth thirteenth twenty-first twenty-second twenty-third one hundred first one hundred second one hundred third one hundred eleventh one hundred twelfth one hundred thirteenth one hundred twenty-first one hundred twenty-second one hundred twenty-third
548 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 09:21:41.49 ID:uuB9aO9i.net] >>534-535 ラムダ式. 任意の自然数 n に対して次の式は n の序数詞の末尾が th なら 0, st なら 1, nd なら 2, rd なら 3 を返す.(除算は切り捨て) (-(-((n - 10) / 10 % 10) / 9)) * 41 / (n % 10 * 10 + 11) * (n % 10)
549 名前:デフォルトの名無しさん [2019/09/22(日) 10:14:00.13 ID:UtdvR7ZT.net] >>514 Lua function f(n) local r,x x=n%10 if n%100-x==10 or x<1 or x>3 then r="th" else r=({"st","nd","rd"})[x] end return n..r end
550 名前:デフォルトの名無しさん [2019/09/22(日) 11:43:05.12 ID:OEThTvH6.net] >>514 JavaScript const f=n=>n+=[,'st','nd','rd'][n%100>>3 ^1&&n%10]||'th' 実行結果略
551 名前:デフォルトの名無しさん [2019/09/22(日) 11:51:21.39 ID:OEThTvH6.net] >>522 , >>521 JavaScript const isValid = seireki => { let check try { check = new Intl .DateTimeFormat('ja-JP', {year: 'numeric', month: '2-digit', day: '2-digit'}) .format(new Date(seireki)) } catch (e) { return false } return seireki === check ? true : false } const seirekiToWareki = seireki => { if (!isValid(seireki)) return 'ERROR' const wareki = new Intl .DateTimeFormat('ja-JP-u-ca-japanese', {era: 'long', year: 'numeric', month: '
552 名前:numeric', day: 'numeric'}) .format(new Date(seireki)) .replace(/(正|和|成)1(年)/, '$1元$2') return ['大正', '昭和', '平成', '令和'].includes(wareki.slice(0, 2)) ? wareki : 'ERROR' } `1979/01/05 1990/12/31 2019/04/28 2019/05/01 1920/02/29 0000/13/32` .split`\n`.forEach(seireki => {console.log(seirekiToWareki(seireki))}) 実行結果: 昭和54年1月5日 平成2年12月31日 平成31年4月28日 令和元年5月1日 大正9年2月29日 ERROR [] [ここ壊れてます]
553 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 14:55:10.69 ID:yzO2ACAf.net] >>521-523 Perl5 use Time::Piece; #use Data::Dump 'dump'; @fy = (['2019/05/01', '令和'], ['1989/01/08', '平成'], ['1926/12/25', '昭和'], ['1912/07/30', '大正']); $$_[0] = Time::Piece->strptime($$_[0], '%Y/%m/%d') for @fy; for (qw{1970/01/05 1990/12/31 2019/04/28 2019/05/01 1920/02/29 1912/07/29 2019/02/29}) { my ($t, $t0, $era, $nen); eval {$t = Time::Piece->strptime($_, '%Y/%m/%d')}; if ($t and $t->strftime('%Y/%m/%d') eq $_) { do {($t0, $era) = @$_, last if $$_[0] <= $t} for @fy; if ($t0) { $nen = ($y = $t->year - $t0->year, $y ? $y + 1 : '元').'年' if $t0; $t = "$era$nen".$t->mon.'月'.$t->mday.'日'; } else { $t = 'ERROR'; } } else { $t = 'Invalid'; } print "$_: $t\n"; } 実行結果 ~ $ perl 15_521.pl 1970/01/05: 昭和45年1月5日 1990/12/31: 平成2年12月31日 2019/04/28: 平成31年4月28日 2019/05/01: 令和元年5月1日 1920/02/29: 大正9年2月29日 1912/07/29: ERROR 2019/02/29: Invalid
554 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 14:59:46.00 ID:yzO2ACAf.net] >>541 一行目のコメント #use Data::Dump 'dump'; はdebugの際に使ったstatementの消し忘れにつき、不要
555 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 15:13:26.78 ID:yzO2ACAf.net] >>541 $nen = ($y = $t->year - $t0->year, $y ? $y + 1 : '元').'年' if $t0; の「 if $t0」も削除し忘れだな、ゴメンチャイ
556 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 16:19:32.48 ID:iYBBHKU1.net] https://github.com/systemd/systemd/blob/82d1264048a3768fb8238387810f78c5d3912058/src/journal/journalctl.c#L2405-L2461 このif elseの羅列をリファクタリングしてください(´・ω・`)
557 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 17:24:37.46 ID:W3ewN8v1.net] 無駄に否定演算子で分かりにくくしている if (!arg_reverse) r = sd_journal_next_skip(j, 1 + after_cursor); else r = sd_journal_previous_skip(j, 1 + after_cursor);
558 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 17:45:39.81 ID:vTpi5vA1.net] >>544 hengband.es.land.to/hengband-1.7.0-svn/ このあたりのspells1.cのproject_fのほうが豪華だよ
559 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 18:17:09.14 ID:yzO2ACAf.net] >>521 Perl5 >>541 を少しコンパクトにしてみた use Time::Piece; @fy = (['2019/05/01','令和'],['1989/01/08','平成'],['1926/12/25','昭和'],['1912/07/30','大正']); $$_[0] = Time::Piece->strptime($$_[0], '%Y/%m/%d') for @fy; for (qw{1970/01/05 1990/12/31 2019/04/28 2019/05/01 1920/02/29 1912/07/29 2019/02/29}) { my ($t, $t0, $era, $nen); eval {$t = Time::Piece->strptime($_, '%Y/%m/%d')}; $s = 'Invalid'; if ($t and $t->strftime('%Y/%m/%d') eq $_) { do {($t0, $era) = @$_, last if $$_[0] <= $t} for @fy; $s = 'ERROR'; if ($t0) { $nen = ($y = $t->year - $t0->year, $y ? $y + 1 : '元').'年'; $s = "$era$nen" . $t->mon . '月' . $t->mday . '日'; } } print "$_: $s\n"; }
560 名前:蟻人間 mailto:sage [2019/09/22(日) 20:58:52.87 ID:Pb++lLAf.net] お題: マイドキュメントにある全てのファイルの更新日時を取得し、曜日ごとに平均時刻を集計せよ。
561 名前:デフォルトの名無しさん [2019/09/22(日) 21:11:37.57 ID:PDMeYfrK.net] マイドキュメントがなかった
562 名前:蟻人間 mailto:sage [2019/09/22(日) 21:23:02.16 ID:Pb++lLAf.net] お題: あるフォルダにある全てのファイルの更新日時を全て同じ日時にリセットせよ。
563 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 21:30:08.53 ID:WdPSTicU.net] >>521-523 ruby 2.5.5 https://ideone.com/RLhbll ・令和対応はRuby 2.6.3から
564 名前:蟻人間 mailto:sage [2019/09/22(日) 21:35:34.35 ID:rZK31NHQ.net] ※未来の日時にするとMakefileなどで不具合の原因になるかもしれないので、やめよう。必ず過去の日付で。
565 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 21:40:33.36 ID:2VFOPinw.net] >>1 ◆T6も書き込み禁止
566 名前:蟻人間 mailto:sage [2019/09/22(日) 22:00:19.44 ID:rZK31NHQ.net] >>553 カレンダー苦手? そりゃごめんね。誰でも解けるような問題解いて面白い? もしかして
567 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:02:04.64 ID:35++XhB6.net] とりあえずNGにした
568 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:03:45.82 ID:35++XhB6.net] うっかり回答しないように連鎖にしとく方がいいか
569 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:23:23.82 ID:W3ewN8v1.net] >>548 \ls -l --time-style=+%a:%T ~/ | perl -lane 'print $F[5]' | sed "/^$/d" | perl -F: -lane '{++$i{$F[0]}; $acc{$F[0]} += $F[1]*3600 + $F[2] *60 + $F[3] }END{ print "$_ ". $acc{$_}/$i{$_} . " seconds" for keys %acc}' 日 49262.7 seconds 金 52984.3125 seconds 火 56316.8461538462 seconds 木 47056.3333333333 seconds 月 53660.7894736842 seconds 土 49998.1538461538 seconds 水 48117.5 seconds
570 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:24:24.30 ID:W3ewN8v1.net] スルーだったか
571 名前:蟻人間 mailto:sage [2019/09/22(日) 22:44:17.87 ID:rZK31NHQ.net] お題: 自分のプログラムファイルが何バイトかを表示せよ。
572 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:48:43.53 ID:Yf8464Y3.net] >>548 Perl5、なお>>550 は(utimeを使えばできますが)回答は作成いたしません use File::Find 'find'; sub hier { my $mtime = (lstat)[9]; push @epochs, $mtime if -f _; } find({wanted => \&hier}, "$ENV{USERPROFILE}/My Documents"); @w = ([],[],[],[],[],[],[]); for (@epochs) { ($sec, $min, $hour, $wday) = (localtime $_)[0..2,6]; push @{$w[$wday]}, 3600*$hour + 60*$min + sec; } use List::Util 'sum'; use Time::Piece; @dw = qw(日 月 火 水 木 金 土); for (0..6) { $n = @{$w[$_]}; $mean = sum(@{$w[$_]}) / $n; $s = Time::Piece->new($mean); printf "$dw[$_](%4d): %s\n", $n, $s->hms; } 実行結果 ~ $ perl 15_548.pl 日( 104): 21:04:43 月( 94): 22:57:25 火( 46): 21:41:46 水( 298): 12:55:47 木( 322): 05:04:39 金(2020): 07:01:42 土(1650): 22:50:54
573 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:50:50.35 ID:JOdgUuSI.net] >>548 馬鹿っぽ
574 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:53:39.99 ID:JOdgUuSI.net] 蟻人間、プログラミングに興味を持ち始めた中学生臭がすごい
575 名前:蟻人間 mailto:sage [2019/09/22(日) 23:00:26.05 ID:rZK31NHQ.net] >>559 はいはい、模範解答出せばいいんでしょ? // C++/Win32 #include <windows.h> #include <stdio.h> int main(void) { char buf[MAX_PATH]; GetModuleFileNameA(NULL, buf, MAX_PATH); WIN32_FIND_DATAA find; HANDLE hFind = FindFirstFileA(buf, &find); printf("%ld bytes", find.nFileSizeLow); FindClose(hFind); return 0; }
576 名前:蟻人間 mailto:sage [2019/09/22(日) 23:03:43.50 ID:rZK31NHQ.net] >>559 別解ね。 /* C */ #include <stdio.h> int main(int argc, char **argv) { FILE *fp = fopen(argv[0], "rb"); fseek(fp, 0, SEEK_END); printf("%ld bytes\n", ftell(fp)); fclose(fp); return 0; }
577 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 23:10:48.88 ID:Yf8464Y3.net] >>559 Perl5 print -s $0, "bytes\n"; 実行 ~ $ perl 15_559.pl 25bytes
578 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 23:25:59.86 ID:35++XhB6.net] >>514 Pharo/Squeak Smalltalk | suffixes fn |
579 名前:suffixes := #(st nd rd), (Array new: 7 withAll: #th). suffixes := (0 to: 9) gather: [:idx | suffixes]. suffixes from: 11 to: 13 put: #th. fn := [:n | n asString, (suffixes atWrap: n)]. fn value: 1. "=> '1st' " fn value: 23. "=> '23rd' " fn value: 12. "=> '12th' " [] [ここ壊れてます]
580 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 23:32:48.92 ID:Yf8464Y3.net] >>560 修正、0割回避、localtimeが返すepochのmtimeはUTCベースなのでTZ設定追加し9時間ずれ対策 $ENV{TZ} = 'UTC'; use File::Find 'find'; use Time::Piece; sub hier { my $mtime = (lstat)[9]; push @epochs, $mtime if -f _; } find({wanted => \&hier}, "$ENV{USERPROFILE}/My Documents"); print "Number of files = " . @epochs . "\n"; @w = ([],[],[],[],[],[],[]); for (@epochs) { ($sec, $min, $hour, $wday) = (localtime $_)[0..2,6]; push @{$w[$wday]}, 3600*$hour + 60*$min + sec; } use List::Util 'sum'; @dw = qw(日 月 火 水 木 金 土); for (0..6) { $n = @{$w[$_]}; if ($n) { $mean = sum(@{$w[$_]}) / $n; $s = Time::Piece->new($mean); printf "$dw[$_](%4d): %s\n", $n, $s->hms; } }
581 名前:蟻人間 mailto:sage [2019/09/23(月) 00:23:07.10 ID:JAc5gnVl.net] >>548 出題の狙い。犯罪捜査において被疑者または関係者の生活パターンを知りたいときに、パソコンのファイルの日時の統計のデジタル鑑識により、パソコンの使用実態が類推可能であることを示すものである。
582 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 00:28:46.25 ID:GyCF+Do4.net] 出勤とか寝る時間があまり変わらないという仮定で 同一人物の疑いがある2つのコテハンを 数百スレ分から時間別書き込み頻度から検証したことがあるが それにくらべると得られる情報少なすぎて草
583 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 00:30:37.56 ID:iF+DbCXr.net] >>568 馬鹿っぽ
584 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 01:01:29.40 ID:ZSRjXCoe.net] >>568 朝と夜に作ったファイルの平均は昼になるし ダウンロードした大規模なOSSのアーカイブを展開した物とか入っているんで 曜日ごとの平均時刻じゃー何の傾向も分かりません
585 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 01:43:06.73 ID:ZSRjXCoe.net] >>567 そうじゃねぇだろ、file systemのmtimeはUTCベースなのに わざわざlocaltimeでTZ=JST_9の日時に変換してから 時分秒だけTime::Pieceに食べさせるから GMTとして解釈され9時間ずれたんだよ。 それを回避するためTZ環境変数にUTCを設定するとは 何たる尻の青い、くちばしの黄色い、まだ駆け出しの青二才、未熟者
586 名前:デフォルトの名無しさん [2019/09/23(月) 04:00:12.20 ID:Sp7ybd6s.net] >>559 Common Lisp https://ideone.com/idfFJM (sbcl) https://ideone.com/8G7hUD (clisp) ideoneは、sbclの場合は compile-file で作成したファイルを実行しているらしく 結果が異なっているのはそのため
587 名前:蟻人間 mailto:sage [2019/09/23(月) 12:05:34.14 ID:Pxp3zDR1.net] >>548 C++/Win32 模範解答。 https://gist.github.com/katahiromz/63c00d6c670370d7602fcd991fdc0eba
588 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 12:49:49.08 ID:iF+DbCXr.net] 模範解答(汚ねえスパゲティ)
589 名前:デフォルトの名無しさん [2019/09/23(月) 13:54:34.61 ID:2RLjyW/B.net] >>504 Lua a={} for x in io.lines() do a[x]=(a[x] or 0)+1 end for k,v in pairs(a) do print(k,v) end
590 名前:デフォルトの名無しさん [2019/09/27(金) 01:42:52.78 ID:/3CUbuCi.net] >>521 Kotlin https://paiza.io/projects/OrRiee2xfpa7RKGGYfpyfQ
591 名前:デフォルトの名無しさん [2019/09/27(金) 02:44:56.39 ID:/3CUbuCi.net] >>522 Kotlin https://paiza.io/projects/saSW2aaTiVigsU_14uCc-g
592 名前:デフォルトの名無しさん [2019/09/27(金) 02:50:14.35 ID:/3CUbuCi.net] >>550 シェルスクリプト (find, touch コマンド使用) 2019/09/27 02:48:00 に合わせる場合 #!/bin/sh find
593 名前: あるフォルダ -type f -exec touch -t 201909270248.00 {} \; [] [ここ壊れてます]
594 名前:デフォルトの名無しさん [2019/09/27(金) 19:49:32.99 ID:jf7tgLq0.net] >>548 Powershell ls ([Environment]::GetFolderPath(5)) -Recurse -Force |? {!$_.PSIsContainer} ` |% {$_.LastWriteTime} | sort {[int]$_.DayOfWeek} | group {"{0:ddd}" -f $_} ` |% {"{0}{1,10:T}" -f $_.Name, [DateTime][Int64]($_.Group |% {$_.TimeOfDay.Ticks} | measure -Average).Average}
595 名前:デフォルトの名無しさん [2019/09/27(金) 19:57:07.16 ID:jf7tgLq0.net] >>580 をコピペで実行するときは、`の後の半角空白を削除しないとエラーになる。
596 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 21:29:22.88 ID:vBAnAZ37.net] お題:リスト等の重複する要素を削除し、大きい順に並び替えよ [3, 1, 4, 1, 5] ↓ [5, 4, 3, 1] java https://ideone.com/8VN6hL rust https://ideone.com/igyvob ruby https://ideone.com/VsemVf octave https://ideone.com/FHue1K