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

レス数が1000を超えています。これ以上書き込みはできません。
2021/06/19(土) 00:02:57.84ID:MQWrKSb7
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part19
https://mevius.5ch.net/test/read.cgi/tech/1606662245/
946デフォルトの名無しさん
垢版 |
2022/11/07(月) 20:48:13.34ID:OXo72DE3
>>940
Java
https://paiza.io/projects/cuy0WENv4Ghi-7jq9eTIbw
2022/11/07(月) 20:49:01.52ID:FonngYyy
>>943
Pythonではprintは組み込み関数だな
他は知らんけど
2022/11/07(月) 21:06:30.94ID:Fdh4LiCB
組み込み関数はライブラリじゃないと
ライブラリと呼ばない言語なら何でもありか
2022/11/07(月) 21:08:54.69ID:Fdh4LiCB
C言語上のただのintの乗算でもライブラリが必要な環境もあるわけだけど
2022/11/07(月) 21:34:22.19ID:q2YPtCXX
アルゴリズムが見たいのでしょうね
2022/11/07(月) 21:35:14.79ID:kmERiYaX
まあ今時組込とかでもなきゃintの乗算でライブラリ呼び出す環境もあまりないけどそもそも入出力はライブラリ任せだからねぇ
2022/11/07(月) 23:30:13.24ID:3GzmFPX6
>>943
Haskell ?
だとsumやgcdはpreludeで標準関数扱い
基本import〜が必要ない奴は標準扱い
953デフォルトの名無しさん
垢版 |
2022/11/08(火) 01:53:36.92ID:s644Ul/+
>>940
Kotlin

https://paiza.io/projects/93xp9A_EpkG2QbWBuOvAoQ

分子と分母を別々に保持して足し続けただけ。約分はしていない。
2022/11/08(火) 21:45:51.73ID:dCnZkmaL
>>940
https://ideone.com/zNHUB9
・「ただし」以下は無視した回答
function [n, d] = f(n)
[n, d] = rat(sum(1./(1:n)), 1e-7);
end
2022/11/08(火) 21:46:18.88ID:dCnZkmaL
>>940 octave
https://ideone.com/zNHUB9
・「ただし」以下は無視した回答
function [n, d] = f(n)
[n, d] = rat(sum(1./(1:n)), 1e-7);
end
956デフォルトの名無しさん
垢版 |
2022/11/09(水) 00:46:04.53ID:oWTDq5DR
>>940 octave
https://ideone.com/zNHUB9
・「ただし」以下は無視した回答
function [n, d] = f(n)
[n, d] = rat(sum(1./(1:n)), 1e-7);
end
957デフォルトの名無しさん
垢版 |
2022/11/09(水) 00:46:10.95ID:oWTDq5DR
>>940 octave
https://ideone.com/zNHUB9
・「ただし」以下は無視した回答
function [n, d] = f(n)
[n, d] = rat(sum(1./(1:n)), 1e-7);
end
958デフォルトの名無しさん
垢版 |
2022/11/09(水) 01:55:16.87ID:QvIAsso6
なぜ同じ書き込みが4つもある?
2022/11/09(水) 02:02:28.03ID:Ewgu9c/a
お題スレの7不思議に加えよう
960デフォルトの名無しさん
垢版 |
2022/11/09(水) 12:49:26.26ID:AHjhHUHj
お題
入力した文字列を以下の4種類に分けた文字列を作成する関数を作成してください
・アルファベット大文字
・アルファベット小文字
・数字
・それ以外の文字
961デフォルトの名無しさん
垢版 |
2022/11/09(水) 18:55:40.68ID:dDwxEUkd
Array.from(input).filter(c=>c.match(/[A-Z]/)).join("")
+ Array.from(input).filter(c=>c.match(/[a-z]/)).join("")
+ Array.from(input).filter(c=>c.match(/[0-9]/)).join("")
+ Array.from(input).filter(c=>c.match(/[^A-Za-z0-9]/)).join("")
2022/11/09(水) 20:05:26.68ID:1g3d+RJJ
>>960 octave
https://ideone.com/SHPVub
function c = f(s)
u = isstrprop(s, 'upper');
l = isstrprop(s, 'lower');
d = isstrprop(s, 'digit');
c = {s(u) s(l) s(d) s(~(u | l | d))};
end
2022/11/10(木) 01:00:36.16ID:UXFdZVAF
>>960
Haskell
https://ideone.com/jMHNnq

