X



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

0001デフォルトの名無しさん
垢版 |
2023/08/03(木) 13:52:13.20ID:/xW45k0z
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part21
https://mevius.5ch.net/test/read.cgi/tech/1668333636/
0332デフォルトの名無しさん
垢版 |
2024/04/18(木) 07:30:10.21ID:PYBA8OB3
パソロジカルな三角形をパラメトライズして面積を積分する検証はどう?
数式計算での正確な値
Heronで面積計算した時の数値積分
Accurateで面積計算した時の数値積分
を比べるのがフェアかなぁと
0333デフォルトの名無しさん
垢版 |
2024/04/18(木) 07:34:09.77ID:PYBA8OB3
> 200ビットで計算したほぼ正確な値3.27490470056059e-07
この例だけ見るとAccurate Δの方が優れているように見えるので

>>331の様なチェリーピックはどちらの計算式でも出来るので平均的に近似が近い方が精度的に優れているかと
0334デフォルトの名無しさん
垢版 |
2024/04/18(木) 22:41:59.70ID:y7NBfn6/
>>331
その通り。そして、(a, b, c) = (10000.1, 10000.2, 20000.3)とすれば、正しい面積は0なのに
Heron's Δ' = 2.69745899635295とAccurate Δ = 1.34872949817647は両方とも大間違いになる。
この場合のようにHeron's Δ'での問題がAccurate Δで改善されないだけでなく、>>331の引用の
場合のようにHeron's Δ'では結果的に問題ないのにAccurate Δでは新たな問題が生じてしまうのは、
参考文献の11ページで述べられた

 An algorithm stood convicted of numerical instability if it could be replaced by
 a new algorithm at least about as fast and accurate as the old for all data,
 and good for all data for which the old algorithm was bad.

 すべてのデータに対して旧アルゴリズムと少なくとも同じくらい高速かつ正確であり、
 かつ旧アルゴリズムが悪くなるすべてのデータに対して良くなる新アルゴリズムによって
 置き換えることができるとしたら、旧アルゴリズムは数値的に不安定と判定される。

という判定条件を満たさないから、Accurate Δは改良版としての適性を欠く。

>>333
その例では有効桁数がHeron's Δ'は0桁、Accurate Δは1桁しかなく、どちらの品質も絶対的に
劣悪で、それらの間の相対的な優劣に大した意味はない。

そもそも針のように異様に細長い三角形が重箱の隅をつつくような話で、普通はそんな場合は
想定しなくても良く、ヘロンの公式で充分。そこを敢えてつつくなら、ヘロンの公式だけでなく
改良式もぼろが出てしまうだけ。
0335デフォルトの名無しさん
垢版 |
2024/04/18(木) 22:55:38.47ID:n9UdHBZN
総合すると有効桁じゃなくて精度が2桁良いし実装上は大差ないから改良版を使う、と言う方が自然では?
0336デフォルトの名無しさん
垢版 |
2024/05/01(水) 12:56:47.83ID:nIC3qyB/
スレ落ちそうなのであげ
0338デフォルトの名無しさん
垢版 |
2024/05/01(水) 22:59:10.72ID:4hNncNW1
何でこんなに過疎化しちゃったのか。前に頻繁に出題していた人がいなくなったのか。
0340デフォルトの名無しさん
垢版 |
2024/05/02(木) 16:59:52.63ID:DPVqLIsI
>>338
お題が出尽くしたってことはあるんじゃないか?
過去のお題拾ってきてそれを投稿すればいいぐらいまでスレが成熟してしまったのでは?
034217
垢版 |
2024/05/02(木) 18:44:04.16ID:LxBZq7I4
>>340
なるほど。それをやるか。
034317
垢版 |
2024/05/14(火) 05:34:03.62ID:ou5vbzLn
じゃあ10年前のこのお題(URLを書くとNGになるようなので書かない)。

プログラミングのお題スレ Part4
115 :デフォルトの名無しさん:2014/06/21(土) 18:36:45.72 ID:/fMJIWig.net

