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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
6
(2): デフォルトの名無しさん [sage] 2023/08/06(日) 19:07:03.27 ID:Md+pNxjw(1) AAS
use std::io::{self, BufRead, BufReader};
const FULL_BITS: u32 = (1 << 26) - 1;
fn main() {
 let mut shortest: Option<String> = None;
 for line in BufReader::new(io::stdin()).lines() {
  let line = line.unwrap();
  let mut bits = 0;
  for b in line.as_bytes() {
   let index = match b {
    b'A'..=b'Z' => b - b'A',
    b'a'..=b'z' => b - b'a',
    _ => continue,
   };
   bits |= 1 << index;
  }
  if bits != FULL_BITS {
   continue;
  }
  if let Some(ref shortest) = shortest {
   if shortest.len() < line.len() {
    continue;
   }
  }
  shortest = Some(line);
 }
 if let Some(shortest) = shortest {
  println!("{shortest}");
 } else {
  eprintln!("ERROR: no matched lines");
 }
}
35
(1): デフォルトの名無しさん [] 2023/08/11(金) 17:25:08.27 ID:I5t9Gg6x(1) AAS
遅延評価は馴染みない人にはわからんからしょうがない
209: デフォルトの名無しさん [sage] 2024/02/02(金) 22:48:33.27 ID:UezRkqGy(1/4) AAS
>>206
206(23): デフォルトの名無しさん [] 2024/02/02(金) 06:41:15.23 ID:CC6U77IS(1) AAS
お題
入力データをグループ分けして出力せよ

入力データの、= の左右は同じグループである。
出力する順番は、入力データの出現順とする

UnionFind を使えば良いかも

入力データ
["a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2",
"a3=a4", "c3=c4", "e1=e3", "a2=a4", "c3=c1",
"b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3"]

出力
[["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"],
["c1", "c2", "c3", "c4", "d1", "d2", "d3"],
["e1", "e2", "e3"]]

Ruby で、UnionFind を自作してみた。
下はユニットテストです

外部リンク:paiza.io
外部リンク:paiza.io
ruby
外部リンク:ideone.com
f = -> a {
w = a.map {|s| s.split('=')}.flatten.uniq.map.with_index.to_h
a.each_with_object([]) {|s, acc|
x, xa, y, ya = s.split('=').map {|k| [k, acc.find {|b| b.include? k}]}.flatten(1)
if xa && ya then xa.concat (acc.delete ya) << x << y
elsif xa then xa << x << y
elsif ya then ya << x << y
else acc << [x, y]
end
}.map {|a| a.uniq.sort_by {|s| w[s]}}.sort_by {|a| w[a[0]]}
}
280: デフォルトの名無しさん [sage] 2024/02/24(土) 00:25:03.27 ID:f2xn4abB(1) AAS
>>234
234(27): デフォルトの名無しさん [sage] 2024/02/14(水) 09:32:06.19 ID:JjlrBdlD(1) AAS
お題:数値が入力されるのでその数値に最も近い回分数を出力せよ
回分数とは回分になっている数(負数含まず)のことである
最も近い回分数が2つある場合は2つとも出力せよ

入力 0
出力 0

入力 17
出力 22

入力 100
出力 99
出力 101
Ruby
外部リンク:paiza.io
319
(2): デフォルトの名無しさん [] 2024/04/13(土) 11:43:17.27 ID:itq2kjOw(1) AAS
ヘロンの公式を実装せよ

使用言語:C
424: デフォルトの名無しさん [sage] 2024/09/04(水) 03:34:25.27 ID:k+9kMn3u(1) AAS
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
1(4): デフォルトの名無しさん [] 2023/08/03(木) 13:52:13.20 ID:/xW45k0z(1) AAS
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
 お題:お題本文

2 名前:デフォルトの名無しさん
 >>1 使用言語
 回答本文
 結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
外部リンク:ideone.com
外部リンク:codepad.org
外部リンク:compileonline.com
外部リンク:rextester.com
外部リンク:runnable.com
外部リンク:code.hackerearth.com
外部リンク:melpon.org
外部リンク:paiza.io

宿題は宿題スレがあるのでそちらへ。

※前スレ
プログラミングのお題スレ Part21
2chスレ:tech
&& 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 => []
559: 警備員[Lv.20] [] 2025/02/11(火) 05:48:25.27 ID:Y4Uu1QjJ(1/2) AAS
それはお題なのか?それともただの誤爆か?
729: デフォルトの名無しさん [] 2025/04/02(水) 14:31:23.27 ID:vIYRPSqy(1/3) AAS
>>725
725(2): デフォルトの名無しさん [] 2025/03/31(月) 22:37:26.59 ID:eEIz6yDp(1) AAS
>>718
>>721-722を整理して行列とヴェクトルの積ですっきり書けるようにした。

R (ideoneでも巨大整数型で実行可能になった)
外部リンク:ideone.com
C++
外部リンク:ideone.com

式を展開してしまえば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"
}
変数名がa、b、cの時点でプロじゃねえな
755: デフォルトの名無しさん [sage] 2025/04/12(土) 21:26:41.27 ID:csJOBVaF(1) AAS
>>754
754(2): デフォルトの名無しさん [] 2025/04/12(土) 21:18:53.69 ID:RVQAocGC(1) AAS
>>741のC++プログラムは for (int i = S; i >= 2; i--) のループの最後のi = 2の場合を
ループの外に出して最適化 (p[S]以外のp[_]への要素追加をしないように) するだけで、
20億以下で解の出力なしのときの実行時間が元のプログラムの半分未満になるな。

外部リンク:ideone.com (1.02秒)
 ↓
外部リンク:ideone.com (0.44秒)
それに気づいたけど
まだ>>750
750(3): デフォルトの名無しさん [sage] 2025/04/11(金) 07:38:20.09 ID:oaeJuxMT(1) AAS
>>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
}
と比べて20倍遅いからメモ化の方針が徒となってるのかな
809: デフォルトの名無しさん [] 2025/08/19(火) 21:08:19.27 ID:zFi0pntB(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])
問題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
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.051s