isUpper = flip elem [ 'A' .. 'Z' ]
isLower = flip elem [ 'a' .. 'z' ]
isNum = flip elem [ '0' .. '9' ]
isOthers = id
. all not
. zipWith ( $ ) [ isUpper, isLower, isNum ]
. repeat

sieve str = [ filter cond str |
cond <- [ isUpper, isLower, isNum, isOthers ] ]

testStr = "foldl1 :: Foldable t => (a -> a -> a) -> t a -> a"

main = mapM_ print $ sieve testStr
964デフォルトの名無しさん
垢版 |
2022/11/10(木) 01:50:38.82ID:j8kXq8l6
>>547
Java
https://paiza.io/projects/Dxe5e0qmmy73WWNdzTvCbg
965デフォルトの名無しさん
垢版 |
2022/11/10(木) 02:29:28.73ID:kjI8mJgQ
>>961
俺も正規表現でやりたいけどこっちのほうが5倍速かった…
コンパイル言語に比べたら目くそ鼻くそだがこんだけ違うと考えちゃうな
const str = 'aA0!bB1@cC2#dD3$eE4%'.repeat(500);
let oomoji = [], komoji = [], suuji = [], sonota = [];
for (const c of str) {
let cp;
switch (true) {
case 65 <= cp && cp <= 90:
oomoji.push(c);
break;
case 97 <= cp && cp <= 122:
komoji.push(c);
break;
case 48 <= cp && cp <= 57:
suuji.push(c);
break;
default:
sonota.push(c);
}
}
[oomoji, komoji, suuji, sonota] = [oomoji, komoji, suuji, sonota]
.map(a => a.join``);
// console.table({oomoji, komoji, suuji, sonota});
966デフォルトの名無しさん
垢版 |
2022/11/10(木) 02:37:16.98ID:kjI8mJgQ
>>965
5倍じゃなくて3倍だったわ
perf.linkで測ったコード、
let cp = c.codePointAt();

let cp;
になってたわ寝ぼけてた
2022/11/10(木) 07:33:44.51ID:oQpocXYl
>>960
ASCII のみで良い?
それとも Unicode?
2022/11/10(木) 07:56:41.06ID:3FlvzqxM
>>960 Ruby

-> s { s.scan(/[A-Z]+|[a-z]+|\d+|[\W_]+/) }
2022/11/10(木) 14:11:20.86ID:oQpocXYl
>>960
Kotlin

https://paiza.io/projects/Qfx9ljGCsICVDui8fcn-0A

Unicodeで作った。サロゲートペアの文字もちゃんと扱える。
判別には Java の Character クラスのメソッドを利用している。
これだといわゆる全角の数字は数字扱いになるが漢数字は数字と分類してくれない。
ローマ数字はアルファベット大文字扱い。
日本語の「あ」とかもアルファベットとして扱われるが大文字でも小文字でもないのでそれ以外の文字に追加されるようにした。
コントロールコードは \uXXXX 形式になるようにした。
970デフォルトの名無しさん
垢版 |
2022/11/10(木) 18:57:30.40ID:3zaWz6R+
>>960
PowerShell

function StrClassify($s)
{
  "\P{Lu}", "\P{Ll}", "\P{N}", "[\p{Lu}\p{Ll}\p{N}]" |% {$s -creplace $_}
}