お題:文字列Aを1回以上繰り返した文字列Bが与えられたとき
文字列Aを求める。ただしAの候補が複数ある場合は最短のものとする。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> a
123412312341231234123123412312341231234123 -> 1234123
oxoxoxoxoxoxoxoxxoxoxoxoxoxoxoxoxx -> oxoxoxoxoxoxoxoxx
0346 警備員[Lv.18]
垢版 |
2024/05/23(木) 14:16:50.64ID:zV267ZMC
あれ?どんぐりの都合か?URL書いてあると書けなくなったような?
0347 警備員[Lv.18]
垢版 |
2024/05/23(木) 14:17:56.56ID:zV267ZMC
URLの先頭のhを抜いて書いてみよう。

>>343
Kotlin

こちらは普通に自作したやつ。
ttps://paiza.io/projects/OYy-A5rfKg7RqLzv-DKMIA

こちらは正規表現使ってとても小さくなったやつ。
ttps://paiza.io/projects/jgmtMRDhKfcjYfGAglEl3g
0348デフォルトの名無しさん
垢版 |
2024/06/01(土) 10:16:34.91ID:hzaQXY32
お題: コロン区切りの時分秒の時刻が与えられるので時分秒をそれぞれ掛け算した結果を表示せよ

例:
04:05:06
120
0349デフォルトの名無しさん
垢版 |
2024/06/01(土) 11:08:12.83ID:hzaQXY32
お題: バイト列が与えられる。先頭から解析した場合にバイトが1だったら次の4バイトを読み込んで整数として出力し、バイトが2だったら次のバイトを0が来るまで読み込んで文字列として出力せよ

入力
1 1 0 0 0 2 65 66 67 0 1 128 0 0 0

出力
1ABC128
0352 警備員[Lv.19]
垢版 |
2024/06/02(日) 04:45:03.04ID:yi3OE76t
>>348
Perl

bash のコマンドラインから入力して実行(ワンライナー)

$ perl -ne 'if(/(\d+):(\d+):(\d+)/){print $1*$2*$3,"\n"}else{print"入力エラー\n"}'
1:2:3
6
3:4:5
60
04:05:06
120
$
0354デフォルトの名無しさん
垢版 |
2024/06/03(月) 13:25:02.42ID:21u+58W3
>>348
Windows のPowershell 上で、Ruby の1-liner を使う

末尾の改行を削除して、: で分割して、
文字列を数値型に変換してから、全ての要素を掛ける。
%Q で、ダブルクォーテーションをエスケープする。つまり、split(":")

echo '01:2:09' | ruby -ne 'puts $_.chomp.split(%Q[:]).map(&:to_i).inject(:*)'

18
0356デフォルトの名無しさん
垢版 |
2024/06/07(金) 06:27:47.87ID:ZJzD8UbY
お題:引数sとnを取りシーザー暗号化を行う関数を作れ
sは平文、nはずらす文字数(負数可)、返り値は暗号化後の文字列
同様の関数で「Hello, World!」を暗号化し復号化せよ
0357デフォルトの名無しさん
垢版 |
2024/06/07(金) 09:04:03.36ID:tQi+9x5m
#! ruby

class String
def to_c(n)
if %r|^n|=~n
n=(n.sub(%r|^n|,"").to_i+26)%26
lb=("A".."Z").to_a.join
sb=("a".."z").to_a.join
la=lb[n..25]+lb[0..n-1]
sa=sb[n..25]+sb[0..n-1]
return self.tr(lb,la).tr(sb,sa)
else
return self
end
end
end

p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!"
p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!"
p "Hello,World!".to_c("s") #=>"Hello,World!"
p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!"
p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
0358デフォルトの名無しさん
垢版 |
2024/06/07(金) 09:04:13.66ID:tQi+9x5m
#! ruby

class String
def to_c(n)
if %r|^n|=~n
n=(n.sub(%r|^n|,"").to_i+26)%26
lb=("A".."Z").to_a.join
sb=("a".."z").to_a.join
la=lb[n..25]+lb[0..n-1]
sa=sb[n..25]+sb[0..n-1]
return self.tr(lb,la).tr(sb,sa)
else
return self
end
end
end

