プログラミングのお題スレ Part12at TECH
プログラミングのお題スレ Part12 - 暇つぶし2ch291:デフォルトの名無しさん
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


324:9.40 ID:mapNUhJU.net



325:デフォルトの名無しさん
18/11/10 08:21:22.38 2tLivqWS.net
>乱立して過疎ってる特定言語
具体的に何?
一番肝心のこと言ってないから説得力がまるで無い

326:デフォルトの名無しさん
18/11/10 09:22:59.55 dp2CGyZQ.net
お題:
A,B,Cの3人が1から5までの値が1つずつ書かれた5枚のカードを使ってインディアンポーカーを行う。
各々ランダムに1枚カードを引き、自分は値を見ず他の参加者に値が見えるように額にかざす。
この状態でA,B,Cの順に自分の値が今回引かれた3枚の中で最大(MAX)か,2番目に大きい(MID)か,最小(MIN)かを予想して答える。
AとBはパスしてもよいものとし、誰かが答えた時点で終了となる。
なお全員必ず正解するものとする。
各々の引いたカードの値を引数にとり、一回分のインディアンポーカーの結果を出力する関数indian_poker(a, b, c)を実装せよ。
期待動作例:
indian_poker(3, 2, 1) // 「A is MAX」
indian_poker(5, 2, 4) // 「B is MIN」
indian_poker(4, 2, 3) // 「C is MID」

327:デフォルトの名無しさん
18/11/10 09:43:13.06 9vqEahoA.net
そのスレの流れを無視してよそのスレで出されたお題の答えだけ書かれても、そのスレの住人には邪魔なだけだと思う。

328:デフォルトの名無しさん
18/11/10 09:56:28.53 X2YiMm/N.net
こういう指示語ばかり使うやつはだいたい頭悪い

329:デフォルトの名無しさん
18/11/10 10:03:50.52 0iGN/oEh.net
>>317
マ板で見かけた入社試験過去問か。
プログラマー脱落者として辞退します。

330:デフォルトの名無しさん
18/11/10 10:10:03.22 zQnB+SVr.net
乱立して過疎ってる (特定言語専用(スレッド))
形容詞句?の係りはこれな
(こういうものの表しかたにも流儀が色々あって混在するとややこしい)

331:デフォルトの名無しさん
18/11/10 10:19:13.79 2tLivqWS.net
係り受けなんてどーでもいいよ
「特定言語」って具体的に何なんだ、って聞いてるだけじゃん
返答が『形容詞句?の係りはこれな』って人の話をわざと聞かない人間だろ
かなりのサイコパスなんで『乱立して過疎ってるスレ』とやらに誘いこんでマウンティングしたいだけじゃねえの
なぜなら、特定言語の具体的な名前を5時間経っても未だに出さない、
口を開いたかと思えば「係り受けはこうだから」
もう頭がおかしいだろこいつ

332:デフォルトの名無しさん
18/11/10 10:34:20.29 zQnB+SVr.net
一つの言語を話題の軸に置いたスレッドは幾らでもあるだろ?この板には。
過疎ってるのも伸びてるのも全部特定言語専用スレな

333:デフォルトの名無しさん
18/11/10 10:36:44.35 zQnB+SVr.net
コマンドプロンプトとかSQLとかでワイルドカード使ったことないのかな?

334:デフォルトの名無しさん
18/11/10 11:08:46.45 1MT6N26R.net
そもそもここが過疎だし、他スレなんかにここのコード書いても荒らしにしかならんので当然ながら反対
やりたい奴だけ勝手にやってろ

335:デフォルトの名無しさん
18/11/10 11:14:10.79 16GnFLu/.net
>>317
一人が答えた時点で終了になるのに全員正解とは

336:デフォルトの名無しさん
18/11/10 11:20:45.22 zQnB+SVr.net
幾らなんでも既存スレ無許可で乗っ取るのはやめてほしい。
でも逆にそちらで希望された場合には別スレにしなくてもいいのでは?リンクさえあれば

337:デフォルトの名無しさん
18/11/10 11:31:50.87 T2pc5qWv.net
そもそも>>312の時点で日本語が怪しいですし

338:デフォルトの名無しさん
18/11/10 11:33:27.18 16GnFLu/.net
>>317
答えた者が必ず正解するならAが常にあてずっぽうで正解できることになるな
パスする


339:意味も無い 言わんとすることは推測できるが、問題文としては明らかにおかしい 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要



340:デフォルトの名無しさん
18/11/10 11:34:10.16 g5G2TnXq.net
>>317 Java
URLリンク(ideone.com)
これはひどいコードww

341:デフォルトの名無しさん
18/11/10 11:36:49.05 16GnFLu/.net
>>330
ごり押しで草

342:デフォルトの名無しさん
18/11/10 11:44:08.17 16GnFLu/.net
Aは常に正解する
Aは常に正しい
故にA is GOD

343:デフォルトの名無しさん
18/11/10 12:18:21.41 2tLivqWS.net
>>317は9月末あたりに話題になってた
URLリンク(qiita.com)
URLリンク(qiita-image-store.s3.amazonaws.com)

344:デフォルトの名無しさん
18/11/10 12:38:22.96 16GnFLu/.net
>>333
元ネタからして雑すぎて草

345:デフォルトの名無しさん
18/11/10 12:44:49.01 gks79eHH.net
前スレ951のやつか

346:デフォルトの名無しさん
18/11/10 12:44:51.58 xqriZsUd.net
>>317 Ruby
def indian_poker(a, b, c)
  x = [Set[1, 2], Set[1, 5], Set[4, 5]]
  winner, winners_num = case
    when x.include?(Set[b, c]) then [?A, a]
    when a == 3 || (b == 3 && Set[a, b, c] != Set[2, 3, 4]) || x.include?(Set[a, c]) ||
      Set[b, c] == Set[2, 4] then [?B, b]
  else [?C, c]
  end
  '%s is %s' % [winner, %w[MIN MID MAX].zip([a, b, c].sort).find{|e| e.last == winners_num}.first]
end
arr = [*(1..5)].permutation(3){|i| puts '%p -> %s' % [i, indian_poker(*i)]};
# =>
[1, 2, 3] -> C is MAX
[1, 2, 4] -> B is MID
[1, 2, 5] -> B is MID
...
以下>>330と同じ

347:デフォルトの名無しさん
18/11/10 13:25:37.16 hLxIIZfE.net
>>329
> 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要
流石にその程度は理解しようよ…

348:デフォルトの名無しさん
18/11/10 13:27:54.99 8cjk91S6.net
>>291 python3
URLリンク(ideone.com)
うーん… O(1)にできない

349:デフォルトの名無しさん
18/11/10 13:37:54.71 16GnFLu/.net
>>337
書いてないことは何でもあり
論理パズルにするならちゃんとルールは全て掲示しないと駄目

350:デフォルトの名無しさん
18/11/10 13:52:54.08 9b5VuL4P.net
お題
n^n^nの下2桁を求めよ(^はべき乗、nは1以上の整数)
1 => 1
2 => 16 (2^2^2 = 2^4 = 16)
3 => 87 (3^3^3 = 3^27 = 7625597484987)
4 => 96
11 => 11
13 => 53
100 => 0
777 => ??

351:デフォルトの名無しさん
18/11/10 14:00:49.74 hLxIIZfE.net
>>339
はいはい w
アスペかよ

352:デフォルトの名無しさん
18/11/10 15:46:45.95 16GnFLu/.net
>>340
777の出力は77になればいいのかな?
その入力でこうなるの面白いな

353:デフォルトの名無しさん
18/11/10 15:58:06.48 xqriZsUd.net
>>342
97じゃない?

354:デフォルトの名無しさん
18/11/10 16:06:41.30 16GnFLu/.net
>>343
すまんコード修正したら97になったわ
はやとちりだった

355:デフォルトの名無しさん
18/11/10 16:28:23.31 31tiZVqm.net
>>330-331
そういうのはそれよりマシなコードを出してから言わないと単なる口先番長にしか見えないぞw

356:デフォルトの名無しさん
18/11/10 17:09:13.33 xqriZsUd.net
>>340 Ruby
def powmod(n, e, m)
  case e
  when 0 then 1
  when :even?.to_proc then powmod(n * n % m, e >> 1, m)
  else n * powmod(n, e - 1, m) % m
  end
end
def kotae(n, m)
  index, cycle = (1..m).each_wit