StrClassify "Κωνσταντινούπολιςは1453年にİstanbulと改称された。`n"
StrClassify "塩化銅(Ⅱ)は水中で CuCl₂ ⇄ Cu²⁺ + 2Cl⁻ のように電離する。"

[実行結果]
Κİ
ωνσταντινούπολιςstanbul
1453
は年にと改称された。

CCCC
ulul
Ⅱ₂²2
塩化銅()は水中で ⇄ ⁺ + ⁻ のように電離する。
971デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:35:16.34ID:V5vZiHvW
>>944をやってみたらPythonで300くらいでオーバーフローになった
分子と分母をべつべつに計算してp/qだったとすると
int(10^n * p / q ) % 10 が求める答えのはずだが、この計算ができなかった
972デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:44:38.28ID:V5vZiHvW
ここで問題変更でp/qの小数点n桁目を求める問題にすればいいか
オーバーフローしないように×10ずつして整数部分は無視していけば整数演算の範囲内にできるか
忘れたがユークリッド互除法みたいな?
973デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:50:26.16ID:m98zu82a
input.replace(/[^A-Z]/g,"")
+ input.replace(/[^a-z]/g,"")
+ input.replace(/[^0-9]/g,"")
+ input.replace(/[A-Za-z0-9]/g,"")
974デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:51:12.57ID:m98zu82a
[/[^A-Z]/g, /[^a-z]/g, /[^0-9]/g, /[A-Za-z0-9]/g]
.map(r => input.replace(r,"")).join("")
975971
垢版 |
2022/11/10(木) 21:10:50.60ID:V5vZiHvW
>>944オーバーフローせずにできた

https://ideone.com/EzCu8k
2022/11/10(木) 21:27:26.89ID:p27a51fr
>>944
Haskell

https://ideone.com/2tUIFo

import Data.Ratio

hnn n = flip mod 10 $ truncate $ (* ( 10^n)) $ sum $ map recip [ 1%1..n%1 ]

main = print $ hnn 300
977デフォルトの名無しさん
垢版 |
2022/11/10(木) 21:45:52.91ID:KPTSzoDK
お題 小数点第n位を求めるプログラムを作成せよ
2022/11/10(木) 21:58:11.94ID:JknzoKCK
>>977
何の?
2022/11/11(金) 12:27:18.79ID:eQP0gwqb
ルート4の
2022/11/11(金) 13:33:07.98ID:XogJxnoW
そんなむず過ぎるお題は過疎るのだ却下
981デフォルトの名無しさん
垢版 |
2022/11/11(金) 18:36:58.77ID:Jm4DMnci
>>978
入力された実数
982デフォルトの名無しさん
垢版 |
2022/11/11(金) 20:10:51.65ID:+Uq9lyYZ
(x*10**n)%10
983デフォルトの名無しさん
垢版 |
2022/11/12(土) 01:53:40.01ID:Y/i2pfZ3
お題
配列データと、同じ長さの確率の配列(合計値1)が与えられた時に、対応する確率で配列からデータを出力せよ


aa,bb,cc
0.4,0.5,0.1

→aa 40%, bb 50%, cc 10%で出力
2022/11/12(土) 08:50:36.22ID:yCEPOpQl
>>983 Ruby

a = %w[aa bb cc]
p = [0.4, 0.5, 0.1]
f = -> (a, p) { r = rand; a[(0..a.size-2).find{ r < p[0.._1].sum } || a.size - 1] }
10.times{ print f[a, p] }

# => aabbccbbaaaaaabbbbbb
2022/11/12(土) 10:10:20.03ID:g2vYgSbJ
>>983
Haskell
https://ideone.com/UErkR7

import System.Random
import Data.List

randomDbls :: StdGen -> [ Double ]
randomDbls= randomRs (0,1)

