プログラミングのお題スレ Part20at TECH
プログラミングのお題スレ Part20 - 暇つぶし2ch584:デフォルトの名無しさん
22/05/11 08:28:38.45 zQqHPRjb.net
思い付きでお題考えてみた
検証してないんだけどどう?
お題: ランダムな部屋を移動する最短距離を求める
行列がある
任意の横幅Wと高さHで表現される部屋がランダムに1 <= N <= 5個生成される
この部屋を部屋内の座標からランダムに選択した別の部屋の部屋内の座標まで通路を作る
通路の要素は斜めには生成されず横と縦に生成される
通路はランダムに1つの部屋から0 <= R <= 3生成される
各部屋を各通路で繋げ任意の部屋Aと任意の部屋Bを選択する
このときAからBまでの最短経路を求めよ

585:デフォルトの名無しさん
22/05/11 10:03:08.65 u3pPN9f9.net
ランダムの部分いる?

586:デフォルトの名無しさん
22/05/11 19:40:13.01 RtJ1FIjP.net
日本語がよくわからんから数式で書いてくれ

587:デフォルトの名無しさん
22/05/11 19:57:58.11 dPHs0KwZ.net
数式だと答えになりそうだから図で書いてくれ

588:デフォルトの名無しさん
22/05/17 17:53:19 UVEhLnaE.net
さらに、閑古鳥をよびよせるか

[お題] 多倍�


589:キでは無理!? 整数 S, T が与えられる。(1 <= S <= T <= 400万) S以上T以下の(連続する)整数の最小公倍数(LCM)をもとめる 答えは, 1000000007(10億7)の余りで出力 1) 6 8 --> 168 6,7,8 の最小公倍数、LCM(6, 7)= 42 --> LCM(42, 8)= 168 2) 10 30 --> 89546497 剰余前は、2329089562800 3) 2567890 3456789 --> ? 4) 1 4000000 --> ?



590:デフォルトの名無しさん
22/05/19 21:03:46.76 f4mJcXLG.net
>>562
Haskell
URLリンク(ideone.com)

591:デフォルトの名無しさん
22/05/19 21:16:43.90 bqW40Z5X.net
√T以下の素数列挙
各数を素因数分解して各素数の指数の最大を求める
10億7の剰余で上の乗算を行う

592:デフォルトの名無しさん
22/05/19 22:51:31.74 vGEyxbeO.net
>>562 C
URLリンク(ideone.com)

593:デフォルトの名無しさん
22/05/20 19:19:40.97 nM/DB7wD.net
>>562
URLリンク(ideone.com)
想定解としては、(他の人同様)
 求める最小公倍数を素因数分解した形に作るイメージ
 400万以下の"素数及び素数べき乗"は、高々28.3万件。
 S以上T以下で、素数べき乗が割り切れるかどうかチェックしている。
 (方法は T/素数べき乗 > (S-1)/素数べき乗 ならあると, O(1)判定)
 ボトルネックは素数を求める部分なので、手抜きしている。
余談)
・4)を多倍長で計算すると173万桁だった(一分程度ででた)
・10^9+7 ではなく、下9桁を出力だと、4)は 0になる(5^9が範囲にあるから)

594:デフォルトの名無しさん
22/07/01 10:06:17.68 GRk1+wVC.net
age

595:デフォルトの名無しさん
22/07/01 15:47:14 GJ0Vg4bO.net
お題: 循環リストを検出するプログラムを書け

596:デフォルトの名無しさん
22/07/01 19:58:00.80 il671KyI.net
循環リスト
の定義を書いてください

597:デフォルトの名無しさん
22/07/02 02:10:30.75 1mXsd8mZ.net
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID

598:デフォルトの名無しさん
22/07/02 04:54:46.54 5fwFwNtd.net
>>570
Kotlin
自分ではほとんど何も考えていない脱力感溢れるプログラム
URLリンク(paiza.io)

599:デフォルトの名無しさん
22/07/02 05:51:46.20 y+j5RBoo.net
>>570 Ruby
f = -> s {
case s
when /\A(?:0|[1-9]\d*)\z|\A(?:[1-9]\d{0,2})(?:,\d{3})*\z/
:INT
when /\A(?:0?|[1-9]\d*)\.\d+\z/
:FLOAT
else
:INVALID
end
}
%w[123 1,234 1.23 a123 12abc 1.23.435 .142857 1. 0 01 1,234,567 1234,567].each{|s|
puts '%s -> %s' % [s, f[s]]
}
# =>
123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID

600:デフォルトの名無しさん
22/07/02 05:58:59.35 At3W7bIA.net
>>570
こう言うのは仕様をちゃんと提示してよ
123.
123.0
12,34
はどうなればいいのか

601:デフォルトの名無しさん
22/07/02 08:08:58.00 syeRaQWQ.net
そんな文句みたいな言い方するほどか?
他の問題に比べたらケースちゃんと提示してる方だし
そういうのは想定してないってなんとなくわかるだろ
競プロならちゃんと定義必要だろうけど

602:デフォルトの名無しさん
22/07/02 08:09:44.82 syeRaQWQ.net
123.0は確かに気になるけど

603:デフォルトの名無しさん
22/07/02 09:41:42.13 At3W7bIA.net
>>574
> そういうのは想定してないってなんとなくわかるだろ
お題なんだから想定しろよ
でないとそのケースはそうじゃなくて


604:こうすべきとか言う奴が出てきて荒れる元だし



605:デフォルトの名無しさん
22/07/02 09:58:04.16 dKfad4Z0.net
はい!

606:デフォルトの名無しさん
22/07/02 09:58:41.88 COZLaCzb.net
123.0はfloatだろ常考

607:デフォルトの名無しさん
22/07/02 12:04:36.48 oDFjP9XJ.net
黙って実装して自分なりの仕様を提示するテストケースを追加して提出した>>572の勝利

608:ハノン
22/07/02 14:55:56.14 w21fdpYM.net
>>579
激しく同意

609:デフォルトの名無しさん
22/07/02 15:40:39.43 ZFJdClOp.net
>>579
クールだよな

610:デフォルトの名無しさん
22/07/02 16:54:51.10 RqXE55Ja.net
>>570
こういうアホがソフト仕様を書くと悲惨

611:デフォルトの名無しさん
22/07/02 17:49:49.50 Vxz6zO/I.net
久々に出題者現れたかと思ったらフルボッコでかわいそう

612:デフォルトの名無しさん
22/07/02 18:03:20.65 +K04BJMF.net
もっと気楽にやれよ
普段ゴミみたいな案件で意を汲み取れず怒られ理不尽な思いしてる底辺コーダーが叩き行為で鬱憤晴らししたいんだろうけどさw
仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
その議論を「荒れる」と捉えるのは違うでしょ

613:デフォルトの名無しさん
22/07/02 20:54:40.02 1mXsd8mZ.net
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
version 1.0.1
123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID
123.0 -> FLOAT

614:デフォルトの名無しさん
22/07/02 23:37:34.43 12WH0HiU.net
>>568
URLリンク(ideone.com)

615:デフォルトの名無しさん
22/07/03 06:43:46.91 /5k6Ls0P.net
.142857がOKで1.がNG
なんか違和感
どの言語の流儀?
具体例だけに頼らないで
定義っぽく書けない?
----
[整数部]、[整数部].[小数部]、.[小数部] のいずれかの形
[整数部] : 0123456789の列1文字以上、もしくはこれを3桁ずつ,で区切った形
2桁以上の場合は先頭は0ではない
[小数部] : 0123456789の列1文字以上
....
こんな感じ

616:デフォルトの名無しさん
22/07/03 07:10:28.62 3/zKVKew.net
0.DDD を .DDD と表記するのは欧米では情報系に限らず日常よく見られること
CSSもperlも昔のrubyも対応してたんじゃなかったかな

617:デフォルトの名無しさん
22/07/03 09:01:07.02 udoKn6Zg.net
1. がNGなのは?
どこの流儀?

618:デフォルトの名無しさん
22/07/03 09:17:25.30 aLgpTdvv.net
>>584
> 仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
だからその一般認識がないから揉めるって話
既に違和感と言い出す奴とか欧米ガーとか流儀ガーとか言い出してるだろ
エディタの宗教戦争と同じで正解なんてないんだからお題を作った奴が決めないと収拾つかんよ

619:デフォルトの名無しさん
22/07/03 09:24:18.29 3/zKVKew.net
>>590
1から10まで教えてもらえないとなんもできないのかよ
エディタ宗教戦争を例に出してるけどあんなのにガチに捉えてるバカはお前くらいだ

620:デフォルトの名無しさん
22/07/03 09:34:46.48 /kuq8Z/3.net
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
INT: digit+

621:デフォルトの名無しさん
22/07/03 09:37:29.23 /kuq8Z/3.net
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.2
int: digits
float: digits ('.' digits)?
digits: digit+
digit: [0-9]+

622:デフォルトの名無しさん
22/07/03 10:08:31.69 JHbRyeE7.net
>>591
ガチに捉えるもなにも今でもやってるだろw

623:デフォルトの名無しさん
22/07/03 10:15:42.92 JHbRyeE7.net
>>593
カンマとかはなくなってるけど、仕様変更ですか?
あと
digits: [0-9]+
にしてdigitをやめるか
digit: [0-9]
にした方がいいかと思いますよ

624:デフォルトの名無しさん
22/07/03 12:27:53.93 /kuq8Z/3.net
>>595
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.3
int: comma_


625:digit float: comma_digit '.' digit* | '.' digit* comma_digit: digit_123 { ( ','? digit_3 ) }* digit_3: digit digit digit digit_123: digit digit? digit? digit: [0-9] どや?完璧だろこのBNF これで文句ないな



