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

■ このスレッドは過去ログ倉庫に格納されています
2019/07/28(日) 19:39:57.54ID:832c/ukY
プログラミングのお題スレです。

【出題と回答例】
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/

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

※前スレ
プログラミングのお題スレ Part14
http://mevius.5ch.net/test/read.cgi/tech/1558168409/
2019/09/21(土) 22:45:06.50ID:Awwp+36u
>>504 Ruby

p $<.map(&:chomp).yield_self{|e| e.uniq.map{|v| [v, e.count(v)]}}

# => [["Hoge", 2], ["Fuga", 3], ["Foo", 2], ["Bar", 1]]
2019/09/21(土) 23:03:57.96ID:tuxPF//K
>>527 Java
https://ideone.com/q1JPJ5
しゅうせいしまった
2019/09/22(日) 01:12:38.88ID:35++XhB6
>>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') "
2019/09/22(日) 01:25:15.35ID:35++XhB6
>>504 Pharo/Squeak Smalltalk

'Hoge
Fuga
Foo
Fuga
Foo
Hoge
Bar
Fuga' lines asBag sortedElements

"=> {'Bar'->1 . 'Foo'->2 . 'Fuga'->3 . 'Hoge'->2} "
2019/09/22(日) 01:56:51.52ID:35++XhB6
>>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: 'あいうあいう'. "=> 'あいうあいう' "
2019/09/22(日) 08:19:31.82ID:uuB9aO9i
>>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
2019/09/22(日) 08:57:02.33ID:yY5QhyPL
>>533
ruby知らんけどそのfって何?
2019/09/22(日) 09:05:16.49ID:8u0YwnlN
ラムダ式じゃねーの
おれもruby知らんが
2019/09/22(日) 09:16:58.95ID:W3ewN8v1
(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
2019/09/22(日) 09:21:41.49ID:uuB9aO9i
>>534-535
ラムダ式.
任意の自然数 n に対して次の式は n の序数詞の末尾が th なら 0, st なら 1, nd なら 2, rd なら 3 を返す.(除算は切り捨て)
(-(-((n - 10) / 10 % 10) / 9)) * 41 / (n % 10 * 10 + 11) * (n % 10)
538デフォルトの名無しさん
垢版 |
2019/09/22(日) 10:14:00.13ID:UtdvR7ZT
>>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
539デフォルトの名無しさん
垢版 |
2019/09/22(日) 11:43:05.12ID:OEThTvH6
>>514 JavaScript
const f=n=>n+=[,'st','nd','rd'][n%100>>3^1&&n%10]||'th'
実行結果略
540デフォルトの名無しさん
垢版 |
2019/09/22(日) 11:51:21.39ID:OEThTvH6
>>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: '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
2019/09/22(日) 14:55:10.69ID:yzO2ACAf
>>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
2019/09/22(日) 14:59:46.00ID:yzO2ACAf
>>541
一行目のコメント
#use Data::Dump 'dump';
はdebugの際に使ったstatementの消し忘れにつき、不要
2019/09/22(日) 15:13:26.78ID:yzO2ACAf
>>541
$nen = ($y = $t->year - $t0->year, $y ? $y + 1 : '元').'年' if $t0;
の「 if $t0」も削除し忘れだな、ゴメンチャイ
2019/09/22(日) 16:19:32.48ID:iYBBHKU1
https://github.com/systemd/systemd/blob/82d1264048a3768fb8238387810f78c5d3912058/src/journal/journalctl.c#L2405-L2461
このif elseの羅列をリファクタリングしてください(´・ω・`)
2019/09/22(日) 17:24:37.46ID:W3ewN8v1
無駄に否定演算子で分かりにくくしている
if (!arg_reverse)
r = sd_journal_next_skip(j, 1 + after_cursor);
else
r = sd_journal_previous_skip(j, 1 + after_cursor);
2019/09/22(日) 17:45:39.81ID:vTpi5vA1
>>544
http://hengband.es.land.to/hengband-1.7.0-svn/

このあたりのspells1.cのproject_fのほうが豪華だよ
2019/09/22(日) 18:17:09.14ID:yzO2ACAf
>>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";
}
2019/09/22(日) 20:58:52.87ID:Pb++lLAf
お題: マイドキュメントにある全てのファイルの更新日時を取得し、曜日ごとに平均時刻を集計せよ。
549デフォルトの名無しさん
垢版 |
2019/09/22(日) 21:11:37.57ID:PDMeYfrK
マイドキュメントがなかった
2019/09/22(日) 21:23:02.16ID:Pb++lLAf
お題: あるフォルダにある全てのファイルの更新日時を全て同じ日時にリセットせよ。
2019/09/22(日) 21:30:08.53ID:WdPSTicU
>>521-523 ruby 2.5.5
https://ideone.com/RLhbll
・令和対応はRuby 2.6.3から
2019/09/22(日) 21:35:34.35ID:rZK31NHQ
※未来の日時にするとMakefileなどで不具合の原因になるかもしれないので、やめよう。必ず過去の日付で。
2019/09/22(日) 21:40:33.36ID:2VFOPinw
>>1
◆T6も書き込み禁止
2019/09/22(日) 22:00:19.44ID:rZK31NHQ
>>553
カレンダー苦手?
そりゃごめんね。誰でも解けるような問題解いて面白い? もしかして
2019/09/22(日) 22:02:04.64ID:35++XhB6
とりあえずNGにした
2019/09/22(日) 22:03:45.82ID:35++XhB6
うっかり回答しないように連鎖にしとく方がいいか
2019/09/22(日) 22:23:23.82ID:W3ewN8v1
>>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
2019/09/22(日) 22:24:24.30ID:W3ewN8v1
スルーだったか
2019/09/22(日) 22:44:17.87ID:rZK31NHQ
お題: 自分のプログラムファイルが何バイトかを表示せよ。
2019/09/22(日) 22:48:43.53ID:Yf8464Y3
>>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
2019/09/22(日) 22:50:50.35ID:JOdgUuSI
>>548
馬鹿っぽ
2019/09/22(日) 22:53:39.99ID:JOdgUuSI
蟻人間、プログラミングに興味を持ち始めた中学生臭がすごい
2019/09/22(日) 23:00:26.05ID:rZK31NHQ
>>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;
}
2019/09/22(日) 23:03:43.50ID:rZK31NHQ
>>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;
}
2019/09/22(日) 23:10:48.88ID:Yf8464Y3
>>559 Perl5

print -s $0, "bytes\n";

実行
~ $ perl 15_559.pl
25bytes
2019/09/22(日) 23:25:59.86ID:35++XhB6
>>514 Pharo/Squeak Smalltalk

| suffixes fn |

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' "
2019/09/22(日) 23:32:48.92ID:Yf8464Y3
>>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;
 }
}
2019/09/23(月) 00:23:07.10ID:JAc5gnVl
>>548
出題の狙い。犯罪捜査において被疑者または関係者の生活パターンを知りたいときに、パソコンのファイルの日時の統計のデジタル鑑識により、パソコンの使用実態が類推可能であることを示すものである。
2019/09/23(月) 00:28:46.25ID:GyCF+Do4
出勤とか寝る時間があまり変わらないという仮定で
同一人物の疑いがある2つのコテハンを
数百スレ分から時間別書き込み頻度から検証したことがあるが
それにくらべると得られる情報少なすぎて草
2019/09/23(月) 00:30:37.56ID:iF+DbCXr
>>568
馬鹿っぽ
2019/09/23(月) 01:01:29.40ID:ZSRjXCoe
>>568
朝と夜に作ったファイルの平均は昼になるし
ダウンロードした大規模なOSSのアーカイブを展開した物とか入っているんで
曜日ごとの平均時刻じゃー何の傾向も分かりません
2019/09/23(月) 01:43:06.73ID:ZSRjXCoe
>>567
そうじゃねぇだろ、file systemのmtimeはUTCベースなのに
わざわざlocaltimeでTZ=JST_9の日時に変換してから
時分秒だけTime::Pieceに食べさせるから
GMTとして解釈され9時間ずれたんだよ。
それを回避するためTZ環境変数にUTCを設定するとは
何たる尻の青い、くちばしの黄色い、まだ駆け出しの青二才、未熟者
573デフォルトの名無しさん
垢版 |
2019/09/23(月) 04:00:12.20ID:Sp7ybd6s
>>559 Common Lisp
https://ideone.com/idfFJM (sbcl)
https://ideone.com/8G7hUD (clisp)

ideoneは、sbclの場合は compile-file で作成したファイルを実行しているらしく
結果が異なっているのはそのため
2019/09/23(月) 12:05:34.14ID:Pxp3zDR1
>>548
C++/Win32 模範解答。
https://gist.github.com/katahiromz/63c00d6c670370d7602fcd991fdc0eba
2019/09/23(月) 12:49:49.08ID:iF+DbCXr
模範解答(汚ねえスパゲティ)
576デフォルトの名無しさん
垢版 |
2019/09/23(月) 13:54:34.61ID:2RLjyW/B
>>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
577デフォルトの名無しさん
垢版 |
2019/09/27(金) 01:42:52.78ID:/3CUbuCi
>>521
Kotlin
https://paiza.io/projects/OrRiee2xfpa7RKGGYfpyfQ
578デフォルトの名無しさん
垢版 |
2019/09/27(金) 02:44:56.39ID:/3CUbuCi
>>522
Kotlin
https://paiza.io/projects/saSW2aaTiVigsU_14uCc-g
579デフォルトの名無しさん
垢版 |
2019/09/27(金) 02:50:14.35ID:/3CUbuCi
>>550
シェルスクリプト (find, touch コマンド使用)

2019/09/27 02:48:00 に合わせる場合

#!/bin/sh
find あるフォルダ -type f -exec touch -t 201909270248.00 {} \;
580デフォルトの名無しさん
垢版 |
2019/09/27(金) 19:49:32.99ID:jf7tgLq0
>>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}
581デフォルトの名無しさん
垢版 |
2019/09/27(金) 19:57:07.16ID:jf7tgLq0
>>580をコピペで実行するときは、`の後の半角空白を削除しないとエラーになる。
2019/09/27(金) 21:29:22.88ID:vBAnAZ37
お題:リスト等の重複する要素を削除し、大きい順に並び替えよ
[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
2019/09/27(金) 22:41:14.90ID:kWPPTdrf
>>582 Ruby

p [3, 1, 4, 1, 5].uniq.sort_by(&:-@)

# => [5, 4, 3, 1]
584デフォルトの名無しさん
垢版 |
2019/09/27(金) 23:07:29.28ID:Z4UqEtTG
>>582 javascript
[...new Set([3, 1, 4, 1, 5])].sort().reverse()
2019/09/28(土) 00:13:52.50ID:OLAr2jSy
>>582 Pharo/Squeak Smalltalk

#(3 1 4 1 5) asSet sorted: #> "=> #(5 4 3 1) "
2019/09/28(土) 00:23:41.09ID:gcUBCYXO
>>582 Perl5 二回答

%h = map{$_=>1} qw(3 1 4 1 5);
@a = sort{$b<=>$a} keys %h;
print "@a\n";

use List::Util 1.45 'uniq';
@a = uniq sort{$b<=>$a} qw(3 1 4 1 5);
print "@a\n"


実行結果、いずれも
~ $ perl 15_582.pl
5 4 3 1
587デフォルトの名無しさん
垢版 |
2019/09/28(土) 00:52:45.19ID:HcOq9X6n
>>568
それだったら曜日毎の1時間毎のファイル数でグラフにするとかしないと分かりづらいのではないか?

ああ。そういうお題作ればいいか。
588デフォルトの名無しさん
垢版 |
2019/09/28(土) 01:09:55.39ID:HcOq9X6n
お題: 指定のディレクトリ以下にある全てのファイルの更新日時を取得し、曜日毎、及び時間毎にしてグラフにして出せ。

これは同じ曜日の同じ時間で更新されているファイルのカウントということね。例えば今週と先週の土曜日の7:00代の更新ファイルが一つづつあれば土曜日7時代のカウントが2になる。
で、グラフにする時は表示方法はなんでもいいので例えばテキストでアスタリスク2個で出す。(後でこちらでもプログラム作るのでそれ参考にしてもいい)。
ディレクトリの指定方法は普通なら引数での指定が良いだろうけどプログラムに埋め込んでも標準入力やファイルから読み込んでも何でもいい。それはこのお題では肝心な事ではないので。
589デフォルトの名無しさん
垢版 |
2019/09/28(土) 02:06:50.36ID:63IK4172
それだったらファイル、ディレクトリ操作は除外してランダムに日時発生させるとかでいいだろ
機種依存するので
ランダム生成は依存しない
590デフォルトの名無しさん
垢版 |
2019/09/28(土) 03:07:13.28ID:HcOq9X6n
>>588
作った。

Kotlin
https://paiza.io/projects/8uUpDL9CaEZepG8gD2vV0A
2019/09/28(土) 03:08:06.06ID:HcOq9X6n
>>589
592デフォルトの名無しさん
垢版 |
2019/09/28(土) 03:10:19.21ID:63IK4172
unixタイムとかで、日時と整数は一対一対応してるだろ
ランダム生成で日時は作れる
593デフォルトの名無しさん
垢版 |
2019/09/28(土) 03:15:41.26ID:HcOq9X6n
>>592
いや、そうじゃなくて >>589 は何番のレスに対するレスなの?
594デフォルトの名無しさん
垢版 |
2019/09/28(土) 03:30:16.66ID:63IK4172
何番と限らず日時と整数は一対一できるから日時が関係するあらゆる問題
595デフォルトの名無しさん
垢版 |
2019/09/28(土) 03:58:16.37ID:HcOq9X6n
>>594
いや、 >>589 は何かを読んだ結果書いたんでしょ? 何を読んで書いたの?
596デフォルトの名無しさん
垢版 |
2019/09/28(土) 04:47:52.20ID:HcOq9X6n
>>588
もう一つ作った。

Perl
https://paiza.io/projects/snJD7lMN-gazmd2EQdDb1Q
2019/09/28(土) 10:58:14.32ID:bVbqLRNA
>>582
@Mathematica

deleteDuplicatesSort[lst_] := lst //
 DeleteDuplicates //
 Sort[#, Greater] & ;

In[1] := deleteDuplicatesSort[{3, 1, 4, 1, 5}]
Out[1] = {5, 4, 3, 1}


# Mathematica のカーネルがいつの間にか無償開放されてた!
#
# 「「Mathematica」や“Wolfram|Alpha”の核「Wolfram Engine」が開発者向けに無償開放」
# https://forest.watch.impress.co.jp/docs/news/1186454.html
2019/09/28(土) 15:09:30.05ID:E6lKnilk
C++標準のファイルシステムでは、パスは取れるが、時間を取得する関数がないっぽい。
2019/09/28(土) 15:18:04.57ID:E6lKnilk
あぁ、あったわ。C++17で入ったからまだ不明瞭だ。自分にとって。
2019/09/28(土) 15:36:35.57ID:E6lKnilk
>>559
http://coliru.stacked-crooked.com/a/5280874347a70de8
C++。C++17がいる。結構サクッとかけたな。
2019/09/28(土) 16:35:23.18ID:E6lKnilk
>>548
https://ideone.com/AWfTOd
C++。マイドキュメントの列挙だけで力尽きた。ぐはぁ・・・。
602デフォルトの名無しさん
垢版 |
2019/09/28(土) 21:56:43.99ID:yaf8uxdw
>>588
PowerShell

$path = [Environment]::GetFolderPath(5)
$all = ls $path -Recurse |? {!$_.PSIsContainer} |% {$_.LastWriteTime}
$max = [Math]::Max(10, ($all | group DayOfWeek, Hour | measure Count -Max).Maximum)

"時" + (("日月火水木金土" -split "") -join "|".PadRight(9))
"--+" + ("-" * 10 + "+") * 7

$y = $all | group Hour -AsHashTable
0..23 |% {
if ($y[$_]) {
$x = $y[$_] | group {[int]$_.DayOfWeek} -AsHashTable
} else {
$x = @()
}
$line = "{0,2}" -f $_
0..6 |% {
$n = ($x[$_].Count * 10 + [int]$max / 2 - 1) / $max
$line += "|" + ("*" * $n).PadRight(10)
}
$line + "|"
}
2019/09/29(日) 02:59:00.33ID:8mEp/ii8
お題: 地球上の2地点を緯度・経度で指定すると、(球面上の)直線距離を求めてくれるプログラム。

地球がほぼ球体であることを仮定してもよい。
2019/09/29(日) 03:04:31.30ID:8mEp/ii8
ロンドンからニューヨーク。
北京から台湾。
ニュージーランドからトルコ。
2019/09/29(日) 03:16:51.58ID:8mEp/ii8
参考に: https://keisan.casio.jp/exec/system/1257670779
2019/09/29(日) 03:55:31.74ID:8mEp/ii8
ヒント: 度をラジアンに変換。dの公式に代入する。緯度経度はグーグル マップで調べる。コサインの逆関数はアークコサイン。
2019/09/29(日) 09:16:55.67ID:GG+B8frl
数学の問題どすな

地球半径をR、緯度をΦ、経度をΘとすると
地表上の点Pの座標(x,y,z)は

(x,y,z)=R(cosΦcosΘ,cosΦsinΘ,sinΦ)
(R,0,0)は赤道上の東(西)経0度の地点
(ギニア湾 ガーナ アクラ沖約600km)

(0,R,0)も赤道上の東(西)経180度の地点
(太平洋 ナウル島から約1450km)

二地点の座標をベクトルに見立て
内積をR^2で割って逆余弦関数に
与えた結果にRを掛けたモノが答え
2019/09/29(日) 09:23:23.08ID:GG+B8frl
ちょい間違った
(0,R,0)は東経90度の赤道上の太平洋上の地点で
スリランカ・コロンボから約1360kmの地点
(-R,0,0)がナウル島から1450kmの地点
(0,-R,0)はガラパゴス諸島から20〜25km程度の
太平洋上の地点
2019/09/29(日) 09:25:23.90ID:GG+B8frl
表計算ソフトを使うのが効率的ね
2019/09/29(日) 10:48:24.98ID:UzLHlBWt
地球を球に近似する時点でナンセンス。解く価値無し
2019/09/29(日) 11:06:06.70ID:VkSI6pCv
仮定してもよい なんだから球に近似しないで書けばいい話じゃね?
2019/09/29(日) 12:00:03.35ID:bEy1wMJX
>>603 大円距離の問題なんだから、距離が一番短くなる2点間の長さとすべき、
great-circular distance

>>605 の数値を使い
地球の半径を 6378.137 km
2点の緯度経度 
139.74477,35.6544 ,
39.8261, 21.4225

Python

https://ideone.com/qp1Fer

答え  9,491.28 km
2019/09/29(日) 12:03:30.83ID:bEy1wMJX
>>612 2点間の経度緯度 の間違い
2019/09/29(日) 12:33:05.14ID:mYJaebwB
>>603-6

use Math::Trig qw{deg2rad acos};
($lat1, $long1) = map{deg2rad $_} (51.507448,-0.1287243); # ロンドン ウエストミンスター チャールズ1世騎馬像
($lat2, $long2) = map{deg2rad $_} (40.712775,-74.005973); # ニューヨークCity Park Hall(市庁舎)
$theta = $long1 - $long2;
$dist = sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($theta);
$dist = 6378.137 * acos($dist);
printf "%.2f[Km]\n", $dist;

実行結果
~ $ perl 15_604.pl
5576.40[Km]

cf.)
https://www.geodatasource.com/developers/perl
2019/09/29(日) 12:34:14.75ID:mYJaebwB
>>614 アンカーしくった
>>603-606 だた…orz
616デフォルトの名無しさん
垢版 |
2019/09/29(日) 19:44:37.93ID:aa2vZ2v/
お題:8queenで面白いパターンを見つけよ。
617デフォルトの名無しさん
垢版 |
2019/09/29(日) 23:06:17.59ID:OI4EUI6E
お題:もっと面白いお題を考えよ。
618デフォルトの名無しさん
垢版 |
2019/09/29(日) 23:45:54.79ID:m0Odf/xn
>>588 C
https://ideone.com/472wFP
2019/09/29(日) 23:51:59.00ID:k4CvVXqN
>>616
面白いってひどく曖昧だな
2019/09/30(月) 02:22:51.44ID:i5LhrskR
お題: サイズ15x15の空白マス('_')がある。黒マス('#')をいくつかランダムに置いて、空白マスが縦または横向きに5マス連続に並ばないようにしたい。ただし、
1. なるべく早く黒マスを配置せよ。
2. 実行のたびに常にランダムにまんべんなく配置せよ。
3. 黒マスが縦または横に隣り合ってはいけない。
4. (ア)全て並べる、そして(イ)並びが正しいか検証する、の(ア)と(イ)を15回繰り返してかかる時間を実測せよ。
621デフォルトの名無しさん
垢版 |
2019/09/30(月) 09:19:26.74ID:eZfyppwl
>>617
考えた。

でもこれは発表しない。誰にも教えない。墓まで持っていく。
2019/09/30(月) 10:08:08.98ID:4XC9Ks9U
>>620
馬鹿っぽ
2019/09/30(月) 16:46:23.79ID:ypiuCBLp
>>620
https://ideone.com/FggLLg
C++。ふえ〜。円の当たり判定しようと思ったのに、うごかないよ〜。
コード間違ってるのか、数学ぶっ壊れたのかわからん。
デバッグしてくれる人募集。

コード間違ってるんやったら、俺の認識限界がおかしいな。
2019/09/30(月) 17:15:46.44ID:ypiuCBLp
>>623
https://ideone.com/Q1X602
C++。代替え案。実行ごとにパターンが変わって敷き詰めた一例。
変わってないと思うなら0点のパターンを見てみよう。
2019/09/30(月) 17:20:40.68ID:ypiuCBLp
じっそうじかんは多分2時間以内だ。
2019/09/30(月) 17:55:07.40ID:tHR3tKyN
>>624
代替案(だいたい-あん)と言いなさい
2019/09/30(月) 18:25:02.21ID:ypiuCBLp
>>626
あー。すっかり忘れてた。。。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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