chooseItem is ws r = let
folder a b = a : map ( + a ) b
selecter r ( i, ( f, t ) ) = f <= r && r < t
ts = foldr folder [ ] ws
fs = 0 : ts
ifts = zip is $ zip fs ts
in fst $ head $ filter ( selecter r ) ifts

main = do
rds <- ( return . randomDbls ) =<< getStdGen
print $ map (chooseItem ['A'..'C' ] [0.4,0.5,0.1] ) $ take 100 rds
2022/11/12(土) 10:19:35.32ID:uOtU06vW
>>983 octave
https://ideone.com/mIKDyu
f = @(a, r) a(rand < cumsum(r))(1);
2022/11/12(土) 14:34:06.57ID:Q9bJaddO
>>983 ocaml
https://ideone.com/aDR0Do
let (<<) f g x = f (g x)
let cumsum =
List.rev << fst << List.fold_left (fun (a, s) f -> s +. f :: a, s +. f) ([], 0.)
let f xs =
let r = Random.float 1. in
fst << List.find ((<) r << snd) << List.combine xs << cumsum
2022/11/12(土) 16:47:04.36ID:We3Ba5Li
>>983
コレでよかった
Haskell
https://ideone.com/WtPXzw

import System.Random

randomDbls :: StdGen -> [ Double ]
randomDbls= randomRs (0,1)

chooseItem (i:is) (w:ws) r | r < w = i
chooseItem (i:is) (w:ws) r = chooseItem is ws ( r - w )

main = do
rds <- ( return . randomDbls ) =<< getStdGen
print $ map (chooseItem ['A'..'C' ] [0.4,0.5,0.1] ) $ take 100 rds
2022/11/12(土) 17:19:40.29ID:MirHjvCf
>>983
別名法とかいうアルゴリズム
https://ideone.com/J0p12R
2022/11/12(土) 19:13:20.80ID:MirHjvCf
https://ideone.com/8utmEg
元からあったコードをちょっといじったんだけど変換ミスがあった
991デフォルトの名無しさん
垢版 |
2022/11/13(日) 18:45:40.25ID:zjrUNZaB
>>983
Kotlin

https://paiza.io/projects/dh1A84MN5OxLQkw7r2yL7Q
2022/11/13(日) 19:01:26.14ID:ZCYlhUwL
次スレ
プログラミングのお題スレ Part21
https://mevius.5ch.net/test/read.cgi/tech/1668333636/
993デフォルトの名無しさん
垢版 |
2022/11/15(火) 08:06:01.58ID:XL64sJsG
うめ
2022/11/15(火) 09:22:13.74ID:x0rg5fHd
お題:1辺がn文字の正四角形を表示せよ
1 <= n <= 8 とする
2022/11/15(火) 10:16:55.01ID:V1sKjJZc
haskell

https://ideone.com/4Kd3el

sqStr n = ""
++ "\x250f" ++ r "\x2501" ++ "\x2513" ++ "\n"
++ r ( "\x2503" ++ r "\x2001" ++ "\x2503" ++ " \n" )
++ "\x2517" ++ r "\x2501" ++ "\x251b" ++ "\n"
where r = concat . replicate ( n-2 )

main = putStr $ sqStr 10
2022/11/15(火) 20:16:12.10ID:r20LvnA2
>>994 octave
https://ideone.com/k9cAWw
function s = f(n)
s = repmat('#', n);
s(2:end-1, 2:end-1) = ' ';
end
997デフォルトの名無しさん
垢版 |
2022/11/17(木) 21:39:57.15ID:BbSHYj/y
うめ
998デフォルトの名無しさん
垢版 |
2022/11/17(木) 21:40:03.49ID:BbSHYj/y
うめ
999デフォルトの名無しさん
垢版 |
2022/11/17(木) 21:40:08.22ID:BbSHYj/y
うめ
1000デフォルトの名無しさん
垢版 |
2022/11/17(木) 23:04:00.66ID:W9+RkUIs
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 516日 23時間 1分 3秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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