626:デフォルトの名無しさん
22/07/03 12:41:01.89 E32cFzvb.net
>>596
"1."、"01"、"1234,567" が INVALID になりませんし "." だけでも FLOAT になるのはどうかと思いますが...

627:デフォルトの名無しさん
22/07/03 12:54:46.68 /kuq8Z/3.net
>>597
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.4
int: comma_digit
float: comma_digit '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ( ','? digit_3 ) }*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]
どや?

628:デフォルトの名無しさん
22/07/03 14:30:14.53 +vJDgzA0.net
勉強になる

629:デフォルトの名無しさん
22/07/03 15:35:40.90 VBJi0e3g.net
>>598
指摘された箇所すら直せないとかどう見ても向いてないからやめたら?
> "1234,567" が INVALID になりませんし

630:デフォルトの名無しさん
22/07/03 15:38:27.96 7UQlj4nA.net
ハズレ上司感

631:デフォルトの名無しさん
22/07/03 15:41:49.46 yV0MWMu9.net
>>570 ocaml
URLリンク(ideone.com)

632:デフォルトの名無しさん
22/07/03 16:15:01.49 /kuq8Z/3.net
>>600
めんどくせ~な~
お前やれよ

633:デフォルトの名無しさん
22/07/03 16:24:52.83 /kuq8Z/3.net
>>600
version 1.0.5
int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: digit_19 digit_09*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]
ていうか1234,567にはならんはずだぞ

634:デフォルトの名無しさん
22/07/03 16:30:18.21 /kuq8Z/3.net
>>600
version 1.0.6
int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: ( digit_19 digit_09+ ) | digit_09
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]
おら!完璧だろ!

635:デフォルトの名無しさん
22/07/03 17:25:11.12 bGSSCSEx.net
>>604
> ていうか1234,567にはならんはずだぞ
しれっと変えといてさすがにそれは恥ずかしいな
>>598> comma_digit: digit_123 { ( ','? digit_3 ) }*
>> 604 > comma_digit: digit_123 { ',' digit_3 }*
>>605
まあ、よしとしてやろう

636:デフォルトの名無しさん
22/07/03 20:20:25.60 H80x+Ni5.net
問題を解かずに出題の形式美に必死になるなんて、このスレ的にどうなのよ?

637:蟻人間
22/07/03 21:46:41.57 wwKaul6r.net
char buf[64];
fgets(buf, 64, stdin);
char *endptr;
strtol(buf, &endptr, 10);
if (*endptr == 0) {
puts("INT");
return;
}
strtod(buf, &endptr);
if (*endptr == 0) {
puts("FLOAT");
return;
}
puts("INVALID");

638:デフォルトの名無しさん
22/07/04 22:09:22.65 hLP3lYAM.net
>>570 dart
URLリンク(ideone.com)

639:デフォルトの名無しさん
22/07/08 20:02:47.21 N6PR1KyM.net
お題
非負整数xが16進数表記で与えられる。xのビットu~lの範囲を逆順にした値を出力せよ。
[入力]
x u l
[例]
0x80 7 0
=> 0x1 (8bit全体をreverse)
0xABCD 11 4
=> 0xA3DD (真ん中8bitをreverse, 0xBC=0b10111100 -> 0b00111101=0x3D)
0x2 99 1
=> 0x8000000000000000000000000 (2の99乗)

640:デフォルトの名無しさん
22/07/08 22:06:04.39 ju1TxHLl.net
>>610 Ruby
f = -> (*a) {_, e, s = a.map(&:to_i); '0x%X' % a[0].hex.digits(2).concat(Array.new(e, 0)).tap{_1[s..e] = _1[s..e].reverse}.reverse.reduce{|s, i| 2 * s + i}}
['0x80 7 0', '0xABCD 11 4', '0x2 99 1'].each{puts '%s -> %s' % [_1, f[*_1.split]]}
# =>
0x80 7 0 -> 0x1
0xABCD 11 4 -> 0xA3DD
0x2 99 1 -> 0x8000000000000000000000000

641:デフォルトの名無しさん
22/07/09 09:28:21.31 72Wr/ML/.net
>>610 octave
URLリンク(ideone.com)

642:デフォルトの名無しさん
22/07/09 21:45:11.70 A5P06KhI.net
>>610
Kotlin
URLリンク(paiza.io)
BigInteger 使ったので、ビット数がかなり多くても大丈夫。

643:デフォルトの名無しさん
22/07/24 20:03:09.74 RqwYi


644:vmm.net



645:デフォルトの名無しさん
22/07/26 20:19:27.06 wEdk200U.net
お題:数字をミラーリングせよ
入力 < 123
出力 > 123321
reverse系メソッドを使わなかったら加点とする

646:デフォルトの名無しさん
22/07/26 20:33:23.78 gSFNKY8C.net
>>615 Ruby
$><<(a=gets.scan /./)*'';$><<$a while$a=a.pop
-*- input -*-
123
-*- output -*-
123321

647:デフォルトの名無しさん
22/07/26 22:30:32.74 LilaKoZu.net
>>615
Java
static String mirror(String src) {
 var dest = new char[src.length() * 2];
 var a = src.toCharArray();
 for (var i = 0; i < a.length; i++) {
  dest[i] = a[i];
  dest[dest.length - 1 - i] = a[i];
 }
 return new String(dest);
}

648:アリ人間
22/07/26 22:36:21.87 SFGiBpCo.net
>>615
派生お題: 文字列処理を使わずに与えられた整数を回文にせよ。

649:デフォルトの名無しさん
22/07/26 23:38:05.85 ceC8PDvA.net
>>615 octave
URLリンク(ideone.com)
f = @(a) a([1:end end:-1:1]);
f('123')

650:デフォルトの名無しさん
22/07/26 23:41:29.56 DU0tXUgh.net
魔法の計算式とか無いん?

651:デフォルトの名無しさん
22/07/27 00:03:13.42 MKIa5t3g.net
俺も考えてみたけど調べても回分数のシグマ使わない一般式は無いみたいだな

652:デフォルトの名無しさん
22/07/27 00:09:31.00 C/59UMec.net
>>615 JavaScript
const mirror = (n, c, ...args) => c === null ? (answer => 0 <= n && answer <= Number.MAX_SAFE_INTEGER ? answer : RangeError(`${n} is invalid.`))(args.reduce((s, d) => s * 10 + d, n)) : c == undefined ? mirror(Number.parseInt(n), Number.parseInt(n), ...args) : mirror(n, c < 10 ? null : Math.floor(c / 10), ...args, c % 10);
// test
for (const [n] of [[-1, 'x'], [0, 'o'], [1, 'o'], [12345678, 'o'], [123456789, 'x'], [123.456, 'o (123321)']]) {
const answer = mirror(n);
console[answer instanceof RangeError ? 'error' : 'log'](answer);
}

653:デフォルトの名無しさん
22/07/27 01:46:36.04 7bF+Pf0F.net
octave綺麗

654:96
22/08/02 01:11:31.65 6KqVNIq0.net
>>615 Perl5
use feature qw{say signatures}; no warnings 'experimental';
sub f($i, @a) { $i and @a ? (f(@a), $i) : $i }
@a = split'',123;
say @a, f(@a);

実行結果
~ $ perl 20_615_mirror.pl
123321

