プログラミングのお題 ..
[2ch|▼Menu]
691:きではないですか。



692:デフォルトの名無しさん
15/08/30 07:15:13.64 /y7LwmGS.net
>>661
Substringの説明は
URLリンク(www.hackerrank.com)
にあります

693:デフォルトの名無しさん
15/08/30 07:56:04.83 qggTaQba.net
>>662
なんか見当はずれのコドみたいなので
>>661はとりさげます

694:デフォルトの名無しさん
15/08/30 23:33:46.86 aj+QsKaJ.net
お題:半角数字の列をよくある日本語表記に直してください
f(123422343234) -> 1234億2234万3234
f(012342234) -> 1234万2234
桁は京まで対応すること。
以下のオプションは取捨選択自由です。
1. カンマの挿入
f(123422343234) -> 1,234億2,234万3,234
f(12342234) -> 1,234万2,234
2. 切り捨ての指定
f(123422343234, 0) -> 1,234億2,234万3,234
f(123422343234, 1) -> 1,234億2,234万
f(123422343234, 2) -> 1,234億

695:デフォルトの名無しさん
15/08/31 06:12:39.24 BuFncqM8.net
>>665
URLリンク(ideone.com)
C++。イデオンだとSig11で落ちる。なぜじゃー。Orz
オプションはやってない。

696:デフォルトの名無しさん
15/08/31 06:25:41.82 /q7V3tHF.net
>>665 ocaml
URLリンク(ideone.com)
数値バージョン、4桁の京を扱えない
URLリンク(ideone.com)
文字列バージョン、4桁の京も大丈夫

697:デフォルトの名無しさん
15/08/31 06:26:01.89 yqA7xXJ+.net
>>665
@Mathematica
URLリンク(ideone.com)
※分かりやすいように関数名を変えています。

698:デフォルトの名無しさん
15/08/31 06:39:17.56 iqkJ/hRF.net
お題:
URLリンク(detail.chiebukuro.yahoo.co.jp)

699:デフォルトの名無しさん
15/08/31 07:03:04.72 OqMtrQmZ.net
お題の出し方が斬新だな

700:デフォルトの名無しさん
15/08/31 11:34:48.22 8CZHcZuv.net
>>666
MinGWのg++でコンパイルしたら、
'unit_64_t' is not a member of 'std'
というエラーメッセージが出てコンパイルできませんでした。
このエラーを回避する方法はありますか

701:デフォルトの名無しさん
15/08/31 12:05:11.18 44vWBFtj.net
>>671
#include <cstdint>

702:デフォルトの名無しさん
15/08/31 14:11:30.14 5pWQowlO.net
>>665
Ruby
関数じゃなくて標準入力標準出力でやってしまった
オプション非対応
極まで対応
それ以上は単位が2文字以上で桁が8桁ずつになるから面倒(特に後者)なのでやめた
# coding:utf-8
scale = "万億兆京垓杼穣溝澗正載極"
num = gets.to_i.to_s
scale.length.times{|i|
unless (i+1)*5 > num.length
num = num.insert(-(i+1)*5,scale[i])
end
}
puts num

703:デフォルトの名無しさん
15/08/31 14:55:13.89 BuFncqM8.net
>>671
<cstdint>はコードに入ってるんだが、なんでコンパイルできないかなぁ。よくわからん。
っていうか、なんでランタイムエラーで落ちるのかサッパ解らん。
VS2015コミュニティで開発してるんだが、それでは問題なく動いてる。
な ぜ だ − Orz
一応検索したらこっちの不具合ではないっぽい記述を発見したので保留。

704:デフォルトの名無しさん
15/08/31 15:10:03.71 XMVdTen+.net
>>669 Common Lisp
面白そうだからやってみたけど、真面目にやらないと収束しないなこりゃ
URLリンク(ideone.com)

