プログラミングのお題 ..
[2ch|▼Menu]
664:デフォルトの名無しさん
15/08/26 21:24:41.10 yHgKqfXq.net
こちらもProject Eulerより
最も回答数が多い問題(簡単だからだろうね)
URLリンク(projecteuler.net)
日本語にするとかなり意訳だけど
10未満の自然数で3と5による素数及び合成数を列挙すると3,5,6,9であり、その和は23である。
1000未満の3と5による素数及び合成数の全ての和を求めよ。
C#でLINQを使って書くと
var res = Enumerable.Range(1, 999).Where(x => (x % 3 == 0) || (x % 5 == 0)).Select(x => x).Sum(x => x);
Console.WriteLine("result = " + res);
これだけでした

665:デフォルトの名無しさん
15/08/26 21:25:32.41 yHgKqfXq.net
あ、結果は
result = 233168
です

666:デフォルトの名無しさん
15/08/26 21:33:56.24 yHgKqfXq.net
もうしわけない、この訳は問題を「3及び5だけで作った合成数」と読み違えていた時のものです
実は「3または5の倍数」だったんですね
合成数の時は3と5だけで作るために配列を3^6=729だから6個ほど用意して
その中に1と3と5を入れていく組み合わせが必要かなーとか余計な事を考えてました

667:デフォルトの名無しさん
15/08/26 23:14:27.57 nSfPbyXQ.net
前に見た覚えがあるな。

668:デフォルトの名無しさん
15/08/26 23:36:55.11 pB3YAw41.net
>>637 Squeak/Pharo Smalltalk
((1 to: 999) select: [:x | (x isDivisibleBy: 3) or: [x isDivisibleBy: 5]]) sum "=> 233168 "

669:デフォルトの名無しさん
15/08/26 23:41:13.56 nSfPbyXQ.net
和じゃなくて積じゃね?

670:デフォルトの名無しさん
15/08/26 23:43:17.82 nSfPbyXQ.net
違うわ、マルチプルのサムだった。ごめん。勘違い。

671:デフォルトの名無しさん
15/08/27 06:04:32.27 dP3c3bmU.net
>>637
@Mathematica
URLリンク(ideone.com)

672:デフォルトの名無しさん
15/08/27 08:41:53.66 oNXmE8hM.net
>>637 FreeBasic
Dim i As Integer:Dim j As Integer:Dim m As Integer:Dim n As Integer:Dim sum As Integer:Dim limit As Integer
limit =1000:sum =0:n=1 :i = 1
Do
n= 3*i
If (n>= limit) Then Exit Do End If
sum = sum +n
i = i+1
Loop
i = 1
Do
m= 5*i
If (m>= limit) Then Exit Do End If
sum = sum + m
i =i+1
Loop
i=1
Do
j= 15*i
If (j>=limit) Then Exit Do End If
sum = sum -15*i
i= i+1
Loop
Print "sum = "; sum
sleep
ans=233168

673:デフォルトの名無しさん
15/08/27 09:51:58.46 9KnKzHgu.net
FreeBasicって何かあったのか。マイナーすぎる言語が使われてるが。

674:デフォルトの名無しさん
15/08/27 10:01:32.13 oNXmE8hM.net
>>646
簡単に使えるという以外の他意はありません。
一応、この言語以外に、Pascal、Fortran、C++なども使えますが、
Editorでプログラムを書き、そのままコンパイルして実行できる手軽さ
でFree Basicを使っているまでです。

675:デフォルトの名無しさん
15/08/27 12:20:55.88 oNXmE8hM.net
>>637
C++
URLリンク(ideone.com)

676:デフォルトの名無しさん
15/08/28 05:48:44.95 bUorkSPW.net
>>637
またしてもC++
URLリンク(ideone.com)

677:デフォルトの名無しさん
15/08/28 08:59:37.83 vI1BOxp3.net
>>637 Python
ただ単に>>637のLINQをリスト内包表記に置き換えてみただけですが・・・
print(sum([i for i in range(1000) if i % 3 == 0 or i % 5 == 0]))
◎出力
233168

678:デフォルトの名無しさん
15/08/28 12:16:44.61 bu906jAF.net
>>637 J
+/ >: I. +./ 0 = 3 5 |/ }. i. 1000
233168

679:デフォルトの名無しさん
15/08/28 14:55:42.99 B9AXnjt8.net
>>637 F#


680: printfn "%d"<| List.sum [for x in 1..999 do if x % 3 = 0 || x % 5 = 0 then yield x] // 233168



681:649
15/08/28 18:49:04.77 vI1BOxp3.net
>>637
>>650修正します、結果は同じですが・・・
print(sum([i for i in range(1, 1000) if i % 3 == 0 or i % 5 == 0]))