655:96
22/08/02 01:20:34.60 6KqVNIq0.net
>>615 Perl5 (リスト処理版)
@a = split '', 123;
print @a, map{@a[$#a - $_]} 0..$#a;

実行結果
~ $ perl 20_615_mirror_list.pl
123321

656:デフォルトの名無しさん
22/08/02 22:22:16.97 9ppQHDnA.net
>>615 ocaml
URLリンク(ideone.com)
let f s =
let csc c s = Char.escaped c ^ s ^ Char.escaped c in
let rec aux t = function 0 -> t | n -> aux (csc s.[n - 1] t) (n - 1)
in aux "" @@ String.length s
let () = print_endline @@ f "123"

657:デフォルトの名無しさん
22/08/02 23:32:00 49BZsXJW.net
>>615
Kotlin

URLリンク(paiza.io)

わざわざ Iterator を実装して実現。

658:デフォルトの名無しさん
22/08/03 00:34:26.60 xChmGTXr.net
>>615 ocaml
URLリンク(ideone.com)


659:qGis let f s = s ^ String.init (String.length s) (fun i -> s.[String.length s - 1 - i]) let () = print_endline @@ f "123"



660:デフォルトの名無しさん
22/08/05 11:38:46.19 1Af6TgAi.net
>>615
おもしれーことやってんじゃん
じゃあperlの再帰する正規表現で行くかな
URLリンク(paiza.io)

661:デフォルトの名無しさん
22/08/05 13:16:58.45 6eafuacR.net
gnuWin32を基本使っています。
で行のソートなのですが、各行の末尾から逆向きの文字でソートって出来ませんか
たとえば
aaaaCB
bbbBA
cccccDB
とかあったとき、これを
bbbBA
aaaaCB
cccccDB
としたいのです。
もし難しそうであれば、各行を反転、つまり
abcde

edcba
とする方法でもいいです。

662:デフォルトの名無しさん
22/08/05 13:43:08.90 Vk8oFh91.net
>>630
Java
Arrays.sort(a, (left, right) -> {
 var l = left.length() - 1;
 var r = right.length() - 1;
 while (l > -1 && r > -1) {
  var c = Character.compare(left.charAt(l), right.charAt(r));
  if (c != 0) {
   return c;
  }
  l--;
  r--;
 }
 if (l > -1) {
  return 1;
 }
 if (r > -1) {
  return -1;
 }
 return 0;
});

663:96
22/08/05 19:36:20 Rv34IsoP.net
>>630 Perl5が使える環境であれば…

~ $ cat 20_630_isort.pl
chomp (@a = <>);
sub f {join '', reverse split'', $_[0]}
print "$_\n" for sort{f($a) cmp f($b)} @a;

~ $ cat input.txt
aaaaCB
bbbBA
cccccDB

~ $ perl 20_630_isort.pl < input.txt > output.txt

~ $ cat output.txt
bbbBA
aaaaCB
cccccDB

664:デフォルトの名無しさん
22/08/05 20:52:38 C4r7F682.net
>>630 ruby
URLリンク(ideone.com)
f = ->(a) {a.sort_by &:reverse}
p f.(%w(aaaaCB bbbBA cccccDB))

>>630 octave
URLリンク(ideone.com)
function i = sorti(varargin), [~, i] = sort(varargin{:}); end
f = @(a) a(sorti(cellfun(@(s) {flip(s)}, a)));
f({'aaaaCB' 'bbbBA' 'cccccDB'})

665:96
22/08/05 22:43:00.57 Rv34IsoP.net
>>632
しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、
データの行数が多いと遅いな

666:96
22/08/06 00:54:37.07 pYJx8bVL.net
>>630 Perl5、計算量の抑制に配慮したバージョンと実行例
$ cat 20_630_isort2.pl
print $_->[0] for sort{$a->[1] cmp $b->[1]} map{[$_, scalar reverse $_]} <>;
$ cat input.txt
aaaaCB
bbbBA
cccccDB
$ perl 20_630_isort2.pl input.txt > output.txt
$ cat output.txt
bbbBA
aaaaCB
cccccDB

667:96
22/08/06 01:06:37.87 pYJx8bVL.net
>>635
これ各行の行末の改行まで含めてreverseしてsortキーとするので、
もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。
そのような万が一の場合に対してもrubstさも持たすならこうか
chomp(@a = <>);
print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;

668:デフォルトの名無しさん
22/08/06 05:59:59.26 UcInr7RU.net
>>630
Kotlin
URLリンク(paiza.io)
ただ処理を連結しただけだな。コマンドラインでパイプ使ったみたいな感じ。

669:デフォルトの名無しさん
22/08/06 06:11:51.22 UcInr7RU.net
>>630
Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。
(入力文字列は input.txt に入ってい�


670:驍ニして)。 rev input.txt | sort | rev Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。



671:96
22/08/06 08:20:40.77 pYJx8bVL.net
>>610 Perl5
use Bit::Vector;
$v = Bit::Vector->new(101);
for (<DATA>) {
 ($h, $s, $e) = /0x(\S+) (\S+) (\S+)/;
 $v->from_Hex("$h");
 $v->Interval_Reverse($e, $s);
 ($r) = $v->to_Hex() =~ /0+(\w+)/;
 print "$_ => 0x$r\n";
}
__DATA__
0x80 7 0
0xABCD 11 4
0x2 99 1
※インデントを見易くするため全角スペースに置換しています

実行結果
$ perl 20_610_rebitfld.pl
0x80 7 0
=> 0x1
0xABCD 11 4
=> 0xA3DD
0x2 99 1
=> 0x8000000000000000000000000

672:デフォルトの名無しさん
22/08/06 10:15:53 8a3zeEyr.net
>>638
Linux環境ではrevというのがあるのですね
gnuWin32は全部揃ってないのですね。なんだかなあ
rev以外でもLinuxにあってgnuWin32にはないのがあるのかな
rev、自分で作ろうかな

673:デフォルトの名無しさん
22/08/06 11:17:00.60 y9e1BfKB.net
>>630 ocaml
URLリンク(ideone.com)
let rev s = String.init (String.length s) (fun i -> s.[String.length s - 1 - i])
let (<<) f g x = f (g x)
let f = List.map (fun (r, s) -> s) << List.sort compare << List.map (fun s -> (rev s, s))
let () = List.iter print_endline @@ f ["aaaaCB"; "bbbBA"; "cccccDB"];

674:96
22/08/06 15:02:55.35 ddLJv/Kp.net
>>640
gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが…
util-linux-ng for Windows
URLリンク(gnuwin32.sourceforge.net)
Util-Linux contains miscellaneous utilities:
col: filter reverse line feeds from input
colcrt: filter nroff output for CRT previewing
colrm: remove columns from a file
ddate: converts Gregorian dates to Discordian dates
getopt: parse command options (enhanced)
hexdump: ascii, decimal, hexadecimal, octal dump
line: read one line
rename: rename files
rev: reverse lines of a file or files ←
tailf: follow the growth of a log file
whereis: locate the binary, source, and manual page files for a command
作りたいというなら類似のsampleソースはゴマンと転がっとるし
C reverse string rev.c strrev - Google 検索
URLリンク(www.google.com)
C program to reverse a string | Programming Simplified
URLリンク(www.programmingsimplified.com)
C_69 C Program to Reverse a String | with strrev() and without strrev() function - YouTube
URLリンク(www.youtube.com)
… 好きにしんしゃい

675:96
22/08/06 15:16:53.43 ddLJv/Kp.net
Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは
GitHub - util-linux/util-linux
URLリンク(github.com)
かな。そのうち rev.c のソースは
util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub
URLリンク(github.com)
ちな util-linux パッケージは2006年に fork した�


676:ニき名前に -ng をつけて util-linux-ng になったが 2010年に util-linux に名前を戻している。 cf.) util-linux - Wikipedia https://en.wikipedia.org/wiki/Util-linux ついつい、調べ物をしてしまった…orz



677:デフォルトの名無しさん
22/08/06 17:24:05.41 8a3zeEyr.net
>>642
ありがとう。そんなとこにあったのか

678:デフォルトの名無しさん
22/08/07 09:51:45.46 UY2OKMya.net
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHK

679:デフォルトの名無しさん
22/08/07 09:52:47.25 UY2OKMya.net
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHKで自作で作ってみました
rev input.txt | sort | rev
で問題なく動きました

680:デフォルトの名無しさん
22/08/07 16:26:03 BSSIjy3s.net
>>645
環境変数 LANG の設定の問題とか?
こっちでは日本語での rev できたよ。
CentOS 7 で bash で LANG=ja_JP.UTF-8 の状態。そこに Windows から TeraTerm で ssh ログインして試したらできた。

$ echo $LANG
ja_JP.UTF-8
$ ( echo 見城徹 ; echo 箕輪厚介 ; echo ガーシー ; echo 木原誠二官房副長官 ) | rev
徹城見
介厚輪箕
ーシーガ
官長副房官二誠原木
$

681:デフォルトの名無しさん
22/08/07 18:30:22.20 C65TbvUb.net
お題
0~2がランダムに8個入力されます
8個の数字を:で結合して出力してください
0が連続する場合は連続する0を::に置換してください
0の連続を::に置換できるのは1回のみです
0の連続が複数存在する場合は長い方を置換してください
長さが同じ場合は先頭の方を置換してください
1個の0は置換してはいけません

0, 0, 0, 1, 2, 1, 2, 2 → ::1:2:1:2:2
2, 1, 2, 0, 0, 0, 1, 1 → 2:1:2::1:1
1, 1, 2, 2, 1, 0, 0, 0 → 1:1:2:2:1::
2, 0, 0, 2, 0, 0, 0, 2 → 2:0:0:2::2
1, 0, 0, 1, 2, 0, 0, 2 → 1::1:2:0:0:2
0, 1, 2, 0, 1, 1, 0, 2 → 0:1:2:0:1:1:0:2

682:デフォルトの名無しさん
22/08/07 19:28:27.32 MpscsJR5.net
>>648 Ruby
f = -> s { x = s.gsub(', ', ?:); y = x.scan(/0(?::0)+/).max&.count(?0) || 0; x.sub(/:?0(:0){#{y - 1}}+:?/, '::') }

[
'0, 0, 0, 1, 2, 1, 2, 2',
'2, 1, 2, 0, 0, 0, 1, 1',
'1, 1, 2, 2, 1, 0, 0, 0',
'2, 0, 0, 2, 0, 0, 0, 2',
'1, 0, 0, 1, 2, 0, 0, 2',
'0, 1, 2, 0, 1, 1, 0, 2'
].each{ |s| puts '%s -> %s' % [s, f[s]] }

# =>
0, 0, 0, 1, 2, 1, 2, 2 -> ::1:2:1:2:2
2, 1, 2, 0, 0, 0, 1, 1 -> 2:1:2::1:1
1, 1, 2, 2, 1, 0, 0, 0 -> 1:1:2:2:1::
2, 0, 0, 2, 0, 0, 0, 2 -> 2:0:0:2::2
1, 0, 0, 1, 2, 0, 0, 2 -> 1::1:2:0:0:2
0, 1, 2, 0, 1, 1, 0, 2 -> 0:1:2:0:1:1:0:2

683:デフォルトの名無しさん
22/08/07 19:57:31.19 xO94aiKw.net
>>648
perl5
URLリンク(paiza.io)

684:デフォルトの名無しさん
22/08/07 20:01:42.93 H+tq1Ypt.net
正規表現のreplace一個で行けそうと思ったけど最長マッチみたいなの無理なのか

685:デフォルトの名無しさん
22/08/07 20:16:36.94 MpscsJR5.net
拡張正規表現の中にはチューリング完全なものもあるけどね

686:デフォルトの名無しさん
22/08/07 20:17:47.43 xO94aiKw.net
そうか
単純に s/0{$n}/::/;
を連射して増やしていくだけでいいんだな
最後に成功したのを返す感じで

687:デフォルトの名無しさん
22/08/07 20:58:47.87 xO94aiKw.net
>>648
perl5 # sub squash0 を>653 で書き替えた
URLリンク(paiza.io)

688:デフォルトの名無しさん
22/08/07 22:19:54.37 UmcKtz1r.net
>>648 octave
URLリンク(ideone.com)
function s = f(a)
c = di


689:ff(find([1 diff(a) 1])); e = cumsum(c); b = e - c + 1; n = arrayfun(@(i) a(i), e); [~, i] = max(c.*(n == 0)); s = arrayfun(@(n) {int2str(n)}, a); if (1 < c(i)) s(b(i):e(i)) = ':'; end s = regexprep(strjoin(s, ':'), ':::+', '::'); end



690:655
22/08/07 23:28:54.94 UmcKtz1r.net
結果同じだけど若干の整理可能だった
n = arrayfun(@(i) a(i), e);
[~, i] = max(c.*(n == 0));

[~, i] = max(c.*(a(e) == 0));

691:96
22/08/08 01:54:39.48 Fkng8CYp.net
>>648 Perl5
use List::Util 'max';
for (<DATA>) {
 %h = map{length($_) => $_} /(,?0(?:,0)+,?)/g;
 $n = max keys %h;
 chomp($i = $_);
 s/$h{$n}/::/ if $n;
 s/,/:/g;
 print "$i => $_";
}
__DATA__
0,0,0,1,2,1,2,2
2,1,2,0,0,0,1,1
1,1,2,2,1,0,0,0
2,0,0,2,0,0,0,2
1,0,0,1,2,0,0,2
0,1,2,0,1,1,0,2
※見易くするためインデントを全角スペースに置換してあります。

実行結果
$ perl 20_648.pl
0,0,0,1,2,1,2,2 => ::1:2:1:2:2
2,1,2,0,0,0,1,1 => 2:1:2::1:1
1,1,2,2,1,0,0,0 => 1:1:2:2:1::
2,0,0,2,0,0,0,2 => 2:0:0:2::2
1,0,0,1,2,0,0,2 => 1::1:2:0:0:2
0,1,2,0,1,1,0,2 => 0:1:2:0:1:1:0:2

692:デフォルトの名無しさん
22/08/08 18:20:49.05 911TGIju.net
>>648
Common Lisp URLリンク(ideone.com)
JavaScript URLリンク(ideone.com)

693:デフォルトの名無しさん
22/08/10 20:35:58.72 xa8ST9bT.net
>>648 ocaml
URLリンク(ideone.com)

694:デフォルトの名無しさん
22/08/10 21:08:31.81 xa8ST9bT.net
>>648 octave
URLリンク(ideone.com)
・[1, 1, 1, 1, 1, 1, 1, 1]のとき正しくなかったのを修正

695:デフォルトの名無しさん
22/08/11 15:24:25.24 /k5aJ7yS.net
>>648
Kotlin
URLリンク(paiza.io)
できたことはできたが、なんかもっと良いやり方がありそうな気もする。

696:デフォルトの名無しさん
[ここ壊れてます] .net
>>648
敢えて正規表現使わずKotlinで。ややこしかったわ
URLリンク(ideone.com)

697:デフォルトの名無しさん
[ここ壊れてます] .net
>>661
別の解き方が見れておもろい

698:デフォルトの名無しさん
22/08/11 22:42:32.18 lr7eXs7b.net
>>648 java
URLリンク(ideone.com)

699:661
22/08/12 00:33:44.04 DNG+vRxr.net
全部0の時に :: にならなかったので>>661はちょっと修正した。

700:デフォルトの名無しさん
22/08/13 14:28:26.51 JbrEzaSr.net
お題
1~37からランダムに重複なく7つの数を選び出して小さい順にソートしてください
それを5つ出力してください

[2, 4, 9, 13, 20, 29, 36]
[1, 4, 12, 13, 15, 20, 33]
[1, 3, 5, 7, 11, 20, 24]
[3, 7, 8, 21, 27, 33, 34]
[1, 2, 14, 23, 26, 35, 36]

701:デフォルトの名無しさん
22/08/13 14:31:07.91 JPhXlbrB.net
>>666 Ruby
[*1..37].sample(7).sort
# => [4, 8, 15, 20, 24, 26, 37]

702:デフォルトの名無しさん
22/08/13 18:53:16.03 jyB6kjuE.net
>>666 Common Lisp
URLリンク(ideone.com)

703:デフォルトの名無しさん
22/08/13 19:08:33.35 jyB6kjuE.net
>>668
投稿後一部訂正、n の範囲チェックを追加
負数は弾く
(check-type n (integer 0 *))
上限はシーケンスの長さ
(loop repeat n

(loop (min n (length sequence))

704:デフォルトの名無しさん
22/08/13 19:54:15.55 JW3gpbYe.net
>>666 octave
URLリンク(ideone.com)
f = @() sort(randperm(37, 7));
cell2mat(arrayfun(@(~) {f()}, (1:5)'))

705:デフォルトの名無しさん
22/08/14 00:39:46.54 YzvfyuVN.net
>>666
Kotlin script
repeat(5) { println((1..37).toList().shuffled().slice(0..6).sorted()) }

実行例
[6, 7, 9, 10, 16, 2


706:2, 27] [2, 8, 9, 11, 16, 32, 33] [11, 13, 18, 25, 26, 30, 34] [2, 3, 12, 14, 20, 27, 37] [7, 13, 14, 19, 27, 30, 35]



707:671
22/08/14 00:41:50.08 YzvfyuVN.net
>>671はこれでも同じだった (toList() 抜き)。
repeat(5) { println((1..37).shuffled().slice(0..6).sorted()) }

708:96
22/08/14 01:45:55.09 jl8HjsTF.net
>>666 Perl5
use List::Util 'shuffle';
@a = 1..37;
$" = ', ';
print "@{[(shuffle@a)[0..6]]}\n"
 for 1..5;

実行結果
$ perl 20_666_shuffle1-37x5.pl
3, 2, 10, 25, 9, 23, 27
35, 6, 30, 8, 37, 29, 36
20, 29, 19, 18, 37, 21, 23
12, 30, 29, 7, 3, 31, 26
34, 12, 1, 14, 28, 2, 21

709:デフォルトの名無しさん
22/08/14 01:54:16.92 v+rcxIed.net
>>673
ソートされてないじゃん

710:96
22/08/14 01:59:26.66 jl8HjsTF.net
>>666 Perl5、>>673 は sort するの忘れてた…orz

use List::Util 'shuffle';
@a = 1..37;
$" = ', ';
print "@{[sort{$a <=> $b} ((shuffle @a)[0..6])]}\n" for 1..5;

実行結果
$ perl 20_666_shuffle1-37x5.pl
5, 9, 22, 28, 30, 32, 36
1, 2, 7, 21, 23, 26, 36
6, 14, 15, 16, 19, 26, 28
13, 14, 15, 16, 30, 35, 37
1, 3, 10, 20, 27, 29, 30

711:デフォルトの名無しさん
22/08/14 12:35:56.93 JoIEy2rI.net
>>666 ocaml
URLリンク(ideone.com)
let seq b e =
let rec aux acc n =
if n < b then acc else aux (n :: acc) (pred n)
in aux [] e
let (<<) f g x = f (g x)
let take n =
let rec aux acc n = function [] -> acc | x :: xs ->
if n <= 0 then acc else aux (x :: acc) (pred n) xs
in List.rev << aux [] n
let shuffle =
List.map snd << List.sort compare << List.map (fun x -> (Random.bits (), x))
let string_of_ints =
Printf.sprintf "[%s]" << String.concat "; " << List.map string_of_int
let f () = string_of_ints @@ List.sort compare @@ take 7 @@ shuffle @@ seq 1 37
let () = Random.self_init ();
List.iter (print_endline << f << ignore) @@ seq 1 5

712:デフォルトの名無しさん
[ここ壊れてます] .net
>>666 c
URLリンク(ideone.com)

713:デフォルトの名無しさん
22/08/14 21:45:18.38 b/j10zkL.net
(1) aとbからなる文字列があるときその中で部分文字列bbaが最初に完成する文字数を求める
ab -> 0
aaa -> 0
bba -> 3
bbba -> 4
babbab -> 5
bbabbaa -> 3
(2) ちょうど50文字のaとbからなる全ての並びの文字列の内
50文字目(最後)にbbaが完成するのは何通りあるか?
長さ3文字で3文字目に完成するのはbbaのひとつだけ
長さ4文字で4文字目に完成するのはabbaとbbbaの二通り

714:デフォルトの名無しさん
[ここ壊れてます] .net
>>678 Ruby
(1)
%w[ab aaa bba bbba babbab bbabbaa].each do |s|
i = s =~ /bba\K/
puts '%s -> %d' % [s, i ? i + 3 : 0]
end

# =>
ab -> 0
aaa -> 0
bba -> 3
bbba -> 4
babbab -> 5
bbabbaa -> 3

(2)
f = -> (n, a=[0, 0, 1]) {return a[n] if n<a.size; a<<f[n-1,a]+f[n-2,a]+1;a.last}

p f[49] # => 12586269024

715:デフォルトの名無しさん
22/08/14 22:30:32.35 z6QFcjeU.net
行列の掛け算を実装せよ
二次正方行列 A=((1 -2) (2 3)), B = ((-2 1)(3 -1)) について
AB, BA を求めよ
可能であれば二次正方行列以外の行列についても対応せよ
実装の細かい点については出題者は指定しないので良きに計らって結構。
<お願い>
行列の積において結合則成立の証明を教えてください

716:デフォルトの名無しさん
22/08/14 22:43:04.52 0XTzAkvO.net
>>678 c
URLリンク(ideone.com)
・(1)(2)ともに自信なし(たぶんお題の意味わかってない)

717:デフォルトの名無しさん
22/08/14 22:49:01.35 gf0q/4T2.net
>>680 Ruby Matrixクラス不使用
def product(a, b)



718:[ [a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]], [a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]], ] end p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]]) # => [[-8, 3], [5, -1]] # 夏休みの宿題は自分でやりましょう



719:デフォルトの名無しさん
22/08/14 22:51:54.64 7JC7m3TJ.net
>>682
>二次正方行列以外の行列についても対応せよ

720:デフォルトの名無しさん
22/08/14 23:05:21.92 gf0q/4T2.net
>>680 >>683
def product(a, b)
m = a.first.size
c = Array.new(a.size){[]}
a.size.times do |i|
b.first.size.times do |j|
c[j][i] = m.times.map{|k| a[k][i] * b[j][k]}.sum
end
end
c
end
p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]])
# => [[0, 7], [1, -9]]
p product([[-2, 1], [3, -1]], [[1, -2], [2, 3]])
# => [[-8, 3], [5, -1]]

