プログラミングのお題スレです。
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
結果がある場合はそれも
【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part21
https://mevius.5ch.net/test/read.cgi/tech/1668333636/
プログラミングのお題スレ Part22
1デフォルトの名無しさん
2023/08/03(木) 13:52:13.20ID:/xW45k0z2023/08/15(火) 23:36:55.46ID:GhE5EH0z
蟻人間がコテハン外したのかな
2023/08/16(水) 10:34:21.25ID:tgyEZLGb
可視光より赤外線の方が雲はきれいだけど
可視光は影が毎日くるくる回るからこっちはこっちで面白いね
可視光は影が毎日くるくる回るからこっちはこっちで面白いね
439
2023/08/16(水) 13:32:44.58ID:vjpqg3x7 >>40 bash、curl および GraphicsMagick の convert コマンドを使用。動作確認したOSはUbuntu 20.04LTS。数百枚のjpegからgifへのconvertには多少時間がかかります。
オプション -h または --highres を指定すると 2048x2048、オプション無しあるいは -l または --lowreso を指定すると 512x512、なおボーナスはスイス銀行の秘密口座に。
※見易くするためインデントは全角スペースに置換してあります。8月16日23時まで取得するようにしているがまだ無い将来の画像は含まない。
res='512x512' # default
OPT=`getopt -o hl -l highreso,lowreso -- "$@"`
eval set -- "$OPT"
while true; do
case "$1" in
-h | --highreso)
res='2048x2048'
shift ;;
-l | --lowreso)
res='512x512'
shift ;;
--)
shift
break ;;
esac
done
dir=$(mktemp -d TmpDir.XXXXXX)
for d in $(seq -w 01 16); do
for h in $(seq -w 0 23); do
dh="$d$h"
file="HMW92308${dh}.globe.1.jpg"
url="http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}"
echo $url; curl -f -s -R -o "$dir/$file" $url
done
done
#set -x
time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif
ls -o TyphoonAime${res}.gif
オプション -h または --highres を指定すると 2048x2048、オプション無しあるいは -l または --lowreso を指定すると 512x512、なおボーナスはスイス銀行の秘密口座に。
※見易くするためインデントは全角スペースに置換してあります。8月16日23時まで取得するようにしているがまだ無い将来の画像は含まない。
res='512x512' # default
OPT=`getopt -o hl -l highreso,lowreso -- "$@"`
eval set -- "$OPT"
while true; do
case "$1" in
-h | --highreso)
res='2048x2048'
shift ;;
-l | --lowreso)
res='512x512'
shift ;;
--)
shift
break ;;
esac
done
dir=$(mktemp -d TmpDir.XXXXXX)
for d in $(seq -w 01 16); do
for h in $(seq -w 0 23); do
dh="$d$h"
file="HMW92308${dh}.globe.1.jpg"
url="http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}"
echo $url; curl -f -s -R -o "$dir/$file" $url
done
done
#set -x
time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif
ls -o TyphoonAime${res}.gif
459
2023/08/16(水) 19:12:35.95ID:y9YJABkH >>43 これだと、scriptを実行するたびに全てのjpegファイルをtemporaryディレクトリにdownloadするためサーバの負荷の面で行儀がよくないので、
ディレクリは TyphoonJpegDir512x512 または TyphoonJpegDir2048x2048 で固定とし、未取得のjpegがあればdownloadするように直すわ。
res='512x512' # default
OPT=`getopt -o hl -l highreso,lowreso -- "$@"`
eval set -- "$OPT"
while true; do
case "$1" in
-h | --highreso)
res='2048x2048'
shift ;;
-l | --lowreso)
res='512x512'
shift ;;
--)
shift
break ;;
esac
done
dir=./TyphoonJpegDir${res}
for d in $(seq -w 01 16); do
for h in $(seq -w 0 23); do
file="HMW92308${d}${h}.globe.1.jpg"
url="http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}"
[ -f $dir/$file ] || { echo $url; curl -f -s -R -o "$dir/$file" $url; }
done
done
#set -x
time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif
ls -o TyphoonAime${res}.gif
※見やすくするためインデントは全角スペースに置換してあります。
ディレクリは TyphoonJpegDir512x512 または TyphoonJpegDir2048x2048 で固定とし、未取得のjpegがあればdownloadするように直すわ。
res='512x512' # default
OPT=`getopt -o hl -l highreso,lowreso -- "$@"`
eval set -- "$OPT"
while true; do
case "$1" in
-h | --highreso)
res='2048x2048'
shift ;;
-l | --lowreso)
res='512x512'
shift ;;
--)
shift
break ;;
esac
done
dir=./TyphoonJpegDir${res}
for d in $(seq -w 01 16); do
for h in $(seq -w 0 23); do
file="HMW92308${d}${h}.globe.1.jpg"
url="http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}"
[ -f $dir/$file ] || { echo $url; curl -f -s -R -o "$dir/$file" $url; }
done
done
#set -x
time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif
ls -o TyphoonAime${res}.gif
※見やすくするためインデントは全角スペースに置換してあります。
4617
2023/08/17(木) 00:52:29.22ID:YACPkQ1f >>40
Kotlin
ただし paiza.io のサイトの都合で大きい画像の出力がうまく行かないのと時間が掛かるとタイムアウトしてしまうので、
それらを避けるために 2023/08/15~2023/08/16 の8時間間隔(0, 8, 16 時)の画像を収集して 120x120 の大きさに
変更してアニメーションGIFにして出力するようにした。その時に HTML で <img src="data:image/gif;base64,...">
で埋め込んでいるのでHTMLモードで表示させるとブラウザに画像が表示される。スマホでも見てみたがちゃんと
動いている画像で表示された。
https://paiza.io/projects/w-fOIVbPGuSPh1_DJTSatA
Kotlin
ただし paiza.io のサイトの都合で大きい画像の出力がうまく行かないのと時間が掛かるとタイムアウトしてしまうので、
それらを避けるために 2023/08/15~2023/08/16 の8時間間隔(0, 8, 16 時)の画像を収集して 120x120 の大きさに
変更してアニメーションGIFにして出力するようにした。その時に HTML で <img src="data:image/gif;base64,...">
で埋め込んでいるのでHTMLモードで表示させるとブラウザに画像が表示される。スマホでも見てみたがちゃんと
動いている画像で表示された。
https://paiza.io/projects/w-fOIVbPGuSPh1_DJTSatA
2023/08/18(金) 10:27:20.40ID:Rd3M1fjh
可視光は globe.0 だな
しかも夜のデータ無いやん
しかも夜のデータ無いやん
2023/08/18(金) 11:07:33.13ID:wx26N4AH
>>40
UTC で答えてる人が多いみたいだけど
>例
>8/14/0/0 http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081315.globe.1.jpg
JST ですよね
UTC で答えてる人が多いみたいだけど
>例
>8/14/0/0 http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081315.globe.1.jpg
JST ですよね
49デフォルトの名無しさん
2023/08/18(金) 17:11:49.56ID:TT1gR8pP 過去未来100年(幅201年)の範囲で
2023年とカレンダーの曜日が一致する年を全て出力せよ
また任意の指定年の前後100年で同じ動作をする(閏年も考慮)ように改変せよ
2023年とカレンダーの曜日が一致する年を全て出力せよ
また任意の指定年の前後100年で同じ動作をする(閏年も考慮)ように改変せよ
50デフォルトの名無しさん
2023/08/18(金) 20:03:41.92ID:Bxqhk52951デフォルトの名無しさん
2023/08/19(土) 00:14:13.53ID:Za4r2XUP2023/08/19(土) 02:12:13.34ID:7swIlm9f
6,11,11,6,11,11,・・・なんでこうなうの?
2023/08/19(土) 10:40:53.03ID:7swIlm9f
>>48
JSTだとしたら
>8/15/15/0 http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081505.globe.1.jpg
は
8/15/14/0
じゃないかな
夏時間?
JSTだとしたら
>8/15/15/0 http://agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081505.globe.1.jpg
は
8/15/14/0
じゃないかな
夏時間?
54デフォルトの名無しさん
2023/08/20(日) 20:19:24.17ID:T0IVLETo >>52
365と366を7で割った余りは1と2なので、平年には翌年の元日の曜日が1つ進み、閏年には2つ進む。
100の倍数の年の例外を除けば、曜日の進みは1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, ...のように
1, 1, 1, 2というパターンの繰り返しになる。
パターン1, 1, 1, 2のうちの最初の1の年から始めて、何年後に曜日の進みの累積が7の倍数かつ
その年が閏年でなくなるかを順々に求めれば6, 11, 11年後となり、ここでパターン1, 1, 1, 2の
うちの最初の1の年に戻るので、以降は6, 11, 11年後というパターンの繰り返しになる。
┌──────────┐
│ ↓
@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷
│ ↑ │ ↑
└─────┘ └──────────┘
365と366を7で割った余りは1と2なので、平年には翌年の元日の曜日が1つ進み、閏年には2つ進む。
100の倍数の年の例外を除けば、曜日の進みは1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, ...のように
1, 1, 1, 2というパターンの繰り返しになる。
パターン1, 1, 1, 2のうちの最初の1の年から始めて、何年後に曜日の進みの累積が7の倍数かつ
その年が閏年でなくなるかを順々に求めれば6, 11, 11年後となり、ここでパターン1, 1, 1, 2の
うちの最初の1の年に戻るので、以降は6, 11, 11年後というパターンの繰り返しになる。
┌──────────┐
│ ↓
@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷
│ ↑ │ ↑
└─────┘ └──────────┘
55蟻人間 ◆T6xkBnTXz7B0
2023/08/20(日) 21:28:53.42ID:KEiNPJgB お題: お風呂の準備。
容積225Lの浴槽に適温39度のお湯200Lを用意したい。
次の2つのスイッチのON/OFFを切り替えてお湯を用意するプログラムを作れ。
スイッチ1: これをONにすると浴槽に水温20度の水を分速10Lで投入する。
スイッチ2: これをONにすると浴槽の水を800ワットの電熱線で加熱する。
ただし、浴槽に容積の1/2以上の水またはお湯が入っていないときは、空焚き防止のため、加熱しないものとする。
放熱は考慮しなくてもよい。
出力例)
時刻??: スイッチ1をONにしました。
時刻??: スイッチ2をONにしました。
時刻??: お風呂ができました。
時刻??: スイッチ1をOFFにしました。
時刻??: スイッチ2をOFFにしました。
容積225Lの浴槽に適温39度のお湯200Lを用意したい。
次の2つのスイッチのON/OFFを切り替えてお湯を用意するプログラムを作れ。
スイッチ1: これをONにすると浴槽に水温20度の水を分速10Lで投入する。
スイッチ2: これをONにすると浴槽の水を800ワットの電熱線で加熱する。
ただし、浴槽に容積の1/2以上の水またはお湯が入っていないときは、空焚き防止のため、加熱しないものとする。
放熱は考慮しなくてもよい。
出力例)
時刻??: スイッチ1をONにしました。
時刻??: スイッチ2をONにしました。
時刻??: お風呂ができました。
時刻??: スイッチ1をOFFにしました。
時刻??: スイッチ2をOFFにしました。
5617
2023/08/20(日) 22:57:39.22ID:pbHEs6OP >>49
Kotlin
折角なので Iterator で作った。(でも AbstractIterator クラス使ったので特に苦労はしていない)
https://paiza.io/projects/v1X96MyvBFn0N4z9X-9gkw
Kotlin
折角なので Iterator で作った。(でも AbstractIterator クラス使ったので特に苦労はしていない)
https://paiza.io/projects/v1X96MyvBFn0N4z9X-9gkw
5717
2023/08/20(日) 23:07:16.25ID:pbHEs6OP >>55
800Wの電熱線で加熱するとどれだけの量の水がどのぐらいの時間で1度上がるか、など、基本的な事が分からない。
800Wの電熱線で加熱するとどれだけの量の水がどのぐらいの時間で1度上がるか、など、基本的な事が分からない。
2023/08/21(月) 05:17:48.42ID:9NybdpKD
59デフォルトの名無しさん
2023/08/21(月) 10:53:53.65ID:qNeGin4f >>58へのお題
指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ
指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ
2023/08/21(月) 12:55:28.09ID:tqXtwiP4
// Rust 双方向イテレータ版
struct SameCalendarYear(u32);
impl Iterator for SameCalendarYear {
type Item = u32;
fn next(&mut self) -> Option<u32> {
common_next(self.0, false).map(|year| { self.0 = year; year })
}
}
impl DoubleEndedIterator for SameCalendarYear {
fn next_back(&mut self) -> Option<u32> {
common_next(self.0, true).map(|year| { self.0 = year; year })
}
}
fn common_next(start_year: u32, is_before: bool) -> Option<u32> {
let mut day = 0;
let mut year = start_year;
while year > 0 {
if is_before { year -= 1; }
day += 1 + leap(year);
if day >= 7 { day -= 7; }
if !is_before { year += 1; }
if day == 0 && leap(year) == leap(start_year) {
return Some(year);
}
}
None
}
fn leap(year: u32) -> u32 {
(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) as u32
}
struct SameCalendarYear(u32);
impl Iterator for SameCalendarYear {
type Item = u32;
fn next(&mut self) -> Option<u32> {
common_next(self.0, false).map(|year| { self.0 = year; year })
}
}
impl DoubleEndedIterator for SameCalendarYear {
fn next_back(&mut self) -> Option<u32> {
common_next(self.0, true).map(|year| { self.0 = year; year })
}
}
fn common_next(start_year: u32, is_before: bool) -> Option<u32> {
let mut day = 0;
let mut year = start_year;
while year > 0 {
if is_before { year -= 1; }
day += 1 + leap(year);
if day >= 7 { day -= 7; }
if !is_before { year += 1; }
if day == 0 && leap(year) == leap(start_year) {
return Some(year);
}
}
None
}
fn leap(year: u32) -> u32 {
(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) as u32
}
2023/08/21(月) 12:57:26.59ID:tqXtwiP4
>>59
指定した年と同じカレンダーの年を前後 n 個表示
(長くなるので今回は10個だけ表示)
fn main() {
let n = 10;
for year in [2000, 2023, 2024, 2025, 2100] {
println!("{year}年より前: {:?}", SameCalendarYear(year).rev().take(n).collect::<Vec<_>>());
println!("{year}年より後: {:?}", SameCalendarYear(year).take(n).collect::<Vec<_>>());
}
}
このRust公式の実行環境で実行やコード編集ができます
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=5e5a518120f75351ca5ff5fdd0bf4d8c
// 実行結果
2000年より前: [1972, 1944, 1916, 1876, 1848, 1820, 1780, 1752, 1724, 1684]
2000年より後: [2028, 2056, 2084, 2124, 2152, 2180, 2220, 2248, 2276, 2316]
2023年より前: [2017, 2006, 1995, 1989, 1978, 1967, 1961, 1950, 1939, 1933]
2023年より後: [2034, 2045, 2051, 2062, 2073, 2079, 2090, 2102, 2113, 2119]
2024年より前: [1996, 1968, 1940, 1912, 1872, 1844, 1816, 1776, 1748, 1720]
2024年より後: [2052, 2080, 2120, 2148, 2176, 2216, 2244, 2272, 2312, 2340]
2025年より前: [2014, 2003, 1997, 1986, 1975, 1969, 1958, 1947, 1941, 1930]
2025年より後: [2031, 2042, 2053, 2059, 2070, 2081, 2087, 2098, 2110, 2121]
2100年より前: [2094, 2083, 2077, 2066, 2055, 2049, 2038, 2027, 2021, 2010]
2100年より後: [2106, 2117, 2123, 2134, 2145, 2151, 2162, 2173, 2179, 2190]
指定した年と同じカレンダーの年を前後 n 個表示
(長くなるので今回は10個だけ表示)
fn main() {
let n = 10;
for year in [2000, 2023, 2024, 2025, 2100] {
println!("{year}年より前: {:?}", SameCalendarYear(year).rev().take(n).collect::<Vec<_>>());
println!("{year}年より後: {:?}", SameCalendarYear(year).take(n).collect::<Vec<_>>());
}
}
このRust公式の実行環境で実行やコード編集ができます
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=5e5a518120f75351ca5ff5fdd0bf4d8c
// 実行結果
2000年より前: [1972, 1944, 1916, 1876, 1848, 1820, 1780, 1752, 1724, 1684]
2000年より後: [2028, 2056, 2084, 2124, 2152, 2180, 2220, 2248, 2276, 2316]
2023年より前: [2017, 2006, 1995, 1989, 1978, 1967, 1961, 1950, 1939, 1933]
2023年より後: [2034, 2045, 2051, 2062, 2073, 2079, 2090, 2102, 2113, 2119]
2024年より前: [1996, 1968, 1940, 1912, 1872, 1844, 1816, 1776, 1748, 1720]
2024年より後: [2052, 2080, 2120, 2148, 2176, 2216, 2244, 2272, 2312, 2340]
2025年より前: [2014, 2003, 1997, 1986, 1975, 1969, 1958, 1947, 1941, 1930]
2025年より後: [2031, 2042, 2053, 2059, 2070, 2081, 2087, 2098, 2110, 2121]
2100年より前: [2094, 2083, 2077, 2066, 2055, 2049, 2038, 2027, 2021, 2010]
2100年より後: [2106, 2117, 2123, 2134, 2145, 2151, 2162, 2173, 2179, 2190]
62蟻人間 ◆T6xkBnTXz7B0
2023/08/21(月) 15:10:32.39ID:GU1DZq8L63デフォルトの名無しさん
2023/08/21(月) 22:02:18.08ID:s7o0Gu1A2023/08/24(木) 05:04:40.60ID:UkV1PQmo
お題:2Dゲームのスクロール処理
整数の二次元配列(高さ50, 横幅100)上にランダムに整数1〜9が200個配置される。
この配列を高さ20, 横幅40の矩形領域に切り取って表示したい。キーボードの入力(l, r, t, b)で矩形領域を移動させ切り取る領域を変化させよ。
整数の二次元配列(高さ50, 横幅100)上にランダムに整数1〜9が200個配置される。
この配列を高さ20, 横幅40の矩形領域に切り取って表示したい。キーボードの入力(l, r, t, b)で矩形領域を移動させ切り取る領域を変化させよ。
65デフォルトの名無しさん
2023/08/24(木) 08:57:28.75ID:a6n854uv >>64
試しに自分で書いてどんなプログラムになるのか見せてくれ
試しに自分で書いてどんなプログラムになるのか見せてくれ
66デフォルトの名無しさん
2023/08/24(木) 22:51:17.82ID:hcnR5QOK >>64
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}
}
}
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}
}
}
67デフォルトの名無しさん
2023/08/25(金) 00:19:01.99ID:P3glK3pZ お題:ウィンドウのアラインメント処理
マウスの座標の変化からウインドウを描画すべき座標を計算したい。
ただし変形する形は縦横4方向、斜め4方向の8パターンとし、寄せた方向に幅が1/2となること。
マウスの座標の変化からウインドウを描画すべき座標を計算したい。
ただし変形する形は縦横4方向、斜め4方向の8パターンとし、寄せた方向に幅が1/2となること。
68デフォルトの名無しさん
2023/08/25(金) 14:02:15.09ID:5+gJach+ >>64-65
OpenCVのROI便利だよな
OpenCVのROI便利だよな
2023/08/26(土) 14:14:02.40ID:EQIr/PqP
世界で最初の月曜日ってどうやって決まったの?
7017
2023/08/26(土) 14:42:38.00ID:Wr5tcJsi 曜日はシュメール人が使い始めたらしいので、お近くのシュメール人に聞きください。
2023/08/26(土) 20:03:48.42ID:LJcWLtrE
文字列Sの中に含まれる回文をすべて列挙ってどうやったらいいですかね(*_*)
aとかbみたいな一文字でも回文とみなしますです
文字列Sは1文字以上100文字以下で、半角英字であることがわかってます
とんでもない計算量になる気がするのですが、鮮やかなやりかたってないものかと…トホ(ヽ´ω`)
aとかbみたいな一文字でも回文とみなしますです
文字列Sは1文字以上100文字以下で、半角英字であることがわかってます
とんでもない計算量になる気がするのですが、鮮やかなやりかたってないものかと…トホ(ヽ´ω`)
7217
2023/08/26(土) 22:26:37.90ID:Wr5tcJsi73蟻人間 ◆T6xkBnTXz7B0
2023/08/26(土) 23:04:31.69ID:JYg5slq9 回文の長さに制限があるから、回文の長さで場合分けすれば、全部列挙可能。
2023/08/26(土) 23:09:39.72ID:jGmIYD91
>>72
途中のもぜんぶっす…
含まれる回文、ひとつのこらず出力です(;´∀`)
たとえAとかBみたいな一文字でも回文と定義します
なのでAとかXも抜き出します٩(′д‵)۶
で、一文字目にAがあって、5文字目にもAがあるじゃないですか?こういった場合は、どっちも出力しちゃって大丈夫です!
重複された出力が行われるのは問題ないんです!
ただ、「過去にすでにその分の出力が行われていた場合、重複した出力を再度行わない」というやりかたでもし計算量が飛躍的に下がるということであれば、そのやりかたが知りたいというのもまああります(*_*;
重複する出力をするかしないか、それはどちらでもオケーです
全パターンチェックするようにループ回すならとりあえず理屈ではできると思うんですが、計算量がとんでもないことになりそうな感じで、ちょっとお手上げでした/(^o^)\
途中のもぜんぶっす…
含まれる回文、ひとつのこらず出力です(;´∀`)
たとえAとかBみたいな一文字でも回文と定義します
なのでAとかXも抜き出します٩(′д‵)۶
で、一文字目にAがあって、5文字目にもAがあるじゃないですか?こういった場合は、どっちも出力しちゃって大丈夫です!
重複された出力が行われるのは問題ないんです!
ただ、「過去にすでにその分の出力が行われていた場合、重複した出力を再度行わない」というやりかたでもし計算量が飛躍的に下がるということであれば、そのやりかたが知りたいというのもまああります(*_*;
重複する出力をするかしないか、それはどちらでもオケーです
全パターンチェックするようにループ回すならとりあえず理屈ではできると思うんですが、計算量がとんでもないことになりそうな感じで、ちょっとお手上げでした/(^o^)\
2023/08/26(土) 23:20:42.48ID:jGmIYD91
たとえば文字列Sがabbbaだとすると、すくなくともa,b,bb,bbb.abbbaが最低一回は出力される必要があります
できればaやbが複数回出力されず一回しか出力されないほうがいいですが、必須ではないです
できればaやbが複数回出力されず一回しか出力されないほうがいいですが、必須ではないです
76蟻人間 ◆T6xkBnTXz7B0
2023/08/26(土) 23:29:51.32ID:JYg5slq9 >>71 C++
#include <stdio.h>
bool is_kaibun(const char *str, size_t len)
{
for (size_t i = 0; i < len/2; i++)
if (str[i] != str[len - i - 1]) return false;
return true;
}
void detect_kaibun(const char *str, size_t len)
{
for (size_t klen = 1; klen <= len; klen++)
{
for (size_t i = 0; i < len - klen + 1; i++)
if (is_kaibun(str + i, klen))
printf("%*s\n", (int)klen, str + i);
}
}
int main(void)
{
detect_kaibun("ABCBCXC", 7);
return 0;
}
#include <stdio.h>
bool is_kaibun(const char *str, size_t len)
{
for (size_t i = 0; i < len/2; i++)
if (str[i] != str[len - i - 1]) return false;
return true;
}
void detect_kaibun(const char *str, size_t len)
{
for (size_t klen = 1; klen <= len; klen++)
{
for (size_t i = 0; i < len - klen + 1; i++)
if (is_kaibun(str + i, klen))
printf("%*s\n", (int)klen, str + i);
}
}
int main(void)
{
detect_kaibun("ABCBCXC", 7);
return 0;
}
77蟻人間 ◆T6xkBnTXz7B0
2023/08/26(土) 23:37:32.47ID:JYg5slq92023/08/26(土) 23:40:14.43ID:jGmIYD91
>>77
ありがとうございます、ちょっとためしてみますm(_ _)m
ありがとうございます、ちょっとためしてみますm(_ _)m
2023/08/26(土) 23:44:49.05ID:M8vKemPr
2023/08/27(日) 00:17:21.22ID:3rRjeZjU
2023/08/27(日) 01:14:16.06ID:xDzSjAxc
>>76
こうすると計算量を減少できる
fn len_of_eq(s: &str, index: usize, even: usize) -> usize {
let mut len = 0;
for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) {
if p != q {
break;
}
len += 1;
}
return len;
}
fn print_kaibun(s: &str) {
for index in 0..s.len() {
for even in 0..=1 {
for len in 1..=len_of_eq(s, index, even) {
let first = index + 1 - len;
let last = index + len - 1 + even;
println!("{first}~{last}: {}", &s[first..=last]);
}
}
}
}
fn main() {
print_kaibun("ABCBAXYZZYX");
}
こうすると計算量を減少できる
fn len_of_eq(s: &str, index: usize, even: usize) -> usize {
let mut len = 0;
for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) {
if p != q {
break;
}
len += 1;
}
return len;
}
fn print_kaibun(s: &str) {
for index in 0..s.len() {
for even in 0..=1 {
for len in 1..=len_of_eq(s, index, even) {
let first = index + 1 - len;
let last = index + len - 1 + even;
println!("{first}~{last}: {}", &s[first..=last]);
}
}
}
}
fn main() {
print_kaibun("ABCBAXYZZYX");
}
2023/08/27(日) 01:16:42.56ID:xDzSjAxc
まずこの部分が最初のヒントで
>>それって例えば "ABCBAXYZZYX" だったら "ABCBA" と "XYZZYX" が抜き出せれば良いの?
>>途中の "BCB", "C", "YZZY", "ZZ" も抜き出すの?
>途中のもぜんぶっす…
最も長いものを抜き出せばその一部分はその中に含まれている
だから短いのが判明した時点で引き続き長いのも探索しないと多重に無駄に比較が行なわれてしまう
もう一つのポイントは回文は対称系で長さ奇数と偶数の二種類があること
長さ奇数「DCBABCD」と長さ偶数「DCBAABCD」どちらの場合も
比較は対称点となるAからのみ出発して比較していけばよくて
順方向&逆方向へ最長分を比較していけば上述の無駄な比較を減らせる
このような順番で見つかっていくことになる
>>81の実行結果
0~0: A
1~1: B
2~2: C
1~3: BCB
0~4: ABCBA
3~3: B
4~4: A
5~5: X
6~6: Y
7~7: Z
7~8: ZZ
6~9: YZZY
5~10: XYZZYX
8~8: Z
9~9: Y
10~10: X
>>それって例えば "ABCBAXYZZYX" だったら "ABCBA" と "XYZZYX" が抜き出せれば良いの?
>>途中の "BCB", "C", "YZZY", "ZZ" も抜き出すの?
>途中のもぜんぶっす…
最も長いものを抜き出せばその一部分はその中に含まれている
だから短いのが判明した時点で引き続き長いのも探索しないと多重に無駄に比較が行なわれてしまう
もう一つのポイントは回文は対称系で長さ奇数と偶数の二種類があること
長さ奇数「DCBABCD」と長さ偶数「DCBAABCD」どちらの場合も
比較は対称点となるAからのみ出発して比較していけばよくて
順方向&逆方向へ最長分を比較していけば上述の無駄な比較を減らせる
このような順番で見つかっていくことになる
>>81の実行結果
0~0: A
1~1: B
2~2: C
1~3: BCB
0~4: ABCBA
3~3: B
4~4: A
5~5: X
6~6: Y
7~7: Z
7~8: ZZ
6~9: YZZY
5~10: XYZZYX
8~8: Z
9~9: Y
10~10: X
8317
2023/08/27(日) 05:51:19.72ID:A+RJ0qtc >>80
ここはお題スレなのでクローズはない。
ここはお題スレなのでクローズはない。
8417
2023/09/07(木) 20:20:41.05ID:HlrfnodH2023/09/20(水) 14:42:58.26ID:I55f6i4N
お題
abc1.mp4 abc2.mp4 .. abc20.mp4があるとします
これを名前順でソートできるようにするため
abc001.mp4 abc002.mp4 ... abc020.mp4
とリネームしてください
abc1.mp4 abc2.mp4 .. abc20.mp4があるとします
これを名前順でソートできるようにするため
abc001.mp4 abc002.mp4 ... abc020.mp4
とリネームしてください
2023/09/20(水) 18:43:20.77ID:DIo9fsPi
コレでどーかぬ
#!/bin/bash
# ファイル名のプレフィックス
prefix="abc"
# ソート対象のファイルリストを取得
file_list=$(ls ${prefix}*.mp4 | sort)
# ファイルを001、002、...の形式にリネーム
counter=1
for file in $file_list; do
new_name=$(printf "${prefix}%03d.mp4" $counter)
mv "$file" "$new_name"
counter=$((counter + 1))
done
#!/bin/bash
# ファイル名のプレフィックス
prefix="abc"
# ソート対象のファイルリストを取得
file_list=$(ls ${prefix}*.mp4 | sort)
# ファイルを001、002、...の形式にリネーム
counter=1
for file in $file_list; do
new_name=$(printf "${prefix}%03d.mp4" $counter)
mv "$file" "$new_name"
counter=$((counter + 1))
done
2023/09/20(水) 18:50:38.69ID:I55f6i4N
いいだしっぺということで作ってきたら既に投稿が
printfするところは一緒ですね
bash,勉強になります
haskell
import Text.Printf
import System.IO
import System.Directory
import System.FilePath.Glob
import Data.List
import Control.Monad
kaku = ".mp4"
fn = "abc"
main = do
files <- glob (fn <> "*" <> kaku)
zipWithM_ (\a b -> renameFile a b) files (map f files)
where
f l =
let r1 = reverse $ takeWhile ((/=) '/') $ reverse l in
let r2 = (r1 \\ fn) \\ kaku in
fn <> printf "%03d" (read r2 :: Int) <> kaku
printfするところは一緒ですね
bash,勉強になります
haskell
import Text.Printf
import System.IO
import System.Directory
import System.FilePath.Glob
import Data.List
import Control.Monad
kaku = ".mp4"
fn = "abc"
main = do
files <- glob (fn <> "*" <> kaku)
zipWithM_ (\a b -> renameFile a b) files (map f files)
where
f l =
let r1 = reverse $ takeWhile ((/=) '/') $ reverse l in
let r2 = (r1 \\ fn) \\ kaku in
fn <> printf "%03d" (read r2 :: Int) <> kaku
2023/09/22(金) 11:23:46.58ID:R2SvRL0Z
お題:celeronで快適に動作するwebブラウザを作れ
899
2023/09/22(金) 16:53:16.55ID:8M97O6g7 >>85 Perl5
rename "abc$_.mp4", sprintf 'abc%03d.mp4',$_ for 1..20;
※abc1.mp4 abc2.mp4 .. abc20.mp4 があるとしています。
また abc001.mp4 abc002.mp4 ... abc020.mp4 は既存かのチェックは省いています。
rename "abc$_.mp4", sprintf 'abc%03d.mp4',$_ for 1..20;
※abc1.mp4 abc2.mp4 .. abc20.mp4 があるとしています。
また abc001.mp4 abc002.mp4 ... abc020.mp4 は既存かのチェックは省いています。
2023/09/22(金) 17:31:41.64ID:fCKJ4NGF
すごい簡潔ですね!perlすごい
これはワンライナーではないのでしょうか
#!/usr/bin/perl
..
としてperl rename.plを動かすと動きました
ファイルはこれ(bash)で用意できます
for i in {1..20}; do touch abc$i.mp4; done
これはワンライナーではないのでしょうか
#!/usr/bin/perl
..
としてperl rename.plを動かすと動きました
ファイルはこれ(bash)で用意できます
for i in {1..20}; do touch abc$i.mp4; done
2023/09/22(金) 20:45:10.11ID:CSDqgjJn
tcsh のバヤイわこうかぬ
foreach i (`seq 1 20`) # 1から20までの数値を生成
# ファイル名を生成し、touchコマンドでファイルを作成
set filename = "abc$i.mp4"
touch $filename
end
foreach i (`seq 1 20`) # 1から20までの数値を生成
# ファイル名を生成し、touchコマンドでファイルを作成
set filename = "abc$i.mp4"
touch $filename
end
9217
2023/09/24(日) 00:36:54.25ID:FZ40Ia2p9317
2023/09/24(日) 00:44:46.90ID:FZ40Ia2p 1~20を決め打ちして良いならもっと簡単にできたな。まあいいや。
2023/09/24(日) 01:16:14.31ID:nC1Pu7Ba
>>92
なかなかおもろいサイトやぬ
なかなかおもろいサイトやぬ
2023/09/24(日) 01:37:34.83ID:XDqOvN5B
96デフォルトの名無しさん
2023/09/26(火) 17:04:35.08ID:lhHS5sJh お題:32ビット浮動小数点数のnextafter()
32ビット精度(IEEE754のbinary32)の変数aを
64ビット精度(IEEE754のbinary64)の変数bに代入する。
ここで、nextafterf(a, 0)やnextafterf(a, 正の無限)などに相当する操作を
bに対して行え(bを32ビット浮動小数点数に戻すのは無しで)。
操作結果のoverflowやunderflowは考慮しなくてもよい。
32ビット精度(IEEE754のbinary32)の変数aを
64ビット精度(IEEE754のbinary64)の変数bに代入する。
ここで、nextafterf(a, 0)やnextafterf(a, 正の無限)などに相当する操作を
bに対して行え(bを32ビット浮動小数点数に戻すのは無しで)。
操作結果のoverflowやunderflowは考慮しなくてもよい。
2023/09/27(水) 11:02:54.03ID:Jpj1XONB
お題:日本語の文章が入力されるので「、」をカンマに、「。」を改行に変換せよ
98デフォルトの名無しさん
2023/09/27(水) 11:36:52.67ID:uGji0T93 Python
s = input()
s = s.replace("、", ",")
s = s.replace("。", "\n")
print(s)
s = input()
s = s.replace("、", ",")
s = s.replace("。", "\n")
print(s)
2023/09/27(水) 13:01:54.91ID:9Ywamwi5
Haskell
import Data.List.Utils
main = do
s <- getContents
putStrLn $ replace "。" "\n" $ replace "、" "," s
コンパイルはしてないので動かないかも
import Data.List.Utils
main = do
s <- getContents
putStrLn $ replace "。" "\n" $ replace "、" "," s
コンパイルはしてないので動かないかも
100デフォルトの名無しさん
2023/09/27(水) 20:48:13.39ID:hJUMqAFS101デフォルトの名無しさん
2023/09/28(木) 08:18:15.29ID:q8VwFY1b お題
文字列S=abcdefghij(10文字)が与えられて
配列[0,4,7]が与えられる
このときSの0番目を4番目、4番目を7番目、7番目を0番目に移動した文字列を出力するプログラムを書いてください
文字列S=abcdefghij(10文字)が与えられて
配列[0,4,7]が与えられる
このときSの0番目を4番目、4番目を7番目、7番目を0番目に移動した文字列を出力するプログラムを書いてください
102デフォルトの名無しさん
2023/09/28(木) 09:17:20.57ID:iiudb0JA103デフォルトの名無しさん
2023/09/28(木) 13:09:43.08ID:tckV2TlV >>101 Ruby
文字列S='abcdefghij'
配列=[0,4,7]
文字列 = 文字列S.dup
配列.zip( 配列.rotate ).each{|i,j| 文字列[i] = 文字列S[j] }
puts 文字列
文字列S='abcdefghij'
配列=[0,4,7]
文字列 = 文字列S.dup
配列.zip( 配列.rotate ).each{|i,j| 文字列[i] = 文字列S[j] }
puts 文字列
104蟻人間 ◆T6xkBnTXz7B0
2023/09/28(木) 13:15:33.53ID:eLIN3EHU お題: コンソールに指定したUTF-8文字列のQRコードを表示するプログラム。
105デフォルトの名無しさん
2023/09/28(木) 14:55:17.75ID:7+/lnWbq use std::io::{stdin, Read};
use std::error::Error;
use qrcode::QrCode;
fn read() -> Result<String, Box<dyn Error>> {
Ok(stdin().lock().bytes().map(|c| c.expect("char") as char).collect())
}
fn main() -> Result<(), Box<dyn Error>> {
let qr = QrCode::new(read()?.as_bytes())?;
let s = qr.render().light_color(' ').dark_color('#').build();
println!("{}", s);
Ok(())
}
use std::error::Error;
use qrcode::QrCode;
fn read() -> Result<String, Box<dyn Error>> {
Ok(stdin().lock().bytes().map(|c| c.expect("char") as char).collect())
}
fn main() -> Result<(), Box<dyn Error>> {
let qr = QrCode::new(read()?.as_bytes())?;
let s = qr.render().light_color(' ').dark_color('#').build();
println!("{}", s);
Ok(())
}
106蟻人間 ◆T6xkBnTXz7B0
2023/09/28(木) 21:17:30.48ID:yc7Vl2N1 お題: 指定されたフォントのひらがなの各文字について
ひらがなの線に囲まれて閉じた領域の個数を調べ、最もその個数の多い文字ベスト3を出力せよ。
ひらがなの線に囲まれて閉じた領域の個数を調べ、最もその個数の多い文字ベスト3を出力せよ。
107デフォルトの名無しさん
2023/09/28(木) 22:53:24.99ID:8VuS2PIw 自分でやれ
いやできないかすまん
いやできないかすまん
108デフォルトの名無しさん
2023/09/28(木) 22:59:15.05ID:isk1iJ0r pythonならcv2使ってやるかな
10917
2023/09/29(金) 10:58:18.12ID:eBy6R6wt >>97
bash のコマンドラインで以下のように入力すると標準入力から入力して「、」が「,」に、「。」が改行に変換されて標準出力に出力される。
(起動する環境は bash でなければならないということはないと思うが、他のシェルは確認していない)。
sed 's/、/,/g;s/。/\n/g'
もちろん日本語入出力可能な端末を使用して、尚且つ sed がその入力をまともに受け付けてくれなければちゃんと動かない。
bash のコマンドラインで以下のように入力すると標準入力から入力して「、」が「,」に、「。」が改行に変換されて標準出力に出力される。
(起動する環境は bash でなければならないということはないと思うが、他のシェルは確認していない)。
sed 's/、/,/g;s/。/\n/g'
もちろん日本語入出力可能な端末を使用して、尚且つ sed がその入力をまともに受け付けてくれなければちゃんと動かない。
110デフォルトの名無しさん
2023/09/29(金) 11:02:02.85ID:F8aJXNq9 お題: 指定されたフォントのひらがなの各文字について
ひらがなの線に囲まれて閉じた領域の面積を調べ、各文字毎にそれぞれの面積の順序を最も大きい物から順に出力せよ。
またその情報を元に輪郭のhierarchy情報をcv2で利用出来る形で出力せよ
ひらがなの線に囲まれて閉じた領域の面積を調べ、各文字毎にそれぞれの面積の順序を最も大きい物から順に出力せよ。
またその情報を元に輪郭のhierarchy情報をcv2で利用出来る形で出力せよ
111デフォルトの名無しさん
2023/09/30(土) 17:32:44.04ID:xxjzuZuq お題
文字列が入力されます
赤と緑を入れ替えて
黒と白を入れ替えて
黄と青を入れ替えてください
例
入力: 緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ
出力: 赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ
文字列が入力されます
赤と緑を入れ替えて
黒と白を入れ替えて
黄と青を入れ替えてください
例
入力: 緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ
出力: 赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ
112デフォルトの名無しさん
2023/09/30(土) 18:00:29.42ID:oqu6hf3+ >>111 node
const swap = (text, [w1, w2]) => text.split(w1).map(v => v.replaceAll(w2, w1)).join(w2)
const swapAll = (text, rules) => rules.reduce(swap, text)
const text = '緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ'
const rules = [['赤', '緑'], ['黒', '白'], ['黄', '青']]
const replaced = swapAll(text, rules)
// console.log(replaced)
console.log(replaced === '赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ')
// true
const swap = (text, [w1, w2]) => text.split(w1).map(v => v.replaceAll(w2, w1)).join(w2)
const swapAll = (text, rules) => rules.reduce(swap, text)
const text = '緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ'
const rules = [['赤', '緑'], ['黒', '白'], ['黄', '青']]
const replaced = swapAll(text, rules)
// console.log(replaced)
console.log(replaced === '赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ')
// true
113デフォルトの名無しさん
2023/09/30(土) 19:24:03.19ID:t2v1jL5l114デフォルトの名無しさん
2023/09/30(土) 20:00:09.54ID:iuoy3pEW >>111 ウェブブラウザのJavaScript
https://pastebin.com/YvymwTeN
ユーザースクリプトの体裁で書いたけどブラウザーのConsoleでも動かせる
Firefox: Ctrl+Shift+K
Chrome: Ctrl+Shift+J
https://mevius.5ch.net/test/read.cgi/tech/1691038333/111 を開いてそこで実行
結果はレスに直接追記
重複がないからXPathのtranslate()でいけるな思った、それだけ
https://pastebin.com/YvymwTeN
ユーザースクリプトの体裁で書いたけどブラウザーのConsoleでも動かせる
Firefox: Ctrl+Shift+K
Chrome: Ctrl+Shift+J
https://mevius.5ch.net/test/read.cgi/tech/1691038333/111 を開いてそこで実行
結果はレスに直接追記
重複がないからXPathのtranslate()でいけるな思った、それだけ
11517
2023/10/02(月) 01:36:39.53ID:hWT/DRlk11617
2023/10/02(月) 01:52:26.35ID:hWT/DRlk >>104
1. qrencode というプログラムをインストールする。(例: RedHat系Linuxなら yum install qrencode)
2. qrencode で出力に ansi 等を指定して文字列で出力する。
例: qrencode -t ansi やっほー
3. 画面に出て来たQRコードをスマホで撮影する等して確認する。
4. 終わり。
1. qrencode というプログラムをインストールする。(例: RedHat系Linuxなら yum install qrencode)
2. qrencode で出力に ansi 等を指定して文字列で出力する。
例: qrencode -t ansi やっほー
3. 画面に出て来たQRコードをスマホで撮影する等して確認する。
4. 終わり。
117デフォルトの名無しさん
2023/10/02(月) 11:46:19.28ID:0odvDMYE118デフォルトの名無しさん
2023/10/06(金) 16:54:06.65ID:jg1c5xSH [クライシスアクター」「豊島保養所」←画像検索&拡散!
他スレに丸ごとコピペよろしっく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞーーーー!!!!!!!
他スレに丸ごとコピペよろしっく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞーーーー!!!!!!!
119デフォルトの名無しさん
2023/10/06(金) 16:54:28.09ID:jg1c5xSH [クライシスアクター」「豊島保養所」←画像検索&拡散!
他スレに丸ごとコピペよろしく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞ!!!!!!!
他スレに丸ごとコピペよろしく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞ!!!!!!!
120デフォルトの名無しさん
2023/10/08(日) 19:28:55.20ID:faQf3SiN お題:n階建てのビルに定員4人のエレベーターがある。エレベーターは各階でボタンが押されるとその階に向かう。住人達はエレベータを呼んで乗るとエレベーター内で次に向かう階へのボタンを押す。ボタンを押すのは乗員全員である。乗るのを待っている住人が定員より多かった場合、エレベーターは乗れなかった住人を優先的に回収する。住人は列の先頭から順番にエレベーターに乗り込む。エレベーターは乗員を降ろしている間に住人を追加で乗せることはなく、すべての乗員を降ろしてから次の住人の回収に向かうものとする。
もっとも効率がいいエレベーターの停止順序を求め、入力に対して停止階のリストを出力せよ。
エレベーターの初期位置は1階とする。
入力
階数
乗員数 住人たちがいる階 乗員iが向かう階 乗員iが向かう階 …
5
1 1 5
2 4 3 2
3 2 1 3 5
出力
停止階 停止階 …
1 5 4 3 2 1 3 5
入力
10
5 1 1 2 3 4 4
9 4 10 10 10 1 8 6 6 6 5
出力
1 2 3 4 1 4 1 10 4 6 8 4 5
もっとも効率がいいエレベーターの停止順序を求め、入力に対して停止階のリストを出力せよ。
エレベーターの初期位置は1階とする。
入力
階数
乗員数 住人たちがいる階 乗員iが向かう階 乗員iが向かう階 …
5
1 1 5
2 4 3 2
3 2 1 3 5
出力
停止階 停止階 …
1 5 4 3 2 1 3 5
入力
10
5 1 1 2 3 4 4
9 4 10 10 10 1 8 6 6 6 5
出力
1 2 3 4 1 4 1 10 4 6 8 4 5
1219
2023/10/08(日) 20:24:03.46ID:zYJ3wh+h122デフォルトの名無しさん
2023/10/09(月) 13:56:36.62ID:V7NN5mnX >>121
2.移動した階数の和が最も小さい
2.移動した階数の和が最も小さい
123デフォルトの名無しさん
2023/10/09(月) 19:10:41.03ID:5dE8x2G+124デフォルトの名無しさん
2023/10/09(月) 22:18:18.11ID:5dE8x2G+125デフォルトの名無しさん
2023/10/12(木) 11:02:46.67ID:u59ybXeV スイカゲームを自動操縦するプログラムを造れ
126デフォルトの名無しさん
2023/10/12(木) 12:31:12.32ID:hnj5q8Ch while (true) push(BUTTON_A)
127デフォルトの名無しさん
2023/10/14(土) 00:00:08.85ID:sMwx6jpS お題:角カッコの列が入力されるのでカッコの対応が取れていたら1,取れていなかったら0と表示せよ
< [[]]
> 1
< [[]
> 0
< [[]]
> 1
< [[]
> 0
12817
2023/10/14(土) 02:22:24.53ID:BgrcFKKf >>127
Perl
bash 等のシェルのコマンドラインで以下のように入力すると標準入力から入力して結果を標準出力に出力する。
perl -ne '$n=0;while(/(.)/g){if($1eq"["){$n++}elsif($1eq"]"){$n--}}$f=$n==0?1:0;print"$f\n"'
実行例
[[]]
1
[[]
0
[[[[]][[]]]
0
[[[[]][[]]]]
1
Perl
bash 等のシェルのコマンドラインで以下のように入力すると標準入力から入力して結果を標準出力に出力する。
perl -ne '$n=0;while(/(.)/g){if($1eq"["){$n++}elsif($1eq"]"){$n--}}$f=$n==0?1:0;print"$f\n"'
実行例
[[]]
1
[[]
0
[[[[]][[]]]
0
[[[[]][[]]]]
1
12917
2023/10/14(土) 04:16:14.71ID:BgrcFKKf130デフォルトの名無しさん
2023/10/14(土) 10:19:17.10ID:BRbCCPQd >>127 Ruby
%W( [[]] [[] [[[[]][[]]] [[[[]][[]]]] ][ #{} ).each{|s|
w = s.dup
{} while w.sub!( /\[\]/, '' )
puts "#{(s != '' && w == '')? 1 : 0} #{s.inspect}"
}
# 1 "[[]]"
# 0 "[[]"
# 0 "[[[[]][[]]]"
# 1 "[[[[]][[]]]]"
# 0 "]["
# 0 ""
%W( [[]] [[] [[[[]][[]]] [[[[]][[]]]] ][ #{} ).each{|s|
w = s.dup
{} while w.sub!( /\[\]/, '' )
puts "#{(s != '' && w == '')? 1 : 0} #{s.inspect}"
}
# 1 "[[]]"
# 0 "[[]"
# 0 "[[[[]][[]]]"
# 1 "[[[[]][[]]]]"
# 0 "]["
# 0 ""
131デフォルトの名無しさん
2023/10/14(土) 22:38:53.08ID:5dUK8HoW132デフォルトの名無しさん
2023/10/16(月) 08:51:26.93ID:kgcCjrnK 1)
BY
RG
2)
RG
BY
3)
GR
YB
1-3を回転対称で同じとみなせるグループと線対称で同じとみなせるグループに分類せよ
4色を2x2の升にランダムに一つづつ配置して4x3x2通りのパターンを作成し
それぞれを上の基準でグループ分けせよ
BY
RG
2)
RG
BY
3)
GR
YB
1-3を回転対称で同じとみなせるグループと線対称で同じとみなせるグループに分類せよ
4色を2x2の升にランダムに一つづつ配置して4x3x2通りのパターンを作成し
それぞれを上の基準でグループ分けせよ
133デフォルトの名無しさん
2023/10/17(火) 07:02:57.86ID:InaHR8fg134デフォルトの名無しさん
2023/10/18(水) 20:40:59.79ID:4ifgnZXl お題:Pythonのmath.ulp()と同機能の関数
引数が正規化数限定のサブセットでも可(その旨を明記)。
Pythonで実装する場合は(もちろん)math.ulp()を使ってはならない。
引数が正規化数限定のサブセットでも可(その旨を明記)。
Pythonで実装する場合は(もちろん)math.ulp()を使ってはならない。
136デフォルトの名無しさん
2023/10/18(水) 20:56:02.06ID:L3TY2GGf 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]
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]
137134
2023/10/18(水) 21:44:13.43ID:4ifgnZXl >>135
間違えましたorz
間違えましたorz
139デフォルトの名無しさん
2023/10/21(土) 04:08:56.28ID:TaroWUwV お題:文字列「せんだ」「みつを」「ナハナハ」がランダムに100行入力される。せんだ、みつを、ナハナハが順番に入力されたときに1と一行出力せよ
140デフォルトの名無しさん
2023/10/21(土) 23:03:24.39ID:x0YGunAEレスを投稿する
