X



プログラミングのお題スレ Part19
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2020/11/30(月) 00:04:05.21ID:TF2Czp0y
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

※前スレ
プログラミングのお題スレ Part18
https://mevius.5ch.net/test/read.cgi/tech/1594702426/
0002デフォルトの名無しさん2020/11/30(月) 00:27:32.09ID:OK+46EGm
const array = ['乙', '1', '>', '>'];
for(let i = 0; array.length > 0;) {
console.log(array.pop());
}
0004デフォルトの名無しさん2020/11/30(月) 01:19:09.34ID:7QMEfWyp
>>1
>>http://mevius.2ch.net/test/read.cgi/tech/1594702426/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
0008デフォルトの名無しさん2020/11/30(月) 03:40:18.85ID:r8rQ87Qr
サブ配列とは、連続している領域の事か?
どこかで、こういう問題を見た事があるような気がする

これで、配列の前後がつながっている、循環バージョンもやってみれば?
0009デフォルトの名無しさん2020/11/30(月) 11:41:04.85ID:6DeIDSHb
前スレ>>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
001092020/11/30(月) 21:53:55.46ID:Nq7K7NhK
>>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
0011デフォルトの名無しさん2020/12/01(火) 03:38:48.56ID:G7RpB3vG
前スレ>>971

前スレ 994 の Java のやつを見て Kotlin script に変換。

java.time.DayOfWeek.values().map { it.name.toLowerCase().capitalize() }.forEach(::println)

991 は java.text.DateFormatSymbols 使ったから順序を変える必要があったが
java.time.DayOfWeek 使えばその必要なかったんだな。
0012デフォルトの名無しさん2020/12/01(火) 04:25:32.84ID:sHsQRN1l
前スレ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())
}
}
0015デフォルトの名無しさん2020/12/03(木) 08:11:48.55ID:fc8MC3E0
大半のお題がどっかで既出だろう。
0017◆QZaw55cn4c 2020/12/03(木) 21:27:43.26ID:8BqExPKj
宿題でもおK
0019デフォルトの名無しさん2020/12/04(金) 02:56:19.58ID:2+VKdPy1
蟻人間
クソスレ立てて
一人芝居
即効バレて
自演失敗

作ろう!ウェブアプリ開発コンテストPart1
https://mevius.5ch.net/test/read.cgi/hp/1605200346/
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:???
トリップそのままとか斬新な自演ですね(笑)


一人ママゴト楽しい?
0023蟻人間 ◆T6xkBnTXz7B0 2020/12/04(金) 03:31:18.74ID:iyroy572
この番組は、殺伐とした5ちゃんねるにネタとうるおいをお届けする蟻人間とご覧のスポンサーの提供でお送り致します。


___提_供___


__蟻_人_間__
0024デフォルトの名無しさん2020/12/04(金) 19:37:28.84ID:5zEeUUrS
お題
格子点上にH×Wの矩形がある。
この矩形の辺上の格子点から3点を選んで三角形を作る。
三角形の作り方は何通りあるか?

[例]
H=1, W=1 => 4
H=2, W=3 => 110
H=987, W=654 => ?
0027デフォルトの名無しさん2020/12/05(土) 00:02:11.08ID:prgHYa7V
まあ辺が垂直と水平に限られるとは書いて無いけどそういう問題?
0028デフォルトの名無しさん2020/12/05(土) 00:18:14.11ID:xmmvLeAb
イヤ、格子状に並んでいる限りアフィン変換で通常の意味の格子になるやろ
0029デフォルトの名無しさん2020/12/05(土) 00:45:26.18ID:xmmvLeAb
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組

な気がする
0031デフォルトの名無しさん2020/12/05(土) 08:59:53.39ID:e3dDslST
>>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
じゃないの?
0035デフォルトの名無しさん2020/12/05(土) 09:15:41.52ID:9/0cDzrv
コンビネーションって高校じゃなかったっけ?
まあ、31は24と30の反論になってないから(むしろ論を補強してる)、
意味がよく分からない指摘だというのは同意。
0036デフォルトの名無しさん2020/12/05(土) 09:26:57.24ID:e3dDslST
イヤ、だってH=987, W=654の時どうしますか?
がお題だけど
こコレ
「まともに3282C3=5,886,638,960通りから直線に並ぶ場合を抜くとどえらい計算になります。どうしますか?」
という意味にしか見えないんけど
コレが辺上だけじゃなくて内点も走るならともかく、辺上しか走らないならどうしますかもへったくれもない
0037デフォルトの名無しさん2020/12/05(土) 09:32:49.97ID:wyyz8Yxy
>>36
ああ、そういう文脈で言ってたのね
ただ問題文で辺上って言われてるし、しかも2x3の例からもそれは明らかなんで
ぱぱぱっと計算して終わりで良いんじゃないの
0038デフォルトの名無しさん2020/12/05(土) 09:52:46.86ID:CtYOdxNe
>>24
(h + w) * ((h + w - 1)^2 + h * w) が答えだな。
たかがこんな計算を凄いと思えちゃう>>33君かわいい。
0039デフォルトの名無しさん2020/12/05(土) 09:53:01.14ID:e3dDslST
まぁじゃババっと
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
0042デフォルトの名無しさん2020/12/06(日) 04:56:07.06ID:KfTg6Pxo
マウンティングのとりあい、カッコ悪い
0043デフォルトの名無しさん2020/12/06(日) 09:12:18.95ID:ikxyNJRG
当人同士が反目し合ってるわけじゃないのに外野が騒いでるのがなんとも
0045デフォルトの名無しさん2020/12/06(日) 14:34:10.80ID:oqBHe4TF
整数 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 -> ???
0048デフォルトの名無しさん2020/12/07(月) 01:07:51.20ID:owPfoMMb
>>47
クソスレ立てるなカス

作ろう!ウェブアプリ開発コンテストPart1
https://mevius.5ch.net/test/read.cgi/hp/1605200346/
111 蟻人間 ◆T6xkBnTXz7B0 sage 2020/12/05(土) 17:53:48.82 ID:???
☆★☆テナント募集中☆★☆
スレッド終了のため、一緒にスレッドを盛り上げてくれる
イベント企画が出来る方を募集しています。
まずはご連絡下さい。
株式会社突撃商会 TEL 03-XXXX-XXXX
0051デフォルトの名無しさん2020/12/07(月) 14:21:20.37ID:8Ddysj0U
お題
表が連続する長さの平均を求めてください

入力: 裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表
0052デフォルトの名無しさん2020/12/07(月) 15:32:20.36ID:78t68E9P
>>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
0053デフォルトの名無しさん2020/12/07(月) 18:45:30.74ID:Ao/BDdnQ
>>51 Ruby
Str = '裏裏表裏裏表裏裏裏表裏裏裏表表裏表裏裏表裏裏裏裏表表表表表裏表表裏裏表裏表表裏表表表表表裏裏裏裏裏表表表表裏表表表表裏表表表裏表表表裏裏表裏裏表表裏裏表裏表表表裏裏裏裏裏表表表表表裏表表裏表裏裏表裏表'

series = Str.scan( /表+/ )
puts series.sum(0.0){|s| s.size } / series.size
0054デフォルトの名無しさん2020/12/07(月) 19:47:31.22ID:m3NDFPid
>>49
クソスレ立てるな

すき家とかかつやみたいな和食屋で外国人雇うな
https://mevius.5ch.net/test/read.cgi/tech/1607138691/
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
いわゆるスクレイピングって言う技術だけど、それ以上のことがしたいんだ。

ホームページの構成要素を破壊するような動画を作りたい。まあ、実際に破壊する訳じゃないけど、ハッカーになりたい子どもたちの娯楽として役に立つらしい。
0059デフォルトの名無しさん2020/12/08(火) 15:44:35.89ID:jRmhdWmE
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13212452128
なぜですか?

質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。
0061デフォルトの名無しさん2020/12/08(火) 22:48:35.65ID:pGXopNTt
ヤフー知恵袋スマホで見たらどこがサイト本体なのかわからねえなゴミ袋かよ
0062デフォルトの名無しさん2020/12/10(木) 18:22:03.94ID:uygr7FQy
>>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行にする方法が思いつかなかった
0063デフォルトの名無しさん2020/12/10(木) 18:37:00.38ID:uygr7FQy
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)
0065デフォルトの名無しさん2020/12/10(木) 18:41:01.74ID:WBenXu2r
書き込みミスったすまん
print((lambda a: sum(a) / len(a))([len(x) for x in input().split("裏") if x != ""]))
0068デフォルトの名無しさん2020/12/11(金) 12:19:49.95ID:OZejrzeq
>>51 Python
print((lambda a: a.count("表")/(a+"裏").count("表裏"))(input()))
0071蟻人間 ◆T6xkBnTXz7B0 2020/12/12(土) 21:23:14.60ID:Tjq2nQZU
お題:
プログラム言語X1では32ビットの符号なし整数と32ビットの符号付き整数が使える。
しかし、プログラム言語X2では32ビットの符号なし整数が使えず、32ビットの符号付き整数が使える。
このままではX1からX2への移植が困難である。
そこで、X2において与えられた32ビットの整数を符号なしと見なした値を10進数文字列化せよ。
0072デフォルトの名無しさん2020/12/12(土) 21:29:50.06ID:My1CH9nH
>>71
クソスレ立てるな自演野郎

作ろう!ウェブアプリ開発コンテストPart1
https://mevius.5ch.net/test/read.cgi/hp/1605200346/
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:???
トリップそのままとか斬新な自演ですね(笑)


一人ママゴト楽しい?
0073デフォルトの名無しさん2020/12/12(土) 21:30:30.92ID:My1CH9nH
>>71
クソスレ立てるな

すき家とかかつやみたいな和食屋で外国人雇うな
https://mevius.5ch.net/test/read.cgi/tech/1607138691/
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
いわゆるスクレイピングって言う技術だけど、それ以上のことがしたいんだ。

ホームページの構成要素を破壊するような動画を作りたい。まあ、実際に破壊する訳じゃないけど、ハッカーになりたい子どもたちの娯楽として役に立つらしい。
0074デフォルトの名無しさん2020/12/12(土) 22:53:12.12ID:gPUrwTXi
>>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)…
0079蟻人間 ◆T6xkBnTXz7B0 2020/12/13(日) 08:24:11.25ID:zFOj0dh9
お題:
符号なし演算ができない言語X2において、2個の32ビットの符号付き整数x, yがあたえられる。x, yを符号なし整数x', y'と見なしたときの比較演算 x' < y' の値を求めよ。
0081蟻人間 ◆T6xkBnTXz7B0 2020/12/13(日) 08:38:30.36ID:zFOj0dh9
>>78
素晴らしい回答ですね。少し簡単に解説してくれませんか?
出題者がおバカですみません。
0082デフォルトの名無しさん2020/12/13(日) 09:01:54.89ID:LzHmnmLv
えっ??
頭おかしいだけかと思ってたらホントに馬鹿なんだなw
右シフトとマスクでマイナス値は正の値に直す。右シフト1で1/2
更に5で割って1/10。これで10の位から上の値になる
上の割る5で切り捨てられた余りの2倍(左シフト1)と右シフトで捨てられたLSBを足して1の位
0085蟻人間 ◆T6xkBnTXz7B0 2020/12/13(日) 15:18:39.67ID:zFOj0dh9
>>84
ちょっと動作が遅いね。どちらも正だった場合は普通に比較できるんだから、マイナスありとなしで場合分けできるんじゃね。
0088デフォルトの名無しさん2020/12/14(月) 07:19:49.11ID:nk+3ocmA
>>79 Julia
function f(x , y)
  if (x >= 0) == (y >= 0)
  x > y
  else
  !(x > y)
  end
end
0089デフォルトの名無しさん2020/12/14(月) 14:05:29.33ID:y4v5rW/c
今年考えたがボツにした、イマイチ問題より
[お題]
 整数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に準拠
 https://ja.wikipedia.org/wiki/%E7%B4%84%E6%95%B0#%E7%B4%84%E6%95%B0%E3%81%AE%E5%80%8B%E6%95%B0
0090デフォルトの名無しさん2020/12/14(月) 15:38:14.40ID:JA72696N
お題:
整数 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つだけを選んでもいい)
0091デフォルトの名無しさん2020/12/14(月) 16:58:04.24ID:JA72696N
>>89
エラトステネスっぽく√Nまでで約数を考えていけばいいかな?
それ以上は対称性から*2すればよくて、二乗数の時だけ注意

それで
B以下の約数の個数の和-A未満の約数の個数の和
をする
0095デフォルトの名無しさん2020/12/14(月) 20:38:42.92ID:R5T0tffH
>>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!"=="!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
0096デフォルトの名無しさん2020/12/14(月) 22:49:37.32ID:IVz7Drzo
>>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
0097デフォルトの名無しさん2020/12/15(火) 00:08:49.86ID:SWKOmgAZ
>>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
0098デフォルトの名無しさん2020/12/16(水) 11:44:45.67ID:xiQ1h/Hx
お題: テキスト内の指定の文字をタグで囲む関数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をタグで囲む関数である
0100デフォルトの名無しさん2020/12/16(水) 18:16:34.26ID:4lTbtOkg
>>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🎅!
0101デフォルトの名無しさん2020/12/16(水) 19:58:22.95ID:DkI2bGpO
>>98
この正規表現を関数にするのか?

IFxU2W - Online Perl Interpreter & Debugging Tool - Ideone.com
https://ideone.com/IFxU2W

$c = 'a';
$l="<";
$r=">";

while(<>){
s/$c/$l$c$r/g;
print;
}
0103デフォルトの名無しさん2020/12/18(金) 11:06:13.73ID:lt1DqoeP
お題
値のペアが複数入力されます
1列目の値でソートしてユニーク化し、2列目の値を出力してください
1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもののみを出力してください

入力
c,e
b,c
c,f
b,d
a,b
c,g

出力
a,b
b,c
c,e
0104デフォルトの名無しさん2020/12/18(金) 11:48:54.35ID:2oY35fJZ
> 1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもの〜

と書かれてるがそのソート方法は

> 1列目の値でソート

としか書かれてない
これでは例えば
c,e
c,f
は出現順なのか、はたまた2列目の値も使って昇/降順にするのかわからない
0105デフォルトの名無しさん2020/12/18(金) 11:55:17.73ID:f5tAtt/1
>>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
0106デフォルトの名無しさん2020/12/18(金) 12:09:30.98ID:lt1DqoeP
>>104
逆にどっちだと思います?
0107デフォルトの名無しさん2020/12/18(金) 12:52:01.21ID:1RoKReGQ
出現順という言葉が使われていないから、出現順ではない。
2列目もソートすべき

ソートの仕方は書いていないので、文字列でよい
0109デフォルトの名無しさん2020/12/18(金) 14:23:00.18ID:A9pQAhpY
>>103
C++
入力を競プロぽく改変
https://ideone.com/CUTjOy

#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;
}
0110デフォルトの名無しさん2020/12/18(金) 16:16:25.17ID:P9OguxeC
>>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
0111デフォルトの名無しさん2020/12/18(金) 18:24:57.63ID:udnU9JLz
>>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
0112デフォルトの名無しさん2020/12/18(金) 19:01:11.88ID:Dh0d5aQR
お題: ランダムに生成されるバイナリツリーがある
ツリーのルートから見て最も左にあるノードと最も右にあるノードの位置を出力せよ
位置はツリーのルートが原点とする
x座標は原点から左に進むとマイナスになり、右に進むとプラスになる
y座標は原点から下に進むとプラスになるものとする
生成されるツリーは原点から下に向かって伸びていくものとする
生成されるツリーの最大の高さは8とする
出力例は↓のようになる

l = -3, 4
r = 5, 7
0116デフォルトの名無しさん2020/12/19(土) 09:08:43.96ID:Hvq3yNww
>>103 J
a =: /:~ ',' & cutopen @ >cutopen stdin ''
f =: >@{. , ','&,@>@{:
smoutput f"1 a #~ ~: {. "1 a
011892020/12/19(土) 14:32:22.06ID:gCQF7SSG
>>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
0121892020/12/20(日) 03:24:48.64ID:zjFPqMXn
>>89

https://ideone.com/lQvahn
投稿があった、O(√)以外の方法もあるみたいなので、両方を載せておこう。
他方は、O(N)解法の最後の方の同じ数をまとめて計算するやり方。
O(√)解法より確実に計算量が多い。
0122デフォルトの名無しさん2020/12/20(日) 14:30:37.82ID:ocWFq0h7
>>98
Kotlin 及び Kotlin script

target_char の場合

fun wrap(text: String, target_char: Char, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_char.toString(), "$tag_left$target_char$tag_right")

target_str の場合

fun wrap(text: String, target_str: String, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_str, "$tag_left$target_str$tag_right")

要するに Java の String クラスの replace() 使ってるので、肝心な部分は何も考えてない。
tag_left, tag_right はデフォルト値として '<', '>' を指定しているので呼び出す側で指定しなければこれになる。

もう少しだけ Kotlin らしくするとしたら拡張関数にするぐらいかな。

fun String.wrap(target_str: String, tag_left: Char = '<', tag_right: Char = '>') = replace(target_str, "$tag_left$target_str$tag_right")

これで String クラスのメソッドになるので "abcabc".wrap("bc") が "a<bc>a<bc>" を返すようになる。
0124デフォルトの名無しさん2020/12/20(日) 18:33:53.02ID:1LcS4Wc6
>>98 JavaScript
const wrap = (text, target_str, tag_left='<', tag_right='>') => text.replace(RegExp(target_str, 'g'), tag_left + target_str + tag_right);
0126デフォルトの名無しさん2020/12/23(水) 21:01:46.74ID:IGuwyxwv
[お題] 和が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秒以内
0131デフォルトの名無しさん2020/12/29(火) 19:09:26.95ID:v9CXwjD7
>>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 が中でやっているソートのアルゴリズムが変われば変わるかも知れない。
0132デフォルトの名無しさん2020/12/29(火) 19:20:00.18ID:v9CXwjD7
a[a.lastIndex][0] の部分は a.last().first() と書いても同じだった。
この方が a.lastIndex 呼ばない分だけ無駄が少ないかも知れない。
(でもコンパイラが中で適当に最適化して同じになるかも知れないのでどうでも良いかな?)
0133蟻人間 ◆T6xkBnTXz7B0 2020/12/29(火) 19:38:06.80ID:akpvTOL3
お題: 半径dの円にぴったり内接する正n角形を描画せよ。
0135デフォルトの名無しさん2020/12/29(火) 20:34:46.26ID:bi9fPEgs
ぴったり内接ってなんだよって言おうとしたらすでに言われててくっそワロタ
0136デフォルトの名無しさん2020/12/29(火) 20:53:58.41ID:2gsaGKLd
量子化誤差を最小化した演算を求めているのでは?
我々は実数を扱えないので。
0137デフォルトの名無しさん2020/12/29(火) 21:00:08.04ID:2gsaGKLd
n角形をなす線分が円の外側に飛び出さないよう注意を与えているのかもしれない。

実数を扱えない以上、注意する必要が有る。
ということを示唆するのかも。
0138デフォルトの名無しさん2020/12/29(火) 21:24:43.03ID:0mXsQANw
>>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);
}
}
0140デフォルトの名無しさん2020/12/30(水) 13:44:24.04ID:tmlECeYE
[お題] 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>
0142デフォルトの名無しさん2020/12/30(水) 20:26:27.99ID:nFum3l+K
>>141
はい、blockquoteは
"> > "のように"> "の繰り返しで始まる行としてください。
簡単のために">>"のような入力は考慮不要として下さい。
0143デフォルトの名無しさん2020/12/30(水) 21:20:22.80ID:YQYWYr/5
お題
文字列を数値文字参照に変換してください

入力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
出力: &#120473&#120475&#120472&#120464&#120475&#120458&#120470&#120470&#120466&#120471&#120464&#32&#120460&#120465&#120458&#120469&#120469&#120462&#120471&#120464&#120462&#120476
0148デフォルトの名無しさん2020/12/30(水) 22:36:28.16ID:p/cFtMuj
>>146は不正なUnicode文字列の入力を考慮していませんでした
高位サロゲートが低位サロゲートを伴わず単独で現れていると、その直後の文字が抜け落ちます
つまり
"<\ud83c>" → "&#60;&#55356;&#62;" ではなく
"<\ud83c>" → "&#60;&#55356;" になってしまう

修正版: https://ideone.com/bz8cMe
0149デフォルトの名無しさん2020/12/31(木) 01:13:45.28ID:pjMyqahK
すごいどうでもいいことなんだけど、
ArrayListってどういうデータ構造なの?
ArrayなのそれともListなの?
おじさんわからないよ。。
0150デフォルトの名無しさん2020/12/31(木) 12:16:39.07ID:RvVxXqDc
>>149
お題
array listを実装してください

次の要項を満たしてください
・add, removeができること
・サイズが可変であること
・序数で要素にアクセスできること
・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
0154デフォルトの名無しさん2020/12/31(木) 21:26:18.83ID:RvVxXqDc
>>153
実装して
0159デフォルトの名無しさん2021/01/02(土) 15:11:50.57ID:gpIsEKdn
>>150
この問題の要件は

>・要素へのアクセスの計算量はO(1)もしくはO(log n)であること

だけでいいのかな?
コレだけでいいならデータの更新時に常に深さが±1の二分木に納直せば必ず参照の計算量はO(log(n))になるし、毎回ソートして格納し直せば参照の(indexによる)計算量はO(1)になる希ガス
データの更新時の制限は全くないでいいのかな?
0160デフォルトの名無しさん2021/01/02(土) 21:54:03.91ID:YfZD//vW
メモリが安くなったとはいえ
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので
0161蟻人間 ◆T6xkBnTXz7B0 2021/01/04(月) 22:40:39.15ID:RRkyDjZk
お題: 四方に広がる無限のサイズの方眼紙があって、1マス1マスに一個のアラビア数字を一度だけ記入できる。
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)
0162蟻人間 ◆T6xkBnTXz7B0 2021/01/04(月) 22:51:58.92ID:RRkyDjZk
補記。

マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。

また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。
0163デフォルトの名無しさん2021/01/05(火) 22:28:39.68ID:JVpboZJX
お題: ランダムな数列を生成せよ
数列の長さは4 <= len <= 20とし、これもランダムとする
0165デフォルトの名無しさん2021/01/06(水) 10:45:40.05ID:0+tWp1dI
>>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)
0167デフォルトの名無しさん2021/01/06(水) 14:12:34.77ID:0ypUbOKE
>>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 なので自動で出力されている。
0168デフォルトの名無しさん2021/01/06(水) 19:38:44.63ID:ySlgJWsk
>>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'
0169デフォルトの名無しさん2021/01/06(水) 23:58:46.35ID:N14y+/j1
お題
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください

入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
0170デフォルトの名無しさん2021/01/07(木) 00:11:25.06ID:bv7Qweso
意味不明な途中省く
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk
0171デフォルトの名無しさん2021/01/07(木) 00:20:29.22ID:iqGL0Mlk
省いちゃダメなの!
0172デフォルトの名無しさん2021/01/07(木) 00:29:54.66ID:Vd9hikpg
>>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
0173(u_・y)2021/01/07(木) 00:56:12.00ID:oTn3YI8v
>>169
# Ruby3.0
x = ("a".."k")
x.inject{
p _1
_1 + _2
}
017592021/01/07(木) 02:13:26.61ID:t9BUPUyy
>>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
017692021/01/07(木) 02:17:47.93ID:t9BUPUyy
つか、これでよかったわ

