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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
187
(17): デフォルトの名無しさん [] 2024/01/16(火)00:33 ID:n8j0XaXx(1)
お題:時刻の文字列が与えられる。その時刻から1秒後の時刻を出力せよ。


入力:00:00:00
出力:00:00:01
入力:23:59:59
出力:00:00:00
188
(1): 9 [sage] 2024/01/16(火)02:37 ID:SfyAs2IF(1/2)
>>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
入力:00:00:00
出力:00:00:01
入力:23:59:59
出力:00:00:00
190: デフォルトの名無しさん [sage] 2024/01/16(火)20:31 ID:76+p6SY+(1/2)
>>187 octave
https://ideone.com/CEGEj8
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)
>>187 PowerShell
"00:00:00", "23:59:59" |% {[String]([DateTime]$_).AddSeconds(1).TimeOfDay}
192: デフォルトの名無しさん [sage] 2024/01/16(火)21:26 ID:76+p6SY+(2/2)
>>187 ruby
https://ideone.com/y2wgxo
require 'time'
f = -> s {(Time.parse(s) + 1).strftime('%T')}
p ['00:00:00', '23:59:59'].map {|s| [s, f.(s)]}
193: デフォルトの名無しさん [sage] 2024/01/16(火)23:32 ID:+Emu7d1R(1)
>>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 },
];
let up = sec;
const b = ss
.reverse()
.map(({ n, max }) => {
n += up;
up = Math.floor(n / max);
return n % max;
})
.reverse();
return encode(b);
};
console.log(inct("00:00:00"));// 00:00:01
console.log(inct("23:59:59"));// 00:00:00
console.log(inct("00:00:00", 100));// 00:01:40
194: デフォルトの名無しさん [sage] 2024/01/17(水)00:04 ID:g7dwo5vO(1)
>>187 ocaml
https://ideone.com/aEsvl6
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: デフォルトの名無しさん [sage] 2024/01/17(水)01:45 ID:xvgJymQe(1)
>>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) };
  Some(value)
 })
 .collect::<ArrayVec<_, 3>>()[..] else { unreachable!() };
 format!("{hour:02}:{min:02}:{sec:02}")
}

fn main() {
 assert_eq!(next_time("00:00:00"), "00:00:01");
 assert_eq!(next_time("23:59:59"), "00:00:00");
}
196: 17 [] 2024/01/18(木)03:01 ID:opxINJAy(1)
>>187
Kotlin

Java のライブラリそのまま使ってるだけの怠惰なプログラム

https://paiza.io/projects/76gN3OCL93cAj7qXnNlyIA
197: 17 [] 2024/01/19(金)19:43 ID:hxZRcaHh(1)
>>187
Kotlin

今度は Java のライブラリは使わずに時分秒を保持するクラスを自分で作ってそこで秒に足すとか文字列にするとかやるようにした。

https://paiza.io/projects/7YcPDBTxVFt9EVczvBJ8gQ
198: デフォルトの名無しさん [sage] 2024/01/20(土)23:08 ID:PCaU0wMN(1)
>>187 dart 2.3.0
https://ideone.com/khq9gr
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)
>>187
c++
2chスレ:tech
200
(1): デフォルトの名無しさん [] 2024/01/21(日)21:15 ID:BWkvMixc(1)
>>187 c
https://ideone.com/wRIYl2
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;
}
char *f(char *buff, const char *hms) {
return sectohms(buff, hmstosec(hms) + 1);
}

>>187 c
https://ideone.com/3gj90n
int hmstosec(const char *hms) {
#define _(i) ((hms[i] - '0') * 10 + (hms[i + 1] - '0'))
return _(0) * 3600 + _(3) * 60 + _(6);
#undef _
}
char *sectohms(char *buff, int sec) {
#define _(i, value) buff[i] = '0' + (value) / 10, buff[i + 1] = '0' + (value) % 10
return _(0, sec % 86400 / 3600), buff[2] = ':', _(3, sec % 3600 / 60), buff[5] = ':', _(6, sec % 60), buff[8] = '\0', buff;
#undef _
}
char *f(char *buff, const char *hms) {
return sectohms(buff, hmstosec(hms) + 1);
}
201: デフォルトの名無しさん [] 2024/01/22(月)15:47 ID:PT6/fzaV(1)
>>187 lisp
https://ideone.com/J8xIVN
202: デフォルトの名無しさん [sage] 2024/01/23(火)20:39 ID:8rvcqFQo(1/2)
>>187 gawk
https://ideone.com/zBy22y
BEGIN {FS=":"}
{print strftime("%T", mktime(sprintf("2024 01 23 %s %s %s", $1, $2, $3)) + 1);}

>>187 sqlite
https://ideone.com/fjEdMz
select time('00:00:00', '+1 second');
select time('23:59:59', '+1 second');

>>187 bash
https://ideone.com/pYf8vL
while read hms; do
date '+%T' --date="+1 seconds $hms"
done
203: デフォルトの名無しさん [sage] 2024/01/23(火)22:56 ID:8rvcqFQo(2/2)
>>187 pascal
https://ideone.com/sprmCC
program ideone;
Uses sysutils, dateutils;
function f(hms : string) : string;
begin
f := TimeToStr(IncSecond(StrToTime(hms), 1))
end;
begin
writeln(f('00:00:00'));
writeln(f('23:59:59'));
end.
204: デフォルトの名無しさん [sage] 2024/01/23(火)23:54 ID:39Fs96AV(1)
>>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)
>>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
23:59:59
入力:23:59:59
出力:00:00:00
$
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s