プログラミングのお題スレ Part19at TECH
プログラミングのお題スレ Part19 - 暇つぶし2ch1:デフォルトの名無しさん
20/11/30 00:04:05.21 TF2Czp0y.net
プログラミングのお題スレです。
【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文
2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも
【ソースコードが長くなったら】 (オンラインでコードを実行できる)
URLリンク(ideone.com)
URLリンク(codepad.org)
URLリンク(compileonline.com)
URLリンク(rextester.com)
URLリンク(runnable.com)
URLリンク(code.hackerearth.com)
URLリンク(melpon.org)
URLリンク(paiza.io)
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part18
スレリンク(tech板)

2:デフォルトの名無しさん
20/11/30 00:27:32.09 OK+46EGm.net
const array = ['乙', '1', '>', '>'];
for(let i = 0; array.length > 0;) {
console.log(array.pop());
}

3:デフォルトの名無しさん
20/11/30 00:44:30.29 TF2Czp0y.net
全スレ >>995 C++
DPでO(N)
ただスマホコーディングなのと今すごく眠いので、何か間違ってたらすまん
URLリンク(wandbox.org)

4:デフォルトの名無しさん
20/11/30 01:19:09.34 7QMEfWyp.net
>>1
>>スレリンク(tech板:995番)
bat
:: 配列中の小計の最大値を取る区間A-Bを出力。0を閾値にしているので正の最大値限定
@echo off &setlocal enabledelayedexpansion
set args=-2,1,-3,4,-1,2,1,-5,4
set /a S=N=i=0
for %%a in (%args%) do (
set /a i+=1
set /a N+=a[!i!]=%%a
if !N! GTR !S! set /a S=N, B=i &if not defined A set /a A=i
if !N! LSS 0 set /a N=0 &set A=
)
for /L %%i in (%A%,1,%B%) do set R=!R!,!a[%%i]!
set R=[%R:~1%]
echo %R%
pause&exit /b

5:デフォルトの名無しさん
20/11/30 02:02:57.70 owcTZSsV.net
>>2
それだと
>
>
1

になってしまうのでは?

6:デフォルトの名無しさん
20/11/30 02:36:49.33 +w97lXkL.net
スレリンク(tech板:995番)
Haskell
import Data.List
maxConsSub x = let
ss = concat $ map ( tail . reverse . tails ) $ tail $ inits x
comp xs ys = compare ( sum xs ) ( sum ys )
in maximumBy comp ss
main = print $ maxConsSub [ -2, 1, -3, 4, -1, 2, 1, -5, 4 ]

7:デフォルトの名無しさん
20/11/30 02:50:11.69 8vxB1EQV.net
前スレ>>995
URLリンク(ideone.com)

8:デフォルトの名無しさん
20/11/30 03:40:18.85 r8rQ87Qr.net
サブ配列とは、連続している領域の事か?
どこかで、こういう問題を見た事があるような気がする
これで、配列の前後がつながっている、循環バージョンもやってみれば?

9:デフォルトの名無しさん
20/11/30 11:41:04.85 6DeIDSHb.net
前スレ>>995 Perl5
@a = qw[-2 1 -3 4 -1 2 1 -5 4];
sub f {
 my ($i, $j) = @_;
 return $t[$i][$j] if defined $t[$i][$j];
 $t[$i][$j] = $a[$i] + ($i < $j ? f($i+1, $j) : 0);
}
for $i (0..$#a) {
 for $j (reverse 0..$#a) {
  my $v = f($i, $j);
  if (!defined($max) or $max < $v) {
   $max = $v;
   ($s, $e) = ($i, $j);
  }
 }
}
print "@a[$s..$e]\n"

~ $ perl 18_995_sumsubarry_dp.pl
4 -1 2 1