@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
0177デフォルトの名無しさん2021/01/07(木) 11:50:26.21ID:oTn3YI8v
お題
オセロのようなルールでひっくり返しを行う処理を実装せよ

変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒

入力:01202113112120
出力:01202222222120
0178デフォルトの名無しさん2021/01/07(木) 11:52:33.15ID:oTn3YI8v
ちょい訂正
3 = 今のターンで置いた白だった
0179デフォルトの名無しさん2021/01/07(木) 12:05:34.54ID:TYHzopEy
>>177
それやと1が置かれたのか2が置かれたのかわからないのでは?
0123120のとき
1が置かれたとして0111120になるのか
2が置かれたとして0122220になるのか
わからない
0181デフォルトの名無しさん2021/01/07(木) 12:32:35.52ID:TYHzopEy
>>177
haskell

twosTurn x = let
( pre, ( '3' : post ) ) = 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
0182デフォルトの名無しさん2021/01/07(木) 12:50:45.25ID:sEmeEMut
>>177 Ruby
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }
01831822021/01/07(木) 13:05:54.80ID:sEmeEMut
>>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' )
0184デフォルトの名無しさん2021/01/07(木) 20:21:05.95ID:n2K5l1bF
仕様を出来るだけ簡潔にしたかったんだろうけどやり過ぎてモヤる
下位から
第1bit 駒有無
第2  駒種別
第3  now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now

と置いてnowの結果を出力の方が良くね
0185デフォルトの名無しさん2021/01/07(木) 21:58:01.92ID:pRSWPdMl
この問題の本命は、オセロを作るっていうお題にしたつもりじゃないからw
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な
0186デフォルトの名無しさん2021/01/08(金) 02:42:54.86ID:pELUdJTO
>>184
お前がそういうお題を新たに出せば良い。
0187デフォルトの名無しさん2021/01/08(金) 07:57:49.81ID:AIrixKby
>>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
0190デフォルトの名無しさん2021/01/09(土) 03:00:30.54ID:yzrxyAxR
>>169
Perl5

コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)

perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'
0192デフォルトの名無しさん2021/01/09(土) 08:04:43.95ID:7SSQ0Zys
>>169 Ruby
def f(a,b)
(a..b).map{|c| [*a..c]*""}
end
puts f("a","k")
0196デフォルトの名無しさん2021/01/09(土) 23:28:46.26ID:MPKG4kVI
お題
N個の時系列データが与えられる。i番目のデータはa_iである
i=1〜Nについて、以下の条件を満たすx_iを出力せよ
x_i : 直近c個でa_iが最大となるようなcのうち、最大のもの

[入力]
N
a_1 a_2 ... a_N

[出力]
x_1 x_2 ... x_N


(例1)
5
3 1 2 6 6
=> 1 1 2 4 5

3 = max(3)
1 = max(1) //今までの中で最小
2 = max(1, 2) //直近2個で最大
6 = max(3, 1, 2, 6) //直近4個で最大 (直近3個でも最大だが、cの値として最大のものを選ぶ)
6 = max(3, 1, 2, 6, 6) //直近5個で最大(最大タイ)

(例2)
3
100 10 1
=> 1 1 1
0198デフォルトの名無しさん2021/01/10(日) 05:17:09.34ID:5hwhwjPe
>>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!
0202デフォルトの名無しさん2021/01/10(日) 09:45:08.12ID:aiEZ01BF
>>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]
02051582021/01/11(月) 02:25:11.67ID:HKU1hsOJ
>>143
Kotlin

>>194のJavaのやつを見て>>158のKotlinのやつを改造した。

https://paiza.io/projects/iNRMUv2Annc6YFqJjAO4wg

要するに >>158 を作っている時に String#codePoints() に気付いていなくて自作してしまったということだが、
Java 8 から追加されたメソッドのようなので、>>158は古い JVM ライブラリでも動くということではある。
0206デフォルトの名無しさん2021/01/11(月) 02:44:15.64ID:HKU1hsOJ
お題
>>196を小学生にも理解できるぐらいのやさしい日本語に翻訳せよ。
0208デフォルトの名無しさん2021/01/11(月) 03:11:51.27ID:yhMi8PUx
このスレの住人なら日本語分からなくても例だけ見れば普通に理解できるだろ
IQテストみたいなもんだ
0209デフォルトの名無しさん2021/01/11(月) 03:26:31.03ID:yIQfxhn8
>>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
0210デフォルトの名無しさん2021/01/11(月) 03:36:50.19ID:yhMi8PUx
>>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で打ち止め。
0211デフォルトの名無しさん2021/01/11(月) 12:34:34.25ID:kY9pcTJO
現在地から前に遡って見ていって自分と同じか小さい要素が続く数を
最初から最後まで求めるだけ
もっと早く一発で求める方法があるかは分からないけど
0212デフォルトの名無しさん2021/01/11(月) 12:57:43.66ID:ySa6yihW
>>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 の値
0215デフォルトの名無しさん2021/01/11(月) 15:14:59.89ID:WVZOdukT
>>214
しゅんごい
0216デフォルトの名無しさん2021/01/14(木) 09:22:07.11ID:0HXe7q2K
お題
将棋のルールで可能な最初の2手を全て求める。
0217デフォルトの名無しさん2021/01/14(木) 11:00:00.08ID:5lV9HJJA
なるほど
(∞,0)のみからなるリストから始めて(-値、インデックス)についての辞書式順序(ただしインデックスは降順)でリストに追加していくと考えればいいのか
i番目の要素(v,i)が来た時(u,h)<(w,j)の間に入るならvより大きい最大のインデックスはjだからi番目の出力はi-jになるのか
0219デフォルトの名無しさん2021/01/14(木) 19:35:36.96ID:oX4ff6VG
>>216
先手後手ともに可能性が30通りあるのでそれらを単純に組み合わせて出力すれば良い
0221デフォルトの名無しさん2021/01/16(土) 10:11:02.80ID:CT7MjBNX
最初の初期状態の配置ならつまらんね
途中経過のどの状態からでもすべての2手(3手でもいいよ!)を出力とかなら
本格的な将棋プログラム組まないと導き出せない
0222デフォルトの名無しさん2021/01/16(土) 19:29:58.68ID:GH8NFez6
投了も一手ですか
0223デフォルトの名無しさん2021/01/19(火) 19:16:59.47ID:Sd54NdA6
iZ-Cでサンプルログラムを書き始めました見てね
https://sunasunax.hatenablog.com
022892021/01/23(土) 02:47:09.23ID:ujFWsLg6
>>224 Perl5

print reverse sort qw(7 8 3 6 4);


実行結果
$ perl 19_224.pl
87643
022992021/01/23(土) 02:50:17.66ID:ujFWsLg6
>>224 Perl5、foreach も要るんやったね…

print foreach reverse sort qw(7 8 3 6 4);

実行結果
$ perl 19_224.pl
87643
0231デフォルトの名無しさん2021/01/23(土) 09:17:41.00ID:hW9MnAUE
>>229
> print foreach reverse sort

perlってこんな気持ちいい書き方できる言語やったんけ
正直恐れ入った
0232デフォルトの名無しさん2021/01/23(土) 19:28:56.89ID:7cx92kva
お題: 俺のチ〇コの長さ分だけfor文でカウントしてカウント変数を出力せよ
0235蟻人間 ◆T6xkBnTXz7B0 2021/01/23(土) 21:37:12.62ID:b5t030Zm
お題: 日付をYYYYMMDD形式で表したとき、それを表す整数が今日より後に素数になる日付を求めなさい。
0237デフォルトの名無しさん2021/01/24(日) 22:28:15.93ID:M/FZzV8o
>>224
Kotlin script

kotlinc コマンドで REPL にして直接入力して実行した時のコピー。(>>> はプロンプト)
出力は println() を使って1つづつ改行させた。

>>> listOf(7, 8, 3, 6, 4).sorted().reversed().forEach { println(it) }
8
7
6
4
3
>>>
0238デフォルトの名無しさん2021/01/25(月) 14:58:49.27ID:IfPISeNx
お題:
整数 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
0239デフォルトの名無しさん2021/01/25(月) 16:12:04.01ID:83sbARL7
逆じゃね
0242デフォルトの名無しさん2021/01/25(月) 17:58:02.52ID:4bSc4UCm
Aiの制約で....



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で数列は複数作れる)

※あの例はどういう条件だろう
0243デフォルトの名無しさん2021/01/25(月) 18:08:39.30ID:gx6uUcGg
>>238
gcd とか lcm って何?
0244デフォルトの名無しさん2021/01/25(月) 18:09:29.39ID:7Hdxu6ox
すいません...
素数を小さい順に組み合わせて 2*3, 3*5, 5*7, 7*11, 11*2
とすると綺麗に数列が作れていいなーと思って投稿したのですが、最小ではなかったようです...
このお題は無かったことに
0245デフォルトの名無しさん2021/01/25(月) 18:10:17.78ID:gx6uUcGg
あ、わかった。ググったら一発で出た。
0246デフォルトの名無しさん2021/01/25(月) 18:11:02.14ID:gx6uUcGg
分かった途端に終了、か・・・
0248デフォルトの名無しさん2021/01/25(月) 19:20:16.85ID:+q31tGtg
お題、灘中入試っぽい問題

開始点S から、終点G まで、最短距離9 で移動する方法は、何通りあるか?

移動は右か下へ、1ずつ移動できるが、* は通れない所である。
数字は通れる所で、単に分かりやすくするために座標を書いただけで、移動コストではない

S23456
12*456
1234*6
123456
12345G
0249デフォルトの名無しさん2021/01/25(月) 19:34:10.13ID:0+9yE5E1
プログラムなら実際に駒動かしてかぞえるの?

なんか、足し算引き算で出来そうだよね、
02532482021/01/25(月) 21:35:28.96ID:+q31tGtg
お姉さん問題なら、

Ruby で、そのライブラリを使って解いてみて
02542482021/01/25(月) 21:48:23.33ID:+q31tGtg
超高速グラフ列挙アルゴリズム 〈フカシギの数え方〉おねえさん問題

BDD/ZDD の湊真一が、北大から京大大学院の教授へと出世してる
0256デフォルトの名無しさん2021/01/26(火) 00:35:19.40ID:rfDeWxg0
お題:
これ出題してみるか。

黒板に1〜nの自然数が一つずつ書かれている。
二人でかわりばんこに次のルールで黒板に書かれた自然数を消していくゲームをする:
・自分の番のとき、黒板に残っている数から一つ選び、
 その数及びその数の約数をすべて消す。
・自分の番で黒板の数をすべて消し去ったとき勝者となる。

実はこのゲームはnによらず先攻必勝であるが、初手をどう打つかを判断するのは簡単でない。
1〜30のすべての自然数nについて、後攻を勝たせないために初手で先攻が選ぶことができる数をプログラム中で5秒以内に計算し、すべて列挙せよ。
0260デフォルトの名無しさん2021/01/26(火) 12:22:51.81ID:V3RlvyIn
>>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
0261デフォルトの名無しさん2021/01/26(火) 12:40:16.61ID:PXbbWA9f
>>248
再帰で全パターンやらせるようなのは誰もがやりそうなので他の人に任せるとして、後はやるとしたらスレッド使ってやるぐらいかねえ。再帰は再帰だけど、うまくいけば速く動きそう。(スレッド作るコストが高くて遅くなるかも知れんが)。

ま、しかし、今は麻婆豆腐定食食ってる最中なのでできない。後で時間が空いた時にまだ覚えてたら作ろう。
02622482021/01/26(火) 12:58:32.44ID:qsHPBWwm
総当たりから、* で通る経路を引くぐらいしか、思いつかない

>>260
漏れも、そういう木を考えた
0263デフォルトの名無しさん2021/01/26(火) 13:12:00.37ID:V3RlvyIn
ちなみに>>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
02652482021/01/26(火) 14:07:30.69ID:qsHPBWwm
開始点から数え上げるので良かったのか

漏れは、終点から数え上げる方法を考えていた
0267デフォルトの名無しさん2021/01/26(火) 16:29:06.62ID:5FaXTtsh
お題:以下のパイプを実現するプログラムprogを作りなさい

$ echo "1 + a" | prog
1a

$ echo "b + 3" | prog
3b

$ echo "2 + d + 1 + c" | prog
12cd
0268デフォルトの名無しさん2021/01/26(火) 19:45:05.53ID:PXbbWA9f
>>267
Kotlin
https://ideone.com/6Il455

いやー。スマホで入力するのは大変だな。画面は小さいはエディタはまともにうごかんはで非常に疲れた。
0269デフォルトの名無しさん2021/01/26(火) 20:34:09.94ID:a1XSwUuB
>>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
0270デフォルトの名無しさん2021/01/26(火) 20:56:27.12ID:MpuUt4AN
>>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
0274デフォルトの名無しさん2021/01/27(水) 00:42:48.41ID:3F+KDe6B
>>266
答えも解き方もあってるとおもう
総当たり以外の方法で解けないかなと思ってるところだけど
0275デフォルトの名無しさん2021/01/27(水) 01:36:50.37ID:1jPkLKqx
先手必勝が分かってるのに具体的な勝つ手は簡単に分からないもんなの?
0276デフォルトの名無しさん2021/01/27(水) 07:22:52.84ID:uxRgmm/E
>>275
必勝手を簡単に導くアルゴリズムが、どこかにあるといいなと思います
ただ、そのアルゴリズムがわからなくても先手必勝は証明できます
0278デフォルトの名無しさん2021/01/29(金) 22:14:35.80ID:vFJJH28K
お題:
H×Wのマス目が与えられます。
始点'S'、終点'G'、通路'.'、壁'#'であり、壁や範囲外のマスは通ることができません。
また、始点と終点は隣り合っていないものとします。

いくつかの通路を壁に変更して、始点から終点に到達できなくするには
最小でいくつ壁が必要でしょうか?

[入力]
H W
(マス目を表す文字列)

[入出力例]
1 5
S...G
=> 1

3 3
S#.
#..
..G
=> 0

4 4
....
.S..
..G.
....
=> 4
0279デフォルトの名無しさん2021/02/02(火) 12:20:18.38ID:Enz7FJce
お題:ニセコインを見つけよ

半年毎に数学板で出てくるお題

n枚のコイン(n≧3)の中から重さの違うニセコインを見つけには何回天秤つかえばよいか
なおどのコインも最低一回は天秤に乗せてニセコインが重いか軽いかも判定するものとする

答えは
e = ceiling( logBase 3 ( 2*n+2 ) )

さてさてこの回数で可能はそんなに難しくない
実際e行n列の1,0,-1からなる配列で

@どの行も1の数と-1の数が等しい(右の皿と左の皿に同じ数乗せる)
Aどの相異なる行u,vをとってもu ≠ ±v

となる配列が作れる
そこで n≧3 にたいしてこのような配列を出力するプログラムを作って下さい


3->
[[-1,0,1],[0,1,-1]]
10->
[[-1,0,1,-1,0,-1,1,1,-1,1],[0,1,-1,-1,0,0,0,-1,1,1],[0,0,0,0,-1,1,1,-1,-1,1]]

12->
[[-1,0,1,-1,0,-1,1,1,-1,0,0,1],[0,1,-1,-1,0,0,0,-1,1,-1,1,1],[0,0,0,0,-1,1,1,-1,-1,1,1,-1]

39->
[[-1,0,1,-1,0,-1,1,1,-1,0,0,-1,1,0,1,-1,-1,1,0,0,1,-1,-1,1,0,0,1,-1,-1,1,0,0,1,-1,-1,1,0,0,1],[0,1,-1,-1,0,0,0,-1,1,-1,1,-1,1,0,0,0,1,-1,1,-1,1,-1,-1,1,-1,1,-1,1,0,0,0,0,0,0,1,-1,1,-1,1],[0,0,0,0,-1,1,1,-1,-1,1,1,-1,-1,0,0,0,0,0,0,0,0,0,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1],[0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1]]
0280デフォルトの名無しさん2021/02/02(火) 12:31:29.80ID:Enz7FJce
訂正
× Aどの相異なる行u,vをとってもu ≠ ±v
◯ Aどの相異なる列u,vをとってもu ≠ ±v
0281◆QZaw55cn4c 2021/02/02(火) 20:23:20.94ID:82aiWtLs
>>279
偽コインは1枚ですか?複数ですか?
0282デフォルトの名無しさん2021/02/02(火) 20:40:30.09ID:uLQAjwWk
>>279
最初しか読んでないが、その条件では軽い方が偽物なのか重い方が偽物なのか決定することが不可能
0284デフォルトの名無しさん2021/02/02(火) 22:52:21.15ID:LQ6cge6d
>>282
今確かめてみたら合ってるようです

main = print $ [ ( n, ceiling $ logBase 3 $ fromInteger $ 2*n +2) | n<- [3..16] ++ [38..42]]

[(3,2),(4,3),(5,3),(6,3),(7,3),(8,3),(9,3),(10,3),(11,3),(12,3),(13,4),(14,4),(15,4),(16,4),(38,4),(39,4),(40,5),(41,5),(42,5)]

ちなみに軽重が確定しない=一度も乗せないのもありにすれば13枚でも3回で可能です
12回のときの解に「一度も乗せないコイン」を入れればいいだけなので
ちなみにn=12とn=39のときの解でそれぞれ3回、4回で可能

[[1,0,1,-1,0,1,-1,0,0,1,-1,-1],[0,1,-1,-1,0,0,0,1,-1,1,-1,1],[0,0,0,0,1,-1,-1,1,1,-1,-1,1]]

[[1,0,1,-1,0,1,-1,0,0,1,-1,1,-1,0,1,-1,-1,1,0,0,1,-1,-1,1,0,0,-1,1,0,0,1,-1,-1,1,0,0,1,-1,-1],[0,1,-1,-1,0,0,0,1,-1,1,-1,-1,1,0,0,0,1,-1,1,-1,1,-1,-1,1,-1,1,0,0,0,0,0,0,1,-1,1,-1,1,-1,1],[0,0,0,0,1,-1,-1,1,1,-1,-1,1,1,0,0,0,0,0,0,0,0,0,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,-1],[0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1]]
0286デフォルトの名無しさん2021/02/06(土) 00:55:18.45ID:pOHNi9wO
>>279
ちょっと盛り上がらないのでアルゴリズムの一例例示してみます
まぁここはプログラミングのスレだから数学部分はどうでもいいでしょう
構成法はほかにもいくつかあります
なお{1,0,-1}はうるさいので{1,0,2}にします
---
以下において{ }で囲まれた数は3進数表示とする
以下3進数表示した時
最高位が1でそれ以外が0であるものを10型、
最高位が2でそれ以外が0であるものを20型、
最高位が2で次に来る0でない数も1であるものを11型

と定めていき、自然数全体を10型、20型、11型、12型、21型、22型と6型に分類する
与えられた自然数のうち
@何もしない
A最高位のみ1⇔2の交換をする
B最高位以外1⇔2の交換をする
C全桁1⇔2の交換をする
で11型の変換できる
例えば{2201}=73であればCを適用して
f11(73)={1102}=38となる
同様にしてf12,f21,f22を定義しておく
では自然数eと3≦n≦(3^e-3)/2を満たす自然数nについて条件を満たす組みを構成する
まずn-eが奇数のときn-a-1をm、そうでないときはn-eをmとおく
前者のときケースA、後者のときケースBと呼ぶ
次にe桁以下の11型の数からケースAでは{111‥11}(e桁)を取り除いたものを、ケースBでは{111‥10}(e桁)を取り除いたものを並べたものを考える
(続く)
0287デフォルトの名無しさん2021/02/06(土) 00:55:35.94ID:pOHNi9wO
(続き)
この列の最初のm/2個を2個ずつ並べてm個にした列
{11},{11},{101},{101},{110},{101},{111}‥
にf11,f12,r21,f22を順に作用させていく
ただし桁が上がるごとにf11に戻す
最初の方を例示すれば11型の数を2個ずつ並べたものが
{11},{11}
{101},{101},{110},{110},{111},{111},{112},{112},
{1001},{1001},{1010},{1010},{1011},{1011},‥
だから
{11},{12}
{101},{102},{210},{220},{111},{122},{212},{221},
{1001},{1002},{2010},{2020},{1011},{1022},‥
となる
この列は偶数番目のどこで切っても各桁に現れる1の個数と2の個数は同数か1の方が2個多い事に注意する
また最低位では常に1の個数と2の個数は同数になる
よってケースAではe個の10型、もしくは20型の数を追加する事によって全てのくらいで1の個数がちょうど一個多くなるようにできる
またこの時列の長さはm+e=n-1個である
最後に{222‥22}を追加して条件を満たす列ができる
また同じくケースBではe-1個の10型、20型の数を追加して最低位だけ同数でそれ以外の桁では1の個数がちょうど一個多くなるようにできる
この時の列の長さはm+e-1=n-1個である
最後に{222‥20}を追加すれば良い
0288デフォルトの名無しさん2021/02/08(月) 23:53:36.54ID:rr62o0iF
数学は盛り上がらんねえ
028992021/02/09(火) 00:45:13.92ID:TwMhWx5Q
難問だけど
これ数学?
0290デフォルトの名無しさん2021/02/09(火) 01:03:59.69ID:pN3N76M5
盛り上がりませんね
解答例

https://ideone.com/cHEv2n

見栄え考えて"+ -"の三文字で表現してます
まぁ数学というわけでもないです
ただ数学板にはもう半年に一回くらい上がってくる
意外にネットでちゃんと解説してるサイトがない
0291デフォルトの名無しさん2021/02/10(水) 21:47:17.15ID:rSkriPOW
お題
整数 a_i が n_i 個ある。(1 <= i <= K)
このデータの中央値を求めよ。

[入力]
K
a_1 n_1
...
a_K n_K


[入出力例]
3
1 2
2 2
3 4
=> 2.5
{1, 1, 2, 2, 3, 3, 3, 3}の中央値は(2+3)/2=2.5

2
0 1000000000
1 999999999
=> 0
0294デフォルトの名無しさん2021/02/11(木) 04:22:35.31ID:JqJNLwXz
お題:機械翻訳しなさい

入力:this is a pen
出力:これはペンです
入力:is this a pen?
出力:これはペンですか?
0298デフォルトの名無しさん2021/02/16(火) 02:44:28.56ID:pZ2rkUjf
>>296
それだと3になるが、何か間違ってる?
0300デフォルトの名無しさん2021/02/16(火) 15:39:23.69ID:kKLrubPe
1,2,3,100 の場合
中央値は 2.5 ですか?
それとも 2 または 3 ですか?
0305デフォルトの名無しさん2021/02/16(火) 21:39:21.44ID:DqsYLnr9
要するにindexがa〜bならその中央値はfloor((a+b)/2)番目とceiling((a+b)/2)番目の平均
0306デフォルトの名無しさん2021/02/17(水) 02:38:49.68ID:wnjdp4RQ
お題:数字をスワップせよ
時刻とスワップ対象が以下のフォーマットで与えられる

yyyy/mm/dd hh:MM:ss
a
b

a,bに指定された数字をスワップせよ
例:
入力
2021/02/17 02:37:41
yyyy
MM

出力
37/02/17 02:2021:41
0307デフォルトの名無しさん2021/02/17(水) 02:55:09.43ID:Mw2HZr8o
>>299
ああ。そうか。
>>295はソート入れて修正した。
0313◆QZaw55cn4c 2021/02/19(金) 21:26:15.30ID:3tFNJrqv
>>312
連想配列はプラプライレブン以前の旧C++ ですら map で扱えていました、正規表現はどうなのか私はよく知りません‥‥
031792021/02/21(日) 17:08:49.59ID:0STFsetd
>>306 Perl5

$f = 'yyyy/mm/dd hh:MM:ss';
@w = $f =~ /(\w+)/g;
%h = map{$_ => [index($f, $_), length $_]} @w;
$f =~ s/\w+/\$$&/g;
$f = 'print "'.$f.'\n"';
($s, $p, $v) = <>; chomp ($p, $v);
@g = map{substr $s, $h{$_}[0], $h{$_}[1]} @w;
${$w[$_]} = $g[$_] for 0..@w;
($$p, $$v) = ($$v, $$p);
eval $f;


実行結果
https://ideone.com/5ZWolC
031892021/02/21(日) 17:45:26.06ID:0STFsetd
>>317 もっとコンパクトに書けるんだった…orz

$f = 'yyyy/mm/dd hh:MM:ss';
@w = $f =~ /(\w+)/g;
($s, $p, $v) = <>; chomp ($p, $v);
@g = $s =~ /(\d+)/g;
${$w[$_]} = $g[$_] for 0..@w;
($$p, $$v) = ($$v, $$p);
print "$yyyy/$mm/$dd $hh:$MM:$ss\n";


あるいはもっと
@w = qw{yyyy mm dd hh MM ss};
($s, $p, $v) = <>; chomp ($p, $v);
@g = $s =~ /(\d+)/g;
${$w[$_]} = $g[$_] for 0..@w;
($$p, $$v) = ($$v, $$p);
print "$yyyy/$mm/$dd $hh:$MM:$ss\n";
031992021/02/21(日) 23:56:18.66ID:9rEvZiNw
>>306 Perl5、もっと素直にすんなり書けるんだった…><

%h = qw{yyyy 0 mm 2 dd 4 hh 6 MM 8 ss 10};
($s, $p, $v) = <>; chomp ($p, $v);
@f = $s =~ /(?:(\w+)(\W?))/g;
@f[@h{$p, $v}] = @f[@h{$v, $p}];
print @f;


実行結果
https://ideone.com/ROZTJ8
0320デフォルトの名無しさん2021/02/24(水) 20:43:37.44ID:9WyyCWj2
お題:正の整数を入力として、後ろにアルファベットを2文字足して英語の基数詞を出力せよ
例) 入力=3 → 出力=3rd
  入力=19 → 出力=19th
  入力=2021 → 出力=2021st

