X



プログラミングのお題スレ Part20
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
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/
0005デフォルトの名無しさん
垢版 |
2021/06/19(土) 11:32:47.24ID:HedGQGNJ
部分解答可
1. クリップボードの内容を取得
2. 現在の日時を次のように出力する 2021/06/19/第3土曜日/10:19/
前スレ参照
#!/bin/sh
for num in "896" "967" "968" "972" "975" "977-982" "994" "996"
do
firefox $( echo '/5422666061/hcet/igc.daer/tset/ten.hc5.suivem//:sptth' | rev )$num
sleep 30
done
3. 現在の日時、キーワード、クリップボードの内容を1行にして指定のファイルに追記。キーワードはプログラム実行時にキーボード入力する。
4. 今日が第3土曜日なら指定の画像ファイルを表示
0006デフォルトの名無しさん
垢版 |
2021/06/19(土) 11:34:07.84ID:HedGQGNJ
解答例
#!/bin/sh
# 1
clipb=$(xclip -o)
# 2
day=$(date "+%e")
num=$(( ($day + 6) / 7 ))
today=$( date "+%Y/%m/%d/"第$num"$(date +%a)"曜日"/%H:%M/" )
# 3 キーボード入力した文字列を変数ahaに入れる
read -p "キーワードを入力してください:" aha
# trコマンドを使ってクリップボードにコピペした文章から改行文字\nを削除
copipe=$( echo "$today *$aha $clipb" | tr --delete '\n' )
# >>は追記、>は上書きしてしまうので注意
echo "$copipe" >> "$HOME/Documents/memo.txt"
# backディレクトリの中にmemoディレクトリを作成
# --parentsは指定の親ディレクトリbakが存在しない場合に作成してくれるオプション引数、mkdir -pでもOK
mkdir --parents "$HOME/Documents/bak/memo/"
cp --backup "$HOME/Documents/memo.txt" "$HOME/Documents/bak/memo/"
xdg-open "$HOME/Documents/memo.txt"
# 4 xdg-openは既定のアプリを起動するコマンド
if [ $( echo $today | grep "第3土曜日" ) ] ; then
xdg-open "$HOME/Pictures/image.jpg"
sleep 10 ; exit
fi
0008デフォルトの名無しさん
垢版 |
2021/06/21(月) 21:15:15.50ID:h4Y3M1Y8
0 と "n + 1" を任意に定義して自然数を作り、
足し算と掛け算を実装せよ

なお "n + 1" は次を満たすこと
・ n + 1 == m + 1 ⇒ n == m
・ n が自然数 ⇒ n + 1 は自然数
・ n が自然数 ⇒ n + 1 != 0
0009デフォルトの名無しさん
垢版 |
2021/06/22(火) 13:23:44.46ID:VRgeVVL3
お題
リストを受け取って、重複のないリストに分割してください

入力:[b,d,e,c,b,a,a,d,d,a]
出力:[a,b,c,d,e],[a,b,d],[a,d]
0010デフォルトの名無しさん
垢版 |
2021/06/22(火) 14:29:49.78ID:q0OZcNy5
「すいませーん パンください」
「なんだとー!パンクはダサくねえ!」
0011デフォルトの名無しさん
垢版 |
2021/06/22(火) 18:35:38.31ID:3KNNvFBI
>>9
Ruby
s = "b,d,e,c,b,a,a,d,d,a".split(",")
t = s.group_by{_1}.values.map{(_1 + [nil] * s.size).take(s.size)}.transpose.map{_1.compact}.reject{_1 == []}
p t

[["b", "d", "e", "c", "a"], ["b", "d", "a"], ["d", "a"]]
0013デフォルトの名無しさん
垢版 |
2021/06/22(火) 19:37:22.20ID:KgqIpy+v
>>9 Ruby
s = '[b,d,e,c,b,a,a,d,d,a]'
a = s.gsub(/[\[\]]/,'').split(',').sort
ans = []
while (u = a.uniq).empty?.!
ans << u
u.each{|x| a.delete_at( a.index(x) ) }
end
puts "[" + ans.map{|x| x * ','} * '],[' + "]" #=> [a,b,c,d,e],[a,b,d],[a,d]
0014デフォルトの名無しさん
垢版 |
2021/06/23(水) 00:49:21.38ID:1nP79viV
>>9

haskell

iimport Data.List

splitSet = transpose . group . sort

main = print $ splitSet $ "bdecbaadda"
----
["abcde","abd","ad"]
0015デフォルトの名無しさん
垢版 |
2021/06/23(水) 01:16:40.91ID:P132dmNh
>>9
python

li = ["b","d","e","c","b","a","a","d","d","a"]
t = 0
while len(li) != 0:
__s = list(set(li))
__print(s)
__for x in s: li.remove(x)


前から順番に重複がないように分割した
li = ["b","d","e","c","b","a","a","d","d","a"]
t = 0
for i in range(len(li)):
__if t>i: continue
__ for j, x in enumerate(li[i:]):
____if j==0: continue
____if x in li[i:i+j]:
______print(x,li[i:i+j])
______t = i+j
______break
else: print(li[t:])
0016デフォルトの名無しさん
垢版 |
2021/06/23(水) 03:03:47.96ID:yaBz/mVt
何分割するか指定がないんだからこれで十分だよね
s = "b,d,e,c,b,a,a,d,d,a".split(",")
puts s.map{|e| "[#{e}]" }.join(",")

出力: [b],[d],[e],[c],[b],[a],[a],[d],[d],[a]
0018デフォルトの名無しさん
垢版 |
2021/06/23(水) 19:59:10.71ID:VBbwJDrL
指定は無いがそうすると自明になりつまんなくなる、
つまり問題としてwell-definedじゃなくなるから、Ruby使ってる人は空気と行間を読む訓練をした方がいい
0020デフォルトの名無しさん
垢版 |
2021/06/23(水) 23:35:40.56ID:gV4gb+yX
お題
正整数2つを入力として、それらの商を互いに異なる正整数の逆数の和で表せ
ただし、分母となる正整数の最大のものが極力小さくなるようにせよ


入力 37, 60
出力 37/60 = 1/4 + 1/5 + 1/6

入力 3,1
出力 3/1 = 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/8 + 1/9 + 1/10 + 1/15 + 1/18 + 1/20 + 1/24
0021デフォルトの名無しさん
垢版 |
2021/06/24(木) 12:40:28.82ID:QkkrxV02
お題
月最後の金曜日をプレミアムフライデーといいますが
指定した年のプレミアムフライデー一覧を出力してください

入力: 2021
出力:
2021-01-29
2021-02-26
2021-03-26
2021-04-30
2021-05-28
2021-06-25
2021-07-30
2021-08-27
2021-09-24
2021-10-29
2021-11-26
2021-12-31
0022デフォルトの名無しさん
垢版 |
2021/06/24(木) 13:22:13.95ID:mpRYRE1b
>>20
極小ってのはかんたんに分かるモンなの?
0025デフォルトの名無しさん
垢版 |
2021/06/24(木) 19:38:29.60ID:XMpTcDaC
>>21 Ruby
require 'date'
y = 2021
12.times{|m|
d = Date.new( y, m+1 ).next_month().prev_day()
puts d.prev_day( (d.wday-5) % 7 ).strftime( '%F' )
}
0026デフォルトの名無しさん
垢版 |
2021/06/24(木) 19:39:02.06ID:XMpTcDaC
>>21 Ruby
y = 2021
w = Time.new( y ).wday
tbl = ( (y & 3) == 0 && (y % 100) != 0 || (y % 400) == 0 )?
[ [25,23,25,24,25,24,25,25,24,25,24,25], [2,1,5,3,0,5,2,6,4,1,6,3] ] :
[ [25,22,25,24,25,24,25,25,24,25,24,25], [2,2,6,4,1,6,3,0,5,2,0,4] ]
12.times{|m|
puts "%04d-%02d-%02d" % [ y, m+1, tbl[0][m] + ((tbl[1][m]-w) % 7) ]
}
0027デフォルトの名無しさん
垢版 |
2021/06/24(木) 22:03:03.66ID:HCLTIuII
>>21
Kotlin
https://paiza.io/projects/mOAfjYjLJx67zhwlGiIuJw

次の月の1日の曜日を求めてそこから何日引くかを計算して引いているだけ。
java.time.LocalDate クラス使っているので Java でも似たようなプログラムは作れると思う。
0028デフォルトの名無しさん
垢版 |
2021/06/25(金) 05:25:13.97ID:RM7Ajj8i
>>5-6
# (コマンド),"文字列",(コマンド2) | パイプラインで渡されたコマンド実行結果や文字列を連結して1行の文字列にするJoin-String |
# 連結して1行にした文字列で変数初期化(Tee-Object -Variable 変数) | memo.txtに追記(Tee-Object -Append)
(Get-Date).ToString("yyyy/MM/dd/第"),
[Math]::Floor( ( (Get-Date).Day + 6 ) / 7 ).ToString(),
(Get-Date).ToString("dddd/HH:mm/"),
" #tag#", ( Read-Host "キーワードを入力" ), " ",
( Get-Clipboard ) | Join-String | Tee-Object -Variable kopipe |
Tee-Object -FilePath "$HOME/Documents/memo.txt" -Append
# memo.txtをバックアップ
Copy-Item -Path "$HOME/Documents/memo.txt" -Destination "$HOME/Documents/bak/memo_bak.txt"
# $kopipe = 2021/06/25/第4金曜日/ ###タグ
# 今日が"第4金曜日"なら何かをする
if ( $( Write-Output $kopipe | Select-String -Pattern "第4金曜日" ) ) {
Write-Host "PowerShell"
} else {
Write-Host "Shell Script"
}
# Visual Studio Codeでファイルを開く
code "$HOME/Documents/memo.txt"
0029デフォルトの名無しさん
垢版 |
2021/06/25(金) 05:30:47.47ID:RM7Ajj8i
using InteractiveUtils, Dates
# 1 clipboardの文字列に含まれる改行文字を半角スペースに変換
clipb = replace( clipboard(), "\n" => " " )
# 2 曜日名や月名を日本語で取得するための設定
# docs.julialang.org/en/v1/stdlib/Dates/#Query-Functions
japanese_months = [""] ; japanese_monts_abbrev = [""]
japanese_days = ["月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日"]
Dates.LOCALES["nihongo"] = Dates.DateLocale(japanese_months, japanese_monts_abbrev, japanese_days, [""])
# 実行結果例:2021/06/25/第
year_month_day = Dates.format( now(), "yyyy/mm/dd/第" )
# floor( 3.9 )の実行結果は3.0でfloor( Int, 3.9 )の実行結果は3
第num = floor( Int, ( Dates.day( now() ) + 6 ) / 7 )
# 実行結果例:金/04:21/ 、locale="上で設定した名前"は曜日名を英語以外の言語で取得するためのオプション
youbi_time = Dates.format( now(), "E/HH:MM/" ; locale="nihongo" )
# 3.grepで一覧表示するときに使うハッシュタグを入力。grep ###5ch, grep ###日記, grep ###英語, grep ###エラー, grep /第2金曜日/")
print("タグを入力:") ; hashtag = readline()
from_year_to_hashtag = year_month_day * string(第num) * youbi_time * " ###" * hashtag
# Juliaで文字列連結は+ではなく*
# docs.julialang.org/en/v1/manual/faq/#Why-does-Julia-use-*-for-string-concatenation?-Why-not-or-something-else?
copipe = from_year_to_hashtag * " " * clipb * "\n"
# docs.julialang.org/en/v1/base/file/#Base.Filesystem.homedir
# docs.julialang.org/en/v1/base/io-network/#Base.open
# "a"はwrite(書き込み), create(作成), append(追記)
io = open( homedir() * "/Documents/memo.txt", "a" )
write( io, copipe )
close(io)
0030デフォルトの名無しさん
垢版 |
2021/06/25(金) 05:33:54.12ID:RM7Ajj8i
# 4. 今日が第4金曜日なら指定の画像ファイルを表示。ゴミの日とかを登録しておくと便利。
# docs.julialang.org/en/v1/manual/control-flow/
if contains( from_year_to_hashtag, "第4金曜日" )
imagefile = homedir() * "/Pictures/image.jpg"
# docs.julialang.org/en/v1/manual/running-external-programs/
# xdg-openの部分はmspaintとかでもOK
run(`xdg-open $imagefile`)
else
println("5ch on")
end

# docs.julialang.org/en/v1/stdlib/REPL/#The-Julia-REPL
# 関数の説明と使用例は次のようにすれば見れるよ。
# julia>using Dates
# julia>?  <- Enterキーは押さなくて良い
# help?>dまで入力した後にTabキーを2回押す
# help?>からjulia>に戻すにはBackSpaceキーを押す
# その他の使い方
# julia>usingの後に半角スペースを入力した後にTabキーを2回押してモジュール一覧表示
# julia>aを入力後にTabキーを2回押す
# julia>absの後に半角スペースを入力した後にTabキーを2回押して関数を一覧表示
0031デフォルトの名無しさん
垢版 |
2021/06/25(金) 05:50:35.99ID:RM7Ajj8i
IJulia
github.com/JuliaLang/IJulia.jl
julia> ]
(@v1.6) pkg>add IJulia
BackSpaceキーを押す

replからjupyter Labを起動
julia> using IJulia ; jupyterlab(dir="/home/xxxx/Documents/jupyterlab")
Ctrl-D
ターミナルから起動
$ jupyter lab --notebook-dir="$HOME/Documents/jupyterlab" --browser="/usr/bin/google-chrome"

Visual Studio Code拡張機能Code Runner
ファイル>ユーザー設定>設定を開き、画面右上にある三角アイコン右横の「設定(JSON)を開く」をクリック

"code-runner.executorMap": {
// Julia実行ファイルのフルパス
"julia": "$HOME/julia-1.6.1/bin/julia",
},
//コード実行結果をターミナルに表示する
"code-runner.runInTerminal": true,
0034デフォルトの名無しさん
垢版 |
2021/06/26(土) 00:46:33.35ID:6gOgcdGN
>>21

haskell

import Data.Time.Calendar

premiumFridays y = let
baseDay = ( fromGregorian 2021 6 13 )
lastFriday y m = let
d = gregorianMonthLength y m
difflst = flip diffDays baseDay
$ fromGregorian y m d
lastDay = fromGregorian y m d
in addDays ( - ( mod ( difflst + 2 ) 7 ) ) lastDay
in [ lastFriday y m | m<- [ 1.. 12 ] ]

main = mapM_ print $ premiumFridays 2021
---
2021-01-29
2021-02-26
2021-03-26
2021-04-30
2021-05-28
2021-06-25
2021-07-30
2021-08-27
2021-09-24
2021-10-29
2021-11-26
2021-12-31
0036デフォルトの名無しさん
垢版 |
2021/06/30(水) 18:30:07.65ID:fCthiOXz
お題: 年、月、週の初めの曜日を表す値(0=日曜日, 1=月曜日)を入力するとその月のカレンダーを出力する。



入力: 2021 6 0
出力:
日 月 火 水 木 金 土
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

上の例はスペースの幅の都合で表示が崩れているかも知れないが、等幅(漢字は2倍)と考えて作って良い。
(なんだったら出力を画像にしても良い)
0037デフォルトの名無しさん
垢版 |
2021/06/30(水) 23:36:42.12ID:0jpC4Abq
今年は休日変則だな
0039デフォルトの名無しさん
垢版 |
2021/07/01(木) 08:32:02.86ID:rhoqKmqn
>>36 Ruby
str = '2021 7 0'
y, m ,s = str.scan(/\d+/).map(&:to_i)
a = '日月火水木金土'.chars.rotate(s)
a << [" "] * ((Time.new( y, m, 1 ).wday - s) % 7)
1.upto(31){|d|
break if Time.new( y, m, d ).month != m
a << '%2d' % d
}
a.flatten.each_slice(7){|w| puts w.join(' ') }
0041デフォルトの名無しさん
垢版 |
2021/07/01(木) 15:53:06.10ID:x5n7ySmh
>>40
しゅごい
004239
垢版 |
2021/07/01(木) 19:49:58.87ID:rhoqKmqn
>>36 Ruby
str = '2021 7 0'
y, m, s = str.scan( /\d+/ ).map( &:to_i )
( '日月火水木金土'.chars.rotate(s) + [' '] * (( Time.new( y, m, 1 ).wday - s ) % 7) + (1 .. [31, 30, 29, 28].find{|d| Time.new( y, m, d ).month == m }).to_a.map{|d| '%2d' % d } ).flatten.each_slice(7){|w| puts w * ' ' }
0043◆QZaw55cn4c
垢版 |
2021/07/01(木) 20:48:40.02ID:Es0JxggH
>>36
>週の初めの曜日を表す値(0=日曜日, 1=月曜日)を入力する

その条件、いるのですか?
0045◆QZaw55cn4c
垢版 |
2021/07/01(木) 21:44:00.07ID:Es0JxggH
>>44
なぜ要らないとおもったのですか?
0046デフォルトの名無しさん
垢版 |
2021/07/01(木) 22:06:31.90ID:FSqo0WtF
>>45
誰も要らないとは言っていないのに要らないと言っているように感じられるのは
お前がお前自身のことを要らないと思っているからなのだろうな
0047デフォルトの名無しさん
垢版 |
2021/07/02(金) 10:06:20.83ID:6rZLVHEq
>>44
要る。
0048デフォルトの名無しさん
垢版 |
2021/07/02(金) 10:38:45.74ID:xu7tv1xS
>>43
キチ外だな

>>46
言い訳すんなアスペ
普通の人間は文脈読むだろ
0049デフォルトの名無しさん
垢版 |
2021/07/02(金) 13:39:10.26ID:E59Amcuv
本気で知らないんだろう
月曜始まりのカレンダーを見たことないご存じないとかじゃね?
0054デフォルトの名無しさん
垢版 |
2021/07/03(土) 02:44:37.57ID:+PW8v28+
月月火水木金金
0055デフォルトの名無しさん
垢版 |
2021/07/03(土) 12:07:58.36ID:gq7PWL9B
オプションの話なんてどうでもいいけど
1日を左上始まりの方が合理的だと思う
0056デフォルトの名無しさん
垢版 |
2021/07/03(土) 18:17:25.88ID:IfvioC2j
どうかな

多くの場合
月の開始日を固定するより
曜日を固定した方が有用だ


月によって
0059デフォルトの名無しさん
垢版 |
2021/07/03(土) 19:13:38.83ID:DPpwWmVc
28日×13月、最終月で調整、がシンプルで良かったのにな
年初の時期も夏至とか分かりやすい日にすれば良かったのに
0060デフォルトの名無しさん
垢版 |
2021/07/03(土) 21:26:36.17ID:IfvioC2j
暦は農業をするうえで細かく日を読む必要から作られ発展してきた
農閑期には日付が定められなかったことも
ヨーロッパの言語で前半は神の名が付けられ、後ろの方がテキトーなことからもその時代における重要度が推し量れる
006339
垢版 |
2021/07/04(日) 08:11:39.86ID:iOGAyFs7
>>36 Ruby
お題の仕様を拡張してみた
前後の月の日付も週単位で表示
・前月日付は週はじめから最小1日から最大7日
・翌月日付は週末まで最小0日から最大6日

require 'date'
str = '2021 7 0'
y, m ,s = str.scan( /\d+/ ).map( &:to_i )
a = '日月火水木金土'.chars.rotate(s)
sw = (Time.new( y, m, 1 ) - s % 7).wday
( (sw == 0)? 7 : sw ).downto(1){|d| a << Date.new( y, m, 1 ).prev_day( d ).mday.to_s }
1.upto( Date.new( y, m, 1 ).next_month.prev_day.mday ){|d| a << '%2d' % d }
(-a.size % 7).times{|d| a << '%2d' % (d+1) }
a.each_slice(7){|w| puts w * ' ' }
006439
垢版 |
2021/07/05(月) 00:26:38.86ID:e4Vm80Jj
>>36 Ruby

>>63
> sw = (Time.new( y, m, 1 ) - s % 7).wday
は間違いでした

require 'date'
str = '2021 7 0'
y, m, s = str.scan( /\d+/ ).map( &:to_i )
m1 = Date.new( y, m, 1 )
sw = m1.wday - s % 7
pmd = m1.prev_day.mday
a = '日月火水木金土'.chars.rotate(s)
( pmd - ((sw == 0)? 7 : sw) + 1 ).upto( pmd ){|d| a << d.to_s }
1.upto( m1.next_month.prev_day.mday ){|d| a << '%2d' % d }
(-a.size % 7).times{|d| a << '%2d' % (d+1) }
a.each_slice(7){|w| puts w * ' ' }
006539
垢版 |
2021/07/05(月) 01:08:34.16ID:e4Vm80Jj
>>64 もバグ有り
> sw = m1.wday - s % 7
sw = (m1.wday - s) % 7
0066デフォルトの名無しさん
垢版 |
2021/07/05(月) 17:31:47.07ID:7Yd2cijs
>>28-31
28はPowerShell版

お題:クロームブラウザーのヘッドレスモードを使って何かを作る
google-chrome --headless --disable-gpu --hide-scrollbars --window-size=700,8000 --virtual-time-budget=10000 --screenshot="$HOME/Pictures/$(date +"%H_%M_%S").png" 'yahooリアルタイム検索結果のURL'

--window-size=はスクリーンショットを撮る範囲
--virtual-time-budget=は検索結果が表示されるまで時間がかかるサイトで使う。これがないと検索結果のスクリーンショットがうまく撮れない。10000ミリ秒=10秒。
0067デフォルトの名無しさん
垢版 |
2021/07/06(火) 12:39:02.75ID:gfjghTPI
数学板から
お題
Σ[n:2〜∞]cos(n)/log(n)を小数第10まで求めよ

元々収束するか?で収束するなら10桁計算せよってついてたけど今のところ10桁計算してみせた人おらず
もちろん収束遅すぎて少し工夫しないと10桁出すのは難しいかなと
0068デフォルトの名無しさん
垢版 |
2021/07/06(火) 18:27:19.16ID:ifvAZrxB
>>67
わからない。
0070デフォルトの名無しさん
垢版 |
2021/07/07(水) 07:00:20.59ID:GHc1zSP4
>>67 Haskell
sums xs = scanl1 (+) xs
ss n = sums [cos k / log k | k <- [2..n]]
avr xs = sum xs / (fromIntegral $ length xs)
結果:
λ> avr $ ss 10000
-1.3422141860097583
(0.02 secs, 6,244,872 bytes)
λ> avr $ ss 100000
-1.3422187431198473
(0.21 secs, 61,066,720 bytes)
λ> avr $ ss 1000000
-1.3422195503566596
(1.97 secs, 609,383,904 bytes)
λ> avr $ ss 10000000
-1.3422195021937073
(48.08 secs, 6,092,457,440 bytes)
これ以上は厳しそうだから何か工夫しないといけないけど8桁辺りまでは収束してそう
0072デフォルトの名無しさん
垢版 |
2021/07/07(水) 19:16:52.25ID:5d+e1myw
この文献
https://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1084-4.pdf
をもとに C

#include <math.h>
#include <stdio.h>
int main(){
double p=12.0,q=7.0,s=0;
long n,nmax=166;
for(n=2;n<nmax;n++) s+=(cos(n)/log(n))*0.5*erfc(n/p-q);
printf("s=%-20.16lf, N=%d\n",s,nmax-2);
return 0;
}

s=-1.3422195101745578 , N=164
0073デフォルトの名無しさん
垢版 |
2021/07/07(水) 20:36:04.14ID:MZbePiNM
>>67 収束する。

B_k := Σ[n : 2..k] cos(n)
|B_k| = |cos((k + 1) / 2) sin(k / 2) / sin(1 / 2) - (1 + cos(1))|
 (see https://math.stackexchange.com/questions/225941/proving-sum-limits-k-0n-coskx-frac12-frac-sin-frac2n12x)
 <= 1 / sin(1 / 2) + 1 + cos(1) ... (i)

a_n := 1 / log(n)
Σ[n : 2..∞] |a_{n + 1} - a_n|
 = Σ[n : 2..∞] |log(n / (n + 1)) / (log(n) log(n + 1))|
 <= Σ[n : 2..∞] |log(2) / log(n + 1)^2|
 < ∞ ... (ii)

lim a_n = 0 as n -> 0 ... (iii)

(i), (ii), (iii) よりアーベルの級数判定法の条件を満たすので所与の級数は収束する。
0076デフォルトの名無しさん
垢版 |
2021/07/07(水) 22:23:37.48ID:7LucU1Ml
>>5の2 Dart版
void main() {
DateTime today = new DateTime.now();
print(
"${today.year.toString()}/${
today.month.toString().padLeft(2,'0')}/${
today.day.toString().padLeft(2,'0')}/第${
((today.day + 6) / 7).floor()}${
{1:'月曜日',2:'火曜日',3:'水曜日',4:'木曜日',5:'金曜日',6:'土曜日',7:'日曜日'}[today.weekday]}/${
today.hour.toString().padLeft(2,'0')}:${
today.minute.toString().padLeft(2,'0')}/"
);
}
0078デフォルトの名無しさん
垢版 |
2021/07/21(水) 03:52:07.59ID:s4XLTZzk
お題
2乗〜6乗
自然数nに対して方程式
n = p^2+q^3+r^4+s^5+t^6
の整数解をひとつ探し出す関数を実装せよ

-2 → [1,-2,1,0,0]
-1 → [1,-2,1,1,9]
0 → [1,-1,0,0,0]
1 → [1,0,0,0,0]
2 → [1,1,0,0,0]
100 → [2,0,0,2,2]
2021 → [3382713530574301803635446275486,-563785588429051426890762429768,2252569709434420,5488,750856569811473]
0084デフォルトの名無しさん
垢版 |
2021/07/21(水) 22:08:26.55ID:DfqCC9n+
>>83
元々整数のつもりだったのが筆が滑りましたw
お好きな方でという事で
自然数に限定して楽になる事もないと思うけど
0086デフォルトの名無しさん
垢版 |
2021/07/22(木) 13:52:09.29ID:mzts8Rpt
元の問題

面白い問題おしえて〜な 37問目
https://rio2016.5ch.net/test/read.cgi/math/1624644393/543

元の問題は7乗まで使って桶だったけど6乗までの解答が出た

https://rio2016.5ch.net/test/read.cgi/math/1624644393/588

あくまでプログラムの話、数学の部分はどうでもいいという方は参考にして下さい
この方法はn-t^5-76843が6630の倍数になるような整数tが取れる事を使います(t:0〜6629の中で探す)
0089デフォルトの名無しさん
垢版 |
2021/07/24(土) 11:44:46.01ID:uYrXTofe
お題: 端末上に地球を模した円の描画を行い、入力された緯度、経度のおおよその地点に印を付けろ
ただし描画される円の中心は常に日本の東京とし、東京が見えるようにすること
描画される円の大きさは自由とする
入力された座標が東京の裏側の半球上にあって印を描画できない場合は、印を描画しないか、あるいは円(地球)を透過させて印を描画する

地球の半径=6,371 km
東京の経度=139°41′30″
東京の緯度=35°41′22″

*出題者は自分で実装してません
0090デフォルトの名無しさん
垢版 |
2021/07/24(土) 11:48:58.50ID:2jz91/WX
>>89
画面の上を地球上のどの方位にするとか、平行投影なのか透視投影なのか画角どうするかとか決めないといけないんでないの?
0093デフォルトの名無しさん
垢版 |
2021/07/25(日) 16:25:19.73ID:YgX/LOmt
地形データってどっかから取って来れるの?そこも自作しろと?それとも地形描画なしのツルツルの地球で良い?
0095デフォルトの名無しさん
垢版 |
2021/07/27(火) 08:42:26.61ID:3vSla0fp
>>5の2 JavaScript版
let today = new Date()
console.log(
today.getFullYear().toString() + '/' +
today.getMonth().toString().padStart(2,'0') + '/' +
today.getDate().toString().padStart(2,'0') + '/' +
'第' + ( Math.floor( ( today.getDate() + 6 ) / 7 ) ).toString() +
['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'][today.getDay()] + '/' +
today.getHours().toString().padStart(2,'0') + ':' +
today.getMinutes().toString().padStart(2,'0') + '/'
)
009696
垢版 |
2021/07/28(水) 13:12:24.23ID:D9Z9/eJz
>>20 Perl5、DPで解けないかなと考えてたけど、すぐには思いつかずnaiveな解法

use List::Util 'max';
my $m;
sub f {
 my ($a, $b, $c) = @_;
 return () if $m and $m <= $c;
 my $aa = $a * $c - $b;
 return ($m = $c) if 0 == $aa;
 my @s;
 if (0 < $aa) {
  my $bc = $b * $c;
  @s = f($aa, $bc, max(int($bc / $aa), $c + 1));
  @s = ($c, @s) if @s;
 }
 my @t = f($a, $b, max(int($b / $a), $c + 1));
 if (@s and @t) {
  $s[-1] < $t[-1] ? @s: @t;
 } else {
  @s ? @s: @t;
 }
}
$m = 0; my @a = f(37, 60, 1);
printf "37 / 60 = %s\n", join ' + ', map{"1/$_"} grep{$_} @a;
#$m = 0; my @a = f(3, 1, 1);

