プログラミングのお題スレ Part5
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/09/21(日) 00:34:47.71ID:WCtTxfaP前スレ
プログラミングのお題スレ Part4
http://peace.2ch.net/test/read.cgi/tech/1402622093/
プログラミングのお題スレ
http://toro.2ch.net/test/read.cgi/tech/1357191974/
出されたお題をコーディングして罵られるスレ
http://toro.2ch.net/test/read.cgi/tech/1354393458/
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
【ソースコードが長くなったら】
http://codepad.org/
http://ideone.com/
宿題は宿題スレがあるのでそちらへ。
0002デフォルトの名無しさん
2014/09/21(日) 00:50:42.16ID:bPxcB0NI0003デフォルトの名無しさん
2014/09/21(日) 01:13:44.84ID:WCtTxfaP0004デフォルトの名無しさん
2014/09/21(日) 01:15:01.08ID:l8xEPcUn自演乙乙
0005デフォルトの名無しさん
2014/09/21(日) 01:17:47.11ID:sIPFIkfg0006デフォルトの名無しさん
2014/09/21(日) 02:43:21.38ID:qEI3EgXS0007デフォルトの名無しさん
2014/09/21(日) 03:05:06.13ID:94PpjV7B関数goroawaseを定義してください。
(defun goroawase (n)
(goroawase-impl n))
goroawase
(goroawase 18782)
"いやなやつ"
(goroawase (* 18782 2))
"みなごろし"
(goroawase 4649)
"よろしく"
0008デフォルトの名無しさん
2014/09/21(日) 04:22:25.56ID:bPxcB0NIttp://ideone.com/mFbSKT
ほぼC。常識を実装することができなかった。
0009デフォルトの名無しさん
2014/09/21(日) 08:51:48.33ID:aP8Aq0OA0010デフォルトの名無しさん
2014/09/21(日) 10:52:20.21ID:GSgALpqv十分に曖昧なところがあって、久々に良い問題だと思います。
00117
2014/09/21(日) 11:08:48.77ID:94PpjV7Bたとえば、SKK 辞書のSKK-JISYO.Lを使ってみてください。
http://openlab.ring.gr.jp/skk/dic-ja.html
0012デフォルトの名無しさん
2014/09/21(日) 12:36:12.60ID:tmQCWq8V左下の角をA、左上から{N}cm右に移動した位置をB、右下の角をCのとき
直線ANと直線NBの長さを求めよ
0013デフォルトの名無しさん
2014/09/21(日) 12:39:48.50ID:tmQCWq8V但し以下の条件がある!!
4で割り切れる場合はFizzを出力しろ
6で割り切れる場合はBuzzを出力しろ
4と6で割り切れる場合はFizzBuzzを出力しろ
5で割り切れる場合は何も出力するな
それ以外は数字を出力しろ
出力ごとに改行も入れろ
001413
2014/09/21(日) 12:40:50.08ID:tmQCWq8V0015デフォルトの名無しさん
2014/09/21(日) 13:05:51.37ID:94PpjV7B(defun f (N)
(let* ((AD 100.0)
(CE 100.0)
(DE 100.0)
(DB (abs N))
(BE (abs (- DE N)))
(AB (sqrt (+ (* AD AD) (* DB DB))))
(BC (sqrt (+ (* CE CE) (* BE BE)))))
(list AB BC)))
f
(f 0.0)
(100.0 141.4213562373095)
(f 100.0)
(141.4213562373095 100.0)
(f 200.0)
(223.60679774997897 141.4213562373095)
(f -100.0)
(141.4213562373095 223.60679774997897)
0016デフォルトの名無しさん
2014/09/21(日) 13:35:26.24ID:94PpjV7B(require 'cl-lib)
cl-lib
(let* ((s0 (cl-loop for i from 1 to 100 collect i))
(s1 (cl-remove-if (lambda (x) (and (numberp x) (= (% x 5) 0))) s0))
(s2 (mapcar (lambda (x) (if (and (numberp x) (= (% x 4) 0) (= (% x 6) 0)) 'FizzBuzz x)) s1))
(s3 (mapcar (lambda (x) (if (and (numberp x) (= (% x 6) 0)) 'Buzz x)) s2))
(s4 (mapcar (lambda (x) (if (and (numberp x) (= (% x 4) 0)) 'Fizz x)) s3)))
(mapcar (lambda (x) (prog1 (princ x) (terpri))) s4))
0017デフォルトの名無しさん
2014/09/21(日) 15:14:33.73ID:xHxnVT5jdef f12(N):
A,B,C = complex(0,0),complex(N,100),complex(100,0)
print abs(A-B),abs(B-C)
for N in [0,100,200,-100]: f12(N)
>>13 Python
def f13():
for i in range(1,100+1):
if i % 5 == 0: pass
elif i % 4 == i % 6 == 0: print "FIzzBuzz"
elif i % 6 == 0: print "Buzz"
elif i % 4 == 0: print "FIzz"
else: print i
f13()
>>14
優先順位が文脈として矛盾・混乱しているようだ、優先度の高い順に
5で割り切れる場合は何も出力するな
出力ごとに改行も入れろ
4と6で割り切れる場合はFizzBuzzを出力しろ
4で割り切れる場合はFizzを出力しろ
6で割り切れる場合はBuzzを出力しろ
それ以外は数字を出力しろ
ということか?http://codepad.org/9ekLKsYt
0019デフォルトの名無しさん
2014/09/21(日) 15:33:40.43ID:xHxnVT5jimport re,unicodedata
from fractions import Fraction
def rpn(L,R):
ope = [(i,x) for (i,x) in enumerate(L) if not isinstance(x,list)]
if not ope: return reduce(list.__add__, L)
a,b = zip(*ope)
for pattern in R:
m = re.search(r"["+pattern+"]", "".join(b))
if m: break
i = a[m.start()]
return rpn(L[:i-1] + [L[i-1] + L[i+1] + [m.group(0)]] + L[i+2:],R)
def f(q,R=[r"\/",r"\*\%",r"\+\-"]):
for zen,han in zip(u"×÷",u"*%"): q = q.replace(zen,han)
q = unicodedata.normalize('NFKC', q).encode("utf-8")
L,i = [],0
for m in re.finditer(r"["+r"".join(R)+"]", q):
if i < m.start(): L.append([q[i:m.start()]])
L,i = L+[m.group(0)],m.end()
L = rpn(L+[[q[i:]]],R)
FN = dict(zip("*/%+-", ("__mul__","__div__","__div__","__add__","__sub__")))
while len(L) >= 3:
for (i,x) in enumerate(L):
if not isinstance(x,str) or x not in FN.keys(): continue
val = eval("Fraction."+FN[x])(Fraction(L[i-2]), Fraction(L[i-1]))
L = L[:i-2] + [val] + L[i+1:]
break
D = dict(zip("0123456789/", u"0123456789/"))
return "".join([D[c] for c in str(L[0])])
for q in [u"9−3÷1/3+1",u"1/2÷3/4÷5/6×7/8"]:
print q, u"=", f(q) # = 1, = 7/10
0020デフォルトの名無しさん
2014/09/21(日) 15:53:30.23ID:a1i1nJCB>>12
main = do
print $ p12 0
print $ p12 50
print $ p12 100
print $ p12 200
p12 n = (sqrt $ 100 ^ 2 + n ^ 2, sqrt $ 100 ^ 2 + (100 - n) ^ 2)
>>13
import Control.Monad
main = putStr p13
p13 = concat $ map p13' [1..100]
p13' i
| i `mod` 5 == 0 = ""
| i `mod` 24 == 0 = "Fizz\n"
| i `mod` 6 == 0 = "FizzBuzz\n"
| i `mod` 4 == 0 = "Buzz\n"
| otherwise = shows i "\n"
0021デフォルトの名無しさん
2014/09/21(日) 15:55:56.73ID:a1i1nJCBHaskell
>>12
main = do
print $ p12 0
print $ p12 50
print $ p12 100
print $ p12 200
p12 n = (sqrt $ 100 ^ 2 + n ^ 2, sqrt $ 100 ^ 2 + (100 - n) ^ 2)
>>13
import Control.Monad
main = putStr p13
p13 = concat $ map p13' [1..100]
p13' i
| i `mod` 5 == 0 = ""
| i `mod` 24 == 0 = "Fizz\n"
| i `mod` 6 == 0 = "FizzBuzz\n"
| i `mod` 4 == 0 = "Buzz\n"
| otherwise = shows i "\n"
0022デフォルトの名無しさん
2014/09/21(日) 16:07:39.14ID:lheHZeoo語呂合わせは大変そうなので形で
f:=method(n, n asString translate("0123456789","OlZMYSbTBq"))
Io> f(18782)
==> lBTBZ
Io> f(20140921)
==> ZOlYOqZl
0023デフォルトの名無しさん
2014/09/21(日) 18:56:27.05ID:lheHZeoofor i=1:100
if i%5!=0
println([i,"Fizz","Buzz","FizzBuzz"][(i%4==0)+(i%6==0)*2+1])
end
end
0024デフォルトの名無しさん
2014/09/21(日) 19:32:05.93ID:XXBNRbyThttp://ideone.com/c0uVt5
>>13 Perl
http://ideone.com/BPABg3
0025デフォルトの名無しさん
2014/09/21(日) 20:22:35.10ID:Pi8eAmCahttp://fox.2ch.net/test/read.cgi/poverty/1411297602/
0026デフォルトの名無しさん
2014/09/22(月) 00:53:13.48ID:K4AAoL/i( ・ω・) < ステンバーイ
〇={=}〇 ∧,, ∧
|::::::::::\ (*‘ω‘ *)
、、、し 、、、(((.@)vv、vvv 、、(、v、)っv、、
0027デフォルトの名無しさん
2014/09/22(月) 13:18:29.60ID:Sj64dDvb0028デフォルトの名無しさん
2014/09/22(月) 13:23:18.58ID:nxPUfGJMh=縦
左上の角から右下に進む
地面に着いたら右上に進む
これの繰り返す
w, h = 10, 3
!---!---!-
-!-!-!-!-!
--!---!---
w, h = 11, 5
!-------!--
-!-----!-!-
--!---!---!
---!-!-----
----!------
0029デフォルトの名無しさん
2014/09/22(月) 13:53:50.32ID:V8hRXHRh書いたけどスパゲティ・・
http://ideone.com/uESKjY
0030デフォルトの名無しさん
2014/09/22(月) 15:02:58.66ID:+X2nragsttp://ideone.com/aNkcBn
ほぼC。余弦定理使ってみた。数学わからないのであってるかわからない。
数学怖い。Orz
0031デフォルトの名無しさん
2014/09/22(月) 15:05:29.10ID:zUzK8u9Gチンチンのそり具合が男の甲斐性を表すていりか
0032デフォルトの名無しさん
2014/09/22(月) 15:23:00.37ID:+X2nragsttp://ideone.com/Pcmsgn
ほぼC。適当に書いたのであってるかわからん。
0033デフォルトの名無しさん
2014/09/22(月) 15:32:22.26ID:+X2nragsttp://ideone.com/fKXJLL
ほぼC。あってるのかこれ。
ちなみに重複を含んでいる。
0034デフォルトの名無しさん
2014/09/22(月) 15:46:01.11ID:+X2nrags0035デフォルトの名無しさん
2014/09/22(月) 15:49:36.84ID:+X2nrags曲がってると適応できないんじゃないか?
よく知らんけど。
弧の長さってなんか求め方あった気がする。
0036デフォルトの名無しさん
2014/09/22(月) 16:20:35.26ID:+X2nragsttp://ideone.com/ikLOBL
ほぼC。字幅をそろえるためにエクスクラメーションマークは使わなかった。
0037デフォルトの名無しさん
2014/09/22(月) 16:22:47.32ID:+X2nrags0038デフォルトの名無しさん
2014/09/22(月) 18:12:27.12ID:X31W0Us4def f(w,h):
d ={True:"!",False:"-"}
n = (h-1)*2
print "w,h={},{}".format(w,h)
print "\n".join(["".join([d[i==j or i+j==n] for i in range(n)]*int((w+n-1)/n))[:w] for j in range(h)])
f(10,3)
f(11,5)
0039デフォルトの名無しさん
2014/09/22(月) 18:24:51.72ID:Sj64dDvbf:=method(w,h,
for(i,0,h-1,
for(j,0,w-1,
if((j+i)%(h*2-2)==0 or (j-i)%(h*2-2)==0,"!","-")print
)
writeln
)
)
Io> f(10,3)
!---!---!-
-!-!-!-!-!
--!---!---
==> nil
Io> f(11,5)
!-------!--
-!-----!-!-
--!---!---!
---!-!-----
----!------
==> nil
0040デフォルトの名無しさん
2014/09/22(月) 19:19:42.10ID:+X2nragsttp://ideone.com/aXUKqy
ほぼC。逐次実行版。
>>39と同じような考え方だと思うけど、俺、遅かったな。
0041デフォルトの名無しさん
2014/09/22(月) 19:57:43.67ID:cXCm9hNaC
ほぼ同じ
http://ideone.com/PHJo1l
0042デフォルトの名無しさん
2014/09/22(月) 20:22:16.98ID:+X2nragsうほー。ギブギブ。
0043デフォルトの名無しさん
2014/09/22(月) 22:00:20.04ID:X31W0Us4def f(n):
return [(x,y,n/(x*y))
for x in range(1,n+1) if n % x == 0
for y in range(x,n/x+1) if n % (x*y) == 0
if n/(x*y) >= y]
for i in [1,10,11,12,16,24]:
L = f(i)
print "n={} => {} {}".format(i, len(L), L)
---
n=1 => 1 [(1, 1, 1)]
n=10 => 2 [(1, 1, 10), (1, 2, 5)]
n=11 => 1 [(1, 1, 11)]
n=12 => 4 [(1, 1, 12), (1, 2, 6), (1, 3, 4), (2, 2, 3)]
n=16 => 4 [(1, 1, 16), (1, 2, 8), (1, 4, 4), (2, 2, 4)]
n=24 => 6 [(1, 1, 24), (1, 2, 12), (1, 3, 8), (1, 4, 6), (2, 2, 6), (2, 3, 4)]
0044デフォルトの名無しさん
2014/09/22(月) 22:39:22.69ID:jTYzX03g左上の座標を(x, y) = (0, 0)、右下の座標を(w - 1, h - 1)とする。
右端(x = w - 1)に到達した時のy座標を求めよ。
制約条件:
1 <= w <= 1000000000000
1 <= h <= 1000000000000
0045デフォルトの名無しさん
2014/09/22(月) 23:03:30.30ID:ovWIGVx9| zigzag |
zigzag := [:w :h |
| lines |
lines := (Array new: h withAll: (String new: w withAll: $-)) deepCopy.
lines := lines, lines reversed allButFirst allButLast.
(1 to: w) do: [:pos | (lines atWrap: pos) at: pos put: $!].
(lines first: h) asStringWithCr
].
zigzag value: 10 value: 3.
"=>
!---!---!-
-!-!-!-!-!
--!---!--- "
zigzag value: 11 value: 5.
"=>
!-------!--
-!-----!-!-
--!---!---!
---!-!-----
----!------ "
0046デフォルトの名無しさん
2014/09/22(月) 23:31:33.29ID:cXCm9hNa--h - abs(--w % (h * 2 + !h) - h)
0047デフォルトの名無しさん
2014/09/23(火) 01:19:32.94ID:o0+soP+b直線ANってなんだ
Nは点じゃなくて長さだろ?
0048デフォルトの名無しさん
2014/09/23(火) 08:03:55.12ID:k6Irxc0M| fn |
fn := [:N |
| A B C |
A := 0@0.
B := N@100.
C := 100@0.
{A dist: B. B dist: C}
].
fn value: 0. "=> #(100 141.4213562373095) "
fn value: 100. "=> #(141.4213562373095 100) "
fn value: 200. "=> #(223.606797749979 141.4213562373095) "
fn value: -100. "=> #(141.4213562373095 223.606797749979) "
0049デフォルトの名無しさん
2014/09/23(火) 11:24:42.11ID:bJmToiQEhttp://ideone.com/yQxZi5
>>28 Perl
http://ideone.com/K6lpYY
0050デフォルトの名無しさん
2014/09/23(火) 12:05:24.27ID:a/17ohbB100回、値にカウントしながら繰り返す
もし値=5なら
「」を表示する
他でもし(値%4)=0かつ(値%6)=0なら
「FizzBuzz」を表示
他でもし(値%6)=0なら
「Buzz」を表示
他でもし(値%4)=0なら
「Fizz」を表示
でないなら
「[値]」を表示
もし終わり
繰り返し終わり
0051デフォルトの名無しさん
2014/09/23(火) 12:08:19.82ID:Fyh7HsMD単独でやっちゃうのかね
0052デフォルトの名無しさん
2014/09/23(火) 12:31:10.28ID:m0gPgF5T0053デフォルトの名無しさん
2014/09/23(火) 13:10:30.71ID:7RbTTjAd・読みやすい
・変化球に対応しやすい
からかな
005428==29
2014/09/23(火) 19:50:30.99ID:P6g3rNF/Xを描く模様を出力
※配列に格納して出力するの禁止
w, h = 3, 3
!-!
-!-
!-!
w, h = 7, 3
!-!-!-
-!-!-!
!-!-!-
!---!---!-
-!-!-!-!-!
--!---!---
-!-!-!-!-!
!---!---!-
0055デフォルトの名無しさん
2014/09/23(火) 20:07:55.72ID:rSu8dkGL※配列に格納して出力するの禁止
なん・・・だと・・・。
0056デフォルトの名無しさん
2014/09/23(火) 20:10:11.14ID:P6g3rNF/!-!-!-
-!-!-!
!-!-!-
0057デフォルトの名無しさん
2014/09/23(火) 20:10:46.86ID:P6g3rNF/!---!---!-
-!-!-!-!-!
--!---!---
-!-!-!-!-!
!---!---!-
0058デフォルトの名無しさん
2014/09/23(火) 20:15:09.55ID:rSu8dkGLところで、Hは奇数だけ?
0059デフォルトの名無しさん
2014/09/23(火) 21:39:57.13ID:rSu8dkGLttp://ideone.com/pLj5TB
ほぼC。意外と手こずったなぁ。
0060デフォルトの名無しさん
2014/09/23(火) 22:05:15.22ID:FqVDKKGyf:=method(w,h,
if(w<2 or h<2,return)
a:=h-1
for(i,0,a,
for(j,0,b,
if(j%a==i%a or j%a==a-i%a,"!","-")print
)
writeln
)
)
Io> f(16,6)
!----!----!----!
-!--!-!--!-!--!-
--!!---!!---!!--
--!!---!!---!!--
-!--!-!--!-!--!-
!----!----!----!
0061デフォルトの名無しさん
2014/09/23(火) 22:16:23.04ID:FqVDKKGy間違えました
6行目のbはw-1です
0062デフォルトの名無しさん
2014/09/23(火) 22:19:10.50ID:k6Irxc0MTranscript open.
(1 to: 100) do: [:n |
true caseOf: {
[(n isDivisibleBy: 4) and: [n isDivisibleBy: 6]]
-> [Transcript showln: 'FizzBuzz'].
[n isDivisibleBy: 4] -> [Transcript showln: 'Fizz'].
[n isDivisibleBy: 6] -> [Transcript showln: 'Buzz'].
[n isDivisibleBy: 5] -> ["do nothing"].
} otherwise: [Transcript showln: n]
]
0063デフォルトの名無しさん
2014/09/23(火) 22:43:53.81ID:7RbTTjAddef f(w,h):
print "w, h = {}, {}".format(w, h)
for y in range(h):
for x in range(w):
# A if C else B == C ? A : B
print "-" if ((x+y)%(h-1))*((x-y)%(h-1)) else "!",
f(11,5)
f(16,6)
0064デフォルトの名無しさん
2014/09/24(水) 01:22:30.87ID:9bMladVhimport Control.Monad
main = p54 3 3 >> putChar '\n' >> p54 6 3 >> putChar '\n' >> p54 10 5
p54 w h = forM [0..h-1] $ (>> putChar '\n') . forM [0..w] . p54' (h - 1)
p54' h y x = putChar $ if x `mod` h == y || x `mod` h == h - y then '!' else '-'
0065デフォルトの名無しさん
2014/09/24(水) 05:40:11.99ID:7S8qGuxjこれをすべて大きさの異なる正方形に分割した。各正方形の辺長は
26,24,60,2,22,28,8,14,17,13,6,7,23,50,4,16,21,12,27,18,3,15
である。このデータは各正方形の左下の頂点をXを第1キー、
Yを弟2キーとした昇順の並び順になっている。
各正方形の左下の頂点の座標を求める。
0066デフォルトの名無しさん
2014/09/24(水) 06:47:55.02ID:KBFgIokmhttp://ideone.com/e05JDP
0067デフォルトの名無しさん
2014/09/24(水) 08:45:28.67ID:qN3itg9ettp://ideone.com/qXck8R
ほぼC。問題が割と素直でよかった。
キリシマ問題みたいな検索が無かったので何とかなった。
最初問題よく読んでなくて力ずくで解こうとしたのはないしょだ。
0068デフォルトの名無しさん
2014/09/24(水) 11:19:48.91ID:E6n9D2xU| xigxag |
xigxag := [:w :h |
0 to: h-1 do: [:y |
0 to: w-1 do: [:x |
Transcript nextPut: ('!-' at: ((x+y \\ (h-1)) * (x-y \\ (h-1))) sign + 1)
]. Transcript cr.
]. Transcript cr; endEntry
].
Transcript open.
xigxag value: 11 value: 5.
xigxag value: 16 value: 6.
0069デフォルトの名無しさん
2014/09/24(水) 22:35:39.85ID:hdgcnesQimport math
q = [26,24,60,2,22,28,8,14,17,13,6,7,23,50,4,16,21,12,27,18,3,15]
L = int(math.sqrt(sum(a*a for a in q)))
ans = []
area = [[None for x in range(L)] for x in range(L)]
for x in range(L):
for y in range(L):
if len(ans) >= len(q): break
if not area[y][x]:
h = q[len(ans)]
for dx in range(h):
for dy in range(h):
area[y+dy][x+dx] = chr(ord('A')+len(ans))
ans.append((x,y))
print ans
#for a in reversed(area): print "".join(a)
---
[(0, 0), (0, 26), (0, 50), (24, 26), (24, 28), (26, 0), (46, 28), (46, 36), (54, 0), (54, 17), (54, 30), (60, 30), (60, 37), (60, 60), (67, 17), (67, 21), (71, 0), (83, 21), (83, 33), (92, 0), (92, 18), (95, 18)]
0070デフォルトの名無しさん
2014/09/25(木) 12:22:22.02ID:oTmNFJvj| ws L border |
ws := #(26 24 60 2 22 28 8 14 17 13 6 7 23 50 4 16 21 12 27 18 3 15).
L := (ws * ws) sum sqrt.
border := Array new: L withAll: 0.
^ws collect: [:w |
| y x |
y := border indexOf: (x := border min).
y to: y+w-1 do: [:idx | border at: idx incrementBy: w].
x@(y-1)
]
"=> {0@0 . 0@26 . 0@50 . 24@26 . 24@28 . 26@0 . 46@28 . 46@36 . 54@0 . 54@17 . 54@30 . 60@30 .
60@37 . 60@60 . 67@17 . 67@21 . 71@0 . 83@21 . 83@33 . 92@0 . 92@18 . 95@18} "
0071デフォルトの名無しさん
2014/09/26(金) 06:06:07.66ID:h0+5zF68( ・ω・) < ステンバーイ
〇={=}〇 ∧,, ∧
|::::::::::\ (*‘ω‘ *)
、、、し 、、、(((.@)vv、vvv 、、(、v、)っv、、
0072デフォルトの名無しさん
2014/09/26(金) 22:32:07.09ID:OuqeUKn+f=:3 :0
L=.%:+/y^2
w=.0 0,(0,L),(L,L),:L,0
r=.i.0 0
for_i. y do.
r=.r,{.w
w=.w,({.w)(+"1)0 0,(0,i),(i,i),:i,0
w=./:~w-.(-.~:w)#w
end.
y,.r
)
f 26 24 60 2 22 28 8 14 17 13 6 7 23 50 4 16 21 12 27 18 3 15
26 0 0
24 0 26
60 0 50
(略)
18 92 0
3 92 18
15 95 18
0073デフォルトの名無しさん
2014/09/27(土) 05:48:55.84ID:vG38XDPkf:=method(A,
L:=A map(**2)sum sqrt
w:=list(list(0,0),list(0,L),list(L,0),list(L,L))
r:=list
A foreach(i,
p:=w min
px:=p at(0)
py:=p at(1)
r push(list(p))
list(p,list(px,py+i),list(px+i,py),list(px+i,py+i))foreach(j,
if(w contains(j),w remove(j),w push(j))
)
)
r
)
0074デフォルトの名無しさん
2014/09/27(土) 09:57:43.95ID:KE8XqyCzhttp://monobook.org/wiki/SL_Sharp
0075デフォルトの名無しさん
2014/09/27(土) 18:42:16.51ID:6iG2wykOmain = print $ p65 [26,24,60,2,22,28,8,14,17,13,6,7,23,50,4,16,21,12,27,18,3,15]
p65 edges = map (\(x, y, _) -> (x, y)) . reverse $ foldl f [] edges
where
l = floor . sqrt . fromIntegral . sum $ map (^2) edges
f ps e = (head [(x, y, e) | x <- [0..l-1], y <- [0..l-1], not $ touch x y ps]):ps
touch x y = any (\(sx, sy, ss) -> sx <= x && x < sx + ss && sy <= y && y < sy + ss)
0076デフォルトの名無しさん
2014/09/27(土) 18:50:19.14ID:Yl+ojJfz0077デフォルトの名無しさん
2014/09/27(土) 18:55:26.60ID:6iG2wykOmain = print $ last [0..]
0078山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/27(土) 19:02:34.88ID:Yl+ojJfzその数字を当てなさい
その数字が不正解の時は、正解の数字より高いか低いかは教えてもらえます
最短で正解の数字を当てなさい
0079デフォルトの名無しさん
2014/09/27(土) 19:39:09.20ID:abKsREh3大小関係についてウソをつくそうです
0080デフォルトの名無しさん
2014/09/27(土) 19:50:30.58ID:2j9vH2tZ0081デフォルトの名無しさん
2014/09/27(土) 20:04:30.56ID:LiPjrIzDr :- r.
0082デフォルトの名無しさん
2014/09/27(土) 20:12:21.42ID:DXaZxPH6for (;;);
0083デフォルトの名無しさん
2014/09/27(土) 20:29:46.61ID:Chmua2a8print '→生→死' while 1;
0084デフォルトの名無しさん
2014/09/27(土) 20:33:03.81ID:vG38XDPkJ
,^:(_)1
Io
loop(8)
Maxima
do 8;
0085デフォルトの名無しさん
2014/09/27(土) 20:34:23.55ID:Chmua2a8100万回やっても無理な場合がある。正解がπとかだったらどうするよ?
0086デフォルトの名無しさん
2014/09/27(土) 20:37:34.88ID:2j9vH2tZ0087デフォルトの名無しさん
2014/09/27(土) 21:55:19.08ID:G9WDbqrYhttp://ideone.com/PLcCef
0088デフォルトの名無しさん
2014/09/27(土) 22:27:08.87ID:40eOdFUh0089山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/28(日) 00:39:43.55ID:RZX9lPG9長さは2<=S<=1000である
11001010110100011001011011111111111111000000000010111000000
同じ文字で連続した文字列の内、他の連続する文字列よりも一番長い文字列をMX
同じ文字で連続した文字列の内、ニ番目に短い文字列をMN
としたときのMXとMNを求めよ
見当たらない場合はFALSEを出力しろ
S=110001010100
MX=3 (000が一番長い)
MN=2 (11または00が二番目に長い)
S=111111
MX=3 (111111が一番長い)
MN=FALSE (2番目に短いものが存在しない)
S=10
MX=FALSE (1番長いのが存在しない)
MX=FALSE (2番目に短いものが存在しない)
0090デフォルトの名無しさん
2014/09/28(日) 02:03:02.94ID:YHDmkQBf-- 一番長いのの条件がわからんが勝手に解釈した
import Data.List
main = mapM (print.p89) ["11001010110100011001011011111111111111000000000010111000000", "110001010100", "111111", "10"]
p89 s =
let r = nub.reverse.sort.map length$group s
in (if 1<=length r then Just$r!!0 else Nothing, if 2<=length r then Just$r!!1 else Nothing)
(Just 14,Just 10)
(Just 3,Just 2)
(Just 6,Nothing)
(Just 1,Nothing)
0091デフォルトの名無しさん
2014/09/28(日) 05:24:03.32ID:SflzpwZEttp://ideone.com/L5LGGN
int main(){ return main();}
0092デフォルトの名無しさん
2014/09/28(日) 06:09:53.87ID:SflzpwZEttp://ideone.com/UDYKYh
ほぼC。二分探査だ。嘘は入れてない。
0093デフォルトの名無しさん
2014/09/28(日) 07:17:16.29ID:SflzpwZEttp://ideone.com/53lyu1
ほぼC。適当に書いた。
0094デフォルトの名無しさん
2014/09/28(日) 07:31:55.79ID:7Waj3RIN0はFALSEとします
連続する文字列は2文字以上とします
f=:2&{.@\:~@~.@(#~ 1&<)@((#;.1)~1,(}.~:}:))
f '110001010100'
3 2
f '111111'
6 0
f '10'
0 0
f '1110001'
3 0
f '11100011'
3 2
0095デフォルトの名無しさん
2014/09/28(日) 10:46:12.34ID:Cu1iOogD他よりも一番長い(つまり唯一), (それを除いて)ニ番目に短い と解釈しました。
import re
def f(S):
d = dict()
for m in re.finditer(r"(.)\1*", S):
l,s = len(m.group()),m.group()
if not d.has_key(l):
d[l] = []
d[l].append(s)
M = list(sorted(d.keys()))
MX = M.pop() if len(d[M[-1]]) == 1 else False
MN = M[1] if len(M) >= 2 else False
print "S={} => {}, {}".format(S,MX,MN)
---
S=110001010100 => 3, 2
S=111111 => 6, False
S=10 => False, False
S=0011 => False, False
S=00110 => False, 2
S=001100 => False, False
S=0011000 => 3, False
0096デフォルトの名無しさん
2014/09/28(日) 16:33:11.25ID:lmN8tiDJtype answer = Eq | Lt | Gt
let tegima a q = if q = a then Eq elif q < a then Lt else Gt
let inline ask one lo hi tegima =
let rec ask' lo hi =
if lo = hi then lo
else
let q = (lo + hi) / (one+one)
match tegima q with
| Eq -> q
| Lt -> ask' (q+one) hi
| Gt -> ask' lo (q-one)
ask' lo hi
let ask100 = ask 1. 0. 100. >> printfn "%f"
ask100 <| tegima 42. // 42.0
ask100 <| tegima System.Math.PI // 3.141592654
0097デフォルトの名無しさん
2014/09/28(日) 19:00:02.66ID:IeNBSGsI例2,3を見ると繰り返し現れる文字列で一番長い物と
二番目の物って意味?
それとも例2はたんに書き間違いで
2文字以上で1番長い物と2番目に長い物?
曖昧な仕様で後々実装後もめるパターンだなw。
0098デフォルトの名無しさん
2014/09/28(日) 23:51:21.05ID:AmQTaudV例示とは異なるが、純粋に一番長い連続と二番目に短い連続を取得と解釈(連続は2文字以上からで1文字のみは除外)
あと、「FALSE」はNoneとさせてもらった
更にいうとリハビリがてらの超愚直コードなので広い心で見守っていただきたい・・・
def count_seq(str):
cnt, mx, mn1, mn2 = 1, None, None, None
str += 'X'
for i in xrange(1, len(str)):
if str[i - 1] == str[i]:
cnt += 1
else:
if cnt > 1 and (mx is None or cnt > mx):
mx = cnt
if cnt > 1 and (mn1 is None or cnt < mn1):
mn1, mn2 = cnt, mn1
elif cnt > 1 and cnt > mn1 and (mn2 is None or cnt < mn2):
mn2 = cnt
cnt = 1
return (mx, mn2)
map(count_seq, ('', '0', '1', '10', '111111', '110001010100', '11001010110100011001011011111111111111000000000010111000000'))
→[(None, None), (None, None), (None, None), (None, None), (6, None), (3, 3), (14, 3)]
map(count_seq, ('0011', '00110', '001100', '0011000'))
→[(2, None), (2, None), (2, None), (3, 3)]
0099片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/09/28(日) 23:57:01.74ID:uLb79luw0100デフォルトの名無しさん
2014/09/29(月) 00:30:40.77ID:0K8mksjW0101デフォルトの名無しさん
2014/09/29(月) 00:58:20.05ID:LXjsJlBsハッカー様()の模範回答をご教授願うよw
0102デフォルトの名無しさん
2014/09/29(月) 02:08:03.92ID:v6qiSvKuまぁUAをアレにしたブラウザなりクローラなり使えばいいだけ。
0103デフォルトの名無しさん
2014/09/29(月) 10:54:40.10ID:mrmYQHU+| MXMN |
MXMN := [:S |
| runs MX MN |
runs := (RunArray newFrom: S) runs copyWithout: 1.
MX := runs ifEmpty: [false] ifNotEmpty: [runs max].
MN := (runs copyWithout: MX) ifEmpty: [false] ifNotEmpty: [:runs2 | runs2 max].
{MX. MN}
].
MXMN value: '110001010100'. "=> #(3 2) "
MXMN value: '111111'. "=> #(6 false) "
MXMN value: '10'. "=> #(false false) "
0104山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/29(月) 18:40:13.84ID:TuwBUZ1NN=参加人数(0<=N<=26の範囲で、2で割り切れる整数)
+-o-+
|xxx|
oxxxo
xx+--o--+xx
xx|xxxxx|xx
+-o-+x+-o-+
|xxx|x|xxx|
oxxxoxoxxxo
0105山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/29(月) 18:52:35.65ID:TuwBUZ1N0106デフォルトの名無しさん
2014/09/29(月) 19:29:08.63ID:EXXNilQ4貴方の問題は仕様が絞り切れておらず解釈に困るので、もっと仕様を絞ってください。
0107デフォルトの名無しさん
2014/09/29(月) 19:32:32.39ID:QgztgqUnN=0が漏れてんがな
0108デフォルトの名無しさん
2014/09/29(月) 20:07:09.60ID:hkDoffKOシードを定義するか「2で割り切れる」を変更するか
0109デフォルトの名無しさん
2014/09/29(月) 21:13:19.99ID:WITlTI700110デフォルトの名無しさん
2014/09/29(月) 21:16:43.52ID:jDAbb90Q0111デフォルトの名無しさん
2014/09/30(火) 00:17:34.89ID:NE0qZBpPアリは最初、北を向いている
アリは一秒毎に次の動作をする
・今の座標が白ければ黒く塗り、右を向いて1歩進む
・今の座標が黒ければ白く塗り、左を向いて1歩進む
s(0<=s<=10000)秒後の初期位置からの座標を「北へ○歩、東へ○歩」のような形式で出力せよ
s=10のとき 「南へ1歩、西へ1歩」
s=100のとき 「北へ2歩」
0112山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/30(火) 00:38:31.90ID:Z+y+Ym8Vxxxxx+----o----+xx
xxxxx|xxxxxxxxx|xx
xx+--o--+xxxxxx|xx
xx|xxxxx|xxxxxx|xx
+-o-+x+-o-+xx+-o-+
|xxx|x|xxx|xx|xxx|
oxxxoxoxxxoxxoxxxo
0113111
2014/09/30(火) 00:42:59.55ID:NE0qZBpPs=4のときは「移動なし」で
0114山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/09/30(火) 00:52:03.45ID:Z+y+Ym8VNを32倍して出力しろ
禁止事項
コードの中で数字を書くのは禁止
+*/-を使って加減乗除するの禁止
N=2
>>> 62
0115デフォルトの名無しさん
2014/09/30(火) 01:01:59.99ID:DtoKIHeG0116デフォルトの名無しさん
2014/09/30(火) 01:07:03.81ID:C909vV3Kあんまり検証してないけど・・・
def ant_walk(sec):
x, y, direct, map, msg = 0, 0, 0, {}, None
move_dict = [(0, -1), (1, 0), (0, 1), (-1, 0)]
for i in xrange(sec):
if (x, y) in map:
del map[(x, y)]
direct = (direct + 3) % 4
else:
map[(x, y)] = True
direct = (direct + 1) % 4
move = move_dict[direct]
x, y = x + move[0], y + move[1]
if x == 0 and y == 0:
msg = '移動なし'
if y != 0:
msg = '{}へ{}歩'.format('北' if y < 0 else '南', abs(y))
if x != 0:
msg = (msg + '、') if msg is not None else ''
msg += '{}へ{}歩'.format('西' if x < 0 else '東', abs(x))
print(msg)
ant_walk(0): 移動なし
ant_walk(1): 東へ1歩
ant_walk(4): 移動なし
ant_walk(10): 南へ1歩、西へ1歩
ant_walk(100): 北へ2歩
0118デフォルトの名無しさん
2014/09/30(火) 01:15:48.11ID:DtoKIHeG2*32=64
としたかったのか
2*31=62
としたかったのか分からないだろバカ
0119デフォルトの名無しさん
2014/09/30(火) 01:19:05.81ID:1WFsrfGkC++
http://ideone.com/DRMBVh
0120デフォルトの名無しさん
2014/09/30(火) 02:28:54.98ID:FYmdSsot(defun f (N)
(ash N (% ?N ?I)))
f
(f 2)
64
0121デフォルトの名無しさん
2014/09/30(火) 02:36:12.77ID:uSguC6Dn砂場崩して何がしたいのかよくわからないのだけど、何しに来たの?
0122デフォルトの名無しさん
2014/09/30(火) 03:37:57.36ID:uSguC6Dnttp://ideone.com/1aT6Ra
ほぼC。>>116を見た後書いたので結構似てしまったがその分シンプルに書けたと自負している。(汗
自分でも驚く位短時間でかけたのでどこかバグってるかもしれない。
欠点としては試算上だが、メモリを常に50メガ位食うので個人的には残念な感じ。
ほらぶるほらぶる。
0123デフォルトの名無しさん
2014/09/30(火) 05:10:25.53ID:lfWI1YhR四回右にビットシフト
ていうか、なに?このクソ問題
0124デフォルトの名無しさん
2014/09/30(火) 05:21:35.40ID:uSguC6Dn自己顕示欲が強くておっちょこちょいな変なおっさん?だから真面目に相手すると気を吸われそうだ。
このスレは、出題者がドヤ顔するんではなくて回答者がドヤ顔するスレだよね。
おっさんはどうも勘違いしてらっしゃる。
0125デフォルトの名無しさん
2014/09/30(火) 06:15:58.57ID:Dqlfq8/k( ・ω・) < オハヨウナノン
〇={=}〇 ∧,, ∧
|::::::::::\ (*‘ω‘ *)
、、、し 、、、(((.@)vv、vvv 、、(、v、)っv、、
0126デフォルトの名無しさん
2014/09/30(火) 09:33:21.01ID:+BV9BL+k数字入ってるよ
0127デフォルトの名無しさん
2014/09/30(火) 09:48:05.17ID:rWDDVQoR何で右にビットシフト?
0128デフォルトの名無しさん
2014/09/30(火) 09:54:00.90ID:C909vV3Kdef unko(num):
return num << len(('a', 'b', 'c', 'd', 'e'))
print(map(unko, (1, 2, 3, 4)))
→[32, 64, 96, 128]
0129デフォルトの名無しさん
2014/09/30(火) 10:07:21.61ID:lfWI1YhRおれ、左利きだからすぐ左右間違える
おらにナビゲーターさせるとヤバい
「ひだり!」
車転回
「あほー、ひだりいうてるやろ!」
「だから、ひだりやろ!」
「あほー、ひだりはみぎじゃ!」
0130デフォルトの名無しさん
2014/09/30(火) 10:12:11.95ID:SzHlhe5/0131デフォルトの名無しさん
2014/09/30(火) 11:10:26.87ID:0GEeaCri0132デフォルトの名無しさん
2014/09/30(火) 11:36:19.19ID:UHNyfmUO| antPosAfter |
antPosAfter := [:s |
| pos dir map |
pos := 0@0.
dir := 0@1.
map := Dictionary new.
s timesRepeat: [
(map at: pos ifAbsent: [#white]) == #white
ifTrue: [map at: pos put: #black. dir := dir rightRotated]
ifFalse: [map at: pos put: #white. dir := dir leftRotated].
pos := pos + dir.
].
pos isZero ifTrue: ['移動なし'] ifFalse: [
((#('南へ{1}歩' '' '北へ{1}歩') at: pos y sign + 2) format: {pos y abs}),
((pos x = 0 or: [pos y = 0]) ifTrue: [''] ifFalse: ['、']),
((#('東へ{1}歩' '' '西へ{1}歩') at: pos x sign + 2) format: {pos x abs})
]
].
antPosAfter value: 1. "=> '東へ1歩' "
antPosAfter value: 10. "=> '南へ1歩、西へ1歩' "
antPosAfter value: 100. "=> '北へ2歩' "
antPosAfter value: 4. "=> '移動なし' "
antPosAfter value: 20000. "=> '南へ184歩、西へ210歩' "
0133デフォルトの名無しさん
2014/09/30(火) 12:47:18.52ID:UHNyfmUO| multiplyThirtyTwoBy |
multiplyThirtyTwoBy := [:N | (Array new: ' ' first asciiValue withAll: N) sum].
multiplyThirtyTwoBy value: 2 "=> 64 "
0134デフォルトの名無しさん
2014/09/30(火) 20:31:24.25ID:UHNyfmUO配列を逆順にする関数(メソッド)はもちろん、ループ文(式)、イテレーター、
GOTO文(式)、再帰、継続、マクロ、既存メソッド再定義を使わずに
サイズ50の配列の内容を逆順にするコードを(可能であれば25ステップ以内で)書け。
0135デフォルトの名無しさん
2014/09/30(火) 21:21:28.96ID:uSguC6Dnスワップ関数を手書きしないといけないので25ステップは難しいな。
0136デフォルトの名無しさん
2014/09/30(火) 21:26:36.66ID:NE0qZBpPrev [e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40,e41,e42,e43,e44,e45,e46,e47,e48,e49] =
[e49,e48,e47,e46,e45,e44,e43,e42,e41,e40,e39,e38,e37,e36,e35,e34,e33,e32,e31,e30,e29,e28,e27,e26,e25,e24,e23,e22,e21,e20,e19,e18,e17,e16,e15,e14,e13,e12,e11,e10,e9,e8,e7,e6,e5,e4,e3,e2,e1,e0]
0137デフォルトの名無しさん
2014/09/30(火) 21:27:45.58ID:NE0qZBpP0138デフォルトの名無しさん
2014/09/30(火) 21:31:53.87ID:uSguC6Dn愚直にループアンローリングしてSIMDのASMで書くのが一番早いと思うよ。
0139デフォルトの名無しさん
2014/09/30(火) 21:33:30.75ID:uSguC6Dnうわー、マジですか。
あーでも、これならC++でもできるわ。
パクらせてもらう。
0140デフォルトの名無しさん
2014/09/30(火) 21:41:15.46ID:MBbuPApeL = range(50)
print L[:5], "...", L[-5:]
L = L[::-1]
print L[:5], "...", L[-5:]
---
[0, 1, 2, 3, 4] ... [45, 46, 47, 48, 49]
[49, 48, 47, 46, 45] ... [4, 3, 2, 1, 0]
0141デフォルトの名無しさん
2014/09/30(火) 22:05:59.62ID:uSguC6Dnttp://ideone.com/5NGgJd
ほぼC。久しぶりにローレベルなことした。あんまりこの手のモノには触りたくない。ほらぶるほらぶる。Orz
ところでこれ、セーフ?アウト?
0142デフォルトの名無しさん
2014/09/30(火) 22:14:21.64ID:C909vV3K再起禁止に抵触してるかもしれんが・・・
def reverse_rest(arry):
return reduce(lambda x, y: [y] + x, [[]] + arry)
arry = range(1, 51)
print(arry)
→[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
print(reverse_rest(range(1, 51)))
→[50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
0143デフォルトの名無しさん
2014/09/30(火) 22:21:02.62ID:C909vV3K0144デフォルトの名無しさん
2014/09/30(火) 22:32:11.36ID:MBbuPApefrom math import pi,e
def f(N):
print "N={}\n>>>".format(N),
print eval("{:#b}{:{}{}}".format(N,int(),int(),int(sum((pi,e)))))
0145デフォルトの名無しさん
2014/09/30(火) 23:18:19.28ID:MBbuPApedef f(s):
pos,dir,floor = complex(0),complex(0,1),dict()
for t in range(1,s+1):
if floor.get(pos," ") == " ":
floor[pos] = "*"
dir *= complex(0,-1)
else:
floor[pos] = " "
dir *= complex(0,1)
pos += dir
else:
msg = []
ew,ns = map(int,(pos.real,pos.imag))
if ns > 0: msg.append(u"北へ{}歩".format(ns))
if ns < 0: msg.append(u"南へ{}歩".format(-ns))
if ew > 0: msg.append(u"東へ{}歩".format(ew))
if ew < 0: msg.append(u"西へ{}歩".format(-ew))
if not msg: msg.append(u"元の位置")
print u"s={} {} {}".format(t, ",".join(msg), floor.get(pos," "))
0146デフォルトの名無しさん
2014/10/01(水) 09:59:05.98ID:AeBUI1kv> ところでこれ、セーフ?アウト?
出題意図を強調してお題をくどく書き直すとこんな感じになります。
お題
配列を逆順にする関数(メソッド、スライス等配列操作も含む)はもちろん、
組み込みのループ文(式、イテレーター、列挙を含む)、GOTO文(式)、再帰、継続、マクロ、
姑息な既存メソッド再定義によるインターセプトなど、
他言語ユーザーにもお馴染みだったり容易に再現が可能なよくある方法がすべて封じられたとき、
その言語ならではの超絶技法(黒魔術ともいう)を華麗に駆使して
任意のサイズ(べた書きをしようと思わない50以上が好ましい)の配列の内容を
逆順に入れ替えるコードを(可能であれば25ステップ以内で)書いてください。
破壊的操作ができない言語ではコピーを返してもかまわいません。
…とはいえ、まあ、変態機能がある言語ばかりではないですし、しゃっちょこばらずに
楽しく書いて披露し合えばいいと思います。
0147デフォルトの名無しさん
2014/10/01(水) 14:45:05.04ID:4pDWmQkQ次のようなJavaScriptコードがある。
var seed = ???; // この値はわからないが0<=seed<256の数値であることは確か
function rand() {
seed = (seed * 54 + 31) % 251;
return seed % 32;
}
randを何度か呼び出した結果の配列が入力として与えられる。
次にrandを呼び出した結果として可能性のある数を全て出力せよ。
[30] => [0,17,20,23,26,29]
[1,2,3] => []
[1,28,18,3,16,17,13,16,26,20,21,14] => [18]
[] => [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
0148デフォルトの名無しさん
2014/10/01(水) 15:49:38.95ID:iMfoFiuu0149147
2014/10/01(水) 16:03:49.15ID:4pDWmQkQ乱数の履歴から次の乱数が何かを予測する問題です
0150デフォルトの名無しさん
2014/10/01(水) 17:48:32.69ID:pzP2+wtJimport sets
def guess_seed(num):
seed_set = sets.Set()
for i in xrange(num, 256, 32):
for j in xrange(i, 13802, 251):
if (j - 31) % 54 == 0: seed_set.add((j - 31) / 54)
return seed_set
def get_next_seed(seed_set):
next_seed_set = sets.Set()
for seed in seed_set: next_seed_set.add((seed * 54 + 31) % 251)
return next_seed_set
def guess_next_seed(seed_set, next_num):
next_seed_set = sets.Set()
next_seed_cand_set = get_next_seed(seed_set)
for seed in next_seed_cand_set:
if ((seed * 54 + 31) % 251) % 32 == next_num: next_seed_set.add(seed)
return next_seed_set
def guess_next_num(num_list):
if len(num_list) == 0: return range(0, 32)
seed_set = guess_seed(num_list[0])
for num in num_list[1:]: seed_set = guess_next_seed(seed_set, num)
res = [((seed * 54 + 31) % 251) % 32 for seed in get_next_seed(seed_set)]
res.sort()
return res
print(map(guess_next_num, ([], [30],[1,2,3],[1,28,18,3,16,17,13,16,26,20,21,14])))
→[[0, 1, 2, 3, 〜(中略)〜, 29, 30, 31], [0, 1, 17, 20, 23, 26, 29, 30], [], [18]]
0151147
2014/10/01(水) 18:40:46.32ID:4pDWmQkQ> [1,2,3] => []
これはまずかったですね
randが1,2,3と出力することは無いので入力として不適切でした
よしなに対処して下さい
0152デフォルトの名無しさん
2014/10/01(水) 18:51:23.04ID:iv/0qHwn了解。でも、出題者の主観として、アリかナシかを言ってもらえればそれでよかった。
正直SIMDは理解してないので似非メソッドで解決?したわけなんだけどね。
>>147
面白い問題だね。なんか一意に求める方法ありそうだけど数学の範疇なのでちょっと難しいな。
うーん。なんかないかな??
0153デフォルトの名無しさん
2014/10/01(水) 18:52:18.25ID:QWE+Qg27(require 'cl-lib)
cl-lib
(defun f (v)
(let (l)
(cl-delete-if (lambda (x) (push x l) ()) v)
(apply 'vector l)))
f
(f [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50])
[50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1]
0154デフォルトの名無しさん
2014/10/01(水) 19:24:48.11ID:DMZSGVKBoooxo
oxooo
aooxo
oxoxo
oxooz
aからzまでの最短ルートと再長ルートを出力しろ
左上の位置が0,0
右下の5,4
0155デフォルトの名無しさん
2014/10/01(水) 19:50:48.04ID:AeBUI1kv| possibilitiesJustAfter |
possibilitiesJustAfter := [:xs |
| cands |
cands := (0 to: 251) asSet.
((xs ifEmpty: [cands] ifNotEmpty: [
xs allButFirst inject: (cands select: [:c | c \\ 32 = xs first]) into: [:cs :x |
cs * 54 + 31 \\ 251 select: [:c | c \\ 32 = x]
]
]) * 54 + 31 \\ 251 \\ 32) asArray sort
].
possibilitiesJustAfter value: #(30). "=> #(0 17 20 23 26 29 30) "
possibilitiesJustAfter value: #(1 2 3). "=> #() "
possibilitiesJustAfter value: #(1 28 18 3 16 17 13 16 26 20 21 14). "=> #(18) "
possibilitiesJustAfter value: #(). "=> #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) "
0156デフォルトの名無しさん
2014/10/01(水) 20:39:00.99ID:iv/0qHwnttp://ideone.com/gMm7gi
ほぼC。一応書いてみたけど、あってるのか?randが123出力したんだけど、俺、まちがってる?
まぁいい。なかなか興味深い問題だった。
0157デフォルトの名無しさん
2014/10/01(水) 21:27:14.11ID:iv/0qHwnこのコードちょっと無駄があるな。でも、イデオン閉じちゃったので修正不可。
まぁ、デカイ数列渡さない限りはそんなへんな負荷にはならんでしょう。
0158デフォルトの名無しさん
2014/10/01(水) 22:24:00.57ID:FWPgmt6i▼返すのはコピー & 要素は整数限定 & APL/J っぽい言語なら簡単だけど…的な解。
| arr |
arr := #(4 10 1 8 2 9 7 6 3 5).
(arr / (arr max + 1) + (arr size to: 1 by: -1)) sort - (1 to: arr size) * (arr max + 1)
"=> #(5 3 6 7 9 2 8 1 10 4) "
▼返すオリジナルをいじっているわけではないので
コピーになら何をしてもかまわないだろう的な開き直り & 要素が即値の場合は不可だけど…的な解。
| arr half1 half2 |
arr := #(3.0 1.0 9.0 4.0 7.0 6.0 5.0 2.0 8.0).
half1 := arr first: arr size // 2.
half2 := (arr last: arr size // 2) reversed.
half1 elementsExchangeIdentityWith: half2.
arr "=> #(8.0 2.0 5.0 6.0 7.0 4.0 9.0 1.0 3.0) "
▼実質GOTOループですが何か?的な解。
| arr idx label |
arr := (1 to: 20) asArray.
idx := arr size.
label := thisContext previousPc.
arr swap: idx with: arr size - idx + 1.
(idx := idx - 1) > (arr size // 2) ifTrue: [thisContext pc: label].
^arr "=> #(20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1) "
0159デフォルトの名無しさん
2014/10/01(水) 23:12:40.90ID:HeVP07lg今更だけどscheme(Gauche)
http://ideone.com/nxtyUG
0160デフォルトの名無しさん
2014/10/01(水) 23:13:40.80ID:ZUQc71vZ0161デフォルトの名無しさん
2014/10/02(木) 02:01:33.43ID:E9MFZIuR0162デフォルトの名無しさん
2014/10/02(木) 08:15:30.51ID:ShVbXCvN'配列を逆順にする関数(メソッド)はもちろん、ループ文(式)、イテレーター、
GOTO文(式)、再帰、継続、マクロ、既存メソッド再定義を使わずに
サイズ50の配列の内容を逆順にするコードを(可能であれば25ステップ以内で)書け。'(
[_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,
_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,
_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,
_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,
_41,_42,_43,_44,_45,_46,_47,_48,_49,_50],
[_50,_49,_48,_47,_46,_45,_44,_43,_42,_41,
_40,_39,_38,_37,_36,_35,_34,_33,_32,_31,
_30,_29,_28,_27,_26,_25,_24,_23,_22,_21,
_20,_19,_18,_17,_16,_15,_14,_13,_12,_11,
_10,_9,_8,_7,_6,_5,_4,_3,_2,_1]).
0163デフォルトの名無しさん
2014/10/02(木) 17:43:18.98ID:TZS1YG7Z| oriMap start goal ans queue minMax |
oriMap := Matrix rows: 6 columns: 6 contents: '
xxooo
oooxo
oxooo
aooxo
oxoxo
oxooz'.
start := oriMap indexOf: $a.
goal := oriMap indexOf: $z.
ans := OrderedCollection new.
queue := OrderedCollection with: {start}.
[queue notEmpty] whileTrue: [
| path map |
(path := queue removeFirst) last = goal ifTrue: [ans add: path] ifFalse: [
map := oriMap copy.
path allButFirst do: [:pt | map at: pt x at: pt y put: $.].
path last fourNeighbors
select: [:pt | 'oz' includes: (map at: pt x at: pt y ifInvalid: $x)]
thenDo: [:pt | queue add: (path copyWith: pt)]
]
].
minMax := (ans collect: #size) minMax.
^(minMax collect: [:m | ans asArray select: [:path | path size = m]]) - (1@2)
"=> {
{{3@0 . 3@1 . 3@2 . 4@2 . 5@2 . 5@3 . 5@4}} .
{{3@0 . 2@0 . 1@0 . 1@1 . 1@2 . 0@2 . 0@3 . 0@4 . 1@4 . 2@4 . 2@3 . 2@2 . 3@2 . 4@2 . 5@2 . 5@3 . 5@4}}
} "
0164山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/10/02(木) 19:33:13.05ID:H/QyEKefこの数字から規則性を見つけて10000番目に現れる数字を出力せよ
0165デフォルトの名無しさん
2014/10/02(木) 20:45:12.54ID:zf1rY1mq0166デフォルトの名無しさん
2014/10/02(木) 21:29:20.41ID:XaYpLqdOttp://ideone.com/Sq4Q0Q
0167デフォルトの名無しさん
2014/10/02(木) 23:26:00.26ID:5I2uukos自分を上級とか言っちゃう馬鹿に構っちゃ駄目だよ
0168デフォルトの名無しさん
2014/10/03(金) 00:04:16.02ID:yjp8VEMc0169デフォルトの名無しさん
2014/10/03(金) 00:15:48.59ID:0k/kXsaU( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)indows10 v、vv、
0170デフォルトの名無しさん
2014/10/03(金) 00:56:10.38ID:fh20IZ/zimport Data.Ord
import Data.List
main = print result
maze = lines "xxooo\noooxo\noxooo\naooxo\noxoxo\noxooz"
width = length $ maze !! 0
height = length maze
findPos c = [(x, y) | x <- [0..width-1], y <- [0..height-1], maze !! y !! x == c] !! 0
start = findPos 'a'
goal = findPos 'z'
ref (x, y) = 0 <= x && x < width && 0 <= y && y < height && maze !! y !! x /= 'x'
result = (reverse $ minimumBy (comparing length) paths, reverse $ maximumBy (comparing length) paths)
paths = search [start]
search path@(pos@(x, y):ps)
| pos `elem` ps = []
| pos == goal = [path]
| not $ ref pos = []
| otherwise = search ((x-1, y):path) ++ search ((x+1, y):path) ++ search ((x, y-1):path) ++ search ((x, y+1):path)
----
([(0,3),(1,3),(2,3),(2,4),(2,5),(3,5),(4,5)],[(0,3),(0,2),(0,1),(1,1),(2,1),(2,0),(3,0),(4,0),(4,1),(4,2),(3,2),(2,2),(2,3),(2,4),(2,5),(3,5),(4,5)])
0171デフォルトの名無しさん
2014/10/03(金) 01:45:18.90ID:dmioHSpm(require 'cl-lib)
cl-lib
(defun hwsh ()
(cl-loop
(let ((s (read-from-minibuffer "hwsh%% ")))
(if (string= s "Hello World")
(return)
(message s)
(sleep-for 1)))))
hwsh
(hwsh)
nil
0172デフォルトの名無しさん
2014/10/03(金) 01:45:58.31ID:dmioHSpm% cat hwsh.c
#include <stdio.h>
#include <string.h>
int main() {
char buf[12];
for (;;) {
fprintf(stderr, "hwsh%% ");
fgets(buf, sizeof(buf), stdin);
if (strcmp(buf, "Hello World") == 0) break;
else printf(buf);
}
return 0;
}
% make hwsh && ./hwsh
cc -o hwsh hwsh.c
hwsh% 0
0
hwsh% exit
exit
hwsh% Hello World
% printf "0\nexit\nHello World\n" | ./hwsh 2>/dev/null
0
exit
%
0173デフォルトの名無しさん
2014/10/03(金) 01:48:24.36ID:dmioHSpm(defun f (n)
(let* ((l (reverse (list 0 1 2 3 6 12 23)))
(llen (length l))
(a 1) (b 2))
(loop for i from 0 below (- n llen)
do (push (- (* (car l) 2) b) l) (let ((c a)) (setq a b) (setq b (+ b c))))
(if (< n llen) (nth (1- n) (reverse l)) (car l))))
(loop for i from 1 to 10 collect (f i))
(0 1 2 3 6 12 23 44 85 165)
(length (format nil "~A" (f 100)))
30
(f 100)
178263365792396611930180634305
(length (format nil "~A" (f 1000)))
301
(f 1000)
15068089788556884200837227252406275461019755164609
06635467773983645806165644441422256060220226175048
15438210583985091319581712489295286782219515928380
05401737218723110358276833903488019327945469306820
43784151439006799226471757474685843965850035847511
56061127007446991905868118479501067774407042212650
5
(length (format nil "~A" (f 10000)))
3010
0174デフォルトの名無しさん
2014/10/03(金) 08:45:48.06ID:gkQhIVI8ハズレ
0175デフォルトの名無しさん
2014/10/03(金) 16:18:06.29ID:fh20IZ/zあなたは半径5の円を平面上に落とし、円に接触した景品を得ることができる
全ての景品を得るにはどこに円を落とせばよいか
景品の(x, y)座標のリストが与えられるので、円の中心座標をすべて出力せよ
ただし、景品は点として扱う
景品や円の座標は整数値である
円は出来る限り少ない方が良いが、最少でなくても良い
テストケースと出力例
input: (-5, 0), (5, 0)
output: (0, 0)
input: (0, 5), (3, 3), (4, 4), (10, -1), (-9, 0), (-7, 0), (-6, 2), (0, -5), (3, -3)
output: (0, 5), (10, -1), (-7, 0), (0, -5)
input: (-4, 8), (6, 8), (14, 8), (-12, 4), (10, 4), (-6, 0), (-10, -2), (-2, -4), (0, -4), (8, -4)
input:(-7, -15), (-7, -15), (5, -2), (7, -3), (-8, -10), (2, -9), (-3, -3), (-7, -2), (-10, -9), (6, -3), (9, -12), (6, -7), (-1, -5), (-10, -11), (-6, -8), (-5, -3)
0176デフォルトの名無しさん
2014/10/03(金) 16:37:27.45ID:2Mt1hyFyscheme(gauche)
http://ideone.com/3gUT63
(rinsetu4kou 1000)
235999452656267890257654227339253749
954992399736184260217198045081075185
084959286421236836845757197060803495
846809480082928070128025099645896854
159071386692565912322394046523237720
394759587441727400767436582641106732
168013300780326756127115193913634227
405667941736890788204000421404624
0177デフォルトの名無しさん
2014/10/03(金) 16:44:21.81ID:2Mt1hyFy回答の桁数間違えた
(rinsetu4kou 10000)
28058566764257248608122072881910525085551777891599597177721270582868223
........
回答の桁数大きすぎて書き込めない。
0178デフォルトの名無しさん
2014/10/03(金) 16:49:32.93ID:Hq1YgHs0"この文字列には1が□個,2が□個,3が□個,1から3以外の数字が□個ある。"
の□をそれぞれ適切な数字に置き換え、正しい文章として完成させるコードを書け。
元ネタ:https://www.facebook.com/NewtonScience/photos/a.314504251971427.78296.285001398255046/716155815139600/
0179デフォルトの名無しさん
2014/10/03(金) 16:51:45.41ID:2Mt1hyFyああ、間違えてるの今気がついたorz
10番目が165に成らない。。。。
プログラミングのお題スレなんだから数列の計算式出してよ。
数学問題とくレスじゃ無いんだからさ(ちょっと逆ギレ)w。
0180山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/10/03(金) 17:16:25.17ID:G52vygkN0181デフォルトの名無しさん
2014/10/03(金) 17:32:36.51ID:gCeFPsDeお前はまず自分が何をやってもできない人間であることを自覚した方がいい
0182デフォルトの名無しさん
2014/10/03(金) 17:47:36.65ID:TVwznypc質問者がそれでは土台が付いてきませんよ。
0183デフォルトの名無しさん
2014/10/03(金) 18:20:19.19ID:GdlHgx3Ctype E = System.Linq.Expressions.Expression
let (.<-) l r = E.Assign(l, r) :> E
let block vs es = E.Block(Seq.toArray vs, Seq.toArray es) :> E
let ifElse c t f = E.IfThenElse(c, t, f)
let var (v: E) body = let p = E.Variable v.Type in block [p] [p .<- v; body p]
let loop body = let l = E.Label() in block [] [E.Loop(body l); E.Label l]
let lambda<'f,'a> body = let x = E.Variable typeof<'a> in E.Lambda<'f>(body x, x)
let revLambda() =
lambda<'T[] System.Action, 'T[]> <| fun xs ->
var (E.Constant 0) <| fun i ->
var (E.Decrement <| E.Divide(E.ArrayLength xs, E.Constant 2)) <| fun hi ->
loop <| fun l ->
ifElse (E.LessThan(hi, i)) (E.Break l) (
var (E.Decrement <| E.Subtract(E.ArrayLength xs, i)) <| fun i' ->
var (E.ArrayIndex(xs, i)) <| fun x ->
block [] [
E.ArrayAccess(xs, i) .<- E.ArrayIndex(xs, i')
E.ArrayAccess(xs, i') .<- x
i .<- E.Add(i, E.Constant 1)
]
)
let rev xs = revLambda().Compile().Invoke xs; xs
rev [|0..5|] // [|5; 4; 3; 2; 1; 0|]
0184175
2014/10/03(金) 18:23:19.55ID:fh20IZ/z総当りなんて軟弱な方法じゃ解けませんよ
(7, 4), (12, 11), (11, 13), (31, 27), (14, 15), (30, 28), (34, 21), (37, 8), (24, 27), (2, 20), (20, 20), (36, 7), (33, 21), (22, 5), (15, 28), (15, 7)
7 4 12 11 11 13 31 27 14 15 30 28 34 21 37 8 24 27 2 20 20 20 36 7 33 21 22 5 15 28 15 7
0185デフォルトの名無しさん
2014/10/03(金) 18:35:33.72ID:co+UQ/qWf:=method(L,
L
)
Io> f(list(list(-5,0),list(5,0)))
==> list(list(-5, 0), list(5, 0))
0186デフォルトの名無しさん
2014/10/03(金) 23:35:33.99ID:zStWBVTR0187デフォルトの名無しさん
2014/10/03(金) 23:36:05.81ID:zStWBVTRhttp://ideone.com/GAlKiM
0188デフォルトの名無しさん
2014/10/03(金) 23:47:15.65ID:zStWBVTR二、一、二、四
0189デフォルトの名無しさん
2014/10/04(土) 00:03:48.16ID:en9JGvHv| str digitGroups count baseCounts ans |
str := 'この文字列には1が{1}個,2が{2}個,3が{3}個,1から3以外の数字が{4}個ある。'.
digitGroups := #((1) (2) (3) (4 5 6 7 8 9 0)).
count := [:digits | digitGroups collect: [:ds | digits count: [:d | ds includes: d]]].
baseCounts := count value: ((str format: #('' '' '' '')) asArray select: #isDigit thenCollect: #digitValue).
[:exit |
(0 to: 9) asDigitsToPower: 4 do: [:digits |
(count value: digits) + baseCounts = digits ifTrue: [ans := digits. exit value]
]
] valueWithExit.
^str format: ans
"=> 'この文字列には1が4個,2が1個,3が3個,1から3以外の数字が1個ある。' "
0190デフォルトの名無しさん
2014/10/04(土) 01:17:42.67ID:xghbT7VX馬鹿に構ったお前が悪い
0191デフォルトの名無しさん
2014/10/04(土) 01:36:14.63ID:Vp0wbb9+0192デフォルトの名無しさん
2014/10/04(土) 02:47:02.90ID:ta2bRS3shttp://ideone.com/EapiOc
0193デフォルトの名無しさん
2014/10/04(土) 07:30:23.67ID:P7Lnn5/7(require 'cl-lib)
cl-lib
(cl-loop for a from 2 to 13 do
(cl-loop for b from 1 to 13 do
(cl-loop for c from 2 to 13 do
(let* ((l (list a b c))
(d (- (length l) (cl-count 1 l) (cl-count 2 l) (cl-count 3 l))))
(let ((s (format "この文字列には1が%d個,2が%d個,3が%d個,1から3以外の数字が%d個ある。" a b c d)))
(when (and (= (cl-count ?1 s) a)
(= (cl-count ?2 s) b)
(= (cl-count ?3 s) c)
(= (length (cl-remove-if-not (lambda (c) (or (and (<= ?4 c) (<= c ?9)) (= c ?0))) s)) d))
(print s)))))))
"この文字列には1が4個,2が1個,3が3個,1から3以外の数字が1個ある。"
nil
0194デフォルトの名無しさん
2014/10/04(土) 10:00:58.88ID:m0RM23AG変に工夫しようとしてハマったの俺だけ?
他の人の回答チラ見して単純に書いたら簡単だった・・・
def search_nums():
for nums in [[i, j, k, l] for i in xrange(1, 10) for j in xrange(1, 10) for k in xrange(1, 10) for l in xrange(1, 10)]:
s = '11233{}{}{}{}'.format(*nums)
if (map(s.count, ['1', '2', '3']) == nums[:3] and len(s) - sum(map(s.count, ['1', '2', '3'])) == nums[3]):
print('この文字列には1が{}個,2が{}個,3が{}個,1から3以外の数字が{}個ある。'.format(*nums))
search_nums()
→この文字列には1が4個,2が1個,3が3個,1から3以外の数字が1個ある。
0195デフォルトの名無しさん
2014/10/04(土) 19:49:23.11ID:m0RM23AGdef get_otakara(otakara_list):
res = []
while len(otakara_list) > 0:
target_list = [otakara_list[0]]
otakara_list.remove(target_list[0])
center_xy = (target_list[0][0], target_list[0][1])
for otakara in otakara_list[:]:
#次の景品も取れるかもって仮定で円の中央を計算してみよっかなぁ・・・整数じゃなきゃって話でややこしぃなぁ・・・
new_x = round((max([target[0] for target in target_list + [otakara]]) + min([target[0] for target in target_list + [otakara]])) / 2.0)
new_y = round((max([target[1] for target in target_list + [otakara]]) + min([target[1] for target in target_list + [otakara]])) / 2.0)
#選んだ景品も取れればラッキー☆ どうかなー?仮定してみた円にはいるかなぁ・・・
if len([target for target in target_list + [otakara] if abs(target[0] - new_x) ** 2 + abs(target[1] - new_y) ** 2 <= 25]) == len(target_list) + 1:
target_list.append(otakara)
otakara_list.remove(otakara)
center_xy = (int(new_x), int(new_y))
res.append(center_xy)
return res
def get_otakara_sort_by_density(otakara_list): #半径5以内の景品の密度によってソートするよっ!
res = []
for otakara in otakara_list: # るーと((x1 - x2)^2 + (y1 - y2)^2)が距離だってさー、ぐぐったんだよ☆
res.append((otakara, len([neighbor for neighbor in otakara_list if abs(otakara[0] - neighbor[0]) ** 2 + abs(otakara[1] - neighbor[1]) ** 2 < 25])))
res.sort(lambda e1, e2: -cmp(e1[1], e2[1])) #密度によってソートするお
return [e[0] for e in res]
print(get_otakara(get_otakara_sort_by_density([(-5, 0), (5, 0)])))
→[(0, 0)]
print(get_otakara(get_otakara_sort_by_density([(0, 5), (3, 3), (4, 4), (10, -1), (-9, 0), (-7, 0), (-6, 2), (0, -5), (3, -3)])))
→[(2, 1), (-8, 1), (0, -5), (10, -1)]
0196デフォルトの名無しさん
2014/10/04(土) 22:11:20.29ID:fObeipZm最初から再起ループでやると収束しないので、初期値をランダム生成して回数制限の再起ループ
0197デフォルトの名無しさん
2014/10/04(土) 22:14:10.16ID:fObeipZm最小でないと問題にならないと思う
0199デフォルトの名無しさん
2014/10/05(日) 00:32:07.96ID:t2aBPMmDそれより、184の解が気になる。
0200175
2014/10/05(日) 01:03:58.17ID:2G44BZBf最適解を求めるプログラムは用意出来ていません。すいません
座標をプロットしてみればわかるのですが、割りとすかすかで目視でも8個より少ない解はなさそうです
きちんと枝刈りして探索すればば8個の円は簡単に求まると思います
>>192は最適解を算出するアルゴリズムかどうかわかりませんが8個の円を出力しています(私のじゃないですが)
0201デフォルトの名無しさん
2014/10/05(日) 02:00:14.45ID:Q++s8JsPCADでらくがきしてみると7個の解はありそうだけどなあ
0202デフォルトの名無しさん
2014/10/05(日) 02:00:33.11ID:RckF5d3d二重三重にカバーされてる所、どれとどれをカバーしてるが判明して
あとは離散的な組み合わせをチェックする問題になるだろ?
0204デフォルトの名無しさん
2014/10/05(日) 02:23:53.77ID:RckF5d3d実数でも整数でも、円の詳細位置よりどの点をカバーしてるか。
点a1、・・・、anとして。
点a1を中心に半径5の範囲の別の点がなかったら、円の配置は1通りで確定。
別の点があったら、その2点を含む円を適当に移動させて、内部に含まれる点の個数で円の配置を分類。
そうすると、
a1にたいして配置{ p1、p2、・・・}
a2にたいして配置{ q1、q2、・・・}
などと求まって、p1=q2のときもあって、そのときはp1を選ぶと、a2の配置も確定。
0205デフォルトの名無しさん
2014/10/05(日) 02:53:23.32ID:HluBeN/J>>200 は[[(15,0),(20,0)],[(10,5),(10,10)],[(0,0),(5,0)]]が最適解だけど
円内に点を多く取り込もうとすると
[[(15,0),(20,0)],[(5,0),(10,5),(15,0)],[(10,5),(10,10)],[(0,0),(5,0)]]
失敗する
>>184 解は8で、点の入る円別で5通りの組み合わせ
0206デフォルトの名無しさん
2014/10/05(日) 11:07:53.93ID:Q++s8JsP例
"2014-10-03 00:17:21" -> "21-2014-10 03:00:17"
"1 2 3 4" -> "4 1 2 3"
"a0=0;a1=1;a2=2;a3=3" -> "a3=0;a0=1;a1=2;a2=3"
0207デフォルトの名無しさん
2014/10/05(日) 12:49:39.13ID:8YeMaku/import re
def num_rotate(s):
num_list = re.findall(r'\d+', s)
fmt = re.sub(r'\d+','{}', s)
return fmt.format(*(num_list[-1:] + num_list[:-1])) if len(num_list) > 0 else s
print(map(num_rotate, ['', 'x', 'foobarhoge', '2014-10-03 00:17:21', '1 2 3 4', 'a0=0;a1=1;a2=2;a3=3']))
→['', 'x', 'foobarhoge', '21-2014-10 03:00:17', '4 1 2 3', 'a3=0;a0=1;a1=2;a2=3']
0208デフォルトの名無しさん
2014/10/05(日) 14:09:41.57ID:2G44BZBf近似解
http://ideone.com/ydauIS
最適解
http://ideone.com/0vJV5r
0209デフォルトの名無しさん
2014/10/05(日) 15:35:13.47ID:37iiGiPwdefine seq(n){
define seq1(m,n1,n2,n3,n4){
if(m = n)
(n1 + n2 + n3 + n4)
else
seq1(m + 1,n1 + n2 + n3 + n4,n1,n2,n3)
}
seq1(6,3,2,1,0)
}
seq(10000)
1455650563828306671891266930369....
0210デフォルトの名無しさん
2014/10/05(日) 18:49:47.41ID:F9GavlsKimport itertools
for p in itertools.product(range(10),repeat=4):
s = "12313" + "".join(map(str,p))
q = [s.count(c) for c in "123"]
r = "12313" + "".join(map(str,q)) + str(len(s)-sum(q))
if s == r:
print u"この文字列には1が{}個,2が{}個,3が{}個,1から3以外の数字が{}個ある。".format(*p)
0211デフォルトの名無しさん
2014/10/05(日) 19:11:04.43ID:HGSdw7dtこれなんの言語?
0212デフォルトの名無しさん
2014/10/05(日) 21:04:57.72ID:B9z/QdJZ(defun f (s)
(apply 'format (replace-regexp-in-string "[0-9]+" "%s" s)
(let (l)
(while (string-match "[0-9]+" s)
(push (substring s (match-beginning 0) (match-end 0)) l)
(setq s (substring s (match-end 0))))
(cons (car l) (reverse (cdr l))))))
f
(f "2014-10-03 00:17:21")
"21-2014-10 03:00:17"
(f "1 2 3 4")
"4 1 2 3"
(f "a0=0;a1=1;a2=2;a3=3")
"a3=0;a0=1;a1=2;a2=3"
0213デフォルトの名無しさん
2014/10/05(日) 21:26:20.82ID:cMrw+cTXスマートでいい言語だな
0214デフォルトの名無しさん
2014/10/05(日) 21:37:32.40ID:37iiGiPwThanks. Schemeにアルゴル系言語のプリプロセッサをつけたオレオレ言語だよ。
0215デフォルトの名無しさん
2014/10/05(日) 21:38:30.69ID:2G44BZBffunction f(str) {
var re = /\d+/g;
var m = str.match(re);
var sp = str.split(re);
var ret = sp[0];
for (var i = 0; i < m.length; ++i) {
ret += m[(i === 0 ? m.length : i) - 1] + sp[i+1];
}
return ret;
}
>>209
妙に綺麗すぎて擬似コードに見える
0216デフォルトの名無しさん
2014/10/05(日) 21:52:19.32ID:cMrw+cTXなるほど
言われてみればschemeや
0217デフォルトの名無しさん
2014/10/05(日) 23:04:42.57ID:Q++s8JsP1番目を0としてn晩目を求めた
function f(n)
if n>0
a,b,c,d=big(0),big(1),big(2),big(3)
if n<5
d=[a,b,c,d][n]
else
for i=5:n
a,b,c,d=b,c,d,a+b+c+d
end
end
d
else
false
end
end
julia> f(10000)
280585667642572486081220728819105250855517778915995971777212...
0218デフォルトの名無しさん
2014/10/06(月) 06:27:21.58ID:Nbj1KoX7http://ideone.com/KtR7I9
>>111 Perl
http://ideone.com/i3knJ3
>>114 Perl
my $n = 2;
print $n << length "fuck!";
>>134 Perl
# 高階関数はセーフ?
@array[map{ -$_ } 1 .. 50];
>>147 Perl
http://ideone.com/DeRLWy
>>164 Perl
http://ideone.com/41Tb0j
>>206 Perl
http://ideone.com/INvMf8
0219デフォルトの名無しさん
2014/10/06(月) 09:40:43.22ID:+SzTN9if他の人の回答見ると落ち込むわ。。。。orz
0220デフォルトの名無しさん
2014/10/06(月) 09:49:03.45ID:77oiHa01| qib |
qib := OrderedCollection withAll: #(0 1 2 3).
qib assureUniClass class compile: 'at: idx
[idx > self size] whileTrue: [self add: (self last: 4) sum].
^super at: idx'.
(1 to: 10) collect: [:idx | qib at: idx]. "=> #(0 1 2 3 6 12 23 44 85 164) "
((qib at: 10000) asString first: 10), '...'. "=> 2805856676... "
((qib at: 9999) asString first: 10), '...'. "=> 1455650563... "
0221デフォルトの名無しさん
2014/10/06(月) 11:20:47.64ID:xPSCLTwu(defun f (n)
(let ((l (reverse (list 0 1 2 3))))
(cond ((<= n 4) (nth (1- n) (reverse l)))
(t (dotimes (i (- n 4))
(push (+ (nth 0 l)
(nth 1 l)
(nth 2 l)
(nth 3 l)) l))
(car l)))))
F
(loop for i from 1 to 10 collect (f i))
(0 1 2 3 6 12 23 44 85 164)
(length (format nil "~A" (f 10000)))
2850
(substring (format nil "~A" (f 10000)) 0 50)
"28058566764257248608122072881910525085551777891599"
0222デフォルトの名無しさん
2014/10/06(月) 12:14:12.10ID:lhFi4UPZdefine f(n){
if(n<5)return n-1
a=0;b=1;c=2;d=3
for(;n>4;n--){t=a+b+c+d;a=b;b=c;c=d;d=t}
return d
}
f(10000)
2805856676425724860812207288191052...
0223デフォルトの名無しさん
2014/10/06(月) 15:54:33.94ID:xPSCLTwu(require 'cl-lib)
cl-lib
(require 'calc)
calc
(defmath f (n)
(let ((l (reverse (list 0 1 2 3))))
(cond ((<= n 4) (nth (1- n) (reverse l)))
(t (cl-dotimes (i (- n 4))
(push (+ (nth 0 l)
(nth 1 l)
(nth 2 l)
(nth 3 l)) l))
(car l)))))
calcFunc-f
(cl-loop for i from 1 to 10 collect (calcFunc-f i))
(0 1 2 3 6 12 23 44 85 164)
(substring (let ((s (cl-loop for x in (mapcar (lambda (x) (format "%04d" x)) (reverse (cdr (calcFunc-f 10000)))) concat x)))
(let ((a (string-match "[^0]" s)))
(if a (substring s a) s))) 0 50)
"28058566764257248608122072881910525085551777891599"
0224デフォルトの名無しさん
2014/10/06(月) 16:06:14.38ID:77oiHa01| rotateNumRight |
rotateNumRight := [:str |
| others nums |
others := str findTokens: ($0 to: $9).
nums := str findBetweenSubStrs: others concatenation.
nums addFirst: nums removeLast.
str first isDigit ifTrue: [others addFirst: ''].
nums size < others size ifTrue: [nums add: ''].
(others with: nums collect: #,) concatenation as: String
].
rotateNumRight value: '2014-10-03 00:17:21'. "=> '21-2014-10 03:00:17' "
rotateNumRight value: '1 2 3 4'. "=> '4 1 2 3' "
rotateNumRight value: 'a0=0;a1=1;a2=2;a3=3'. "=> 'a3=0;a0=1;a1=2;a2=3' "
0225209
2014/10/06(月) 18:13:12.18ID:QJRx0X30間違えてたので訂正
define seq(n){
define seq1(m,n1,n2,n3,n4){
if(m = n)
(n1 + n2 + n3 + n4)
else
seq1(m + 1,n1 + n2 + n3 + n4,n1,n2,n3)
}
seq1(5,3,2,1,0)
}
seq(10000)
28058566764257248608122072.....
0226デフォルトの名無しさん
2014/10/06(月) 19:58:54.50ID:/DmKNK1Wttp://ideone.com/OV4gIE
ほぼC。なんか解けた。
どうやって解けてるか自分でも把握してないのでこのコードを流用するのはやめてください。
自己再帰的な構文って苦手だ。数学怖い。
それと、後発じゃないと俺には解けない。
食あたりでここ数日調子悪かったが、なんとか回復した。
0227デフォルトの名無しさん
2014/10/06(月) 20:38:47.71ID:77oiHa01| gettingGiftCircles |
gettingGiftCircles := [:giftPositions |
| grids rest queue |
rest := giftPositions.
grids := [
| rect points |
rect := Rectangle encompassing: rest.
points := (rect top to: rect bottom) gather: [:y | (rect left to: rect right) collect: [:x | x@y]].
points := points sort reject: [:cpt | rest noneSatisfy: [:pt | (pt dist: cpt) <= 5]]].
queue := OrderedCollection with: #()->rest.
[:exit | [queue notEmpty] whileTrue: [
queue first value ifEmpty: [exit value] ifNotEmpty: [
| circles next |
circles := queue first key.
rest := queue removeFirst value.
next := grids value detectMax: [:cpt | rest count: [:pt | (cpt dist: pt) <= 5]].
queue add: (circles copyWith: next)->(rest reject: [:pt | (next dist: pt) <= 5])]
]] valueWithExit.
queue first key].
gettingGiftCircles value: {-5@0. 5@0}.
"=> {0@0} "
gettingGiftCircles value: {0@5. 3@3. 4@4. 10@ -1. -9@0. -7@0. -6@2. 0@ -5. 3@ -3}.
"=> {0@0 . -9@ -1 . 6@0} "
gettingGiftCircles value: {-4@8. 6@8. 14@8. -12@4. 10@4. -6@0. -10@ -2. -2@ -4. 0@ -4. 8@ -4}.
"=> {-11@0 . 3@ -4 . 9@8 . -4@8} "
gettingGiftCircles value: {-7@ -15. -7@ -15. 5@ -2. 7@ -3. -8@ -10. 2@ -9. -3@ -3. -7@ -2. -10@ -9. 6@ -3. 9@ -12. 6@ -7. -1@ -5. -10@ -11. -6@ -8. -5@ -3}.
"=> {-10@ -11 . 3@ -6 . -7@ -6 . 9@ -12} "
gettingGiftCircles value: {7@4. 12@11. 11@13. 31@27. 14@15. 30@28. 34@21. 37@8. 24@27. 2@20. 20@20. 36@7. 33@21. 22@5. 15@28. 15@7}
"=> {12@11 . 30@23 . 17@24 . 32@8 . 2@4 . 2@15 . 22@5 . 24@27} "
0228デフォルトの名無しさん
2014/10/06(月) 21:45:35.42ID:tXTMbJBvusing System.Collections.Generic;
using System.Linq;
namespace Odai
{
public class OdaiUtils
{
public static IEnumerable<T> getReverseList<T>(IEnumerable<T> myList)
{
return from e in myList.Select((e, rn) => new { val = e, rownum = rn }) orderby e.rownum descending select e.val;
}
}
}
◎呼び出し例
var myList = Enumerable.Range(1, 50);
var newList = OdaiUtils.getReverseList<int>(myList);
foreach (int e in newList)
{
Console.Write(e + " ");
}
→50 49 48 47 46 〜(中略)〜 5 4 3 2 1
0229デフォルトの名無しさん
2014/10/07(火) 02:28:29.18ID:4xtgdkrlBrainfuckインタプリタを作れ
,(入力命令)はなくて良い
参考:http://ja.wikipedia.org/wiki/Brainfuck
入力:+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.
出力:Hello, world!
0230デフォルトの名無しさん
2014/10/07(火) 06:02:59.53ID:i8E0IJJ3http://ideone.com/nzxkSo
ほぼC。解けなかった。Orz
力技で解こうと思ったんだけど、どうしてもオーダー減らせなーい。
107項目まで絞ったけど、そこからどうやって絞るかアイディアなかった。
あー、悔しい。
0231デフォルトの名無しさん
2014/10/07(火) 08:29:07.42ID:i8E0IJJ3ttp://ideone.com/t4lPip
ほぼC。適当に書いた。デバッグ甘めなのでバグあるかも。
std::getの嵐になってしまった。
コンセプトは拡張重視で。
今日は限界!
0232デフォルトの名無しさん
2014/10/07(火) 09:25:14.80ID:9FR6O93mあんまり検証してないけど・・・
http://ideone.com/UJwtSp
初めてideoneとか使うので、ちゃんと貼れてるか心配・・・
◎呼び出し例
OdaiUtils.brainfuck("+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.");
→Hello, world!
0233デフォルトの名無しさん
2014/10/07(火) 16:42:57.82ID:s1tA8Egmlet get p = Map.tryFind p >> function None -> 0 | Some x -> x
let rec findEnd n = function
| xs when n = 0 -> xs
| '['::xs -> findEnd (n + 1) xs
| ']'::xs -> findEnd (n - 1) xs
| _::xs -> findEnd n xs
| [] -> []
let rec eval s h p = function
| '>'::xs -> eval s h (p + 1) xs
| '<'::xs -> eval s h (p - 1) xs
| '+'::xs -> eval s (Map.add p (get p h + 1) h) p xs
| '-'::xs -> eval s (Map.add p (get p h - 1) h) p xs
| '.'::xs -> printf "%c" <| char (get p h); eval s h p xs
| ','::xs -> eval s (Map.add p (stdin.Read()) h) p xs
| '['::xs when get p h = 0 -> eval s h p <| findEnd 1 xs
| '['::xs -> eval (xs::s) h p xs
| ']'::xs when get p h <> 0 -> eval s h p (List.head s)
| ']'::xs -> eval (List.tail s) h p xs
| _::xs -> eval s h p xs
| [] -> ()
let bf = List.ofSeq >> eval [] Map.empty 0
// Hello, world!
bf "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+."
0234デフォルトの名無しさん
2014/10/07(火) 17:25:48.51ID:9FR6O93mC#の学習も兼ねて、最高に回りくどく書いてみた
正規表現も使ってないし、入力データの解析はワンパスだし
前に書いた>>207より性能的にはちょっと工夫できてるんじゃないかと思っている
http://ideone.com/rW947J
※尚、ideoneでは.NETのバージョンの関係でコンパイルエラーが出るらしい・・・
◎呼び出し例
var instr = new string[] { "", "x", "5", "foobar", "1234", "2014-10-03 00:17:21", "1 2 3 4", "a0=0;a1=1;a2=2;a3=3" };
var outstr = from str in instr select OdaiUtils.rotateNums(str);
foreach (var str in outstr)
{
Console.WriteLine(str);
}
→
x
5
foobar
1234
21-2014-10 03:00:17
4 1 2 3
a3=0;a0=1;a1=2;a2=3
0235デフォルトの名無しさん
2014/10/07(火) 17:41:13.31ID:rBi+Udd7if ( arg === "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.")
console.log( "Hello, world!");
0236デフォルトの名無しさん
2014/10/07(火) 18:36:05.71ID:M8obcX0vhttp://ideone.com/qZ8nSK
0237デフォルトの名無しさん
2014/10/07(火) 19:20:47.05ID:raaFE9Z6| brainfuck |
brainfuck := [:prog |
| mem ptr pc moveToMatchBraceBy |
mem := Array new: 30000 withAll: 0.
ptr := 1.
pc := 0.
moveToMatchBraceBy := [:step |
| count |
count := 1.
[(prog at: (pc := pc + step)) caseOf: {
[$[] -> [count := count + step].
[$]] -> [count := count - step]
} otherwise: [].
count > 0] whileTrue].
World findATranscript: nil.
[(pc := pc + 1) <= prog size] whileTrue: [
(prog at: pc) caseOf: {
[$>] -> [ptr := ptr + 1].
[$<] -> [ptr := ptr - 1].
[$+] -> [mem at: ptr incrementBy: 1].
[$-] -> [mem at: ptr incrementBy: -1].
[$.] -> [Transcript show: (mem at: ptr) asCharacter].
[$[] -> [(mem at: ptr) = 0 ifTrue: [moveToMatchBraceBy value: 1]].
[$]] -> [(mem at: ptr) = 0 ifFalse: [moveToMatchBraceBy value: -1]]
} otherwise: []
]
].
brainfuck value: '+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..++
+.>-.------------.<++++++++.--------.+++.------.--------.>+.'
0238デフォルトの名無しさん
2014/10/07(火) 19:21:48.08ID:0fgCkF+shttp://ideone.com/LCQKdq
0239デフォルトの名無しさん
2014/10/07(火) 19:25:00.41ID:i8E0IJJ3ttp://ideone.com/vVT7Hd
ほぼC。文字処理は普段しないんで怖いです。ほらぶるほらぶる。Orz
0240デフォルトの名無しさん
2014/10/07(火) 19:27:59.55ID:C9GpiM2R俺もこういうの書けるように早くなりたい
0241デフォルトの名無しさん
2014/10/07(火) 20:14:49.00ID:i8E0IJJ3任意の1バイトをその任意のuint8を出力するブレインファックのコードに変換する。
ポイントは可読性よりもコードの短さを優先します。
input:16
output:++++[>++++<-]>.
*種明かし*
なんでこんなこと思いついたかというと、BFのOPって高々8程度じゃないですか。
バイナリを最適化されたBFのコードに変換してテキストをLZ系の圧縮をかけたら相当縮むんじゃないかと思ったんですよ。
試してないので空想ですが。暇な人誰か作ってくれませんか?
作るものは、7zipとかはライブラリ使えばいいので、BF処理系でスタックに出力して、出力をファイル化するっていう簡単なお仕事。
つまりBFのファイルジェネレータを書くだけ。あとは任意のライブラリに圧縮してもらう。辞書圧縮が望ましい。
暇な人お願いします。
0242デフォルトの名無しさん
2014/10/07(火) 22:12:58.40ID:4xtgdkrlhttp://ideone.com/I9Wph0
Haskell力が足りない
0243デフォルトの名無しさん
2014/10/07(火) 23:47:38.66ID:Wcaa5U+bfrom __future__ import print_function
def bf(src):
jmp,stk = list(src),[]
for i,c in enumerate(src):
if c == '[':
stk.append(i)
elif c == ']':
j = stk.pop()
jmp[i],jmp[j] = j,i
i,ix,R = 0,0,[0]*(src.count('>')+1)
while i < len(src):
c = src[i]
if c == '.': print(chr(R[ix]),sep='',end='')
elif c == '+': R[ix] += 1
elif c == '-': R[ix] -= 1
elif c == '>': ix += 1
elif c == '<': ix -= 1
elif c == '[' and not R[ix]: i = jmp[i]
elif c == ']' and R[ix]: i = jmp[i]
else: pass
i += 1
print()
bf("+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.")
0244デフォルトの名無しさん
2014/10/08(水) 01:57:43.28ID:N0aXwt4Hcl-lib
(defun Brainfuck (p)
(let ((i 0) (v (make-vector 30000 0)) (d 0))
(while (< i (length p))
(cl-case (aref p i)
(?> (cl-incf d))
(?< (cl-decf d))
(?+ (cl-incf (aref v d)))
(?- (cl-decf (aref v d)))
(?. (princ (format "%c" (aref v d))))
(?\[ (when (= (aref v d) 0) (let ((c 0))
(cl-loop
(cl-incf i)
(cl-case (aref p i)
(?\[ (cl-incf c))
(?\] (if (= c 0) (cl-return) (cl-decf c))))))))
(?\] (unless (= (aref v d) 0) (let ((c 0))
(cl-loop
(cl-decf i)
(cl-case (aref p i)
(?\] (cl-incf c))
(?\[ (if (= c 0) (cl-return) (cl-decf c)))))))))
(cl-incf i))))
Brainfuck
(Brainfuck "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.")
Hello, world!nil
0245デフォルトの名無しさん
2014/10/08(水) 05:46:43.74ID:3Gg8s7gO1バイトのoutputコード自体はLZ系圧縮しても1バイト超えちゃうし、
WikipediaのHello, world!は一度使った領域を再利用してるけど、
再利用可能箇所の探索はスライド辞書の探索より無茶苦茶コスト高いよね。
なんか数列を出力する式の形に圧縮できたら的な話を思い出した…
チューリング完全だし理論上はすごいかもしれんけどそこまで行き着くのは俺には無理だわ
0246デフォルトの名無しさん
2014/10/08(水) 07:54:27.91ID:TFp+gOi8とりあえず、テキストをブロックソーティングしてランレングスするところまで妄想した。
おかげさまでLZではむりだとわかったので、冗長に出力してランレングスで回収するとトントンになりそうだと感じている。
[+0.]の3文字程度で万能のバイナリを吐ける計算なので構造自体は単純。
ただ、マシンパワーを馬鹿みたいに使う。
そういう妄想をした。
まぁ、話として聞いた程度には覚えておいてください。
>>241は取り下げます。
0247デフォルトの名無しさん
2014/10/08(水) 07:57:26.61ID:TFp+gOi8ブロックソーティングとランレングスしてくれるそうなので。
0248デフォルトの名無しさん
2014/10/08(水) 08:01:15.57ID:TFp+gOi8一回、ランレングスで脳汁出してみたいんですよねぇ・・・。(汗
0249デフォルトの名無しさん
2014/10/08(水) 09:28:16.14ID:nKTyZSjw0250デフォルトの名無しさん
2014/10/08(水) 16:23:24.41ID:lqD5ceTY>バイナリを最適化されたBFのコードに変換してテキストをLZ系の圧縮をかけたら相当縮むんじゃないかと思ったんですよ。
結局同じような複雑度に収束してバイナリを直接圧縮したのと同じような
大きさに成るんじゃ無いの?
0251デフォルトの名無しさん
2014/10/08(水) 16:41:09.13ID:3Gg8s7gOBFがチューリング完全だから、例えば擬似乱数列を0.1%まで圧縮とかも不可能ではないよ。
擬似乱数列から乱数発生器を推測するアルゴリズムとか見当も付かんけど。
0252デフォルトの名無しさん
2014/10/08(水) 21:14:41.09ID:QOSwbYHc整数n(0<=n<1000000)をソロバンのAAに変換するプログラムを書け
n=9563なら
########
#oo|||o#
#||ooo|#
########
#||o|oo#
#oooo|o#
#oooooo#
#ooooo|#
#oo|ooo#
########
等幅フォントじゃないとちゃんと見れないけどごめんね
0253デフォルトの名無しさん
2014/10/08(水) 22:48:32.84ID:H7377YeAfrom __future__ import division
def display_soroban(num):
str_num = str(num).rjust(6, '0')[-6:]
col_list = [[(int(c) // 5 == 0), (int(c) // 5 == 1), (int(c) % 5 != 0), (int(c) % 5 != 1), (int(c) % 5 != 2), (int(c) % 5 != 3), (int(c) % 5 != 4) ] for c in str_num]
print('┏' + '┯' * (len(str_num)) + '┓')
for row_list in zip(*col_list)[:2]:
print('┃' + ''.join(['●' if tama else '│' for tama in row_list]) + '┃')
print('┣' + '┿' * (len(str_num)) + '┫')
for row_list in zip(*col_list)[2:]:
print('┃' + ''.join(['●' if tama else '│' for tama in row_list]) + '┃')
print('┗' + '┷' * (len(str_num)) + '┛')
◎呼び出し例
map(display_soroban, [0, 1, 9563, 123456, 999999])
→(出力を横に並べ替え)
┏┯┯┯┯┯┯┓┏┯┯┯┯┯┯┓┏┯┯┯┯┯┯┓┏┯┯┯┯┯┯┓┏┯┯┯┯┯┯┓
┃●●●●●●┃┃●●●●●●┃┃●●│││●┃┃●●●●││┃┃││││││┃
┃││││││┃┃││││││┃┃││●●●│┃┃││││●●┃┃●●●●●●┃
┣┿┿┿┿┿┿┫┣┿┿┿┿┿┿┫┣┿┿┿┿┿┿┫┣┿┿┿┿┿┿┫┣┿┿┿┿┿┿┫
┃││││││┃┃│││││●┃┃││●│●●┃┃●●●●│●┃┃●●●●●●┃
┃●●●●●●┃┃●●●●●│┃┃●●●●│●┃┃│●●●●│┃┃●●●●●●┃
┃●●●●●●┃┃●●●●●●┃┃●●●●●●┃┃●│●●●●┃┃●●●●●●┃
┃●●●●●●┃┃●●●●●●┃┃●●●●●│┃┃●●│●●●┃┃●●●●●●┃
┃●●●●●●┃┃●●●●●●┃┃●●│●●●┃┃●●●│●●┃┃││││││┃
┗┷┷┷┷┷┷┛┗┷┷┷┷┷┷┛┗┷┷┷┷┷┷┛┗┷┷┷┷┷┷┛┗┷┷┷┷┷┷┛
0254デフォルトの名無しさん
2014/10/09(木) 03:05:26.40ID:bCMMZDUFttp://ideone.com/m1O396
ほぼC。思ったより手こずったなぁ。
0255デフォルトの名無しさん
2014/10/09(木) 03:36:08.24ID:bCMMZDUF0256デフォルトの名無しさん
2014/10/09(木) 03:37:25.39ID:bCMMZDUF>>254の5の扱い逆かもしれん。
0257デフォルトの名無しさん
2014/10/09(木) 05:32:18.07ID:DYlzwy2Fhttp://ideone.com/hn2yp1
0258デフォルトの名無しさん
2014/10/09(木) 12:32:59.11ID:kVQIysa/let rec digits d n f = if d = 0 then "" else digits (d-1) (n/10) f + f (n % 10)
let soroban n =
let waku = "########\n"
let line p =
let s = digits 6 n <| fun d -> if p d then "o" else "|"
"#" + s + "#\n"
let line5 n = line <| fun d -> 0 < (d + n) % 5
waku +
line ((>) 5) + line ((<) 4) +
waku +
line5 0 + line5 4 + line5 3 + line5 2 + line5 1 +
waku
soroban 9563 |> printfn "%s" // ...
0259デフォルトの名無しさん
2014/10/10(金) 03:17:52.99ID:Nun2XnEF(require 'cl-lib)
cl-lib
(defun f (n)
(cl-flet ((g (n)
(cl-flet ((f5 (n) (if (= n 0) "o|" "|o"))
(f1 (n)
(concat
(make-string n ?o)
(make-string 1 ?|)
(make-string (- 4 n) ?o))))
(concat "#" (f5 (/ n 5)) "#" (f1 (% n 5)) "#"))))
(let* ((a (mapcar (lambda (x) (g (- x ?0))) (format "%06d" n)))
(b (append (cons "##########" a) (list "##########")))
(c (cl-loop for i from 0 to 9 collect (cl-map 'string (lambda (x) (aref x i)) b))))
(mapc (lambda (s) (princ s) (terpri)) c))))
f
(f 9563)
########
#oo|||o#
#||ooo|#
########
#||o|oo#
#oooo|o#
#oooooo#
#ooooo|#
#oo|ooo#
########
("########" "#oo|||o#" "#||ooo|#" "########" "#||o|oo#" "#oooo|o#" "#oooooo#" "#ooooo|#" "#oo|ooo#" "########")
0260デフォルトの名無しさん
2014/10/10(金) 13:26:08.39ID:CVE2jph1import Data.List
main = putStr $ soroban 9563
soroban n = unlines . transpose $ map (sorobanRow n) [0..7]
sorobanRow _ r | r == 0 || r == 7 = replicate 10 frame
sorobanRow n r =
[frame, bead(d<5), bead(5<=d), frame, bead(d5/=0), bead(d5/=1), bead(d5/=2), bead(d5/=3), bead(d5/=4), frame]
where
d = n `div` 10 ^ (6 - r) `mod` 10
d5 = d `mod` 5
frame = '#'
bead True = 'o'
bead False = '|'
0261デフォルトの名無しさん
2014/10/10(金) 23:46:06.05ID:GCchkt6tC
http://ideone.com/tO5EJy
0262デフォルトの名無しさん
2014/10/11(土) 05:08:23.24ID:VTqE+xbQ例
a(b(c(d(e(f(g(h(i(j(5963)))))))))) -> 5963
0263デフォルトの名無しさん
2014/10/11(土) 05:55:37.09ID:wleLwFF5(car(list(char-code(code-char(logxor(logior(logand(identity(*(+ 5963))))))))))
0264デフォルトの名無しさん
2014/10/11(土) 07:13:50.33ID:VTqE+xbQf =: 3 : 0
d =. 10 10$(10 5 10 5 10#'#o|o#'),(50$1 4 1 5#'|o|o'),10#'#'
'#',.(((7#10)#:y){"1 d),.'#'
)
f 9563
#########
#ooo|||o#
#|||ooo|#
#########
#|||o|oo#
#ooooo|o#
#ooooooo#
#oooooo|#
#ooo|ooo#
#########
0265デフォルトの名無しさん
2014/10/11(土) 10:31:21.64ID:Y8cQlsx6(defun f (n)
(progn (append (min (max (1- (1+ (string-to-number (number-to-string (abs (- n)))))))))))
f
(f 5963)
5963
0266デフォルトの名無しさん
2014/10/11(土) 11:05:53.71ID:Kg61NYDndef f(x):
try:return len(set(iter(list(range(eval(bin(abs(int(long(x))))))))))
except:return x,"gomennasai"
for x in (9563,1e6,1e9,"gokurosan"):print f(x)
---
9563
1000000
(1000000000.0, 'gomennasai')
('gokurosan', 'gomennasai')
0267デフォルトの名無しさん
2014/10/11(土) 11:18:39.90ID:Y8cQlsx6(defun f (x)
(progn (prog1 (append (or (and (car (list (identity (eval (quote x)))))))))))
f
(f 5963)
5963
(f "ごくろうさん")
"ごくろうさん"
(f '(5 9 6 3))
(5 9 6 3)
(f [5 9 6 3])
[5 9 6 3]
(f 'ごくろうさん)
ごくろうさん
0268デフォルトの名無しさん
2014/10/11(土) 12:58:47.03ID:zGJS7s3Luse 5.016;
eval uc lc ord chr int exp log abs scalar 5963;
0269デフォルトの名無しさん
2014/10/11(土) 15:56:04.44ID:Pyx8DXgZ5963 clone copy shallowCopy postCopy copyTwoLevel
deepCopy veryDeepCopy yourself value changed "=> 5963 "
0270デフォルトの名無しさん
2014/10/11(土) 16:11:10.96ID:N89fm/fMfunction f(x)
copy(identity(eval(int(floor(abs(exp(log(real(complex(x))))))))))
end
f(5963)
5963
0271デフォルトの名無しさん
2014/10/11(土) 20:54:35.71ID:VTqE+xbQIo> 5963 squared sqrt log exp round floor asString split last asNumber
==> 5963
0272デフォルトの名無しさん
2014/10/11(土) 21:11:18.87ID:wEjr0q+t>>262 Haskell
f x = toInteger(floor(pred(succ(id(head(tail(init(cycle(repeat x)))))))))
0273デフォルトの名無しさん
2014/10/11(土) 23:19:53.17ID:VTqE+xbQfunction f(s)
if s:match("^%d.-%D$") then
r=s:gsub("(%d+)(%D+)","%2%1"):gsub("^(.-)(%d+)$","%2%1")
elseif s:match("^%D.-%d$") then
r=s:gsub("^(.-)(%d+)$","%2%1"):gsub("(%d+)(%D+)","%2%1")
elseif s:match("^%d.-%d$") then
r=(s.."A"):gsub("(%d+)(%D+)","%2%1"):gsub("^(.-)A(%d+)$","%2%1")
elseif s:match("^%D.-%D$") then
r=("0"..s):gsub("(%d+)(%D+)","%2%1"):gsub("^(%D+)0(.-)(%d+)$","%1%3%2")
else
r=s
end
return r
end
0274デフォルトの名無しさん
2014/10/12(日) 06:06:35.98ID:Wq87Lnk/> < <. >. %: *: -: +: <: >: 5963
5963
0275デフォルトの名無しさん
2014/10/12(日) 18:56:19.80ID:lqo6RvUaC/C++では無理ゲーじゃね?
関数形式のキャストって高々4つとかしかなかった記憶が・・・。
0276デフォルトの名無しさん
2014/10/13(月) 00:41:19.33ID:3UTKMYGe次のようなスゴロクのマスの連なりを表す文字列がある
start>go 3>_>go 5>_>_>rest>back 4>go 4>_>rest>_>rest>back 2>_>_>back 6>goal
> はマスの区切り文字である
_ はイベントのないマスである
go n はnマス右へ進むイベントマスである
back n はnマス左へ進むイベントマスである
rest は1ターン消費するイベントマスである
上記のスゴロクをプレイすることを考える
プレイヤーは1ターンに1回サイコロを振り、出た目の数だけ右へ進む
進んだ先のマスにイベントがあればそれを行う
但し、イベントによる移動で移動先のイベントは発動しない
移動によりgoalを超える場合、goalで折り返す
例えばgoalより2つ手前のマスで5マス進むことになったとき、goalより3つ手前へ移動する
サイコロは一般的な6面ダイスであり、1〜6の目が一様に出る
startから始め、goalに止まるまでのターン数の期待値を求めるプログラムを書き、答えを求めよ
答えは小数点第2位まで合っていればよい
■答え合わせ
答えの小数点第3位以下を切り捨て、xx.xx形式で表したとき、
各桁の数字を足しあわせると16になります
0277デフォルトの名無しさん
2014/10/13(月) 02:28:11.25ID:FVrYA5zEttp://ideone.com/uWe9M8
愚者の方法で解いてみた。多分間違ってるが割と収束してると思う。
ただ、イベントとか適当に組んだのでバグってるかもしれん。
俺はメルセンヌツイスタないと解けないなー。
0278デフォルトの名無しさん
2014/10/13(月) 03:50:28.83ID:655T4U8j下らない言語論争がないところもイイ
0279デフォルトの名無しさん
2014/10/13(月) 04:09:28.71ID:FVrYA5zEホント、俺なんで数学わからないんだろう・・・。Orz
0280デフォルトの名無しさん
2014/10/13(月) 04:34:17.33ID:j8m5a0quhttps://ideone.com/80WOSO
lrand48を使って乱数を作ると、どうも乱数列に偏りがあるみたいで、それが結果に
結構影響するので困った。6行目で10で割ってるけど、10以外だと別の値に収束する。
メルセンヌツイスタは偉大だな
0281デフォルトの名無しさん
2014/10/13(月) 04:45:39.50ID:FVrYA5zEいや、結構いい感じですやん。
メルセンヌツイスタは、ツールとして保証があるのが強いですね。
俺、数学わからないもんで証明とか無理だから、そういう保証を強みに組むしかできません。Orz
0282デフォルトの名無しさん
2014/10/13(月) 10:34:07.79ID:lG/YIEf8http://ideone.com/xz6Roh
期待値合計が11くらいになるので、何か間違えてる。
0283デフォルトの名無しさん
2014/10/13(月) 11:25:40.27ID:25GAMVjeimport random
su56 = 'start>go 3>_>go 5>_>_>rest>back 4>go 4>_>rest>_>rest>back 2>_>_>back 6>goal'.replace('go ','+').replace('back ','-').split('>')
def f():
S = 0.0
for n in xrange(1,1000000+1):
pos,cnt = 0,0
while 1:
cnt += 1
pos += random.randint(1,6)
if pos >= len(su56): pos=len(su56)*2-pos-2
if su56[pos] == 'rest': cnt +=1
else:
if su56[pos][0] in '+-': pos += int(su56[pos])
if su56[pos] == 'goal': break
S += cnt
if n > 100000:
test = "{:.2f}".format(S/n)
if sum([int(c) for c in test if c != '.']) == 16: break
print n, test
for i in range(4): f()
---
138555 12.67
102541 12.67
146221 12.67
377373 12.67
0284デフォルトの名無しさん
2014/10/13(月) 11:28:23.29ID:lG/YIEf8http://ideone.com/2BQ7RJ
ゴールから戻ってくるところの間違いに気がついて直したものの合計14くらいなので
まだ間違えてるらしい。ギブアップ
0285デフォルトの名無しさん
2014/10/13(月) 11:36:16.15ID:lG/YIEf8http://ideone.com/cgwjef
間違いを直したら他の人たちの解答と同時くらいになった。
sum= 12.653299999999996
0286デフォルトの名無しさん
2014/10/13(月) 14:29:21.44ID:/jDoMvDq(require 'cl-lib)
cl-lib
(defun f (s)
(let ((sugoroku (split-string s ">")) (pos 0) (turns 0))
(cl-flet ((wrap (n)
(let ((len (length sugoroku)))
(if (< n len) n (- len (- n len) 2)))))
(cl-loop
(cl-incf turns)
(let* ((dice (1+ (cl-random 6)))
(s (nth (setq pos (wrap (+ pos dice))) sugoroku)))
(cond
((string= s "goal") (cl-return))
((= (aref s 0) ?g) (setq pos (wrap (+ pos (string-to-number (substring s 3))))))
((= (aref s 0) ?b) (cl-decf pos (string-to-number (substring s 5))))
((string= s "rest") (cl-incf turns))))))
turns))
f
(defun g (s n)
(format "%2.2f" (/ (floor (* (/ (cl-loop for i from 1 to n sum (f s)) (float n)) 100)) 100.0)))
g
(let ((s "start>go 3>_>go 5>_>_>rest>back 4>go 4>_>rest>_>rest>back 2>_>_>back 6>goal")
(n 1000000))
(g s n))
"12.67"
0287デフォルトの名無しさん
2014/10/13(月) 21:16:05.90ID:3hQLzYOr| map count pos N |
map := 'start>go 3>_>go 5>_>_>rest>back 4>go 4>_>rest>_>rest>back 2>_>_>back 6>goal'.
pos := 1.
count := 0.
map := (map subStrings: '>') collect: [:ss |
| inst |
(inst := (ss copyWithout: $ ) splitInteger) first caseOf: {
['go'] -> [[pos := pos + inst second]].
['back'] -> [[pos := pos - inst second]].
['rest'] -> [[count := count + 1]]
} otherwise: [[]]
].
(N := 1000000) timesRepeat: [
pos := 1.
[pos = map size] whileFalse: [
(pos := pos + 6 atRandom) > map size ifTrue: [pos := map size * 2 - pos].
(map at: pos) value.
count := count + 1
]
].
^(count / N) asFloat "=> 12.67181 "
0288デフォルトの名無しさん
2014/10/14(火) 06:50:37.14ID:LTJ8hAy/Ruby
http://ideone.com/TDnCVG
0289デフォルトの名無しさん
2014/10/14(火) 12:14:06.02ID:q+tuik1L他のサイトからコピペしてるお題もあるけどな
0290デフォルトの名無しさん
2014/10/14(火) 15:11:45.55ID:bkOHxiOY+-------+-------+-------+
| 9 . . | . 8 . | 7 4 . |
| . 8 . | 1 2 . | 5 . . |
| . . . | . . 9 | . . . |
+-------+-------+-------+
| . 9 2 | . . . | 4 . 8 |
| 5 . . | . . . | . . 1 |
| 1 . 3 | . . . | 9 6 . |
+-------+-------+-------+
| . . . | 3 . . | . . . |
| . . 6 | . 4 2 | . 7 . |
| . 3 7 | . 1 . | . . 5 |
+-------+-------+-------+
0291デフォルトの名無しさん
2014/10/14(火) 15:53:40.23ID:LTJ8hAy/連立1次方程式解いて厳密解求めると
2990673847/235901808 = 12.6776…
になった
http://ideone.com/Ty9DWi
0292276
2014/10/14(火) 16:43:51.64ID:n56qJH47私の解答より素晴らしいです
以下が用意してた解答です
次のようにして早く、精度の良い答えが得られます
マスに0ベースのインデックスを振るとし、
e[i] = iマスからgoalまでのターン数の期待値
という配列eを想定します
すると、 e[0] について次のような式が建てられます
e[0] = 1 + (e[1+3] + e[2] + e[3+5] + e[4] + e[5] + (1 + e[6])) / 6
(スゴロクのマスと見比べてみると意味がわかると思います)
同様にすべてのマスについてこのような式ができます
ゴールマスについてはすでにgoalに着いているという意味で
e[17] = 0
となります
以上を踏まえるとこの問題は
「e[0],..,e[17]についての連立方程式を解き、e[0] の具体的な値を求める」
という問題に帰着します
私は連立方程式の解法とか詳しくないので
e[0],..,e[16]の式を何度も評価し、徐々に精度を上げるというアルゴリズムを書きました
http://ideone.com/QGi1OZ
40回ほどの反復で目的の精度になりました
0293デフォルトの名無しさん
2014/10/14(火) 17:50:27.15ID:LTJ8hAy/解いてるとこ書いてないのに褒めて頂いて申し訳ないので Ruby の Matrix 使って解きました
http://ideone.com/fdULFn
0294デフォルトの名無しさん
2014/10/14(火) 18:26:26.41ID:n56qJH47http://ideone.com/CLY9S3
0295デフォルトの名無しさん
2014/10/14(火) 19:57:03.49ID:2wLt40MFhttp://ideone.com/MAx8Th
0296デフォルトの名無しさん
2014/10/14(火) 22:31:01.30ID:ugedmwIVa=パンチを出す回数
tとaが与えられた時に1秒間に何回パンチを出せるかをコードゴルフで求めよ
0297デフォルトの名無しさん
2014/10/15(水) 06:23:21.24ID:t4MHvgx0100*t*aであってる?
0298デフォルトの名無しさん
2014/10/15(水) 06:26:25.95ID:t4MHvgx0あ、違うな。
a/tか?
0299デフォルトの名無しさん
2014/10/15(水) 06:30:07.29ID:t4MHvgx0っていうか、パンチを出すのは、カウント毎なのか秒でトータルなのかよくわからんな。
マッハパンチしたいのかどうかがよくわからん。
0300デフォルトの名無しさん
2014/10/15(水) 07:55:45.39ID:t4MHvgx0わお。賢者だ!
でも愚者の方法でも大体あってて良かった。
愚者は正確な数字がわからなくて右往左往するのです。
0301デフォルトの名無しさん
2014/10/15(水) 11:27:46.33ID:RQ2MUl4Qt = 0,1
a = 3
count = 0
while 1.0 > n and a > count:
count += 1
print count // 10
0302デフォルトの名無しさん
2014/10/15(水) 11:29:14.73ID:RQ2MUl4Q0303デフォルトの名無しさん
2014/10/15(水) 11:31:12.61ID:RQ2MUl4Q0304デフォルトの名無しさん
2014/10/15(水) 15:16:49.07ID:KPuabR0Hものになるものをすきなだけ求める。
0305デフォルトの名無しさん
2014/10/15(水) 15:34:55.70ID:PeoOzmXlmain = print $ filter (\x -> base 9 x == reverse (base 10 x)) [0..10000000]
base b 0 = []
base b n = n `mod` b : base b (n `div` b)
> [0,1,2,3,4,5,6,7,8,445,313725,3454446]
効率のいい求め方がある気がする
0306デフォルトの名無しさん
2014/10/15(水) 16:46:56.90ID:DhllwyhwCで0〜435848050まで求める。
http://ideone.com/E2m2Aj
もっと速く、あるいはもっと大きな数値まで求められるようにならんかな
0308デフォルトの名無しさん
2014/10/15(水) 16:58:11.83ID:Dhllwyhw0309デフォルトの名無しさん
2014/10/15(水) 17:54:02.65ID:t4MHvgx0ほぼC。あんまりデバッグしてない。
一応uint64maxまで求めるが5秒程度経過したら打ち切るIdeon仕様。
なんか解がおかしい気がする。
0310デフォルトの名無しさん
2014/10/15(水) 22:12:28.28ID:WmYjRURJimport itertools
print ["{}(10),{}(9)".format("".join(a),"".join(reversed(a)))
for n in (2,3,4,5,6,7)
for a in itertools.product("012345678",repeat=n)
if int("".join(reversed(a)),base=9) == int("".join(a)) and int("".join(a))]
---
['445(10),544(9)', '0801(10),1080(9)', '313725(10),527313(9)', '3454446(10),6444543(9)']
0311デフォルトの名無しさん
2014/10/15(水) 23:14:54.41ID:t4MHvgx0こうか。寝不足で問題文しっかり把握してなかった。
しかし、5秒では全然求めれない。
0312デフォルトの名無しさん
2014/10/15(水) 23:42:53.33ID:ZgiM5EDM10000000.times{|e|
p e if e==e.to_s(9).reverse.to_i
}
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 445
# 801
# 313725
# 3454446
# [Finished in 9.1s]
0313デフォルトの名無しさん
2014/10/16(木) 03:19:17.26ID:ZhIzN58U#include <stdio.h>
#define BUFSIZE 10
int main(int argc, char **argv) {
char buf[BUFSIZE+1] = "8";
int i, n, d;
for (;;) {
for (i = 0; i < BUFSIZE; buf[i++] = '0') {
if (!buf[i]) buf[i] = '0';
if (++buf[i] < '9') break;
}
if (i >= BUFSIZE) break;
for (n = i = 0; buf[i]; n = n*10 + buf[i++]-'0');
for (d = 0, i--; i >= 0; d = d*9 + buf[i--]-'0');
if (n == d) puts(buf);
}
return 0;
}
---
445
0801
313725
3454446
2426472326
3066511287
(1分半くらい)
0314デフォルトの名無しさん
2014/10/16(木) 13:06:18.05ID:L9kkBSuKhttp://ideone.com/yyp91g
効率のいい方法があるのだろうけど…。
0315デフォルトの名無しさん
2014/10/16(木) 14:17:10.16ID:0k39MB0/http://ideone.com/KeXIcz
100桁まで延々と求めるすごいやつだよ
でもこの問題、そのうち必ず9進数のほうが桁長くなって
延々と解が存在するわけじゃないんだよね
1e+24くらいまで行くと9進数のほうが必ず長くなっちゃう
0316デフォルトの名無しさん
2014/10/16(木) 14:44:03.10ID:hT/TacexRubyで1.64s
http://ideone.com/paPS8k
0317デフォルトの名無しさん
2014/10/16(木) 16:07:43.71ID:je5oFobVideone で15桁まで
http://ideone.com/WGUKim
手元の環境で 18桁まで 1分弱
18桁でひとつ見つかる
102461381175475216
11〜22桁の解はたぶんこの1個だけ
0318デフォルトの名無しさん
2014/10/16(木) 22:45:42.15ID:Cf57WGfA(define (=n-rev9? n)
(equal? (string->list (number->string n))
(reverse (string->list (number->string n 9)))))
gosh> (filter =n-rev9? (iota 10000000))
(0 1 2 3 4 5 6 7 8 445 313725 3454446)
素朴すぎる。Shiroさん、スマン。
0319デフォルトの名無しさん
2014/10/17(金) 03:37:06.05ID:1nZH3cUZ勉強になった
0320318
2014/10/17(金) 17:18:21.46ID:ATjGSJUIあまりにも素朴すぎたので考えてみた。
2ケタだったら
10*n2 + n1 = 9*m2 + m1 .
n2 = m1. n1 = m2.
10*n2 + n1 = 9*n1 + n2
n1 = 9*n2/8
これの正の整数解だとn2=8 n1=9 でも、それだとm2が0~8に収まらない。
3ケタだったら
10^2*n3 + 10*n2 + n1 = 9^2*n1 + 9*n2 + n3.
80*n1n2+99*n3)/80
後知 - n2 - 99*n3 = 0
n1 = (恵で445(10)ならうまいこと整数解になることがわかるけど。
そこからどうしたものかと>>317の解答を見ているところ。今ここ。
0321318
2014/10/17(金) 17:23:37.89ID:ATjGSJUIあまりにも素朴すぎたので考えてみた。
2ケタだったら
10*n2 + n1 = 9*m2 + m1 .
n2 = m1. n1 = m2.
10*n2 + n1 = 9*n1 + n2
n1 = 9*n2/8
これの正の整数解だとn2=8 n1=9 でも、それだとm2が0~8に収まらない。
3ケタだったら
10^2*n3 + 10*n2 + n1 = 9^2*n1 + 9*n2 + n3.
80*n1 - n2 - 99*n3 = 0
n1 = (n2+99*n3)/80
後知恵で445(10)ならうまいこと整数解になることがわかるけど。
そこからどうしたものかと>>317の解答を見ている。
うまいこと考えたものだね。感心しつつ読んでる。
0322デフォルトの名無しさん
2014/10/17(金) 18:46:39.39ID:gpH8x8o+5637812464467200628880677
0323デフォルトの名無しさん
2014/10/17(金) 18:58:29.36ID:lHOpH1TH5637812464467200628880677
を9進変換すると、
77608882600276446421873650
だから、0が余分だね。
21桁の10進数
111111111111111111111
を9進変換すると、
1012241466642216866353
で、これ以上は必ず9進変換結果の方が長くなるので、
探索は20桁以内で良いはず。
0324デフォルトの名無しさん
2014/10/17(金) 19:38:50.80ID:ExqIBXoW賢者の知恵パクろうと思って頑張ったんだけど、やっぱ届かんなー。
でも9桁程度まで検索できるようになった。>>311と比べても100倍位早くなった。
ただ、普段やってる方法じゃないんで、正当性はかなり怖い。ほらぶるほらぶる。Orz
0325デフォルトの名無しさん
2014/10/17(金) 20:05:44.64ID:gpH8x8o+上のほうを見ると 801 を答えてる人が多いから、これもありと解釈した
0326318
2014/10/17(金) 22:19:32.09ID:xtMMPrCh80*n1 - n2 - 99*n3 = 0
はディオファントス方程式にならないの?
0327デフォルトの名無しさん
2014/10/18(土) 06:18:45.42ID:weybOOiBディオファントス方程式
一般解も簡単に求まる
例えば
728x + 71y - 91z - 999w = 0
の一般解は s,t,u を任意の整数として
(x,y,z,w) = (t, -9s+91u, -18s+8t+71u, s)
ただ、もとの問題は未知数の範囲に制限があるから、
上みたいな形で一般解を求めても役に立たない
結局ナップザック問題を動的計画法で解くしかないんじゃないかな
0328デフォルトの名無しさん
2014/10/18(土) 08:18:52.81ID:weybOOiBただのバックトラック
0329318
2014/10/18(土) 08:27:49.96ID:DORW4e79ありがとう。
今考えてること。k桁だとすると
(9^(k-1)-10^0)*n1 + (9^(k-2)-10^1)*n2 + (9^(k-3)-10^2)*n3 + ... + (9^0-10^(k-1))*nk = 0 .
じゃないかと考えている。係数に規則性があることを利用して計算を効率アップできないだろうか?
と考えてる。
0330318
2014/10/18(土) 08:49:11.94ID:DORW4e79自分も21ケタ以上は解が存在しないと思う。
最上位桁の係数が
gosh> (- (expt 10 20) 1)
99999999999999999999
最下位の係数が
gosh> (expt 9 20)
12157665459056928801
8をあてたとしても
gosh> (* (- (expt 9 20) 1) 8)
97261323672455430400
他のプラスになる係数をあてても0には成り得ないのではないかと思う。
0331デフォルトの名無しさん
2014/10/18(土) 09:30:52.14ID:weybOOiB801 や 5637812464467200628880677 が解かどうかは、
頭の0を許すかどうかの解釈の問題では?
あと 10**20 という10進21桁の数は、9進で
820218515128278060321
という21桁の数になるわけで、どうして21桁が排除できるのか自分にはわかりません
0332デフォルトの名無しさん
2014/10/18(土) 10:53:01.54ID:DORW4e79プログラム言語という立場なら0801を801と解釈することもアリだと思う。
21ケタというのは計算を間違えてたかも。
数学として見て最上位桁に0を許さない立場ならそのディオファントス方程式が成り立たなくなる
桁数はあると思うのだけど。0を許す立場なら解は無限にあるように思う。
まだ、検討があやふや。
0333デフォルトの名無しさん
2014/10/18(土) 11:17:52.38ID:XyqWPbHW最上位の桁が0でも10進数とみなしてなるべく大きな解を求める問題に分割してはどうでしょうか。
>>304 Emacs Lisp
(cl-loop for i from 1 to 1000000 if (let ((s (number-to-string i)))
(and (not (find ?9 s)) (= i (cl-loop for i from 0 below (length s) sum (* (- (aref s i) ?0) (expt 9 i)))))) collect i)
(1 2 3 4 5 6 7 8 445 313725)
0334デフォルトの名無しさん
2014/10/18(土) 11:54:41.46ID:sYiHg8yg0335デフォルトの名無しさん
2014/10/18(土) 13:21:49.04ID:DORW4e7922桁以上で解が存在しないと思う。
考えを書きとめたので、検証をよろしく。
http://ideone.com/OxnqSa
0336デフォルトの名無しさん
2014/10/18(土) 13:54:50.81ID:sYiHg8ygそれで今、22桁が見つかっていないなら誰が発見するかだ。
0337デフォルトの名無しさん
2014/10/18(土) 14:17:17.20ID:xHZLfbuK問題を分割するってのには賛成だが、
どちらにせよ最上位0を10進数とみなさない問題はもう掘り下げようがない気がする
>>322で5637812464467200628880677(26桁)が見つかったってことは
それ以下の桁は探索済みってことじゃないですかね
0338デフォルトの名無しさん
2014/10/18(土) 14:36:56.30ID:DORW4e79最上位0を10進数とみなさない場合でも素朴にやるとメモリ不足を
おこす問題なので、いかに効率よく全解探索をするのかという点で
相変わらずとても興味深いお題だと思います。
0339デフォルトの名無しさん
2014/10/18(土) 15:30:02.32ID:l/ZwH6UNこれの最適解
0340デフォルトの名無しさん
2014/10/18(土) 20:54:04.56ID:SS+UksSPhttp://codepad.org/LNzVeX56
0341デフォルトの名無しさん
2014/10/18(土) 21:14:35.72ID:l/ZwH6UN0342デフォルトの名無しさん
2014/10/18(土) 22:16:39.73ID:qpj5P0UN@a=<DATA>;
$n = shift @a;
for (@a) {
if (! $Ri or $_ < $Ri) {
$Ri=$_;
}
if (! $Rj or $Rj < $_) {
$Rj=$_;
}
}
say $Rj - $Ri;
__DATA__
6
2
3
1
3
4
3
0343デフォルトの名無しさん
2014/10/18(土) 22:21:42.13ID:qpj5P0UN原文に忠実にするなら、本当は一回でも安く買ってある
後に売るというifにしたほうがええのかもなとおもったが
まぁいいや
0344デフォルトの名無しさん
2014/10/18(土) 23:13:56.26ID:l/ZwH6UN>>340
正解です http://ideone.com/wpXgOQ
>>342
不正解です http://ideone.com/3a19CV
0346デフォルトの名無しさん
2014/10/19(日) 03:08:00.58ID:gAtBbPfl0347デフォルトの名無しさん
2014/10/19(日) 04:50:43.92ID:NXkPB3G9>(9^(k-1)-10^0)*n1 + (9^(k-2)-10^1)*n2 + (9^(k-3)-10^2)*n3 + ... + (9^0-10^(k-1))*nk = 0 .
>係数に規則性があることを利用して計算を効率アップできないだろうか?
ちょっと思いついたんだけど、下半分ぐらいまで合計して、上から割っていくのはどうかな。
http://codepad.org/AXvmmiFD
6桁で下3桁を725とすると、(???725)
(9^3-10^2)*7+(9^4-10^1)*2+(9^5-10^0)*5=629*7+6551*2+59048*5=312745
312745/(10^5-9^0)=312745/99999=3余り12748
12748/(10^4-9^1)=12748/9991=1余り2757
2757/(10^3-9^2)=2757/919=3余り0
で、商を順に313が上3桁。(313725)
0348デフォルトの名無しさん
2014/10/19(日) 07:02:17.65ID:taqNQMCOhttp://ideone.com/7Lu6FE
0349デフォルトの名無しさん
2014/10/19(日) 07:53:20.41ID:U1Kh10XS一般解が判明すれば、変数は0-9の範囲しか動かないので探索はかなり絞れると思うんだが違うのか。
>>327のこれでは(x,y,z,w) = (t, -9s+91u, -18s+8t+71u, s)
0<= -18s+8t+71u <= 9 だから、例えばs、tを0-9の範囲で動かして、uが範囲内で解があるかとおもうが。
0350349
2014/10/19(日) 07:54:20.93ID:U1Kh10XS0351デフォルトの名無しさん
2014/10/19(日) 08:50:44.39ID:tV8aOuZdideone のここ数日のが見られなくなってるみたいですね
頭に0を許さないときは9進22桁以上は駄目で、21桁以下は探索するしかないはずで、
その結論でいいと思います
あと、>>317(これも見られなくなってるけど)は、例えば18桁で、
c[0]*x[0] + c[1]*x[1] + … + c[17]*x[17] = 0
の解を求めるとき、c[0]*x[0] + … + c[5]*x[5] が取り得る 9**6 個の値をあらかじめ計算してるんだけど、
これを c[6]*x[6] + … + c[11]*x[11] と c[12]*x[12] + … + c[17]*x[17] についても、
それぞれ取り得る値の集合を最初に作ってしまえば、かなり高速化できる
(3個の集合からそれぞれ1個ずつ要素を取り出して、和が 0 になる組み合わせを探索するようにするということ)
コードは書きかけで、これからしばらくは作業できないけど
0353デフォルトの名無しさん
2014/10/19(日) 13:03:38.46ID:1xiAfPCShttp://ideone.com/cerWa0
0354デフォルトの名無しさん
2014/10/19(日) 22:00:29.09ID:iMj9jWpthttp://ideone.com/DCbMZd
ほぼ>>317の焼き直しなので別段優れてはいないが、せっかく書いたので
0355デフォルトの名無しさん
2014/10/20(月) 19:34:54.89ID:K7aVahi7正解です http://ideone.com/dkY80m
>>353
最適解でないとの自己申告なのとideoneでテストできないので
コードを読む限りはアルゴリズムは間違ってないので正しい結果が出ると思われます、半正解(?)ということで
0356デフォルトの名無しさん
2014/10/20(月) 20:45:01.08ID:yx3CTAmnhttp://ideone.com/akIZim
0357デフォルトの名無しさん
2014/10/21(火) 01:50:53.29ID:u6hR3S9i% cat example1.txt
6
2
3
1
3
4
3
% cat example1.txt | emacs -batch -Q --eval='(progn (require (quote cl-lib)) (let (l) (cl-loop (let ((x (ignore-errors (read)))) (if x (push x l) (cl-return))))
> (print (apply (quote max) (cl-mapcon (lambda (x) (when (cdr x) (list (- (apply (quote max) x) (car x))))) (reverse l))))))' | sed 's/Lisp expression://g'
3
0358デフォルトの名無しさん
2014/10/21(火) 02:19:00.14ID:u6hR3S9i誤 (- (apply (quote max) x) (car x))
正 (- (apply (quote max) (cdr x)) (car x))
% cat example3.txt
10
9
7
4
0
% cat example3.txt | emacs -batch -Q --eval='(progn (require (quote cl-lib)) (let (l) (cl-loop (let ((x (ignore-errors (read)))) (if x (push x l) (cl-return))))
> (print (apply (quote max) (cl-mapcon (lambda (x) (when (cdr x) (list (- (apply (quote max) (cdr x)) (car x))))) (reverse l))))))' | sed 's/Lisp expression://g'
-1
0359デフォルトの名無しさん
2014/10/21(火) 03:02:47.45ID:E3/E6gOJttp://ideone.com/ni9QYH
ほぼC。オーダーはほぼバブルソートと同じ。
最初もっとおかしなことやろうとしたんだけど、キリシマ問題と同じハマり方したので素朴にした。
っていうかこれでよかったのか!的な。後出しなので何のうまみもない・・・。Orz
あってるかな?
0360デフォルトの名無しさん
2014/10/21(火) 04:53:13.94ID:rLdpxu5/半正解・・・正しい結果を出力・最適でないアルゴリズム(最適より遅いアルゴリズム)
不正解・・・間違った結果を出力
>>356
正解です
>>358
正しい結果は出ますが最適解ではないので半正解(?)です
>>369
不正解です
0361デフォルトの名無しさん
2014/10/21(火) 04:53:42.33ID:rLdpxu5/0362デフォルトの名無しさん
2014/10/21(火) 05:17:54.92ID:E3/E6gOJ数字はあってるはずなんだけどなー。
問題の意図がよくわからん・・・。Orz
0363デフォルトの名無しさん
2014/10/21(火) 10:17:30.06ID:9YykuKSYhttp://ideone.com/BCpnAD
ただし
・「最初の行に与えられる整数 N 」は無条件に正しい入力とみなし検証しない
・整数を200000個格納可能なメモリ容量があるものとする
0364山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/10/21(火) 11:56:28.30ID:y8HpVMrW但し以下の文字の使用を禁止する
[0-9<*+]
0365デフォルトの名無しさん
2014/10/21(火) 13:56:33.93ID:UqHhNjfc0366山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/10/21(火) 13:59:37.50ID:y8HpVMrW文字列だ
0367デフォルトの名無しさん
2014/10/21(火) 14:04:05.00ID:tyo0JEbH0368デフォルトの名無しさん
2014/10/21(火) 15:43:52.78ID:kBK7Yke+'one to ten' size timesRepeat: ['a' displayNl]
http://ideone.com/7q2gav
0369デフォルトの名無しさん
2014/10/21(火) 16:03:25.63ID:bBJqZmAuPHPならこんなにきれいに早く書けるのに
0370デフォルトの名無しさん
2014/10/21(火) 16:32:30.00ID:NYSCcl7Z0371デフォルトの名無しさん
2014/10/21(火) 20:11:09.14ID:9YVE0Ywp0372デフォルトの名無しさん
2014/10/21(火) 21:00:49.45ID:PWD0fNz2'a'.hex.times{puts 'a'}
>>368 の移植(改行しないけど)
'one to ten'.size.times{'a'.display}
こういうのはどうなんだろ
'aaaaaaaaaa'.each_char{|s| puts s}
0373デフォルトの名無しさん
2014/10/21(火) 21:08:43.01ID:UqHhNjfcputchar('a');
putchar('a');
putchar('a');
putchar('a');
putchar('a');
putchar('a');
putchar('a');
putchar('a');
putchar('a');
0374デフォルトの名無しさん
2014/10/21(火) 22:35:32.31ID:kbWK9wnZ大文字のみ(小文字なら asUppercase が必要)ですが。
$A digitValue timesRepeat: [$a displayNl]
もう一つ、Ruby には(GNU Smalltalk にも)ない
ローマ数字変換を使ったこちらは Squeak/Pharo Smalltalk で実行可。
Transcript open.
'X' romanNumber timesRepeat: [Transcript cr; show: $a]
0375デフォルトの名無しさん
2014/10/22(水) 00:34:27.98ID:8cjivHZlたぶん 正解です
0376デフォルトの名無しさん
2014/10/22(水) 07:33:06.22ID:1cQ3wfaiprint map "a", "a" .. "j";
>>372 を参考に
print q.a. x hex q.a.;
0377デフォルトの名無しさん
2014/10/22(水) 17:13:46.02ID:OXQCyhg2マイナス文字自体はつかってもいいんだよね?
0378山下雄介@上級者 ◆1Bax/hBUwKIJ
2014/10/22(水) 17:30:07.10ID:4sFRuXmx0379デフォルトの名無しさん
2014/10/22(水) 17:38:44.08ID:OXQCyhg2うわ。iostream直撃なんですが、どうしろと?
http://ideone.com/8Vja7b
C++。意地で解きました。あってるかな?
マイナス記号はOKと見ました。もしかして、規則のない独自記法とかいいませんよね?
0380デフォルトの名無しさん
2014/10/22(水) 17:39:52.53ID:OXQCyhg2そりゃよかった。
0381デフォルトの名無しさん
2014/10/22(水) 17:53:48.07ID:GngiahHY回転寿司にやってきた私は、コンベア上のすべての寿司を食べて帰ることにしている
コンベアは1秒に1皿分の速度で流れ、目の前の皿を取るか取らないかを選ぶことができる
私は皿取ると同時に食べ始めるが、食べている間は次の皿を取ることができない
コンベア上の皿は、私が取る以外で勝手に追加されたり無くなったりしない
最初のコンベアの状態が次のような文字列で与えられる
"31_2"
数字(1文字)はその皿を食べ終えるのにかかる秒数を表し、_は皿がないことを表す
1文字目が私の目の前であり、1秒毎に左へ回転する
例えば、最初の皿を食べたとすると食べ終わった時の状態は以下である
"2_1_"
すべての寿司を食べ終わるまで最短何秒か求めよ
"12_3" > 6秒
"313__" > 8秒
"4_35_1264_23_434" > 60秒
"123456789123456789" > ?
0382デフォルトの名無しさん
2014/10/22(水) 18:53:57.30ID:OXQCyhg2ttp://ideone.com/UlDb0K
ほぼC。書くだけ書いたけど数字が合わないので困惑している。
まぁ、バグってても勘弁してくれ。
まぁ、条件がコンベア上の寿司がなくなるまでではなくて、あなたが喰い終わるまでなのでその誤差はあるかもね。
0383デフォルトの名無しさん
2014/10/22(水) 19:10:23.86ID:t6/wwRERコンベアが動く向きの指示が実は逆(つまり通常の寿司屋と同じく、寿司は右から来る)で、
2番目の例が "31_3__" の間違い、3番目の結果が 62 秒の間違いなら 98秒。
コンベアが動く向きには誤りはなく(つまり通常の回る寿司屋とはあえて逆設定)で、
1番目、2番目の結果がそれぞれ 9秒、10秒の間違いなら 154秒。
0384デフォルトの名無しさん
2014/10/22(水) 19:46:25.39ID:qSncMkngC言語
http://ideone.com/gnHnWr
問題の入力例と出力例がおかしくない?
0385デフォルトの名無しさん
2014/10/22(水) 20:06:12.41ID:OXQCyhg20386デフォルトの名無しさん
2014/10/22(水) 20:15:57.99ID:SZ1PSERx書いてみたけど、3番目のケースが合わない
http://ideone.com/qP8nMM
2番目のケースは、最初の皿をスルーするのが最適でしょ
0387デフォルトの名無しさん
2014/10/22(水) 20:22:00.77ID:OXQCyhg2それだと計算量馬鹿みたいに増える気がするんだが。
うほぉー。Orz
0388デフォルトの名無しさん
2014/10/22(水) 20:26:50.62ID:qSncMkng問題を正しく理解してなかったかも。ごめん・・・
0389デフォルトの名無しさん
2014/10/22(水) 20:29:37.84ID:OXQCyhg20390381
2014/10/22(水) 20:57:06.89ID:GngiahHY確認してみます
0391デフォルトの名無しさん
2014/10/22(水) 21:36:31.68ID:OXQCyhg2だみだ。そうやって普段から順番考えて食うような繊細なタイプじゃないからアイディアないわ。
力技で適当にがモットーなので難しいなぁ。
っていうか>>386が俺より上級者なので投げようと思います。Orz
std::tieにそんな使い方あるとは思いませんでした。勉強になりました。ありがとうございます。
いつもstd::get呼んでたのでgetヘルだったんだけど、なんか面白いことできそうです。
みなさんがんばってー!チアー!!(^p^)/~
0392デフォルトの名無しさん
2014/10/22(水) 22:50:38.08ID:6X1uvHzG力技ですが・・・
http://ideone.com/YbLysp
上から3ケースは例題通りの結果が得られたが
最後のケースはタイムアウト・・・ローカルで10分以上実行してるけど結果が返りません、ギブアップですわw
ちなみに最後のケースの途中経過を出力させたら今のところ最短98秒となってる
0393デフォルトの名無しさん
2014/10/22(水) 23:07:04.00ID:OXQCyhg23番の60でたのね。うーん。
自分で解くには再起構文で書かないと無理そう。
再起あんまり得意じゃないんだけども。。。
0394デフォルトの名無しさん
2014/10/22(水) 23:07:30.84ID:A/iYvioz31_2 -> _1_2 : 3を食う食べ始め1秒目
1_2_ : 2秒目
_2_1 : 3秒目 (食事中?)
2_1_ : 2の皿を取ることができる
こういうこと?
0395デフォルトの名無しさん
2014/10/22(水) 23:13:59.40ID:A/iYvioz[0] 31_2 -> _1_2 : 3を食う食べ始め1秒目
[1] 1_2_ : 2秒目
[2] _2_1 : 3秒目 (食事中?)
[3] 2_1_ -> __1_ : 2の皿を取ることができる、2を取る、食べ始め1秒目
[4] _1__ : 2秒目 (食事中)
[5] 1___ -> ____ : 1の皿を取ることができる (1秒目、食事中)
[6] ____ : 口の中からっぽ
で例題の答えは6秒?
0396デフォルトの名無しさん
2014/10/22(水) 23:18:32.95ID:6X1uvHzG最後のケース、20〜30分経ってやっと結果が返ってきた
最短98秒だそうです
0397デフォルトの名無しさん
2014/10/22(水) 23:28:13.04ID:6X1uvHzGちなみに>>392は
「1文字目が私の目の前であり、1秒毎に左へ回転する」ということで、何も取らなければ
12_3
2_31
_312
・・・
となる仮定です
逆だったら、また結果は違うと思いますが、後は任せたっ!
0398381
2014/10/22(水) 23:48:35.74ID:GngiahHY> 1秒毎に左へ回転する
というのは自分ではなくコンベア(文字列)です
>>397の解釈でOKです
>>395
31_2 についてはそのとおりです
今ひっしでプログラムの検証してます
0399デフォルトの名無しさん
2014/10/23(木) 00:03:05.15ID:0g1QUH9z残念ながらコードが酷くてとても見せられないので最短手順だけ書き出してみる
http://pastebin.com/NmntrzuA
ちなみに最後のケースでも6秒台で済んだよ
0400381
2014/10/23(木) 00:24:06.17ID:IIxcJ9PP$ time ./a.out
6
8
60
98
real 0m1.918s
user 0m1.828s
sys 0m0.000s
0401デフォルトの名無しさん
2014/10/23(木) 00:28:16.57ID:QTICJd8R123456789123456789
これだけタイムオーバーするから無理
C言語
http://ideone.com/pz6SgD
0402デフォルトの名無しさん
2014/10/23(木) 00:42:18.56ID:8j+v/8fy3番60になりました。
http://ideone.com/LechBt
>>399
マジで6秒台とかどんなマジックを1!!!1111!!!!11
賢者過ぎる。
0403デフォルトの名無しさん
2014/10/23(木) 00:43:29.53ID:8j+v/8fyほぇー。2秒ですか・・・。
0404デフォルトの名無しさん
2014/10/23(木) 01:21:42.01ID:QTICJd8Rhttp://ideone.com/y6DiZR
0405デフォルトの名無しさん
2014/10/23(木) 01:24:38.88ID:QTICJd8Rhttp://ideone.com/DBB0i1
0406デフォルトの名無しさん
2014/10/23(木) 01:25:42.10ID:QTICJd8R0407デフォルトの名無しさん
2014/10/23(木) 01:36:36.29ID:QTICJd8Rhttp://ideone.com/NM6es6
0408デフォルトの名無しさん
2014/10/23(木) 02:33:14.76ID:8j+v/8fyうげ、再起でとけてら・・・。Orz
0410デフォルトの名無しさん
2014/10/23(木) 03:16:32.58ID:QTICJd8Rhttp://ideone.com/0cji2g
0411デフォルトの名無しさん
2014/10/23(木) 04:16:53.02ID:9RlIYaUEC言語
http://ideone.com/T6F4XI
寿司が動くんじゃなくて自分が動く。
結果
"12_3" > 6秒
"313__" > 10秒
"4_35_1264_23_434" > 62秒
"123456789123456789" > 98秒
だと思うんだけど、違うかな。
0412デフォルトの名無しさん
2014/10/23(木) 04:33:34.42ID:8j+v/8fy愚直に実装するとそうなるが、>>386にある通り、2個目の例をみて、皿を初見スルーするともっと短時間で食えるようになる。
3番も60秒で食える方法があるので、まだ先があるよ。
0413デフォルトの名無しさん
2014/10/23(木) 04:41:45.04ID:LQXcUGbw0414デフォルトの名無しさん
2014/10/23(木) 04:51:16.27ID:9RlIYaUEそうですね、お邪魔しました。
0415デフォルトの名無しさん
2014/10/23(木) 05:06:28.87ID:QTICJd8R0416デフォルトの名無しさん
2014/10/23(木) 05:32:31.33ID:8j+v/8fyそう。パスした分は後に回されるので計画的に。
>>414
おう。またこいよ!
0417デフォルトの名無しさん
2014/10/23(木) 05:36:57.94ID:8j+v/8fyそんなことあるんですか・・・Orz
0418デフォルトの名無しさん
2014/10/23(木) 06:12:24.55ID:QTICJd8Rhttp://ideone.com/zmgtvk
0419デフォルトの名無しさん
2014/10/23(木) 06:47:55.70ID:0g1QUH9z6秒ってのは計算時間の話ねww
同じような総当たりで何十分とか掛かってる人を見たので
0420デフォルトの名無しさん
2014/10/23(木) 07:04:27.50ID:8j+v/8fyそうだろうけど。って俺のことかー!!!Orz
支障が無ければソースあげてくださいお願いします。刺激をください。
0421392
2014/10/23(木) 08:44:20.41ID:f1Ltbqcghttp://ideone.com/jNOBXT
>>392の修正版
全ケースまとめて5秒以内で出力できるようになったお
0422デフォルトの名無しさん
2014/10/23(木) 08:47:46.33ID:f1Ltbqcg>>421はデグってたので取り消します・・・
0423デフォルトの名無しさん
2014/10/23(木) 09:21:39.88ID:I1JmdrMq( ・ω・) < オケーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)ole mole mole
0424デフォルトの名無しさん
2014/10/23(木) 09:22:42.32ID:26o4iaD30425392
2014/10/23(木) 09:23:50.03ID:f1Ltbqcg連投スマン、>>421修正しました
http://ideone.com/jNOBXT
やっぱりそんなに早くはならなかった
最後のケースはやっぱりideoneではタイムアウトだけど、ローカルでの実行結果は約2分17秒強まで短縮できた
98
137278.852ミリ秒
0426デフォルトの名無しさん
2014/10/23(木) 09:26:28.21ID:8j+v/8fyとりあえず、一回は食べるパスを書いてみるんだ。
0427デフォルトの名無しさん
2014/10/23(木) 14:58:06.87ID:v6wc3IXJローカルPCで
# 実行結果 98
# 実行時間 69.53s
総当り&メモ化したけど、rubyじゃ遅いな・・・
http://ideone.com/DgoL6J
0428デフォルトの名無しさん
2014/10/23(木) 16:20:07.94ID:O1f8fk8F"123456789123456789" は 37.497s
open System
type KeyValue<'a,'b> = Collections.Generic.KeyValuePair<'a,'b>
let eatI xs i = let xs = Array.copy xs in xs.[i] <- 10; xs
let isEmpty xs = Array.forall ((=) 10) xs
let rec loop minTime : KeyValue<_,_> list -> _ = function
| [] -> minTime
| t_ps::xs when isEmpty t_ps.Value -> loop (min minTime t_ps.Key) xs
| t_ps::xs when minTime - 1 <= t_ps.Key -> loop minTime xs
| t_ps::xs ->
let t, ps = t_ps.Key, t_ps.Value
let i = t % ps.Length
if ps.[i] <> 10 then
if ps.[i] = Array.min ps then
loop minTime (KeyValue(t + ps.[i], eatI ps i)::xs)
else
let x1 = KeyValue(t + ps.[i], eatI ps i)
let x2 = KeyValue(t + 1, ps)
loop minTime (x1::x2::xs)
else loop minTime (KeyValue(t + 1, eatI ps i)::xs)
let eat lane =
let toPlate = function '_' -> 10 | c -> int c - 48
loop Int32.MaxValue [KeyValue(0, [|for x in lane -> toPlate x|])]
eat "12_3" // 6
eat "313__" // 8
eat "4_35_1264_23_434" // 60
eat "123456789123456789" // 98
0429デフォルトの名無しさん
2014/10/23(木) 20:54:24.79ID:0ZipcUuChttp://ideone.com/ikO1Db
# 一分ぐらい。
0430381
2014/10/24(金) 00:02:26.01ID:CjrYo0Iu全ケース(おまけ付き)をまとめて0.01sくらいで求めることが出来ます
http://ideone.com/dYyECD C++ 解説付き
http://ideone.com/PjeGIW Haskell
この問題は間違ったアルゴリズムでも正解に近い値を出せてしまい、バグがあってもわかりづらくなっています
どうやってプログラムの正当性を確認しようかと悩んだのですが、テストケースを増やすことしか思いつきませんでした
というわけで以下のケースをおまけとして実行してみました
__258___3_9________5__7__4__9______ > 99
0431デフォルトの名無しさん
2014/10/24(金) 00:19:14.71ID:En8l5okmforkしてテストケースの値変えてみたらタイムアウトした
http://ideone.com/B7pNyJ
0432デフォルトの名無しさん
2014/10/24(金) 00:58:03.86ID:tNm322eEプログラムは苦手だが。
0433381
2014/10/24(金) 01:00:57.26ID:CjrYo0Iuバグかと思って焦りましたが、計算量が爆発するケースみたいですね
気づきませんでした
987654321123456789
この987654321の降順の並びが入ってると遅くなるみたいです
0434432
2014/10/24(金) 01:50:02.69ID:tNm322eEマグロ、鮭、玉子、いくら、とあったとして。
簡単のために、2回出現のうちに必ず取るとして。
マグロに0を割り当てたら1度目で取る、1を割り当てたら2度目で取ると約束すると。
初期配置固定なら、何度目でとるかを0000、・・・、1111の2進数で表現できる。
これにもとづいて全部計算。
遅いか?
0435デフォルトの名無しさん
2014/10/24(金) 02:05:04.80ID:tNm322eE2回パスや、3回パスが正解となる問は作成可能?
0436デフォルトの名無しさん
2014/10/24(金) 02:21:31.57ID:En8l5okmテストケースの特定のパターンに依存するということですか
0437デフォルトの名無しさん
2014/10/24(金) 02:28:22.38ID:En8l5okm0438デフォルトの名無しさん
2014/10/24(金) 02:33:58.40ID:5ltRdMzyパターンを全部網羅するのは効率が悪い。
随時取っていって、それまでの最小時間を上回るのが
途中で分かったらすぐに計算打ち切りにした方が良いと思う。
組み合わせは n! (階乗)通りになるのだから
0439デフォルトの名無しさん
2014/10/24(金) 03:20:12.30ID:tNm322eE2回の出現以内で取る仮定だと。
3回の出現以内だと3^10になって効率が悪いが。
0440デフォルトの名無しさん
2014/10/24(金) 04:28:05.08ID:wiSlFvPd全部の皿の時間数合計以下にはならんのだから、理想的な最短時間は簡単に出るよな
あとはそれを満たす組み合わせを探して、無ければ+1した組み合わせを探して...
ってやっていけばどうだろ
0441デフォルトの名無しさん
2014/10/24(金) 04:57:02.17ID:En8l5okm0442デフォルトの名無しさん
2014/10/24(金) 11:05:35.08ID:cVnDUIpw1x
20x
300x
になってる時は、無条件に取っていいだろうね。
今のところ思いつくのはこれぐらい。
0443デフォルトの名無しさん
2014/10/24(金) 11:52:32.50ID:tNm322eE3 1 3 _ _ は、
1から食べ始めたら7でないのか?
1 -> 3 -> 3
0444デフォルトの名無しさん
2014/10/24(金) 11:57:01.21ID:cVnDUIpw初期状態:3 1 3 _ _
1秒後 :1 3 _ _ 3
なので、1+7=8秒かかる。
0445デフォルトの名無しさん
2014/10/24(金) 12:04:22.25ID:tNm322eE全数チェックに近い探索でこうなったんだが間違ってる?
"313__" > 7
"4_35_1264_23_434" > 56
"123456789123456789" > 93
"__258___3_9________5__7__4__9______" > 88
0446381
2014/10/24(金) 12:21:49.95ID:CjrYo0Iu誤った答えと正しい答えのギャップが大きくなるように作ってます
>>445
席は文字列の1文字目に固定です
0447デフォルトの名無しさん
2014/10/24(金) 16:50:28.89ID:cVnDUIpw"987654321123456789"を手で解いて見た。
[9,8,7,6,5,4,3,2,1,1,1,2,1,3,2,4,1,9] <---(数字nは、n回目で取るという意味)
で、解は170秒かな?
なお、手順は以下のとおり。
1.1x、20x、300xなどの取っていいものを優先。
2.ただし、上記1.の邪魔にならなければ、上記1.より左にある寿司を取っていい。
0448デフォルトの名無しさん
2014/10/24(金) 17:26:27.66ID:tNm322eE153秒となった。正しさの検証はしてない。
9->1->2->4->8->3->3->6->7->5->8->7->5->9->1->6->4->2
0449デフォルトの名無しさん
2014/10/24(金) 19:01:31.50ID:FfLoqfxf最初の数が18以下だったので、bitDPで解いてみた。
皿が無いとき('_')の処理がかなりあやしい。
IDEONE早いな、1秒以下で答えが出た。
"123456789123456789"の例は, 2^18 * 98 = 2569万回+αほど回っている
最悪は 2^n * n^2 になるのかな
このやり方では、数字19桁くらいが数秒の限界
http://ideone.com/IRcyoU
0450デフォルトの名無しさん
2014/10/24(金) 21:14:43.85ID:HKOBnLd+よくわからんけど、はえーな。
ほぇええええー。
0451デフォルトの名無しさん
2014/10/24(金) 23:46:11.07ID:s9HkY11Hしかもペースが低下しないとかフードファイターですか
0452デフォルトの名無しさん
2014/10/24(金) 23:56:09.94ID:En8l5okm0453デフォルトの名無しさん
2014/10/25(土) 02:40:13.48ID:s5oEimPTパスN回以上の最適解が存在しない、って証明がないならnPn=n!でやったほうが良いと思う。
最終的に全部の皿を食うんだから、パス回数無制限で考えるならnPnでn!
「59999_____4321」とか、5は多分4回飛ばすのが最適解。
>>440
「それを満たす組み合わせを探し」が処理の本体だからあんまり意味が無い。
探す途中で時間見て打ち切りができるけど、検証を打ち切った事のある順序を
猶予時間が違う条件で複数回調査する事になるから、効率もあまり良くない。
0454デフォルトの名無しさん
2014/10/25(土) 03:59:25.14ID:gX7iFCRG多分、同一アルゴリズム。時間食ってそうなところを改良。
Success #stdin #stdout 0.31s 3432KB
から
Success #stdin #stdout 0.19s 3432KB
になった。
http://ideone.com/EUpcxP
0455デフォルトの名無しさん
2014/10/25(土) 04:01:45.61ID:gX7iFCRGこの行の効果がわからないけど、コピーに時間食うので削ってみたら結果は一緒。
p[nx] = p[cr]; //食べない処理を含む
0456デフォルトの名無しさん
2014/10/25(土) 04:27:17.25ID:y0SFSQKU確実に正しい結果が出ることが期待されるプログラムでの結果と比較しないと怖いよな
枝刈り(?)という処理を減らした部分にバグがある可能性があるし
バグがあっても示されたテストケースのみでは答えが一致するってことは十分ありえるし
0457デフォルトの名無しさん
2014/10/25(土) 08:40:51.19ID:s5oEimPT枝刈りってのはアルゴリズム(特に探索)ではよく使う言葉だよ。
深さ優先探索で評価値が単調増加ならまず間違えないと思うけど…テストケースが不足っぽい状況が怖いのは同感だ。
0458デフォルトの名無しさん
2014/10/25(土) 11:44:27.90ID:gX7iFCRGhttp://ideone.com/9cOK40
0459デフォルトの名無しさん
2014/10/26(日) 06:18:38.95ID:chy6qwDdたとえば123と56なら123456になる。
0460デフォルトの名無しさん
2014/10/26(日) 08:27:31.17ID:TWPicZK0寿司の食べ方は分からないがそれならできる!
http://ideone.com/5SSpw8
0461デフォルトの名無しさん
2014/10/26(日) 09:26:53.01ID:E7QfrGU+1 と 9 連結したら 123456789 とかじゃないのか
0462デフォルトの名無しさん
2014/10/26(日) 12:12:40.18ID:NgES14XRRubyで。
http://ideone.com/6ecVTA
0463デフォルトの名無しさん
2014/10/26(日) 12:47:30.39ID:chy6qwDdf := method(a,b,
a * 10 ** (b log10 ceil) + b
)
Io> f(123,45)
==> 12345
Io> f(1,9)
==> 19
Io> f(2014,1026)
==> 20141026
0464デフォルトの名無しさん
2014/10/26(日) 13:32:35.69ID:Tr3nMH6Tdef f(a,b):
start,end = int(str(a)[-1]), int(str(b)[0])
step = 1 if(start <= end)else -1
print str(a) + "".join(map(str, range(start+step,end,step))) + str(b)
0465デフォルトの名無しさん
2014/10/26(日) 13:46:00.41ID:E7QfrGU+0466デフォルトの名無しさん
2014/10/26(日) 13:49:45.08ID:a0fo8RLLint concatNumber(int a, int b) {
int d = 1;
while (b / d != 0) d *= 10;
return a * d + b;
}
int main(void) {
printf("%d\n", concatNumber(123, 45));
printf("%d\n", concatNumber(1, 1));
printf("%d\n", concatNumber(59, 63));
return 0;
}
12345
11
5963
0467デフォルトの名無しさん
2014/10/26(日) 14:07:29.20ID:chy6qwDdすみません、ごめんなさい。例を間違えました。
123と56で12356になる
でした。
0468デフォルトの名無しさん
2014/10/26(日) 14:33:37.27ID:Tr3nMH6Tdef f(a,b):
print int(a*10**len(str(b))+b)
0469デフォルトの名無しさん
2014/10/26(日) 14:51:42.91ID:3PorWqf+これ以上は最適化できそうにない。
http://ideone.com/Zrfhkx
0470469
2014/10/26(日) 15:03:08.59ID:3PorWqf+答えはあってるようだが、アルゴリズムはあってるのかわかる人いる?
0471デフォルトの名無しさん
2014/10/26(日) 16:56:51.13ID:PVLuVEJittp://ideone.com/b1CkN7
ほぼC。数字には連結してない。
寿司問題難しかったなぁ。なんで1秒以内で解けるのか、賢者すげー。
動的計画法ってすごいんだな。うーん。そっと地頭を呪う。
0472デフォルトの名無しさん
2014/10/26(日) 18:05:05.46ID:P8rDdqoY0473デフォルトの名無しさん
2014/10/26(日) 18:20:07.01ID:Z+QFP9E4sub f467 { int($_[0] . $_[1]) }
0474デフォルトの名無しさん
2014/10/26(日) 18:21:35.11ID:PVLuVEJiいやー、配列のコピーめんどくさくて。
メモリ管理とかRAIIに任せた方が確実だし。
はい、ズボラーです。
0475デフォルトの名無しさん
2014/10/26(日) 18:26:22.91ID:PVLuVEJiそうすると膨大な行数になるし、サンプル向けじゃないんですよね。
0477デフォルトの名無しさん
2014/10/26(日) 18:29:28.00ID:P8rDdqoY0478469
2014/10/26(日) 18:32:49.00ID:3PorWqf+時間とコンベアを進めつつ、その時間に到達しうる寿司の取り方が存在しうる時、
今のサラをとったとしてその先を最小値で更新していくってこと。
0479デフォルトの名無しさん
2014/10/26(日) 18:54:29.14ID:PVLuVEJiファイトー。
>>477
ベクター使ってるとはいえあんまりC++っていうこーどでもないですしねぇ。
なんて言えばいいと思いますか?
0480デフォルトの名無しさん
2014/10/26(日) 19:11:09.69ID:x9wj00wxこれはそうじゃない
0481デフォルトの名無しさん
2014/10/26(日) 19:17:30.52ID:x9wj00wx部分部分のコードはCとは互換性ないコードばかりなのでこれをほぼCと呼ぶには違和感
0482デフォルトの名無しさん
2014/10/26(日) 19:26:04.80ID:USY7r1W5マルチパラダイム言語として我が道を突き進んでいる感じだから
ある意味なんでもありなのがc++っぽい
0483デフォルトの名無しさん
2014/10/26(日) 19:27:08.98ID:P8rDdqoYこれはC++11じゃないの?
0484デフォルトの名無しさん
2014/10/26(日) 19:29:08.21ID:PVLuVEJi失礼したしました
0485デフォルトの名無しさん
2014/10/26(日) 19:30:12.60ID:PVLuVEJiそういう機能も使ってますが、なんかC++っていうには何か足りない気がしてるんですよ。
おいしい所だけ摘まんで食べてる感じで。
0486デフォルトの名無しさん
2014/10/26(日) 19:42:53.96ID:P8rDdqoY> for (auto& o : Av) R.push_back(o);
って、俺はとてもCに見えない
0487デフォルトの名無しさん
2014/10/26(日) 19:49:55.92ID:wpPYehVd0488デフォルトの名無しさん
2014/10/26(日) 19:53:07.98ID:wpPYehVd0489デフォルトの名無しさん
2014/10/26(日) 19:56:26.83ID:3PorWqf+これを1秒以内にしたい。
"5988_76_54321_7234_565788939"
0490デフォルトの名無しさん
2014/10/26(日) 19:56:42.44ID:PVLuVEJiC。サンプルとして出しておきます。俺がC書くとこんな感じです。
メモリ管理やりたくないので、C++一本で行きます。
GCC怖い。メモリ破壊怖い。
>>486
今度からC++と表記することにします。ごめんね。
0491デフォルトの名無しさん
2014/10/26(日) 20:47:55.36ID:fx3FFnF6クラス作ってないだけで普通にC++だろあれは。
C++らしいってどんなコードだと思ってるのというか、
C++の機能をこれみよがしに使えば良いってもんでもないし、「C++らしい」に拘る必要はない。
0492デフォルトの名無しさん
2014/10/26(日) 20:50:46.01ID:+iDsoHsQ壁にむかってつぶやいてろ
0493デフォルトの名無しさん
2014/10/26(日) 21:16:33.47ID:chy6qwDdfunction f1(a,b)return 0 + a .. b end
function f2(a,b)
w = b
while w > 0 do
a = a * 10
w = (w - w % 10) / 10
end
return a + b
end
0494デフォルトの名無しさん
2014/10/26(日) 21:20:32.20ID:iLgrLotd( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
s、、し 、、、(((.@)m t w t f s
0495デフォルトの名無しさん
2014/10/26(日) 21:35:37.38ID:G34g15opなんでこんな簡単なのだしたの?
Scheme
(define (foo a b)
(string->number
(string-append
(number->string a) (number->string b))))
0496デフォルトの名無しさん
2014/10/26(日) 23:03:13.29ID:PVLuVEJi了解。
0497デフォルトの名無しさん
2014/10/26(日) 23:35:26.30ID:NgES14XRhttp://ideone.com/ZycO0g
0498デフォルトの名無しさん
2014/10/27(月) 00:10:43.57ID:qqJqOOtJ囚人には1からnまでの番号が割り当てられており、下記の手順で処刑を行うものとします
1. 囚人第1号から順に左から囚人を並べる
2. k回目の処刑では番号kを持つ囚人を選び、その右隣の囚人の、さらに右隣の囚人を処刑する
(ひとりおきに処刑するということ。ただし、一番右端の囚人の右隣は一番左端の囚人とする)
(また、囚人第k号が既に処刑されている場合、k+1以降の番号で最も若い番号を持つ囚人を選び、
その右隣の、さらに右隣の囚人を処刑する)
3. 囚人が処刑されて空いたスペースには右側にいた囚人が一つずつずれてスペースを埋める
4. 囚人が最後の独りになるまで上記2、3の手順をくりかえす
最後に残った囚人は恩赦されるものとします。
さて、囚人の人数nが与えられるので、最後まで生き残る囚人の番号を出力して下さい
入力: 4 、出力: 2
入力: 13、出力: ?
0499デフォルトの名無しさん
2014/10/27(月) 00:59:02.56ID:zpmVa3Ig123456789,2468,48,8
k_k_k_k_k,k_k_,k_,_
122444488
最上位ビットを持ってくるだけ。13→8
function(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}
0500デフォルトの名無しさん
2014/10/27(月) 01:03:59.87ID:Ex4pjbTm1回目の処刑、1の右の2の右の3ブッコロ
124
2回目の処刑、2の右の4の右の1ブッコロ
24
3回目の処刑、3いないので4の右の2の右の4ブッコロ
2
0501デフォルトの名無しさん
2014/10/27(月) 01:13:39.12ID:qSpzdi+uimport Data.List
main = do
print $ solve 4
print $ solve 13
print $ solve 123
solve n = execute 1 [1..n]
execute _ [x] = x
execute k ps = execute (succ k) $ delete (ps !! targetIndex) ps
where
targetIndex = (findPrisoner + 2) `mod` length ps
findPrisoner = case findIndex (k <=) ps of
Just idx -> idx
Nothing -> 0
----
4->2
13->4
123->121
13の時、処刑の順序は3,5,7,8,10,11,13,1,2,6,9,12,4
0502デフォルトの名無しさん
2014/10/27(月) 01:21:43.23ID:QRuElgFt例えばn=8のとき7回目で囚人7,8は処刑済みなので
「囚人第k号が既に処刑されている場合、k+1以降の番号で最も若い番号を持つ囚人」は存在しないことになると思うけど
どう処理すればいいの?
0503デフォルトの名無しさん
2014/10/27(月) 01:28:10.96ID:j1xfvFW3>>502と同じ疑問を持った。
Rubyで。
http://ideone.com/BKToA1
k=8 answer = [1, 6]
k=123 answer = [25, 121]
k=13 answer = [4]
0504デフォルトの名無しさん
2014/10/27(月) 01:50:52.74ID:QRuElgFthttp://ideone.com/nJqm4m
とりあえず、>>502の場合は>>503と同じように処理するようにした
ideoneの実行結果を書き写すと
k=4の場合、2
k=8の場合、1と6
k=13の場合、4
k=123の場合、25と121
ちなみにExecuteって処刑って意味があるんだな、勉強になったw
0505デフォルトの名無しさん
2014/10/27(月) 02:07:58.22ID:BaU8nQ1Thttp://ideone.com/P8Oq55
特定の番号しか助からないみたい
0506デフォルトの名無しさん
2014/10/27(月) 02:18:10.13ID:XzKSKrvp1に循環するんじゃね?おそらく
まぁ出題者が定義しなきゃならんことだけど
0507デフォルトの名無しさん
2014/10/27(月) 02:41:08.18ID:j1xfvFW3http://ideone.com/mYd1oW
以下の時のみ、1人だけ残るようだ。
n*n
n*n+1
n*n+n
n*n+n+1
0508デフォルトの名無しさん
2014/10/27(月) 03:12:53.41ID:FLzTjxn/Success #stdin #stdout 0.1s 3476KB
になった。
あとは並列化くらいしかなさげだが困難そう。
http://ideone.com/G4MbxX
0509デフォルトの名無しさん
2014/10/27(月) 09:10:56.11ID:qqJqOOtJn = 8のとき、7番の次に最も若い番号は8、8の次に若い番号は1、・・・というように循環するように考えてみて下さい
また、若い番号を選ぶとき、生き残っている囚人の中から選ぶようにして下さい。処刑済みの囚人を選んでも意味が無いので。
ちなみに、n = 8のときは6番が助かるはずです。
訂正しておわびします
0510デフォルトの名無しさん
2014/10/27(月) 09:40:42.92ID:SrWzdT6Oまず、411_とあれば、前から1秒毎のタイミングに、ABCDと名付ける
4はタイミングABCDを占有する。同様に1→B、1→C
これらをすべて足すと、A1,B2,C2,D1
この中で最大の数字は、
すべてのスシを食べ終わるまでの必要な回転数を表す
つまり、2回転する
ABCD
411_
1221→回転数
最大の数字が、2つ以上ある場合は(この例ではBC)、
最後のタイミング(C)に着目する
そしてそのタイミング(C)を含むスシを、
最も早く食べ終わるようにする
この例では、ACの内、AはDまで、CはCまで存在するので、
Cを最後に食べた方が早く終わる
つまり、7秒。ABCの順に食べる
ABC
411
222→回転数
この例では、(4はタイミングABCAと、Aを2回数えるが、)
タイミングCを含むスシに着目し、
ACの内、AはAまで、CはCまで存在するので、
Aを最後に食べると、BCAの順では、
3回転目に入って7秒となり、2回転とは矛盾するため、
例外的に、Cを最後に食べて6秒。ABCの順に食べる
0511デフォルトの名無しさん
2014/10/27(月) 10:13:54.22ID:j1xfvFW3Rubyで。
http://ideone.com/d9sn3g
実行結果:
input = 13 answer = [4]
input = 8 answer = [6]
input = 0 answer = []
input = 123 answer = [121]
0512510
2014/10/27(月) 10:27:18.16ID:SrWzdT6O>Aを最後に食べると、BCAの順では、
>3回転目に入って7秒となり、2回転とは矛盾するため、
>例外的に、Cを最後に食べて6秒。ABCの順に食べる
Aを最後に食べると4秒となり、
Cが2回転する、6秒よりも少なくなり矛盾するため、
(最低でも6秒以上かかることは明らかなので)
例外的に、Cを最後に食べて6秒。ABCの順に食べる
0513510
2014/10/27(月) 12:41:18.09ID:SrWzdT6O123456789123456789
555555555555555555→回転数
最後の問を紙面上で手計算したら、すべてが5回転となり、
Rを含むスシで、最も早く食べ終わるのは、
Nを最後に食べて90秒となる
もし最後にRを食べれば98秒だが
漏れの考え方のどこかに、間違いがあるかな?
0514510
2014/10/27(月) 12:50:46.23ID:SrWzdT6O90秒ならピッタリ、1秒も休まずに、
食べ続けなければならないから、無理なのか?
0515510
2014/10/27(月) 13:01:18.20ID:SrWzdT6O123456789123456789
555555555555555555→回転数
出来るかどうか、最後から、N5,G7,Q8と手計算で、
最初までさかのぼってみます
0516510
2014/10/27(月) 13:16:48.54ID:SrWzdT6ON5,G7,Q8,M4,K2,J1,
E5,P7,H8,D4,B2,A1,
N5となり重複でダメ。90秒では無理でした
0517デフォルトの名無しさん
2014/10/27(月) 13:43:53.04ID:RqlTRjFUttp://ideone.com/q1T21C
C++。組み込み関数使ったらあっさりできて拍子抜け通り越して大丈夫か?って感じ。
そんなコードで大丈夫か。ホント大丈夫か!?
0518デフォルトの名無しさん
2014/10/27(月) 14:05:30.45ID:FLzTjxn/222654322
0519デフォルトの名無しさん
2014/10/27(月) 14:43:44.00ID:RqlTRjFU54であってる?
0520デフォルトの名無しさん
2014/10/27(月) 14:52:50.94ID:RqlTRjFU0521デフォルトの名無しさん
2014/10/27(月) 16:02:25.45ID:QRuElgFt>>509の仕様に修正した
http://ideone.com/nJqm4m
ideoneの実行結果を書き写すと
k=4の場合、2
k=8の場合、6
k=13の場合、4
k=123の場合、121
0522デフォルトの名無しさん
2014/10/27(月) 16:06:28.38ID:qqJqOOtJ皆さん正解ですね。さすがです。
思いつくままに作った問題だったから簡単だったかな。
0523デフォルトの名無しさん
2014/10/27(月) 17:19:30.93ID:pFvWcM7sRange
f := method(n,
a := 1 to (n) asList
for(k, 1, n - 1,
p := a select(v, v < k) size
a removeAt((p + 2) % a size)
)
a first
)
Io> f(4)
==> 2
Io> f(8)
==> 6
Io> f(13)
==> 4
Io> f(123)
==> 121
0524デフォルトの名無しさん
2014/10/27(月) 18:38:13.58ID:k2jh/4qFhttp://ideone.com/HfOzdj
0525デフォルトの名無しさん
2014/10/27(月) 20:23:43.17ID:z4jaAcaoR言語かつ再帰関数
http://ideone.com/lXfQF6
0526デフォルトの名無しさん
2014/10/27(月) 22:34:18.25ID:K9o3lEDr0527デフォルトの名無しさん
2014/10/27(月) 22:36:51.57ID:yx+oFKKTsay 123 . 56;
あるいは
say 123, 56;
とか。数値を文字列としても扱えるから…
0528デフォルトの名無しさん
2014/10/27(月) 23:37:07.94ID:GV1Ac98A>>517を見ていたら一般解を求められるようなので C にて
http://ideone.com/ynErn6
0529デフォルトの名無しさん
2014/10/28(火) 00:08:28.34ID:OyTPqxJU1234 -> 124 -> 24 -> 2
12345 -> 1245 -> 124 -> 14 -> 1
123456 -> 12456 -> 1246 -> 246 -> 46 -> 4
1234567 -> 124567 -> 12467 -> 1246 -> 246 -> 26 -> 2
12345678 -> 1245678 -> 124678 -> 12468 -> 1246 -> 146 -> 16 -> 6
123456789 -> 12456789 -> 1246789 -> 124689 -> 12469 -> 2469 -> 469 -> 49 -> 4
0530デフォルトの名無しさん
2014/10/28(火) 00:35:32.17ID:OyTPqxJU処理コスト度外視
Java
http://ideone.com/tbPo9w
0531デフォルトの名無しさん
2014/10/28(火) 00:46:49.03ID:/gCxd/Pw鮮明眼!
0532510
2014/10/28(火) 00:51:55.26ID:nIBZ+v+uABCDEFGHIJKLMNOPQR (18コ)
123456789123456789
555555555555555555→回転数
最後の問を紙面上で手計算したら、すべてが5回転となり、
Rを含むスシで、最も早く食べ終わるのは、
N5を最後に食べて90秒となるが、これは無理でした
もし最後にR9を食べれば98秒ですが、
それ以外に、最後がO6なら92秒、P7なら94秒、Q8なら96秒で、
終わることは無理でしょうか?
0533デフォルトの名無しさん
2014/10/28(火) 07:21:52.28ID:mh0S7TxZちゃんと読んでないけど、例外が有るって事はアルゴリズムとして完成してないと思う
>>532
既存回答にぶち込んでみりゃいいじゃん、98秒だよ
0534デフォルトの名無しさん
2014/10/28(火) 12:59:22.99ID:TP5uYpuRxxxxxxxxxx
oooxxxxxxx
oooxxxooxx
xxxxxxooxx
xxxxxooxxx
[ [1,0], [1,2], [2,2], [2,0], [1,0] ]
[ [4,5], [4,6], [2,6], [2,7], [3,7], [3,6], [4,6], [4,5] ]
0535デフォルトの名無しさん
2014/10/28(火) 14:52:29.41ID:tsbsNhbShttp://ideone.com/tkKhkX
この手の問題は綺麗にかけなくて辛い
0536デフォルトの名無しさん
2014/10/28(火) 15:13:42.13ID:OyTPqxJU0537デフォルトの名無しさん
2014/10/28(火) 20:38:20.83ID:jVTnh4rL( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
2、、し 、、、(((.@)3 5 7 11 13 17
0538デフォルトの名無しさん
2014/10/28(火) 22:14:08.03ID:uvfLqTRT自然対数の底 e を小数点以下 5000 桁求めよ
0539デフォルトの名無しさん
2014/10/29(水) 01:21:05.34ID:1dL6x9QHhttp://ideone.com/deUdqS
0540デフォルトの名無しさん
2014/10/29(水) 01:30:28.70ID:vxICmKNIhttp://ideone.com/qpv2yQ
0541デフォルトの名無しさん
2014/10/29(水) 13:38:42.23ID:4RRnfYb9N銀行は現在の硬貨の発行を止め、現在とは異なる貨幣価値を持つ硬貨の発行を検討している
というのも、499円の商品をお釣りのないように購入するために、
最低でも100円玉4枚 + 50円玉1枚 + 10円玉4枚 + 5円玉1枚 + 1円玉4枚の計14枚も
硬貨が必要であることを不便だと考えたからである
そこで、1,2,...,780円の商品を購入する場合において最大でも9枚の硬貨で事足りるように硬貨価値を決定したい(もちろんお釣りのないようにである)
また、硬貨の種類は増やさず、6種類を維持するものとする
上記の条件を満たすような硬貨価値の組をすべて列挙せよ
■ダメな例
硬貨価値の組 : 1円,3円,9円,30円,90円,300円
779円の商品を購入するとき、最低でも
300円玉2枚 + 90円玉1枚 + 30円玉2枚 + 9円玉3枚 + 1円玉2枚
の計11枚の硬貨が必要であり、9枚以下の条件を満たさない
■想定実行時間 : 1分
0542デフォルトの名無しさん
2014/10/29(水) 17:32:52.38ID:JUluSNYEこういう、コンビネーションの問題はC++は苦手です。
順列しかないので780!って馬鹿みたいな処理量になるので、コンビネーション関数がほしい所です。
0543デフォルトの名無しさん
2014/10/29(水) 18:25:43.96ID:pqipUbgZ0544デフォルトの名無しさん
2014/10/29(水) 19:04:11.79ID:JUluSNYE配列のコンビネーションを回してほしいということです。
std::next_permutationという関数があるんですよ。順列回してくれるんですけどね。
それのコンビネーション版があればなー。という話です。
0545デフォルトの名無しさん
2014/10/29(水) 19:05:57.26ID:TgghxHIi0546デフォルトの名無しさん
2014/10/29(水) 19:06:34.78ID:JUluSNYE0547デフォルトの名無しさん
2014/10/29(水) 19:13:29.92ID:JUluSNYEttp://ideone.com/7CIxAD
C++。こういうコードを書いてみました。が発見できず。
これあってるのかちょっとよくわからんなー。
チェック関数間違えてるかもしれん。誰かデバッグして!お願いプリーズ。
0548デフォルトの名無しさん
2014/10/29(水) 20:11:00.17ID:JUluSNYEちょろっといじったらイデオンでタイムアウトした。
0549デフォルトの名無しさん
2014/10/30(木) 02:21:29.52ID:c6inW4Me探索範囲狭いけど、かなり見つかる
http://ideone.com/tzeJd8
全部探索したら何千、何万とかいきそうだけど、勘違いしてる?
0550541
2014/10/30(木) 02:53:53.44ID:T6lP2S6Uしてました
ご指摘ありがとうございます
挑戦していただいた方、大変失礼しました
>>541は忘れて下さい
0551デフォルトの名無しさん
2014/10/30(木) 23:14:27.81ID:EjjZmYZS( ˘ ω˘) < スヤァ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)ww、w、、www、、
0552デフォルトの名無しさん
2014/10/31(金) 00:03:34.17ID:uLzIjtD6多分スイートスポットがあるんだよ。
大きなお金で大半削って小さなお金で微調整だから。
0553デフォルトの名無しさん
2014/10/31(金) 00:16:29.43ID:8Uf3xK8Dそういうコードをサクっと書いてしまうとかマジすげえな
0554デフォルトの名無しさん
2014/10/31(金) 00:54:35.83ID:RMRbc5Qb数値は自然数のみ、演算子は+-*/のみである
演算子の優先順位と結合性により、括弧が必要ない場合は省略すること
入力: * + 0 1 - 4 / 6 2
出力: (0+1)*(4-6/2)
入力: * / 8 4 / 9 3
出力: 8/4*(9/3)
入力: - - 1 2 - 3 4
出力: 1-2-(3-4)
入力: + * * 1 2 3 / + 5 6 - - 8 7 * 2 1
出力: 1*2*3+(5+6)/(8-7-2*1)
0555デフォルトの名無しさん
2014/10/31(金) 01:06:48.61ID:8Uf3xK8Dで括弧の省略に必要な演算子の優先順位はどうなってるの?
その情報がないと括弧省略できないじゃん
0556デフォルトの名無しさん
2014/10/31(金) 01:12:55.87ID:RMRbc5QbC言語と同等です
0557デフォルトの名無しさん
2014/10/31(金) 01:25:30.12ID:bPYHzZZn0558デフォルトの名無しさん
2014/10/31(金) 01:33:06.60ID:0fzkhfga>出力: 8/4*(9/3)
出力: 8/4*9/3
でOK?
0559デフォルトの名無しさん
2014/10/31(金) 02:03:58.37ID:RMRbc5Qb演算の結果としては同じなので、数学なら括弧を外すことができるかもしれませんが
演算の順序が異なってしまうのでなしでお願いします
0560デフォルトの名無しさん
2014/10/31(金) 03:03:12.28ID:h7ZI8+Glhttp://ideone.com/G7ndPJ
0561デフォルトの名無しさん
2014/10/31(金) 03:07:18.85ID:PyU9LtcSすげぇけど、>>552の言うところのスイートスポットをハードコーディングしてるみたいよ?コレ
0562デフォルトの名無しさん
2014/10/31(金) 03:24:24.28ID:h7ZI8+Glhttp://ideone.com/En8CCa
探索範囲広げたやつだけど、これで30分くらい走らせると1万通り以上見つかる
出力眺めてると、もっと範囲を広げればもっと見つかりそうに見える
0563デフォルトの名無しさん
2014/10/31(金) 03:43:21.87ID:KaE7v9P9という条件で、Nの最大値を求める問題にするのは?
6枚だと780が最大?
0564デフォルトの名無しさん
2014/10/31(金) 04:13:38.79ID:bPYHzZZn要はポーランド記法を中置記法に直したものをもう一度ポーランド記法に戻したときに元のポーランド記法と一致すりゃいいってことだろ?
0565デフォルトの名無しさん
2014/10/31(金) 04:16:54.99ID:bPYHzZZnAssert Input === Infix2Polish(Output)
こんな感じか?
0566デフォルトの名無しさん
2014/10/31(金) 04:31:51.75ID:h7ZI8+Gl>>562 の範囲で調べると
1, 3, 10, 32, 82, 281
で N = 1057
0567デフォルトの名無しさん
2014/10/31(金) 11:17:21.17ID:9/yMp4aalet bind p f xs = let x,xs = p xs in f x,xs
let pipe2 p1 p2 f xs = let x1,xs = p1 xs in let x2,xs = p2 xs in f x1 x2, xs
let rec lit = function
| x::xs when '0' <= x && x <= '9' -> string x, xs
| xs -> bind add (sprintf "(%s)") xs
and mul = function
| '*'::xs -> pipe2 mul lit (sprintf "%s*%s") xs
| '/'::xs -> pipe2 mul lit (sprintf "%s/%s") xs
| xs -> lit xs
and add = function
| '+'::xs -> pipe2 add mul (sprintf "%s+%s") xs
| '-'::xs -> pipe2 add mul (sprintf "%s-%s") xs
| xs -> mul xs
let printExpr = Seq.filter ((<>) ' ') >> Seq.toList >> add >> fst >> printfn "%s"
printExpr "* + 0 1 - 4 / 6 2" // (0+1)*(4-6/2)
printExpr "* / 8 4 / 9 3" // 8/4*(9/3)
printExpr "- - 1 2 - 3 4" // 1-2-(3-4)
printExpr "+ * * 1 2 3 / + 5 6 - - 8 7 * 2 1" // 1*2*3+(5+6)/(8-7-2*1)
0568デフォルトの名無しさん
2014/10/31(金) 12:05:44.60ID:7piFiI/wソースコードぐっちゃぐちゃだけど、とりあえず・・・
http://ideone.com/6lOI0t
キレイに出来たら更新しまふ
0569デフォルトの名無しさん
2014/10/31(金) 12:50:54.90ID:+z4GttV9http://ideone.com/6QNaon
0570デフォルトの名無しさん
2014/10/31(金) 20:06:28.80ID:QPjal7aPただしループは禁止とする
0571デフォルトの名無しさん
2014/10/31(金) 20:07:10.45ID:QPjal7aP0572デフォルトの名無しさん
2014/10/31(金) 20:48:15.07ID:/oqlxorAそれ算数だから
0573デフォルトの名無しさん
2014/10/31(金) 21:00:15.09ID:qzXnBU4c0574デフォルトの名無しさん
2014/10/31(金) 21:44:42.42ID:kmZP7VPy高校1年生レベルの数学。
0575デフォルトの名無しさん
2014/10/31(金) 21:49:46.46ID:kmZP7VPyn(A) + n(B) - n(A∩B)
でokだろうが。
問題(文の表現)が良くないね。n(A∪B∪C)を求めさせたいんだろうけど。
0576デフォルトの名無しさん
2014/10/31(金) 22:07:50.38ID:q7CU3Bn30577デフォルトの名無しさん
2014/10/31(金) 22:14:08.28ID:75VYvhjn0578デフォルトの名無しさん
2014/10/31(金) 22:15:06.77ID:+z4GttV9http://ideone.com/dXGgn3
0579デフォルトの名無しさん
2014/10/31(金) 22:19:00.97ID:/oqlxorA解答はしてるよ
0580デフォルトの名無しさん
2014/10/31(金) 22:42:40.11ID:hGenexJ6> ( 166*(3+3*166)+100*(5+5*100)+55*(9+9*55) )/2
[1] 80693
0581デフォルトの名無しさん
2014/10/31(金) 22:55:39.12ID:yKH3ri/ahttp://ideone.com/DnQ0l9
0582デフォルトの名無しさん
2014/10/31(金) 23:07:58.14ID:qzXnBU4c集合表記を使えばそりゃ高校数学になるが、中学校でもこれくらいの問題の解き方は教える
0583デフォルトの名無しさん
2014/10/31(金) 23:56:56.23ID:0fzkhfga数列の長さ(100000〜1000000)、数列の順に与えられるので、
その数列に含まれない自然数のうち最小のものを求めよ。
ここで自然数とは、0,1,2,...であるとする。
また、ソートを使わないものとする。
入力例1:
4
3,0,2,7
入力例2:
1000000
72,3,1,0,1,65,......
0584デフォルトの名無しさん
2014/11/01(土) 00:01:47.80ID:Gn0IYvWG3集合のは教えない。せいぜい2集合までだろう。
0585デフォルトの名無しさん
2014/11/01(土) 00:09:05.90ID:XP9gaYOyメモリビットマップが最速かな
0586デフォルトの名無しさん
2014/11/01(土) 00:17:55.44ID:oShYnEnMどういうこと?バケットソートを使うの?
0587デフォルトの名無しさん
2014/11/01(土) 00:20:43.16ID:Zo8J/0CE0588デフォルトの名無しさん
2014/11/01(土) 00:23:17.02ID:XP9gaYOy>>587の言うとおり。
素数などを求めるエラトステネスのふるいに似ているというか
0589デフォルトの名無しさん
2014/11/01(土) 00:25:13.34ID:oShYnEnM自然数って上限値が書かれてないけどその手法大丈夫なの?
0590デフォルトの名無しさん
2014/11/01(土) 00:26:29.74ID:XP9gaYOyそうだね。
俺はうかつだった。
0591デフォルトの名無しさん
2014/11/01(土) 00:27:04.75ID:oShYnEnM0592デフォルトの名無しさん
2014/11/01(土) 00:30:00.14ID:oShYnEnM0593デフォルトの名無しさん
2014/11/01(土) 00:32:24.74ID:XP9gaYOy保障しない方が面白いような
0594デフォルトの名無しさん
2014/11/01(土) 00:41:51.64ID:Gn0IYvWG全然保障されてない
0595デフォルトの名無しさん
2014/11/01(土) 00:45:56.38ID:oShYnEnM数列が1000000個なら1000000以下の自然数のどれかでしょ
1000001以上の自然数は問題の最小値にはなりえないのだから
0596デフォルトの名無しさん
2014/11/01(土) 00:50:54.13ID:Gn0IYvWG数列が1000002〜2000001の自然数だったら?
0597デフォルトの名無しさん
2014/11/01(土) 00:51:42.31ID:oShYnEnM1000000個の内、0〜999999の数字が1個以上欠けてたら、欠けてるの数字の最小の数
1000000個のうち、0〜999999の数字が1個も含まれてないのなら最小値は0
だよ
0598デフォルトの名無しさん
2014/11/01(土) 00:52:51.79ID:oShYnEnMその場合は最小値は0でしょ
数列の中に”含まれない自然数”の最小値なんだから
0599デフォルトの名無しさん
2014/11/01(土) 00:56:54.94ID:oShYnEnM0600デフォルトの名無しさん
2014/11/01(土) 00:59:06.02ID:Gn0IYvWGスマン、確かにその通りだね。最大値と取り違えてた。
0601デフォルトの名無しさん
2014/11/01(土) 01:09:29.32ID:5+XUKxyu0602デフォルトの名無しさん
2014/11/01(土) 01:39:51.02ID:Gn0IYvWG俺出題者と違うけど
0603デフォルトの名無しさん
2014/11/01(土) 10:34:01.89ID:fztHcu0w例1:14,17,50,25,29,85,89,145,190,730,730,...
例2:59,106,217,352,160,217,352,160,...
この操作によるループ(上記の例では[730],[160,217,352])を好きなだけ求めよ。
0604デフォルトの名無しさん
2014/11/01(土) 13:07:09.21ID:fztHcu0w例1:14,17,50,25,29,85,89,145,190,730,370,370...
ループは[370]でした。
0605デフォルトの名無しさん
2014/11/01(土) 13:58:58.45ID:56WG5zLv>>583 C++
http://ideone.com/JT8nho
ちょっと桁少ないけどテストデータ
http://ideone.com/cI7mxH
0606デフォルトの名無しさん
2014/11/01(土) 16:39:33.53ID:SLozeSJ0$N = 14; #59;
use feature qw(say);
use List::Util qw(sum);
until (exists $h{$N}) {
$h{$N} = 1;
push @a, $N;
$k = length $N;
$N = sum map {$_ ** $k} split '', $N;
}
say join ',', @a;
0607デフォルトの名無しさん
2014/11/01(土) 17:41:04.97ID:NWvPyPI30608デフォルトの名無しさん
2014/11/01(土) 17:51:01.05ID:6pc74ukR($a, $b) = <>;
($a, $b) = ($b, $a);
say "$a, $b"
実行例
$ echo 1,2 | perl 5_607.pl
2, 1
簡単すぎな稀ガスるが、何かオレ意味を取り違えた?
0609デフォルトの名無しさん
2014/11/01(土) 17:53:15.28ID:6pc74ukRごめんevalが抜けてた。
($a, $b) = eval <>;
($a, $b) = ($b, $a);
say "$a, $b"
0610デフォルトの名無しさん
2014/11/01(土) 18:09:56.72ID:iW3/zCCJ四角形Sの左上の角Kの座標X, Yと縦H横W。
A, Bの座標と、Kの座標・縦横の長さを適当に決めて、LとSが交差していたら1、交差していなければ0を出力せよ。
0611デフォルトの名無しさん
2014/11/01(土) 18:10:35.87ID:tkbX0ssuやっとできた
R
http://ideone.com/uYKsR9
0612デフォルトの名無しさん
2014/11/01(土) 18:16:01.23ID:fq7f8slFhttp://ideone.com/yqayF3
0613デフォルトの名無しさん
2014/11/01(土) 18:34:42.91ID:8otLHyfoお題:じゃんけんプログラムを作る
相手の出す手を予想する単一のプログラムを作成する
下記の対戦相手とじゃんけんを繰り返し行い
勝率が99%以上になるまでの対戦回数の少なさを競う
※最低でも同一相手との対戦は3回はしないといけないものとする
対戦相手1:
グー → (最初に戻る)
対戦相手2:
グー → チョキ → パー → (最初に戻る)
対戦相手3:
パー → パー → チョキ → パー → グー → グー → グー → (最初に戻る)
対戦相手4:
チョキ → パー → パー → チョキ → グー → チョキ → パー → グー → グー → グー → (最初に戻る)
0614デフォルトの名無しさん
2014/11/01(土) 18:42:39.55ID:/9f2fySD0615613
2014/11/01(土) 21:35:43.90ID:8otLHyfoもうちょっと練ってみます
>>614
例えばアットランダムに手をだしたら33%程度の勝率なので、
固定的な手を出す相手に対していかに素早く勝利を上昇させるか・・・という考えでしたが
なにか勘違いしてましたかね?
0616デフォルトの名無しさん
2014/11/01(土) 21:41:35.80ID:/9f2fySDすまぬ
0617デフォルトの名無しさん
2014/11/01(土) 21:51:42.85ID:pFRJeQaQ俺が速攻コード書くとお前らの議論が見れないことが分かったのでしばらく休止する。
コード間違ってても指摘してくれんし地頭鍛えるためにもっと喋ってくれ。
んじゃまた。
0618デフォルトの名無しさん
2014/11/01(土) 23:01:25.89ID:W6WLiHv3Rubyで。
http://ideone.com/74dHkk
0619デフォルトの名無しさん
2014/11/01(土) 23:22:42.25ID:/9f2fySD0620デフォルトの名無しさん
2014/11/01(土) 23:30:06.57ID:He9Dns4q0621デフォルトの名無しさん
2014/11/01(土) 23:46:17.60ID:rrIYqfYy全部1になるはずだけど0が混じってる
a=[0, 0, 0, 100, 0, 0, 100, 100] # 0
a=[100, 0, 100, 100, 0, 0, 100, 100] # 0
a=[0, 0, 100, 0, 0, 0, 100, 100] # 1
a=[0, 100, 100, 100, 0, 0, 100, 100] # 1
a=[1, 1, 9, 9, 0, 0, 100, 100] # 1
0622デフォルトの名無しさん
2014/11/01(土) 23:47:16.26ID:pFRJeQaQ0623デフォルトの名無しさん
2014/11/01(土) 23:53:20.25ID:rrIYqfYy0624デフォルトの名無しさん
2014/11/01(土) 23:59:08.14ID:/9f2fySD全部は1にならないんじゃね
四角形は幅と高さだから右辺と下辺のは99の位置の直線のはず
a=[100, 0, 100, 100, 0, 0, 100, 100] # 0 これは0で正しい
a=[0, 100, 100, 100, 0, 0, 100, 100] # 1 これは1が間違いで0が正しい
0625デフォルトの名無しさん
2014/11/02(日) 00:02:44.10ID:pFRJeQaQ0626片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/02(日) 00:05:15.19ID:o1wy83SR(i)日時に時間を足したものを求める。
(ii)二つの日時の差を求める。
※日時データはYYYYMMDDhhmmss形式の文字列で与えられる。時間データは秒数とする。
0627デフォルトの名無しさん
2014/11/02(日) 00:18:25.02ID:cD/GWeVk対戦相手の初手は必ずその左端の手なの?
0628デフォルトの名無しさん
2014/11/02(日) 00:18:57.41ID:cD/GWeVk対戦相手はどのようにして選ばれるの?
0629デフォルトの名無しさん
2014/11/02(日) 00:20:37.83ID:cD/GWeVk交差というのは
ディスプレイで例えるなら画面上の同一ドット上に描画ということ?
0630デフォルトの名無しさん
2014/11/02(日) 00:22:08.97ID:cD/GWeVk変数の型が異なる場合も想定したほうがいいの?
0631デフォルトの名無しさん
2014/11/02(日) 00:26:25.66ID:cD/GWeVkループを好きなだけ求めよってどういうこと?
0632デフォルトの名無しさん
2014/11/02(日) 00:35:53.79ID:H1LxJTNx100も含まれるよ
Ax,Ay=0,1
Bx,By=1,1
Kx,Ky=0,0
Kw,Kh=1, 1で考えてみて
0633603
2014/11/02(日) 00:36:16.38ID:P2oj7pBxありがとうございます。
>>631
370,370,...や160,217,352,160...のようにある自然数から操作を何回か繰り返すと
自分自身に戻るような列を出来るだけ多く求めよ、と言う意味です。
説明不足ですみませんでした。
参考までに自分のコードをのせておきます。
1000000まで調べて35個のループを見つけました。
Haskell
http://ideone.com/zA3QEj
0634デフォルトの名無しさん
2014/11/02(日) 00:42:55.49ID:vzdMzxCDなんで99になるの?数学の勉強やりなおしたほうがいいよ
0635デフォルトの名無しさん
2014/11/02(日) 00:56:29.42ID:H1LxJTNx0636デフォルトの名無しさん
2014/11/02(日) 00:57:01.76ID:H1LxJTNx>>610だった
0637デフォルトの名無しさん
2014/11/02(日) 01:07:07.44ID:cOZRjysN0起点か1起点かの話?
0638デフォルトの名無しさん
2014/11/02(日) 01:26:03.94ID:QsSuiFos全員と対戦してそれぞれの結果を表示してもらうという想定でしたが
>>615に書いた通り練りが足りないので保留して、もうちょっと考えます
具体的には「対戦相手1〜4」だけの例示だとそれだけに勝つことを考えればよくなってしまうわけで
対戦相手の手の出し方自体をランダムに生成するようにしないとなぁとかなんとか
・・・だれか、代わりにやってもらえるなら頼みたいですw
>>616
こちらも説明が下手ですまなかったです
0639606
2014/11/02(日) 03:24:16.76ID:fr0Fy3+sそう言う意味だったんだ、そしたら… Perl
use List::Util qw(sum);
%e;
for $N (1..10000) {
%h = ();
@a = ();
$s = $N;
until ($h{$s}++ > 1) {
last if $e{$s}++ > 1;
$k = length $s;
$s = sum map {$_ ** $k} split '', $s;
push @a,$s if $h{$s} == 1;
}
print "$N -> [", join(',', @a) . "]\n" if @a;
}
逆になぜそのHaskellのcodeみたいに複雑になるのか分からない。
0640639
2014/11/02(日) 03:48:00.27ID:PoxfwvfS1..500000の実行結果です。
$ time perl 5_603_2.pl
1 -> [1]
2 -> [2]
3 -> [3]
4 -> [4]
5 -> [5]
6 -> [6]
7 -> [7]
8 -> [8]
9 -> [9]
14 -> [370]
59 -> [217,352,160]
108 -> [153]
119 -> [371]
136 -> [136,244]
138 -> [586,853,664,496,1009,6562,3233,259,862,736]
147 -> [886898,1626673,1665667,2021413,18829,124618,312962,578955,958109,1340652,376761,329340,537059,681069]
177 -> [76438,58618]
389 -> [2929,13154,4394,7154,3283,4274]
407 -> [407]
559 -> [845130,282595,824963]
709 -> [8208]
999 -> [6514,2178]
1118 -> [50062,10933,59536,73318]
1157 -> [23131558,17571846,30442597,49340036,44870531,23070276,13216291,44733413,5981093,11743403,5908997,17347727]
1346 -> [1634]
4479 -> [9474]
…
0641639
2014/11/02(日) 03:49:37.30ID:PoxfwvfS11227 -> [54748]
12399 -> [32164049651]
22779 -> [92727]
30489 -> [93084]
100666 -> [27073124,11602212,1680387,5299971,15250704,6611844,2689794,12783081,39326052,45130596,45579685,68505765]
127779 -> [548834]
real 1m55.180s
user 0m0.000s
sys 0m0.000s
127779より上はあまりない?
調べていませんが、仮数部の桁数がだんだん厳しい世界に入って行っているのかもしれませんね。
性能は Celeron 300MHz, Memory 160MB です。(お金ない…)
0642639
2014/11/02(日) 04:14:35.00ID:fr0Fy3+s根性で1..2000000まで解いてみた。
…前略
127779 -> [548834]
577999 -> [4210818]
677779 -> [8807272,5841646,2767918]
1000259 -> [9926315]
1001458 -> [2191663,5345158,2350099,9646378,8282107,5018104]
1007889 -> [9800817]
1035889 -> [9057586,8139850]
1124577 -> [1741725]
1188888 -> [24678051]
real 10m10.660s
user 0m0.000s
sys 0m0.000s
測定はCeleron 300MHz, Memory 160MB
CPUファンが壊れそうな音を出しながら回りはじめたのでここで止めときます。
0643デフォルトの名無しさん
2014/11/02(日) 08:43:19.69ID:C6/JrPgMRubyで。
http://ideone.com/EyLXVW
0644デフォルトの名無しさん
2014/11/02(日) 13:55:37.27ID:LYAK8dQQ硬貨の種類は500円玉、100円玉、50円玉、10円玉、5円玉、1円玉である。
内訳は各硬貨の枚数を並べたものとする。
複数の解がある場合はすべてを求める。
例
11枚で1082円のとき
2 0 1 0 6 2
12枚で777円のとき
1 0 5 1 3 2
1 1 3 0 5 2
25枚で4999円のとき
9 2 5 4 1 4
9 3 3 3 3 4
9 4 1 2 5 4
0645デフォルトの名無しさん
2014/11/02(日) 17:09:04.02ID:hb6xaL8Mimport itertools
def f(n,k):
kind = (500,100,50,10,5,1)
L, y = [], k
for d in kind:
x,y = divmod(y,d)
L.append(x)
r = n - sum(L)
M = []
for i,x in enumerate(L):
D = []
for m in range(1,1+x):
for j in range(i+1,len(kind)):
dd = [0]*len(L)
dd[i], dd[j] = -m, m * (kind[i] // kind[j])
if sum(dd) <= r:
D.append((sum(dd), dd))
if D:
D.append((0,[0]*len(L)))
M.append(D)
print u"{}枚で{}円のとき".format(n,k)
for pp in itertools.product(*M):
if sum([x[0] for x in pp]) == r:
print [sum(x) for x in zip(*([p[1] for p in pp] + [L]))]
f(11,1082)
f(12,777)
f(25,4999)
0646デフォルトの名無しさん
2014/11/02(日) 17:12:18.95ID:q60nWMQWきれいに三等分できない場合は四等分にしなさい
0647デフォルトの名無しさん
2014/11/02(日) 18:56:13.44ID:KDVIc7Px三等分も四等分もできないときは?
0648デフォルトの名無しさん
2014/11/02(日) 18:57:27.64ID:q60nWMQW0649デフォルトの名無しさん
2014/11/02(日) 19:09:04.32ID:XqbGR+7r0650デフォルトの名無しさん
2014/11/02(日) 19:37:48.02ID:HZCDIsYKlet rec count n k ts cs = seq {
match ts with
| [] when n = 0 && k = 0 -> yield cs
| [] -> ()
| t::ts ->
for c in 0..min (k / t) n do
yield! count (n - c) (k - t * c) ts (c::cs)
}
let coins = [500; 100; 50; 10; 5; 1]
let print = List.rev >> Seq.map string >> String.concat " " >> printfn "%s"
let printCount n k = count n k coins [] |> Seq.iter print
printCount 11 1082
printCount 12 777
printCount 25 4999
0651デフォルトの名無しさん
2014/11/02(日) 20:04:19.25ID:UtmlUpzzhttp://ideone.com/ZP9JBr
0652デフォルトの名無しさん
2014/11/02(日) 21:14:26.15ID:jMZPQf2rおそらくできた
R
http://ideone.com/an6YsM
0653デフォルトの名無しさん
2014/11/02(日) 21:24:21.77ID:dpGutFPPこれ難易度が絶妙な良問じゃないですか
C++でガリガリ高速化した
http://ideone.com/D3eUZr
手元で8桁まで計算
...
1188888 -> [24678051,]
2055779 -> [6586433,2755907,]
2566699 -> [472335975,]
4888888 -> [440329717,468672187,369560719,837322786,359260756,451855933,527799103,857521513,180450907,564207094,]
10135679 -> [24678050,]
10146899 -> [146511208,]
10233389 -> [88593477,]
10266888 -> [4863700423,1418899523,9131926726,7377037502,1139785743,5136409024,3559173428,]
14489999 -> [951385123,525584347,180975193,]
14788889 -> [912985153,]
20248999 -> [534494836,]
50 loops
real 0m51.549s
user 0m44.168s
sys 0m0.068s
0654653
2014/11/02(日) 21:57:11.23ID:dpGutFPPそもそも数値が計算途中でunsigned long long超えられるとこのコードじゃ無理だし
155999999 -> [277668893,756738746,]
0655デフォルトの名無しさん
2014/11/02(日) 22:19:43.80ID:sRK8KfFGそうでないとすると無限大に発散するのがほとんどってことか。
あと、これって数字の並びや大きさは関係なく、
たとえば、0-9が書いてあるボールを重複ありで複数個選んだ場合として計算しても同じだな。
0656デフォルトの名無しさん
2014/11/02(日) 22:25:58.68ID:sRK8KfFG初期10だと、すぐ1のループに入るけどこれは不正解か?
途中でループに入らず無限大へ発散するやつもあるの?
0657デフォルトの名無しさん
2014/11/02(日) 22:27:36.01ID:IBnDqJlk0658639
2014/11/03(月) 01:15:58.11ID:Lxc/V8EZ・発散するものはなかった
・値が進んでいくと、概出のループに陥るものが多くなり、
新規のルーフに遭遇する機会が減っていった
数字列の辿る数学的な吟味、検討はしていません。
0659デフォルトの名無しさん
2014/11/03(月) 05:27:37.66ID:6pvwXnwF結局、すべてのループを求めないと比較できないので
元の問題を含んで答えが一個の数字になって分かりやすい。
0660デフォルトの名無しさん
2014/11/03(月) 08:38:02.05ID:EIdpYGy3これまでのなかでは
最大:32164049651 (12399 -> [32164049651])
最長:14 (147 -> [886898,1626673,1665667,2021413,18829,124618,312962,578955,958109,1340652,376761,329340,537059,681069])
0661デフォルトの名無しさん
2014/11/03(月) 12:20:54.53ID:EIdpYGy3Nがk桁で、Nに1回操作を行ったものをstep(N)とおく
10^(k-1) <= N <= 10^k-1
1 <= step(N) <= k*9^k
lim[k->∞]step(N)/N <= lim[k->∞]k*9^k/10^(k-1) = 0
より、ある桁を超えると常にstep(N) < Nが成り立つ
逆に言うと、step(N) >= NとなるNは有限個しかない
0662デフォルトの名無しさん
2014/11/03(月) 12:58:10.38ID:C9Z/RfTtlimit zero だからといって、step(N)<N が常に成り立つ、とまでは言い切れないのでは?
0663デフォルトの名無しさん
2014/11/03(月) 12:59:19.03ID:C9Z/RfTtlimit zero だからといって、step(N)<N が常に成り立つ地点(それから先はずっと成り立つ)が存在する、とまでは言い切れないのでは?
0664デフォルトの名無しさん
2014/11/03(月) 13:06:51.51ID:6pvwXnwFループ長もある定数以下ってことになるな。
0665デフォルトの名無しさん
2014/11/03(月) 13:12:38.46ID:6pvwXnwF自分も同じ疑問はもった。しかし結論はあってるのではないか。
step(N)をなるべく大きくしようとすれば、N=1999・・・・の形になるとおもう。
それで実際に計算してみようとすると、ある程度大きいNに対してはstep(N)がNを超えられなくなると思う。
0666デフォルトの名無しさん
2014/11/03(月) 13:16:12.66ID:C9Z/RfTt0667デフォルトの名無しさん
2014/11/03(月) 13:30:48.96ID:DYZQazX2h=2
_@
@_@
h=3
___@
_@___@
@_@_@_@
h=4
_______@
___@_______@
_@___@___@___@
@_@_@_@_@_@_@_@
0668デフォルトの名無しさん
2014/11/03(月) 13:37:03.46ID:6pvwXnwFstep(N)=203847576752007525206368
これより先にあるか?
0669デフォルトの名無しさん
2014/11/03(月) 13:38:43.93ID:pWQDpgBnlog10(61*9^61)+1 = 60.99...
だから61桁以上の数値を含むループはなさそうだね
0670デフォルトの名無しさん
2014/11/03(月) 13:59:01.52ID:1DGR/mlS>>104
0671デフォルトの名無しさん
2014/11/03(月) 17:13:42.69ID:hmgWhyGCdef f(h):
print "\n".join([(("_"*(2**(i+1)-1) + "@")*(2**(h-i-1)))[2**i:] for i in reversed(range(h))])
0672665
2014/11/03(月) 17:23:54.05ID:6pvwXnwF0673デフォルトの名無しさん
2014/11/03(月) 17:27:29.18ID:hmgWhyGCdef f(s):
a = [i for i in (3,4) if not len(s) % i]
if not a: return
k = len(s) // min(a)
print s, "->", [s[i:i+k] for i in range(0, len(s), k)]
f("abcdef")
f("abcdefg")
f("abcdefgh")
---
abcdef -> ['ab', 'cd', 'ef']
abcdefgh -> ['ab', 'cd', 'ef', 'gh']
0674デフォルトの名無しさん
2014/11/03(月) 17:39:46.92ID:pWQDpgBn次のように定義される関数a, bがある
a(n) = n / 2 (nが偶数のとき)
b(n) = 3 * n - 1
整数1に対し、a, b を何度か適用して整数mを作りたい
適用すべきa, bの順序を求めよ
答えが複数ある場合、求めるのは1つでよい
m = 10 のとき、
a(b(a(b(b(b(1)))))) = 10
なので、答えは bbbaba
m=4 -> ?
m=67 -> ?
m=175 -> ?
m=809 -> ?
0675デフォルトの名無しさん
2014/11/03(月) 17:45:52.22ID:6pvwXnwFx=1 y=57 のとき、step(N)=11381065232791397665950138920227498584966012307739723673874で、step(N) > N。
これ以上はないとおもうがどうだろ? 前回のは計算ミスがあった。
0676デフォルトの名無しさん
2014/11/03(月) 17:55:09.38ID:Y5JYM2NVコラッツの予想だね
0677デフォルトの名無しさん
2014/11/03(月) 17:58:45.74ID:ga1lmjsH数学よくわからんな
>>653とか見てるとN<step(N)なパターンが散見するけど
N<step(N)なパターンが延々と続くケースとか発生しないってこと?
0678デフォルトの名無しさん
2014/11/03(月) 19:11:33.42ID:GluBjznLC++
http://ideone.com/j3rp4o
0679デフォルトの名無しさん
2014/11/03(月) 19:41:30.72ID:hmgWhyGCdef f(m):
if not m % 3: return
L, M = [], []
x = m
while x > 1:
M.append(x)
p, r = divmod(x + 1, 3)
if r == 0 and p % 3 and p not in M:
x = p
L.append("b")
else:
x = x * 2
L.append("a")
print "m={} -> {}".format(m, "".join(reversed(L)))
for m in (10,4,67,175,809): f(m)
---
m=10 -> bbbaba
m=4 -> bbbabbbaaaabaaa
m=67 -> bbbababbababbaabaabaabbaabaaa
m=175 -> bbbababbabaaaaabbabbaabaaabababbabbaaababbaabaaa
m=809 -> bbbababbabaaaaabbaabbbbaaabbaaababbbaaababbaabaabaa
0680デフォルトの名無しさん
2014/11/03(月) 19:57:22.64ID:NPjeGKon>>655 の考え方ちょっと入れて実装
http://ideone.com/HtuzVd
16から17桁の途中までの出力
@n = 16
[2419253396913226, 5564859798630665, 4314122390900936, 5561890395668808, 4840861420987271, 2766744975063429, 3814368015105159]
[5146957705687367, 2276352319249162, 3745072497367240, 1988938580054728]
[52551389500766905, 35876461872431926, 21697619891079652, 69477330558375418, 21897923093961655, 69228536582676925, 38160589126493611, 37909523382771553, 36306344090162179, 33637808638944484, 25950934023321628, 35624633319183334, 18963633035544997]
[4338281769391370]
[37878721692554416, 21914086555935085]
[35641594208964132]
[4338281769391371]
[21897142587612075]
@n = 17
[35875699062250035]
0681デフォルトの名無しさん
2014/11/03(月) 21:36:08.72ID:aNJ5eidfどのくらいいるんだろう
だからなんだっつぅ話だけどw
0682デフォルトの名無しさん
2014/11/03(月) 21:42:12.66ID:Y5JYM2NVe ならある
http://peace.2ch.net/test/read.cgi/tech/1313183984/610
http://toro.2ch.net/test/read.cgi/tech/1354070278/679
πもやったはずだが、ちょっと出てこない‥
0683デフォルトの名無しさん
2014/11/03(月) 21:54:37.02ID:Y5JYM2NVhttp://hibari.2ch.net/tech/kako/1308/13087/1308749241.html の >>355
http://ideone.com/oEKtkX
ファインマンポイントまでは計算できているようだ
0684デフォルトの名無しさん
2014/11/03(月) 22:00:40.14ID:NPjeGKonhttp://ideone.com/ToWR1j
0685デフォルトの名無しさん
2014/11/03(月) 22:11:47.87ID:aNJ5eidfおいおい、おまえら素晴らしいじゃねーか
おれも、>>683的なオーソドックスなので組んだことはあるけど、
>>684のはどうなってんだ?ちょっとあぜんとしてしまったんだが…。
とりあえず、おみそれした
そして、なんかすまんかった
0686デフォルトの名無しさん
2014/11/03(月) 22:17:04.16ID:Y5JYM2NV0687デフォルトの名無しさん
2014/11/03(月) 22:30:21.40ID:NPjeGKonニュートンの公式で10進2桁ずつ(つまり100進1桁ずつ)計算
公式は例えばここ
http://www.usamimi.info/~geko/arch_acade/elf003_pai/index.xml
マチンより遅いけどコードは簡単
0688639
2014/11/04(火) 01:57:26.48ID:IWkjhLAEi386の32bitモードでπを計算するアセンブラ500stepくらいのを
当時書いた。ソースはどこ行ったか分からなくてアップできない。
10万桁で8時間くらいかかっていた。
スカラCPUでは、楕円積分やガウスルジャンドルよりも、普通に1/arctanの式の方が速かった記憶がある。
0689675
2014/11/04(火) 03:32:33.17ID:m6tgGZDBx=2 y=57 のとき、
step(N)=102429587095122578993551250282047487264694110769657513064858
今度こそこれより大きいのはないだろ。
0690デフォルトの名無しさん
2014/11/04(火) 04:27:15.08ID:3dU+atP70691675
2014/11/04(火) 04:56:48.55ID:m6tgGZDB0692675
2014/11/04(火) 05:17:14.43ID:m6tgGZDBM = 102429587095122578993551250282047487264694110769657513064858
0693デフォルトの名無しさん
2014/11/04(火) 07:37:07.88ID:FtAVU3JnN <= step(N)となるNだけ調べればokで
その中の最大値が>>692ってことだね
なのでその値まで調べれば全てのループが分かると
0694デフォルトの名無しさん
2014/11/04(火) 21:20:53.79ID:6foYtPZ7( ˘ ω˘) < スヤァ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)513064858
0695デフォルトの名無しさん
2014/11/04(火) 22:50:31.60ID:JIygd8XKネイピア数なら円周率より簡単に書けるよ
http://ideone.com/sAEbtW
0696デフォルトの名無しさん
2014/11/05(水) 06:41:11.55ID:A3r8Fejs不完全だけどできた。答えが合っているかは謎だが
R
http://ideone.com/IlkGr1
0697デフォルトの名無しさん
2014/11/05(水) 18:12:27.63ID:oL739v0uhttp://ideone.com/cvxwMG
0698デフォルトの名無しさん
2014/11/05(水) 22:29:28.68ID:IU8t8wXV| fn |
fn := [:m |
| queue ans |
queue := OrderedCollection with: {''. m}.
[queue notEmpty] whileTrue: [
| seq next |
seq := queue first first.
(next := queue removeFirst last) = 1 ifTrue: [queue removeAll. ans := seq] ifFalse: [
next \\ 3 = 2 ifTrue: [queue add: {'b', seq. next + 1 / 3}].
(next isDivisibleBy: 3) ifFalse: [queue add: {'a', seq. next * 2}]]
].
m -> ans
].
#(10 4 67 175 809) collect: fn
"=> {
10->'bbbaba' .
4->'bbbabbbaaaabaaa' .
67->'bbbababbababbaabaabaabbaabaaa' .
175->'bbbbbababaabbaaaaababbabbaaababbaabaaa' .
809->'bbbbbababaabbaaabbaaababbbaaababbaabaabaa'
} "
0699デフォルトの名無しさん
2014/11/06(木) 00:04:52.81ID:j6bk88Hbhttp://ideone.com/dGY6BC
他のと比べてへぼいことしてしまった
0700デフォルトの名無しさん
2014/11/06(木) 00:26:57.88ID:kDWgKS91ダメだ分からん
難しい問題だな
PHP
http://ideone.com/icbejZ
0701デフォルトの名無しさん
2014/11/06(木) 01:40:04.72ID:z60eCyfghttp://ideone.com/GEEoKc
0702デフォルトの名無しさん
2014/11/06(木) 02:28:32.44ID:xbQtbYcARUby
http://ideone.com/SiYj2j
0703デフォルトの名無しさん
2014/11/06(木) 07:03:31.65ID:ik6+jvjThttp://ideone.com/LsAyJS
幅優先しか思い浮かばなかった。
0704デフォルトの名無しさん
2014/11/06(木) 07:44:05.39ID:UIEA6AtQ逆走査ってのは、A (x → 2x)と B (3x-1 → x) だが。
3n-1はnにできる。
3nと3n+1のケースをどうするか。
2(3n+1) = 3(2n +1) -1だから、3n+1は2n +1にできる。
3nがすぐにわからん。
0705デフォルトの名無しさん
2014/11/06(木) 12:29:41.02ID:z60eCyfg3nは倍にしても6nだから3n-1にはどうやってもできなくね?
0706デフォルトの名無しさん
2014/11/06(木) 14:02:03.60ID:CQncpyVm0707デフォルトの名無しさん
2014/11/06(木) 15:17:08.56ID:Uro6JXyQ0708デフォルトの名無しさん
2014/11/06(木) 16:02:35.46ID:4jfyym2cこれが
a(n) = 2 * n
b(n) = (n + 1) / 3
ならまだしも
0709デフォルトの名無しさん
2014/11/06(木) 16:18:03.38ID:aYOy4vHI0710デフォルトの名無しさん
2014/11/06(木) 17:27:58.91ID:N6Ugp7Tx0711700
2014/11/06(木) 18:00:23.53ID:+E7ivHML方針変えてみてがダメぽげ
C++
http://ideone.com/iqkKMT
10 -> bbbaba
4 -> bbbabbbaaaabaaa
67 -> bbbababbababbaabaabaabbaabaaa
175 -> bbbbbababaabbaaaaababbabbaaababbaabaaa
809 ->
0712700
2014/11/06(木) 18:16:57.11ID:+E7ivHMLもうちょっと変えてみた
C++
http://ideone.com/tuWzEw
10 -> bbbaba
4 -> bbbabbbaaaabaaa
67 -> bbbababbababbaabaabaabbaabaaa
175 -> bbbbbababaabbaaaaababbabbaaababbaabaaa
809 -> bbbbbababaabbaaabbaaababbbaaababbaabaabaa
0713デフォルトの名無しさん
2014/11/06(木) 18:39:44.26ID:UIEA6AtQコラッツ予想ではできるだろう? こっちは1になる問題だが。
0714704
2014/11/06(木) 18:49:32.52ID:UIEA6AtQmod 3で等式が不成立だからムリか。等式だったら3の余りでも等しいので。
3*2^m = 3n - 1
0715デフォルトの名無しさん
2014/11/06(木) 18:52:01.04ID:7/6JxEpW3の倍数でない値に対してa(n)の操作をいくら行っても3の倍数にならんだろJK
0716700
2014/11/06(木) 19:11:22.47ID:+E7ivHML>>712をちょっと訂正
http://ideone.com/l7ZTnB
10 -> bbbaba
4 -> bbbababbabaaaaa
67 -> bbbababbabaabbabbababaaaabaaa
175 -> bbbabbbaabbaabbabaabababaabbabaaaabaaa
809 -> bbbbbababaaabbabaabbbabaabaaababbaabaabaa
0717デフォルトの名無しさん
2014/11/06(木) 19:22:17.50ID:f9VXhmfJ8時間回して41桁まで探索終わった
36桁 *8452秒 135ループ
37桁 10760秒 136ループ
38桁 13893秒 137ループ
39桁 17774秒 139ループ
40桁 22630秒 139ループ
41桁 28723秒 139ループ
このペースなら4~6週間くらい掛けたら60桁調べ終わるのかな?
探索済み範囲最大値 39桁
[115132219018763992565095597973971522401]
探索済み範囲最大長ループ 18個
[10181976920394277400584, 27852314084047558510219, 10688610940325001073897,
19553092616993382187366, 36662895609794210663524, 27211241280778321507795,
10180397389391156436853, 28388673910517178592951, 29032929335610790615729,
44371031395529147765128, 18399103996082548276483, 37841895989779904859691,
64484670033935168320603, 10074069541108119620821, 18935428129475061827932,
28415252997720554102092, 27233895488449729771663, 28470768372157693427350]
0718デフォルトの名無しさん
2014/11/06(木) 19:49:28.12ID:j6bk88Hbどうやったらそんな速く探索できるの?
0719デフォルトの名無しさん
2014/11/06(木) 19:50:29.10ID:aYOy4vHI0720デフォルトの名無しさん
2014/11/06(木) 20:19:03.19ID:f9VXhmfJ枝切りなんかね?
>>719
Pentium G6950 2.8GHz メモリ10GB
だけどメモリはあまり使ってないよ
コード整形してからideoneに貼るわ…整形しても汚いけどww
0721デフォルトの名無しさん
2014/11/06(木) 20:58:28.51ID:f9VXhmfJJava
http://ideone.com/2KsxRg
コード汚いから晒すの恥ずかしいw
0722デフォルトの名無しさん
2014/11/06(木) 22:12:31.87ID:j6bk88Hbなるほど
数字の個数だけ考えてると
組み合わせは、40桁で20億、60桁で600億程度だから、
頑張れば探索可能ってことか
0723デフォルトの名無しさん
2014/11/06(木) 22:31:22.69ID:f9VXhmfJ43桁まで約13時間…8時間以上新規ループが無いんだがw
0724デフォルトの名無しさん
2014/11/06(木) 23:45:17.48ID:xbQtbYcA例えば12と21とは互いに同じ結果になるから、もう少し組み合わせは減るかもね。
0725デフォルトの名無しさん
2014/11/07(金) 01:09:58.40ID:livM4+jaこれ難しいな
まんべんなく求めるの無理ぽげ
お前らすげえわ
C++
http://ideone.com/jKq84g
0726725
2014/11/07(金) 03:52:18.84ID:livM4+ja>>725を少し整理した
http://ideone.com/GmTtPx
0727725
2014/11/07(金) 03:54:46.40ID:livM4+ja0728デフォルトの名無しさん
2014/11/07(金) 05:09:52.98ID:c8JPTKQV桁増加で計算量が圧倒的に増えるとおもったら、40桁と60桁ではループは2.75倍になるだけだった。調べる必要がある組み合わせ部分の比較。
f(x):=combination(x+9,9)と置くとf(60)/f(40)=2.758495922234162b1
0729728
2014/11/07(金) 05:42:51.33ID:c8JPTKQV0730デフォルトの名無しさん
2014/11/07(金) 09:44:42.77ID:6X/slwZc他人の結果と比較するのも楽になるかも
0731デフォルトの名無しさん
2014/11/07(金) 09:53:27.00ID:c8JPTKQV0732725
2014/11/07(金) 11:01:15.87ID:livM4+jaJavaのBigIntegerで置き換えた
http://ideone.com/HOiE66
>>730-731
その発想はなかった
0733デフォルトの名無しさん
2014/11/07(金) 11:06:57.99ID:vJwgmFmfこの27倍ってのは一回調べた数値はもう調べない場合だよね?
たとえば14を探索(14,17,50,25,29,85,89,145,190,730,370,370...)した後に、
17,50,25,29,85,89,145,190,730が出たらそこで探索打ち切りって感じに。
めもりがたりません
0734725
2014/11/07(金) 11:11:34.82ID:livM4+jahttp://ideone.com/27OuGX
0735デフォルトの名無しさん
2014/11/07(金) 11:21:02.16ID:6X/slwZc例えば、Nを探索中にN未満の数値が出たらそこで打ち切りという方法を取っていれば
N未満のデータは使わないから削除してしまっていいよね
0736デフォルトの名無しさん
2014/11/07(金) 11:25:24.52ID:vJwgmFmfそれでもめもりたいりょうです・・・
あとデータ追加/削除/containsのコストが高いです・・・
0737725
2014/11/07(金) 11:44:53.87ID:livM4+ja>>734を自分のPC上で実行したら処理時間がIdeoneの3倍かかった…
0738725
2014/11/07(金) 11:53:12.41ID:livM4+jahttp://ideone.com/9nvBFw
0739725
2014/11/07(金) 12:45:53.38ID:livM4+jaこれ以上はもう無理ぽ
>>603
Java
http://ideone.com/DGsSKC
0740デフォルトの名無しさん
2014/11/07(金) 13:07:14.49ID:6X/slwZca[n+1] = min { N | a[n] < N, かつNの各桁の数字を入れ替えてできるどんな数もa[0]〜a[n]にあらわれない }
ただし、数字の入れ替えにおいて先頭に0を持ってきてはいけない(例:304の場合、403,340,430はOK、034,043はNG)
a[n] = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,
26,27,28,29,30,33,34,35,36,37,38,39,40,44,45,46,47,48,49,50,55,56,57,58,59,
60,66,67,68,69,70,77,78,79,80,88,89,90,99,100,101,102,103,104,105,106,107,108,109,111,
112,113,114,115,116,117,118,119,122,123,124,125,126,127,128,129,133,134,135,136,137,138,139,144,145,
146,147,148,149,155,156,157,158,159,166,167,168,169,177,178,179,188,189,199,200,202,203,204,205,206,
207,208,209,222,223,224,225,226,227,228,229,233,234,235,236,237,238,239,244,245,246,247,248,249,255,
256,257,258,259,266,267,268,269,277,278,279,288,289,299,300,303,304,305,306,307,308,309,333,334,335,
336,337,338,339,344,345,346,347,348,349,355,356,357,358,359,366,367,368,369,377,378,379,388,389,399,
400,404,405,406,407,408,409,444,445,446,447,448,449,455,456,457,458,459,466,467,468,469,477,478,479,
488,489,499,500,505,506,507,508,509,555,556,557,558,559,566,567,568,569,577,578,579,588,589,599,600,
606,607,608,609,666,667,668,669,677,678,679,688,689,699,700,707,708,709,777,778,779,788,789,799,800,
808,809,888,889,899,900,909,999,...
n⇔a[n]の変換を高速に行えたらいいんだがな…
0741デフォルトの名無しさん
2014/11/07(金) 13:59:12.07ID:dqYUW7C7学生か?
0742デフォルトの名無しさん
2014/11/07(金) 18:27:38.51ID:WQFnaYxKaからbまでの連続する整数の総和を返す関数sigma(a,b)がある
例: sigma(-3,5) = -3+-2+-1+0+1+2+3+4+5 = 9
a>bとなるような入力は受け付けない
整数nが与えられるので sigma(a,b) = n となりうるa,bの組の数を求めよ
無限に存在する場合は -1 と出力せよ
0 -> -1
1 -> 2
2 -> 2
3 -> 4
10 -> 4
-10 -> 4
12345678 -> ?
0743デフォルトの名無しさん
2014/11/07(金) 18:40:49.19ID:c8JPTKQVか?
0744デフォルトの名無しさん
2014/11/07(金) 18:41:44.71ID:nldP4Bww等差数列の総和の公式を使うと早いな
0745デフォルトの名無しさん
2014/11/07(金) 19:21:05.23ID:c8JPTKQVhttp://www.asahi-net.or.jp/~kc2h-msm/mathland/math04/index.htm
参考文献 [2] では以下の値を未解決としている。 76, 148, 183, 230, 356, 418, 428, 445, 482, 491,580, 671, 788, 931, 967
このうち、以下の値については今回解が得られた。
76 = (-21167)3 + (-122171)3 + 2・971353
230 = (-14101)3 + 272933 + 2(-20617)3
356 = 1295213 + 10484693 + 2(-832693)3
418 = 159613 + 917053 + 2(-72914)3
428 = (-111433)3 + (-117090)3 + 2・1143323
445 = (-19178)3 + 1504393 + 2(-119321)3
482 = (-2254)3 + (-11878)3 + 2・94493
580 = 851113 + 898453 + 2(-87542)3
967 = 3806983 + 6412633 + 2(-542246)3
残るは、以下の3個。148, 671, 788
http://www.asahi-net.or.jp/~kc2h-msm/mathland/math04/math0405.htm
0746デフォルトの名無しさん
2014/11/07(金) 22:58:53.57ID:koqtAOxkおそらくできた
R
http://ideone.com/za4Xhv
最後は Runtime error になったけど、PC上では
12345678 -> 24
だった
0747デフォルトの名無しさん
2014/11/07(金) 23:30:09.46ID:TJsXBBzpあとはaとbを少しずつ動かしながら探す感じか?
0748デフォルトの名無しさん
2014/11/08(土) 00:19:05.93ID:v0SFyh4VそれともCodeIQのほうがこのスレに影響されたん?
ttps://codeiq.jp/ace/tomohiro_takahashi/q1154
0749デフォルトの名無しさん
2014/11/08(土) 01:01:52.11ID:tAeMnwy9Rubyで。
http://ideone.com/Nx9cNI
0750デフォルトの名無しさん
2014/11/08(土) 01:05:12.57ID:BIt9hzZdhttp://ideone.com/mrmLd0
0751デフォルトの名無しさん
2014/11/08(土) 01:29:16.26ID:BIt9hzZd0752674
2014/11/08(土) 01:30:56.97ID:nf59RGqA別にその問題に触発されて出題したわけじゃないです
コラッツの予想から思いついた問題であることは確かです
0753デフォルトの名無しさん
2014/11/08(土) 01:42:00.07ID:v0SFyh4V同時期にコラッツの話が出てくるなんて偶然すぎるし
0754717
2014/11/08(土) 04:02:43.78ID:GYrsKrTd結果合ってるか分からんが高速化頑張ったら60桁が1時間弱でおわた
40桁以降にループ出なかった…
でもideone5秒以内だと>>739より出てくるループ少なすw
Java
http://ideone.com/Q3lqlc
0755デフォルトの名無しさん
2014/11/08(土) 04:07:28.55ID:GYrsKrTdhttp://ideone.com/hmmUNF
0756デフォルトの名無しさん
2014/11/08(土) 13:40:23.38ID:dw3O1wOIhttp://ideone.com/v0wgrS
0757デフォルトの名無しさん
2014/11/08(土) 16:15:50.56ID:Pf29+QER> でもideone5秒以内だと>>739より出てくるループ少なすw
同じ5秒以内でも実行時間に違いあるじゃん
>>739は4秒半、>>754は3秒半で1秒も違いがあるんだから1秒も長くやってるほうが数が多く出るのは普通だろ
俺の見立てでは>>754がもう1秒やってりゃ>>739より多く出るんじゃね
0758デフォルトの名無しさん
2014/11/08(土) 16:16:53.52ID:I3ssoFsylong long のない C で頑張ったけど、手元の PC だとそっちの10倍くらいかかる感じ
http://ideone.com/VB9fXS
桁数が小さいときはそれなりに速いから、
桁数が小さい : code に変換してるからループの検出が高速
桁数が大きい : ほとんどの数が数ステップで探索済みの領域に突入するから code 変換が返って邪魔
とかそういうことかな
0759デフォルトの名無しさん
2014/11/08(土) 18:00:33.16ID:X9M7IuhTJavaで一時間なら、C/C++で30分はいけるはずだ。
0760デフォルトの名無しさん
2014/11/08(土) 20:01:22.07ID:om46DDyfJavaのJITは使ってくれるんだろうか。使うのだとしたら下手なC/C++コンパイラではちと分が悪い。
0761デフォルトの名無しさん
2014/11/08(土) 20:06:31.47ID:Pf29+QER0762デフォルトの名無しさん
2014/11/08(土) 20:47:40.63ID:3fSv7BFTBigInt とかね
0763デフォルトの名無しさん
2014/11/08(土) 20:52:15.27ID:X9M7IuhTJavaはC/C++コンパイラでビルドしていて、最高でもC/C++の速度でそれ以下かとおもってた。
0764デフォルトの名無しさん
2014/11/08(土) 20:52:55.37ID:AV/TLS4TJavaが遅いなんて過去の話。
今はJITの最適化が進んでるから下手なC++より速かったりする。
0765デフォルトの名無しさん
2014/11/08(土) 20:57:19.44ID:X9M7IuhT自分がいまからC/C++で解く問題に最適化したやつを作ってみる。
0766デフォルトの名無しさん
2014/11/08(土) 21:19:20.60ID:om46DDyfJavaVMはC/C++コンパイラでビルドされてるかもしれないけど、
JavaのバイトコードはJITコンパイラでコンパイルされて実行される。
実行情報をプロファイリングしてJITコンパイルに適用とかも可能だし、
JITの理論上の限界性能は決してバカには出来ない。
ていうか、仮にJavaがC/C++のプリプロセッサでC/C++コンパイラでコンパイルされるとしても、
そのコンパイラの性能がC/C++をコンパイルするときのコンパイラの性能を上回っていたらお察し。
>>765
アセンブラならな。実際そこまで必要かは分からんがC/C++でSIMDまで制御するのは面倒だと思うぞ。
>>764
仮に速くても余り使いたくない…なんか好きになれんし、今は「あの」オラクルだし…
0767デフォルトの名無しさん
2014/11/08(土) 21:54:12.36ID:Pf29+QEROracleのHotSpotは優秀らしいけど
0768デフォルトの名無しさん
2014/11/08(土) 22:52:19.56ID:UHdmp0aU0769758
2014/11/08(土) 22:53:03.59ID:I3ssoFsy調べてみたら
>>758 を手元で走らせると 27秒、ideone だと 3.4秒 だから 8倍弱
>>755 で64個のループを見つけるのに 0.91秒、>>754 の ideone のだと 3.5秒だから4倍弱
単純計算で 30倍程度の差がある
0770デフォルトの名無しさん
2014/11/09(日) 00:12:30.29ID:5z0NeOWN0771デフォルトの名無しさん
2014/11/09(日) 00:22:07.86ID:aWsOebTN0772デフォルトの名無しさん
2014/11/09(日) 00:47:08.23ID:ww4vQrnx0773デフォルトの名無しさん
2014/11/09(日) 01:23:04.59ID:Xu5ysykwRuby。 ちょっと修正。
http://ideone.com/9k3i7h
0774デフォルトの名無しさん
2014/11/09(日) 05:26:39.15ID:5cSXAAC7C言語はよく分からない上にBigIntegerとかハッシュテーブルとかどうやって実装するのかもよく分からなかったのでダメだった
http://ideone.com/Ub66na
0775デフォルトの名無しさん
2014/11/09(日) 18:04:49.57ID:fpFy2GPJ0776デフォルトの名無しさん
2014/11/09(日) 22:04:40.76ID:AZQNfI2b>>758 のバグ修正とケチな高速化をした
http://ideone.com/d4vQOg
手元のPCで7時間で全探索終了
ideone くらいの環境なら1時間程度と思う
結果は >>755 と目視で一致
0777デフォルトの名無しさん
2014/11/10(月) 08:39:48.04ID:jDCBd3CZでも、このスレのような数値計算なら、Javaの方が速いかも
Javaが遅そうなのは、配列のインデックスのチェックと、
メモリを小刻みに何回も確保するとか
0778デフォルトの名無しさん
2014/11/10(月) 10:45:51.93ID:UPYVTgdg各桁を求める(10で割る計算)が速く出来る可能性。
乗法とビットシフト Cは2ベキとして、x/10 = (x * (C/10)) /C。
浮動小数点乗法 (x/BASE) *10 で上位順に求める。
引き算とif x=5412だったら、1000ずつ引いていって初めて引く数より小さくなった時で最上位の数を求める。
0779デフォルトの名無しさん
2014/11/10(月) 11:34:11.64ID:UPYVTgdgコンパイラが定数の割り算を似たような変形してて速度差はでないかと。
0780デフォルトの名無しさん
2014/11/10(月) 15:45:32.20ID:UPYVTgdg割り算での対抗はあきらめて、たとえば0-99999に対して各桁の数字予めを計算しておくとかだったらいいかもしれない。
0781デフォルトの名無しさん
2014/11/10(月) 17:04:00.91ID:t1rPrD1t一つのN行M列行列Aが与えられたとする。
Aの第i行第j列の成分をA[i,j]で表す(0≦i≦N-1,0≦j≦M-1)。
M次元ユークリッド空間の点(A[i,0],A[i,1],…,A[i,M-1])をA[i]で表す(0≦i≦N-1)。
A[c]とA[d]の距離をB[c,d]で表せば(0≦c≦N-1,0≦d≦N-1)、一つのN行N列行列Bを定義できる。
N行M列行列Aを受け取ってN行N列行列Bを返す関数を作れ。
例1. A=(0) の場合は B=(0)
例2. A=
(0 0)
(1 1)
の場合は
B=
(0 1.414214)
(1.414214 0)
例3. A=
-609.73296 116.3619 -570.292932 -70.00652 821.9453 -474.9307 -380.5322 -249.4459
-640.17143 346.0745 350.500842 -494.22644 575.4392 -322.8496 515.1560 -691.4152
16.45743 -522.4213 -468.167791 -844.80765 573.8970 946.0012 944.7324 -990.6554
-215.13222 -103.0582 -140.095570 -923.46515 267.0902 965.5818 -869.5681 -222.2961
-549.66865 -323.8309 1.033465 -535.85266 -782.7112 194.8469 -416.3158 248.8733
の場合は
B=?
0782デフォルトの名無しさん
2014/11/10(月) 18:08:21.95ID:I2gnUofF32bitアーキテクチャだけど乗算結果はレジスタ2つに64bit出力するCPUは少なくない。
その場合結果の上位レジスタを結果として使うだけ、64bit演算として特別視する必要はない。
Cで書いたら64ビット値が出てくるなぁ程度で、どっちみち同じコードにコンパイルされるかと…
例えば、x86のMUL命令は32bit値同士の乗算結果をEDXとEAXを連結した64bitに出力する。
DIVもIDIVも被除数がEDX:EAXだし、IMULのみ2〜3オペランド形式で32bit出力に出来るって程度。
AVRみたいな8bitマイコンも、MULの結果は16bit出力だったりするし。
0783デフォルトの名無しさん
2014/11/10(月) 18:34:43.45ID:I6wYG1VLhttp://ideone.com/ewBhi9
0784デフォルトの名無しさん
2014/11/10(月) 18:39:25.72ID:walmDA6C> Javaの方が速い
CよりJavaの方が速いってどういう場面だろう…?
0785デフォルトの名無しさん
2014/11/10(月) 20:02:07.06ID:51rrS0pN| A |
A := #((-609.73296 116.3619 -570.292932 -70.00652 821.9453 -474.9307 -380.5322 -249.4459)
(-640.17143 346.0745 350.500842 -494.22644 575.4392 -322.8496 515.1560 -691.4152)
(16.45743 -522.4213 -468.167791 -844.80765 573.8970 946.0012 944.7324 -990.6554)
(-215.13222 -103.0582 -140.095570 -923.46515 267.0902 965.5818 -869.5681 -222.2961)
(-549.66865 -323.8309 1.033465 -535.85266 -782.7112 194.8469 -416.3158 248.8733)).
A collect: [:x | A collect: [:y | (y - x raisedTo: 2) sum sqrt]]
0786デフォルトの名無しさん
2014/11/10(月) 20:47:31.32ID:9H2dohgOJITが有るのでJavaはCの30倍速い。
(実測)
過去レスを読もう。
0787デフォルトの名無しさん
2014/11/10(月) 20:48:48.83ID:B0ymrmACへ?
0788デフォルトの名無しさん
2014/11/10(月) 20:55:53.49ID:9H2dohgO0789デフォルトの名無しさん
2014/11/10(月) 20:59:45.27ID:UPYVTgdg0790デフォルトの名無しさん
2014/11/10(月) 21:07:41.10ID:u1a/nNQPその程度だ。
0791デフォルトの名無しさん
2014/11/10(月) 21:12:41.74ID:15BsEw7X思えんもなにも…。
HotSpotのころに散々騒がれただろうに。
もう十五年以上前の時点で既に。
>>790が言ってるように、
JITが気の効いた最適化したときに、って話。
0793デフォルトの名無しさん
2014/11/10(月) 21:24:35.10ID:UPYVTgdg0794デフォルトの名無しさん
2014/11/10(月) 21:26:01.00ID:9H2dohgO0795デフォルトの名無しさん
2014/11/10(月) 21:32:47.00ID:walmDA6CJITで動くコードってCで書かれてるんじゃないの?
0796デフォルトの名無しさん
2014/11/10(月) 21:34:32.02ID:UPYVTgdgで計算結果を蓄えておく方針で速くなった。
しかも63個以下だったら、一回の足し算で10個分の足し算が一気に出来る。
0797デフォルトの名無しさん
2014/11/10(月) 22:24:00.45ID:pz7HGOijまあ、32bit int が 64bit double の計算になるから仕方ない
>>780 をやったら大きな桁のところで3倍速以上、ideone でも時間内に17桁まで探索できるようになった
http://ideone.com/bfmIlC
あと、10倍ってのは忘れてくれ。手元のPCがしょぼかっただけ
>>754 を C に移植したようなもんだから、そんな遅いはずがない
0798デフォルトの名無しさん
2014/11/11(火) 04:56:48.54ID:XmM4O/E6地味な改良。
n = 17
elapsed time = 4.340000
↓
n = 17
elapsed time = 3.770000
http://ideone.com/0Uy0ey
0799デフォルトの名無しさん
2014/11/11(火) 15:32:08.46ID:hKyKJcV+0800デフォルトの名無しさん
2014/11/11(火) 20:41:33.40ID:nse5PiqP( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)+.------.--------.>+.
0801デフォルトの名無しさん
2014/11/11(火) 20:50:31.68ID:G7HLEXn+こういうのって結構効くもんなんだね
これと他にに少しいじって、手元のPCで2時間ちょっとで全探索できるようになった
ideone並の速度があればたぶん20分程度で全探索できる
0802デフォルトの名無しさん
2014/11/14(金) 00:00:44.12ID:O+AePB8y例:http://ideone.com/bOo0Ig
0803デフォルトの名無しさん
2014/11/14(金) 00:10:40.84ID:wwjiqnkY0804デフォルトの名無しさん
2014/11/14(金) 12:08:50.94ID:iMcMp8AK0805デフォルトの名無しさん
2014/11/14(金) 13:16:13.76ID:FoTlv74Yhttp://ideone.com/IBF4Xo
0806デフォルトの名無しさん
2014/11/14(金) 15:46:34.12ID:CUH+GTTx0807デフォルトの名無しさん
2014/11/14(金) 21:43:10.90ID:ZgWVahH9ふつくしい
0808片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/15(土) 20:09:19.59ID:OpYgM50z0809デフォルトの名無しさん
2014/11/15(土) 20:20:11.95ID:8u4J/msJprint space(t),d
while d->hasNext()
p=d->next
if p->isDir
seekDir(p,t+1)
0810デフォルトの名無しさん
2014/11/15(土) 20:29:47.08ID:N5N+qeHm>>801 からまたいじって手元で倍速近く、ideone で18桁まで行けるようになった
http://ideone.com/LnG1mr
0811デフォルトの名無しさん
2014/11/15(土) 23:11:12.06ID:mcOwxVGIなぜこれでeがもとまるのかヒントをください
配列aの初期値は不定でよいのでしょうか
0812デフォルトの名無しさん
2014/11/15(土) 23:18:28.36ID:8u4J/msJネイピア数を求めるアルゴリズムをググって探せばいいんじゃね
0813デフォルトの名無しさん
2014/11/16(日) 02:41:52.98ID:0uaNgO5S0814デフォルトの名無しさん
2014/11/16(日) 18:21:41.04ID:yO4k0ImLwin32
http://peace.2ch.net/test/read.cgi/tech/1313183984/775
0815デフォルトの名無しさん
2014/11/17(月) 02:23:13.89ID:hQM/TM27http://ideone.com/P7JVL1
0816デフォルトの名無しさん
2014/11/17(月) 18:52:21.09ID:ga8uKdRQ( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)45 44 43 42 41 40...
0817片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/17(月) 22:13:27.78ID:ppTtjJs60818デフォルトの名無しさん
2014/11/17(月) 22:52:10.39ID:q8JMQ0WLhttp://peace.2ch.net/test/read.cgi/tech/1313183984/786
0819デフォルトの名無しさん
2014/11/17(月) 23:28:05.50ID:nd5jVndp使用するものは、いくつかの石と一直線のマス目のみ。
最初にマス目上に石がランダムに配置される。
例:ooo___ooooooo_o_oo___ooo__
※「o」は石のあるマス目で「_」は石のないマス目
各プレイヤーは自分の手番で石を一つ取るか、
隣同士の二つの石を取るかのどちらかを選択する。
自分の手番で取れる石が無くなった方が負けである。
ちなみに取った石の数は勝敗とは無関係である。
初期配置が与えられるので、先手必勝か後手必勝か
そのどちらでもないかを答えよ。
例:
o_ooo ⇒ 先手必勝
o_oooo ⇒ 後手必勝
ooo_o_oooo_o_ooooo_ooooooooo_oo ⇒ ?
o_oo_ooo_oooo_ooooo_oooooo_ooooooo_oooooooo_ooooooooo ⇒ ?
0820デフォルトの名無しさん
2014/11/18(火) 10:30:43.70ID:tdQrToq/Java
http://ideone.com/Epijmq
0821デフォルトの名無しさん
2014/11/18(火) 12:55:59.50ID:iTyFcfWRo_oo ⇒ 後手必勝
oo_o ⇒ 先手必勝
と出るけどおかしくない?
0822デフォルトの名無しさん
2014/11/18(火) 13:59:19.61ID:qxRrMb2e0823デフォルトの名無しさん
2014/11/18(火) 14:06:31.59ID:tdQrToq/上 先手1 後手2 先手取れない
下 先手1 後手1 先手1 後手取れない
0824デフォルトの名無しさん
2014/11/18(火) 14:08:03.14ID:WFCSoEiBhttps://paiza.io/
0825820=823
2014/11/18(火) 14:09:34.89ID:tdQrToq/左から取って行くと勝手に読んでたようだw
0826デフォルトの名無しさん
2014/11/18(火) 15:53:58.08ID:O+aK1btbどちらでもない、って有るの?
0827デフォルトの名無しさん
2014/11/18(火) 17:01:37.40ID:iTyFcfWR多倍長ライブラリ使わないで
http://ideone.com/t4D6dt
0828デフォルトの名無しさん
2014/11/18(火) 17:56:29.32ID:fEa2iRSy各プレイヤーは条件に合う石を自由に選んで取ってよい、という解釈でいいんだよな?
俺もてっきり左から取っていくのかと思ったわ。回転寿司に責任がある。
0829デフォルトの名無しさん
2014/11/18(火) 18:57:28.43ID:F8LzGWbb左から取っていく方が面白そうだねw
0830819
2014/11/18(火) 19:09:01.87ID:RFny4PrSそれも含めて考えてほしかったので、あえて入れました。
まあ、考えるまでもなく明らかだったかもしれませんが。
>>828
はい、その解釈でOKです。
0831デフォルトの名無しさん
2014/11/18(火) 19:27:26.52ID:XECYI/oL0832デフォルトの名無しさん
2014/11/19(水) 00:17:43.90ID:AQBtgxdShttp://fox.2ch.net/test/read.cgi/poverty/1416286592/
0833デフォルトの名無しさん
2014/11/19(水) 00:26:16.25ID:vzlN/B5shttp://ideone.com/phH3gJ
一応答え出したけど合ってるかな
0834819
2014/11/19(水) 01:23:56.61ID:dm216OYoはい、合ってます。
手元のPCで時間は掛ったけど以下の2つも試してみたらいずれも正しい結果でした。
ooooooooo_oooooooooo_ooooooooooo -> 後手必勝
_ooooooooooooo__oooooooooooooooo -> 後手必勝
0835デフォルトの名無しさん
2014/11/19(水) 01:26:55.23ID:g3hRCnVe確立された解法でも存在しない限り
正答が導き出されているかは出題者でも分かりえないんじゃないのか
0836デフォルトの名無しさん
2014/11/19(水) 03:34:08.45ID:20WFMgOGそのプログラムの答えと効率的なアルゴリズムのプログラムの答えを照らし合わせて、
効率的なプログラムが正しいかどうかを判定すればいい。
原始的なプログラムが正しいかどうかは、コードを慎重に調べて判断するしかないだろうなあ。
0837デフォルトの名無しさん
2014/11/19(水) 03:54:52.44ID:59EEsigK問題に対する探索を虱潰しで検証するのは計算量をさておけばなんとかなるとしても、
照らし合わせる問題(テストケース)を虱潰しするというのは大抵の場合まず無理かと…
0838デフォルトの名無しさん
2014/11/19(水) 07:19:53.43ID:aCVs5KcF0839デフォルトの名無しさん
2014/11/19(水) 07:31:13.84ID:aCVs5KcF0840デフォルトの名無しさん
2014/11/19(水) 17:36:34.24ID:3wKEOI7B( ・ω・) < オツカレサマナノン
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)旦旦旦旦旦旦旦旦
0841デフォルトの名無しさん
2014/11/19(水) 23:37:36.90ID:yf5tJOMNhttp://ideone.com/1IGJ91
やり方知ってるからなんだけど、石が100個並んでても計算できる
0842デフォルトの名無しさん
2014/11/19(水) 23:48:03.06ID:g3hRCnVe0843デフォルトの名無しさん
2014/11/21(金) 15:01:41.30ID:ttShYQWfN桁の2進数で表記したとき最も1の数が多く、かつ最小の平方数を1つ求めよ
平方数とは 1, 4, 9, 16, 25, .. のような数である
N=4 -> 9
N=5 -> 25
N=10 -> 441
N=22 -> ?
N=37 -> ?
0844デフォルトの名無しさん
2014/11/21(金) 18:34:16.72ID:dAhQCobzRubyで。
http://ideone.com/cbuFey
ideoneでは、N=37がタイムアウト。
手元PCで
N=4 -> 9
N=5 -> 25
N=10 -> 441
N=22 -> 1540081
N=37 -> 127506840561
0845デフォルトの名無しさん
2014/11/21(金) 19:23:02.44ID:9WrlNOac二ムだからかな?
0846デフォルトの名無しさん
2014/11/21(金) 19:37:57.93ID:i6wyyOWo俺が問題を勘違いしてるのか答えが合わない・・・orz
もしくはどこかミスってる・・・?(´・ω・`)
https://paiza.io/projects/oUzFZ4CrchW4P7o47uq9SQ
N=4 -> 9
N=5 -> 25
N=10 -> 729
N=22 -> 2621161
N=37 -> 127506840561
0847デフォルトの名無しさん
2014/11/21(金) 19:54:51.81ID:SUhoPqIKなかなかどうして便利すな
0848デフォルトの名無しさん
2014/11/21(金) 20:50:03.58ID:Mc3QBWVuhttps://paiza.io/projects/ybXZFT8qPNzwslE_-EMfvw
0849デフォルトの名無しさん
2014/11/21(金) 21:28:10.48ID:zavT8Fs+f =: 3 : 0
a =. +/"1 #: *: >: i. <. %: 2^y
*: x: {. >: I. a = >./ a
)
f 4
9
f 5
25
f 10
441
f 22
1540081
f 33
4823441401
f 37
127506840561
0850デフォルトの名無しさん
2014/11/21(金) 22:49:59.43ID:8R/hV6+rhttps://paiza.io/projects/ewq-h5cPYGE9D6d6mL1KBQ
0851デフォルトの名無しさん
2014/11/22(土) 00:14:59.85ID:5W4JGCuzc
5秒制限に引っかからない 53ビットまで出力してみたけど合ってるのかな
http://ideone.com/CQSEmz
0852デフォルトの名無しさん
2014/11/22(土) 00:49:08.62ID:nwjtnU50http://ideone.com/9mgRmA
石取りゲームはさっぱり分からないし、この問題も効率のいい解法が分からない…
0853デフォルトの名無しさん
2014/11/22(土) 01:49:50.48ID:93ERrC4sN桁ってのは上位桁が0なのも含むのか・・・どうりで
http://melpon.org/wandbox/permlink/jh6WAgck30oMSilf
N=4 -> 9
N=5 -> 25
N=10 -> 441
N=22 -> 1540081
N=37 -> 127506840561
0854デフォルトの名無しさん
2014/11/22(土) 05:26:58.35ID:xQSK0UIOhttps://paiza.io/projects/e5-pEgs2zUFO0S9XK46gGA
http://ideone.com/Hu96zh
53bitまでideone3.85秒 paiza0.24秒…16倍速
long多用コードでideoneが32bit-JavaVMなことを差し引いてもpaiza速いな
0855デフォルトの名無しさん
2014/11/22(土) 09:45:43.98ID:nwjtnU50少しだけ改良した
R
http://ideone.com/GbXTEU
0856デフォルトの名無しさん
2014/11/22(土) 15:17:57.91ID:PQXD1qeqf <- function(n){
a <- 0; b <- 0
for(i in 1:floor(sqrt(2 ^ n - 1))){
ii <- i ^ 2
d <- 0; w <- ii
while(w > 0){d <- d + w %% 2; w <- w %/% 2}
if(a < d){a <- d; b <- ii}
}
b
}
> f(4)
[1] 9
> f(5)
[1] 25
> f(10)
[1] 441
> f(22)
[1] 1540081
> f(37)
[1] 127506840561
0857デフォルトの名無しさん
2014/11/22(土) 17:08:20.72ID:n11u2nWVいつも短いコードで凄いと思うんだけど、Webで試せる環境がないものか・・・
0858デフォルトの名無しさん
2014/11/22(土) 17:22:00.12ID:LOH/JPWZ| fn |
fn := [:N |
((1 to: (2 << (N - 1) - 1) sqrt asInteger)
detectMax: [:M | (M squared radix: 2) occurrencesOf: $1]
) raisedTo: 2
].
fn value: 4. "=> 9 "
fn value: 5. "=> 25 "
fn value: 10. "=> 441 "
fn value: 22. "=> 1540081 "
fn value: 37. "=> 127506840561 "
0859デフォルトの名無しさん
2014/11/22(土) 18:44:01.23ID:PQXD1qeqJ言語が試せる所はAnarchy GolfのPerformance checkerぐらいしかしりません。
0860デフォルトの名無しさん
2014/11/22(土) 18:53:43.82ID:12O32o1ghttp://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
http://runnable.com/
http://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/
0862デフォルトの名無しさん
2014/11/23(日) 02:22:34.63ID:exByohQMガウス=ルジャンドルの公式かな
0863デフォルトの名無しさん
2014/11/24(月) 20:45:35.84ID:U0wuvsWn( ・ω・) < ステンバーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)ww、、mv、www、vvvv
0864片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/11/24(月) 21:29:57.30ID:cxOxEmtO0865デフォルトの名無しさん
2014/11/24(月) 21:58:43.62ID:roqr151s関数指向の純粋・並列性とを両立するには
両者の利点と欠点の「トレードオフ」を考慮した上で、どのような「最適化」があり得るか議論せよ。
0866デフォルトの名無しさん
2014/11/24(月) 22:36:17.34ID:tAtmBlnaf=:2&(<\),<@{:
f 'hello'
+--+--+--+--+-+
|he|el|ll|lo|o|
+--+--+--+--+-+
f 'nishioishin'
+--+--+--+--+--+--+--+--+--+--+-+
|ni|is|sh|hi|io|oi|is|sh|hi|in|n|
+--+--+--+--+--+--+--+--+--+--+-+
0867デフォルトの名無しさん
2014/11/24(月) 22:48:17.82ID:iz9gskEV0868デフォルトの名無しさん
2014/11/24(月) 22:53:07.40ID:/10MgId3http://d.hatena.ne.jp/mzp/20070619/gram
2-gramは自然言語の統計的性質のひとつ。特定の2文字がどれくらいの頻度で、連続するかを調べる。
0869デフォルトの名無しさん
2014/11/24(月) 23:07:35.26ID:cxOxEmtOそのページの説明が間違ってるみたいだ。不合格。
0870デフォルトの名無しさん
2014/11/24(月) 23:16:04.98ID:LHrE6g58class String
def ngram
p (a=self.split(''))
.zip(a[1..-1])
.map!{|e|e.join()}
.join('|')
end
end
["ascii","helloo"].map(&:ngram)
0871デフォルトの名無しさん
2014/11/24(月) 23:21:54.06ID:cxOxEmtO0872デフォルトの名無しさん
2014/11/25(火) 00:25:51.34ID:nbtqvUhlhttps://paiza.io/projects/7zSxwOc8mQoXZTY017ogXQ
0873デフォルトの名無しさん
2014/11/25(火) 00:50:34.87ID:rSs/UAQbhttp://ideone.com/x6LRL3
入力ソース
http://www.cs.cmu.edu/~rgs/alice-table.html
0874デフォルトの名無しさん
2014/11/25(火) 07:34:59.18ID:OegtB7X3http://ideone.com/tnujcH
0875デフォルトの名無しさん
2014/11/25(火) 08:09:19.26ID:4laRyWCBhttp://ideone.com/Xe3wbA
0876デフォルトの名無しさん
2014/11/25(火) 09:36:26.55ID:gJKZVwWb最後に石を取った方が勝ち
つまり、最後の1手を指した方が勝ち
o, oo は勝ち
o 勝ち→o_o 負け→o_o_o, o_o_oo, o_oo, o_ooo, ooo, oooo 勝ち
ただし順不同で、o_o_oo, o_oo_o, oo_o_o は同じで勝ち
o_o_o 勝ち→o_o_o_o 負け→
o_o_o_o_o, o_o_o_o_oo, o_o_o_oo, o_o_o_ooo 勝ち
oo, o_oo 勝ち→oo_oo 負け→
oo_oo_o, oo_oo_oo, oo_ooo, oo_oooo, ooooo, oooooo 勝ち
0877デフォルトの名無しさん
2014/11/25(火) 09:39:15.27ID:/SHShGYK>>819と同じじゃねーの?
0878デフォルトの名無しさん
2014/11/25(火) 12:18:13.98ID:XNJ9UhcabigramOf := [:str |
| bag |
bag := Bag new.
str asArray overlappingPairsDo: [:a :b | bag add: '', a, b].
bag sortedCounts
].
bigramOf value: 'long, long ago a little girl lived with her mother near the woods.'
"=> {3->'r '. 3->'he'. 3->'th'. 3->' l'. 2->'lo'. 2->' w'. 2->'e '. 2->'it'. 2->'ng'. 2->'li'.
2->' a'. 2->'on'. 2->'er'. 1->'g '. 1->'ed'. 1->'go'. 1->'mo'. 1->' h'. 1->'ds'. 1->' g'.
1->'ea'. 1->'tl'. 1->'iv'. 1->'g,'. 1->'ag'. 1->'l '. 1->'ve'. 1->'gi'. 1->'d '. 1->'ot'.
1->' t'. 1->'od'. 1->'s.'. 1->'ir'. 1->'wo'. 1->'rl'. 1->'ar'. 1->'ne'. 1->'tt'. 1->' n'.
1->'o '. 1->'oo'. 1->'le'. 1->' m'. 1->'wi'. 1->'h '. 1->', '. 1->'a '} "
0879デフォルトの名無しさん
2014/11/25(火) 13:02:06.69ID:yJ4OAUnmf=:3 :';&.>(\: {:"1)(~. ;"_1 #/.~)(<@{:,~2&(<\)) y'
f 'konokodokonoko'
+--+-+
|ko|4|
+--+-+
|ok|3|
+--+-+
|on|2|
+--+-+
|no|2|
+--+-+
|od|1|
+--+-+
|do|1|
+--+-+
|o |1|
+--+-+
0880デフォルトの名無しさん
2014/11/25(火) 13:31:04.24ID:ZIMeIskYimport Data.List
main = print $ bigram "tonarinokyakuhayokukakikuukyakuda"
bigram str = reverse $ sort $ map (\x->(length $ filter (x==) $ pairs str, x)) $ nub $ pairs str
pairs [a] = [[a]]
pairs (a:b:s) = [a, b] : pairs (b:s)
----
[(4,"ku"),(3,"ak"),(2,"ya"),(2,"uk"),(2,"ok"),(2,"ky"),(1,"yo"),(1,"uu"),
(1,"uh"),(1,"ud"),(1,"to"),(1,"ri"),(1,"on"),(1,"no"),(1,"na"),(1,"ki"),
(1,"ka"),(1,"in"),(1,"ik"),(1,"ha"),(1,"da"),(1,"ay"),(1,"ar"),(1,"a")]
0881デフォルトの名無しさん
2014/11/25(火) 17:03:50.52ID:fATWhlU/959 名前:デフォルトの名無しさん[sage] 投稿日:2014/11/24(月) 20:50:31.37 ID:S++9Igbs
App Storeの激問というアプリを解くプログラムを作ったのですが、総当たりで探していっているため、1つの問題を解くのに10日くらいかかってしまいます。どうすればいいのでしょうか?
974 名前:デフォルトの名無しさん[sage] 投稿日:2014/11/24(月) 23:03:18.25 ID:S++9Igbs
>>971
http://www.youtube.com/watch?v=7wi9f8VudSA/
こちらを見ていただければ理解出来ると思います。
0882デフォルトの名無しさん
2014/11/25(火) 17:43:55.23ID:ZIMeIskY0883デフォルトの名無しさん
2014/11/25(火) 17:51:29.78ID:/SHShGYK順方向は1手順4方向で済むけど、逆方向の探索は計算量爆発しない?
0884デフォルトの名無しさん
2014/11/25(火) 17:59:50.27ID:ZIMeIskY壁際にくっついてるときか・・・見落としてた
0885デフォルトの名無しさん
2014/11/25(火) 19:05:13.39ID:180uvbBo状態間の最短経路を求める問題?
0886デフォルトの名無しさん
2014/11/25(火) 20:36:16.95ID:yJ4OAUnmf := method(s,
a := list
for(i, 0, s size - 1,
a push(s slice(i, i + 2))
)
a uniqueCount map(v, list(v last, v first)) sort reverse
)
Io> f("konokodokonoko")
==> list(list(4, "ko"), list(3, "ok"), list(2, "on"), list(2, "no"), list(1, "od"), list(1, "o"), list(1, "do"))
0887デフォルトの名無しさん
2014/11/25(火) 23:10:31.69ID:cgOI2K2pfrom collections import Counter
def f(s):
return Counter(s[i:i+2] for i in range(len(s))).most_common()
print f("konokodokonoko")
---
[('ko', 4), ('ok', 3), ('on', 2), ('no', 2), ('do', 1), ('od', 1), ('o', 1)]
0888デフォルトの名無しさん
2014/11/26(水) 02:25:11.58ID:RppPx89Ihttp://ideone.com/xyqMrd
双方向探索してみた
動画中の面が何分立っても解けないから、バグがあるかもしれん
動画中の面のデータはこれ
8 8
01100000
01104000
01004022
01004022
11000020
11040020
00040220
00040220
0889デフォルトの名無しさん
2014/11/26(水) 02:48:36.27ID:RppPx89Iヒューリスティックスを入れて探索すれば解けるかな?
0890デフォルトの名無しさん
2014/11/26(水) 03:11:25.46ID:0JhIRuCa666862626662688862622446
0891888
2014/11/26(水) 05:22:52.41ID:RppPx89I0892デフォルトの名無しさん
2014/11/26(水) 08:14:05.72ID:S6ZqR3WO「整数の素数による分割数」
整数の素数による分割の仕方は何通りあるかを出力せよ
例)
5 = 2 + 3
5 = 5
の 2 通り
6 = 3 + 3
6 = 2 + 2 + 2
の 2 通り
問題)
10 -> 5
20 -> 26
50 -> 819
100 -> 40899
1000 -> ???
10000 -> ????
0893デフォルトの名無しさん
2014/11/26(水) 09:49:54.45ID:7e/D93df双方向からのほうが計算量は減るよなあ。
前方からの全展開だと一手ごと約4乗ずつ増えてくけど。
双方向からだと中間地点までの展開で済むからなあ。
0894デフォルトの名無しさん
2014/11/26(水) 11:04:26.85ID:7e/D93dfttp://weekly.ascii.jp/elem/000/000/276/276086/141119nonouegeki_006_cs1e1_x480.jpg
ttp://weekly.ascii.jp/elem/000/000/276/276087/141119nonouegeki_007_cs1e1_x480.jpg
ttp://weekly.ascii.jp/elem/000/000/276/276065/
これあった
ttp://s5.mzstatic.com/r30/Purple3/v4/da/91/5a/da915a27-d676-169d-4fbb-64c213164e6e/screen1136x1136.jpeg
ttp://s2.mzstatic.com/r30/Purple3/v4/2c/3f/13/2c3f1375-5c01-b82e-5b01-a79deef51503/screen960x960.jpeg
ttp://sensortower.com/ios/jp/ponos/app/ji-wen/905858795
0895デフォルトの名無しさん
2014/11/26(水) 12:03:50.88ID:7e/D93dfルービックキューブは20手以内で必ず解ける、数学者チームが特定 :AFPBB News
http://afpbb.ismcdn.jp/mwimgs/9/9/500x400/img_991a8c7034bc6b3a173ca163d81db10f111144.jpg
http://www.afpbb.com/articles/-/2748734?pid=6083818
3x3x3サイズの解法は、Googleの力を借りて全通り分析という力技でした。
キューブのサイズが大きくなると考えられる組み合わせは飛躍的に多くなり、すぐに太刀打ちできなくなります。
そこでDemaine教授らは、キューブのうち一点を、なるべく他を変化させないようにしたまま、目的の場所まで動かす方法を利用し
この動きを利用して他の点も同時に目的地へ進めていくというアルゴリズムを考案しました。
さて、ルービックキューブ問題はこれで終わったのでしょうか? そうではない、というのが教授の答えです。
今後も、Nサイズのルービックキューブを解くのに最小で何手が必要なのか、といった問題が残されているとのこと。
http://japanese.engadget.com/2011/07/04/rubik/
0896デフォルトの名無しさん
2014/11/26(水) 16:17:47.14ID:RppPx89I0897デフォルトの名無しさん
2014/11/26(水) 16:48:05.42ID:qw6T8pbVスマートな解答手順を導き出す方法があるんじゃね
0898デフォルトの名無しさん
2014/11/26(水) 18:57:16.60ID:GMqvx0ghまたは、解が存在することが、理屈上判っているとか?
0899デフォルトの名無しさん
2014/11/26(水) 21:11:59.03ID:0JhIRuCa0900デフォルトの名無しさん
2014/11/26(水) 22:17:38.58ID:RppPx89I00114000
00111110
00004110
00224000
00222220
00004220
00000000
00002222
00002402
00002042
00002222
11110000
14010000
10410000
11110000
この2つは解けるようになった。後者は20秒かかる
0901デフォルトの名無しさん
2014/11/26(水) 22:54:13.19ID:7e/D93df後方のほうがコストはかかるけど、総合すれば前方だけよりはいいのでは?
完成形になる数手前を展開しておいて、前方からの探索がヒットするのを待つ感じでは。
0902デフォルトの名無しさん
2014/11/26(水) 23:01:38.38ID:0JhIRuCa前方探索のみの俺のは前者32秒 後者3秒だわw
0903デフォルトの名無しさん
2014/11/26(水) 23:09:35.79ID:0JhIRuCa一手前の形を全部リストアップするうまい方法が思いつかんのん…
900下の完成系から1手前は5*2*2*5+5*2*2*5の200通り?
頭では思いつくけどコードに落とし込めないw
0904888
2014/11/27(木) 00:25:12.59ID:6aaa4mb/一応今の状態を晒す
人に読ませるようには書いてないけど
http://ideone.com/zm3q0s
0905デフォルトの名無しさん
2014/11/27(木) 01:08:32.12ID:TBI0xp5sすんげぇなぁ
俺は頭がうにだ
0906デフォルトの名無しさん
2014/11/27(木) 01:14:32.30ID:wWt/SSri0907デフォルトの名無しさん
2014/11/27(木) 01:32:36.03ID:wWt/SSri変化の起こりやすさも加味して距離を考えることが必要だということである。
http://id.fnshr.info/2011/11/30/dna/
動的計画法と配列アラインメント コンピューター・サイエンスを分子生物学に役立てる
http://www.ibm.com/developerworks/jp/java/library/j-seqalign/
編集距離(Edit Distance)
応用
入力文字列と類似した単語の候補を提示する。
表記ゆれ検出 「データベース」、「データ・ベース」「データーベース」といった、表記の違いを検出。
http://www.cs.t-kougei.ac.jp/SSys/LevenS.htm
0908デフォルトの名無しさん
2014/11/27(木) 08:47:14.09ID:md1v7rrNコマンド流しこんで眺めるだけのコードを書いた
お題には答えてないからアレだけど一応晒し
http://ideone.com/Y0QCAi
0910デフォルトの名無しさん
2014/11/27(木) 09:35:19.73ID:md1v7rrN修正
http://ideone.com/MgIxHJ
0911デフォルトの名無しさん
2014/11/27(木) 19:39:19.39ID:wWt/SSriほとんど、ゴールに到達していても、長手数や不可能もあり得る。
ゴールはここで
◎□□◎
□□□□
□□□□
◎□□◎
スタートがこれだったら完成不可だ。
●□●□
□□□□
□□□□
●□□●
0912デフォルトの名無しさん
2014/11/27(木) 21:21:00.41ID:uAA7J2EP0913デフォルトの名無しさん
2014/11/27(木) 21:47:23.82ID:1KfKaQIf動かした結果その形になるという場合の数の方がかなり少ないのだろう
0914デフォルトの名無しさん
2014/11/28(金) 10:15:01.81ID:1KQmuKPIコマを変更して繰り返しそれらリストの共通部分を求める、というのはどうだ。
少なくとも2コマがクリア出来なければ全体もできない。
0915デフォルトの名無しさん
2014/11/28(金) 10:26:27.77ID:1KQmuKPIhttp://www.youtube.com/watch?v=Z1eVJ0c37Yo
http://www.youtube.com/watch?v=x8L1_HinQt0
0916デフォルトの名無しさん
2014/11/28(金) 10:35:49.87ID:1KQmuKPI2コマだと邪魔がない時、コマの動きが変わってしまう。
0917デフォルトの名無しさん
2014/11/28(金) 19:26:49.94ID:1KQmuKPI無展開で闇雲に探索すると難しいが、100万局面展開されていれば当たりやすい。
hash(局面) < 32ビットとして、メモリ上に1か2バイト長でゴールまでの手数を記録する方針でいいか。
0918デフォルトの名無しさん
2014/11/28(金) 21:33:40.12ID:RAl0168p0919デフォルトの名無しさん
2014/11/29(土) 06:59:17.78ID:sDw36FaE局面からクラスを計算する方法があれば読まなくていいところが判明する。
クラス3
●□□●
□□□□
□□□□
□□□□
クラス2
●□●□
□□□□
□□□□
□□□□
クラス1
●●□□
□□□□
□□□□
□□□□
0920デフォルトの名無しさん
2014/11/29(土) 08:10:39.33ID:9ge5Lh8B0921デフォルトの名無しさん
2014/11/29(土) 15:26:14.75ID:sDw36FaE□□□□
□□□□
□□□◎
□□◎◎
に対して、ゴールマスへたどり着く最短手数をマスへ記録して
5432
4321
3210
2100
それを評価関数に使って、値の小さい局面を優先するのはどうか?
確率に変換し読む深さ、読む量を変える。まんべんなく網羅はコスト高。
http://kmo2.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/2008/03/12/ucttree.jpg
http://kmo2.cocolog-nifty.com/prog/2008/03/uct_240a.html
0922デフォルトの名無しさん
2014/11/29(土) 17:02:31.20ID:tRG4REso↓
ゴールと同形か(Yes/No)
↓No ↓Yes
↓←No 平行移動だけでゴールに到達できるか(Yes/No) →Yes めでたしめでたし
↓
移動により1段階変形するパターン全通りを求めそれぞれについて探索
(平行移動で過去に探索したパターンと一致するならそれを除去できると尚よい)
0923デフォルトの名無しさん
2014/11/29(土) 17:50:21.93ID:UAhEiFh/あと、スタートと同型でも途中で型をぐちゃぐちゃにしないと解けない問題があるから、n段階変形のnが爆発しちゃわないかな
0924デフォルトの名無しさん
2014/11/29(土) 19:45:13.57ID:2Qy7Z1JP最終結果は幾つかの四角形に分解したいのです。例えば、
例1
┌──────┐B
│ │
┏━┿━━━━━━┿━┓A
┃ │ │ ┃
┃ │ │ ┃
┗━┿━━━━━━┿━┛
│ │
└──────┘
を、A-Bして、以下の二つの長方形に分解
┏━┓ ┏━┓A-B
┃ ┃ ┃ ┃
┃ ┃ ┃ ┃
┗━┛ ┗━┛
0925デフォルトの名無しさん
2014/11/29(土) 19:46:00.64ID:2Qy7Z1JP┏━━━━━━━━┓A
┃ ┃
┃ ┌───╂──┐B
┃ │ ┃ │
┃ │ ┃ │
┗━━━━┿━━━┛ │
│ │
└──────┘
をA-Bして、
┏━━━━━━━━┓A-B
┃ ┃
┃ ┏━━━┛
┃ ┃
┃ ┃
┗━━━━┛
それを、以下のように分解。
┏━━━━┓┏━━━┓
┃ ┃┃ ┃
┃ ┃┗━━━┛
┃ ┃
┃ ┃
┗━━━━┛
細かく場合分けすれば可能だとは思うのですが、何かスマートなアルゴリズムがないかなと
考えているのですが思いつきません。良いアルゴリズムがあれば教えて下さい。
C++、VBなど何でもOKです。
0926デフォルトの名無しさん
2014/11/29(土) 19:54:26.50ID:2Qy7Z1JP例1
┌──────┐B
│ │
┏━┿━━━━━━┿━┓A
┃ │ │ ┃
┃ │ │ ┃
┗━┿━━━━━━┿━┛
│ │
└──────┘
を、A-Bして、以下の二つの長方形に分解
┏━┓ ┏━┓A-B
┃ ┃ ┃ ┃
┃ ┃ ┃ ┃
┗━┛ ┗━┛
0927デフォルトの名無しさん
2014/11/29(土) 19:54:51.24ID:2Qy7Z1JP┏━━━━━━━━┓A
┃ ┃
┃ ┌───╂──┐B
┃ │ ┃ │
┃ │ ┃ │
┗━━━━┿━━━┛ │
│ │
└──────┘
をA-Bして、
┏━━━━━━━━┓A-B
┃ ┃
┃ ┏━━━┛
┃ ┃
┃ ┃
┗━━━━┛
それを、以下のように分解。
┏━━━━┓┏━━━┓
┃ ┃┃ ┃
┃ ┃┗━━━┛
┃ ┃
┃ ┃
┗━━━━┛
0928デフォルトの名無しさん
2014/11/29(土) 19:56:00.60ID:2Qy7Z1JP0929デフォルトの名無しさん
2014/11/29(土) 19:57:58.66ID:9ge5Lh8B0930デフォルトの名無しさん
2014/11/29(土) 20:04:45.61ID:sHWd6Lx7┏━━━━━━━━┓A
┃ ┃
┃ ┌───╂──┐B
┃ │ ┃ │
┃ │ ┃ │
┗━━━━┿━━━┛ │
│ │
└──────┘
をA-Bして、
┏━━━━━━━━┓A-B
┃ ┃
┃ ┏━━━┛
┃ ┃
┃ ┃
┗━━━━┛
それを、以下のように分解。
┏━━━━┓┏━━━┓
┃ ┃┃ ┃
┃ ┃┗━━━┛
┃ ┃
┃ ┃
┗━━━━┛
0931デフォルトの名無しさん
2014/11/29(土) 20:07:13.19ID:sDw36FaE0932デフォルトの名無しさん
2014/11/29(土) 20:12:25.65ID:2Qy7Z1JP座標は整数値です
最後の例は縦に切っていますが、横でもかまいません。
それ以上は分割したくありません。
0933デフォルトの名無しさん
2014/11/29(土) 20:12:53.94ID:2Qy7Z1JPありがとうございます。
0934デフォルトの名無しさん
2014/11/29(土) 21:48:20.73ID:sDw36FaE長手数でも正解手順を作って、それをショートカットする手順を追加したらいいかも。
しかし、一つ以外の形・模様を変えない移動方法がわからん。
0935デフォルトの名無しさん
2014/11/29(土) 22:23:13.29ID:8qv5hUBCBがAの中に入っちゃう場合は、4つに分けるってこと?
0936デフォルトの名無しさん
2014/11/29(土) 22:25:18.68ID:2Qy7Z1JPそうです。
0937デフォルトの名無しさん
2014/11/29(土) 22:35:06.97ID:8qv5hUBCでは、BがAからはみ出してる分をトリム後、ABの座標差を出力すればいい。
0938デフォルトの名無しさん
2014/11/29(土) 22:41:05.29ID:tRG4REsoBの上辺を通る直線でAを分割できるなら分割(四角形A2と四角形A3)
Bの下辺を通る直線でA2とA3をそれぞれ分割(A4,A5,A6,A7)
Bの右辺を通る直線でA4とA5とA6とA7をそれぞれ分割(A8〜A23)
Bの左辺を通る直線でA8〜A23をそれぞれ分割(A24〜A55)
四角形群A24〜A55のうちBの内部にある四角形を全て除去
残った四角形群のうち、幅もしくは高さが一致する隣合う四角形を結合、結合できるものがある限りこれを繰り返す
A-Bの出来上がり!
0939デフォルトの名無しさん
2014/11/29(土) 22:58:45.95ID:8qv5hUBCRubyで。
http://ideone.com/tnXtK0
0940デフォルトの名無しさん
2014/11/29(土) 23:26:43.26ID:8qv5hUBC訂正
http://ideone.com/x6pxE2
0941デフォルトの名無しさん
2014/11/30(日) 00:12:40.88ID:A3bvJH4W0942デフォルトの名無しさん
2014/11/30(日) 00:26:32.17ID:GENLcuuxC#
座標系は普通のデカルト座標。(Y軸が上向き)
http://ideone.com/V6fJGX
0943デフォルトの名無しさん
2014/11/30(日) 01:11:14.00ID:A3bvJH4W0944デフォルトの名無しさん
2014/11/30(日) 07:05:28.55ID:xgK7ePig>>940さんのRuby版
>>942さんのC#版
両者共に、期待通りの結果が得られました。
与える四角形データ(x1,y1)-(x2,y2)がC#版では(左上)-(右下),Ruby版では(左下)-(右上)であることに
気付かず、最初はどっちかがおかしいのではと混乱したのですが、良く調べたら分りました。
それにしても、皆さん、抜群に頭いいですね。
私は、if文を何重にも入れ子にして、場合分けで解決しようとしたのですが、
こんなに短いアルゴリズムで書けるとは、驚きももの木です。
ありがとうごいました。
0945デフォルトの名無しさん
2014/11/30(日) 11:57:06.54ID:E9FsLWG8( ・ω・) < オケーイ
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)nday sunday sunday
0946デフォルトの名無しさん
2014/11/30(日) 12:44:23.09ID:zFCnNii2http://ideone.com/5FrueA
>>904を参考に双方向幅優先探索
01100000 01104000 01004022 01004022 11000020 11040020 00040220 00040220
11111111 40404040 40404040 00000404 04000004 40404040 40404040 22222222
11110000 11110000 11110000 11114000 00042222 00002222 00002222 00002222
幅優先全探索だとここら辺をideoneに解かせるの難しいかあ
0947デフォルトの名無しさん
2014/12/01(月) 08:40:28.69ID:Hys2LhmIお題:
(1)文字列30123の中に3の倍数は3,3,12,30,123,3012,30123の7つ隠れている。
このように、0〜9からなる文字列Sが与えられるので、Sの部分文字列の中で、
3の倍数を10進数で表した形のものが全部でいくつあるか求めよ。
(2)同様に、与えられたSの中に7の倍数がいくつ隠れているか求めよ。
※1≦Sの長さ≦5万
0948デフォルトの名無しさん
2014/12/01(月) 10:12:06.39ID:9ZbThdOUhttp://ideone.com/vYlvs7
7の倍数の方あってるかどうかわからん
0949デフォルトの名無しさん
2014/12/01(月) 10:13:53.73ID:9ZbThdOU0951デフォルトの名無しさん
2014/12/01(月) 11:40:30.59ID:q+u8ChsUcodepad、paiza.ioではタイムアウト。
http://ideone.com/CHHPWn
0952デフォルトの名無しさん
2014/12/01(月) 14:58:02.66ID:9ZbThdOUhttp://ideone.com/FshVnV
0953デフォルトの名無しさん
2014/12/01(月) 15:50:39.63ID:SXEnqpb2全通り検索する以外の方策あるのこれ?
Sの最大が5万桁とか無理ぽげ
0954デフォルトの名無しさん
2014/12/01(月) 16:05:39.20ID:SXEnqpb2http://www004.upp.so-net.ne.jp/s_honma/number/multiple.htm
0955デフォルトの名無しさん
2014/12/01(月) 16:44:58.46ID:09mVmnW80956デフォルトの名無しさん
2014/12/01(月) 16:59:59.15ID:9ZbThdOUhttp://ideone.com/OPy4YC
速くなった
0957デフォルトの名無しさん
2014/12/01(月) 20:03:18.94ID:q+u8ChsUロジック修正、高速化
http://ideone.com/bXlJOv
0958デフォルトの名無しさん
2014/12/01(月) 20:57:33.68ID:ijHbSx6t0959デフォルトの名無しさん
2014/12/02(火) 01:00:59.61ID:h63pZmVMPython3で。
http://ideone.com/otGM4p
0960デフォルトの名無しさん
2014/12/03(水) 17:16:06.37ID:iXJD6liKhttps://paiza.jp/poh/enkoi
漫画をコンプリートしようぜ
0961デフォルトの名無しさん
2014/12/03(水) 20:58:27.30ID:jxdxvQyf結婚できたけど、3で0.03秒切れなかったな
0962デフォルトの名無しさん
2014/12/03(水) 23:19:42.23ID:wjBJZQtz今更C#で参戦。
http://ideone.com/cp42Qc
ダメだ1万に減らしてもクソ遅い
0963デフォルトの名無しさん
2014/12/04(木) 05:40:40.21ID:0vTQY+f33の倍数だからそれ使うのかなあ
0964デフォルトの名無しさん
2014/12/04(木) 06:45:26.38ID:zmKnP70x5万桁入力値生成
https://paiza.io/projects/J_fJNMbTbAdMLFXFI-HDFQ
https://out.paiza.io/projects/J_fJNMbTbAdMLFXFI-HDFQ/output.txt
回答
https://paiza.io/projects/t3-MsN-PoETqirsuO3Y2Mg
http://ideone.com/fAbrnf
0965デフォルトの名無しさん
2014/12/04(木) 08:25:19.54ID:xzIHTICohttp://ideone.com/7OC7iK
>>946に>>921を入れてみた…ideone15秒なら解けるようになったが最短手筋ではない。
0966デフォルトの名無しさん
2014/12/04(木) 10:22:55.54ID:O8i/JhQLやるな
0967デフォルトの名無しさん
2014/12/04(木) 20:07:46.59ID:O8i/JhQLパネルからゴールまでの最短距離をcost(i)としたとき評価関数を
和 Σcost(i)、
積 Π(1+cost(i))、
max(cost(i))とするとか。
探索は、現・読み深さ + 評価値 (残り指し手を推定してるとみなす) が最も小さい所だけを読むとか。
評価が最善ではないところにも解がある想定で、最善以外も評価値に応じて読む量を変えるとか。
0968デフォルトの名無しさん
2014/12/04(木) 20:27:06.85ID:e632zg1Pおう、それはまさしく最良優先探索の雄 A* アルゴリズムだ‥やりたいやりたいと思いながら手がつかない‥
0969デフォルトの名無しさん
2014/12/04(木) 20:54:58.71ID:O8i/JhQLリバーシの評価関数の最適化
線形和による古典評価関数 おそらく LOGISTELLO 以前から、「ある特徴の値に重みをかけたものの線形和を評価値とする」という形の評価関数は広く使われていました。
線形和による統計評価関数 LOGISTELLO2 が導入した評価関数は、盤面全てをカバーする「パターン」に全て得点をつけ、それらを線形和によって合計するというものです。
重み係数は回帰分析によって最適化され、極めて正確な盤面評価をすることができます。
http://sealsoft.jp/thell/learning.pdf
ゲーム木探索の最適制御:将棋における局面評価の機械学習
http://www.ipsj.or.jp/10jigyo/forum/software-j2008/hoki-print.pdf
0970デフォルトの名無しさん
2014/12/06(土) 03:07:27.95ID:PJrbaBt5一辺の長さが100程度の正方形の二次元グリッドが有る。
初期化時にランダムに、自機1、敵ミサイルが配置される。
ミサイルは、自機の最初の位置に向かって移動し始めるので、
撃墜されないように自機を動かすプログラムを作れ。
自機は、急転回できない(2ステップ進んだ後なら方向転換できる)
ミサイルは、動き出したら方向を変えない。
また、ミサイルはグリッドの端に達したら、消滅する。
自機、ミサイル共に、グリッドに沿って移動する(XY座標は整数値)
ミサイル数、ミサイルスピード、自機スピードを適当に設定してよい。
0971デフォルトの名無しさん
2014/12/06(土) 05:32:46.75ID:OMWnCsLY0972デフォルトの名無しさん
2014/12/06(土) 09:06:50.46ID:mq+/hqibhttp://ideone.com/rtlklH
3辺から面積を求めるのは簡単だったけど、
面積小さい順を求める方法が思いつかないとダメだな…
0973デフォルトの名無しさん
2014/12/06(土) 09:09:42.24ID:mq+/hqib0974デフォルトの名無しさん
2014/12/06(土) 09:12:51.28ID:mq+/hqib0975デフォルトの名無しさん
2014/12/06(土) 09:55:35.72ID:mq+/hqibhttp://ideone.com/nanJBZ
>>972だと同じ面積の三角形が2個以上あってもリストアップされてなかった。
0976デフォルトの名無しさん
2014/12/06(土) 16:30:28.72ID:V09VpuI50977デフォルトの名無しさん
2014/12/07(日) 03:22:46.80ID:8tL83yqw詰将棋だと最短手順が2000手となるものがあったりするが、激問で2000手の物が存在するかとか、マス9*9、10*10と増やすと難度もアップ。
多項式時間ではとけないという巡回セールスマンと同じ計算量の気がするがどうか。
0978デフォルトの名無しさん
2014/12/07(日) 03:27:31.51ID:8tL83yqw橋本孝治「ミクロコスモス」 [2014年11月24日最終更新]
最長の詰将棋(1525手)、橋本孝治さんの「ミクロコスモス」の話題。将棋世界2006年2月号の付録で、1冊丸ごと「ミクロコスモス」が解説された。
http://toybox.tea-nifty.com/memo/2006/01/post_77be.html
0979デフォルトの名無しさん
2014/12/07(日) 03:38:10.50ID:HaOgOobj0980デフォルトの名無しさん
2014/12/07(日) 03:40:16.93ID:jGd9Zosu0981デフォルトの名無しさん
2014/12/07(日) 09:31:04.96ID:bNXIzb/Bお題じゃなくて売り物作らされてるだけだからなぁ
0982デフォルトの名無しさん
2014/12/07(日) 11:13:56.92ID:mrRmmrIIこれが江戸時代の「煙詰め」とか「裸玉」とか「寿」とか、どんな思考回路なのかと思ってしまう
最近は将棋プロもコンピュータに負かされつつあるが、詰将棋は、一つの芸術的労作として後世まで残ってほしいと思う
0983デフォルトの名無しさん
2014/12/07(日) 17:37:19.66ID:METsjyYp0984デフォルトの名無しさん
2014/12/07(日) 19:03:11.00ID:utwyAni3Famous Mate Problems: "Micro-cosmos"
https://www.youtube.com/watch?v=7iZQdP7nPOg
0985デフォルトの名無しさん
2014/12/07(日) 22:20:24.98ID:sFtpWfCSコメ欄見ると熱心な外人さんが多いね
0986デフォルトの名無しさん
2014/12/07(日) 23:26:58.40ID:8tL83yqw詰将棋ミクロコスモスを解くプログラム
0987デフォルトの名無しさん
2014/12/08(月) 01:05:40.60ID:idZHWDVcこれを解くプログラム
0988デフォルトの名無しさん
2014/12/08(月) 05:13:39.18ID:IpD9Rz54http://www.kashi.info.waseda.ac.jp/~kashi/lec2000/jsj/hako/
ここにあるね
0989デフォルトの名無しさん
2014/12/08(月) 22:38:52.00ID:m6wBRCkxそのリンク死んでないかい?
0990デフォルトの名無しさん
2014/12/08(月) 22:40:07.10ID:m6wBRCkx詰め将棋全般にいえることだが、無駄間(無駄な間駒)を排除する決まりが難しい‥どうすればいい?
0991デフォルトの名無しさん
2014/12/08(月) 23:25:04.42ID:dY1jUe/P俺は見れたが
0992デフォルトの名無しさん
2014/12/09(火) 08:02:14.20ID:hxOL7VFQこの記事が参考になるかも
Bonanzaソース完全解析ブログ
http://d.hatena.ne.jp/LS3600/20100101 新春お年玉プレゼント 詰め将棋問題
http://d.hatena.ne.jp/LS3600/20100105 中合い問題の解説 その1
http://d.hatena.ne.jp/LS3600/20100106 中合い問題の解説 その2
http://d.hatena.ne.jp/LS3600/20100107 中合い問題の解説 その3
http://d.hatena.ne.jp/LS3600/20100108 中合い問題の解説 その4
http://d.hatena.ne.jp/LS3600/20100109 中合い問題の解説 その5
http://d.hatena.ne.jp/LS3600/20100110 中合い問題の解説 その6
http://d.hatena.ne.jp/LS3600/20100108 中合い問題の解説 その4:
> また、私は、合いは次の4つに分類できることを書きました。
> 1) 利きのない場所への打ち中合いの応手生成が省略できる条件
(中略)
> いままで、1)について考えてきました。1)が上の4つのなかで一番簡単に思
> えたからです。そして1)に関して、強力な定理を発見できました。
> (→ http://d.hatena.ne.jp/LS3600/20100107 )
0993デフォルトの名無しさん
2014/12/10(水) 02:30:13.75ID:ajs4Wop5( ・ω・) < オツカレサマナノン
〇={=}〇
|::::::::::\
、、、し 、、、(((.@)旦旦、旦旦旦、、旦、
0994デフォルトの名無しさん
2014/12/10(水) 18:46:12.16ID:YG072uh/今日の激問(最短23手)をideoneで解けるようにしたい…
>>965に解かせても15秒タイムアウトw
残り距離の重み付け(79行目)を3倍にしたら解けるようになったが30手ww
http://ideone.com/qVZxgP
0995デフォルトの名無しさん
2014/12/10(水) 23:05:11.96ID:X4ZXIzIa0996デフォルトの名無しさん
2014/12/11(木) 08:03:08.79ID:fOkuaX7aもテンプレに入れて
0997デフォルトの名無しさん
2014/12/11(木) 15:18:30.03ID:Ipp+K308http://peace.2ch.net/test/read.cgi/tech/1418278634/
0998デフォルトの名無しさん
2014/12/11(木) 16:17:45.85ID:Knr7owVD0999デフォルトの名無しさん
2014/12/11(木) 16:20:05.74ID:Knr7owVD1000デフォルトの名無しさん
2014/12/11(木) 16:22:44.18ID:Knr7owVD10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。