ガイシュツかしら?
0321デフォルトの名無しさん2021/02/24(水) 20:47:15.38ID:CLu4HI+L
残念ながらガイシュツで、
海外のスゲー短いゴルフコードも紹介されてた希ガス
0323デフォルトの名無しさん2021/02/24(水) 21:11:11.90ID:MS8741jM
>>320 Ruby

f = ->n{n.to_s + %w[th st nd rd][n % 10 > 3 || n / 10 % 10 == 1 ? 0 : n % 10]}
puts (0..27).map{f[_1]} # =>
0th
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
10th
11th
12th
13th
14th
15th
16th
17th
18th
19th
20th
21st
22nd
23rd
24th
25th
26th
27th
032492021/02/24(水) 22:18:34.47ID:h//dFdby
>>320

プログラミングのお題スレ Part15
ttp://mevius.5ch.net/test/read.cgi/tech/1564310397/520
で回答したcode

%h = qw{1 st 2 nd 3 rd};
for (1..4,11,12,13,21,22,23,101,102,103,111,112,113,121,122,123, 2021) {
 /(\d?)(\d)$/;
 printf "$_ => $_%s\n", $1 eq 1 ? 'th' : $h{$2}//'th';
}
0327デフォルトの名無しさん2021/02/25(木) 08:26:43.63ID:zwLHSsIw
>>320

haskell

showOrd x = let
[ a, b ] = map ( mod ( x - 10 ) ) [ 10, 100 ]
s = show x
in case () of
_ | b < 10 -> s ++ "th"
_ | a == 1 -> s ++ "st"
_ | a == 2 -> s ++ "nd"
_ | a == 3 -> s ++ "rd"
_ -> s ++ "th"

main = mapM_ putStrLn [ showOrd x | x <- [ 1..30 ] ]
0329デフォルトの名無しさん2021/02/25(木) 21:07:06.25ID:AjdVnyQn
お題:解析不能なでたらめな計算を行いなさい。
0331デフォルトの名無しさん2021/02/26(金) 20:41:12.87ID:VIwm/s4p
お題:1から100までFizzBuzzせよ

1から100までの数字を印刷するプログラムを作成します。
ただし、3の倍数の場合は数字の代わりに「Fizz」を出力し、
5の倍数の場合は「Buzz」を出力します。
3と5の両方の倍数である数の場合は「FizzBu​​zz」を出力します。

ocaml
https://ideone.com/cPM0O8
0335デフォルトの名無しさん2021/02/27(土) 04:03:19.58ID:Npk4kHio
>>331
Kotlin script

(1..100).forEach{n->println("${((if(n%3==0)"Fizz" else "")+(if(n%5==0)"Buzz" else "")).let{if(it=="")n.toString()else it}}")}
0337デフォルトの名無しさん2021/02/27(土) 22:02:11.68ID:Odeyd4+A
>>331 Ruby
(1..100).each{|i| puts ({1=>i, 3=>"Fizz", 5=>"Buzz", 15=>"FizzBuzz"})[i.gcd(15)]}
0338デフォルトの名無しさん2021/02/27(土) 23:23:14.12ID:o4Z1lfzB
>>331 Ruby
a = [0] * 100
2.step( 100, 3 ){|i| a[i] = 1 }
4.step( 100, 5 ){|i| a[i] += 2 }
100.times{|i|
puts (a[i] == 0)? i+1 : [ 'Fizz', 'Buzz', 'FizzBuzz' ][ a[i]-1 ]
}
0339デフォルトの名無しさん2021/02/28(日) 01:09:45.97ID:XDGQU8wr
>>337
それだ
gcdか
Haskell

fizzbuzz x = case gcd x 15 of
3 -> "Fizz"
5 -> "Buzz"
15 -> "FizzBuzz"
_ -> show x

main = mapM_ putStrLn $ [ fizzbuzz x | x <- [ 1..100 ] ]

思いつかなかったorz
0342デフォルトの名無しさん2021/02/28(日) 18:07:34.78ID:IOkXkIHX
お題
連続する文字列を抽出してください

入力: むかしむかし、あるところにワッフルワッフルがありました
出力: むかし, ワッフル
0343デフォルトの名無しさん2021/02/28(日) 18:21:17.82ID:CE4rzHHA
>>342 Ruby

puts "むかしむかし、あるところにワッフルワッフルがありました".scan(/(.+)\1/)*?,

# => むかし,ワッフル
0344デフォルトの名無しさん2021/02/28(日) 19:55:53.64ID:TzXN37YB
むかしむかしむかし、あるところにワッフルワッフルワッフルがありました
0345デフォルトの名無しさん2021/03/01(月) 00:40:25.00ID:p5xNM3/l
>>341
なるほど。さすが。
0348デフォルトの名無しさん2021/03/01(月) 01:52:05.52ID:p5xNM3/l
>>346>>347は4連続だとうまく行かなかったのでちょっと直した。
(.+)\1+ じゃなくて (.+?)\1+ でないと4連続が2連続で一塊になってしまった。
0351デフォルトの名無しさん2021/03/01(月) 09:54:04.38ID:cH5Ajc9f
そもそも問題の解釈が色々あるよな
ワッフルワッフルワッフルワッフル
が入力に入ってるとき最長の
ワッフルワッフル
を出力するのか2通りの読み方の
ワッフル、ワッフルワッフル
の両方を出力するのか
ワッフルワッフルうまいワッフルうまい
の場合出力は
ワッフル、ワッフルうまい
両方なのかどっちか消すのか
試験じゃないんだから好きに解釈していいのかもしれんけど
0353デフォルトの名無しさん2021/03/01(月) 10:32:22.18ID:Mo8KnFXk
> 2通りの読み方の ワッフル、ワッフルワッフル の両方を出力するのか
これは辞書持たせないと無理だから現実的では無いでしょ
最長解(複数あるなら全てか最初の一つ)、或いは最短、全パターン列挙でないと
ワッフル,ッフルワ,フルワッ,ルワッフ,ワッフルワッフル
0355デフォルトの名無しさん2021/03/01(月) 14:37:12.97ID:cH5Ajc9f
お題 ルートとガウス

数学板より
c = 50 + √2501 とする
整数列anが漸化式
a0 = 1
a(n+1) = [ ca(n) ]
で与えられているときa(n)の下2桁をn:0〜100の範囲で表示しなさい
----
ちなみに理詰めなら答えはすぐ出ます
しかしFloatやDoubleでは最初の10項位で桁溢れで詰みます
どうしますかというお題
0356デフォルトの名無しさん2021/03/02(火) 19:32:58.96ID:g3RlIqNH
数学、か・・・
035892021/03/02(火) 22:27:40.30ID:ZQFUTTJw
>>357
a0はa(0)のこと?
ca(n)はc*a(n)?
[ ] でくくっている意味は?
整数列ってことは整数化すると思うけど切り捨て?四捨五入?
以上素朴な疑問。
なお回答コードを書くかは、未定です
036092021/03/02(火) 22:37:57.11ID:ZQFUTTJw
>>359
検索して調べた
私が高校生だった頃は数学過程で使われていなかったか、あるいは忘れちゃったか
0362デフォルトの名無しさん2021/03/02(火) 22:42:00.55ID:uJxPOgJJ
括弧をガウス記号の意味で使う場合、ガウス記号であることは明示した方が良いよ
036592021/03/02(火) 22:44:52.15ID:ZQFUTTJw
>>363
入試などの試験で使われるんだろうけど
オレが学生だった頃は見かけなかったぞ、ほんまに。
036692021/03/02(火) 22:49:37.83ID:ZQFUTTJw
数学は嫌いじゃないんだよね。むしろ好きな方(得意かどうかは別)
なにがいやだつって、人に分からせるつもりがないような書き方して
数学が分からないんだと、と他人を馬鹿にしたような態度の傲慢さがいやなんだよね
0367デフォルトの名無しさん2021/03/03(水) 00:43:33.15ID:NwFhEU/N
ありゃ
ガウス記号通じませんでしたか
失礼しました
やはりプログラム板ならfloorの方が良かったのかな?
まぁテーマとしては
1)大きい自然数を扱う
2)そのルートをとる
ですね
1)は最近流行りのプログラミング言語はほとんどサポートしてるので問題ないでしょう
ルートはどうなんでしよう?
私はHaskellerでHaskellは大きさに制限なしのInteger型はあるんですけどsqrtはDouble型のものしか用意されてなくてsqrtは自前実装させられました
その実装の仕方も色々あるようですので解答お待ちしてます
0368デフォルトの名無しさん2021/03/03(水) 02:18:06.97ID:sH3hVaJt
>>355 Perl
https://ideone.com/93109J

#!/usr/bin/perl

use Math::BigInt;
$b=Math::BigInt->new(10)->bpow(400);
$l=Math::BigInt->new(2501)->bmul($b)->bmul($b)->bsqrt()->badd(Math::BigInt->new(50)->bmul($b));
$a=Math::BigInt->new(1);
for $i ( 0 .. 100 ) {
printf "%3d: %2d\n", $i, $a % 100; $a->bmul($l)->bdiv($b);
}

# チートを使わずに Math::BigInt を使って書くとこんな感じ
# なぜこのような結果になるかは数学板をご参照のこと
0370デフォルトの名無しさん2021/03/03(水) 19:46:17.30ID:6ploduqz
他の工学部ならともかく情報工学部の教科書にはガウス記号は頻出する
0371デフォルトの名無しさん2021/03/03(水) 20:35:40.01ID:N/Xxe4np
情報工学だけど教科書は⌈⌉や⌊⌋だったな[]見覚えないわ
いつごろから使われ始めたんだろうか
0373デフォルトの名無しさん2021/03/03(水) 23:22:18.43ID:lm58Q0f3
お題
文字列"OF"と文字列"OFF"の
2種類の要素だけからなる配列がある。
間違えて空文字を区切り文字として連結してしまった。
この文字列から元の配列を復元する。

入力:OFOFOFFOFOFFOFOFF
出力:["OF", "OF", "OFF", "OF", "OFF", "OF", "OFF"]
0374デフォルトの名無しさん2021/03/03(水) 23:45:31.04ID:XIfP2xof
>>373
haskell

ofoff x = case x of
_ | x == "" -> [ ]
_ | x == "OF" -> [ "OF" ]
_ | x !! 2 == 'F' -> "OFF" : ( ofoff $ drop 3 x )
_ -> "OF" : ( ofoff $ drop 2 x )

main = print $ ofoff "OFOFOFFOFOFFOFOFF"
---
["OF","OF","OFF","OF","OFF","OF","OFF"]
0376デフォルトの名無しさん2021/03/04(木) 00:29:22.56ID:cIYJR4p9
>>373
多少技巧的だけど見た目にはキレイ
haskell

ofoff x = case ( take 3 $ x ++ ( " " ) ) of
" " -> [ ]
"OFF" -> "OFF" : ( ofoff $ drop 3 x )
_ -> "OF" : ( ofoff $ drop 2 x )

main = print $ ofoff "OFOFOFFOFOFFOFOFF"
03789 Perlおじさん2021/03/04(木) 02:08:25.47ID:nBeXoR6u
>>373 Perl5

$s = 'OFOFOFFOFOFFOFOFF';
@a = $s =~ /(OFF?)/g;
print "@a\n";


あるいは一行で書くなら
print "@{['OFOFOFFOFOFFOFOFF' =~ /(OFF?)/g]}\n";


いずれも実行結果は
$ perl 19_373_OF_OFF.pl
OF OF OFF OF OFF OF OFF
03799 Perlおじさん2021/03/04(木) 02:32:59.31ID:nBeXoR6u
>>374
>>376
人のコードにコメントは控えてきた方だけれど
ゴミ見たいなコードだな
時頭悪そう
03819 Perlおじさん2021/03/04(木) 03:01:38.79ID:nBeXoR6u
>>367
慇懃無礼にならないように気をつけましょう
03829 Perlおじさん2021/03/04(木) 03:32:42.45ID:nBeXoR6u
>>379
きつい書き方しちゃったけれど
勉強・精進して、技術的にも人間的にも成長してくれればいいです
0384デフォルトの名無しさん2021/03/04(木) 06:44:25.46ID:WsooY2U3
上のやり取りみるにちょっとでも数学の話題になる度にスレ荒らしてたのがperlの人だったのかね
流石にガウス記号知らないのは嘘だと思うが
0385デフォルトの名無しさん2021/03/04(木) 07:24:39.38ID:JDmHia/u
数学板でプログラム関連の話題を出すと攻撃され
プログラム板で数学関連の話題を出すと攻撃され
プログラムも数学も好きなニキは行き場がないな
038892021/03/04(木) 11:06:02.64ID:R0BLpu43
>>384

>>364
こういう人をバカにしたような挑発を受けたときに
今回と前回、名前欄にレス番書いて反論したことはあるけど
他の何度か大荒れしたときはオレは参加していないので念のため

数学は好きなので解ける問題は回答してきた

ただし>>358に書いたように人に伝わりにくいような略した書き方をされると
独善的な印象の違和感を感じているところに、
数学という分野の観点から>>384みたいな人をバカにしたレスがつくと機嫌が悪くなる。
嫌がられるのは出題分野が数学かどうかではないところに第一原因があると思うので気がついたほうがいいよ

>>379 は黙ってりゃいいことなんだけれど、
せっかくHaskell勉強したのに残念というか、もったいないなとつい手が滑ってしまった
今後精進ください

それからC,C++,go,pythonでも回答してるよ
039192021/03/04(木) 11:23:14.55ID:R0BLpu43
ただし…
やみくもに「数学板に帰れ」のような過激発言や攻撃をする
一部に極端な数学アレルギーのソフト屋さんもいるようだね
あれはオレも過剰反応だと思う。

ちな、ここにレス書く数学屋さんは数学板のどのようなスレの住人なんだろうか…
ちょっと気になる
0396デフォルトの名無しさん2021/03/04(木) 21:03:35.51ID:u9KE3oV/
Haskellの人に勉強不足などと言う前に
数学の基本的な初歩の作法くらい学んではいかが?
0397◆QZaw55cn4c 2021/03/04(木) 21:24:36.25ID:zWapo09h
>>394
その「離散数学」というのは伝統的な数学ではどの分野にあたるのでしょうか?解析学?代数学?幾何学?
040192021/03/05(金) 01:16:32.63ID:87EwnNcH
>>396
誰も勉強不足だなんて書いてないよ。
つか、勉強してあれかよ、、、
そこらの底辺コーダーよりも素養無いんじゃな…(ry

また余計な一言を書いてしまった。
0403デフォルトの名無しさん2021/03/05(金) 05:54:59.00ID:tKFACNt8
>>382で「勉強・精進して、技術的にも人間的にも成長してくれればいいです」と堂々と言ってて笑うわ
0405デフォルトの名無しさん2021/03/06(土) 05:12:40.16ID:kirbXePv
>>373
Kotlin
https://paiza.io/projects/lTXR1DFdbRbedugwfltAHw

なんというか、自分ではほとんど何も考えてないようなプログラム。
正規表現のパターンも >>377 のやつを見てそのまんま利用w
0406デフォルトの名無しさん2021/03/06(土) 07:34:01.06ID:u5UDrf4j
>>373 J
smoutput<;. 1 'OFOFOFFOFOFFOFOFF'

+--+--+---+--+---+--+---+
|OF|OF|OFF|OF|OFF|OF|OFF|
+--+--+---+--+---+--+---+
0407デフォルトの名無しさん2021/03/06(土) 14:12:32.62ID:u59OSjMq
>>373
Haskell

import Text.ParserCombinators.Parsec
import Data.Either

ofoff = let
ofoffP = many $ try ( string "OFF" ) <|> ( string "OF" )
in fromRight [ ] . ( parse ( ofoffP ) "" )

main = print $ ofoff "OFOFOFFOFOFFOFOFF"
0408デフォルトの名無しさん2021/03/06(土) 14:38:49.14ID:Agh4NOMQ
>>373 Perl
#! perl

$_ = 'OFOFOFFOFOFFOFOFF';

# 正規表現つかう場合
#@out = /(.F*)/g;

# 正規表現つかわない場合
while( length ) { push @out, ($c = substr($_, 0, 1, '')) eq 'F' ? pop(@out) . $c : $c ; }

printf "[%s]\n", join ',', map { qq("$_") } @out;
0409デフォルトの名無しさん2021/03/06(土) 16:10:04.03ID:kirbXePv
>>373
こういうのどうだろう? (主にUNIX用シェルのコマンドラインで echo, sed 使用)

echo 'OFOFOFFOFOFFOFOFF' | sed 's/FO/F, O/g'

これは出力がこうなる。

OF, OF, OFF, OF, OFF, OF, OFF
0410デフォルトの名無しさん2021/03/06(土) 21:20:45.25ID:VLVmqcBA
>>355 の想定回答はなんだろうね
ガウス記号がそれほど知られてなかったのは誤算として、
大きい数の演算を組ませたかったのか
それとも結果だけ知りたかったのか
0411デフォルトの名無しさん2021/03/06(土) 22:54:19.97ID:ZpSkomP2
355です
ちょっとスレの雰囲気よろしくなかったので355は無かった事にしようかとも思ったんですけど一応想定してた解書いてみます
数学板で最初この話題が出たときHaskellにはBigintのsqrtがない事に気づいてめんどくせえと思ったもんですから他の言語ではどうなんだろうなぁと
調べたらperlにはあるけどrubyやputhonにはないみたいですね
bigint sqrt ruby とかで検索するとノウハウがヒットします
想定してた解はその手の解答でまず最初に出てくる
a(1)=1,
a(k) = [ ( a(k) + [ n/a(k) ] ) / 2 ] ( [x] は floor(x) )
で定義される数列a(k)を
a(k)^2≦n<(a(k)+1)^2
が成立するまで計算していくという方法です
Haskellでの実装はこんな感じ

https://ideone.com/gLt8mp

後面白いのには連分数を利用する解答などもあります
数列pn, qnを
p(0)=1, p(1)=100, p(n+2)=100p(n+1)+p(n)
q(0)=0, q(1)=1, q(n+2)=100q(n+1)+q(n)
とすると
p(2n-1)/q(2n-1) < 50+√2501 < p(2n)/q(2n)
を満たしながらlim p(n)/q(n) = 50+√2501になります(連分数の打ち切り近似)
コレを利用するとこんな感じです

https://ideone.com/X0UgJb
0412デフォルトの名無しさん2021/03/06(土) 23:07:31.35ID:gHRSDkBE
>>368で、なぜこのような結果になるかは数学板をご参照のこと、なんていってるけど
数学の問題として解くからこそ下2桁に規則性があることが分かるんであって
数値計算の結果見たからって規則性があるなんて誰も分からないだろうに
0413デフォルトの名無しさん2021/03/06(土) 23:19:24.93ID:Agh4NOMQ
下2桁に規則性がありそうだ、
ということは数値計算の結果を見ればなんとなく分かるんだけど

なぜ規則性があるか、ずっと計算を続けても同じ規則があてはまるかどうかは
数学的には証明しないといけない
0414デフォルトの名無しさん2021/03/07(日) 00:25:10.38ID:v+hjnMjR
>> 355 Ruby
Q = 10 ** 1000
C = 50 * Q + Integer.sqrt(2501 * Q ** 2)
a = 1
0.upto(100) { puts a % 100; a = C * a / Q }
0417デフォルトの名無しさん2021/03/07(日) 16:42:40.23ID:4e/EQUS9
俺もガウス記号知らなかったよ
0418デフォルトの名無しさん2021/03/07(日) 23:49:22.14ID:mJjrRrnV
そういやあったなって感じだし競プロでしか目にした覚えないし解説入れてた気がするし
忘れても良いわ
0419デフォルトの名無しさん2021/03/07(日) 23:52:19.70ID:6FoXMbth
>>411の上のはニュートン法ですね。プログラミングの教科書によく出てくるメジャーなやり方だと思います
二分木検索は>>372がその実装っぽいけど合ってるかな?
0420デフォルトの名無しさん2021/03/08(月) 06:33:43.32ID:mSIC7i2M
知らなくてもググればすぐにわかるようなことでキレてるのが滑稽なわけで
しかもなぜかHaskellの人に暴言まで吐いてる
0421デフォルトの名無しさん2021/03/08(月) 07:06:18.72ID:UeYS9xl0
底辺コーダーが年経て自尊心だけが膨らみ現実との乖離にアイデンティティを保てなくなった典型
老害と言われるものの一端
改善の見込みは無く今後悪化の一途を辿るので首吊るよう誘導するのが最善策
0422デフォルトの名無しさん2021/03/08(月) 12:07:43.97ID:fgjPNF/K
>>421
じゃあお前が死ねよ
0423デフォルトの名無しさん2021/03/08(月) 17:45:02.03ID:xLhHwRoq
>>419
そうですね
広い意味では二分木探索
(ri)^2<n<(ri+2ei)^2のとき(ri+ei)^2<nか否かでr(i+1)を決める
その時n-(ri)^2の値を保持しておいて次の(n-r(i+1))^2を計算するのにわざわざ二乗する手間を省く
いわゆる和算の“開平算”の二進数版ですね
コレも「平方根、アルゴリズム」とかで検索するとよく出てきます
実際Cで実装してる例とかヒットしますね
話をfloor√nの計算に適用すれば与えられた整数nに対して
(n0,r0,b0) = (n,0,4^( floor log[4]n ))
(n(i+1),r(i+1),b(i+1))
=(n(i), r(i)/2, b(i)/4 ) (n(i)<r(i)+b(i)のとき)
=(n(i)-r(i)-b(i), r(i)/2+b(i), b(i)/4) (そうでないとき)
でb(i)=1になるまで続けると最後のriがfloor(√n)を与えるようです
0425デフォルトの名無しさん2021/03/10(水) 21:16:54.62ID:18mRPtRC
半年ROMるか過去スレ眺めろ
0426デフォルトの名無しさん2021/03/10(水) 21:56:50.00ID:1K35/kHq
OK
前スレ見たらグラフィックスとかサウンドとかのお題もあるのね
要は何でもありってことか
0428デフォルトの名無しさん2021/03/11(木) 12:49:28.58ID:lS475G3P
なんでもありと言ってもなんでもレスつくわけじゃない
メディア系のお題は環境の違いでほとんど他の人が確かめる方法もないから正直うざい
事実上”みんなが確かめられるメディア系のお題”となるとjavascript一択になってしまう
0429デフォルトの名無しさん2021/03/12(金) 13:32:57.02ID:8htaOCuZ
お題
何番目?

ascii文字列が与えられる
その文字列が、その文字列を並べ替えてできる文字列全体の中で辞書式順序で何番目にあるかを計算せよ

例) 入力が hello であるなら並べ替えて順に並べると
ehllo ehlol eholl
elhlo elhol ellho elloh elohl elolh
eohll eolhl eollh
hello ...
なので13である