10:9
20/11/30 21:53:55.46 Nq7K7NhK.net
>>9 Bugってんじゃん、解は変わらないけど無駄なとこ計算する
× for $j (reverse 0..$#a) {
   ↓
○ for $j (reverse $i..$#a) {

ついでっちゅうわけじゃないけどnaive版 Perl5
@a = qw[-2 1 -3 4 -1 2 1 -5 4];
use List::Util 'sum';
for $i (0..$#a) {
 for $j (reverse $i..$#a) {
  my $v = sum(@a[$i...$j]);
  if (!defined $max or $max < $v) {
   $max = $v;
   ($s, $e) = ($i, $j);
  }
 }
}
print "@a[$s..$e]\n";
実行
~ $ perl 18_995_sumsubarry_naive.pl
4 -1 2 1

11:デフォルトの名無しさん
20/12/01 03:38:48.56 G7RpB3vG.net
前スレ>>971
前スレ 994 の Java のやつを見て Kotlin script に変換。
java.time.DayOfWeek.values().map { it.name.toLowerCase().capitalize() }.forEach(::println)
991 は java.text.DateFormatSymbols 使ったから順序を変える必要があったが
java.time.DayOfWeek 使えばその必要なかったんだな。

12:デフォルトの名無しさん
20/12/01 04:25:32.84 sHsQRN1l.net
前スレ971 Go言語
package main
import "fmt"
import "time"
func main() {
for i := 1; i < 8; i++ {
t, _ := time.Parse("2006/01/02" , fmt.Sprintf("0001/01/%02d", i))
fmt.Println(t.Weekday())
}
}

13:デフォルトの名無しさん
20/12/02 10:30:39.04 K7fmNxhs.net
Maximum subarray problem - Wikipedia
URLリンク(en.wikipedia.org)
これ例題まで同じじゃん

14:(u_・y)
20/12/02 17:16:26.87 LINF+1vv.net
(u_・y)笑た

15:デフォルトの名無しさん
20/12/03 08:11:48.55 fc8MC3E0.net
大半のお題がどっかで既出だろう。

16:デフォルトの名無しさん
20/12/03 20:29:56.83 QtB29qoZ.net
宿題と糞コテのお題じゃなければ何でもおk

17:
20/12/03 21:27:43.26 8BqExPKj.net
宿題でもおK

18:蟻人間
20/12/03 22:00:18.57 XxeqeIdP.net
いっぱい書けて~
いっぱい走れる

19:デフォルトの名無しさん
20/12/04 02:56:19.58 2+VKdPy1.net
蟻人間
クソスレ立てて
一人芝居
即効バレて
自演失敗
作ろう!ウェブアプリ開発コンテストPart1
スレリンク(hp板)
83 Name_Not_Found sage 2020/11/30(月) 01:23:51.15 ID:???
蟻=熊
33 蟻人間 ◆T6xkBnTXz7B0 sage 2020/11/18(水) 22:50:58.32 ID:???
local storageはセキュリティどうなん?
34 蟻人間 ◆T6xkBnTXz7B0 sage 2020/11/18(水) 22:55:28.97 ID:???
>>33
今回は技術情報システムで、公開される情報だから、問題ないんとちゃうん?
36 Name_Not_Found sage 2020/11/18(水) 23:20:35.82 ID:???
トリップそのままとか斬新な自演ですね(笑)

一人ママゴト楽しい?

20:蟻人間
20/12/04 03:13:58.19 NciCKHQO.net
>>19
アンチお疲れ様

21:蟻人間
20/12/04 03:18:47.59 grL17lz3.net
(※ネタでやってるから本気にしないように)

22:デフォルトの名無しさん
20/12/04 03:20:24.57 SZDLrqPu.net
ネタでクソスレ立てるなカス

23:蟻人間
20/12/04 03:31:18.74 iyroy572.net
この番組は、殺伐とした5ちゃんねるにネタとうるおいをお届けする蟻人間とご覧のスポンサーの提供でお送り致します。

___提_供___

__蟻_人_間__

24:デフォルトの名無しさん
20/12/04 19:37:28.84 5zEeUUrS.net
お題
格子点上にH×Wの矩形がある。
この矩形の辺上の格子点から3点を選んで三角形を作る。
三角形の作り方は何通りあるか?
[例]
H=1, W=1 => 4
H=2, W=3 => 110
H=987, W=654 => ?

25:デフォルトの名無しさん
20/12/04 20:33:08.72 Ik0OmRqi.net
おなじサイズの矩形でも配置によって点の数変わるよね

26:デフォルトの名無しさん
20/12/04 21:35:00.41 8qVwRk+r.net
たしかに。5x5の時は軸に平行だったり斜めだったりできるな

27:デフォルトの名無しさん
20/12/05 00:02:11.08 prgHYa7V.net
まあ辺が垂直と水平に限られるとは書いて無いけどそういう問題?

28:デフォルトの名無しさん
20/12/05 00:18:14.11 xmmvLeAb.net
イヤ、格子状に並んでいる限りアフィン変換で通常の意味の格子になるやろ

29:デフォルトの名無しさん
20/12/05 00:45:26.18 xmmvLeAb.net
H=2,W=3だと200じゃないの
0≦x≦3, 0≦y≦2内の格子点として
格子点から3点選ぶ選び方は12C3=220組
同一直線上に並ぶものは
x=0,1,2,3上に並ぶものが1組ずつで4組
y=0,1,2上に並ぶものが4組ずつで12組
x+y=3,4, x-y=0,1上に1組ずつで4組
よって同一直線上に並ばない3点の組みは200組
な気がする

30:デフォルトの名無しさん
20/12/05 07:26:42.91 wyyz8Yxy.net
>>29
辺上の格子点言ってるやろ

31:デフォルトの名無しさん
20/12/05 08:59:53.39 e3dDslST.net
>>30
辺上なら
(2h+2w)C3-2 (h+1)C3 -2 (w+1)C3
=(2h + 2w)(2h + 2w-1)(2h + 2w-2)/6 - 2(h+1)h(h-1)/6-2(w+1)w(w-1)/6
じゃないの?

32:デフォルトの名無しさん
20/12/05 09:08:46.93 wyyz8Yxy.net
>>31
なに当たり前のこと言ってんの?

33:デフォルトの名無しさん
20/12/05 09:10:06.86 l3I779fy.net
>>31
は純粋にすごいと思ったけど
>>32
はドヤっててキモい

34:デフォルトの名無しさん
20/12/05 09:11:19.04 wyyz8Yxy.net
指摘が意味不明すぎなんだわ
てかこんなん中学の算数だろ

35:デフォルトの名無しさん
20/12/05 09:15:41.52 9/0cDzrv.net
コンビネーションって高校じゃなかったっけ?
まあ、31は24と30の反論になってないから(むしろ論を補強してる)、
意味がよく分からない指摘だというのは同意。

36:デフォルトの名無しさん
20/12/05 09:26:57.24 e3dDslST.net
イヤ、だってH=987, W=654の時どうしますか?
がお題だけど
こコレ
「まともに3282C3=5,886,638,960通りから直線に並ぶ場合を抜くとどえらい計算になります。どうしますか?」
という意味にしか見えないんけど
コレが辺上だけじゃなくて内点も走るならともかく、辺上しか走らないならどうしますかもへったくれもない

37:デフォルトの名無しさん
20/12/05 09:32:49.97 wyyz8Yxy.net
>>36
ああ、そういう文脈で言ってたのね
ただ問題文で辺上って言われてるし、しかも2x3の例からもそれは明らかなんで
ぱぱぱっと計算して終わりで良いんじゃないの

38:デフォルトの名無しさん
20/12/05 09:52:46.86 CtYOdxNe.net
>>24
(h + w) * ((h + w - 1)^2 + h * w) が答えだな。
たかがこんな計算を凄いと思えちゃう>>33君かわいい。

39:デフォルトの名無しさん
20/12/05 09:53:01.14 e3dDslST.net
まぁじゃババっと
Haskell
f n = div (n*(n-1)*(n-2)) 6
g h w = ( f $ 2*h+2*w ) - 2*( f $ h+1 ) - 2*( f $ w+1 )
main = do
print $ g 1 1
print $ g 3 2
print $ g 987 654
----
4
110
5472895818

40:デフォルトの名無しさん
20/12/05 12:09:38.25 TQcPj7M7.net
>>32
単純にこのレスはダサいだろ

41:デフォルトの名無しさん
20/12/05 12:21:48.03 ueKgO2NY.net
>>33が必死で草

42:デフォルトの名無しさん
20/12/06 04:56:07.06 KfTg6Pxo.net
マウンティングのとりあい、カッコ悪い

43:デフォルトの名無しさん
20/12/06 09:12:18.95 ikxyNJRG.net
当人同士が反目し合ってるわけじゃないのに外野が騒いでるのがなんとも

44:デフォルトの名無しさん
20/12/06 09:16:55.00 Qe9xBjDT.net
チクチク言葉やめろよカス

45:デフォルトの名無しさん
20/12/06 14:34:10.80 oqBHe4TF.net
整数 a, b, c が与えられるので, x^3 + ax^2 + bx + c = 0 を満たす実数を1つ求めよ.
0 0 -1 -> 1.0
-6 -11 -6 -> [1.0, 2.0, 3.0 の内のいずれか]
1 2 3 -> -1.275682203650985
4 5 6 -> -3.0
3 -1415 926535 -> -103.38046753468685
30000 299905755 -942477760 -> ???

46:デフォルトの名無しさん
20/12/06 18:18:32.49 EaHZxlDZ.net
>>45
URLリンク(ideone.com)

47:蟻人間
20/12/07 00:14:06.84 LcHpzYm6.net
お題: 三次元のライフゲームを映像化。

48:デフォルトの名無しさん
20/12/07 01:07:51.20 owPfoMMb.net
>>47
クソスレ立てるなカス
作ろう!ウェブアプリ開発コンテストPart1
スレリンク(hp板)
111 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/05(土) 17:53:48.82 ID:???
☆★☆テナント募集中☆★☆
スレッド終了のため、一緒にスレッドを盛り上げてくれる
イベント企画が出来る方を募集しています。
まずはご連絡下さい。
株式会社突撃商会 TEL 03-XXXX-XXXX

49:蟻人間
20/12/07 01:32:19.45 LcHpzYm6.net
>>48
うぜえ、ストーカー規制法だぞ

50:デフォルトの名無しさん
20/12/07 01:42:49.56 MzJ6ksVT.net
>>47
映像化することがお題というなら、ライフゲーム自体はお前が提供するのか

51:デフォルトの名無しさん
20/12/07 14:21:20.37 8Ddysj0U.net
お題
表が連続する長さの平均を求めてください
入力: 裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表

52:デフォルトの名無しさん
20/12/07 15:32:20.36 78t68E9P.net
>>51
haskell
import Data.List
str = "裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表"
consecHeads = id
. map genericLength
. filter ( (=='表') . head )
. group
avg x = ( sum x ) / ( genericLength x)
main = do
print $ consecHeads str
print $ avg $ consecHeads
----
[1.0,1.0,1.0,2.0,1.0,1.0,5.0,2.0,1.0,2.0,5.0,4.0,4.0,3.0,3.0,1.0,2.0,1.0,3.0,5.0,2.0,1.0,1.0,1.0]
2.2083333333333335

53:デフォルトの名無しさん
20/12/07 18:45:30.74 Ao/BDdnQ.net
>>51 Ruby
Str = '裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表'
series = Str.scan( /表+/ )
puts series.sum(0.0){|s| s.size } / series.size

54:デフォルトの名無しさん
20/12/07 19:47:31.22 m3NDFPid.net
>>49
クソスレ立てるな
すき家とかかつやみたいな和食屋で外国人雇うな
スレリンク(tech板)
13 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/07(月) 19:09:17.13 ID:rNPNmVA2
>>11
いい所に来たな。ウェブ技術に関するあるプロジェクトがあるんだが、手伝ってくれるかい?
成果物は山分けだ。
HTTPもしくはHTTPS通信で、とあるURLにあるHTMLをダウンロードして画像を含めてレンダリングする。ただし、jQueryまたはPython3を使用する。
ここまで。
14 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/07(月) 19:25:06.23 ID:rNPNmVA2
いわゆるスクレイピングって言う技術だけど、それ以上のことがしたいんだ。
ホームページの構成要素を破壊するような動画を作りたい。まあ、実際に破壊する訳じゃないけど、ハッカーになりたい子どもたちの娯楽として役に立つらしい。

55:蟻人間
20/12/07 19:54:22.42 rNPNmVA2.net
>>54
立ててねーよ。

56:デフォルトの名無しさん
20/12/07 20:03:08.23 7hownX7E.net
お題流れるからクソコテは死ね

57:蟻人間
20/12/07 20:16:20.90 sdBj/JBd.net
荒らしを相手にするやつも嵐のメンバー。

58:デフォルトの名無しさん
20/12/07 20:18:25.02 m3NDFPid.net
お前が言うな
盗人猛々しい奴だな

59:デフォルトの名無しさん
20/12/08 15:44:35.89 jRmhdWmE.net
URLリンク(detail.chiebukuro.yahoo.co.jp)
なぜですか?
質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。

60:デフォルトの名無しさん
20/12/08 15:52:58.87 KeS4W5RD.net
漠然とした質問に相応の答えだね

61:デフォルトの名無しさん
20/12/08 22:48:35.65 pGXopNTt.net
ヤフー知恵袋スマホで見たらどこがサイト本体なのかわからねえなゴミ袋かよ

62:デフォルトの名無しさん
20/12/10 18:22:03.94 uygr7FQy.net
>>51
python
s = input()
return sum(len(x) for x in s.split("裏") if x != 0) / len([None for x in s.split("裏") if x != ""])
何もimportせずに1行にする方法が思いつかなかった

63:デフォルトの名無しさん
20/12/10 18:37:00.38 uygr7FQy.net
jsならreduceがあるからできるな
window.prompt().split("裏").filter(x=>x!="").map(x=>x.length).map(x=>[x,1]).reduce((a,b)=>[a[0]+b[0],a[1]+b[1]]).reduce((a,b)=>a/b)

64:デフォルトの名無しさん
20/12/10 18:40:22.32 WBenXu2r.net
pythonでもlambda使えば

65:デフォルトの名無しさん
20/12/10 18:41:01.74 WBenXu2r.net
書き込みミスったすまん
print((lambda a: sum(a) / len(a))([len(x) for x in input().split("裏") if x != ""]))

66:デフォルトの名無しさん
20/12/11 01:42:53.01 2d//6+8I.net
>>51
Kotlin
URLリンク(paiza.io)

67:デフォルトの名無しさん
20/12/11 01:44:21.40 2d//6+8I.net
あ、間違えた。表の方を数えるのか。じゃあこっそり直そう。

68:デフォルトの名無しさん
20/12/11 12:19:49.95 OZejrzeq.net
>>51 Python
print((lambda a: a.count("表")/(a+"裏").count("表裏"))(input()))

69:デフォルトの名無しさん
20/12/12 20:53:25.52 LY1sKTLV.net
>>51
perl5
URLリンク(paiza.io)

70:デフォルトの名無しさん
20/12/12 21:20:21.05 LY1sKTLV.net
>>51
びっくりする副作用を使うバージョンでもう一回 perl5
URLリンク(paiza.io)

71:蟻人間
20/12/12 21:23:14.60 Tjq2nQZU.net
お題:
プログラム言語X1では32ビットの符号なし整数と32ビットの符号付き整数が使える。
しかし、プログラム言語X2では32ビットの符号なし整数が使えず、32ビットの符号付き整数が使える。
このままではX1からX2への移植が困難である。
そこで、X2において与えられた32ビットの整数を符号なしと見なした値を10進数文字列化せよ。

72:デフォルトの名無しさん
20/12/12 21:29:50.06 My1CH9nH.net
>>71
クソスレ立てるな自演野郎
作ろう!ウェブアプリ開発コンテストPart1
スレリンク(hp板)
83 Name_Not_Found sage 2020/11/30(月) 01:23:51.15 ID:???
蟻=熊
33 蟻人間 ◆T6xkBnTXz7B0 sage 2020/11/18(水) 22:50:58.32 ID:???
local storageはセキュリティどうなん?
34 蟻人間 ◆T6xkBnTXz7B0 sage 2020/11/18(水) 22:55:28.97 ID:???
>>33
今回は技術情報システムで、公開される情報だから、問題ないんとちゃうん?
36 Name_Not_Found sage 2020/11/18(水) 23:20:35.82 ID:???
トリップそのままとか斬新な自演ですね(笑)

一人ママゴト楽しい?

73:デフォルトの名無しさん
20/12/12 21:30:30.92 My1CH9nH.net
>>71
クソスレ立てるな
すき家とかかつやみたいな和食屋で外国人雇うな
スレリンク(tech板)
13 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/07(月) 19:09:17.13 ID:rNPNmVA2
>>11
いい所に来たな。ウェブ技術に関するあるプロジェクトがあるんだが、手伝ってくれるかい?
成果物は山分けだ。
HTTPもしくはHTTPS通信で、とあるURLにあるHTMLをダウンロードして画像を含めてレンダリングする。ただし、jQueryまたはPython3を使用する。
ここまで。
14 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/07(月) 19:25:06.23 ID:rNPNmVA2
いわゆるスクレイピングって言う技術だけど、それ以上のことがしたいんだ。
ホームページの構成要素を破壊するような動画を作りたい。まあ、実際に破壊する訳じゃないけど、ハッカーになりたい子どもたちの娯楽として役に立つらしい。

74:デフォルトの名無しさん
20/12/12 22:53:12.12 gPUrwTXi.net
>>51 bat
:: 循環小数の循環節を()で表す
@echo off &setlocal enabledelayedexpansion
set str=裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表
set str=%str:裏= %
for %%a in (%str%) do set /a n+=1
set /a s=%str:表=1+%0, a=s/n, r=s%%n
:: test sample
:: set /a s=5, n=108, a=0, r=5
:: set /a s=10, n=3, a=3, r=1
:: set /a s=1212123, n=9999999, a=0, r=1212123
:: set /a s=12, n=4, a=3, r=0
:: echo %s% / %n% = %a%...%r%
set /a j=0, max=1024
:FLACT
if %r% EQU 0 goto :END
set RR=%RR% %r%
set /a r*=10, d=r/n, r%%=n, i=0, j+=1
set f=%f%%d%
for %%a in (%RR%) do (if %%a EQU %r% for /f %%i in ("!i!") do set "f=!f:~0,%%i!(!f:~%%i!)…"&goto :END ) &set /a i+=1
if %j% LSS %max% goto :FLACT
set f=%f%…
:END
if defined f set f=.!f!
echo %s% / %n% = %a%!f!
pause
REM 53 / 24 = 2.208(3)…

75:デフォルトの名無しさん
20/12/13 00:32:32.94 qXegsMRS.net
>>71
Java
URLリンク(paiza.io)

76:デフォルトの名無しさん
20/12/13 01:10:59.90 qXegsMRS.net
>>51
Java
URLリンク(paiza.io)

77:デフォルトの名無しさん
20/12/13 06:04:20.93 jPgXPNr/.net
>>71 C++
URLリンク(ideone.com)

78:デフォルトの名無しさん
20/12/13 06:45:16.14 jPgXPNr/.net
>>71 C++ ループ無し
URLリンク(ideone.com)

79:蟻人間
20/12/13 08:24:11.25 zFOj0dh9.net
お題:
符号なし演算ができない言語X2において、2個の32ビットの符号付き整数x, yがあたえられる。x, yを符号なし整数x', y'と見なしたときの比較演算 x' < y' の値を求めよ。

80:デフォルトの名無しさん
20/12/13 08:37:28.90 LzHmnmLv.net
回答付いたからってチョーシに乗るな。

81:蟻人間
20/12/13 08:38:30.36 zFOj0dh9.net
>>78
素晴らしい回答ですね。少し簡単に解説してくれませんか?
出題者がおバカですみません。

82:デフォルトの名無しさん
20/12/13 09:01:54.89 LzHmnmLv.net
えっ??
頭おかしいだけかと思ってたらホントに馬鹿なんだなw
右シフトとマスクでマイナス値は正の値に直す。右シフト1で1/2
更に5で割って1/10。これで10の位から上の値になる
上の割る5で切り捨てられた余りの2倍(左シフト1)と右シフトで捨てられたLSBを足して1の位

83:蟻人間
20/12/13 09:18:05.05 zFOj0dh9.net
>>82
ありがとうございます。

84:デフォルトの名無しさん
20/12/13 14:07:02.42 qXegsMRS.net
>>79
Java
URLリンク(paiza.io)

85:蟻人間
20/12/13 15:18:39.67 zFOj0dh9.net
>>84
ちょっと動作が遅いね。どちらも正だった場合は普通に比較できるんだから、マイナスありとなしで場合分けできるんじゃね。

86:デフォルトの名無しさん
20/12/13 18:34:56.68 jPgXPNr/.net
>>79 C++
URLリンク(ideone.com)

87:デフォルトの名無しさん
20/12/13 18:39:04.43 7dJX4pz2.net
>>19
lol

88:デフォルトの名無しさん
20/12/14 07:19:49.11 nk+3ocmA.net
>>79 Julia
function f(x , y)
  if (x >= 0) == (y >= 0)
  x > y
  else
  !(x > y)
  end
end

89:デフォルトの名無しさん
20/12/14 14:05:29.33 y4v5rW/c.net
今年考えたがボツにした、イマイチ問題より
[お題]
 整数A, B (1 <= A < B <= 20億)が与えられる。
 A以上, B以下の整数が持つ"約数の個数"を合計する。
1) 12 14 → 12
2) 1 100 → 482
3) 98765432 1234567890 → ?
4) 393939393 1772727272 → ?
5) 1 2000000000 → 43141689413
※ 1)の補足、各整数の約数は 12{1,2,3,4,6,12}->6個, 13{1,13}->2個,
  14{1,2,7,14}->4個, 個数合計は 6+2+4=12個
