22/01/11 02:38:04.94 i2HiBm5J.net
>>526
先人の実装例だと、
上位 + 下位 = double doubleの数値
という事になってますね(上位側の指数が決まると、下位側の指数も決まる)。
URLリンク(na-inet.jp)
勿論、そう実装しないのもあり。
551:デフォルトの名無しさん
22/01/11 03:06:24.10 Y9TTYX77.net
>>527
となると、
>>510
>binary64 中には仮数部に使用できるビット幅は 52 bits しかありません
よって下位側指数部無視なら 53bit + 52 bit = 105bit の実装となりますが?
下位側指数部有意ならば、下位側にもケチビットを適用できますが、今度は仮数部が 106 ビットとはいいきれなくなりますね(数によって変わる)
552:デフォルトの名無しさん
22/01/11 03:08:13.70 Y9TTYX77.net
>>527
失礼 pdf が紹介されていることを見落としていました、精査します、紹介ありがとうございます
553:デフォルトの名無しさん
22/01/30 18:02:46.10 Np8aVX2s.net
お題: 1より小さい実数を1以上2より下にせよ
< 0.123
> 1.23
< 0.0000123
> 1.23
554:デフォルトの名無しさん
22/01/30 18:25:00.85 A8jov
555:ols.net
556:蟻人間
22/01/30 20:39:55.64 DZg7owi9.net
お題: 質量0.2 kgの直方体の物体が摩擦のある水平な床の上にある。
物体の初速を右向きの0.5 [m/s]とすると、物体は転倒することなく底面が床に接したまま、約x秒後に自然停止した。xより垂直抗力F[N]と動摩擦係数kを求めよ。
重力加速度を 9.8 [m/s^2]とする。
557:蟻人間
22/01/30 20:58:19.92 DZg7owi9.net
お題(HTML/JavaScript): ユーザがGoogleから訪問した場合は、3秒間ブラウザを停止させるようにせよ。
558:デフォルトの名無しさん
22/02/01 07:45:34.60 /+irRzAS.net
>>530
負の数や2以上の数は?
559:デフォルトの名無しさん
22/02/01 16:02:38.13 zoPPBktH.net
>>534
・・・!
560:デフォルトの名無しさん
22/02/01 18:02:38.08 zoPPBktH.net
お題: -1 < n < 1 の実数nを-10 < m < 10の実数m(ただし1桁目が0を除く)に桁上げせよ(>>530の改良)
< 0.123
> 1.23
< -0.00056
> -5.6
561:デフォルトの名無しさん
22/02/01 20:01:29.11 TQ6+L4kb.net
負だったらabsolute取るだけのことじゃん
562:デフォルトの名無しさん
22/02/01 23:48:43.79 /+irRzAS.net
>>536
perl
ワンライナー。以下はbashのコマンドラインから実行して試した。
入力は標準入力で一つづつ改行する。
perl -ne 'chomp;$n=$_;while(int(abs($n))<1){$n*=10}print "$n\n";'
やってることは見ての通り殆ど何も考えず10倍し続けるだけ。
563:デフォルトの名無しさん
22/02/21 17:49:01.62 QCKFV9kK.net
もうすぐ22日、今年は "22/2/22"といつもより多め
[お題] 偶数ゾロ目
URLのページに都道府県別の人口が載っている。
URL: URLリンク(ideone.com)
今回使用するのは、2020/10のデータ
同じ県は一回のみで、異なる県を 22 県選らぶ。
(単純な選び方は全部で NCR(47, 22) = 約14.8兆通り)
整数A,Bが与えられる(1<=A<=B<=1億)
選択した22県の人口合計が A以上B以下となるのは何通りか?
1) 44444444 44444444 --> 214209
2) 22222222 44444444 --> ?
3) 44444444 66666666 --> ?
※上の三問を全部で5秒程度で
想定解はあるが、もっとスマートな方法がありそう
「またか」と思った人、以前の問題とは想定解はかなり違う
564:デフォルトの名無しさん
22/02/23 19:08:44.10 jKeAH0Dy.net
>>536
やぱしn==0は除外?
565:デフォルトの名無しさん
22/02/24 00:35:12.16 5B3hmiET.net
>>540
一桁目が0は除外してね
566:デフォルトの名無しさん
22/02/24 08:38:30.17 GiducjAN.net
難しい、こんなの小学生が解けるのか?
今年の中学受験の算数で一番の良問がこれらしい [976717553]
スレリンク(news板)
567:539
22/02/25 17:25:00.82 STd/IFZD.net
>>539
旬だと思って出題
URLリンク(ideone.com) 下部に追加
半分全列挙 + 尺取り法
早い言語でしかできない解答例でした
568:デフォルトの名無しさん
22/02/25 19:14:08.69 RZ7O9d2K.net
>>543
乙
時間取れなくてやれてないが季節感あるネタ好き
569:デフォルトの名無しさん
22/02/26 19:41:18.44 4VT1Qgxn.net
haskellでやったらやっぱり5秒はきつか�
570:チた
571:デフォルトの名無しさん
22/02/27 02:34:25.32 VdMMR1Xg.net
お題: RustかGoでバイナリーサーチを実装してください
572:デフォルトの名無しさん
22/03/20 12:30:16.47 nN0Ys+dW.net
お題: トライ木を使ってサジェスト機能を実装してください
$ prog
> w
world
would
will
wish
辞書は任意の大きさとする
入力は英語、または日本語とする
573:デフォルトの名無しさん
22/03/20 19:32:45.03 Ycqbgo6j.net
>>545
なんかHaskellってGHCのオプションに-O2とか指定すれば結構早くなった記憶がある
あとListじゃなくVector使うとか
574:デフォルトの名無しさん
22/03/20 19:41:12.56 sy393qRd.net
お題 バッタの大冒険
a(1),a(2),⋯,a(n) を相異なる正の整数とし、M を n-1個の正の整数からなる集合と
する。また、M は s=a(1)+a(2)+⋯+a(n) を含まない。数直線の 0 の地点にいるバッタが
数直線の正の向きに n 回ジャンプする。 n 回のジャンプの距離は a(1),a(2),⋯,a(n) の並べ替えである。このとき並べ替えをうまく選べば、バッタがM の要素に対応するn-1点に一度も着地しないようにできることを証明せよ。
↑数学オリンピックの問題
もちろん証明はどうでもよろしい
お題は(ジャンプの幅のリスト、禁止点のリスト)から禁止点を交わしていく飛ぶ順を見つけるプログラムを実装せよです
入力
([3,5,8],[5,10])
出力
[8,5,3] #着地するのは8,13,16で禁止点5,10をかわしている
入力
([5,6,8,10,13,15],[2,18,24,29,45])
出力
[15,13,10,8,6,5] #着地するのは15,28,38,46,51で全ての禁止点をかわしている
入力
([3,26,30,32,36,44,53,62,68,82],[36,40,59,79,92,126,178,233,394])
出力
[82,68,62,53,44,36,32,30,26,3] #同文
575:デフォルトの名無しさん
22/03/20 21:13:54.18 yn4DTgXG.net
2番目の例着地するのは
15,28,38,46,52,57
ですた
576:デフォルトの名無しさん
22/03/22 20:44:30.68 0IfoPmot.net
>>549
は数学の問題としても面白いけどココはプログラムのお題スレなのでアルゴリズムそのもの考えるのは嫌な人のためにアルゴリズムひとつ紹介しておきます
以下の探索で線形オーダーで解を見つけられます
自分で考えたい人は無視してください
以下aを最大ジャンプとします
a=a(n)としておく
(A)一回目を最大ジャンプで飛んだとして最初の禁止点に届かないかギリギリ届くとき
一回目のジャンプが最大ジャンプしたと想定して残りのn-1回ジャンプで最初の禁止点を無視したn-2個の禁止点を交わしたジャンプ順b(1)...b(n-1)を作る
この順番でとんて行って最初に最初の禁止点をi回目に超えたとする
解のジャンプとして
b(1),b(2),...,b(i-1),a,b(i),...,b(n)
とすると全ての禁止点をかわしている
(B) 一回目を最大ジャンプで飛んだとすると最初の禁止点を超えて、しかも禁止点以外に着地できるとき
一回目のジャンプが最大ジャンプしたと想定して残りのn-1回ジャンプで最初の禁止点を無視したn-2個の禁止点を交わしたジャンプ順b(1)...b(n-1)を作る
解のジャンプとして
a,b(1),...,b(n-1)
とすると全ての禁止点をかわしている
(C) 一回目を最大ジャンプで飛んだとすると最初の禁止点を超えるが別の禁止点に着地してしまうとき
この状況だとa(1)〜a(n-1)のいずれかのジャンプa(i)でa(i)もa+a(i)のどちらも禁止点でないものが取れる( (∵) 全てのi:1〜n-1でa(i)かa+a(i)のどちらかが禁止点とするとこれだけでn-1個の禁止点全部尽くされてしまうけど、この中には最初の仮定である“一回目aで飛んだら禁止点”はこの中には出てこないので矛盾 )
それをa(n-1)としよう
最小の2回をa(n-1),a(n)と飛んだとしてこの時点で最初の禁止点と最初a(n)だと踏んでしまう禁止点の2点は超えているので残りの禁止点はn-3個以下しか残ってない
そこでa(1)〜a(n-2)
577:をうまく並べ替えれば全部かわすことができる
578:デフォルトの名無しさん
22/05/03 15:12:22.98 FP7f4hyR.net
問題がよくわからなくて解く以前の所で停止。そしてやる気消滅。
579:デフォルトの名無しさん
22/05/03 23:10:33.84 JwGzWANE.net
説明不足で申し訳ない
問題文は数オリの紹介サイトからそのままコピペしてきたのでわかりにくかったかもしれない
1番最初の例
([3,5,8],[5,10])
だとバッタは最初x=0の地点にいて+3,+5,+8のジャンプでx=16の地点に行こうとしている
しかしx=5,x=10の地点は着地禁止地点で着地できない
飛び方は全部で6通りあるがその中から禁止地点に着地しないものを選んで下さいという問題
3回くらいなら総当たりで答え出せるけどジャンプ10回禁止地点9ヶ所だと全数検索すると10!通り必要になって実用にならない
どうしますかというテーマだけどもちろん数学オリンピックの問題なので中々自分で答え出すのは難しい
でここは数学板ではないので同じ数オリサイトにあった解答を転記して「こんなアルゴリズムが知られているけどアルゴリズムをインプリメントできますか」がお題です
580:デフォルトの名無しさん
22/05/04 00:16:07 0lMETj8q.net
お題: C/C++でスレッドセーフなstrtok関数を作れ
設計は各自で考えること
581:デフォルトの名無しさん
22/05/04 08:22:49.31 WTZHV9SY.net
政府公認のスカトロサークルだって!?じゅるり
582:デフォルトの名無しさん
22/05/05 02:33:11.33 FeY8iOM4.net
高度IT人材、富士通は最大年収3500万円へ
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
第一生命HD、副業解禁 約1万5000人対象
第一生命HD、副業解禁 1万5000人対象―大手生保初
IHI、国内8000人の副業解禁 重厚長大企業も転機
IHI、社外兼業を解禁 社内副業もルール化
583:デフォルトの名無しさん
22/05/05 16:49:02.33 SGcHNlDo.net
>>554
C言語
URLリンク(paiza.io)
strtok_r() を strtok_r2() の名前にして自分で実装した。
strsep() も paiza.io のCのライブラリには何故かなかったので strsep2() にして自分で実装した。
584:デフォルトの名無しさん
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)