357:h_object([1]) do |i, a|     x = (a.last * n % m)     ind = a.index(x)     ind.nil? ? a.push(x) : (break([ind, i - ind]))   end   x = n.times.reduce(1){|r, i| r *= n; r < index ? r : break}   y = x.nil? ? index + (powmod(n, n, cycle) - index) % cycle : x   powmod(n, y, m) end [0, 1, 2, 3, 4, 5, 10, 11, 13, 100, 777].each{|i| puts '%d -> %06d' % [i, kotae(i, 10**6)]} # =>0 -> 000000 1 -> 000001 2 -> 000016 3 -> 484987 4 -> 084096 5 -> 203125 10 -> 000000 11 -> 906611 13 -> 549053 100 -> 000000 777 -> 977097



358:デフォルトの名無しさん
18/11/10 17:30:26.21 g5G2TnXq.net
>>345
自分で書いて自分でひどいコードと言うとるんやがww

359:デフォルトの名無しさん
18/11/10 17:52:39.10 AvCW4uHY.net
python
def ans(num):
_def calc(N):
__n = (N ** 2) % 100
__p = []
__while n not in p:
___p.append(n)
___n = (n * N) % 100
__return p
_loop = calc(num)
_step = num**num % len(loop)
_if len(loop) == 1:
__print(loop[0])
_else:
__print(loop[step-2])
for x in [0,1,2,3,4,5,10,11,13,777]:
_ans(x)
-> 0,1,16,87,96,25,0,11,53,97

360:デフォルトの名無しさん
18/11/10 17:55:30.82 hLxIIZfE.net
>>347
ああ、それはすまん
俺もパッと書けと言われたらこれしか思いつかんわ

361:デフォルトの名無しさん
18/11/10 19:50:00.93 nd1h6x9x.net
>>347
わかった上で愚直にごり押しコード書いただけだよな
引数順列の列挙もドストレートで素敵w