※ 小問実行時間を1秒程度で。
※ "約数の個数"はwikiに準拠
 URLリンク(ja.wikipedia.org)

90:デフォルトの名無しさん
20/12/14 15:38:14.40 JA72696N.net
お題:
整数 N,M が与えられます
M 個の1でない正整数をそれぞれ任意に選んだとき、
それらを全て掛け合わせて N を作ることが出来るような選び方が存在するか求めて下さい
制約:
2≦N≦10^9
1≦M≦10^9
例:
入力: N = 1576, M = 3
出力: Yes (例えば 2*2*394 = 1576 です)
入力: N = 1576, M = 5
出力: No
入力: N = 5, M = 1
出力: Yes (5 の1つだけを選んでもいい)

91:デフォルトの名無しさん
20/12/14 16:58:04.24 JA72696N.net
>>89
エラトステネスっぽく√Nまでで約数を考えていけばいいかな?
それ以上は対称性から*2すればよくて、二乗数の時だけ注意
それで
B以下の約数の個数の和-A未満の約数の個数の和
をする

92:89
20/12/14 18:20:01.63 y4v5rW/c.net
>>91
前半は想定解と異なるので、何とも言えない。
("*2すればよい"の意味がわからない)
最後の2行は、想定解もその通り。
>>90
by python3 URLリンク(paiza.io)

93:デフォルトの名無しさん
20/12/14 19:27:12.48 bqe1tjqc.net
まあ要するに
Σ[n] ( floor (B/n) - ceiling (A/n) + 1 )
かな

94:91
20/12/14 19:55:38.37 I3Y5P+Cj.net
>>89
C++ URLリンク(wandbox.org)
すまん、日本語が下手だった

95:デフォルトの名無しさん
20/12/14 20:38:42.92 R5T0tffH.net
>>71,79 bat 組み合わせてmax関数化。変換は>>78さん模倣
:: maxUint32 2つの引数(int32)をunsignedINT32と見做して比較し大きい方をunsignedINT32と同じ数字文字列に変換
@echo off &setlocal enabledelayedexpansion
for /f "delims=:" %%A in ('findstr /en ARGS "%~0"') do set /a N=%%A
for /f "usebackq skip=%N% tokens=1,2* delims=, " %%A in ("%~0") do (
set /a "x=%%A, u=y=%%B, m=0x7fffffff, xor=(x^y)&~m, xx=x&m, yy=y&m, msby=y>>31&1"
set z=%%C
if !xor! EQU 0 (if !xx! GTR !yy! set /a u=x ) else if !msby! EQU 0 set /a u=x
set /a "L=u&1, u=u>>1&m, h=u/5, L+=u%%5<<1"
if !h! EQU 0 set h=
if "!h!!L!&quo


96:t;=="!z!" (set "z=OK") else set z=NG echo !h!!L! : !z! ) pause &exit /b :: ARGS 0, 0, 0 0, 1, 1 1, 0, 1 1, 1, 1 123, 456, 456 456, 123, 456 0, -1, 4294967295 -1, 0, 4294967295 0x7fffffff, 0x80000000, 2147483648 -1294967296, 0x80000000, 3000000000 -294967296, -2147483647, 4000000000