721:デフォルトの名無しさん
22/08/14 23:09:42.44 ct8M+Uij.net
NxMのデータをどう定義するか だけの問題だな
毎回悩む 下は後悔してるタイプ
(defparameter *position-IO*
(loop
for input in '(7 8 9
4 5 6
1 2 3)
for pos below 9
collect (cons input pos)))

722:デフォルトの名無しさん
22/08/15 00:42:19.42 PTEGgn5Q.net
>>679
どういう頭してたらその法則性に気づくん???

723:デフォルトの名無しさん
22/08/15 01:31:39.90 b/MTJSvV.net
>>678
Kotlin script
(1)
listOf("ab","aaa","bba","bbba","babbab","bbabbaa").forEach { print("$it ->"); it.indexOf("bba").let { if (it >= 0) println(it + 3) else println(0) } }
実行時の出力
ab ->0
aaa ->0
bba ->3
bbba ->4
babbab ->5
bbabbaa ->3
(2)
println(1L shl (50 - 3))
実行時の出力
140737488355328

724:デフォルトの名無しさん
22/08/15 01:56:11.12 RG8mAl+Q.net
(2)
出題の仕方が間違ってた
最後に唯一のbbaが現れるパターンと書くべきだった
自分の中ではこのことしか考えてなかったから
>>679さんは汲んでくれたようで、早さにも驚いたけど