"cabaac" -> 47
"2021312" -> 197
"This is an apple." -> 975082180080
0430デフォルトの名無しさん2021/03/12(金) 13:54:28.91ID:8htaOCuZ
発展
ucs4のユニコード文字列も処理できるようにせよ

"いろはにほへとちりぬるを"
34213807

"ちょっとちょっと、大嶋さん。小島だよ!"
2031206446571101
0431デフォルトの名無しさん2021/03/12(金) 16:24:36.54ID:EbD8nxkK
N進数を出せばいいだけじゃねえのコレ
0435デフォルトの名無しさん2021/03/12(金) 21:01:53.27ID:ALDE6uMT
数学やってたほうが楽しいんじゃね?
0436デフォルトの名無しさん2021/03/12(金) 23:58:14.03ID:hKy/WFzt
解説入れます
例えば2021312が何番目か考えます
樹形図を利用します
樹形図を使って2021312以前に何個の文字列が入り得るか考えます
┳0━(112223)‥‥‥‥‥‥‥‥‥6!/(2!3!1!)=60
┣1━(012223)‥‥‥‥‥‥‥‥‥6!/(1!1!3!1!)=120
┗2━0┳1━(1223)‥‥‥‥‥‥4!/(1!2!1!)=12
┗2━1┳1━(23)‥‥‥2!/(1!1!)=2
┣2━(13)‥‥‥2!/(1!1!)=2
┗3━1━2‥‥..1
図の例えば(112223)は“112223を自由に並べてできる房”を表しており公式により6!/(1!3!2!)=60個の文字列が入ります
右の欄を合計して197が2021312の番号とわかります
この作業をプログラムで自動化して下さいがお題です
0438デフォルトの名無しさん2021/03/13(土) 13:32:35.11ID:00XYgDYP
>>436
ようするにコレ階乗進数だよな?
ただの進数変換じゃねえの?
0441デフォルトの名無しさん2021/03/14(日) 04:01:15.90ID:3mM6lZOa
>>429
Kotlin
https://paiza.io/projects/aJ5J0aIVgB9tYzGBCtrRlA

折角なので順列を求めるクラスを作った。
でもこれ、長いやつは駄目なんだよな。馬鹿正直に全パターン求めてリストに貯め込んでるだけなので。
>>434のプログラムは長くても大丈夫になっているけど、どうしてそれで良いのかがまだよく分からない。
分かったらこちらでも作ろうと思う。(面倒くさくなったら分からないままにするかも知れないが)。
0444デフォルトの名無しさん2021/03/14(日) 09:35:01.23ID:UOoBKmpX
何をもってURLとする?
関連RFCに完全準拠してるか厳密に判定する?
0449デフォルトの名無しさん2021/03/14(日) 12:30:27.16ID:IL1Rx7pe
Ruby のURI.regexp は、Ruby 2.2 から廃止予定で困る。
URL の規格がハッキリしないのか?

誰か、C でも良いし、モジュールを作ってほしい
0451デフォルトの名無しさん2021/03/14(日) 17:08:12.27ID:L9o4CQs/
>>447
この正規表現は\bとかwikipediaに載ってる標準の正規表現じゃないみたいだけどコレの正規表現ってどの言語の正規表現ですか?
0454デフォルトの名無しさん2021/03/14(日) 17:48:59.93ID:3mM6lZOa
>>442
そうなのかも知れないが>>436が何を言っているのかよく分からない。
0455デフォルトの名無しさん2021/03/14(日) 17:52:58.17ID:3mM6lZOa
>>443
perl -pe 's#https?://\S+##g'

なんていう誤魔化しでは駄目か?w
0457デフォルトの名無しさん2021/03/14(日) 18:29:06.56ID:L9o4CQs/
まぁでも所詮お遊びなんだからurlの切れ目はスペース、タブ、改行と決め打っても十分な気もする
こだわり出すとキリないからなぁ
0458デフォルトの名無しさん2021/03/14(日) 19:20:21.27ID:3mM6lZOa
あらゆるプロトコルのURLに対応したこれが最強かな。

perl -pe 's#\S+://\S+##g'
0459デフォルトの名無しさん2021/03/14(日) 19:43:05.91ID:jDE81mF6
自分が実装するときに困らないぐらいには、曖昧さのない問題にしようよ
0461デフォルトの名無しさん2021/03/15(月) 19:27:20.74ID:L1nObx7o
お題:
N 個のボールがあります。

A 君がそこから 0 個以上のボールを取り、
B 君が残りから 0 個以上のボールを取り、
C 君が残りから 0 個以上のボールを取りました。

A 君が取ったボールの数を a、
B 君が取ったボールの数を b、
C 君が取ったボールの数を c とします。

3 人がとったボールの数の組 (a, b, c) としてあり得るものはいくつか求めてください。

制約:
0≦N≦10^5
入力例 1:
3
出力例 1:
20

入力例 2:
25252
出力例 2:
2684350843635

入力例 3:
100000
出力例 3:
166676666850001
0462デフォルトの名無しさん2021/03/15(月) 19:31:15.27ID:L1nObx7o
入力例 1 は以下の 20 通りです

(0,0,0),(0,0,1),(0,0,2),(0,0,3),
(0,1,0),(0,1,1),(0,1,2),
(0,2,0),(0,2,1),
(0,3,0),
(1,0,0),(1,0,1),(1,0,2),
(1,1,0),(1,1,1),
(1,2,0),
(2,0,0),(2,0,1),
(2,1,0),
(3,0,0),
0467デフォルトの名無しさん2021/03/16(火) 01:01:46.91ID:7NNtBmtz
>>466
です
公式うろ覚えで間違えました
自力で考えたい人のネタバレになるといけないので詳細などは差し控えます
0468デフォルトの名無しさん2021/03/16(火) 01:19:21.90ID:Remy1U+1
それほど多くの回数の演算が必要だったのかどうか一考の余地あり
0470デフォルトの名無しさん2021/03/16(火) 09:47:39.51ID:g33Fh4mj
>>469
いえ、すでに訂正した>>465です
その式だと答えはあいますけど通例の公式の定義と文字の使い方がズレます
まぁ計算のお題というだけなら答えさえ合えばいいですけど
しかし“数学的に”という縛りもつけるなら、やはり特に理由がないなら文字、関数の命名も極力通例のそれに合わせるものでしょうね
0471デフォルトの名無しさん2021/03/16(火) 10:24:11.59ID:Remy1U+1
>>470
どういう意味で計算式を使っているか
コメントをいれた方がいいでしょうね

hが重複組み合わせてあることはわかりますが、どういう意図でx回ループさせる必要があるのか想像たけでは読み取れません
その意味では469も同じですが
0475デフォルトの名無しさん2021/03/16(火) 15:16:46.37ID:FDFwYhAl
お題:しりとり
しりとりで繋げよ

入力:
あんこ, ここあ, ころも, ごりら, だるま, ぱんだ, まくら, もぐら, らっこ, らっぱ, らむね, りんご

出力:
りんご → ごりら → らっこ → ここあ → あんこ → ころも → もぐら → らっぱ → ぱんだ → だるま → まくら → らむね
りんご → ごりら → らっぱ → ぱんだ → だるま → まくら → らっこ → ここあ → あんこ → ころも → もぐら → らむね
0476デフォルトの名無しさん2021/03/16(火) 15:32:05.39ID:K4E4Nbs9
拗音・長音の扱いは?
要は、
ばれいしょ → しょうゆ
なのか、
ばれいしょ → ヨーグルト
なのか。
あるいは、
マヨラー → ラーメン
なのか、
マヨラー → ラムちゃん
もOKなのか。
0479デフォルトの名無しさん2021/03/16(火) 16:57:43.50ID:FDFwYhAl
>>476
まぁその辺はご自由にという事で

よいしょ→よいしょ



いでで→てめ、このやろ

もありでもなしでも
やはりありの方が評価高い?
0480デフォルトの名無しさん2021/03/16(火) 17:15:58.69ID:FDFwYhAl
やっぱりなしでいきましょか?
息抜きなんだしぱぱっと作れる範囲という事で
純粋に最初の一文字と最後の一文字完全一致のみ考慮すれば桶が基本路線という事で
0481デフォルトの名無しさん2021/03/17(水) 16:35:48.06ID:eRR+e6dW
制限お題シリーズ
お題: アルファベットと改行(LF)、ダブルクオートのみで構成されたテキストがある
テキストからダブルクオートで囲まれた文字列を抽出せよ
ただし正規表現を使ってはならない

abc"def"ghi"jk
l"mno"pqr"stu"



[def]
[jk
l]
[pqr]
0482デフォルトの名無しさん2021/03/17(水) 18:15:48.86ID:yxHVVu1O
>>481 JavaScript

const s = `abc"def"ghi"jk
l"mno"pqr"stu"`
let quot = ''
let inQuot = false
for (const c of s) {
if (c === '"') {
inQuot = !inQuot
if (!inQuot) {
console.log('[' + quot + ']')
quot = ''
}
continue
}
if (inQuot) quot += c
}
0483デフォルトの名無しさん2021/03/17(水) 19:51:53.10ID:rBKLRnxG
>>481 Ruby
str = <<EOS
abc"def"ghi"jk
l"mno"pqr"stu"
EOS
ans = []
str.chomp.split( ?" ).each_slice( 2 ){|a| a[1] && ans << "[#{a[1]}]" }
puts ans
04844832021/03/17(水) 19:54:51.45ID:rBKLRnxG
一行だった
str.chomp.split( ?" ).each_slice( 2 ){|a| puts "[#{a[1]}]" if a[1] }
0488デフォルトの名無しさん2021/03/18(木) 00:09:08.30ID:hcqC4BQb
>>.481 Python

a='"def"ghi"jk\nl"mno"pqr"stu"'

print (a.split('"')[1:-2:2])
0489デフォルトの名無しさん2021/03/18(木) 02:42:51.16ID:QPQ91MJu
>>481
Kotlin
https://paiza.io/projects/YuEG6qbQJJwhXMYXaysklg

Reader で一文字づつ読むような iterator があるとやり易いなと思ったので作った。
AbstractIterator 使うとほとんど自分で考えないで iterator 作れるから良いな。
0492デフォルトの名無しさん2021/03/20(土) 20:18:04.87ID:ct9wvzVp
お題
1〜6の目のあるサイコロを3つ振って出目の合計が9になる組み合わせの数を出力し
1〜6の目のあるサイコロを3つ振って出目の合計が10になる組み合わせの数を出力してください
0498蟻人間 ◆T6xkBnTXz7B0 2021/03/23(火) 20:11:55.19ID:Q0SAT5in
お題:正方形のタイルが格子状に規則正しく並んでいて、そのサイズは5x5である。そのタイル一つひとつに東西南北(E/W/S/Nで表す)いずれかの矢印が描かれている。
タイルの矢印をたどるとき、ループがあるかどうか判定せよ。
0499蟻人間 ◆T6xkBnTXz7B0 2021/03/23(火) 20:19:07.94ID:Q0SAT5in
SWNSW
EWSNN
WSNNE
EEWWS

EESWW
NWSEE
NWWSS
WENNW

EWESN
SWESW
ENNWS
WSEES
0501デフォルトの名無しさん2021/03/24(水) 21:45:33.44ID:wwqqOVPx
逆方向に進むのもループ?
経路としては一直線上の往復でループ状には見えないけど
0502蟻人間 ◆T6xkBnTXz7B0 2021/03/24(水) 21:49:39.25ID:9eJTJDpk
>>501
逆方向が続くのもループとします。
すべてのループを#で図示して下さい。
0503デフォルトの名無しさん2021/03/24(水) 23:30:54.73ID:qbF1qTNF
なんだ
あるかないか判定するだけじゃなくてループ見つけないといけないのか
0508蟻人間 ◆T6xkBnTXz7B0 2021/03/26(金) 17:38:06.64ID:f2xA4tvU
>>498 を解けなかった人のために解説!

「数学のグラフ理論を勉強しようね」

以上。。。
0510デフォルトの名無しさん2021/03/26(金) 22:45:38.30ID:0DIw+LLs
グラフ理論の恩恵はあまり受けられない
単に「ループがあるか否か判定せよ」ならグラフの一次のベッチナンボー計算するだけなので行列のランク計算するライブラリ持っている言語なら終わり
しかし「ループをホントに見つけて軌道の点を#にして出力せよ」では結局各点の軌跡を全部計算するしかない
0511デフォルトの名無しさん2021/03/26(金) 23:22:53.00ID:0DIw+LLs
嘘書いた
向き付きグラフのoriented cycle探す問題だからbetti numberだけでは決まらない
しかし遷移行列の固有多項式が0になる事が必要十分条件なのでmaximaやmathematicaなら一撃
0512デフォルトの名無しさん2021/03/27(土) 16:14:39.84ID:+EOa1TvV
>>508
これの場合難しく考えなくてもなぞって行って一度通過した所に戻るならループしている、で良いのでは?
ループの個所を示す必要がある場合は2度戻るかを調べて2度通通過した所だけを抜き出す。
0513デフォルトの名無しさん2021/03/27(土) 16:15:05.65ID:+EOa1TvV
まあいいや。これから作ってみよう。
0514デフォルトの名無しさん2021/03/27(土) 17:26:26.72ID:ylVvcLaL
強連結成分分解だっけ?

深さ優先探索を2回すれば、強連結成分分解できるとか
0515デフォルトの名無しさん2021/03/27(土) 18:03:52.24ID:H6/ZmwtS
というか難しい数学持ち出してもあまり楽にならない
結局なぞって行くのが1番簡明
0518デフォルトの名無しさん2021/03/28(日) 03:11:42.96ID:bwNgM3Tx
お題:1のビットが3個ある二進表記文字列が与えられたとき、次に大きい
1のビットが3個ある二進表記文字列を求める。

111 -> 1011
1110 -> 10011
101100 -> 110001
0523デフォルトの名無しさん2021/03/28(日) 11:59:07.61ID:GXcEOVy1
幅優先探索で各まとまりごとに数える
イメージとしては水を流すかんじ
0527デフォルトの名無しさん2021/03/28(日) 13:28:28.53ID:PtqbLDQy
>>520
たぶん
外周に番兵を置いて、番兵に接触する空白も番兵とみなす、このとき斜め方向に接触する空白も番兵とする。
あとはそれぞれコマの四方向のコマと空白のつながりから塊を調べる、コマ数をカウントすれば塊の数。
こんな感じ
0529デフォルトの名無しさん2021/03/28(日) 22:37:55.92ID:P/SJyVCP
>>498
なぞって行って2度通過した個所を出してみたら EW みたいな進んだ方向にただ戻る個所もループという事になったのだが、
それもアリか?アリならできたぞ。そういうのは除外となるともう一段それの発見のための処理を追加する必要がある。
0532蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 00:44:12.81ID:DFO7aycs
お題: 上下左右に広がる、がらんどうのX-Y二次元空間がある。直径10cmで質量7kgで均一な密度のボール状の物体Pの中心は、
時刻ゼロのとき、A地点(x1, y1)にあり、ここから謎の力により空中に固定される非常に丈夫な一枚の板と、時刻ゼロより発生する重力を使って、B地点(x2, y2)まで誘導したい。BはAより下にある(y1>y2)。
板は固定すると重力が働いてもびくとも動かない。物体PはB地点を必ず一度以上通過しなければならない。さてどのように板を設置すればいいか。時刻がゼロになる前に板を注文して固定しなければならない。
板は真っ直ぐ直線的であり、板の厚みは考慮しない。摩擦と空気抵抗は無視し、反発係数は1とする。この板は非常に高価なため(1cmが3万円)、なるべく短い長さで注文する必要がある。
重力加速度は下向きで地球上と同じ強さとする。設置する板の両端の座標(x3, y3)〜(x4, y4)[cm]と使用する板の費用price[円]と、時刻ゼロよりB地点到達にかかる時間T[秒]を求めよ。
0533蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 00:48:38.14ID:DFO7aycs
>>532
例1)
(x1, y1, x2, y2) == (1, 3, 4, 1).

例2)
(x1, y1, x2, y2) == (0, 10, -8, 0).

例3)
(x1, y1, x2, y2) == (-5, 3, 5, 0).
0534デフォルトの名無しさん2021/03/29(月) 07:42:15.30ID:cZtrSLJU
>>532
二次元空間なのにボール状の物体が存在するのか。重力加速度の下向きってどっち?
蟻人間ていつも凝った設定を作ろうとして杜撰なものばかりなイメージがある
0537デフォルトの名無しさん2021/03/29(月) 08:11:58.61ID:JXmb9uoD
adhdとか何か(学習|発達)障害持ってるんでしょ
ガイジなのは一見して分かるし
0539蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 09:52:29.10ID:DFO7aycs
注文できる板の最小の長さは1cmとします。初速はゼロとします。
0542デフォルトの名無しさん2021/03/29(月) 10:03:17.39ID:qQUSl3DL
(x1,y1)から右下の(x2,y2)へ45度のスロープ作ったら到達時間は何秒かって問題だろ
板の値段は30000√2円
0543デフォルトの名無しさん2021/03/29(月) 10:08:28.37ID:qQUSl3DL
例にあるマイナス座標の意味がわからない
0544蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 10:19:24.26ID:DFO7aycs
与えられたパラメータでBを通過するか判定する関数fを定義して下さい。fが正しく定義され、fに成功するパラメータならば正解とします。ブルートフォースや空間探索を使ってもかまいません。
0545蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 10:21:35.37ID:DFO7aycs
>>542
はね返りを使えば板はもっと短くなるかと。右下ではなく左下の場合も可能。
0546デフォルトの名無しさん2021/03/29(月) 11:08:10.66ID:GDKfaeCK
>>545
板の設置位置に制限がなく反発係数が1、すなわち運動エネルギーのロスが0なら目標地点がどんなにとおくても、高低差がどんなに小さくても到達できる
hだけ下方に設置してθだけ傾けた時を考える
板に反射した地点を原点、t=0として、初速は√(2gh)、最高到達点までの時間は√(2h/g) cos2θ、水平方向速度は√(2gh)sin2θ、反発地点から最高到達点までの水平距離はhsin4θ、最高到達点の高さはhcos^2(2θ)
方程式
x2-x1=2hsin(2θ)cos(2θ)
y2-y1=-hcos^2(2θ)
はy2-y1<0である時常に解もつ
0547デフォルトの名無しさん2021/03/29(月) 11:35:09.16ID:qQUSl3DL
ちょっとだけ傾いててほぼ水平なら、板の長さは限りなく1cmに近づき、到達時間は無限に近づくわな
あとはB点が線分上にあるか計算するだけでいい
0550蟻人間 ◆T6xkBnTXz7B0 2021/03/29(月) 14:04:34.12ID:KXpoeU4l
お題:次の文章を解読するプログラムを作れ。

「この文書は{SJIS:93C192E894E996A7}です。{SJIS:95948A4F8ED2}が閲覧すると、{SJIS:94B182B982E7}れます。」
05515202021/03/29(月) 21:19:00.34ID:IYjRcjQN
>>522
すみません、ルール違反なんですね…以後気を付けます。

>>527
>>531
ありがとうございます!
考え方まで記載いただき、本当に助かりました。
0552デフォルトの名無しさん2021/03/30(火) 03:21:24.51ID:6PAqNnFi
>>518
Kotlin
https://paiza.io/projects/Y2U2DgK9pKbNVqwu8gjpQQ

1のビットを数える方法は以前どっかで見た方法をそのまんま使った。
これ + じゃなくて xor にするとパリティビット求められるんだよね。
0553デフォルトの名無しさん2021/03/31(水) 02:13:57.15ID:tcwzWNiV
>>550
bash のコマンドラインから Perl 使ってでできた。標準入力から入力して標準出力に出力する。但し端末の入出力は UTF-8 。


perl -MEncode=from_to -pe 's/\{SJIS:(.*?)\}/from_to($s=pack("H*",$1),"cp932","utf8");$s/ge'
0554デフォルトの名無しさん2021/03/31(水) 22:33:07.77ID:IiEAnaBT
お題
数字のみの文字列を昇順の数値の列になるように
区切るすべての場合を求める。
0で始まるものは数値とはみなさない。
数字の順番は変更しない。
0555◆QZaw55cn4c 2021/03/31(水) 23:13:57.39ID:9YkxM+j+
>>554
入力および対応する出力例をください
0556デフォルトの名無しさん2021/04/01(木) 01:04:50.12ID:b9nwt5sF
>>554
長さ1も可、狭義単調増加、文字列は全て0〜9のみとして
Haskell

https://ideone.com/zOXDf0

入力 "20210401"

出力 [[20210401],[2,210401],[2,21,401],[2,210,401],[20,210401],[20,21,401],[20,210,401],[202,10401]]
0558デフォルトの名無しさん2021/04/01(木) 19:18:16.37ID:E1T4qUFj
ところで「チンポがシコシコする」という日本語表現は、学術的に正しいと言えるのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンポ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、自ら勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
0560デフォルトの名無しさん2021/04/01(木) 21:38:06.12ID:yB6nLlLi
お題

下の入力文字列を、「あいう」で始まる文字列に、分割せよ。
出力形式は、配列・改行区切りの文字列などで良い

入力
abあいう1あいう23あいうxyz

出力
["あいう1", "あいう23", "あいうxyz"]
0562デフォルトの名無しさん2021/04/02(金) 07:24:15.78ID:7wcW7Xmo
>>560 Ruby

p "あいう1あいう23あいうxyz".scan(/あいう.*?(?=あいう|$)/)

# => ["あいう1", "あいう23", "あいうxyz"]
05665602021/04/02(金) 21:51:17.99ID:nXGaO3xM
>>563
2.5 では動かないけど、2.6 では動いた
0570デフォルトの名無しさん2021/04/04(日) 04:15:17.77ID:i8ul4qcC
>>560
Perl でこんな感じでできた。(1行目はbashのコマンドラインからの入力。2行目が出力)

echo 'abあいう1あいう23あいうxyz' | perl -ne 'chomp;@d=split/あいう/;shift(@d);print "[" . join(", ", map { qq("あいう$_") } @d) . "]\n"'
["あいう1", "あいう23", "あいうxyz"]
0573デフォルトの名無しさん2021/04/06(火) 13:58:55.66ID:ounqm2YM
数学板より
お題:足して9
各桁の和が9である自然数を小さい物順に並べる
9,18,27,36,45,54,63,72,81,90,108,117....
n番目を求める関数を実装せよ

入力:12
出力:117

入力:12345
出力:100204200

入力:123456789
出力:30000100000100000021000001000
0579デフォルトの名無しさん2021/04/06(火) 16:55:57.07ID:RTS/XrJR
数学板では
プログラム好き好きおじさんと
プログラム怖い怖いおじさんが
意味の無い罵り愛を展開しているのだそうな
058092021/04/07(水) 01:03:14.39ID:lZ4PPQGS
意味のない愛か…
イサキが大漁そうだな
アホ草
0584デフォルトの名無しさん2021/04/11(日) 04:58:14.74ID:b01EJxrZ
モールスか。前にもあったな。そんなお題。
その時は確か音まで出す気合の入った回答をした人も居たと思った。
0585デフォルトの名無しさん2021/04/11(日) 18:30:35.89ID:b01EJxrZ
お題
>>582と同じでモールス信号作成。但し、定義ファイルに文字ごとに対応する信号を入れておきそれを指定して動く方式。(これにより言語が関係なくなる)。
日本語用定義ファイルを指定して動かせばそれに従って日本語での変換が行われ、英語用のを指定すれば英語での変換になるようにする。

プログラムと定義ファイルを最低一つ作ること。定義ファイルの内容は定義に従って正しく変換がされるかの確認が出来る程度で良い(例えば数字の変換だけでも良い)。
0586デフォルトの名無しさん2021/04/11(日) 18:33:36.97ID:b01EJxrZ
定義ファイルのエンコードはご自由に。でも UTF-8 にしておくとあちこちで使えて良いかも知れない。(Javaとか自動変換してくれるやつだと漢字も1文字扱い出来て楽だし)。
0588蟻人間 ◆T6xkBnTXz7B0 2021/04/11(日) 21:31:44.93ID:xF2ZqhuB
お題: UTF-8のCSVファイル(BOMなし)をテキトーにJSONファイルに変換せよ。
0589蟻人間 ◆T6xkBnTXz7B0 2021/04/11(日) 21:37:50.73ID:xF2ZqhuB
お題: 現在のディレクトリに連番のファイル(000.txt〜999.txt)を作成せよ。
0590蟻人間 ◆T6xkBnTXz7B0 2021/04/11(日) 21:49:03.91ID:xF2ZqhuB
お題: 現在のディレクトリの中から「jewel」と書かれたバイナリファイルを探索せよ(ファイル名およびファイルの中身)。大文字小文字、全角半角を区別すること。
0591デフォルトの名無しさん2021/04/11(日) 21:49:37.43ID:oovdLEo5
>>589 コマンドプロンプト直打ち
>for /L %X in (0,1,9) do @for /L %Y in (0,1,9) do @for /L %Z in (0,1,9) do @echo.%X%Y%Z>%X%Y%Z.txt
0592デフォルトの名無しさん2021/04/11(日) 23:08:08.91ID:b01EJxrZ
>>590
grep jewel *
0593デフォルトの名無しさん2021/04/12(月) 00:41:18.68ID:PERQzDfp
>>589
Linux で bash のコマンドラインでこうやったらできた。

printf '%03d.dat\n' $( seq 0 999 ) | xargs touch
0594デフォルトの名無しさん2021/04/12(月) 00:42:24.60ID:PERQzDfp
ごめん。 .dat じゃなくて .txt か。
まあでもその部分だけ直せばできる。
0597デフォルトの名無しさん2021/04/12(月) 04:32:56.67ID:PERQzDfp
関係ないけどDMMブックスの7割引きは凄いな。高い本バスケットに入れまくりだ。
0598蟻人間 ◆T6xkBnTXz7B0 2021/04/12(月) 20:48:48.64ID:AVNmNVln
お題: マルチスレッドを使うと処理完了が早くなる例を示しなさい。※CPUはマルチコアを前提とする。
0599デフォルトの名無しさん2021/04/13(火) 05:15:20.29ID:RNIiO4nm
>>589 Ruby
("0000".."9999").each{|x|open(x+".txt","w").close}
0600蟻人間 ◆T6xkBnTXz7B0 2021/04/15(木) 20:54:26.73ID:IlyHVFTA
お題: ここに3つのタンクA,B,Cがある。それぞれの最大容量は20L, 15L, 10Lである。初め、Aには水15Lが入っていて、Bには水10L入っていて、
Cは空っぽだ。重力により、水は2L/sの速さでAからBに流入し、3L/sの速さでBからCに流入する。
このような水の流れとタンク内容量の変化を再現してCがいっぱいになったときのAとBの内容量を求めよ。
0601蟻人間 ◆T6xkBnTXz7B0 2021/04/15(木) 21:05:03.04ID:PVf346K4
>>600 訂正と追記。
s/重力により/ポンプにより/

方程式は使ってはならない。必ずシミュレーションなどで再現すること。
0602◆QZaw55cn4c 2021/04/16(金) 00:18:27.57ID:fILOfU4Q
>>600
その「水タンク-システム」=水時計って、水位差と流出量が比例するのほうがおもしろいのでは?
0603デフォルトの名無しさん2021/04/16(金) 00:35:37.34ID:b5uchwAM
受験の頻出問題で排出される水量が√水位に比例するというのがあった
大学入ってやっとベルヌーイの定理というものだと知った
0604デフォルトの名無しさん2021/04/16(金) 14:13:28.80ID:jtvNbV+8
バカみたいな受験数学教えてないでストレートにベルヌーイの定理教えりゃいいのに
ガキに能力キャップを付けて伸びないようにバカはバカのまんまでいいとする教育法が全部悪い
そろそろ文科省は解体した方がいい
0606蟻人間 ◆T6xkBnTXz7B0 2021/04/16(金) 20:35:12.47ID:WHFzsZ51
お題: 計算可能な未知の関数f(x)が与えられる。x=-5〜+5において数値微分してf(x)の導関数の近似グラフを描画せよ。

(1) f(x)=x**2.
(2) f(x)=3*sin(x).
(3) f(x)=sqrt(abs(x)).
0607蟻人間 ◆T6xkBnTXz7B0 2021/04/16(金) 21:05:20.24ID:WHFzsZ51
なお、グラフィックスが使えない言語では、テキストによる「仮想画面」を使って描画すること。
0611デフォルトの名無しさん2021/04/17(土) 09:03:16.04ID:3IkVvJ6C
>>604
勉強したいなら学校なんか無視して自分でどんどん勉強しちゃって良いんだよ。
学校行かなきゃ情報が入手困難で学習できないなんて時代はとうの昔に終わってるんだし今ではネットもある。
0612デフォルトの名無しさん2021/04/17(土) 11:28:29.30ID:Mked9+jN
中受算数をやる時間が無駄じゃん
そこで解析が出るならまだしも

ならストレートに連立方程式やら積分やらを出せばいい
0614デフォルトの名無しさん2021/04/17(土) 21:59:24.27ID:sbDPbhaa
お題
同じ形の洗濯バサミの足を挟んでつなげてリングを作る。
最初の洗濯バサミの先頭から次のせんたくばさみの先頭までの長さAをとする。
以下同様につなげていくとすると洗濯バサミは何個必要だろうか?
0615デフォルトの名無しさん2021/04/18(日) 00:18:58.62ID:3FSrV0IS
360 / θ 個
0616デフォルトの名無しさん2021/04/18(日) 03:37:38.28ID:MhI7DTLG
>>614訂正
洗濯バサミを3個つないだ状態で
最初の洗濯バサミの先頭から2番目の洗濯バサミの先頭までの長さをAとする。
2番目の先頭から3番目の先頭までをAとする。
1番目の先頭から3番目の先頭までをBとする。
0618デフォルトの名無しさん2021/04/18(日) 15:55:26.09ID:oZ702Pek
数学の問題やん?
計算機を使って何をしろと?
A,Bが入力されたときに答え出せばいい?
0620蟻人間 ◆T6xkBnTXz7B0 2021/04/20(火) 14:33:35.54ID:fjai9OEL
お題: 依存関係のあるソート。与えられたいくつかの項目について、各項目ごとに依存関係が指定される。依存対象が先に来るように項目のリストをソートしなさい。
依存関係に循環がある場合は「ERROR」と出力しなさい。依存関係がない場合は名前の順でソートしなさい。

例1) {A, B, C}
AはB, Cに依存する。
BはCに依存する。
Cは何にも依存しない。

