プログラミングのお題スレ Part22
404デフォルトの名無しさん
2024/08/20(火) 15:28:18.45ID:YrWgN0+y お題:今日、または任意の日付から、もういくつ寝るとお正月かを求めよ。(昼寝は除く)
405デフォルトの名無しさん
2024/08/20(火) 18:03:45.73ID:UEEknM+z406デフォルトの名無しさん
2024/08/21(水) 11:05:18.96ID:kc5yLFga >>404
徹夜はどうしますか?
徹夜はどうしますか?
407 警備員[Lv.12]
2024/08/22(木) 08:01:35.77ID:dwyU9o+h >>404
bash のコマンドラインから expr コマンドと date コマンドを利用して次のようにして計算した。
実際に日数が経過後に1月1日になっているかの確認もした。
$ expr $( date -d '2024/12/31' +%j ) - $( date +%j ) + 1
132
$ date -d 'now +132 days'
2025年 1月 1日 水曜日 07:58:54 JST
$
bash のコマンドラインから expr コマンドと date コマンドを利用して次のようにして計算した。
実際に日数が経過後に1月1日になっているかの確認もした。
$ expr $( date -d '2024/12/31' +%j ) - $( date +%j ) + 1
132
$ date -d 'now +132 days'
2025年 1月 1日 水曜日 07:58:54 JST
$
408 警備員[Lv.12]
2024/08/22(木) 08:04:39.02ID:dwyU9o+h409デフォルトの名無しさん
2024/08/24(土) 01:28:41.99ID:Ou5o/VfJ ロケール設定なしとかジョークかよ
410デフォルトの名無しさん
2024/08/24(土) 07:25:49.23ID:/cWP8Umv こまけぇこたぁいいんだよ(AA略)
411デフォルトの名無しさん
2024/08/24(土) 23:36:40.04ID:/cWP8Umv てかこのお題で私、期間中にヨーロッパから帰国しますんでってな特殊ケースまで折り込めって方が無理に思えるけど、ロケール設定した模範解答をどぞ、
412デフォルトの名無しさん
2024/08/24(土) 23:58:49.15ID:D7M8BxWI せっかくだから、旧正月も考慮して
413デフォルトの名無しさん
2024/09/01(日) 04:58:12.84ID:sYmH1KkQ お題:複数の文字列が格納されている配列と配列の添字がある。標準入力からnextが入力されたら文字列を表示し添字を進め、prevが入力されたら文字列を表示して添字を戻す。添字が始点と終点に達したら始点は終点に、終点は始点に移動させる。動作は例に合うように実装せよ。
v = ["aaa","bbb","ccc"]
next
aaa
next
bbb
prev
aaa
next
bbb
next
ccc
next
aaa
v = ["aaa","bbb","ccc"]
next
aaa
next
bbb
prev
aaa
next
bbb
next
ccc
next
aaa
414デフォルトの名無しさん
2024/09/01(日) 08:19:39.59ID:MmIh9kGJ415デフォルトの名無しさん
2024/09/01(日) 11:51:46.92ID:Zfu0bsG/ >>413
REM nextprev.bat
ruby -x "%~f0"
exit
#~
#!ruby
#encoding: utf-8
i=0;v=["aaa","bbb","ccc"]
while 1
puts v[i]
print "input next or prev [n/p]> "
a=$stdin.gets.chomp
if ""==a
exit
elsif /^n/=~a
i=i+1
elsif /^p/=~a
i=i-1
end
i=(i+3)%3
end
REM nextprev.bat
ruby -x "%~f0"
exit
#~
#!ruby
#encoding: utf-8
i=0;v=["aaa","bbb","ccc"]
while 1
puts v[i]
print "input next or prev [n/p]> "
a=$stdin.gets.chomp
if ""==a
exit
elsif /^n/=~a
i=i+1
elsif /^p/=~a
i=i-1
end
i=(i+3)%3
end
416デフォルトの名無しさん
2024/09/03(火) 07:13:35.79ID:1bP400Ev お題
引数aから引数bまでの数列を返す関数がある。この関数を数列にゾロ目が含まれていた場合に空の数列を返すように実装せよ
引数aから引数bまでの数列を返す関数がある。この関数を数列にゾロ目が含まれていた場合に空の数列を返すように実装せよ
417デフォルトの名無しさん
2024/09/03(火) 07:56:47.18ID:Jxau6mSM418デフォルトの名無しさん
2024/09/03(火) 09:22:31.13ID:HQsZJT0t419デフォルトの名無しさん
2024/09/03(火) 10:00:07.45ID:VHciJKZC 417ではないが,clispかsbclをインストールすればいいよ.Windowsでもできるし,WSLならさらに簡単にできる
420デフォルトの名無しさん
2024/09/03(火) 10:17:03.41ID:HQsZJT0t421デフォルトの名無しさん
2024/09/03(火) 13:27:22.48ID:Jxau6mSM >>418
Windowsは不断使いしていないんで開発環境とかemacsとかはわからないけど、動かすだけなら
https://www.sbcl.org/platform-table.html からWindows版のSBCLインストーラーを落としてインストール
コマンドプロンプトなどのコマンド行で
sbcl --script ファイル名 とすると「ファイル名」のファイルをスクリプトとして実行します
--script を付けない場合REPLが起動します(Pythonでいうところの対話モード)
これの終了は (quit) と入力してEnterキー
Windowsは不断使いしていないんで開発環境とかemacsとかはわからないけど、動かすだけなら
https://www.sbcl.org/platform-table.html からWindows版のSBCLインストーラーを落としてインストール
コマンドプロンプトなどのコマンド行で
sbcl --script ファイル名 とすると「ファイル名」のファイルをスクリプトとして実行します
--script を付けない場合REPLが起動します(Pythonでいうところの対話モード)
これの終了は (quit) と入力してEnterキー
422デフォルトの名無しさん
2024/09/03(火) 13:38:16.60ID:Jxau6mSM ちょっと試すだけならウェブサービスを使う手も
Common Lispを動かせるオンラインコンパイラーサイト
https://rextester.com/l/common_lisp_online_compiler
https://www.jdoodle.com/execute-clisp-online
https://wandbox.org/
これらはideoneとは異なり "Share" とか "Save" とかをクリックしない限り保存・公開されない(はず)
Common Lispを動かせるオンラインコンパイラーサイト
https://rextester.com/l/common_lisp_online_compiler
https://www.jdoodle.com/execute-clisp-online
https://wandbox.org/
これらはideoneとは異なり "Share" とか "Save" とかをクリックしない限り保存・公開されない(はず)
423デフォルトの名無しさん
2024/09/03(火) 22:13:24.20ID:HQsZJT0t レス頂いた方、ありがとうございます
とりあえず>>422辺りで試してみます
とりあえず>>422辺りで試してみます
424デフォルトの名無しさん
2024/09/04(水) 03:34:25.27ID:k+9kMn3u REM zorome.bat
ruby -x "%~f0"
exit
#~
#!ruby
while 1
print "input a > "
a=$stdin.gets.chomp
exit if a==""
a=a.to_i
print "input b > "
b=$stdin.gets.to_i
ar=(a..b).to_a
z=0
ar.each{|e|
n=e.to_s.gsub(/^-/,"")
m=n.split("").uniq
if n.size>1 && m.size==1
z=1
break
end
}
ar=[] if z==1
p ar
end
__END__
a=0;b=10 => [0,1,2,3,4,5,6,7,8,9,10]
a=0;b=11 => []
ruby -x "%~f0"
exit
#~
#!ruby
while 1
print "input a > "
a=$stdin.gets.chomp
exit if a==""
a=a.to_i
print "input b > "
b=$stdin.gets.to_i
ar=(a..b).to_a
z=0
ar.each{|e|
n=e.to_s.gsub(/^-/,"")
m=n.split("").uniq
if n.size>1 && m.size==1
z=1
break
end
}
ar=[] if z==1
p ar
end
__END__
a=0;b=10 => [0,1,2,3,4,5,6,7,8,9,10]
a=0;b=11 => []
425デフォルトの名無しさん
2024/09/04(水) 06:34:37.52ID:FQ5fjJ2m >>416
fn is_zorome(n: i32) -> bool {
let s = n.abs().to_string();
let b = s.as_bytes();
if b.len() > 1 {
b[1..].iter().all(|&d| d == b[0])
} else {
false
}
}
fn odai(a: i32, b: i32) -> Vec<i32> {
if (a..=b).any(|n| is_zorome(n)) {
vec![]
} else {
(a..=b).collect()
}
}
fn main() {
assert_eq!(odai(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
assert_eq!(odai(1, 11), []);
}
fn is_zorome(n: i32) -> bool {
let s = n.abs().to_string();
let b = s.as_bytes();
if b.len() > 1 {
b[1..].iter().all(|&d| d == b[0])
} else {
false
}
}
fn odai(a: i32, b: i32) -> Vec<i32> {
if (a..=b).any(|n| is_zorome(n)) {
vec![]
} else {
(a..=b).collect()
}
}
fn main() {
assert_eq!(odai(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
assert_eq!(odai(1, 11), []);
}
426 警備員[Lv.7]
2024/09/29(日) 14:12:38.24ID:Sdg7KlJR >>416
Kotlin
(URL投稿禁止になってるようなので先頭の https:// は抜きで)。
paiza.io/projects/nPK7U1uDtt4b7O2saECP0A
[入力]タブの方で開始、終了の値を入れている。とりあえず 10 40 を入れてある。
一桁の数を指定した場合は全てゾロ目扱いになるので出力は空のリストになる。
Kotlin
(URL投稿禁止になってるようなので先頭の https:// は抜きで)。
paiza.io/projects/nPK7U1uDtt4b7O2saECP0A
[入力]タブの方で開始、終了の値を入れている。とりあえず 10 40 を入れてある。
一桁の数を指定した場合は全てゾロ目扱いになるので出力は空のリストになる。
427デフォルトの名無しさん
2024/10/08(火) 17:17:22.09ID:CS1PHEoT お題:文字列を中央寄せする関数を作れ。
関数は文字列、全体の横幅(整数)、余白を埋める文字、を引数に取る。横幅分の文字列を引数の文字で作成し、その中央に引数の文字列を埋め込み戻り値として返せ。
関数は文字列、全体の横幅(整数)、余白を埋める文字、を引数に取る。横幅分の文字列を引数の文字で作成し、その中央に引数の文字列を埋め込み戻り値として返せ。
428デフォルトの名無しさん
2024/10/08(火) 19:52:28.65ID:Rq2an05y py
text.center
text.center
429 警備員[Lv.12]
2024/10/09(水) 00:07:23.87ID:O5zCFPJO >>427
文字幅についてはどう考えれば良い?
エンコーディングが UTF-8 や UTF-16 だとバイト数や要素数が画面の表示幅と一致しないわけだが。
一致するような Shift-JIS だったとしても端末のフォント設定次第で表示幅が変わる。
文字幅についてはどう考えれば良い?
エンコーディングが UTF-8 や UTF-16 だとバイト数や要素数が画面の表示幅と一致しないわけだが。
一致するような Shift-JIS だったとしても端末のフォント設定次第で表示幅が変わる。
430デフォルトの名無しさん
2024/10/09(水) 00:38:16.24ID:j8RLE5Fj EUCにも半角2バイト文字なんてあったりする
431デフォルトの名無しさん
2024/10/09(水) 00:56:06.70ID:LtADXZKH asciiの前提では
全角判定関数は切り分けるべきだし
全角判定関数は切り分けるべきだし
432デフォルトの名無しさん
2024/10/09(水) 01:18:55.72ID:4B3K5XUV #ドラクエ3が超好きだったので、お題にしてみる。ただしロト3のファミコン版のドラクエな!w
"こちらの職業は勇者、戦士、空手家、僧侶、柔道家の5人がかりw
勇者から柔道家までの5人の攻撃回数が異なります。"まずは変数と確率の問題。
勇者=you戦士=sen,空手家=kara,僧侶=sou
まず勇者は1~2回攻撃、戦士は1~3回攻撃、空手は2~3回攻撃、柔道は足払いで相手を20%で麻痺させることができる。(1ターン何もできない)10%では超麻痺。(2ターン何も敵は動かない)
5%でクリティカルヒットの足払いで3ターン敵は何もできない。
柔道は敵に攻撃を加えられない分、足払いで相手を痙攣させる。
(勇者の1回分の攻撃は100〜200、20%の確率でクリティカルヒットの攻撃になることがある。
(戦士の攻撃は200〜300、20%の確率で攻撃がクリティカルヒット1回になることがある。
(空手家)空手家の攻撃は350〜500、ただし20%の確率で攻撃がクリティカルヒットとなるときがある。youはぞろ目(111とか222とか999まで)の場合はロトの剣を取得する。
攻撃回数無限で全てクリティカルヒットになります。
クリティカルヒットは攻撃力X2です。さてプログラムをやっていくか。"
*ただし、ロトの剣は勇者しか使えない。
”まずギルガメッシュっていう名前のenemy
ラスボスの名前はenemyとする。ボスのHPは5万。
ボスは基本的に何もしません、できません。これやるとさすがに面倒なのでw
基本的にボスは攻撃しません。(面倒だからw)
一方的になかまあつめてボコすw”
*ロトの剣で攻撃したら攻撃力が1.5倍あがります。*
**癒しの穂。食べたら防御力と賢さがあがります**
ロトの剣の出現条件は3並びで一つ食べることができます。
例えば111攻撃とか222攻撃とか333攻撃とか〜999まで。
次の発言からコードを書いていく。
ニーズあるか?
"こちらの職業は勇者、戦士、空手家、僧侶、柔道家の5人がかりw
勇者から柔道家までの5人の攻撃回数が異なります。"まずは変数と確率の問題。
勇者=you戦士=sen,空手家=kara,僧侶=sou
まず勇者は1~2回攻撃、戦士は1~3回攻撃、空手は2~3回攻撃、柔道は足払いで相手を20%で麻痺させることができる。(1ターン何もできない)10%では超麻痺。(2ターン何も敵は動かない)
5%でクリティカルヒットの足払いで3ターン敵は何もできない。
柔道は敵に攻撃を加えられない分、足払いで相手を痙攣させる。
(勇者の1回分の攻撃は100〜200、20%の確率でクリティカルヒットの攻撃になることがある。
(戦士の攻撃は200〜300、20%の確率で攻撃がクリティカルヒット1回になることがある。
(空手家)空手家の攻撃は350〜500、ただし20%の確率で攻撃がクリティカルヒットとなるときがある。youはぞろ目(111とか222とか999まで)の場合はロトの剣を取得する。
攻撃回数無限で全てクリティカルヒットになります。
クリティカルヒットは攻撃力X2です。さてプログラムをやっていくか。"
*ただし、ロトの剣は勇者しか使えない。
”まずギルガメッシュっていう名前のenemy
ラスボスの名前はenemyとする。ボスのHPは5万。
ボスは基本的に何もしません、できません。これやるとさすがに面倒なのでw
基本的にボスは攻撃しません。(面倒だからw)
一方的になかまあつめてボコすw”
*ロトの剣で攻撃したら攻撃力が1.5倍あがります。*
**癒しの穂。食べたら防御力と賢さがあがります**
ロトの剣の出現条件は3並びで一つ食べることができます。
例えば111攻撃とか222攻撃とか333攻撃とか〜999まで。
次の発言からコードを書いていく。
ニーズあるか?
433デフォルトの名無しさん
2024/10/09(水) 01:22:59.53ID:YvVjSPhZ プログラミングする以前に読むのが面倒くさい
434デフォルトの名無しさん
2024/10/09(水) 01:43:57.73ID:4B3K5XUV しまった。初期化してなかったなw変数のところ。
あとsouの回復もホイミ、ベホイミ、ベホマラーの3種類だけ。
その3種類がぞろ目の時(111,222など)
そしたらベホマズンを使える。ほぼ運ゲーですw
人修羅みたいに取り巻きがいます。それはバラモスエビルと神龍です。
ある一定時期を過ぎると取り巻きが一斉にHPを連続してあげまくるので
取り巻き先に倒さないと厳しいです。取り巻き=tori種類1の取り巻き=tori0
種類2の取り巻き=tori1 5人だとなかなか倒せないから6人目の魔法剣士=maken
だれか
これをいれよう。
さてif文を完成させよう!if zoma =1
print("ゾーマが現れた”)
import random
random.random()x = random.uniform(0.1,0.9)
print(x)
if x >200 :
print( 'enemyに' +200のダメージを与えた)
elif x > 0.5 :
print( 'enemyに100+のダメージを与えた' )
elif x > 0.2 :
print( '相手が躱した' )
else :
print( "まだゾーマは死んでません")
つかれたーw
もっと簡単なやつにしまーすw
あとsouの回復もホイミ、ベホイミ、ベホマラーの3種類だけ。
その3種類がぞろ目の時(111,222など)
そしたらベホマズンを使える。ほぼ運ゲーですw
人修羅みたいに取り巻きがいます。それはバラモスエビルと神龍です。
ある一定時期を過ぎると取り巻きが一斉にHPを連続してあげまくるので
取り巻き先に倒さないと厳しいです。取り巻き=tori種類1の取り巻き=tori0
種類2の取り巻き=tori1 5人だとなかなか倒せないから6人目の魔法剣士=maken
だれか
これをいれよう。
さてif文を完成させよう!if zoma =1
print("ゾーマが現れた”)
import random
random.random()x = random.uniform(0.1,0.9)
print(x)
if x >200 :
print( 'enemyに' +200のダメージを与えた)
elif x > 0.5 :
print( 'enemyに100+のダメージを与えた' )
elif x > 0.2 :
print( '相手が躱した' )
else :
print( "まだゾーマは死んでません")
つかれたーw
もっと簡単なやつにしまーすw
435デフォルトの名無しさん
2024/10/09(水) 01:45:35.37ID:YvVjSPhZ 頑張って読んだけどこのままでは多分スレチ、ずっと条件を簡単にして出題し直してみる。
お題
勇者(HP1000)対魔王(HP5000)、先鋒勇者、サイコロ(目は1から6)を振って出た目だけ相手にダメージを与えられ、交互に攻撃しHP0となったら負け。魔王のサイコロは1個だけど勇者のサイコロはN個(N=1~10)の時の勇者の勝率を求めよ。
お題
勇者(HP1000)対魔王(HP5000)、先鋒勇者、サイコロ(目は1から6)を振って出た目だけ相手にダメージを与えられ、交互に攻撃しHP0となったら負け。魔王のサイコロは1個だけど勇者のサイコロはN個(N=1~10)の時の勇者の勝率を求めよ。
436デフォルトの名無しさん
2024/10/09(水) 02:10:34.29ID:4B3K5XUV # RPGの攻撃状況を再現
# モンスターと戦っている。
# 1から10のサイコロをふって、
# 6未満の場合、サイコロの目だけダメージを与えたと表示。
# 6以上の場合、クリティカルヒットとして、100のダメージを与えたと表示。
# 0の場合、防御されたとして、0ダメージを表示。
import random
hit = random.randint(0,10)
if 1 <= hit < 6:
print("スライムに、" + str(hit) + "のダメージを与えた!")
elif hit >= 6:
print("クリティカルヒットダメージ100を与えた")
else:
print("ダメージは、" + str(hit) + "防御された")
#楽しすぎだなwこれはw
# モンスターと戦っている。
# 1から10のサイコロをふって、
# 6未満の場合、サイコロの目だけダメージを与えたと表示。
# 6以上の場合、クリティカルヒットとして、100のダメージを与えたと表示。
# 0の場合、防御されたとして、0ダメージを表示。
import random
hit = random.randint(0,10)
if 1 <= hit < 6:
print("スライムに、" + str(hit) + "のダメージを与えた!")
elif hit >= 6:
print("クリティカルヒットダメージ100を与えた")
else:
print("ダメージは、" + str(hit) + "防御された")
#楽しすぎだなwこれはw
437デフォルトの名無しさん
2024/10/09(水) 18:59:48.61ID:Vd16zyId >>429
asciiで。
asciiで。
438デフォルトの名無しさん
2024/10/11(金) 05:53:27.29ID:EzY86rdr お題:文字列の中で1つ以上連続している空白をすべて空白4つに置換せよ。ただし正規表現は使ってはならない。
例:
"abc def ghi" -> "abc def ghi"
例:
"abc def ghi" -> "abc def ghi"
439438
2024/10/11(金) 05:54:39.00ID:EzY86rdr 5chは空白を1つに置換するらしく例は出せない。脳内保管せよ。
440デフォルトの名無しさん
2024/10/11(金) 20:53:22.06ID:BlO5cFoG441デフォルトの名無しさん
2024/10/11(金) 20:58:31.10ID:BlO5cFoG442デフォルトの名無しさん
2024/10/11(金) 22:15:53.82ID:H5F5jhxE443デフォルトの名無しさん
2024/10/12(土) 01:34:10.91ID:OB4ycmPb >>435
こういう場合の確率の計算はよく分からなかったので実際にそれぞれ一万回ずつ戦わせてみた。
サイコロ1個で100000戦0勝
サイコロ2個で100000戦0勝
サイコロ3個で100000戦0勝
サイコロ4個で100000戦0勝
サイコロ5個で100000戦47171勝
サイコロ6個で100000戦100000勝
サイコロ7個で100000戦100000勝
サイコロ8個で100000戦100000勝
サイコロ9個で100000戦100000勝
サイコロ10個で100000戦100000勝
こういう場合の確率の計算はよく分からなかったので実際にそれぞれ一万回ずつ戦わせてみた。
サイコロ1個で100000戦0勝
サイコロ2個で100000戦0勝
サイコロ3個で100000戦0勝
サイコロ4個で100000戦0勝
サイコロ5個で100000戦47171勝
サイコロ6個で100000戦100000勝
サイコロ7個で100000戦100000勝
サイコロ8個で100000戦100000勝
サイコロ9個で100000戦100000勝
サイコロ10個で100000戦100000勝
444デフォルトの名無しさん
2024/10/12(土) 01:39:02.69ID:OB4ycmPb >>443
#!ruby
#encoding: utf-8
$stdout=open("kekka.txt","w")
i=100000 #対戦回数
k=0 #勇者の勝ち
n=1 #勇者のサイコロの数
hpm=5000 #魔王のHP
hpy=1000 #勇者のHP
#!ruby
#encoding: utf-8
$stdout=open("kekka.txt","w")
i=100000 #対戦回数
k=0 #勇者の勝ち
n=1 #勇者のサイコロの数
hpm=5000 #魔王のHP
hpy=1000 #勇者のHP
445デフォルトの名無しさん
2024/10/12(土) 01:39:40.49ID:OB4ycmPb >>444
while n<=10
j,t=0,0
while j<i
hpy-=rand(1..6)
if hpy<=0
j+=1
t,hpy,hpm=0,1000,5000
next
end
m=0
while m<n
hpm-=rand(1..6)
m+=1
end
if hpm<=0
k+=1
j+=1
t,hpy,hpm=0,1000,5000
next
end
t+=1
end
puts "サイコロ#{n}個で#{i}戦#{k}勝"
k,hpy,hpm=0,1000,5000
n+=1
end
while n<=10
j,t=0,0
while j<i
hpy-=rand(1..6)
if hpy<=0
j+=1
t,hpy,hpm=0,1000,5000
next
end
m=0
while m<n
hpm-=rand(1..6)
m+=1
end
if hpm<=0
k+=1
j+=1
t,hpy,hpm=0,1000,5000
next
end
t+=1
end
puts "サイコロ#{n}個で#{i}戦#{k}勝"
k,hpy,hpm=0,1000,5000
n+=1
end
446 警備員[Lv.12]
2024/11/05(火) 05:27:21.14ID:srt1vo+S >>427
Kotlin
スペースが何個なのか分り易くするために '*' をスペースの代わりに入れて呼び出している。
https://paiza.io/projects/xSP0nP203HXTwqyxlQD0Gg
Kotlin
スペースが何個なのか分り易くするために '*' をスペースの代わりに入れて呼び出している。
https://paiza.io/projects/xSP0nP203HXTwqyxlQD0Gg
447デフォルトの名無しさん
2024/11/13(水) 22:01:15.62ID:nRkxNwtG >>435
R
f=\(N){
u=1000
m=5000
while(u>0 & m>0){
m=m-sum(sample(6,N,replace=TRUE))
u=u-sample(6,1)
}
u>m
}
sim=\(N) mean(replicate(1e3,f(N)))
p=sapply(1:10,sim)
plot(p)
data.frame(N=1:10,p=p)
N p
1 1 0.000
2 2 0.000
3 3 0.000
4 4 0.000
5 5 0.498
6 6 1.000
7 7 1.000
8 8 1.000
9 9 1.000
10 10 1.000
R
f=\(N){
u=1000
m=5000
while(u>0 & m>0){
m=m-sum(sample(6,N,replace=TRUE))
u=u-sample(6,1)
}
u>m
}
sim=\(N) mean(replicate(1e3,f(N)))
p=sapply(1:10,sim)
plot(p)
data.frame(N=1:10,p=p)
N p
1 1 0.000
2 2 0.000
3 3 0.000
4 4 0.000
5 5 0.498
6 6 1.000
7 7 1.000
8 8 1.000
9 9 1.000
10 10 1.000
448デフォルトの名無しさん
2024/11/13(水) 22:22:31.42ID:nRkxNwtG >>435
Wolfram
f[N_] :=(
u=1000;
m=5000;
Until[u<=0 || m<=0, m-=Total@RandomChoice[Range[6],N];u-=Total@RandomChoice[Range[6],1]];
Boole[u >= m]
)
Table[Mean@Table[f[x],10^3],{x,1,10}] // N
{0., 0., 0., 0., 0.511, 1., 1., 1., 1., 1.}
Wolfram
f[N_] :=(
u=1000;
m=5000;
Until[u<=0 || m<=0, m-=Total@RandomChoice[Range[6],N];u-=Total@RandomChoice[Range[6],1]];
Boole[u >= m]
)
Table[Mean@Table[f[x],10^3],{x,1,10}] // N
{0., 0., 0., 0., 0.511, 1., 1., 1., 1., 1.}
449デフォルトの名無しさん
2024/12/31(火) 22:33:49.84ID:5KitXLte ベクターにあるこれを解いてくれ
昔2ch、5chスレでやってたができず
いまだと4x4はパワーで行けるとおもうが
4x4盤タイルゲーム for Windows
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」
昔2ch、5chスレでやってたができず
いまだと4x4はパワーで行けるとおもうが
4x4盤タイルゲーム for Windows
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」
450デフォルトの名無しさん
2025/01/01(水) 12:58:01.50ID:emEmRiID 他力本願か?
451デフォルトの名無しさん
2025/01/01(水) 13:30:44.19ID:WMbw73Fu 出題の仕方でプログラミング能力の無さがわかる
452デフォルトの名無しさん
2025/01/01(水) 13:32:50.17ID:ZpviU2f/453デフォルトの名無しさん
2025/01/01(水) 13:54:47.38ID:ZpviU2f/454デフォルトの名無しさん
2025/01/01(水) 15:04:31.04ID:ZpviU2f/455デフォルトの名無しさん
2025/01/01(水) 18:14:11.44ID:X9RQ0R0S456デフォルトの名無しさん
2025/01/01(水) 19:18:52.94ID:ZpviU2f/457デフォルトの名無しさん
2025/01/01(水) 19:35:45.17ID:ZpviU2f/458デフォルトの名無しさん
2025/01/01(水) 20:12:46.32ID:ZpviU2f/459デフォルトの名無しさん
2025/01/01(水) 20:32:30.47ID:ZpviU2f/460 警備員[Lv.16]
2025/01/02(木) 03:06:13.48ID:PSAM74+n461 警備員[Lv.16]
2025/01/02(木) 03:15:13.97ID:PSAM74+n462デフォルトの名無しさん
2025/01/02(木) 10:05:16.72ID:gED46q9T >>461
最善手だったら先手の勝ちかどうか
最善手だったら先手の勝ちかどうか
463デフォルトの名無しさん
2025/01/02(木) 16:25:40.35ID:H7SLSd6p464デフォルトの名無しさん
2025/01/03(金) 13:22:57.82ID:dEYOS8Dq お題
AのあとbノAと同じ数だけBが続く言語エビがあるとします
文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください
→ true
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB→ true
AのあとbノAと同じ数だけBが続く言語エビがあるとします
文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください
→ true
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB→ true
465デフォルトの名無しさん
2025/01/03(金) 13:25:00.11ID:dEYOS8Dq466デフォルトの名無しさん
2025/01/03(金) 15:30:14.42ID:aGLRGnDr467デフォルトの名無しさん
2025/01/03(金) 15:34:16.34ID:aGLRGnDr468デフォルトの名無しさん
2025/01/03(金) 17:52:02.97ID:aGLRGnDr >>464 lisp (chatgptに教えてもらった)
https://ideone.com/UYK3Qu
https://chatgpt.com/share/67778c2d-647c-8011-96dd-954a8f0fba92
https://ideone.com/UYK3Qu
https://chatgpt.com/share/67778c2d-647c-8011-96dd-954a8f0fba92
469デフォルトの名無しさん
2025/01/03(金) 20:07:57.67ID:yesC/P5F >>464
fn is_ab_lang(input: &str) -> bool {
match input
.chars()
.fold(Some(0), |state, char| match (state, char) {
(Some(count), 'A') => Some(count + 1),
(Some(count), 'B') if count > 0 => Some(count - 1),
_ => None,
}) {
Some(0) => true,
_ => false,
}
}
fn main() {
for s in ["", "AB", "AABB", "ABAABBAAABBB"] {
assert!(is_ab_lang(s)); // true
}
for s in ["A", "B", "BA", "ABB", "AAB", "ABBA"] {
assert!(!is_ab_lang(s)); // false
}
}
fn is_ab_lang(input: &str) -> bool {
match input
.chars()
.fold(Some(0), |state, char| match (state, char) {
(Some(count), 'A') => Some(count + 1),
(Some(count), 'B') if count > 0 => Some(count - 1),
_ => None,
}) {
Some(0) => true,
_ => false,
}
}
fn main() {
for s in ["", "AB", "AABB", "ABAABBAAABBB"] {
assert!(is_ab_lang(s)); // true
}
for s in ["A", "B", "BA", "ABB", "AAB", "ABBA"] {
assert!(!is_ab_lang(s)); // false
}
}
470デフォルトの名無しさん
2025/01/03(金) 23:45:21.31ID:AD9nWeeV >>464 c
https://ideone.com/KDcKNc
#include <stdio.h>
#include <string.h>
int isablang(const char *s) {
size_t a = strspn(s, "A"), b = strspn(s + a, "B");
return !*s || 0 < a && 0 < b && a == b && isablang(s + a + b);
}
void g(const char *s) {
printf("%s\t%s\n", isablang(s) ? "true" : "false", s);
}
int main() {
g("A"), g("B"), g("C"), g("BA"), g("CA"), g("ABB"), g("AAB"), g("AABABB"), g("ABC"), g("CAB"), g("ABCAB");
g(""), g("AB"), g("ABAB"), g("AABB");
return 0;
}
https://ideone.com/KDcKNc
#include <stdio.h>
#include <string.h>
int isablang(const char *s) {
size_t a = strspn(s, "A"), b = strspn(s + a, "B");
return !*s || 0 < a && 0 < b && a == b && isablang(s + a + b);
}
void g(const char *s) {
printf("%s\t%s\n", isablang(s) ? "true" : "false", s);
}
int main() {
g("A"), g("B"), g("C"), g("BA"), g("CA"), g("ABB"), g("AAB"), g("AABABB"), g("ABC"), g("CAB"), g("ABCAB");
g(""), g("AB"), g("ABAB"), g("AABB");
return 0;
}
471デフォルトの名無しさん
2025/01/04(土) 14:03:19.07ID:uiECOsgP >>468
ChatGPTロジックだとAABABBが受理されちゃう
ChatGPTロジックだとAABABBが受理されちゃう
472468
2025/01/04(土) 15:43:19.87ID:RKGS1C18 あら
ちょっとだけ修正すれば…って、無理か
ちょっとだけ修正すれば…って、無理か
473デフォルトの名無しさん
2025/01/04(土) 16:26:18.49ID:kbkaPDs8 >>464 c
https://ideone.com/x7a81M
・strspn使わない
・再帰しない
#include <stdio.h>
int isablang(const char *s) {
const char *t, *u;
for (; *s; s = u) {
if (*s != 'A') return 0; else for (t = s; *t == 'A'; t++);
if (*t != 'B') return 0; else for (u = t; *u == 'B'; u++);
if (t - s != u - t) return 0;
}
return 1;
}
https://ideone.com/x7a81M
・strspn使わない
・再帰しない
#include <stdio.h>
int isablang(const char *s) {
const char *t, *u;
for (; *s; s = u) {
if (*s != 'A') return 0; else for (t = s; *t == 'A'; t++);
if (*t != 'B') return 0; else for (u = t; *u == 'B'; u++);
if (t - s != u - t) return 0;
}
return 1;
}
474デフォルトの名無しさん
2025/01/04(土) 21:19:41.74ID:uiECOsgP お題
貨幣・銀行券を次の文字列で表すとします
(1)
(5)
(10)
(50)
(100)
(500)
[1000]
[5000]
[10000]
貨幣・銀行券がランダムに次のような文字列で与えられます
(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]
与えられた貨幣・銀行券を分類して貨幣・銀行券の価値が高い順に次のように出力するプログラムを作成してください
[10000]
[5000]
[1000][1000][1000][1000]
(500)
(100)(100)(100)
(50)
(10)(10)
(5)
(1)
貨幣・銀行券を次の文字列で表すとします
(1)
(5)
(10)
(50)
(100)
(500)
[1000]
[5000]
[10000]
貨幣・銀行券がランダムに次のような文字列で与えられます
(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]
与えられた貨幣・銀行券を分類して貨幣・銀行券の価値が高い順に次のように出力するプログラムを作成してください
[10000]
[5000]
[1000][1000][1000][1000]
(500)
(100)(100)(100)
(50)
(10)(10)
(5)
(1)
475デフォルトの名無しさん
2025/01/04(土) 22:52:21.99ID:frbzLXtQ476デフォルトの名無しさん
2025/01/05(日) 03:39:43.83ID:/228f09V477デフォルトの名無しさん
2025/01/05(日) 21:35:39.46ID:6Z+55hA8478 警備員[Lv.18]
2025/01/12(日) 04:14:11.28ID:zWON4EbF479 警備員[Lv.18]
2025/01/12(日) 04:47:49.98ID:zWON4EbF480デフォルトの名無しさん
2025/01/12(日) 17:40:12.54ID:Mt0OVaIB 4*4タイルゲームをAIに命令させてやらせているが
それっぽいのを出力はするが正しい勝利判定ができていない
それっぽいのを出力はするが正しい勝利判定ができていない
481デフォルトの名無しさん
2025/01/13(月) 13:03:01.90ID:mFwJihvQ482デフォルトの名無しさん
2025/01/13(月) 20:43:35.02ID:zlmvetys4839
2025/01/20(月) 01:11:38.35ID:zWVP8H/r >>474 Perl5
$s = '(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]';
$h{$_} .= $_ for $s =~ /\(\d+\)|\[\d+\]/g;
use List::Util 'sum';
$v{$h{$_}} = sum($h{$_} =~ /\d+/g) for keys %h;
print "$_\n" for sort{$v{$b} <=> $v{$a}} keys %v;
実行結果
~ $ perl 22_474_value.pl
[10000]
[5000]
[1000][1000][1000][1000]
(500)
(100)(100)(100)
(50)
(10)(10)
(5)
(1)
$s = '(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]';
$h{$_} .= $_ for $s =~ /\(\d+\)|\[\d+\]/g;
use List::Util 'sum';
$v{$h{$_}} = sum($h{$_} =~ /\d+/g) for keys %h;
print "$_\n" for sort{$v{$b} <=> $v{$a}} keys %v;
実行結果
~ $ perl 22_474_value.pl
[10000]
[5000]
[1000][1000][1000][1000]
(500)
(100)(100)(100)
(50)
(10)(10)
(5)
(1)
4849
2025/01/21(火) 02:09:25.80ID:Kvjf8jsk485デフォルトの名無しさん
2025/01/22(水) 21:35:12.82ID:JtEnwxKE お題
文字列と長さを入力として受け取り
デカルト積のリストを出力してください
入力:ABC 1
出力:[A, B, C]
入力:ABC 2
出力:[AA, AB, AC, BA, BB, BC, CA, CB, CC]
入力:ABC 3
出力:[AAA, AAB, AAC, ABA, ABB, ABC, ACA, ACB, ACC, BAA, BAB, BAC, BBA, BBB, BBC, BCA, BCB, BCC, CAA, CAB, CAC, CBA, CBB, CBC, CCA, CCB, CCC]
文字列と長さを入力として受け取り
デカルト積のリストを出力してください
入力:ABC 1
出力:[A, B, C]
入力:ABC 2
出力:[AA, AB, AC, BA, BB, BC, CA, CB, CC]
入力:ABC 3
出力:[AAA, AAB, AAC, ABA, ABB, ABC, ACA, ACB, ACC, BAA, BAB, BAC, BBA, BBB, BBC, BCA, BCB, BCC, CAA, CAB, CAC, CBA, CBB, CBC, CCA, CCB, CCC]
486デフォルトの名無しさん
2025/01/22(水) 22:43:43.59ID:EHGf/TPZ >>485
Rust
fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
use itertools::Itertools;
(0..長さ)
.map(|_| 文字列.chars())
.multi_cartesian_product()
.map(String::from_iter)
.collect()
}
fn main() {
assert_eq!(odai("ABC", 1), ["A", "B", "C"]);
assert_eq!(odai("ABC", 2), ["AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC"]);
assert_eq!(odai("ABC", 3), ["AAA", "AAB", "AAC", "ABA", "ABB", "ABC", "ACA", "ACB", "ACC", "BAA", "BAB", "BAC", "BBA", "BBB", "BBC", "BCA", "BCB", "BCC", "CAA", "CAB", "CAC", "CBA", "CBB", "CBC", "CCA", "CCB", "CCC"]);
}
Rust
fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
use itertools::Itertools;
(0..長さ)
.map(|_| 文字列.chars())
.multi_cartesian_product()
.map(String::from_iter)
.collect()
}
fn main() {
assert_eq!(odai("ABC", 1), ["A", "B", "C"]);
assert_eq!(odai("ABC", 2), ["AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC"]);
assert_eq!(odai("ABC", 3), ["AAA", "AAB", "AAC", "ABA", "ABB", "ABC", "ACA", "ACB", "ACC", "BAA", "BAB", "BAC", "BBA", "BBB", "BBC", "BCA", "BCB", "BCC", "CAA", "CAB", "CAC", "CBA", "CBB", "CBC", "CCA", "CCB", "CCC"]);
}
487デフォルトの名無しさん
2025/01/22(水) 23:18:53.24ID:dYX3B7ea488デフォルトの名無しさん
2025/01/22(水) 23:57:13.34ID:EHGf/TPZ >>485
Rust 今回は積ライブラリを使わない自力版
fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
let chars = 文字列.chars().collect::<Vec<_>>();
let mut state = vec![0; 長さ];
let mut output = Vec::new();
'Loop: loop {
let s = state.iter().map(|i| chars[*i]).collect();
output.push(s);
for index in state.iter_mut().rev() {
*index += 1;
if *index == chars.len() {
*index = 0;
continue;
}
continue 'Loop;
}
return output;
}
}
検証用main()は>>486と同じ
Rust 今回は積ライブラリを使わない自力版
fn odai(文字列: &str, 長さ: usize) -> Vec<String> {
let chars = 文字列.chars().collect::<Vec<_>>();
let mut state = vec![0; 長さ];
let mut output = Vec::new();
'Loop: loop {
let s = state.iter().map(|i| chars[*i]).collect();
output.push(s);
for index in state.iter_mut().rev() {
*index += 1;
if *index == chars.len() {
*index = 0;
continue;
}
continue 'Loop;
}
return output;
}
}
検証用main()は>>486と同じ
489デフォルトの名無しさん
2025/01/23(木) 18:33:06.01ID:hcg9tgUx >>485
JavaScript
const prod = function* (str, len, buf = [])
{
if (len > 0)
{
for (let i = 0; i < str.length; i++)
{
buf.push(str[i]);
yield* prod(str, len - 1, buf);
buf.pop();
}
}
else
{
yield buf.join("");
}
};
for (let n = 1; n < 4; n++)
{
console.log([...prod("ABC", n)]);
}
JavaScript
const prod = function* (str, len, buf = [])
{
if (len > 0)
{
for (let i = 0; i < str.length; i++)
{
buf.push(str[i]);
yield* prod(str, len - 1, buf);
buf.pop();
}
}
else
{
yield buf.join("");
}
};
for (let n = 1; n < 4; n++)
{
console.log([...prod("ABC", n)]);
}
490デフォルトの名無しさん
2025/01/23(木) 20:05:23.84ID:naue5Hlh4919
2025/01/24(金) 01:44:22.46ID:p08ruAfw >>485 Perl5
for $n (1..3) {
@cp = @s = qw(A B C);
while(--$n) { @cp = map{ $p = $_; map{ "$p$_" } @s } @cp }
print "@cp\n";
}
※見易くするためインデントは全角スペースに置換してあります
実行結果
~ $ perl 22_485_CartesianProd.pl
A B C
AA AB AC BA BB BC CA CB CC
AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC
for $n (1..3) {
@cp = @s = qw(A B C);
while(--$n) { @cp = map{ $p = $_; map{ "$p$_" } @s } @cp }
print "@cp\n";
}
※見易くするためインデントは全角スペースに置換してあります
実行結果
~ $ perl 22_485_CartesianProd.pl
A B C
AA AB AC BA BB BC CA CB CC
AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC
4929
2025/01/24(金) 17:38:14.24ID:cg1ZmS3G >>464 Perl5
for (<DATA>) {
chomp;
print "$_ → ", (/^(A((AB)?|(?1))B)+$/g ? 'true' : 'false'), "\n";
}
__DATA__
A
B
AB
ABB
AAB
AABB
ABAABBAAABBB
ABC
AABABB
※見易くするためにインデントを全角スペースに置換してあります
実行結果
~ $ perl 22_464_AB_rec_rex.pl
→ false
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB → true
ABC → false
AABABB → false
for (<DATA>) {
chomp;
print "$_ → ", (/^(A((AB)?|(?1))B)+$/g ? 'true' : 'false'), "\n";
}
__DATA__
A
B
AB
ABB
AAB
AABB
ABAABBAAABBB
ABC
AABABB
※見易くするためにインデントを全角スペースに置換してあります
実行結果
~ $ perl 22_464_AB_rec_rex.pl
→ false
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB → true
ABC → false
AABABB → false
493デフォルトの名無しさん
2025/01/24(金) 20:04:46.59ID:kDOvSp0D495デフォルトの名無しさん
2025/01/25(土) 03:04:24.02ID:Z97MpHAu どんまい
496デフォルトの名無しさん
2025/01/25(土) 21:23:47.57ID:KM9w0vp0497デフォルトの名無しさん
2025/01/26(日) 14:07:38.91ID:nBBaggrk498493
2025/01/26(日) 15:22:46.05ID:dl7YvN1C499デフォルトの名無しさん
2025/01/27(月) 00:00:51.14ID:/Jqezixy500デフォルトの名無しさん
2025/01/27(月) 09:16:22.69ID:rqFJtGlJ お題
入力された文字列から重複する文字を抽出してください
T →
CG →
ATA → A
CGGA → G
ATGAT → AT
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → ACG
ATCAGAATA → AT
TGCCATGACA → TGCA
入力された文字列から重複する文字を抽出してください
T →
CG →
ATA → A
CGGA → G
ATGAT → AT
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → ACG
ATCAGAATA → AT
TGCCATGACA → TGCA
5019
2025/01/27(月) 17:15:59.64ID:cwZgX9Gy Perl5
for (qw{T CG ATA CGGA ATGAT GTTGCA CCCCGGG ACTGCGAG ATCAGAATA TGCCATGACA}) {
%h = (); $h{$_}++ for split '';
print "$_ → ", (grep{1 < $h{$_}} keys %h), "\n";
}
※見易くするためインデントを全角スペースに置換してあります
実行結果
~ $ perl 22_500_dupe_char.pl
T →
CG →
ATA → A
CGGA → G
ATGAT → TA
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → GAC
ATCAGAATA → TA
TGCCATGACA → TGAC
for (qw{T CG ATA CGGA ATGAT GTTGCA CCCCGGG ACTGCGAG ATCAGAATA TGCCATGACA}) {
%h = (); $h{$_}++ for split '';
print "$_ → ", (grep{1 < $h{$_}} keys %h), "\n";
}
※見易くするためインデントを全角スペースに置換してあります
実行結果
~ $ perl 22_500_dupe_char.pl
T →
CG →
ATA → A
CGGA → G
ATGAT → TA
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → GAC
ATCAGAATA → TA
TGCCATGACA → TGAC
5029
2025/01/27(月) 21:20:12.94ID:cwZgX9Gy5039
2025/01/27(月) 21:22:36.75ID:cwZgX9Gy CopilotのURLをコピペしても他の人に内容を見せることはできなかったワ…orz
504デフォルトの名無しさん
2025/01/27(月) 21:24:28.42ID:LHxZVLOG >>500 octave
https://ideone.com/eLcVPC
function s = f(s)
[~, ia] = unique(s);
s(ia) = [];
if 1 < length(s)
[~, ia] = unique(s, 'first');
s = s(sort(ia));
end
end
>>500 ruby
https://try.ruby-lang.org/playground/#code=f+%3D+-%3Es+%7Bs.chars.tally.select+%7B1+%3C+_2%7D.keys.join%7D%0Ass+%3D+%3C%3CEOS.lines(chomp%3A+true)%0AT%0ACG%0AATA%0ACGGA%0AATGAT%0AGTTGCA%0ACCCCGGG%0AACTGCGAG%0AATCAGAATA%0ATGCCATGACA%0AEOS%0Aputs+ss.map+%7B%7Cs%7C+%22%23%7Bs%7D+-%3E+%23%7Bf.(s)%7D%22%7D&engine=cruby-3.3.0
https://ideone.com/9E5Z9a
f = ->s {s.chars.tally.select {1 < _2}.keys.join}
https://ideone.com/eLcVPC
function s = f(s)
[~, ia] = unique(s);
s(ia) = [];
if 1 < length(s)
[~, ia] = unique(s, 'first');
s = s(sort(ia));
end
end
>>500 ruby
https://try.ruby-lang.org/playground/#code=f+%3D+-%3Es+%7Bs.chars.tally.select+%7B1+%3C+_2%7D.keys.join%7D%0Ass+%3D+%3C%3CEOS.lines(chomp%3A+true)%0AT%0ACG%0AATA%0ACGGA%0AATGAT%0AGTTGCA%0ACCCCGGG%0AACTGCGAG%0AATCAGAATA%0ATGCCATGACA%0AEOS%0Aputs+ss.map+%7B%7Cs%7C+%22%23%7Bs%7D+-%3E+%23%7Bf.(s)%7D%22%7D&engine=cruby-3.3.0
https://ideone.com/9E5Z9a
f = ->s {s.chars.tally.select {1 < _2}.keys.join}
505デフォルトの名無しさん
2025/01/27(月) 21:30:57.80ID:l9HsQRRu506デフォルトの名無しさん
2025/01/28(火) 21:18:03.62ID:oNqYbqge507デフォルトの名無しさん
2025/01/29(水) 01:00:49.19ID:4mvV5Tkg508デフォルトの名無しさん
2025/01/29(水) 01:49:29.44ID:PQfpjql4 >>500
REM 重複チェック.bat
ruby -x "%~f0"
exit
#~
#!ruby
while 1
print "> "
a=$stdin.gets.chomp.split("")
exit if a==[]
puts a.select{|e| a.count(e)>1}.uniq.join
end
REM 重複チェック.bat
ruby -x "%~f0"
exit
#~
#!ruby
while 1
print "> "
a=$stdin.gets.chomp.split("")
exit if a==[]
puts a.select{|e| a.count(e)>1}.uniq.join
end
509デフォルトの名無しさん
2025/01/29(水) 21:56:05.24ID:GDFS0NvX510デフォルトの名無しさん
2025/01/30(木) 21:27:24.39ID:te1+SH0T お題
ソース文字列と検索文字列が入力されます
検索文字列の文字をすべて含むソース文字列の部分文字列のうち
一番短い部分文字列を出力してください
DHBICEJAFG EIC → ICE
FDGJHCBIEA EIC → CBIE
FBHDCIJGEA EIC → CIJGE
JDIBGHCEAF EIC → IBGHCE
JBCIAGDHEF EIC → CIAGDHE
EJFBCAGIHD EIC → EJFBCAGI
IADCGJFBEH EIC → IADCGJFBE
IDFHBJGAEC EIC → IDFHBJGAEC
ソース文字列と検索文字列が入力されます
検索文字列の文字をすべて含むソース文字列の部分文字列のうち
一番短い部分文字列を出力してください
DHBICEJAFG EIC → ICE
FDGJHCBIEA EIC → CBIE
FBHDCIJGEA EIC → CIJGE
JDIBGHCEAF EIC → IBGHCE
JBCIAGDHEF EIC → CIAGDHE
EJFBCAGIHD EIC → EJFBCAGI
IADCGJFBEH EIC → IADCGJFBE
IDFHBJGAEC EIC → IDFHBJGAEC
511506
2025/01/30(木) 21:43:26.41ID:ID2xuR+0512デフォルトの名無しさん
2025/01/30(木) 22:47:12.58ID:3iB+73MI 高速文字列解析の世界に似た問題のアルゴリズム(ウェーブレット木)が沢山ありました
513デフォルトの名無しさん
2025/01/31(金) 00:36:51.89ID:MBodgIXJ514デフォルトの名無しさん
2025/01/31(金) 13:46:22.55ID:+tPQNmsr このスレでいいのかわからんのだけど
Rust勉強中なんだがメモリ安全性の恩恵を受けやすいなんかしらかのプログラムを書こうと思ってるんだがなにかいいお題はあるか?
言語処理系は大体作ってるのでそれ以外で頼む
Rust勉強中なんだがメモリ安全性の恩恵を受けやすいなんかしらかのプログラムを書こうと思ってるんだがなにかいいお題はあるか?
言語処理系は大体作ってるのでそれ以外で頼む
515デフォルトの名無しさん
2025/01/31(金) 15:33:43.41ID:b4vq2KMj う~んこの嫌われムーブはあのおじさんか
このスレでは自重して欲しいな
このスレでは自重して欲しいな
516デフォルトの名無しさん
2025/01/31(金) 16:14:43.64ID:fZW/Grtl >>514 へのお題
次の操作ができる循環リンクリストを作成してください
・空のリストへの挿入
・冒頭の挿入
・最後に挿入
・指定された位置への挿入
・最初のノードを削除する
・最後のノードを削除する
・任意の位置からノードを削除する
次の操作ができる循環リンクリストを作成してください
・空のリストへの挿入
・冒頭の挿入
・最後に挿入
・指定された位置への挿入
・最初のノードを削除する
・最後のノードを削除する
・任意の位置からノードを削除する
517デフォルトの名無しさん
2025/01/31(金) 21:55:55.86ID:mLWOFznj >>514
Rustはメモリのデータ競合もデータ参照競合も全てコンパイルエラーにしてくれるから間違えようがないね
他の普通の言語だと実行して問題発生に気付いて調査して頑張ってようやく競合が原因だと判明して間違えていたことがわかるから開発効率の悪さとして差が現れるけど
Rustは実行前にその種のミスのデバッグまで全て終えてしまう感じ
Rustはメモリのデータ競合もデータ参照競合も全てコンパイルエラーにしてくれるから間違えようがないね
他の普通の言語だと実行して問題発生に気付いて調査して頑張ってようやく競合が原因だと判明して間違えていたことがわかるから開発効率の悪さとして差が現れるけど
Rustは実行前にその種のミスのデバッグまで全て終えてしまう感じ
518デフォルトの名無しさん
2025/01/31(金) 22:10:00.47ID:4ClqIqkw 普通は問題発生前に気がつく
519デフォルトの名無しさん
2025/01/31(金) 22:17:10.46ID:bHXxdIdo520デフォルトの名無しさん
2025/01/31(金) 22:38:00.61ID:3jAIz2ps >>518
グローバル変数を排他制御せずに使ってしまっていたりするミスなどよく見かけるような
一般的にも巨大なコードになったり複数人で共通認識なかったりで見逃しミスは必ず出てくる
そしてタイミング次第によって稀にバグが起こるパターンとか負荷が高くなって起きてバグ発覚とか
グローバル変数を排他制御せずに使ってしまっていたりするミスなどよく見かけるような
一般的にも巨大なコードになったり複数人で共通認識なかったりで見逃しミスは必ず出てくる
そしてタイミング次第によって稀にバグが起こるパターンとか負荷が高くなって起きてバグ発覚とか
521デフォルトの名無しさん
2025/01/31(金) 23:44:08.10ID:mLWOFznj 全て自分で出来る気付くミスらない
って自己過信な人がセキュリティホールを招いてるからね
自動的にサポートしてくれる言語を使うのが安全で開発効率もいいよ
って自己過信な人がセキュリティホールを招いてるからね
自動的にサポートしてくれる言語を使うのが安全で開発効率もいいよ
522デフォルトの名無しさん
2025/02/01(土) 00:00:30.73ID:pgp85i6o ちゃんとルールを守って運転すれば
事故も起きないし、違反で捕まらない
それと同じ
事故も起きないし、違反で捕まらない
それと同じ
523デフォルトの名無しさん
2025/02/01(土) 00:26:30.15ID:cvjWKAds524519
2025/02/01(土) 17:22:30.12ID:/Ur4AoNp525デフォルトの名無しさん
2025/02/01(土) 22:42:58.39ID:1BfoGXYb >>516
横からだがその仕様ならベクタをリングバッファとして使った両端キューで十分だな
多くの実用例でもこの方が速いことが知られている
use std::collections::VecDeque;
// 空のキュー
let mut deque: VecDeque<T> = VecDeque::new();
// 先頭に挿入
deque.push_front(t);
// 最後に挿入
deque.push_back(t);
// 指定位置に挿入
deque.insert(index, t);
// 先頭を削除して得る
let first: Option<T> = deque.pop_front();
// 最後を削除して得る
let last: Option<T> = deque.pop_back();
// 指定位置を削除して得る
let element: Option<T> = deque.pop_back();
横からだがその仕様ならベクタをリングバッファとして使った両端キューで十分だな
多くの実用例でもこの方が速いことが知られている
use std::collections::VecDeque;
// 空のキュー
let mut deque: VecDeque<T> = VecDeque::new();
// 先頭に挿入
deque.push_front(t);
// 最後に挿入
deque.push_back(t);
// 指定位置に挿入
deque.insert(index, t);
// 先頭を削除して得る
let first: Option<T> = deque.pop_front();
// 最後を削除して得る
let last: Option<T> = deque.pop_back();
// 指定位置を削除して得る
let element: Option<T> = deque.pop_back();
526デフォルトの名無しさん
2025/02/01(土) 22:57:16.48ID:FwGLv5NU ズルしてどうするんよ…
527デフォルトの名無しさん
2025/02/01(土) 23:00:12.86ID:FwGLv5NU Rustのメモリ安全性を確認するためにプログラム書きたいんでしょ、だったら循環リストをフルスクラッチするしかないよね
528デフォルトの名無しさん
2025/02/02(日) 19:41:14.89ID:NpAQnhYs リンクリストならindex番目の操作(挿入or切除)は
index番目で分解して操作して合体するだけなのでこれで動くよ
use std::collections::LinkedList;
trait LinkedListExt<T> {
fn insert_at(&mut self, index: usize, value: T);
fn remove_at(&mut self, index: usize) -> Option<T>;
}
impl<T> LinkedListExt<T> for LinkedList<T> {
fn insert_at(&mut self, index: usize, value: T) {
let mut tail = self.split_off(index);
self.push_back(value);
self.append(&mut tail);
}
fn remove_at(&mut self, index: usize) -> Option<T> {
let mut tail = self.split_off(index);
let value = tail.pop_front();
self.append(&mut tail);
value
}
}
index番目で分解して操作して合体するだけなのでこれで動くよ
use std::collections::LinkedList;
trait LinkedListExt<T> {
fn insert_at(&mut self, index: usize, value: T);
fn remove_at(&mut self, index: usize) -> Option<T>;
}
impl<T> LinkedListExt<T> for LinkedList<T> {
fn insert_at(&mut self, index: usize, value: T) {
let mut tail = self.split_off(index);
self.push_back(value);
self.append(&mut tail);
}
fn remove_at(&mut self, index: usize) -> Option<T> {
let mut tail = self.split_off(index);
let value = tail.pop_front();
self.append(&mut tail);
value
}
}
529デフォルトの名無しさん
2025/02/03(月) 21:15:02.53ID:swo++26S530デフォルトの名無しさん
2025/02/03(月) 22:57:52.37ID:VF4m0iMh >>510 c
https://ideone.com/L4xIAy
・f_529 は529さんのパクり
・f_strcspn_chr は strchr してから strcspn すると単純ながら若干の速度向上
https://ideone.com/L4xIAy
・f_529 は529さんのパクり
・f_strcspn_chr は strchr してから strcspn すると単純ながら若干の速度向上
531530
2025/02/04(火) 21:13:55.63ID:k8XtEdoq532531
2025/02/05(水) 20:39:11.49ID:mFRiRIqM533532
2025/02/05(水) 23:28:39.35ID:mFRiRIqM534デフォルトの名無しさん
2025/02/06(木) 22:16:32.16ID:u6r6iDwj >>510
C++
https://ideone.com/ywT3qw
>>529からの変更点
・sへのtの文字の出現位置を高速取得(1バイト文字のみに対応)
・sにtの同一文字が3回以上連続して出現する場合に最初と最後以外の位置を省略
C++
https://ideone.com/ywT3qw
>>529からの変更点
・sへのtの文字の出現位置を高速取得(1バイト文字のみに対応)
・sにtの同一文字が3回以上連続して出現する場合に最初と最後以外の位置を省略
535デフォルトの名無しさん
2025/02/07(金) 19:14:17.64ID:UF6GKvr5 >>500
Wolfram Language
str = "ATGAT"
>> Out[1]= ATGAT
duplicates = str // Characters \
(* { A, T, G, A, T } *) \
// Counts \
(* <| A -> 2, T -> 2, G -> 1 |> *) \
// Select[Function[ 1 < # ]] \
(* <| A -> 2, T -> 2 |> *) \
// Keys \
(* { A, T } *) \
// StringJoin (* "AT" *)
>> Out[2]= AT
Wolfram Language
str = "ATGAT"
>> Out[1]= ATGAT
duplicates = str // Characters \
(* { A, T, G, A, T } *) \
// Counts \
(* <| A -> 2, T -> 2, G -> 1 |> *) \
// Select[Function[ 1 < # ]] \
(* <| A -> 2, T -> 2 |> *) \
// Keys \
(* { A, T } *) \
// StringJoin (* "AT" *)
>> Out[2]= AT
536デフォルトの名無しさん
2025/02/07(金) 21:12:13.92ID:n3kvQb3T テス
5379
2025/02/07(金) 21:20:22.98ID:dMuAEB5V538デフォルトの名無しさん
2025/02/07(金) 22:53:14.41ID:ovhX7KXo5399
2025/02/07(金) 23:00:25.46ID:dMuAEB5V >>537
しくった、これ一番短い範囲ではなく間違って一番長い範囲を検出してる。
サンプルデータではたまたま同じ解になるようで、間違いを見落としてしまった。
それから、一番長い(短いにすべきだったが)範囲の検索にわざわざ候補listをsortして[0]番目を
取得しているが無駄だし規模が大きくなると効率よくない
時間あったら直しますわ〜
しくった、これ一番短い範囲ではなく間違って一番長い範囲を検出してる。
サンプルデータではたまたま同じ解になるようで、間違いを見落としてしまった。
それから、一番長い(短いにすべきだったが)範囲の検索にわざわざ候補listをsortして[0]番目を
取得しているが無駄だし規模が大きくなると効率よくない
時間あったら直しますわ〜
542538
2025/02/07(金) 23:08:45.80ID:ovhX7KXo543デフォルトの名無しさん
2025/02/07(金) 23:41:05.56ID:qBbgMoXu >>500
PowerShell
"T", "CG", "ATA", "CGGA", "ATGAT", "GTTGCA", "CCCCGGG", "ACTGCGAG ", "ATCAGAATA", "TGCCATGACA" |% {
"$_ → $(-join ([char[]]$_ | group -case |% {$_.name[$_.count -le 1]}))"
}
[実行結果]
T →
CG →
ATA → A
CGGA → G
ATGAT → AT
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → ACG
ATCAGAATA → AT
TGCCATGACA → TGCA
PowerShell
"T", "CG", "ATA", "CGGA", "ATGAT", "GTTGCA", "CCCCGGG", "ACTGCGAG ", "ATCAGAATA", "TGCCATGACA" |% {
"$_ → $(-join ([char[]]$_ | group -case |% {$_.name[$_.count -le 1]}))"
}
[実行結果]
T →
CG →
ATA → A
CGGA → G
ATGAT → AT
GTTGCA → GT
CCCCGGG → CG
ACTGCGAG → ACG
ATCAGAATA → AT
TGCCATGACA → TGCA
5449
2025/02/08(土) 00:22:55.52ID:vma3KbbM >>510 Perl5、>>537 の修正版
https://ideone.com/klqLux
修正点
・>>537では間違って一番長い範囲を検出していたが、一番短い範囲に修正した。(サンプルデータではそれらの解はたまたま一致)
・パターンが3文字であることに依存する定数「2(=3 -1 )」をハードコードしている箇所があったので、パターン文字数次第で処理するように修正
・検出した候補文字列リストのうち一番短い物の検索のためにわざわざ候補リスト全体をsortするのをやめて
reduceによって長さが一番短い文字列を検索するように修正
List::Utils は言語処理系にデフォルトで付属のコアモジュール、
List::MoreUtils はCPANのオプションノジュールだがideoneのperlにはインスコされていたので使っちゃいましたテヘペロ
なお、候補文字列リストを作らず、ループの最内ifの中で一番短い文字列だけを記録していく様に記述すれば
大規模問題で若干効率が良くなるだろうけど、
まあいいや、もういいや。
https://ideone.com/klqLux
修正点
・>>537では間違って一番長い範囲を検出していたが、一番短い範囲に修正した。(サンプルデータではそれらの解はたまたま一致)
・パターンが3文字であることに依存する定数「2(=3 -1 )」をハードコードしている箇所があったので、パターン文字数次第で処理するように修正
・検出した候補文字列リストのうち一番短い物の検索のためにわざわざ候補リスト全体をsortするのをやめて
reduceによって長さが一番短い文字列を検索するように修正
List::Utils は言語処理系にデフォルトで付属のコアモジュール、
List::MoreUtils はCPANのオプションノジュールだがideoneのperlにはインスコされていたので使っちゃいましたテヘペロ
なお、候補文字列リストを作らず、ループの最内ifの中で一番短い文字列だけを記録していく様に記述すれば
大規模問題で若干効率が良くなるだろうけど、
まあいいや、もういいや。
546デフォルトの名無しさん
2025/02/08(土) 08:27:20.39ID:7bAG/IVE >>510
Wolfram Language
s = "DHBICEJAFG"
>> Out[1]= DHBICEJAFG
pattern = "EIC"
>> Out[2]= EIC
shortestMatch = \
(* 全通りの部分文字列を生成する *) \
ReplaceList[ Characters[ s ], {___, x__, ___} -> {x} ] \
(* 短い順、先頭に近い順に並べる *) \
// Sort \
(* 検索文字列の文字を全て含むものを選ぶ *) \
// Select[ ContainAll[ Characters[ pattern ] ] ] \
(* 1つ目を文字列として返す *) \
// Extract[ 1 ] // StringJoin
>> Out[3]= ICE
Wolfram Language
s = "DHBICEJAFG"
>> Out[1]= DHBICEJAFG
pattern = "EIC"
>> Out[2]= EIC
shortestMatch = \
(* 全通りの部分文字列を生成する *) \
ReplaceList[ Characters[ s ], {___, x__, ___} -> {x} ] \
(* 短い順、先頭に近い順に並べる *) \
// Sort \
(* 検索文字列の文字を全て含むものを選ぶ *) \
// Select[ ContainAll[ Characters[ pattern ] ] ] \
(* 1つ目を文字列として返す *) \
// Extract[ 1 ] // StringJoin
>> Out[3]= ICE
5479
2025/02/08(土) 17:50:15.20ID:HpUe4TZQ >>510 Perl5、>>544 をもう一回だけ改良
https://ideone.com/YkuK1w
改良点:
・検出された範囲の候補を一通りリストに蓄えて、あとでその中から最短のものを探す方式を止めて、
範囲を検索するループ内のifでその時点までの最短な範囲の判定と記録を行うようにした。
・CPANモジュールList::MoreUtilsのminmaxを使わない。
・コアモジュールList::Utilはminだけ使う。reduceは使わない。
なんだかPerlのコードらしい感じが減って、ベタな感じのコードになってしまいました
https://ideone.com/YkuK1w
改良点:
・検出された範囲の候補を一通りリストに蓄えて、あとでその中から最短のものを探す方式を止めて、
範囲を検索するループ内のifでその時点までの最短な範囲の判定と記録を行うようにした。
・CPANモジュールList::MoreUtilsのminmaxを使わない。
・コアモジュールList::Utilはminだけ使う。reduceは使わない。
なんだかPerlのコードらしい感じが減って、ベタな感じのコードになってしまいました
548デフォルトの名無しさん
2025/02/08(土) 19:59:09.70ID:EDI8nVtP549デフォルトの名無しさん
2025/02/08(土) 20:02:06.41ID:EDI8nVtP >>510
C++
https://ideone.com/TluWQi
>>548では検索文字列が短くて高速化されたか分かりにくかったので、長くして529, 534, 548の
実行時間を比較してみると、効果が顕著に現れた。
C++
https://ideone.com/TluWQi
>>548では検索文字列が短くて高速化されたか分かりにくかったので、長くして529, 534, 548の
実行時間を比較してみると、効果が顕著に現れた。
550 警備員[Lv.19]
2025/02/09(日) 03:18:28.07ID:Y8d2noVo551 警備員[Lv.19]
2025/02/09(日) 03:56:54.57ID:Y8d2noVo552デフォルトの名無しさん
2025/02/09(日) 12:47:59.38ID:uN83pfj6 >>510 c
https://ideone.com/D2AZMK
・両端に着目し、両端のみを更新しつつ調べていく(が、これといってパっとせず)
・f_both_ends はあくまで元の文字列s上を調べていく
・f_both_ends_v2 は「次」「隣」にアクセスしやすくした構造の上を調べていく
・あと実行時間の値ははげしくブレブレなので参考程度にとどめておいてね
https://ideone.com/D2AZMK
・両端に着目し、両端のみを更新しつつ調べていく(が、これといってパっとせず)
・f_both_ends はあくまで元の文字列s上を調べていく
・f_both_ends_v2 は「次」「隣」にアクセスしやすくした構造の上を調べていく
・あと実行時間の値ははげしくブレブレなので参考程度にとどめておいてね
553デフォルトの名無しさん
2025/02/09(日) 21:29:55.65ID:do9MXosP554デフォルトの名無しさん
2025/02/09(日) 21:31:24.58ID:do9MXosP555デフォルトの名無しさん
2025/02/09(日) 21:35:08.87ID:do9MXosP556 警備員[Lv.19]
2025/02/10(月) 13:21:24.86ID:g+w4FSG9557デフォルトの名無しさん
2025/02/10(月) 21:24:31.20ID:KgR1Tipz558デフォルトの名無しさん
2025/02/11(火) 03:27:04.16ID:FlAqv/ML 動画再生回数、登録者数、評価数、コメント数
上2桁、下2桁に04、13、40、44、71、74など
(+生年月日、IDの数字など)の組み合わせ
業者による忌み数字、不吉数字の嫌がらせ&精神攻撃がキモすぎ
上2桁、下2桁に04、13、40、44、71、74など
(+生年月日、IDの数字など)の組み合わせ
業者による忌み数字、不吉数字の嫌がらせ&精神攻撃がキモすぎ
559 警備員[Lv.20]
2025/02/11(火) 05:48:25.27ID:Y4Uu1QjJ それはお題なのか?それともただの誤爆か?
560デフォルトの名無しさん
2025/02/11(火) 06:03:36.08ID:h8gYOd9x 糖質でしょ
忌み数字不吉数字とか意味不明なこと言ってるし,それを業者が特定個人を狙って表示する意味も分からんし
忌み数字不吉数字とか意味不明なこと言ってるし,それを業者が特定個人を狙って表示する意味も分からんし
561デフォルトの名無しさん
2025/02/11(火) 10:54:21.93ID:E5oVpL7o お題
数列が入力されます
ニ番目に小さい数を出力してください
入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7
出力:2
数列が入力されます
ニ番目に小さい数を出力してください
入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7
出力:2
562デフォルトの名無しさん
2025/02/11(火) 11:46:37.94ID:A5/Zs5AB こんちゃ
質問いいでしょうけ
プルダウン(ポップアップ)をUIとしてだすとして
見えている項目名と、実際にパラミータとして出す値を変えたい時はどうしたらよか
質問いいでしょうけ
プルダウン(ポップアップ)をUIとしてだすとして
見えている項目名と、実際にパラミータとして出す値を変えたい時はどうしたらよか
5639
2025/02/11(火) 14:53:15.78ID:mMj2PIa8 >>561 Perl5
$h{$_} = $_ for 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
@s = sort keys %h;
print "$s[1]\n";
実行結果
~ $ perl 22_561_second.pl
2
Perl5.26以降に付属のList::Utilにはuniq関数があるのでそれを使えば:
use List::Util qw(uniq);
@s = uniq sort 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
print "$s[1]\n";
$h{$_} = $_ for 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
@s = sort keys %h;
print "$s[1]\n";
実行結果
~ $ perl 22_561_second.pl
2
Perl5.26以降に付属のList::Utilにはuniq関数があるのでそれを使えば:
use List::Util qw(uniq);
@s = uniq sort 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
print "$s[1]\n";
564 警備員[Lv.20]
2025/02/11(火) 16:33:48.19ID:Y4Uu1QjJ >>562
環境や言語やフレームワークを書いて限定しないと色々な環境や言語やフレームワークでの答えが適当に沢山湧いて出て来る可能性あるぞ。
しかも分からない所は適当に解釈してだ。なぜならここはお題スレだから。
環境や言語やフレームワークを書いて限定しないと色々な環境や言語やフレームワークでの答えが適当に沢山湧いて出て来る可能性あるぞ。
しかも分からない所は適当に解釈してだ。なぜならここはお題スレだから。
565デフォルトの名無しさん
2025/02/11(火) 16:37:12.05ID:WPoAkGuN566デフォルトの名無しさん
2025/02/11(火) 16:40:21.13ID:gFwXvlnz567デフォルトの名無しさん
2025/02/11(火) 17:43:14.68ID:7RexIvi8568デフォルトの名無しさん
2025/02/11(火) 17:48:30.95ID:7RexIvi8569デフォルトの名無しさん
2025/02/11(火) 18:19:05.70ID:7RexIvi8570デフォルトの名無しさん
2025/02/11(火) 20:45:09.89ID:hMHygfcC571デフォルトの名無しさん
2025/02/11(火) 23:21:03.54ID:Vzh5cLYk 数列が入力されるので
整数の数列だけでなく浮動小数点数の数列にも対応してくださいね
ニ番目に小さい数がない時
例えば同じ数しか存在しない時や数列の長さが1の時には
解がないことを返してくださいね
例えばその時にMAX値が返ってきたら失格ですよ
整数の数列だけでなく浮動小数点数の数列にも対応してくださいね
ニ番目に小さい数がない時
例えば同じ数しか存在しない時や数列の長さが1の時には
解がないことを返してくださいね
例えばその時にMAX値が返ってきたら失格ですよ
572565
2025/02/11(火) 23:28:05.14ID:qmej6t155739
2025/02/11(火) 23:36:31.53ID:yxel6cu3 先に言えよって、感じw
574デフォルトの名無しさん
2025/02/11(火) 23:48:25.56ID:E5oVpL7o575デフォルトの名無しさん
2025/02/11(火) 23:50:12.69ID:HwVbkmdb 小数対応はともかく
max値を返してしまう人はプログラマ失格かな
あとsortを使ってしまう人は計算量を知らない初心者
max値を返してしまう人はプログラマ失格かな
あとsortを使ってしまう人は計算量を知らない初心者
576デフォルトの名無しさん
2025/02/11(火) 23:53:59.73ID:E5oVpL7o そういうこだわりはアスペルガーにしか思えないな、どうでも良いじゃないですかそんなこと
577デフォルトの名無しさん
2025/02/11(火) 23:56:29.96ID:E5oVpL7o こだわりは自分の胸のうちに留めていただきたい、他人に求めたら回答の幅を狭めるだけ、多様性のある回答こそ美しい
578デフォルトの名無しさん
2025/02/11(火) 23:57:23.71ID:HwVbkmdb579デフォルトの名無しさん
2025/02/11(火) 23:59:56.87ID:E5oVpL7o だからそういう、こうじゃないとダメだという態度がアスペルガー仕草なんだってばよ、君が思うのは勝手だが他人に求めるものじゃない
580デフォルトの名無しさん
2025/02/12(水) 00:01:10.34ID:hk2aQo3G プログラミングはもっと自由なものなんだよ、思ったとおりにかけば良い
5819
2025/02/12(水) 00:03:23.15ID:yw0CaA/O そういう条件は回答を見て思いついた後から言わず先に書くべきでは?
そうでなければ、与えられた短い文とテストデータから、
処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。
後からいろいろ言って批判なんてでもってのほかだと思うが。
そうでなければ、与えられた短い文とテストデータから、
処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。
後からいろいろ言って批判なんてでもってのほかだと思うが。
5829
2025/02/12(水) 00:05:30.21ID:yw0CaA/O 出来たもの見て実はこういう条件がありましたってケチつけるのはクソクライアントと一緒だな
583デフォルトの名無しさん
2025/02/12(水) 00:13:52.34ID:SJ0T1N6w ざっと見たけどmax()を返してるのはC++の人だけで他は皆まともだ
普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
584デフォルトの名無しさん
2025/02/12(水) 00:18:10.68ID:hk2aQo3G 好きにしたら良いんやで吉田松陰もそんなこと言ってた気がする
585デフォルトの名無しさん
2025/02/12(水) 00:20:24.72ID:hk2aQo3G まともとかバレるとかそういう当て擦りの嫌味ったらしい言い方どこで身につけてきたのあんた、母ちゃんは悲しいよ
586デフォルトの名無しさん
2025/02/12(水) 00:22:24.96ID:Qtl/TEf65879
2025/02/12(水) 00:28:30.94ID:yw0CaA/O 「データが二個未満の場合にはnilを返す。」とか書いとくべき。
でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。
シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、
細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。
シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、
細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
588デフォルトの名無しさん
2025/02/12(水) 00:31:16.47ID:1WuTe288 普段はプログラム載せるだけだけど、みんな意外と饒舌なんだなw
5899
2025/02/12(水) 00:33:57.88ID:yw0CaA/O ここはある意味、回答のコードでもって語るスレだからな
590デフォルトの名無しさん
2025/02/12(水) 00:35:35.77ID:kQv2EDFI お題にそんな指定ないのに
みんなnilなどを返してるからこのスレの住人たちはセンスいいな
みんなnilなどを返してるからこのスレの住人たちはセンスいいな
591デフォルトの名無しさん
2025/02/12(水) 19:12:16.26ID:FZJ50oR3 >>561 lisp (sbcl)
https://ideone.com/Bct7bC
>>561 lisp (clisp)
https://ideone.com/yqfmzh
clispだと何故かsort版の方が速い
https://ideone.com/Bct7bC
>>561 lisp (clisp)
https://ideone.com/yqfmzh
clispだと何故かsort版の方が速い
592デフォルトの名無しさん
2025/02/12(水) 20:45:54.96ID:JML0DDov593デフォルトの名無しさん
2025/02/12(水) 22:44:39.40ID:Qtl/TEf6 >>561, 571
>>570のC++のf3をint型の最大値を含むデータにも対応させた。
C#にはint?型があるのですっきり書けるが、
https://ideone.com/oRhDL1
C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
https://ideone.com/xYnTSD
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
>>570のC++のf3をint型の最大値を含むデータにも対応させた。
C#にはint?型があるのですっきり書けるが、
https://ideone.com/oRhDL1
C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
https://ideone.com/xYnTSD
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
594デフォルトの名無しさん
2025/02/13(木) 12:04:43.08ID:KGk2Z9bM お題:ランダムな数列から任意の並んでいる二つの数同士を足して、その二つの数の間に挿入せよ。
その新しい数が一桁ならそのまま挿入し二桁なら桁同士を足してその二桁の間に挿入せよ。
< 123456789 3 4
> 1237456789
(3+4=7)
< 123456789 6 7
> 123456143789
(6+7=13 1+3=4)
その新しい数が一桁ならそのまま挿入し二桁なら桁同士を足してその二桁の間に挿入せよ。
< 123456789 3 4
> 1237456789
(3+4=7)
< 123456789 6 7
> 123456143789
(6+7=13 1+3=4)
595デフォルトの名無しさん
2025/02/13(木) 12:31:31.25ID:QhFtS6hw 問題文の記述が下手かよ
596デフォルトの名無しさん
2025/02/13(木) 13:27:16.37ID:J5YSE8js >>594 ruby
a=$stdin.gets.chomp.split(" ")
b=a[1].to_i+a[2].to_i
c=(b<9 ? a[1]+b.to_s+a[2] : a[1]+"#{b/10}#{b/10+b%10}#{b%10}"+a[2])
puts a[0].gsub(a[1]+a[2],c)
a=$stdin.gets.chomp.split(" ")
b=a[1].to_i+a[2].to_i
c=(b<9 ? a[1]+b.to_s+a[2] : a[1]+"#{b/10}#{b/10+b%10}#{b%10}"+a[2])
puts a[0].gsub(a[1]+a[2],c)
5979
2025/02/13(木) 17:35:13.67ID:UAfabByi >>594 Perl5、見易くするためインデントは全角スペースに置換してあります
for (<DATA>) {
($s, $a, $b) = split;
$c = $a + $b;
$c = $1 . ($1 + $2) . $2 if $c =~ /(\d)(\d)/;
$s =~ s/$a$b/$a$c$b/g;
print "$s\n";
}
__DATA__
123456789 3 4
123456789 6 7
123456789 8 9
3141592653589793238462643383279502884197169399375105820974944 9 7
実行結果
~ $ perl 22_594.pl
1237456789
123456143789
123456781879
3141592653589176793238462643383279502884191767169399375105820917674944
for (<DATA>) {
($s, $a, $b) = split;
$c = $a + $b;
$c = $1 . ($1 + $2) . $2 if $c =~ /(\d)(\d)/;
$s =~ s/$a$b/$a$c$b/g;
print "$s\n";
}
__DATA__
123456789 3 4
123456789 6 7
123456789 8 9
3141592653589793238462643383279502884197169399375105820974944 9 7
実行結果
~ $ perl 22_594.pl
1237456789
123456143789
123456781879
3141592653589176793238462643383279502884191767169399375105820917674944
598デフォルトの名無しさん
2025/02/13(木) 20:12:01.16ID:3SfOseF2 >>594
題意が以下の通りだとして、PowerShell (エラーチェックは省略)
自然数x, i, j (i + 1 = jを満たす) が与えられる。xの上i桁目の数字をx[i]で表す。
x[i]とx[j]の和をyとして、
・yが1桁のとき、yをx[i]とx[j]の間に挿入せよ
・yが2桁のとき、y[1]とy[2]の和をy[1]とy[2]の間に挿入してから、yをx[i]とx[j]の間に挿入せよ
function f($x, $i, $j)
{
$s = [string]$x
$y = [int][string]$s[$i - 1] + [int][string]$s[$j - 1]
if ($y -lt 10) {
$s.insert($i, $y)
} else {
$s.insert($i, 11 * $y)
}
}
(123456789, 3, 4), (123456789, 6, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
題意が以下の通りだとして、PowerShell (エラーチェックは省略)
自然数x, i, j (i + 1 = jを満たす) が与えられる。xの上i桁目の数字をx[i]で表す。
x[i]とx[j]の和をyとして、
・yが1桁のとき、yをx[i]とx[j]の間に挿入せよ
・yが2桁のとき、y[1]とy[2]の和をy[1]とy[2]の間に挿入してから、yをx[i]とx[j]の間に挿入せよ
function f($x, $i, $j)
{
$s = [string]$x
$y = [int][string]$s[$i - 1] + [int][string]$s[$j - 1]
if ($y -lt 10) {
$s.insert($i, $y)
} else {
$s.insert($i, 11 * $y)
}
}
(123456789, 3, 4), (123456789, 6, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
5999
2025/02/13(木) 20:24:48.49ID:UAfabByi 数学屋さんかいなw
i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ
とオレは解釈したが
i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ
とオレは解釈したが
600デフォルトの名無しさん
2025/02/13(木) 20:34:25.67ID:3SfOseF2 >>599
そうか。だとすれば、
function f($x, $i, $j)
{
$s = [string]$x
$y = $i + $j
if ($y -ge 10) {$y *= 11}
$s -replace "$i$j", "$i$y$j"
}
(123456789, 3, 4), (123456789, 6, 7), (123456789, 8, 9), ("3141592653589793238462643383279502884197169399375105820974944", 9, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
< 123456789 8 9
> 123456781879
< 3141592653589793238462643383279502884197169399375105820974944 9 7
> 3141592653589176793238462643383279502884191767169399375105820917674944
そうか。だとすれば、
function f($x, $i, $j)
{
$s = [string]$x
$y = $i + $j
if ($y -ge 10) {$y *= 11}
$s -replace "$i$j", "$i$y$j"
}
(123456789, 3, 4), (123456789, 6, 7), (123456789, 8, 9), ("3141592653589793238462643383279502884197169399375105820974944", 9, 7) |% {
"< $($_[0]) $($_[1]) $($_[2])"
"> $(f $_[0] $_[1] $_[2])", ""
}
[実行結果]
< 123456789 3 4
> 1237456789
< 123456789 6 7
> 123456143789
< 123456789 8 9
> 123456781879
< 3141592653589793238462643383279502884197169399375105820974944 9 7
> 3141592653589176793238462643383279502884191767169399375105820917674944
601デフォルトの名無しさん
2025/02/13(木) 20:45:01.39ID:KiG3F5Wd6029
2025/02/13(木) 20:52:32.26ID:UAfabByi なんでこの人はコーデイングするのがこんなに早いんだろう…
603デフォルトの名無しさん
2025/02/13(木) 22:58:07.29ID:bC7pFAVH >>594 Rust
fn f(input: &str, a: u32, b:u32) -> String {
let src = format!("{a}{b}");
let dst = if a + b < 10 {
format!("{a}{x}{b}", x = a + b)
} else {
format!("{a}{x}{y}{z}{b}", x = 1, y = 1 + a + b - 10, z = a + b - 10)
};
use itertools::Itertools;
input.split(&src).join(&dst)
}
fn main() {
assert_eq!(f("123456789", 3, 4), "1237456789");
assert_eq!(f("123456789", 6, 7), "123456143789");
assert_eq!(f("3141592653589793238462643383279502884197169399375105820974944", 9, 7),
"3141592653589176793238462643383279502884191767169399375105820917674944");
}
fn f(input: &str, a: u32, b:u32) -> String {
let src = format!("{a}{b}");
let dst = if a + b < 10 {
format!("{a}{x}{b}", x = a + b)
} else {
format!("{a}{x}{y}{z}{b}", x = 1, y = 1 + a + b - 10, z = a + b - 10)
};
use itertools::Itertools;
input.split(&src).join(&dst)
}
fn main() {
assert_eq!(f("123456789", 3, 4), "1237456789");
assert_eq!(f("123456789", 6, 7), "123456143789");
assert_eq!(f("3141592653589793238462643383279502884197169399375105820974944", 9, 7),
"3141592653589176793238462643383279502884191767169399375105820917674944");
}
604デフォルトの名無しさん
2025/02/13(木) 23:47:12.83ID:bC7pFAVH >>561 Rust
fn second_smallest<T: Copy + Ord>(input: &[T]) -> Option<T> {
use std::cmp::Ordering::{Equal, Greater, Less};
input
.iter()
.copied()
.fold(None, |state, t| match state {
Some((_t0, Some(t1))) if t >= t1 => state,
Some((t0, _)) => match Ord::cmp(&t, &t0) {
Less => Some((t, Some(t0))),
Equal => state,
Greater => Some((t0, Some(t))),
},
None => Some((t, None)),
})
.and_then(|(_t0, t1option)| t1option)
}
fn main() {
assert_eq!(second_smallest(&[4, 5, 1, 7, 1, 2, 8, 9, 2, 7, 1]), Some(2));
assert_eq!(second_smallest(&[1, 1, 1]), None);
assert_eq!(second_smallest(&[] as &[i32]), None);
}
fn second_smallest<T: Copy + Ord>(input: &[T]) -> Option<T> {
use std::cmp::Ordering::{Equal, Greater, Less};
input
.iter()
.copied()
.fold(None, |state, t| match state {
Some((_t0, Some(t1))) if t >= t1 => state,
Some((t0, _)) => match Ord::cmp(&t, &t0) {
Less => Some((t, Some(t0))),
Equal => state,
Greater => Some((t0, Some(t))),
},
None => Some((t, None)),
})
.and_then(|(_t0, t1option)| t1option)
}
fn main() {
assert_eq!(second_smallest(&[4, 5, 1, 7, 1, 2, 8, 9, 2, 7, 1]), Some(2));
assert_eq!(second_smallest(&[1, 1, 1]), None);
assert_eq!(second_smallest(&[] as &[i32]), None);
}
605デフォルトの名無しさん
2025/02/14(金) 17:55:06.91ID:L6dJMbYJ わけがわからん
アセンブラじゃあるまいし
アセンブラじゃあるまいし
606デフォルトの名無しさん
2025/02/14(金) 18:42:18.21ID:RXjqXFcF わからないのはどのへんなんだろう?
・型がジェネリックになっている点
・代入文がないなど関数型プログラミングになっている点
・パターンマッチングが使われている点
いずれも最近は対応している言語が増えてるような
・型がジェネリックになっている点
・代入文がないなど関数型プログラミングになっている点
・パターンマッチングが使われている点
いずれも最近は対応している言語が増えてるような
607デフォルトの名無しさん
2025/02/14(金) 23:21:45.00ID:bNo2F1oE 可読性の良さから高階関数を使ったメソッドチェーンが一般的になってきたね
マイクロソフトがC#などでLINQ広めたのがきっかけで各言語もその有用性から導入するようになった
マイクロソフトがC#などでLINQ広めたのがきっかけで各言語もその有用性から導入するようになった
608デフォルトの名無しさん
2025/02/14(金) 23:42:29.57ID:PVqLPxMJ お題:ランダムな英文字列が与えられる。隣り合う英文字が同じ大文字だった場合、その間にその大文字の小文字を挿入せよ
In < abcDDefGG
Out > abcDdDefGgG
In < abcDDefGG
Out > abcDdDefGgG
609デフォルトの名無しさん
2025/02/15(土) 00:16:29.67ID:aVKCg5xf >>608 ruby
while 1
s=DATA.gets.chomp
exit if s==""
t=s.gsub(%r|([A-Z])\1|){$1+$1.downcase+$1}
puts "IN < #{s}\nOUT > #{t}"
end
__END__
abcDDefGG
while 1
s=DATA.gets.chomp
exit if s==""
t=s.gsub(%r|([A-Z])\1|){$1+$1.downcase+$1}
puts "IN < #{s}\nOUT > #{t}"
end
__END__
abcDDefGG
610デフォルトの名無しさん
2025/02/15(土) 00:16:34.18ID:f9ERvXXy611デフォルトの名無しさん
2025/02/15(土) 00:28:45.42ID:/PgyVRU9 >>606
正規表現みたい非人間的な書式はやめようぜっての
正規表現みたい非人間的な書式はやめようぜっての
612デフォルトの名無しさん
2025/02/15(土) 00:39:27.81ID:rssRTGdz >>608
PowerShell
function f($s)
{
-join $(
foreach ($i in 0..($s.length - 2)) {
$s[$i]
if ($s[$i] -ne $s[$i + 1]) {continue}
if ($s[$i] -lt [char]"A" -or $s[$i] -gt [char]"Z") {continue}
([string]$s[$i]).ToLower()
}
$s[$i + 1]
)
}
"abcDDefGG", "abcDDDfGG" |% {"$_ → $(f $_)"}
[実行結果]
abcDDefGG → abcDdDefGgG
abcDDDfGG → abcDdDdDfGgG
PowerShell
function f($s)
{
-join $(
foreach ($i in 0..($s.length - 2)) {
$s[$i]
if ($s[$i] -ne $s[$i + 1]) {continue}
if ($s[$i] -lt [char]"A" -or $s[$i] -gt [char]"Z") {continue}
([string]$s[$i]).ToLower()
}
$s[$i + 1]
)
}
"abcDDefGG", "abcDDDfGG" |% {"$_ → $(f $_)"}
[実行結果]
abcDDefGG → abcDdDefGgG
abcDDDfGG → abcDdDdDfGgG
613デフォルトの名無しさん
2025/02/15(土) 01:01:01.24ID:qzrI3kKZ >>608 Rust
fn f(input: &str) -> String {
let mut output = String::new();
let mut pre_uppercase = None;
for char in input.chars() {
if Some(char) == pre_uppercase {
output.push(char.to_ascii_lowercase());
}
output.push(char);
pre_uppercase = char.is_ascii_uppercase().then_some(char);
}
output
}
fn main() {
assert_eq!(f("abcDDefGG"), "abcDdDefGgG");
assert_eq!(f("abcDDDfGG"), "abcDdDdDfGgG");
}
fn f(input: &str) -> String {
let mut output = String::new();
let mut pre_uppercase = None;
for char in input.chars() {
if Some(char) == pre_uppercase {
output.push(char.to_ascii_lowercase());
}
output.push(char);
pre_uppercase = char.is_ascii_uppercase().then_some(char);
}
output
}
fn main() {
assert_eq!(f("abcDDefGG"), "abcDdDefGgG");
assert_eq!(f("abcDDDfGG"), "abcDdDdDfGgG");
}
614デフォルトの名無しさん
2025/02/15(土) 09:21:24.60ID:XILc/8JX615614
2025/02/15(土) 10:02:25.10ID:UI50KRFJ6169
2025/02/15(土) 10:36:35.12ID:1WENuqRv >>608 Perl5、肯定先読みと置換の小文字変換
s/([A-Z])(?=\1)/\1\l\1/g, print for <DATA>;
__DATA__
abcDDefGG
abcDDDefGGG
実行結果
C:\Home>perl 22_608_ins_l.pl
abcDdDefGgG
abcDdDdDefGgGgG
s/([A-Z])(?=\1)/\1\l\1/g, print for <DATA>;
__DATA__
abcDDefGG
abcDDDefGGG
実行結果
C:\Home>perl 22_608_ins_l.pl
abcDdDefGgG
abcDdDdDefGgGgG
618デフォルトの名無しさん
2025/02/15(土) 10:40:34.16ID:+yYMeR0h619615
2025/02/15(土) 13:20:38.24ID:eC3jFbuY >>608 java
https://ideone.com/YfufZz
>>616
_人人人人人人人人人人人人_
> 置換の小文字変換!? <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
勉強になりました
https://ideone.com/YfufZz
>>616
_人人人人人人人人人人人人_
> 置換の小文字変換!? <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
勉強になりました
620デフォルトの名無しさん
2025/02/15(土) 21:05:44.70ID:rssRTGdz >>612は文字列長が1文字の場合にバクがあった。PowerShellの0..-1は空(から)ではなく0, -1になるのが
原因 (Rの0:-1も同様)。修正するには、fの最初に if ($s.length -lt 2) {return $s} を挿入する。
原因 (Rの0:-1も同様)。修正するには、fの最初に if ($s.length -lt 2) {return $s} を挿入する。
621デフォルトの名無しさん
2025/02/15(土) 21:06:37.89ID:rssRTGdz >>561
C++
https://ideone.com/bQBKIM
C#のヌル許容型と同じ挙動のnullable型を自作し、>>593のC#のmin2関数をジェネリック化、
ポインタ参照化して移植した。
https://ideone.com/p2LNC9
593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と
違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。
──
¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
C++
https://ideone.com/bQBKIM
C#のヌル許容型と同じ挙動のnullable型を自作し、>>593のC#のmin2関数をジェネリック化、
ポインタ参照化して移植した。
https://ideone.com/p2LNC9
593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と
違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。
──
¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
622デフォルトの名無しさん
2025/02/15(土) 21:52:48.39ID:qa0m30Tb >>621
最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな
そのコードで入力数列がこうだった場合
vector<int> a = {IntMax - 1, IntMax};
2番目に小さい数として正解のintMaxを返さなければならない
最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな
そのコードで入力数列がこうだった場合
vector<int> a = {IntMax - 1, IntMax};
2番目に小さい数として正解のintMaxを返さなければならない
623デフォルトの名無しさん
2025/02/15(土) 22:00:12.34ID:rssRTGdz624デフォルトの名無しさん
2025/02/15(土) 22:09:09.66ID:qa0m30Tb625デフォルトの名無しさん
2025/02/15(土) 22:24:28.09ID:rssRTGdz >>624
>>621の速度比較テストに>>570のf3も追加
https://ideone.com/scnfdu
ポインタで持つf593との比で、整数で持つf570は6%速いだけ。一方、null許容型のf621は29%も遅い。
最大値が存在する型ではそれを利用する方が良いという結論に変わりはない。
>>621の速度比較テストに>>570のf3も追加
https://ideone.com/scnfdu
ポインタで持つf593との比で、整数で持つf570は6%速いだけ。一方、null許容型のf621は29%も遅い。
最大値が存在する型ではそれを利用する方が良いという結論に変わりはない。
626デフォルトの名無しさん
2025/02/15(土) 22:29:41.23ID:rssRTGdz まあ、同じ値の要素が大量に存在する入力データではf570は遅くなるが、平均的な速度はf570の方が速い。
627デフォルトの名無しさん
2025/02/15(土) 22:31:16.05ID:rssRTGdz >>626はf570じゃなくてf593だった。
628デフォルトの名無しさん
2025/02/15(土) 22:42:01.35ID:v2QOLp/q f593でローカル変数へのポインタを返し得るのは如何かと
629デフォルトの名無しさん
2025/02/15(土) 23:34:59.77ID:rssRTGdz >>628
返しえないでしょ。
返しえないでしょ。
630デフォルトの名無しさん
2025/02/15(土) 23:46:12.83ID:qa0m30Tb >>625
まずnullableのコードがおかしい
例えばoverload(op)のこれ
if (y.isNull) return false; \
return x op y.value; \
Nullだとfals eとなり
opの計算結果次第でもfal seとなり
両者を区別できない
まずnullableのコードがおかしい
例えばoverload(op)のこれ
if (y.isNull) return false; \
return x op y.value; \
Nullだとfals eとなり
opの計算結果次第でもfal seとなり
両者を区別できない
631デフォルトの名無しさん
2025/02/15(土) 23:47:32.80ID:qa0m30Tb >>625
あとvector扱うコードは倫理的に際どいかな
長さ0でないことを調べずに
いきなりint *m1 = &a[0], m2 = &y;
今回は長さ0の時に*m1をアクセスしないから論理的にギリセーフだけど際どい
そのへんのトリッキーさも含めて
(もしあれば)最小値も返す場合
(もしあれば)3番目の最小値も返す場合など
このIntMax方式は破綻すると思う
あとvector扱うコードは倫理的に際どいかな
長さ0でないことを調べずに
いきなりint *m1 = &a[0], m2 = &y;
今回は長さ0の時に*m1をアクセスしないから論理的にギリセーフだけど際どい
そのへんのトリッキーさも含めて
(もしあれば)最小値も返す場合
(もしあれば)3番目の最小値も返す場合など
このIntMax方式は破綻すると思う
632デフォルトの名無しさん
2025/02/15(土) 23:52:31.08ID:rssRTGdz6339
2025/02/16(日) 06:28:07.79ID:GnMUCCm7 qa0m30Tb の回答はどれよ?
634デフォルトの名無しさん
2025/02/16(日) 08:09:49.66ID:v+IcfGmt いるよねえ他人の回答に文句だけつけて自分では回答しないやつ
635デフォルトの名無しさん
2025/02/16(日) 08:16:54.29ID:v+IcfGmt 他人の回答が間違いとなるようにお題を解釈するのは知的なことではないよバカの所業だよ
636デフォルトの名無しさん
2025/02/16(日) 08:20:29.71ID:eNZyrnPC そんなことより>>616のワンライナーがカッコよくてほれぼれする
637デフォルトの名無しさん
2025/02/16(日) 10:58:48.51ID:EXJYkLn8 帰ったと思ったらまたやってんのw
638デフォルトの名無しさん
2025/02/16(日) 15:14:38.18ID:8bpH8MuA コンパイラ警告無視するのが知的な事だと思ってそうだな
6399
2025/02/16(日) 15:45:59.98ID:GnMUCCm7 回答のコードでもって語ってほしいなぁ
640デフォルトの名無しさん
2025/02/17(月) 13:08:08.60ID:lz3iaMcC お題:ランダムな数列が与えられる。隣り合う数字が偶数同士の時、あいだに0を。奇数同士の時は1を挿入し、それ以外は何も挿入しない
In < 123346
Out > 12313406
In < 123346
Out > 12313406
641デフォルトの名無しさん
2025/02/17(月) 13:47:54.59ID:1CKZ5rpi >>640 ruby
DATA.readlines(chomp:1).map{|e|
a=e.split("").map{|f| f.to_i}
(0..a.size-2).each{|n|
a[n]=a[n]*10 if (a[n]%2==0 && a[n+1]%2==0)
a[n+1]=a[n+1]+10 if (a[n]%2==1 && a[n+1]%2==1)}
puts "IN < #{e}\nOUT > #{a.map{|f| f.to_s}.join}"}
__END__
123346
DATA.readlines(chomp:1).map{|e|
a=e.split("").map{|f| f.to_i}
(0..a.size-2).each{|n|
a[n]=a[n]*10 if (a[n]%2==0 && a[n+1]%2==0)
a[n+1]=a[n+1]+10 if (a[n]%2==1 && a[n+1]%2==1)}
puts "IN < #{e}\nOUT > #{a.map{|f| f.to_s}.join}"}
__END__
123346
642デフォルトの名無しさん
2025/02/17(月) 20:02:39.61ID:SzDlV4TD643デフォルトの名無しさん
2025/02/17(月) 20:47:46.22ID:2enU2rA/ >>640
PowerShell (一般的な文字コードを想定)
function f([string]$s)
{
$rprev = 2
-join ([char[]]$s |% {
$r = $_ % 2
if ($r -eq $rprev) {$r}
$rprev = $r
$_
})
}
123346, 12333468, 1, "" |% {"$_ → $(f $_)"}
[実行結果]
123346 → 12313406
12333468 → 123131340608
1 → 1
→
PowerShell (一般的な文字コードを想定)
function f([string]$s)
{
$rprev = 2
-join ([char[]]$s |% {
$r = $_ % 2
if ($r -eq $rprev) {$r}
$rprev = $r
$_
})
}
123346, 12333468, 1, "" |% {"$_ → $(f $_)"}
[実行結果]
123346 → 12313406
12333468 → 123131340608
1 → 1
→
644デフォルトの名無しさん
2025/02/17(月) 20:48:16.10ID:2enU2rA/ 正規表現置換なら、
function f($s)
{
$s -replace "[02468](?=[02468])", "$&0" -replace "[13579](?=[13579])", "$&1"
}
1回で済ますなら、
function f($s)
{
[RegEx]::Replace($s, "[02468](?=[02468])|[13579](?=[13579])", {$_ = $args[0].value[0]; "$_$($_ % 2)"})
}
function f($s)
{
$s -replace "[02468](?=[02468])", "$&0" -replace "[13579](?=[13579])", "$&1"
}
1回で済ますなら、
function f($s)
{
[RegEx]::Replace($s, "[02468](?=[02468])|[13579](?=[13579])", {$_ = $args[0].value[0]; "$_$($_ % 2)"})
}
645デフォルトの名無しさん
2025/02/17(月) 20:58:11.16ID:UxhkW11K >>640 Rust
fn f(input: &[u8]) -> Vec<u8> {
input.windows(2).fold(Vec::new(), |mut vec, w| {
if vec.is_empty() {
vec.push(w[0]);
}
if (w[0] ^ w[1]) & 1 == 0 {
vec.push(w[0] & 1 + b'0');
}
vec.push(w[1]);
vec
})
}
fn main() {
assert_eq!(f(b"123346"), b"12313406");
assert_eq!(f(b"12333468"), b"123131340608");
}
fn f(input: &[u8]) -> Vec<u8> {
input.windows(2).fold(Vec::new(), |mut vec, w| {
if vec.is_empty() {
vec.push(w[0]);
}
if (w[0] ^ w[1]) & 1 == 0 {
vec.push(w[0] & 1 + b'0');
}
vec.push(w[1]);
vec
})
}
fn main() {
assert_eq!(f(b"123346"), b"12313406");
assert_eq!(f(b"12333468"), b"123131340608");
}
646デフォルトの名無しさん
2025/02/18(火) 10:32:01.38ID:Spp0fdd/ >>645
そうやればいいのか、なるほどね
そうやればいいのか、なるほどね
647デフォルトの名無しさん
2025/02/18(火) 17:51:16.96ID:ZRfTlf8i Vecのnewやpushなど普通にcollectに任せる手もあるね
条件付き挿入は汎用にOptionで取捨を示してflat_mapとflattenでも可能
前値など状態を保ちつつ1つにまとめるならfoldでイテレータに流すならscan
一例としてこんな感じ
fn f(input: &[u8]) -> Vec<u8> {
input
.iter()
.scan(None, |pre, &x| {
Some([
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
])
})
.flat_map(|list| list.into_iter().flatten())
.collect()
}
>>640
Rust
条件付き挿入は汎用にOptionで取捨を示してflat_mapとflattenでも可能
前値など状態を保ちつつ1つにまとめるならfoldでイテレータに流すならscan
一例としてこんな感じ
fn f(input: &[u8]) -> Vec<u8> {
input
.iter()
.scan(None, |pre, &x| {
Some([
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
])
})
.flat_map(|list| list.into_iter().flatten())
.collect()
}
>>640
Rust
648デフォルトの名無しさん
2025/02/19(水) 21:30:14.30ID:LKzHskwz >>640
>>643-644の3つのfを上から順にf1, f2, f3とし、長い文字列を引数として呼び出したときの
実行時間を比較すると、
$s = -join (1..10000)
$t = 1..3 |% {(iex "measure-command {f$_ $s}").ticks}
$tmin = ($t | measure -min).minimum
1..3 |% {"f$_`: {0:0.00}倍" -f ($t[$_ - 1] / $tmin)}
[実行結果の一例]
f1: 34.78倍
f2: 1.00倍
f3: 14.93倍
大差でf2 < f3 < f1となった。インタプリタ言語のコード実行は遅いので、処理を自分で
書くほど遅くなり、ライブラリ関数等に丸投げすれば速くなることによる。
https://ideone.com/GVewWL
コンパイラ言語のC#で同様の比較をすると (PowerShellより速いので文字列を長くし、
f1の改良版としてStringBuilder使用のf4を追加した)、当然f4< f1 < f2 < f3になった。
>>643-644の3つのfを上から順にf1, f2, f3とし、長い文字列を引数として呼び出したときの
実行時間を比較すると、
$s = -join (1..10000)
$t = 1..3 |% {(iex "measure-command {f$_ $s}").ticks}
$tmin = ($t | measure -min).minimum
1..3 |% {"f$_`: {0:0.00}倍" -f ($t[$_ - 1] / $tmin)}
[実行結果の一例]
f1: 34.78倍
f2: 1.00倍
f3: 14.93倍
大差でf2 < f3 < f1となった。インタプリタ言語のコード実行は遅いので、処理を自分で
書くほど遅くなり、ライブラリ関数等に丸投げすれば速くなることによる。
https://ideone.com/GVewWL
コンパイラ言語のC#で同様の比較をすると (PowerShellより速いので文字列を長くし、
f1の改良版としてStringBuilder使用のf4を追加した)、当然f4< f1 < f2 < f3になった。
649デフォルトの名無しさん
2025/02/19(水) 21:58:22.55ID:Hs/awmG/ >>647
関数型でタブーの可変な変数宣言してもよいなら、もっと簡単になるね。
fn f(input: &[u8]) -> Vec<u8> {
let mut pre = None;
input
.iter()
.flat_map(|&x| {
[
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
]
.into_iter()
.flatten()
})
.collect()
}
関数型でタブーの可変な変数宣言してもよいなら、もっと簡単になるね。
fn f(input: &[u8]) -> Vec<u8> {
let mut pre = None;
input
.iter()
.flat_map(|&x| {
[
pre.replace(x & 1)
.and_then(|p| (p == x & 1).then_some(p + b'0')),
Some(x),
]
.into_iter()
.flatten()
})
.collect()
}
650デフォルトの名無しさん
2025/02/20(木) 23:25:43.81ID:Zfo8kSSQ mutableの使用は必要最小限が望ましいが
mutableを使えない言語は実用的ではない
mutableを使えない言語は実用的ではない
651 警備員[Lv.21]
2025/02/22(土) 15:11:12.54ID:nEyoRU5r652 警備員[Lv.21]
2025/02/22(土) 15:42:54.65ID:nEyoRU5r653 警備員[Lv.21]
2025/02/22(土) 15:53:04.03ID:nEyoRU5r654デフォルトの名無しさん
2025/02/22(土) 23:33:07.08ID:k7PDvk0j655 警備員[Lv.21]
2025/02/24(月) 18:11:14.44ID:Ikw9MrIX656デフォルトの名無しさん
2025/02/26(水) 21:33:47.93ID:rkiIsmEI お題: Python の int.bit_count()
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
657デフォルトの名無しさん
2025/02/26(水) 23:29:03.38ID:Gl9HHMVG658デフォルトの名無しさん
2025/02/27(木) 00:23:41.10ID:TOGelnHV >>656
Rust
fn bit_count(x: i64) -> usize {
const MAGIC_1: u64 = 0x5555555555555555; // 0101..0101
const MAGIC_2: u64 = 0x3333333333333333; // 0011..0011
const MAGIC_3: u64 = 0x0f0f0f0f0f0f0f0f;
const MAGIC_4: u64 = 0x00ff00ff00ff00ff;
const MAGIC_5: u64 = 0x0000ffff0000ffff;
const MAGIC_6: u64 = 0x00000000ffffffff;
let x = x.unsigned_abs();
let x = (x & MAGIC_1) + ((x >> 1) & MAGIC_1);
let x = (x & MAGIC_2) + ((x >> 2) & MAGIC_2);
let x = (x & MAGIC_3) + ((x >> 4) & MAGIC_3);
let x = (x & MAGIC_4) + ((x >> 8) & MAGIC_4);
let x = (x & MAGIC_5) + ((x >> 16) & MAGIC_5);
let x = (x & MAGIC_6) + ((x >> 32) & MAGIC_6);
x as usize
}
fn main() {
assert_eq!(bit_count(65535), 16);
assert_eq!(bit_count(15), 4);
assert_eq!(bit_count(6), 2);
assert_eq!(bit_count(1), 1);
assert_eq!(bit_count(0), 0);
assert_eq!(bit_count(-1), 1);
assert_eq!(bit_count(-6), 2);
assert_eq!(bit_count(-15), 4);
assert_eq!(bit_count(-65535), 16);
}
Rust
fn bit_count(x: i64) -> usize {
const MAGIC_1: u64 = 0x5555555555555555; // 0101..0101
const MAGIC_2: u64 = 0x3333333333333333; // 0011..0011
const MAGIC_3: u64 = 0x0f0f0f0f0f0f0f0f;
const MAGIC_4: u64 = 0x00ff00ff00ff00ff;
const MAGIC_5: u64 = 0x0000ffff0000ffff;
const MAGIC_6: u64 = 0x00000000ffffffff;
let x = x.unsigned_abs();
let x = (x & MAGIC_1) + ((x >> 1) & MAGIC_1);
let x = (x & MAGIC_2) + ((x >> 2) & MAGIC_2);
let x = (x & MAGIC_3) + ((x >> 4) & MAGIC_3);
let x = (x & MAGIC_4) + ((x >> 8) & MAGIC_4);
let x = (x & MAGIC_5) + ((x >> 16) & MAGIC_5);
let x = (x & MAGIC_6) + ((x >> 32) & MAGIC_6);
x as usize
}
fn main() {
assert_eq!(bit_count(65535), 16);
assert_eq!(bit_count(15), 4);
assert_eq!(bit_count(6), 2);
assert_eq!(bit_count(1), 1);
assert_eq!(bit_count(0), 0);
assert_eq!(bit_count(-1), 1);
assert_eq!(bit_count(-6), 2);
assert_eq!(bit_count(-15), 4);
assert_eq!(bit_count(-65535), 16);
}
659デフォルトの名無しさん
2025/02/27(木) 08:26:19.30ID:LSRTW28H >>656 Rust
trait BitCount {
fn bit_count(&self) -> usize;
}
impl BitCount for i32 {
fn bit_count(&self) -> usize {
self.unsigned_abs().count_ones() as usize
}
}
use num::{BigInt, One};
impl BitCount for BigInt {
fn bit_count(&self) -> usize {
self.iter_u64_digits().map(|x| x.count_ones() as usize).sum()
}
}
fn main() {
for (input, output) in [(65535, 16), (15, 4), (6, 2), (1, 1), (0, 0), (-1, 1), (-6, 2), (-15, 4), (-65535, 16)] {
assert_eq!(input.bit_count(), output);
}
assert_eq!(BigInt::from(-1).bit_count(), 1);
assert_eq!((BigInt::from(2).pow(1_000_000_000) - BigInt::one()).bit_count(), 1_000_000_000);
}
trait BitCount {
fn bit_count(&self) -> usize;
}
impl BitCount for i32 {
fn bit_count(&self) -> usize {
self.unsigned_abs().count_ones() as usize
}
}
use num::{BigInt, One};
impl BitCount for BigInt {
fn bit_count(&self) -> usize {
self.iter_u64_digits().map(|x| x.count_ones() as usize).sum()
}
}
fn main() {
for (input, output) in [(65535, 16), (15, 4), (6, 2), (1, 1), (0, 0), (-1, 1), (-6, 2), (-15, 4), (-65535, 16)] {
assert_eq!(input.bit_count(), output);
}
assert_eq!(BigInt::from(-1).bit_count(), 1);
assert_eq!((BigInt::from(2).pow(1_000_000_000) - BigInt::one()).bit_count(), 1_000_000_000);
}
660デフォルトの名無しさん
2025/02/28(金) 01:30:55.49ID:1HSOHgVq intは処理単位のことなんだけどな
何ビットで表現できるかという意味ではない
何ビットで表現できるかという意味ではない
6619
2025/02/28(金) 03:12:43.15ID:MEvV9q87 負の場合に表現可能なビット数を配慮しないとPython の int.bit_count()と同じ結果にならないんジャマイカじゃまいか
たぶんPythonの整数がbigintのせいだとおもう
絶対値とってpopcountとかやらないと意外とあれこれ書いてプチ長めのコードになりそうなおかん
たぶんPythonの整数がbigintのせいだとおもう
絶対値とってpopcountとかやらないと意外とあれこれ書いてプチ長めのコードになりそうなおかん
662デフォルトの名無しさん
2025/02/28(金) 23:07:16.17ID:SRu+xdWw よく見たらみんな絶対値をとったりbigintを使ったりしてるな
663デフォルトの名無しさん
2025/03/01(土) 20:18:20.34ID:H8RpZRUP >>656
PowerShellのBigIntなら、
$b = @(0)
1..8 |% {$b += $b |% {$_ + 1}}
function bit_count([BigInt]$n)
{
($b[[BigInt]::Abs($n).ToByteArray()] | measure -sum).Sum
}
65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% {
"$_ → $(bit_count $_)"
}
[実行結果]
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043 → 159
PowerShellのBigIntなら、
$b = @(0)
1..8 |% {$b += $b |% {$_ + 1}}
function bit_count([BigInt]$n)
{
($b[[BigInt]::Abs($n).ToByteArray()] | measure -sum).Sum
}
65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% {
"$_ → $(bit_count $_)"
}
[実行結果]
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043 → 159
664デフォルトの名無しさん
2025/03/01(土) 20:19:24.06ID:H8RpZRUP お題:1からnまでの自然数のビット単位での総排他的論理和1 ⊕ 2 ⊕ 3 ⊕ … ⊕ nを求める
関数を作り、n = 123456789, 12345678901234567890のときの値を表示せよ。
関数を作り、n = 123456789, 12345678901234567890のときの値を表示せよ。
665デフォルトの名無しさん
2025/03/01(土) 21:19:28.22ID:5VrbV50/ A003815かな
666デフォルトの名無しさん
2025/03/01(土) 21:32:49.43ID:UfbLQAky 数学の試験で中間式を省いて解答だけ書くタイプw
667デフォルトの名無しさん
2025/03/01(土) 23:41:19.76ID:+HRoh0yF まあ数列の問題ならOEISを見てみるよな
668デフォルトの名無しさん
2025/03/02(日) 01:21:29.93ID:xdmIFouH >> 664 Rust
fn f(n: u64) -> u64 {
// f(n) = 1⊕2⊕3⊕...⊕n とすると (2k)⊕(2k+1)=1 であるから 1⊕1=0 より
// f(4k+1) = (4k+1)⊕(4k)⊕(4k-1)⊕(4k-2)⊕f(4k-3) = f(4(k-1)+1) = ... = f(1) = 1
// f(4k+3) = (4k+3)⊕(4k+2)⊕f(4k+1) = 0
// f(4k) = (4k)⊕f(4k-1) = 4k
// f(4k+2) = (4k+2)⊕f(4k+1) = (4k+2)⊕1 = 4k+3
match n % 4 {
0 => n,
1 => 1,
2 => n + 1,
3 => 0,
_ => unreachable!(),
}
}
fn main() {
for n in [123456789, 12345678901234567890] {
println!("f({n}) = {fn}", fn = f(n));
}
}
出力
f(123456789) = 1
f(12345678901234567890) = 12345678901234567891
fn f(n: u64) -> u64 {
// f(n) = 1⊕2⊕3⊕...⊕n とすると (2k)⊕(2k+1)=1 であるから 1⊕1=0 より
// f(4k+1) = (4k+1)⊕(4k)⊕(4k-1)⊕(4k-2)⊕f(4k-3) = f(4(k-1)+1) = ... = f(1) = 1
// f(4k+3) = (4k+3)⊕(4k+2)⊕f(4k+1) = 0
// f(4k) = (4k)⊕f(4k-1) = 4k
// f(4k+2) = (4k+2)⊕f(4k+1) = (4k+2)⊕1 = 4k+3
match n % 4 {
0 => n,
1 => 1,
2 => n + 1,
3 => 0,
_ => unreachable!(),
}
}
fn main() {
for n in [123456789, 12345678901234567890] {
println!("f({n}) = {fn}", fn = f(n));
}
}
出力
f(123456789) = 1
f(12345678901234567890) = 12345678901234567891
669デフォルトの名無しさん
2025/03/11(火) 21:18:30.26ID:Qmk3F8/1670デフォルトの名無しさん
2025/03/13(木) 20:35:03.45ID:QP/8WHEA お題:数列が入力される。元の数列に逆順にした数列を減算したときの値を出力せよ
In < 12345
OUt > -41976 (12345 - 54321)
In < 12345
OUt > -41976 (12345 - 54321)
671デフォルトの名無しさん
2025/03/13(木) 21:13:53.77ID:SRpNsp20 >>670
PowerShell
function f([BigInt]$n)
{
$c = [char[]][string]$n
$n - [BigInt]-join $c[-1..-$c.length]
}
12345, [BigInt]::Pow(12, 34) |% {"$_ → $(f $_)"}
[実行結果]
12345 → -41976
4922235242952026704037113243122008064 → 314233029528909439273950854852378624
PowerShell
function f([BigInt]$n)
{
$c = [char[]][string]$n
$n - [BigInt]-join $c[-1..-$c.length]
}
12345, [BigInt]::Pow(12, 34) |% {"$_ → $(f $_)"}
[実行結果]
12345 → -41976
4922235242952026704037113243122008064 → 314233029528909439273950854852378624
672デフォルトの名無しさん
2025/03/14(金) 02:10:51.25ID:wjeVVi0w >>671
12の34乗は合っているけどその後の差がおかしくない?
4922235242952026704037113243122008064 から
4608002213423117304076202592425322294 を引いて
314233029528909399960910650696685770 が正解のところ
314233029528909439273950854852378624 となっているよ
正解は1の位が「4 - 4 = 0」になるはずだよね
>>670 Rust 逆文字列を生成する版
use num::BigInt;
fn odai(input: &str) -> Option<String> {
let rev_input: String = input.chars().rev().collect();
let x: BigInt = input.parse().ok()?;
let y: BigInt = rev_input.parse().ok()?;
Some((x - y).to_string())
}
fn main() {
assert_eq!(odai("12345"), Some("-41976".to_string()));
assert_eq!(odai("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".to_string()));
}
12の34乗は合っているけどその後の差がおかしくない?
4922235242952026704037113243122008064 から
4608002213423117304076202592425322294 を引いて
314233029528909399960910650696685770 が正解のところ
314233029528909439273950854852378624 となっているよ
正解は1の位が「4 - 4 = 0」になるはずだよね
>>670 Rust 逆文字列を生成する版
use num::BigInt;
fn odai(input: &str) -> Option<String> {
let rev_input: String = input.chars().rev().collect();
let x: BigInt = input.parse().ok()?;
let y: BigInt = rev_input.parse().ok()?;
Some((x - y).to_string())
}
fn main() {
assert_eq!(odai("12345"), Some("-41976".to_string()));
assert_eq!(odai("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".to_string()));
}
673デフォルトの名無しさん
2025/03/14(金) 02:30:00.58ID:wjeVVi0w >>670 Rust 逆文字列を生成しない&整数ジェネリック版
use num::{BigInt, CheckedAdd, CheckedMul, CheckedSub, FromPrimitive};
fn chars_to_integer<X>(input: impl Iterator<Item = char>) -> Option<X>
where X: FromPrimitive + CheckedMul + CheckedAdd,
{
let (zero, ten) = (X::from_u32(0).unwrap(), X::from_u32(10).unwrap());
input
.map(|c| X::from_u32(c.to_digit(10)?))
.try_fold(zero, |acc, x| acc.checked_mul(&ten)?.checked_add(&x?))
}
fn odai<X>(input: &str) -> Option<X>
where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub,
{
let x = chars_to_integer::<X>(input.chars())?;
let y = chars_to_integer::<X>(input.chars().rev())?;
x.checked_sub(&y)
}
fn main() {
assert_eq!(odai::<i64>("12345"), Some(-41976));
assert_eq!(odai::<BigInt>("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".parse::<BigInt>().unwrap()));
}
use num::{BigInt, CheckedAdd, CheckedMul, CheckedSub, FromPrimitive};
fn chars_to_integer<X>(input: impl Iterator<Item = char>) -> Option<X>
where X: FromPrimitive + CheckedMul + CheckedAdd,
{
let (zero, ten) = (X::from_u32(0).unwrap(), X::from_u32(10).unwrap());
input
.map(|c| X::from_u32(c.to_digit(10)?))
.try_fold(zero, |acc, x| acc.checked_mul(&ten)?.checked_add(&x?))
}
fn odai<X>(input: &str) -> Option<X>
where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub,
{
let x = chars_to_integer::<X>(input.chars())?;
let y = chars_to_integer::<X>(input.chars().rev())?;
x.checked_sub(&y)
}
fn main() {
assert_eq!(odai::<i64>("12345"), Some(-41976));
assert_eq!(odai::<BigInt>("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".parse::<BigInt>().unwrap()));
}
674デフォルトの名無しさん
2025/03/14(金) 20:19:17.17ID:Imul3vYR675デフォルトの名無しさん
2025/03/14(金) 21:36:16.55ID:pC/XkvI4 数列の長さは指定されていない。
10 INPUT "0-9";I
20 PRINT "0"
30 END
10 INPUT "0-9";I
20 PRINT "0"
30 END
676デフォルトの名無しさん
2025/03/15(土) 19:04:58.28ID:GCbQqql0 >>673
これらのwhere~は何という名称ですか?
> where X: FromPrimitive + CheckedMul + CheckedAdd,
> where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub,
これらのwhere~は何という名称ですか?
> where X: FromPrimitive + CheckedMul + CheckedAdd,
> where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub,
6779
2025/03/16(日) 00:12:31.12ID:8GU62dKf >>670 Perl5
use bigint;
print $_ - reverse($_), "\n" for 12345, 4922235242952026704037113243122008064;
実行結果
$ perl 22_670_reverse_minus_biginit.pl
-41976
314233029528909399960910650696685770
use bigint;
print $_ - reverse($_), "\n" for 12345, 4922235242952026704037113243122008064;
実行結果
$ perl 22_670_reverse_minus_biginit.pl
-41976
314233029528909399960910650696685770
678 警備員[Lv.23]
2025/03/16(日) 17:25:01.96ID:wlGuyFJ7679デフォルトの名無しさん
2025/03/16(日) 22:59:41.54ID:wtk+s/+W >>670
PowerShellでジェネリック化(もどき?)
途中式や結果が入力値の型で表せない場合は$nullを返す。
function f($n)
{
$T = $n.GetType()
$s = [string]$n
try {
$n - $T::Parse(-join $s[-1..-$s.Length]) -as $T
} catch {
$null
}
}
12345, [BigInt]::Pow(12, 34), [byte]12, [sbyte]12, [sbyte]123, -123 |% {
"[$($_.GetType())]$_ → $(f $_)"
}
-- 実行結果 --
[int]12345 → -41976
[bigint]4922235242952026704037113243122008064 → 314233029528909399960910650696685770
[byte]12 →
[sbyte]12 → -9
[sbyte]123 →
[int]-123 →
PowerShellでジェネリック化(もどき?)
途中式や結果が入力値の型で表せない場合は$nullを返す。
function f($n)
{
$T = $n.GetType()
$s = [string]$n
try {
$n - $T::Parse(-join $s[-1..-$s.Length]) -as $T
} catch {
$null
}
}
12345, [BigInt]::Pow(12, 34), [byte]12, [sbyte]12, [sbyte]123, -123 |% {
"[$($_.GetType())]$_ → $(f $_)"
}
-- 実行結果 --
[int]12345 → -41976
[bigint]4922235242952026704037113243122008064 → 314233029528909399960910650696685770
[byte]12 →
[sbyte]12 → -9
[sbyte]123 →
[int]-123 →
680デフォルトの名無しさん
2025/03/16(日) 23:01:39.52ID:6JX6mCC/ お題:36桁以下の負でない整数で16進表記が10進表記の部分文字列であるものをすべて求めて下さい。
(例)
・1の16進表記1は10進表記1の部分文字列です
・123の16進表記7Bは10進表記123の部分文字列ではありません
・357440の16進表記57440は10進表記357440の部分文字列です
※遅い言語では15桁以下で解いても構いません
(例)
・1の16進表記1は10進表記1の部分文字列です
・123の16進表記7Bは10進表記123の部分文字列ではありません
・357440の16進表記57440は10進表記357440の部分文字列です
※遅い言語では15桁以下で解いても構いません
681デフォルトの名無しさん
2025/03/16(日) 23:59:39.36ID:qWmLE6LP6829
2025/03/18(火) 16:05:22.66ID:GYPHuJM6 >>680 Perl5、ナイーブな処理方式だと時間がかかり過ぎで最後まで解けないおそれがあるが、なかなかほかに回答者が現れないし、
出現傾向を見るだけでも…と思って、16進数の桁にa-fの現れる値をskipするナイーブな処理方法で。
$m = sprintf '%x', 9 x 15; # 10進で15桁まで
print $m . ' '. hex($m)."\n";
$m =~ s/[a-f]/9/g;
print "1 .. 0x$m\n";
print "".localtime."\n";
for (1 .. $m) {
$d = hex($_);
if (0 <= index($d, $_)) {
$n++;
print "$d, 0x$_\n";
}
}
print "".localtime."\n";
print "$n count found";
出現傾向を見るだけでも…と思って、16進数の桁にa-fの現れる値をskipするナイーブな処理方法で。
$m = sprintf '%x', 9 x 15; # 10進で15桁まで
print $m . ' '. hex($m)."\n";
$m =~ s/[a-f]/9/g;
print "1 .. 0x$m\n";
print "".localtime."\n";
for (1 .. $m) {
$d = hex($_);
if (0 <= index($d, $_)) {
$n++;
print "$d, 0x$_\n";
}
}
print "".localtime."\n";
print "$n count found";
6839
2025/03/18(火) 16:07:07.28ID:GYPHuJM6 >>682
実行結果 (改行数を減らすため適度につなげてます)
$ perl 22_680_hex_substr_1.pl
38d7ea4c67fff 999999999999999
1 .. 0x3897994967999
Tue Mar 18 09:15:31 2025
1, 0x1 2, 0x2 3, 0x3 4, 0x4 5, 0x5 6, 0x6 7, 0x7 8, 0x8 9, 0x9
357440, 0x57440 357441, 0x57441 357442, 0x57442 357443, 0x57443 357444, 0x57444
357445, 0x57445 357446, 0x57446 357447, 0x57447 357448, 0x57448 357449, 0x57449
1079653, 0x107965 1081713, 0x108171 1122966, 0x112296 1123079, 0x112307 1123080, 0x112308
2246166, 0x224616 3369253, 0x336925 3371313, 0x337131 3412566, 0x341256
4494393, 0x449439 4494400, 0x449440 4535653, 0x453565
5658739, 0x565873 5658740, 0x565874 5660793, 0x566079 5660800, 0x566080 5702166, 0x570216
6783879, 0x678387 6783880, 0x678388 6784000, 0x678400
6825253, 0x682525 7948339, 0x794833 7948340, 0x794834 7950393, 0x795039 7950400, 0x795040
2182104640, 0x82104640 2182104641, 0x82104641 2182104642, 0x82104642 2182104643, 0x82104643 2182104644, 0x82104644
2182104645, 0x82104645 2182104646, 0x82104646 2182104647, 0x82104647 2182104648, 0x82104648 2182104649, 0x82104649
1263629042727, 0x12636290427 1307655353654, 0x13076553536 2573583194436, 0x25735831944 2617616245848, 0x26176162458
3330782168640, 0x30782168640 3330782168641, 0x30782168641 3330782168642, 0x30782168642 3330782168643, 0x30782168643
3330782168644, 0x30782168644 3330782168645, 0x30782168645 3330782168646, 0x30782168646 3330782168647, 0x30782168647
3330782168648, 0x30782168648 3330782168649, 0x30782168649 3883544086630, 0x38835440866 3927569962533, 0x39275699625
3927570397557, 0x39275703975
Core i7-8559U で6時間ほど実行してここまで高々13桁。
やはり想定通り気の利いた高速解放が要りますテヘペロ。
実行結果 (改行数を減らすため適度につなげてます)
$ perl 22_680_hex_substr_1.pl
38d7ea4c67fff 999999999999999
1 .. 0x3897994967999
Tue Mar 18 09:15:31 2025
1, 0x1 2, 0x2 3, 0x3 4, 0x4 5, 0x5 6, 0x6 7, 0x7 8, 0x8 9, 0x9
357440, 0x57440 357441, 0x57441 357442, 0x57442 357443, 0x57443 357444, 0x57444
357445, 0x57445 357446, 0x57446 357447, 0x57447 357448, 0x57448 357449, 0x57449
1079653, 0x107965 1081713, 0x108171 1122966, 0x112296 1123079, 0x112307 1123080, 0x112308
2246166, 0x224616 3369253, 0x336925 3371313, 0x337131 3412566, 0x341256
4494393, 0x449439 4494400, 0x449440 4535653, 0x453565
5658739, 0x565873 5658740, 0x565874 5660793, 0x566079 5660800, 0x566080 5702166, 0x570216
6783879, 0x678387 6783880, 0x678388 6784000, 0x678400
6825253, 0x682525 7948339, 0x794833 7948340, 0x794834 7950393, 0x795039 7950400, 0x795040
2182104640, 0x82104640 2182104641, 0x82104641 2182104642, 0x82104642 2182104643, 0x82104643 2182104644, 0x82104644
2182104645, 0x82104645 2182104646, 0x82104646 2182104647, 0x82104647 2182104648, 0x82104648 2182104649, 0x82104649
1263629042727, 0x12636290427 1307655353654, 0x13076553536 2573583194436, 0x25735831944 2617616245848, 0x26176162458
3330782168640, 0x30782168640 3330782168641, 0x30782168641 3330782168642, 0x30782168642 3330782168643, 0x30782168643
3330782168644, 0x30782168644 3330782168645, 0x30782168645 3330782168646, 0x30782168646 3330782168647, 0x30782168647
3330782168648, 0x30782168648 3330782168649, 0x30782168649 3883544086630, 0x38835440866 3927569962533, 0x39275699625
3927570397557, 0x39275703975
Core i7-8559U で6時間ほど実行してここまで高々13桁。
やはり想定通り気の利いた高速解放が要りますテヘペロ。
684デフォルトの名無しさん
2025/03/18(火) 16:35:06.57ID:lVLkTjWA685デフォルトの名無しさん
2025/03/18(火) 21:39:06.90ID:9hwr8+MV >>683
14桁と15桁には該当値がないので、そこに列挙された数に0を追加した72個が15桁以下の答で
結果的には合っているよ。
出題時に作ったC++プログラムはideoneで36桁以下を0.43秒で完了した。これをPowerShellに
移植したプログラムは15桁以下を0.5秒未満、36桁以下を数分で完了した。
その後、改良したC++プログラムではideoneで36桁以下を0.23秒に短縮できた。
14桁と15桁には該当値がないので、そこに列挙された数に0を追加した72個が15桁以下の答で
結果的には合っているよ。
出題時に作ったC++プログラムはideoneで36桁以下を0.43秒で完了した。これをPowerShellに
移植したプログラムは15桁以下を0.5秒未満、36桁以下を数分で完了した。
その後、改良したC++プログラムではideoneで36桁以下を0.23秒に短縮できた。
6869
2025/03/18(火) 21:41:48.53ID:GYPHuJM6 >>683
>やはり想定通り気の利いた高速解放が要りますテヘペロ。
そのヒントになるかいな…?
・16進数を10進数に変換すると桁数は同じまたは高々1桁増えるのみ(だともう、証明略)
・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明
・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる
>やはり想定通り気の利いた高速解放が要りますテヘペロ。
そのヒントになるかいな…?
・16進数を10進数に変換すると桁数は同じまたは高々1桁増えるのみ(だともう、証明略)
・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明
・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる
6889
2025/03/18(火) 21:52:10.05ID:GYPHuJM6689684
2025/03/19(水) 06:18:11.44ID:khMnA4jS ようやく題意は理解したけど良い解法が思いつかない
ちなみに36桁以下だと答えはいくつありますか?
ちなみに36桁以下だと答えはいくつありますか?
690デフォルトの名無しさん
2025/03/19(水) 08:44:27.79ID:khMnA4jS >>680
ruby 遅いけど
i=0
while i<10**16
if %r|[a-f]|=~i.to_s(16)
i=i.to_s(16).gsub(%r|[a-f].*|){|e| e.gsub(%r|.|,"f")}.hex
else
puts "#{i},0x#{i.to_s(16)}" if %r|#{i.to_s(16)}|=~i.to_s
end
i+=1
end
ruby 遅いけど
i=0
while i<10**16
if %r|[a-f]|=~i.to_s(16)
i=i.to_s(16).gsub(%r|[a-f].*|){|e| e.gsub(%r|.|,"f")}.hex
else
puts "#{i},0x#{i.to_s(16)}" if %r|#{i.to_s(16)}|=~i.to_s
end
i+=1
end
6919
2025/03/19(水) 16:33:58.47ID:kDrq13vm >>686
> ・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明
大間違い。16進数と10進数で桁数が同じ値のうち、一桁のものは、16進も10審も同じだった…orz
結局、高速解放はあるんだろうか?
あるいはコラッツ予想みたいに「無いかもしれない」類の、考えるだけ無駄な問題なのだろうか?
> ・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明
大間違い。16進数と10進数で桁数が同じ値のうち、一桁のものは、16進も10審も同じだった…orz
結局、高速解放はあるんだろうか?
あるいはコラッツ予想みたいに「無いかもしれない」類の、考えるだけ無駄な問題なのだろうか?
692デフォルトの名無しさん
2025/03/19(水) 21:08:24.40ID:VtmjGkS9693デフォルトの名無しさん
2025/03/19(水) 22:39:07.36ID:P0JLFopv お題:単位分数のエジプト風分解(2進数風味)
1/aを、1/a=1/b+c/dを満たす1/bとc/dに分解する。
aは1以上の整数とする。
c, dは整数とし、bは2の整べき乗(1, 2, 4,...)とする。
c/dは絶対値が最小である事(負数であってもよい)。
例:
1/3→1/4+1/12 : b=4, c=1, d=12
1/7→1/8+1/56 : b=8, c=1, d=56
1/9→1/8-1/72 : b=8, c=-1, d=72(c=1, d=-72も可)
1/13→1/16+3/208 : b=16, c=3, d=288
1/60→1/64+1/960 : b=64, c=1, d=960
1/aを、1/a=1/b+c/dを満たす1/bとc/dに分解する。
aは1以上の整数とする。
c, dは整数とし、bは2の整べき乗(1, 2, 4,...)とする。
c/dは絶対値が最小である事(負数であってもよい)。
例:
1/3→1/4+1/12 : b=4, c=1, d=12
1/7→1/8+1/56 : b=8, c=1, d=56
1/9→1/8-1/72 : b=8, c=-1, d=72(c=1, d=-72も可)
1/13→1/16+3/208 : b=16, c=3, d=288
1/60→1/64+1/960 : b=64, c=1, d=960
694693
2025/03/19(水) 22:42:43.02ID:P0JLFopv aは2以上の整数とする。
に訂正します。
に訂正します。
695デフォルトの名無しさん
2025/03/19(水) 23:16:25.83ID:G4dDQ6P7696デフォルトの名無しさん
2025/03/20(木) 08:21:38.87ID:6IEA4H0O >>693 Rust
fn f(a: i64) -> String {
let b = (a as u64).next_power_of_two() as i64;
let b = if 3 * a > 2 * b { b } else { b >> 1 };
let (c, d) = (b - a, a * b);
let shift = c.trailing_zeros().min(d.trailing_zeros());
let (c, d) = (c >> shift, d >> shift);
if a == b {
format!("1/{a}=1/{b}")
} else {
format!("1/{a}=1/{b}{c:+}/{d}")
}
}
fn main() {
assert_eq!("1/3=1/4+1/12", f(3));
assert_eq!("1/7=1/8+1/56", f(7));
assert_eq!("1/9=1/8-1/72", f(9));
assert_eq!("1/13=1/16+3/208", f(13));
assert_eq!("1/60=1/64+1/960", f(60));
assert_eq!("1/64=1/64", f(64));
assert_eq!("1/6718464=1/8388608+1631/55037657088", f(6718464));
assert_eq!("1/123456789=1/134217728+10760939/16570089725755392", f(123456789));
}
fn f(a: i64) -> String {
let b = (a as u64).next_power_of_two() as i64;
let b = if 3 * a > 2 * b { b } else { b >> 1 };
let (c, d) = (b - a, a * b);
let shift = c.trailing_zeros().min(d.trailing_zeros());
let (c, d) = (c >> shift, d >> shift);
if a == b {
format!("1/{a}=1/{b}")
} else {
format!("1/{a}=1/{b}{c:+}/{d}")
}
}
fn main() {
assert_eq!("1/3=1/4+1/12", f(3));
assert_eq!("1/7=1/8+1/56", f(7));
assert_eq!("1/9=1/8-1/72", f(9));
assert_eq!("1/13=1/16+3/208", f(13));
assert_eq!("1/60=1/64+1/960", f(60));
assert_eq!("1/64=1/64", f(64));
assert_eq!("1/6718464=1/8388608+1631/55037657088", f(6718464));
assert_eq!("1/123456789=1/134217728+10760939/16570089725755392", f(123456789));
}
697デフォルトの名無しさん
2025/03/21(金) 12:56:29.73ID:CgJbZEAu >>680 Rust
fn odai_680() -> Vec<i128> {
let mut answer = vec![0];
let n_max = (0..).find(|&n| pow16(n + 1) > pow10(36)).unwrap();
for s in (0..).take_while(|&s| pow16(n_max) >= pow10(n_max + s + 1)) {
let c = (0..=n_max).map(|i| pow16(i) - pow10(i + s)).collect::<Vec<_>>();
let rmax = c.iter().scan(0, |s, &c| { *s += if c > 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let rmin = c.iter().scan(0, |s, &c| { *s += if c < 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let (mut i, mut n, mut d, mut ct) = (0, 1, vec![0; c.len()], vec![0; c.len() + 1]);
loop {
d[i] += 1;
if d[i] < 10 {
let m = pow10(n as u32 + s); ct[i] = c[i] * d[i] + ct[i+1];
if i == 0 {
if ct[0] >= 0 && ct[0] % m < pow10(s) { answer.push(d.iter().take(n).rev().fold(0, |sum, &d| sum * 16 + d)) }
} else {
let (max, min) = (ct[i] + rmax[i-1], ct[i] + rmin[i-1]);
if max >= 0 && (max - min > m || pow10(s) > min % m || min % m > max % m) { i -= 1; }
}
} else { d[i] = -1; i += 1; if i == n { if n == d.len() { break; } n += 1; } }
}
}
answer.sort(); answer
}
fn odai_680() -> Vec<i128> {
let mut answer = vec![0];
let n_max = (0..).find(|&n| pow16(n + 1) > pow10(36)).unwrap();
for s in (0..).take_while(|&s| pow16(n_max) >= pow10(n_max + s + 1)) {
let c = (0..=n_max).map(|i| pow16(i) - pow10(i + s)).collect::<Vec<_>>();
let rmax = c.iter().scan(0, |s, &c| { *s += if c > 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let rmin = c.iter().scan(0, |s, &c| { *s += if c < 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let (mut i, mut n, mut d, mut ct) = (0, 1, vec![0; c.len()], vec![0; c.len() + 1]);
loop {
d[i] += 1;
if d[i] < 10 {
let m = pow10(n as u32 + s); ct[i] = c[i] * d[i] + ct[i+1];
if i == 0 {
if ct[0] >= 0 && ct[0] % m < pow10(s) { answer.push(d.iter().take(n).rev().fold(0, |sum, &d| sum * 16 + d)) }
} else {
let (max, min) = (ct[i] + rmax[i-1], ct[i] + rmin[i-1]);
if max >= 0 && (max - min > m || pow10(s) > min % m || min % m > max % m) { i -= 1; }
}
} else { d[i] = -1; i += 1; if i == n { if n == d.len() { break; } n += 1; } }
}
}
answer.sort(); answer
}
698デフォルトの名無しさん
2025/03/21(金) 12:58:11.47ID:CgJbZEAu >>697
// 略記
fn pow16(x: u32) -> i128 { 16_i128.pow(x) }
fn pow10(x: u32) -> i128 { 10_i128.pow(x) }
// 結果検証
fn main() {
let answer = odai_680();
assert_eq!(167, answer.len());
for &a in &answer {
assert!(a.to_string().contains(&format!("{a:x}")));
}
assert_eq!(0, answer[0]);
assert_eq!(1, answer[1]);
assert_eq!(357440, answer[10]);
assert_eq!(2182104649, answer[54]);
assert_eq!(3927570397557, answer[71]);
assert_eq!(38135630558262267902210, answer[99]);
assert_eq!(331052794565713975838768757043267, answer[152]);
assert_eq!(697786638998562641695629924526065234, answer[answer.len() - 1]);
}
// 略記
fn pow16(x: u32) -> i128 { 16_i128.pow(x) }
fn pow10(x: u32) -> i128 { 10_i128.pow(x) }
// 結果検証
fn main() {
let answer = odai_680();
assert_eq!(167, answer.len());
for &a in &answer {
assert!(a.to_string().contains(&format!("{a:x}")));
}
assert_eq!(0, answer[0]);
assert_eq!(1, answer[1]);
assert_eq!(357440, answer[10]);
assert_eq!(2182104649, answer[54]);
assert_eq!(3927570397557, answer[71]);
assert_eq!(38135630558262267902210, answer[99]);
assert_eq!(331052794565713975838768757043267, answer[152]);
assert_eq!(697786638998562641695629924526065234, answer[answer.len() - 1]);
}
699デフォルトの名無しさん
2025/03/21(金) 20:49:29.98ID:uwhksDTb700デフォルトの名無しさん
2025/03/23(日) 23:00:51.13ID:pi1bImlR >>680から1週間経ったので解答例を掲載
>>685を書いたときに作ってあった2つのC++プログラム
https://ideone.com/KID2jR
https://ideone.com/ysdd6b
1番目ではsolve関数の再帰呼び出しの対象とするx[p]の下限と上限を線形探索するが、
2番目では二分探索する。要素数10では二分探索の効果は薄いと思いきや、大分速くなった。
2番目を読み返していたらバグを発見してしまった。i = N - 1のとき63行目のa[i + 1]はa[N]となり
配列の添字範囲外アクセス。0との比較だけだし、if文の評価がどっちでも以降の処理は結局同じだから、
実害も解への影響もないが、厳格さが必要ならif ((i + 1 < N ? a[i + 1] : 0) >= 0) {と書き換えるべきだな。
実行時間への影響は無視できる。
それぞれのPowerShellへの移植版
https://ideone.com/vEGZ3D
https://ideone.com/azzMa4
完全な逐語訳ではなく、PowerShellで書くと遅くなったり煩雑になったりする箇所は適宜改変した。
15桁以下の場合は64ビット整数でも桁溢れしないので、BigIntの代わりにInt64を使えば少し速くなる。
>>685を書いたときに作ってあった2つのC++プログラム
https://ideone.com/KID2jR
https://ideone.com/ysdd6b
1番目ではsolve関数の再帰呼び出しの対象とするx[p]の下限と上限を線形探索するが、
2番目では二分探索する。要素数10では二分探索の効果は薄いと思いきや、大分速くなった。
2番目を読み返していたらバグを発見してしまった。i = N - 1のとき63行目のa[i + 1]はa[N]となり
配列の添字範囲外アクセス。0との比較だけだし、if文の評価がどっちでも以降の処理は結局同じだから、
実害も解への影響もないが、厳格さが必要ならif ((i + 1 < N ? a[i + 1] : 0) >= 0) {と書き換えるべきだな。
実行時間への影響は無視できる。
それぞれのPowerShellへの移植版
https://ideone.com/vEGZ3D
https://ideone.com/azzMa4
完全な逐語訳ではなく、PowerShellで書くと遅くなったり煩雑になったりする箇所は適宜改変した。
15桁以下の場合は64ビット整数でも桁溢れしないので、BigIntの代わりにInt64を使えば少し速くなる。
701デフォルトの名無しさん
2025/03/24(月) 22:16:36.44ID:/lNBwDBZ 非素数であることが既知の巨大整数を素因数分解するときの
最速のアルゴリズムって何がある?
最速のアルゴリズムって何がある?
702デフォルトの名無しさん
2025/03/25(火) 15:25:56.57ID:Yc/egiP0703デフォルトの名無しさん
2025/03/25(火) 15:54:47.24ID:GZ5kfx5g704デフォルトの名無しさん
2025/03/25(火) 16:11:02.68ID:Yc/egiP0 そこまでは興味ないや
「数倍」だったのはもしかして最適化オプション付けてなかったんじゃない?ってだけの話
「数倍」だったのはもしかして最適化オプション付けてなかったんじゃない?ってだけの話
705デフォルトの名無しさん
2025/03/25(火) 17:30:47.40ID:Yc/egiP0 >>697-698をBigIntに変えるのはどうしたらいいのか分かんなかったので
>>700の方を boost::multiprecision::cpp_int から boost::multiprecision::int128_t に変えてみた
改変版 | オリジナル
https://ideone.com/Ie0HhO 0.12s | https://ideone.com/KID2jR 0.43s
https://ideone.com/np3p5h 0.11s | https://ideone.com/ysdd6b 0.23s
>>700の方を boost::multiprecision::cpp_int から boost::multiprecision::int128_t に変えてみた
改変版 | オリジナル
https://ideone.com/Ie0HhO 0.12s | https://ideone.com/KID2jR 0.43s
https://ideone.com/np3p5h 0.11s | https://ideone.com/ysdd6b 0.23s
706デフォルトの名無しさん
2025/03/25(火) 20:18:24.92ID:oTGl9wWX707デフォルトの名無しさん
2025/03/25(火) 23:43:24.86ID:V/NXIH+S708デフォルトの名無しさん
2025/03/27(木) 11:39:31.21ID:vU3T1Sq/ >>697
crateのnumを使う
crateのnumを使う
709デフォルトの名無しさん
2025/03/27(木) 20:29:20.38ID:DyGv4jyd c言語で実用的なプログラムを作りたい。
いいテーマはありますか?
いいテーマはありますか?
710デフォルトの名無しさん
2025/03/27(木) 20:35:59.71ID:cvPlHeM5 お題:#(シャープ)を入力の段数でウンコ状に並べて出力せよ
出力は全角でも半角でもどちらでもよしとする(5ch は半角スペース表示できない)
in < 3
out >
#
###
#####
出力は全角でも半角でもどちらでもよしとする(5ch は半角スペース表示できない)
in < 3
out >
#
###
#####
711デフォルトの名無しさん
2025/03/27(木) 21:06:27.50ID:AGn6MWSp >>710
PowerShell
function unko($n)
{
if ($n -ge 1) {1..$n |% {" " * ($n - $_) + "#" * (2 * $_ - 1)}}
}
unko 3
-- 実行結果 --
#
###
#####
PowerShell
function unko($n)
{
if ($n -ge 1) {1..$n |% {" " * ($n - $_) + "#" * (2 * $_ - 1)}}
}
unko 3
-- 実行結果 --
#
###
#####
712デフォルトの名無しさん
2025/03/28(金) 21:33:35.13ID:VDfNaTNz お題:素因数の総和が2025である2000万以下の自然数をすべて求めて下さい。
例)
32272
素因数分解すると32272 = 2 × 2 × 2 × 2 × 2017で、
素因数の総和は2 + 2 + 2 + 2 + 2017 = 2025となります。
※20億以下でもC++で5秒以内に余裕で完了できますが、出力が長すぎるため2000万以下としました。
その結果、Rでも5秒以内に余裕で完了できる問題になりました。
例)
32272
素因数分解すると32272 = 2 × 2 × 2 × 2 × 2017で、
素因数の総和は2 + 2 + 2 + 2 + 2017 = 2025となります。
※20億以下でもC++で5秒以内に余裕で完了できますが、出力が長すぎるため2000万以下としました。
その結果、Rでも5秒以内に余裕で完了できる問題になりました。
713デフォルトの名無しさん
2025/03/28(金) 21:54:52.53ID:e6/uDocq714デフォルトの名無しさん
2025/03/28(金) 22:12:15.09ID:g08AymBh お題
AさんがBさんに惚れてることを
A-B
と表します
両思いのペアを出力してください
入力
D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S
出力
B,E
R,W
AさんがBさんに惚れてることを
A-B
と表します
両思いのペアを出力してください
入力
D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S
出力
B,E
R,W
715デフォルトの名無しさん
2025/03/28(金) 22:28:49.68ID:VDfNaTNz >>714
PowerShell
$s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S"
$h = @{}
$s -split "," |% {
$a, $b = $_ -split "-"
$h[$a] += , $b
}
foreach ($a in $h.keys) {
foreach ($b in $h[$a]) {
if ($a -lt $b -and $h[$b] -contains $a) {"$a,$b"}
}
}
-- 実行結果 --
B,E
R,W
PowerShell
$s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S"
$h = @{}
$s -split "," |% {
$a, $b = $_ -split "-"
$h[$a] += , $b
}
foreach ($a in $h.keys) {
foreach ($b in $h[$a]) {
if ($a -lt $b -and $h[$b] -contains $a) {"$a,$b"}
}
}
-- 実行結果 --
B,E
R,W
716デフォルトの名無しさん
2025/03/28(金) 23:19:47.32ID:VDfNaTNz >>714
PowerShellでもう少し短く
$s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S"
$h = @{}
$s -split "," |% {
$a, $b = $_ -split "-"
$i, $t = if ($a -lt $b) {1, "$a,$b"} else {2, "$b,$a"}
$h[$t] = $h[$t] -bor $i
}
$h.keys |? {$h[$_] -eq 3} | sort
-- 実行結果 --
B,E
R,W
PowerShellでもう少し短く
$s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S"
$h = @{}
$s -split "," |% {
$a, $b = $_ -split "-"
$i, $t = if ($a -lt $b) {1, "$a,$b"} else {2, "$b,$a"}
$h[$t] = $h[$t] -bor $i
}
$h.keys |? {$h[$_] -eq 3} | sort
-- 実行結果 --
B,E
R,W
717デフォルトの名無しさん
2025/03/29(土) 11:51:50.06ID:UeqVkFR5 >>714
Rust
use itertools::Itertools;
fn f(input: &str) -> impl Iterator<Item = &str> {
input.split(',')
.map(|pair| (pair, pair.splitn(2, '-').collect_tuple().unwrap()))
.filter(|(_, (a, b))| a < b)
.flat_map(|(pair, (a, b))| {
input.split(',')
.map(|pair| pair.splitn(2, '-').collect_tuple().unwrap())
.filter_map(move |(x, y)| (a == y && b == x).then_some(pair))
})
}
fn main() {
let input = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S";
itertools::assert_equal(["B-E", "R-W"], f(input).sorted());
}
Rust
use itertools::Itertools;
fn f(input: &str) -> impl Iterator<Item = &str> {
input.split(',')
.map(|pair| (pair, pair.splitn(2, '-').collect_tuple().unwrap()))
.filter(|(_, (a, b))| a < b)
.flat_map(|(pair, (a, b))| {
input.split(',')
.map(|pair| pair.splitn(2, '-').collect_tuple().unwrap())
.filter_map(move |(x, y)| (a == y && b == x).then_some(pair))
})
}
fn main() {
let input = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S";
itertools::assert_equal(["B-E", "R-W"], f(input).sorted());
}
718デフォルトの名無しさん
2025/03/30(日) 01:28:45.68ID:KrBJAiIU お題:1〜10までの範囲の乱数生成をn回行ったとき出た値の積が20の倍数になる確率Pnを出力せよ
n=2
2, 10 ... 20
4, 5 ... 20
Pn=???
n=3
2, 5, 2 ... 20
4, 5, 2 ... 40
Pn=???
n=2
2, 10 ... 20
4, 5 ... 20
Pn=???
n=3
2, 5, 2 ... 20
4, 5, 2 ... 40
Pn=???
719デフォルトの名無しさん
2025/03/30(日) 15:24:52.85ID:6QsLEZYT720デフォルトの名無しさん
2025/03/30(日) 15:35:52.69ID:bQF7/1H+ 後者で学校の課題な予感がするな
721デフォルトの名無しさん
2025/03/30(日) 20:11:24.72ID:qyCZpZxd >>718
R Version4
https://ideone.com/r03zEZ
ideoneのRは古すぎてエラーが出てしまうので、出力は入力欄に記載した。
巨大整数型を使わなければideoneでも実行できる。
https://ideone.com/K0RefY
R Version4
https://ideone.com/r03zEZ
ideoneのRは古すぎてエラーが出てしまうので、出力は入力欄に記載した。
巨大整数型を使わなければideoneでも実行できる。
https://ideone.com/K0RefY
722デフォルトの名無しさん
2025/03/30(日) 20:58:57.54ID:qyCZpZxd723 警備員[Lv.4]
2025/03/31(月) 03:24:21.45ID:V+SeThnI724デフォルトの名無しさん
2025/03/31(月) 05:32:04.89ID:lZyiUZP+ >>718
学校の課題をここに書くなって教わらなかったの?
学校の課題をここに書くなって教わらなかったの?
725デフォルトの名無しさん
2025/03/31(月) 22:37:26.59ID:eEIz6yDp >>718
>>721-722を整理して行列とヴェクトルの積ですっきり書けるようにした。
R (ideoneでも巨大整数型で実行可能になった)
https://ideone.com/sHNag3
C++
https://ideone.com/7zgflb
式を展開してしまえばPowerShellで結局これだけ。
$a, $b, $c, $d, $e, $f = 0, 1, 1, 2, 2, [BigInt]4
2..100 |% {
$a = 10 * $a + 5 * $b + 2 * $c + 2 * $d + $e
$b = 5 * $b + 3 * $c + $e + $f
$c = 5 * $c + $f
$d = 8 * $d + 4 * $e + 2 * $f
$e = 4 * $e + 2 * $f
$f = 4 * $f
for ($p = $a; $p % 10 -eq 0; $p /= 10) {}
"P[$_] = 0.$p"
}
>>721-722を整理して行列とヴェクトルの積ですっきり書けるようにした。
R (ideoneでも巨大整数型で実行可能になった)
https://ideone.com/sHNag3
C++
https://ideone.com/7zgflb
式を展開してしまえばPowerShellで結局これだけ。
$a, $b, $c, $d, $e, $f = 0, 1, 1, 2, 2, [BigInt]4
2..100 |% {
$a = 10 * $a + 5 * $b + 2 * $c + 2 * $d + $e
$b = 5 * $b + 3 * $c + $e + $f
$c = 5 * $c + $f
$d = 8 * $d + 4 * $e + 2 * $f
$e = 4 * $e + 2 * $f
$f = 4 * $f
for ($p = $a; $p % 10 -eq 0; $p /= 10) {}
"P[$_] = 0.$p"
}
726デフォルトの名無しさん
2025/04/01(火) 22:39:42.98ID:9GVSWQu0 半角スペースの意味がわからない
そういうこだわりは古臭いよ
そういうこだわりは古臭いよ
727デフォルトの名無しさん
2025/04/02(水) 13:29:35.55ID:k9Y5euIy いまどきのプログラミングなら出力はHTMLだよな
728デフォルトの名無しさん
2025/04/02(水) 13:47:27.57ID:hi8l+lAW PHPさえその動作禁止だぞ
729デフォルトの名無しさん
2025/04/02(水) 14:31:23.27ID:vIYRPSqy >>725
変数名がa、b、cの時点でプロじゃねえな
変数名がa、b、cの時点でプロじゃねえな
730デフォルトの名無しさん
2025/04/02(水) 15:10:39.64ID:hi8l+lAW 行列演算は数学でもa,b,c,dだから…
731デフォルトの名無しさん
2025/04/02(水) 19:51:02.16ID:7MGV8+qg 俺が言ってるのは5chのプロじゃねえなってことだから
数学は関係ない
数学は関係ない
732デフォルトの名無しさん
2025/04/02(水) 19:56:31.51ID:/hTkauy0 5chのプロ 笑
733デフォルトの名無しさん
2025/04/02(水) 20:14:17.34ID:ZWpp3MuE 5chのプロはどんな変数名使うのか教えて
734デフォルトの名無しさん
2025/04/02(水) 21:11:27.43ID:HCJVcqu8 >>726
>>725の全角空白のこと? 項の書き忘れや書き間違いがないか分かりやすくするため。余分な空白や長い変数名が
ディスク・メモリ空間やコンパイル・インタプリト時間を無駄に増やすと気にする方が古臭くない?
とはいえ、今でもインタプリタ言語のPowerShellでは変数名を長くすると顕著に遅くなる。例えば、
$t1 = measure-command {for ($i = 0; $i -lt 1000000; $i++) {}}
$t2 = measure-command {for ($AnExtraordinarilyLongVariableName = 0; $AnExtraordinarilyLongVariableName -lt 1000000; $AnExtraordinarilyLongVariableName++) {}}
$t2.Ticks / $t1.Ticks
をPowerShell Ver.7で実行すると1.56前後の値が表示される。奇妙なことに、かなり古いVer.2では1前後の値になる。
実時間ではVer.7の$t2とVer.2の$t2が同程度なので、Ver.7では短い変数名での最適化が施されているということか。
それはさておき、>>712を解く人はいませんか?
>>725の全角空白のこと? 項の書き忘れや書き間違いがないか分かりやすくするため。余分な空白や長い変数名が
ディスク・メモリ空間やコンパイル・インタプリト時間を無駄に増やすと気にする方が古臭くない?
とはいえ、今でもインタプリタ言語のPowerShellでは変数名を長くすると顕著に遅くなる。例えば、
$t1 = measure-command {for ($i = 0; $i -lt 1000000; $i++) {}}
$t2 = measure-command {for ($AnExtraordinarilyLongVariableName = 0; $AnExtraordinarilyLongVariableName -lt 1000000; $AnExtraordinarilyLongVariableName++) {}}
$t2.Ticks / $t1.Ticks
をPowerShell Ver.7で実行すると1.56前後の値が表示される。奇妙なことに、かなり古いVer.2では1前後の値になる。
実時間ではVer.7の$t2とVer.2の$t2が同程度なので、Ver.7では短い変数名での最適化が施されているということか。
それはさておき、>>712を解く人はいませんか?
735デフォルトの名無しさん
2025/04/02(水) 23:31:04.18ID:vIYRPSqy >>734
縦に揃えるのは無駄に横に長くなる
縦に揃えるのは無駄に横に長くなる
736デフォルトの名無しさん
2025/04/02(水) 23:33:04.35ID:vIYRPSqy >>734
ループは毎回、構文を解析しているわけじゃねえぞ?
ループは毎回、構文を解析しているわけじゃねえぞ?
737 警備員[Lv.5]
2025/04/05(土) 14:46:26.08ID:bpkT9prW >>719
このお題の場合は数学的に答えを出そうとするとプログラムを作る必要がなくなってしまわないか?
人が普通に数学的に考えて行くと答えが出てしまいそうな気がするんだが。
またはAIに聞いたらすぐ答えが出そうな感じが。
このお題の場合は数学的に答えを出そうとするとプログラムを作る必要がなくなってしまわないか?
人が普通に数学的に考えて行くと答えが出てしまいそうな気がするんだが。
またはAIに聞いたらすぐ答えが出そうな感じが。
738デフォルトの名無しさん
2025/04/08(火) 23:28:40.30ID:OzdBhfzQ >>712 Rust
fn solve(n: usize, limit: usize) -> Vec<usize> {
let mut answer = Vec::new();
let mut pnt = generate_primes(n).iter().skip(1).rev().map(|&p| (p, 0, 0)).collect::<Vec<_>>();
let (mut ci, mut cn, mut ct) = (0, n, 1_usize);
'advance: loop {
pnt[ci..].iter_mut().for_each(|(_p, n, t)| (*n, *t) = (cn, ct));
if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 {
ct <<= cn >> 1;
if ct <= limit { answer.push(ct as usize); }
}
for (i, (p, n, t)) in pnt.iter_mut().enumerate().rev() {
if *n < *p { continue; }
*n -= *p; *t *= *p;
if *t > limit { continue; }
if *n == 1 { continue; }
if *n == 0 { answer.push(*t as usize); continue; }
(ci, cn, ct) = (i, *n, *t);
continue 'advance;
};
break;
}
answer.sort(); answer
}
fn solve(n: usize, limit: usize) -> Vec<usize> {
let mut answer = Vec::new();
let mut pnt = generate_primes(n).iter().skip(1).rev().map(|&p| (p, 0, 0)).collect::<Vec<_>>();
let (mut ci, mut cn, mut ct) = (0, n, 1_usize);
'advance: loop {
pnt[ci..].iter_mut().for_each(|(_p, n, t)| (*n, *t) = (cn, ct));
if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 {
ct <<= cn >> 1;
if ct <= limit { answer.push(ct as usize); }
}
for (i, (p, n, t)) in pnt.iter_mut().enumerate().rev() {
if *n < *p { continue; }
*n -= *p; *t *= *p;
if *t > limit { continue; }
if *n == 1 { continue; }
if *n == 0 { answer.push(*t as usize); continue; }
(ci, cn, ct) = (i, *n, *t);
continue 'advance;
};
break;
}
answer.sort(); answer
}
739デフォルトの名無しさん
2025/04/08(火) 23:30:40.48ID:OzdBhfzQ >>738
素因数の総和が2025になる問題を可能な素数の組合せ総当りで挑戦してみました
20億以下で約0.4秒と規定時間以内に実行できました
実行時間 solve(2025, 20000000): 22.638309ms
実行時間 solve(2025, 2000000000): 418.607978ms
fn main() {
for (n, limit) in [(2025, 2000_0000), (2025, 20_0000_0000)] {
let start_time = std::time::Instant::now();
let answer = solve(n, limit);
let end_time = std::time::Instant::now();
println!("実行時間 solve({n}, {limit}): {:?}", end_time - start_time);
// 個数と最初と最後の検証
let (valid_len, valid_first, valid_last) = match (n, limit) {
(2025, 2000_0000) => (1265, 30255, 19970000),
(2025, 20_0000_0000) => (49942, 30255, 1999986740),
_ => (0, 0, 0),
};
assert_eq!(answer.len(), valid_len);
assert_eq!(*answer.first().unwrap(), valid_first);
assert_eq!(*answer.last().unwrap(), valid_last);
}
}
素因数の総和が2025になる問題を可能な素数の組合せ総当りで挑戦してみました
20億以下で約0.4秒と規定時間以内に実行できました
実行時間 solve(2025, 20000000): 22.638309ms
実行時間 solve(2025, 2000000000): 418.607978ms
fn main() {
for (n, limit) in [(2025, 2000_0000), (2025, 20_0000_0000)] {
let start_time = std::time::Instant::now();
let answer = solve(n, limit);
let end_time = std::time::Instant::now();
println!("実行時間 solve({n}, {limit}): {:?}", end_time - start_time);
// 個数と最初と最後の検証
let (valid_len, valid_first, valid_last) = match (n, limit) {
(2025, 2000_0000) => (1265, 30255, 19970000),
(2025, 20_0000_0000) => (49942, 30255, 1999986740),
_ => (0, 0, 0),
};
assert_eq!(answer.len(), valid_len);
assert_eq!(*answer.first().unwrap(), valid_first);
assert_eq!(*answer.last().unwrap(), valid_last);
}
}
740デフォルトの名無しさん
2025/04/09(水) 14:40:43.48ID:jYixYFG8 >>737
AIも同じこと言ってた
AIも同じこと言ってた
741デフォルトの名無しさん
2025/04/09(水) 22:22:33.83ID:Ip5PiQSs >>738-739
出題時に作成した解答例
C++
https://ideone.com/y1YZlj
R
https://ideone.com/zvqAsg
と解の個数と最小値・最大値が一致するので正解だろう。
ローカルでコンパイルしようとしたら、
error[E0425]: cannot find function `generate_primes` in this scope
と表示されコンパイルできなかったので、実行時間の比較はできなかった。
出題時に作成した解答例
C++
https://ideone.com/y1YZlj
R
https://ideone.com/zvqAsg
と解の個数と最小値・最大値が一致するので正解だろう。
ローカルでコンパイルしようとしたら、
error[E0425]: cannot find function `generate_primes` in this scope
と表示されコンパイルできなかったので、実行時間の比較はできなかった。
742デフォルトの名無しさん
2025/04/09(水) 22:57:11.84ID:R3DmBa+t >>741
すみません
素数の一覧を返すだけなので素数列挙でもライブラリ利用でも何でもいいのですが
例えばエラトステネスの篩ならこんな感じの関数で
// 素数の一覧を返す [2, 3, 5, 7, 11, ... , (最大max)]
fn generate_primes(max: usize) -> Vec<usize> {
// maxの平方根までの素数の倍数を篩にかければ全ての素数が見つかる
let limit = max.isqrt() + 1;
let mut is_prime = vec![true; max + 1];
is_prime[0] = false;
is_prime[1] = false;
// 偽初期値
let mut prime = 1;
// 次の素数を探す (前回の素数以降でtrueを探すと次の素数)
while let Some(pos) = is_prime[(prime + 1)..limit].iter().position(|bool| *bool) {
prime += pos + 1;
// この素数の倍数をfalseにする 【エラトステネスの篩】
is_prime[(prime << 1)..].iter_mut().step_by(prime).for_each(|bool| *bool = false);
}
// 素数一覧を返す (trueになるindex値が素数)
is_prime.iter().enumerate().filter_map(|(index, bool)| bool.then_some(index)).collect()
}
すみません
素数の一覧を返すだけなので素数列挙でもライブラリ利用でも何でもいいのですが
例えばエラトステネスの篩ならこんな感じの関数で
// 素数の一覧を返す [2, 3, 5, 7, 11, ... , (最大max)]
fn generate_primes(max: usize) -> Vec<usize> {
// maxの平方根までの素数の倍数を篩にかければ全ての素数が見つかる
let limit = max.isqrt() + 1;
let mut is_prime = vec![true; max + 1];
is_prime[0] = false;
is_prime[1] = false;
// 偽初期値
let mut prime = 1;
// 次の素数を探す (前回の素数以降でtrueを探すと次の素数)
while let Some(pos) = is_prime[(prime + 1)..limit].iter().position(|bool| *bool) {
prime += pos + 1;
// この素数の倍数をfalseにする 【エラトステネスの篩】
is_prime[(prime << 1)..].iter_mut().step_by(prime).for_each(|bool| *bool = false);
}
// 素数一覧を返す (trueになるindex値が素数)
is_prime.iter().enumerate().filter_map(|(index, bool)| bool.then_some(index)).collect()
}
743デフォルトの名無しさん
2025/04/09(水) 23:40:58.68ID:Ip5PiQSs744デフォルトの名無しさん
2025/04/09(水) 23:43:56.02ID:R3DmBa+t 前者はどっち?
アルゴリズムが違うのかちょっと見てみる
アルゴリズムが違うのかちょっと見てみる
745デフォルトの名無しさん
2025/04/09(水) 23:50:45.01ID:Ip5PiQSs746デフォルトの名無しさん
2025/04/09(水) 23:59:16.31ID:R3DmBa+t たしかにC++の20億だと数秒かかりますね
何がそんなに違うのかな
何がそんなに違うのかな
747デフォルトの名無しさん
2025/04/10(木) 00:43:03.90ID:1pFQYAQA vectorのメモリは必要分を最初に確保すると速くならない?
vectorの最初のサイズの初期値は要素10個分だったはず。11個目が追加されたら20個確保して全要素コピーんsんてやってたら遅いよ
vectorの最初のサイズの初期値は要素10個分だったはず。11個目が追加されたら20個確保して全要素コピーんsんてやってたら遅いよ
748デフォルトの名無しさん
2025/04/10(木) 02:19:18.58ID:Zvxe3V8x ベクタはC++もRustも他でもほぼ同じ仕様で埋まると倍の新たなエリアを確保してコピー
これは2^n個が埋まった時点でそれ以前の累積コピー個数は
最悪の1個スタートでも1+2+4+ ... + 2^(n-2)+2^(n-1) =2^n - 1個しかない
つまりO(1)とみなせるため問題になることは少ない
言語による詳細な差もC++とRustならほぼ無いと思われる
一方で今回の20億以内で素数和が2025になる数を求める問題
C++版がRust版より約10倍遅くなってる原因は
・pushしていくベクタがRust版は1個でC++版は2026個のベクタを利用
・pushしていく回数がRust版は解の個数と同じ49942回でC++版は134621081回
ワーキングメモリ使用量の差が効いてる
これは2^n個が埋まった時点でそれ以前の累積コピー個数は
最悪の1個スタートでも1+2+4+ ... + 2^(n-2)+2^(n-1) =2^n - 1個しかない
つまりO(1)とみなせるため問題になることは少ない
言語による詳細な差もC++とRustならほぼ無いと思われる
一方で今回の20億以内で素数和が2025になる数を求める問題
C++版がRust版より約10倍遅くなってる原因は
・pushしていくベクタがRust版は1個でC++版は2026個のベクタを利用
・pushしていく回数がRust版は解の個数と同じ49942回でC++版は134621081回
ワーキングメモリ使用量の差が効いてる
749デフォルトの名無しさん
2025/04/10(木) 22:03:03.91ID:Y2N8/SQw >>747
vector p[0]〜p[S]のサイズの最大値4499個(20億以下では88876個)分のメモリを
for (auto &v : p) v.reserve(4499);
で最初に割り付けておくと、>>743ではRustの方が2000万以下で27%、20億以下で11%速かったのが、
2000万以下では差が縮まりRustの方が14%速く、20億以下では逆転しRustの方が20%遅くなった。
サイズの最大値は実行前には分からないから、上記の改変はあくまでもvectorのサイズ拡張が実行時間に
及ぼす影響を見るためのテストで、解答として使うことはできないが。
vectorのサイズ拡張は、新しいメモリ割り付けとそこへの要素コピーに掛かる時間によってだけではなく、
要素の格納アドレスが変わることによるキャッシュ有効率の低下によっても、速度低下をもたらしそう。
>>746, 748
どっちがどれだけ速いかは実行環境に依存するとはいえ、C++が20億で数秒とかRustより約10倍遅いと
いうのはいくら何でも遅すぎておかしいと思う。解の標準出力をなしにするのを忘れていたり、Windowsで
コンパイル後の実行ファイルの実行時間をPowerShellでmeasure-command {a.exe}のように計測して
ウィルス・チェックに要した時間も含まれていたりしない?
vector p[0]〜p[S]のサイズの最大値4499個(20億以下では88876個)分のメモリを
for (auto &v : p) v.reserve(4499);
で最初に割り付けておくと、>>743ではRustの方が2000万以下で27%、20億以下で11%速かったのが、
2000万以下では差が縮まりRustの方が14%速く、20億以下では逆転しRustの方が20%遅くなった。
サイズの最大値は実行前には分からないから、上記の改変はあくまでもvectorのサイズ拡張が実行時間に
及ぼす影響を見るためのテストで、解答として使うことはできないが。
vectorのサイズ拡張は、新しいメモリ割り付けとそこへの要素コピーに掛かる時間によってだけではなく、
要素の格納アドレスが変わることによるキャッシュ有効率の低下によっても、速度低下をもたらしそう。
>>746, 748
どっちがどれだけ速いかは実行環境に依存するとはいえ、C++が20億で数秒とかRustより約10倍遅いと
いうのはいくら何でも遅すぎておかしいと思う。解の標準出力をなしにするのを忘れていたり、Windowsで
コンパイル後の実行ファイルの実行時間をPowerShellでmeasure-command {a.exe}のように計測して
ウィルス・チェックに要した時間も含まれていたりしない?
750デフォルトの名無しさん
2025/04/11(金) 07:38:20.09ID:oaeJuxMT >>738 に手を加えて10倍速くしてみた
fn solve(n: usize, limit: usize) -> Vec<usize> {
let mut answer = Vec::new();
let mut pnt = generate_primes(n).windows(2).rev().map(|s| (s[1], s[0], 0, 0)).collect::<Vec<_>>();
let (mut ci, mut cn, mut ct) = (0, n, 1_usize);
'advance: loop {
pnt[ci..].iter_mut().for_each(|(_p, _q, n, t)| (*n, *t) = (cn, ct));
if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 {
ct <<= cn >> 1; if ct <= limit { answer.push(ct); }
}
'back: for (i, (p, q, n, t)) in pnt.iter_mut().enumerate().rev() {
'again: loop {
if *n < *p { continue 'back; }
*n -= *p; *t *= *p;
if *n ==1 || *t > limit { continue 'back; }
if *n == 0 { answer.push(*t); continue 'back; }
if *q > 3 {
let mut tt = *t * (*n % *q);
for _ in 0..(*n / *q) { tt *= *q; if tt > limit { continue 'again; } }
}; break 'again;
}; (ci, cn, ct) = (i, *n, *t); continue 'advance;
}; break 'advance;
}; answer.sort(); answer
}
fn solve(n: usize, limit: usize) -> Vec<usize> {
let mut answer = Vec::new();
let mut pnt = generate_primes(n).windows(2).rev().map(|s| (s[1], s[0], 0, 0)).collect::<Vec<_>>();
let (mut ci, mut cn, mut ct) = (0, n, 1_usize);
'advance: loop {
pnt[ci..].iter_mut().for_each(|(_p, _q, n, t)| (*n, *t) = (cn, ct));
if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 {
ct <<= cn >> 1; if ct <= limit { answer.push(ct); }
}
'back: for (i, (p, q, n, t)) in pnt.iter_mut().enumerate().rev() {
'again: loop {
if *n < *p { continue 'back; }
*n -= *p; *t *= *p;
if *n ==1 || *t > limit { continue 'back; }
if *n == 0 { answer.push(*t); continue 'back; }
if *q > 3 {
let mut tt = *t * (*n % *q);
for _ in 0..(*n / *q) { tt *= *q; if tt > limit { continue 'again; } }
}; break 'again;
}; (ci, cn, ct) = (i, *n, *t); continue 'advance;
}; break 'advance;
}; answer.sort(); answer
}
751デフォルトの名無しさん
2025/04/11(金) 22:07:48.99ID:CMM29JI3 すごいな
アルゴリズムの違いでそんなに速度差変わるものなんだな
アルゴリズムの違いでそんなに速度差変わるものなんだな
752デフォルトの名無しさん
2025/04/11(金) 22:44:47.89ID:4wK2/GRg753デフォルトの名無しさん
2025/04/12(土) 09:11:24.51ID:xiQsTIG2754デフォルトの名無しさん
2025/04/12(土) 21:18:53.69ID:RVQAocGC >>741のC++プログラムは for (int i = S; i >= 2; i--) のループの最後のi = 2の場合を
ループの外に出して最適化 (p[S]以外のp[_]への要素追加をしないように) するだけで、
20億以下で解の出力なしのときの実行時間が元のプログラムの半分未満になるな。
https://ideone.com/RtTEO2 (1.02秒)
↓
https://ideone.com/1O04wl (0.44秒)
ループの外に出して最適化 (p[S]以外のp[_]への要素追加をしないように) するだけで、
20億以下で解の出力なしのときの実行時間が元のプログラムの半分未満になるな。
https://ideone.com/RtTEO2 (1.02秒)
↓
https://ideone.com/1O04wl (0.44秒)
755デフォルトの名無しさん
2025/04/12(土) 21:26:41.27ID:csJOBVaF756753
2025/04/13(日) 11:09:12.37ID:vq5HB/06757デフォルトの名無しさん
2025/04/13(日) 23:46:14.76ID:bmEZDV0H >>756
遅い原因は長さ2000万のベクタ利用?
遅い原因は長さ2000万のベクタ利用?
758デフォルトの名無しさん
2025/04/13(日) 23:53:41.46ID:fz+Jdq57 配列にするとどうかね
759デフォルトの名無しさん
2025/04/17(木) 00:27:46.72ID:dz0qzhSq 素因数和2025のお題の3系統のコードを読み解いてみた
>>756
2000万まで各々で素因数の和を求めて2025になるかを確認する方法。
ただし各数の素因数分解を工夫せずにすると大変なので、
各数の最小素因数(SPF)を先に一気にエラトステネスの篩で求めてる。
それを用いれば各数の素因数分解はその分解数回の割算だけで求まる。
ただしそのSPF表のために長さ2000万のベクタを用いている。
もし20億までなら32bit✕20億で8GBが許容できるとしても、
あるいはこのSPF一覧のベクタを用いなくても、
20億回の処理を劇的に減らす枝刈り方法を組み込めないと厳しい。
2000万までの計算でも一番遅い。
>>756
2000万まで各々で素因数の和を求めて2025になるかを確認する方法。
ただし各数の素因数分解を工夫せずにすると大変なので、
各数の最小素因数(SPF)を先に一気にエラトステネスの篩で求めてる。
それを用いれば各数の素因数分解はその分解数回の割算だけで求まる。
ただしそのSPF表のために長さ2000万のベクタを用いている。
もし20億までなら32bit✕20億で8GBが許容できるとしても、
あるいはこのSPF一覧のベクタを用いなくても、
20億回の処理を劇的に減らす枝刈り方法を組み込めないと厳しい。
2000万までの計算でも一番遅い。
760デフォルトの名無しさん
2025/04/17(木) 00:29:06.02ID:dz0qzhSq >>741
2000万個すべてを素因数分解する方法とは逆に、
2025以下の素数の組み合わせを調べていく方法。
そのうち和が2025になる組み合わせの積が各解となる。
それを効率よく求めるために2025(+1)個のベクタのベクタpを用意している。
つまり和がsumとなる時の積をp[sum]に記録していく。
効率面からの仮の初期値p[0]に1を入れて、各素数iについて降順に、
ベクタp[j]にxがある時、ベクタp[i+j]にx*iをpushしていく。
ここでjの上限は 2025 - i、処理するxの上限は 2000万 / i の枝刈りができる。
最終的にベクタp[2025]の一覧が解となる。
2025個のベクタを用いることが長所および短所になっている。
この改良版>>754では、最後の素数2だけ特別扱いすることで倍速にしている。
2000万個すべてを素因数分解する方法とは逆に、
2025以下の素数の組み合わせを調べていく方法。
そのうち和が2025になる組み合わせの積が各解となる。
それを効率よく求めるために2025(+1)個のベクタのベクタpを用意している。
つまり和がsumとなる時の積をp[sum]に記録していく。
効率面からの仮の初期値p[0]に1を入れて、各素数iについて降順に、
ベクタp[j]にxがある時、ベクタp[i+j]にx*iをpushしていく。
ここでjの上限は 2025 - i、処理するxの上限は 2000万 / i の枝刈りができる。
最終的にベクタp[2025]の一覧が解となる。
2025個のベクタを用いることが長所および短所になっている。
この改良版>>754では、最後の素数2だけ特別扱いすることで倍速にしている。
761デフォルトの名無しさん
2025/04/17(木) 00:32:14.51ID:dz0qzhSq >>738
これも2025以下の素数を組み合わせて和が2025になる解を調べる方法。
解一覧を収めるベクタ以外は、固定の長さ305のベクタのみが使われている。
この長さの 305 とは2025以下~3以上の素数[2017, 2011, ... 5, 3]の数になってる。
各素数の冪乗の和 2017^e2017 + 2011^e2011 + ... + 5^e5 + 3^e3 及び積を計算していくが、
各指数のe2017などは解に不要なので使われておらず、
各冪乗の和自体も不要なので2025までの残りの数が使われていて、
固定長ベクタの値は(素数, 残りの数, ここまでの積)の3つ組となっている。
その素数を1つ使うと残りの数が減算されてて積が乗算されるのを繰り返していく。
素数2だけ特別扱いされており、残りの数の半分だけ左シフトすると解の積が出来上がる。
各if~continueが枝刈りとなっていて、残りの下限(=和の上限)や積の上限などがある
この改良版>>750では、次の素数以降の組み合わせで起き得る積の下限で枝刈りしている。
例えば7以下の素数で残り21ならば積の下限は7*7*7=343となるため、
ここまでの積に343を掛けた値が2000万(または20億)を超えていれば枝刈りできるようだ。
このアルゴリズムは作業メモリが固定で小さく常にL1キャッシュに乗り有利と思われる点と、
様々な枝刈りがしやすく処理する組み合わせを大きく減らしている点により、
他のアルゴリズムより桁違いに高速になっていると推測される。
これも2025以下の素数を組み合わせて和が2025になる解を調べる方法。
解一覧を収めるベクタ以外は、固定の長さ305のベクタのみが使われている。
この長さの 305 とは2025以下~3以上の素数[2017, 2011, ... 5, 3]の数になってる。
各素数の冪乗の和 2017^e2017 + 2011^e2011 + ... + 5^e5 + 3^e3 及び積を計算していくが、
各指数のe2017などは解に不要なので使われておらず、
各冪乗の和自体も不要なので2025までの残りの数が使われていて、
固定長ベクタの値は(素数, 残りの数, ここまでの積)の3つ組となっている。
その素数を1つ使うと残りの数が減算されてて積が乗算されるのを繰り返していく。
素数2だけ特別扱いされており、残りの数の半分だけ左シフトすると解の積が出来上がる。
各if~continueが枝刈りとなっていて、残りの下限(=和の上限)や積の上限などがある
この改良版>>750では、次の素数以降の組み合わせで起き得る積の下限で枝刈りしている。
例えば7以下の素数で残り21ならば積の下限は7*7*7=343となるため、
ここまでの積に343を掛けた値が2000万(または20億)を超えていれば枝刈りできるようだ。
このアルゴリズムは作業メモリが固定で小さく常にL1キャッシュに乗り有利と思われる点と、
様々な枝刈りがしやすく処理する組み合わせを大きく減らしている点により、
他のアルゴリズムより桁違いに高速になっていると推測される。
762デフォルトの名無しさん
2025/05/03(土) 06:56:07.77ID:Hs+w1scb お題:0か1のランダムな要素を持つW*Hの行列と二点の座標x, yとp, qが入力される
直線(x,y)→(p, q) を行列内で要素1に当たらないように任意の位置に合同変換したい
合同変換できる座標があればその二点の座標を出力し、なければ「なし」と出力せよ
直線(x,y)→(p, q) を行列内で要素1に当たらないように任意の位置に合同変換したい
合同変換できる座標があればその二点の座標を出力し、なければ「なし」と出力せよ
763デフォルトの名無しさん
2025/05/03(土) 14:00:53.01ID:2KurydQy ?
764デフォルトの名無しさん
2025/05/03(土) 14:59:51.97ID:LoSO6jC9 行列の1は格子点上の印なのかクロスワードの黒マスなのか
(x,y)、(p,q)は任意の点なのか格子点なのか
合同変換される直線(x,y)→(p,q)は実は線分だったりしないのか
無限の可能性を感じさせるお題だな
(x,y)、(p,q)は任意の点なのか格子点なのか
合同変換される直線(x,y)→(p,q)は実は線分だったりしないのか
無限の可能性を感じさせるお題だな
765デフォルトの名無しさん
2025/05/03(土) 15:10:32.79ID:OINldK7L 検証用のデータを書いていないお題は失格
入力例とその時の出力例が必要
もし出力が複数個で長いならその特例の一部や個数など
入力例とその時の出力例が必要
もし出力が複数個で長いならその特例の一部や個数など
766デフォルトの名無しさん
2025/06/21(土) 16:41:25.25ID:muNvYhtO お題
2次元の配列があったときに
一番左上を起点として右上方向、左下方向、右上方向…
というふうに斜めに配列の要素をたどることを
ジグザグスキャンと名付けます
たとえば、3 * 3の配列の場合は次の順番で配列の要素にアクセスします
(1, 2, 6)
(3, 5, 7)
(4, 8, 9)
二次元の配列を入力としてジグザグスキャンを行ってください
結果を1次元の配列として出力してください
例
入力: (A, B, C), (D, E, F), (G, H, I)
出力: (A, B, D, G, E, C, F, H, I)
入力: (A, B, C), (D, E, F)
出力: (A, B, D, E, C, F)
入力: (A, B), (C, D), (E, F)
出力: (A, B, C, E, D, F)
2次元の配列があったときに
一番左上を起点として右上方向、左下方向、右上方向…
というふうに斜めに配列の要素をたどることを
ジグザグスキャンと名付けます
たとえば、3 * 3の配列の場合は次の順番で配列の要素にアクセスします
(1, 2, 6)
(3, 5, 7)
(4, 8, 9)
二次元の配列を入力としてジグザグスキャンを行ってください
結果を1次元の配列として出力してください
例
入力: (A, B, C), (D, E, F), (G, H, I)
出力: (A, B, D, G, E, C, F, H, I)
入力: (A, B, C), (D, E, F)
出力: (A, B, D, E, C, F)
入力: (A, B), (C, D), (E, F)
出力: (A, B, C, E, D, F)
767デフォルトの名無しさん
2025/06/21(土) 19:44:57.30ID:jAwJC0YX768デフォルトの名無しさん
2025/06/21(土) 23:05:10.33ID:awm9eire >>766
Rust
fn f<T: Clone, const M: usize, const N: usize>(input: &[[T; N]; M]) -> Vec<T> {
let mut output = Vec::<T>::new();
for x in 0..(M + N - 1) {
let start = if x < N { 0 } else { x + 1 - N };
let end = if x < M { x } else { M - 1 };
let iter = (start..=end).map(|m| input[m][x - m].clone());
if x & 1 == 1 {
output.extend(iter.clone());
} else {
output.extend(iter.rev());
}
}
output
}
fn main() {
assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]), ['A', 'B', 'D', 'G', 'E', 'C', 'F', 'H', 'I']);
assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F']]), ['A', 'B', 'D', 'E', 'C', 'F']);
assert_eq!(f(&[['A', 'B'], ['C', 'D'], ['E', 'F']]), ['A', 'B', 'C', 'E', 'D', 'F']);
}
Rust
fn f<T: Clone, const M: usize, const N: usize>(input: &[[T; N]; M]) -> Vec<T> {
let mut output = Vec::<T>::new();
for x in 0..(M + N - 1) {
let start = if x < N { 0 } else { x + 1 - N };
let end = if x < M { x } else { M - 1 };
let iter = (start..=end).map(|m| input[m][x - m].clone());
if x & 1 == 1 {
output.extend(iter.clone());
} else {
output.extend(iter.rev());
}
}
output
}
fn main() {
assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]), ['A', 'B', 'D', 'G', 'E', 'C', 'F', 'H', 'I']);
assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F']]), ['A', 'B', 'D', 'E', 'C', 'F']);
assert_eq!(f(&[['A', 'B'], ['C', 'D'], ['E', 'F']]), ['A', 'B', 'C', 'E', 'D', 'F']);
}
769デフォルトの名無しさん
2025/06/29(日) 20:45:32.73ID:f7vmTtNq お題:W*Hの行列に迷路を生成してください(アルゴリズムは任意)
770デフォルトの名無しさん
2025/06/29(日) 21:58:43.69ID:HlaloW8+771デフォルトの名無しさん
2025/07/25(金) 12:30:11.02ID:CjDQVF2B 【問題】
整数のリストが与えられたとき、そのリストを昇順に安定ソートした時の各要素のインデクス(0開始)を対応させたリストを作成せよ
【例】
入力: 1 100 10 10000 1000
出力: 0 2 1 4 3
入力: 3 1 4 1 5 9 2
出力: 3 0 4 1 5 6 2
入力: 0 1 0 1 0 1 0 1
出力: 0 4 1 5 2 6 3 7
実際に必要になって実装したけどスマートな方法があったら知りたい
整数のリストが与えられたとき、そのリストを昇順に安定ソートした時の各要素のインデクス(0開始)を対応させたリストを作成せよ
【例】
入力: 1 100 10 10000 1000
出力: 0 2 1 4 3
入力: 3 1 4 1 5 9 2
出力: 3 0 4 1 5 6 2
入力: 0 1 0 1 0 1 0 1
出力: 0 4 1 5 2 6 3 7
実際に必要になって実装したけどスマートな方法があったら知りたい
772デフォルトの名無しさん
2025/07/25(金) 20:46:23.28ID:dyl0C+2U >>771
例がおかしい
わかりやすい最後の例で示すと
入力: 0 1 0 1 0 1 0 1
出力: 0 4 1 5 2 6 3 7 間違い
出力: 0 2 4 6 1 3 5 7 正解
安定ソートなので同値は順序を保ってこうなる
例がおかしい
わかりやすい最後の例で示すと
入力: 0 1 0 1 0 1 0 1
出力: 0 4 1 5 2 6 3 7 間違い
出力: 0 2 4 6 1 3 5 7 正解
安定ソートなので同値は順序を保ってこうなる
773デフォルトの名無しさん
2025/07/25(金) 21:30:28.86ID:Z69qH9vG774デフォルトの名無しさん
2025/07/26(土) 12:26:55.07ID:xCVVpUlx775デフォルトの名無しさん
2025/07/26(土) 15:08:13.56ID:T78ZrTu7 >>771
SQL
select
row_number() over(order by arrayValue, arrayIndex) - 1
from
arrayTable
order by
arrayIndex
SQL
select
row_number() over(order by arrayValue, arrayIndex) - 1
from
arrayTable
order by
arrayIndex
776デフォルトの名無しさん
2025/07/26(土) 19:25:22.74ID:T78ZrTu7777デフォルトの名無しさん
2025/07/27(日) 10:09:36.80ID:vFJ24xnO >>771 ocaml
https://ideone.com/E7eFPC
>>771 octave
https://ideone.com/KkHu9S
>>771 ruby
https://ideone.com/pPIxcE
https://ideone.com/E7eFPC
>>771 octave
https://ideone.com/KkHu9S
>>771 ruby
https://ideone.com/pPIxcE
778デフォルトの名無しさん
2025/07/27(日) 17:05:48.29ID:vFJ24xnO779デフォルトの名無しさん
2025/07/27(日) 17:08:58.25ID:vFJ24xnO >>771 ruby 2.6以降?
sorti = ->a {a.map.with_index.sort.map &:last}
f = sorti << sorti
g = method(:p) << f
sorti = ->a {a.map.with_index.sort.map &:last}
f = sorti << sorti
g = method(:p) << f
780デフォルトの名無しさん
2025/07/27(日) 20:19:17.79ID:uFbo+/2v >>771
R
https://ideone.com/ctaQC5
統計用言語だけあってライブラリ関数rankを呼び出すだけ。ties.method = "min"を指定すれば
同値を同順位(例えば2番目の例では出力が3 0 4 0 5 6 2となる)にもできる。
R
https://ideone.com/ctaQC5
統計用言語だけあってライブラリ関数rankを呼び出すだけ。ties.method = "min"を指定すれば
同値を同順位(例えば2番目の例では出力が3 0 4 0 5 6 2となる)にもできる。
781デフォルトの名無しさん
2025/07/27(日) 21:43:59.43ID:w39E9j9Q >>771
Rust
既に色々と出ているため別の観点からのコード
一時作業メモリ最小 & ソートは1回 & ジェネリック
fn f<T: std::cmp::Ord>(input: &[T]) -> Vec<usize> {
let len = input.len();
// ポジションのリスト [0, 1, 2, 3, ... , len-1] を作成
let mut pos_list: Vec<usize> = (0..len).collect();
// inputを利用してそのポジションだけをソート
pos_list.sort_by_key(|&pos| &input[pos]);
// 返すべきランクのリスト
let mut rank_list: Vec<usize> = vec![0; len];
// ポジション⇔ランクは逆写像なのでソートは不要
(0..len).for_each(|rank| rank_list[pos_list[rank]] = rank);
rank_list
}
fn main() {
assert_eq!(f(&[1, 100, 10, 10000, 1000]), [0, 2, 1, 4, 3]);
assert_eq!(f(&[3, 1, 4, 1, 5, 9, 2]), [3, 0, 4, 1, 5, 6, 2]);
assert_eq!(f(&[0, 1, 0, 1, 0, 1, 0, 1]), [0, 4, 1, 5, 2, 6, 3, 7]);
}
Rust
既に色々と出ているため別の観点からのコード
一時作業メモリ最小 & ソートは1回 & ジェネリック
fn f<T: std::cmp::Ord>(input: &[T]) -> Vec<usize> {
let len = input.len();
// ポジションのリスト [0, 1, 2, 3, ... , len-1] を作成
let mut pos_list: Vec<usize> = (0..len).collect();
// inputを利用してそのポジションだけをソート
pos_list.sort_by_key(|&pos| &input[pos]);
// 返すべきランクのリスト
let mut rank_list: Vec<usize> = vec![0; len];
// ポジション⇔ランクは逆写像なのでソートは不要
(0..len).for_each(|rank| rank_list[pos_list[rank]] = rank);
rank_list
}
fn main() {
assert_eq!(f(&[1, 100, 10, 10000, 1000]), [0, 2, 1, 4, 3]);
assert_eq!(f(&[3, 1, 4, 1, 5, 9, 2]), [3, 0, 4, 1, 5, 6, 2]);
assert_eq!(f(&[0, 1, 0, 1, 0, 1, 0, 1]), [0, 4, 1, 5, 2, 6, 3, 7]);
}
782777
2025/07/27(日) 22:54:22.66ID:YfUjoiLt783 警備員[Lv.11]
2025/07/28(月) 23:30:37.16ID:uO5vEij8 >>771
>>776をKotlinに変換してKotlinらしくなるように色々省略しただけのもの。
やはり最初からラムダとか考慮されている言語だと色々省略できて分り易くなるね。
https://paiza.io/projects/0Dhknk4mUHrMqtuwzCDAxQ
>>776をKotlinに変換してKotlinらしくなるように色々省略しただけのもの。
やはり最初からラムダとか考慮されている言語だと色々省略できて分り易くなるね。
https://paiza.io/projects/0Dhknk4mUHrMqtuwzCDAxQ
784デフォルトの名無しさん
2025/07/29(火) 00:12:31.56ID:9AXsNEm+ >>771
Rust
https://ideone.com/jYX2ws
バイナリヒープ使うとソート過程で直接リスト作れるけどコード量増えるしヒープソート遅いから実用性は微妙か
C言語ならありかもしれない
Rust
https://ideone.com/jYX2ws
バイナリヒープ使うとソート過程で直接リスト作れるけどコード量増えるしヒープソート遅いから実用性は微妙か
C言語ならありかもしれない
785デフォルトの名無しさん
2025/07/30(水) 21:50:10.50ID:Ug40aZKP786デフォルトの名無しさん
2025/07/31(木) 14:56:29.97ID:cLL+G38O >> 771
java
>> 785氏のデータも加えてみた。
https://ideone.com/vzXoGd
ideoneのjavaはバージョン古いのか...
ま、通りがかりにこのスレみつけたのでちょっと書いただけ。
java
>> 785氏のデータも加えてみた。
https://ideone.com/vzXoGd
ideoneのjavaはバージョン古いのか...
ま、通りがかりにこのスレみつけたのでちょっと書いただけ。
787デフォルトの名無しさん
2025/07/31(木) 18:54:11.86ID:cLL+G38O ち、勘が鈍った。>>もつけ間違えるし、sage忘れるし。
788785
2025/07/31(木) 21:15:09.63ID:R3hgrYP8789デフォルトの名無しさん
2025/08/03(日) 22:00:37.87ID:1jv9m6G7790デフォルトの名無しさん
2025/08/04(月) 22:42:57.64ID:A9zbJQ8U791デフォルトの名無しさん
2025/08/04(月) 23:09:28.79ID:A9zbJQ8U792デフォルトの名無しさん
2025/08/05(火) 01:04:23.30ID:wgx4FmLX class ValueWithIndex<U /*extends Comparable<U>*/> implements Comparable<ValueWithIndex<T>> {
ジェネリックは難しい。上のextends Comparable<U>は無くてもよいのだが、無駄でも明記したほうがよさそうなので、
ソースではそうした。
明記しなくとも、Uは正しく推測されているようだ。
ジェネリックは難しい。上のextends Comparable<U>は無くてもよいのだが、無駄でも明記したほうがよさそうなので、
ソースではそうした。
明記しなくとも、Uは正しく推測されているようだ。
793デフォルトの名無しさん
2025/08/06(水) 17:17:53.29ID:qE4NV2ND794デフォルトの名無しさん
2025/08/07(木) 07:21:55.28ID:W/yAWgo4 これからはメソッドの時代
795デフォルトの名無しさん
2025/08/10(日) 23:18:32.78ID:FODtZCg5796デフォルトの名無しさん
2025/08/11(月) 20:38:34.09ID:frWpQyFA797デフォルトの名無しさん
2025/08/12(火) 21:05:08.06ID:uRUBTkGF >>771
PowerShell 6以降
function rank($a)
{
$n = $a.length
$r = [int[]]::new($n)
if ($n) {0..($n - 1) | sort-object -stable {$a[$_]} |% {$i = 0} {$r[$_] = $i++}}
$r
}
function PrintArray($a)
{
if ($a.length -le 1) {return $a}
"[$(($a |% {PrintArray $_}) -join ", ")]"
}
$q =
(1, 100, 10, 10000, 1000),
(3, 1, 4, 1, 5, 9, 2),
(0, 1, 0, 1, 0, 1, 0, 1),
@(),
1,
((1, 1), (1, 1), (1, 0, 1), (1, 0))
$q |% {
"入力: $(PrintArray $_)"
"出力: $(PrintArray (rank $_))"
""
}
PowerShell 6以降
function rank($a)
{
$n = $a.length
$r = [int[]]::new($n)
if ($n) {0..($n - 1) | sort-object -stable {$a[$_]} |% {$i = 0} {$r[$_] = $i++}}
$r
}
function PrintArray($a)
{
if ($a.length -le 1) {return $a}
"[$(($a |% {PrintArray $_}) -join ", ")]"
}
$q =
(1, 100, 10, 10000, 1000),
(3, 1, 4, 1, 5, 9, 2),
(0, 1, 0, 1, 0, 1, 0, 1),
@(),
1,
((1, 1), (1, 1), (1, 0, 1), (1, 0))
$q |% {
"入力: $(PrintArray $_)"
"出力: $(PrintArray (rank $_))"
""
}
798デフォルトの名無しさん
2025/08/12(火) 21:05:40.60ID:uRUBTkGF -- 実行結果 --
入力: [1, 100, 10, 10000, 1000]
出力: [0, 2, 1, 4, 3]
入力: [3, 1, 4, 1, 5, 9, 2]
出力: [3, 0, 4, 1, 5, 6, 2]
入力: [0, 1, 0, 1, 0, 1, 0, 1]
出力: [0, 4, 1, 5, 2, 6, 3, 7]
入力:
出力:
入力: 1
出力: 0
入力: [[1, 1], [1, 1], [1, 0, 1], [1, 0]]
出力: [2, 3, 1, 0]
入力: [1, 100, 10, 10000, 1000]
出力: [0, 2, 1, 4, 3]
入力: [3, 1, 4, 1, 5, 9, 2]
出力: [3, 0, 4, 1, 5, 6, 2]
入力: [0, 1, 0, 1, 0, 1, 0, 1]
出力: [0, 4, 1, 5, 2, 6, 3, 7]
入力:
出力:
入力: 1
出力: 0
入力: [[1, 1], [1, 1], [1, 0, 1], [1, 0]]
出力: [2, 3, 1, 0]
799デフォルトの名無しさん
2025/08/16(土) 01:44:59.97ID:VU+jlz0U 【問題A】
1~9を1つずつ使用して表される9桁の数Anは全部で9!(=362880)個存在する。
整数n(1≦n≦362880)が与えられたとき、n番目に小さいAnを求めよ。
(例)
1 → 123456789
2 → 123456798
3 → 123456879
123456 → 416589732
234567 → 684753219
362880 → 987654321
【問題B】
1~4を3つずつ使用して表される12桁の数Bnは全部で12!/(3!)^4(=369600)個存在する。
整数n(1≦n≦369600)が与えられたとき、n番目に小さいBnを求めよ。
(例)
1 → 111222333444
2 → 111222334344
3 → 111222334434
123456 → 222331434114
234567 → 324424331112
369600 → 444333222111
※求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])
1~9を1つずつ使用して表される9桁の数Anは全部で9!(=362880)個存在する。
整数n(1≦n≦362880)が与えられたとき、n番目に小さいAnを求めよ。
(例)
1 → 123456789
2 → 123456798
3 → 123456879
123456 → 416589732
234567 → 684753219
362880 → 987654321
【問題B】
1~4を3つずつ使用して表される12桁の数Bnは全部で12!/(3!)^4(=369600)個存在する。
整数n(1≦n≦369600)が与えられたとき、n番目に小さいBnを求めよ。
(例)
1 → 111222333444
2 → 111222334344
3 → 111222334434
123456 → 222331434114
234567 → 324424331112
369600 → 444333222111
※求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])
800デフォルトの名無しさん
2025/08/16(土) 13:16:59.50ID:MUbLd8/3 >>799 Rust 愚直にn回まわし
use itertools::Itertools; // for tuple_windows()
fn f(init: &str, n: usize) -> String {
let mut list = init.chars().rev().collect::<Vec<_>>();
for _ in 1..n {
if let Some((pre_index, (_, old))) = list.iter().tuple_windows().enumerate().find(|(_, (pre, cur))| pre > cur) {
let old_index = pre_index + 1;
let (new_index, _) = list.iter().enumerate().find(|(_, cur)| cur > &old).unwrap();
list.swap(old_index, new_index);
list[..old_index].reverse();
}
}
list.into_iter().rev().collect()
}
fn main() {
assert_eq!(f("123456789", 1), "123456789");
assert_eq!(f("123456789", 2), "123456798");
assert_eq!(f("123456789", 3), "123456879");
assert_eq!(f("123456789", 123456), "416589732");
assert_eq!(f("123456789", 234567), "684753219");
assert_eq!(f("123456789", 362880), "987654321");
assert_eq!(f("111222333444", 1), "111222333444");
assert_eq!(f("111222333444", 2), "111222334344");
assert_eq!(f("111222333444", 3), "111222334434");
assert_eq!(f("111222333444", 123456), "222331434114");
assert_eq!(f("111222333444", 234567), "324424331112");
assert_eq!(f("111222333444", 369600), "444333222111");
}
use itertools::Itertools; // for tuple_windows()
fn f(init: &str, n: usize) -> String {
let mut list = init.chars().rev().collect::<Vec<_>>();
for _ in 1..n {
if let Some((pre_index, (_, old))) = list.iter().tuple_windows().enumerate().find(|(_, (pre, cur))| pre > cur) {
let old_index = pre_index + 1;
let (new_index, _) = list.iter().enumerate().find(|(_, cur)| cur > &old).unwrap();
list.swap(old_index, new_index);
list[..old_index].reverse();
}
}
list.into_iter().rev().collect()
}
fn main() {
assert_eq!(f("123456789", 1), "123456789");
assert_eq!(f("123456789", 2), "123456798");
assert_eq!(f("123456789", 3), "123456879");
assert_eq!(f("123456789", 123456), "416589732");
assert_eq!(f("123456789", 234567), "684753219");
assert_eq!(f("123456789", 362880), "987654321");
assert_eq!(f("111222333444", 1), "111222333444");
assert_eq!(f("111222333444", 2), "111222334344");
assert_eq!(f("111222333444", 3), "111222334434");
assert_eq!(f("111222333444", 123456), "222331434114");
assert_eq!(f("111222333444", 234567), "324424331112");
assert_eq!(f("111222333444", 369600), "444333222111");
}
801デフォルトの名無しさん
2025/08/16(土) 19:14:21.11ID:kN4EEg8M >>799 の問題A
1からnまでの自然数を並べてできるi番目の順列を求める関数を前に作って持っていたので、
それを流用したらすぐできた(元の関数はBigIntとiの範囲外エラーにも対応)。
R
https://ideone.com/hMTf2k
C++
https://ideone.com/ZiU5Aa
1からnまでの自然数を並べてできるi番目の順列を求める関数を前に作って持っていたので、
それを流用したらすぐできた(元の関数はBigIntとiの範囲外エラーにも対応)。
R
https://ideone.com/hMTf2k
C++
https://ideone.com/ZiU5Aa
802デフォルトの名無しさん
2025/08/16(土) 20:29:06.33ID:kN4EEg8M803デフォルトの名無しさん
2025/08/16(土) 21:32:58.04ID:kN4EEg8M >>799
>>802 のC++のithDuplicatedPermutation関数は引数が別の値(例えばn = 5, m = 3)のとき
正しく計算できなかったので修正。Rの方はintではなくdoubleで計算しているので問題ない。
https://ideone.com/uH8dpO
>>802 のC++のithDuplicatedPermutation関数は引数が別の値(例えばn = 5, m = 3)のとき
正しく計算できなかったので修正。Rの方はintではなくdoubleで計算しているので問題ない。
https://ideone.com/uH8dpO
804デフォルトの名無しさん
2025/08/16(土) 21:46:08.81ID:VU+jlz0U 32bitだと階乗は12!が限界
805デフォルトの名無しさん
2025/08/17(日) 12:07:33.92ID:R1ye1QDy806805
2025/08/17(日) 15:08:29.44ID:R1ye1QDy807デフォルトの名無しさん
2025/08/17(日) 15:21:28.95ID:OrBxx4uG ソートが消えて>>800と同じアルゴリズムになったね
808デフォルトの名無しさん
2025/08/17(日) 20:40:30.84ID:bUKuWE64 >>804
確かにそうだった。15!も14!もintの範囲内に収まらない。>>803でn = 5に変えた場合に正しい
出力になるのはたまたまだった。
>>802をBigInt化するだけで問題なかった。
R
https://ideone.com/OgBxTJ
C++
https://ideone.com/KLqe3g
確かにそうだった。15!も14!もintの範囲内に収まらない。>>803でn = 5に変えた場合に正しい
出力になるのはたまたまだった。
>>802をBigInt化するだけで問題なかった。
R
https://ideone.com/OgBxTJ
C++
https://ideone.com/KLqe3g
809デフォルトの名無しさん
2025/08/19(火) 21:08:19.27ID:zFi0pntB >>799 問題A
perl
use v5.42;
sub nthPermutation($digits, $rank) {
my @figures = (1..$digits);
my @fact = (1);
push @fact, $_ * $fact[-1] for @figures;
return join "", map { splice(@figures, $_, 1) } sub($n, $r) {
$n-- ? (int($r / $fact[$n]), __SUB__->($n, $r % $fact[$n])) : ();
}->($digits, $rank - 1);
}
for my $i (1, 2, 3, 123456, 234567, 362880) {
say "$i -> " . nthPermutation(9, $i);
}
1 -> 123456789
2 -> 123456798
3 -> 123456879
123456 -> 416589732
234567 -> 684753219
362880 -> 987654321
perl
use v5.42;
sub nthPermutation($digits, $rank) {
my @figures = (1..$digits);
my @fact = (1);
push @fact, $_ * $fact[-1] for @figures;
return join "", map { splice(@figures, $_, 1) } sub($n, $r) {
$n-- ? (int($r / $fact[$n]), __SUB__->($n, $r % $fact[$n])) : ();
}->($digits, $rank - 1);
}
for my $i (1, 2, 3, 123456, 234567, 362880) {
say "$i -> " . nthPermutation(9, $i);
}
1 -> 123456789
2 -> 123456798
3 -> 123456879
123456 -> 416589732
234567 -> 684753219
362880 -> 987654321
810デフォルトの名無しさん
2025/08/19(火) 21:28:38.04ID:ahVErwF8811806
2025/08/21(木) 22:19:54.42ID:fAlkh9Aq812デフォルトの名無しさん
2025/08/21(木) 23:15:48.39ID:0KQ1xtxb >>799 の逆変換プログラム
R
https://ideone.com/TU73Yu
C++
https://ideone.com/dmETd5
問題A, 問題Bとは違って、順列に出現するユニークな整数は1〜nの連番でなくても良いし、
出現回数はすべて同じでなくても良い。例えば、入力は [3, 1, 4, 1, 5, 9] でも良い
(ユニークな整数は1, 3, 4, 5, 9で、出現回数は1が2回、その他が1回)。
R
https://ideone.com/TU73Yu
C++
https://ideone.com/dmETd5
問題A, 問題Bとは違って、順列に出現するユニークな整数は1〜nの連番でなくても良いし、
出現回数はすべて同じでなくても良い。例えば、入力は [3, 1, 4, 1, 5, 9] でも良い
(ユニークな整数は1, 3, 4, 5, 9で、出現回数は1が2回、その他が1回)。
813デフォルトの名無しさん
2025/08/22(金) 01:14:43.39ID:6LYRfbyj814デフォルトの名無しさん
2025/08/22(金) 06:55:21.34ID:qlaiAqZd >>812
Rust >>799の逆変換の重複順列の何番目か算出
use itertools::Itertools;
use num::{BigUint, One};
// 重複順列の何番目かを求める ex. "222331434114" → "123456"番目
fn to_nth(input: &str) -> String {
// 出現数
let (mut counts, chars): (Vec<usize>, Vec<char>) = input.chars().sorted().dedup_with_count().multiunzip();
// index化input
let input: Vec<usize> = input.chars().map(|c| chars.iter().position(|&c0| c0 == c).unwrap()).collect();
// 階乗関数
fn factorial(x: usize) -> BigUint { (1..=x).fold(BigUint::one(), |p, x| p * x) }
// 重複順列の総数
let mut whole: BigUint = factorial(input.len()) / counts.iter().map(|&x| factorial(x)).product::<BigUint>();
// nth番目を算出
(1..=input.len()).rev().zip(input).fold(BigUint::one(), |mut nth, (len, index)| {
// 自分より前までの総数をnthに足す
nth += &whole * counts[..index].iter().sum::<usize>() / len;
// 自分の総数へ更新
whole *= counts[index];
whole /= len;
counts[index] -= 1;
nth
})
.to_string()
}
Rust >>799の逆変換の重複順列の何番目か算出
use itertools::Itertools;
use num::{BigUint, One};
// 重複順列の何番目かを求める ex. "222331434114" → "123456"番目
fn to_nth(input: &str) -> String {
// 出現数
let (mut counts, chars): (Vec<usize>, Vec<char>) = input.chars().sorted().dedup_with_count().multiunzip();
// index化input
let input: Vec<usize> = input.chars().map(|c| chars.iter().position(|&c0| c0 == c).unwrap()).collect();
// 階乗関数
fn factorial(x: usize) -> BigUint { (1..=x).fold(BigUint::one(), |p, x| p * x) }
// 重複順列の総数
let mut whole: BigUint = factorial(input.len()) / counts.iter().map(|&x| factorial(x)).product::<BigUint>();
// nth番目を算出
(1..=input.len()).rev().zip(input).fold(BigUint::one(), |mut nth, (len, index)| {
// 自分より前までの総数をnthに足す
nth += &whole * counts[..index].iter().sum::<usize>() / len;
// 自分の総数へ更新
whole *= counts[index];
whole /= len;
counts[index] -= 1;
nth
})
.to_string()
}
815デフォルトの名無しさん
2025/08/22(金) 06:56:46.07ID:qlaiAqZd >>814の検証分
fn main() {
assert_eq!(to_nth("123456789"), "1");
assert_eq!(to_nth("123456798"), "2");
assert_eq!(to_nth("123456879"), "3");
assert_eq!(to_nth("416589732"), "123456");
assert_eq!(to_nth("684753219"), "234567");
assert_eq!(to_nth("987654321"), "362880");
assert_eq!(to_nth("111222333444"), "1");
assert_eq!(to_nth("111222334344"), "2");
assert_eq!(to_nth("111222334434"), "3");
assert_eq!(to_nth("222331434114"), "123456");
assert_eq!(to_nth("324424331112"), "234567");
assert_eq!(to_nth("444333222111"), "369600");
assert_eq!(to_nth("111333442545225"), "123456");
assert_eq!(to_nth("555444333222111"), "168168000");
assert_eq!(to_nth("11111222223333344444555556666677777899⑩⑩889889⑩⑩⑩9"), "123456");
assert_eq!(to_nth("⑩⑩⑩⑩⑩999998888877777666665555544444333332222211111"), "49120458506088132224064306071170476903628800");
assert_eq!(to_nth("314159"), "127");
assert_eq!(to_nth("3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"), "11503448027594046007734790817193859678406683579515952737315863863451534425766911708030454269");
assert_eq!(to_nth("なまむぎなまごめなまたまご"), "10515454");
assert_eq!(to_nth("かえるぴょこぴょこみぴょこぴょこあわせてぴょこぴょこむぴょこぴょこ"), "8273693808428448039784");
}
fn main() {
assert_eq!(to_nth("123456789"), "1");
assert_eq!(to_nth("123456798"), "2");
assert_eq!(to_nth("123456879"), "3");
assert_eq!(to_nth("416589732"), "123456");
assert_eq!(to_nth("684753219"), "234567");
assert_eq!(to_nth("987654321"), "362880");
assert_eq!(to_nth("111222333444"), "1");
assert_eq!(to_nth("111222334344"), "2");
assert_eq!(to_nth("111222334434"), "3");
assert_eq!(to_nth("222331434114"), "123456");
assert_eq!(to_nth("324424331112"), "234567");
assert_eq!(to_nth("444333222111"), "369600");
assert_eq!(to_nth("111333442545225"), "123456");
assert_eq!(to_nth("555444333222111"), "168168000");
assert_eq!(to_nth("11111222223333344444555556666677777899⑩⑩889889⑩⑩⑩9"), "123456");
assert_eq!(to_nth("⑩⑩⑩⑩⑩999998888877777666665555544444333332222211111"), "49120458506088132224064306071170476903628800");
assert_eq!(to_nth("314159"), "127");
assert_eq!(to_nth("3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"), "11503448027594046007734790817193859678406683579515952737315863863451534425766911708030454269");
assert_eq!(to_nth("なまむぎなまごめなまたまご"), "10515454");
assert_eq!(to_nth("かえるぴょこぴょこみぴょこぴょこあわせてぴょこぴょこむぴょこぴょこ"), "8273693808428448039784");
}
816811
2025/08/22(金) 20:26:43.82ID:m9vhyo0Z817816
2025/08/23(土) 20:27:40.18ID:uyhDG+iz818デフォルトの名無しさん
2025/08/23(土) 21:01:55.02ID:gxRFdG35819817
2025/08/23(土) 23:26:24.12ID:uyhDG+iz820デフォルトの名無しさん
2025/08/24(日) 21:13:57.80ID:ubCw2JoQ >>812の逆変換プログラムは>>808の順変換プログラムを流用したから処理に無駄があった。
逆変換用に一から書き直したらすっきりした。
R
https://ideone.com/jYUHe1
C++
https://ideone.com/Lne3AQ
逆変換用に一から書き直したらすっきりした。
R
https://ideone.com/jYUHe1
C++
https://ideone.com/Lne3AQ
821819
2025/08/25(月) 00:28:39.45ID:IbSJkZLt822デフォルトの名無しさん
2025/08/27(水) 00:40:48.46ID:AbNZa8yo823デフォルトの名無しさん
2025/08/27(水) 21:02:12.94ID:AbNZa8yo824デフォルトの名無しさん
2025/08/27(水) 21:46:51.59ID:B7vE54ji825821
2025/08/28(木) 21:01:46.43ID:mnaa+hsk826デフォルトの名無しさん
2025/08/29(金) 13:52:26.21ID:xrZF+zBK827デフォルトの名無しさん
2025/08/29(金) 20:09:32.40ID:VEuLqGzD828デフォルトの名無しさん
2025/08/29(金) 22:34:59.67ID:uVFRnDIW >>802をCMD (Windowsバッチファイル) に移植
@echo off & setlocal EnableDelayedExpansion
echo 【問題A】
for %%i in (1, 2, 3, 123456, 234567, 362880) do call :ithDuplicatedPermutation 9 1 %%i
echo.
echo 【問題B】
for %%i in (1, 2, 3, 123456, 234567, 369600) do call :ithDuplicatedPermutation 4 3 %%i
exit /b
:ithDuplicatedPermutation
set /a n = %1, m = %2, i = %3, L = 0, P = 1
for /l %%j in (1, 1, %n%) do (
set /a c%%j = %m%
for /l %%k in (1, 1, %m%) do set /a L += 1, P = P * L / %%k
)
set a=%i% →
for /l %%j in (1, 1, %L%) do (
set /a done = 0
for /l %%k in (1, 1, %n%) do (
if !done! equ 0 (
set /a "q = P * c%%k / (L - %%j + 1)"
if !i! leq !q! (
set a=!a!%%k
set /a c%%k -= 1, P = q, done = 1
) else (
set /a i -= q
)
)
)
)
echo %a%
@echo off & setlocal EnableDelayedExpansion
echo 【問題A】
for %%i in (1, 2, 3, 123456, 234567, 362880) do call :ithDuplicatedPermutation 9 1 %%i
echo.
echo 【問題B】
for %%i in (1, 2, 3, 123456, 234567, 369600) do call :ithDuplicatedPermutation 4 3 %%i
exit /b
:ithDuplicatedPermutation
set /a n = %1, m = %2, i = %3, L = 0, P = 1
for /l %%j in (1, 1, %n%) do (
set /a c%%j = %m%
for /l %%k in (1, 1, %m%) do set /a L += 1, P = P * L / %%k
)
set a=%i% →
for /l %%j in (1, 1, %L%) do (
set /a done = 0
for /l %%k in (1, 1, %n%) do (
if !done! equ 0 (
set /a "q = P * c%%k / (L - %%j + 1)"
if !i! leq !q! (
set a=!a!%%k
set /a c%%k -= 1, P = q, done = 1
) else (
set /a i -= q
)
)
)
)
echo %a%
829デフォルトの名無しさん
2025/08/29(金) 22:35:22.12ID:uVFRnDIW -- 実行結果 --
【問題A】
1 → 123456789
2 → 123456798
3 → 123456879
123456 → 416589732
234567 → 684753219
362880 → 987654321
【問題B】
1 → 111222333444
2 → 111222334344
3 → 111222334434
123456 → 222331434114
234567 → 324424331112
369600 → 444333222111
【問題A】
1 → 123456789
2 → 123456798
3 → 123456879
123456 → 416589732
234567 → 684753219
362880 → 987654321
【問題B】
1 → 111222333444
2 → 111222334344
3 → 111222334434
123456 → 222331434114
234567 → 324424331112
369600 → 444333222111
830デフォルトの名無しさん
2025/08/30(土) 17:37:04.21ID:zI+bKiSo831830
2025/09/02(火) 21:36:10.92ID:MM5Gazf9832デフォルトの名無しさん
2025/09/06(土) 23:05:19.87ID:Z/aFZPi6833832
2025/09/07(日) 12:29:41.48ID:O1zDlKW9834833
2025/09/07(日) 14:22:59.56ID:O1zDlKW9835デフォルトの名無しさん
2025/09/08(月) 23:02:49.14ID:4SI/cFAg >>485 scheme (chicken 4.13)
https://ideone.com/feYtNB
>>500 scheme (chicken 4.13)
https://ideone.com/Svhv1y
https://ideone.com/feYtNB
>>500 scheme (chicken 4.13)
https://ideone.com/Svhv1y
836835
2025/09/08(月) 23:33:25.73ID:4SI/cFAg >>485 scheme (chicken 4.13)
https://ideone.com/ejvKat
・(product . lists)
・(product xs . rest) が >>835
https://ideone.com/ejvKat
・(product . lists)
・(product xs . rest) が >>835
837デフォルトの名無しさん
2025/09/09(火) 21:56:29.91ID:PCxKX9bv >>438 scheme (chicken 4.13)
https://ideone.com/6weUjU
・まずまとまりに分割して処理
>>438 scheme (chicken 4.13)
https://ideone.com/BCt6fd
・最初のを四つにして、残りはスキップ
https://ideone.com/6weUjU
・まずまとまりに分割して処理
>>438 scheme (chicken 4.13)
https://ideone.com/BCt6fd
・最初のを四つにして、残りはスキップ
838デフォルトの名無しさん
2025/09/10(水) 21:21:57.38ID:rb/tQvOM >>438
C#で短く書けた
https://ideone.com/SwAZsS
x.EndsWith(" ") でなく x.LastOrDefault() == ' ' の方が長くはなるが効率的かも知れない。
C#で短く書けた
https://ideone.com/SwAZsS
x.EndsWith(" ") でなく x.LastOrDefault() == ' ' の方が長くはなるが効率的かも知れない。
839836
2025/09/10(水) 22:49:33.81ID:NV1RL9MH840839
2025/09/10(水) 23:35:38.95ID:6JfM8ZLf >>485 scheme (chicken 4.13)
https://ideone.com/A6K3XL
・(cons y x)して最後にreverseする
・(list x y)して最後にflattenするのが >>839
https://ideone.com/A6K3XL
・(cons y x)して最後にreverseする
・(list x y)して最後にflattenするのが >>839
841840
2025/09/11(木) 23:05:23.09ID:WPUXbxYH842デフォルトの名無しさん
2025/09/12(金) 15:41:31.15ID:IRXhEt4s お題
1行1単語のリストが、しりとりとして成立しているか判定するコードを書きなさい
成立していたら◯、不成立なら☓をしゅつりょくすること
【入力】
りんご
ごりら
らっぱ
1行1単語のリストが、しりとりとして成立しているか判定するコードを書きなさい
成立していたら◯、不成立なら☓をしゅつりょくすること
【入力】
りんご
ごりら
らっぱ
843デフォルトの名無しさん
2025/09/12(金) 16:19:33.85ID:uazXAFOm 入力例に対する出力例が存在しなくて曖昧
それを補わないと問題が不成立
それを補わないと問題が不成立
844デフォルトの名無しさん
2025/09/12(金) 20:36:05.46ID:I2wrB793 >>438 scheme (chicken 4.13)
https://ideone.com/SlkO0l
・空白時にdrop-while
>>842 ruby
https://ideone.com/mY83rW
https://ideone.com/SlkO0l
・空白時にdrop-while
>>842 ruby
https://ideone.com/mY83rW
845デフォルトの名無しさん
2025/09/13(土) 12:21:51.23ID:nVmVuqdT 退屈そうだからちょっと難易度高め
【問題】
各桁の数が1~5のいずれかで全ての桁の合計がMとなる正整数の集合をG[M]で表す。
例えば123、111111はG[6]の要素、255、222222はG[12]の要素となる。
整数M(1≦M≦32)、N(1≦N)が与えられたとき、N番目に小さいG[M]の要素を求めよ。
ただしNがG[M]の要素数より大きい場合の出力は0とする。
求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])。
【例】 #入力は(M,N)
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0
(32,1) → 2555555
(32,2) → 3455555
(32,3) → 3545555
(32,1000) → 34355354
(32,1000000) → 11532334334
(32,1000000000) → 2141111311212411131
(32,1333610936) → 11111111111111111111111111111111
(32,1333610937) → 0
【ヒント(?)】
G[M]の要素数の数列は下記pentanacci数列a[n]から先頭の[0,0,0,0,1]を除いたものとなる(|G[M]| = a[M + 4])。
・a[0,1,2,3,4] = [0,0,0,0,1]
・a[k] = a[k-1] + a[k-2] + a[k-3] + a[k-4] + a[k-5] (k≧5)
※a[37]までのリスト: https://oeis.org/A001591/list
【問題】
各桁の数が1~5のいずれかで全ての桁の合計がMとなる正整数の集合をG[M]で表す。
例えば123、111111はG[6]の要素、255、222222はG[12]の要素となる。
整数M(1≦M≦32)、N(1≦N)が与えられたとき、N番目に小さいG[M]の要素を求めよ。
ただしNがG[M]の要素数より大きい場合の出力は0とする。
求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])。
【例】 #入力は(M,N)
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0
(32,1) → 2555555
(32,2) → 3455555
(32,3) → 3545555
(32,1000) → 34355354
(32,1000000) → 11532334334
(32,1000000000) → 2141111311212411131
(32,1333610936) → 11111111111111111111111111111111
(32,1333610937) → 0
【ヒント(?)】
G[M]の要素数の数列は下記pentanacci数列a[n]から先頭の[0,0,0,0,1]を除いたものとなる(|G[M]| = a[M + 4])。
・a[0,1,2,3,4] = [0,0,0,0,1]
・a[k] = a[k-1] + a[k-2] + a[k-3] + a[k-4] + a[k-5] (k≧5)
※a[37]までのリスト: https://oeis.org/A001591/list
846デフォルトの名無しさん
2025/09/13(土) 21:09:19.41ID:rhMflYHg847デフォルトの名無しさん
2025/09/14(日) 02:07:05.25ID:K9dbpWus848デフォルトの名無しさん
2025/09/14(日) 02:17:37.66ID:ymjVQadn849デフォルトの名無しさん
2025/09/14(日) 21:00:58.83ID:Yva1i9w5 >>845
R
https://ideone.com/XhdJw4
>>846より行列計算が速くなった。変数名mとnが逆だったのを直した。
C++に移植
https://ideone.com/9dibE0
R
https://ideone.com/XhdJw4
>>846より行列計算が速くなった。変数名mとnが逆だったのを直した。
C++に移植
https://ideone.com/9dibE0
850デフォルトの名無しさん
2025/09/14(日) 22:50:48.82ID:Yva1i9w5851848
2025/09/15(月) 00:34:43.20ID:aTaxsjKO852851
2025/09/15(月) 00:58:49.72ID:aTaxsjKO853デフォルトの名無しさん
2025/09/15(月) 22:27:44.05ID:g8zilsSB >>850では行末に無駄な半角空白文字が出力される。消すには最後から3行目のnthPartition(m, n)を
trim( )で囲めば良い。
trim( )で囲めば良い。
854852
2025/09/16(火) 01:02:30.84ID:3CKXdG+H855854
2025/09/17(水) 22:30:29.22ID:U8XLHdaR856デフォルトの名無しさん
2025/09/17(水) 22:43:48.03ID:RlLGu0ST857デフォルトの名無しさん
2025/09/17(水) 23:39:47.32ID:RlLGu0ST >>856
BigInt化してm = 2000, n = 2¹⁰²⁴で実行したら違いが明確になった。
(1) >>849のBigInt版
https://ideone.com/S92L9G
(2) >>856のBigInt版
https://ideone.com/3x03xT
加減算・代入回数を削減した(2)の方が確かに速く、(1)の約4分の3の実行時間。
BigInt化してm = 2000, n = 2¹⁰²⁴で実行したら違いが明確になった。
(1) >>849のBigInt版
https://ideone.com/S92L9G
(2) >>856のBigInt版
https://ideone.com/3x03xT
加減算・代入回数を削減した(2)の方が確かに速く、(1)の約4分の3の実行時間。
858855
2025/09/18(木) 21:13:33.56ID:mk4sIpUK859858
2025/09/19(金) 21:59:08.62ID:e72KvXSi860859
2025/09/20(土) 21:39:31.29ID:zrmIrXrK861860
2025/09/22(月) 21:37:36.11ID:9W7EeSnZ >>845 ruby 2.5.5
https://ideone.com/MDHX6v
・内部表現のさらなる変更
・パターン数を直接キャッシュするようにした
cc[合計][幅] = とりうるパターン数
>>845 ruby
https://ideone.com/PB8S7w
・m = 2000, n = 1 << 1024
https://ideone.com/MDHX6v
・内部表現のさらなる変更
・パターン数を直接キャッシュするようにした
cc[合計][幅] = とりうるパターン数
>>845 ruby
https://ideone.com/PB8S7w
・m = 2000, n = 1 << 1024
862861
2025/09/23(火) 01:13:48.01ID:XS9iE/WB863862
2025/09/26(金) 21:58:13.14ID:rAOVnJgT >>845 ruby
https://ideone.com/YEGl7C
・実りの無い再帰を省略
・結果を配列で集めず整数で集める
>>845 c++
https://ideone.com/f62fkG
・rubyの移植版
>>845 ocaml
https://ideone.com/cHYmdv
・rubyの移植版
・任意精度整数は昔ながらのnumのBig_int使用
・ZarithのZは確かに速かったけどideoneでは使えずボツ
https://ideone.com/YEGl7C
・実りの無い再帰を省略
・結果を配列で集めず整数で集める
>>845 c++
https://ideone.com/f62fkG
・rubyの移植版
>>845 ocaml
https://ideone.com/cHYmdv
・rubyの移植版
・任意精度整数は昔ながらのnumのBig_int使用
・ZarithのZは確かに速かったけどideoneでは使えずボツ
864デフォルトの名無しさん
2025/10/19(日) 18:23:02.12ID:UPYRyJKx お題
硬貨の種類と金額が与えられます。
硬化の合計がちょうど金額と同じになるように硬貨を選ぶとき、使用枚数の最小値を求めてください。
支払いが不可能なときは-1を出力します。
各硬貨は無制限に使用できます。
額面の大きい硬貨を優先して選ぶ貪欲法が常に最適解を与えるとは限らないことに注意。
入力
硬貨:[1,7,10]
金額:14
出力
使用枚数:2
硬貨の種類と金額が与えられます。
硬化の合計がちょうど金額と同じになるように硬貨を選ぶとき、使用枚数の最小値を求めてください。
支払いが不可能なときは-1を出力します。
各硬貨は無制限に使用できます。
額面の大きい硬貨を優先して選ぶ貪欲法が常に最適解を与えるとは限らないことに注意。
入力
硬貨:[1,7,10]
金額:14
出力
使用枚数:2
865デフォルトの名無しさん
2025/10/19(日) 21:36:07.90ID:1trCfbwI866デフォルトの名無しさん
2025/10/22(水) 21:34:32.83ID:vm0Iby1T867デフォルトの名無しさん
2025/10/26(日) 09:31:44.23ID:Y3+SSpql お題というか、協力してほしい感じなんですが、素因数分解関数をHaskellで書いて色んな数を素因数分解して遊んでいたら確認したい事実に出くわしたので。
31 <- 素数
331 <- 素数
3331 <- 素数
33331 <- 素数
333331 <- 素数
と、3が5個並んで末尾が1の数字までは素数という事が分かりましたが、いかんせん、ノートだと力不足。
それにCとかで書き直したらもっと先まで行けるかも?という事で、この先、どこまで33...31が素数なのかを調べて欲しいのです。
協力お願いします<(_ _)>
一応、Haskellではこんなコードです。
factorization n = f primes n
where primes = 2:(sieve [3,5..])
where sieve (p:xs) = p:(sieve [x | x <- xs, x `mod` p /= 0])
f (p:ps) n | n <= p = [n]
f (p:ps) n | n `mod` p == 0 = p:f (p:ps) (n `div` p)
f (p:ps) n = f ps n
31 <- 素数
331 <- 素数
3331 <- 素数
33331 <- 素数
333331 <- 素数
と、3が5個並んで末尾が1の数字までは素数という事が分かりましたが、いかんせん、ノートだと力不足。
それにCとかで書き直したらもっと先まで行けるかも?という事で、この先、どこまで33...31が素数なのかを調べて欲しいのです。
協力お願いします<(_ _)>
一応、Haskellではこんなコードです。
factorization n = f primes n
where primes = 2:(sieve [3,5..])
where sieve (p:xs) = p:(sieve [x | x <- xs, x `mod` p /= 0])
f (p:ps) n | n <= p = [n]
f (p:ps) n | n `mod` p == 0 = p:f (p:ps) (n `div` p)
f (p:ps) n = f ps n
868デフォルトの名無しさん
2025/10/26(日) 09:50:23.90ID:Y3+SSpql あ、ただの素数判定でも良いです。
ちなみに、66..61の場合は6661までは素数ですが66661は素数じゃなくなりました。
なので、33..31もどこかで素数じゃなくなるのか?それともずっと素数になりそうなのか?って疑問が持ち上がりました。
ちなみに、66..61の場合は6661までは素数ですが66661は素数じゃなくなりました。
なので、33..31もどこかで素数じゃなくなるのか?それともずっと素数になりそうなのか?って疑問が持ち上がりました。
869デフォルトの名無しさん
2025/10/26(日) 10:13:01.91ID:XLS0tlS8 >>867
興を削いですまんが、「33...331は素数か」でググったら、AIが(あまり大きくない桁数で)答えを示してくれた…
興を削いですまんが、「33...331は素数か」でググったら、AIが(あまり大きくない桁数で)答えを示してくれた…
870デフォルトの名無しさん
2025/10/26(日) 10:19:15.38ID:0X7G2IAI871869
2025/10/26(日) 10:21:11.68ID:XLS0tlS8872デフォルトの名無しさん
2025/10/26(日) 17:08:32.87ID:Y3+SSpql >>869-871
いえいえ、ああ、やっぱりずっと素数という訳にはいかないんですね…。
何か素数の秘密に触れるヒントか?と心躍ったけど、そんな訳なかったですね(´・ω・`)
あやうく数学スレで鼻息荒く書き込むところでした。
ありがとうございました<(_ _)>
いえいえ、ああ、やっぱりずっと素数という訳にはいかないんですね…。
何か素数の秘密に触れるヒントか?と心躍ったけど、そんな訳なかったですね(´・ω・`)
あやうく数学スレで鼻息荒く書き込むところでした。
ありがとうございました<(_ _)>
873デフォルトの名無しさん
2025/10/26(日) 17:55:12.41ID:N6SeZsiy 29bitで収まる範囲内
333333331 = 17 × 19607843
これを求められなかったHaskellはすごく遅い?
333333331 = 17 × 19607843
これを求められなかったHaskellはすごく遅い?
874デフォルトの名無しさん
2025/10/26(日) 23:06:07.50ID:Y3+SSpql >>873
速いアルゴリズムに変えたら何とか1分ほどでその数字まで届きました。
(そもそも、>867 のは美しいとか短いとかの枕詞が付くコードですし。33...31に気付かなかったら4桁ぐらいが実用的ならおkだったので)
改良版Haskell
pfactorization = f primes
where primes =2:3:5#primes
where n#x@(m:q:y)=[n|gcd m n<2]++(n+2)#last(x:[m*q:y|q^2-3<n])
というか、それより1桁少ない方が少し時間かかりますね。
19607843 < 33333331 なので、素数比較回数が多いのかと。
速いアルゴリズムに変えたら何とか1分ほどでその数字まで届きました。
(そもそも、>867 のは美しいとか短いとかの枕詞が付くコードですし。33...31に気付かなかったら4桁ぐらいが実用的ならおkだったので)
改良版Haskell
pfactorization = f primes
where primes =2:3:5#primes
where n#x@(m:q:y)=[n|gcd m n<2]++(n+2)#last(x:[m*q:y|q^2-3<n])
というか、それより1桁少ない方が少し時間かかりますね。
19607843 < 33333331 なので、素数比較回数が多いのかと。
875デフォルトの名無しさん
2025/10/26(日) 23:07:37.04ID:Y3+SSpql あ、f の方を忘れた。
f のコードは変更なしです。
f のコードは変更なしです。
876デフォルトの名無しさん
2025/11/07(金) 05:48:17.42ID:ckPLmv2U >>868
cだとこんな感じでいいのかな?
3333333333333331くらいまで一瞬でできる
#include <stdio.h>
int main(void) {
long long d, n;
printf("Enter a number: ");
scanf("%lld", &n);
for (d = 2; d * d <= n; d++) {
if (n % d == 0)
break;
}
if (d * d <= n)
printf("%lld is divisible by %lld\n", n, d);
else
printf("%lld is prime.\n", n);
return 0;
}
cだとこんな感じでいいのかな?
3333333333333331くらいまで一瞬でできる
#include <stdio.h>
int main(void) {
long long d, n;
printf("Enter a number: ");
scanf("%lld", &n);
for (d = 2; d * d <= n; d++) {
if (n % d == 0)
break;
}
if (d * d <= n)
printf("%lld is divisible by %lld\n", n, d);
else
printf("%lld is prime.\n", n);
return 0;
}
レスを投稿する
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市朗報】 日本政府「一昨年は1300億円。去年も防衛費が1100億円余ったw」 日本の防衛費は充分足りてる事が判明。増やす必要無し [485983549]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