725:デフォルトの名無しさん
22/08/15 09:19:59.19 jWRkxbjN.net
なるほど, 再帰的に構成すればいいのか
aから始まる時: a + x[n-1]
baから始まる時: ba + x[n-2]
bbから始まる時: bb...bba

726:デフォルトの名無しさん
22/08/15 09:43:22.06 90U51paY.net
>>686
そういう漸化式は普通に受験で良くでてくる

727:デフォルトの名無しさん
22/08/15 17:00:11.92 ioAOBwsA.net
>>680
URLリンク(ideone.com)
URLリンク(ja.wikibooks.org)'s-associativity

728:デフォルトの名無しさん
22/08/15 17:16:58.66 RVV7PTHo.net
>>691 c
URLリンク(ideone.com)
・二次元でintのみ

729:デフォルトの名無しさん
22/08/15 17:19:53.25 RVV7PTHo.net
>>680
URLリンク(ideone.com)
・二次元でintのみ

730:693
22/08/16 16:05:44.79 y+iYdbLW.net
>>680 c
URLリンク(ideone.com)
>>693から若干の整理
・インデントも修正

731:デフォルトの名無しさん
22/08/16 19:29:50.25 6LZk+vGC.net
>>688
え?言ってる意味がわからない。どういうこと?

732:デフォルトの名無しさん
22/08/16 20:01:21.15 xodQRDI1.net
bba+gge=momo

733:デフォルトの名無しさん
[ここ壊れてます] .net
>>695
末尾以外にbbaが現れる文字列を除外するってことじゃろう

734:デフォルトの名無しさん
22/08/16 21:15:34.85 dhC56AkH.net
bbaが最後に達成されるんじゃなければ2^47計算するだけのなん�


735:フ面白みもない問題になるからそこで気付く人は気づくよね



736:デフォルトの名無しさん
22/08/16 23:04:49.04 mbmTGUKF.net
ついでに50文字で今度は最後がbbaじゃなくて
bbbのときとbabのときのそれぞれのパターン数を求めるって問題

737:デフォルトの名無しさん
22/08/17 01:28:19.97 0f27vmNE.net
>>697
なるほど。やっと意味がわかった。