例2) {A, B, C, D}
AはCに依存する。
BはDに依存する。
CはB, Dに依存する。
Dは何にも依存しない。
0621蟻人間 ◆T6xkBnTXz7B0 2021/04/20(火) 14:57:48.16ID:fjai9OEL
例3) {A, B, C, D, E}
AはEに依存する。
BはDに依存する。
CはBに依存する。
Dは何にも依存しない。
EはBに依存する。
0622デフォルトの名無しさん2021/04/20(火) 19:18:30.05ID:4HfXomGv
例ってそれぞれの入力してでどう言う出力なのか答え出さないと例にならんやん?
0623蟻人間 ◆T6xkBnTXz7B0 2021/04/20(火) 20:00:19.11ID:fjai9OEL
>>622
例1の出力) (C, B, A).
例2の出力) (D, B, C, A).
例3の出力) (D, B, C, E, A).
0624蟻人間 ◆T6xkBnTXz7B0 2021/04/20(火) 20:07:07.92ID:fjai9OEL
全順序じゃないから、単純なソートアルゴリズムじゃダメみたいだね。
0629蟻人間 ◆T6xkBnTXz7B0 2021/04/21(水) 09:20:40.26ID:nkly2OdJ
>>628
アルゴリズムを簡単に解説してくれますか?
すみません。
0630デフォルトの名無しさん2021/04/21(水) 11:28:35.43ID:feIJLTYL
例えば>>821の時は順序の生成元が
E<A, D<B, B<C, B<E
この中で先頭に持ってきて良いものを探す
それはつまり「何かに依存していないもの」
この状態ではA,B,C,Eは何かに依存しているのでダメ
よってこの場合Dしかない
残りA,B,C,Eの順序を決める
その際順序の生成元からD<Xの形は取り除く
つまり
E<A, B<C, B<E
依存していないものはBのみなのでBが2番目
残りA,C,Eで順序の生成元はE<Aのみ
依存してないのはC,Eでどちらがきても良い

数学的には“何かに依存していない”はその“半順序”における“極小元”
そして極小元になり得る必要十分条件がまさに「順序の生成系の中でそれより小さいものがないもの」、すなわち「何かに依存してないもの」とわかる(証明も簡単)
そしてこの作業に於いて順序の生成系にループが有れば、例えばx<y,y<z,z<xのようなものが有ればx,y,zは最後まで取り除かれず、最後には「まだ元は残ってるけど極小元なし」の状態に到達してしまうのでその時点でerror判定して終了すれば良い
0632デフォルトの名無しさん2021/04/21(水) 12:03:04.18ID:v7jA28gl
お題が気持ち悪い

単に有向グラフの辺となるものだけ指定すれば良いのに
依存とか書いちゃうから以下みたいな間接依存が許されない雰囲気

AはBに依存
BはCに依存
0635デフォルトの名無しさん2021/04/21(水) 19:48:52.11ID:Y7fj3JnX
順序集合の定義自体は超簡単じゃね?
順序集合の定理なんか使わないから順序集合なんて言葉を使う必要もないけど

アルゴリズム的には
極大(極小)元の中で名前順の先頭である元を取り出す
を繰り返すだけで良い
取り出せなくなってまだ残っていたらERROR

>>630みたいに無駄に長く説明しなくて良い
0636デフォルトの名無しさん2021/04/21(水) 19:59:05.72ID:tmGizupL
順序集合真面目にやるなら集合と位相について学ぶ必要があるわけで
0637デフォルトの名無しさん2021/04/21(水) 20:12:32.68ID:rPf7kV48
そりゃーC++には半順序がバンバン出てくるから選ばれた人間向けの言語だよ。
0638蟻人間 ◆T6xkBnTXz7B0 2021/04/21(水) 22:08:22.58ID:OiYnhzgp
>>634
ちゃんと理解して実装したぜ。
https://github.com/katahiromz/OleBow/commit/f65c774b625385e855971adb1275de1fd6ebee0c

循環参照の例がうまくいかないけど。
// :: IBindCtx: IRunningObjectTable
// :: IEnumMoniker: IMoniker
// :: IMoniker: IBindCtx
// :: IMoniker: IEnumMoniker
// :: IRunningObjectTable: IEnumMoniker
// :: IRunningObjectTable: IMoniker
// :: PartitionMoniker: IMoniker
// :: SoapMoniker: IMoniker
ポインタ型とかは後回しでいっかな。
0640デフォルトの名無しさん2021/04/22(木) 07:08:36.76ID:DXDf8hNh
>>620 Ruby
# Array

rule = []
while gets
break unless m = /^\s*(\w)は(\w)?(?:,\s*(\w))*/.match( $_ )
rule << m.to_a[1..] - [nil]
end
solution = []
loop {
free = []
break if rule.delete_if{|a| a.size == 1 && free << a[0] && solution << a[0] }.empty?
free.each{|d| rule.each_index{|i| rule[i] -= [d] } }
}
puts (rule.empty?)? "(#{solution.join(', ')})." : "ERROR"
0641デフォルトの名無しさん2021/04/22(木) 07:09:10.65ID:DXDf8hNh
>>620 Ruby
# Bit演算

rule = []
while gets
break unless m = /^\s*([A-Z])は([A-Z])?(?:,\s*([A-Z]))*/i.match( $_ )
rule << [ m[1].upcase, m.to_a[2..].inject(0){|r,c| (c)? r | (1 << c.upcase.ord - ?A.ord) : r } ]
end
solution = []
loop {
free = []
break if rule.delete_if{|a| a[1] == 0 && free << a[0] && solution << a[0] }.empty?
free.each{|d| rule.each_index{|i| rule[i][1] &= ~ (1 << d.ord - ?A.ord) } }
}
puts (rule.empty?)? "(#{solution.join(', ')})." : "ERROR"
0642デフォルトの名無しさん2021/04/22(木) 20:40:45.65ID:euTe4E7l
お題
JSONでシリアライズされた未知のm×nの行列が与えられる。
転置行列を返せ。転置行列はシリアライズされていなくてもよい。

入力
"[[1,2],[3,4]]"
出力
[[1,3],[2,4]]
0645デフォルトの名無しさん2021/04/23(金) 13:43:38.22ID:Vuss2QH6
>>642 J

smoutput |: ". @ }: @ }: ;. _1 }. stdin ''
入力
[[1,2,3].[4,5,6]]

出力
1 4
2 5
3 6
0646蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 15:35:20.99ID:CrWxBL6F
お題: コマンドラインで動作するエクセルもどきを作れ。入力テキストの中身に特定の形式の「フィールド」(field: 欄)を埋め込んでおく。今回はフィールドは以下のような形式で表現される。

(1) {{=数式}}
(2) {{フィールド名:文字列}}
(3) {{フィールド名:=数式}}

フィールドは{{ }}で囲んだ文字列で指定される。
数式にはフィールド名を変数とする式を指定できる。フィールド名は半角英数字の組み合わせとする。
式は少なくとも、丸カッコと、整数の四則演算と、整数から文字列への変換と、文字列の連結をサポートすること。
入力テキストのそれぞれのフィールドを評価後の値に置き換えたテキストを出力せよ。フィールドの循環参照や式のエラーがあった場合はその場所に「ERROR」と出力せよ。
その他の仕様についてはエクセルをできる限りまねること。
0647蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 15:52:00.73ID:CrWxBL6F
>>646 追記。
フィールド名は英字で始まるものとする。

(入力例)
こんにちは、{{NAME:蟻人間}}さん。
今年は{{:=Y}}年です。来年は{{:=Y+1}}年です。

A={{A:=1}}.
B={{B:=2}}.
A+B+4={{=A+B+4}}.
A*B-2={{=A*B-2}}.

日付: {{Y:=2021}}年{{M:=4}}月{{D:=27}}日
{{:="<"&NAME&">"}}
0648蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 16:21:47.75ID:CrWxBL6F
>>647 さらに追記。
{{=数式}}と{{:=数式}}は同じように解釈すること。
0650蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 17:02:02.42ID:CrWxBL6F
>>649
代入文か代入式を許容することか。{{A=3}}
そっちの方がいいかもね。

エクセルは数式の先頭で=を書いてるだけで、それ以外に代入式や代入文はなかったはず。
0651蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 17:08:35.63ID:CrWxBL6F
>>646 お題を書き直します。

お題: コマンドラインで動作するエクセルもどきを作れ。入力テキストの中身に特定の形式の「フィールド」(field: 欄)を埋め込んでおく。今回はフィールドは以下のような形式で表現される。

(1) {{数式}}
(2) {{フィールド名=数式}}

フィールドは{{ }}で囲んだ文字列で指定される。
数式にはフィールド名を変数とする式を指定できる。フィールド名は英字で始まる半角英数字の組み合わせとする。
式は少なくとも、丸カッコと、整数の四則演算と、値の比較と、整数から文字列への変換と、文字列の連結をサポートすること。等号は二文字の==とする。
入力テキストのそれぞれのフィールドを評価後の値に置き換えたテキストを出力せよ。フィールドの循環参照や式のエラーがあった場合はその場所に「ERROR」と出力せよ。
0652蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 17:10:52.46ID:CrWxBL6F
>>651

(入力例)
こんにちは、{{NAME=蟻人間}}さん。
今年は{{Y}}年です。来年は{{Y+1}}年です。

A={{A=1}}.
B={{B=2}}.
A+B+4={{A+B+4}}.
A*M-2={{A*M-2}}.

日付: {{Y=2021}}年{{M=4}}月{{D=27}}日
{{"☆ "&NAME&" ☆"}}
0654蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 22:28:29.02ID:CrWxBL6F
>>653
くっさ、くっさわらたんよ。ははは。

お題: 5chに粘着して、トリップ付きのコテハンを罵倒し続けるボットを作れ。
0655蟻人間 ◆T6xkBnTXz7B0 2021/04/27(火) 22:30:28.43ID:CrWxBL6F
人間がボットみたいなことやってたらカバみたいだね。ほんとほんと。
0656デフォルトの名無しさん2021/05/03(月) 17:08:04.28ID:meUcD9ks
お題
ファイルパスを入力として受け取り、そのサブパスをすべて出力してください

入力: A/B/B/B
出力:
A
A/B
A/B/B
A/B/B/B
0658デフォルトの名無しさん2021/05/03(月) 20:05:34.50ID:vJY6tWsE
>>656
haskell

import Data.List