実行結果
~ $ perl 20_20_re_expan.pl
37 / 60 = 1/4 + 1/5 + 1/6

なお、この解法だと 3/1 = は時間がかかりすぎて解けない
0097デフォルトの名無しさん
垢版 |
2021/08/08(日) 11:08:25.71ID:KegFD0tb
平面上に円をおくと、円周上に整数点ができることがあるが
それがちょうど47個の円の最小半径は?
ここで前にもあったとおもったが、答わからん
0098デフォルトの名無しさん
垢版 |
2021/08/10(火) 04:18:36.48ID:RT5RB9Hc
解き方がわからん。
0099蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/08/11(水) 00:16:58.90ID:yQA623uX
お題: (C/C++/Rust限定)
与えられたテキストファイルのエンコーディングを早く正確に判定するプログラムを作れ。
判定内容はASCIIのみ、UTF-8、UTF-16、Shift_JIS、バイナリのいずれかとBOMの有無とする。
ファイル先頭にBOMがある場合はBOMの意味を優先するものとする。
ASCIIではない場合はファイル先頭より256バイト以降は無視するものとする。
テキストファイルがUTF-8かShift_JISか区別できないときはUTF-8の判定を優先するものとする。
判定にかかった時間をミリ秒単位で測定せよ。
UTF-16 BEとEUC-JPはバイナリとみなしてもよい。
0102デフォルトの名無しさん
垢版 |
2021/08/12(木) 04:41:39.82ID:zN4hKecF
昔々グラフィックス画面に直線を描くアルゴリズム調べた時は感動したな。あれは40年ぐらい前か。月日の経つのは早いものぢゃ。
0103デフォルトの名無しさん
垢版 |
2021/08/12(木) 09:29:17.38ID:GeyAERvY
お題
文字列を入力として受け取って
入力された文字列と、入力された文字列を逆順にした文字列を
1文字ずつ交互に結合した文字列を出力してください

入力: abcde
出力: aebdccdbea
0105デフォルトの名無しさん
垢版 |
2021/08/13(金) 03:01:45.42ID:pLlXEN4h
>>103
Haskell

import Data.List
acbbca x = concat $ transpose [ x , reverse x ]
main = do
putStrLn $ acbbca "Hello World"
putStrLn $ acbbca "たけやぶやけた"

----
HdellrlooW WoolrlledH
たたけけややぶぶややけけたた
0106デフォルトの名無しさん
垢版 |
2021/08/13(金) 03:35:13.90ID:hXjFUBNl
なんかこういうのはhaskellのlensが得意そうな気がするな
この前Intのリストの奇数だけソートするのを
sortArray xs = xs & partsOf (each . filtered odd) %~ sort
だけで済ましてるのを見た
010896
垢版 |
2021/08/13(金) 12:16:45.65ID:Tqy/ucLn
>>103 Perl5

@b = reverse @a = split'', 'abcde';
use List::MoreUtils 'zip';
print zip @a, @b;

実行結果
~ $ perl 20_103.pl
aebdccdbea
0111デフォルトの名無しさん
垢版 |
2021/08/13(金) 20:49:58.92ID:++s/0C9b
>>103 J
f =: ,@(,. |.)

___ f 'abcde'
aebdccdbea
0112sage
垢版 |
2021/08/13(金) 23:42:35.13ID:WxHHmkEE
>>104
Rbuy 3.0.2 だと s が未定だと怒られる
0113デフォルトの名無しさん
垢版 |
2021/08/14(土) 12:38:10.02ID:LgiNTbaj
>>36 octave
https://ideone.com/YRTUpL
function [c, w] = f(y, m, dow)
c = calendar(y, m);
w = {'日' '月' '火' '水' '木' '金' '土'};
if dow == 1
a = (c')(:);
b = [-1 6](1 + (a(1) == 1));
c = reshape(circshift(a, b), flip(size(c)))';
w = circshift(w, -1, 2);
end
end
function g(y, m, dow)
[c, w] = f(y, m, dow);
disp(strjoin(cellfun(@(s) {sprintf('%6s', s)}, w), '')), disp(c)
end
0115デフォルトの名無しさん
垢版 |
2021/08/17(火) 19:49:43.89ID:skFpZz34
>>114 Ruby

$><<%W[「中止の考えはない。強い警戒感を持って に臨む」\n「バブル方式で する。感染拡大の恐れはないと認識している」]*gets.chop
011696
垢版 |
2021/08/17(火) 22:38:15.40ID:BrZ+lWok
>>114 Perl5

$it="うっふ〜ん";
print<<EOF;
「中止の考えはない。強い警戒感を持って${it}に臨む」
「バブル方式で${it}する。感染拡大の恐れはないと認識している」
「コロナに打ち勝った証として${it}する」
「${it}を中止することは一番簡単なこと、楽なことだ。${it}に挑戦するのが国民の役割だ」
「安心安全な${it}に向けて全力で取り組む」
「不要不急かどうかは本人が判断すべきだ」
EOF

実行結果
$ perl 20_114_菅話法.pl
「中止の考えはない。強い警戒感を持ってうっふ〜んに臨む」
「バブル方式でうっふ〜んする。感染拡大の恐れはないと認識している」
「コロナに打ち勝った証としてうっふ〜んする」
「うっふ〜んを中止することは一番簡単なこと、楽なことだ。うっふ〜んに挑戦するのが国民の役割だ」
「安心安全なうっふ〜んに向けて全力で取り組む」
「不要不急かどうかは本人が判断すべきだ」
0117デフォルトの名無しさん
垢版 |
2021/09/03(金) 01:55:54.93ID:d87lg/Z2
半月ぐらいお題が出ないので一つ。

お題: テトロミノ

こんなパズルを解く。
https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%88%E3%83%AD%E3%83%9F%E3%83%8E

大きさもピースも任意だが、上記ページにあるやつそのままで良い。(2つあるがどちらか一つで良い)
沢山パターンがあるかも知れないが、最初に見つかった一つを出すだけでも良い。
出力はテキストでも何でも人間が見て分かるようになってれば良い。

この問題については既にあちこちで答えが出ているような枯れた問題だと思うので、なるべく何も見ずに自分で考えて作ること。
0118蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/03(金) 20:43:43.19ID:9DjO+PTi
お題:15パズルを解くプログラム。

15パズルの盤を16要素の配列で表現し、実際に解く様子を出力せよ。空白は整数のゼロで表現する。
解けないときは「No answer」を出力せよ。可能ならば画像データも出力せよ。

参考資料:
http://www.studio-boiler.com/k/kouryaku/kou.htm
0120デフォルトの名無しさん
垢版 |
2021/09/04(土) 02:42:13.50ID:7+Hy81Ja
全然お題が出なかったからこれで良い
0121デフォルトの名無しさん
垢版 |
2021/09/04(土) 15:54:45.82ID:Q1ZjOy0h
最短でも80手らしい
それくらいだと全部表示してもそこまでうるさくないんだけど簡単な探索法だと2,300超えてしまいそう
全部表示したらうるさい事この上ないんだよな
0122デフォルトの名無しさん
垢版 |
2021/09/04(土) 16:28:17.76ID:HA1H8jBr
お題:パンくずリストを出力せよ

入力
東京,特許,許可局

出力
<ul class="pankuzu">
<li class="pankuzu_item">東京</li>
<li class="pankuzu_item">特許</li>
<li class="pankuzu_item active">許可局</li>
</ul>
0125デフォルトの名無しさん
垢版 |
2021/09/06(月) 10:28:52.31ID:c9RFzrWf
>>122
react

const Pankuzu = ({ items }) => (
<ul className="pankuzu">
{items.map((item, i) => (
<li
key={`item-${item}`}
className={"pankuzu_item"}
data-active={i === items.length - 1}
>
{item}
</li>
))}
</ul>
);
012796
垢版 |
2021/09/06(月) 12:09:28.54ID:GTV7C5SZ
>>122 Perl5

use HTML::TreeBuilder;
@s = split',','東京,特許,許可局';
@a = map{['li', {class => 'pankuzu_item'}, $_]} @s;
$a[-1][1]{class} .= ' active';
$h = HTML::Element->new_from_lol(['ul', {class => 'pankuzu'}, @a]);
print $h->as_HTML('<>&', ' ', {});


実行結果
~ $ perl 20_122_pankuzu_list.pl
<ul class="pankuzu">
<li class="pankuzu_item">東京</li>
<li class="pankuzu_item">特許</li>
<li class="pankuzu_item active">許可局</li>
</ul>
012896
垢版 |
2021/09/06(月) 13:04:59.11ID:moEus4wD
>>127

use HTML::TreeBuilder;

だと色々引き連れて来るので、使う

use HTML::Element;

をuseすれば良かったんだけど、結果は同じだしまいいや…
0130デフォルトの名無しさん
垢版 |
2021/09/06(月) 19:38:11.84ID:n/A9WgFn
>>122 ocaml
https://ideone.com/lTmi19
let f =
let rec aux acc = function
[] -> "<ul class=\"pankuzu\">\n" ^ acc ^ "</ul>"
| s :: [] -> aux (acc ^ "<li class=\"pankuzu_item active\">" ^ s ^ "</li>\n") []
| s :: ss -> aux (acc ^ "<li class=\"pankuzu_item\">" ^ s ^ "</li>\n") ss
in aux ""
let () = print_endline @@ f ["東京"; "特許"; "許可局"]
0131デフォルトの名無しさん
垢版 |
2021/09/07(火) 09:55:32.26ID:WSMGeNyo
>>122 bat
:: usage: this.bat 東京,特許,許可局
@echo off &setlocal enabledelayedexpansion
set "OUTPUT=echo ^<ul class="pankuzu"^>"
for %%a in (%*) do set "OUTPUT=!OUTPUT!&echo ^^<li class="pankuzu_item"^^>%%~a^^</li^^>"&set "LastArg=%%~a"
set "OUTPUT=!OUTPUT!&echo ^^</ul^^>"
set OUTPUT=!OUTPUT:"^>%LastArg%= active"^^^>%LastArg%!
%OUTPUT%
:: (%OUTPUT%) >>pankuzu.txt
0132デフォルトの名無しさん
垢版 |
2021/09/07(火) 12:33:03.11ID:Q6Cbfir4
お題
次のように置換した文字列が入力される

ESC → ESCESC
CR → ESCcr
LF → ESClf

元の文字列を復元してください

続く・・・
0133デフォルトの名無しさん
垢版 |
2021/09/07(火) 12:33:27.25ID:Q6Cbfir4
>>132の続き

例) 入力 → 出力
ESCESCESCESC → ESCESC
ESCESCESCcr → ESCCR
ESCESCESClf → ESCLF
ESCESCESCESCcr → ESCESCcr
ESCESCESCESClf → ESCESClf
ESCcrESCESC → CRESC
ESCcrESCcr → CRCR
ESCcrESClf → CRLF
ESCcrESCESCcr → CRESCcr
ESCcrESCESClf → CRESClf
ESClfESCESC → LFESC
ESClfESCcr → LFCR
ESClfESClf → LFLF
ESClfESCESCcr → LFESCcr
ESClfESCESClf → LFESClf
ESCESCcrESCESC → ESCcrESC
ESCESCcrESCcr → ESCcrCR
ESCESCcrESClf → ESCcrLF
ESCESCcrESCESCcr → ESCcrESCcr
ESCESCcrESCESClf → ESCcrESClf
ESCESClfESCESC → ESClfESC
ESCESClfESCcr → ESClfCR
ESCESClfESClf → ESClfLF
ESCESClfESCESCcr → ESClfESCcr
ESCESClfESCESClf → ESClfESClf
0135134
垢版 |
2021/09/07(火) 13:14:10.80ID:YXnsp+WP
>>132 Ruby
def decode( str ) = str.gsub( /ESC(ESC|cr|lf)/ ){ _1[3..].upcase }
0141デフォルトの名無しさん
垢版 |
2021/09/10(金) 22:32:25.84ID:VHKKBZ5d
そんなやり方があったとは知らなかった
0142蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/10(金) 23:29:13.91ID:aesnFr7F
お題: 円柱の高さ(5〜15cm)と半径(5〜10cm)を指定すると、その円柱の展開図のSVGデータを出力するプログラム。

展開図には一部、0.5〜1cmほどのりしろがあり、印刷・糊付けして実際に組み立てることができるものとする。SVGの用紙はA4サイズ。
0143デフォルトの名無しさん
垢版 |
2021/09/11(土) 00:32:47.77ID:7ac2XrM2
>>142
糊代を折ることを考えたら円柱じゃなくて(円に近い)多角柱になると思うけど、それでいいの?
0145デフォルトの名無しさん
垢版 |
2021/09/12(日) 23:05:50.13ID:a0Jd4Hkz
>>132
Java
https://paiza.io/projects/H0RSztAvHumk7NcFZBWWnA

"ESCESC"を "ESC" 任意の文字 に変換して
逆の変換すればOK

下記のJSONの文字列のようなエスケープでも
同様のやりかたで復元できる、はず

\ → \\
\r → \\r
\n → \\n
0146デフォルトの名無しさん
垢版 |
2021/09/12(日) 23:51:43.19ID:a0Jd4Hkz
訂正
\ → \\\\
\r → \\r
\n → \\n
0147デフォルトの名無しさん
垢版 |
2021/09/12(日) 23:52:06.11ID:a0Jd4Hkz
訂正2
\\ → \\\\
\r → \\r
\n → \\n
0148デフォルトの名無しさん
垢版 |
2021/09/13(月) 00:01:27.06ID:kzWLxl1N
お題 転調記号の数

問題
12成分のベクトル
a=[ 5,2,3,4,1,6,1,4,3,2,5,0 ] // 半音上げた調号数
b=[ 0,5,2,3,4,1,6,1,4,3,2,5 ] // 原曲の調号数
c=[ 5,0,5,2,3,4,1,6,1,4,3,2 ] // 半音下げた調号数
をとる
12成分の実ベクトルxに対して
f(x) = min{ a・x, b・x、c・x } (・は内積)
と定める
xが領域
x[i]≧0, Σ_[i:1〜12] x[i]=1
を動く時f(x)の最小値を求めよ

原題は数学板にあるけど長いし音楽知らないとわけわかめになるので略
知りたい人は以下より

https://rio2016.5ch.net/test/read.cgi/math/1629715580/80
面白い問題おしえて〜な 38問目

https://rio2016.5ch.net/test/read.cgi/math/1629715580/190
面白い問題おしえて〜な 38問目
0149デフォルトの名無しさん
垢版 |
2021/09/13(月) 07:01:38.59ID:eHkY1yZB
x=[1,0,0,0,...]でf(x)は最小値0をとるけど、原題みるとf(x)の最大値を求めるのかな
0150デフォルトの名無しさん
垢版 |
2021/09/13(月) 09:36:40.69ID:bTLuzAmV
対数とれば簡単
0154デフォルトの名無しさん
垢版 |
2021/09/13(月) 15:11:00.36ID:kzWLxl1N
>>152
嬰へ長調は♯6個とその異名同音調の変ト長調は♭6個でどうあがいても6個必要です
♭1個でキーは5/12上がり♯1個でキーは5/12下がりますがハ長調から見て嬰へ長調=変ト長調はどちらから回っていっても6個必要です

https://ja.m.wikipedia.org/wiki/%E5%AC%B0%E3%83%98%E9%95%B7%E8%AA%BF

>>153
もう少し大きいです
数学板で最初に出た3より大きい例は

https://rio2016.5ch.net/test/read.cgi/math/1629715580/157
面白い問題おしえて〜な 38問目

変ト長調3回、ニ長調4回、変ロ長調4回

0 5 2 3 4 1 6 1 4 3 2 5
_ 4 _ _ _ 3 _ _ _ 4 _ _ = 35 > 33
_ _ 4 _ _ _ 3 _ _ _ 4 _ = 34 > 33
_ _ _ 4 _ _ _ 3 _ _ _ 4 = 35 > 33

つまりこの場合f(0,0,4/11,0,0,0,3/11,0,0,0,4/11,0)=34/11です
ホントの最大値はもう少し大きくなります
0156デフォルトの名無しさん
垢版 |
2021/09/13(月) 22:45:15.18ID:kzWLxl1N
答え有理数です
しかしプログラム板のお題なので近似値出れば良しでいいと思います
0160ハノン ◆QZaw55cn4c
垢版 |
2021/09/14(火) 17:29:19.22
>>148
元の出題
>変ニ長調(♭×5)→ホ長調(♯×4)→へ長調(♭×1)という曲の平均調号数は

そんな変てこな転調があり得るのか‥‥
0163デフォルトの名無しさん
垢版 |
2021/09/15(水) 02:21:25.59ID:3vtMVT28
>>148
そのお題はタイトルからして調べないと分からない単語が使われており、全体を通して何を言わんとしているのか分からない。
0165ハノン ◆QZaw55cn4c
垢版 |
2021/09/15(水) 06:22:14.22
>>162
>サビで短3度転調、後半盛り上がって半音上げはポップス曲だとよくある
気がつきませんでした、なるほど

>後半盛り上がって半音上げ
最後に半音上がるアレ、主和音と同じ高さで導音系の和音を強奏するのが無理があると思っており好みじゃないのです‥‥
https://www.youtube.com/watch?v=ENgNiqc0m3I&;t=275s
0168ハノン ◆QZaw55cn4c
垢版 |
2021/09/15(水) 06:45:27.54
>>152
白鍵に調号をつけるしかない場面があるのです、>>154 のいうとおり ♭ソを基本の音にした音階のときはそうなります‥‥
では 7 個が最大かというと、そうでもなくて、ダブルシャープ(シャープ2個分)、ダブルフラット(フラット2個分)を使って(一時的に)8個以上の楽譜に仕上げる人がいました‥‥
0170デフォルトの名無しさん
垢版 |
2021/09/15(水) 21:26:44.83ID:UGHCgEvY
ちなみにこの問題よくよく考えるとアルゴリズムの教科書によく出る超有名問題になってます
問題の名前だけは高校の数学の教科書にも載ってるくらい有名な問題です
0173デフォルトの名無しさん
垢版 |
2021/09/15(水) 23:00:11.21ID:UGHCgEvY
>>171
それです
見つけ方は>>171さんの方法が1番簡単
なんせ何も工夫しなくてもC[12,3]=220通りしかないので全部総当たりで計算する方が早い
それには

5a+ 2b+ 3c+ 4d+ 1e+ 6f+ 1g+ 4h+ 3i+ 2j+ 5k+ 0l

0a+ 5b+ 2c+ 3d+ 4e+ 1f+ 6g+ 1h+ 4i+ 3j+ 2k+ 5l、

5a+ 0b+ 5c+ 2d+ 3e+ 4f+ 1g+ 6h+ 1i+ 4j+ 3k+ 2l

0a+ 5b+ 2c+ 3d+ 4e+ 1f+ 6g+ 1h+ 4i+ 3j+ 2k+ 5l、

a*b+c+d+e+f+g+h+i+j*k+l≧1
の中の
0a+ 5b+ 2c+ 3d+ 4e+ 1f+ 6g+ 1h+ 4i+ 3j+ 2k+ 5l
の最大値探す時に例えばd,f,h成分だけ0でない領域での最大値を見つけるには12元の線形方程式
5a+ 2b+ 3c+ 4d+ 1e+ 6f+ 1g+ 4h+ 3i+ 2j+ 5k+ 0l
=
0a+ 5b+ 2c+ 3d+ 4e+ 1f+ 6g+ 1h+ 4i+ 3j+ 2k+ 5l、

5a+ 0b+ 5c+ 2d+ 3e+ 4f+ 1g+ 6h+ 1i+ 4j+ 3k+ 2l
=
0a+ 5b+ 2c+ 3d+ 4e+ 1f+ 6g+ 1h+ 4i+ 3j+ 2k+ 5l、

a*b+c+d+e+f+g+h+i+j*k+l=1、
a=b=c=e=g=i=j=k=l=0
を解いてどれかの成分が0以下なら捨て、正なら候補に残して全部調べてのパターンを後3つやればいけます
(もちろん有理係数の線形方程式なので解は有理数)
その際線形代数の計算をやってくれるライブラリがあれはそんなに大変な作業にはならないはずです
というかこのタイプの問題“線形計画法”この問題解くためのライブラリ持ってるやつが多いのでその場合は数行で終わってしまいます
0175デフォルトの名無しさん
垢版 |
2021/09/19(日) 19:11:20.33ID:zqOP2O5f
>>174
理詰めの解答よりこういう力技の解答の方がありがたいです
理詰めはどっかでうっかり間違ってる事も多いので

>>172さんの方針で220通り全数検索するコード組んでみました

https://ideone.com/Vyqp8r

元々用意してた解答は単体法( Simplex algorythm)というやつ使う方法だったんですけど、220個位なら全数検査した方が安全ですね
しかも全部調べるのでベスト10とか出せる
さっきのコードは原曲のままが最小になる場合のベスト10とどちらかに半音ずらした方が最小になる場合のベスト10です
0176蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/23(木) 00:23:18.14ID:WyFAZLWz
お題: 中心(x, y)で半径mの円と、中心(z, w)で半径nの円の当たり判定。
0177蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/23(木) 00:36:24.97ID:WyFAZLWz
お題: カオス理論で知られるローレンツ・アトラクタを描画せよ。
0178蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/23(木) 00:45:13.27ID:WyFAZLWz
お題: 厚み0.5cm長さX cmのしなやかなテープを最小のうずまき状にまるめると直径は何cmになるか。X = 20, 30, 50.
0179ハノン ◆QZaw55cn4c
垢版 |
2021/09/23(木) 12:30:22.12ID:HaJtCNmP
>>178
「しなやかな」の定義中、中心側の終端の扱いを精緻に定義しなおしてください
0180デフォルトの名無しさん
垢版 |
2021/09/23(木) 12:40:13.64ID:fWOsjY2x
document.querySelectorAll('.post').forEach( e => {

const nameElement = e.querySelector('.name');
if(nameElement === null) return;
const name = nameElement.innerText;
if(name.indexOf('◆T6xkBnTXz7B0') >= 0 || name.indexOf('◆QZaw55cn4c') >= 0) e.remove();

});
0181デフォルトの名無しさん
垢版 |
2021/09/23(木) 16:05:27.59ID:jg/8HMJJ
>>176
それって数学的な証明はよくわからないんだけど直感的に考えると、(x, y) から (z, w) の距離が m + n 以下なら当たりで良いのかな?
他のパターンで当たる場合はなさそうだけど、あったとしても今は思いつかないのでとりあえずプログラムはそれで作ろうかと思う。
0183デフォルトの名無しさん
垢版 |
2021/09/23(木) 17:12:27.81ID:QUC7Fk2H
入力として整数値が与えられたらその中の立っているビットを
等確率でランダムに一つ抜き出した整数値を出力する

3が与えられたら1か2のどちらかを1/2の確率で
17179877640が与えられたら8か256か8192か17179869184のどれかを1/4で
0186デフォルトの名無しさん
垢版 |
2021/09/24(金) 18:51:00.62ID:FX1uO51R
お題 繁分数
奇数個の整数がカンマで区切りで与えられる
間に'+'と'/'を順に挿入して計算する、ただし優先順位は後から優先
例) "1,2,3,4,5,6,7" → " 1 + 2 / ( 3 + 4 / ( 5 + 6 / 7 ))) = 233/151 ≒ 1.543046357616
計算結果を出力せよ

例)
入力 : "1,2,3,4,5,6,7"
出力 : 1.543046357616

入力 : "1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2"
出力 : 1.4142135623730951

入力 : "2,1, 1,1, 2,1, 1,1, 1,1, 4,1, 1,1, 1,1, 6,1, 1,1, 1,1 "
出力 : 2.718283582089552

入力 : "0, 4, 1, 1, 3, 4, 5, 9, 7, 16, 9, 25, 11, 36, 13, 49, 15, 64, 17, 81, 19, 100"
出力 : 3.141593311879928
019196
垢版 |
2021/09/25(土) 22:19:21.21ID:qK5TmKac
>>186 Perl5

use feature qw{signatures say};
no warnings 'experimental';
sub s($a, $b, @a) { @a ? $a + &d($b, @a) : $a + $b }
sub d($a, $b, @a) { @a ? $a / &s($b, @a) : $a / $b }
say &s(/(\d+)/g) for <DATA>;
__DATA__
1,2,3,4,5,6,7
1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2
2,1,1,1,2,1,1,1,1,1,4,1,1,1,1,1,6,1,1,1,1,1
0,4,1,1,3,4,5,9,7,16,9,25,11,36,13,49,15,64,17,81,19,100

実行結果
$ perl 20_186_fraction.pl
1.54304635761589
1.4142135623731
2.71828236824984
3.14159316790851
0192デフォルトの名無しさん
垢版 |
2021/09/26(日) 00:35:27.94ID:x+MOSZRz
>>186

ruby -ne "/$_.split(?,).map(&:to_f).each_slice(2).reverse_each.reduce{|(s), (a, b)| b / s + a}"

# input
1,2,3,4,5,6,7
1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
2,1, 1,1, 2,1, 1,1, 1,1, 4,1, 1,1, 1,1, 6,1, 1,1, 1,1,1
0, 4, 1, 1, 3, 4, 5, 9, 7, 16, 9, 25, 11, 36, 13, 49, 15, 64, 17, 81, 19, 100, 1

# output
1.5430463576158941
1.4142135623730951
2.718282368249837
3.141593167908507
0193ハノン ◆QZaw55cn4c
垢版 |
2021/09/26(日) 02:32:13.09ID:fnZfkDL3
>>186 C
>>189
終端処理を間違えていたので御題にあわせて修正
https://ideone.com/4mkYde