362:デフォルトの名無しさん
18/11/10 20:50:56.73 G7iMNc/F.net
>>317 Squeak/Pharo Smalltalk
| numOfCards indianPoker |
numOfCards := 5.
indianPoker := [:args |
| cards names infer |
cards := (1 to: numOfCards) asArray.
names := (Character alphabet asUppercase first: args size) asArray collect: #asSymbol.
infer := nil. (infer := [:dealts :limit |
| turn possibilities lastAns answers |
turn := 0. answers := OrderedCollection new.
possibilities := dealts collect: [:dealt | cards asSet removeAll: dealts; add: dealt; yourself].
lastAns := nil -> #?.
[lastAns value = #? and: [(turn := turn + 1) < limit]] whileTrue: [
| myCards others |
myCards := possibilities atWrap: turn.
turn > 1 ifTrue: [
(myCards copyWithout: (dealts atWrap: turn)) do: [:pCard |
(infer value: (dealts copy atWrap: turn put: pCard; yourself) value: turn) value ~= #?
ifTrue: [myCards remove: pCard]]].
others := dealts copyWithoutIndex: turn - 1 \\ 3 + 1.
lastAns := (names atWrap: turn) -> (true caseOf: {
[others min > myCards max] -> [#MIN].
[others max < myCards min] -> [#MAX].
[others max > myCards max and: [others min < myCards min]] -> [#MID]
} otherwise: [#?])
]. lastAns]) value: args value: Float infinity
].
indianPoker value: #(3 2 1). " #A->#MAX "
indianPoker value: #(5 2 4). " #B->#MIN "
indianPoker value: #(4 2 3). " #C->#MID "

363:デフォルトの名無しさん
18/11/11 03:24:01.44 HtKIrWnT.net
>>340 python3
URLリンク(ideone.com)

364:デフォルトの名無しさん
18/11/11 10:02:52.73 ZG9KPLpE.net
>>340
Rubyで。
URLリンク(ideone.com)

365:デフォルトの名無しさん
18/11/11 12:53:19.00 ILkwXRqJ.net
>>340 Squeak/Pharo Smalltalk
| fn |
fn := [:N |
(Array new: 3 withAll: N) reduce: [:mex :n |
mex \\ 100 = 0 ifTrue: [0] ifFalse: [n raisedTo: mex modulo: 100]
]
].
#(1 2 3 4 11 13


366:100 777) collect: fn "=> #(1 16 87 96 11 53 0 97) "



367:デフォルトの名無しさん
18/11/11 14:11:48.73 j7sl2u35.net
>>354
それだけでいけるのか
すげー

368:デフォルトの名無しさん
18/11/11 14:19:03.18 SClia95W.net
それでもJニキなら何とかしてくれる

369:デフォルトの名無しさん
18/11/11 14:25:13.88 j7sl2u35.net
よく読んだら素直に実装してるだけか

370:デフォルトの名無しさん
18/11/11 14:34:26.37 ILkwXRqJ.net
>>357
ですね…^^;

371:デフォルトの名無しさん
18/11/11 16:24:01.50 xWJTm2Oc.net
お題
n次のヒルベルト曲線を描画せよ
n=1
■□■
■□■
■■■
n=3
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■

372:デフォルトの名無しさん
18/11/11 17:11:10.50 Gv5Fmm22.net
>>340 Perl5
use bignum (l=>GMP);
for $i (1,2,3,4,11,13,100,777) {
$j = $i % 100;
$k = $j ** $j % 100;
$p = $j ** $k % 100;
printf "$i %02d\n", $p;
}
実行例
$ time perl 12_338.pl
1 01
2 16
3 87
4 96
11 11
13 53
100 00
777 97
0.562 secs

373:デフォルトの名無しさん
18/11/11 17:52:24.96 tvDFPkAv.net
>>359 Ruby
def hilbert_curve(n)
  return [[1, 0, 1], [1, 0, 1], [1, 1, 1]] if n == 1
  hc = hilbert_curve(n - 1)
  [
    *hc.transpose.reverse.zip(hc.reverse.transpose).map{|a, b| [*a, 0, *b]},
    [1, *Array.new(2**(n + 1) - 3, 0), 1],
    *hc.zip(hc).map.with_index{|(a, b), i| [*a, 1/(i + 1), *b]}
  ]
end
[1, 3].each{|e| puts "n = #{e}", hilbert_curve(e).map{|a| a.join.gsub(/\d/, ?0 => ?□, ?1 => ?■)}.join($/)}
# => n = 1
■□■
■□■
■■■
n = 3
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■

374:デフォルトの名無しさん
18/11/11 22:01:36.28 B3f/927d.net
>>340
Haskell
素直に書いた版。
何やってるかは分かりやすい。
main = mapM_ put $ zip list $ map f list
put (x,y) = putStr (show x ++ ":") >> print y
f x = (x ^ x ^ x) `mod` 100
list = [1,2,3,4,5,6,7,8]

375:デフォルトの名無しさん
18/11/11 22:10:56.11 B3f/927d.net
Haskell
Perlの人のパクリ版(めちゃ速い)
main = mapM_ put $ zip list $ map f list
put (x,y) = putStr (show x ++ ":") >> print y
f x = p
where j = x `mod` 100
k = j ^ j `mod` 100
p = j ^ k `mod` 100
list = [1,2,3,4,11,13,100,777]

376:デフォルトの名無しさん
18/11/11 22:20:34.69 xWJTm2Oc.net
>>360
n=10のときどうなる?

377:デフォルトの名無しさん
18/11/11 23:54:52.39 VLVUrnJ+.net
指数を100の剰余取ってるのってどういう根拠なの?

378:デフォルトの名無しさん
18/11/11 23:59:16.36 lebYcZ/K.net
>>364
use bignum (l=>GMP);
for $i (10) {
$j = $i % 100;
$k = $j ** $j % 100;
$p = $j ** $k % 100;
printf "$i %02d\n", $p;
}
$i = 10;
print ($i**$i)**$i;
実行結果
$ perl 12_338_1.pl
10 01
10000000000
ダメですね合いませんね。
単に左辺を%100すると一般性はありませんでした。サーせん。
ちゃんと循環性を見るとか、別の解法が要りますね

379:デフォルトの名無しさん
18/11/12 00:02:23.31 EX0FpiMD.net
ちなみに循環性を見るとこんな感じになってました
use bignum (l=>GMP);
use Tie::IxHash;
use feature 'say';
for $i (0,1,2,3,4,5,10,11,13,777) {
tie my %h,'Tie::IxHash';
$p = $i;
for (1..100) {
last if exists $h{$p} and $h{$p} > 10;
$h{sprintf "%02d", $p % 100} = $_;
$p = $p * $i % 100;
}
@a = keys %h;
say "$i: ", scalar @a, ": @a", ": $p";
}
実行結果
1: 1: 01: 1
2: 21: 02 04 08 16 32 64 28 56 12 24 48 96 92 84 68 36 72 44 88 76 52: 48
3: 20: 03 09 27 81 43 29 87 61 83 49 47 41 23 69 07 21 63 89 67 01: 47
4: 10: 04 16 64 56 24 96 84 36 44 76: 16
5: 2: 05 25: 25
10: 2: 10 00: 0
11: 10: 11 21 31 41 51 61 71 81 91 01: 11
13: 20: 13 69 97 61 93 09 17 21 73 49 37 81 53 89 57 41 33 29 77 01: 37
777: 20: 77 29 33 41 57 89 53 81 37 49 73 21 17 09 93 61 97 69 13 01: 73

380:デフォルトの名無しさん
18/11/12 00:03:57.97 EX0FpiMD.net
>>366
× 単に左辺を%100
○ 単に右辺(指数)を%100

381:デフォルトの名無しさん
18/11/12 00:05:03.96 JEwLf6Zk.net
>>366
それは0乗しちゃってるからじゃない?

382:デフォルトの名無しさん
18/11/12 00:10:02.50 EX0FpiMD.net
>>369
10については、そういわれてみればそうだね。

383:デフォルトの名無しさん
18/11/12 00:11:06.48 D6ILV7Jx.net
>>366
iが10で割り切れれば00って別で切り分ければ良いんじゃ無いかな。

384:デフォルトの名無しさん
18/11/12 00:18:43.46 EX0FpiMD.net
>>371
10については、そいうやり方も考えられるけど
上記の循環の例の11,13,777は指数を%100しても解は合うが
他の数値も単に指数を%100して解が合うか、一般性は疑わしいので、
>>360はちょっと勇み足だったかもしれないテヘペロ

385:デフォルトの名無しさん
18/11/12 00:19:14.52 JEwLf6Zk.net
>>367
0~99までとりあえず循環部分の周期は全て20の約数になるみたいだけど
数学雑魚の俺には理屈がわからなかった
とりあえず、ざっくり100の剰余取るだけだと循環開始より小さい指数になったときにおかしくなりそう

386:デフォルトの名無しさん
18/11/12 00:52:30.78 +qrAueUv.net
>>372
寧ろそれが成り立つ方がかなり特別なケースだぞ

387:デフォルトの名無しさん
18/11/12 02:34:45.23 MtlIUxHY.net
多分数学的には証明されていることだろうと思うが、x ^ 100 とか x ^ 200 とか x ^ 300 って、
下3桁の結果が同じになるようだな。どうしてかはわからんが。多分考えて行くとその内わかる
んだろう。後の事は数学が得意な人に任せた。

388:デフォルトの名無しさん
18/11/12 04:19:59.43 lDwndekZ.net
x^22 - x^2
が常に100で割り切れるのが理由だと思う
なので巡回群の長さは高々20までになる

389:デフォルトの名無しさん
18/11/12 04:44:54.48 lDwndekZ.net
もう少し分かりやすく書くと x^20 - 1 と x^21 - x が
100で割り切れる保証はない(実際大部分は割り切れない)が
x^22 - x^2 は絶対に100で割り切れる(合同式を用いれば証明は簡明)ので
一般に2以上の自然数 n に対して x^(n+20) - x^n ≡ 0 mod 100が成り立つ(xは整数)
よって一般に指数部の20の剰余を取っても問題ないと言える

390:デフォルトの名無しさん
18/11/12 04:49:06.55 fKeD1dzA.net
>>375
任意の整数 10n + r (-4 <= r <= 5)に対して
(10n + r)^100 = r^100 mod 1000 なので mod 1000 で
0^100 = 0
5^100 = 625^25 = 625
(±1)^100 = 1
(±2)^100 = 24^10 = 376
(±3)^100 = 243^5 = 1
(±4)^100 = 376^2 = 376
となって 0, 1, 376, 625 は2乗しても下3桁は変わらないから
任意の整数は100n乗しても下3桁は常に同じだね

391:デフォルトの名無しさん
18/11/12 09:11:34.15 WiNaWTIj.net
数学板でやれ。問題からしてクソだった。

392:デフォルトの名無しさん
18/11/12 10:17:56.51 iaSpw+rm.net
これ以上はスレ違いってなら同意だけど問題自体は別に良かっただろ

393:デフォルトの名無しさん
18/11/12 11:03:12.07 oQPj2WUY.net
とりあえず>>340の出題者は用意してあった解答を出そうか
くそ問題かどうかはそれを見て判断する

394:デフォルトの名無しさん
18/11/12 11:11:40.60 iaSpw+rm.net
既に回答がたくさん出てるのにクソ問題も何もねえだろ

395:デフォルトの名無しさん
18/11/12 11:51:52.42 oQPj2WUY.net
回答の多さとクソさとの相関はないだろ
例えばQiitaでいいねが多ければクソじゃないということがないのと同じように
そういうのはいいから出題者は早めに解答だしてくれ

396:デフォルトの名無しさん
18/11/12 12:01:03.54 iaSpw+rm.net
ボクがわからないからクソとか草生えるわ
なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ

397:デフォルトの名無しさん
18/11/12 12:07:32.95 iShTB70W.net
>>383
最近のQiitaのトレンド見てて いいねの数=内容の薄さ だと思うようになってきたわ

398:デフォルトの名無しさん
18/11/12 12:11:20.95 b6USGf7s.net
今回の問題はべき剰余の特殊な場合を求めるものだけど、工夫する余地もいくつかあり悪い問題ではないと思った。
というかなぜこれを悪い問題だと思ったんだ?

399:デフォルトの名無しさん
18/11/12 12:19:11.85 DYCuacpe.net
競技プログラミングなんかでよく見るタイプの問題なのにな。

400:デフォルトの名無しさん
18/11/12 12:23:12.24 hXyGmgtP.net
a↑↑b mod n を一般化してみたらテトレーション計算より
最初に使うφ(n)の計算のほうが重かった
10**nなら2**n * 5**nなので高速に計算できますけども

401:デフォルトの名無しさん
18/11/12 12:28:21.72 TKKxOWxM.net
このスレは不特定言語スレだけど
高速性ならC/C++/Rast
コンパクト性の追求ならSmallTalkとかRubyとか
RADならJavaとかPythonとか定番固定化。
既にもうある程度少数特定言語スレになりつつあ
る希ガス

402:デフォルトの名無しさん
18/11/12 12:28:55.23 TKKxOWxM.net
RastじゃなくてRustやったなwww

403:デフォルトの名無しさん
18/11/12 12:49:28.80 7mLFygVa.net
>>384
> なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ
数学の素養のあるっぽいやつのよくやりがちなダメな考え方だな
そういう(逆)選民思想を持っているならこのスレで出題するのはやめてくれ
そもそも良問と思うものをけなされるお前自身がたのしくないだろ?

404:デフォルトの名無しさん
18/11/12 12:56:08.79 1XBBjLKo.net
いずれにせよ出題者がどこまで考えて出題したか(つまり良問か否か)はそいつ自らの解答を見れば一目瞭然だよ
論よりコード
はよ出せ

405:デフォルトの名無しさん
18/11/12 13:24:01.86 WWnCJgTu.net
問題の良さって問題じゃなく解答で決まるものなのか?
問題だけで問題の良さが確定しないのは初めて知ったわ

406:デフォルトの名無しさん
18/11/12 13:26:44.24 DYCuacpe.net
も一回言うけどこの問題はプログラミングのお題としてはよく見るような問題だぞ。
揚げ足取りというか難癖付けてる奴はおかしいだろ。
それこそスレチだから黙ってろよ。

407:デフォルトの名無しさん
18/11/12 13:28:23.55 X+KqJ1/Z.net
>>393
解答で決まるなんて誰もいっとらんがな(数学の前にやることあるんじゃ?w)
解答を見れば「どこまで考えて出題したか」が一目瞭然ということ
どこまで考えて出された問題かで良問か否かが決まる
もとより様々な状況で「結果的に良問」ということは実際あるしそれは否定する気は無いが、蓋然性は低い

408:デフォルトの名無しさん
18/11/12 13:38:11.17 b6USGf7s.net
この程度のことで選民思想がどうのとか言い出すのはおかしいと思うよ。
冪剰余の計算は面白いテーマだし。
逆に悪問だと言ってる人がその根拠を示すべきだと思うんだけど。

409:デフォルトの名無しさん
18/11/12 13:57:27.23 9RzF2H48.net
>>396
「この程度(のレベル)」とか言ってる選民思想バリバリの奴が
自分は違うって体で何か主張したところでぜんぜん説得力ないんだがw
ともあれ、回答が多い割に文句なしの正答が出てこないのがこのスレ的には異常事態だろ
お題 and/or 出題者をクソだと疑う十分な根拠になりうる

410:デフォルトの名無しさん
18/11/12 14:13:38.48 b6USGf7s.net
>>397
英語の授業で"How are you?" "I'm fine. Thank you" って言ったら「ペダンチックだ。帰国子女ぶるな」といわれたくらいに衝撃的。
大体問題が理解できないのに「文句なしの正答」を見極められるというのはおかしくない?
こっちからすればここに既にある回答の内のいくつか(>>352とか)は「文句なしの正答」なんだけど。
問題が理解できないのに「文句なしの正答」を見極められるならそれらのどこが不十分なのか説明しなさい。
それができなければ数学ができる出来ない以前にただのモンスタークレーマーみたいな傲慢野郎だ。

411:デフォルトの名無しさん
18/11/12 14:16:13.02 CqB5lm+V.net
まーた頭おかしいのが暴れてんのか
>>397はNGぶっこむからIDころころ変えるな
もしくはコテハンつけろよゴミが

412:デフォルトの名無しさん
18/11/12 14:24:13.52 D6ILV7Jx.net
>>359とか良い問題じゃ無い?
私は解けないが。

413:デフォルトの名無しさん
18/11/12 16:17:37.15 9RzF2H48.net
>>398
いくつかってずいぶん曖昧だなw
お前の文句なしってセンス疑うわw

414:デフォルトの名無しさん
18/11/12 16:22:54.34 CqB5lm+V.net
>>401
>>352に文句つけてみろよ無能ゴミクズが

415:デフォルトの名無しさん
18/11/12 16:27:56.77 9RzF2H48.net
あとお前ら(直近ではID:9RzF2H48とID:CqB5lm+V)
勝手にクソ問題断定のクレーマー扱いしとるが
出題者の用意していた解答次第では良問の可能性も(わずかだが)あるんだからな
ほどほどにしとけよw

416:デフォルトの名無しさん
18/11/12 16:29:53.16 9RzF2H48.net
いかん自分を安価しちゃったよID:b6USGf7sな

417:デフォルトの名無しさん
18/11/12 16:33:57.40 DYCuacpe.net
どうやら ID:9RzF2H48 は人を馬鹿にしたいだけみたいだな。
きちんと説明してもらってんのに言ってることがわけわからんし。
冪剰余の最適化なんて教科書にあってもいいくらいものすごくありふれたお題だっていうのに馬鹿らしい。

418:デフォルトの名無しさん
18/11/12 16:37:03.80 CqB5lm+V.net
数学の話ししてるのにイライラして思わずクソ問題呼ばわりして引くに引けなくなったんだろ

419:デフォルトの名無しさん
18/11/12 16:43:20.29 b6USGf7s.net
>>401
いやだから>>352とかって例を挙げてるでしょ。ばかにしてる?
それで結局悪問だという根拠は示せないんだよね?
じゃあ悪いことしたんだからまだいるか知らないけど出題者に謝罪しようね。
君ははっきり言って不快だよ。

420:デフォルトの名無しさん
18/11/12 16:46:44.76 9RzF2H48.net
>>405
本音がでたなw中立ぶるよりお前ららしいわ
>>406
こんなん数学に入るかボケが
つーかお前のためにID固定してやってんだからレスすんな

421:デフォルトの名無しさん
18/11/12 16:52:28.57 9RzF2H48.net
>>407
自分で回答も出せないやつが他人のコード気安く挙げてんじゃねーよ
お前が考えて出したコードならいくらでもケチつけたるわw

422:デフォルトの名無しさん
18/11/12 16:55:43.17 CqB5lm+V.net
>>408
図星突かれて痛かったのか?
バカを愚弄するのはホント楽しいわ
てか「数学板でやれ。問題からしてクソだった」って言ってたくせにこんなの数学に入らないっておかしいだろ
数学に入らないなら数学板推すなよアホか
結果的に数学よりも遥かにスレ違いの話題でこの場を荒らして皆に迷惑かけてんのはお前だ
お前はみんなの迷惑なの

423:デフォルトの名無しさん
18/11/12 17:00:57.95 b6USGf7s.net
>>409
>ともあれ、回答が多い割に文句なしの正答が出てこない
って言うからその反例として件のレスなのに、開き直ってお前がコード書けだなんて控えめに言って狂ってる。
相手が言ったことも読まないし自分が行ったことすら覚えていないんじゃあ対話不可能。
ただただ不快な存在。

424:デフォルトの名無しさん
18/11/12 17:01:55.26 D6ILV7Jx.net
>>340 は情報爆発でメモリ使いまくる処理をいかにメモリ使わずに処理できるかって意味じゃ悪く無いと思う。
私はプログラマーじゃ無いから思い付けなかったが、こう言うのはプログラマーの本領発揮する分野じゃないかな。
そして >>359 も解けない私。。。Orz
GUIならネットに落ちてるけど、CUIってのが味噌だよね。

425:デフォルトの名無しさん
18/11/12 17:02:08.43 9RzF2H48.net
>>407
それは出題者のコードじゃないだろ?
ほんとお前、日本語読解とか論理的思考とか大丈夫なの?

426:デフォルトの名無しさん
18/11/12 17:02:52.43 9RzF2H48.net
正直、ばかにはしているw

427:デフォルトの名無しさん
18/11/12 17:03:00.49 DYCuacpe.net
>>408
ものすごくありふれたお題に文句付けてるんだからあきれてものも言えないってだけ。
別に中立ぶってなどいない。お前のことは見下してるが。

428:デフォルトの名無しさん
18/11/12 17:06:56.26 b6USGf7s.net
>>413
>ともあれ、回答が多い割に文句なしの正答が出てこない
と言ったのはそちらで、それに対してこっちがその反例として件のレスを挙げたのに本気で意味不明。
会話を破綻させに行っているのは君でしょ。自分が書いたことすら覚えていないのだから。
さすがに不愉快だ。

429:デフォルトの名無しさん
18/11/12 17:08:31.84 1o1kfQH0.net
馬鹿は相手がどの高さいるのかもわからずに人を馬鹿にする
頭が悪いので周囲が何を言ってるのか何一つ理解できない
そして自尊心の塊

430:デフォルトの名無しさん
18/11/12 17:08:37.05 CqB5lm+V.net
ここまできっちり論破されてるとキチガイ相手でも哀れになってくるな

431:デフォルトの名無しさん
18/11/12 17:13:08.29 9RzF2H48.net
>>416
お前は自分の「文句なし」に自信持ちすぎだろw
あと「出題者の用意していた解答次第では良問の可能性も(わずかだが)ある」は無視ですかそうですか

432:デフォルトの名無しさん
18/11/12 17:15:33.59 9RzF2H48.net
>>418
だからお前は反応するなと何度言わせる?w

433:デフォルトの名無しさん
18/11/12 17:17:08.81 b6USGf7s.net
>>419
対話する意図がないと判断した。
もういい。疲れた。
控えめに言って、君はもう死んだ方が良いよ。

434:デフォルトの名無しさん
18/11/12 17:21:16.54 4IQEu5Ky.net
最近あっちこっちで暴れてる単芝君か
5chに居場所が無くてもリアル犯罪に走るなよな

435:デフォルトの名無しさん
18/11/12 17:21:58.58 D6ILV7Jx.net
良い加減にしろ!
もうオマイらで >>340 の文句なしの正当とやらを出し合えや。

436:デフォルトの名無しさん
18/11/12 17:23:23.00 eZ2UdI/8.net
・数学の話ばかりしてうざい ←わかる
・作者は答え書いて ←わからなくもない
・答え書かないからクソ問題! ←は?

437:デフォルトの名無しさん
18/11/12 17:54:26.10 9RzF2H48.net
>>424
誤解があるので訂正しておくけど
出題者が「落とし穴」をちゃんと想定できていれば良問だしそれを確認せんがための「答え出せ」だよ
でも、勘違いしたままたまたま答えが合ってしまう入出力例しか提示されていない
and/or それを排除できる例を出せない時点でこの問題はそれなりにクソ問題だと思う
引っ掛けて貶めたり、選抜や順位を競うことを目的とした場所じゃないんだからここは

438:デフォルトの名無しさん
18/11/12 18:12:43.91 eZ2UdI/8.net
n^n^n % 100計算するのに落とし穴も何もないだろ
フェルマーの小定理チックに指数部で剰余とるだなんて誰も想定できねえよ
なんでキチガイは間違えたらそこから学ばずに問題の方(しかも真っ当


439:)にケチ付けるんだか 運動会で転ぶと怪我をするからグラウンドの至る所にクッションを置いておけと言うモンペと同レベルのキチガイ



440:デフォルトの名無しさん
18/11/12 18:26:31.10 bzMEonQL.net
なんで数学板でやらないのかね。
数学板ではザコだからプログラム板でマウント取りたいとか?ww

441:デフォルトの名無しさん
18/11/12 18:28:01.10 CqB5lm+V.net
>>427
ID変えんなやキチガイ

442:デフォルトの名無しさん
18/11/12 18:32:41.33 9RzF2H48.net
>>426
住人かと思ってちょっと丁寧にレスしたらこれだよ ┐(´-`)┌

443:デフォルトの名無しさん
18/11/12 18:34:56.16 9RzF2H48.net
>>428
変えてないし、そもそも俺だと思うならレスすんなよ…

444:デフォルトの名無しさん
18/11/12 18:55:17.39 eZ2UdI/8.net
>>429
お前以外誰もその問題にケチ付けてねえのに住人面すんな
素直に頭悪いが悪いのが悔しいですって言えよ

445:デフォルトの名無しさん
18/11/12 19:18:26.81 h68nq2of.net
プログラミングできてもネットリテラシーは低いんだな

446:デフォルトの名無しさん
18/11/12 19:28:11.51 +FWS6rf7.net
ID:9RzF2H48
こいつ前からこの板荒らしまくってる粘着野郎だぞ
意思疎通は不可能だから無視しとけ

447:デフォルトの名無しさん
18/11/12 19:45:44.72 4WXaKeF0.net
お題
1900年から2018年までの、7月31日が土曜日である年を全て挙げよ

448:デフォルトの名無しさん
18/11/12 19:52:33.63 n3BneZmq.net
なんで?

449:デフォルトの名無しさん
18/11/12 19:54:05.95 I5PkaEyl.net
自分で計算して求めるのを作るか、ライブラリを使ってしまうか、悩ましいところですな・・・

450:336
18/11/12 19:58:23.85 rYIWpX0E.net
悪い意味で盛り上がってて苦笑するしかない
C++
URLリンク(ideone.com)
Ruby読めないけど>>346と大体同じ考え方なのかな

451:デフォルトの名無しさん
18/11/12 20:20:47.61 4WXaKeF0.net
お題
0から99までの整数を2進数で表したとき、1が奇数個あるものを全て挙げよ

452:デフォルトの名無しさん
18/11/12 20:23:17.93 zzbIEe7z.net
>>434 bash + date
for i in {1900..2018}; do if [ $(date --date=07/31/$i +%w) -eq 6 ];then echo "$i "; fi; done

453:デフォルトの名無しさん
18/11/12 20:27:55.24 q04ZIund.net
>>434 Ruby 日付ライブラリ使うのもつまらないので冗談で
(1900..2018).select{|y| (y%100*5/4 - y/2000) % 7 == 4}
# => [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010]

454:デフォルトの名無しさん
18/11/12 20:31:45.80 q04ZIund.net
>>438 Ruby
p (0..99).select{|i| i.digits(2).count(1).odd?};
# => [1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32,
35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59,61, 62, 64, 67,
69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98]

455:デフォルトの名無しさん
18/11/12 20:36:43.90 MOsxqjp/.net
>>434
J
分けて計算
years=:1900 + i. 119
saturdays =: 6= weekday years(,"0 1) 7 31
saturdays # years
出力
1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010
1行で
(#~ 6&=@weekday@(,&7 31)"0) 1900+i.119
出力は同じ

456:デフォルトの名無しさん
18/11/12 20:55:43.70 MOsxqjp/.net
>>438
J
(#~ 2&|@+/@(#.^:_1"0)) i.100
出力
1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69


457:70 73 74 76 79 81 82 84 87 88 91 93 94 97 98



458:デフォルトの名無しさん
18/11/12 21:30:19.73 WG+vGwsG.net
>>438 Perl5
use feature say;
$,=',';
say = grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99;
実行
$ perl 12_434.pl
1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98

459:デフォルトの名無しさん
18/11/12 21:32:31.70 WG+vGwsG.net
>>444 ゴメンよけいな=が入っていたので削除
>>438 Perl5
use feature say;
$,=',';
say grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99;
実行
$ perl 12_434.pl
1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98

460:デフォルトの名無しさん
18/11/12 21:57:07.87 jh3oqSUb.net
>>438 rust
URLリンク(ideone.com)

461:デフォルトの名無しさん
18/11/12 22:18:19.15 kM9Cc8DJ.net
>>434 PowerShell
1900..2018 | %{Get-Date "$_/07/31"} | ? -Property DayOfWeek -eq 6 | select Year

462:デフォルトの名無しさん
18/11/12 23:14:49.42 fOB5B0pj.net
>>283 Common Lisp
URLリンク(ideone.com)

463:デフォルトの名無しさん
18/11/12 23:55:59.63 jh3oqSUb.net
>>235 c
URLリンク(ideone.com)

464:デフォルトの名無しさん
18/11/13 00:02:22.82 5Ay5yU9p.net


465:デフォルトの名無しさん
18/11/13 00:27:29.87 7jyC4IO4.net
python
>>434
import datetime
[x for x in range(1900,2018) if datetime.datetime(x,7,31).weekday() == 5]
-> [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010]
ツェラーの公式を用いた別解
[x for x in range(1900,2018) if (x + int(x/4) - int(x/100) + int(x/400) + 1) % 7 == 6]
>>438
[x for x in range(1,99) if format(x,"b").count("1") % 2]
->
[1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28,
31, 32, 35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59,
61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98]

466:デフォルトの名無しさん
18/11/13 00:32:55.99 7jyC4IO4.net
[x for x in range(1900,2018) if (x + x//4 - x//100 + x//400 + 1) % 7 == 6]
でええやんけ

467:デフォルトの名無しさん
18/11/13 00:43:41.95 bZ0HXQ7X.net
>>438
Haskell
main = print.tnum.filodd.zip list $ map bsum list
tnum = map (\(x,_) -> x)
filodd = filter (\(x,y) -> odd y)
bsum = sum.blist
blist 0 = []
blist n = (n `mod` 2):blist (n `div` 2)
list = [0..99]
実行結果
[1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98]

468:デフォルトの名無しさん
18/11/13 00:55:13.44 5Ay5yU9p.net
乙乙

469:デフォルトの名無しさん
18/11/13 01:00:17.03 wnw9zNxR.net
出力とかなさらないんですか?

470:デフォルトの名無しさん
18/11/13 01:11:01.02 qGbdPj8P.net
>>434 Squeak/Pharo Smalltalk
(1900 to: 2018) select: [:y | (Date year: y month: 7 day: 31) weekday = #Saturday]
"=> #(1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010) "

471:デフォルトの名無しさん
18/11/13 01:23:34.12 qGbdPj8P.net
>>438 Squeak/Pharo Smalltalk
(0 to: 99) select: [:x | ((x radix: 2) occurrencesOf: $1) odd]
"=> #(1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50
52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98) "

472:デフォルトの名無しさん
18/11/13 01:59:27.96 4/lVJDsB.net
>>451>>452をJavascriptに引き写してみた。
>>434
[...function*(){for(i=1900;i++<2018;)if((i+~~(i/4)-~~(i/100)+~~(i/400)+1)%7==6)yield i}()]
>>438
[...function*(){for(i=0;i++<99;)if(i.toString(2).match(/1/g).length%2)yield i}()]
汚い…
Pythonの内包表記は良いなぁ…

473:デフォルトの名無しさん
18/11/13 02:08:16.58 JCaIqwLF.net
>>283やってみた
J
z=: dyad define " 0
s=: ([+ (], (((_1:^+)*+)))) "0 0
>: |: (y,x)$((i.c)/:,(+:c)(#."0 1)|(i.y)s/(i.x))i.i.c=.x*y
)
3 z 3
1 2 6
3 5 7
4 8 9
4 z 2
1 2
3 5
4 6
7 8
3 z 5
1 2 6 7 12
3 5 8 11 13
4 9 10 14 15
1 z 8
1 2 3 4 5 6 8 7

474:デフォルトの名無しさん
18/11/13 02:09:33.92 JCaIqwLF.net
>>459
>1 z 8
>1 2 3 4 5 6 8 7
写し間違えました。実際には正しい結果になります。

475:デフォルトの名無しさん
18/11/13 02:27:33.07 JCaIqwLF.net
>>459は各 (x,y) の項について
主キー x + y
副キー x + (-1)^(x+y) * (x+y)
とするとジグザグ順に昇順のキーが得られるので
そのキーでソートしたときの順位を表示、というやり方

476:デフォルトの名無しさん
18/11/13 11:28:29.90 /6RlnNZj.net
>>438
Perl5
URLリンク(paiza.io)
文字列にせずに全Bit足して求めた。

477:デフォルトの名無しさん
18/11/13 12:04:16.15 /6RlnNZj.net
>>434
C
URLリンク(paiza.io)
ライブラリ使用。
コンパイラとライブラリの対応の問題だろうが、32bit環境ではできなかった。time_t型がlongか何かになっていて足りなかったからだろうと思う。
まともに動くかどうかは(またはコンパイルできるかどうかは)環境依存ということになる。

478:デフォルトの名無しさん
18/11/13 14:23:32.25 TStmpOw3.net
>>283 Squeak Smalltalk >>461 を参考に (joinを直せばPharoも可)
| fn |
fn := [:M :N |
| digits xs ys primaries secondaries sorted |
digits := (M * N) log ceiling.
xs := (1 to: M) collect: [:idx | (1 to: N) asArray].
ys := (1 to: M) collect: [:idx | Array new: N withAll: idx].
primaries := xs + ys.
secondaries := primaries \\ 2 * 2 - 1 * xs.
sorted := ((1 to: M) gather: [:y | (1 to: N) collect: [:x | x@y]]) sort:
[:pt | (primaries at: pt y) at: pt x] ascending, [:pt | (secondaries at: pt y) at: pt x] descending.
sorted doWithIndex: [:pt :idx | (xs at: pt y) at: pt x put: (idx printStringPadded: digits)].
(xs collect: [:row | row joinSeparatedBy: ' ']) asStringWithCr
].
fn value: 3 value: 3. "=>
'1 2 6
3 5 7
4 8 9' "
fn value: 4 value: 2. "=>
'1 2
3 5
4 6
7 8' "
fn value: 3 value: 5. "=>
'01 02 06 07 12
03 05 08 11 13
04 09 10 14 15' "
fn value: 1 value: 8. "=>
'1 2 3 4 5 6 7 8' "

479:デフォルトの名無しさん
18/11/13 15:05:24.75 x0SFJuPP.net
>>461
副キーは x+y の偶奇に応じて上下や左右が反転してればいいわけだから
単に (-1)^(x+y)*x とか (-1)^(x+y)*y で十分か

480:デフォルトの名無しさん
18/11/13 16:16:43.59 GUmX5rsv.net
>>340 Squeak/Pharo Smalltalk >>346 を参考に
| fn |
fn := [:N :exp :lastNDigs |
| M series count nextVal initial cycle nextExp |
M := 10 raisedTo: lastNDigs.
series := OrderedCollection with: N \\ M.
count := 0.
[(series addIfNotPresent: (nextVal := series last * N \\ M); size) = (count := count + 1)] whileFalse.
initial := series indexOf: nextVal.
cycle := series size - initial + 1.
nextExp := N.
exp - 1 timesRepeat: [nextExp := (nextExp between: 1 and: series size)
ifTrue: [series at: nextExp]
ifFalse: [series at: nextExp - initial \\ cycle + initial]].
nextExp printStringPadded: lastNDigs
].
#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 2)].
"=> {1->'01' . 2->'16' . 3->'87' . 4->'96' . 5->'25' .
10->'00' . 11->'11' . 13->'53' . 100->'00' . 777->'97'} "
#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 6)].
"=> {1->'000001' . 2->'000016' . 3->'484987' . 4->'084096' . 5->'203125' .
10->'000000' . 11->'906611' . 13->'549053' . 100->'000000' . 777->'977097'} "
#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 4 value: 3)].
"=> {1->'001' . 2->'536' . 3->'387' . 4->'896' . 5->'125' .
10->'000' . 11->'611' . 13->'053' . 100->'000' . 777->'097'} "

481:デフォルトの名無しさん
18/11/13 16:32:36.89 3gkxjay9.net
>>283
何かの行列足せば出来るんじゃね

482:デフォルトの名無しさん
18/11/13 17:15:46.99 GUmX5rsv.net
>>359 Squeak Smalltalk ヒルベルトは組み込みなので…
| fn |
fn := [:n |
| form m lines |
form := Form extent: (m := 2 << n - 2) + 1 asPoint.
(Pen newOnForm: form) place: 0@m; hilbert: n side: 2.
lines := (m to: 0 by: -1) collect: [:y |
(0 to: m) inject: '' into: [:acc :x | acc copyWith: ('□■' at: (form pixelValueAt: x@y) + 1)]
].
lines asStringWithCr
].
fn value: 1. "=>
'■□■
■□■
■■■' "
fn value: 3. "=>
'■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■' "

483:デフォルトの名無しさん
18/11/13 18:58:02.16 6xZ1V9iJ.net
>>283 Ruby >>461とは別のアプローチで
def zigzag(h, w)
  min, max = [h, w].minmax
  sum, multi = h + w, h * w
  f = -> n {n < min ? n + 1 : n >= max - 1 ? sum - n - 1 : min}
  diagonal = (sum - 1).times.with_object([*1..multi]).map{|i, ary| ary.shift(f[i]).tap{|a| i.odd? && a.reverse!}}
  len = Math.log10(multi).floor + 1
  h.times.map{|i| diagonal[i, w].map(&:pop)}.map{|e| e.map{|i| "%0#{len}d" % i}.join(' ')}.join($/)
end
[[3, 3], [4, 2], [3, 5], [1, 8]].each{|e| puts "%d %d =>\n%s\n\n" % [*e, zigzag(*e)]}
# =>
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

484:デフォルトの名無しさん
18/11/13 19:36:47.61 57oATazI.net
>>438
Python3
URLリンク(ideone.com)
=> 1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98

485:デフォルトの名無しさん
18/11/13 21:13:13.10 VjbjD5Cz.net
お題
直方体の体積を求めよ。三辺の長さはそれぞれ自然数+単位(mm,cm,m,km)の形式で与えられる。
答えは自然数+単位(mm^3,cm^3,m^3,km^3)の形式で、数値部分がなるべく小さくなるように単位を選択せよ。
2cm 3cm 4cm
=> 24cm^3
5mm 5mm 40mm
=> 1cm^3
3m 100000000km 3mm
=> 900000000m^3

486:デフォルトの名無しさん
18/11/13 21:46:22.87 ZM1FA5dW.net
>>471 Ruby
def to_mili(num, unit)
  case unit
  when 'mm' then num
  when 'cm' then num * 10
  when 'm' then num * 1000
  when 'km' then num * 1000000
  end
end
def volume(sides)
  v_mili = sides.scan(/(\d+)([a-z]+)/i).map{|side, unit| to_mili(side.to_i, unit)}.reduce(:*)
  [[10**18, 'km^3'], [10**9, 'm^3'], [10**3, 'cm^3'], [1, 'mm^3']].each{|coe, unit| return [v_mili / coe, unit] if v_mili % coe == 0}
end
['2cm 3cm 4cm', '5mm 5mm 40mm', '3m 100000000km 3mm'].each{|sides| puts '%s => %d%s' % [sides, *volume(sides)]}
# =>
2cm 3cm 4cm => 24cm^3
5mm 5mm 40mm => 1cm^3
3m 100000000km 3mm => 900000000m^3

487:デフォルトの名無しさん
18/11/13 22:46:25.57 jgdNCfY5.net
プログラミング無料で学んで就職できる?
URLリンク(et-irodori.com)

488:デフォルトの名無しさん
18/11/13 22:49:55.39 YD+aXj03.net
無料ではないな。
お前の将来の給料からスクールに金が行く。

489:デフォルトの名無しさん
18/11/14 00:08:48.41 pC5Ut3Ig.net
お題: 品物がN個あり,ぞれぞれ体積はa(1), ..., a(N)である。
すべての品物を複数のダンボール(容積C)に分けて詰めるとき,必要になるダンボールの最小数を求めよ。
例:
C: 30
a: 8 5 10 6 4 5 8 5 9 6 9
=> 3
C: 120
a: 33 61 58 41 50 21 60 64
=> 4
C: 120
a: 33 61 58 41 50 21 60 64 23 45 67 78 89
=> 7

490:
18/11/14 00:21:42.53 1oDeoExT.net
>>438
スレリンク(tech板:54番)
rucursive に書く人が一人ぐらいいてもいいか、と

491:デフォルトの名無しさん
18/11/14 00:25:56.42 BDJVwe3s.net
rucursiveならしょうがない

492:
18/11/14 00:58:44.50 1oDeoExT.net
>>477
typo, "recursive"
ええと、>>476 に近いのは >>453 かもしれませんが、>>453 は bit 数を具体的に求めきっていますか?それとも >>476 のように真理値まで短縮してリターンしてますか?
haskell はよくわからないので…

493:デフォルトの名無しさん
18/11/14 01:04:38.44 xfEiy+CV.net
>>475
全探索したら、3つ目の例の答えが6になったんだが合ってる?
[21 33 60] [23 89] [41 78] [45 64] [50 67] [58 61]

494:デフォルトの名無しさん
18/11/14 01:23:48.18 smxkN2Ql.net
>>479
5はありえないから合ってるね

495:デフォルトの名無しさん
18/11/14 05:43:59.41 BYIKTG47.net
>>340 J
f=:3 : 0
y 100&|@^ y^y
)

496:デフォルトの名無しさん
18/11/14 06:20:37.22 W0CfAPru.net
>>481
どのバージョンのJで100|777^777なんてできるんだよ…

497:デフォルトの名無しさん
18/11/14 06:24:21.52 W0CfAPru.net
書き方が嫌らしかった。
それ動かないんじゃないですかということ。

498:デフォルトの名無しさん
18/11/14 06:38:51.58 BYIKTG47.net
>>482
v6で動いたけどな

499:デフォルトの名無しさん
18/11/14 07:48:55.58 XWwMTSMS.net
>>478
むっちゃ愚直に10進数から2進数に変換してるだけです^^;
URLリンク(www.it-license.com)
ただ、今回は1になってるビットが奇数かどうかだけなのでビット順は逆になっても構わないだろうと、
速い方でリストにしてます。
blist n = (n `mod` 2):blist (n `div` 2)
だとビット順は逆さま。
blist n = (n `mod` 2) ++ blist (n `div` 2)
とすると正しい順番ですが遅くなります。
あとは1と0だけのリストなので合計求めて
sum.blist ―2進数に変換しながら1の合計を求める。
入力と関連付けて
zip list
奇数だけをフィルタリングしてます。
filodd = filter (\(_,y) -> odd y)

500:デフォルトの名無しさん
18/11/14 07:53:25.46 BYIKTG47.net
>>481の実行結果
f @>1 2 3 4 11 13 100 777x
1 16 87 96 11 53 0 97

501:デフォルトの名無しさん
18/11/14 08:04:51.77 W0CfAPru.net
>>481
最後の y の前に x: つければどのバージョンでも動くな
100 のとき 0 にならないからダメだけど

502:デフォルトの名無しさん
18/11/14 08:08:08.67 W0CfAPru.net
>>487
>100 のとき 0 にならないからダメだけど
いやこっちは言いがかりだった。ちゃんと動く。

503:
18/11/14 08:16:08.16 1oDeoExT.net
>>485
解説ありがとうございます。
>blist n = (n `mod` 2) : blist (n `div` 2)
この : は (cond atom list) の : なんですね、なんとかわかるようになりました

504:
18/11/14 08:19:40.71 1oDeoExT.net
>>489
×(cond atom list)
○(cons atom list)

505:デフォルトの名無しさん
18/11/14 08:34:57.16 W0CfAPru.net
言いがかりだったというか
いちゃもんを付けてごめんなさい
100|777x^777x^777x これはngで
777(100&|@^) 777x^777x これはok
とか勉強になりました (累乗の剰余の特別扱いか?)

506:デフォルトの名無しさん
18/11/14 11:57:26.31 bryEJhFF.net
>>283
Kotlin
URLリンク(paiza.io)

507:デフォルトの名無しさん
18/11/14 14:12:11.78 OQ399L2/.net
ナップサック問題はNP困難らしいけど>>475は効率よく解けるのだろうか

508:デフォルトの名無しさん
18/11/14 14:13:39.09 bryEJhFF.net
>>493
順列と足し算の問題ではないのか?
てか、今のところそれしか思い浮かばない。

509:デフォルトの名無しさん
18/11/14 14:30:58.50 BDJVwe3s.net
現実は荷物が一日10万個くらいあるんだよなぁ

510:デフォルトの名無しさん
18/11/14 14:57:13.49 bryEJhFF.net
正にコンピュータ向けの仕事

511:デフォルトの名無しさん
18/11/14 15:18:37.83 XWwMTSMS.net
実際は大量購入した方が安くなるから、よく出るサイズを大量購入して、それ以下の重量は全部よく出るサイズにした方が安上がりだったりする。
(だからアマゾンの箱は無駄にでかい)
まあこれはプログラミング上の問題だが。

512:デフォルトの名無しさん
18/11/14 16:08:49.28 T5a0sRYf.net
>>475
段ボール箱の容量の増減は割と簡単に出来る。

513:デフォルトの名無しさん
18/11/14 18:30:10.19 whO97NBY.net
>>283 octave
URLリンク(ideone.com)

514:デフォルトの名無しさん
18/11/14 19:00:13.88 DmGPDAaP.net
>>438 C
URLリンク(ideone.com)

515:デフォルトの名無しさん
18/11/14 22:47:03.81 whO97NBY.net
>>283 ruby
URLリンク(ideone.com)

516:デフォルトの名無しさん
18/11/15 00:59:29.19 Q7kJgHrD.net
>>283
python 3
URLリンク(ideone.com)
ゴミ

517:デフォルトの名無しさん
18/11/15 02:07:53.71 lbhTVho0.net
>>475
Kotlin
このアルゴリズムで良いのかいまいちわからん。
箱の中に入れられる最大の品物を詰め込み続け入れられなくなったら次の箱を用意して同じことを繰り返すという方法。
結果を見ると一応出来ているようではあるが、これでうまく行く理由がはっきりわからない。
URLリンク(paiza.io)
入力は1行の先頭に容積、その後スペース区切りで品物の体積。
結果は箱の数とそれぞれの箱に詰め込んだ品物。

518:デフォルトの名無しさん
18/11/15 05:46:40.53 uj0cmGI/.net
>>503
C: 7
a: 3 3 2 2 2 2
最適は[3,2,2]と[3,2,2]の2箱でないといけない

519:デフォルトの名無しさん
18/11/15 07:10:16.88 dYhTSjHD.net
>>503
それだと 6, 5, 3, 2, 2, 2のとき[6, 3], [5, 2, 2] [2] になるが[6, 2, 2] [5, 2, 3]が最小

520:デフォルトの名無しさん
18/11/15 07:14:44.92 dYhTSjHD.net
>>505
C=10を書き忘れた上に既に同じ指摘が書かれてた

521:499
18/11/15 09:09:38.39 RDhHOc3n.net
>>504>>505>>506
なるほど。じゃあダメだな。

522:497
18/11/15 18:39:12.67 cWkAhR+7.net
>>283 ruby
URLリンク(ideone.com)
・ほんのりリファクタ

523:114
18/11/15 23:46:11.08 lNkjj0jr.net
>>475
Haskell
問題と同じ答えになったんだが、どうやら三番目は6個になるっぽい?
じゃあダメか。。。
main = print $ map mapbox (slist list)
slist xs = map (\(x,y) -> (x, qsort y)) xs
mapbox (x,y) = (x,box 0 x [] y)
box n _ [] [] = n
box n _ ns [] = n + 1
box n c ns [x] | c >= sum (x:ns) = n + 1
box n c ns [x] | c < sum (x:ns) = n + 2
box n c ns (x:xs) | c == sum (x:ns) = box (n + 1) c [] xs
box n c ns (x:xs) | c > sum (x:ns) = box n c (x:ns) xs
box n c ns (x:xs) | c < sum (x:ns) && c > sum ((minimum xs):ns) =
box n c ((last xs):ns) (x:(init xs))
box n c ns (x:xs) | c < sum (x:ns) && c < sum ((minimum xs):ns) =
box (n + 1) c [] (x:xs)
box n c ns (x:xs) | c < sum (x:ns) && c == sum ((minimum xs):ns) =
box (n + 1) c [] (x:(init xs))

524:114
18/11/15 23:46:25.95 lNkjj0jr.net
qsort [] = []
qsort (x:xs) = large ++ [x] ++ small
where
small = qsort [a|a <- xs,a <= x]
large = qsort [a|a <- xs,a > x]
list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]
出力
[(30,3),(120,4),(120,7)]

525:デフォルトの名無しさん
18/11/15 23:52:24.73 Q7kJgHrD.net
>>283
python 3
def wall2(height, width):
__maps = {x : [] for x in range(height)}
__counts = {w: [x for x in range(height) for y in range(width) if x + y == w] for w in range(height + width)}
__num = iter(range(1, 1 + height * width))
__for k,v in counts.items():
____for vv in sorted(v, reverse= not k % 2):maps[vv].append(next(num))
__for v in range(height):
____print(" ".join(map(lambda x: "%0{}d".format(len(str(width * height))) % x, maps[v])))
__else: print()
for x in [[3,3],[4,2],[3,5],[1,8]]: wall(*x)

やまほどrange()を書かないといけない宿業

526:114
18/11/16 08:32:20.01 00yShIqx.net
>>510
結果がはみ出てた。。。
[(30,3),(120,4),(120,7)]
大きい順に入れて、はみ出たら一番小さいのを入れてみる(入ったら入れて、はみ出たらアカウント)アルゴリズムにしたけど、
大きい順に入れて、はみ出たら入る最大の数字に出会うまで探索。探すものが無くなったらカウントってアルゴリズムに変えても結果は変わらず。
どうやって三番目が6個で済むんだろ。
出来た人、アルゴリズム教えて><

527:デフォルトの名無しさん
18/11/16 10:37:27.50 7Qu0EE2P.net
>>508
渦巻きスキャンも短い
URLリンク(ozy4dm.hateblo.jp)

528:デフォルトの名無しさん
18/11/16 11:04:51.39 qaNu/as0.net
>>512
89 23| 67 45| 78 41| 60 21 33| 64 50| 61 58
全探索ではないけど
33 61 58 41 50 21 60 64 23 45 67 78 89
これを全ての順列作って前から順に120以内ぎりぎりのところで区切っていく
ってやり方で出てくる
このやり方もこれでは出来たけど最適解が必ず見つかるか分からない

529:114
18/11/16 11:42:51.07 00yShIqx.net
>>514
ありがとう。
やってみたけど、こっちでは順列だと1個増えた。
(と言うか、自分もソートしてから渡してるので順列なんだよね。念のため小さい順にしたら増えた)
うーん。。。
やってる事同じっぽいのに、なぜだ。。。

530:114
18/11/16 11:55:02.54 00yShIqx.net
自分は最後の一個入れようとして、入りきらなかったら入る分一個、はみ出た分一個で2個カウントしてるんだけど、そこが1個とカウントしてるとかだったり。。。
そう言う勘違いであってほしいな。。。
box n c ns [] [x] | c < sum (x:ns) = n + 2 -- x+nsで入りきらないので、nsで一個、xで一個。
じゃないと私じゃお手上げ\(^o^)/

531:デフォルトの名無しさん
18/11/16 11:57:38.57 qaNu/as0.net
入るとか入らないとかじゃなくてこの並びが出てきたら左から順に区切って行くだけだよ
89 23 67 45 78 41 60 21 33 64 50 61 58

532:デフォルトの名無しさん
18/11/16 12:22:55.60 tOyusnlA.net
>>515
510のやり方で最小値は求まるのでコードが間違ってる

533:114
18/11/16 12:23:45.77 00yShIqx.net
おおう。。。勘違い。
順列の意味勘違いしてた。
数学の順列か。分かった。
やってみる。
ありがとう。

534:デフォルトの名無しさん
18/11/16 12:25:57.98 tOyusnlA.net
>>514
必ず見つかる
最小になるパターンの内各箱の中を逆順にソートした数列を考えてみると自明

535:114
18/11/16 15:20:04.95 00yShIqx.net
多分これで出るはずだけど、家のPCが低スペックでメモリ不足で止まる。。。(ideoneでも止まる辺り、現実的じゃない)
(小さいリストでは確かめて見たので、動いてるっぽい?)
import Data.List
main = print $ map (\(x,ys)->(x, bmin x ys)) list
bmin x xs = minimum $ map (\lst -> box 0 x [] lst)
$ permutations xs
box c x [] [] = c
box c x ns [] = c + 1
box c x ns (y:ys) | x < sum (y:ns) = box (c + 1) x [] (y:ys)
box c x ns (y:ys) | x >= sum (y:ns) = box c x (y:ns) ys
list = [(30,[8,5,


536:10,6,4,5,8,5,9,6,9]), (120,[33,61,58,41,50,21,60,64]), (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] せっかく >>514 さんに順列と言うヒント貰っておいて活かしきれてない。。。ごめん。



537:114
18/11/16 15:22:31.31 00yShIqx.net
>>514 さんに折角、順列って言うヒント貰っておいて活かせなかった。
ごめん。

538:デフォルトの名無しさん
18/11/16 15:27:37.42 7Qu0EE2P.net
箱に入れた量で大小関係を付けると6個で36通り

539:デフォルトの名無しさん
18/11/16 15:40:46.44 i0pW9pnK.net
>>475
URLリンク(ideone.com)

力技、順列力技ゆえN<=20程度しか求められない。
TSPのやつの変形(2^n*n)、
冗長な計算してるのだろうが、実装できない
ついでに、min(乱択(5000回),貪欲解*2) 回答も書いてみた。
最初のと比較をしてみると、3000テストで42個、間違えた。
(ideone上は100テストで2つ間違っている)
※N,Cが小さければ、
この程度で、そのくらい当たりやすい問題なのだろう。
(逆に間違いを探すのが大変)
余談
これは『ビンパッキング問題』そのもの
でかいNに対しては、ググればもっといい近似値の求め方がある。

540:デフォルトの名無しさん
18/11/16 17:13:07.29 36ZZe95D.net
ビンパッキングって焼きなまし法(近傍が分からない)のとビームサーチ、どっちが効率良いだろうか

541:デフォルトの名無しさん
18/11/16 17:37:36.91 t5p43h9A.net
お題:nの階乗の末尾の連続した0の個数を求める。(過去スレから)

542:デフォルトの名無しさん
18/11/16 17:46:29.02 TvsPH/qp.net
>>526 Ruby
f = ->n{s = 0; while 0 < n /= 5; s += n; end; s}
[0, 1, 2, 3, 4, 5, 10, 100, 1000000,
10000000000000000].each{|e| puts '%d => %d' % [e, f[e]]}
# =>
0 => 0
1 => 0
2 => 0
3 => 0
4 => 0
5 => 1
10 => 2
100 => 24
1000000 => 249998
10000000000000000 => 2499999999999996

543:デフォルトの名無しさん
18/11/16 19:19:00.00 KTZidSV2.net
お題
N段の三角形ピラミッドの一筆書きを構成せよ
例えば、2段の三角形ピラミッドは以下のような図形である
 △
△ △
頂点の番号は上から順番に
1
2 3
4 5 6
……
と与えられる。
(入出力例)
N=1
=> 3 2 1 3
N=2
=> 1 2 4 5 2 3 5 6 3 1
=> 1 3 5 6 3 2 5 4 2 1 (解は複数あるが、そのうちの一つを出力すればよい)

544:デフォルトの名無しさん
18/11/16 20:05:31.22 JjlNk60X.net
>>528 Ruby
def hitofude(n)
  return [1] if n == 0
  x, y = n*(n + 1)/2, (n + 1)*(n + 2)/2
  [
    y,
    *hitofude(n - 1),
    *(1...n).flat_map{|i| [y - i, x - i]},
    *(x + 1..y),
  ]
end
[2, 3, 4].each{|i| p hitofude(i)}
# =>
[6, 3, 1, 2, 3, 5, 2, 4, 5, 6]
[10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10]
[15, 10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10, 14, 9, 13, 8, 12, 7, 11, 12, 13, 14, 15]

545:デフォルトの名無しさん
18/11/16 21:39:18.95 0oMzWKAu.net
>>528 C
URLリンク(ideone.com)

546:デフォルトの名無しさん
18/11/17 09:45:00.71 u+BaxmkL.net
>>475
やった。
順列使わないで三番目が6個になった!
Haskell
main = mapM_ print $ map mapbox (slist list)
slist xs = map (\(x,y) -> (x, qsort y)) xs
mapbox (x,y) = (x,length (box x [] [] y))
box _ [] [] [] = [[]]
box _ ns [] [] = [ns]
box c ns ys [x] | c >= sum (x:ns) = box c (x:ns) [] (reverse ys)
box c ns ys [x] | c < sum (x:ns) = [ns] ++ box c [] [] (reverse (x:ys))
box c ns ys (x:xs) | c >= sum (x:ns) = box c (x:ns) ys xs
box c ns ys (x:xs) | c < sum (x:ns) && c >= sum ((last xs):ns) = box c ns (x:ys) xs
box c ns ys (x:xs) | c < sum (x:ns) && c < sum ((last xs):ns) = [ns] ++ box c [] [] (reverse ys ++ (x:xs))

qsort [] = []
qsort (x:xs) = large ++ [x] ++ small
where
small = qsort [a|a <- xs,a <= x]
large = qsort [a|a <- xs,a > x]
list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]


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