97:デフォルトの名無しさん
20/12/14 22:49:37.32 IVz7Drzo.net
>>89
haskell
div' x y = -1 - ( div ( -x ) y )
f a b = ( g b ) - ( h a )
g a = let
c = truncate $ sqrt $ fromInteger a
v = sum [ ( div a x ) | x <- [1..c] ]
in 2*v - c^2
h b = let
c = truncate $ sqrt $ fromInteger b
d = if c^2 == b then 1 else 0
v = sum [ ( div' b x ) | x <- [1..c] ]
in 2*v - c^2 + d
main = do
print $ f 12 14
print $ f 1 100
print $ f 98765432 1234567890
----
12
482
24201731790

98:デフォルトの名無しさん
20/12/15 00:08:49.86 SWKOmgAZ.net
>>90
haskell
import Data.List
pdcmp n = let
mainLoop d m = case () of
_ | d^2 > m -> [ m ]
_ | mod m d /= 0 -> mainLoop ( d + 1 ) m
otherwise -> d : ( mainLoop d $ div m d )
in if n > 1 then mainLoop 2 n else [ ]
sumMult = sum . map length . group . pdcmp
isOk m n = m <= ( sumMult n)
main = do
print $ isOk 3 1576
print $ isOk 5 1576
print $ isOk 1 5
print $ isOk 15 735134400
print $ isOk 29 536870912
print $ isOk 2 1000000007
----
True
False
True
True
True
False

99:デフォルトの名無しさん
20/12/16 11:44:45.67 xiQ1h/Hx.net
お題: テキスト内の指定の文字をタグで囲む関数wrapを作成せよ
wrap関数の引数は(text, target_char, tag_left='<', tag_right='>')とする
wrap関数の返り値は文字列とする
wrap関数はtext内の文字を解析し、文字がtarget_charだった場合にその文字をtag_left, tag_rightで囲むものとする
タグで囲んだテキストは返り値として返却する
以下のテストケースが通過するように実装せよ
assert pad('abc', 'a') == '<a>bc'
assert pad('bac', 'a') == 'b<a>c'
assert pad('bca', 'a') == 'bc<a>'
assert pad('aba', 'a') == '<a>b<a>'
assert pad('abcabc', 'a') == '<a>bc<a>bc'
assert pad('aaa', 'a') == '<a><a><a>'
余力があればtarget_charをtarget_strにした関数wrap2も作成せよ
wrap2関数は指定の文字列target_strをタグで囲む関数である

100:デフォルトの名無しさん
20/12/16 16:59:32.76 vjalvrwm.net
この手のやつだな
URLリンク(i.imgur.com)

101:デフォルトの名無しさん
20/12/16 18:16:34.26 4lTbtOkg.net
>>98
haskell
(引数の順はhaskell風に変更)
iimport Text.ParserCombinators.Parsec
pad tgt = insBraket "<" ">" tgt
insBraket op cs tgt = id
. ( \( Right x ) -> x )
. parse ( makeP op cs tgt ) ""
makeP op cs tgt = let
mainP = pzero
<|> ( pzero
<|> ( try $ ( ( op ++ ) . ( ++ cs ) ) <$> ( string tgt )
<|> ( count 1 anyChar ) ) <> mainP )
<|> ( string "" )
in mainP
main = do
putStrLn $ pad "a" "aba"
putStrLn $ pad "a" "abcabc"
putStrLn $ pad "a" "aaa"
putStrLn $ insBraket "🎄" "🎅" "Christmas" "Merry Christmas!"
----
<a>b<a>
<a>bc<a>bc
<a><a><a>
Merry 🎄Christmas🎅!

102:デフォルトの名無しさん
20/12/16 19:58:22.95 DkI2bGpO.net
>>98
この正規表現を関数にするのか?
IFxU2W - Online Perl Interpreter & Debugging Tool - Ideone.com
URLリンク(ideone.com)
$c = 'a';
$l="<";
$r=">";
while(<>){
s/$c/$l$c$r/g;
print;
}

103:デフォルトの名無しさん
20/12/17 14:22:39.99 bL0AsNrc.net
🎅ワロタ

104:デフォルトの名無しさん
20/12/18 11:06:13.73 lt1DqoeP.net
お題
値のペアが複数入力されます
1列目の値でソートしてユニーク化し、2列目の値を出力してください
1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもののみを出力してください
入力
c,e
b,c
c,f
b,d
a,b
c,g
出力
a,b
b,c
c,e

105:デフォルトの名無しさん
20/12/18 11:48:54.35 2oY35fJZ.net
> 1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもの~
と書かれてるがそのソート方法は
> 1列目の値でソート
としか書かれてない
これでは例えば
c,e
c,f
は出現順なのか、はたまた2列目の値も使って昇/降順にするのかわからない

106:デフォルトの名無しさん
20/12/18 11:55:17.73 f5tAtt/1.net
>>103
haskell 入力パーサなし
import Data.List
pairs = [
('c','e'),
('b','c'),
('c','f'),
('b','d'),
('a','b'),
('c','g')
]
f = id
. map head
. groupBy (\x y -> ( fst x ) == ( fst y ) )
. sort
main = mapM_ print $ f pairs

107:デフォルトの名無しさん
20/12/18 12:09:30.98 lt1DqoeP.net
>>104
逆にどっちだと思います?

108:デフォルトの名無しさん
20/12/18 12:52:01.21 1RoKReGQ.net
出現順という言葉が使われていないから、出現順ではない。
2列目もソートすべき
ソートの仕方は書いていないので、文字列でよい

109:デフォルトの名無しさん
20/12/18 13:31:08.12 agZtfXny.net
勝手に決めるな

110:デフォルトの名無しさん
20/12/18 14:23:00.18 A9pQAhpY.net
>>103
C++
入力を競プロぽく改変
URLリンク(ideone.com)
#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int N;
cin >> N;
map<string, set<string>> xs;
for(int i=0; i<N; i++){
string k, v;
cin >> k >> v;
xs[k].insert(v);
}
for_each(xs.begin(), xs.end(), [xs](auto& it){
cout << it.first << "," << *(xs.at(it.first).begin()) << endl;
});
return 0;
}

111:デフォルトの名無しさん
20/12/18 16:16:25.17 P9OguxeC.net
>>103
# # cat input
c,e
b,c
c,f
b,d
a,b
c,g

# # cat input | sort | perl -F"," -lane 'print unless $LAST eq $F[0]; $LAST = $F[0]'
a,b
b,c
c,e

112:デフォルトの名無しさん
20/12/18 18:24:57.63 udnU9JLz.net
>>103 bat
@(for %%a in ("c,e" "b,c" "c,f" "b,d" "a,b" "c,g") do @echo %%~a)|(cmd /v:on /s /c "for /f "tokens=1,2 delims=," %%b in ('sort') do @(if not "%%b"=="!s!" set "s=%%b" &echo %%b,%%c)")&pause

113:デフォルトの名無しさん
20/12/18 19:01:11.88 Dh0d5aQR.net
お題: ランダムに生成されるバイナリツリーがある
ツリーのルートから見て最も左にあるノードと最も右にあるノードの位置を出力せよ
位置はツリーのルートが原点とする
x座標は原点から左に進むとマイナスになり、右に進むとプラスになる
y座標は原点から下に進むとプラスになるものとする
生成されるツリーは原点から下に向かって伸びていくものとする
生成されるツリーの最大の高さは8とする
出力例は↓のようになる
l = -3, 4
r = 5, 7

114:デフォルトの名無しさん
20/12/18 21:17:47.26 lt1DqoeP.net
>>112
座標はこういう感じ?
URLリンク(light.dotup.org)

115:デフォルトの名無しさん
20/12/18 22:39:29.15 Dh0d5aQR.net
>>113
そういう感じ

116:デフォルトの名無しさん
20/12/18 22:55:15.81 Dh0d5aQR.net
>>113
あとツリーの最大の横幅は原点から左右に8ずつで

117:デフォルトの名無しさん
20/12/19 09:08:43.96 Hvq3yNww.net
>>103 J
a =: /:~ ',' & cutopen @ >cutopen stdin ''
f =: >@{. , ','&,@>@{:
smoutput f"1 a #~ ~: {. "1 a

118:デフォルトの名無しさん
20/12/19 09:49:26.96 x1EY5aRu.net
Jニキひさびさ

119:9
20/12/19 14:32:22.06 gCQF7SSG.net
>>103 Perl5
@a = qw{c,e b,c c,f b,d a,b c,g};
$h{(/(\w)/)[0]} //= $_ for @a;
print "$_\n" for map{$h{$_}} sort keys %h;
実行結果
~ $ perl 19_103.pl
a,b
b,c
c,e

120:デフォルトの名無しさん
20/12/19 18:39:10.13 gcxM+qzh.net
>>103
Java
URLリンク(paiza.io)

121:デフォルトの名無しさん
20/12/19 20:00:26.12 gcxM+qzh.net
>>112
Java
URLリンク(paiza.io)

122:89
20/12/20 03:24:48.64 zjFPqMXn.net
>>89
URLリンク(ideone.com)
投稿があった、O(√)以外の方法もあるみたいなので、両方を載せておこう。
他方は、O(N)解法の最後の方の同じ数をまとめて計算するやり方。
O(√)解法より確実に計算量が多い。

123:デフォルトの名無しさん
20/12/20 14:30:37.82 ocWFq0


124:h7.net



125:デフォルトの名無しさん
20/12/20 17:39:53.62 ocWFq0h7.net
>>98
C
URLリンク(paiza.io)
ちゃんと assert() で色々テストするようにした。

126:デフォルトの名無しさん
20/12/20 18:33:53.02 1LcS4Wc6.net
>>98 JavaScript
const wrap = (text, target_str, tag_left='<', tag_right='>') => text.replace(RegExp(target_str, 'g'), tag_left + target_str + tag_right);

127:デフォルトの名無しさん
20/12/21 19:30:10.34 Mnipwtco.net
>>112 Python
URLリンク(paiza.io)

128:デフォルトの名無しさん
20/12/23 21:01:46.74 IGuwyxwv.net
[お題] 和が2021の倍数
 2021000以下の素数を昇順に並べた数列がある。
 [2, 3, 5, ..., 2020979, 2020999] 項目数:150399
 この数列より 空でない連続する部分列を P とする。
 (全てのPの選び方はNCR(150399+1, 2) = 約113億通りある)
 Pの和が2021の倍数となるのは何通りあるか。
 
 [8081,8087] [3361, 3371, 3373] [2011, 2017, 2027, 2029] 等が該当するP
※無駄に素数を乱数代わりに使った、一発正解問題
※実行時間は素数生成を含めて、3秒以内

129:デフォルトの名無しさん
20/12/23 23:02:15.25 PQyv7tz0.net
>>126
URLリンク(ideone.com)
あってるかどうか分からないけど

130:デフォルトの名無しさん
20/12/23 23:12:10.85 zWDUqRJW.net
>>126 C++
URLリンク(ideone.com)

131:デフォルトの名無しさん
20/12/26 03:16:19.16 4qx7gBot.net
>>127
これ実際配列回す必要ないんだな
URLリンク(ideone.com)

132:デフォルトの名無しさん
20/12/28 03:25:00.14 S5vNYbFH.net
>>71
Kotlin
URLリンク(paiza.io)

133:デフォルトの名無しさん
20/12/29 19:09:26.95 v9CXwjD7.net
>>103
Kotlin script
pair.csv にその入力を入れておいてから実行する。
以下は kotlinc コマンドで REPL にして直接入力して実行した時のコピー
>>> java.io.File("pair.csv").bufferedReader().lineSequence().map { it.split(',') }.sortedBy { it[0] }.fold(mutableListOf<List<String>>()) { a, c -> if (a.size == 0 || a[a.lastIndex][0] != c[0]) a.add(c); a }.forEach { println(it) }
[a, b]
[b, c]
[c, e]
>>>
2列目については考慮していないので sortBy が中でやっているソートのアルゴリズムが変われば変わるかも知れない。

134:デフォルトの名無しさん
20/12/29 19:20:00.18 v9CXwjD7.net
a[a.lastIndex][0] の部分は a.last().first() と書いても同じだった。
この方が a.lastIndex 呼ばない分だけ無駄が少ないかも知れない。
(でもコンパイラが中で適当に最適化して同じになるかも知れないのでどうでも良いかな?)

135:蟻人間
20/12/29 19:38:06.80 akpvTOL3.net
お題: 半径dの円にぴったり内接する正n角形を描画せよ。

136:デフォルトの名無しさん
20/12/29 20:28:59.04 0LWFOCUq.net
ぴったり内接とは?
ぴったりじゃない内接を教えてください

137:デフォルトの名無しさん
20/12/29 20:34:46.26 bi9fPEgs.net
ぴったり内接ってなんだよって言おうとしたらすでに言われててくっそワロタ

138:デフォルトの名無しさん
20/12/29 20:53:58.41 2gsaGKLd.net
量子化誤差を最小化した演算を求めているのでは?
我々は実数を扱えないので。

139:デフォルトの名無しさん
20/12/29 21:00:08.04 2gsaGKLd.net
n角形をなす線分が円の外側に飛び出さないよう注意を与えているのかもしれない。
実数を扱えない以上、注意する必要が有る。
ということを示唆するのかも。

140:デフォルトの名無しさん
20/12/29 21:24:43.03 0mXsQANw.net
>>133
processing
void setup(){
size(400, 400);
float d=200;
float r=d/2;
int n=7;
PVector c = new PVector(width/2, height/2);
ArrayList<PVector> p = new ArrayList<PVector>();
for(int i=0; i<n+1; i++){
float theta = (TWO_PI*i)/n;
PVector t = new PVector(r*cos(theta),r*sin(theta));
t.add(c);
p.add(new PVector(t.x, t.y));
}
ellipse(c.x, c.y, d, d);
for(int i=0, j=1; i<n+1; i++, j++, j%=n){
line(p.get(i).x, p.get(i).y, p.get(j).x, p.get(j).y);
}
}

141:デフォルトの名無しさん
20/12/29 21:27:39.14 0mXsQANw.net
画像
URLリンク(dotup.org)

142:デフォルトの名無しさん
20/12/30 13:44:24.04 tmlECeYE.net
[お題] MarkdownのParagraph/BlockQuoteをパースしHTMLを生成してください
入出力例(1)
paragraph
> block quoted paragraph
↑入力 / ↓出力
<p>paragraph</p>
<blockquote>
<p>block quoted paragraph</p>
</blockquote>
入出力例(2)
> hoge
> > nested piyo1
> > nested piyo2
> fuga
↑入力 / ↓出力
<blockquote>
<p>hoge</p>
<blockquote>
<p>nested piyo1</p>
<p>nested piyo2</p>
</blockquote>
<p>fuga</p>
</blockquote>

143:デフォルトの名無しさん
20/12/30 17:24:14.94 yfdsF4Me.net
quote に入れるのは"> "の繰り返しのみで桶?

144:デフォルトの名無しさん
20/12/30 20:26:27.99 nFum3l+K.net
>>141
はい、blockquoteは
"> > "のように"> "の繰り返しで始まる行としてください。
簡単のために">>"のような入力は考慮不要として下さい。

145:デフォルトの名無しさん
20/12/30 21:20:22.80 YQYWYr/5.net
お題
文字列を数値文字参照に変換してください
入力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
出力: &#120473&#120475&#120472&#120464&#120475&#120458&#120470&#120470&#120466&#120471&#120464&#32&#120460&#120465&#120458&#120469&#120469&#120462&#120471&#120464&#120462&#120476

146:デフォルトの名無しさん
20/12/30 21:32:08.73 EIqnK2Zk.net
呪いか?

147:デフォルトの名無しさん
20/12/30 21:48:07.53 YQYWYr/5.net
>>140
Java
URLリンク(paiza.io)

148:デフォルトの名無しさん
20/12/30 21:49:19.71 p/cFtMuj.net
>>143 Java
URLリンク(ideone.com)

149:デフォルトの名無しさん
20/12/30 21:58:00.23 p/cFtMuj.net
>>143 JavaScript
URLリンク(ideone.com)

150:デフォルトの名無しさん
20/12/30 22:36:28.16 p/cFtMuj.net
>>146は不正なUnicode文字列の入力を考慮していませんでした
高位サロゲートが低位サロゲートを伴わず単独で現れていると、その直後の文字が抜け落ちます
つまり
"<\ud83c>" → "&#60;&#55356;&#62;" ではなく
"<\ud83c>" → "&#60;&#55356;" になってしまう
修正版: URLリンク(ideone.com)

151:デフォルトの名無しさん
20/12/31 01:13:45.28 pjMyqahK.net
すごいどうでもいいことなんだけど、
ArrayListってどういうデータ構造なの?
ArrayなのそれともListなの?
おじさんわからないよ。。

152:デフォルトの名無しさん
20/12/31 12:16:39.07 RvVxXqDc.net
>>149
お題
array listを実装してください
次の要項を満たしてください
・add, removeができること
・サイズが可変であること
・序数で要素にアクセスできること
・要素へのアクセスの計算量はO(1)もしくはO(log n)であること

153:デフォルトの名無しさん
20/12/31 15:29:53.91 wqjSMEXG.net
>>150
add, remove は任意箇所の挿入と一要素削除で桶?

154:デフォルトの名無しさん
20/12/31 19:05:54.91 aMBMdmtQ.net
>>140
haskell
URLリンク(ideone.com)

155:デフォルトの名無しさん
20/12/31 21:07:25.40 pjMyqahK.net
>>150
それがArrayListの要件? ありがとう

156:デフォルトの名無しさん
20/12/31 21:26:18.83 RvVxXqDc.net
>>153
実装して

157:デフォルトの名無しさん
21/01/01 13:09:20.23 8TPOGttB.net
>>154
>>150ってただの可変長配列じゃないの?

158:デフォルトの名無しさん
21/01/01 13:38:10.37 8TPOGttB.net
>>150 Python
URLリンク(paiza.io)
いまいち合ってるか自信がない

159:デフォルトの名無しさん
21/01/01 14:38:54.78 8TPOGttB.net
>>150 C++
URLリンク(paiza.io)

160:デフォルトの名無しさん
21/01/02 03:34:41.82 1MFl5wrQ.net
>>143
Kotlin
URLリンク(paiza.io)

161:デフォルトの名無しさん
21/01/02 15:11:50.57 gpIsEKdn.net
>>150
この問題の要件は
>・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
だけでいいのかな?
コレだけでいいならデータの更新時に常に深さが±1の二分木に納直せば必ず参照の計算量はO(log(n))になるし、毎回ソートして格納し直せば参照の(indexによる)計算量はO(1)になる希ガス
データの更新時の制限は全くないでいいのかな?

162:デフォルトの名無しさん
21/01/02 21:54:03.91 YfZD//vW.net
メモリが安くなったとはいえ
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので

163:蟻人間
21/01/04 22:40:39.15 RRkyDjZk.net
お題: 四方に広がる無限のサイズの方眼紙があって、1マス1マスに一個のアラビア数字を一度だけ記入できる。
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)

164:蟻人間
21/01/04 22:51:58.92 RRkyDjZk.net
補記。
マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。
また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。

165:デフォルトの名無しさん
21/01/05 22:28:39.68 JVpboZJX.net
お題: ランダムな数列を生成せよ
数列の長さは4 <= len <= 20とし、これもランダムとする

166:デフォルトの名無しさん
21/01/05 22:36:13.47 3bhht3A2.net
>>163 Ruby 3.0
p Array.new(rand(17) + 4){rand * 1e32}

167:デフォルトの名無しさん
21/01/06 10:45:40.05 0+tWp1dI.net
>>163 js
const rand = (a, b) => Math.floor(Math.random() * (b - a + 1)) + a
const range = (n) => [...Array(n).keys()]
range(rand(4, 20)).map(Math.random)

168:デフォルトの名無しさん
21/01/06 10:46:52.82 0+tWp1dI.net
ruby 3 はどの�


169:ュらい変わったの



170:デフォルトの名無しさん
21/01/06 14:12:34.77 0ypUbOKE.net
>>163
Kotlin または Kotlin script
以下は kotlinc コマンドで REPL で実行した時のコピー。
(先頭の >>> はプロンプト)
>>> (1..(4..20).random()).map { kotlin.random.Random.nextInt() }
res0: kotlin.collections.List<kotlin.Int> = [1712097059, 2034192723, -1232228362, 634194098, 1788814029, -1878195330, -2043751487, 933285281, 1116738696, -934057871, -1657983454, -1761832713, -1836302098, -902578867, -1306790359, 1824207694, 386095401, -389307033, 380242891, -2028767653]
>>>
実行結果は何処にも出力しようとしてしていないが REPL なので自動で出力されている。

171:デフォルトの名無しさん
21/01/06 19:38:44.63 ySlgJWsk.net
>>163 Ruby
# こんな意味だと解釈した
puts ( '%020b' % rand(1<<20) )[ 0, 4+rand(17) ] # ( 2進) '0000'-'00000000000000000000'..'1111'-'11111111111111111111'
puts ( '%020d' % rand(1e20) )[ 0, 4+rand(17) ] # (10進) '0000'-'00000000000000000000'..'9999'-'99999999999999999999'

172:デフォルトの名無しさん
21/01/06 23:58:46.35 N14y+/j1.net
お題
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください
入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk

173:デフォルトの名無しさん
21/01/07 00:11:25.06 bv7Qweso.net
意味不明な途中省く
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk

174:デフォルトの名無しさん
21/01/07 00:20:29.22 iqGL0Mlk.net
省いちゃダメなの!

175:デフォルトの名無しさん
21/01/07 00:29:54.66 Vd9hikpg.net
>>169
Haskell
import Data.List
consecutiveAlph a z = tail $ inits $ [ a .. z ]
main = mapM_ putStrLn $ consecutiveAlph 'a' 'k'
----
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk

176:(u_・y)
21/01/07 00:56:12.00 oTn3YI8v.net
>>169
# Ruby3.0
x = ("a".."k")
x.inject{
p _1
_1 + _2
}

177:デフォルトの名無しさん
21/01/07 02:01:24.63 GGtjVNVk.net
>>169 Common Lisp
URLリンク(ideone.com)
参考:
CLHS: Section 13.1.6 Ordering of Characters
URLリンク(www.lispworks.com)

178:9
21/01/07 02:13:26.61 t9BUPUyy.net
>>169 Perl5
@a = split',', <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];

実行結果
~ $ echo 'a,k' | perl 19_169_a,k.pl
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk

179:9
21/01/07 02:17:47.93 t9BUPUyy.net
つか、これでよかったわ
@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];