738:デフォルトの名無しさん
22/08/17 14:04:15.12 UFtMHmKs.net
お題:分割されている顔文字を結合して表示してください
1つの顔文字は半角4字で構成。左右対称。2字ずつ半分に分割されてシャッフルされている
出力する顔文字の順番は自由とする
入力 < ^)(^
出力 > (^^)
入力 < ^)(-(^-)(vv)
出力 > (^^)(--)(vv)

739:デフォルトの名無しさん
22/08/17 14:59:27.47 2ZT38iyw.net
お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」をそれぞれ表示する方法を示してください
便宜的に、ナンプレのマスには左上から右へ、右下に向かい0~80までの数値を入れます。
0 1 2 3 4 5 6 7 8
...
...............80
左から1列目の9マスは

740:デフォルトの名無しさん
22/08/17 15:10:22.08 2ZT38iyw.net
途中送信してしまった
お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」のマスをそれぞれ表示する方法を示してください
※便宜的に、ナンプレのマスには左上から右へ、右下に向かい0~80までの数値を入れます。
0 1 2 3 4 5 6 7 8
...
...............80
例えば左から1列目の9マスは
[0 9 18 27 36 45 54 63 72]
となります。
等差を利用して数字だけを表示するものは不可です。
マスに何の値が入っていても表示できるようにしてください。

741:デフォルトの名無しさん
22/08/17 21:47:42.92 GkJOOerG.net
>>703 c
URLリンク(ideone.com)

742:デフォルトの名無しさん
22/08/17 23:34:27.13 yTY/OYLu.net
>>701
(><)

743:デフォルトの名無しさん
22/08/18 02:15:12.90 KCyiWPRI.net
>>703
perl5
URLリンク(paiza.io)

744:デフォルトの名無しさん
22/08/18 03:07:13.35 dBOjwuYR.net
>>701 JavaScript
> ['^)(^', '^)(-(^-)(vv)', '<)(>'].map((R => input => Array.from(input.matchAll(/\((.)/g)).reduce((output, [l, r]) => output + l + R(r) + ')', ''))(r => r == '>' ? '<' : r))
[ '(^^)', '(--)(^^)(vv)', '(><)' ]

745:デフォルトの名無しさん
[ここ壊れてます] .net
>>701 Ruby
f = -> str do
loop do
str.sub!(/(.)\)(.*)\(\1/, '(\1\1)\2') ||
str.sub!(/\((.)(.+)\1\)/, '(\1\1)\2') ||
(break str)
end
end

%w[ ^)(^ ^)(-(^-)(vv) (-(^-)^)].each do |s|
puts '%s -> %s' % [s, f[s.b]]
end

# =>
^)(^ -> (^^)
^)(-(^-)(vv) -> (^^)(--)(vv)
(-(^-)^) -> (--)(^^)

746:デフォルトの名無しさん
[ここ壊れてます] .net
>>703 Ruby
PLACEHOLDER = [*0..80]

field = 9.times.reduce([]) do |s, y|
s << 9.times.map do |x|
PLACEHOLDER[9 * y + x]
end
end

puts field.map{|r| r.map{'%02d' % _1}.join}

# =>
000102030405060708
091011121314151617
181920212223242526
272829303132333435
363738394041424344
454647484950515253
545556575859606162
636465666768697071
727374757677787980

747:デフォルトの名無しさん
[ここ壊れてます] .net
>>703 お題をよく読んでいなかった >>709の続き
row = -> (n, field) {field[n]}
column = -> (n, field) {field.map{_1[n]}}
block = -> (n, field) {9.times.map{n * 3 + n / 3 * 18 + _1 + _1 / 3 * 6}.map{field.flatten[_1]}}

puts row[7, field].join(?,)
# => 63,64,65,66,6


748:7,68,69,70,71 puts column[7, field].join($/) # => 7 16 25 34 43 52 61 70 79 puts block[7, field].each_slice(3).map{_1.join(?,)}.join($/) # => 57,58,59 66,67,68 75,76,77



749:704
22/08/18 23:38:15.48 YBxy/c4L.net
>>703 c
URLリンク(ideone.com)
>>704から若干の整理

750:デフォルトの名無しさん
22/08/19 23:42:01.44 GkIv/1vJ.net
お題
<user>:<group>の数
<user>:<group>
<user>:<point>の数
<user>:<point>
が入力されます
<group>ごとに<point>を集計して<group>順に
<group>:<point>を出力してください
例)
// 入力
6
UserE:GroupC
UserD:GroupA
UserB:GroupC
UserA:GroupC
UserC:GroupB
UserF:GroupB
6
UserB:3
UserF:2
UserD:5
UserC:13
UserE:11
UserA:7
// 出力
GroupA:5
GroupB:15
GroupC:21

751:デフォルトの名無しさん
22/08/19 23:58:05.14 zRvvDV0W.net
なんで数を入力してるんだ?
後の情報であきらかではないか
まさかグループ名が整数でも良いと考えている?

752:デフォルトの名無しさん
22/08/20 00:02:54.24 xIohwuBb.net
>>712 Ruby
g, p = str.split(/^\d+$/)[1, 2].map{_1.strip.each_line.map{|s| s.chomp.split(?:)}.to_h}
puts g.reduce(Hash.new(0)){|h, (k, v)| h[v] += p[k].to_i; h}.sort.map{_1.join(?:)}
# =>
GroupA:5
GroupB:15
GroupC:21

753:デフォルトの名無しさん
22/08/20 07:49:15.49 /HXUcxOA.net
// >>712 Node.js
import readline from 'node:readline';
const rl = readline.createInterface({input: process.stdin, output: process.stdout});
const all = [/* {user, group, point}, ... */];
let usergroup = false;
rl.on('line', line => {
line = line.trim();
if (line) {
if (/^\d+$/.test(line)) {
usergroup = !usergroup;
} else if (usergroup) {
const {groups} = line.match(/^(?<user>[^:]+):(?<group>[^:]+)$/);
all.push(groups);
} else {
const {groups: {user, point}} = line.match(/^(?<user>[^:]+):(?<point>\d+)$/);
Object.defineProperty(all.find(_ => _.user == user), 'point', {value: Number(point), enumerable: true});
}
} else {
rl.close();
}
});
rl.on('close', () => {
for (const [group, point] of Object.entries(all.reduce((gp, {group, point}) => {gp[group] = (gp[group] ?? 0) + point; return gp;}, {})).sort(([a], [b]) => a < b ? -1 : 1)) {
console.log(`${group}:${point}`);
}
});

754:デフォルトの名無しさん
22/08/20 17:09:35.31 tvd+mgyM.net
>>712 c
URLリンク(ideone.com)

755:デフォルトの名無しさん
22/08/20 21:26:59.76 myFbjTal.net
>>712
C#
URLリンク(paiza.io)

756:デフォルトの名無しさん
22/08/20 22:24:09.90 5JSGWnVi.net
>>703ってこれじゃだめなのかな
7行で書ける
URLリンク(ideone.com)

757:96
22/08/21 02:42:00.00 P6BPpVvp.net
>>712 Perl5
use feature qw{say signatures}; no warnings "experimental::signatures";
sub ($n, @a) {
 $h{$$_[0]} = $$_[1] for map{[/(\w+)/g]} @_[1..$n];
 sub ($m, @) {
  $g{$h{$$_[0]}} += $$_[1] for map{[/(\w+)/g]} @_[1..$m];
 }->(@a[$n..$#a]);
 say "$_:$g{$_}" for sort keys %g;
}->(<>);
※見易くするためインデントを全角スペースに置換してあります。

実行結果:
URLリンク(ideone.com)

758:デフォルトの名無しさん
22/08/21 06:03:07.44 V5T4kdVo.net
>>712
<group>順にって、何を元にして group の順序を決めるの?
入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?

759:デフォルトの名無しさん
22/08/21 07:03:57.35 3JIuIXQv.net
<group>毎という事だと思う
サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし

760:デフォルトの名無しさん
22/08/21 08:49:24.60 0ZMA3aWJ.net
>>713
実際にここでも数字を使っている例が出て来てるからわかると思うけど
競プロなんかではよくあるフォーマットだよ

761:デフォルトの名無しさん
22/08/21 18:07:19.66 ecIOs+Jg.net
>>666
C#
URLリンク(paiza.io)

762:デフォルトの名無しさん
22/08/21 18:28:38.88 Y2TZP89X.net
お題:Hello, World!を出力中にプログラムを強制終了せよ
Hello, World!が完全に出力されたらGAME OVERとする

763:デフォルトの名無しさん
22/08/21 18:45:13.28 ui07Fbeq.net
>>724 Ruby
Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'}
Thread.new{exit}
# =>
Hello, World!

764:デフォルトの名無しさん
22/08/21 18:49:48.17 ecIOs+Jg.net
>>701
C#
URLリンク(paiza.io)

765:デフォルトの名無しさん
22/08/21 18:51:27.42 ui07Fbeq.net
>>725 訂正
Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'}
Thread.new{exit!}

# => H

766:デフォルトの名無しさん
[ここ壊れてます] .net
>>703
C#
URLリンク(paiza.io)

767:デフォルトの名無しさん
[ここ壊れてます] .net
>>724 c
URLリンク(ideone.com)

768:デフォルトの名無しさん
[ここ壊れてます] .net
>>648
C#
URLリンク(paiza.io)

769:729
22/08/22 19:20:01.17 7CA3B9Dd.net
>>724 c
URLリンク(ideone.com)
>>729 どう見ても正常終了です。本当にありがとうございました。
・子プロセスの強制終了を見届けてから自分自身も強制終了

770:デフォルトの名無しさん
22/08/25 15:38:14.81 bJn+zm7R.net
>>724
その強制終了って人間が Ctrl + C を押すなどしてやるという意味?
間に合わずに全部出力し切った場合は GAME OVER 出すということ?

771:デフォルトの名無しさん
22/08/25 15:52:23.73 BfuXla1W.net
>>732
強制終了→exit(0)などでプログラム的に終了させる
GAME OVER→お題の達成失敗

772:デフォルトの名無しさん
22/08/25 16:09:53.36 6j74uL6b.net
54.144.0.0/12といったどこかで見たことあるような形式の文字列を入力すると
^(?!(54.144.|54.145.|54.146.|54.147.|54.148.|54.149.|54.150.|54.151.|54.152.|54.153.|54.154.|54.155.|54.156.|54.157.|54.158.|54.159.))
といったいい感じの文字列が標準出力に出力されるやつ、誰か作れますか?
例の他にも54.208.0.0/13 54.216.0.0/14 54.192.0.0/12 54.160.0.0/11 54.220.0.0/15といった似た感じの文字列が入力され
やはりいい感じに処理された別の文字列が出力されます
できればライセンスはゼロ条項BSDライセンスでお願いします

773:デフォルトの名無しさん
[ここ壊れてます] .net
ま、まあ、作れなくはないかな…

774:デフォルトの名無しさん
22/08/25 18:48:07.98 0xws5w3m.net
フワっとした頭の中にしか定義されてない案件なんて誰もこなせないぞ
本人以外は

775:デフォルトの名無しさん
22/08/25 20:40:48.98 0z7AphVM.net
>>734
Java
URLリンク(paiza.io)

776:デフォルトの名無しさん
22/08/25 21:10:16.35 /BGaqBqg.net
>>734 JavaScript
function _734(ip_range) {
const result = [];
const as = ip_range.split(/\D/).map(_ => Number(_));
const m = as.at(-1);
const q = Math.floor(m / 8


777:); const r = m % 8; const e = 8 - r; const l = as[q].toString(2).padStart(8, '0').slice(0, r); for (let i = 0, sup = 2 ** e; i < sup; i++) { as.splice(q, 1, Number.parseInt(l + i.toString(2).padStart(e, '0'), 2)); result.push(as.slice(0, q + 1)); } return '^(?!(' + result.map(_ => `${_.join('\\.')}${q < 3 ? '\\.' : ''}`).join('|') + '))'; }



778:デフォルトの名無しさん
22/08/25 22:00:47.00 JPPVgQ9Y.net
beer licenseでよければ書くが

779:デフォルトの名無しさん
22/08/26 04:09:37.08 NIKxWs5c.net
割とすぐに出来るもんなんですね
どちらも実用上問題なさそうな、いい感じの実行結果です
>738は最新の実行環境に心当たりがなかったので確認に手間どりましたが
Chromeのコンソールから実行して確認できました
(cscriptで実行しようとしたらat()に対応してなかったので)
いやー勉強になります、ありがとう

780:デフォルトの名無しさん
22/08/26 04:49:22.52 0rX9u4fb.net
>>740
スレタイも読めないアホは消えろ

781:96
22/08/26 05:19:52.33 GgZblxs6.net
>>740
人をタダで利用してない?

782:デフォルトの名無しさん
22/08/26 11:51:47.61 d54FvNjc.net
>>733
マルチスレッドかマルチタスクで "Hello, world!" を出力する処理と、ランダムなタイミングでそれを強制終了させる処理が動くということで良いのか?
そして出力中に停止できなかったら "GAME OVER" が最後に出ると。

783:デフォルトの名無しさん
22/08/26 14:32:15.45 71YXfdUw.net
>>743
その実装でもいいよ
題意はいかにHello, World!出力中にプログラムを終了させるかだから
sleep挟んでもいい

784:デフォルトの名無しさん
22/08/26 18:44:07.03 NQ4mbOjq.net
>>733
#!/usr/bin/env sh
cat <<"EOL" | perl -ne '/(Hello, World)(?:[!])/ ? die " $1 got failed." : print'
> foo
> bar
> baz
> Hello, World
> Hello, World
> Hello, World!
> you can't see me, right?
> EOL
foo
bar
baz
Hello, World
Hello, World
Hello, World got failed. at -e line 1, <> line 6.

785:デフォルトの名無しさん
22/08/26 21:28:18.28 NIKxWs5c.net
はて?プログラミングのお題を投げて、競技的な興味をもって答えたくなった人が答え
その回答に興味があれば参照して「普段は扱ってないこの言語だとそういうやりかたなのか」
「自分とは違うスマートなやり方があったのか」と思ったりするスレ、という理解でしたが
もしかして投げたときに”お題”という文字が抜けてたのが問題ありましたか?
概ね正解とするに足る実行結果を、実用上問題なさそうと表現したことが拙かったですか?
もしそうなら申し訳ない、次からは気をつけます

786:デフォルトの名無しさん
22/08/26 21:31:39.94 NIKxWs5c.net
ついでというかなんというか>734の自分のお題に対する自己回答です(色々と手抜きしてありますが)
#!/usr/bin/ksh
function proc {
typeset A B C D E F N M L I
IFS='.','/' read A B C D E <<XYZ
$1
XYZ
let N="(${E}+8)/8" let M="8-(${E}%8)"
if [ $N -eq 5 ]; then echo -n "${A}.${B}.${C}.${D}"; return; fi
set -A BASE dummy "" "${A}." "${A}.${B}." "${A}.${B}.${C}."
set dummy $A $B $C $D; shift $N; F=$1; let L="$F-1+(1<<$M)"
for I in `seq $F $L`; do echo -n "|${BASE[$N]}${I}."; done; }
if [ $# -eq 0 ]; then echo "need CIDR/s"; exit 65; fi
set -A CIDR dummy $@;
echo -n "^(?!dummy"; for I in `seq 1 $#`; do proc ${CIDR[$I]}; done; echo ")"
exit 0

787:96
22/08/29 02:30:43.54 QAZMtAov.net
>>734 Perl5
for (<>) {
 print;
 @a = /(\d+)/g;
 $w = pop @a;
 $o = ($w - 1) >> 3;
 $m = $w - $o * 8;
 $n = 2**(8 - $m);
 $l = join '.', @a[0..$o-1];
 $l .= '.' if '' ne $l;
 $h = $a[$o] & (255 << (8 - $m));
 $r = $o < 3 ? '.' : '';
 @b = map{$l . ($h + $_) . $r} 0..($n - 1);
 print '^(?!(' . join('|', @b) . "))\n";
 print "\n";
}
※見易くするためインデントを全角スペースに置換しています。

実行例:
URLリンク(ideone.com)

788:96
22/08/29 02:55:16.14 QAZMtAov.net
>>748
128.0.0.0/1 の結果が変
バグ入りだ、ゴメンチャイ

789:96
22/08/29 03:01:45.22 QAZMtAov.net
あれ?いいのかな?
仕様を推測して作ったけどちょっと混乱したかも…
寝るわ

790:デフォルトの名無しさん
22/09/09 22:29:09.28 zwPgoVui.net
お題
長方形の1辺の長さのリストと正方形の面積のリストが入力されます
それぞれの正方形の面積について
長方形の1辺の長さのリストから2つを選んで掛け合わせ長方形の面積を計算します
長方形の面積が正方形の面積以上でかつ最小の面積となる組み合わせを探して出力してください
見つからなかった場合はerrorを出力してください
(例)
// 1辺の長さのリスト
[17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
// 正方形の面積のリスト
[390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
// 出力
390:error
240:16,17
37:3,13
396:error
198:11,18
99:6,17
242:16,17
53:3,18
329:error
202:13,16

791:デフォルトの名無しさん
22/09/09 23:02:00.41 Un8DgV3E.net
>>751
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
c = a.group_by(&:itself).values.map{_1.size > 2 ? _1[0, 2] : _1}.flatten.permutation(2).map{[_1 * _2, [_1, _2].sort]}.uniq.sort.to_h
b.each{|s| puts '%d: %s' % [s, c.find{_1[0] >= s}&.[](1)&.join(?,) || :error]}
# =>
390: error
240: 16,17
37: 3,13
396: error
198: 11,18
99: 6,17
242: 16,17
53: 3,18
329: error
202: 13,16

792:デフォルトの名無しさん
22/09/09 23:46:43.88 3788iROh.net
>>751 ruby
URLリンク(ideone.com)
def f(as, bs)
c = as.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort_by(&:first).each_cons(2)
bs.map do |b|
d = c.find {|e, f| e[0] < b && b <= f[0]}
"#{b}:#{d ? d[1][1..2].join(',') : 'error'}"
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)

793:753
[ここ壊れてます] .net
>>751
URLリンク(ideone.com)
>>753を若干の整理
>>752さんのを見て&.を勉強
def f(a, b)
c = a.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort
b.map {|b| "#{b}:#{c.find {|e| b <= e[0]}&.[](1..2)&.join(',') || 'error'}"}
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)

794:デフォルトの名無しさん
22/09/10 00:34:04.51 sDbT/M8A.net
みんな解くのはえーなぁ

795:96
22/09/10 02:29:07.85 7pWsuKpo.net
>>751 Perl5
$ls = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
$ss = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
sub f {2 < @_ ? (f(@_[1..$#_]), map{[$_[0] * $_, $_[0], $_]} @_[1..$#_]) : ()}
@rs = sort{$$a[0] <=> $$b[0]} f @$ls;
for $aa (@$ss) {
 @b = grep{$aa <= $$_[0]} @rs;
 print @b ? "$aa:$b[0][1],$b[0][2]\n" : "$aa:error\n";
}

実行結果
$ perl 20_751.pl
390:error
240:17,16
37:3,13
396:error
198:18,11
99:17,6
242:17,16
53:3,18
329:error
202:13,16

796:デフォルトの名無しさん
22/09/10 11:29:46.54 q8enYz1J.net
>>751 octave
URLリンク(ideone.com)
function c = f(a, b)
u = unique(sort(nchoosek(a, 2), 2), 'rows');
p = prod(u, 2);
c = cell(size(b));
for i = 1:numel(b)
d = min(p(b(i) <= p));
if isempty(d)
c{i} = sprintf('%d:error', b(i));
else
s = strjoin(arrayfun(@(n) {num2str(n)}, u(p == d, :)), ',');
c{i} = sprintf('%d:%s', b(i), s);
end
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
cellfun(@disp, f(a, b))

797:デフォルトの名無しさん
22/09/10 13:32:08.25 q8enYz1J.net
>>751 c
URLリンク(ideone.com)
#include <stdio.h>
void f(int *a, int *b, int na, int nb) {
int i, j, k, found, min, x, y;
for (i = 0; i < nb; i++) {
found = 0;
for (j = 0; j < na; j++)
for (k = 0; k < na; k++)
if (j != k && b[i] <= a[j] * a[k] && (!found || a[j] * a[k] < min))
found = 1, min = a[j] * a[k], x = a[j], y = a[k];
if (!found) printf("%d:error\n", b[i]);
else printf("%d:%d,%d\n", b[i], x, y);
}
}
int main() {
int a[] = {17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1};
int b[] = {390, 240, 37, 396, 198, 99, 242, 53, 329, 202};
f(a, b, sizeof a / sizeof *a, sizeof b / sizeof *b);
return 0;
}

798:デフォルトの名無しさん
22/09/10 19:18:11.93 PLqR4TKQ.net
>>751
Kotlin
可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな?
URLリンク(paiza.io)
240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。
(リストの順番で覚えているのでこうなる)。

799:デフォルトの名無しさん
22/09/10 22:25:19.23 7X0yi8nW.net
お題
>>751の問題について
長方形の1辺の長さをソートして縦方向と横方向に並べて交差するところに長方形の面積を入れて表にします
URLリンク(downloadx.getuploader.com)
この図は50を探すところを描いています
青色の斜めの値の中から正方形の面積以上かつ最小の値を見つけその場所を出発点とします
長方形の面積が正方形の面積よりも大きい場合は表を上にたどり、長方形の面積が正方形の面積よりも小さい場合は表を右にたどります
右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
しゃくとり虫が動いてるように見えるのでこれをしゃくとり法と呼ぶことにします
>>751の問題をしゃくとり法で解いてください

800:デフォルトの名無しさん
22/09/10 22:51:25.27 7X0yi8nW.net
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
これは間違いかも、これだと55を見つけられない
各自で考えていただければありがたく

801:デフォルトの名無しさん
22/09/10 22:52:41.16 7X0yi8nW.net
いや、いいのか!? ダメだ混乱してきたもうパニックですわ

802:デフォルトの名無しさん
22/09/10 22:57:53.10 sDbT/M8A.net
おちつけ

803:デフォルトの名無しさん
22/09/10 23:12:42.56 7X0yi8nW.net
>>760
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
これは間違いでした、上方向から右方向に変わる直前の値が回答候補ですね
50を探す場合、56,55,51が候補です
URLリンク(downloadx.getuploader.com)

804:素数を数えるんだ
22/09/10 23:25:22.59 22kPJ9rf.net
2, 3, 5, 7, 11, 13, 17, 19......

805:デフォルトの名無しさん
22/09/11 01:04:25.98 /LH0BDzE.net
お題
2~19までの素数を生成し掛け算の表を出力してください

806:デフォルトの名無しさん
22/09/12 01:50:52.46 xawmAmgS.net
>>751
Java
URLリンク(paiza.io)

807:デフォルトの名無しさん
22/09/12 10:44:10.79 VxR6iqOp.net
>>764
Kotlin
URLリンク(paiza.io)
出力をHTMLにするとそれっぽく表示できた。
50は正方形の面積リストの最初に入れたが例の画像と同じような見た目になった。

808:デフォルトの名無しさん
22/09/12 18:32:56.65 eGlSQ2pk.net
>>751
URLリンク(ideone.com)
>>764
URLリンク(ideone.com)

809:デフォルトの名無しさん
22/09/13 22:22:38.95 B0VHMNYc.net
>>766
C#
URLリンク(paiza.io)

810:デフォルトの名無しさん
22/09/13 22:25:19.07 V4Kz63G0.net
お題:OpenGLで四角形を3つ描画せよ
一番下の四角形が1番大きく赤色
その上にのってる四角形は2番目に大きく緑色
さらにその上にのってる四角形は3番目に大きく青色

811:デフォルトの名無しさん
22/09/14 12:47:57.36 LkrioAg+.net
お題
フェアフィールドの公式は、西暦1年1月1日から指定した日付までの日数を求めるもので次の式です
日数 = (365 * Y) + (Y / 4) - (Y / 100) + (Y / 400) + (306 * (M + 1) / 10) + D - 428
UNIX時間は、西暦1970年1月1日午前0時0分0秒からの経過秒数です
フェアフィールドの公式を用いてUNIX時間から年月日を求めて出力してください
(例)
1000000000 → 2001-09-09T01:46:40
1234567890 → 2009-02-13T23:31:30

812:デフォルトの名無しさん
22/09/14 15:20:59.73 s+3MjQLV.net
>>772 bat
@echo off &setlocal
call :Conv_uTime2iso 1000000000
call :Conv_uTime2iso 1234567890
pause&exit /b
:Conv_uTime2iso
set /a "GD=(UT=%~1)/86400+719468, h=100+(R=UT%%86400)/3600, n=100+(R%%=3600)/60, s=100+R%%60, y=400*(GD/146097), y+=100*(i=(R=GD%%146097)/36524), y+=(R%%=36524)/1461*4, y+=j=(R%%=1461)/365, R=R%%365+365*(L=(i|j)/4), f=(k=(R*5+2)/153)/10, d=R+101-(306*k+4)/10, m=k+103-f*12, y+=f-L"
echo %y%-%m:~-2%-%d:~-2%T%h:~-2%:%n:~-2%:%s:~-2%

813:デフォルトの名無しさん
22/09/15 05:31:46.38 LgD4XKTt.net
//>>772 JavaScript
function _772(epoch) {
/**/epoch = BigInt(epoch);if (epoch < 0n) {throw new RangeError('');}
/**/const lastDateOfMonth = (_ => Object.fromEntries(Array.from([, , , ..._.slice(2), _[0], _[1]].entries()).filter(([, v]) => v)))(Array.from(new Array(12).keys()).map(m => BigInt(new Date(2_022, m + 1, 0, 0, 0 - new Date().getTimezoneOffset()).getDate())));
/**/const FAIRFIELD = fairfield(1_969n, 12n, 31n) + epoch / 86_400n + 1n;
/**/let [Y, M, D] = [1_969n, 13n, 1n];
/**/for (; D <= 58n; D++) {if (FAIRFIELD == fairfield(Y, M, D)) {return {Y: 1_970n, M: 1n + D / 31n, D: D % 31n};}}
/**/for (Y = 1_970n; Y <= Number.MAX_SAFE_INTEGER; Y++) {
/**//**/for (M = 3n, D = 1n; D <= 366n; D++) {
/**//**//**/if (FAIRFIELD == fairfield(Y, M, D)) {
/**//**//**//**/if (D == 366n) {
/**//**//**//**//**/if (isLeapFullYear(Y + 1n)) {
/**//**//**//**//**//**/


814:return {Y: Y + 1n, M: 2n, D: 29n}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: 3n, D: 1n}; /**//**//**//**//**/} /**//**//**//**/} else { /**//**//**//**//**/for (; lastDateOfMonth[M] <= D; D -= lastDateOfMonth[M++]); /**//**//**//**//**/if (M <=12n) { /**//**//**//**//**//**/return {Y, M, D}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: M % 12n, D}; /**/}}}}} /**/function isLeapFullYear(Y) {return Y % 4n == 0n && Y % 100n != 0n || Y % 400n == 0;} /**/function fairfield(Y, M, D) {return Y * 365n + Y / 4n - Y / 100n + Y / 400n + 306n * (M + 1n) / 10n + D - 428n;} }



815:デフォルトの名無しさん
22/09/15 22:07:10.52 AaudQZzp.net
うるう秒のテーブルがないと求められなくない?

816:デフォルトの名無しさん
22/09/16 00:34:31.77 ETiYX3D6.net
400年で146097日増えるみたいだから適当にバイアス付けて146097で割る予感

817:デフォルトの名無しさん
22/09/16 00:35:51.49 ETiYX3D6.net
違う
適当にバイアス付けて÷365.2425だ

818:デフォルトの名無しさん
22/09/16 01:05:26.42 /mniU0r8.net
フェアフィールドの公式てwikipediaに書かれている出自不明な公式でも何でも無いでっち上げの記事でしょ
式の解説文がこれまた頭悪くて、なのに誰も修正しないという

819:デフォルトの名無しさん
22/09/16 01:13:35.77 mMDmJ4/Z.net
グレゴリオ歴のとこに解説載ってるよ
URLリンク(ja.m.wikipedia.org)

820:デフォルトの名無しさん
22/09/16 21:18:24.66 k/2PI65L.net
>>772
Java
URLリンク(paiza.io)

821:デフォルトの名無しさん
22/09/17 17:48:30.91 fw6a0lZo.net
お題
2*2の整数行列がいくつか与えられる。
これらを適当な順番で掛け合わせる(行列積)ことで零行列を作ることが可能かどうか判定せよ。
ただし、同じ行列を2回以上使用してもよい。

[[1, 0], [0, 0]], [[0, -1], [1, 0]] =>可能(行列1*行列2*行列1==0)
[[1, 2], [3, 4]], [[0, -3], [2, 4]] =>不可能(正則行列だから)

822:デフォルトの名無しさん
22/09/17 18:42:03.76 ZMguHADz.net
>>781
零因子の発掘ですか、濃ゆいお題ですね…

823:デフォルトの名無しさん
22/09/18 11:34:42.07 qZaavGGf.net
お題:循環参照を開放せよ。
java
URLリンク(ideone.com)
・ガベコレの対象になったのを確認まででヨシとす
c++
URLリンク(ideone.com)

824:デフォルトの名無しさん
22/09/18 12:52:34.73 BMeW7wRv.net
>>783
Java
URLリンク(paiza.io)

825:デフォルトの名無しさん
22/09/18 16:37:27.93 BMeW7wRv.net
>>783
Python
URLリンク(paiza.io)

826:デフォルトの名無しさん
22/09/19 02:47:41.37 /08McGz8.net
>>783
Kotlin
URLリンク(paiza.io)
Java VM 上で動くから Java と同じで参照している変数を null にして System.gc() するだけ。

827:デフォルトの名無しさん
22/09/24 01:13:05.90 uYRJl5GL.net
>>772
亀レスHaskell
URLリンク(ideone.com)
色々考えて結局テーブル作って処理という最後の手段
わざわざ公開するほどのもんでもないけど一区切りつけるため
暦の勉強になった
なんで大の月と小の月の配置はこんなみっともないことになってるんだろ?
歴史家が調べでよくわからんみたいだけど

828:デフォルトの名無しさん
22/09/24 04:40:38.82 6vPOYH6k.net
>>772
だめ。その式に当てはめると必ずずれる。

829:デフォルトの名無しさん
22/09/24 07:42:29.88 aunrhsr3.net
うるう秒を考慮しないとずれる

830:デフォルトの名無しさん
22/09/24 09:42:29.34 v3rIJe0P.net
>>788
問題には書かれていないけれどその式は条件によって前処理が必要
・1-2月は前年として扱う。 1年を3-14月として計算
m=1 or 2 の時 y=y-1, m=m+12
>>789
UNIXTIMEにうるう秒なんて無い

831:デフォルトの名無しさん
22/09/24 11:33:11.17 aunrhsr3.net
>>790
日付に変換する過程でうるう秒考慮しないとずれるでしょう

832:デフォルトの名無しさん
22/09/24 12:13:55.28 v3rIJe0P.net
>>791
UNIXTIMEは「epocからの実時間の秒数」では無い
実時間から、うるう秒は加減され含まれず、1日は86400秒換算
だからそれを日時に変換しても「うるう秒の時刻を表せない」だけでズレなど発生しない

833:デフォルトの名無しさん
22/09/24 12:34:24.41 aunrhsr3.net
>>792
レスありがとう。不勉強だったわ。

834:デフォルトの名無しさん
22/09/24 16:57:05.53 6vPOYH6k.net
>>790
出題ミスか。
これまでに作られたプログラムはその辺のことを考慮したプログラムになっていたのかな?
だったら分かってたんだからその辺の事を書いておいて欲しかったな。

835:デフォルトの名無しさん
22/09/24 22:38:52.94 Fvr5cAu6.net
wikiにはそこまで詳しい解説はなかったけど式みたらわかったけどな
⌊(m+1)/30.6⌋
という項
⌊x/30.6⌋という関数は0,1,2,3,4となる値が
31,30,31,30,31,31,(繰り返し)‥①
と変化してコレを周期153で繰り返す
月の長さは3月から見ると
31,30,31,30,31,31,30,31,30,31,31,28(29)
となってるから①を一月分左に平行移動すれば良いとわかる
からの⌊(m+1)/30.6⌋

836:デフォルトの名無しさん
22/09/24 22:45:27.51 Fvr5cAu6.net
>>795
間違えた
⌊m×30.6⌋という関数は0,1,2,3,4,‥の時の値が
31,31,30,31,30
の繰り返し
件の公式のmの項はコレを一月分ずらしてる

837:デフォルトの名無しさん
22/09/28 02:17:31.98 UDkh+W3M.net
お題:4回呼び出したらその内の1回が失敗する関数を書け
失敗した場合は「failed」と表示、成功した場合は「ok」と表示せよ

838:デフォルトの名無しさん
22/09/28 09:47:46.29 +QlM3L0o.net
seed変数はパラメータ渡しで良いですか

839:デフォルトの名無しさん
22/09/28 19:05:59.31 WptV1D3q.net
>>797 c
URLリンク(ideone.com)
void f() {
static int i = 0, j, k = 4;
if (i == 0) j = rand() % k;
puts(i == j ? "failed" : "ok");
i = (i + 1) % k;
}

840:デフォルトの名無しさん
22/09/28 22:51:23.95 7XofIB3A.net
>>797 Ruby
def f
$f_cnt||=0
puts$f_cnt==3||(rand(4)==~-$f_cnt+=1)?:failed: :ok
end

841:デフォルトの名無しさん
22/09/30 04:16:06.13 F2zw9Wj+.net
>>797
Kotlin
URLリンク(paiza.io)
Int型1つ分のワークエリアを呼ぶ側から与えてそこでカウントして必ず4回の内1回が失敗になる。
乱数を使うと4回の内1回失敗ではなくなる可能性があるので使っていない。
引数としてInt型の参照を渡しても中身を変えられないのでIntArray(Java なら int[] に相当)で1要素作ってIntArrayの参照を渡している。
クラスでやっても良かったが、わざわざクラス作るほどのことでもないと思ったのでこの方式にした。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch