X



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

0001デフォルトの名無しさん
垢版 |
2023/08/03(木) 13:52:13.20ID:/xW45k0z
プログラミングのお題スレです。

【出題と回答例】
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/
0051デフォルトの名無しさん
垢版 |
2023/08/19(土) 00:14:13.53ID:Za4r2XUP
>>50
曜日をわざわざ求める必要はなかったな。
R 
https://ideone.com/1Zh5wd
0054デフォルトの名無しさん
垢版 |
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年後というパターンの繰り返しになる。

      ┌──────────┐
      │          ↓
@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷
│     ↑          │          ↑
└─────┘          └──────────┘
0055蟻人間 ◆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にしました。
005717
垢版 |
2023/08/20(日) 23:07:16.25ID:pbHEs6OP
>>55
800Wの電熱線で加熱するとどれだけの量の水がどのぐらいの時間で1度上がるか、など、基本的な事が分からない。
0058デフォルトの名無しさん
垢版 |
2023/08/21(月) 05:17:48.42ID:9NybdpKD
>>56
200年分のデータを配列を貯め込む>>51の方法よりも
そのようなメモリ消費を必要としないイテレータを作る案は好ましい方法ですね

しかし-100や+100は今回たまたまのマジックナンバーに過ぎないですし
例えばお題が「指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ」もありえます

したがって作成しておくべき汎用イテレータは指定した年から順方向に返すイテレータと逆方向に返すイテレータでしょう
それがあれば今回のお題を含めた様々なバリエーションのお題に対応できると思います
0059デフォルトの名無しさん
垢版 |
2023/08/21(月) 10:53:53.65ID:qNeGin4f
>>58へのお題
指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ
0060デフォルトの名無しさん
垢版 |
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
}
0061デフォルトの名無しさん
垢版 |
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]
0064デフォルトの名無しさん
垢版 |
2023/08/24(木) 05:04:40.60ID:UkV1PQmo
お題:2Dゲームのスクロール処理
整数の二次元配列(高さ50, 横幅100)上にランダムに整数1〜9が200個配置される。
この配列を高さ20, 横幅40の矩形領域に切り取って表示したい。キーボードの入力(l, r, t, b)で矩形領域を移動させ切り取る領域を変化させよ。
0065デフォルトの名無しさん
垢版 |
2023/08/24(木) 08:57:28.75ID:a6n854uv
>>64
試しに自分で書いてどんなプログラムになるのか見せてくれ
0066デフォルトの名無しさん
垢版 |
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}
   }
}
0067デフォルトの名無しさん
垢版 |
2023/08/25(金) 00:19:01.99ID:P3glK3pZ
お題:ウィンドウのアラインメント処理
マウスの座標の変化からウインドウを描画すべき座標を計算したい。
ただし変形する形は縦横4方向、斜め4方向の8パターンとし、寄せた方向に幅が1/2となること。
0068デフォルトの名無しさん
垢版 |
2023/08/25(金) 14:02:15.09ID:5+gJach+
>>64-65
OpenCVのROI便利だよな
007017
垢版 |
2023/08/26(土) 14:42:38.00ID:Wr5tcJsi
曜日はシュメール人が使い始めたらしいので、お近くのシュメール人に聞きください。
0071デフォルトの名無しさん
垢版 |
2023/08/26(土) 20:03:48.42ID:LJcWLtrE
文字列Sの中に含まれる回文をすべて列挙ってどうやったらいいですかね(*_*)
aとかbみたいな一文字でも回文とみなしますです
文字列Sは1文字以上100文字以下で、半角英字であることがわかってます

とんでもない計算量になる気がするのですが、鮮やかなやりかたってないものかと…トホ(ヽ´ω`)
007217
垢版 |
2023/08/26(土) 22:26:37.90ID:Wr5tcJsi
>>71
それって例えば "ABCBAXYZZYX" だったら "ABCBA" と "XYZZYX" が抜き出せれば良いの?
途中の "BCB", "C", "YZZY", "ZZ" も抜き出すの?
0073蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/08/26(土) 23:04:31.69ID:JYg5slq9
回文の長さに制限があるから、回文の長さで場合分けすれば、全部列挙可能。
0074デフォルトの名無しさん
垢版 |
2023/08/26(土) 23:09:39.72ID:jGmIYD91
>>72
途中のもぜんぶっす…
含まれる回文、ひとつのこらず出力です(;´∀`)
たとえAとかBみたいな一文字でも回文と定義します