180:デフォルトの名無しさん
21/01/07 11:50:26.21 oTn3YI8v.net
お題
オセロのようなルールでひっくり返しを行う処理を実装せよ
変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒
入力:01202113112120
出力:01202222222120

181:デフォルトの名無しさん
21/01/07 11:52:33.15 oTn3YI8v.net
ちょい訂正
3 = 今のターンで置いた白だった

182:デフォルトの名無しさん
21/01/07 12:05:34.54 TYHzopEy.net
>>177
それやと1が置かれたのか2が置かれたのかわからないのでは?
0123120のとき
1が置かれたとして0111120になるのか
2が置かれたとして0122220になるのか
わからない

183:デフォルトの名無しさん
21/01/07 12:06:14.88 TYHzopEy.net
あ、1=3=黒なのね
失礼しました

184:デフォルトの名無しさん
21/01/07 12:32:35.52 TYHzopEy.net
>>177
haskell
twosTurn x = let
( pre, ( '3' : post


185: ) ) = span (/='3') x revOne y = let ( pre02 , post02 ) = span ( == '1' ) $ y ++ "0" twos = zipWith const ( repeat '2' ) pre02 in if ( head post02) == '0' then y else take ( length y ) ( twos ++ post02 ) revOne' = reverse . revOne . reverse in ( revOne' pre ) ++ "2" ++ ( revOne post ) sample = "01202113112120" main = print $ twosTurn sample