233/151 = 1.54304635761589414855
1855077841/1311738121 = 1.41421356237309514547
1457/536 = 2.71828358208955211950
54193766400/17250408000 = 3.14159331187992751921
0194デフォルトの名無しさん
垢版 |
2021/09/26(日) 02:51:04.12ID:edcxzAwz
>>186 J
f =: +`%/
___ f 1,2,3,4,5,6,7
1.54305
019596
垢版 |
2021/09/26(日) 11:06:39.50ID:ROfWiNc+
>>186 Perl5、>>191だと分母が大きい値になるテストケースで下の桁が例解と違ってくるので、通分を下から再帰的に行って
最後に割り算するようにした。また数値の個数が偶数だった場合には0を補うようにした

use feature qw{signatures say}; no warnings 'experimental';
sub f($a, $b, $c = 0, @r) {
 if (@r) {
  ($c, $e) = f($c, @r);
  $b *= $e;
 }
 ($a * $c + $b), $c;
}
for (<DATA>) {
 my ($n, $d) = f(/(\d+)/g);
 say "$n / $d = ", $n / $d;
}
__DATA__
1,2,3,4,5,6,7
1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2
2,1,1,1,2,1,1,1,1,1,4,1,1,1,1,1,6,1,1,1,1,1
0,4,1,1,3,4,5,9,7,16,9,25,11,36,13,49,15,64,17,81,19,100

$ perl 20_186_fraction_2.pl
233 / 151 = 1.54304635761589
1855077841 / 1311738121 = 1.4142135623731
1457 / 536 = 2.71828358208955
54193766400 / 17250408000 = 3.14159331187993
0196デフォルトの名無しさん
垢版 |
2021/09/26(日) 13:52:29.02ID:Db797RWb
すいません
>>191は例題おかしいので数字合わないですね
気にしないでください
最後の例では最後の項の100抜くか、最後に21を追加してください

100抜いた場合は
4317632 / 1374345 = 3.14159254044654
21追加した場合は
54743776 / 17425485 = 3.1415926730303347

になると思います
>>191の例は
0+4/(1+(1/(3+...(17+81/(19+100/0)))))...)))
になってしまってるんだと思います(違うかも)
0197デフォルトの名無しさん
垢版 |
2021/09/26(日) 15:05:57.74ID:RIy3qD4V
>>186 ocaml
https://ideone.com/VpQwAG
let f xs =
let rec g = function
[] -> 0, 1
| a :: [] -> a, 1
| a :: b :: [] -> a + b, 1
| a :: b :: cs -> let n, d = g cs in a * n + b * d, n
in let n, d = g xs in Printf.printf "%d / %d = " n d;float n /. float d

>>186 ocaml
https://ideone.com/5D0lHx
let f xs =
let rec g = function
[] -> 0, 1
| x :: [] -> x, 1
| x :: xs -> let n, d = h xs in x * d + n, d
and h = function
[] -> 0, 1
| x :: [] -> x, 1
| x :: xs -> let n, d = g xs in x * d, n
in let n, d = g xs in Printf.printf "%d / %d = " n d;float n /. float d
0198デフォルトの名無しさん
垢版 |
2021/09/26(日) 15:06:59.82ID:RIy3qD4V
let g xs = Printf.printf "%.16f\n" @@ f xs
let () =
g [];g [1];g [1;2];g [1;2;3];g [1;2;3;4];g [1;2;3;4;5;6];
g [1;2;3;4;5;6;7];
g [1;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2;1;2];
g [2;1;1;1;2;1;1;1;1;1;4;1;1;1;1;1;6;1;1;1;1;1];
g [0;4;1;1;3;4;5;9;7;16;9;25;11;36;13;49;15;64;17;81;19;100];
g [0;4;1;1;3;4;5;9;7;16;9;25;11;36;13;49;15;64;17;81;19];
g [0;4;1;1;3;4;5;9;7;16;9;25;11;36;13;49;15;64;17;81;19;100;21]

0 / 1 = 0.0000000000000000
1 / 1 = 1.0000000000000000
3 / 1 = 3.0000000000000000
5 / 3 = 1.6666666666666667
9 / 7 = 1.2857142857142858
59 / 37 = 1.5945945945945945
233 / 151 = 1.5430463576158941
1855077841 / 1311738121 = 1.4142135623730951
4178 / 1537 = 2.7182823682498372
66628546560 / 21208521600 = 3.1415931679085070
12434780160 / 3958113600 = 3.1415925404465401
315324149760 / 100370793600 = 3.1415926730303347
0199ハノン ◆QZaw55cn4c
垢版 |
2021/09/26(日) 19:57:37.78ID:KhgDxRBF
>>197
>[] -> 0, 1
>| x :: [] -> x, 1
>| x :: xs -> let n, d = h xs in x * d + n, d

>>193 を書いた私としてはなんとなくわかってしまうのが‥‥悲しいですね
0200ハノン ◆QZaw55cn4c
垢版 |
2021/09/26(日) 19:58:46.43ID:KhgDxRBF
つまり >>193 は言語として冗長だ、という点が悲しい、という意味です、誤解を招かないように補充します
0202デフォルトの名無しさん
垢版 |
2021/09/26(日) 21:49:22.16ID:6LE1NaJb
お題: 与えられたUTF-8日本語文章から空白と記号を取り除いた後の文字列にNGワードがあるかどうか判定せよ。

NGワード: 「集近閉」「地獄経済」

例文1「集☆近☆閉☆は☆不☆滅」
例文2「地/獄/経/済/は/大/丈/夫」

出力例:「NGワード「集近閉」があります。」
出力例:「OKです。」
0204デフォルトの名無しさん
垢版 |
2021/09/26(日) 21:58:42.24ID:Db797RWb
>>196
いまレス読み返したらアンカー間違ってるorz
>>196>>191と書いてあるのは全部>>186宛の自己レスです
191さんすいません
ちなみにやっぱり186の数値

3.141593311879928

は最後の部分を.../(17+81/(19+100/(0))))..として処理した値でした
100/0が∞になって17+81/(19+∞) = 17となって結局17で打ち切った場合の答えになってました
17で打切った場合

3763456 / 1197945 = 3.1415933118799275

>>186の値になってました
0205デフォルトの名無しさん
垢版 |
2021/09/27(月) 02:09:19.34ID:mB71+9h3
お題:: 文字列に対して文字列の範囲を指定すると、その範囲を角カッコで囲って出力するプログラムを作れ
文字列はASCII文字の並びでソートされている前提とする

入力フォーマット
文字列
範囲

入力
abcdefghijklmn
c-g

出力
ab[cdefg]hijklmn
0206デフォルトの名無しさん
垢版 |
2021/09/27(月) 03:27:36.76ID:HGR3sN0a
お題: ハッシュタグをGoogle検索リンクに変換せよ。

ハッシュタグを含む日本語UTF-8文字列が与えられる。ハッシュタグをHTMLハイパーリンクに変換してHTMLテキストを出力する。

ハッシュタグは「#」か「#」か「♯」で始まるものとします。
ハッシュタグには半角の「_」以外の記号と空白は使えません。
HTMLの特殊文字「&<>」はそれぞれ「&」「&lt;」「&gt;」に変換するものとします。
検索リンクは日本語グーグルを使用します。

入力例「これは #テスト文字列です。 #家族募集中 <本日は雨天なり>」
0207デフォルトの名無しさん
垢版 |
2021/09/27(月) 03:36:26.68ID:lACGcuZa
>>206
出力例もよろしく
0211デフォルトの名無しさん
垢版 |
2021/09/27(月) 11:20:24.19ID:FdLhLOZv
>>206
$ echo -e 'これは #テスト文字列です。 #家族募集 中 <本日は雨天なり>' |
sed -e 's/&/\&/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's![##♯]\(\w*\)!<a href="https://google.co.jp/search?hl=ja\&source=hp\&q=\1">&</a>!g'

これは <a href="https://google.co.jp/search?hl=ja&;source=hp&q=テスト文字列です">#テスト文字列です</a>。 <a href="https://google.co.jp/search?hl=ja&;source=hp&q=家族募集中">#家族募集中</a> &lt;本日は雨天なり&gt;
0219デフォルトの名無しさん
垢版 |
2021/09/28(火) 07:20:01.83ID:OyddjX6J
>>176 Lua
function f(x, y, m, z, w, n)
return (x - z) ^ 2 + (y - w) <= (m + n) ^ 2
end
0220デフォルトの名無しさん
垢版 |
2021/09/28(火) 07:27:57.86ID:OyddjX6J
>>219
間違えました
function f(x, y, m, z, w, n)
return (x - z) ^ 2 + (y - w) ^2<= (m + n) ^ 2
end
0221デフォルトの名無しさん
垢版 |
2021/09/28(火) 10:29:00.43ID:wFK5NO29
あ、そーか。2乗のまま比較すればsqrt不要だったな。
0223デフォルトの名無しさん
垢版 |
2021/09/28(火) 23:13:01.41ID:R7FPj2K+
>>209
の出力例をみると“テスト文字列です”は文字列、“。”な区切り記号と認識してここで切らないとダメみたいだけど、だとするとunicodeの文字列の中にある“区切り記号”と“文字列を構成する文字”を区別しないといけなくなる
GOには“unicode”というライブラリが用意されてて簡単にできるみたいだけどオレが愛用するHaskellではその手のライブラリが見つからんorz
流石にスクラッチで一から書くのは無理だし
どっかに“コード××〜××までは記号”とか一覧になってるテーブルとかないんかな
0227デフォルトの名無しさん
垢版 |
2021/09/29(水) 11:07:43.39ID:0XODgfdX
Unicodeで半角全角を扱う Ambiguous(曖昧さ)とUncertainty(不確実性)の恐怖
https://qiita.com/Nuits/items/71a69cf32d547c9875bb


ま、しかし、なんとなくいい加減で入力によってはおかしくなるやつならば作れるので、後で時間があったら作ろう。
0228デフォルトの名無しさん
垢版 |
2021/09/29(水) 12:01:49.91ID:hPAWkWy2
>>227
> Unicodeで半角全角を扱う場合、まずフォントがEast Asian Widthの規定を正しく守っている必要があります。でも実際にはそうとは限りません。
>
> またそれを取り扱うプラットフォームも適切に実装されている必要がありますが、必ずしもそうとは限りません。

仕様を満たしてないものは仕様通りの挙動にならないかどで仕様を叩いているということで合ってる?
0229デフォルトの名無しさん
垢版 |
2021/09/29(水) 12:03:25.69ID:SXvzkJ7t
Boys, be Ambiguous.
0232デフォルトの名無しさん
垢版 |
2021/09/29(水) 13:41:53.17ID:p1B8H211
>>230
> 2020年、2021年の東京では、東京マラソンの開催、東京国際クルーズターミナルのオープン、
> 東京2020オリンピック・パラリンピック競技大会の開催など、国際的に注目を集めるイベントが
> 多数予定されています。

外国からの入国制限、及び無観客にして解決。
0234蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/29(水) 19:46:15.13ID:1i2b1Egj
お題: 重力と慣性のないデカルト座標系に長さ3, 4, 5の固くて丈夫な連結された3本の棒B1, B2, B3がある。棒の幅はゼロに近い。
B1, B2, B3は現在x軸上に並んでいて、それぞれの端点の座標はO(0, 0)~E1(3, 0)、E1(3, 0)~E2(7, 0)、E2(7, 0)~E3(12, 0)である。
B1, B2, B3はこの順で端点が連結されており、B1の一端は原点O(0, 0)に連結されている。B3の他方の端は自由である。連結点では-180〜180度曲げることができる。
このような条件でB1, B2, B3を連結点O, E1, E2を中心に回転するとE1, E2, E3は移動するであろう。
さて、点P(x, y)が与えられたとき、どのように回転すればE3がPに重なるであろうか。その回答の一つを求めよ。許容誤差をε=0.01とする。
入力例「P=(0, 12)」「P=(5, 5)」「P=(15, 3)」
出力例「90度、0度、0度」「ありません」
0237デフォルトの名無しさん
垢版 |
2021/09/29(水) 21:47:32.31ID:yKvURuJk
悪"そう"では無いな。説明において要点を整理出来ない者はすべからく頭悪い
問題文はその者の理解度に等しい
0240デフォルトの名無しさん
垢版 |
2021/09/30(木) 03:52:16.30ID:Ai6xyiAS
ちなみに代わりに出題するなら

入力(a,b)に対して方程式
a = 3cos(x) + 4cos(x+y) + 5cos(x+y+z)
a = 3sin(x) + 4sin(x+y) + 5sin(x+y+z)
の解x,y,zをひとつ求め(度数法で与えるとする)
「x度、y度、z度」
の形で出力せよ、解がない場合には
「ありません」
と出力せよ
ただし角度の範囲は-180°〜180°の範囲で与えるとする

かな
0246蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/30(木) 21:01:09.92ID:8ZMYiRqf
2つの副業と、ベルトコンベアのラインでねじ回しの仕事で疲れてるから許してくれよ。
0247蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/09/30(木) 21:13:56.42ID:8ZMYiRqf
この技術を応用すればロボットアームを自由自在に動かせそうだね。
0251デフォルトの名無しさん
垢版 |
2021/10/04(月) 21:51:58.57ID:8pCgPPfH
お題: CSV形式のテキストデータを検索する grep のようなコマンド(または関数)

CSVの形式は RFC 4180 の通りで文字のエンコーディングは UTF-8、改行は CR/LF。
この辺のページを参考にすると良い。
https://datatracker.ietf.org/doc/html/rfc4180
http://www.kasai.fm/wiki/rfc4180jp
https://blog.tech-monex.com/entry/2021/03/26/160000#2-Definition-of-the-CSV-FormatCSV%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AE%E5%AE%9A%E7%BE%A9

普通の grep コマンドを CSV ファイルに対して行うと1つのデータで改行が入っていた時に何行目の何列目のデータなのかが分からなくなって不便である。
その他、ダブルクォーテーションで括られているか否か、データとしてカンマやダブルクォーテーションを含むか否かで検索する側が正規表現を考慮して作らねばならず面倒臭い。
ということでこういった面倒くささを解消するコマンドを作るのがこのお題。
コマンドという形式ではなく正規表現と検索されるCSVテキスト(あるいはCSVファイル名や読み込みオープンしたファイルデスクリプタ)と検索する時のオプション(大文字小文字を無視など)を渡すと検索結果を返す関数を作成しても良い。
尚、1行目の項目名が入っている事がある行についてはその存在の有無をオプションで渡して指定する方式にして良い。

検索結果はパターンにマッチしたデータについて何行目、何列目だったかが分かるようにしてデータと共に出力する(関数の場合は呼び出し元に返す)。
出力する時にデータを見易くするために改行があったら \n 等にエスケープして1行にしても良い。

CSV読み込みや正規表現について既存のライブラリを使うか否かはご自由に。但し言語や環境に最初から付属していない外部のライブラリを使う場合は何を使ったかが分かるようにコメント等に入れておくこと。
0253デフォルトの名無しさん
垢版 |
2021/10/05(火) 01:25:35.09ID:jsFp2nZ3
難し過ぎたか・・・
0254デフォルトの名無しさん
垢版 |
2021/10/05(火) 03:24:50.56ID:8XAhfzzR
お題として質が低いのよ。
課題だねこれじゃw
宿題や仕事は自分でやってどうぞ
0255デフォルトの名無しさん
垢版 |
2021/10/05(火) 07:56:40.58ID:DrLIL1/r
てかちょっとガチでやったらそれなりの規模になるからこんな所でやるようなもんじゃない
0256デフォルトの名無しさん
垢版 |
2021/10/05(火) 11:30:23.33ID:akfRupr1
せやな
どんなに長くても30分くらいて完成する程度がやってみようと思える限界やろな
所詮暇つぶしやし
0257デフォルトの名無しさん
垢版 |
2021/10/05(火) 11:35:39.40ID:jsFp2nZ3
まあやるやらないは自由なので
0258デフォルトの名無しさん
垢版 |
2021/10/05(火) 12:04:55.27ID:+8sevm6S
じゃあ俺がやるよO/
0259デフォルトの名無しさん
垢版 |
2021/10/05(火) 12:39:36.95ID:mwjMS5Mk
というか正確に仕様を満たせというのは実装チャレンジであって僕の考えた最強の解決策を見せっこするためのお題にはならんだろ
0261デフォルトの名無しさん
垢版 |
2021/10/05(火) 13:17:01.07ID:+8sevm6S
>>260
0262デフォルトの名無しさん
垢版 |
2021/10/05(火) 13:17:11.37ID:+8sevm6S
>>259
??
0263デフォルトの名無しさん
垢版 |
2021/10/05(火) 13:17:42.69ID:+8sevm6S
解かない人は黙っててもらえないかな
0264デフォルトの名無しさん
垢版 |
2021/10/05(火) 13:19:46.17ID:+8sevm6S
>>255
ライブラリ使えば余裕

>>256
俺は人生かけてチャレンジする
0265デフォルトの名無しさん
垢版 |
2021/10/05(火) 13:20:57.94ID:+8sevm6S
>>251
ちょっと待ってろ俺が回答してみせる
しばらく修行の旅に出る
0267デフォルトの名無しさん
垢版 |
2021/10/05(火) 14:03:05.86ID:+8sevm6S
>>254
ライブラリ使うのもあり
オートマトンを実装するのもあり
Bison使うのもあり
パーザジェネレータから作るのもあり

すごく面白そうじゃん
0268デフォルトの名無しさん
垢版 |
2021/10/05(火) 14:03:59.63ID:+8sevm6S
お題に文句つけるのはお前ららしくないよ
淡々と馬車馬のように回答するのがお前らのアイデンティティだろ
初心思い出せよ
0269デフォルトの名無しさん
垢版 |
2021/10/05(火) 15:15:20.74ID:jsFp2nZ3
>>260
そうそう。それそれ。
0270デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:59:47.28ID:xRQj077j
お題 持久戦
隔たりのない6面のサイコロがN個ありi番目のサイコロのj番目の面には整数Aijが書かれている
高橋君は一個のサイコロを選んで一回振ると言う操作を繰り返す。
ただし2回目以降の操作で、前回の操作で出た目より小さいか同じ目が出てしまったら操作を止める
各回どのサイコロを振るかは前回に出た目を見てから決めることができる
高橋君は出来るだけサイコロを多く振りたいと考えている
操作の行われる期待値が最大化されるような選択が行われたときの操作回数の期待値を求めよ

と言うのが数学板に投下されたけどどう見ても数学の問題でないので全員ガン無視

https://atcoder.jp/contests/past201912-open/tasks/past201912_o
0271デフォルトの名無しさん
垢版 |
2021/10/06(水) 12:59:53.99ID:xRQj077j
以下自分の計算した例
間違ってるかも

入力
1
[ [ 1,2,3,4,5,6 ] ]
出力
117649 / 46656 ( = 2.5216263717421126 )

入力
3
[ 1,2,3,4,5,6 ]
[ 1,4,9,16,25,36 ]
[ 1,8,27,64,125,216 ]
出力
13070575 / 3779136 ( = 3.4586146145574013 )

入力
3
[ 1,1,1,1,1,1 ]
[ 2,2,2,2,2,2 ]
[ 3,3,3,3,3,3 ]
4 / 1 ( = 4.0 )

出力は別に小数表示でも良いとする
尚最後の例は元サイトの“全部異なる”の制約満たしてないけど検算用、無視して桶
0273デフォルトの名無しさん
垢版 |
2021/10/09(土) 14:34:36.05ID:uZ4xSJeU
>>272
偏りのないです
元ネタのホムペには他にも何問か有るんですけどコレ以外はあんまり面白いのがない
ちなみに例はN=1,3でこれくらいだと総当たりでも解ける
でも元ネタサイトの制限はN≦30000でこれだと実質総当たりだと解けない
なので元ネタは「いわゆるDPで解ける問題だけどできますか?」が題意のようです
まぁここではN=3くらいでパッパッと解ければいいかと
0274デフォルトの名無しさん
垢版 |
2021/10/12(火) 06:03:57.89ID:e1q14myl
お題:
正整数 N が与えられます
f(x) = 正整数 a, b であって 0 < a / b < 1 かつ b ≦ x を満たす a / b の「値の種類数」
としたとき f(x) = N を満たす x が存在するか判定しなさい

制約:
1 ≦ N ≦ 10^12

入力: N
出力: x が存在するのなら "Yes", 存在しないのなら "No"

入力例 1: 11
出力例 1: Yes (f(6) = 11 です)

入力例 2: 123
出力例 2: No

入力例 3: 303963552391
出力例 3: Yes (f(1000000) = 303963552391 です)
f(x) の例
f(1) = 0
f(2) = 1
f(3) = 3
f(4) = 5
f(5) = 9
...
0276デフォルトの名無しさん
垢版 |
2021/10/15(金) 22:08:55.85ID:NqIVJaNX
じゃ簡単なお題を

1.少数(整数部MAX5桁、小数部MAX5桁)を入力し、分数に変換するプログラムを作成しなさい。

2.誕生日と日付AをそれぞれYYYYMMDDの8桁の整数で入力し、日付Aの時点で何歳かを表示するプログラムを作成しなさい。

3.西暦年YYYYを入力して閏年か否かの判定をするプログラムを作成しなさい。
0277デフォルトの名無しさん
垢版 |
2021/10/15(金) 22:53:54.66ID:HBylJ5Wv
平面3リンクマニュピュレータの逆運動学のプログラミングを完成させなさい。
キーボードで手先の位置を入力すると、関節角が表示されるようにすること。
scanfを使うのと、アームの長さなどは適当に決めていいという条件。
0278デフォルトの名無しさん
垢版 |
2021/10/15(金) 23:23:30.53ID:eqKsqNtm
>>277
平面3リンクマニピュレータというものを検索してみたけど、手先の位置だけ与えても各関節の角度は同定できないのでは?
0279デフォルトの名無しさん
垢版 |
2021/10/15(金) 23:45:51.35ID:HBylJ5Wv
>>278
第1関節は原点で固定ですね。
手先の位置・姿勢が(xed, yed, φed)と与えられた(キーボード入力)時の、第3関節の位置が
x2=xed−L3×cosφed
y2=yed−L3×sinφed
と求まり、第3関節がこの場所に来るには、リンク1とリンク2が三角形の2辺になるように第1関節と第2関節の角度を決めるという感じですね。
0280デフォルトの名無しさん
垢版 |
2021/10/16(土) 02:01:06.18ID:8sv207AJ
お題専門用語だらけでググらないと意味わからないようなお題やる気にならん
0282◆QZaw55cn4c
垢版 |
2021/10/16(土) 17:58:18.20ID:EXZ4MfzZ
>>268
>初心思い出せよ
すみません……
0283デフォルトの名無しさん
垢版 |
2021/10/16(土) 18:45:58.11ID:BO6yK2Ly
scanfってことはHaskellじゃダメなのか。
休み一日しかないから取り掛かってみるか止めとくか悩むね。
0284デフォルトの名無しさん
垢版 |
2021/10/16(土) 18:53:52.75ID:BO6yK2Ly
>>277は算数はわかってるんだけどプログラムがわからないんだろな。
そんなあなたにHaskell!!Haskell!!
0285デフォルトの名無しさん
垢版 |
2021/10/16(土) 19:48:39.78ID:ZzoUZQ8H
>>277
C++のスレで僕の丸投げ課題だれもやってくれないって拗ねてた奴か
こっちにまで来て人に迷惑かけるなよ
0287デフォルトの名無しさん
垢版 |
2021/10/17(日) 08:07:29.47ID:QqhGhKAl
算数じゃなかったら何なんだ。
0289ハノン ◆QZaw55cn4c
垢版 |
2021/10/17(日) 08:14:29.67ID:iZHfLY3S
>>287
物理なら剛体力学でしょうが力学的要素はないから今回は工学の機構学とかそんな感じ

>>279
>リンク1とリンク2が三角形の2辺
せっかく一つ余分にある自由度を、そんな縛りで消費するのはもったいないと思います、それは力学的配慮ですか?
0290デフォルトの名無しさん
垢版 |
2021/10/17(日) 08:34:02.73ID:QqhGhKAl
私は高校一年生の算数で解ける。
0291デフォルトの名無しさん
垢版 |
2021/10/17(日) 08:35:04.57ID:QqhGhKAl
高校一年生が解く方法と、大学生が解く方法は違うのだろうか?
0292デフォルトの名無しさん
垢版 |
2021/10/17(日) 09:18:03.49ID:MkgjpPUe
>>277
まぁ、
X=Lcosθ+Mcos(θ+φ)+Ncos(θ+φ+Ψ)
Y=Lsinθ+Msin((θ+φ)+Nsin(θ+φ+Ψ)
みたいな感じで、LMNは適当に決めるとしても、角度のパラメータが3つあるんで、
もう1条件制約をかけないと決まらないケースが多発するだろうなぁ。

アームの長さを適当に決めろというなら、N=0にでもしてしまえば、
要はLとMと(原点と(X,Y)の距離)の三角形で角を求めろっていうだけの問題だから、
余弦定理でcosθは求まるかな。

それはインチキだというなら、
原点と(X,Y)の距離に応じてLの先端部分と(X,Y)までの距離が適当・・・
たとえば、(M+N)の半分になるような位置に位置づけることにして、
あとは、余弦定理で解けそうだけど。

よりコンピュータらしい力技でいくなら、三重ループで0から360度まで適当なステップ
(たとえば、5度おき)に回して、距離が目標位置に一番近くなった時の値の前後
(5度おきにとったなら前後5度分・・10度分だね)を1度とか0.1度とかのステップで
3重ループで回して、一番目標位置に近かったものを答えにする。
0293デフォルトの名無しさん
垢版 |
2021/10/17(日) 10:36:29.88ID:31BFfd9w
腕の長さ自由に決めていいならひとつ捨てて残り2つ同じ長さにすればカバーできる範囲同じで計算も簡単になる
元のお題でそもそもわざわざ関節3つ使う理由がない
0294デフォルトの名無しさん
垢版 |
2021/10/17(日) 10:51:06.44ID:UoQPOfGF
どうでもいいことを長々と議論するなあ
無視すりゃいいだろw
0295デフォルトの名無しさん
垢版 |
2021/10/17(日) 10:57:44.74ID:QqhGhKAl
手先の位置というのが同定できない原因だったけど、位置と角度に変わったので大丈夫では?
0296デフォルトの名無しさん
垢版 |
2021/10/17(日) 11:01:26.31ID:QqhGhKAl
関節角度の並びは二つに限られ、第一腕部第二腕部が直線に並ぶ時ひとつ、それ以外は二種類の並びに制限される。
0297デフォルトの名無しさん
垢版 |
2021/10/17(日) 12:08:44.44ID:QqhGhKAl
https://imgur.com/a/Y5mxr55
こんな感じでは?
実線と点線の二つの腕の位置が有り得る。
あとは余弦定理を使えば全て解ける。
0299デフォルトの名無しさん
垢版 |
2021/10/17(日) 15:12:12.66ID:atjZW8su
お題: 「平面3リンクマニュピュレータの逆運動学」とは何か。日本語で説明せよ。
0300デフォルトの名無しさん
垢版 |
2021/10/17(日) 15:21:58.09ID:06wimQoq
ロボット工学本の逆運動学の章に必ず載ってる問題。勿論解法も載ってる。

>>277のアホはその解法のプログラミング(の課題)が出来ず、ここの連中にやらせようとしてる。
0301デフォルトの名無しさん
垢版 |
2021/10/17(日) 15:54:50.71ID:31BFfd9w
作りゃいいと言われてもあまりにも意味わかんない
関節3つつけるのは当然手先の向きとかに制約がないと意味ない
じゃあ無視して関節2つでと言われたら面白くもなんともない
0302デフォルトの名無しさん
垢版 |
2021/10/17(日) 18:26:22.03ID:QqhGhKAl
結論:算数で十分でした。
0304デフォルトの名無しさん
垢版 |
2021/10/17(日) 18:39:49.61ID:QqhGhKAl
>>303
すごい。
0306デフォルトの名無しさん
垢版 |
2021/10/18(月) 12:12:09.30ID:MhIWImiq
ときどき言ってたり、やったりするがいまだ解答不明
平面上に円をおき、その円周上の整数点がちょうどn個となる円の最小半径は?
具体的にn=47でもわからない
0307デフォルトの名無しさん
垢版 |
2021/10/18(月) 19:23:56.84ID:578ljV9d
nは奇数にもなり得るの?
0309デフォルトの名無しさん
垢版 |
2021/10/18(月) 20:08:42.56ID:h1g8zzDx
全てnに対して円が存在するかどうかはわかってるの?

n=0, n=1の時は円は存在するが最小値は存在しない
n≧2の時は円が存在するなら最小値も存在する
0310デフォルトの名無しさん
垢版 |
2021/10/18(月) 21:27:28.14ID:9iPUXHWE
1970年から2369年までの間で
カレンダーの曜日が365(366)日同じパターンで出て来る年をグループ分けして
グループが全部で何個あるか(たぶん即答7個だけど365と366を違うものとするので7以上)と
各グループに何年が属するかを出力するプログラム
0313デフォルトの名無しさん
垢版 |
2021/10/19(火) 00:20:44.71ID:eZJKwUVR
>>276
とりあえず1だけ。

perl -ne 'print int($_ * 100000) . " / 100000\n"'
0314デフォルトの名無しさん
垢版 |
2021/10/19(火) 00:37:17.41ID:uZ+aFQr8
>>310 bat
@echo off &setlocal enabledelayedexpansion
for /L %%y in (1970,1,2369) do set /a "fL=^!(%%y%%4)^^^!(%%y%%100)|^!(%%y%%400), g=%%y-1, w=(%%y+g/4-g/100+g/400)%%7" &for /f %%i in ("!fL!!w!") do set "p%%i=!p%%i!,%%y"
set n=0
for %%w in (日,月,火,水,木,金,土) do set "w!n!=%%w"&set /a n+=1
set L0=平
set L1=閏
echo 閏有無 1月1日の曜日 : 西暦年
for /L %%a in (0,1,1) do for /L %%b in (0,1,6) do echo !L%%a!年 !w%%b!曜日 : !p%%a%%b:~1!
pause &exit /b
0316デフォルトの名無しさん
垢版 |
2021/10/20(水) 01:31:42.75ID:3o6derLl
>>313
勘違いしてるぞそれw
0320デフォルトの名無しさん
垢版 |
2021/10/21(木) 13:16:40.90ID:LMXfXe/q
x^4+y^4+z^4=a^4
が成り立つ値
x,y,z,a
を求めよ。
0321デフォルトの名無しさん
垢版 |
2021/10/21(木) 16:28:37.98ID:s+STdMnX
0
0322デフォルトの名無しさん
垢版 |
2021/10/21(木) 18:41:27.23ID:LMXfXe/q
>>320
値は2以上の自然数ね
0324デフォルトの名無しさん
垢版 |
2021/10/21(木) 20:52:10.29ID:I05C+tHT
>>310 octave
https://ideone.com/Db3vpP
year = @(y) cell2mat(arrayfun(@(m) {calendar(y, m)'(:)}, 1:12));
years = @(ys) cell2mat(arrayfun(@(y) {year(y)(:)'}, ys)');
ys = 1970:2369;
[c, ~, ic] = unique(years(ys), 'rows');
c, arrayfun(@(uic) {mat2str(ys(ic == uic))}, unique(ic))
0327デフォルトの名無しさん
垢版 |
2021/10/22(金) 02:39:08.04ID:K3be3gm5
>>306
n=2〜10、とりあえず値だけ
1/2、5/(3√2)、1/√2、25/(3√2)、5/2、(25√221)/(11√2)、√(5/2)、65/(3√2)、25/2
0330デフォルトの名無しさん
垢版 |
2021/10/22(金) 23:54:51.41ID:7DKt7uEz
"最小"である事を数学的に証明出来なければ最小であるとは言えないと思うのだが最小である証明って出来るの?
証明方法あるなら是非教えて頂きたいのだがちょっとスレチかなぁ?
0331デフォルトの名無しさん
垢版 |
2021/10/23(土) 01:17:25.17ID:BHiRdnVn
この問題の場合は
可能性を総当たりでつぶしていく方法があるから
計算機科学的にいえば「証明可能」だと思う
現実的な時間で解が求まるかどうかはまた別の話
0334デフォルトの名無しさん
垢版 |
2021/10/23(土) 09:08:29.52ID:lhX1R4Wb
[0,1)×[0,1)に中心があり半径が801125/√72=94413.486...の円に入る円の格子点の数はおよそ2.8×10^10個
そこから3つ選んでルーブ回すとループの回数は2.1×10^31回
1秒で10^10回ループ回せたとして10^20秒の桁
何兆年もかかる
0335デフォルトの名無しさん
垢版 |
2021/10/23(土) 09:46:56.70ID:LnA0RHk6
総当たりじゃないうまい方法を考えなさい
ってのがこのスレ的な話題なんじゃない?
0336デフォルトの名無しさん
垢版 |
2021/10/23(土) 09:55:07.00ID:HC6G+u/J
数学の人には渋い顔されるだろうけど
コンピュータだったらまずは総当たり作ってみてそこから改良してくの全然ありだと思う
0337デフォルトの名無しさん
垢版 |
2021/10/23(土) 12:38:00.73ID:8QkqEddx
これはもしかして座標の問題ではなく円の性質では?
0339蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/10/23(土) 14:11:15.10ID:HSZ38wuD
お題:
(1) 数当てゲームを作成せよ。コンピュータ側は1〜100の自然数をランダムに選び、ユーザ側は、当たるまで繰り返し数を選ぶ。コンピュータは当たれば「当たり!」、外れれば「それより大きいです」か「それより小さいです」を出力する。
(2) そのゲームに、ユーザー側としてAIが介入可能な入出力インターフェースを追加せよ。出力: 数、入力: コンピュータからのメッセージ。
(3) 二分探索アルゴリズムによって、数当てゲームのAIを完成せよ。
0340デフォルトの名無しさん
垢版 |
2021/10/24(日) 00:22:45.96ID:Gedozjyx
AIとは何か?
0341デフォルトの名無しさん
垢版 |
2021/10/24(日) 00:39:25.83ID:8hWi5KuQ
うわー難しいこと聞いてきた。
0343デフォルトの名無しさん
垢版 |
2021/10/24(日) 05:13:25.20ID:H3SbS1d2
Application Interface
0344デフォルトの名無しさん
垢版 |
2021/10/24(日) 08:59:19.22ID:iNEhflB6
X^2 + Y^2 = N の整数解は、Nの素因数分解からわりと簡単に求められる
X = cx +a , Y = cy + b として、拡大縮小+中心移動したとき解個数がどのように変化するのか、わかればいいのだが
N = 2^(n0)・p1^(n1 - 1)・p2^(n2 - 1)・・・・・(pi ≡1 mod 4)と素因数分解されたとすると 解個数は 4 ・ n1 ・ n2 ・・・・・
X^2 + Y^2 = (X + iY)(X - iY)と、 4k+1型素数はたとえば5 = (2+i)(2-i)のように分解できることから最初の式の解も具体的に求められる
0345デフォルトの名無しさん
垢版 |
2021/10/24(日) 09:25:46.21ID:iNEhflB6
たとえば >>329の右辺の数 801125 = 5^3×13×17×29 なので
a=1+2i、 b=2+3i、 c=1+4i、 d=2+5iとおくと 5=a~a (~aは複素共役)等になる。
X^2 +Y^2 = 801125^2 の解個数は756=4*7*3*3*3
z=a^i (~a)^(6-i)とおくと、z~z = 5^6 等から複素数の積の計算して解も求まる
0346デフォルトの名無しさん
垢版 |
2021/10/24(日) 09:57:22.23ID:mn+DQKnt
>>344
それで中心と半径が与えられたときのってる格子点の数が簡単に求められたとしても、“最小のR”を求めるのにそこまで役に立つわけやないやろ
中心が( -a/N, -b/N ), 半径√Rとして格子点が満たすべき方程式は

( Nx + a )^2 + ( Nx + b )^2 = N^2R

だから求める格子点の個数は方程式

u^2 + v^2 = N^2R, ‥@
u ≡ a ( mod N ), v ≡ b ( mod N )‥A

を満たす(u,v)の数になる
となると格子点の個数が例えば47とか抑えられててもN^2Rがの可能性が直ちに抑えられるわけではない、N^2Rがメチャクチャ大きくてもa,bをうまく選べば@、Aを満たす整数解はさほど多くなくなる可能性が出てくる
結局
「Rは小さい(最小値求めてるので)、@,Aを満たす整数解の個数は少ない(問題文で与えられてる条件)」
を科してもNの上限が直ちに決まったりはしない
0349デフォルトの名無しさん
垢版 |
2021/10/26(火) 21:57:54.63ID:YDtvu9T4
( Nx + a )^2 + ( Ny + b )^2 = R の解個数は
X^2 + Y^2 = R の解個数以下ということでは?
0350デフォルトの名無しさん
垢版 |
2021/10/26(火) 22:04:08.64ID:YDtvu9T4
Rを十分大きくとって、X^2 + Y^2 = R の解個数が1万だとしても
( Nx + a )^2 + ( Ny + b )^2 = R  で 1万以下のすべての解個数を作りだせるかというと間違ってそうだからな
>>346はそういうことだろ?
9997の解個数を得ようとすれば、X^2 + Y^2 = R の解個数はたとえば100億でないと無理かもしれない
0352デフォルトの名無しさん
垢版 |
2021/10/27(水) 12:58:14.54ID:QXFcz/ph
お題
デスクトップにフォルダーA,B,C,D,E,F,G,H,I,J,K,Lがある。
D&Dで一つのフォルダーにまとめる。それぞれのフォルダーの
パス名の組み合わせは何通りあるか数える
(デスクトップはルートフォルダーみたいに表記してよい)
例:
A,Bの場合
1./A,/A/B
2./B,/B/A
A,B,Cの場合
1./A,/A/B,/A/C
2./A,/A/B,/A/B/C
3./A,/A/C,/A/C/B
4./B/A,/B,/B/C
5./B/C/A, B,/B/C
6./B/A,/B,/B/A/C
7./C/A,/C/B,/C
8./C/A,/C/A/B,/C
9./C/B/A,/C/B,/C
できれば、SQLのみを使ったもの
0354デフォルトの名無しさん
垢版 |
2021/10/27(水) 14:15:39.88ID:t2iD5tO8
ハノイの塔と同値
0355デフォルトの名無しさん
垢版 |
2021/10/27(水) 16:59:18.79ID:M8/Dvct0
>>350
違う
>>346で言ってるのは

問題 円上の格子点の数がちょうど47個である円の半径の最小値を求めよ

においてガウス整数環の因数分解の話を使って

問題 方程式

u^2 + v^2 = N^2R, ‥@
u ≡ a ( mod N ), v ≡ b ( mod N )‥A

を満たす(u,v)の数が47であるRの最小値を求めよ

という問題に還元したとして、“解の個数が47個”という条件を利用してもNの上限を決めることができないということ
なんかの理論なり勘なりでR<10万とか決まってもそれによってNの上限が決まったりはしない
N=一兆くらいで素因子を山のように持っててもa,bの選択によっては結局解の個数が47個という可能性が残るからガウス環の因数分解の理論など使っても“解の最小値”を調べるのに対して役に立たないと言ってる
大体この手の問題は
「なんでもいいから一つ構成する方法探せ」

「解の最小値求めよ」
では問題の性格がまるで違ってくる
単に解構成するだけなら色んな方面の色んな知識使って色々なアプローチが出てくるけど、「最小値求めよ」にした途端に本質的に総当たりしか無くなってしまうことが多い
まぁ計算機持ち出す場面って大概それしか方法がないときだからそれはそれでいいんだけど、このスレででかい数字で総当たりしか手がない問題で、とても個人所有のパソコンでは手が出ない領域の問題出されると途端にレス止まってドッチラケになってしまう
0356デフォルトの名無しさん
垢版 |
2021/10/29(金) 12:54:37.67ID:6VyB6+e8
もとの問題が解けるかは別にして、
任意の自然数a,b,cdに対して
(cx+a)^2 + (cy+b)^2 =d
の解個数を高速に求めるかが大事とおもうが
0357デフォルトの名無しさん
垢版 |
2021/10/29(金) 13:23:14.96ID:hHWRsPnj
お題: 重力加速度が1、空気抵抗が0.2、ボールの質量が1、ボールのベクトルが(x, y)=(3, 1)だったとき
高さHからボールを落とした場合のボールのバウンド回数を算出しなさい
0361ハノン ◆QZaw55cn4c
垢版 |
2021/10/29(金) 18:49:54.55ID:3iG6tyfE
>>360
そうそう、収束値を求めるのなら、バウンドしなくなる点の発射点からの距離にしたほうがいいのでは?
つゼノンのアキレスと亀のパラドックス
0362デフォルトの名無しさん
垢版 |
2021/10/29(金) 18:58:39.05ID:q+AKOZXy
てか空気抵抗が0.2って>>358の公式における何が0.2なん?
床での反射は完全弾性衝突なんやろな
空気抵抗は考えるのに衝突時のロス考えんのはなんだかなぁだけど、そこはともかく“空気抵抗0.2”をどう立式すればいいのか調べてもわからんのだけど
0363デフォルトの名無しさん
垢版 |
2021/10/29(金) 19:45:45.04ID:ZtEOqLMN
>>357
エントロピーを考えさせたいのなら粘性とかの情報が足りないし、
打ち切り誤差を考えさせたいのなら精度の情報が足りない。
0366デフォルトの名無しさん
垢版 |
2021/10/30(土) 09:59:33.72ID:gRDEN/XN
バウンド回数をHとgで表せっていう意味ならそれなりの数式は出るだろうけど
Hに関わらず無限大だろうってのが答え
0370デフォルトの名無しさん
垢版 |
2021/10/30(土) 17:28:39.70ID:0q4JizrL
GUIでも何でも良いけどGUIはこちらで試す時に面倒。というかGUIだと多分やらないでソース眺めてフーンとなるぐらいかな。
ソースをコンパイル、実行して試せるようなサイトでGUIも出来るような所があれば良いんだけどね。そういう所ある?
0372デフォルトの名無しさん
垢版 |
2021/10/30(土) 17:41:23.59ID:BwSV3hMk
Pythonとか汎用性の高そうなGUIにしとけばいいかと、どれが一番いいかはしらんが
0376デフォルトの名無しさん
垢版 |
2021/10/30(土) 19:30:41.93ID:BwSV3hMk
GUIライブラリのことだが

PythonでGUIライブラリはどれがおすすめ?
Tkinter
「Tkinter」はPythonに標準的に組み込まれているGUIライブラリです。
シンプルな文法と起動の速さが評価されており、Pythonにおけるもっとも基本的なGUIライブラリとしての立ち位置を築いています。

Kivy
近年、PythonのGUIライブラリの中でもっとも人気が高いものが「Kivy」です。
Kivyは、PythonでGUIのプログラムを作るためのオープンソースのライブラリで、Android、iOS、Linux、MacOS、Windowsなどの多くのOSで動作するため、汎用的に利用することが可能です。
KV言語というGUIのレイアウトを作成する言語が用意されており、直感的な記法で簡単にレイアウトを指定できるのが特徴です。

PyQt
「PyQt」は、Pythonを使ってGUIアプリケーションを作るためのフレームワークの1つです。
多くのソフトが作られており、比較的モダンな設計と、GUIのデザインを美しく作りやすいことが評価されています。

wxPython
「wxPython」は「wxWidgets」という「C++」と書かれたクロスプラットフォームGUIツールキットがあり、wxPythonはそのPythonバージョンです。
wxPythonは洗練されたAPIと豊富なライブラリが特徴であり、安定した動さが評価されています。
https://techplay.jp/column/552
0377デフォルトの名無しさん
垢版 |
2021/10/30(土) 19:39:14.98ID:BwSV3hMk
こんなのがあったんだな


【Python】ttk:tkinterと比べた各ウィジェットの外観と機能面の違い
よりオシャレでモダンなGUIアプリを作成するならttkを使うのがお勧めです。
商用向けにGUIアプリの開発を進めている方や、社内向けアプリの場合でもユーザーインターフェースを良くしたい方は必ずチェックしておいてください。
https://office54.net/python/tkinter/tkinter-ttk-difference


Tkinterで使われるttkって?Tkinterとの違いを交えて徹底解説!?
今回はTkinterで使われるttkに関して、Tkinterとの違いを交えて徹底解説いたします。そもそもttkとは何か知りたい、Tkinterとttkの違いを学びたい方へおすすめです。
https://kuroro.blog/python/L9hqzwxZAx0soqSmI8zE/
0378デフォルトの名無しさん
垢版 |
2021/10/30(土) 19:52:06.16ID:nIglmucm
お題:群論・有限群の分類

正の整数 n を与えたとき n を次数とする有限群のすべてを順次出力せよ。
ただしすでに出力された群の「準同型」は出力してはならない
n 次の有限群の要素は {k|k∈N, 1 <= k <= n} で表現せよ
この作業を「有限群の分類」と称するが、n をどこまで大きくできるか、各自の環境で試みよ

期限:2022年4月1日

準同型の定義は適切な参考書…@を参照さられたい、が、以下に概略を記述する
例えば 2 次の有限群として G1=
1 2
2 1
およびG2=
2 1
1 2
があるが、この二つは 
「G1の 1 を 2 に置き換え、G1の 2 を 1 に置き換えて新たなG を作る」
というG1→G の変換 f によって G=G2 となる、すなわち f(G1)=G2
このような変換 f が存在するとき、G1、G2 は準同型であるという

@:「ガロア理論の頂を踏む」石井俊全/ベレ出版 2013年
0384デフォルトの名無しさん
垢版 |
2021/11/01(月) 00:58:32.75ID:6HuVbq6K
>>371
>>1に書いてあるサイトだとブラウザで開くだけで実行されるじゃない。
0385デフォルトの名無しさん
垢版 |
2021/11/04(木) 13:45:51.05ID:D1F18vfo
お題:GUIのカウントチャレンジを作れ
ボタンを押すとタイマーがスタート
もう一度ボタンを押すとタイマーがストップ
タイマーが10秒きっかりだったら「You win!」と表示
それ以外は「You lose!」と表示
現在のタイマーの値は表示しない
0388蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/04(木) 19:45:56.66ID:HOYEg+v3
お題: 与えられたn個の英単語群をすべて連結したクロスワードを作成できるか否かを判定せよ。クロスワードのサイズは自由とする。

入力例1: password, sword, animal, living
出力例1: すべて連結可能です。

入力例2: apple, zoo, grape
出力列2: 連結できない単語「zoo」があります。
0393蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/04(木) 23:12:02.85ID:HOYEg+v3
現実の問題は競プロの問題よりも難しいかも知れない。教科書に書いてないような解決策を要求される。
競プロの問題が欲しいなら、ここよりも競プロへ行ってくれ。ここはそういう場所ではない。
0394蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:24:25.98ID:lMRXWOVz
数学の組合せの問題か。まず文字の組合せから。ある単語Xのすべての文字が他の単語にないならその単語Xは連結ではない(自明)。ひとつのセルは二重に交差点になることはできない(自明)。
ある単語Xが連結でなければ、単語X上の任意の文字位置は交差点にはならない。
0395蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:33:11.14ID:lMRXWOVz
次はクロスワードの組合せ。有限でサイズ変更可能な二次元配列によりクロスワードの盤を再現する。各要素はアルファベットか黒マスかハテナ(?)である。
文字の組合せにおいて最も接続数の多い単語を最初に盤の真ん中に置く。さらに単語の両端に黒マスを置く。次に接続数の多い単語と既に盤に置かれている単語の交差点を考えるわけだが、
交差点の位置により場合分けすると考えやすい。
0396蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:35:46.93ID:lMRXWOVz
そして配置のすべての組合せを再帰により網羅する。交差点が見つからない単語があれば失敗。というわけだ。コーディングに入ろう。
0397デフォルトの名無しさん
垢版 |
2021/11/06(土) 03:47:56.08ID:8BMCwFko
>>385
Kotlin
https://paiza.io/projects/Hq-JXeNo2ZQgGbLORbCJpA

GUI は java.awt ライブラリを使うように書いてある。
当然の事ながら、paiza.io のサイト上では動かない。
動かしたい人は IntelliJ Idea で Kotlin のプロジェクトを作ってソースコピペして実行させるか、
またはコマンドライン環境で kotlinc コマンドでコンパイルして kotlin コマンドで実行する。
0398蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/06(土) 23:49:16.09ID:xVqAQy13
交差点になり得るセルの位置を記録して可能ならばマイナス方向にもサイズを拡張すべきことがわかった。
0399デフォルトの名無しさん
垢版 |
2021/11/07(日) 15:24:13.73ID:qfuan/oU
document.querySelectorAll('span.name').forEach(e => {
    if(e.innerText.indexOf('蟻人間') >= 0){
        e.parentElement.parentElement.style.display = 'none';
    }
});
040096
垢版 |
2021/11/08(月) 17:48:34.31ID:+3VBQOCX
>>378
これか…
ttps://math.jp/wiki/%E6%9C%89%E9%99%90%E7%BE%A4%E3%81%AE%E5%88%86%E9%A1%9E%28%E4%BD%8D%E6%95%B01~100%29
プログラム化する以前に、解法を理解・考えることが難しいお題だな
0408蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/08(月) 23:46:44.17ID:r2YqBk6E
ヘッダーオンリー・テンプレート使用はバイナリサイズが大きくなりがちだから避けるべき。それから?
0413蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/09(火) 00:09:04.79ID:lgtaApb2
お題: 計算時間が予測できない時間のかかる計算について、複数スレッドを立ち上げていずれかのスレッドで答えがセットできたか、キャンセル操作があれば、スレッドを終了して可能ならば答えを取得する。スレッド開始と終了、答えに対してメッセージを出力せよ。
言語: C++11以降 std::threadとstd::promise使用。
041596
垢版 |
2021/11/09(火) 03:16:48.15ID:Fkau/hlA
OpenMPやithreadじゃだめなのかよ
0417デフォルトの名無しさん
垢版 |
2021/11/09(火) 16:49:52.57ID:EFAwjHPG
もうすぐポッキーの日
[お題] 人口合計で1がらみの数字遊び

URLのページに都道府県別の人口が載っている。
 URL: https://ideone.com/msZUeW
 今回使用するのは、2020/10のデータ

 同じ県は一回のみで、異なる県を 11 県選らぶ。
 (単純な選び方は全部で 47C11 = 約174億通り)
 選択した11県の人口合計を 111111 (11万1111) で割った時、
 余りが 1111 になるのは何通りあるか?
 
 また、その条件で(剰余でなく生の)のべ人口合計は何人か?

※一発正解問題、実行時間2秒程度。
※ちなみに 2015/10データだと 156561 通り(のべ 4656362060856 人) だった。
0420デフォルトの名無しさん
垢版 |
2021/11/11(木) 01:43:34.66ID:rg6AJXmO
侍エンジニアリングつーサイトの講師やりませんか?というお誘いが来た。
下準備が結構必要っぽいのに時給は生徒と応対している時のみの2000円/hだそうだ。
結局時給1000円くらいやん。
ふざけとるわ。
0421デフォルトの名無しさん
垢版 |
2021/11/11(木) 09:52:21.62ID:SpIFedoW
生徒と応対して連絡先交換
あとは中抜き回避で青天井
0422417
垢版 |
2021/11/11(木) 15:33:20.12ID:226d0X5M
>>417

回答者(>>418)が言うところの"遅い解法"ががほぼ想定解。
 https://ideone.com/msZUeW 下部に追加記入

解法については、"部分和問題 数え上げ"でググって調べて


別解としては早い言語なら、さらに遅い"半分全列挙"でも間に合う。
(大雑把に(24*2^24)*2 <1億なので、c++で試したら1秒強だった)
043096
垢版 |
2021/11/11(木) 23:57:38.62ID:JHz34AMz
>>425 Perl5、たまにはお相手して進ぜよう。5chの仕様に従うと↓こうだと思うが…

$uri = 'https://www.google.com/search?client=firefox-b-e&;q=%E8%9F%BB%E4%BA%BA%E9%96%93+%E3%83%8F%E3%82%B2';
use URI::Split qw(uri_split uri_join);
@a = uri_split($uri);
$a[1] = 'jump.5ch.net';
$a[2] = '/';
$a[3] = $uri;
print uri_join(@a), "\n";
0431デフォルトの名無しさん
垢版 |
2021/11/12(金) 20:37:34.22ID:Y4pYQLN1
”2021”というフォルダがある
"2020"というフォルダもある
 :
"1950"というフォルダもある
そしてそれぞれに"01"〜"12"のサブフォルダがあって
そしてそのそれぞれに"01"〜"31"というサブフォルダがあって
更に"00"〜"23"という・・・・

つまり、1時間ごとのフォルダがあって
そこには多くのファイルが詰まっている

そのファイルのタイムスタンプに変化があったら
「どこのファイルが書き換えられたぞ」と検出するプログラムを作りたい
片っ端からタイムスタンプを調べるしかないのか
これはファイルシステムの問題でしょうが
なんとか、前回調べてから変化があったか、短時間で検出できる方法はありませんか

ファイルに変化があったら、フォルダのタイムスタンプを変えてくれればいいんだけどね
0432デフォルトの名無しさん
垢版 |
2021/11/12(金) 21:45:17.50ID:gsBkkV8P
そういう検出機能はOSかハードウェアかについてなかったか 忘れたが
0433デフォルトの名無しさん
垢版 |
2021/11/12(金) 21:49:29.72ID:gsBkkV8P
NTFSの USN とは?
USN ジャーナルとは
NTFSのUSN機能とはNTFSボリュームに対しての変更の記録です。
Cドライブ、Dドライブ、Eドライブごとなど、ドライブごとに加えられた変更を記録したものです。

USNとはUpdate Sequence Number Journalの略称です。
主に以下の目的で使用されます。
・FRS(File Replication Service)によるファイル複製時の差分洗い出し。
・スナップショットバックアップ時の差分洗い出し。
・ウィルス対策ソフトによるファイル検査。
・インデックスサービス向け。

http://tooljp.com/qa/what-is-USN-36BE.html
0434デフォルトの名無しさん
垢版 |
2021/11/12(金) 22:31:42.38ID:M7lyd7nj
Ruby では、文字列の中から、URL を抜き出す関数が非推奨になった。
頻繁に規格が変わるからかな?

正規表現でも多分、何万行も掛かる。
作るのに10年ぐらい掛かるので、誰も作らない

今あるものでも、正しく判定されるかどうか、分からない
0435デフォルトの名無しさん
垢版 |
2021/11/12(金) 22:39:57.54ID:M7lyd7nj
>>430
5ch のバグで、

そのURL をプログラム板全体で見た時は、&q とつながっているのに、

個別のスレッドで見ると、&;q と、&の直後に、;が入って、
リンクが&までになってしまう
0436デフォルトの名無しさん
垢版 |
2021/11/13(土) 02:42:42.42ID:p75HzwR9
>>433
ドライブごとに加えられた変更がログに保存されているとは知りませんでした
データドライブに分けているので、ログから探すのも速いかもしれません
ありがとうございました
0439デフォルトの名無しさん
垢版 |
2021/11/23(火) 21:56:09.59ID:WrxNeBf5
age
0441ハノン ◆QZaw55cn4c
垢版 |
2021/11/24(水) 20:41:27.64ID:CmhCtKru
>>440
もう codepad はおしまい、codepad にアップした私のコードも永遠に失われました…
044296
垢版 |
2021/12/02(木) 04:03:51.64ID:EE6BdDDo
元のソースをローカルに保存しておかなかったのか
0443デフォルトの名無しさん
垢版 |
2021/12/02(木) 12:54:02.17ID:adrEDszf
短いもんだから直接打ち込んじゃったんじゃないかな。
そして消滅。
0444デフォルトの名無しさん
垢版 |
2021/12/02(木) 16:48:13.78ID:BMPRSKoA
>>442
デスクトップで書いたものはローカルのどこかに残っている(と思う)
ノートで書いたものはノートPCごとどこかにいってしまった…
いや、まあ、最初から書き捨てでしたけど、惜しいと思うものも多少ありますね
044596
垢版 |
2021/12/02(木) 21:30:16.60ID:m0u4nXXp
いま
http://codepad.org/
復活してない?

サンプルURLとして前々スレの過去の回答

プログラミングのお題スレ Part18
http://mevius.5ch.net/test/read.cgi/tech/1594702426/174
>174 名前:デフォルトの名無しさん[] 投稿日:2020/08/04(火) 19:24:17.96 ID:lImhU2CT
> >>173
> あーアホだったw
> タブ消去の仕様だとPythonだと分けわからんことになるなw
> ↓貼り直した
> http://codepad.org/BWRzr8fW
> ※会員未登録の為、一定期間後に自動消去

も表示されたし。

保持しておきたいcodeがあれば今のうちにsaveするか、
Internet archiveに記録しとくのも手だよ。
0446デフォルトの名無しさん
垢版 |
2021/12/08(水) 14:07:00.92ID:Bws6ftLO
お題が出なくなったので全く実用性がないと思われる頭の体操的なやつを一つ。

お題: 与えられた数値の配列の 1 になっているビットをカウントする。

例えばC言語で unsigned char の配列とか使って、処理する関数はポインタで渡された所から何要素みたいに指定されるようにする。。

それで例えば 0xde, 0x96 (11011110, 10010110) なら答えは 10。
0448デフォルトの名無しさん
垢版 |
2021/12/08(水) 17:44:20.69ID:/InaUbpT
お題: 日付が与えられるので4月ならtrueを出力しなさい

< 2021/04/01
> true

< 04/01
> true

< 2021/04
> true

< 2021/05/01
> false
0449デフォルトの名無しさん
垢版 |
2021/12/08(水) 19:09:00.93ID:nFeiLLyh
>>446
最適なコードが環境に大きく依存するからなあ
シフトの速度とか専用命令有無とか

あまり良いお題じゃないし荒れそう
0452デフォルトの名無しさん
垢版 |
2021/12/09(木) 13:38:41.08ID:ZoIDn0OR
逆に、年2桁の時は、
その数値で年月日が特定できるか問題があった。

02 12 29 --> 12年02月29日 と 29年02月12日 の2通りがある
02 13 29 --> 13年02月29日はないので、29年02月13日のみ
0454デフォルトの名無しさん
垢版 |
2021/12/09(木) 14:42:16.44ID:b/vm8aBu
そういえば食品の賞味期限がどう読んだらいいか分からなかったことがあったなあ。

11/02/13

2013年2月11日なのか、それとも2013年11月2日なのか、まさか2011年2月13日だったりしたらどうしよう、みたいな。
普通に輸入されているものなら日本語ラベルがあるから分かるだろうけど、友達が現地のお土産屋で買ってきた
お菓子みたいなものだとそのまんまだったりする(まあ、アメリカかアメリカ以外かで考えればだいたいは大丈夫
なのかも知れないが)。
日本の元号みたいな独自年号まで使われているのが混在していたら余計に分からないよな。今の日本では
あまりないだろうけど昭和の頃はあったような気がするなあ。
0457デフォルトの名無しさん
垢版 |
2021/12/10(金) 00:33:54.80ID:Uh57IFJZ
>>446
C
https://paiza.io/projects/YQ8ORfELqUt1xkKqmysViQ

入力を配列に入れてからカウントさせている。(uint32_t 型の配列)
カウント部分は>>456に似てる。しかし最初に引くのは思いつかなかった。
0459デフォルトの名無しさん
垢版 |
2021/12/10(金) 09:12:55.36ID:rDACCx1y
>>446

Haskell

sumCntBits = id
. length
. filter odd
. ( >>= ( takeWhile ( /= 0 ) . iterate ( flip div 2 ) ) )

main = do
print $ sumCntBits [ 0xde, 0x96 ]
print $ sumCntBits [ 0x12345, 0x6789a,0xbcdef ]

----
10
32
0461デフォルトの名無しさん
垢版 |
2021/12/11(土) 20:38:05.35ID:LF8J+dNV
>>446
Kotlin
https://paiza.io/projects/7hQyycMNf5nuV5HcBg6iQg

普通に作るのは出尽くした感があるのでちょっと変わったやり方にした。
入力から Int の List を作り、それを 1 ビットづつの Boolean のリスト(というか Iterator) にしてから true のみをカウントしている。
0463デフォルトの名無しさん
垢版 |
2021/12/14(火) 17:40:23.45ID:kbrFI/m0
もうすぐ、2022年
[お題] 2022は"x3y1数"(造語)?

以下の二つを満たす正の整数を"x3y1数"と呼ぶ
・各桁の数値が、二種類のみの数字からなる
・上の二数の個数比は 3:1

 該当例:1112, 2212, 2022, 32222223, 999999999888
 ダメな例:2213(種類), 4444(種類), 33232(個数比), 0222(先頭ゼロ)

 整数A,Bが与えられる。A以上B以下の"x3y1数"はいくつあるか?
 制約: 0 < A <= B <= 10^18

1) 2923 3311 --> 8
  該当は [2999, 3000, 3033, 3111, 3133, 3222, 3233, 3303]
2) 2021 77977796 --> 2022
3) 3000 6666566566566555 --> ?
4) 999999999889 1000000000000110 --> ?
5) 1 1000000000000000000 --> ?

※実行時間:上の5問をクエリーとし全部を2秒程度
0464デフォルトの名無しさん
垢版 |
2021/12/16(木) 03:59:00.84ID:p3cQ7gqk
お題:自分用double-double演算ライブラリ
最低限、通常のdoubleとの相互変換は可能であること。それに加えて、
1)加減算
2)加減算 + 乗算
3)四則演算
数字が大きいもの程上級者向けです。

演算子のオーバーロードなどは任意とします。
0468デフォルトの名無しさん
垢版 |
2021/12/16(木) 20:39:48.12ID:iDMhxZSI
>>466
double の演算を自分で実装するという意味ですか?
sum(double, double)
diff(double, double)
mul(double, double)
div(double, double)
を自分で実装する、という話でいいですか?
あと double のフォーマットは IEEE754 でいいですか?
0469デフォルトの名無しさん
垢版 |
2021/12/16(木) 20:57:05.50ID:Y2CVy/MB
問題が説明不足では?
0470デフォルトの名無しさん
垢版 |
2021/12/16(木) 21:53:18.15ID:B45/3FnD
お題: テキストを読み込みそれをクリスマスツリーにして出力しなさい
クリスマスツリーに見えれば形は自由とする

入力

本日は良いお日柄ですね

出力

___本
__日は
_良いお
日柄です
___ね
0474デフォルトの名無しさん
垢版 |
2021/12/17(金) 04:20:32.14ID:QblDDO27
二種類のみの数字からなり個数比は 3:1
引数の範囲は 1-10^18 = 1001-9999999999998888(16桁)
以下の範囲に限られる
1000-9998
1000 0001-9999 9988
1000 0000 0011-9999 9999 9888
1000 0000 0000 0111-9999 9999 9999 8888

「二種類のみの数字からなる」を計算式で判定する方法ある?
0475デフォルトの名無しさん
垢版 |
2021/12/17(金) 05:36:58.41ID:5DT5Lvck
1([\d&&[^1]])\1{2} 最上位桁が比1
111[\d&&[^1]],11[\d&&[^1]]1,1[\d&&[^1]]11 最上位桁が比3
一般化 (\d)(?!\1)(\d)\2{2}|(\d)\1{2}(?!\1)\d|(\d)\1(?!\1)\d\1|(\d)(?!\1)\d\1{2}
4桁ならこれでもいいけど8桁以上になると複雑化するし
地道に数えるより 4の倍数桁,数字2種,比率1:3 のルールで生成する方が速そう
0476463
垢版 |
2021/12/17(金) 16:22:06.93ID:ssQAe3ef
>>463
 https://ideone.com/xTDtME

 想定解は、事前に4,8,12,16桁の"x3y1"数を全列挙して作っておく。
 プログラミング的には、各言語の順列や組合せを使って、作れるだろう。
 (想定解例では組合せは2ベキとpopcountから作っている)

 「それは、全列挙数が小さいとわかっているからでは..?」に対して
 プログラムで出すのなら、雑に最も大きい16桁が4つあるとして計算
  10P2 * 16C4 * 4 < 70万 なので、全列挙可能
 まじめに計算すると 10P2 * (16C4 + 12C3 + 8C4 + 4C1) * 9 /10 = 167,832

 列挙済みならば、クエリー5件程度なら、16.7万*5 チェックで間に合う。
 ちゃんとやるなら、ソートして二分探索すれば、数千単位のクエリーに対応できる。
 (想定解例では後者でやっている)
0478467
垢版 |
2021/12/17(金) 20:31:12.28ID:llvCqHRj
>>463 c
https://ideone.com/bmYThw
・Ruby版の移植
・組み合わせの列挙方法は丸パクリ
・Ralph William Gosper Jr. 氏に感謝
0481464
垢版 |
2021/12/18(土) 16:29:44.66ID:ElKfLkKB
>>465
惜しい

>>468
IEEE754の倍精度(binary64)を整数演算で実装するのではありません。
binary64を二つ使って、上位53ビットと下位53ビットとで106ビットの浮動小数に見立てたものが
double-double演算です。

Wikipediaの「四倍精度浮動小数点数」の項に少しだけ載ってますです。
0482デフォルトの名無しさん
垢版 |
2021/12/18(土) 16:50:56.06ID:XqEkP9jw
> Wikipediaの「四倍精度浮動小数点数」の項に少しだけ載ってますです。
一般的な用語じゃないんだから初めからこれ書いとけよ
0488デフォルトの名無しさん
垢版 |
2021/12/22(水) 04:27:38.39ID:5fCeD7fV
double-doubleはFMAがFMAとして役立つ数少ない用途だな
積和じゃなくて3個の和のfused命令も欲しくなる
0489デフォルトの名無しさん
垢版 |
2021/12/23(木) 07:32:47.64ID:Xd/JFvMa
お題: 1つの整数から規則性のある複数の整数を生成せよ
生成される整数は再現性がなければならない
0491デフォルトの名無しさん
垢版 |
2021/12/23(木) 09:01:28.76ID:S2rGJ6tV
>>489 Ruby
def sequence( seed, number )
srand( seed )
Array.new( number ){ rand(100) }
end

p sequence( 123, 10 ) #=> [66, 92, 98, 17, 83, 57, 86, 97, 96, 47]
p sequence( 123, 10 ) #=> [66, 92, 98, 17, 83, 57, 86, 97, 96, 47]
0494デフォルトの名無しさん
垢版 |
2021/12/24(金) 17:16:46.67ID:Xt+LQVaD
>>488
Juliaのhypot()でもFMA使ってますです
0495デフォルトの名無しさん
垢版 |
2021/12/24(金) 22:51:57.83ID:Y/w+woHG
>>494
ただ積と和を1命令にして高速化しただけの積和
の効果だけじゃなくて
融合(fused)の効果が効く用途の話
0497デフォルトの名無しさん
垢版 |
2021/12/27(月) 20:25:00.12ID:7ybeEGfH
[お題] 平均が2022な素数数列

 5000以下のあい異なる素数で、加算平均がぴったり 2022 の数列を作る。
 数列の項数(要素数)を最大化する、最大はいくつか。
 最大数と数列を表示する。
 
※解答例(もちろん4以上がある)
 4
 [1747, 2099, 2113, 2129]
※実行時間は素数生成を含めて、4秒以内
 最大な数列は複数通りあると思うので、一例のみで
0498デフォルトの名無しさん
垢版 |
2021/12/29(水) 15:58:08.20ID:czxFIFL7
答えは595個?
計算機+理詰めで595個っぽいけど
0500497
垢版 |
2021/12/29(水) 20:37:12.14ID:GN7CzEgH
>>497 c++
 https://ideone.com/UBbtWd

 "素数-2022"で適当に最大化DPすれば、合計0相当の所に答えが……。
 個人的には他の復元方法を見たかった。
 pythonは遅いのであきらめた(高速化方法を知らない)

>>498
595個でした。手作業でできるレベルなら……
0501デフォルトの名無しさん
垢版 |
2021/12/29(水) 22:36:34.62ID:d+UhR9Ru
オレがやったのは
p[n]をn番目の素数、
P[n]をn番目までの素数の集合、
s[n]をP[n]の和
a=2022として
まず素数のn元集合で平均が1番小さくなるのはP[n]でその平均値s[n]/nは単調増加だからs[n]/n>aの時元数n以上の解はない
s[596]/596>aは計算機で確認
なので595元集合で解があればそれが最大
s[595]/595<aなのでP[595]はダメ
s[596]-595a = 1205525 - 1203090 = 2435は素数ではないのでP[597]から一個消すのはダメ
s[597]-595a = 1209898 - 1203090 = 6808 はp597=4373以下の素数2459,4349の和で表すことができる
よってP[597]\{2459,4349}の和は595aとなる
完全に全自動で探索するプログラムも作れそうだけど答え出たらもういいかなと手が止まってしまった
0502デフォルトの名無しさん
垢版 |
2021/12/30(木) 12:24:49.52ID:sGmJGaqc
何個取り除いたら平均2022にできるか考えると
確か74個だったけな?
JavaScriptで1秒もかかんなかったか
0503502
垢版 |
2021/12/30(木) 12:30:19.06ID:sGmJGaqc
表示時間除いたら1秒かかってないな
探索はほぼ一回でボトムまで到達して
発見された
0504502
垢版 |
2021/12/30(木) 12:38:50.05ID:sGmJGaqc
可能と不可能が極端に分かれている問題なので
事前のブランチカットだけが重要なヘンなお題w
>>352はまだ未解決
0505デフォルトの名無しさん
垢版 |
2021/12/30(木) 20:10:02.90ID:jVgYGZiS
>>502
最大の個数を求めよやろ?
0506デフォルトの名無しさん
垢版 |
2021/12/30(木) 20:24:56.63ID:JL7tAErK
千葉興業銀行、4月から副業解禁 県内地銀初

南都銀行、4月から行員の副業制度導入 ウェブ制作など

荘内銀、行員の副業・兼業解禁

フィデアHD、副業・兼業制度を導入

横浜銀行、10月から従業員の副業・兼業解禁

鹿児島銀、副業解禁を検討 九州FGと肥後銀は10月導入

肥後銀行が副業制度導入へ 多様な働き方認める 10月から
0507デフォルトの名無しさん
垢版 |
2021/12/31(金) 15:04:12.13ID:bqUePCKa
>>497
haskell
https://ideone.com/GLMXRV
>>501のアルゴリズムを自動化してみた
すげー簡単なところでどハマりして半日かかった
まだ解なしの場合とかの動作チェックとかしてないけどもうどうでもいい
0508デフォルトの名無しさん
垢版 |
2021/12/31(金) 15:09:29.33ID:bqUePCKa
ちなみに出力形式は
(最大個数、最大素数の通し番号、最大素数までの間での素数で除外する素数のリスト)

try 67%5
→(5,8,[2,3,5])
は最初の個数8個[2,3,5,7,11,13,17,19]から[2,3,5]を抜いた[7,11,13,17,19]の5個が平均が67/5になる素数のリストの一つ
長さ
6以上はない
0509デフォルトの名無しさん
垢版 |
2022/01/08(土) 11:42:09.36ID:B5P29Cqv
お題:
xをゼロ以上の浮動小数点数として
2^floor(log2(x))
の計算。ただし、x == 0 の場合はゼロとする。
0510デフォルトの名無しさん
垢版 |
2022/01/08(土) 18:45:49.69ID:qvdwzZse
>>481
>binary64を二つ使って、上位53ビットと下位53ビットとで106ビットの浮動小数に見立てたものが
>double-double演算です。
現在検討中ですが、binary64 中には仮数部に使用できるビット幅は 52 bits しかありません。つまりケチビット表現です
53+53 とのことですが、実際には 53 + 52 = 105 しか格納できないのではないでしょうか?
0511464
垢版 |
2022/01/08(土) 21:07:22.52ID:Xrz2Tlot
>>510
上位の±1/2ulp相当が下位になります
0512デフォルトの名無しさん
垢版 |
2022/01/09(日) 01:28:46.61ID:/FHAAuzb
>>509
perlでワンライナー。入力は標準入力からする。

perl -MPOSIX -ne 'chomp;$n=$_?2**floor(log($_)/log(2)):0;print "$n\n"'

でも、こんなので良いの?自分ではほとんど何も考えてないんだが。
(log2()がないからlog(n)/log(2)でやるって所ぐらいしか工夫がない)
0513デフォルトの名無しさん
垢版 |
2022/01/09(日) 07:56:15.63ID:9G1CcY2f
>>509 C++
環境+コンパイルオプション依存 little endian, double = 64bit, long double = 128bit

double fl2( double x )
{
*( (uint64_t*) &x ) &= 0xFFF0000000000000LLU;
return x;
}

long double fl2( long double x )
{
*( (__uint128_t*) &x ) &= *( (__uint128_t*)"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF" );
return x;
}
0514デフォルトの名無しさん
垢版 |
2022/01/09(日) 07:59:19.16ID:+WoQnCHD
2進表記した時に先頭のビット以外を0にすればいいだけだがワンライナーで書ける気がしない
0515デフォルトの名無しさん
垢版 |
2022/01/09(日) 08:00:08.09ID:+WoQnCHD
先頭のビットというより「(存在するなら)0じゃない一番位の大きいビット」だな
0516デフォルトの名無しさん
垢版 |
2022/01/09(日) 08:27:45.00ID:Gu7/igUi
ビットいじる方法だと、非正規化数が0に、NaNが無限大になる
そういえば、無限大やNaNはどうすればいいのだろうか
0517509
垢版 |
2022/01/09(日) 09:16:00.82ID:42F2CcU6
Python
でかい値だとうまくいかないやつ

def foo(x):
_c = x * float(2 ** 52 + 1)
_xh = c - (c - x)
_if xh > x: return(xh * 0.5)
_return(xh)

>>516
深く考えてませんでしたw
0518509
垢版 |
2022/01/09(日) 09:53:47.91ID:42F2CcU6
>>512
log2(n)をlog(n)/log(2)で近似した際の「誤差」
(ぴったり整数値になって欲しいのにそれよりも数ulp小さい値になったとか、
数ulp大きくて、ぎりぎりfloor()で切り捨てられる筈の値が1大きくなったとか)
を補償するコードが欲しい。
0519デフォルトの名無しさん
垢版 |
2022/01/09(日) 15:38:39.37ID:DwVfG/qv
そこは性能とトレードオフになるしかない気はする
例えばfloor( log 32 / log2 ) = 5が使用上の動作だけど
log 32/log2 =4.9999999999978 × 10^0が返されて答えが4になってしまうのを避けるならおそらく大きすぎる場合は無視していいから
res' = floor( log x / log2 )
if (2^res'* 1.5) < x
// (1.5倍でも届かないなら不当な丸め誤差が出たと判断)
then res = res' + 1
else res = res'
とかちょっと汚い書き方するしかない希ガス
0520デフォルトの名無しさん
垢版 |
2022/01/09(日) 21:50:51.38ID:sZC3oXej
なんか変なこと書いた

res' = floor( log x / log2 )
if 2^res' < x
then res = res' + 1
else res = res'

やな
res'の算出で丸め誤差は-1までと仮定して補正する
しかしもちろんlog(x)とか2^nハード的にFPUとかで高速にやってくれてしかも整数演算は誤差なしでやってくれる前提
この辺は高級言語プログラマレベルの話でなんとかなるもんではない
やるならアセンブリ言語レベルでやるしかない
0522509
垢版 |
2022/01/10(月) 00:53:57.15ID:MGxmK4tZ
いまどきのコンパイラなら、frexp()やldexp()をいい塩梅に最適化してくれるのだろうか?

from math import frexp, ldexp
def foo(x):
_m, e = frexp(x)
_if m == 0: return 0.0
_return ldexp(0.5, e)
0523512
垢版 |
2022/01/10(月) 01:47:47.54ID:av6tewvz
>>509
またPerlでワンライナー。

perl -ne 'chomp;if($_<=0){print"0\n"}else{for(my$i=0;;$i++){if((1<<$i)>$_){print 1<<($i-1),"\n";last}}}'

今度は計算している内容から考えて結果が同じになるようにした。浮動小数点演算をしていない。
また整数値が何ビットであるかも考慮しておらず、Perlの整数が32bitだった場合は2^32以上の値を入力されたら多分うまく動かない。
当然64bitだったら2^64以上の値の入力で多分うまく動かない。
0524509
垢版 |
2022/01/10(月) 02:23:50.20ID:MGxmK4tZ
>>522の修正
from math import frexp, ldexp
def foo(x): return 0.0 if x == 0 else ldexp(0.5, frexp(x)[1])
0525デフォルトの名無しさん
垢版 |
2022/01/10(月) 03:27:40.49ID:av6tewvz
>>509
またまたPerlでワンライナー。

perl -MPOSIX -ne 'chomp;if($_==0.0){print"0\n"}else{print ldexp(0.5,(frexp($_))[1]),"\n"}'

これは>>524の真似(ていうかやってること同じ)。
0526デフォルトの名無しさん
垢版 |
2022/01/10(月) 12:43:53.01ID:SgLm6fjp
>>511
それは答えになっていないかと
質問を変えます。下位側の指数部も意味を持つようにインプリメントするべきでしょうか?
0527464
垢版 |
2022/01/11(火) 02:38:04.94ID:i2HiBm5J
>>526
先人の実装例だと、
上位 + 下位 = double doubleの数値
という事になってますね(上位側の指数が決まると、下位側の指数も決まる)。
tps://na-inet.jp/na/qd_ja.pdf

勿論、そう実装しないのもあり。
0528デフォルトの名無しさん
垢版 |
2022/01/11(火) 03:06:24.10ID:Y9TTYX77
>>527
となると、
>>510
>binary64 中には仮数部に使用できるビット幅は 52 bits しかありません

よって下位側指数部無視なら 53bit + 52 bit = 105bit の実装となりますが?
下位側指数部有意ならば、下位側にもケチビットを適用できますが、今度は仮数部が 106 ビットとはいいきれなくなりますね(数によって変わる)
0529デフォルトの名無しさん
垢版 |
2022/01/11(火) 03:08:13.70ID:Y9TTYX77
>>527
失礼 pdf が紹介されていることを見落としていました、精査します、紹介ありがとうございます
0530デフォルトの名無しさん
垢版 |
2022/01/30(日) 18:02:46.10ID:Np8aVX2s
お題: 1より小さい実数を1以上2より下にせよ

< 0.123
> 1.23

< 0.0000123
> 1.23
0532蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/01/30(日) 20:39:55.64ID:DZg7owi9
お題: 質量0.2 kgの直方体の物体が摩擦のある水平な床の上にある。
物体の初速を右向きの0.5 [m/s]とすると、物体は転倒することなく底面が床に接したまま、約x秒後に自然停止した。xより垂直抗力F[N]と動摩擦係数kを求めよ。
重力加速度を 9.8 [m/s^2]とする。
0533蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/01/30(日) 20:58:19.92ID:DZg7owi9
お題(HTML/JavaScript): ユーザがGoogleから訪問した場合は、3秒間ブラウザを停止させるようにせよ。
0536デフォルトの名無しさん
垢版 |
2022/02/01(火) 18:02:38.08ID:zoPPBktH
お題: -1 < n < 1 の実数nを-10 < m < 10の実数m(ただし1桁目が0を除く)に桁上げせよ(>>530の改良)

< 0.123
> 1.23

< -0.00056
> -5.6
0538デフォルトの名無しさん
垢版 |
2022/02/01(火) 23:48:43.79ID:/+irRzAS
>>536
perl

ワンライナー。以下はbashのコマンドラインから実行して試した。
入力は標準入力で一つづつ改行する。

perl -ne 'chomp;$n=$_;while(int(abs($n))<1){$n*=10}print "$n\n";'

やってることは見ての通り殆ど何も考えず10倍し続けるだけ。
0539デフォルトの名無しさん
垢版 |
2022/02/21(月) 17:49:01.62ID:QCKFV9kK
もうすぐ22日、今年は "22/2/22"といつもより多め
[お題] 偶数ゾロ目

URLのページに都道府県別の人口が載っている。
 URL: https://ideone.com/2w86hj
 今回使用するのは、2020/10のデータ

 同じ県は一回のみで、異なる県を 22 県選らぶ。
 (単純な選び方は全部で NCR(47, 22) = 約14.8兆通り)
 整数A,Bが与えられる(1<=A<=B<=1億)
 選択した22県の人口合計が A以上B以下となるのは何通りか?

1) 44444444 44444444 --> 214209
2) 22222222 44444444 --> ?
3) 44444444 66666666 --> ?

※上の三問を全部で5秒程度で
 想定解はあるが、もっとスマートな方法がありそう
 「またか」と思った人、以前の問題とは想定解はかなり違う
0540デフォルトの名無しさん
垢版 |
2022/02/23(水) 19:08:44.10ID:jKeAH0Dy
>>536
やぱしn==0は除外?
0543539
垢版 |
2022/02/25(金) 17:25:00.82ID:STd/IFZD
>>539
旬だと思って出題

https://ideone.com/2w86hj 下部に追加

半分全列挙 + 尺取り法

早い言語でしかできない解答例でした
0545デフォルトの名無しさん
垢版 |
2022/02/26(土) 19:41:18.44ID:4VT1Qgxn
haskellでやったらやっぱり5秒はきつかった
0547デフォルトの名無しさん
垢版 |
2022/03/20(日) 12:30:16.47ID:nN0Ys+dW
お題: トライ木を使ってサジェスト機能を実装してください

$ prog
> w
world
would
will
wish

辞書は任意の大きさとする
入力は英語、または日本語とする
0548デフォルトの名無しさん
垢版 |
2022/03/20(日) 19:32:45.03ID:Ycqbgo6j
>>545
なんかHaskellってGHCのオプションに-O2とか指定すれば結構早くなった記憶がある
あとListじゃなくVector使うとか
0549デフォルトの名無しさん
垢版 |
2022/03/20(日) 19:41:12.56ID:sy393qRd
お題 バッタの大冒険
 a(1),a(2),⋯,a(n) を相異なる正の整数とし、M を n-1個の正の整数からなる集合と
する。また、M は s=a(1)+a(2)+⋯+a(n) を含まない。数直線の 0 の地点にいるバッタが
数直線の正の向きに n 回ジャンプする。 n 回のジャンプの距離は a(1),a(2),⋯,a(n) の並べ替えである。このとき並べ替えをうまく選べば、バッタがM の要素に対応するn-1点に一度も着地しないようにできることを証明せよ。

↑数学オリンピックの問題
もちろん証明はどうでもよろしい
お題は(ジャンプの幅のリスト、禁止点のリスト)から禁止点を交わしていく飛ぶ順を見つけるプログラムを実装せよです

入力
([3,5,8],[5,10])
出力
[8,5,3] #着地するのは8,13,16で禁止点5,10をかわしている

入力
([5,6,8,10,13,15],[2,18,24,29,45])
出力
[15,13,10,8,6,5] #着地するのは15,28,38,46,51で全ての禁止点をかわしている

入力
([3,26,30,32,36,44,53,62,68,82],[36,40,59,79,92,126,178,233,394])
出力
[82,68,62,53,44,36,32,30,26,3] #同文
0551デフォルトの名無しさん
垢版 |
2022/03/22(火) 20:44:30.68ID:0IfoPmot
>>549
は数学の問題としても面白いけどココはプログラムのお題スレなのでアルゴリズムそのもの考えるのは嫌な人のためにアルゴリズムひとつ紹介しておきます
以下の探索で線形オーダーで解を見つけられます
自分で考えたい人は無視してください

以下aを最大ジャンプとします
a=a(n)としておく

(A)一回目を最大ジャンプで飛んだとして最初の禁止点に届かないかギリギリ届くとき

一回目のジャンプが最大ジャンプしたと想定して残りのn-1回ジャンプで最初の禁止点を無視したn-2個の禁止点を交わしたジャンプ順b(1)...b(n-1)を作る
この順番でとんて行って最初に最初の禁止点をi回目に超えたとする
解のジャンプとして
b(1),b(2),...,b(i-1),a,b(i),...,b(n)
とすると全ての禁止点をかわしている

(B) 一回目を最大ジャンプで飛んだとすると最初の禁止点を超えて、しかも禁止点以外に着地できるとき

一回目のジャンプが最大ジャンプしたと想定して残りのn-1回ジャンプで最初の禁止点を無視したn-2個の禁止点を交わしたジャンプ順b(1)...b(n-1)を作る
解のジャンプとして
a,b(1),...,b(n-1)
とすると全ての禁止点をかわしている

(C) 一回目を最大ジャンプで飛んだとすると最初の禁止点を超えるが別の禁止点に着地してしまうとき

この状況だとa(1)〜a(n-1)のいずれかのジャンプa(i)でa(i)もa+a(i)のどちらも禁止点でないものが取れる( (∵) 全てのi:1〜n-1でa(i)かa+a(i)のどちらかが禁止点とするとこれだけでn-1個の禁止点全部尽くされてしまうけど、この中には最初の仮定である“一回目aで飛んだら禁止点”はこの中には出てこないので矛盾 )
それをa(n-1)としよう
最小の2回をa(n-1),a(n)と飛んだとしてこの時点で最初の禁止点と最初a(n)だと踏んでしまう禁止点の2点は超えているので残りの禁止点はn-3個以下しか残ってない
そこでa(1)〜a(n-2)をうまく並べ替えれば全部かわすことができる
0552デフォルトの名無しさん
垢版 |
2022/05/03(火) 15:12:22.98ID:FP7f4hyR
問題がよくわからなくて解く以前の所で停止。そしてやる気消滅。
0553デフォルトの名無しさん
垢版 |
2022/05/03(火) 23:10:33.84ID:JwGzWANE
説明不足で申し訳ない
問題文は数オリの紹介サイトからそのままコピペしてきたのでわかりにくかったかもしれない

1番最初の例

([3,5,8],[5,10])

だとバッタは最初x=0の地点にいて+3,+5,+8のジャンプでx=16の地点に行こうとしている
しかしx=5,x=10の地点は着地禁止地点で着地できない
飛び方は全部で6通りあるがその中から禁止地点に着地しないものを選んで下さいという問題
3回くらいなら総当たりで答え出せるけどジャンプ10回禁止地点9ヶ所だと全数検索すると10!通り必要になって実用にならない
どうしますかというテーマだけどもちろん数学オリンピックの問題なので中々自分で答え出すのは難しい
でここは数学板ではないので同じ数オリサイトにあった解答を転記して「こんなアルゴリズムが知られているけどアルゴリズムをインプリメントできますか」がお題です
0554デフォルトの名無しさん
垢版 |
2022/05/04(水) 00:16:07.90ID:0lMETj8q
お題: C/C++でスレッドセーフなstrtok関数を作れ
設計は各自で考えること
0556デフォルトの名無しさん
垢版 |
2022/05/05(木) 02:33:11.33ID:FeY8iOM4
高度IT人材、富士通は最大年収3500万円へ

AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ

【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材

来年度から副業解禁 人材多様化へ―大同生命次期社長

第一生命HD、副業解禁 約1万5000人対象

第一生命HD、副業解禁 1万5000人対象―大手生保初

IHI、国内8000人の副業解禁 重厚長大企業も転機

IHI、社外兼業を解禁 社内副業もルール化
0557デフォルトの名無しさん
垢版 |
2022/05/05(木) 16:49:02.33ID:SGcHNlDo
>>554
C言語

https://paiza.io/projects/xS5GP9DAU6KzhDsM6x7M6g

strtok_r() を strtok_r2() の名前にして自分で実装した。
strsep() も paiza.io のCのライブラリには何故かなかったので strsep2() にして自分で実装した。
0558デフォルトの名無しさん
垢版 |
2022/05/11(水) 08:28:38.45ID:zQqHPRjb
思い付きでお題考えてみた
検証してないんだけどどう?

お題: ランダムな部屋を移動する最短距離を求める

行列がある
任意の横幅Wと高さHで表現される部屋がランダムに1 <= N <= 5個生成される
この部屋を部屋内の座標からランダムに選択した別の部屋の部屋内の座標まで通路を作る
通路の要素は斜めには生成されず横と縦に生成される
通路はランダムに1つの部屋から0 <= R <= 3生成される

各部屋を各通路で繋げ任意の部屋Aと任意の部屋Bを選択する
このときAからBまでの最短経路を求めよ
0562デフォルトの名無しさん
垢版 |
2022/05/17(火) 17:53:19.20ID:UVEhLnaE
さらに、閑古鳥をよびよせるか

[お題] 多倍長では無理!?
整数 S, T が与えられる。(1 <= S <= T <= 400万)
S以上T以下の(連続する)整数の最小公倍数(LCM)をもとめる
答えは, 1000000007(10億7)の余りで出力

1) 6 8 --> 168
6,7,8 の最小公倍数、LCM(6, 7)= 42 --> LCM(42, 8)= 168
2) 10 30 --> 89546497
剰余前は、2329089562800
3) 2567890 3456789 --> ?
4) 1 4000000 --> ?
0564デフォルトの名無しさん
垢版 |
2022/05/19(木) 21:16:43.90ID:bqW40Z5X
√T以下の素数列挙
各数を素因数分解して各素数の指数の最大を求める
10億7の剰余で上の乗算を行う
0566デフォルトの名無しさん
垢版 |
2022/05/20(金) 19:19:40.97ID:nM/DB7wD
>>562
https://ideone.com/O9PQbN

想定解としては、(他の人同様)
 求める最小公倍数を素因数分解した形に作るイメージ
 400万以下の"素数及び素数べき乗"は、高々28.3万件。
 S以上T以下で、素数べき乗が割り切れるかどうかチェックしている。
 (方法は T/素数べき乗 > (S-1)/素数べき乗 ならあると, O(1)判定)
 ボトルネックは素数を求める部分なので、手抜きしている。

余談)
・4)を多倍長で計算すると173万桁だった(一分程度ででた)
・10^9+7 ではなく、下9桁を出力だと、4)は 0になる(5^9が範囲にあるから)
0570デフォルトの名無しさん
垢版 |
2022/07/02(土) 02:10:30.75ID:1mXsd8mZ
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
0572デフォルトの名無しさん
垢版 |
2022/07/02(土) 05:51:46.20ID:y+j5RBoo
>>570 Ruby

f = -> s {
case s
when /\A(?:0|[1-9]\d*)\z|\A(?:[1-9]\d{0,2})(?:,\d{3})*\z/
:INT
when /\A(?:0?|[1-9]\d*)\.\d+\z/
:FLOAT
else
:INVALID
end
}

%w[123 1,234 1.23 a123 12abc 1.23.435 .142857 1. 0 01 1,234,567 1234,567].each{|s|
puts '%s -> %s' % [s, f[s]]
}

# =>

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID
0574デフォルトの名無しさん
垢版 |
2022/07/02(土) 08:08:58.00ID:syeRaQWQ
そんな文句みたいな言い方するほどか?
他の問題に比べたらケースちゃんと提示してる方だし
そういうのは想定してないってなんとなくわかるだろ
競プロならちゃんと定義必要だろうけど
0576デフォルトの名無しさん
垢版 |
2022/07/02(土) 09:41:42.13ID:At3W7bIA
>>574
> そういうのは想定してないってなんとなくわかるだろ
お題なんだから想定しろよ
でないとそのケースはそうじゃなくてこうすべきとか言う奴が出てきて荒れる元だし
0578デフォルトの名無しさん
垢版 |
2022/07/02(土) 09:58:41.88ID:COZLaCzb
123.0はfloatだろ常考
0584デフォルトの名無しさん
垢版 |
2022/07/02(土) 18:03:20.65ID:+K04BJMF
もっと気楽にやれよ
普段ゴミみたいな案件で意を汲み取れず怒られ理不尽な思いしてる底辺コーダーが叩き行為で鬱憤晴らししたいんだろうけどさw
仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
その議論を「荒れる」と捉えるのは違うでしょ
0585デフォルトの名無しさん
垢版 |
2022/07/02(土) 20:54:40.02ID:1mXsd8mZ
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
version 1.0.1

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID
123.0 -> FLOAT
0587デフォルトの名無しさん
垢版 |
2022/07/03(日) 06:43:46.91ID:/5k6Ls0P
.142857がOKで1.がNG
なんか違和感
どの言語の流儀?

具体例だけに頼らないで
定義っぽく書けない?

----
[整数部]、[整数部].[小数部]、.[小数部] のいずれかの形
[整数部] : 0123456789の列1文字以上、もしくはこれを3桁ずつ,で区切った形
2桁以上の場合は先頭は0ではない
[小数部] : 0123456789の列1文字以上
....

こんな感じ
0588デフォルトの名無しさん
垢版 |
2022/07/03(日) 07:10:28.62ID:3/zKVKew
0.DDD を .DDD と表記するのは欧米では情報系に限らず日常よく見られること
CSSもperlも昔のrubyも対応してたんじゃなかったかな
0590デフォルトの名無しさん
垢版 |
2022/07/03(日) 09:17:25.30ID:aLgpTdvv
>>584
> 仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
だからその一般認識がないから揉めるって話
既に違和感と言い出す奴とか欧米ガーとか流儀ガーとか言い出してるだろ
エディタの宗教戦争と同じで正解なんてないんだからお題を作った奴が決めないと収拾つかんよ
0591デフォルトの名無しさん
垢版 |
2022/07/03(日) 09:24:18.29ID:3/zKVKew
>>590
1から10まで教えてもらえないとなんもできないのかよ
エディタ宗教戦争を例に出してるけどあんなのにガチに捉えてるバカはお前くらいだ
0592デフォルトの名無しさん
垢版 |
2022/07/03(日) 09:34:46.48ID:/kuq8Z/3
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする

INT: digit+
0593デフォルトの名無しさん
垢版 |
2022/07/03(日) 09:37:29.23ID:/kuq8Z/3
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.2

int: digits
float: digits ('.' digits)?
digits: digit+
digit: [0-9]+
0595デフォルトの名無しさん
垢版 |
2022/07/03(日) 10:15:42.92ID:JHbRyeE7
>>593
カンマとかはなくなってるけど、仕様変更ですか?
あと
digits: [0-9]+
にしてdigitをやめるか
digit: [0-9]
にした方がいいかと思いますよ
0596デフォルトの名無しさん
垢版 |
2022/07/03(日) 12:27:53.93ID:/kuq8Z/3
>>595

お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.3

int: comma_digit
float: comma_digit '.' digit* | '.' digit*
comma_digit: digit_123 { ( ','? digit_3 ) }*
digit_3: digit digit digit
digit_123: digit digit? digit?
digit: [0-9]

どや?完璧だろこのBNF
これで文句ないな
0597デフォルトの名無しさん
垢版 |
2022/07/03(日) 12:41:01.89ID:E32cFzvb
>>596
"1."、"01"、"1234,567" が INVALID になりませんし "." だけでも FLOAT になるのはどうかと思いますが...
0598デフォルトの名無しさん
垢版 |
2022/07/03(日) 12:54:46.68ID:/kuq8Z/3
>>597
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.4

int: comma_digit
float: comma_digit '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ( ','? digit_3 ) }*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

どや?
0600デフォルトの名無しさん
垢版 |
2022/07/03(日) 15:35:40.90ID:VBJi0e3g
>>598
指摘された箇所すら直せないとかどう見ても向いてないからやめたら?
> "1234,567" が INVALID になりませんし
0604デフォルトの名無しさん
垢版 |
2022/07/03(日) 16:24:52.83ID:/kuq8Z/3
>>600
version 1.0.5

int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: digit_19 digit_09*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

ていうか1234,567にはならんはずだぞ
0605デフォルトの名無しさん
垢版 |
2022/07/03(日) 16:30:18.21ID:/kuq8Z/3
>>600
version 1.0.6

int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: ( digit_19 digit_09+ ) | digit_09
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

おら!完璧だろ!
0606デフォルトの名無しさん
垢版 |
2022/07/03(日) 17:25:11.12ID:bGSSCSEx
>>604
> ていうか1234,567にはならんはずだぞ
しれっと変えといてさすがにそれは恥ずかしいな
>>598> comma_digit: digit_123 { ( ','? digit_3 ) }*
>> 604 > comma_digit: digit_123 { ',' digit_3 }*

>>605
まあ、よしとしてやろう
0607デフォルトの名無しさん
垢版 |
2022/07/03(日) 20:20:25.60ID:H80x+Ni5
問題を解かずに出題の形式美に必死になるなんて、このスレ的にどうなのよ?
0608蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/07/03(日) 21:46:41.57ID:wwKaul6r
char buf[64];
fgets(buf, 64, stdin);
char *endptr;
strtol(buf, &endptr, 10);
if (*endptr == 0) {
puts("INT");
return;
}
strtod(buf, &endptr);
if (*endptr == 0) {
puts("FLOAT");
return;
}
puts("INVALID");
0610デフォルトの名無しさん
垢版 |
2022/07/08(金) 20:02:47.21ID:N6PR1KyM
お題
非負整数xが16進数表記で与えられる。xのビットu~lの範囲を逆順にした値を出力せよ。

[入力]
x u l

[例]
0x80 7 0
=> 0x1 (8bit全体をreverse)

0xABCD 11 4
=> 0xA3DD (真ん中8bitをreverse, 0xBC=0b10111100 -> 0b00111101=0x3D)

0x2 99 1
=> 0x8000000000000000000000000 (2の99乗)
0611デフォルトの名無しさん
垢版 |
2022/07/08(金) 22:06:04.39ID:ju1TxHLl
>>610 Ruby

f = -> (*a) {_, e, s = a.map(&:to_i); '0x%X' % a[0].hex.digits(2).concat(Array.new(e, 0)).tap{_1[s..e] = _1[s..e].reverse}.reverse.reduce{|s, i| 2 * s + i}}

['0x80 7 0', '0xABCD 11 4', '0x2 99 1'].each{puts '%s -> %s' % [_1, f[*_1.split]]}

# =>
0x80 7 0 -> 0x1
0xABCD 11 4 -> 0xA3DD
0x2 99 1 -> 0x8000000000000000000000000
0614デフォルトの名無しさん
垢版 |
2022/07/24(日) 20:03:09.74ID:RqwYivmm
あげ
0615デフォルトの名無しさん
垢版 |
2022/07/26(火) 20:19:27.06ID:wEdk200U
お題:数字をミラーリングせよ

入力 < 123
出力 > 123321

reverse系メソッドを使わなかったら加点とする
0617デフォルトの名無しさん
垢版 |
2022/07/26(火) 22:30:32.74ID:LilaKoZu
>>615
Java

static String mirror(String src) {
 var dest = new char[src.length() * 2];
 var a = src.toCharArray();
 for (var i = 0; i < a.length; i++) {
  dest[i] = a[i];
  dest[dest.length - 1 - i] = a[i];
 }
 return new String(dest);
}
0621デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:03:13.42ID:MKIa5t3g
俺も考えてみたけど調べても回分数のシグマ使わない一般式は無いみたいだな
0622デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:09:31.00ID:C/59UMec
>>615 JavaScript
const mirror = (n, c, ...args) => c === null ? (answer => 0 <= n && answer <= Number.MAX_SAFE_INTEGER ? answer : RangeError(`${n} is invalid.`))(args.reduce((s, d) => s * 10 + d, n)) : c == undefined ? mirror(Number.parseInt(n), Number.parseInt(n), ...args) : mirror(n, c < 10 ? null : Math.floor(c / 10), ...args, c % 10);

// test
for (const [n] of [[-1, 'x'], [0, 'o'], [1, 'o'], [12345678, 'o'], [123456789, 'x'], [123.456, 'o (123321)']]) {
const answer = mirror(n);
console[answer instanceof RangeError ? 'error' : 'log'](answer);
}
062496
垢版 |
2022/08/02(火) 01:11:31.65ID:6KqVNIq0
>>615 Perl5

use feature qw{say signatures}; no warnings 'experimental';

sub f($i, @a) { $i and @a ? (f(@a), $i) : $i }

@a = split'',123;
say @a, f(@a);



実行結果
~ $ perl 20_615_mirror.pl
123321
062596
垢版 |
2022/08/02(火) 01:20:34.60ID:6KqVNIq0
>>615 Perl5 (リスト処理版)

@a = split '', 123;
print @a, map{@a[$#a - $_]} 0..$#a;


実行結果
~ $ perl 20_615_mirror_list.pl
123321
0630デフォルトの名無しさん
垢版 |
2022/08/05(金) 13:16:58.45ID:6eafuacR
gnuWin32を基本使っています。
で行のソートなのですが、各行の末尾から逆向きの文字でソートって出来ませんか
たとえば
aaaaCB
bbbBA
cccccDB
とかあったとき、これを
bbbBA
aaaaCB
cccccDB
としたいのです。
もし難しそうであれば、各行を反転、つまり
abcde

edcba
とする方法でもいいです。
0631デフォルトの名無しさん
垢版 |
2022/08/05(金) 13:43:08.90ID:Vk8oFh91
>>630
Java
Arrays.sort(a, (left, right) -> {
 var l = left.length() - 1;
 var r = right.length() - 1;

 while (l > -1 && r > -1) {
  var c = Character.compare(left.charAt(l), right.charAt(r));

  if (c != 0) {
   return c;
  }

  l--;
  r--;
 }

 if (l > -1) {
  return 1;
 }

 if (r > -1) {
  return -1;
 }

 return 0;
});
063296
垢版 |
2022/08/05(金) 19:36:20.73ID:Rv34IsoP
>>630 Perl5が使える環境であれば…

~ $ cat 20_630_isort.pl
chomp (@a = <>);
sub f {join '', reverse split'', $_[0]}
print "$_\n" for sort{f($a) cmp f($b)} @a;

~ $ cat input.txt
aaaaCB
bbbBA
cccccDB

~ $ perl 20_630_isort.pl < input.txt > output.txt

~ $ cat output.txt
bbbBA
aaaaCB
cccccDB
063496
垢版 |
2022/08/05(金) 22:43:00.57ID:Rv34IsoP
>>632
しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、
データの行数が多いと遅いな
063596
垢版 |
2022/08/06(土) 00:54:37.07ID:pYJx8bVL
>>630 Perl5、計算量の抑制に配慮したバージョンと実行例

$ cat 20_630_isort2.pl
print $_->[0] for sort{$a->[1] cmp $b->[1]} map{[$_, scalar reverse $_]} <>;

$ cat input.txt
aaaaCB
bbbBA
cccccDB

$ perl 20_630_isort2.pl input.txt > output.txt

$ cat output.txt
bbbBA
aaaaCB
cccccDB
063696
垢版 |
2022/08/06(土) 01:06:37.87ID:pYJx8bVL
>>635
これ各行の行末の改行まで含めてreverseしてsortキーとするので、
もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。
そのような万が一の場合に対してもrubstさも持たすならこうか

chomp(@a = <>);
print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;
0638デフォルトの名無しさん
垢版 |
2022/08/06(土) 06:11:51.22ID:UcInr7RU
>>630
Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。
(入力文字列は input.txt に入っているとして)。

rev input.txt | sort | rev

Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。
063996
垢版 |
2022/08/06(土) 08:20:40.77ID:pYJx8bVL
>>610 Perl5

use Bit::Vector;
$v = Bit::Vector->new(101);
for (<DATA>) {
 ($h, $s, $e) = /0x(\S+) (\S+) (\S+)/;
 $v->from_Hex("$h");
 $v->Interval_Reverse($e, $s);
 ($r) = $v->to_Hex() =~ /0+(\w+)/;
 print "$_ => 0x$r\n";
}
__DATA__
0x80 7 0
0xABCD 11 4
0x2 99 1

※インデントを見易くするため全角スペースに置換しています


実行結果

$ perl 20_610_rebitfld.pl
0x80 7 0
=> 0x1
0xABCD 11 4
=> 0xA3DD
0x2 99 1
=> 0x8000000000000000000000000
0640デフォルトの名無しさん
垢版 |
2022/08/06(土) 10:15:53.94ID:8a3zeEyr
>>638
Linux環境ではrevというのがあるのですね
gnuWin32は全部揃ってないのですね。なんだかなあ
rev以外でもLinuxにあってgnuWin32にはないのがあるのかな
rev、自分で作ろうかな
0641デフォルトの名無しさん
垢版 |
2022/08/06(土) 11:17:00.60ID:y9e1BfKB
>>630 ocaml
https://ideone.com/zdWLHX
let rev s = String.init (String.length s) (fun i -> s.[String.length s - 1 - i])
let (<<) f g x = f (g x)
let f = List.map (fun (r, s) -> s) << List.sort compare << List.map (fun s -> (rev s, s))
let () = List.iter print_endline @@ f ["aaaaCB"; "bbbBA"; "cccccDB"];
064296
垢版 |
2022/08/06(土) 15:02:55.35ID:ddLJv/Kp
>>640
gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが…

util-linux-ng for Windows
http://gnuwin32.sourceforge.net/packages/util-linux-ng.htm

Util-Linux contains miscellaneous utilities:
col: filter reverse line feeds from input
colcrt: filter nroff output for CRT previewing
colrm: remove columns from a file
ddate: converts Gregorian dates to Discordian dates
getopt: parse command options (enhanced)
hexdump: ascii, decimal, hexadecimal, octal dump
line: read one line
rename: rename files
rev: reverse lines of a file or files ←
tailf: follow the growth of a log file
whereis: locate the binary, source, and manual page files for a command

作りたいというなら類似のsampleソースはゴマンと転がっとるし

C reverse string rev.c strrev - Google 検索
https://www.google.com/search?q=C+reverse+string+rev.c+strrev

C program to reverse a string | Programming Simplified
https://www.programmingsimplified.com/c-program-reverse-string

C_69 C Program to Reverse a String | with strrev() and without strrev() function - YouTube
https://www.youtube.com/watch?v=530jWnBMD2M

… 好きにしんしゃい
064396
垢版 |
2022/08/06(土) 15:16:53.43ID:ddLJv/Kp
Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは

GitHub - util-linux/util-linux
https://github.com/util-linux/util-linux

かな。そのうち rev.c のソースは

util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub
https://github.com/util-linux/util-linux/blob/master/text-utils/rev.c

ちな util-linux パッケージは2006年に fork したとき名前に -ng をつけて util-linux-ng になったが
2010年に util-linux に名前を戻している。
cf.)
util-linux - Wikipedia
https://en.wikipedia.org/wiki/Util-linux

ついつい、調べ物をしてしまった…orz
0644デフォルトの名無しさん
垢版 |
2022/08/06(土) 17:24:05.41ID:8a3zeEyr
>>642
ありがとう。そんなとこにあったのか
0645デフォルトの名無しさん
垢版 |
2022/08/07(日) 09:51:45.46ID:UY2OKMya
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHK
0646デフォルトの名無しさん
垢版 |
2022/08/07(日) 09:52:47.25ID:UY2OKMya
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHKで自作で作ってみました
rev input.txt | sort | rev
で問題なく動きました
0647デフォルトの名無しさん
垢版 |
2022/08/07(日) 16:26:03.27ID:BSSIjy3s
>>645
環境変数 LANG の設定の問題とか?
こっちでは日本語での rev できたよ。
CentOS 7 で bash で LANG=ja_JP.UTF-8 の状態。そこに Windows から TeraTerm で ssh ログインして試したらできた。

$ echo $LANG
ja_JP.UTF-8
$ ( echo 見城徹 ; echo 箕輪厚介 ; echo ガーシー ; echo 木原誠二官房副長官 ) | rev
徹城見
介厚輪箕
ーシーガ
官長副房官二誠原木
$
0648デフォルトの名無しさん
垢版 |
2022/08/07(日) 18:30:22.20ID:C65TbvUb
お題
0~2がランダムに8個入力されます
8個の数字を:で結合して出力してください
0が連続する場合は連続する0を::に置換してください
0の連続を::に置換できるのは1回のみです
0の連続が複数存在する場合は長い方を置換してください
長さが同じ場合は先頭の方を置換してください
1個の0は置換してはいけません


0, 0, 0, 1, 2, 1, 2, 2 → ::1:2:1:2:2
2, 1, 2, 0, 0, 0, 1, 1 → 2:1:2::1:1
1, 1, 2, 2, 1, 0, 0, 0 → 1:1:2:2:1::
2, 0, 0, 2, 0, 0, 0, 2 → 2:0:0:2::2
1, 0, 0, 1, 2, 0, 0, 2 → 1::1:2:0:0:2
0, 1, 2, 0, 1, 1, 0, 2 → 0:1:2:0:1:1:0:2
0649デフォルトの名無しさん
垢版 |
2022/08/07(日) 19:28:27.32ID:MpscsJR5
>>648 Ruby

f = -> s { x = s.gsub(', ', ?:); y = x.scan(/0(?::0)+/).max&.count(?0) || 0; x.sub(/:?0(:0){#{y - 1}}+:?/, '::') }


[

'0, 0, 0, 1, 2, 1, 2, 2',

'2, 1, 2, 0, 0, 0, 1, 1',

'1, 1, 2, 2, 1, 0, 0, 0',

'2, 0, 0, 2, 0, 0, 0, 2',

'1, 0, 0, 1, 2, 0, 0, 2',

'0, 1, 2, 0, 1, 1, 0, 2'

].each{ |s| puts '%s -> %s' % [s, f[s]] }


# =>
0, 0, 0, 1, 2, 1, 2, 2 -> ::1:2:1:2:2
2, 1, 2, 0, 0, 0, 1, 1 -> 2:1:2::1:1
1, 1, 2, 2, 1, 0, 0, 0 -> 1:1:2:2:1::
2, 0, 0, 2, 0, 0, 0, 2 -> 2:0:0:2::2
1, 0, 0, 1, 2, 0, 0, 2 -> 1::1:2:0:0:2
0, 1, 2, 0, 1, 1, 0, 2 -> 0:1:2:0:1:1:0:2
0651デフォルトの名無しさん
垢版 |
2022/08/07(日) 20:01:42.93ID:H+tq1Ypt
正規表現のreplace一個で行けそうと思ったけど最長マッチみたいなの無理なのか
0653デフォルトの名無しさん
垢版 |
2022/08/07(日) 20:17:47.43ID:xO94aiKw
そうか
単純に s/0{$n}/::/;
を連射して増やしていくだけでいいんだな
最後に成功したのを返す感じで
0655デフォルトの名無しさん
垢版 |
2022/08/07(日) 22:19:54.37ID:UmcKtz1r
>>648 octave
https://ideone.com/3Udpgi
function s = f(a)
c = diff(find([1 diff(a) 1]));
e = cumsum(c);
b = e - c + 1;
n = arrayfun(@(i) a(i), e);
[~, i] = max(c.*(n == 0));
s = arrayfun(@(n) {int2str(n)}, a);
if (1 < c(i))
s(b(i):e(i)) = ':';
end
s = regexprep(strjoin(s, ':'), ':::+', '::');
end
0656655
垢版 |
2022/08/07(日) 23:28:54.94ID:UmcKtz1r
結果同じだけど若干の整理可能だった

n = arrayfun(@(i) a(i), e);
[~, i] = max(c.*(n == 0));

[~, i] = max(c.*(a(e) == 0));
065796
垢版 |
2022/08/08(月) 01:54:39.48ID:Fkng8CYp
>>648 Perl5

use List::Util 'max';
for (<DATA>) {
 %h = map{length($_) => $_} /(,?0(?:,0)+,?)/g;
 $n = max keys %h;
 chomp($i = $_);
 s/$h{$n}/::/ if $n;
 s/,/:/g;
 print "$i => $_";
}
__DATA__
0,0,0,1,2,1,2,2
2,1,2,0,0,0,1,1
1,1,2,2,1,0,0,0
2,0,0,2,0,0,0,2
1,0,0,1,2,0,0,2
0,1,2,0,1,1,0,2

※見易くするためインデントを全角スペースに置換してあります。


実行結果
$ perl 20_648.pl
0,0,0,1,2,1,2,2 => ::1:2:1:2:2
2,1,2,0,0,0,1,1 => 2:1:2::1:1
1,1,2,2,1,0,0,0 => 1:1:2:2:1::
2,0,0,2,0,0,0,2 => 2:0:0:2::2
1,0,0,1,2,0,0,2 => 1::1:2:0:0:2
0,1,2,0,1,1,0,2 => 0:1:2:0:1:1:0:2
0662デフォルトの名無しさん
垢版 |
2022/08/11(木) 15:46:46.10ID:wxhIEZ4F
>>648
敢えて正規表現使わずKotlinで。ややこしかったわ
https://ideone.com/JZcPdU
0663デフォルトの名無しさん
垢版 |
2022/08/11(木) 15:51:37.48ID:wxhIEZ4F
>>661
別の解き方が見れておもろい
0665661
垢版 |
2022/08/12(金) 00:33:44.04ID:DNG+vRxr
全部0の時に :: にならなかったので>>661はちょっと修正した。
0666デフォルトの名無しさん
垢版 |
2022/08/13(土) 14:28:26.51ID:JbrEzaSr
お題
1~37からランダムに重複なく7つの数を選び出して小さい順にソートしてください
それを5つ出力してください


[2, 4, 9, 13, 20, 29, 36]
[1, 4, 12, 13, 15, 20, 33]
[1, 3, 5, 7, 11, 20, 24]
[3, 7, 8, 21, 27, 33, 34]
[1, 2, 14, 23, 26, 35, 36]
0669デフォルトの名無しさん
垢版 |
2022/08/13(土) 19:08:33.35ID:jyB6kjuE
>>668
投稿後一部訂正、n の範囲チェックを追加

負数は弾く
(check-type n (integer 0 *))

上限はシーケンスの長さ
(loop repeat n

(loop (min n (length sequence))
0671デフォルトの名無しさん
垢版 |
2022/08/14(日) 00:39:46.54ID:YzvfyuVN
>>666
Kotlin script

repeat(5) { println((1..37).toList().shuffled().slice(0..6).sorted()) }


実行例

[6, 7, 9, 10, 16, 22, 27]
[2, 8, 9, 11, 16, 32, 33]
[11, 13, 18, 25, 26, 30, 34]
[2, 3, 12, 14, 20, 27, 37]
[7, 13, 14, 19, 27, 30, 35]
0672671
垢版 |
2022/08/14(日) 00:41:50.08ID:YzvfyuVN
>>671はこれでも同じだった (toList() 抜き)。

repeat(5) { println((1..37).shuffled().slice(0..6).sorted()) }
067396
垢版 |
2022/08/14(日) 01:45:55.09ID:jl8HjsTF
>>666 Perl5

use List::Util 'shuffle';
@a = 1..37;
$" = ', ';
print "@{[(shuffle@a)[0..6]]}\n"
 for 1..5;


実行結果

$ perl 20_666_shuffle1-37x5.pl
3, 2, 10, 25, 9, 23, 27
35, 6, 30, 8, 37, 29, 36
20, 29, 19, 18, 37, 21, 23
12, 30, 29, 7, 3, 31, 26
34, 12, 1, 14, 28, 2, 21
067596
垢版 |
2022/08/14(日) 01:59:26.66ID:jl8HjsTF
>>666 Perl5、>>673 は sort するの忘れてた…orz


use List::Util 'shuffle';
@a = 1..37;
$" = ', ';
print "@{[sort{$a <=> $b} ((shuffle @a)[0..6])]}\n" for 1..5;


実行結果

$ perl 20_666_shuffle1-37x5.pl
5, 9, 22, 28, 30, 32, 36
1, 2, 7, 21, 23, 26, 36
6, 14, 15, 16, 19, 26, 28
13, 14, 15, 16, 30, 35, 37
1, 3, 10, 20, 27, 29, 30
0676デフォルトの名無しさん
垢版 |
2022/08/14(日) 12:35:56.93ID:JoIEy2rI
>>666 ocaml
https://ideone.com/3UpGQV
let seq b e =
let rec aux acc n =
if n < b then acc else aux (n :: acc) (pred n)
in aux [] e
let (<<) f g x = f (g x)
let take n =
let rec aux acc n = function [] -> acc | x :: xs ->
if n <= 0 then acc else aux (x :: acc) (pred n) xs
in List.rev << aux [] n
let shuffle =
List.map snd << List.sort compare << List.map (fun x -> (Random.bits (), x))
let string_of_ints =
Printf.sprintf "[%s]" << String.concat "; " << List.map string_of_int
let f () = string_of_ints @@ List.sort compare @@ take 7 @@ shuffle @@ seq 1 37
let () = Random.self_init ();
List.iter (print_endline << f << ignore) @@ seq 1 5
0678デフォルトの名無しさん
垢版 |
2022/08/14(日) 21:45:18.38ID:b/j10zkL
(1) aとbからなる文字列があるときその中で部分文字列bbaが最初に完成する文字数を求める
ab -> 0
aaa -> 0
bba -> 3
bbba -> 4
babbab -> 5
bbabbaa -> 3

(2) ちょうど50文字のaとbからなる全ての並びの文字列の内
50文字目(最後)にbbaが完成するのは何通りあるか?

長さ3文字で3文字目に完成するのはbbaのひとつだけ
長さ4文字で4文字目に完成するのはabbaとbbbaの二通り
0679デフォルトの名無しさん
垢版 |
2022/08/14(日) 22:24:05.74ID:gf0q/4T2
>>678 Ruby
(1)
%w[ab aaa bba bbba babbab bbabbaa].each do |s|
i = s =~ /bba\K/
puts '%s -> %d' % [s, i ? i + 3 : 0]
end

# =>
ab -> 0
aaa -> 0
bba -> 3
bbba -> 4
babbab -> 5
bbabbaa -> 3

(2)
f = -> (n, a=[0, 0, 1]) {return a[n] if n<a.size; a<<f[n-1,a]+f[n-2,a]+1;a.last}

p f[49] # => 12586269024
0680デフォルトの名無しさん
垢版 |
2022/08/14(日) 22:30:32.35ID:z6QFcjeU
行列の掛け算を実装せよ
二次正方行列 A=((1 -2) (2 3)), B = ((-2 1)(3 -1)) について
AB, BA を求めよ
可能であれば二次正方行列以外の行列についても対応せよ
実装の細かい点については出題者は指定しないので良きに計らって結構。

<お願い>
行列の積において結合則成立の証明を教えてください
0682デフォルトの名無しさん
垢版 |
2022/08/14(日) 22:49:01.35ID:gf0q/4T2
>>680 Ruby Matrixクラス不使用
def product(a, b)
[
[a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]],
[a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]],
]
end

p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]])

# => [[-8, 3], [5, -1]]

# 夏休みの宿題は自分でやりましょう
0684デフォルトの名無しさん
垢版 |
2022/08/14(日) 23:05:21.92ID:gf0q/4T2
>>680 >>683
def product(a, b)
m = a.first.size
c = Array.new(a.size){[]}
a.size.times do |i|
b.first.size.times do |j|
c[j][i] = m.times.map{|k| a[k][i] * b[j][k]}.sum
end
end
c
end

p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]])
# => [[0, 7], [1, -9]]

p product([[-2, 1], [3, -1]], [[1, -2], [2, 3]])
# => [[-8, 3], [5, -1]]
0685デフォルトの名無しさん
垢版 |
2022/08/14(日) 23:09:42.44ID:ct8M+Uij
NxMのデータをどう定義するか だけの問題だな
毎回悩む 下は後悔してるタイプ
(defparameter *position-IO*
(loop
for input in '(7 8 9
4 5 6
1 2 3)
for pos below 9
collect (cons input pos)))
0686デフォルトの名無しさん
垢版 |
2022/08/15(月) 00:42:19.42ID:PTEGgn5Q
>>679
どういう頭してたらその法則性に気づくん???
0687デフォルトの名無しさん
垢版 |
2022/08/15(月) 01:31:39.90ID:b/MTJSvV
>>678
Kotlin script

(1)
listOf("ab","aaa","bba","bbba","babbab","bbabbaa").forEach { print("$it ->"); it.indexOf("bba").let { if (it >= 0) println(it + 3) else println(0) } }

実行時の出力

ab ->0
aaa ->0
bba ->3
bbba ->4
babbab ->5
bbabbaa ->3

(2)
println(1L shl (50 - 3))

実行時の出力

140737488355328
0688デフォルトの名無しさん
垢版 |
2022/08/15(月) 01:56:11.12ID:RG8mAl+Q
(2)
出題の仕方が間違ってた
最後に唯一のbbaが現れるパターンと書くべきだった
自分の中ではこのことしか考えてなかったから
>>679さんは汲んでくれたようで、早さにも驚いたけど
0689デフォルトの名無しさん
垢版 |
2022/08/15(月) 09:19:59.19ID:jWRkxbjN
なるほど, 再帰的に構成すればいいのか
aから始まる時: a + x[n-1]
baから始まる時: ba + x[n-2]
bbから始まる時: bb...bba
0690デフォルトの名無しさん
垢版 |
2022/08/15(月) 09:43:22.06ID:90U51paY
>>686
そういう漸化式は普通に受験で良くでてくる
0695デフォルトの名無しさん
垢版 |
2022/08/16(火) 19:29:50.25ID:6LZk+vGC
>>688
え?言ってる意味がわからない。どういうこと?
0696デフォルトの名無しさん
垢版 |
2022/08/16(火) 20:01:21.15ID:xodQRDI1
bba+gge=momo
0697デフォルトの名無しさん
垢版 |
2022/08/16(火) 20:30:31.72ID:E3OXZYXp
>>695
末尾以外にbbaが現れる文字列を除外するってことじゃろう
0698デフォルトの名無しさん
垢版 |
2022/08/16(火) 21:15:34.85ID:dhC56AkH
bbaが最後に達成されるんじゃなければ2^47計算するだけのなんの面白みもない問題になるからそこで気付く人は気づくよね
0699デフォルトの名無しさん
垢版 |
2022/08/16(火) 23:04:49.04ID:mbmTGUKF
ついでに50文字で今度は最後がbbaじゃなくて
bbbのときとbabのときのそれぞれのパターン数を求めるって問題
0701デフォルトの名無しさん
垢版 |
2022/08/17(水) 14:04:15.12ID:UFtMHmKs
お題:分割されている顔文字を結合して表示してください
1つの顔文字は半角4字で構成。左右対称。2字ずつ半分に分割されてシャッフルされている
出力する顔文字の順番は自由とする

入力 < ^)(^
出力 > (^^)

入力 < ^)(-(^-)(vv)
出力 > (^^)(--)(vv)
0702デフォルトの名無しさん
垢版 |
2022/08/17(水) 14:59:27.47ID:2ZT38iyw
お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」をそれぞれ表示する方法を示してください
便宜的に、ナンプレのマスには左上から右へ、右下に向かい0〜80までの数値を入れます。
0 1 2 3 4 5 6 7 8
...
...............80
左から1列目の9マスは
0703デフォルトの名無しさん
垢版 |
2022/08/17(水) 15:10:22.08ID:2ZT38iyw
途中送信してしまった

お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」のマスをそれぞれ表示する方法を示してください
※便宜的に、ナンプレのマスには左上から右へ、右下に向かい0〜80までの数値を入れます。

0 1 2 3 4 5 6 7 8
...
...............80

例えば左から1列目の9マスは
[0 9 18 27 36 45 54 63 72]
となります。
等差を利用して数字だけを表示するものは不可です。
マスに何の値が入っていても表示できるようにしてください。
0707デフォルトの名無しさん
垢版 |
2022/08/18(木) 03:07:13.35ID:dBOjwuYR
>>701 JavaScript
> ['^)(^', '^)(-(^-)(vv)', '<)(>'].map((R => input => Array.from(input.matchAll(/\((.)/g)).reduce((output, [l, r]) => output + l + R(r) + ')', ''))(r => r == '>' ? '<' : r))
[ '(^^)', '(--)(^^)(vv)', '(><)' ]
0708デフォルトの名無しさん
垢版 |
2022/08/18(木) 10:19:41.72ID:KriVCD9m
>>701 Ruby
f = -> str do
loop do
str.sub!(/(.)\)(.*)\(\1/, '(\1\1)\2') ||
str.sub!(/\((.)(.+)\1\)/, '(\1\1)\2') ||
(break str)
end
end

%w[ ^)(^ ^)(-(^-)(vv) (-(^-)^)].each do |s|
puts '%s -> %s' % [s, f[s.b]]
end

# =>
^)(^ -> (^^)
^)(-(^-)(vv) -> (^^)(--)(vv)
(-(^-)^) -> (--)(^^)
0709デフォルトの名無しさん
垢版 |
2022/08/18(木) 10:20:40.39ID:KriVCD9m
>>703 Ruby
PLACEHOLDER = [*0..80]

field = 9.times.reduce([]) do |s, y|
s << 9.times.map do |x|
PLACEHOLDER[9 * y + x]
end
end

puts field.map{|r| r.map{'%02d' % _1}.join}

# =>
000102030405060708
091011121314151617
181920212223242526
272829303132333435
363738394041424344
454647484950515253
545556575859606162
636465666768697071
727374757677787980
0710デフォルトの名無しさん
垢版 |
2022/08/18(木) 10:42:28.41ID:KriVCD9m
>>703 お題をよく読んでいなかった >>709の続き
row = -> (n, field) {field[n]}
column = -> (n, field) {field.map{_1[n]}}
block = -> (n, field) {9.times.map{n * 3 + n / 3 * 18 + _1 + _1 / 3 * 6}.map{field.flatten[_1]}}

puts row[7, field].join(?,)
# => 63,64,65,66,67,68,69,70,71

puts column[7, field].join($/)
# =>
7
16
25
34
43
52
61
70
79

puts block[7, field].each_slice(3).map{_1.join(?,)}.join($/)
# =>
57,58,59
66,67,68
75,76,77
0712デフォルトの名無しさん
垢版 |
2022/08/19(金) 23:42:01.44ID:GkIv/1vJ
お題
<user>:<group>の数
<user>:<group>
<user>:<point>の数
<user>:<point>
が入力されます

<group>ごとに<point>を集計して<group>順に
<group>:<point>を出力してください

例)
// 入力
6
UserE:GroupC
UserD:GroupA
UserB:GroupC
UserA:GroupC
UserC:GroupB
UserF:GroupB
6
UserB:3
UserF:2
UserD:5
UserC:13
UserE:11
UserA:7

// 出力
GroupA:5
GroupB:15
GroupC:21
0713デフォルトの名無しさん
垢版 |
2022/08/19(金) 23:58:05.14ID:zRvvDV0W
なんで数を入力してるんだ?
後の情報であきらかではないか
まさかグループ名が整数でも良いと考えている?
0714デフォルトの名無しさん
垢版 |
2022/08/20(土) 00:02:54.24ID:xIohwuBb
>>712 Ruby
g, p = str.split(/^\d+$/)[1, 2].map{_1.strip.each_line.map{|s| s.chomp.split(?:)}.to_h}
puts g.reduce(Hash.new(0)){|h, (k, v)| h[v] += p[k].to_i; h}.sort.map{_1.join(?:)}

# =>
GroupA:5
GroupB:15
GroupC:21
0715デフォルトの名無しさん
垢版 |
2022/08/20(土) 07:49:15.49ID:/HXUcxOA
// >>712 Node.js
import readline from 'node:readline';
const rl = readline.createInterface({input: process.stdin, output: process.stdout});
const all = [/* {user, group, point}, ... */];
let usergroup = false;
rl.on('line', line => {
line = line.trim();
if (line) {
if (/^\d+$/.test(line)) {
usergroup = !usergroup;
} else if (usergroup) {
const {groups} = line.match(/^(?<user>[^:]+):(?<group>[^:]+)$/);
all.push(groups);
} else {
const {groups: {user, point}} = line.match(/^(?<user>[^:]+):(?<point>\d+)$/);
Object.defineProperty(all.find(_ => _.user == user), 'point', {value: Number(point), enumerable: true});
}
} else {
rl.close();
}
});
rl.on('close', () => {
for (const [group, point] of Object.entries(all.reduce((gp, {group, point}) => {gp[group] = (gp[group] ?? 0) + point; return gp;}, {})).sort(([a], [b]) => a < b ? -1 : 1)) {
console.log(`${group}:${point}`);
}
});
071996
垢版 |
2022/08/21(日) 02:42:00.00ID:P6BPpVvp
>>712 Perl5

use feature qw{say signatures}; no warnings "experimental::signatures";
sub ($n, @a) {
 $h{$$_[0]} = $$_[1] for map{[/(\w+)/g]} @_[1..$n];
 sub ($m, @) {
  $g{$h{$$_[0]}} += $$_[1] for map{[/(\w+)/g]} @_[1..$m];
 }->(@a[$n..$#a]);
 say "$_:$g{$_}" for sort keys %g;
}->(<>);

※見易くするためインデントを全角スペースに置換してあります。


実行結果:
https://ideone.com/GxsRSY
0720デフォルトの名無しさん
垢版 |
2022/08/21(日) 06:03:07.44ID:V5T4kdVo
>>712
<group>順にって、何を元にして group の順序を決めるの?
入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?
0721デフォルトの名無しさん
垢版 |
2022/08/21(日) 07:03:57.35ID:3JIuIXQv
<group>毎という事だと思う
サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし
0722デフォルトの名無しさん
垢版 |
2022/08/21(日) 08:49:24.60ID:0ZMA3aWJ
>>713
実際にここでも数字を使っている例が出て来てるからわかると思うけど
競プロなんかではよくあるフォーマットだよ
0724デフォルトの名無しさん
垢版 |
2022/08/21(日) 18:28:38.88ID:Y2TZP89X
お題:Hello, World!を出力中にプログラムを強制終了せよ
Hello, World!が完全に出力されたらGAME OVERとする
0725デフォルトの名無しさん
垢版 |
2022/08/21(日) 18:45:13.28ID:ui07Fbeq
>>724 Ruby
Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'}
Thread.new{exit}

# =>
Hello, World!
0731729
垢版 |
2022/08/22(月) 19:20:01.17ID:7CA3B9Dd
>>724 c
https://ideone.com/k8R7TU
>>729 どう見ても正常終了です。本当にありがとうございました。
・子プロセスの強制終了を見届けてから自分自身も強制終了
0732デフォルトの名無しさん
垢版 |
2022/08/25(木) 15:38:14.81ID:bJn+zm7R
>>724
その強制終了って人間が Ctrl + C を押すなどしてやるという意味?
間に合わずに全部出力し切った場合は GAME OVER 出すということ?
0734デフォルトの名無しさん
垢版 |
2022/08/25(木) 16:09:53.36ID:6j74uL6b
54.144.0.0/12といったどこかで見たことあるような形式の文字列を入力すると
^(?!(54.144.|54.145.|54.146.|54.147.|54.148.|54.149.|54.150.|54.151.|54.152.|54.153.|54.154.|54.155.|54.156.|54.157.|54.158.|54.159.))
といったいい感じの文字列が標準出力に出力されるやつ、誰か作れますか?
例の他にも54.208.0.0/13 54.216.0.0/14 54.192.0.0/12 54.160.0.0/11 54.220.0.0/15といった似た感じの文字列が入力され
やはりいい感じに処理された別の文字列が出力されます

できればライセンスはゼロ条項BSDライセンスでお願いします
0735デフォルトの名無しさん
垢版 |
2022/08/25(木) 16:22:36.77ID:0z7AphVM
ま、まあ、作れなくはないかな…
0736デフォルトの名無しさん
垢版 |
2022/08/25(木) 18:48:07.98ID:0xws5w3m
フワっとした頭の中にしか定義されてない案件なんて誰もこなせないぞ
本人以外は
0738デフォルトの名無しさん
垢版 |
2022/08/25(木) 21:10:16.35ID:/BGaqBqg
>>734 JavaScript
function _734(ip_range) {
const result = [];
const as = ip_range.split(/\D/).map(_ => Number(_));
const m = as.at(-1);
const q = Math.floor(m / 8);
const r = m % 8;
const e = 8 - r;
const l = as[q].toString(2).padStart(8, '0').slice(0, r);
for (let i = 0, sup = 2 ** e; i < sup; i++) {
as.splice(q, 1, Number.parseInt(l + i.toString(2).padStart(e, '0'), 2));
result.push(as.slice(0, q + 1));
}
return '^(?!(' + result.map(_ => `${_.join('\\.')}${q < 3 ? '\\.' : ''}`).join('|') + '))';
}
0740デフォルトの名無しさん
垢版 |
2022/08/26(金) 04:09:37.08ID:NIKxWs5c
割とすぐに出来るもんなんですね
どちらも実用上問題なさそうな、いい感じの実行結果です

>738は最新の実行環境に心当たりがなかったので確認に手間どりましたが
Chromeのコンソールから実行して確認できました
(cscriptで実行しようとしたらat()に対応してなかったので)

いやー勉強になります、ありがとう
074296
垢版 |
2022/08/26(金) 05:19:52.33ID:GgZblxs6
>>740
人をタダで利用してない?
0743デフォルトの名無しさん
垢版 |
2022/08/26(金) 11:51:47.61ID:d54FvNjc
>>733
マルチスレッドかマルチタスクで "Hello, world!" を出力する処理と、ランダムなタイミングでそれを強制終了させる処理が動くということで良いのか?
そして出力中に停止できなかったら "GAME OVER" が最後に出ると。
0744デフォルトの名無しさん
垢版 |
2022/08/26(金) 14:32:15.45ID:71YXfdUw
>>743
その実装でもいいよ
題意はいかにHello, World!出力中にプログラムを終了させるかだから
sleep挟んでもいい
0745デフォルトの名無しさん
垢版 |
2022/08/26(金) 18:44:07.03ID:NQ4mbOjq
>>733
#!/usr/bin/env sh
cat <<"EOL" | perl -ne '/(Hello, World)(?:[!])/ ? die " $1 got failed." : print'
> foo
> bar
> baz
> Hello, World
> Hello, World
> Hello, World!
> you can't see me, right?
> EOL
foo
bar
baz
Hello, World
Hello, World
Hello, World got failed. at -e line 1, <> line 6.
0746デフォルトの名無しさん
垢版 |
2022/08/26(金) 21:28:18.28ID:NIKxWs5c
はて?プログラミングのお題を投げて、競技的な興味をもって答えたくなった人が答え
その回答に興味があれば参照して「普段は扱ってないこの言語だとそういうやりかたなのか」
「自分とは違うスマートなやり方があったのか」と思ったりするスレ、という理解でしたが

もしかして投げたときに”お題”という文字が抜けてたのが問題ありましたか?
概ね正解とするに足る実行結果を、実用上問題なさそうと表現したことが拙かったですか?
もしそうなら申し訳ない、次からは気をつけます
0747デフォルトの名無しさん
垢版 |
2022/08/26(金) 21:31:39.94ID:NIKxWs5c
ついでというかなんというか>734の自分のお題に対する自己回答です(色々と手抜きしてありますが)
#!/usr/bin/ksh
function proc {
typeset A B C D E F N M L I
IFS='.','/' read A B C D E <<XYZ
$1
XYZ
let N="(${E}+8)/8" let M="8-(${E}%8)"
if [ $N -eq 5 ]; then echo -n "${A}.${B}.${C}.${D}"; return; fi
set -A BASE dummy "" "${A}." "${A}.${B}." "${A}.${B}.${C}."
set dummy $A $B $C $D; shift $N; F=$1; let L="$F-1+(1<<$M)"
for I in `seq $F $L`; do echo -n "|${BASE[$N]}${I}."; done; }
if [ $# -eq 0 ]; then echo "need CIDR/s"; exit 65; fi
set -A CIDR dummy $@;
echo -n "^(?!dummy"; for I in `seq 1 $#`; do proc ${CIDR[$I]}; done; echo ")"
exit 0
074896
垢版 |
2022/08/29(月) 02:30:43.54ID:QAZMtAov
>>734 Perl5