なのでAとかXも抜き出します٩(′д‵)۶
で、一文字目にAがあって、5文字目にもAがあるじゃないですか?こういった場合は、どっちも出力しちゃって大丈夫です!
重複された出力が行われるのは問題ないんです!
ただ、「過去にすでにその分の出力が行われていた場合、重複した出力を再度行わない」というやりかたでもし計算量が飛躍的に下がるということであれば、そのやりかたが知りたいというのもまああります(*_*;
重複する出力をするかしないか、それはどちらでもオケーです

全パターンチェックするようにループ回すならとりあえず理屈ではできると思うんですが、計算量がとんでもないことになりそうな感じで、ちょっとお手上げでした/(^o^)\
0075デフォルトの名無しさん
垢版 |
2023/08/26(土) 23:20:42.48ID:jGmIYD91
たとえば文字列Sがabbbaだとすると、すくなくともa,b,bb,bbb.abbbaが最低一回は出力される必要があります

できればaやbが複数回出力されず一回しか出力されないほうがいいですが、必須ではないです
0076蟻人間 ◆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;
}
0077蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/08/26(土) 23:37:32.47ID:JYg5slq9
>>76 間違えた。
printf("%*s\n", (int)klen, str + i);

printf("%.*s\n", (int)klen, str + i);
に訂正。
0080デフォルトの名無しさん
垢版 |
2023/08/27(日) 00:17:21.22ID:3rRjeZjU
>>77
動いている様子を確認させていただきました!!ありがとうございました!