186:デフォルトの名無しさん
21/01/07 12:50:45.25 sEmeEMut.net
>>177 Ruby
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }

187:182
21/01/07 13:05:54.80 sEmeEMut.net
>>182 は間違いでした
board = '01202113112120'
puts board
puts board.sub( /2(1*)3/ ){ "2#{'2'* ($1.size)}3" }.sub( /3(1*)2/ ){ "3#{'2'* ($1.size)}2" }.tr( '3', '2' )

188:デフォルトの名無しさん
21/01/07 20:21:05.95 n2K5l1bF.net
仕様を出来るだけ簡潔にしたかったんだろうけどやり過ぎてモヤる
下位から
第1bit 駒有無
第2  駒種別
第3  now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now
と置いてnowの結果を出力の方が良くね

189:デフォルトの名無しさん
21/01/07 21:58:01.92 pRSWPdMl.net
この問題の本命は、オセロを作るっていうお題にしたつもりじゃないからw
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な

190:デフォルトの名無しさん
21/01/08 02:42:54.86 pELUdJTO.net
>>184
お前がそういうお題を新たに出せば良い。

191:デフォルトの名無しさん
21/01/08 07:57:49.81 AIrixKby.net
>>184 Ruby
board = [0b000,0b011,0b001,0b000,0b001,0b011,0b011,0b101,0b011,0b011,0b001,0b011,0b001,0b000].pack('C*')
if board["\x05"]
board = board.sub( /\01(\03*)\x05/ ){ "\01#{"\01"* ($1.size)}\x05" }.sub( /\x05(\x03*)\x01/ ){ "\x05#{"\x01"* ($1.size)}\x01" }.tr( "\x05", "\x01" )
else
board = board.sub( /\03(\01*)\x07/ ){ "\03#{"\03"* ($1.size)}\x07" }.sub( /\x07(\x01*)\x03/ ){ "\x07#{"\x03"* ($1.size)}\x03" }.tr( "\x07", "\x03" )
end
puts board.unpack('C*').map{|b| '0b%03b' % b.ord }.join(',')
#=>0b000,0b011,0b001,0b000,0b001,0b001,0b001,0b001,0b001,0b001,0b001,0b011,0b001,0b000

192:デフォルトの名無しさん
21/01/08 21:29:33.72 Uhe1x+T1.net
>>169 octave
URLリンク(ideone.com)
f = @(b, e) arrayfun(@(e) {b:e}, b:e);
f('a', 'k')

193:デフォルトの名無しさん
21/01/09 02:47:05.51 yzrxyAxR.net
>>169
Kotlin
URLリンク(paiza.io)

194:デフォルトの名無しさん
21/01/09 03:00:30.54 yzrxyAxR.net
>>169
Perl5
コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)
perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'

195:デフォルトの名無しさん
21/01/09 03:18:08.87 yzrxyAxR.net
>>140
Kotlin
URLリンク(paiza.io)
できたことはできたが、なんか奇麗じゃないね。

196:デフォルトの名無しさん
21/01/09 08:04:43.95 7SSQ0Zys.net
>>169 Ruby
def f(a,b)
(a..b).map{|c| [*a..c]*""}
end
puts f("a","k")

197:デフォルトの名無しさん
21/01/09 20:59:35.76 71nzX3jh.net
>>163
Java
URLリンク(paiza.io)

198:デフォルトの名無しさん
21/01/09 21:04:47.77 71nzX3jh.net
>>143
Java
URLリンク(paiza.io)

199:デフォルトの名無しさん
21/01/09 21:40:06.97 71nzX3jh.net
>>169
Bash
URLリンク(paiza.io)

200:デフォルトの名無しさん
21/01/09 23:28:46.26 MPKG


201:4kVI.net



202:デフォルトの名無しさん
21/01/10 03:36:08.11 lRaYSXSv.net
上田隆一
シェル芸勉強会問題一覧
URLリンク(b.ueda.tech)
色々な問題が掲載されている。
問題作りのヒントになるかも

203:デフォルトの名無しさん
21/01/10 05:17:09.34 5hwhwjPe.net
>>169 bat
@echo off &setlocal
set ALL=abcdefghijklmnopqrstuvwxyz
call :RANGE a,k
pause &exit /b
:RANGE
setlocal enabledelayedexpansion
if "%1" GTR "%2" echo ERROR: Invalid argument&exit /b
set STR=!ALL:*%1=%1!
if not "%2"=="z" call set STR=%%STR:!ALL:*%2=!=%%
:LENGTH
set /a n+=1
if not "!STR:~0,-%n%!"=="" goto :LENGTH
for /L %%n in (1,1,%n%) do echo !STR:~0,%%n!

204:デフォルトの名無しさん
21/01/10 09:32:44.37 aiEZ01BF.net
>>196
完全に全く意味がわからないお題を久々に見た

205:デフォルトの名無しさん
21/01/10 09:35:06.95 aiEZ01BF.net
あ、イヤわかった最小はタイポか

206:デフォルトの名無しさん
21/01/10 09:41:46.50 nmvnbhWr.net
>>163 octave
URLリンク(ideone.com)
f = @() rand(randi([4 20]), 1);

207:デフォルトの名無しさん
21/01/10 09:45:08.12 aiEZ01BF.net
>>196
haskell
import Data.List
c = id
. map length
. map (\x -> takeWhile ( <= ( last x ) ) . reverse $ x)
. tail
. inits
main = do
print $ c [ 3, 1, 2, 6, 6 ]
----
[1,1,2,4,5]