682:デフォルトの名無しさん
15/08/28 21:03:06.86 65eyPlZo.net
お題: hackerrankより
URLリンク(www.hackerrank.com)
二つの文字列A、Bが与えられている時、AとBに出現する部分文字列を探せ
最初に入力される整数Tは一致する部分文字列数を表している
入力
2
hello
world
hi
world
出力
YES
NO
'hello'と'world'は'l'と'o'の2ヶ所が一致しているためにYESと出力され、'hi'と'world'は
一つも一致箇所がないため(2と入力しているので1個だけ一致箇所があったとしても)
NOと出力される

683:デフォルトの名無しさん
15/08/29 05:43:02.09 yMiYELYH.net
>>654
URLリンク(ideone.com)
C++。いっちばーん。今日は調子がいいから短いコードが書けた。

684:デフォルトの名無しさん
15/08/29 06:08:55.23 wfPnBoUA.net
>>654
@Mathematica
URLリンク(ideone.com)

685:デフォルトの名無しさん
15/08/29 10:52:38.92 WkkW5Zl4.net
(require 'cl-lib)
cl-lib
(defun f (n fn)
(cl-loop for i from 1 below n if (funcall fn i) sum i))
f
(f 10 (lambda (n) (or (= (% n 3) 0) (= (% n 5) 0))))
23
(f 1000 (lambda (n) (or (= (% n 3) 0) (= (% n 5) 0))))
233168

686:デフォルトの名無しさん
15/08/29 11:46:09.20 NDR2mEwv.net
>>654 Free Basic
Dim a As String
Dim b As String
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim m As Integer
Input m:Input a:Input b
n= 0
For i = 1 To Len(a)
For j= 1 To Len(b)
If Mid(a,i,1)=Mid(b,j,1) And Mid(a,i,1)<>" " Then
Mid(a,i,1)=" "
Mid(b,j,1)=" "
n = n + 1
EndIf
Next
Next
If n=m Then Print "YES" Else Print "NO" End If
一般化してみました。nと文字列a,bを入力します。
? 2
? hello
? world
YES
2
hi
world
NO

687:デフォルトの名無しさん
15/08/29 12:04:46.74 WkkW5Zl4.net
>>654 Emacs Lisp
(require 'cl-lib)
cl-lib
(defun make-substring-set (str)
(let (l)
(cl-loop for s from 0 to (length str) do
(cl-loop for e from (1+ s) to (length str) do (push (substring str s e) l)))
(cl-remove-duplicates l :test #'string=)))
make-substring-set
(defun f (T A B)
(let ((As (make-substring-set A))
(Bs (make-substring-set B)))
(if (= (length (cl-mapcan #'(lambda (s) (when (cl-find s As :test #'string=) (list s))) Bs)) T)
'YES 'NO)))
f
(let ((T 2) (A "hello") (B "world"))
(f T A B))
YES
(let ((T 2) (A "hi") (B "world"))
(f T A B))
NO
(let ((T 1) (A "o") (B "oxo"))
(f T A B))
YES

688:デフォルトの名無しさん
15/08/29 13:30:27.00 xBONT5Ep.net
>>654 Squeak/Pharo Smalltalk
| fn |
fn := [:m :pairs |
 | subsOf |
 subsOf := [:str | (1 to: str size) inject: Set new into: [:set :len |
  str combinations: len atATimeDo: [:subStr | set add: subStr copy]. set]].
 pairs pairsCollect: [:s1 :s2 | ((subsOf value: s1) intersection: (subsOf value: s2)) size = m]
].
fn value: 2 value: #('hello' 'world' 'hi' 'world') "=> #(true false) "

689:デフォルトの名無しさん
15/08/29 18:11:32.02 LqdW8bvi.net
>>654 J
f =: 4 : 0
;('NO';'YES'){~ x <: (([:+/+./) <. [:+/+./"1) =/&>/y
)
2 f 'hello';'world'
YES
2 f 'hi';'world'
NO
2 f 'aaa';'aaaa'
YES
2 f 'world';'hello'
YES

690:デフォルトの名無しさん
15/08/30 01:17:36.39 /y7LwmGS.net
>>661
2 f 'aaa', 'aaaa'
の場合、substringは
aaa の場合
a
aa
aaa
となり、aaaaの場合
a
aa
aaa
aaaa
となります。
そうすると、この二つのstringで一致するものは、
a
aa
aaa
と3個になり、2個ではありませんから、YESではなくて、NOと出力すべ


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のテキストで、
それぞれの行に基数と指数が対になっています
どの行の数が最大になるか決定してください
注:ファイル注の最初の二行は上記の例に示されたものです


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

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