705:デフォルトの名無しさん
15/08/31 16:20:52.21 8CZHcZuv.net
>>674
MinGW g++でコンパイルした時に出るエラーメッセージです。
プログラム名は"odai664.cpp"です
#error This file requires compile and library support for the \
odai664.cpp:10:22; error: 'unit64_t' is not a member fo 'std'
std::string MakeHoge(std::unit64_t N) {
odai664.cpp:10:39: error: expexted ',' or '; before '{' token
std::string MakeHoge(std::unit64_t N)

706:デフォルトの名無しさん
15/08/31 17:03:22.54 BuFncqM8.net
>>676
さっぱりやね。標準のライブラリの範囲でやってるから怒られるはずがないんだけど、パス通ってる?

707:片山博文MZ ◆T6xkBnTXz7B0
15/08/31 17:05:31.30 l/+TTZEK.net
>std::unit64_t
unsigned int 64-bit type
だから
uint64_tだよ

708:デフォルトの名無しさん
15/08/31 18:00:19.16 dZB28jlS.net
>>665 J
f =: 3 : 0
if. y = 0 do.
0
else.
a =. (5 # 10000) #: y
; (* a) # a (<@,&amp;":)"0 ucp '京兆億万 '
end.
)
f 1234億2234万3234 
1234億2234万3234 
f 100000000000000039x
10京39 

709:デフォルトの名無しさん
15/08/31 18:12:39.09 dZB28jlS.net
>>679
実行結果コピー失敗した
f 123422343234x
1234億2234万3234 
でした

710:デフォルトの名無しさん
15/08/31 19:22:57.92 yqA7xXJ+.net
>>675
あんたすげぇなw

711:デフォルトの名無しさん
15/08/31 21:01:55.00 dZB28jlS.net
>>654 Io
subString := method(s,
r:=list
for(i, 0, s size - 1,
for(j, i + 1, s size,
r push(s slice(i, j))
)
)
r unique
)
f := method(T, A, B,
if(subString(A) intersect(subString(B)) size == T, "YES", "NO")
)
Io> f(2,"hello","world")
==> YES
Io> f(3,"hello","look")
==> YES

712:デフォルトの名無しさん
15/08/31 23:09:29.18 MGeyNwdC.net
>>654 F#
let sub s =
 let m = String.length s - 1
 Set [for i in 0..m do for j in i..m -> s.[i..j]]
let f n a b = printfn "%s" <| if Set.intersect (sub a) (sub b) |> Set.count = n then "YES" else "NO"
f 2 "hello" "world" // YES
f 2 "hi" "world" // NO
f 1 "o" "oxo" // YES
f 3 "aaa" "aaaa" // YES
f 3 "hello" "look" // YES

713:デフォルトの名無しさん
15/09/01 02:01:57.35 qRUH881v.net
>>665 Emacs Lisp
(cl-defun f (s &key comma (truncate 0))
(let* ((aaa (let ((x (string-match "[^0]" s))) (if x (substring s x) "0")))
(bbb (length aaa))
(ccc (* (ceiling (/ (float bbb) 4)) 4))
(ddd (format (format "%%%ds" ccc) aaa))
(eee (cl-loop for i from 0 below ccc by 4 collect (substring ddd i (+ i 4))))
(fff (mapcar #'(lambda (x) (if (cl-find #x20 x) (remove #x20 x)
(if (string= x "0000") "" (let* ((i (string-match "[^0]" x)) (y (if i (substring x i) x)))
(if (= (length y) 4) (concat (substring y 0 1) (if comma "," "") (substring y 1)) y))))) eee))
(ggg (reverse fff))
(hhh (cl-subseq ggg truncate))
(iii '("" "万" "億" "兆" "京"))
(jjj (cl-subseq iii truncate))
(kkk (cl-mapcan #'(lambda (a b) (if (string= b "") nil (list a b))) jjj hhh)))
(apply #'concat (reverse kkk))))
f
(f "123422343234") "1234億2234万3234"
(f "012342234") "1234万2234"
(f "123422343234" :comma t) "1,234億2,234万3,234"
(f "12342234" :comma t) "1,234万2,234"
(f "123422343234" :comma t :truncate 0) "1,234億2,234万3,234"
(f "123422343234" :comma t :truncate 1) "1,234億2,234万"
(f "123422343234" :comma t :truncate 2) "1,234億"

714:デフォルトの名無しさん
15/09/01 10:34:27.90 2zAmQ8cX.net
>>665 Squeak Smalltalk (日本語版 URLリンク(osdn.jp))
| fn |
fn := [:n :m |
 | out units |
 self assert: (n isInteger and: [n > 0] and: [n < 1e20]).
 units := #('' 万 億 兆 京) readStream.
 out := OrderedCollection new.
 [n = 0 or: [units atEnd]] whileFalse: [
  | val unit |
  val := n \\ 1e4. n := n // 1e4.
  unit := units next.
  ((m := m - 1) < 0 and: [val ~= 0]) ifTrue: [out addFirst: val asStringWithCommas, unit]].
 out concatenation as: String
].
fn value: 123422343234 value: 0. "=> '1,234億2,234万3,234' "
fn value: 123422343234 value: 1. "=> '1,234億2,234万' "
fn value: 123422343234 value: 2. "=> '1,234億' "
fn value: 100000000000000039 value: 0. "=> '10京39' "

715:デフォルトの名無しさん
15/09/01 18:06:59.50 2ClwOalo.net
>>665 Python3
from functools import reduce
f = (lambda num, comma=False, round=0: reduce((lambda cm: (lambda fmt: (lambda
tup, uni: (lambda q, rnd, acc: (lambda n, m: (n, rnd-1, acc) if rnd > 0 else
((n, 0, fmt.format(m, uni, acc)) if m else (n, 0, acc)))(*divmod(q, 10000)))
(*tup)))('{:,d}{}{}' if cm else '{}{}{}'))(comma), ['', '万', '億', '兆', '京'
], (num, round, ''))[2])
print(f(123422343234))
print(f(123422343234, comma=True))
print(f(123422343234, round=1))

716:デフォルトの名無しさん
15/09/01 18:12:53.81 uqK6kTn6.net
ファイルの内容の検索、重複・類似検索はプログラムの基本とおもう。Googleの土台もここ。
お題でローカルPCでこれらを行うやつ作ってくれ。
windowsのファイル重複検索でいまだにUnDupというソフトを使ってる。ユニコード非対応で数が多いと動作不安定になる。

717:デフォルトの名無しさん
15/09/01 19:20:48.31 uqK6kTn6.net
人狼をプログラムする上で、.ルール・プロトコル作りがキモとおもってたら
すでにそれは作ってあって大会も開催済みだった。

人狼知能サーバ | Artificial Intelligence based Werewolf
URLリンク(www.aiwolf.org)

[CEDEC2015]人工知能、「人狼」知能エージェントが「人狼」で戦う人狼知能大会が開催!
URLリンク(www.gpara.com)

718:デフォルトの名無しさん
15/09/01 19:29:08.01 MVA2NaoW.net
>>687
FileMany使えばどう?
C#x64版だけど一度も落ちた事がない

719:デフォルトの名無しさん
15/09/02 04:57:53.68 m4hBDGn9.net
>>665
スレリンク(tech板:9番)

720:デフォルトの名無しさん
15/09/02 11:54:23.73 RN6F+W1d.net
>>690
カンマの位置おかしくね?

721:655
15/09/03 05:55:01.65 4NI0YG0L.net
>>654
@Mathematica
URLリンク(ideone.com)
※Substring の解釈を間違っていたので書き直しました。

722:デフォルトの名無しさん
15/09/03 08:13:01.79 Hq1TyWtW.net
>>665 Go
URLリンク(ideone.com)
fの引数には文字列、内部でbig.Intを使うことで京まで実装

723:デフォルトの名無しさん
15/09/03 08:41:34.44 Mb6vlEP2.net
>>691
>>665 のカンマの打ち方は変
数字を英語で読んでみればわかる

724:デフォルトの名無しさん
15/09/03 09:33:37.13 2z67PNJX.net
英語で読む?題意に沿


725:、事も出来ない低脳QZか



726:デフォルトの名無しさん
15/09/03 09:40:36.27 BYmbupPq.net
出題にケチを付けて出された問題が意図するのと違う答えを提出してたら
プログラミングコンテストにすらハブられるよ
そんなんだから無職なんだろうけどな

727:デフォルトの名無しさん
15/09/03 19:46:12.06 HDK0Xx13.net
Goって初かな

728:デフォルトの名無しさん
15/09/04 01:34:34.38 ErYOyNSO.net
奇囲碁に三味線とプログラムから遠ざかっていたら、お題見てもぱっと作り出せなくなった
年だのぉ
チンコもなかなか立たないし
わははは

729:デフォルトの名無しさん
15/09/04 11:48:19.76 60C


730:8P18N.net



731:デフォルトの名無しさん
15/09/05 05:11:15.58 pNQf4xq/.net
>>699
C#
URLリンク(ideone.com)
N=16はideone.comでは残念ながらタイムアウトしてしまう
手持ちの処理系では8秒ほどで求まる
それにしてもこれをC++に書き直してもそんなに速くならない事に驚き
新しいJITコンパイラは優秀

732:デフォルトの名無しさん
15/09/05 06:02:46.91 bMqKfWg+.net
>>699
スレリンク(tech板:11番)
>>700
爆速だ‥

733:デフォルトの名無しさん
15/09/05 08:35:35.11 HkcVe1Bz.net
>>695
>>696
ここは>>620 のとおりお題スレ、ならばお題の批判もありなのでは?

734:デフォルトの名無しさん
15/09/05 08:37:14.95 dxdGb8xg.net
お題が出てそれに対して批判してたらコンテストが成り立たないって話なのにアスペか?

735:デフォルトの名無しさん
15/09/05 08:58:10.81 bk65bvoQ.net
どうしてもお題を批判したいのならここで書かずにチラシの裏にでも書いとけ
皆答えてる奴がいるのに一人だけ暴れるとかキチガイかよ
それに日本語圏では4桁と3桁の間にカンマを入れるのになぜ英語で読むんだ?
頭おかしいのか?

736:デフォルトの名無しさん
15/09/05 09:54:03.65 FYG0oxrb.net
>>703-704
それはQZの思考過程がこうなってるからなんだよ
普通の人が解答を間違えた場合:「済みません間違えました」
QZが解答を間違えた場合:「俺は間違ってない。間違ってるのは出題の方だ」←実際は間違ってばかりいる
自己愛性パーソナリティ障害特有の思考回路
捏造した歴史を信じこんで真実の歴史から目をそむけているどこかの特亜人そっくりですなあ
ニンニクくさー

737:デフォルトの名無しさん
15/09/05 11:36:42.88 u8tdzSFZ.net
>>700
プログラムだけでなく、15Queenの場合の配置の一例を表示して
もらえないでしょうか。

738:デフォルトの名無しさん
15/09/05 11:36:50.97 H3Bu+jcQ.net
荒れてるところすみませんがお題です
Google Code Jamより
URLリンク(code.google.com)
最小スカラー積
次の2つのベクトルが与えられているとします:v1=(x1,x2,...,xn)とv2=(y1,y2,...,yn)
これらのベクトルのスカラー積は1個の数字で、x1y1+x2y2+...+xnynとして計算されます
各々のベクトルの要素は任意に並べ替えても構わないとします
入力ファイルの最初の行は、テストケース数(整数)Tが含まれています
各テストケースは、最初の行は整数nを含んでいます。次の二行は、v1とv2それぞれの座標が与えられます
出力は、各々のテストケースに対して
Case #X: Y
のようになります
ここでXはテストケース番号、Yは与えられたベクトルの全ての順列の最小スカラー積です

739:デフォルトの名無しさん
15/09/05 11:39:13.55 H3Bu+jcQ.net
制限
小さなデータセット
T = 1000
1 ≤ n ≤ 8
-1000 ≤ xi, yi ≤ 1000
大きなデータセット
T = 10
100 ≤ n ≤ 800
-100000 ≤ xi, yi ≤ 100000
2種類のデータセットがあるのは、それぞれの得点が異なるからで、どちらを選択されても構いません

入力
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1
出力
Case #1: -25
Case #2: 6

740:デフォルトの名無しさん
15/09/05 11:43:11.93 iR2NaoHp.net
>>706
横槍だけど、お題はNQueens問題であり、ユニーク解(回転したり反転すると重なる重複解)
を考慮しない置き方の数を求めるものだ
実際の配置を出力すると膨大なデータになり、時間を測定するという題意に背く事になる
この場合時間の測定は必要なくなるだろ
そんなプログラムはどこにでも転がっている

741:デフォルトの名無しさん
15/09/05 11:54:21.61 i6kEld9S.net
ユニーク解と、そうでない解の間に、たとえば4倍したら求まるといった簡単な関係があるんだっけ?
それだったらどちらでも一緒だし、そうでなければユニーク解を求めないとダメでは?
一個求めただけでもいいことにならないか?

742:デフォルトの名無しさん
15/09/05 11:58:23.07 i6kEld9S.net
Nクイーン問題(N Queens Problem)
URLリンク(www.ic-net.or.jp)

743:デフォルトの名無しさん
15/09/05 11:59:34.78 iR2NaoHp.net
この粘着具合はまたQZか
URLリンク(deepgreen.game.coocan.jp)
これでも読めや
題意では"ユニーク解は考慮しなくてもよい"となっている
それにケチを付けるんならてめえがユニーク解を考慮したプログラムをまず書いてから言え

744:デフォルトの名無しさん
15/09/05 12:02:22.49 iR2NaoHp.net
>>711
ちゃんと最初に"解の個数を求める"となってるね(・∀・)
ユニーク解を考慮した解の個数を求めるべきならお題にちゃんと「ユニーク解を考慮せよ」
と書いてあるはずだろ
「ユニーク解は考慮しなくてもよい」と書いてあるんだぞ
日本語読めないんでちゅか?

745:デフォルトの名無しさん
15/09/05 12:09:06.35 i6kEld9S.net
>>712
どちらもユニーク解だが。どれも同一と見なすかで解個数が違ってくるからユニークのほうがいいだろ。
鏡像は別で、回転は同一とみなす人をいるかもしれない。


PAA の概要
N=2n の場合、 N x N の N クイーン問題を 4 分割した部品(n x n の部分解)から以下の手順で合成する。
1) A と B から、2 分割した部品(n x 2n の部分解)AB を生成(上半分の合成)
2) C と D から、2 分割した部品(n x 2n の部分解)CD を生成(下半分の合成)
3) AB と CD から全体解を生成
なお、解の生成は unique 解のみに限定し、全数解は式 1 により求める。
高速化実現のポイントは、
・結合処理の高速化(特に、キャッシュミスの削減)
・代表解の判定条件による集合積演算の軽減 にある。
URLリンク(deepgreen.game.coocan.jp)

Nクイーン問題(N Queens Problem)
ユニーク解から全解への展開
これまでの考察はユニーク解の個数を求めるためのものでした。
全解数を求めるにはユニーク解を求めるための枝刈りを取り除いて全探索する必要があります。
したがって探索時間を犠牲にしてしまうことになります。そこで「ユニーク解の個数から全解数を導いてしまおう」という試みが考えられます。
URLリンク(www.ic-net.or.jp)

746:デフォルトの名無しさん
15/09/05 12:11:11.74 iR2NaoHp.net
>>714
だからそこまでお題に背きたいんだったら改めて"ユニーク解を考慮せよ"という新しいお題を立てろ
もうこれ以上お前と議論しても無駄だ

747:デフォルトの名無しさん
15/09/05 12:11:53.03 i6kEld9S.net
Boardは四角で、ことなる四方向から観察したら直ちに同じ見え方のものが4つあるのは


748:わかる。



749:デフォルトの名無しさん
15/09/05 12:39:53.44 l/Jp8teC.net
お題
オセロの任意の局面・手盤からの最短全滅手を
求める(無い場合は無いと出力)
入力データはキーボードでもテキストファイルでも
可能
最短全滅手はすべての石が黒・白どちらかの色に
なってしまうこと。
局面は、石が連続して置かれているという条件で
あれば不能局面でも可
(ちなみに解答は知らない)

750:デフォルトの名無しさん
15/09/05 12:41:02.73 l/Jp8teC.net
石が連続してというのは
石が連結してという表現のほうが
わかりやすいか....

751:デフォルトの名無しさん
15/09/05 12:47:13.51 a9CPEVg5.net
>>717
お前が全滅すればいいのにな
完全に論破されたからと言ってまず誰も解答が付かない問題を出すとかガキかよ

752:デフォルトの名無しさん
15/09/05 12:54:53.58 nIE3Kuq7.net
>>665 Emacs Lisp
キーワード引数commaの値が689の場合は>>690と同様に動作するようになりました。
(cl-defun f (s &key comma (truncate 0))
(let* ((aaa (let ((x (string-match "[^0]" s))) (if x (substring s x) "0")))
(bbb (length aaa))
(ccc (* (ceiling (/ (float bbb) 4)) 4))
(lll (if (eq comma 689)
(let ((c 0))
(cl-map 'string (lambda (x) x)
(reverse (cl-mapcan #'(lambda (x) (prog1 (if (and (/= x 32) (/= c 0) (= (% c 3) 0)) (list ?, x) (list x)) (unless (= x 32) (incf c))))
(reverse (string-to-list aaa))))))
(format (format "%%%ds" ccc) aaa)))
(mmm (if (eq comma 689)
(split-string (let ((c 0))
(cl-map 'string (lambda (x) x)
(reverse (cl-mapcan #'(lambda (x) (prog1 (if (and (/= c 0) (= (% c 4) 0)) (list 10 x) (list x)) (unless (= x ?,) (incf c))))
(reverse (string-to-list lll)))))) "\n")
(cl-loop for i from 0 below ccc by 4 collect (substring lll i (+ i 4)))))
(fff (mapcar #'(lambda (x) (if (cl-find #x20 x) (remove #x20 x)
(if (string= (remove ?, x) "0000") "" (if (eq comma 689) x (let* ((i (string-match "[^0]" x)) (y (if i (substring x i) x)))
(if (= (length y) 4) (concat (substring y 0 1) (if (eq comma t) "," "") (substring y 1)) y)))))) mmm))
(ggg (reverse fff))
(hhh (cl-subseq ggg truncate))
(iii '("" "万" "億" "兆" "京"))
(jjj (cl-subseq iii truncate))
(kkk (cl-mapcan #'(lambda (a b) (if (string= b "") nil (list a b))) jjj hhh)))
(apply #'concat (reverse kkk))))
f
(f "1234567890" :comma t) "12億3,456万7,890"
(f "1234567890" :comma 689) "1,2億34,56万7,890"

753:デフォルトの名無しさん
15/09/05 15:47:27.36 u8tdzSFZ.net
>>709
私は15Queenの一つの例を求めているだけです、
コンピュータ内で例えば行列の形で配置を求めているならば、
その一例を表示することはできないでしょうか。
たとえば、すべての配置の数を求めた後で、その最後に求めた
配置を表示するということならば、時間はあまり掛からないと思いますが。
プログラムだけを提示されてもその言語を使える環境にないものに
とっては、このプログラムの正しさを検証するてだてがありませんので。

754:デフォルトの名無しさん
15/09/05 15:52:40.59 1TQgpEDy.net
>>721
お前どんだけしつこいんだよ
じゃお前の書いたプログラムには全くバグがないのか
仕事で書いたプログラムに不具合が見つかっても「仕様です」と言って直さないつもりか
この問題は配置を求める問題ではない
「解の個数」さえ求めればそれでいいんだ
ビットマップを使った解法は外人が世界で一番最初に考案したそうなんでこの人に
「あなたのプログラムは本当に正しいのでしょうか。配置を表示できますか。」と質問を
英語で送ってみなよ
URLリンク(jsomers.com)
この人がそうだ
この人の書いたプログラムと本質的には何ら変わらない
もっと速いアルゴリズムもあるが長くなるので端折っただけ
お前を見てるとお前は人に嫌われる達人だなあと心から感心する

755:デフォルトの名無しさん
15/09/05 16:13:25.93 1TQgpEDy.net
>>721
あ、それとお前頭が悪くて人のプログラムを読み解く力がなさそうだから教えといてやるよ
利き筋のみをチェックするのと配置も同時に求めるのは別の問題だ
どう読んだらこのプログラムの中に配置情報まで入っていると思えるのかそちらの方が不思議なんだが
いくらでも配置も覚えておくプログラムは書けるぞ
むしろこのプログラムは利き筋のみチェックして配置を求めるのを省いた分だけ速くなってるのだと


756: 気付けないのかなあ 真剣に一度精神科で診てもらう事を検討しろよ もう遅いと思うけど



757:デフォルトの名無しさん
15/09/05 17:13:54.12 H2DL4EyO.net
これが噂の炎上学習法か
醜いね

758: ◆QZaw55cn4c
15/09/05 17:25:37.26 bMqKfWg+.net
なりすましに利用されるキャラに成ったとは喜ばしいことだ‥
でも俺じゃないよ

759:デフォルトの名無しさん
15/09/05 18:11:46.68 r36BFiK6.net
>>723
ざっと主張を読むと、>>723は頭いいとおもうけどな
異論あるやついるの?
>>721
このこは、馬鹿というか精神病はいってるいうか、
「云々なだけです」
なんてヤバスギなんだぞ
本人わからんだろうけど

760:デフォルトの名無しさん
15/09/05 18:20:17.60 byXpZJ1D.net
>>721君へ
僕は>>700さんのコードを改竄して配置を表示するようにしてみたよ。
URLリンク(ideone.com)
期待に応えられたかな???

761:デフォルトの名無しさん
15/09/05 21:22:45.11 pNQf4xq/.net
>>707
どちらのテストケースも時間が掛かり過ぎるのでもっと小さなデータにしました
データは
URLリンク(pastebin.com)
プログラムは(データを作るプログラムを含んでいます)
URLリンク(ideone.com)
これでこちらの環境ではReleaseモードで700ms前後です
こういうのはやはりC#は苦手なんですかね
すっきり書ける事は書けるんですが
<int>ではなくて<long>になっているのは、intでこれを実行すると大きなデータセットで
オーバーフローが出ちゃうからです
時間が掛かるのは多分順列で天文学的な場合の数になっちゃうからからなあ

762:デフォルトの名無しさん
15/09/05 21:33:50.27 OFlnC1Bs.net
お題:数列を省略して表示してください
数列の範囲 (min, max) と表示数 (disp)、省略の基点 (spot) が以下の範囲内で与えられます。
(0 < min < max), (2 < disp), (min ≦ spot ≦ max)
min 1, max 3, disp 3, spot 1: (1) 2 3
min 1, max 3, disp 3, spot 2: 1 (2) 3
min 1, max 3, disp 3, spot 3: 1 2 (3)
min 1, max 4, disp 3, spot 2: 1 (2) ... 4
min 1, max 4, disp 3, spot 3: 1 ... (3) 4
min 1, max 10, disp 5, spot 1: (1) 2 3 4 ... 10
min 1, max 10, disp 5, spot 2: 1 (2) 3 4 ... 10
min 1, max 10, disp 5, spot 3: 1 2 (3) 4 ... 10
min 1, max 10, disp 5, spot 4: 1 ... 3 (4) 5 ... 10
min 1, max 10, disp 5, spot 5: 1 ... 4 (5) 6 ... 10
min 1, max 10, disp 5, spot 6: 1 ... 5 (6) 7 ... 10
min 1, max 10, disp 5, spot 7: 1 ... 6 (7) 8 ... 10
min 1, max 10, disp 5, spot 8: 1 ... 7 (8) 9 10
min 1, max 10, disp 5, spot 9: 1 ... 7 8 (9) 10
min 1, max 10, disp 5, spot 10: 1 ... 7 8 9 (10)
min 128, max 256, disp 7, spot 192: 128 ... 190 191 (192) 193 194 ... 256
disp が偶数の場合の spot の偏り、
min 1, max 10, disp 4, spot 8: 1 ... 7 (8) ... 10
min 1, max 10, disp 4, spot 9: 1 ... 8 (9) 10
disp が大きい場合の振る舞い、
min 1, max 3, disp 5, spot 3: 1 2 (3)
min 1, max 3, disp 5, spot 3: error. disp out of range
() や ... などの装飾は自由です。

763:デフォルトの名無しさん
15/09/05 21:57:37.63 OFlnC1Bs.net
>>729
(2 < disp) は(0 < disp)でもおkです

764:デフォルトの名無しさん
15/09/05 22:22:12.08 OFlnC1Bs.net
>>730
やっぱり省略がアレになるので(2 < disp)に訂正します

765:デフォルトの名無しさん
15/09/06 00:53:28.75 3aEa3HTV.net
>>729 Python3
URLリンク(ideone.com)
spotから表示する数を求めていく方法

766:デフォルトの名無しさん
15/09/06 02:03:11.12 labNDWrY.net
NQueenの問題といい、オセロの件といい.QZの自演は凄いな

767:デフォルトの名無しさん
15/09/06 04:26:44.16 3aEa3HTV.net
>>729 OCaml
URLリンク(ideone.com)
>>732と同じアプローチ、ゴリ押しで書き下した

768:デフォルトの名無しさん
15/09/06 06:07:10.46 laHESI+6.net
>>733
QZの自己承認欲求が強すぎるよな
完全に精神的に病気だな
炎上学習法をやるのはQZ一人しかいない

769:デフォルトの名無しさん
15/09/06 08:08:20.90 /Fu+tBiS.net
>>728
ちょっと時間がかか


770:りすぎですね 無理にIEnumerable<T>を返してforeachするより http://d.hatena.ne.jp/JAPLJ/20090123/1232716837 こういう奴の方が速いかもしれないんで試してみてください ちなみにVS2015 C++で>>728のプログラムを書き直したのが http://ideone.com/5bUOrW >>728のデータでこちらで6msしか掛かりませんのでどこかに不自然に 時間がかかりすぎていると思います またこのプログラムはおっしゃる通りどこかでベクトルの大きさが大きいものが 1個でも入るとそこで引っかかります



771:デフォルトの名無しさん
15/09/06 08:17:25.46 3aEa3HTV.net
>>729 Go
URLリンク(ideone.com)
>>732と同じアプローチ、再代入ましまし

772:デフォルトの名無しさん
15/09/06 08:23:56.62 pZj7Wd8c.net
>>729
汚Haskell
URLリンク(ideone.com)

773:デフォルトの名無しさん
15/09/06 12:29:03.84 RC4omDg7.net
>>707 Java
URLリンク(ideone.com)

774:デフォルトの名無しさん
15/09/06 15:06:47.52 mows7ZZ0.net
>>729 Emacs Lisp
(cl-defun f (min max disp spot &key error)
(when (< (1+ (- max min)) disp)
(if error (error "error. disp out of range") (setq disp (1+ (- max min)))))
(let* ((aaa (let (l) (setq l (cl-adjoin min l)) (setq l (cl-adjoin max l))
(let ((i 0))
(while (< (length l) disp)
(let ((y (let ((x (ceiling (/ (float i) 2)))) (+ spot (if (oddp i) (- x) x)))))
(when (and (<= min y) (<= y max))
(setq l (cl-adjoin (let ((x (ceiling (/ (float i) 2)))) (+ spot (if (oddp i) (- x) x))) l))))
(incf i)))
(sort l (lambda (a b) (< a b)))))
(bbb (let ((p (1- min)))
(cl-loop for n in aaa collect (prog1 (list (if (= n (1+ p)) "" "... ") (format (if (= n spot) "(%d)" "%d") n)) (setq p n)))))
(ccc (cl-reduce (lambda (a b) (concat a " " b)) (mapcar (lambda (x) (concat (nth 0 x) (nth 1 x))) bbb))))
ccc))
f
(f 1 3 3 1) "(1) 2 3"
(f 1 3 3 3) "1 2 (3)"
(f 1 4 3 2) "1 (2) ... 4"
(f 1 4 3 3) "1 ... (3) 4"
(f 1 10 5 1) "(1) 2 3 4 ... 10"
(f 1 10 5 3) "1 2 (3) 4 ... 10"
(f 1 10 5 4) "1 ... 3 (4) 5 ... 10"
(f 1 10 5 10) "1 ... 7 8 9 (10)"
(f 128 256 7 192) "128 ... 190 191 (192) 193 194 ... 256"
(f 1 10 4 8) "1 ... 7 (8) ... 10"
(f 1 10 4 9) "1 ... 8 (9) 10"
(f 1 3 5 3) "1 2 (3)"
(f 1 3 5 3 :error t) "error. out of range"

775:デフォルトの名無しさん
15/09/06 15:25:31.21 XK9v3oN2.net
>>729 GNU Smalltalk
URLリンク(ideone.com)

776:デフォルトの名無しさん
15/09/06 15:53:00.71 XK9v3oN2.net
>>699 GNU Smalltalk
URLリンク(www.ic-net.or.jp) を移植。
ideone.com で N=12 まで。
URLリンク(ideone.com)

777:デフォルトの名無しさん
15/09/06 21:15:29.55 QKeqN0i2.net
>>729
URLリンク(ideone.com)
C++。ギブアップ。細かい仕様が対応できなかった。
表示回りっていつも適当だから、ここまで手の込んだのは無理やったわ。
GOTO使ってるあたりに苦悩を感じてくれ。
算数できなくなってることに絶望した。

778:デフォルトの名無しさん
15/09/06 23:58:23.31 3aEa3HTV.net
>>729 C
URLリンク(ideone.com)
原始的に配列へ詰め込んでソート、文字列の生成は断念した

779:デフォルトの名無しさん
15/09/07 03:04:02.94 QAzFwx2+.net
>>665 C
URLリンク(ideone.com)

780:デフォルトの名無しさん
15/09/07 03:04:53.70 QAzFwx2+.net
>>729 C
URLリンク(ideone.com)

781:デフォルトの名無しさん
15/09/07 03:43:16.07 hx62h88L.net
>>729 C
URLリンク(ideone.com)

782:デフォルトの名無しさん
15/09/08 00:20:53.77 qsWudAV2.net
>>729
省略の基点というのがよくわかりません

783:デフォルトの名無しさん
15/09/08 00:24:13.57 HV2JZhb0.net
>>748
SpotLightを中心点に表示を要求されるのでここを目印にDISP-2個位表示させるのが今回のお題。

784:デフォルトの名無しさん
15/09/08 05:55:05.13 byflMgx0.net
お題
ソート済み配列などに対し、falseを返すまで繰り返し適用することで
重複なく全順列を列挙できる破壊的操作を行う関数 next_permutation を
定義せよ。
文字列 "aaabc" に対する使用例(C++erはネタバレ注意):URLリンク(ideone.com)
- 標準またはそれに準ずるライブラリに同等機能がある言語の場合は、その使用例を提示するだけでよい。
 もちろん、自力での再実装にこだわってみるのもよい。
- 配列などに対し、その部分のみに適用できるようにはしなくてよい。
- 言語仕様で非破壊操作がしにくい言語の場合は、有限リストやストリーム、
 ジェネレータなどを生成する実装に代えてもよい。

785:デフォルトの名無しさん
15/09/08 07:05:29.36 iUE7XWFn.net
>>750
×非破壊操作がしにくい → ○破壊操作がしにくい

786:デフォルトの名無しさん
15/09/08 10:54:06.55 n5Qbp6yS.net
>>750 Python3
引数を破壊的変更しないジェネレータ、要素がタプルになるのでfuncで加工する
import itertools
def next_permutations(seq, func=(lambda x: x)):
    return map(func, sorted(set(itertools.permutations(seq))))
for a in next_permutations("aaabc", func=''.join):
    print(a)

787:デフォルトの名無しさん
15/09/08 12:04:00.18 N3BcRQN+.net
ボードゲーム スカイゲスト
Miracle Five World Cup 〜 スカイゲスト
ミラクルファイブ今年に続いて、Othello World Cup 2014 でもミラクルファイブが正式競技として行われることが決まったようですね。
知ってる人は知っている、でもほとんどの人は知らないと思いますが、私、このスカイゲストの世界チャンピオンなんです。
ちなみに日本大会は現在三連覇しています。
で、残念なことに、現状ではネット上でこのスカイゲストをやれる環境が存在してないので、ささやかな興味を持ったとしても、
なかなか実際にプレイするところまでは行かないんですよね。だからそりゃぁ、なかなか普及してません。
そんなわけで(?)、ちょっとこのゲームのルールを軽く説明してみようかと。
URLリンク(www.othello.org)
URLリンク(blog.goo.ne.jp)

スカイゲストAIのアルゴリズム(評価関数編)
オセロの考案者である長谷川五郎氏が考案したボードゲームに、スカイゲスト(SkyGuest、テンゲストも同じルールっぽい)というものがあるのをご存知でしょうか?
大変面白いゲームなのですが、ネット上にこれをプレイできる環境がなかったので、AIを作成しました。
今のところ公開する予定はございませんが、ある程度の強さのものが出来上がったので、アルゴリズムの方を紹介したいと思います。
URLリンク(blog.livedoor.jp)

788:デフォルトの名無しさん
15/09/08 12:19:34.11 JhgINqf8.net
>>750 GNU Smalltalk
URLリンク(ideone.com)

789:デフォルトの名無しさん
15/09/08 12:48:53.12 JhgINqf8.net
>>752
Pythonって、すごくシンプルに書けて格好いいですね。
ただ、この実装だと、多要素だけど要素のほとんどが同じで簡単に返せる場合
(たとえば "aaaaaaaaaaaaaaaaaaaaaaaaaaaaab" とか)
にもかかわらず戻ってこなくなったりしませんか?

790:デフォルトの名無しさん
15/09/08 13:03:12.99 JcPY1iwa.net
>>750
C#
URLリンク(ideone.com)

791:デフォルトの名無しさん
15/09/08 16:46:37.82 HV2JZhb0.net
げ、パーミテーション自作してる人いるの。
すさまじいな。
俺C++の組み込みよく使うけど自作はさっぱりわからんぞ。

792:デフォルトの名無しさん
15/09/08 19:32:53.81 N3BcRQN+.net
パーミテーション=順列か。
順列生成くらいは入門レベルかと。速度は別にして。
どんな経験者だよ。

793:デフォルトの名無しさん
15/09/08 19:52:51.45 HV2JZhb0.net
数学


794:ダメなんですよ。ため息出るわ。



795:デフォルトの名無しさん
15/09/08 19:59:30.98 MMxN10T7.net
俺は数学、足し算なら怖くないな。
ただし演算数、非演算数、ともに二桁以内な

796:デフォルトの名無しさん
15/09/08 20:35:18.17 WO1DF9qJ.net
C++のnext_permutation()アルゴリズムのヘッダを見て真似するのが一番簡単

797:デフォルトの名無しさん
15/09/08 20:59:28.34 MMxN10T7.net
バカにしてたけど
javaやることにした
とりあえず スッキリわかるジャバジャバのKindle版注文した
ん?スレチだな
(*´σー`)ヘヘヘ

798:デフォルトの名無しさん
15/09/09 01:01:53.28 WxXYPcUn.net
N=1 一意解=1 全解=1
N=2 一意解=0 全解=0
N=3 一意解=0 全解=0
N=4 一意解=1 全解=2
N=5 一意解=2 全解=10
N=6 一意解=1 全解=4
N=7 一意解=6 全解=40
N=8 一意解=12 全解=92
N=9 一意解=46 全解=352
N=10 一意解=92 全解=724
N=11 一意解=341 全解=2680
N=12 一意解=1787 全解=14200
N=13 一意解=9233 全解=73712
N=14 一意解=45752 全解=365596
N=15 一意解=285053 全解=2279184

799:デフォルトの名無しさん
15/09/10 00:08:40.35 kopU2pqH.net
GCJはプログラミングコンテスト本が出てるのでProject Eulerで
URLリンク(projecteuler.net)
でも"project euler solutions 99"なんかでぐぐったら駄目ですよ
まあ似たようなコードになると思うけど
2^11と3^7のような指数形式で書かれた2つの数を比較するのは難しくありません
しかし、632382^518062>519432^525806であるのを確認するのは300万桁を超える
数字を含んでいるのではるかに困難でしょう
base_exp.txt(問題文をクリックしてください)は1000行を含む22KBのテキストで、
それぞれの行に基数と指数が対になっています
どの行の数が最大になるか決定してください
注:ファイル注の最初の二行は上記の例に示されたものです

800:デフォルトの名無しさん
15/09/10 00:10:08.60 kopU2pqH.net
あ、忘れました
お題です

801:デフォルトの名無しさん
15/09/10 00:33:27.38 AxUmdUI6.net
n T U [cost]
1 1 1 (0[msec])
2 0 0 (0[msec])
3 0 0 (0[msec])
4 2 1 (0[msec])
5 10 2 (0[msec])
6 4 1 (0[msec])
7 40 6 (0[msec])
8 92 12 (0[msec])
9 352 46 (0[msec])
10 724 92 (16[msec])
11 2680 341 (0[msec])
12 14200 1787 (94[msec])
13 73712 9233 (499[msec])
14 365596 45752 (3011[msec])
15 2279184 285053 (19843[msec])
16 14772512 1846955 (140806[msec])
ネット回線からの割り込みが多かったので
コストは参考値

802:デフォルトの名無しさん
15/09/10 04:21:19.51 hMjmDO5x.net
>>763
>>766
>>1

803:デフォルトの名無しさん
15/09/10 05:17:03.70 2byHSaL/.net
>>750 Python3
関数の仕様を勘違いしていたのでやりなおし
>>755の指摘を参考に要素に重複があるとき計算を省略する
def next_permutations(iterable):
  orig = tuple(iterable)
  def recursive(seq, acc):
    if not seq:
      yield acc
    elif orig[:len(acc)] <= acc:
      for v in sorted(set(seq)):
        newseq = seq[:]
        newseq.remove(v)
        yield from recursive(newseq, acc+(v,))
  return recursive(list(iterable), ())
for a in next_permutations("aaabcaaabcaaabc"):
  print(''.join(a))

804:デフォルトの名無しさん
15/09/10 11:55:20.61 0vTqxZ6A.net
>>768
すばらしい。GNU Smalltalk に移植してみました。(文字列のみ対応の手抜きで恐縮ですが…)
URLリンク(ideone.com)

805:デフォルトの名無しさん
15/09/10 21:31:45.79 AToafzam.net
>>729 c
URLリンク(ideone.com)


806:Fcc



807:デフォルトの名無しさん
15/09/10 22:15:18.95 Q2vaRfqD.net
>>764
モロにカンニングですみませんが
URLリンク(ideone.com)

808:デフォルトの名無しさん
15/09/11 01:59:58.81 0Pjc40Dt.net
>>652 遅ればせながらPerl
use 5.016;
use List::Util 'sum';
say sum grep {$_ % 5 == 0 or $_ % 3 == 0} 1..1000;

809:デフォルトの名無しさん
15/09/11 21:51:13.27 v7E2xSv/.net
手抜きPerl
use 5.016;
sub next_permutations {
 my %h;
 sub fn {
  my ($l, $p, @r) = @_;
  defined $p ? map {[$p, @$_]} fn([], @$l, @r) : ([])
   ,
  @r ? fn([@$l, $p], @r) : ()
 }
 map {$h{$_} = 1} keys {map {join('', @$_) => 1} fn [], @_};
 keys %h
}
say for next_permutations split '', 'aaabc';

810:デフォルトの名無しさん
15/09/11 22:39:05.52 v7E2xSv/.net
use 5.016;
sub next_permutations {
 sub fn {
  my ($l, $p, @r) = @_;
  defined $p ? map {[$p, @$_]} fn([], @$l, @r) : ([])
   ,
  @r ? fn([@$l, $p], @r) : ()
 }
 keys {map {join('', @$_) => 1} fn [], @_};
}
say for next_permutations split '', 'aaabc';
これでええやん、つか破壊してないし、過剰仕様
しっか〜くw

811:デフォルトの名無しさん
15/09/12 14:21:20.66 9MDXYKkO.net
>>774
元の並びがソートされている場合、
保持されている現在の並びを破壊しながらでも
ジェネレータみたいに呼び出される度に次の順列を
重複なく返すアルゴリズムが>750のお題の肝では?

812:デフォルトの名無しさん
15/09/13 19:11:57.62 dr5xNYTR.net
>>775
お題に「生成される順列はソートせずとも辞書順に並ぶこと」って一言いれておけばよかったですね^^;

813:デフォルトの名無しさん
15/09/13 20:57:12.14 bLikZ+wL.net
>>750 OCaml
URLリンク(ideone.com)
引数はリスト限定で破壊的操作はしない、返り値で次の順列を返す

814:デフォルトの名無しさん
15/09/13 22:52:40.22 b32GJr7l.net
>>441 c
URLリンク(ideone.com)
注:肝心な部分(comb, permute)はぐぐったサイトから無断で拝借しました

815:デフォルトの名無しさん
15/09/14 07:17:09.48 aQticbJR.net
>>778
中身が見えない

816:デフォルトの名無しさん
15/09/14 20:25:46.47 Gwz4vSRg.net
>>441 c
URLリンク(ideone.com)
>>778からの変更点:
・いったん全パターンもつのをやっぱやめる
・細部のちょこちょこっとした改善

817:デフォルトの名無しさん
15/09/15 21:30:13.30 jovL9vh0.net
>>775 うっせーな、ハゲっが。
「生成される順列はソートせずとも辞書順に並ぶこと」の意味が
「出力する行がsort済みの順番に並んでいる」順列という意味ならこうか:
use feature qw{:5.16};
use Data::Dump qw(dump);
sub next_permutation {
 defined $_[1] and next_permutation(@_[1..$#_]) or
  ($_[0] lt $_[1]) and
  do {
   do {$i = $_
      if $_[0] lt $_[$_]}
        for 1..$#_;
   @_[0, $i] = @_[$i, 0];
   @_[1..$#_] = sort @_[1..$#_];
   1 }
 }
#@a = split '', 'aaabcaaabcaaabc'; # ←この入力はカラムがsort済みじゃねーしw
@a = split '', 'aaabc';
say join '', @a;
say join '', @a while next_permutation @a;
出力行ごとのカラムもソートされているという制限つきの順列生成なら
中のdoがif産業が一行になるかな。
つか、中のdo forも無名再帰で書くのがホンとは漢つーもんょ。

818:デフォルトの名無しさん
15/09/15 21:35:00.71 jovL9vh0.net
いや、ちょとまて
入力行一行のカラムがソートされてたら、
出力行のカラムもソートされているという制限をつけたら
出力順列は入力と同じたった一行しか存在しない、
ふー危うくひっかかるところだったぜ。
つーことで上の方のほかの人の回答に間違っているのない?

819:デフォルトの名無しさん
15/09/15 21:46:18.62 jovL9vh0.net
やっぱほかの人の解も合ってるかな?
よく見てないけどw
'aaabcaaabcaaabc';の入力の並びに目が惑わされたワイ
じゃーな、ハゲっが。

820:デフォルトの名無しさん
15/09/15 22:10:44.77 jovL9vh0.net
>>781 連投ごめんなさい、or式全体を()でくくらないと出力に抜けが起きるバグありあした…orz
修正版:
use feature qw{:5.16};
sub next_permutation {
 defined $_[1] and (next_permutation(@_[1..$#_]) or
  ($_[0] lt $_[1]) and
  do {
   do {$i = $_
      if $_[0] lt $_[$_]}
        for 1..$#_;
   @_[0, $i] = @_[$i, 0];
   @_[1..$#_] = sort @_[1..$#_];
   1 })
 }
#@a = split '', 'aaaaaaaaaaaaaaaabc';
@a = split '', 'aaabc';
say join '', @a;
say join '', @a while next_permutation @a;

821:デフォルトの名無しさん
15/09/16 00:38:04.82 zgtxEZCv.net
>>784
左側の新しい項の入れ替えに移行し右側の並びを一式リセットするためのsortは
reversieでよいはず。これにより並べ替えのオーダーをNlogNからNに低減できる。
また項を入れかえる対象の要素を検索する繰り返しは、その項より大きくかつ最も小さい
値の要素を探すので、平均行程1/2で打ちって検索の計算量も半減することができる。
それから、もう少しコンパクトかつ可読性ある書き方ができるはず。

822:デフォルトの名無しさん
15/09/16 00:59:37.85 NuZWJDts.net
>>16 c
URLリンク(ideone.com)
カウント版と算出版と両方
カウント版で出した値じっくりながめると
9, 99, 999…っていう値の気配がしたので
それ中心に押したり引いたりしながら算出
なお、理屈はよくわかっていないもよう

823:デフォルトの名無しさん
15/09/16 01:04:42.91 zgtxEZCv.net
use feature qw{:5.16};
sub next_permutation {
 defined $_[1] and (next_permutation(@_[1..$#_]) or
  ($_[0] lt $_[1]) and
  do {
   for (1..$#_)
    {$_[0] lt $_[$_] ? $i = $_ : last}
   @_[0, $i] = @_[$i, 0];
   @_[1..$#_] = reverse @_[1..$#_];
   1 })
 }
#@a = split '', 'aaabc'; # 'aaaaaaaaaaaaaaaabc';
@a = split '', '112334556';
say join '', @a;
say join '', @a while next_permutation @a;
こんな感じな。sortをreverseにしたとき、ぐっと速くなった。


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

627日前に更新/308 KB
担当:undef