208:デフォルトの名無しさん
21/01/10 13:04:37.47 26KuLTT9.net
>>196
Java
URLリンク(paiza.io)

209:デフォルトの名無しさん
21/01/11 00:16:30.88 NK5j5E+l.net
196読めた奴すごいな

210:158
21/01/11 02:25:11.67 HKU1hsOJ.net
>>143
Kotlin
>>194のJavaのやつを見て>>158のKotlinのやつを改造した。
URLリンク(paiza.io)
要するに >>158 を作っている時に String#codePoints() に気付いていなくて自作してしまったということだが、
Java 8 から追加されたメソッドのようなので、>>158は古い JVM ライブラリでも動くということではある。

211:デフォルトの名無しさん
21/01/11 02:44:15.64 HKU1hsOJ.net
お題
>>196を小学生にも理解できるぐらいのやさしい日本語に翻訳せよ。

212:デフォルトの名無しさん
21/01/11 03:09:40.17 H8GM2Hiz.net
無理です
チンパンカンプン

213:デフォルトの名無しさん
21/01/11 03:11:51.27 yhMi8PUx.net
このスレの住人なら日本語分からなくても例だけ見れば普通に理解できるだろ
IQテストみたいなもんだ

214:デフォルトの名無しさん
21/01/11 03:26:31.03 yIQfxhn8.net
>>206
こういう事じゃない?
入力値が遡って比較する最大個数と値を兼ねてるんでしょ
同値ならindex(1始まり)の大きい方
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 (2 6 6 4)] →3

215:デフォルトの名無しさん
21/01/11 03:36:50.19 yhMi8PUx.net
>>209
最後の4違うぞ
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 2 6 6 (4)] →1
x_iは要素数。上の例でいうと()の中の数が何個あるかってこと。で、(右から)直近の要素の中での最大値が一番右の数字になるのは最大でいくつかってこと。
一番下の4のケースでは次の6を含んでしまうとMAXが4にはならないので要素数1で打ち止め。

216:デフォルトの名無しさん
21/01/11 12:34:34.25 kY9pcTJO.net
現在地から前に遡って見ていって自分と同じか小さい要素が続く数を
最初から最後まで求めるだけ
もっと早く一発で求める方法があるかは分からないけど

217:デフォルトの名無しさん
21/01/11 12:57:43.66 ySa6yihW.net
>>206
長さ N の整数列 A が与えられる
A の連続した部分列であって、各 i (1≦i≦N) について次の条件を満たすものをすべて求めなさい
・整数 j (1≦j≦i) を max(A_j, A_{j+1}, ..., A_i) = A_i を満たす最小の j とし i - j + 1 の値

218:デフォルトの名無しさん
21/01/11 13:02:19.99 H8GM2Hiz.net
最高水準位アルゴリズムで
最高値更新したら発表?

219:デフォルトの名無しさん
21/01/11 14:52:41.81 SkhM8/Y0.net
>>196 C++ O(N log N)
セグメント木を使うと区間 max の二分探索を O(log N) で行える
atcoder の aclib を使用
URLリンク(wandbox.org)

220:デフォルトの名無しさん
21/01/11 15:14:59.89 WVZOdukT.net
>>214
しゅんごい

221:デフォルトの名無しさん
21/01/14 09:22:07.11 0HXe7q2K.net
お題
将棋のルールで可能な最初の2手を全て求める。

222:デフォルトの名無しさん
21/01/14 11:00:00.08 5lV9HJJA.net
なるほど
(∞,0)のみからなるリストから始めて(-値、インデックス)についての辞書式順序(ただしインデックスは降順)でリストに追加していくと考えればいいのか
i番目の要素(v,i)が来た時(u,h)<(w,j)の間に入るならvより大きい最大のインデックスはjだからi番目の出力はi-jになるのか

223:
21/01/14 18:33:59.62 m1G/9nsv.net
>>216
すてきなお題ですね!

224:デフォルトの名無しさん
21/01/14 19:35:36.96 oX4ff6VG.net
>>216
先手後手ともに可能性が30通りあるのでそれらを単純に組み合わせて出力すれば良い

225:デフォルトの名無しさん
21/01/14 19:43:46.53 HoJSCLGU.net
3手なら面白いけど2手ならつまらんな

226:デフォルトの名無しさん
21/01/16 10:11:02.80 CT7MjBNX.net
最初の初期状態の配置ならつまらんね
途中経過のどの状態からでもすべての2手(3手でもいいよ!)を出力とかなら
本格的な将棋プログラム組まないと導き出せない

227:デフォルトの名無しさん
21/01/16 19:29:58.68 GH8NFez6.net
投了も一手ですか

228:デフォルトの名無しさん
21/01/19 19:16:59.47 Sd54NdA6.net
iZ-Cでサンプルログラムを書き始めました見てね
URLリンク(sun)


229:asunax.hatenablog.com



230:デフォルトの名無しさん
21/01/22 23:33:42.04 YvJFxrRj.net
お題:sortしてreverseしてforeachせよ
URLリンク(ideone.com)
List(7, 8, 3, 6, 4).sorted.reverse.foreach(print)

231:224
21/01/22 23:35:12.02 YvJFxrRj.net
>>224 rust
URLリンク(ideone.com)
fn main() {
let mut v = [7, 8, 3, 6, 4];
v.sort();
v.reverse();
v.iter().for_each(|x| println!("{}", x));
}
>>224 dart
URLリンク(ideone.com)
void main() {
var a = [7, 8, 3, 6, 4];
a.sort();
a.reversed.forEach(print);
}

232:224
21/01/22 23:37:05.96 YvJFxrRj.net
>>224 ocaml
URLリンク(ideone.com)
List.iter print_int (List.rev (List.sort Pervasives.compare [7; 8; 3; 6; 4]))
>>224 ruby
URLリンク(ideone.com)
[7, 8, 3, 6, 4].sort.reverse.each(&method(:p))
>>224 octave
URLリンク(ideone.com)
arrayfun(@disp, flip(sort([7 8 3 6 4])))

233:デフォルトの名無しさん
21/01/23 01:20:49.53 a67PVVr/.net
>>224 C++
for (auto i : multiset<int, greater<int>>({ 7, 8, 3, 6, 4 })) cout << i << endl;

234:9
21/01/23 02:47:09.23 ujFWsLg6.net
>>224 Perl5
print reverse sort qw(7 8 3 6 4);

実行結果
$ perl 19_224.pl
87643

235:9
21/01/23 02:50:17.66 ujFWsLg6.net
>>224 Perl5、foreach も要るんやったね…
print foreach reverse sort qw(7 8 3 6 4);
実行結果
$ perl 19_224.pl
87643

236:デフォルトの名無しさん
21/01/23 08:37:55.12 Q7562aLA.net
>>224 Bash
cat <<EOS | sort -r | while read v; do echo ${v}; done
7
8
3
6
4
EOS
>>224 Ruby
[7, 8, 3, 6, 4].sort_by(&:-@).each{p _1}

237:デフォルトの名無しさん
21/01/23 09:17:41.00 hW9MnAUE.net
>>229
> print foreach reverse sort
perlってこんな気持ちいい書き方できる言語やったんけ
正直恐れ入った

238:デフォルトの名無しさん
21/01/23 19:28:56.89 7cx92kva.net
お題: 俺のチ〇コの長さ分だけfor文でカウントしてカウント変数を出力せよ

239:デフォルトの名無しさん
21/01/23 19:32:36.06 MJXAM7AO.net
print "9"

240:デフォルトの名無しさん
21/01/23 20:01:06.10 iIWri5S9.net
>>232
perl
for ($i = 0; $i < 1; $i += 0.1) { print "$i\n" }

241:蟻人間
21/01/23 21:37:12.62 b5t030Zm.net
お題: 日付をYYYYMMDD形式で表したとき、それを表す整数が今日より後に素数になる日付を求めなさい。

242:デフォルトの名無しさん
21/01/23 23:19:53.94 Itdr917H.net
それを表す整数とは?

243:デフォルトの名無しさん
21/01/24 22:28:15.93 M/FZzV8o.net
>>224
Kotlin script
kotlinc コマンドで REPL にして直接入力して実行した時のコピー。(>>> はプロンプト)
出力は println() を使って1つづつ改行させた。
>>> listOf(7, 8, 3, 6, 4).sorted().reversed().forEach { println(it) }
8
7
6
4
3
>>>

244:デフォルトの名無しさん
21/01/25 14:58:49.27 IfPISeNx.net
お題:
整数 N が与えられます
長さ N の正整数列 A_1, ..., A_N であって以下の条件を満たす lcm(A_1, ..., A_N) が最小のものを求めなさい
・gcd(A_1, A_2) * gcd(A_2, A_3) * ... * gcd(A_{N-1}, A_N) * gcd(A_N, A_1) = lcm(A_1, ..., A_N)
制約:
3≦N≦4000
例:
入力: 5
出力: 6 15 35 77 22

245:デフォルトの名無しさん
21/01/25 16:12:04.01 83sbARL7.net
逆じゃね

246:デフォルトの名無しさん
21/01/25 17:27:32.13 +X0AlmLX.net
>>238 perl
print join ' ', (1) x $ARGV[0];

247:デフォルトの名無しさん
21/01/25 17:53:44.58 7Hdxu6ox.net
A の全ては互いに異なる
を入れ忘れた

248:デフォルトの名無しさん
21/01/25 17:58:02.52 4bSc4UCm.net
Aiの制約


249:で.... Aiが異なる正整数なら  N=5 [1,2,4,8,64] ->lcm=64 Ai>=3 なら  N=5 [5,7,14,6,15] -> lcm=210(=1*2*3*5*7)    (同じlcmで数列は複数作れる) ※あの例はどういう条件だろう