for (<>) {
 print;
 @a = /(\d+)/g;
 $w = pop @a;

 $o = ($w - 1) >> 3;
 $m = $w - $o * 8;
 $n = 2**(8 - $m);

 $l = join '.', @a[0..$o-1];
 $l .= '.' if '' ne $l;

 $h = $a[$o] & (255 << (8 - $m));

 $r = $o < 3 ? '.' : '';
 @b = map{$l . ($h + $_) . $r} 0..($n - 1);

 print '^(?!(' . join('|', @b) . "))\n";
 print "\n";
}

※見易くするためインデントを全角スペースに置換しています。


実行例:
https://ideone.com/VBJMMo
074996
垢版 |
2022/08/29(月) 02:55:16.14ID:QAZMtAov
>>748
128.0.0.0/1 の結果が変
バグ入りだ、ゴメンチャイ
075096
垢版 |
2022/08/29(月) 03:01:45.22ID:QAZMtAov
あれ?いいのかな?
仕様を推測して作ったけどちょっと混乱したかも…
寝るわ
0751デフォルトの名無しさん
垢版 |
2022/09/09(金) 22:29:09.28ID:zwPgoVui
お題
長方形の1辺の長さのリストと正方形の面積のリストが入力されます

それぞれの正方形の面積について
長方形の1辺の長さのリストから2つを選んで掛け合わせ長方形の面積を計算します
長方形の面積が正方形の面積以上でかつ最小の面積となる組み合わせを探して出力してください
見つからなかった場合はerrorを出力してください