当チケットはこれにてクローズとさせていただきたいと思いますヽ(=´▽`=)ノ
0081デフォルトの名無しさん
垢版 |
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");
}
0082デフォルトの名無しさん
垢版 |
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
008317
垢版 |
2023/08/27(日) 05:51:19.72ID:A+RJ0qtc
>>80
ここはお題スレなのでクローズはない。
0085デフォルトの名無しさん
垢版 |
2023/09/20(水) 14:42:58.26ID:I55f6i4N
お題
abc1.mp4 abc2.mp4 .. abc20.mp4があるとします
これを名前順でソートできるようにするため
abc001.mp4 abc002.mp4 ... abc020.mp4
とリネームしてください
0086デフォルトの名無しさん
垢版 |
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
0087デフォルトの名無しさん
垢版 |
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
00899
垢版 |
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 は既存かのチェックは省いています。
0090デフォルトの名無しさん
垢版 |
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
0091デフォルトの名無しさん
垢版 |
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
009317
垢版 |
2023/09/24(日) 00:44:46.90ID:FZ40Ia2p
1~20を決め打ちして良いならもっと簡単にできたな。まあいいや。
0096デフォルトの名無しさん
垢版 |
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は考慮しなくてもよい。
0097デフォルトの名無しさん
垢版 |
2023/09/27(水) 11:02:54.03ID:Jpj1XONB
お題:日本語の文章が入力されるので「、」をカンマに、「。」を改行に変換せよ
0098デフォルトの名無しさん
垢版 |
2023/09/27(水) 11:36:52.67ID:uGji0T93
Python

s = input()
s = s.replace("、", ",")
s = s.replace("。", "\n")
print(s)
0099デフォルトの名無しさん
垢版 |
2023/09/27(水) 13:01:54.91ID:9Ywamwi5
Haskell

import Data.List.Utils

main = do
s <- getContents
putStrLn $ replace "。" "\n" $ replace "、" "," s
コンパイルはしてないので動かないかも
0101デフォルトの名無しさん
垢版 |
2023/09/28(木) 08:18:15.29ID:q8VwFY1b
お題
文字列S=abcdefghij(10文字)が与えられて
配列[0,4,7]が与えられる
このときSの0番目を4番目、4番目を7番目、7番目を0番目に移動した文字列を出力するプログラムを書いてください
0103デフォルトの名無しさん
垢版 |
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 文字列
0104蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/09/28(木) 13:15:33.53ID:eLIN3EHU
お題: コンソールに指定したUTF-8文字列のQRコードを表示するプログラム。
0105デフォルトの名無しさん
垢版 |
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(())
}
0106蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/09/28(木) 21:17:30.48ID:yc7Vl2N1
お題: 指定されたフォントのひらがなの各文字について
ひらがなの線に囲まれて閉じた領域の個数を調べ、最もその個数の多い文字ベスト3を出力せよ。
0108デフォルトの名無しさん
垢版 |
2023/09/28(木) 22:59:15.05ID:isk1iJ0r
pythonならcv2使ってやるかな
010917
垢版 |
2023/09/29(金) 10:58:18.12ID:eBy6R6wt
>>97
bash のコマンドラインで以下のように入力すると標準入力から入力して「、」が「,」に、「。」が改行に変換されて標準出力に出力される。
(起動する環境は bash でなければならないということはないと思うが、他のシェルは確認していない)。

sed 's/、/,/g;s/。/\n/g'

もちろん日本語入出力可能な端末を使用して、尚且つ sed がその入力をまともに受け付けてくれなければちゃんと動かない。
0110デフォルトの名無しさん
垢版 |
2023/09/29(金) 11:02:02.85ID:F8aJXNq9
お題: 指定されたフォントのひらがなの各文字について
ひらがなの線に囲まれて閉じた領域の面積を調べ、各文字毎にそれぞれの面積の順序を最も大きい物から順に出力せよ。
またその情報を元に輪郭のhierarchy情報をcv2で利用出来る形で出力せよ
0111デフォルトの名無しさん
垢版 |
2023/09/30(土) 17:32:44.04ID:xxjzuZuq
お題
文字列が入力されます
赤と緑を入れ替えて
黒と白を入れ替えて
黄と青を入れ替えてください


入力: 緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ
出力: 赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ
0112デフォルトの名無しさん
垢版 |
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
0114デフォルトの名無しさん
垢版 |
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()でいけるな思った、それだけ
011617
垢版 |
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. 終わり。
0118デフォルトの名無しさん
垢版 |
2023/10/06(金) 16:54:06.65ID:jg1c5xSH
[クライシスアクター」「豊島保養所」←画像検索&拡散!

他スレに丸ごとコピペよろしっく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞーーーー!!!!!!!
0119デフォルトの名無しさん
垢版 |
2023/10/06(金) 16:54:28.09ID:jg1c5xSH
[クライシスアクター」「豊島保養所」←画像検索&拡散!

他スレに丸ごとコピペよろしく!!
ネットでできる反レプティリアン・反イルミ活動です!!!!!
動画サイトのコメ欄もねらい目だぞ!!!!!!!
0120デフォルトの名無しさん
垢版 |
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
01219
垢版 |
2023/10/08(日) 20:24:03.46ID:zYJ3wh+h
>>120
「もっとも効率がいいエレベーターの停止順序」とは?
1.停止回数がもっとも少ない
2.移動した階数の和が最も小さい
3.ほか
など、どのような指標?
0127デフォルトの名無しさん
垢版 |
2023/10/14(土) 00:00:08.85ID:sMwx6jpS
お題:角カッコの列が入力されるのでカッコの対応が取れていたら1,取れていなかったら0と表示せよ

< [[]]
> 1

< [[]
> 0
012817
垢版 |
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
0130デフォルトの名無しさん
垢版 |
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 ""
0132デフォルトの名無しさん
垢版 |
2023/10/16(月) 08:51:26.93ID:kgcCjrnK
1)
BY
RG

2)
RG
BY

3)
GR
YB

1-3を回転対称で同じとみなせるグループと線対称で同じとみなせるグループに分類せよ

4色を2x2の升にランダムに一つづつ配置して4x3x2通りのパターンを作成し
それぞれを上の基準でグループ分けせよ
0134デフォルトの名無しさん
垢版 |
2023/10/18(水) 20:40:59.79ID:4ifgnZXl
お題:Pythonのmath.ulp()と同機能の関数
引数が正規化数限定のサブセットでも可(その旨を明記)。
Pythonで実装する場合は(もちろん)math.ulp()を使ってはならない。
0135134
垢版 |
2023/10/18(水) 20:46:23.24ID:4ifgnZXl
簡単なお題:
>>133のサブセット(求めたulpも正規化数限定)
0136デフォルトの名無しさん
垢版 |
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]
0137134
垢版 |
2023/10/18(水) 21:44:13.43ID:4ifgnZXl
>>135
間違えましたorz
0138134
垢版 |
2023/10/18(水) 21:52:04.82ID:4ifgnZXl
>>136
math.ulp()は符号を戻さないらしいです:
ulp(1) == ulp(-1)
0139デフォルトの名無しさん
垢版 |
2023/10/21(土) 04:08:56.28ID:TaroWUwV
お題:文字列「せんだ」「みつを」「ナハナハ」がランダムに100行入力される。せんだ、みつを、ナハナハが順番に入力されたときに1と一行出力せよ
0141デフォルトの名無しさん
垢版 |
2023/10/25(水) 07:23:48.08ID:gFkqcLnH
お題:
(1)Python3.12以降の、math.nextafter()のサブセット
(実装はPythonでなくても構いません)
64ビット長程度の整数iを引数として、
a)iがゼロ:foo(i) = 0.0
b)i > 0:foo(i) = nextafter(0, inf, steps=i)
c)i < 0:foo(i) = nextafter(0, -inf, steps=-i)
を満たすfoo()を書く。
Python3.12を使う場合は、nextafter()を使ってはならない。

(2)(1)の逆関数。
0142141
垢版 |
2023/10/25(水) 07:27:56.03ID:gFkqcLnH
補足:(1)(2)いずれも実用的な時間内で求める事(steps=1相当のnextafter()をループで回すのは不可)。
0143デフォルトの名無しさん
垢版 |
2023/10/25(水) 12:47:47.78ID:Bgy3SEXp
なんだnextafterって
0144141
垢版 |
2023/10/25(水) 23:22:03.23ID:gFkqcLnH
>>143
nextafter()は、浮動小数点数の、(数直線上での)「隣」を求めるやつですね(C99以降?)。
Python3.12のやつは、隣の隣の隣の…を求める事が出来る様に拡張されました。
014521-923
垢版 |
2023/10/26(木) 00:31:46.93ID:7aLp+Ojb
前スレの補足:
V8やLLVMは、自前でstrtod()的なものを実装してました。
tps://arxiv.org/abs/2101.11408
0146デフォルトの名無しさん
垢版 |
2023/10/28(土) 20:54:22.44ID:U0JINWpQ
>>101 octave
https://ideone.com/87WGBO
function s = f(s, i)
s(circshift(i, -1, 2)) = s(i);
end

>>127 ocaml
https://ideone.com/IY1dWU
let chars s =
let rec aux acc i =
if i < 0 then acc else aux (s.[i] :: acc) (i - 1)
in aux [] ((String.length s) - 1)
let f s =
let rec aux = function
([], []) -> 1
| (_, []) -> 0
| ('['::bs, ']'::cs) -> aux (bs, cs)
| (bs, c::cs) -> aux (c::bs, cs)
in aux ([], (chars s))
0147デフォルトの名無しさん
垢版 |
2023/10/31(火) 00:00:13.24ID:mywig6Xf
>>3 c
https://ideone.com/BnNzUC
int has26(const char *p) {
int c, count[26] = {0};
for (; c = tolower(*p); p++) if (isalpha(c)) count[c - 'a']++;
for (c = 'a'; c <= 'z'; c++) if (count[c - 'a'] < 1) return 0;
return 1;
}
const char *f(const char **lines, int n) {
const char *found = 0;
int i, len, minlen;
for (i = 0; i < n; i++)
if (has26(lines[i]))
if (!found)
found = lines[i], minlen = strlen(lines[i]);
else if (len = strlen(lines[i]) < minlen)
found = lines[i], minlen = len;
return found;
}
014917
垢版 |
2023/11/05(日) 02:55:01.08ID:w6RhJs5K
>>148
ChatGPT にそのままテキストを読ませたらこう答えた。
-------------------------------------------------------------------------------------------------
通学に自転車を使わない学生は34人、自転車を使うがバスを使わない学生は39人、バスを使うが自転車を使わない学生は18人です。

100人の学生全体からこれらの人数を引いた残りの学生がバスと自転車の両方を使っている学生の数です。

100人 - 34人 (自転車を使わない学生) - 39人 (バスを使わない学生) - 18人 (自転車を使わない学生) = 9人

したがって、通学にバスと自転車の両方を使う学生は9人です。
-------------------------------------------------------------------------------------------------

ここで徒歩については考慮しないのかとツッコミを入れたらこう答えた。

-------------------------------------------------------------------------------------------------
申し訳ありません、徒歩の学生についての情報が提供されていなかったため、上記の計算では徒歩を選択した学生については考慮されていませんでした。徒歩を選択した学生の数についての情報がなければ、バスと自転車の両方を使う学生の正確な数を計算することはできません。
-------------------------------------------------------------------------------------------------
015017
垢版 |
2023/11/05(日) 02:58:00.24ID:w6RhJs5K
そして更にこういうツッコミを入れる。

最初の34人は自転車を使っていないだけで密かにバスを使っているかも知れないのだが、そのことは考慮しないのか?

ChatGPT
申し訳ありません、私の以前の回答は不完全でした。確かに、最初の34人のうち自転車を使っていないという情報だけでは、彼らがバスを使っているかどうかを確定することはできません。そのため、正確な答えを得るためには追加の情報が必要です。

もし最初の34人のうち何人かが実際にはバスを利用している場合、それを考慮する必要があります。与えられた情報だけからは、バスと自転車の両方を使う学生の正確な数を特定することはできません。必要な情報が揃わない限り、正確な答えを提供することはできません。
レスを投稿する


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