プログラミングのお題スレ Part22 (884レス)
上下前次1-新
188(1): 9 2024/01/16(火)02:37 ID:SfyAs2IF(1/2) AAS
>>187 Perl5
use Time::Piece;
use Time::Seconds;
for (qw{00:00:00 23:59:59}) {
$t = Time::Piece->strptime($_, '%T') + 1;
print "入力:$_\n出力:", $t->strftime('%T'), "\n";
}
※見易くするためインデントを全角スペースに置換してあります
実行結果
~ $ perl 22_187_1秒後.pl
省4
189: 9 2024/01/16(火)02:38 ID:SfyAs2IF(2/2) AAS
>>188
use Time::Seconds;
これ要らなかった…orz
190: 2024/01/16(火)20:31 ID:76+p6SY+(1/2) AAS
>>187 octave
外部リンク:ideone.com
f = @(s) datestr(addtodate(datenum(s), 1, 'second'), 'HH:MM:SS');
in = ['00:00:00';'23:59:59'], out = f(in)
191: 2024/01/16(火)20:54 ID:OiJoE8pV(1) AAS
>>187 PowerShell
"00:00:00", "23:59:59" |% {[String]([DateTime]$_).AddSeconds(1).TimeOfDay}
192: 2024/01/16(火)21:26 ID:76+p6SY+(2/2) AAS
>>187 ruby
外部リンク:ideone.com
require 'time'
f = -> s {(Time.parse(s) + 1).strftime('%T')}
p ['00:00:00', '23:59:59'].map {|s| [s, f.(s)]}
193: 2024/01/16(火)23:32 ID:+Emu7d1R(1) AAS
>>187 js
const decode = (s) => s.split(":").map(Number);
const encode = (nums) => nums.map((v) => String(v).padStart(2, "0")).join(":");
const inct = (s, sec = 1) => {
const a = decode(s);
const ss = [
{ n: a[0], max: 24 },
{ n: a[1], max: 60 },
{ n: a[2], max: 60 },
];
省14
194: 2024/01/17(水)00:04 ID:g7dwo5vO(1) AAS
>>187 ocaml
外部リンク:ideone.com
let sec_of_hms hms =
let at i = int_of_string (String.sub hms i 2) in at 0 * 60 * 60 + at 3 * 60 + at 6
let hms_of_sec sec =
Printf.sprintf "%02d:%02d:%02d" (sec mod 86400 / 3600) (sec mod 3600 / 60) (sec mod 60)
let (<<) f g x = f (g x)
let f = hms_of_sec << (+) 1 << sec_of_hms
195: 2024/01/17(水)01:45 ID:xvgJymQe(1) AAS
>>187
Rust (date/timeライブラリ不使用版)
fn next_time(cur: &str) -> String {
let [sec, min, hour] = cur
.rsplitn(3, ':')
.map(|s| s.parse().unwrap())
.zip([60, 60, 24])
.scan(1, |carry, (mut value, limit)| {
value += *carry;
(*carry, value) = if value == limit { (1, 0) } else { (0, value) };
省9
196: 17 2024/01/18(木)03:01 ID:opxINJAy(1) AAS
>>187
Kotlin
Java のライブラリそのまま使ってるだけの怠惰なプログラム
外部リンク:paiza.io
197: 17 2024/01/19(金)19:43 ID:hxZRcaHh(1) AAS
>>187
Kotlin
今度は Java のライブラリは使わずに時分秒を保持するクラスを自分で作ってそこで秒に足すとか文字列にするとかやるようにした。
外部リンク:paiza.io
198: 2024/01/20(土)23:08 ID:PCaU0wMN(1) AAS
>>187 dart 2.3.0
外部リンク:ideone.com
void main() {
var sec_of_hms = (hms) => hms.split(':').fold(0, (acc, s) => acc * 60 + int.parse(s));
var hms_of_sec = (sec) => [sec % 86400 ~/ 3600, sec % 3600 ~/ 60, sec % 60].map((x) => x.toString().padLeft(2, '0')).join(':');
var f = (hms) => hms_of_sec(sec_of_hms(hms) + 1);
print(f('00:00:00'));
print(f('23:59:59'));
}
199: 2024/01/21(日)17:06 ID:BpmEGVkv(1) AAS
>>187
c++
2chスレ:tech
200(1): 2024/01/21(日)21:15 ID:BWkvMixc(1) AAS
>>187 c
外部リンク:ideone.com
int hmstosec(const char *hms) {
int h, m, s;
return sscanf(hms, "%d:%d:%d", &h, &m, &s) == 3 ? h * 3600 + m * 60 + s : 0;
}
char *sectohms(char *buff, int sec) {
sprintf(buff, "%02d:%02d:%02d", sec % 86400 / 3600, sec % 3600 / 60, sec % 60);
return buff;
}
省18
201: 2024/01/22(月)15:47 ID:PT6/fzaV(1) AAS
>>187 lisp
外部リンク:ideone.com
202: 2024/01/23(火)20:39 ID:8rvcqFQo(1/2) AAS
>>187 gawk
外部リンク:ideone.com
BEGIN {FS=":"}
{print strftime("%T", mktime(sprintf("2024 01 23 %s %s %s", $1, $2, $3)) + 1);}
>>187 sqlite
外部リンク:ideone.com
select time('00:00:00', '+1 second');
select time('23:59:59', '+1 second');
>>187 bash
外部リンク:ideone.com
省3
203: 2024/01/23(火)22:56 ID:8rvcqFQo(2/2) AAS
>>187 pascal
外部リンク:ideone.com
program ideone;
Uses sysutils, dateutils;
function f(hms : string) : string;
begin
f := TimeToStr(IncSecond(StrToTime(hms), 1))
end;
begin
writeln(f('00:00:00'));
省2
204: 2024/01/23(火)23:54 ID:39Fs96AV(1) AAS
>>187を時間ライブラリ無しで作成できている言語は現時点で
193のJavaScript
194のOCaml
195のRust
197のKotlin
198のDart
199のC++
200のC
201のLisp
以上
205: 17 2024/01/24(水)00:08 ID:n4ooUyFj(1) AAS
>>187
Perl
bashのコマンドラインから長い長いワンライナーで。
$ perl -ne 'if(/(\d+):(\d+):(\d+)/){$h=$1;$m=$2;$s=$3;printf"入力:%02d:%02d:%02d\n",$h,$m,$s;$s++;if($s>=60){$m++;$s=0;if($m>=60){$h++;$m=0;if($h>=24){$h=0}}}printf"出力:%02d:%02d:%02d\n",$h,$m,$s}'
1:2:3
入力:01:02:03
出力:01:02:04
0:0:0
入力:00:00:00
出力:00:00:01
省4
206(23): 2024/02/02(金)06:41 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"]
出力
省7
207(1): 2024/02/02(金)10:50 ID:fEMhv+T7(1/2) AAS
AA省
208(2): 2024/02/02(金)10:53 ID:fEMhv+T7(2/2) AAS
>>207の動作確認用追加分
use std::collections::HashMap;
use itertools::Itertools;
fn main() {
let input = [
"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"
];
let output = [
省6
209: 2024/02/02(金)22:48 ID:UezRkqGy(1/4) AAS
>>206 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]
省3
210: 2024/02/02(金)22:51 ID:UezRkqGy(2/4) AAS
>>206 rust
外部リンク:ideone.com
fn f<'a>(a: &[&'a str]) -> Vec<Vec<&'a str>> { // '
let h = a.iter().map(|&s| s.split('=')).flatten().rev().enumerate().map(|(p, s)| (s, p)).collect::<HashMap<_, _>>();
let mut acc = Vec::<Vec<&str>>::new();
for xy in a.iter().map(|s| s.split('=').collect::<Vec<_>>()) {
match (acc.iter().position(|b| b.contains(&xy[0])), acc.iter().position(|b| b.contains(&xy[1]))) {
(Some(xi), Some(yi)) => {
let ys = acc[yi].clone();
acc[xi].extend(ys);
省15
211(1): 2024/02/02(金)23:24 ID:UezRkqGy(3/4) AAS
>>206 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)
elsif xa then xa << y
elsif ya then ya << x
省4
212: 2024/02/02(金)23:24 ID:UezRkqGy(4/4) AAS
>>206 rust
外部リンク:ideone.com
・若干の修正
fn f<'a>(a: &[&'a str]) -> Vec<Vec<&'a str>> { // '
let h = a.iter().map(|&s| s.split('=')).flatten().rev().enumerate().map(|(p, s)| (s, p)).collect::<HashMap<_, _>>();
let mut acc = Vec::<Vec<&str>>::new();
for xy in a.iter().map(|s| s.split('=').collect::<Vec<_>>()) {
match (acc.iter().position(|b| b.contains(&xy[0])), acc.iter().position(|b| b.contains(&xy[1]))) {
(Some(xi), Some(yi)) => {
let ys = acc[yi].clone();
省12
213(1): 2024/02/02(金)23:58 ID:Uk0I9chw(1) AAS
>>206
R
外部リンク:ideone.com
214: 2024/02/03(土)02:58 ID:bEsWZIv5(1) AAS
>>206
Java
外部リンク:paiza.io
215(1): 2024/02/03(土)10:26 ID:kmOXhk/V(1) AAS
>>206 >>213
Rでもっと短く書けた。
外部リンク:ideone.com
216: 9 2024/02/04(日)16:39 ID:jTY6zdRX(1/2) AAS
>>208 Perl5
use feature qw{:5.16 signatures};
no warnings qw(experimental::signatures);
@s = qw[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];
for (map{[sort /(\w+)=(\w+)/]} @s) {
($l, $r) = @$_;
$g{$r} //= $g{$l} //= $g{$r} // $l;
$h{$g{$r}} = $g{$l} if $g{$l} ne $g{$r};
}
$h{$k} = sub($e){$h{$e} ? __SUB__->($h{$e}) : $e}->($v) while ($k, $v) = each %h;
省9
217: 9 2024/02/04(日)18:22 ID:jTY6zdRX(2/2) AAS
>>208 宛てじゃなかった
>>206 の回答だったわ… orz
218(2): 2024/02/04(日)18:32 ID:fS5H2fbQ(1/2) AAS
AA省
219(1): 2024/02/04(日)19:02 ID:fS5H2fbQ(2/2) AAS
>>218の5行目の if (!$h[$_]) を if ($h[$_] -eq $null) に訂正
220: 2024/02/04(日)19:43 ID:NiYs7EK6(1) AAS
>>206
C++
2chスレ:tech
完全にやっつけ仕事、いろいろ課題がありますね
221(1): 211 2024/02/04(日)23:55 ID:ytAuzkvH(1) AAS
>>206 ruby
外部リンク:ideone.com
・>>211から若干のアレンジ
・同一グループの収集にSortedSetを使用
222: 17 2024/02/05(月)02:54 ID:8tY/Vubv(1) AAS
>>206
Kotlin
入力データを標準入力から入力したり、クラス作ってその中でまとめる等、色々やって長くなった。
外部リンク:paiza.io
223(2): 221 2024/02/05(月)20:08 ID:tt/WRhkt(1/2) AAS
>>206 ruby
外部リンク:ideone.com
・>>221から若干のアレンジ
・SortedSet単位でのみいじるようにした
f = -> a {
g = -> a {a.combination(2) {|x, y| break g.(a.tap {x.merge y; a.delete y}) if x.intersect? y}}
h = a.map {|s| s.split('=')}.flatten.uniq.map.with_index.to_h
a = a.map {|s| s.split('=').map {|k| h[k]}.to_set SortedSet}
g.(a).map {|set| set.map &h.invert.method(:[])}
}
224(2): 2024/02/05(月)23:26 ID:YjqgZClx(1) AAS
>>206
>>218-219をC#化
外部リンク:ideone.com
225(1): 223 2024/02/05(月)23:51 ID:tt/WRhkt(2/2) AAS
>>206 rust
外部リンク:ideone.com
・>>223の移植
・色々迷いアリ
.map(|k| *h.get(k).unwrap())のところは当初
.map(|k| h.get(k).map(|&i| i)).flatten()などとしていたが
正解がわからないので迷った挙げ句に短く書けるほうを採用
・これに限らずrustは不慣れなので色々珍妙なことをしている可能性アリ
226(1): 225 2024/02/06(火)22:07 ID:6T/Xuns0(1) AAS
>>206 rust
外部リンク:ideone.com
・>>225から若干の修正
・不必要なループ回数を訂正
・二重forを一重に(でもかえって煩雑に)
・まだまだ迷いアリ
.map(|k| *h.get(k).unwrap())は結局
.flat_map(|k| h.get(k)).cloned()に置き換え
こっちのほうが個人的にはスッキリ感アリ
>>206 rust
省3
227(2): 2024/02/06(火)22:17 ID:ICpsP2hv(1) AAS
>>206
C#で>>224とは別の解法
外部リンク:ideone.com
228: 2024/02/09(金)20:11 ID:xlZlW34G(1) AAS
>>206
C#でHashSet型を使用。実効速度は>>224と>>227より遅い。
外部リンク:ideone.com
229: 226 2024/02/09(金)22:33 ID:JDB9tF7l(1) AAS
>>226
すべてruby移植版rust
DでもE見た目派生まとめ
mutあり版
外部リンク:ideone.com // for if return
外部リンク:ideone.com // match find
外部リンク:ideone.com // if let find
mutなし版
外部リンク:ideone.com // for if return
外部リンク:ideone.com // match find
省7
230(1): 2024/02/10(土)22:10 ID:HaBtyH/G(1) AAS
>>206
>>227をC++に移植
外部リンク:ideone.com
231: 2024/02/11(日)15:34 ID:3wEOIMb0(1) AAS
>>206 octave
外部リンク:ideone.com
>>206 octave
外部リンク:ideone.com
232: 2024/02/11(日)20:38 ID:v64KP9lJ(1) AAS
>>206
>>230をDで書くと
外部リンク:ideone.com
になるが、switch case 0, 1, 2の場合も3の場合と同じ処理にすると、効率は落ちるもののかなり短くできる。
外部リンク:ideone.com
233: 223 2024/02/12(月)23:45 ID:ix8w7wd+(1) AAS
>>206 octave
外部リンク:ideone.com
・組み合わせつくって集合のペアごとに調べることをやめた
・集合間で重複する要素に着目して集合を減らすようにした
>>223
g.(a).map {|set| set.map &h.invert.method(:[])}じゃなくて単に
g.(a).map {|set| h.keys.values_at *set}で良かった
234(27): 2024/02/14(水)09:32 ID:JjlrBdlD(1) AAS
お題:数値が入力されるのでその数値に最も近い回分数を出力せよ
回分数とは回分になっている数(負数含まず)のことである
最も近い回分数が2つある場合は2つとも出力せよ
入力 0
出力 0
入力 17
出力 22
入力 100
出力 99
出力 101
235(1): 2024/02/14(水)15:20 ID:VoM/Kva2(1) AAS
>>234 lisp
外部リンク:ideone.com
236(2): 2024/02/14(水)21:10 ID:/8p4lTpf(1) AAS
>>234 ocaml
外部リンク:ideone.com
>>234 rust
外部リンク:ideone.com
237(1): 2024/02/14(水)23:21 ID:iTsk+dOj(1) AAS
>>236
PowerShell
外部リンク:ideone.com
238(1): 2024/02/15(木)21:30 ID:MveN6p4/(1) AAS
>>234
Rust
fn foo(n: usize) -> (usize, Option<usize>) {
let n2b = |n: usize| { let mut o = Some(n); iter::from_fn(|| { let n = o.take()?; o = (n >= 10).then(|| n / 10); Some((n % 10) as i8) }).collect::<Vec<i8>>() };
let b2n = |b: &[i8]| b.iter().rev().fold(0_usize, |n, b| n * 10 + *b as usize);
let pal = |b: &mut [i8]| { let len = b.len() / 2; let (l, u) = b.split_at_mut(len); iter::zip(l, u.iter().rev()).for_each(|(l, u)| *l = *u); };
let inc = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b += c; if *b > 9 { *b = 0; c = 1; } else { c = 0; }}); };
let dec = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b -= c; if *b < 0 { *b = 9; c = 1; } else { c = 0; }}); };
let fix = |b: &mut [i8]| { if b.last() == Some(&0) { if b.len() & 1 == 0 { b[(b.len() - 1) / 2] = 9; } true } else { false } };
省17
239(1): 2024/02/15(木)22:00 ID:fu0tHwRa(1) AAS
>>234
>>237は入力が1〜9のとき出力が正しくなかった。function内の1行目に if ($n -le 9) {return $n} を
挿入すると修正される。
Rでは添字の開始値は1で添字0では空のデータが返るので、入力が1〜9のときの場合分けは不要。
[]演算子と+演算子を文字列でも使えるように再定義した。
外部リンク:ideone.com
Dでは添字範囲指定は半開区間なので、入力が1〜9のときの場合分けは不要。
外部リンク:ideone.com
240(1): 2024/02/15(木)23:18 ID:IMdr4idU(1) AAS
>>234 c
外部リンク:ideone.com
241(1): 9 2024/02/16(金)02:56 ID:7jtCAGu+(1/2) AAS
>>234 Perl5
for $n (0,17,100,123459321) {
my %a;
for (0..$n) {
$i = $n - $_;
$a{$i} = $i if 0 <= $i and $i =~ /^((\d)(?1)\2|\d?)$/;
$j = $n + $_;
$a{$j} = $j if $j =~ /^((\d)(?1)\2|\d?)$/;
last if keys %a;
}
省10
242: 9 2024/02/16(金)03:13 ID:7jtCAGu+(2/2) AAS
>>241
last if keys %a;
}
@a = keys %a;
は
last if @a = keys %a;
}
とコンパクトに書けるんだった、まぁいいや
243(1): 9 2024/02/16(金)14:47 ID:TIAwaOOw(1) AAS
>>234 Perl5、小さい方の検索は0で止まるので負の値を避ける必要はなかった、書き直し。
$r = qr/^((\d)(?1)\2|\d?)$/;
for $n (0,17,100,123459321) {
my %a;
for (0..$n) {
$a{$n - $_} = 1 if ($n - $_) =~ $r;
$a{$n + $_} = 1 if ($n + $_) =~ $r;
last if @a = keys %a;
}
print "$n -> @a\n";
省1
244(1): 2024/02/16(金)21:57 ID:cLyPSkE5(1) AAS
>>234 pascal
外部リンク:ideone.com
245(2): 17 2024/02/16(金)23:58 ID:C4FuIAno(1) AAS
>>234
Kotlin
何か画期的なアルゴリズムを使ったわけではなく、むしろほとんど何も考えずただ作られただけのプログラム。
外部リンク:paiza.io
246(1): 9 2024/02/17(土)02:10 ID:K8P5qDCx(1) AAS
AA省
247(1): 2024/02/17(土)18:14 ID:nUY+CX2J(1/3) AAS
>>234 pascal
外部リンク:ideone.com
・dynamic array 使用
248(2): 2024/02/17(土)19:03 ID:eWGoJOTY(1) AAS
>>234
C++
2chスレ:tech
249(3): 2024/02/17(土)20:00 ID:k6cg1rdP(1) AAS
>>234
>>239のC#版
外部リンク:ideone.com
Julia版
外部リンク:ideone.com
250(1): 2024/02/17(土)20:51 ID:nUY+CX2J(2/3) AAS
>>234 octave
外部リンク:ideone.com
251(2): 2024/02/17(土)21:45 ID:nUY+CX2J(3/3) AAS
>>234 ruby
外部リンク:ideone.com
252(1): 2024/02/18(日)17:05 ID:z028saCP(1) AAS
>>251
>[[0, [0]], [17, [11]], [100, [99, 101]]]
17 は、22 だよ
253(1): 2024/02/18(日)18:14 ID:puttXdr1(1/4) AAS
>>235
しらみ潰しで失格
>>236
しらみ潰しで失格
>>240
しらみ潰しで失格
254(2): 2024/02/18(日)18:14 ID:puttXdr1(2/4) AAS
>>243
しらみ潰しで失格
>>244
しらみ潰しで失格
>>245
しらみ潰しで失格
255(1): 2024/02/18(日)18:15 ID:puttXdr1(3/4) AAS
>>246
しらみ潰しで失格
>>247
しらみ潰しで失格
>>248
しらみ潰しで失格
256(1): 2024/02/18(日)18:16 ID:puttXdr1(4/4) AAS
>>250
しらみ潰しで失格
>>251
しらみ潰しで失格
257: 2024/02/18(日)18:26 ID:ovKjFpQ6(1) AAS
>>253-256 アスペで不合格w
258: 2024/02/18(日)18:34 ID:rWy6ZYAH(1/2) AAS
>>234 ruby
外部リンク:ideone.com
f = -> n {
(0..n).lazy.map {|i| [n - i, n + i].select {|x| x.to_s.reverse.to_i == x}}.find(&:any?).uniq
}
>>252
(`・ω・´)ゞ
誤:a - 1, a + 1
正:a - 1, b + 1
259(1): 2024/02/18(日)19:41 ID:rWy6ZYAH(2/2) AAS
>>234 dart
外部リンク:ideone.com
void main() {
var rev = (n) => int.parse(n.toString().split('').reversed.join());
var f = (n) => Iterable.generate(n + 1).map((i) => [n - i, n + i].where((x) => x == rev(x))).firstWhere((a) => a.isNotEmpty).toSet().toList();
print([0, 17, 100].map((n) => [n, f(n)]));
}
260: 2024/02/20(火)08:46 ID:8US2zplP(1) AAS
【㋮㋑㋣㋹㊀㋳】 チャールズ3世戴冠式に`死神´
2chスレ:kokusai
BEアイコン:22ja8.png
261: 17 2024/02/20(火)10:47 ID:YmH8jdAc(1) AAS
>>254
しらみ潰しって、どんなテストしたの?
262(2): 2024/02/20(火)12:59 ID:qzcGLGiS(1) AAS
しらみ潰しとは例えば1から順番に見つかるまで全てを試していく最悪な方法を指す
今回の場合だと与えた数から順番に見つかるまで±1を続けて全てを試していって探すプログラムが該当する
263: 9 2024/02/20(火)17:18 ID:X5uoFLgg(1) AAS
「どんなテストしたの?」
って質問だよ
264(1): ◆QZaw55cn4c 2024/02/20(火)20:48 ID:RtAsHDVN(1) AAS
>>262
私は >>248
だけれども、解法としてはそれしかないと思いますね
265: 2024/02/20(火)22:00 ID:e+y9lgSN(1) AAS
>>249 と >>238 は
しらみ潰しではなく
きちんとプログラミングして算出しているようにみえますね
266(3): 2024/02/21(水)13:54 ID:ve9Dz9D8(1) AAS
>>264
私は解答は提出していないが、ざっくりと自分が思いついた方法
まず、以下のような操作を考える
A. 1234という入力に対して1234321を返す
B. 1234という入力に対して12344321を返す
ここで、xという入力に対してA,Bが返す数をA(x),B(x)と表すことにする
次に、与えられた数の桁数で場合分け
(1)与えられた数字の桁数が奇数の場合
例として5桁の数字を考える
N=a*10000+b*1000+c*100+d*10+e*1 (a~eは1桁の自然数, aは0でない)
省17
267(1): 2024/02/21(水)16:02 ID:Sko4Sglv(1) AAS
>>266
N=17
のときは?
268: 259 2024/02/21(水)23:06 ID:DX/jvS2m(1) AAS
>>259
Iterable.generate(n).map(f)は単に
Iterable.generate(n, f)で良かったと判明
269(1): 2024/02/21(水)23:42 ID:bqTl0uQM(1) AAS
>>234
>>249をC++で書き換え(入力値は64ビット整数の範囲内限定)
外部リンク:ideone.com
元々はCで書き、4行目はなし、15行目と24行目はstrrev(s + i);だったが、Windowsのgccでは
コンパイルできたのにideoneではできなかったので、仕方なくC++にしてstd::reverseで代用した。
270: 2024/02/22(木)00:34 ID:+mJgzEZf(1) AAS
>>234 lisp
>>266を参考に>>249(C#)を移植
外部リンク:ideone.com
271: 2024/02/22(木)01:30 ID:9s07Ijs0(1) AAS
>>234
Rust
fn nearest_palindrome_numbers(n: usize) -> Vec<usize> {
let mut dd = DecimalDigits::new(n);
dd.palindrome_using_upper_half();
let n1 = dd.to_number();
match compare(n, n1) {
Equal => return vec![n],
Greater => dd.increment_upper_half(),
Less => dd.decrement_upper_half(),
省12
272: 266 2024/02/22(木)01:47 ID:c61GBvnr(1) AAS
>>267
N=17=1*10+7*1のとき、Nは2桁(偶数桁)でM=1*1=1
B(M)=B(1)=11はNより小さいのでB(M-1)は考えなくてよい
B(M+1)=B(2)=22なので11,22が答えの候補
11より22のほうが17に近いので22が答え
ちょっとNに対するMの説明が足りてなかったけど言葉で上手く言い表せないすみません(上位半分以上かつ最小の桁数を抜き出す、的な)
273(2): 2024/02/22(木)20:54 ID:+nyM4OV5(1/2) AAS
>>234 ruby
外部リンク:ideone.com
・それっぽい三個の候補から選んでるだけ
274(1): 2024/02/22(木)21:04 ID:3p8Kt6H4(1) AAS
>>234
>>269の一部でC++の機能をどうせ使ってしまったので、この際、全部をC++流に変えたら
C流よりすっきり書けた。
外部リンク:ideone.com
275: 273 2024/02/22(木)21:48 ID:+nyM4OV5(2/2) AAS
>>273
> [1000, [1001]]
誤:ps = [p.(s), p.(t.to_i.pred.abs.to_s + u), p.(t.succ + u)]
正:ps = [p.(s), p.(t.to_i.pred.abs.to_s + u), p.(t.succ + u), p.(s.to_i.pred.abs.to_s)]
とりあえず雑に修正してみたが?
(ノ∀`)アチャー
276(1): 17 2024/02/23(金)18:10 ID:ZR6D6MGM(1/2) AAS
>>262
>>245のKotlinのプログラムは何も考えてなくて本当に馬鹿正直に±1して一つ一つ検査する方式で作ったんだけど、それでもあなたのテストではダメということになったの?
まあ Int (符号付32bit整数) 使ってるからその限界超えたらダメではあるんだけど、そういう問題ではなく?
277(1): 2024/02/23(金)18:58 ID:9Umf93zL(1) AAS
>>276
それはしらみつぶしと言われる駄目プログラミングだよ
例えば求める解法が存在する方程式を解くのに値を±1しながら順に代入して試していくのと同じ
278: 2024/02/23(金)21:39 ID:ZR6D6MGM(2/2) AAS
>>277
あー。プログラムにバグがあってまともに答えが出ないっていうことではなく何の捻りもないプログラムだからダメっていう感想ね。それならわかる。
こちらもアルゴリズム思い浮かばないけどとりあえず作ってみただけだし。ダメというほどではないが良いとも思えないプログラムなので。
279(1): 273 2024/02/23(金)23:06 ID:RzwC5Hr4(1) AAS
>>234 ruby
外部リンク:ideone.com
・273の[1000, [1001]]バグ修正版
・275とは違う方法で修正してみたがやっつけ感大
>>234 ruby 2.5.5
外部リンク:ideone.com
・いわゆる(?)ジェネレータ版
・「終端を持たない範囲オブジェクト」はRuby 2.6.0から
280: 2024/02/24(土)00:25 ID:f2xn4abB(1) AAS
>>234
Ruby
外部リンク:paiza.io
281: 279 2024/02/24(土)13:21 ID:aSUCvHSH(1) AAS
>>234 ruby 2.5.5
外部リンク:ideone.com
・ジェネレータ版ちょっとアレンジ
・to_sしてto_iするのをやめた
282(16): ◆QZaw55cn4c 2024/02/24(土)14:25 ID:NZEL8Kud(1) AAS
異なる自然数 a, b (a > b) における a^3 - b^3 を「a, b の三乗差」と呼ぶことにする。
異なる5通りの組(a, b) (c, d) ... (j, k) について三乗差がすべて相等しいとき
その組(a, b)...(j, k) および三乗差自体を求めよ
異なる6通りの組で三乗差が相等しい場合があるかも検討せよ
283(1): 2024/02/24(土)16:47 ID:KRWvIUHe(1) AAS
>>282
[(1134, 357), (1155, 504), (1246, 805), (2115, 2004), (4746, 4725)]
a^3 - b^3 == 1412774811
284: 17 2024/02/24(土)16:52 ID:Pf8MFN4C(1) AAS
数学、か・・・
285(1): 2024/02/24(土)18:16 ID:O6Cw1j13(1) AAS
>>282 ruby
外部リンク:ideone.com
・そのまま版
・5秒じゃ?
286: 2024/02/24(土)20:03 ID:mNVJyIZh(1/2) AAS
>>234
>>274を巨大整数対応にした。
外部リンク:ideone.com
287(1): 2024/02/24(土)22:30 ID:mNVJyIZh(2/2) AAS
>>282
aが5000以下限定で>>283の解はRで5秒以内に求められた。8〜9行目は下三角行列の要素番号から
行番号と列番号を求めているだけで、>>282を解く特別なアルゴリズムというわけではない。
外部リンク:ideone.com
上下前次1-新書関写板覧索設栞歴
あと 597 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s