(例)
// 1辺の長さのリスト
[17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]

// 正方形の面積のリスト
[390, 240, 37, 396, 198, 99, 242, 53, 329, 202]

// 出力
390:error
240:16,17
37:3,13
396:error
198:11,18
99:6,17
242:16,17
53:3,18
329:error
202:13,16
0752デフォルトの名無しさん
垢版 |
2022/09/09(金) 23:02:00.41ID:Un8DgV3E
>>751
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
c = a.group_by(&:itself).values.map{_1.size > 2 ? _1[0, 2] : _1}.flatten.permutation(2).map{[_1 * _2, [_1, _2].sort]}.uniq.sort.to_h
b.each{|s| puts '%d: %s' % [s, c.find{_1[0] >= s}&.[](1)&.join(?,) || :error]}

# =>
390: error
240: 16,17
37: 3,13
396: error
198: 11,18
99: 6,17
242: 16,17
53: 3,18
329: error
202: 13,16
0753デフォルトの名無しさん
垢版 |
2022/09/09(金) 23:46:43.88ID:3788iROh
>>751 ruby
https://ideone.com/hBHe51
def f(as, bs)
c = as.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort_by(&:first).each_cons(2)
bs.map do |b|
d = c.find {|e, f| e[0] < b && b <= f[0]}
"#{b}:#{d ? d[1][1..2].join(',') : 'error'}"
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)
0754753
垢版 |
2022/09/10(土) 00:24:11.29ID:4GiNoMjQ
>>751
https://ideone.com/2UDrLT
>>753を若干の整理
>>752さんのを見て&.を勉強
def f(a, b)
c = a.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort
b.map {|b| "#{b}:#{c.find {|e| b <= e[0]}&.[](1..2)&.join(',') || 'error'}"}
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)
075696
垢版 |
2022/09/10(土) 02:29:07.85ID:7pWsuKpo
>>751 Perl5

