プログラミングのお題スレ Part12 at TECH
[2ch|▼Menu]
[前50を表示]
200:デフォルトの名無しさん
18/10/25 20:33:50.34 BSekExc/.net
スレタイ

201:デフォルトの名無しさん
18/10/25 23:54:56.07 Hzy8+5Se.net
あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ

202:デフォルトの名無しさん
18/10/25 23:59:06.56 9OC64j5F.net
>>191
2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、
powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね
スクリプトはこんな感じかね
$html= Invoke-WebRequest -UseBasicParsing URLリンク(nweb.cjh.com.cn)
$pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`""
if ($html.RawContent -match $pattern) {
$time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3])
"三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4]
}

203:デフォルトの名無しさん
18/10/26 01:56:21.09 zqmCYDLg.net
無駄に一行だな

204:デフォルトの名無しさん
18/10/26 03:39:31.47 c84xrxY5.net
>>172
(fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))

205:デフォルトの名無しさん
18/10/26 19:50:36.71 /kG4owY9.net
お題
ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。
0013
0123
122.
013.
0123
=> 4
9.9.9.9.9.9
.9.9.9.9.9.
=> 1
0123
3012
2301
1230
=> 0

206:デフォルトの名無しさん
18/10/26 20:45:47.09 yqPKU+uE.net
>>196
おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!

207:デフォルトの名無しさん
18/10/26 20:51:49.05 8JGFizba.net
>>199
2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?

208:デフォルトの名無しさん
18/10/29 19:22:44.11 PHNS982/.net
>>172
Kotlin
URLリンク(paiza.io)
入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。

209:デフォルトの名無しさん
18/10/30 17:20:53.74 xBpFVgTt.net
>>199 python3
URLリンク(ideone.com)
最適もへったくれもないゴリ押しですわ…

210:デフォルトの名無しさん
18/10/30 21:09:38.22 RM3bKAov.net
お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。
 1行目: 現在のページ番号
 2行目: 総ページ数
 3行目: 表示するリンク数
例1
入力:
1
10
5
出力:
[1] 2 3 4 5
例2
入力:
5
10
5
出力:
3 4 [5] 6 7
例3
入力:
10
10
5
出力:
6 7 8 9 [10]

211:デフォルトの名無しさん
18/10/30 22:21:08.83 Mk80lxDb.net
>>204 perl
$now = shift or die $! ;
$all = shift or die $! ;
$show = shift or die $! ;
$x = 1 + int $show/2;
$y = $all - $x + 1;
if($now <= $x){
$start = 1;
}elsif($y <= $now){
$start = $all - $show + 1;
}else{
$start = $now - int $show/2;
}
$end = $start + $show - 1;
print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end);

212:デフォルトの名無しさん
18/10/30 22:51:09.23 N8SwgYLQ.net
>>204
Python3
current = int(input())
total = int(input())
n_links = int(input())

assert 1 <= current <= total and n_links <= total

if current <= n_links//2:
seq = range(1, n_links+1)
elif current >= total-n_links//2:
seq = range(total-n_links+1, total+1)
else:
left = current - n_links//2
right = current + n_links//2 + (0 if n_links%2 == 0 else 1)
seq = range(left, right)
seq = ["[{}]".format(s) if s == current else str(s) for s in seq]
print(" ".join(seq))

213:デフォルトの名無しさん
18/10/30 22:54:52.47 N8SwgYLQ.net
うまく貼れなかった
URLリンク(ideone.com)

214:デフォルトの名無しさん
18/11/02 11:25:03.96 b7bQuZgR.net
>>204 Squeak Smalltalk
| fn |
fn := [:pg :tot :wd |
| start pages |
start := pg - (wd // 2) min: tot - wd + 1 max: 1.
pages := start to: start + wd - 1.
(pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' '
].
#((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri]
"=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') "

215:デフォルトの名無しさん
18/11/02 23:41:59.56 8MYT0pgk.net
三峡水? 02日 23?00分 174.53 -(入)14700(出)

216:デフォルトの名無しさん
18/11/03 04:09:45.11 vg8hCxXN.net
>>204
Kotlin
URLリンク(paiza.io)
折角日本語使えるんだからたまには使わないとな。

217:デフォルトの名無しさん
18/11/03 08:08:00.00 BMDI0yEn.net
>>172 rust
URLリンク(ideone.com)
>>204 rust
URLリンク(ideone.com)

218:デフォルトの名無しさん
18/11/03 23:34:36.36 BMDI0yEn.net
>>172 c
URLリンク(ideone.com)
>>204 c
URLリンク(ideone.com)

219:デフォルトの名無しさん
18/11/04 13:46:33.88 pidkuN2F.net
>>204
Haskell
main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)]
put (x,y,z) = return (pager x y z) >>= print
pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b]
pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b]
pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b]
mklist a xs = [small a xs , jst a xs , big a xs]
small a = filter (< a)
big a = filter (> a)
jst a = filter (== a)
結果
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]

220:デフォルトの名無しさん
18/11/04 13:47:27.44 pidkuN2F.net
結果が切れた。。。
改めて結果。
[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]
[executed "pager.hs"]

221:デフォルトの名無しさん
18/11/05 17:57:48.99 GRwYYoWB.net
お題
3つの自然数A,B,Cが与えられる。
初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。
含まれる場合は第何項


222:であるかを返し、含まれない場合は偽を返すものとする。



223:デフォルトの名無しさん
18/11/05 20:17:41.49 0wNeh4D8.net
>>215 python
def fibo(a, b):
_yield a
_yield b
_while True:
__yield a + b
__a, b = b, a+b
def func(fb, n):
_count = 1;
_while True:
__num = fb.next()
__print "{} th term = {}".format(count, num)
__if num >= n:
___if num == n:
____return count
___else:
____return False
__count = count + 1
_return False

a, b, c = 1, 1, 100
print func(fibo(a, b), c)

224:デフォルトの名無しさん
18/11/05 20:25:58.31 0wNeh4D8.net
同じもの
URLリンク(ideone.com)

225:デフォルトの名無しさん
18/11/05 21:15:45.04 b01o/g5T.net
>>215 rust
URLリンク(ideone.com)

226:デフォルトの名無しさん
18/11/05 23:33:04.48 6d8cBeMO.net
>>215 Ruby
require 'matrix'
def hoge(a, b, c)
rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]]
(0..Float::INFINITY).each do |n|
m = fm * im
return m[1, 0] > c ? false : n if m[1, 0] >= c
fm *= rm
end
end
p hoge(0,1,88) #=> false
p hoge(0,1,89) #=> 11
p hoge(0,1,90) #=> false

227:デフォルトの名無しさん
18/11/06 03:12:12.75 BD76rR44.net
>>215
Kotlin
URLリンク(paiza.io)

228:デフォルトの名無しさん
18/11/06 07:54:03.24 GFB90oOd.net
C
初項の次第二項って書いてるのに、みんな何故0始まりなの。。。
#include <stdio.h>
int fibin(int,int,int);
int main(void)
{
for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i));
return 0;
}
int fibin(int fst,int snd,int num)
{
int i = 2,fib = fst;
if(fst == num) return 1;
if(snd == num) return 2;
while(fib != num)
{
fib = fst;
fib += snd;
if(fib <= num) i++;
else return -1;
fst = snd;
snd = fib;
}
return i;
}

229:デフォルトの名無しさん
18/11/06 09:23:46.31 jl2IXbjS.net
(A,B,C)が(0,0,0),(0,1,0),(0,1,1),(1,0,0),(1,0,1)の時はCが無限回、(1,1,1),(0,X,X),(X,0,X),(X,X,X)(2≦X)の時はCが2回出現することがあるが考慮した方が良いか?

230:デフォルトの名無しさん
18/11/06 10:48:03.28 VF9SVEaj.net
A,Bによっては無限ループになり得ないか?

231:219
18/11/06 11:49:20.62 13CfGTjW.net
そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。

232:219
18/11/06 11:52:26.86 13CfGTjW.net
した。見事にした。
足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。
今さら直す気は起きんが。

233:デフォルトの名無しさん
18/11/06 11:52:29.61 GFB90oOd.net
>>222
今まで投稿されてるコード見る限りは最初に見つけた時点で停止。
>>223
自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。

234:デフォルトの名無しさん
18/11/06 12:34:42.11 jAy4xbYh.net
>>215 Squeak/Pharo Smalltalk
| fibGen fn |
fibGen := [:fst :snd |
Generator on: [:g |
| a b |
a := fst. b := snd.
g yield: a. [b := a+b. g yield: (a := b-a)] repeat
]
].
fn := [:A :B :C |
| count fib last |
count := 1. fib := fibGen value: A value: B.
[(last := fib next) < C] whileTrue: [count := count + 1].
last = C ifTrue: [count] ifFalse: [false]
].
fn value: 1 value: 1 value: 89. "=> 11 "
fn value: 1 value: 1 value: 90. "=> false "

235:デフォルトの名無しさん
18/11/06 14:46:16.34 GFB90oOd.net
Haskell
main = mapM_
(\x -> putStr (show x ++ ":") >> print (fibin 0 1 x))
[0..6]
fibin 0 0 c | c /= 0 = Nothing
fibin a b c = lookup c $
zip (take (10 + c) fib) [1..]
where fib = a:b:(zipWith (+) fib (tail fib))

236:デフォルトの名無しさん
18/11/06 18:51:28.38 2YnZy0Ze.net
>>215 ruby
URLリンク(ideone.com)
AとB足してゼロ問題に対しては
fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}}

237:デフォルトの名無しさん
18/11/06 22:17:30.30 Nv8RqtnA.net
お題
xy平面上の点がn+1個与えられる(各点のx座標は互いに異なる)
与えられた点をすべて通る関数 y=a[i]x^n+...+a[1]x+a[0] の係数a[i]を求めよ
[入力]
点の個数(n+1)
x[0] y[0]
...
x[n] y[n]
[出力]
a[n] ... a[0]
2
0 1
1 3
=> 2 1 (y=2x+1)

1
100 100
=> 100
5
0 1
-1 5
2 2
4 -1
1 0
=> -2/15 4/15 49/30 -83/30 1

238:デフォルトの名無しさん
18/11/06 23:24:52.38 bpzsP6yI.net
【ラグランジュ補間】
Σ[i=1,n] )y[i]Π[k≠i](x-x[k])/ (x[i]-x[k])
この係数を計算するだけ。
こういう純数学的な処理は、お題としてはどうかな?
応用上、常に展開した係数を求めるのに意味がある
とも限らんし、精度評価が重要だったりとか

239:デフォルトの名無しさん
18/11/06 23:43:20.04 iVEsbroy.net
>>230
線形代数は偉大
import numpy as np
N = int(input())
x, y = [], []
for i in range(N):
_x, _y = map(float, input().split())
x.append(_x)
y.append(_y)
x = np.array(x)
y = np.array(y)
px = np.array([x**k for k in range(N)])
a = np.dot(y, np.linalg.inv(px))
print(a[::-1])

240:デフォルトの名無しさん
18/11/06 23:51:57.59 bpzsP6yI.net
[1 x[0] x[0]^2...x[0]^n] [a[n]] =[y[0]]
[1 x[1] x[1]^2... x[1]^n] [a[n-1]]=[y[1]
[1 x[2] x[2]^2...x[2]^n] [a[n-2]]=[y[2]]
...
[1 x[n] x[n]^2 .... x[n]^n] [a[0] ]=[y[n]]
を解かせたというわけか...

241:デフォルトの名無しさん
18/11/07 00:03:06.07 q3WQuIHF.net
また数学板から荒らしにきたのか

242:デフォルトの名無しさん
18/11/07 00:56:30.16 yYgCxC/p.net
お題: 四則演算の文字列を受け取って計算結果を返す
1+2+3+4
=> 10
4+5*6-2*3
=> 28
5+12*(2+9/3)/((2+3)*5-7*3)
=> 20

243:デフォルトの名無しさん
18/11/07 00:58:06.61 B66LtM9k.net
>>230 Ruby
s = ->a, b{a.zip(b).map{|i, j| i - j}}
t = ->a, k{a.map{|i| i * k}}
n = gets.to_i - 1
m = $<.read.split($/).map{|e| f[n, *e.split.map(&:to_r)]}
(1..n+1).each do |r|
(nonzero = m[r- 1..-1].find_index{|e| e[r].nonzero?} + r - 1) && next
m[r - 1], m[nonzero] = m[nonzero], m[r - 1]
m[r - 1] = t[m[r - 1], 1/m[r - 1][r]]
[*[*(0..n)] - [r - 1]].each{|i| m[i] = s[m[i], t[m[r - 1], m[i][r]/m[r - 1][r]]]}
end
puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '
2
0 1
1 3
#=> 2 1 (y=2x+1)
3
1 1 1 1
5 4 2 1
8 9 3 1
#=> -1/2 11/2 -4

244:デフォルトの名無しさん
18/11/07 01:00:36.71 B66LtM9k.net
>>236 訂正 尚複数解存在する時は最も次数の小さいものを出力
2
0 1
1 3
#=> 2 1
3
1 1
5 2
8 3
#=> -1/2 11/2 -4

245:デフォルトの名無しさん
18/11/07 01:50:15.65 B66LtM9k.net
>>235
ruby -nle'puts [$_,eval($_)]*" => "'
1+2+3+4 => 10
4+5*6-2*3 => 28
5+12*(2+9/3)/((2+3)*5-7*3) => 20

246:デフォルトの名無しさん
18/11/07 02:11:40.28 B66LtM9k.net
>>236 訂正
s = ->a, b{a.zip(b).map{|i, j| i - j}}
t = ->a, k{a.map{|i| i * k}}
n = gets.to_i
m = $<.read.split($/).map{|e| f[n + 1, *e.split.map(&:to_r)]}
n.times do |r|
  (nonzero = m[r..-1].find_index{|e| e[r].nonzero?} + r) || next
  m[r], m[nonzero] = t[m[nonzero], 1/m[nonzero][r + 1]], m[r]
  [*[*(0..n + 1)] - [r]].each{|i| m[i] = s[m[i], t[m[r], m[i][r + 1]/m[r][r + 1]]]}
end
puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '

247:デフォルトの名無しさん
18/11/07 12:58:28.67 jk7t6Ngg.net
>>230 Squeak Smalltalk
| fn |
fn := [:points |
| xs ys fi gi |
xs := points collect: #x.
ys := points collect: #y.
fi := [:x :i | ((1 to: xs size) copyWithout: i) inject: 1 into: [:prod :k | prod * (x - (xs at: k))]].
gi := [:i |
(0 to: xs size - 1) collect: [:n | n = 0 ifTrue: [1] ifFalse: [
(Array streamContents: [:ss |
(xs copyWithoutIndex: i) combinations: n atATimeDo: [:comb |
ss nextPut: (comb negated reduce: #*)]
]
) sum
]]
].
(ys * ((1 to: xs size) collect: gi) / (xs collectWithIndex: fi)) sum
].
fn value: {0@1. 1@3}. "=> #(2 1) "
fn value: {100@100}. "=> #(100) "
fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "

248:デフォルトの名無しさん
18/11/07 13:01:59.20 jk7t6Ngg.net
>>230 Pharo Smalltalk w/PolyMath >>232っぽく
"Metacello new
repository: 'github://PolyMathOrg/PolyMath:master/src';
baseline: 'PolyMath';
load"
| fn |
fn := [:points |
| xs ys xp |
xs := points collect: #x.
ys := points collect: #y.
xp := (PMMatrix rows: ((xs size - 1 to: 0 by: -1) collect: [:m | xs raisedTo: m])) transpose.
(xp inverse * ys asPMVector) asArray
].
fn value: {0@1. 1@3}. "=> #(2 1) "
fn value: {100@100}. "=> #(100) "
fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "

249:デフォルトの名無しさん
18/11/07 18:36:22.03 LRSzKna1.net
お題
Windows bitmap画像(.bmp)は通常、下から上に向かって画像が記録されているが、
高さに負の値を指定することで、上から下へ向かって画像を記録することができる。
これを利用してbmp画像の上下を反転せよ。

250:デフォルトの名無しさん
18/11/07 18:45:22.44 oTVd6hn3.net
どこが問題なのw
仕様に沿った解決法言っちゃってるじゃんw

251:219
18/11/07 19:20:37.53 bimd4khF.net
>>243
プログラムを作るのがお題だろう。
ここはプログラミングのお題スレなんだからこれでいいんだよ。
むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。

252:デフォルトの名無しさん
18/11/07 20:13:22.48 Uevtgk2mh
社会貢献のための生成とはどうあるべきかについて考えればいいじゃないか。
それを無くしては単なる社会主義的生産物として生きていく日々だよ。

253:デフォルトの名無しさん
18/11/07 20:23:12.93 Uevtgk2mh
それとも社会貢献はプログラミングのお題じゃないってか?
頭良すぎるだろ。

254:デフォルトの名無しさん
18/11/07 20:24:13.29 Uevtgk2mh
俺にも下品さの師匠を教えてくれよ。
お前らみたいに豊かになりてーわ笑。

255:デフォルトの名無しさん
18/11/07 19:56:07.71 5DjOPE5m.net
>>242 Ruby
in_fname = 'hoge.bmp'
out_fname = 'hoge_ud.bmp'
File.binwrite(out_fname, File.binread(in_fname).tap{|b| b[22, 4] = [-b[22, 4].unpack(?l).pop].pack(?l))

256:デフォルトの名無しさん
18/11/07 20:06:47.46 umLQTzF1.net
>>244
あなたがそういう問題しか好きじゃないか解けないだけでしょ
スレ民の総意みたいな言い方しないで

257:デフォルトの名無しさん
18/11/07 20:14:12.09 Lazgvcn1.net
>>244
紙とえんぴつで解ける数学問題みたいなやつがプログラミングのお題としてダメなのは同意なんだけど>>242は例えば
画像の上下を反転せよ。入力はbmpとする。
とかのほうが良かったんじゃないかな。
愚直に配列いじる奴を尻目に仕様を利用して華麗に解くやつが現れる。
これがいいんじゃないか。

258:219
18/11/07 21:05:56.46 bimd4khF.net
>>249
スレ民の総意がどうであろうともこのスレはプログラミングのお題スレなんだからプログラミングのお題になってないのはスレチであることには代わりがない。
適切なスレに書くかまたはなければ新たにそれ用のスレを作って書けば良い。
>>250
それでもいいかも知れないが問題が簡略化されているために自分で仕様を調べるというプログラミングとは少し違う作業が発生するな。
更に仕様の盲点に気付くかというクイズ的な要素もある。

259:デフォルトの名無しさん
18/11/07 21:15:41.59 wOCAlbJb.net
まあ式を実装するだけの数学問題と大差ないお題にしてしまうような要素は不要だったな

260:デフォルトの名無しさん
18/11/07 21:15:43.65 h4FWJh3K.net
>>249
>>248 じゃないけど、数学の問題は問題自体が分からないから手が出せない。
高卒でも分かるように噛み砕いて貰えれば書けるかもだが。

261:デフォルトの名無しさん
18/11/07 21:17:30.61 h4FWJh3K.net
そう考えると、プログラミングの能力って言語覚えるより問題を理解する能力だよな。。。

262:デフォルトの名無しさん
18/11/07 22:05:04.79 DuFCNJWg.net
噛み砕くとこうだな
ファイルの22バイトめから保存されている4バイト長の整数値の符号を反転せよ。
ただし数値は下位バイトから順に格納されており、負数は2の補数表現を用いるものとする。

263:デフォルトの名無しさん
18/11/07 22:06:17.13 DuFCNJWg.net
出力は反転した数値以外は元のファイルと同じ内容のファイルとする
も要るか

264:デフォルトの名無しさん
18/11/07 22:14:53.17 h4FWJh3K.net
>>255
ごめん
>>230-231 の方が分からないんだ。。。

265:デフォルトの名無しさん
18/11/07 22:28:14.93 /kHK9X1+.net
それこそ数学の質問スレでやってくれない?

266:デフォルトの名無しさん
18/11/08 03:03:27.47 yQlGi5bN.net
>>244
>ここはプログラミングのお題スレなんだからこれでいいんだよ。
>むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。
スレタイ『プログラマーは何を勉強すべきか?』
プログラマーは何を勉強すべきかということだが、最新のトレンドに適応した勉強が必要だ。
俺は今までこれだけ沢山勉強してきたという人も、実は最新のトレンドに適応していない可能性もある。
5、結論
  以上の結果より導き出される京大英語で8割を超すための対策は、「ネイティブ英語とは何か」
を定義づけして学ぶことに尽きるだろう。
  たとえば、「この料理はまずい」という英作文なら受験生に多いのが
 This dish tastes poor.
しかし、これは評価されない。なぜなら、英語として正しくてもマナー違反。英検英語なら否定文にして、
This dish isn't good. これでマナーは改善された。
  しかし、ネイティブなら I don't like this dish. と言うだろう。本当に不味い場合は、
Yuck! と叫ぶ。そういう違いだ。
 問題は、
「受験英語の参考書や問題集で取り上げられている構文や表現が現実に使われている英語と違う」
  という事実。それを指導している教師や講師も、外国生活がなく50年前の表現を気づかずに指導して
いること。そのために、校内テストや模試で高得点や上位の順位をとっても落ちてしまうこと。
URLリンク(storys.jp)

267:デフォルトの名無しさん
18/11/08 03:57:11.05 AySxWi85.net
「この料理はまずい」の時点でマナー違反なんだからそのまま訳すのが正しい
料理がまずいときの一言を答えさせたいならそう出題すればいいことだ
そういう出題側の質とか意識してんのかなこいつ

268:デフォルトの名無しさん
18/11/08 04:48:49.11 QHwNiY6E.net
数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。
このスレでは、頭を使わず、単純な総当たり問題が好まれる
その方が、プログラミング的な問題

269:デフォルトの名無しさん
18/11/08 05:18:56.02 HOEn5tLb.net
お題:
自然数Nと、N個の「半角の小文字アルファベットと数字からなる1文字以上の文字列」が標準入力から順次与えられます。
文字列をNatural Sort*して標準出力から順次出力してください。
追加問題:
お題1を正規表現を使わず実装してください。
*:
"a120"と"a13"が与えられた場合、"a13","a120"の順番にソートするようにする。
また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、
"0"と"a"のどちらが先に来るかについては自由とします。

270:デフォルトの名無しさん
18/11/08 05:51:13.63 yQlGi5bN.net
>>261
>数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。
>このスレでは、頭を使わず、単純な総当たり問題が好まれる
ならば、「チンポがシコシコする」という日本語表現は、文法的に正しいのか?
チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。
オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンボ)が別々になっている場合とが考えられる。けれども「チンボ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。
違うか?
「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!

271:デフォルトの名無しさん
18/11/08 07:42:34.26 Tu3rCJEk.net
>>261
まあそうなんだけど、数学スレでガンガンプログラミング言語で答え出してる奴がいて正直羨ましい。

272:デフォルトの名無しさん
18/11/08 09:21:24.69 UCtqQ5sl.net
なぜそのスレで頑張らないのか。
二軍でヒーローになろうと思ってここで数学の問題出してるの?

273:デフォルトの名無しさん
18/11/08 09:28:43.02 Tu3rCJEk.net

私は出題者じゃ無いよ。

274:デフォルトの名無しさん
18/11/08 09:57:33.73 2oWgTmr1.net
>>265
>なぜそのスレで頑張らないのか。
>二軍でヒーローになろうと思ってここで数学の問題出してるの?
俺はただパソコンに向かって独り言ブツブツ言って、チンポがシコシコしてるだけだが?

275:デフォルトの名無しさん
18/11/08 09:57:41.43 llemawmF.net
>>262
How do I do a natural sort on an array?
URLリンク(www.perlmonks.org)
これを実装すんの?

276:デフォルトの名無しさん
18/11/08 10:23:04.41 Cbg63GbQ.net
>>263
君が何を言いたいのかよくわからない。

277:デフォルトの名無しさん
18/11/08 10:34:41.85 yQlGi5bN.net
>>269
『チンポ』についての生態学は、俺にもよくわからん。

278:デフォルトの名無しさん
18/11/08 11:03:16.65 WO5MlDuJ.net
>>262 Ruby
puts$<.readlines.sort_by{|a|[a.scan(/\d+|\D+/).map{|e|e.to_i(36)},a.size]}

279:デフォルトの名無しさん
18/11/08 14:52:40.11 9PdT3eEJ.net
>>271
>>262
>また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、

280:デフォルトの名無しさん
18/11/08 15:03:35.30 5p9g1xrz.net
>>272
問題無い
# stdin
a130
a12
a001
a01
a1
1
# stdout
1
a1
a01
a001
a12
a130

281:デフォルトの名無しさん
18/11/08 15:08:17.09 9PdT3eEJ.net
>>273
a01b2
a1b0002

282:デフォルトの名無しさん
18/11/08 15:11:12.86 5p9g1xrz.net
>>274
うわー恥ずかしい
指摘ありがとう

283:デフォルトの名無しさん
18/11/08 15:11:38.15 rrpg0ZUw.net
>>273
a001
a12
これ逆にならんとあかんのとちゃう?

284:デフォルトの名無しさん
18/11/08 15:14:27.12 tjdDhH3P.net
>>215 python3
むりやり数式で解いてみた
URLリンク(ideone.com)

285:デフォルトの名無しさん
18/11/08 15:33:18.20 quzojjRV.net
ソートの問題、
連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな
つまり
a01a
a1b
a01b
をソートすると
a01a
a1b
a01b

286:デフォルトの名無しさん
18/11/08 16:29:56.18 Tu3rCJEk.net
>>262
Haskell
main = concat $ map qsort grop
grop = map filterlen [1..(maximum $ map length input)]
filterlen n = filter (\x -> n == length x) input
qsort [] = []
qsort (x:xs) = small ++ [x] ++ big
where small = qsort [a |a <- xs, a <= x]
big = qsort [a | a <- xs, a > x]
input = ["a130","a12","a001","a01","a1","1"]

287:デフォルトの名無しさん
18/11/08 16:31:19.84 Tu3rCJEk.net
input = ["a130","a12","a001","a01","a1","1"]

288:デフォルトの名無しさん
18/11/08 18:41:10.95 e5hl87sZ.net
>>278
>連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな
同じ数値のときじゃなくて全体が等しいときか

289:デフォルトの名無しさん
18/11/08 18:52:29.20 B0s1LWLV.net
>>279
input = ["01m30s","1m45s","02m03s"]
結果
["1m45s","01m30s","02m03s"]
あんまりnatural じゃない感じ

290:デフォルトの名無しさん
18/11/08 19:15:05.42 85A5tG8V.net
お題
M行N列の領域をジグザグスキャンするときの順序を求めよ
3 3
=>
1 2 6
3 5 7
4 8 9
4 2
=>
1 2
3 5
4 6
7 8
3 5
=>
01 02 06 07 12
03 05 08 11 13
04 09 10 14 15
1 8
=>
1 2 3 4 5 6 7 8

291:デフォルトの名無しさん
18/11/08 22:07:15.82 k/fJXxDB.net
>>235 ruby
URLリンク(ideone.com)

292:デフォルトの名無しさん
18/11/08 22:11:37.46 Tu3rCJEk.net
>>282
そう?
ナチュラルソートっての知らんけど、その結果見ても仕様通りと思うんだが。

293:デフォルトの名無しさん
18/11/08 22:16:02.65 EeFetNer.net
>>271を訂正 Ruby
puts$<.readlines.sort_by{|a|a.scan(/(\D*)(\d+)/).map{|i,j|[i,j.to_i,j.size]}}
# stdin
a01b2
a1b0002
a130
a12
a001
a1
1
# stdout
1
a1
a1b0002
a01b2
a001
a12
a130

294:デフォルトの名無しさん
18/11/08 23:33:47.08 TLTEncZh.net
誰に何を文句言うわけでもないがナチュラルソートってのは一般に
"01.25" < "1.5"
"01m 25cm" < "1m 35cm" とか
"Chapter 001 section 5" < "Chapter 1 section 6"
となるような順序での整列
逆でもいいけど
問題の仕様はどうかしらんが単に用語の解説ね

295:デフォルトの名無しさん
18/11/08 23:49:40.65 I6IWEGdd.net
今回の問題の仕様とは微妙に違うから回答にはならないけど
echo -e "01m30s\n1m45s\n02m03s" | sort -V
01m30s
1m45s
02m03s
ナチュラルソートならこうなるべきだな

296:デフォルトの名無しさん
18/11/09 09:07:23.82 cVPfgm+I.net
>>287-288の仕様で Ruby
args = [
  '01.25', '1.5', '01m 25cm', '1m 35cm',
  'Chapter 001 section 5', 'Chapter 1 section 6',
  '01m30s', '1m45s', '02m03s'
]
nsort = lambda do |args|
  f = ->str{str.scan(/(?=.)(\D*)(\d+(\.\d+)?)/).flat_map{|a, b| b.empty? ? [a] : [a, b.to_r]}}
  g = ->str{str.scan(/\d+/).map(&:size)}
  args.sort do |str1, str2|
    comparison = f[str1] <=> f[str2]
    comparison.zero? ? g[str1] <=> g[str2] : comparison
  end
end
p nsort[args]
#=>["01m30s",
"1m45s",
"01m 25cm",
"1m 35cm",
"01.25",
"1.5",
"02m03s",
"Chapter 001 section 5",
"Chapter 1 section 6"]

297:デフォルトの名無しさん
18/11/09 17:42:13.83 SNvr5Euv.net
>>269
『チンポ』については、自分でも良くわからない、何とも言えない不思議な生き物だ。

298:デフォルトの名無しさん
18/11/09 18:36:42.14 B4AEy6G3.net
お題
1以上N以下の奇数を並べた数の桁数を求めよ
3
=> 2 (13)
10
=> 5 (13579)
9999
=> 19445 (135...99979999)
123456789
=> ?
31415926535897
=> ?

299:デフォルトの名無しさん
18/11/09 18:45:16.11 DHGOZxva.net
>>291
桁数というか奇数が何個かって話やね。
わざわざ分かりにくい仕様とか、コミュ障かと。

300:デフォルトの名無しさん
18/11/09 18:47:33.93 DHGOZxva.net
ん、ああ。
10とか100とかになったら個数と桁数は違うか。
悪かった。

301:デフォルトの名無しさん
18/11/09 19:31:42.41 myvceSEv.net
お題
与えられた数を最小文字数で生成する。

302:デフォルトの名無しさん
18/11/09 19:36:37.28 b84kY48J.net
>>291 rust
URLリンク(ideone.com)

303:デフォルトの名無しさん
18/11/09 19:38:13.95 JsSTi+Gx.net
>>294
問題の意味がわからん。何か例を書いてくれ。

304:デフォルトの名無しさん
18/11/09 19:45:38.08 OW/zGENl.net
意味のわからない日本語を解析する

305:デフォルトの名無しさん
18/11/09 19:46:38.02 A6qAb8kp.net
134217728 が与えられたら 8^9 を返すとかそういう話かね?

306:デフォルトの名無しさん
18/11/09 19:46:54.75 EUp1VEAA.net
>>291
Haskell
main = mapM_ print $ zip3 lst fosl fos
oddstr [] = []
oddstr (x:xs) = show x:oddstr xs
fo = map (\x-> filter (odd) [1..x]) lst
foo f = map (f.concat.oddstr) fo
fos = foo id
fosl = foo length
lst = [3,10,999,123456789,31415926535897]
コードはすぐ出来たけど、計算が終わらないw
奇数が多すぎてバッファに残ってなさそうだから、ファイルにリダイレクトし直しかな。。。

307:デフォルトの名無しさん
18/11/09 20:06:34.46 JsSTi+Gx.net
>>291
スマホから直接一度も試さずに書くが、Kotlin だと理屈の上ではこれでできると思う。
nが最大値な。
println((1..n step 2).joinToString("").length)
かといってこんなのメモリ食うだけ。

308:デフォルトの名無しさん
18/11/09 20:38:18.97 Zs2FyImb.net
>>291 Ruby

args = [0, 1, 2, 3, 10, 9999, 123456789, 31415926535897]
floor_log10 = -> n {r = 1; (0..n).find{ r *= 10; r > n}}
kotae = ->n{
x = floor_log10[n + 1]
((9*x - 1)*10**x + 10)/18 + (n-10**x+1)/2 * (x


309: + 1) + (n < 8 ? n & 1 : 0) } args.each{|e| puts '%d => %d' % [e, kotae[e]]} # => 0 => 0 1 => 1 2 => 1 3 => 2 10 => 5 9999 => 19445 123456789 => 500000000 31415926535897 => 214355930195731



310:デフォルトの名無しさん
18/11/09 21:56:37.18 lMSYlD+9.net
>>301
なんで

311:デフォルトの名無しさん
18/11/09 21:58:02.15 lMSYlD+9.net
すまん。途中で誤爆した。
>>301
なんでこうなるの??
あと最後のn < 8 ? n & 1 : 0も数式で表わせる?

312:デフォルトの名無しさん
18/11/09 22:05:09.74 gJrymgLI.net
>>291
Python3
print(len("".join(map(str, range(1, int(input())+1, 2)))))
を実行したらフリーズしたので
odd = range(1, int(input())+1, 2)
keta = 0
for i in odd:
keta += len(str(i))
print(keta)
#==============
123456789
=> 500000000
31415926535897
=> 終わらん

313:デフォルトの名無しさん
18/11/09 22:09:18.25 EUp1VEAA.net
>>299
123456789の桁数は500000000ってのは分かった。

314:デフォルトの名無しさん
18/11/09 22:23:23.31 PBoRuHnu.net
>>303
0からnまでの奇数を並べてできる数の桁数をf(n)とすると(n >= 0)
p := [log10(n+1)] として n >= 10の時
f(n) = Σ[k は 0〜[(n-1)/2]]( (2k+1)の桁数 )
  = 1*(0〜9までの奇数の数) + 2*(10〜99までの奇数の数) + ...
+ p*(10^(p-1)〜10^p-1までの奇数の数) + (p+1)*(10^p〜nまでの奇数の数)
  = 1*5 + Σ[k は 2〜p]45k*10^(k-2) + (p+1)*[(n - 10^p + 1)/2]
  = 45/100*Σ[k は 1〜p]k*10^k + 1/2 + (p+1)*[(n - 10^p + 1)/2]
  = ((9p - 1)10^p + 1)/18 + 1/2 + (p+1)*[(n - 10^p + 1)/2]
  = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] …… (*)
n = 0, 2, 4, 8, 9 の時はちょうど (*)
n = 1, 3, 5, 7 時は (*) + 1 なので
f(n) = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] + (n < 8 ? n & 1 : 0)
末尾の項を無理やり数式にしたいなら
[8/(n + 1)]((1 - (-1)^n)/2)(2^((5 - n)/2)([n/7] + 1))
とかにすればいいんじゃない意味ないけど

315:デフォルトの名無しさん
18/11/09 23:35:53.00 QKOvQ/Be.net
>>291 Squeak/Pharo Smalltalk
| fn |
fn := [:N |
| nDig |
nDig := N log truncated.
(1 to: nDig)
inject: (1 to: N by: 2) size * (nDig + 1)
into: [:tot :m | tot - ((10 raisedTo: m) / 2)]
].
#(3 10 9999 123456789 31415926535897) collect: fn
"=> #(2 5 19445 500000000 214355930195731) "

316:デフォルトの名無しさん
18/11/09 23:56:11.30 EzT7HP1o.net
>>306
訂正
((9p - 1)10^p + 10)/18 -> [((9p - 1)10^p + 10)/18]
あと (n < 8 ? n & 1 : 0) は (1 - (-1)^n)/2*[3/([√n] + 1)] の方がより簡単か

317:デフォルトの名無しさん
18/11/10 01:35:04.59 PYYpj2JU.net
>>291
Kotlin
URLリンク(paiza.io)

318:デフォルトの名無しさん
18/11/10 04:32:40.14 dp2CGyZQ.net
>>309
すごい😆

319:デフォルトの名無しさん
18/11/10 04:35:26.34 PYYpj2JU.net
>>262
Kotlin
URLリンク(paiza.io)
色々考えたが結局クラス作ってそこに数字列と文字列で切り分けて入れておいて比較時にそこ見るようにした。
入力の仕様は拡張されていて、最初に数字だけがあった場合はその後に続く単語がその個数あるとみなして
入力を行うが、最初に数字がない場合は無制限に読む。出力は入力した単語とソート後の単語を出す。

320:デフォルトの名無しさん
18/11/10 05:36:17.18 zQnB+SVr.net
提案
回答は言語別に別スレで
2スレ位になるかな?
評価価値基準で別れていくんじゃないかと
ここではコメントのみになるのかな。

321:デフォルトの名無しさん
18/11/10 05:52:45.45 5gG2FCqG.net
スレ過疎りそうだし誰もわざわざ別スレに回答見に行かなそう

322:デフォルトの名無しさん
18/11/10 06:43:43.85 zQnB+SVr.net
乱立して過疎ってる特定言語専用スレの活性化に寄与することを願いたいしコード例が増えることはそれぞれメリットあるんじゃないかと。
ここと相互リンクは必ず貼る。他の言語と比較しない
他を貶さないを基本ルールに。

323:デフォルトの名無しさん
18/11/10 07:08:4



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

1968日前に更新/360 KB
担当:undef