250:デフォルトの名無しさん
21/01/25 18:08:39.30 gx6uUcGg.net
>>238
gcd とか lcm って何?

251:デフォルトの名無しさん
21/01/25 18:09:29.39 7Hdxu6ox.net
すいません...
素数を小さい順に組み合わせて 2*3, 3*5, 5*7, 7*11, 11*2
とすると綺麗に数列が作れていいなーと思って投稿したのですが、最小ではなかったようです...
このお題は無かったことに

252:デフォルトの名無しさん
21/01/25 18:10:17.78 gx6uUcGg.net
あ、わかった。ググったら一発で出た。

253:デフォルトの名無しさん
21/01/25 18:11:02.14 gx6uUcGg.net
分かった途端に終了、か・・・

254:デフォルトの名無しさん
21/01/25 18:14:04.63 OnR5hlkf.net
没入感

255:デフォルトの名無しさん
21/01/25 19:20:16.85 +q31tGtg.net
お題、灘中入試っぽい問題
開始点S から、終点G まで、最短距離9 で移動する方法は、何通りあるか?
移動は右か下へ、1ずつ移動できるが、* は通れない所である。
数字は通れる所で、単に分かりやすくするために座標を書いただけで、移動コストではない
S23456
12*456
1234*6
123456
12345G

256:デフォルトの名無しさん
21/01/25 19:34:10.13 0+9yE5E1.net
プログラムなら実際に駒動かしてかぞえるの?
なんか、足し算引き算で出来そうだよね、

257:デフォルトの名無しさん
21/01/25 20:22:00.10 wN/P4Ly9.net
別名おねえさん問題

258:デフォルトの名無しさん
21/01/25 20:24:55.52 xOoQiCMv.net
>>250
その心は?

259:デフォルトの名無しさん
21/01/25 21:25:54.70 +X0AlmLX.net
>>248 sh
echo 48
#やっぱ計算しなきゃダメ?

260:248
21/01/25 21:35:28.96 +q31tGtg.net
お姉さん問題なら、
Ruby で、そのライブラリを使って解いてみて

261:248
21/01/25 21:48:23.33 +q31tGtg.net
超高速グラフ列挙アルゴリズム 〈フカシギの数え方〉おねえさん問題
BDD/ZDD の湊真一が、北大から京大大学院の教授へと出世してる

262:デフォルトの名無しさん
21/01/25 21:53:57.03 p4r3cpqk.net
URLリンク(ideone.com)
48ってなったからあってるのかな適当に作ったけど

263:デフォルトの名無しさん
21/01/26 00:35:19.40 rfDeWxg0.net
お題:
これ出題してみるか。
黒板に1~nの自然数が一つずつ書かれている。
二人でかわりばんこに次のルールで黒板に書かれた自然数を消していくゲームをする:
・自分の番のとき、黒板に残っている数から一つ選び、
 その数及びその数の約数をすべて消す。
・自分の番で黒板の数をすべて消し去ったとき勝者となる。
実はこのゲームはnによらず先攻必勝であるが、初手をどう打つかを判断するのは簡単でない。
1~30のすべての自然数nについて、後攻を勝たせないために初手で先攻が選ぶことができる数をプログラム中で5秒以内に計算し、すべて列挙せよ。

264:デフォルトの名無しさん
21/01/26 00:44:35.83 3iTHw7RX.net
1~30ならデータベース化してしまえばなんとかなるな

265:デフォルトの名無しさん
21/01/26 01:03:48.09 c6DHU6bT.net
>>255
簡単にするとこんな感じ?
URLリンク(ideone.com)

266:デフォルトの名無しさん
21/01/26 05:34:51.12 a1XSwUuB.net
>>248
9C4 - 3C1 * 6C3 - 6C2 * 3C1 + 3C1 * 3C1 * 3C1 = 48

267:デフォルトの名無しさん
21/01/26 12:22:51.81 V3RlvyIn.net
>>248 お受験風にdpで数え上げる Haskell test1 = "" ++ "┏┳━┳┳┓\n" ++ "┣┫ ┣┻┫\n" ++ "┣╋┳┫ ┃\n" ++ "┣╋╋╋┳┫\n" ++ "┗┻┻┻┻┛\n" to01 = let parseC c = if c == '\x2001' then 0 else 1 parseL = map ( parseC ) in map parseL . lines cntRoots posCrs = let z y x = zipWith ( * ) y $ zipWith ( + ) x $ ( 0 : ) $ z y x rs = id $ ( ( 1 : ( repeat 0 ) ) : ) $ zipWith z posCrs rs in rs nRoots = last . last . cntRoots main = print $ nRoots $ to01 test1 ---- 48



269:デフォルトの名無しさん
21/01/26 12:40:16.61 PXbbWA9f.net
>>248
再帰で全パターンやらせるようなのは誰もがやりそうなので他の人に任せるとして、後はやるとしたらスレッド使ってやるぐらいかねえ。再帰は再帰だけど、うまくいけば速く動きそう。(スレッド作るコストが高くて遅くなるかも知れんが)。
ま、しかし、今は麻婆豆腐定食食ってる最中なのでできない。後で時間が空いた時にまだ覚えてたら作ろう。

270:248
21/01/26 12:58:32.44 qsHPBWwm.net
総当たりから、* で通る経路を引くぐらいしか、思いつかない
>>260
漏れも、そういう木を考えた

271:デフォルトの名無しさん
21/01/26 13:12:00.37 V3RlvyIn.net
ちなみに>>260はお受験で出てくる
1 1 1 1 1 1
1 2 x 1 2 3
1 3 3 4 x 3
1 4 7 11 11 14
1 5 2 23 34 48
と上から順に数える方法です
Haskellのdpは読みにくい
オレの書き方が下手なだけか?orz

272:デフォルトの名無しさん
21/01/26 13:41:22.80 FaqYA5ze.net
最短でなくどんな経路でもいいんならこれになる
URLリンク(www.lab2.kuis.kyoto-u.ac.jp)

273:248
21/01/26 14:07:30.69 qsHPBWwm.net
開始点から数え上げるので良かったのか
漏れは、終点から数え上げる方法を考えていた

274:デフォルトの名無しさん
21/01/26 14:49:25.39 tY36E7UA.net
>>256
URLリンク(ideone.com)
最初の方は多分あってるの確認できたけど

275:デフォルトの名無しさん
21/01/26 16:29:06.62 5FaXTtsh.net
お題:以下のパイプを実現するプログラムprogを作りなさい
$ echo "1 + a" | prog
1a
$ echo "b + 3" | prog
3b
$ echo "2 + d + 1 + c" | prog
12cd

276:デフォルトの名無しさん
21/01/26 19:45:05.53 PXbbWA9f.net
>>267
Kotlin
URLリンク(ideone.com)
いやー。スマホで入力するのは大変だな。画面は小さいはエディタはまともにうごかんはで非常に疲れた。

277:デフォルトの名無しさん
21/01/26 20:34:09.94 a1XSwUuB.net
>>267 Ruby
$ echo "1 + a" | ruby -e"$><<gets.scan(/\w+/).sort.join"
1a
$ echo "b + 3" | ruby -e"$><<gets.scan(/\w+/).sort.join"
3b
$ echo "2 + d + 1 + c" | ruby -e"$><<gets.scan(/\w+/).sort.join"
12cd

278:デフォルトの名無しさん
21/01/26 20:56:27.12 MpuUt4AN.net
>>267
echo "1 + a" | perl -pe 's/[ +]+/\n/g'|sort|perl -pe 's/\n//'
1a
echo "b + 3" | perl -pe 's/[ +]+/\n/g'|sort|perl -pe 's/\n//'
3b
echo "2 + d + 1 + c" | perl -pe 's/[ +]+/\n/g'|sort|perl -pe 's/\n//'
12cd

279:デフォルトの名無しさん
21/01/26 21:08:55.48 a1XSwUuB.net
>>267
$ echo "2 + d + 1 + c" | sed "s/ *+ */\n/g" | sort | xargs | sed "s/ //g"
12cd

280:デフォルトの名無しさん
21/01/26 21:28:58.74 DzTvwUl0.net
ソートだなんて書いてないのに

281:デフォルトの名無しさん
21/01/26 21:32:05.97 AKScmGgq.net
>>272
は?

282:デフォルトの名無しさん
21/01/27 00:42:48.41 3F+KDe6B.net
>>266
答えも解き方もあってるとおもう
総当たり以外の方法で解けないかなと思ってるところだけど

283:デフォルトの名無しさん
21/01/27 01:36:50.37 1jPkLKqx.net
先手必勝が分かってるのに具体的な勝つ手は簡単に分からないもんなの?

284:デフォルトの名無しさん
21/01/27 07:22:52.84 uxRgmm/E.net
>>275
必勝手を簡単に導くアルゴリズムが、どこかにあるといいなと思います
ただ、そのアルゴリズムがわからなくても先手必勝は証明できます

285:デフォルトの名無しさん
21/01/27 07:33:58.36 6jP5tNbs.net
必勝手を指すのと必勝パターン数を計算するのはまた別物だしな

286:デフォルトの名無しさん
21/01/29 22:14:35.80 vFJJH28K.net
お題:
H×Wのマス目が与えられます。
始点'S'、終点'G'、通路'.'、壁'#'であり、壁や範囲外のマスは通ることができません。
また、始点と終点は隣り合っていないものとします。
いくつかの通路を壁に変更して、始点から終点に到達できなくするには
最小でいくつ壁が必要でしょうか?
[入力]
H W
(マス目を表す文字列)
[入出力例]
1 5
S...G
=> 1
3 3
S#.
#..
..G
=> 0
4 4
....
.S..
..G.
....
=> 4


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