$ls = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
$ss = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
sub f {2 < @_ ? (f(@_[1..$#_]), map{[$_[0] * $_, $_[0], $_]} @_[1..$#_]) : ()}
@rs = sort{$$a[0] <=> $$b[0]} f @$ls;
for $aa (@$ss) {
 @b = grep{$aa <= $$_[0]} @rs;
 print @b ? "$aa:$b[0][1],$b[0][2]\n" : "$aa:error\n";
}


実行結果
$ perl 20_751.pl
390:error
240:17,16
37:3,13
396:error
198:18,11
99:17,6
242:17,16
53:3,18
329:error
202:13,16
0757デフォルトの名無しさん
垢版 |
2022/09/10(土) 11:29:46.54ID:q8enYz1J
>>751 octave
https://ideone.com/WGkm27
function c = f(a, b)
u = unique(sort(nchoosek(a, 2), 2), 'rows');
p = prod(u, 2);
c = cell(size(b));
for i = 1:numel(b)
d = min(p(b(i) <= p));
if isempty(d)
c{i} = sprintf('%d:error', b(i));
else
s = strjoin(arrayfun(@(n) {num2str(n)}, u(p == d, :)), ',');
c{i} = sprintf('%d:%s', b(i), s);
end
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
cellfun(@disp, f(a, b))
0758デフォルトの名無しさん
垢版 |
2022/09/10(土) 13:32:08.25ID:q8enYz1J
>>751 c
https://ideone.com/Cqx8M3
#include <stdio.h>
void f(int *a, int *b, int na, int nb) {
int i, j, k, found, min, x, y;
for (i = 0; i < nb; i++) {
found = 0;
for (j = 0; j < na; j++)
for (k = 0; k < na; k++)
if (j != k && b[i] <= a[j] * a[k] && (!found || a[j] * a[k] < min))
found = 1, min = a[j] * a[k], x = a[j], y = a[k];
if (!found) printf("%d:error\n", b[i]);
else printf("%d:%d,%d\n", b[i], x, y);
}
}
int main() {
int a[] = {17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1};
int b[] = {390, 240, 37, 396, 198, 99, 242, 53, 329, 202};
f(a, b, sizeof a / sizeof *a, sizeof b / sizeof *b);
return 0;
}
0759デフォルトの名無しさん
垢版 |
2022/09/10(土) 19:18:11.93ID:PLqR4TKQ
>>751
Kotlin

可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな?

https://paiza.io/projects/ay4L7Wchnt6lGUvkh6h21A

240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。
(リストの順番で覚えているのでこうなる)。
0760デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:25:19.23ID:7X0yi8nW
お題

>>751の問題について

長方形の1辺の長さをソートして縦方向と横方向に並べて交差するところに長方形の面積を入れて表にします

https://downloadx.getuploader.com/g/angel556/90/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95.png
この図は50を探すところを描いています

青色の斜めの値の中から正方形の面積以上かつ最小の値を見つけその場所を出発点とします
長方形の面積が正方形の面積よりも大きい場合は表を上にたどり、長方形の面積が正方形の面積よりも小さい場合は表を右にたどります
右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

しゃくとり虫が動いてるように見えるのでこれをしゃくとり法と呼ぶことにします

>>751の問題をしゃくとり法で解いてください
0761デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:51:25.27ID:7X0yi8nW
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

これは間違いかも、これだと55を見つけられない
各自で考えていただければありがたく
0762デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:52:41.16ID:7X0yi8nW
いや、いいのか!? ダメだ混乱してきたもうパニックですわ
0764デフォルトの名無しさん
垢版 |
2022/09/10(土) 23:12:42.56ID:7X0yi8nW
>>760
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

これは間違いでした、上方向から右方向に変わる直前の値が回答候補ですね

50を探す場合、56,55,51が候補です
https://downloadx.getuploader.com/g/angel556/91/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95_%E8%A8%82%E6%AD%A3.png
0765素数を数えるんだ
垢版 |
2022/09/10(土) 23:25:22.59ID:22kPJ9rf
2, 3, 5, 7, 11, 13, 17, 19......
0766デフォルトの名無しさん
垢版 |
2022/09/11(日) 01:04:25.98ID:/LH0BDzE
お題
2~19までの素数を生成し掛け算の表を出力してください
0768デフォルトの名無しさん
垢版 |
2022/09/12(月) 10:44:10.79ID:VxR6iqOp
>>764
Kotlin
https://paiza.io/projects/caNg1GtDFhBF9Rk6AwC52Q

出力をHTMLにするとそれっぽく表示できた。
50は正方形の面積リストの最初に入れたが例の画像と同じような見た目になった。
0771デフォルトの名無しさん
垢版 |
2022/09/13(火) 22:25:19.07ID:V4Kz63G0
お題:OpenGLで四角形を3つ描画せよ
一番下の四角形が1番大きく赤色
その上にのってる四角形は2番目に大きく緑色
さらにその上にのってる四角形は3番目に大きく青色
0772デフォルトの名無しさん
垢版 |
2022/09/14(水) 12:47:57.36ID:LkrioAg+
お題

フェアフィールドの公式は、西暦1年1月1日から指定した日付までの日数を求めるもので次の式です
日数 = (365 * Y) + (Y / 4) - (Y / 100) + (Y / 400) + (306 * (M + 1) / 10) + D - 428

UNIX時間は、西暦1970年1月1日午前0時0分0秒からの経過秒数です

フェアフィールドの公式を用いてUNIX時間から年月日を求めて出力してください

(例)
1000000000 → 2001-09-09T01:46:40
1234567890 → 2009-02-13T23:31:30
0773デフォルトの名無しさん
垢版 |
2022/09/14(水) 15:20:59.73ID:s+3MjQLV
>>772 bat
@echo off &setlocal
call :Conv_uTime2iso 1000000000
call :Conv_uTime2iso 1234567890
pause&exit /b
:Conv_uTime2iso
set /a "GD=(UT=%~1)/86400+719468, h=100+(R=UT%%86400)/3600, n=100+(R%%=3600)/60, s=100+R%%60, y=400*(GD/146097), y+=100*(i=(R=GD%%146097)/36524), y+=(R%%=36524)/1461*4, y+=j=(R%%=1461)/365, R=R%%365+365*(L=(i|j)/4), f=(k=(R*5+2)/153)/10, d=R+101-(306*k+4)/10, m=k+103-f*12, y+=f-L"
echo %y%-%m:~-2%-%d:~-2%T%h:~-2%:%n:~-2%:%s:~-2%
0774デフォルトの名無しさん
垢版 |
2022/09/15(木) 05:31:46.38ID:LgD4XKTt
//>>772 JavaScript
function _772(epoch) {
/**/epoch = BigInt(epoch);if (epoch < 0n) {throw new RangeError('');}
/**/const lastDateOfMonth = (_ => Object.fromEntries(Array.from([, , , ..._.slice(2), _[0], _[1]].entries()).filter(([, v]) => v)))(Array.from(new Array(12).keys()).map(m => BigInt(new Date(2_022, m + 1, 0, 0, 0 - new Date().getTimezoneOffset()).getDate())));
/**/const FAIRFIELD = fairfield(1_969n, 12n, 31n) + epoch / 86_400n + 1n;
/**/let [Y, M, D] = [1_969n, 13n, 1n];
/**/for (; D <= 58n; D++) {if (FAIRFIELD == fairfield(Y, M, D)) {return {Y: 1_970n, M: 1n + D / 31n, D: D % 31n};}}
/**/for (Y = 1_970n; Y <= Number.MAX_SAFE_INTEGER; Y++) {
/**//**/for (M = 3n, D = 1n; D <= 366n; D++) {
/**//**//**/if (FAIRFIELD == fairfield(Y, M, D)) {
/**//**//**//**/if (D == 366n) {
/**//**//**//**//**/if (isLeapFullYear(Y + 1n)) {
/**//**//**//**//**//**/return {Y: Y + 1n, M: 2n, D: 29n};
/**//**//**//**//**/} else {
/**//**//**//**//**//**/return {Y: Y + 1n, M: 3n, D: 1n};
/**//**//**//**//**/}
/**//**//**//**/} else {
/**//**//**//**//**/for (; lastDateOfMonth[M] <= D; D -= lastDateOfMonth[M++]);
/**//**//**//**//**/if (M <=12n) {
/**//**//**//**//**//**/return {Y, M, D};
/**//**//**//**//**/} else {
/**//**//**//**//**//**/return {Y: Y + 1n, M: M % 12n, D};
/**/}}}}}
/**/function isLeapFullYear(Y) {return Y % 4n == 0n && Y % 100n != 0n || Y % 400n == 0;}
/**/function fairfield(Y, M, D) {return Y * 365n + Y / 4n - Y / 100n + Y / 400n + 306n * (M + 1n) / 10n + D - 428n;}
}
0778デフォルトの名無しさん
垢版 |
2022/09/16(金) 01:05:26.42ID:/mniU0r8
フェアフィールドの公式てwikipediaに書かれている出自不明な公式でも何でも無いでっち上げの記事でしょ
式の解説文がこれまた頭悪くて、なのに誰も修正しないという
0781デフォルトの名無しさん
垢版 |
2022/09/17(土) 17:48:30.91ID:fw6a0lZo
お題
2*2の整数行列がいくつか与えられる。
これらを適当な順番で掛け合わせる(行列積)ことで零行列を作ることが可能かどうか判定せよ。
ただし、同じ行列を2回以上使用してもよい。


[[1, 0], [0, 0]], [[0, -1], [1, 0]] =>可能(行列1*行列2*行列1==0)
[[1, 2], [3, 4]], [[0, -3], [2, 4]] =>不可能(正則行列だから)
0787デフォルトの名無しさん
垢版 |
2022/09/24(土) 01:13:05.90ID:uYRJl5GL
>>772
亀レスHaskell
https://ideone.com/y7jYXr
色々考えて結局テーブル作って処理という最後の手段
わざわざ公開するほどのもんでもないけど一区切りつけるため
暦の勉強になった
なんで大の月と小の月の配置はこんなみっともないことになってるんだろ?
歴史家が調べでよくわからんみたいだけど
0788デフォルトの名無しさん
垢版 |
2022/09/24(土) 04:40:38.82ID:6vPOYH6k
>>772
だめ。その式に当てはめると必ずずれる。
0790デフォルトの名無しさん
垢版 |
2022/09/24(土) 09:42:29.34ID:v3rIJe0P
>>788
問題には書かれていないけれどその式は条件によって前処理が必要
・1-2月は前年として扱う。 1年を3-14月として計算
m=1 or 2 の時 y=y-1, m=m+12

>>789
UNIXTIMEにうるう秒なんて無い
0792デフォルトの名無しさん
垢版 |
2022/09/24(土) 12:13:55.28ID:v3rIJe0P
>>791
UNIXTIMEは「epocからの実時間の秒数」では無い
実時間から、うるう秒は加減され含まれず、1日は86400秒換算
だからそれを日時に変換しても「うるう秒の時刻を表せない」だけでズレなど発生しない
0794デフォルトの名無しさん
垢版 |
2022/09/24(土) 16:57:05.53ID:6vPOYH6k
>>790
出題ミスか。
これまでに作られたプログラムはその辺のことを考慮したプログラムになっていたのかな?
だったら分かってたんだからその辺の事を書いておいて欲しかったな。
0795デフォルトの名無しさん
垢版 |
2022/09/24(土) 22:38:52.94ID:Fvr5cAu6
wikiにはそこまで詳しい解説はなかったけど式みたらわかったけどな
⌊(m+1)/30.6⌋
という項
⌊x/30.6⌋という関数は0,1,2,3,4となる値が
31,30,31,30,31,31,(繰り返し)‥①
と変化してコレを周期153で繰り返す
月の長さは3月から見ると
31,30,31,30,31,31,30,31,30,31,31,28(29)
となってるから①を一月分左に平行移動すれば良いとわかる
からの⌊(m+1)/30.6⌋
0796デフォルトの名無しさん
垢版 |
2022/09/24(土) 22:45:27.51ID:Fvr5cAu6
>>795

間違えた
⌊m×30.6⌋という関数は0,1,2,3,4,‥の時の値が
31,31,30,31,30
の繰り返し
件の公式のmの項はコレを一月分ずらしてる
0797デフォルトの名無しさん
垢版 |
2022/09/28(水) 02:17:31.98ID:UDkh+W3M
お題:4回呼び出したらその内の1回が失敗する関数を書け
失敗した場合は「failed」と表示、成功した場合は「ok」と表示せよ
0801デフォルトの名無しさん
垢版 |
2022/09/30(金) 04:16:06.13ID:F2zw9Wj+
>>797
Kotlin

https://paiza.io/projects/QipeLOxxfW3_GNBarDA-8w

Int型1つ分のワークエリアを呼ぶ側から与えてそこでカウントして必ず4回の内1回が失敗になる。
乱数を使うと4回の内1回失敗ではなくなる可能性があるので使っていない。

引数としてInt型の参照を渡しても中身を変えられないのでIntArray(Java なら int[] に相当)で1要素作ってIntArrayの参照を渡している。
クラスでやっても良かったが、わざわざクラス作るほどのことでもないと思ったのでこの方式にした。
0803デフォルトの名無しさん
垢版 |
2022/10/09(日) 17:49:59.08ID:tsulmG4c
お題: あみだ https://imgur.com/6XtTF0E.png
画像のようなマス目の上に直線を引いたあみだを次のように表現することにします。
N: 縦線の本数(列数)
M: 橋が架けられている行数
B: M行N-1列の二次元配列で、橋が架けられていたら1、そうでない場合は0が格納されています。
あらかじめ、あみだの入力には左から0〜N-1までの整数が割り振られていることにします。また、同じ行に橋が二つ連続で隣り合うことは禁止されています。
一応の制約: 2 <= N <= 100, 1 <= M <= 100
あみだに橋が1つも存在しない場合、M=1となり、Bは1行N-1列の大きさで、すべての要素が0の2次元配列になることにします。

お題1: N, M, Bが与えられるので、あみだの出力を求めてください。(入出力のフォーマットは各自で適宜変更してもいいです。)
入力例(画像のもの):
4
4
1 0 1
0 1 0
1 0 0
0 1 0
出力例:
3 0 1 2

お題2: Nとあみだの出力が与えられるので、Mをできるだけ小さくしたあみだを求め、Mと Bの一例 を表示してください。
入力例:
5
2 4 0 1 3
出力例:
3
0 1 0 1
1 0 1 0
0 1 0 0
あみだ関連のお題は過去スレで何回か見かけたがろくに相手にされていなかったのであげてみる。
0804デフォルトの名無しさん
垢版 |
2022/10/10(月) 00:03:47.74ID:Em47unOv
reduced expressionのまとめられる積を出来るだけまとめたものが必ず最短になるなら簡単なんだけどな
0806デフォルトの名無しさん
垢版 |
2022/10/10(月) 15:00:17.69ID:AiOpkeUk
reduced expression の長さ自体の計算は簡単だけどこの問題は"reduced expressionの長さを求めよ"ではないからそこまで数学的に単純じゃないよ
0807デフォルトの名無しさん
垢版 |
2022/10/10(月) 20:53:48.73ID:uiS3Rjx/
>>803
お題1
ttps://paiza.io/projects/tUaZay_JvtZRkIaUhjYF7Q

お題2
ttps://paiza.io/projects/1yDZy-Vx-C9Q9Z_Oc03Mtw

お題1とお題2でそれぞれ入力と出力をあわせるようにした
Mをできるだけ小さくって難しいな
これでいいのかわからん
0808デフォルトの名無しさん
垢版 |
2022/10/10(月) 21:09:44.88ID:TC3V9vEZ
アルゴリズムが存在するのは明らかだしひとつ答え見つけるアルゴリズムも簡単
でもreduced expression見つけるアルゴリズムと同程度のアルゴリズムとなると途端に難しくなる

reduced expressionの場合には置換σのreduced expressionを見つけるには
(1) σ = idであるか否か判定する、σ=idなら空列を返して終了
(2) そうでない場合σ(i) > σ(i+1)であるiを見つける、見つけたiに対してτ=σ(i i+1)とおいてτほreduced expression sを求める
(3)
0809デフォルトの名無しさん
垢版 |
2022/10/10(月) 21:16:09.04ID:TC3V9vEZ
(3) s ( i i+1 )を返して終了
でもとまる
ここでミソはreduced expressionの1番右は( i i+1 )と決め打ち出来ること、コレがあるから多項式時間で終わる
しかしアミダの場合1番右の初手をそんなに簡単に決定出来るかが分からん
初手の可能性は転置全部の可換な集合のうち極大であるもの全体のいずれかに最短が入る事は簡単に示せるけど、そのような極大な可換集合をどれとっても必ずうまくいくことの証明がむずかしい
多分出来るんだとは思うけど正直数学板で話題にするような話でプロ板で出すような問題じゃない気がする
0810441
垢版 |
2022/10/11(火) 10:43:04.37ID:Q+yx5xdI
>>803
最近やっとpythonを学び始めたレベルだから合ってるかわからん
コメントとかもちゃんと書いたほうがいいのだろうか
暇な人添削してくれると嬉しい

お題1
https://ideone.com/uQ0lEu
お題2
https://ideone.com/IvtRj2
0811デフォルトの名無しさん
垢版 |
2022/10/11(火) 12:04:38.77ID:xv8Y5zzF
しゃぶれよ
081296
垢版 |
2022/10/13(木) 07:01:45.31ID:JNehkz2R
>>773
自分でやれ
0813デフォルトの名無しさん
垢版 |
2022/10/22(土) 02:49:22.02ID:ql0xnxKt
やってるやん
0814デフォルトの名無しさん
垢版 |
2022/10/24(月) 10:24:26.56ID:sCRx2Xsd
お題
プリンタAは1分間に1ページ印刷できます
プリンタBは3分間に1ページ印刷できます
プリンタCは5分間に1ページ印刷できます

プリンタを3台同時に動かして100ページを印刷します
100ページを印刷し終わるのに何分掛かるか求めてください
0822デフォルトの名無しさん
垢版 |
2022/10/25(火) 06:54:39.16ID:LZqPXT/2
>>817,820
逆算はページ数によってはダメ
例えば3ページの時、3分4ページが正解だけど
(B=2/3)+(C=2/5) で1繰り上がって2分が出て来る
0823デフォルトの名無しさん
垢版 |
2022/10/25(火) 07:50:54.84ID:V4E25MPr
A, B, Cでそれぞれ45/23, 15/23, 9/23ページ印刷すれば45/23分で3ページ印刷し終わるよ
0824デフォルトの名無しさん
垢版 |
2022/10/25(火) 08:18:47.97ID:5cB2OctB
100ページだからセーフ
0826デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:38:44.30ID:Er29dtqL
甘えんな
印刷周期を一定と仮定した上で解として取りうる離散値のどれになるかを小数単位で求めるプログラムも書こうよ
0827デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:08:38.15ID:idE58GAF
すまん、1分に3枚じゃなくて3分に1枚かorz
0829デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:28:13.40ID:F6XUw+z/
じゃあ1分に1枚、3枚、5枚のプリンターでの印刷というお題も出すか。
0831デフォルトの名無しさん
垢版 |
2022/10/25(火) 23:47:11.01ID:b0dw4lqu
>>829
Java

public static void main(String[] args)
{
 var pages = 100;
 var s = IntStream.of(1, 3, 5).sum();
 System.out.println((pages + s - 1) / s);
}
0832デフォルトの名無しさん
垢版 |
2022/10/26(水) 13:26:51.44ID:FciA0hc1
お題
オークA「ぐっふっふ…… 俺は媚薬を盛ってないぜ……」
オークB「ぐふっ…… 媚薬を盛ったやつはAかCのどちらかだぜ…」
オークC「オークBかDは嘘をついているぜ…ぐっふっふっふっ……」
オークD「ぐふふ…媚薬を盛った奴はB,Eの中にはいないぜ……ぐひっ…」
オークE「げひひっ……媚薬を盛ったやつは本当の事を言っているぞ…」
オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
女騎士「くうぅ…誰が嘘をついて誰が私に媚薬を盛ったんだ……!」
オーク達「ぐっふっふ……」

論理演算を用いて答えを求めてください
0833デフォルトの名無しさん
垢版 |
2022/10/26(水) 13:33:52.83ID:FciA0hc1
オークCとオークEがめんどくさいな
0834デフォルトの名無しさん
垢版 |
2022/10/26(水) 15:30:35.63ID:DM8ZU7Du
全てが媚薬を盛って全員が嘘をついている

これで全員の発言と矛盾がないと思う
0835デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:28:02.83ID:xzd5i3vP
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
は正しいと仮定しないとなんでもありありになっちゃうだろ
0836デフォルトの名無しさん
垢版 |
2022/10/26(水) 18:06:43.51ID:VWCwwszG
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」

コレウソついてるのは一匹“だけ”つて意味だよね?
“少なくとも一匹はウソついてる”
じゃないよね?
0838デフォルトの名無しさん
垢版 |
2022/10/26(水) 19:23:29.30ID:gD5qQ1ZG
>>836
> “少なくとも一匹はウソついてる”
だと、全員嘘つきでもいいからなんでもありになっちゃう気がする
0840デフォルトの名無しさん
垢版 |
2022/10/26(水) 21:23:18.21ID:OrdcPqRc
オーク達「」が真であることは、
この世界の神である出題者が保証してるわけだな?
0841デフォルトの名無しさん
垢版 |
2022/10/26(水) 21:38:57.12ID:Bjop1AC4
出題者が嘘をついていて、オークがそのような発言をしていない可能性もある
0845デフォルトの名無しさん
垢版 |
2022/10/29(土) 19:11:19.58ID:O3TXZpYa
お題
Kの倍数の桁の和
自然数nに対してf(n)をnの10進表示の各桁の和とします
(例 f(1024) = 1+2+4 = 7)
自然数kに対してg(k)を
g(k) = { f(n) | nはkの倍数である自然数 }
とします
入力kに対してg(k)を出力するコードを書いて下さい
0848デフォルトの名無しさん
垢版 |
2022/10/30(日) 00:28:15.63ID:BQOGiCuF
お題
プレーヤーの前に閉じた3つのドアがあります
1つのドアの後ろには景品の新車があります
2つのドアの後ろにははずれを意味するヤギがいます
プレーヤーは新車のドアを当てると新車がもらえます
プレーヤーが1つのドアを選択したあとに司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せます
ここでプレーヤーは「最初に選んだドアを残っている開けられていないドアに変更してもよい」と言われます
ここでプレーヤーはドアを変更すべきだろうか?

乱数を使ったシミュレーションで答えを求めてください
0850デフォルトの名無しさん
垢版 |
2022/10/30(日) 08:09:55.23ID:oF72FRjI
ドアを変更するかどうかのところはランダムにする必要無くない?
二択なので一方に決めていれば残りが逆側の確率
0851デフォルトの名無しさん
垢版 |
2022/10/30(日) 10:05:48.56ID:Rpnmj8SE
まぁ
交換戦略「必ず交換する」
非交換戦略「決して交換しない」
確率交換戦略「ある分布に従って確率的に交換するかしないか決める」
で答えが変わる事を確認せよだからな
ある意味最初2つの戦略も最後の戦略の特別な場合
0852デフォルトの名無しさん
垢版 |
2022/10/30(日) 11:47:05.86ID:0KuBg4yb
お題N x Nのルービックキューブのパターン数を求めよ
0853デフォルトの名無しさん
垢版 |
2022/10/30(日) 18:39:10.46ID:KHak5nKt
>>850
なるほど。
0854デフォルトの名無しさん
垢版 |
2022/10/30(日) 18:54:42.34ID:Sqe0pI7B
モンティ・ホール問題のシミュレートのように見えて実はちょっと違う
モンキーホール問題だったのだ
0856デフォルトの名無しさん
垢版 |
2022/10/31(月) 00:39:33.45ID:MKojko7I
お題 ジュールトムソン効果っぽいものをシミュレーションで再現せよ
0857デフォルトの名無しさん
垢版 |
2022/11/04(金) 07:13:30.92ID:jLlmakBU
お題:1~10までの合計を求めよ
*ただしライブラリ、ループ文を使わないこと
0859デフォルトの名無しさん
垢版 |
2022/11/04(金) 08:24:04.42ID:TDQ1gw2t
(1+10)*5
0862デフォルトの名無しさん
垢版 |
2022/11/04(金) 15:52:05.99ID:TBUnPbqZ
>>857
$ dc -e'1 10+5*p'
55
$
0863デフォルトの名無しさん
垢版 |
2022/11/04(金) 16:28:57.36ID:q0UsXtCi
整数とは書いてないな
三角数とか実数とか何か別のものを想定してるかもしれない
0864デフォルトの名無しさん
垢版 |
2022/11/04(金) 16:32:28.85ID:q0UsXtCi
高級言語なら大抵暗黙のうちにライブラリは使ってるだろうし内部的にループも使ってるかもしれない

ループの定義も問題になるかと
gotoは?再帰は?列挙は?...
0877デフォルトの名無しさん
垢版 |
2022/11/06(日) 03:33:15.03ID:V4pkDxVq
>>857
Kotlin

https://paiza.io/projects/uWXy93c98CoNzF0o2H_wgQ

ループ文は使わず再帰でなんとかした。

(1..10).sum() や (1..10).reduce { a, n -> a + n } でも結果は出るが sum() や reduce() がライブラリにある拡張関数なので没。
10 * 11 / 2 とか 55 を直接出すのはプログラム作る意味がほとんどないような感じがするので止めた。
0881デフォルトの名無しさん
垢版 |
2022/11/06(日) 09:08:00.03ID:aYMPlSSq
一垓にそうは言えないのでは
ループを使わないの意味が多くの数でもすぐ答えがでそうな処理を見たいのかもしれない
0883デフォルトの名無しさん
垢版 |
2022/11/06(日) 09:33:05.99ID:5UCgIOa9
和の公式を使うくらいなら55の方が良い
って話

なんで中途半端な最適化をするの?
0884デフォルトの名無しさん
垢版 |
2022/11/06(日) 09:38:06.42ID:gK09y9Q8
1^n + 2^n +・・・+(10^25)^n
n=10、 n=-17
の手段選ばすとかは?
25条はぎりふつうループでは困難かとおもえる数値を適当にいまおもいついた
0885デフォルトの名無しさん
垢版 |
2022/11/06(日) 10:54:00.31ID:Zb5xxfES
= 10+(9+1)+(8+2)+(7+3)+(4+6)+5
= 10+10+ 10+ 10+ 10+ 5
= 10 + (10 * ((10/2)-1))+5
= (10 * ((10/2)-1))+10+5
= x(0.5x-1)+1.5x
0888デフォルトの名無しさん
垢版 |
2022/11/06(日) 15:33:43.73ID:RIYDMAGE
1~10の合計
1から10までの合計
じゃなくて
1~10までの合計
っていうのも気になった
0889デフォルトの名無しさん
垢版 |
2022/11/06(日) 17:04:56.12ID:PNCv3I6p
1~10までの実数の合計って言ってる奴は有限の値に収束するとでも思っているか
0892デフォルトの名無しさん
垢版 |
2022/11/06(日) 18:37:14.41ID:PNCv3I6p
低レベルすぎて草
1以上10以下の実数全体の集合をAとすると
#A = ?_1 ゆえに Σ_{λ∈A}λ は有限の値を取らない
0894デフォルトの名無しさん
垢版 |
2022/11/06(日) 18:48:29.30ID:qhQ571Br
なんか足すと一見無限になりそうだけど
ある区間a<bの間にa<c<bとなるcが取れなくなることはありえないよね?
0895デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:07:23.07ID:9PA1hevU
>>889
和が存在しないとうならそれが答え
3を含むが3.5を含まないという説得力のある説明が出来るならよろしく
0903デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:21:59.86ID:aYMPlSSq
ぽまえら
餅付いて >>857 を嫁
0905デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:24:24.94ID:PNCv3I6p
>>904
暴言は結構なんで、数学的に反論してくれませんか?
まあ頭が悪くてできないんでしょうけど
0906デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:28:25.36ID:9PA1hevU
>>905
何に反論してほしいの?

多分視野が狭くて何を主張されてるのかわかってないと思うんで
一回落ち着いた方がいいぞ

その上で
君が主張を明確にして
それに対して反対意見があれば反論してあげる
0907デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:30:41.70ID:9PA1hevU
1以上10以下の実数の総和が存在しないことなんて
誰でもわかる
和が存在するなんて主張はしてないから勘違いしないように
0908デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:31:28.37ID:PNCv3I6p
>>906
>1~10までの実数の合計って言ってる奴は有限の値に収束するとでも思っているか
に対してお前は>>895みたいなクソ発言してるわけだがこのクソ発言の妥当性を説明して見ろよ
0909デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:35:38.89ID:9PA1hevU
和が存在しないというならそれが答え
の意味がわからなかったかな?

その次の文は和の存在とは関係ない
君への宿題
0910デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:37:43.37ID:PNCv3I6p
>>909
任意のRの開区間に対してその元の和が有限の値になる場合何てないんだから
「和が存在しないというならそれが答え」なんて発言は問題の本質を理解していないバカの発言だろ
人に宿題出す前に算数からやり直せよ
0911デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:40:06.40ID:eRXytuty
【悲報】アスペ君、今日も元気。。。
0912デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:46:26.35ID:Zb5xxfES
プログラミングのお題なんだから1+2+に決まってるだろ。
少数を含めた1から10までに考えられる数値を足すとかできるわけねえだろ。
0913デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:47:59.95ID:9PA1hevU
>>910
問題の本質というなら
解釈の多様性が本質

和の存在は解釈とは無関係
存在しないなら「存在しない」が答えとなるだけの話
0915デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:49:37.79ID:PNCv3I6p
>>913
お気持ちで数学を語るのやめてくれませんかね
はなはだ不愉快です
「任意のRの開区間に対してその元の和」に対して有限の値を取らないという以外にどんな有意味なモデルが取り得るんですかね
バカすぎて日本語の意味すら理解できてなさそうだけど
0916デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:49:56.13ID:9PA1hevU
決まってるといくら主張しても
お題に書いてないんだから
どう解釈されても出題者が悪い
0919デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:52:59.97ID:PNCv3I6p
>>917
実数の開区間の和が有限じゃないことにいちゃもん付けてきたのはオタクでしょ?
有限の値を取らない意外にどんな有意義な解釈が成り立つんですか?
きちんと説明しなさい
0922デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:55:05.02ID:PNCv3I6p
>>920
>和が存在しないとうならそれが答え
って和が存在する有意義なモデルがあるって言う前提で話してますよね?
もしそうじゃないならこれはどういう意図で行ったんですか?
ちなみに続く3.5云々の意味もよく分かってません
0923デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:56:03.75ID:aYMPlSSq
もうこりゃ発散とか収束とか言う前に就職の心配したほうがいいな
0925デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:59:09.36ID:PNCv3I6p
>>924
敗北宣言ですか
これにこりたら今後二度とお気持ちで数学を語るのはやめてください
研究者やエンジニアが迷惑するので
0927デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:06:58.14ID:9PA1hevU
おれの主張は>>863だから
もちろん本気で出題者がそう思っているという主張ではなくて
解釈の余地があるという問題提起
0928デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:07:53.80ID:Zb5xxfES
問題は出題者の意図を読み取ることが重要
1~10までの整数の和の事だろうなと考えるのが低レベルとは思えない。
常識で考えればそうなる

できればその高レベルのプログラムとやらを説明してほしいものだな。
0929デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:12:04.95ID:9PA1hevU
一応プログラム板なんだからさ
解釈の多様性を多少は意識しようよ
プログラミング言語だったら「動作未定義」

曖昧な仕様書で中国人に発注したら
一番都合の良い解釈をされてとんでもないソフトになるぞ
0930デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:17:19.25ID:Zb5xxfES
プログラムのお題なんだから、
プログラムで実現できないってのは答えにはならんよ。

国語の問題じゃねえんだから、
プログラムとして成立する答えを出せよ
0931デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:24:40.28ID:9PA1hevU
国語の問題じゃねえんだから
出題者の意図を好意的に汲み取る必要はないんだよ
0932デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:26:21.60ID:mzFwuoQr
>>930
だからちゃんと仕様出せやってことだろ
>>863は半分ネタだと思うけど、実数だと言うなら実数について「1~10までの合計」を定義しないとお題にならんよ
0933デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:32:00.92ID:9PA1hevU
>>932
私は出題者じゃないし実数だなんて主張もしてない

いろんな解釈があるならお題にならん
解釈の余地は可能な限り減らせ
0935デフォルトの名無しさん
垢版 |
2022/11/06(日) 20:59:57.69ID:Zb5xxfES
1から10までの整数の和では無い可能性があるから、
その場合はプログラムでは実現できないって言いたいだけだろ

整数の和として答えてるプログラムを低レベルってどういことやねん。
素直に受け取ればいいものを曲解して不可能に持って行ってるだけだろ
0936デフォルトの名無しさん
垢版 |
2022/11/06(日) 21:02:11.02ID:9PA1hevU
「整数の和として答えてるプログラムを低レベルってどういことやねん。」
だれがそんなことかいた?
0939デフォルトの名無しさん
垢版 |
2022/11/07(月) 06:42:16.97ID:C4s2+P7f
仕事では御免だが
解釈の余地を残すことが娯楽では大切だって良く分かる例
0940デフォルトの名無しさん
垢版 |
2022/11/07(月) 15:08:59.94ID:4okW5BTf
お題:1/1+1/2+...+1/nの合計を求め、分母と分子を整数で出力せよ。
*ただしライブラリを使わないこと
0944デフォルトの名無しさん
垢版 |
2022/11/07(月) 18:21:56.48ID:UfWjgfnM
1+・・・+1/n の小数点n桁目はいくらか
0948デフォルトの名無しさん
垢版 |
2022/11/07(月) 21:06:30.94ID:Fdh4LiCB
組み込み関数はライブラリじゃないと
ライブラリと呼ばない言語なら何でもありか
0951デフォルトの名無しさん
垢版 |
2022/11/07(月) 21:35:14.79ID:kmERiYaX
まあ今時組込とかでもなきゃintの乗算でライブラリ呼び出す環境もあまりないけどそもそも入出力はライブラリ任せだからねぇ
0956デフォルトの名無しさん
垢版 |
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
0957デフォルトの名無しさん
垢版 |
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
0958デフォルトの名無しさん
垢版 |
2022/11/09(水) 01:55:16.87ID:QvIAsso6
なぜ同じ書き込みが4つもある?
0960デフォルトの名無しさん
垢版 |
2022/11/09(水) 12:49:26.26ID:AHjhHUHj
お題
入力した文字列を以下の4種類に分けた文字列を作成する関数を作成してください
・アルファベット大文字
・アルファベット小文字
・数字
・それ以外の文字
0961デフォルトの名無しさん
垢版 |
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("")
0963デフォルトの名無しさん
垢版 |
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
0965デフォルトの名無しさん
垢版 |
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});
0966デフォルトの名無しさん
垢版 |
2022/11/10(木) 02:37:16.98ID:kjI8mJgQ
>>965
5倍じゃなくて3倍だったわ
perf.linkで測ったコード、
let cp = c.codePointAt();

let cp;
になってたわ寝ぼけてた
0969デフォルトの名無しさん
垢版 |
2022/11/10(木) 14:11:20.86ID:oQpocXYl
>>960
Kotlin

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

Unicodeで作った。サロゲートペアの文字もちゃんと扱える。
判別には Java の Character クラスのメソッドを利用している。
これだといわゆる全角の数字は数字扱いになるが漢数字は数字と分類してくれない。
ローマ数字はアルファベット大文字扱い。
日本語の「あ」とかもアルファベットとして扱われるが大文字でも小文字でもないのでそれ以外の文字に追加されるようにした。
コントロールコードは \uXXXX 形式になるようにした。
0970デフォルトの名無しさん
垢版 |
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
塩化銅()は水中で ⇄ ⁺ + ⁻ のように電離する。
0971デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:35:16.34ID:V5vZiHvW
>>944をやってみたらPythonで300くらいでオーバーフローになった
分子と分母をべつべつに計算してp/qだったとすると
int(10^n * p / q ) % 10 が求める答えのはずだが、この計算ができなかった
0972デフォルトの名無しさん
垢版 |
2022/11/10(木) 20:44:38.28ID:V5vZiHvW
ここで問題変更でp/qの小数点n桁目を求める問題にすればいいか
オーバーフローしないように×10ずつして整数部分は無視していけば整数演算の範囲内にできるか
忘れたがユークリッド互除法みたいな?
0973デフォルトの名無しさん
垢版 |
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,"")
0974デフォルトの名無しさん
垢版 |
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("")
0977デフォルトの名無しさん
垢版 |
2022/11/10(木) 21:45:52.91ID:KPTSzoDK
お題 小数点第n位を求めるプログラムを作成せよ
0981デフォルトの名無しさん
垢版 |
2022/11/11(金) 18:36:58.77ID:Jm4DMnci
>>978
入力された実数
0982デフォルトの名無しさん
垢版 |
2022/11/11(金) 20:10:51.65ID:+Uq9lyYZ
(x*10**n)%10
0983デフォルトの名無しさん
垢版 |
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%で出力
0984デフォルトの名無しさん
垢版 |
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
0985デフォルトの名無しさん
垢版 |
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
0987デフォルトの名無しさん
垢版 |
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
0988デフォルトの名無しさん
垢版 |
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
0993デフォルトの名無しさん
垢版 |
2022/11/15(火) 08:06:01.58ID:XL64sJsG
うめ
0995デフォルトの名無しさん
垢版 |
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
0997デフォルトの名無しさん
垢版 |
2022/11/17(木) 21:39:57.15ID:BbSHYj/y
うめ
0998デフォルトの名無しさん
垢版 |
2022/11/17(木) 21:40:03.49ID:BbSHYj/y
うめ
0999デフォルトの名無しさん
垢版 |
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秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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