プログラミングのお題スレ Part22 (863レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
66: デフォルトの名無しさん [] 2023/08/24(木) 22:51:17.82 ID:hcnR5QOK(1) AAS
>>64
64(3): デフォルトの名無しさん [sage] 2023/08/24(木) 05:04:40.60 ID:UkV1PQmo(1) AAS
お題:2Dゲームのスクロール処理
整数の二次元配列(高さ50, 横幅100)上にランダムに整数1〜9が200個配置される。
この配列を高さ20, 横幅40の矩形領域に切り取って表示したい。キーボードの入力(l, r, t, b)で矩形領域を移動させ切り取る領域を変化させよ。
PowerShell (等幅フォント限定。最初は一番左上の領域が表示される。qキーで終了。Ubuntu版ではカーソルが消えない)

$a = random (1..9999) -count 200 |% {$_ % 9 + 1}
$b = random (0..4999) -count 200
$c = [char[][]](,(," " * 100) * 50)
0..199 |% {$c[[Math]::Floor($b[$_] / 100)][$b[$_] % 100] = [string]$a[$_]}
$L = 0..49 |% {-join $c[$_]}

$UI = $Host.UI.RawUI
$p, $s = $UI.CursorPosition, $UI.CursorSize
$p.y = [Math]::Min($p.y, $UI.BufferSize.Height - 23)
$x = $y = 0
$border = "+" + "-" * 40 + "+"
while ($true) {
   try {$UI.CursorSize = 0} catch {}
   $UI.CursorPosition = $p
   $border
   0..19 |% {"|" + $L[$y + $_].SubString($x, 40) + "|"}
   $border
   switch ($UI.ReadKey(6).Character) {
     "l" {if ($x -gt +0) {$x--}}
     "r" {if ($x -lt 60) {$x++}}
     "t" {if ($y -gt +0) {$y--}}
     "b" {if ($y -lt 30) {$y++}}
     "q" {try {$UI.CursorSize = $s} catch {} return}
   }
}
138: 134 [sage] 2023/10/18(水) 21:52:04.82 ID:4ifgnZXl(4/4) AAS
>>136
136(1): デフォルトの名無しさん [sage] 2023/10/18(水) 20:56:02.06 ID:L3TY2GGf(1) AAS
import struct

def my_ulp(x):
# 浮動小数点数xをバイト列に変換
b = struct.pack("d", x)
# バイト列を整数に変換
i = int.from_bytes(b, "little")
# 符号部(1ビット)を取り出す
s = i >> 63
# 指数部(11ビット)を取り出す
e = (i >> 52) & 0x7ff
# 仮数部(52ビット)を取り出す
m = i & 0xfffffffffffff
# 指数部が0や最大値ならエラー
if e == 0 or e == 0x7ff:
raise ValueError("x is not a normalized number")
# 仮数部の最下位ビット(1ビット)を求める
lsb = m & 1
# 符号部と指数部を元に戻す
i = (s << 63) | ((e - lsb) << 52)
# 整数をバイト列に変換
b = i.to_bytes(8, "little")
# バイト列を浮動小数点数に変換
return struct.unpack("d", b)[0]
math.ulp()は符号を戻さないらしいです:
ulp(1) == ulp(-1)
393: デフォルトの名無しさん [sage] 2024/08/03(土) 22:42:49.82 ID:t4RpIT1N(1) AAS
>>390
390(1): デフォルトの名無しさん [] 2024/08/03(土) 22:29:35.16 ID:S2fEkJP0(2/4) AAS
テンプレに書いてなかったしいいやって思っちゃった
ここまで伝わらんもんなのか…
そういうことは伝える努力をしてから言おうな
442: デフォルトの名無しさん [] 2024/10/11(金) 22:15:53.82 ID:H5F5jhxE(1) AAS
>>438
438(10): デフォルトの名無しさん [sage] 2024/10/11(金) 05:53:27.29 ID:EzY86rdr(1/2) AAS
お題:文字列の中で1つ以上連続している空白をすべて空白4つに置換せよ。ただし正規表現は使ってはならない。

例:
"abc def ghi" -> "abc def ghi"
R
外部リンク:ideone.com
464
(9): デフォルトの名無しさん [] 2025/01/03(金) 13:22:57.82 ID:dEYOS8Dq(1/2) AAS
お題
AのあとにAと同じ数だけBが続く言語エビがあるとします
文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください

→ true
A → false
B → false
AB → true
ABB → false
AAB → false
AABB → true
ABAABBAAABBB→ true
485
(20): デフォルトの名無しさん [] 2025/01/22(水) 21:35:12.82 ID:JtEnwxKE(1) AAS
お題

文字列と長さを入力として受け取り
デカルト積のリストを出力してください

入力: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]
816
(1): 811 [sage] 2025/08/22(金) 20:26:43.82 ID:m9vhyo0Z(1) AAS
>>799
799(20): デフォルトの名無しさん [sage] 2025/08/16(土) 01:44:59.97 ID:VU+jlz0U(1/2) AAS
【問題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])
ruby
外部リンク:ideone.com
・問題A時に全体的な規則性に着目
・部分的に着目しちゃったのが>>811
811(1): 806 [sage] 2025/08/21(木) 22:19:54.42 ID:fAlkh9Aq(1) AAS
>>799 ruby
外部リンク:ideone.com
・問題A時に若干端折る
・何も工夫を入れなかったのが>>806
806(2): 805 [sage] 2025/08/17(日) 15:08:29.44 ID:R1ye1QDy(2/2) AAS
>>799 ruby 若干の改善
外部リンク:ideone.com

>>799 c 若干の改善
外部リンク:ideone.com

850
(1): デフォルトの名無しさん [] 2025/09/14(日) 22:50:48.82 ID:Yva1i9w5(2/2) AAS
>>845
845(15): デフォルトの名無しさん [sage] 2025/09/13(土) 12:21:51.23 ID:nVmVuqdT(1) AAS
退屈そうだからちょっと難易度高め

【問題】
各桁の数が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]までのリスト: 外部リンク:oeis.org
Fortranに移植
外部リンク:ideone.com

行列計算を短く書けて、しかも実行が速い。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.042s