subPathes p = [ str |
str' <- tail $ inits $ p ++ "/",
last str' == '/',
let str = ( reverse $ inits str' ) !! 1 ]

main = mapM print $ subPathes "A/B/B/B"
0659デフォルトの名無しさん2021/05/03(月) 22:24:37.21ID:v5K6mFSj
>>656 C
char *str = "A/B/B/B";
int i = 0;
while (str[i]) {
if (str[i] == '/') {
char c[i + 1];
memcpy(c, str, i);
c[i] = 0;
printf("%s\n", c);
}
i++;
}
printf("%s\n", str);
0661デフォルトの名無しさん2021/05/03(月) 23:35:00.95ID:ED/pHj/W
python

import sys
from pathlib import PurePath

for x in PurePath(sys.argv[1]).parents: print(x)
0663デフォルトの名無しさん2021/05/04(火) 02:03:51.93ID:BGUDbBhh
文字列をPATHの区切り文字で後ろから検索しないで先頭から検索しても同じと気付いたのでこっそり直した。
0664デフォルトの名無しさん2021/05/04(火) 18:30:10.36ID:0HSekrvc
>>656 Ruby
def f(s)
a=s.split("/")
(0..a.size-1).map{|i| a[0..i].join("/")}
end
p f("A/B/B/B")
実行結果
["A", "A/B", "A/B/B", "A/B/B/B"]
0665デフォルトの名無しさん2021/05/06(木) 18:06:27.01ID:b7Mkjg0R
>>656
Elixir

list = String.split( "a/bc/d", "/" ) # 分割

# 第2引数は、蓄積変数の初期値
%{ list: result } = Enum.reduce( list, %{ list: [ ], word: "" }, fn( str, acc )->

tmp_str = acc.word <> str # 文字だけを連結する。/ は連結しない

acc = %{ acc | list: acc.list ++ [ tmp_str ] } # 連結
acc = %{ acc | word: tmp_str <> "/" } # 連結
acc
end )

IO.inspect result
#=> ["a", "a/bc", "a/bc/d"]
0666デフォルトの名無しさん2021/05/06(木) 18:47:12.53ID:wT5/oYmn
a="ko/koh/oreo/n/eone"
['/'.join(a.split('/')[0:i+1]) for i in range(len(a.split('/')))]
0667デフォルトの名無しさん2021/05/06(木) 20:53:31.79ID:DSX8dnAp
ここに練習用のいいファイルあるわ
https://tackle57.base.ec/
0672デフォルトの名無しさん2021/05/06(木) 22:23:58.98ID:wWHyWlvf
>>668
#include <studio.h>
0673行間を読みなさいw2021/05/07(金) 13:48:08.72ID:H+I+sfZ3
WHEREコマンドはReactOSに既に実装されています。
なので、(あえて作る場合でも)それを基にしてく
ださい(よ、頼むからさ。失礼だと思わないの?)

>コマンドではなく機能です。そして(既に実装されている)
>それは、この目的に対して便利ではありません。

貴方は公開されている(ReactOS実装の?)関数の
コードをパクって、独立したアプリケーションにしたと
いうわけですね。
というのであれば(我々の)メインストリームコードと
同期しているサードパーティコードみたいな感じを
装う必要はありません(はっきり言わせてもらえば
「しないで下さい」)
0674デフォルトの名無しさん2021/05/07(金) 13:57:45.37ID:H+I+sfZ3
システムで色々な箇所で使用される短縮名称
を正式名称と(相互)変換する機能なんて
アルゴリズムとかの題材とかには不適。
泥臭い部分がかなりあるシステム固有の設計
の話になるしたとえコードは公開しているに
せよ部外者の立ち入りは歓迎されないのは
当然。 実情を詳しく知らない外部の人に
任せられる部分じゃなかったりするから。
0675デフォルトの名無しさん2021/05/07(金) 19:10:13.55ID:FdFZQv1E
>>656 JavaScript
"A/B/B/B".replace(/^\/|\/?[^\/]*/g, (_, o, s) => console.log(s.substring(0, o)));
0676Mb2021/05/07(金) 22:02:57.18ID:P+8SzjSX
読み仮名(ひらがな、カタカナ)から、単純なコード順の整列キーを
生成するルーチンを書く。
単純にコード順で整列すると、「ガレージ」は「カレー」の直後には
こなくて、「か(蚊)」の後ではなく、「ガ(蛾)」の後に
来てしまう。
比較関数を定義しようとすると、順序関係が一意に決まらなくなって
整列ルーチンが止まらなくなる。また、SQL などの整列機能が利用できない。
業務系のシステムだと、企業名だとか個人名だとかの読みで整列する
要求があるので、読みの入力時に整列用のキーを生成しておくのが
吉と思われる。
0679蟻人間 ◆T6xkBnTXz7B0 2021/05/08(土) 06:08:52.93ID:tI5Uqx1l
>>677
うわー、1000行近い大作。しかもかなりモダンなC++。ひょえーー。
0681デフォルトの名無しさん2021/05/09(日) 21:15:00.81ID:1F2i56L2
お題:
N 人が一列に並んでおり、左から i 人目の人は色 C[i] の服を着ています。

あるチームは次の条件を満たすとき、良いチームであると言います。
- 0 人以上が所属している。
- すべての色 i について、色 i の服を着た人がチームに偶数人所属している。

N 人から "連続する" 0 人以上を選んで良いチームを作るとき、
チームに所属する人の数としてあり得る最大値を求めて下さい。

制約:
1≦N≦10^6
1≦C[i]≦60

入力:
N
C1 C2 ... CN

入力例 1
5
1 2 3 3 1

出力例 1
2

入力例 2
5
1 2 3 4 5

出力例 2
0
0682デフォルトの名無しさん2021/05/09(日) 22:47:51.84ID:YYfh4rSr
>>681
Haskell

import Data.List

mxLenGoodTeams cs = let
teams = [ take j $ drop i $ cs |
i <- [ 0..( length cs - 1) ],
j <- [ 2 .. ( length cs - i ) ] ]
isGoodTeam team
= all ( even . length ) $ group $ sort $ team
in maximum $ ( 0 : ) $ map length $ filter isGoodTeam teams

main = do
print $ mxLenGoodTeams $ [ 1,2,3,3,1 ]
print $ mxLenGoodTeams $ [ 1,2,3,4,5 ]
0686デフォルトの名無しさん2021/05/11(火) 00:16:24.82ID:sq5XRTcM
>>681
問題の意味がわからない。

> - すべての色 i について、色 i の服を着た人がチームに偶数人所属している。

とはどういう意味なのか?
「すべての色 i 」とは何か?
「色 i の服を着た人がチームに偶数人所属」というのはどういう意味なのか? 同じ色の服を着た人は存在しないのだよな?
0687デフォルトの名無しさん2021/05/11(火) 05:10:59.51ID:TUYWs3v7
毎度ながら日本語も問題作成も入出力例もクッソ下手だとは思うが
おまえはおまえで読解力無さ過ぎ
連続した (1≦10^6)個のデータ
データ内容は 1≦60
データ内容が偶数個となる連続した部分の最大長
1 2 2 3 3 4 4 5 → 2 2 3 3 4 4 → 6
1 2 3 4 2 3 4 5 → 2 3 4 2 3 4 → 6
1 2 3 4 5 2 3 4 → - → 0
1 2 3 3 2 4 5 4 → 2 3 3 2 → 4
1 2 3 2 2 3 2 4 → 2 3 2 2 3 2 → 6

まあ例に関しては俺も人のこと言えない
陥りやすいミスを確認しやすいキラーサンプル的な例がいくつかあればベスト
0688デフォルトの名無しさん2021/05/11(火) 20:07:35.50ID:m1fDyeBb
入出力例は不親切だとは思うが
問題文自体は問題ないでしょう
あれが理解できないというのであれば理解できない側の能力に問題がある
0693デフォルトの名無しさん2021/05/11(火) 20:30:24.67ID:AKHuOMpp
別にiが添え字の自然数と宣言しているわけでもなし文法的にも間違ってない
アスペでもない限り理解できる
0698デフォルトの名無しさん2021/05/12(水) 10:57:02.98ID:xHZdId+E
プログラミング言語が使えても日本語が使えないのでは話が伝わらない。
それだったらプログラミング言語でそのまま書いてくれた方がここのスレでは話が通じる。
0699デフォルトの名無しさん2021/05/12(水) 12:28:32.10ID:kJR81pbU
・左から100番目の人はC[100]の色の服を着ていると読める
・列を自由に入力して良いのなら、最大値はN以下の偶数となり自明
0701デフォルトの名無しさん2021/05/12(水) 16:05:32.13ID:ASs2TDTE
>>681
出題者です
問題文がわかりずらかったみたいですいません

想定解法書きます (配列はすべて 0-index です)
A[0] = 0
A[i] = A[i - 1] xor (2^(C[i - 1] - 1)) (1≦i≦N)
な配列 A を考えます

ある区間 [L, R) がいいチームであるならば、A[R] xor A[L] = 0 です (累積和と同じ発想です)
両辺に A[R] を xor すると A[L] = A[R] になります

R を全探索しながらあり得る L のうちで一番左側のものを連想配列などで求めることで
N = 10^6 などのケースでも高速に答えを得ることができます
0702デフォルトの名無しさん2021/05/13(木) 13:08:14.73ID:tJiNVUVY
問題文の他例が二つしかないから分かりにくい
>>687の説明みるまで何が良いチームなのか分かりにくい
0703デフォルトの名無しさん2021/05/13(木) 19:07:49.38ID:3W7MB1VC
> 一列に並んでおり、左から
左てなんだ?先頭末尾なら分かるが
> 良いチームであると言います
なんだそのモヤる日本語。普通にチームで良いだろ
チームの条件として色が偶数があれば良いんだから
> i 人目の人は色 C[i] の服を着て
あとの制約見るまで一意かと勘違いする。説明でいちいち C[i] と置くのもイミフ

説明をただただややこしくしてるだけ
仕事で仕様の説明でこんな喩え話してきたらキレるわ
0705Mb2021/05/13(木) 21:42:39.21ID:kEXKw6jf
>>693
> アスペでもない限り理解できる
「アスペルガー症候群」というのは、昔は「高機能広汎性発達障害」といって、
わりと馬鹿にしたもんでもない。かくいう私も、いわゆる「アスペ」の
一人だ。

ここで問題。日本語の(現代語の)動詞のうち、アルゴリズム的に押さえこめる
動詞(規則活用動詞)"以外の" 動詞はいくつあるか。
なお、「長尾の法則」(頭から見ていって、非・漢字から漢字に変化するところで、
文節は切れる)は使ってよし(「お」とか「ご」とかは名詞につくから、
このさい関係はなし)。
とりあえず六つはあって、サ変とかカ変とかは既知だけど、「そもそも、
どれだけあるのか?」っつー話になると、かなり面倒。
0706デフォルトの名無しさん2021/05/13(木) 21:45:18.19ID:B4CYAsif
>>705
> アルゴリズム的に押さえこめる

これどういう意味? 意味わかんなすぎてキレそうなんだけど
0708デフォルトの名無しさん2021/05/13(木) 23:36:26.05ID:mWio4uhK
さっさとPythonやらせれ
ちょっとでいいから
20年前に覚えたPerlに変わるマクロがいるんじゃああああああ

VBAでいいとかいわない
0709デフォルトの名無しさん2021/05/14(金) 11:54:50.47ID:l/Mcr9Yu
バカの書いた不適切な文書は不和をもたらす
>>681のことな
0710デフォルトの名無しさん2021/05/14(金) 13:21:20.02ID:23AH7lhZ
もうこれからは出題するときは頭に馬鹿には理解できない問題
ってとりあえず書いておけばいいのに
そうすれば荒れることもなくなるだろうから
0711デフォルトの名無しさん2021/05/14(金) 13:38:00.72ID:f3dsViZI
【コミュニティの一生】

面白い人が面白いことをする

面白いから凡人が集まってくる

住み着いた凡人が居場所を守るために主張し始める

面白い人が見切りをつけて居なくなる

残った凡人が面白くないことをする

面白くないので皆居なくなる
0712デフォルトの名無しさん2021/05/14(金) 14:08:14.84ID:4R64iY9Y
問題を作るのは難しいからしゃあない
どんな入力で、求めるのが値なのかアルゴリズムなのかを明示すればいい
0713デフォルトの名無しさん2021/05/14(金) 15:59:25.59ID:BwDBHw+5
お題: join関数を自作せよ
join関数は第2引数の配列を第1引数の文字列で連結する関数である

func join(sep, array)

s = join(':', ['1', '2', '3'])
puts(s)
# 1:2:3

sepは文字列で、文字列で無かった場合の動作は未定義である
arrayは長さが0以上の配列で要素は文字列である。それ以外の構造は未定義である
0714デフォルトの名無しさん2021/05/14(金) 16:23:22.95ID:WbiXCFQ1
先に解答例を作ってそこから試験問題作る先生のように
逆にたどって問題作れば分かり易い問題作れるのに

イキって、よーし、ぼくちゃん問題作っちゃるぞー!って、
解答未定のまま問題から作り始めるから今回のようにアフォなことになるんよ
0715デフォルトの名無しさん2021/05/14(金) 16:35:13.82ID:cn5v//cT
python
def joint(s,x,y=""):
if len(x) == 1:
print(f"{x[-1]}{y}")
else:
joint(s,x[:-1],f"{s}{x[-1]}{y}"))
0718デフォルトの名無しさん2021/05/14(金) 20:06:49.42ID:m9ewaxml
>>713
Haskell

join x = tail . concat . map ( ( x : ) . return )

main = do
print $ join ':' "123"
print $ join ' ' "Hello"
0719デフォルトの名無しさん2021/05/14(金) 20:28:04.72ID:DpIMp/DM
>>713 Lua
function join(d, a)
local r = a[1]
for i = 2, #a do
r = r .. d .. a[i]
end
return r
end

print(join(":", {"1", "2", "3"}))
実行結果
1:2:3
0723蟻人間 ◆T6xkBnTXz7B0 2021/05/14(金) 22:06:57.32ID:YwXzhkVg
お題: split関数を自作せよ。
split関数は第2引数の文字列を第1引数の文字列を区切りとして分割した配列を返す関数である。

func split(sep, str)

s = split(':', '1:2:3')
puts(s)
# [1, 2, 3]

sepは文字列で、文字列で無かった場合の動作は未定義である。sepの長さがゼロの場合は第二引数を一文字ずつ分割する。
strは長さが0以上の文字列である。
0725デフォルトの名無しさん2021/05/14(金) 23:14:10.50ID:RR8r1Nrv
>>713
Kotlin または Kotlin script

関数定義

fun join(sep: String, vararg a: String) = a.reduce { acc, s -> "$acc$sep$s" }

使用する時
println(join(",", "abc", "def", "1", "23", "456"))
または
println(join(",", arrayOf("abc", "def", "1", "23", "456")))

これで出力はどちらもこうなる。

abc,def,1,23,456
0728デフォルトの名無しさん2021/05/15(土) 00:15:44.50ID:yahE8f7K
sepの長さがゼロなら一文字ずつ分割するか
忘れてたわ
0729デフォルトの名無しさん2021/05/15(土) 00:33:17.27ID:YdirCY4B
出題者は効率のいいアルゴリズムを考え(>>701)させたかったが、
回答者は言われた通りのものを実装するだけのお題を望んでたって感じか (だから問題文がややこしいとか言われるんだろう)
このスレ向きのお題じゃなかったな
0730デフォルトの名無しさん2021/05/15(土) 00:56:03.56ID:JNomAybm
ンなワケねえだろ
お前本人か?

競プロの他の問題文と比べて明らかに文章の質が低いじゃん
0731デフォルトの名無しさん2021/05/15(土) 02:20:17.81ID:yahE8f7K
>>723
C
直しといた
2バイト文字は追加料金
https://ideone.com/CO94bV
0732デフォルトの名無しさん2021/05/15(土) 09:21:42.89ID:YsUBX88Q
やはり速度が問題ならその旨ちゃんと書かないとわからない
そもそもプログラムは早ければいいわけではないし、短ければいいわけでもないし、可読性が高ければそれでいいわけでもない
それらは全部トレードオフの関係があってどこにウェイトを置くかはそれが使われる場面場面で変わってくる
「このお題では速度重視」というならその旨明示しないと
0734デフォルトの名無しさん2021/05/15(土) 12:53:51.38ID:yahE8f7K
100桁以下の60進数の数列があって、条件に適合し得る部分の最大の長さはいくらかだから
N以下の偶数の最大値で自明だろ
だから何の問題なのか分からんって人がいるんじゃね?
0735デフォルトの名無しさん2021/05/15(土) 13:06:25.58ID:yahE8f7K
100桁じゃねえ100万桁だ
0736デフォルトの名無しさん2021/05/15(土) 13:07:07.72ID:yahE8f7K
100万桁じゃねえ100万以下だ
0737デフォルトの名無しさん2021/05/15(土) 13:08:15.70ID:yahE8f7K
100万桁で良いのか
寝ぼけてんな、失礼
0739デフォルトの名無しさん2021/05/15(土) 15:57:04.95ID:d+8scdvN
区切り文字列が長さ0の時の処理がバグってて最後の文字がなくなるな。
こっそり直しておこう。
0741蟻人間 ◆T6xkBnTXz7B0 2021/05/16(日) 11:50:18.74ID:EAK6Onef
お題: 任意のテキストデータから数値データを抽出し、列挙するプログラム。

「12あいうえお34.5かき7.0くけこ」
→[12, 34.5, 7].

「0.12ABC3.45DE0.02FGH」
→[0.12, 3.45, 0.02].
0742デフォルトの名無しさん2021/05/16(日) 12:30:25.44ID:KcTdWT19
>>741
document.querySelectorAll('span.name').forEach(e => {
  if(e.innerText.indexOf('蟻人間') >= 0){
    e.parentElement.parentElement.style.display = 'none';
}
})
0744デフォルトの名無しさん2021/05/16(日) 13:38:29.85ID:rG9ernac
>>743
この string-split-if には不満が残る

(string-split-if #'alpha-char-p "123abc456")
実際の結果: ("123" "" "" "456")
期待した結果: ("123" "456")
0746デフォルトの名無しさん2021/05/16(日) 16:25:18.39ID:bjgpsQdf
>>741
Eを使った浮動小数点の表現はどうする? 1.23E-8 みたいな。とりあえずなしで良い?
作るとしたら正規表現使うからあろうがなかろうがたいした問題ではないが。
0747デフォルトの名無しさん2021/05/16(日) 16:28:58.27ID:bjgpsQdf
>>741
Perl5

もうほとんど何も考えてない。文字列切り出してるだけ。
以下は Linux で bash のコマンドラインで実行したところ。

$ echo '0.12ABC3.45DE0.02FGH' | perl -ne 'while(/(\d+(\.\d+)?)/g){print "$1\n"}'
0.12
3.45
0.02
$
0748蟻人間 ◆T6xkBnTXz7B0 2021/05/16(日) 18:23:07.91ID:EAK6Onef
お題: テキストデータに含まれている数値データを全部2倍にしたテキストを返すプログラム。

「7ABC123DE0.5FG82」
→「14ABC246DE1FG164」.

「あいう75.04えおか54きく-25」
→「あいう150.08えおか108きく-50」.
0749デフォルトの名無しさん2021/05/16(日) 18:35:21.17ID:bjgpsQdf
>>748
Perl5

Perlだとこういうのはほとんど何も考えずに作れて楽だね。

$ ( echo '7ABC123DE0.5FG82' ; echo 'あいう75.04えおか54きく-25' ) | perl -pe 's/(\d+(\.\d+)?)/$1*2/ge;'
14ABC246DE1FG164
あいう150.08えおか108きく-50
$
0750デフォルトの名無しさん2021/05/16(日) 19:37:22.32ID:bjgpsQdf
>>748
Kotlin script

小数点以下の桁数を元の文字列に合わせるために java.text.DecimalFormat クラスを使用しているが、長くなってしまったなあ。
以下はコマンドラインから kotlinc で動かした Kotlin の REPL での入力と出力(>>> がプロンプト)。

>>> val ls = listOf("7ABC123DE0.5FG82", "あいう75.04えおか54きく-25")
>>> ls.forEach { println(it.replace(Regex("""\d+(\.\d+)?""")) { java.text.DecimalFormat(it.value.replace(Regex("\\d"), "#")).format(it.value.toDouble() * 2.0) }) }
14ABC246DE1FG164
あいう150.08えおか108きく-50
>>>
0751蟻人間 ◆T6xkBnTXz7B0 2021/05/16(日) 20:57:57.47ID:kWXR6C+3
お題:メールアドレスの難読化。

"info@example.com" ---> "info at example dot com".

"katayama.hirofumi.mz@example.com" ---> "katayama dot hirofumi dot mz at example dot com".
0752デフォルトの名無しさん2021/05/17(月) 02:01:43.00ID:GcVF7Ydc
お題:オートマドリング
以下の各問の要求された面積の所要室及び廊下を配置した、最も全体面積の小さい間取り図を出力せよ。
また、各間取り図は次の条件を満たすものとする。

・各室は廊下に面し、建物全体の形は長方形とする。
・間取り図は一文字を一坪とし、室はアルファベット、廊下は+で表示。
・廊下の面積は自由に決めて良い。
・最小面積の間取り図が複数の場合は、そのうち一つを表示すれば良い。
・全体面積(坪)を間取り図の下に表示。

【例】
所要室と要求面積(坪)
A:4, B:6, C:8, D:4

【出力例】
AAAA+DDD
BBBB+CCD
BBCCCCCC
(24)

【問1】
A:3, B:5, C:4

【問2】
A:8, B:4, C:6

【問3】
A:5, B:2, C:3, D:6, E,2
0754デフォルトの名無しさん2021/05/17(月) 06:56:11.27ID:9WebrBNt
>>752
廊下は外周に接する必要があるかどうかとか、廊下は一続きか二つ以上あっても良いかとか、その辺は自由?
0755デフォルトの名無しさん2021/05/17(月) 09:38:24.31ID:9/Dbs2kw
間取りが出来てればいいんで問題ないのだろう
人間が住むとも書かれてないし地球上のものだという保証もない

規定数の記号が並んでいればいいんじゃないか?
ようするに員数を満たしてりゃいいんだよ
0756デフォルトの名無しさん2021/05/17(月) 12:26:47.92ID:GcVF7Ydc
補足条件です

・廊下の一端は外周に接する事
・室はそれぞれ連続している事

ダメな例
AADDDDCC
BBAA++CC
BBBBCCCC

・廊下が外周に接していない
・室Aが連続していない
0757デフォルトの名無しさん2021/05/17(月) 12:28:14.13ID:GcVF7Ydc
廊下はいくつ有っても良いです
0758デフォルトの名無しさん2021/05/17(月) 12:39:02.89ID:GcVF7Ydc
廊下の数と面積が自由なら簡単になってしまったかw
修正 廊下は一続きに制限します
0759デフォルトの名無しさん2021/05/17(月) 12:49:02.42ID:GcVF7Ydc
>>756
このダメ例では、室Bが廊下に面してないので、それもダメ
0760デフォルトの名無しさん2021/05/17(月) 13:15:02.22ID:iILyYqea
B B + E E
C C + A A
C D D A A
D D D D A
手で作る方がプログラム書くより簡単そうだ
問3とかこれでいいんでしょ
0761デフォルトの名無しさん2021/05/17(月) 13:37:58.59ID:GcVF7Ydc
>>760
正解です
人間が解くパズルとしてはそれほど難しくない
それをコードに落とすという問題です
更に形状、方位、上下階の連携などを制約に加えると、実用アプリの基本アルゴリズムになります
0762デフォルトの名無しさん2021/05/17(月) 13:38:47.16ID:9/Dbs2kw
宇宙ホテルだと部屋種類が10000くらいあるんだろ
そして部屋数合計は100億だ
廊下の長さは1光年くらいあってもいい

なんで人間の地球人の尺度で考えるのか
これが分からない
0763デフォルトの名無しさん2021/05/17(月) 13:46:24.75ID:GcVF7Ydc
>>762
制約が無いとお題にならんでしょ
0764デフォルトの名無しさん2021/05/17(月) 14:15:20.81ID:9/Dbs2kw
所要室数の上限と要求面積の上限が制約なんじゃあないの
でもその制約がどこにも書かれているようには見えない
無いものを見ろと言われましても
0765デフォルトの名無しさん2021/05/17(月) 14:22:18.03ID:9/Dbs2kw
どうやって最小面積を保証するんだろうか
0766デフォルトの名無しさん2021/05/17(月) 14:26:41.86ID:GcVF7Ydc
>>764
各問の室名(アルファベット)が所要室
数字がその室の面積
それら所要室を全て配置して、かつ全体が最小面積となるのが答え

例えば問3の解答例だと

BB+DDDD
EE++DDA
CCCAAAA

これは面積が21となり最小では無いのでダメ
0767デフォルトの名無しさん2021/05/17(月) 14:30:19.46ID:9/Dbs2kw
>>766
所要室数の上限はもしかして26+26=52っていうワケ?
それっぽっちしかないの?
0768デフォルトの名無しさん2021/05/17(月) 14:30:34.32ID:GcVF7Ydc
>>765
最小面積は、所要室の合計面積プラス最小限の廊下面積
各室が廊下に面するので、最低限必要な廊下の面積も計算可能
例えば外周に接する2坪の廊下なら、5室が面する事が出来る
0770デフォルトの名無しさん2021/05/17(月) 14:33:17.80ID:GcVF7Ydc
>>767
制限を撤廃して拡張しようと思えばいくらでも出来るよ
0771デフォルトの名無しさん2021/05/17(月) 17:59:14.75ID:DZwTmI3K
だめだ。アルゴリズムが思いつかない。
0772デフォルトの名無しさん2021/05/17(月) 18:10:57.00ID:rt013aFx
条件を後出しした場合は
まとめて「お題」を書き直してくれないかなあ

ていうか、ちゃんと最初から考えて出題して
0773デフォルトの名無しさん2021/05/17(月) 19:08:28.87ID:GcVF7Ydc
お題:オートマドリング 《 》内は補足した条件
以下の各問の要求された面積の所要室及び廊下を配置した、最も全体面積の小さい間取り図を出力せよ。
尚、各間取り図は次の条件を満たすものとする。

・各室は廊下に面し、建物全体の形は長方形とする。《それぞれ連続した室とする事》
・間取り図は一文字を一坪とし、室はアルファベット、廊下は+で表示。
・廊下の面積は自由に決めて良い。《廊下は外周に接する事》
・最小面積の間取り図が複数の場合は、そのうち一つを表示すれば良い。
・全体面積(坪)を間取り図の下に表示。

【例】
所要室と要求面積(坪)
A:4, B:6, C:8, D:4

【出力例】
AAAA+DDD
BBBB+CCD
BBCCCCCC
(24)

【問1】
A:3, B:5, C:4

【問2】
A:8, B:4, C:6

【問3】
A:5, B:2, C:3, D:6, E,2
0775デフォルトの名無しさん2021/05/17(月) 19:51:55.12ID:GcVF7Ydc
>>774
まだコードにしてないけど、ある事はある
確かに難問かも知れない
0776蟻人間 ◆T6xkBnTXz7B0 2021/05/17(月) 20:13:34.67ID:W2xtRM+Z
お題: 与えられた文字列が日本国内携帯電話番号かどうかを判定するプログラム。半角のみ。ハイフンは無視して読み飛ばす。
0777デフォルトの名無しさん2021/05/17(月) 20:19:50.36ID:3M+J4Szq
>>775
部屋数をN、部屋の総マス数の合計をTとする
とりあえず廊下を一マス増やすごとに設置できる部屋数は2増えるから廊下ますで最低でも[N/2]マス消費する
なので最低でも[N/2]+Tマスは必要
そこまでは簡単だとして普通[N/2]+Tマスで見つかるわけはない
例えば[N/2]+Tが73とかだと1×73しかないので無理
廊下1マス増やして74マスでも2×37で無理
次の75マスでは見つかるかもだし、こういうケースならまぁ75マスが最小と断じれるけど、一般には最小の[N/2]+Tマスで不可能と断じて次のステップに進むにはそう断じれる何か簡明に判定できる必要十分条件でもないと総当たりするしかない
そりゃ有限個しかないからアルゴリズムと呼べるのかもしれないけど事実上動かないよ
0778デフォルトの名無しさん2021/05/17(月) 20:30:51.51ID:OlV3d8XL
部屋をなるべく方形に(方形の枠±1)みたいな条件付けないとこんなんになるぞ
AA+BB
AC+DD
ACEED
ACDDD
0779デフォルトの名無しさん2021/05/17(月) 20:36:56.44ID:GcVF7Ydc
>>777
室+廊下の合計面積が素数
または、2×13のような廊下で分断されるような全体形状になる場合、短辺を調整して3×9にし、その分廊下に追加するなどの工夫が要る
数学的に最小面積か証明出来るかは分からんけど
0780デフォルトの名無しさん2021/05/17(月) 20:40:48.18ID:3M+J4Szq
>>779
でもお題は「最小面積であるものを出力せよ」なんでしょ?
最小でなくてもなんでもいいなら自分で好きに工夫できるけど
最小の縛りがある以上「それ以下のマス目では無理」と断言できるものじゃないとダメでしょ?
0781デフォルトの名無しさん2021/05/17(月) 20:40:55.83ID:GcVF7Ydc
>>778
室の形状は制約に無いので、それで正解です
正解パターンが複数あるので、どれか一つを出力すれば良い事にしてます
0783デフォルトの名無しさん2021/05/17(月) 20:47:52.32ID:GcVF7Ydc
>>782
773の制約に無いものは考慮しなくて良いとします
0784デフォルトの名無しさん2021/05/17(月) 20:54:27.35ID:a/x20dO7
廊下が存在する場合、少なくとも1坪の廊下が外周に面していればいいの?
0785デフォルトの名無しさん2021/05/17(月) 20:58:10.09ID:GcVF7Ydc
>>780
例えば、問1は最低必要面積で13坪なので、
2 * 7 = 14坪に変形しないと解が得られないですね
3 * 5 = 15坪が最小でない事が分かる
ここで判定すれば良いのでは?
0786デフォルトの名無しさん2021/05/17(月) 20:58:44.92ID:GcVF7Ydc
>>784
そうです
0787デフォルトの名無しさん2021/05/17(月) 21:00:50.14ID:a/x20dO7
>>786
なるほど
つまり

AAAA
A++A
AAAA

はアウトで

AAA+
A+AA
AAAA

はセーフなのね
1から考え直さないとダメだわ
0789デフォルトの名無しさん2021/05/17(月) 21:06:29.30ID:GcVF7Ydc
>>788
やべえと思ってるw
皆あまり根を詰めないでね
間違ってもいいから
0791デフォルトの名無しさん2021/05/17(月) 21:17:56.22ID:GcVF7Ydc
>>790
問1から3の解は得られるよ
0794デフォルトの名無しさん2021/05/17(月) 21:38:48.98ID:rt013aFx
頭で解くのが許されるならこれでいい

10 PRINT "BAAA+CC"
20 PRINT "BBBB+CC"
30 PRINT
40 PRINT "AAAAAA+CCC"
50 PRINT "AABBBB+CCC"
60 PRINT
70 PRINT "AA+DD"
80 PRINT "AB+ED"
90 PRINT "ABCED"
100 PRINT "ACCDD"
0795デフォルトの名無しさん2021/05/17(月) 21:46:05.74ID:rt013aFx
これの方が良かった

10 PRINT "AAA+BBBBB+CCCC"
20 PRINT
30 PRINT "AAAAAAAA+BBBB+CCCCCC"
40 PRINT
50 PRINT "AAAAA+BBEE"
60 PRINT "DDDDDD+CCC"
0796デフォルトの名無しさん2021/05/17(月) 21:49:44.46ID:GcVF7Ydc
>>793
各問は解答を作ってから出してるよ
コードには落としてないがアルゴリズムは有る
やってる人もいるだろうから、まだ出さないが
0797デフォルトの名無しさん2021/05/17(月) 21:51:58.86ID:rt013aFx
>>795
こっち

10 PRINT "AAA+BBBBB+CCCC"
20 PRINT
30 PRINT "AAAAAAAA+BBBB+CCCCCC"
40 PRINT
50 PRINT "AAAAADDDDD"
60 PRINT "BB+CCC+EED"

>>796
回答があるわりにはお題がころころ変わるねえ
0798デフォルトの名無しさん2021/05/17(月) 21:53:58.96ID:GcVF7Ydc
>>797
変わって無いけどな
質疑に答えただけだ
そのついでに廊下の条件が緩くなってしまった
0801デフォルトの名無しさん2021/05/17(月) 22:05:12.05ID:rt013aFx
出題者の題意をくみ取るのがお題じゃないんだから
まともに出題出来ないやつは出題するな

と思う
0802デフォルトの名無しさん2021/05/17(月) 22:11:18.99ID:GcVF7Ydc
>>800
>>801
すまん
要は建物内部の間取りを作れってだけの問題なんだ
難しく書いたつもりは無い
0804デフォルトの名無しさん2021/05/17(月) 22:35:29.50ID:GcVF7Ydc
>>803
問題文は間違ってはいないだろ
補足が必要だっただけだ
0806デフォルトの名無しさん2021/05/17(月) 23:31:15.84ID:3M+J4Szq
>>785
え?
お題は>>773で出てる3つの場合だけ答えが出ればいいの?
そんなんプログラミングのお題にならんやろ?
プログラミングのお題と言うからには手計算ではできないような部屋数が30とかそうマス数が1000マスとかの入力でも対応できるプログラムって事になるでしょ?
>>773だったら手計算でもできるやん
0807デフォルトの名無しさん2021/05/17(月) 23:37:44.87ID:GcVF7Ydc
>>806
手計算なら意味無いよw
当然あらゆる入力に対応すべきだが、問題は3つだけ
0808デフォルトの名無しさん2021/05/17(月) 23:39:29.93ID:GcVF7Ydc
当然そのつもりで取り組んでるでしょ?
0809デフォルトの名無しさん2021/05/17(月) 23:40:52.25ID:3M+J4Szq
まぁでも出題者の言いたい事はまぁわからないでもない
この手の話は計算量の勉強してると時々出てくる
有名なのが巡回セールスマン問題で、本当の巡回セールスマンでは「セールスマンが最も効率よく巡回できる最小経路を算出するアルゴリズムを出せ」でコレにはNP時間かかるアルゴリズムしか知られていない
しかし「最小でなくても最小値に“そこそこ近い”経路ならP時間で求められるアルゴリズム」はある
多分出題者もこの問題について「最小値じゃないだろうけどまぁまぁ小さい答えを出してくれるアルゴリズム」はもってるんだろう
しかしコレをお題として他の人に出題するなら、その“そこそこ”が数学的に“どのくらい”なら合格とするのかを明示しないとお題にならない
0811デフォルトの名無しさん2021/05/17(月) 23:44:38.94ID:GcVF7Ydc
まあ簡単ではないとは思うが
問題文わかりづらかったかい?
0814デフォルトの名無しさん2021/05/17(月) 23:49:51.36ID:GcVF7Ydc
>>813
そんなに意味不明な問題だったか?w
マジかw
じゃあ明日にでも参考解答出すよ
0815デフォルトの名無しさん2021/05/17(月) 23:52:44.00ID:3M+J4Szq
例えば>>777の設定で「総マス数が2N+Tまでは合格」とかその手の縛りにしないと“最小”という縛りでは問題にならない
0816デフォルトの名無しさん2021/05/17(月) 23:59:37.40ID:rt013aFx
>>814
正しい出題が先

条件は>>773から変更は無いか
3題だけ解ければいいのか
時間やリソースを無視すれば解けるコードならいいのか
どの程度の規模の問題まで現実的な時間、リソースで解けれなければならないのか
0818デフォルトの名無しさん2021/05/18(火) 00:09:57.21ID:Wc7qNqFy
>>817
773の条件なら797で正解
773で抜け落ちたが、当初は廊下は一続きであるという趣旨なんだよ
だが無闇に難易度を上げるつもりも無いから797で良し
0819デフォルトの名無しさん2021/05/18(火) 00:14:17.28ID:Wc7qNqFy
廊下一続き縛りでも、そこまで計算時間かからんと思うよ
巨大な室数と面積でも無ければね
もちろん、宇宙ホテルでは無い
0821デフォルトの名無しさん2021/05/18(火) 00:20:36.53ID:/GE6kPFW
なんで>>815は問題改変したがるんだろう?
総当たりだろうが最小を出すことは出来るだろ
Nがでかくなると実用的な時間では答えが出ないかもしれないけど
0822デフォルトの名無しさん2021/05/18(火) 00:31:54.78ID:U8UuOe0M
お題:コイントス(数学板の問題の改変)

コインを3回連続で投げるとき
表表表,表表裏,表裏表,裏表表,表裏裏,裏表裏,裏裏表,裏裏裏の8通りが等確率で出る

2人で先手と後手を決めて、先手が上記の8通りの中から1つ選び、後手は残った7通りの中から1つ選ぶ
そして1枚のコインを連続して投げ続けて、先に選んだパターンが出た者の勝利とする

例えばAさんが 表表裏 を選び、Bさんが 表裏表 を選んだとして、
コインの結果が、裏裏裏表表裏 となったら 表表裏 が先に出たのでAさんの勝利
コインの結果が、裏裏裏表裏表 となったら 表裏表 が先に出たのでBさんの勝利

同様のルールで、コインn回(3≦n≦6)のパターンを2人で予想し合うとき、
先手の予想を表す文字列を入力として、後手の勝率が最大となる後手の予想を表す文字列を出力せよ
入力で与える文字列として、"表" "裏" の代わりに "0" "1" を使用して良い
※入力と出力の文字列は同じ長さとする

例1: 入力 = 0000 → 出力 = 1000
例2: 入力 = 111000 → 出力 = 111100
0823デフォルトの名無しさん2021/05/18(火) 00:32:11.62ID:IEQY6Fk+
>>818
廊下が連結が元の題意ならそう訂正すれば良い
>>752からあくまで「補足」だと言い張りたいなら
あとから追加した条件「・廊下の一端は外周に接する事」も消さないと

>>819
部屋数A〜Zの26部屋
各部屋のサイズ20くらいまで
が現実的な時間、リソースで解ける
と思って良いか?
0824デフォルトの名無しさん2021/05/18(火) 00:35:55.95ID:Kzl4VF4s
>>821
いや、総当たりなら出せるけど、それでは「巡回セールスマン問題の最小解を求めるアルゴリズムを求めよ」と言ってるのと同じで事実上総当たりしかない
もちろん総当たりアルゴリズム実装するのは難しい話てはないけど面白くもなんともない
しかし「最小値ではないが最小値にかなり近い値でよい」なら工夫のしようもある
例えばこの問題なら廊下の最小値は[N/2]だけどコレをどこかに真っ直ぐ引いてその両脇からN個の部屋をニョロニョロ伸ばして綺麗に長方形に治るようにする解なら多項式時間程度で求まる
しかしその方法で解が見つからなかったとしても、“あらゆる場合”を検討したわけではないから探索を次のステップに進めることができない
あくまで最小値を求めるならここで総当たりしてるダメな事を確認しないといけなくなる
しかし制限が最小値でなくて例えば2N+T以下くらいに緩ければこの方法で解を求める事が(多分)できる
まぁわかってもらえないようだからいいよ
総当たりプログラムなんて面白くもないのでROMします
0826デフォルトの名無しさん2021/05/18(火) 00:38:53.07ID:IEQY6Fk+
>>824
アルゴリズムの工夫で現実的な時間で解けるという可能性は?
NP問題だと証明できた?
0828デフォルトの名無しさん2021/05/18(火) 00:45:44.65ID:Kzl4VF4s
>>826
そんなのできるわけないやん?
つまりこの問題かperfect NPか?と聞いてるのと同じで全く新しいPerfectNPを見つけた事になる
そんなの論文レベル
まぁ多項式時間では解けそうにないなぁってのはあくまで第1感で実際には解けるもしれない、しれないけど自分が無理くさいと思ってる問題でペイも発生しないお遊びにそこまで頭と時間使う気になれない
チャレンジして「やっぱダメじゃん」で終わった時虚しさしか残らん
0829デフォルトの名無しさん2021/05/18(火) 00:46:00.51ID:IEQY6Fk+
>>822
おもしろそうなので考えてみます
数学板などのカンニングは無しで

答えを書くのしばらく待って!
0830デフォルトの名無しさん2021/05/18(火) 00:46:12.96ID:Wc7qNqFy
>>823
廊下の一端は外周に接する、この条件は生き
部屋数は26まで、各面積は20坪までとする
(そこまで想定して無かったがw)

現実的な時間で解けない問題も過去には出てたからなあ
それでも猛者は取り組んでたよ
回転寿司の皿の問題とか
0831デフォルトの名無しさん2021/05/18(火) 00:50:11.64ID:IEQY6Fk+
>>828
興味が無いならROMしててくださいな

以前みんなが指数関数オーダー以上でしか出来なかった問題を
線形オーダーで解いたことがあったのを思い出した
0833デフォルトの名無しさん2021/05/18(火) 00:52:23.06ID:Wc7qNqFy
>>832
おお、あの天才か!
凄かったね
0835デフォルトの名無しさん2021/05/18(火) 00:58:38.60ID:Kzl4VF4s
>>829
その問題数学板では答えしか出てない
計算式とかアルゴリズムは出てないので見に行っても大丈夫
いわゆる受験で出てくる“確率漸化式”の話(Homogeneous Morkov Chainと言います)の話が理解できてれば行列計算のルーチン実装すればできます
HMCの話知らなくても受験数学レベルでギリギリできなくもない
0836デフォルトの名無しさん2021/05/18(火) 01:35:07.81ID:IEQY6Fk+
>>835
わざわざ「カンニングは無しで」って書いたのに
わざわざヒント書くかねえ
しばらくこのスレ見ないことにする

>>830
とりあえず>>830の範囲で考えてみる
このスレにはしばらく来ないけど

寿司問題、ずいぶん前だよね
ずいぶん前からこのスレにいるなら
最初から出題は正しく曖昧性なく書こうよ
0838デフォルトの名無しさん2021/05/18(火) 01:57:24.03ID:Kzl4VF4s
>>836
ヒントになんかなってないよ
大丈夫
この単語ググっても答えになんか辿り着かないから
数学板にも答え出てません
まぁコレ以上なんかいうとホントに答えになるのでやめときます
頑張ってください
0839デフォルトの名無しさん2021/05/18(火) 02:43:15.99ID:9nwYg6rU
>>837
これかな?18レス付いてた

お題:
回転寿司にやってきた私は、コンベア上のすべての寿司を食べて帰ることにしている
コンベアは1秒に1皿分の速度で流れ、目の前の皿を取るか取らないかを選ぶことができる
私は皿取ると同時に食べ始めるが、食べている間は次の皿を取ることができない
コンベア上の皿は、私が取る以外で勝手に追加されたり無くなったりしない

最初のコンベアの状態が次のような文字列で与えられる
"31_2"
数字(1文字)はその皿を食べ終えるのにかかる秒数を表し、_は皿がないことを表す
1文字目が私の目の前であり、1秒毎に左へ回転する
例えば、最初の皿を食べたとすると食べ終わった時の状態は以下である
"2_1_"

すべての寿司を食べ終わるまで最短何秒か求めよ

"12_3" > 6秒
"313__" > 8秒
"4_35_1264_23_434" > 60秒
"123456789123456789" > ?
0840デフォルトの名無しさん2021/05/18(火) 16:27:57.97ID:JXk1qQ+R
部屋の問題はダンジョンや迷路生成のアルゴリズムに似た物じゃない
パラメタが違うだけ
起点(玄関兼廊下)から幹道(廊下)があって支道(部屋)を生成し全体を枠内に収める
0841デフォルトの名無しさん2021/05/18(火) 18:14:36.87ID:Tj0Ma2DE
対称性があるかどうかも分からない

巨大合成数を生成するのは掛け算するだけでかんたんだけど
それを二つに分けるのはちょっとばかし面倒でしょ
0842デフォルトの名無しさん2021/05/18(火) 22:17:06.70ID:Tj0Ma2DE
>>814で言ってた参考回答ってのはどれ?
0843デフォルトの名無しさん2021/05/18(火) 22:24:03.25ID:Wc7qNqFy
>>842
まだ大きい数字のチェックが終わってないが、出しましょうか
0844デフォルトの名無しさん2021/05/18(火) 22:38:28.26ID:Wc7qNqFy
>>842
これになります
大きい数字で条件違反が出るので、もうふた工夫要りますが
https://ideone.com/Rnq0SJ
0845デフォルトの名無しさん2021/05/18(火) 22:47:15.20ID:Wc7qNqFy
今気づいたけど、問題1のBが1個多いねw
0846デフォルトの名無しさん2021/05/18(火) 23:03:46.69ID:Tj0Ma2DE
500x500くらいになる手頃な大きさの例とか無いの?
0850デフォルトの名無しさん2021/05/19(水) 10:50:08.45ID:4kVeu0Qb
>>776
電話番号の最初が 010 や + ならば国際電話でそれ以外は全て国内電話だと思うが、本当にそれだけの判別で良いのか?
0851デフォルトの名無しさん2021/05/19(水) 11:00:46.78ID:4kVeu0Qb
>>776
携帯の電話番号というのを見落としていた。で、何が携帯番号かの資料は何処にあるのか?
0853Mb2021/05/19(水) 20:17:53.26ID:gE1os4Gp
>>678
> 仮名を清音に変換してから比較する
うん、発想はいいが、いまひとつ。
清音のキーと「長音」「濁音」「拗音」とかのキーをそれぞれ生成して、
それをどうにかして整列キーを生成して文字列順の整列ルーチンに
喰わせる、ということを考えたら完璧。
0855Mb2021/05/19(水) 20:24:02.49ID:gE1os4Gp
>>801
激しく同意する
0856デフォルトの名無しさん2021/05/19(水) 21:05:39.99ID:gAtlXGbl
お題: 複数ある改行を1つの改行にまとめる関数join_newlinesを作成せよ

s = 'abc\ndef\n\nghi\n\n\n'
s = join_newlines(s)
print(s)
# 'abc\ndef\nghi\n'
0859蟻人間 ◆T6xkBnTXz7B0 2021/05/19(水) 21:27:45.26ID:Re+YCmzE
>>854
小学生の頃、かくれんぼしてたの覚えてるか? 今でも覚えてるからな。
0861デフォルトの名無しさん2021/05/19(水) 22:05:24.67ID:l28FZW1e
>>856
haskell

import Data.List

joinNewLines = id
. concat
. map (\x -> if ( head x == '\n' ) then "\n" else x )
. group
0867デフォルトの名無しさん2021/05/23(日) 06:54:55.26ID:g5kAwhGI
>>856 Python
def join_newlines(x): return "\n".join(x.split())
0868デフォルトの名無しさん2021/05/23(日) 13:13:24.19ID:PEJa2qxX
>>867
これで文字列の最初に空行があったり、文字列の最後に空行が続いたというような場合の復元ができるものですか?
0869デフォルトの名無しさん2021/05/23(日) 13:46:27.14ID:P4UGjjTl
まーた後だしジャンケンか
シビれるなぁ
0871デフォルトの名無しさん2021/05/23(日) 20:53:25.70ID:g5kAwhGI
>>868
確かにおかしいですね
一応直してみましたがあんまりすっきりとはいきませんでした
>>856 Python

def join_newlines(x): return "\n".join(("@"+x+"@").split())[1:-1]
0872デフォルトの名無しさん2021/06/01(火) 23:19:09.17ID:FFj30Ig5
数学板より

お題 ヘビサイド関数で近似

問題は長いのでリンク先

分からない問題はここに書いてね 467
https://rio2016.5ch.net/test/read.cgi/math/1619884204/439-440

出力して欲しい3つの数値の例
上のリンクの下の440の方

【具体例1】
N = 3
l r s w
1 3 6 1
0 8 4 1
5 7 2 1

a=4, b1=6, b2=2 としたとき、F(a,b1,b2)=0 になり、これが最小値です。
a=3, b1=6, b2=2 としたとき、F(a,b1,b2)=4 になり、最小値ではありません。
a=4, b1=5, b2=3 としたとき、F(a,b1,b2)=4 になり、これも最小値ではありません。

【具体例2】
N = 4
l r s w
0 2 4 3
1 5 6 9
4 10 1 2
8 9 7 10

a=0.8, b1=1, b2=6 としたとき、F(a,b1,b2)=70 になります。
0873デフォルトの名無しさん2021/06/02(水) 01:03:39.85ID:yNlOa9BD
>>872
ここは数学板じゃないので、
「この問題を解くと、どういう用途に役立つのか」
ということを聞いておきたいと思います。
0874デフォルトの名無しさん2021/06/02(水) 02:49:47.48ID:idDWv9F6
>>873
残念ながらこの質問した人このレスを最後に消えてしまいました
なんの役に立つのやら
0877デフォルトの名無しさん2021/06/04(金) 03:49:13.95ID:xd2yEhgg
お題:teshimatta関数関数を作れ
入力は1文字以上を保証される

teshimatta("起きた")
> "起きてしまった"

teshimatta("やった")
> "やってしまった"

teshimatta("あ")
> "ってしまっあ"

teshimatta("古畑任三郎")
> "古畑任三ってしまっ郎"
0881デフォルトの名無しさん2021/06/05(土) 03:23:53.65ID:lg0pCfQ9
>>877
Kotlin 及び Kotlin script

以下は kotlinc コマンドで REPL で動かした時のコピペ。
>>> はプロンプト。1行目が関数定義。2行目から使用している。

>>> fun teshimatta(s: CharSequence): CharSequence = if (s.isNotEmpty()) StringBuilder(s).insert(s.lastIndex, "てしまっ") else s
>>> teshimatta("起きた")
res1: kotlin.CharSequence = 起きてしまった
>>> teshimatta("やった")
res2: kotlin.CharSequence = やってしまった
>>> teshimatta("あ")
res3: kotlin.CharSequence = てしまっあ
>>> teshimatta("古畑任三郎")
res4: kotlin.CharSequence = 古畑任三てしまっ郎
>>>
0882デフォルトの名無しさん2021/06/05(土) 04:51:26.61ID:oLy6snUx
>>877 Python
def teshimatta(s): return s[:-1] + "てしまっ" + s[-1]
0883デフォルトの名無しさん2021/06/06(日) 01:58:33.61ID:9Hxa2Z/w
お題:一筆書き
0:床、1:穴、2:スタート地点
からなる数字列が与えられる。スタート地点から縦または横に1マスずつ移動し、すべての床を通過することとする。
穴や外周は通過できない。床は一度通過すると穴となり二度目は通過できない。
すべての床を通過できれば「OK」、できなければ「NG」と表示せよ。

【例1】OK
0000
0210
0000
0100

【例2】NG
0000
0200
0010
0000

【例3】OK
000000
210000
000100
000001
000000

【例4】NG
000000
210000
000100
000000
000001
0884デフォルトの名無しさん2021/06/06(日) 10:18:31.19ID:W7O34OA1
>>883
まさかこれ頂点の次数を数えるだけで終わるのか?
0886デフォルトの名無しさん2021/06/06(日) 11:03:23.03ID:9mmqAG88
3次元使えばウルトラC
0891デフォルトの名無しさん2021/06/09(水) 09:58:07.70ID:yucbsR+t
NP完全らしいから事実上考えても無駄で総当たりで検索するしかなさそうやね
0892デフォルトの名無しさん2021/06/09(水) 11:44:53.31ID:7ehWzkTR
>>883 Prolog

'お題:一筆書き
0:床、1:穴、2:スタート地点
からなる数字列が与えられる。スタート地点から縦または横に1マスずつ移動し、すべての床を通過することと
する。
穴や外周は通過できない。床は一度通過すると穴となり二度目は通過できない。
すべての床を通過できれば「OK」、できなければ「NG」と表示せよ。'(_行,_列,L) :- nth1(_スタート,_数字列,2), 選択(_行,_列,_スタート,_数字列).

選択(_行,_列,_n,_数字列) :- \+(member(0,_数字列)), write('OK\n'),!.
選択(_行,_列,_n,_数字列) :- 隣接(_行,_列,_n,_n_2), nth1(_n_2,_数字列,0), '_n番目を1に変える'(1,_n_2,_数字列,_数字列_2), 選択(_行,_列,_n_2,_数字列_2).
選択(_,_,_,_) :- write('NG\n').

'_n番目を1に変える'(_n,_n,[_|R],[1|R]) :- !.
'_n番目を1に変える'(M,_n,[_現在位置|R1],[_現在位置|R2]) :- succ(M,N), '_n番目を1に変える'(N,_n,R1,R2).

隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 - 1, \+(0 is _隣接 mod _列).
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 + 1, \+(1 is _隣接 mod _列).
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 - _列, _隣接 > 0.
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 + _列, _隣接 =< _行 * _列.
0893デフォルトの名無しさん2021/06/09(水) 11:48:43.27ID:7ehWzkTR
>>884 すみません。一箇所間違えました。

Prolog

'お題:一筆書き
0:床、1:穴、2:スタート地点
からなる数字列が与えられる。スタート地点から縦または横に1マスずつ移動し、すべての床を通過することと
する。
穴や外周は通過できない。床は一度通過すると穴となり二度目は通過できない。
すべての床を通過できれば「OK」、できなければ「NG」と表示せよ。'(_行,_列,_数字列) :- nth1(_スタート,_数字列,2), 選択(_行,_列,_スタート,_数字列).

選択(_行,_列,_n,_数字列) :- \+(member(0,_数字列)), write('OK\n'),!.
選択(_行,_列,_n,_数字列) :- 隣接(_行,_列,_n,_n_2), nth1(_n_2,_数字列,0), '_n番目を1に変える'(1,_n_2,_数字列,_数字列_2), 選択(_行,_列,_n_2,_数字列_2).
選択(_,_,_,_) :- write('NG\n').

'_n番目を1に変える'(_n,_n,[_|R],[1|R]) :- !.
'_n番目を1に変える'(M,_n,[_現在位置|R1],[_現在位置|R2]) :- succ(M,N), '_n番目を1に変える'(N,_n,R1,R2).

隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 - 1, \+(0 is _隣接 mod _列).
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 + 1, \+(1 is _隣接 mod _列).
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 - _列, _隣接 > 0.
隣接(_行,_列,_現在位置,_隣接) :- _隣接 is _現在位置 + _列, _隣接 =< _行 * _列.
0895デフォルトの名無しさん2021/06/09(水) 18:59:44.38ID:5vxiK06u
お題:今日は第何曜日か計算して現在の日時を以下のように出力する
2021/06/09/第2水曜日/19:21/

ヒント
今日の日にちを7で割る 例:9 / 7
少数点以下は切り捨て
1を足す
カレンダーを見ながら計算すると分かりやすい
0896デフォルトの名無しさん2021/06/09(水) 19:53:11.25ID:xvC+FdYf
>>895 Ruby

puts Time.now.then{|t| t.strftime('%Y/%m/%d/第%%d%%s曜日/%R') % [(t.day + 6) / 7, %w[日 月 火 水 木 金 土][t.wday]]}

# => 2021/06/09/第2水曜日/19:52
0898デフォルトの名無しさん2021/06/09(水) 22:04:39.42ID:9AlSa9IZ
>>897
>>896のほうが簡単なのでヒント変更
今日の日にちに6を足して7で割る 例:(9+6) / 7
少数点以下は切り捨て
カレンダーを見ながら計算すると分かりやすい
0903デフォルトの名無しさん2021/06/09(水) 22:16:54.83ID:YKvIUGd6
>>902
宿題である証拠あんのか?あ?いいかげんなこといって綾つけてんじゃねえぞおら
0906デフォルトの名無しさん2021/06/09(水) 22:19:03.01ID:YKvIUGd6
>>905
証拠がないんだったら宿題じゃないよね
ここはお題スレだから

どこの学校の何先生が出した宿題なんですかー?w
0907デフォルトの名無しさん2021/06/09(水) 22:19:44.10ID:YKvIUGd6
さっさと証拠出せやおら、だせねえんだったら発言撤回して謝罪しろ大人なめんなよ
0908デフォルトの名無しさん2021/06/09(水) 22:20:34.15ID:YKvIUGd6
自分の発言には責任持とうね、証拠早くだせ、言いがかりつけてただですむと思うなよ
0911デフォルトの名無しさん2021/06/09(水) 22:26:06.61ID:YKvIUGd6
>>910
お前が死んでください
神様お願いします>>910の脳天に雷を落として黒焦げにしてください
それをミキサーでくだいて花壇に撒くととてもきれいなお花が咲きます
よろしくお願いします
0917デフォルトの名無しさん2021/06/09(水) 22:29:52.94ID:jvfDlPRh
>>913
第何曜日か計算するのに日付をそのまま7で割るとかいう発想しかできない糞馬鹿のお前に言われても草しか生えないんだが
0919デフォルトの名無しさん2021/06/09(水) 22:30:45.17ID:QHAeufkP
宿題は宿題スレがあるのでそちらへ。
宿題は宿題スレがあるのでそちらへ。
宿題は宿題スレがあるのでそちらへ。
0922デフォルトの名無しさん2021/06/09(水) 22:34:34.57ID:jvfDlPRh
駒場で公理的集合論研究してる俺にガチ解説して見ろやゴミムシが
お前みたいな雑魚がこの世に生きてるのが一番許せないわ
0923デフォルトの名無しさん2021/06/09(水) 22:35:12.11ID:YKvIUGd6
>>922
1月を30日とするだろ
1〜7 は第1回目の曜日
8〜14 は第2回目の曜日
15〜21 は第3回目の曜日
21〜30 は第4回目の曜日
になる

つまり
1〜7を1に変換する式を考えれば良い
0927デフォルトの名無しさん2021/06/09(水) 22:38:00.52ID:YKvIUGd6
ちなみに集合論は数学の最底辺、集合論を研究してる数学者は文学科と呼ばれてる
0934デフォルトの名無しさん2021/06/09(水) 22:51:39.42ID:YKvIUGd6
>>932
あれあれw君回答してないよね、回答の提出がない人は理解できてないので、すぐに回答を提出するように
0936デフォルトの名無しさん2021/06/09(水) 22:51:51.24ID:k5a+Oahd
> ヒント
> 今日の日にちを7で割る 例:9 / 7
> 少数点以下は切り捨て
> 1を足す

馬鹿過ぎて草も生えない
ヒント とかドヤって思いっきり間違えてるとこが痛々しすぎる

> カレンダーを見ながら計算すると分かりやすい

更に駄目押し
分かりやすいとか言ってるのにコレかよ

真面目に頭の検査してもらった方が良いんじゃねーか?
頭に寄生虫とかウジャウジャ湧いてんじゃねーの?
冗談でも脅しでも無く本当にあるからな
更にキレっぷり見るに火病の疑いもある
死にたくなければマジで脳の検査してこい
0938デフォルトの名無しさん2021/06/09(水) 22:55:04.60ID:YKvIUGd6
>>935
だったらお前はお母さんの子宮からやり直せ
産道を通ってお母さんの膣の臭いを脳味噌に焼き付けてから
歩む人生こそいまのお前にふさわしい
0941デフォルトの名無しさん2021/06/09(水) 23:00:28.30ID:YKvIUGd6
そうだ、お前らコロナのワクチンの注射頭に刺してくださいって言ってみれば?
0942デフォルトの名無しさん2021/06/09(水) 23:02:49.67ID:k5a+Oahd
ガチガイジかどうかまでは分からんが
少なくともガイジ扱いされた事のある人の反応ですね
自覚があるから草で誤魔化す
認めたく無いのだろうけど素直に診療受けた方が良いよ
病種によっては投薬や訓練で治ったり緩和出来るものもあるからさ
0945デフォルトの名無しさん2021/06/09(水) 23:06:41.76ID:ZOi1NsTl
完全に間違ったことを言ってしまったというのに
そのことを指摘されて相手をなお罵倒するというのは
まともな頭脳の持ち主がするところではないわな

しかも自分の正当性を一切主張できていないというのがお笑いポイント
0947デフォルトの名無しさん2021/06/09(水) 23:16:45.29ID:YKvIUGd6
回答してない分際で何の分析してんだよ

YouTubeでもいるよな、松本はわかったうえであえて
こうすることで笑いにしてるみたいな分析をコメントに書くやつ

そしてそれにGoodするやつな、あいつらは本当にアホですわ

もっとアホなのは令和3年に見てる人ーとアンケート取るやつな
0950デフォルトの名無しさん2021/06/09(水) 23:19:39.47ID:jvfDlPRh
>>948
あなたがこの上ない苦しみを感じながらこの世から消え去っていきますように(。>人<。)
0951デフォルトの名無しさん2021/06/09(水) 23:22:41.71ID:YKvIUGd6
>>949
で、君のお題に対する回答コードはどれだね? おん?
他人のコードに便乗するのは認めないよ
0953デフォルトの名無しさん2021/06/09(水) 23:28:22.76ID:YKvIUGd6
>>950
集合論と絡めてもっと洒落たことを言って欲しい
駒場で培った頭をフル回転させて欲しい
君の本気が見たい
0955デフォルトの名無しさん2021/06/09(水) 23:30:53.94ID:YKvIUGd6
>>954
僕の態度が乞食がものを乞う態度でないならば僕は乞食ではないということですよね
これが集合論
0958デフォルトの名無しさん2021/06/09(水) 23:34:28.54ID:YKvIUGd6
>>957
> 習合

wwwwwwこれなんですか?wwwww
wwwwwwwwww習合ってなんですか?wwwwwww
wwwwwwwwwwwwwwなんまんだぶなんまんだぶwwwww
0960デフォルトの名無しさん2021/06/09(水) 23:36:16.61ID:YKvIUGd6
俺は駒場の本気が見たいんだよ

こ・ま・ば! こ・ま・ば! こ・ま・ば!
0961デフォルトの名無しさん2021/06/09(水) 23:52:19.59ID:YKvIUGd6
これでも良いです

ヒント
今日の日にちから1を引く 例:9 - 1 = 8
それを7で割る 例:8 / 7
少数点以下は切り捨て
1を足す
0962デフォルトの名無しさん2021/06/09(水) 23:55:21.66ID:qriTcyP1
>>961
これでもいいですじゃなくてこちらに訂正してくださいませだろ
脳みそ腐ってんのかよ
0963デフォルトの名無しさん2021/06/09(水) 23:59:17.25ID:YKvIUGd6
>>962
それはお前が言うことじゃない
客が神様だとでも思ってるのかつけあがるな痴れ者が
訂正するのは誰なんだ? あ? 日本語わかるか? おん?
0964デフォルトの名無しさん2021/06/10(木) 00:01:30.90ID:SL5oYI2o
訂正してくださいませは訂正しろということだからな
相手に訂正させようとしてんのか? あ?
そんな馬鹿な日本語あってたまるかよ
0965デフォルトの名無しさん2021/06/10(木) 00:04:25.71ID:SL5oYI2o
丁寧な言葉を使おうとするあまりコンテキストにバグを混入させるバカ
プログラマ辞めた方が良い、絶望的に人間に向いてない
汚い庭に首輪で繋がれてワンワン言ってた方が良い
0966デフォルトの名無しさん2021/06/10(木) 00:04:51.89ID:SL5oYI2o
> 962+1 :デフォルトの名無しさん [↓] :2021/06/09(水) 23:55:21.66 ID:qriTcyP1
> >>961
> これでもいいですじゃなくてこちらに訂正してくださいませだろ
> 脳みそ腐ってんのかよ

バカを晒し上げ
0967デフォルトの名無しさん2021/06/10(木) 00:11:31.87ID:n+BhN48t
>>895-896
#!/bin/sh
# 日にち
d=$(date "+%e")
# 第n曜日のn
n=$(( ($d + 6) / 7 ))
# +%a : 曜日 (出力例:木)
dw="第$n"$(date +%a)"曜日"
echo $(date "+%Y/%m/%d/$dw/%H:%M/")
0968デフォルトの名無しさん2021/06/10(木) 00:25:20.64ID:n+BhN48t
>>896
6を足す方法を知ってからだいぶプログラミングが楽になったよ。ありがとう。
#!/bin/sh
d=$(date "+%e")
d7=$(echo "scale=3; $d / 7" | bc)
if [ ${#d7} -lt 2 ]; then n=$d7;
else n=$(echo "scale=3; $d7 + 1.0 " | bc | cut -c 1); fi
dw="第$n"$(date +%a)"曜日"
echo $(date "+%Y/%m/%d/$dw/%H:%M/")
0971蟻人間 ◆T6xkBnTXz7B0 2021/06/10(木) 01:01:43.64ID:KaOpR0kd
お題: 正方形内部の2次元空間(0, 0)〜(100, 100)にランダムに1000個の頂点を配置し、頂点群をk-means++により3個のクラスタに
クラスタリングし、頂点群の位置と3個のクラスタ中央をわかりやすく図示せよ。図示できないときはクラスタ中央の座標を表示せよ。
09739722021/06/10(木) 09:44:47.39ID:gzqz1I/r
TimeZoneをlocalに指定したのだけれど、これが'UTC'になっている。_時に9を足せば
良いだけのことではあるが。local、'UTC'以外の何を指定すればよいのか。
0975デフォルトの名無しさん2021/06/10(木) 12:36:17.95ID:CSZCrfaL
>>967-968
# Python版
from datetime import datetime
import locale
locale.setlocale( locale.LC_TIME, 'ja_JP.UTF-8' )
today = datetime.now().strftime( '%d' )
num = ( int( today ) + 6 ) // 7
print( datetime.now().strftime( '%Y/%m/%d/' + '第' + str(num) + '%A' + '/%H:%M/' ) )
0976デフォルトの名無しさん2021/06/12(土) 19:29:13.34ID:JV+4q1jr
>>895
日から1引いてからじゃないと7日が2になって駄目だよな。
(ヒントに間違いを書いて惑わす作戦か?)
0977デフォルトの名無しさん2021/06/12(土) 19:47:12.79ID:JV+4q1jr
>>895
Kotlin script

Kotlin だから色々省略出来たりもしてはいるがやっぱ長くなるな。

java.time.LocalDateTime.now().run { println("%d/%02d/%02d/第%d%s曜日/%02d:%02d".format(year, monthValue, dayOfMonth, (dayOfMonth - 1) / 7 + 1, "月火水木金土日"[dayOfWeek.value - 1], hour, minute)) }

今これを実行するとこう出る。

2021/06/12/第2土曜日/19:47
0978デフォルトの名無しさん2021/06/12(土) 19:53:47.74ID:JV+4q1jr
そういや (dayOfMonth - 1) / 7 + 1 は (dayOfMonth + 6) / 7 と同じだったな。
と思ってから他の回答見るとみんなそう計算していた。とほほ。
0979デフォルトの名無しさん2021/06/12(土) 20:24:55.76ID:JV+4q1jr
ごめん。Javaのライブラリだともっと簡単にできるんだった。

println(java.time.format.DateTimeFormatter.ofPattern("YYYY/MM/dd/第Weeee/HH:mm").format(java.time.LocalDateTime.now()))

これ、Kotlin かどうかは println() の部分だけで中身は Java でも同じ。
月の中の何週目なのかはFormatterで W を使うと自動でやってくれるので自分で計算しなくても良い。
今実行するとこう出る。

2021/06/12/第2土曜日/20:24
0980デフォルトの名無しさん2021/06/12(土) 20:28:08.93ID:JV+4q1jr
Formatter.ofPattern() での Locale は本当は設定した方が良いかも知れない。>>979は日本語環境で実行したので曜日が日本語になっている。他の言語向け環境だと曜日の文字列は違って出ると思う。
0981デフォルトの名無しさん2021/06/12(土) 21:14:10.13ID:RadmeEVr
>>979
ふーむ
YYYYはweek-based-yearなので2021/12/26が2022/12/26になってしまうよ
Wはweek-of-monthなので6/6が第2日曜日になってしまうよ
0983デフォルトの名無しさん2021/06/12(土) 22:24:48.19ID:RadmeEVr
お題
年月と第何曜日が入力されます
その日付を出力してください

入力: 2021-07,第3月曜日
出力: 2021-07-19
0984デフォルトの名無しさん2021/06/13(日) 00:00:30.76ID:EAgJhZrv
>>983 Ruby
def s2d( str )
return '' unless /(\d+)-(\d+),第(\d+)(.)曜日/ =~ str
tm = Time.new( $1.to_i, $2.to_i, 1, 12 )
( tm + 86400 * ( $3.to_i * 7 - 7 + ("日月火水木金土".index($4) - tm.wday) % 7 ) ).strftime( '%F' )
end

puts s2d( '2021-07,第3月曜日' ) #=> 2021-07-19
閏秒やサマータイムを挟んでもおそらく問題ない
0985デフォルトの名無しさん2021/06/13(日) 00:26:28.82ID:FnAquiwp
JS
const f = (x) => {
let [p,q] = x.split(","); let days = {日:0,月:1,火:2,水:3,木:4,金:5,土:6};
let nth = q.match(/\d/)[0]*1;
let day = (r=>{
for (let [k,v] of Object.entries(days)) { if (q.includes(`${k}曜日`)) {return v}}
})(q)
let i = 1;
while (i<32) {
if (new Date(`${p}/${i}`).getDay()!=day) {i++;}
else if (nth != 1) {i+=7; nth--;}
else {break}
}
return new Date(`${p}/${i}`).toLocaleDateString();
}
やっつけ
0986デフォルトの名無しさん2021/06/13(日) 01:31:13.98ID:yIXAqgJY
>>981
あ。そうか。YYYYはyyyyにするとしても、第xの方は計算しないと駄目か。
0989デフォルトの名無しさん2021/06/14(月) 01:12:22.04ID:fkUpCs5d
>>983

haskell

import Data.Time
import Data.Time.Calendar
import Data.List

data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat deriving ( Eq ,Show )

nthWeekDayOf y m n w = let
Just wn = elemIndex w [ Sun, Mon, Tue, Wed, Thu, Fri, Sat ]
baseDay = ( fromGregorian 2021 6 13 )
firstDay = fromGregorian y m 1
diffDaysOfFst = fromInteger $ diffDays firstDay baseDay
d = 1 + mod ( wn - diffDaysOfFst ) 7 + 7 * ( n - 1 )
in fromGregorian y m d

main = do
print $ nthWeekDayOf 2021 7 3 Mon
0991デフォルトの名無しさん2021/06/15(火) 17:23:21.13ID:mBLvqrdS
c#
OPEN FILE DIALOGで複数画像ファイル取得
配列に入れる
40秒後2枚目表示、また40秒後3枚目表示という感じで5枚表示したい。
表示はpicture BOXで。
099392021/06/17(木) 00:48:24.30ID:cL+lrU1C
>>983 Perl5

use utf8;
$in = '2021-07,第3月曜日';
%h = map{$_ => ++$i} split '','月火水木金土日';
($y, $m, $wom, $dn) = $in =~ /(\d+)-(\d+),第(\d)(.)曜日/;
$dow = $h{$dn};
use DateTime;
$d = 7 * ($wom - 1) + $dow + DateTime->new(year => $y, month => $m)->day_of_week;
printf "$y-$m-%02d\n", $d;


実行結果
~ $ perl 19_983_day_of_month.pl
2021-07-19
0994デフォルトの名無しさん2021/06/17(木) 20:30:35.17ID:XyG5DJkY
# >>895のPython版、>>898のPython版は>>975コレのほうが簡単
import datetime, locale, math
now = datetime.datetime.now()
locale.setlocale( locale.LC_TIME, 'ja_JP.UTF-8' )
# 今日の日にちを取得、型は文字列
day = now.strftime( '%d' )
div7 = ( int( day ) / 7 )
# 日にちを7で割って割り切れたらそれが第何曜日の何に入る数字
# 割り切れなかったら1を足して小数点以下を切り下げ
# import math ; math.floor( 3.9 ) #実行結果は3
# カレンダーを表示させて日にちを7で割ると分かりやすい
if type( div7 ) == int: num = div7
else: num = math.floor( div7 + 1 )
print( now.strftime( '%Y/%m/%d/' + '第' + str(num) + '%A' + '/%H:%M/' ) )
0996デフォルトの名無しさん2021/06/17(木) 20:45:10.42ID:LjywRDNy
>>994のコードをPython3の read-evaluate-print loop (REPL)ウィンドウにコピペして実行するときは
最終行手前のelse行の行末までをコピペした後にEnterキーを2回押して
repl画面に>>>を出してから最終行のprint文を実行する
1000デフォルトの名無しさん2021/06/19(土) 00:04:50.94ID:MQWrKSb7
println(1000)
10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 201日 0時間 0分 46秒
10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況