p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!"
p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!"
p "Hello,World!".to_c("s") #=>"Hello,World!"
p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!"
p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
0360デフォルトの名無しさん
垢版 |
2024/06/07(金) 23:24:01.54ID:KUK95Vnh
Haskell
範囲外の数値は平文字をそのまま返すこととした。

import Data.Char

cearsar n |(-26) <= n && n <= 26 = map (f n)
where
f x = chr.(+x).ord
cearsar _ = cearsar 0

sample:
ghci> cearsar 50 "Hello, World!"
"Hello, World!"
ghci> cearsar 3 "Hello, World!"
"Khoor/#Zruog$"
ghci> cearsar (-3) "Khoor/#Zruog$"
"Hello, World!"
0361デフォルトの名無しさん
垢版 |
2024/06/07(金) 23:28:58.71ID:KMptjexu
TA = [ * ?\x20 .. ?\x7E ]
TS = TA.join
def caesar( s, n ) s.tr( TS, TA.rotate( n ).join ) end

s = "Hello, World!"
p caesar( s, 0 ) #=> "Hello, World!"
p caesar( s, 1 ) #=> "Ifmmp-!Xpsme\""
p caesar( s, -1 ) #=> "Gdkkn+~Vnqkc "
p caesar( s, 20240607 ) #=> "Jgnnq.\"Yqtnf#"
p caesar( caesar( s, 20240607 ), -20240607 ) #=> "Hello, World!"
p caesar( 'HAL9000', 1 ) #=> "IBM:111"
03629
垢版 |
2024/06/11(火) 14:41:10.23ID:NjINqn/m
>>348 Perl5

($x = '04:05:06') =~ s/:/*/g;
print eval $x;
03639
垢版 |
2024/06/13(木) 14:34:57.00ID:XgNTPGgf
>>349
> 「バイトが1だったら次の4バイトを読み込んで整数として出力し、」
正直、意味がわからんかった

例で見ると
1 1 0 0 0 → 1
1 128 0 0 0 → 128
ということだが

1に続く4バイトを加算して出力するって意味だったのかいな
0365デフォルトの名無しさん
垢版 |
2024/06/13(木) 14:54:19.57ID:lNMgjwmg
>>363
出題者がエンディアンを知らなくて説明もなくリトル環境を前提にしてしまっている
エンディアンを知っている人たちは出題には書かれてないけど例よりリトル前提だと読み取ってこたえている
0366デフォルトの名無しさん
垢版 |
2024/06/13(木) 14:59:03.73ID:fAZ1qthZ
>>365
リトルエンディアンはビットが逆って事じゃ無いぞ

10 00なら
00 10だぞ
03689
垢版 |
2024/06/13(木) 17:03:39.85ID:XgNTPGgf
>>365
ああそういうことか「4バイトを読み込んで整数」と書いてあるのはそういう意味だったのか
ならわかるかも。
オレは4バイト一個一個が整数だと捉えて、それを「4バイトを読み込んで整数」とは何のこっちゃと?になってたわ
03699
垢版 |
2024/06/13(木) 17:07:01.55ID:XgNTPGgf
すまんね68系で育ったもんですぐ連想できなんだ
0370デフォルトの名無しさん
垢版 |
2024/06/14(金) 21:10:23.18ID:H7FTNa+g
>>367
例が間違えてるか説明が足りて無い

要は4バイトを読み込んでと説明してるが「一気に4バイト読み込む」とおかしくなる
1バイトずつ順に4バイトを読み込んでという説明なら例が腑に落ちる
0372 警備員[Lv.23]
垢版 |
2024/06/15(土) 16:15:42.96ID:h/vMPGM+
>>356
Kotlin

面倒なのでASCIIコード(0x20-0x7e)でしかシフトしないやつを作った。
まあでも Kotlin は Java 同様に内部でUnicodeで扱っているので平仮名とか漢字とか全然違う言語の文字とかも比較的楽に追加できると思う。

https://paiza.io/projects/5H9H1zSjDnVshGCf4JaQJg
0374デフォルトの名無しさん
垢版 |
2024/06/20(木) 17:43:48.64ID:0f6ktMCR
お題:迷路生成を様々な言語で

例:
C
https://ideone.com/a527mc
レスを投稿する


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