トップページ⇒tech
1001コメント401KB

プログラミングのお題スレ 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:bPxcB0NI
GJ!
0003デフォルトの名無しさん2014/09/21(日) 01:13:44.84ID:WCtTxfaP
乙
0004デフォルトの名無しさん2014/09/21(日) 01:15:01.08ID:l8xEPcUn
>>3
自演乙乙
0005デフォルトの名無しさん2014/09/21(日) 01:17:47.11ID:sIPFIkfg
ここまでテンプレ。
0006デフォルトの名無しさん2014/09/21(日) 02:43:21.38ID:qEI3EgXS
>>1 乙
0007デフォルトの名無しさん2014/09/21(日) 03:05:06.13ID:94PpjV7B
お題: 1つの整数を引数としてとり、その整数を連想させるひとつの文字列を返す
関数goroawaseを定義してください。

(defun goroawase (n)
(goroawase-impl n))
goroawase

(goroawase 18782)
"いやなやつ"

(goroawase (* 18782 2))
"みなごろし"

(goroawase 4649)
"よろしく"
0008デフォルトの名無しさん2014/09/21(日) 04:22:25.56ID:bPxcB0NI
>>7
ttp://ideone.com/mFbSKT
ほぼC。常識を実装することができなかった。
0009デフォルトの名無しさん2014/09/21(日) 08:51:48.33ID:aP8Aq0OA
出題者が辞書提供するなりサポートしる
0010デフォルトの名無しさん2014/09/21(日) 10:52:20.21ID:GSgALpqv
>>7
十分に曖昧なところがあって、久々に良い問題だと思います。
001172014/09/21(日) 11:08:48.77ID:94PpjV7B
>>9
たとえば、SKK 辞書のSKK-JISYO.Lを使ってみてください。
http://openlab.ring.gr.jp/skk/dic-ja.html
0012デフォルトの名無しさん2014/09/21(日) 12:36:12.60ID:tmQCWq8V
100cmの正方形がある
左下の角をA、左上から{N}cm右に移動した位置をB、右下の角をCのとき
直線ANと直線NBの長さを求めよ
0013デフォルトの名無しさん2014/09/21(日) 12:39:48.50ID:tmQCWq8V
1から100までの数字を出力しろ
但し以下の条件がある!!
4で割り切れる場合はFizzを出力しろ
6で割り切れる場合はBuzzを出力しろ
4と6で割り切れる場合はFizzBuzzを出力しろ
5で割り切れる場合は何も出力するな
それ以外は数字を出力しろ
出力ごとに改行も入れろ
0014132014/09/21(日) 12:40:50.08ID:tmQCWq8V
優先順位は下に描いた条件が高くて上に描いた条件が低い!以上
0015デフォルトの名無しさん2014/09/21(日) 13:05:51.37ID:94PpjV7B
>>12 Emacs Lisp

(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
>>13 Emacs Lisp

(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:xHxnVT5j
>>12 Python
def 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()
0018 ◆QZaw55cn4c 2014/09/21(日) 15:31:04.57ID:wB7BYq1/
>>13
>>14
優先順位が文脈として矛盾・混乱しているようだ、優先度の高い順に

5で割り切れる場合は何も出力するな
出力ごとに改行も入れろ
4と6で割り切れる場合はFizzBuzzを出力しろ
4で割り切れる場合はFizzを出力しろ
6で割り切れる場合はBuzzを出力しろ
それ以外は数字を出力しろ

ということか?http://codepad.org/9ekLKsYt
0019デフォルトの名無しさん2014/09/21(日) 15:33:40.43ID:xHxnVT5j
前スレ>>988 Python
import 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
Haskell
>>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:a1i1nJCB
インデントが消えてしまった
Haskell
>>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
>>7 Io
語呂合わせは大変そうなので形で
f:=method(n, n asString translate("0123456789","OlZMYSbTBq"))

Io> f(18782)
==> lBTBZ
Io> f(20140921)
==> ZOlYOqZl
0023デフォルトの名無しさん2014/09/21(日) 18:56:27.05ID:lheHZeoo
>>13 Julia
for 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:XXBNRbyT
前スレ>988 Perl
http://ideone.com/c0uVt5

>>13 Perl
http://ideone.com/BPABg3
0025デフォルトの名無しさん2014/09/21(日) 20:22:35.10ID:Pi8eAmCa
「COBOLを学んだ学生は学ばなかった学生より年収が高い」という調査結果 で、COBOLって何?外国語? [422953454]
http://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:Sj64dDvb
お題:nこの角砂糖でできる直方体は何種類あるか?
0028デフォルトの名無しさん2014/09/22(月) 13:23:18.58ID:nxPUfGJM
w=横
h=縦

左上の角から右下に進む
地面に着いたら右上に進む
これの繰り返す

w, h = 10, 3
!---!---!-
-!-!-!-!-!
--!---!---

w, h = 11, 5
!-------!--
-!-----!-!-
--!---!---!
---!-!-----
----!------
0029デフォルトの名無しさん2014/09/22(月) 13:53:50.32ID:V8hRXHRh
>>28
書いたけどスパゲティ・・
http://ideone.com/uESKjY
0030デフォルトの名無しさん2014/09/22(月) 15:02:58.66ID:+X2nrags
>>12
ttp://ideone.com/aNkcBn
ほぼC。余弦定理使ってみた。数学わからないのであってるかわからない。
数学怖い。Orz
0031デフォルトの名無しさん2014/09/22(月) 15:05:29.10ID:zUzK8u9G
よげんていり?
チンチンのそり具合が男の甲斐性を表すていりか
0032デフォルトの名無しさん2014/09/22(月) 15:23:00.37ID:+X2nrags
>>13
ttp://ideone.com/Pcmsgn
ほぼC。適当に書いたのであってるかわからん。
0033デフォルトの名無しさん2014/09/22(月) 15:32:22.26ID:+X2nrags
>>27
ttp://ideone.com/fKXJLL
ほぼC。あってるのかこれ。
ちなみに重複を含んでいる。
0034デフォルトの名無しさん2014/09/22(月) 15:46:01.11ID:+X2nrags
平面と立体を勘違いしていたので修正しておいた。
0035デフォルトの名無しさん2014/09/22(月) 15:49:36.84ID:+X2nrags
>>31
曲がってると適応できないんじゃないか?
よく知らんけど。
弧の長さってなんか求め方あった気がする。
0036デフォルトの名無しさん2014/09/22(月) 16:20:35.26ID:+X2nrags
>>28
ttp://ideone.com/ikLOBL
ほぼC。字幅をそろえるためにエクスクラメーションマークは使わなかった。
0037デフォルトの名無しさん2014/09/22(月) 16:22:47.32ID:+X2nrags
これで追いついたかな。ふー。Orz
0038デフォルトの名無しさん2014/09/22(月) 18:12:27.12ID:X31W0Us4
>>28 Python

def 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:Sj64dDvb
>>28 Io
f:=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:+X2nrags
>>28
ttp://ideone.com/aXUKqy
ほぼC。逐次実行版。
>>39と同じような考え方だと思うけど、俺、遅かったな。
0041デフォルトの名無しさん2014/09/22(月) 19:57:43.67ID:cXCm9hNa
>>28
C
ほぼ同じ
http://ideone.com/PHJo1l
0042デフォルトの名無しさん2014/09/22(月) 20:22:16.98ID:+X2nrags
>>41みて気づいたけど、>>40はH=1にするとゼロ割で死ぬかも。
うほー。ギブギブ。
0043デフォルトの名無しさん2014/09/22(月) 22:00:20.04ID:X31W0Us4
>>27 Python

def 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
>>28の問題を競技プログラミング風に改変

左上の座標を(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
>>28 Squeak Smalltalk

| 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
>>44
--h - abs(--w % (h * 2 + !h) - h)
0047デフォルトの名無しさん2014/09/23(火) 01:19:32.94ID:o0+soP+b
>>15
直線ANってなんだ
Nは点じゃなくて長さだろ?
0048デフォルトの名無しさん2014/09/23(火) 08:03:55.12ID:k6Irxc0M
>>12 Squeak Smalltalk

| 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:bJmToiQE
>>27 Perl
http://ideone.com/yQxZi5

>>28 Perl
http://ideone.com/K6lpYY
0050デフォルトの名無しさん2014/09/23(火) 12:05:24.27ID:a/17ohbB
>>13 MITメディアラボのスーパープレゼンな人のように小生が日本語プログラミング言語で、、

100回、値にカウントしながら繰り返す
 もし値=5なら
  「」を表示する
 他でもし(値%4)=0かつ(値%6)=0なら
  「FizzBuzz」を表示
 他でもし(値%6)=0なら
  「Buzz」を表示
 他でもし(値%4)=0なら
  「Fizz」を表示
 でないなら
  「[値]」を表示
 もし終わり
繰り返し終わり
0051デフォルトの名無しさん2014/09/23(火) 12:08:19.82ID:Fyh7HsMD
なんでみんな、FizzBuzz出力をFizzとBuzzの両方で出そうとしないで
単独でやっちゃうのかね
0052デフォルトの名無しさん2014/09/23(火) 12:31:10.28ID:m0gPgF5T
簡単だからよ
0053デフォルトの名無しさん2014/09/23(火) 13:10:30.71ID:7RbTTjAd
言葉での表現に近い方が
・読みやすい
・変化球に対応しやすい
からかな
005428==292014/09/23(火) 19:50:30.99ID:P6g3rNF/
>>28の発展系
Xを描く模様を出力
※配列に格納して出力するの禁止

w, h = 3, 3
!-!
-!-
!-!

w, h = 7, 3
!-!-!-
-!-!-!
!-!-!-

!---!---!-
-!-!-!-!-!
--!---!---
-!-!-!-!-!
!---!---!-
0055デフォルトの名無しさん2014/09/23(火) 20:07:55.72ID:rSu8dkGL
>>54
※配列に格納して出力するの禁止
なん・・・だと・・・。
0056デフォルトの名無しさん2014/09/23(火) 20:10:11.14ID:P6g3rNF/
w, h = 6, 3
!-!-!-
-!-!-!
!-!-!-
0057デフォルトの名無しさん2014/09/23(火) 20:10:46.86ID:P6g3rNF/
w,h=10,5
!---!---!-
-!-!-!-!-!
--!---!---
-!-!-!-!-!
!---!---!-
0058デフォルトの名無しさん2014/09/23(火) 20:15:09.55ID:rSu8dkGL
>>54
ところで、Hは奇数だけ?
0059デフォルトの名無しさん2014/09/23(火) 21:39:57.13ID:rSu8dkGL
>>54
ttp://ideone.com/pLj5TB
ほぼC。意外と手こずったなぁ。
0060デフォルトの名無しさん2014/09/23(火) 22:05:15.22ID:FqVDKKGy
>>54 Io
f:=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
>>60
間違えました
6行目のbはw-1です
0062デフォルトの名無しさん2014/09/23(火) 22:19:10.50ID:k6Irxc0M
>>13 Squeak Smalltalk

Transcript 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:7RbTTjAd
>>54 Python
def 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 "!",
    print

f(11,5)
f(16,6)
0064デフォルトの名無しさん2014/09/24(水) 01:22:30.87ID:9bMladVh
>>54 Haskell
import 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
お題:頂点の座標が(0,0),(0,L),(L,L),(L,0)の辺長Lの正方形がある。
これをすべて大きさの異なる正方形に分割した。各正方形の辺長は
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:KBFgIokm
>>54 Perl
http://ideone.com/e05JDP
0067デフォルトの名無しさん2014/09/24(水) 08:45:28.67ID:qN3itg9e
>>65
ttp://ideone.com/qXck8R
ほぼC。問題が割と素直でよかった。
キリシマ問題みたいな検索が無かったので何とかなった。
最初問題よく読んでなくて力ずくで解こうとしたのはないしょだ。
0068デフォルトの名無しさん2014/09/24(水) 11:19:48.91ID:E6n9D2xU
>>54 Squeak Smalltalk

| 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:hdgcnesQ
>>65 Python
import 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
>>65 Squeak Smalltalk

| 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+
>>65 J
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:vG38XDPk
>>65 Io
f:=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:KE8XqyCz
だれかジオメトリシェーダー部分を書いて下さい
http://monobook.org/wiki/SL_Sharp
0075デフォルトの名無しさん2014/09/27(土) 18:42:16.51ID:6iG2wykO
>>65 Haskell
main = 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+ojJfz
無限ループになるコードを1行で書きなさい
0077デフォルトの名無しさん2014/09/27(土) 18:55:26.60ID:6iG2wykO
>>76 Haskell
main = print $ last [0..]
0078山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/09/27(土) 19:02:34.88ID:Yl+ojJfz
手島君が1から100の範囲で1つ数字を思い浮かべました
その数字を当てなさい
その数字が不正解の時は、正解の数字より高いか低いかは教えてもらえます
最短で正解の数字を当てなさい
0079デフォルトの名無しさん2014/09/27(土) 19:39:09.20ID:abKsREh3
なお手島くんは22%くらいの確率で、
大小関係についてウソをつくそうです
0080デフォルトの名無しさん2014/09/27(土) 19:50:30.58ID:2j9vH2tZ
機械相手に一生懸命入力してる手島くんのために100回目で正解当てるコード書こう(適当)
0081デフォルトの名無しさん2014/09/27(土) 20:04:30.56ID:LiPjrIzD
>>76 Prolog
r :- r.
0082デフォルトの名無しさん2014/09/27(土) 20:12:21.42ID:DXaZxPH6
>>76 C/C++
for (;;);
0083デフォルトの名無しさん2014/09/27(土) 20:29:46.61ID:Chmua2a8
>>76 輪廻転生.pl

print '→生→死' while 1;
0084デフォルトの名無しさん2014/09/27(土) 20:33:03.81ID:vG38XDPk
>>76
J
,^:(_)1

Io
loop(8)

Maxima
do 8;
0085デフォルトの名無しさん2014/09/27(土) 20:34:23.55ID:Chmua2a8
>>78>>80
100万回やっても無理な場合がある。正解がπとかだったらどうするよ?
0086デフォルトの名無しさん2014/09/27(土) 20:37:34.88ID:2j9vH2tZ
>>85 本当だ 整数とすら言ってなかった
0087デフォルトの名無しさん2014/09/27(土) 21:55:19.08ID:G9WDbqrY
>>78>>79 Python
http://ideone.com/PLcCef
0088デフォルトの名無しさん2014/09/27(土) 22:27:08.87ID:40eOdFUh
型がわかれば整数の問題とあんまり変わらないだろ
0089山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/09/28(日) 00:39:43.55ID:RZX9lPG9
0と1のみでランダムに生成した文字列Sがある
長さは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
>>89 Haskell
-- 一番長いのの条件がわからんが勝手に解釈した
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:SflzpwZE
>>76
ttp://ideone.com/L5LGGN
int main(){ return main();}
0092デフォルトの名無しさん2014/09/28(日) 06:09:53.87ID:SflzpwZE
>>78
ttp://ideone.com/UDYKYh
ほぼC。二分探査だ。嘘は入れてない。
0093デフォルトの名無しさん2014/09/28(日) 07:17:16.29ID:SflzpwZE
>>89
ttp://ideone.com/53lyu1
ほぼC。適当に書いた。
0094デフォルトの名無しさん2014/09/28(日) 07:31:55.79ID:7Waj3RIN
>>89 J
0は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
>>89 Python
他よりも一番長い(つまり唯一), (それを除いて)ニ番目に短い と解釈しました。

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:lmN8tiDJ
>>78 F#

type 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
>>89
例2,3を見ると繰り返し現れる文字列で一番長い物と
二番目の物って意味?
それとも例2はたんに書き間違いで
2文字以上で1番長い物と2番目に長い物?

曖昧な仕様で後々実装後もめるパターンだなw。
0098デフォルトの名無しさん2014/09/28(日) 23:51:21.05ID:AmQTaudV
>>89 Python
例示とは異なるが、純粋に一番長い連続と二番目に短い連続を取得と解釈(連続は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:uLb79luw
お題:穴ありbashをネットワークから探しだしてホストを列挙
0100デフォルトの名無しさん2014/09/29(月) 00:30:40.77ID:0K8mksjW
ここにはハッカーはいないのか
0101デフォルトの名無しさん2014/09/29(月) 00:58:20.05ID:LXjsJlBs
>>100
ハッカー様()の模範回答をご教授願うよw
0102デフォルトの名無しさん2014/09/29(月) 02:08:03.92ID:v6qiSvKu
もうこの脆弱性を使って成長するボットネットが有るらしいけど…

まぁUAをアレにしたブラウザなりクローラなり使えばいいだけ。
0103デフォルトの名無しさん2014/09/29(月) 10:54:40.10ID:mrmYQHU+
>>89 Squeak Smalltalk

| 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:TuwBUZ1N
トーナメント表を出力しろ
N=参加人数(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:TuwBUZ1N
こんなの13パターン予め作って出力しちゃえばいいんだから初心者でもマジで余裕でしょう
0106デフォルトの名無しさん2014/09/29(月) 19:29:08.63ID:EXXNilQ4
>>104
貴方の問題は仕様が絞り切れておらず解釈に困るので、もっと仕様を絞ってください。
0107デフォルトの名無しさん2014/09/29(月) 19:32:32.39ID:QgztgqUn
>>105
N=0が漏れてんがな
0108デフォルトの名無しさん2014/09/29(月) 20:07:09.60ID:hkDoffKO
2の乗数でないとき(6とか)で枝の高さが不揃いになる
シードを定義するか「2で割り切れる」を変更するか
0109デフォルトの名無しさん2014/09/29(月) 21:13:19.99ID:WITlTI70
可哀想な人に触っちゃだめ
0110デフォルトの名無しさん2014/09/29(月) 21:16:43.52ID:jDAbb90Q
この出題者、前は別のトリップ使ってた人かね
0111デフォルトの名無しさん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+Ym8V
>>108
xxxxx+----o----+xx
xxxxx|xxxxxxxxx|xx
xx+--o--+xxxxxx|xx
xx|xxxxx|xxxxxx|xx
+-o-+x+-o-+xx+-o-+
|xxx|x|xxx|xx|xxx|
oxxxoxoxxxoxxoxxxo
01131112014/09/30(火) 00:42:59.55ID:NE0qZBpP
ケースに漏れが合った
s=4のときは「移動なし」で
0114山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/09/30(火) 00:52:03.45ID:Z+y+Ym8V
整数Nが与えられる
Nを32倍して出力しろ

禁止事項
コードの中で数字を書くのは禁止
+*/-を使って加減乗除するの禁止

N=2
>>> 62
0115デフォルトの名無しさん2014/09/30(火) 01:01:59.99ID:DtoKIHeG
2の32倍が62とか、早速やってるよこのバカ
0116デフォルトの名無しさん2014/09/30(火) 01:07:03.81ID:C909vV3K
>>111 Python
あんまり検証してないけど・・・

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歩
0117山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/09/30(火) 01:11:56.72ID:Z+y+Ym8V
>>115
64って脳内変換しろよアスペ
0118デフォルトの名無しさん2014/09/30(火) 01:15:48.11ID:DtoKIHeG
>>117
2*32=64
としたかったのか
2*31=62
としたかったのか分からないだろバカ
0119デフォルトの名無しさん2014/09/30(火) 01:19:05.81ID:1WFsrfGk
>>114
C++
http://ideone.com/DRMBVh
0120デフォルトの名無しさん2014/09/30(火) 02:28:54.98ID:FYmdSsot
>>114 Emacs Lisp

(defun f (N)
(ash N (% ?N ?I)))
f

(f 2)
64
0121デフォルトの名無しさん2014/09/30(火) 02:36:12.77ID:uSguC6Dn
>>117
砂場崩して何がしたいのかよくわからないのだけど、何しに来たの?
0122デフォルトの名無しさん2014/09/30(火) 03:37:57.36ID:uSguC6Dn
>>111
ttp://ideone.com/1aT6Ra
ほぼC。>>116を見た後書いたので結構似てしまったがその分シンプルに書けたと自負している。(汗
自分でも驚く位短時間でかけたのでどこかバグってるかもしれない。
欠点としては試算上だが、メモリを常に50メガ位食うので個人的には残念な感じ。
ほらぶるほらぶる。
0123デフォルトの名無しさん2014/09/30(火) 05:10:25.53ID:lfWI1YhR
>>114
四回右にビットシフト
ていうか、なに?このクソ問題
0124デフォルトの名無しさん2014/09/30(火) 05:21:35.40ID:uSguC6Dn
>>123
自己顕示欲が強くておっちょこちょいな変なおっさん?だから真面目に相手すると気を吸われそうだ。
このスレは、出題者がドヤ顔するんではなくて回答者がドヤ顔するスレだよね。
おっさんはどうも勘違いしてらっしゃる。
0125デフォルトの名無しさん2014/09/30(火) 06:15:58.57ID:Dqlfq8/k
  |=番兵|_
 (  ・ω・) < オハヨウナノン
  〇={=}〇        ∧,, ∧
  |::::::::::\        (*‘ω‘ *)
、、、し 、、、(((.@)vv、vvv 、、(、v、)っv、、
0126デフォルトの名無しさん2014/09/30(火) 09:33:21.01ID:+BV9BL+k
>>119
数字入ってるよ
0127デフォルトの名無しさん2014/09/30(火) 09:48:05.17ID:rWDDVQoR
>>123
何で右にビットシフト?
0128デフォルトの名無しさん2014/09/30(火) 09:54:00.90ID:C909vV3K
>>114 Python

def 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
>>127
おれ、左利きだからすぐ左右間違える
おらにナビゲーターさせるとヤバい
「ひだり!」
車転回
「あほー、ひだりいうてるやろ!」
「だから、ひだりやろ!」
「あほー、ひだりはみぎじゃ!」
0130デフォルトの名無しさん2014/09/30(火) 10:12:11.95ID:SzHlhe5/
「俺から見て右だからお前から見れば左シフト」
0131デフォルトの名無しさん2014/09/30(火) 11:10:26.87ID:0GEeaCri
右傾化ってやつか
0132デフォルトの名無しさん2014/09/30(火) 11:36:19.19ID:UHNyfmUO
>>111 Squeak Smalltalk

| 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
>>114 Squeak Smalltalk

| 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
>>134
スワップ関数を手書きしないといけないので25ステップは難しいな。
0136デフォルトの名無しさん2014/09/30(火) 21:26:36.66ID:NE0qZBpP
>>134
rev [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:NE0qZBpP
Haskellです
0138デフォルトの名無しさん2014/09/30(火) 21:31:53.87ID:uSguC6Dn
>>134
愚直にループアンローリングしてSIMDのASMで書くのが一番早いと思うよ。
0139デフォルトの名無しさん2014/09/30(火) 21:33:30.75ID:uSguC6Dn
>>136-137
うわー、マジですか。
あーでも、これならC++でもできるわ。
パクらせてもらう。
0140デフォルトの名無しさん2014/09/30(火) 21:41:15.46ID:MBbuPApe
>>134 Python

L = 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:uSguC6Dn
>>134
ttp://ideone.com/5NGgJd
ほぼC。久しぶりにローレベルなことした。あんまりこの手のモノには触りたくない。ほらぶるほらぶる。Orz
ところでこれ、セーフ?アウト?
0142デフォルトの名無しさん2014/09/30(火) 22:14:21.64ID:C909vV3K
>>134 Python
再起禁止に抵触してるかもしれんが・・・

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:C909vV3K
申し訳ない、上げてしまった・・・
0144デフォルトの名無しさん2014/09/30(火) 22:32:11.36ID:MBbuPApe
>>114 Python

from 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:MBbuPApe
>>111 Python

def 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
>>141
> ところでこれ、セーフ?アウト?

出題意図を強調してお題をくどく書き直すとこんな感じになります。

お題
配列を逆順にする関数(メソッド、スライス等配列操作も含む)はもちろん、
組み込みのループ文(式、イテレーター、列挙を含む)、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:iMfoFiuu
意味不明
01491472014/10/01(水) 16:03:49.15ID:4pDWmQkQ
擬似乱数生成器のアルゴリズムが公開されてる状態で
乱数の履歴から次の乱数が何かを予測する問題です
0150デフォルトの名無しさん2014/10/01(水) 17:48:32.69ID:pzP2+wtJ
>>147 Python あんまり検証してないのと、入力が空リストの場合の処理がダサいけど・・・
import 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]]
01511472014/10/01(水) 18:40:46.32ID:4pDWmQkQ
問題文についてですが
> [1,2,3] => []
これはまずかったですね
randが1,2,3と出力することは無いので入力として不適切でした
よしなに対処して下さい
0152デフォルトの名無しさん2014/10/01(水) 18:51:23.04ID:iv/0qHwn
>>146
了解。でも、出題者の主観として、アリかナシかを言ってもらえればそれでよかった。
正直SIMDは理解してないので似非メソッドで解決?したわけなんだけどね。

>>147
面白い問題だね。なんか一意に求める方法ありそうだけど数学の範疇なのでちょっと難しいな。
うーん。なんかないかな??
0153デフォルトの名無しさん2014/10/01(水) 18:52:18.25ID:QWE+Qg27
>>134 Emacs Lisp

(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:DMZSGVKB
xxooo
oooxo
oxooo
aooxo
oxoxo
oxooz

aからzまでの最短ルートと再長ルートを出力しろ
左上の位置が0,0
右下の5,4
0155デフォルトの名無しさん2014/10/01(水) 19:50:48.04ID:AeBUI1kv
>>147 Squeak Smalltalk

| 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/0qHwn
>>147
ttp://ideone.com/gMm7gi
ほぼC。一応書いてみたけど、あってるのか?randが123出力したんだけど、俺、まちがってる?
まぁいい。なかなか興味深い問題だった。
0157デフォルトの名無しさん2014/10/01(水) 21:27:14.11ID:iv/0qHwn
>>156
このコードちょっと無駄があるな。でも、イデオン閉じちゃったので修正不可。
まぁ、デカイ数列渡さない限りはそんなへんな負荷にはならんでしょう。
0158デフォルトの名無しさん2014/10/01(水) 22:24:00.57ID:FWPgmt6i
>>134 Squeak Smalltalk

▼返すのはコピー & 要素は整数限定 & 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
>>111
今更だけどscheme(Gauche)
http://ideone.com/nxtyUG
0160デフォルトの名無しさん2014/10/01(水) 23:13:40.80ID:ZUQc71vZ
Hello World表示するプログラムを作成しないでください
0161デフォルトの名無しさん2014/10/02(木) 02:01:33.43ID:E9MFZIuR
はい。今は予定がありません。
0162デフォルトの名無しさん2014/10/02(木) 08:15:30.51ID:ShVbXCvN
>>134 Prolog に配列はないので悪しからず。

'配列を逆順にする関数(メソッド)はもちろん、ループ文(式)、イテレーター、
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
>>154 Squeak Smalltalk

| 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
0,1,2,3,6,12,23,44,85,165
この数字から規則性を見つけて10000番目に現れる数字を出力せよ
0165デフォルトの名無しさん2014/10/02(木) 20:45:12.54ID:zf1rY1mq
何点あっても多項式でフィットさせられるがそれでいいか?
0166デフォルトの名無しさん2014/10/02(木) 21:29:20.41ID:XaYpLqdO
>>147 Haskell
ttp://ideone.com/Sq4Q0Q
0167デフォルトの名無しさん2014/10/02(木) 23:26:00.26ID:5I2uukos
>>165
自分を上級とか言っちゃう馬鹿に構っちゃ駄目だよ
0168デフォルトの名無しさん2014/10/03(金) 00:04:16.02ID:yjp8VEMc
周りに呼びかけられてもうざいだけなのでお前も消えてください
0169デフォルトの名無しさん2014/10/03(金) 00:15:48.59ID:0k/kXsaU
  |=番兵|_
 (  ・ω・) < ステンバーイ
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)indows10 v、vv、
0170デフォルトの名無しさん2014/10/03(金) 00:56:10.38ID:fh20IZ/z
>>154 Haskell
import 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
>>160 Emacs Lisp

(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
>>160 C

% 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
>>164 Common Lisp

(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
>>173
ハズレ
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:2Mt1hyFy
>>164
scheme(gauche)
http://ideone.com/3gUT63
(rinsetu4kou 1000)

235999452656267890257654227339253749
954992399736184260217198045081075185
084959286421236836845757197060803495
846809480082928070128025099645896854
159071386692565912322394046523237720
394759587441727400767436582641106732
168013300780326756127115193913634227
405667941736890788204000421404624
0177デフォルトの名無しさん2014/10/03(金) 16:44:21.81ID:2Mt1hyFy
>>176
回答の桁数間違えた
(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
>>176,177
ああ、間違えてるの今気がついたorz
10番目が165に成らない。。。。
プログラミングのお題スレなんだから数列の計算式出してよ。
数学問題とくレスじゃ無いんだからさ(ちょっと逆ギレ)w。
0180山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/10/03(金) 17:16:25.17ID:G52vygkN
165の部分は164のミス
0181デフォルトの名無しさん2014/10/03(金) 17:32:36.51ID:gCeFPsDe
>>180
お前はまず自分が何をやってもできない人間であることを自覚した方がいい
0182デフォルトの名無しさん2014/10/03(金) 17:47:36.65ID:TVwznypc
>>180
質問者がそれでは土台が付いてきませんよ。
0183デフォルトの名無しさん2014/10/03(金) 18:20:19.19ID:GdlHgx3C
>>134 F# で式木

type 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|]
01841752014/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/qW
>>175 Io
f:=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:zStWBVTR
http://ideone.com/GAlKiM
0187デフォルトの名無しさん2014/10/03(金) 23:36:05.81ID:zStWBVTR
>>180,186
http://ideone.com/GAlKiM
0188デフォルトの名無しさん2014/10/03(金) 23:47:15.65ID:zStWBVTR
>>178
二、一、二、四
0189デフォルトの名無しさん2014/10/04(土) 00:03:48.16ID:en9JGvHv
>>178 Squeak Smalltalk

| 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
>>179
馬鹿に構ったお前が悪い
0191デフォルトの名無しさん2014/10/04(土) 01:36:14.63ID:Vp0wbb9+
一日中おんなじ事書いてるお前も気持ち悪いけどな
0192デフォルトの名無しさん2014/10/04(土) 02:47:02.90ID:ta2bRS3s
>>175,184
http://ideone.com/EapiOc
0193デフォルトの名無しさん2014/10/04(土) 07:30:23.67ID:P7Lnn5/7
>>178 Emacs Lisp

(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
>>178 Python
変に工夫しようとしてハマったの俺だけ?
他の人の回答チラ見して単純に書いたら簡単だった・・・

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:m0RM23AG
>>175 Python 間違ってたら、ご愛嬌・・・

def 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
>>178
最初から再起ループでやると収束しないので、初期値をランダム生成して回数制限の再起ループ
0197デフォルトの名無しさん2014/10/04(土) 22:14:10.16ID:fObeipZm
>>175
最小でないと問題にならないと思う
01981752014/10/05(日) 00:24:12.36ID:2G44BZBf
>>197
出題してからだいぶ反省してます
解かれた方、とんだクソ問に付きあわせてしまってすいませんでした
0199デフォルトの名無しさん2014/10/05(日) 00:32:07.96ID:t2aBPMmD
>>198
それより、184の解が気になる。
02001752014/10/05(日) 01:03:58.17ID:2G44BZBf
>>199
最適解を求めるプログラムは用意出来ていません。すいません
座標をプロットしてみればわかるのですが、割りとすかすかで目視でも8個より少ない解はなさそうです
きちんと枝刈りして探索すればば8個の円は簡単に求まると思います

>>192は最適解を算出するアルゴリズムかどうかわかりませんが8個の円を出力しています(私のじゃないですが)
0201デフォルトの名無しさん2014/10/05(日) 02:00:14.45ID:Q++s8JsP
>>200
CADでらくがきしてみると7個の解はありそうだけどなあ
0202デフォルトの名無しさん2014/10/05(日) 02:00:33.11ID:RckF5d3d
点を中心に半径5(直径10)の円を描いて、それを全点でやったら、
二重三重にカバーされてる所、どれとどれをカバーしてるが判明して
あとは離散的な組み合わせをチェックする問題になるだろ?
02031922014/10/05(日) 02:03:11.24ID:t2aBPMmD
>>200
最適解がデないケースが有った。
例:0 0 5 0 10 5 10 10 15 0 20 0
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
半径10で調べないと

>>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/
>>206 Python

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
>175,184 C++
近似解
http://ideone.com/ydauIS
最適解
http://ideone.com/0vJV5r
0209デフォルトの名無しさん2014/10/05(日) 15:35:13.47ID:37iiGiPw
>>164

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(6,3,2,1,0)
}
seq(10000)
1455650563828306671891266930369....
0210デフォルトの名無しさん2014/10/05(日) 18:49:47.41ID:F9GavlsK
>>178 Python

import 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
>>209
これなんの言語?
0212デフォルトの名無しさん2014/10/05(日) 21:04:57.72ID:B9z/QdJZ
>>206 Emacs Lisp

(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
>>209
スマートでいい言語だな
0214デフォルトの名無しさん2014/10/05(日) 21:37:32.40ID:37iiGiPw
>>213
Thanks. Schemeにアルゴル系言語のプリプロセッサをつけたオレオレ言語だよ。
0215デフォルトの名無しさん2014/10/05(日) 21:38:30.69ID:2G44BZBf
>>206 Javascript
function 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
>>214
なるほど
言われてみればschemeや
0217デフォルトの名無しさん2014/10/05(日) 23:04:42.57ID:Q++s8JsP
>>164 Julia
1番目を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:Nbj1KoX7
>>89 Perl
http://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
>>164
他の人の回答見ると落ち込むわ。。。。orz
0220デフォルトの名無しさん2014/10/06(月) 09:49:03.45ID:77oiHa01
>>164 Squeak Smalltalk

| 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
>>164 Common Lisp

(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:lhFi4UPZ
>>164 bc
define 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
>>164 Emacs Lisp

(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
>>206 Squeak Smalltalk

| 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' "
02252092014/10/06(月) 18:13:12.18ID:QJRx0X30
>>164 オレオレ言語
間違えてたので訂正

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:/DmKNK1W
>>178
ttp://ideone.com/OV4gIE
ほぼC。なんか解けた。
どうやって解けてるか自分でも把握してないのでこのコードを流用するのはやめてください。
自己再帰的な構文って苦手だ。数学怖い。
それと、後発じゃないと俺には解けない。

食あたりでここ数日調子悪かったが、なんとか回復した。
0227デフォルトの名無しさん2014/10/06(月) 20:38:47.71ID:77oiHa01
>>175 Squeak Smalltalk

| 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:tXTMbJBv
>>134 C#

using 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:4xtgdkrl
お題:
Brainfuckインタプリタを作れ
,(入力命令)はなくて良い

参考:http://ja.wikipedia.org/wiki/Brainfuck

入力:+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.
出力:Hello, world!
0230デフォルトの名無しさん2014/10/07(火) 06:02:59.53ID:i8E0IJJ3
>>175
http://ideone.com/nzxkSo
ほぼC。解けなかった。Orz
力技で解こうと思ったんだけど、どうしてもオーダー減らせなーい。
107項目まで絞ったけど、そこからどうやって絞るかアイディアなかった。

あー、悔しい。
0231デフォルトの名無しさん2014/10/07(火) 08:29:07.42ID:i8E0IJJ3
>>229
ttp://ideone.com/t4lPip
ほぼC。適当に書いた。デバッグ甘めなのでバグあるかも。
std::getの嵐になってしまった。
コンセプトは拡張重視で。
今日は限界!
0232デフォルトの名無しさん2014/10/07(火) 09:25:14.80ID:9FR6O93m
>>229 C#
あんまり検証してないけど・・・

http://ideone.com/UJwtSp
初めてideoneとか使うので、ちゃんと貼れてるか心配・・・

◎呼び出し例
OdaiUtils.brainfuck("+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.");
→Hello, world!
0233デフォルトの名無しさん2014/10/07(火) 16:42:57.82ID:s1tA8Egm
>>229 F#

let 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:9FR6O93m
>>206 C#
C#の学習も兼ねて、最高に回りくどく書いてみた
正規表現も使ってないし、入力データの解析はワンパスだし
前に書いた>>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+Udd7
>>229
if ( arg === "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.")
console.log( "Hello, world!");
0236デフォルトの名無しさん2014/10/07(火) 18:36:05.71ID:M8obcX0v
>>229 Perl
http://ideone.com/qZ8nSK
0237デフォルトの名無しさん2014/10/07(火) 19:20:47.05ID:raaFE9Z6
>>229 Squeak Smalltalk

| 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+s
>>229 Scheme

http://ideone.com/LCQKdq
0239デフォルトの名無しさん2014/10/07(火) 19:25:00.41ID:i8E0IJJ3
>>206
ttp://ideone.com/vVT7Hd
ほぼC。文字処理は普段しないんで怖いです。ほらぶるほらぶる。Orz
0240デフォルトの名無しさん2014/10/07(火) 19:27:59.55ID:C9GpiM2R
>>238
俺もこういうの書けるように早くなりたい
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:4xtgdkrl
>>229 Haskell
http://ideone.com/I9Wph0
Haskell力が足りない
0243デフォルトの名無しさん2014/10/07(火) 23:47:38.66ID:Wcaa5U+b
>>229 Python

from __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:N0aXwt4H
(require 'cl-lib)
cl-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:3Gg8s7gO
>>241
1バイトのoutputコード自体はLZ系圧縮しても1バイト超えちゃうし、
WikipediaのHello, world!は一度使った領域を再利用してるけど、
再利用可能箇所の探索はスライド辞書の探索より無茶苦茶コスト高いよね。
なんか数列を出力する式の形に圧縮できたら的な話を思い出した…
チューリング完全だし理論上はすごいかもしれんけどそこまで行き着くのは俺には無理だわ
0246デフォルトの名無しさん2014/10/08(水) 07:54:27.91ID:TFp+gOi8
>>245
とりあえず、テキストをブロックソーティングしてランレングスするところまで妄想した。
おかげさまでLZではむりだとわかったので、冗長に出力してランレングスで回収するとトントンになりそうだと感じている。
[+0.]の3文字程度で万能のバイナリを吐ける計算なので構造自体は単純。
ただ、マシンパワーを馬鹿みたいに使う。
そういう妄想をした。

まぁ、話として聞いた程度には覚えておいてください。
>>241は取り下げます。
0247デフォルトの名無しさん2014/10/08(水) 07:57:26.61ID:TFp+gOi8
余談ですが、調べてたらbz2がよさそうです。
ブロックソーティングとランレングスしてくれるそうなので。
0248デフォルトの名無しさん2014/10/08(水) 08:01:15.57ID:TFp+gOi8
あ、bz2はハフマンか。Orz
一回、ランレングスで脳汁出してみたいんですよねぇ・・・。(汗
0249デフォルトの名無しさん2014/10/08(水) 09:28:16.14ID:nKTyZSjw
FAXでも送ってろ
0250デフォルトの名無しさん2014/10/08(水) 16:23:24.41ID:lqD5ceTY
>>241
>バイナリを最適化されたBFのコードに変換してテキストをLZ系の圧縮をかけたら相当縮むんじゃないかと思ったんですよ。

結局同じような複雑度に収束してバイナリを直接圧縮したのと同じような
大きさに成るんじゃ無いの?
0251デフォルトの名無しさん2014/10/08(水) 16:41:09.13ID:3Gg8s7gO
>>250
BFがチューリング完全だから、例えば擬似乱数列を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:H7377YeA
>>252 Python

from __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:bCMMZDUF
>>252
ttp://ideone.com/m1O396
ほぼC。思ったより手こずったなぁ。
0255デフォルトの名無しさん2014/10/09(木) 03:36:08.24ID:bCMMZDUF
あれ?5の扱いバグってるかも。
0256デフォルトの名無しさん2014/10/09(木) 03:37:25.39ID:bCMMZDUF
安価忘れた。
>>254の5の扱い逆かもしれん。
0257デフォルトの名無しさん2014/10/09(木) 05:32:18.07ID:DYlzwy2F
>>252 Perl
http://ideone.com/hn2yp1
0258デフォルトの名無しさん2014/10/09(木) 12:32:59.11ID:kVQIysa/
>>252 F#

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
>>252 Emacs Lisp

(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:CVE2jph1
>>252 Haskell
import 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:GCchkt6t
>>252

C
http://ideone.com/tO5EJy
0262デフォルトの名無しさん2014/10/11(土) 05:08:23.24ID:VTqE+xbQ
お題:10種類10個の組み込み関数(メソッド)を直結して引数と同じものを返す。
例
a(b(c(d(e(f(g(h(i(j(5963)))))))))) -> 5963
0263デフォルトの名無しさん2014/10/11(土) 05:55:37.09ID:wleLwFF5
>>262 Common Lisp
(car(list(char-code(code-char(logxor(logior(logand(identity(*(+ 5963))))))))))
0264デフォルトの名無しさん2014/10/11(土) 07:13:50.33ID:VTqE+xbQ
>>252 J
f =: 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
>>262 Emacs Lisp

(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:Kg61NYDn
>>262 Python

def 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
>>262 Emacs Lisp

(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:zGJS7s3L
>>262 Perl
use 5.016;
eval uc lc ord chr int exp log abs scalar 5963;
0269デフォルトの名無しさん2014/10/11(土) 15:56:04.44ID:Pyx8DXgZ
>>262 Squeak Smalltalk 。手抜きしてコピー系を軸に。

5963 clone copy shallowCopy postCopy copyTwoLevel
deepCopy veryDeepCopy yourself value changed "=> 5963 "
0270デフォルトの名無しさん2014/10/11(土) 16:11:10.96ID:N89fm/fM
>>262 Julia 学習中につき苦労しながら。
function 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+xbQ
>>262 Io
Io> 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+xbQ
>>206 Lua
function 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/
>>262 J
> < <. >. %: *: -: +: <: >: 5963
5963
0275デフォルトの名無しさん2014/10/12(日) 18:56:19.80ID:lqo6RvUa
>>262
C/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:FVrYA5zE
>>276
ttp://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:j8m5a0qu
>>276
https://ideone.com/80WOSO

lrand48を使って乱数を作ると、どうも乱数列に偏りがあるみたいで、それが結果に
結構影響するので困った。6行目で10で割ってるけど、10以外だと別の値に収束する。
メルセンヌツイスタは偉大だな
0281デフォルトの名無しさん2014/10/13(月) 04:45:39.50ID:FVrYA5zE
>>280
いや、結構いい感じですやん。
メルセンヌツイスタは、ツールとして保証があるのが強いですね。
俺、数学わからないもんで証明とか無理だから、そういう保証を強みに組むしかできません。Orz
0282デフォルトの名無しさん2014/10/13(月) 10:34:07.79ID:lG/YIEf8
>>276 Julia
http://ideone.com/xz6Roh

期待値合計が11くらいになるので、何か間違えてる。
0283デフォルトの名無しさん2014/10/13(月) 11:25:40.27ID:25GAMVje
>>276 Python

import 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/YIEf8
>>276 Julia
http://ideone.com/2BQ7RJ

ゴールから戻ってくるところの間違いに気がついて直したものの合計14くらいなので
まだ間違えてるらしい。ギブアップ
0285デフォルトの名無しさん2014/10/13(月) 11:36:16.15ID:lG/YIEf8
>>276 Julia
http://ideone.com/cgwjef

間違いを直したら他の人たちの解答と同時くらいになった。
sum= 12.653299999999996
0286デフォルトの名無しさん2014/10/13(月) 14:29:21.44ID:/jDoMvDq
>>276 Emacs Lisp

(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
>>276 Squeak Smalltalk

| 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/
>>276
Ruby
http://ideone.com/TDnCVG
0289デフォルトの名無しさん2014/10/14(火) 12:14:06.02ID:q+tuik1L
>>278
他のサイトからコピペしてるお題もあるけどな
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/
>>276
連立1次方程式解いて厳密解求めると
2990673847/235901808 = 12.6776…
になった

http://ideone.com/Ty9DWi
02922762014/10/14(火) 16:43:51.64ID:n56qJH47
>>291
私の解答より素晴らしいです
以下が用意してた解答です

次のようにして早く、精度の良い答えが得られます

マスに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/
>>292
解いてるとこ書いてないのに褒めて頂いて申し訳ないので Ruby の Matrix 使って解きました
http://ideone.com/fdULFn
0294デフォルトの名無しさん2014/10/14(火) 18:26:26.41ID:n56qJH47
>>290 c++
http://ideone.com/CLY9S3
0295デフォルトの名無しさん2014/10/14(火) 19:57:03.49ID:2wLt40MF
>>290 Perl
http://ideone.com/MAx8Th
0296デフォルトの名無しさん2014/10/14(火) 22:31:01.30ID:ugedmwIV
t=ミリ秒(1.00≧t≧0.01)
a=パンチを出す回数
tとaが与えられた時に1秒間に何回パンチを出せるかをコードゴルフで求めよ
0297デフォルトの名無しさん2014/10/15(水) 06:23:21.24ID:t4MHvgx0
>>296
100*t*aであってる?
0298デフォルトの名無しさん2014/10/15(水) 06:26:25.95ID:t4MHvgx0
>>297
あ、違うな。
a/tか?
0299デフォルトの名無しさん2014/10/15(水) 06:30:07.29ID:t4MHvgx0
ミリ秒なの忘れてた。
っていうか、パンチを出すのは、カウント毎なのか秒でトータルなのかよくわからんな。
マッハパンチしたいのかどうかがよくわからん。
0300デフォルトの名無しさん2014/10/15(水) 07:55:45.39ID:t4MHvgx0
>>293
わお。賢者だ!
でも愚者の方法でも大体あってて良かった。
愚者は正確な数字がわからなくて右往左往するのです。
0301デフォルトの名無しさん2014/10/15(水) 11:27:46.33ID:RQ2MUl4Q
//t = floatinput())
t = 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:RQ2MUl4Q
t,a,c=float(input()),float(input()),0;while 1.0>n and a>c:c+=1;print c
0303デフォルトの名無しさん2014/10/15(水) 11:31:12.61ID:RQ2MUl4Q
t,a,c=float(input()),float(input()),0;while .0>n and a>c:c+=1;print c
0304デフォルトの名無しさん2014/10/15(水) 15:16:49.07ID:KPuabR0H
お題:10進数を9進表記にしたときそれが元の10進数の桁を逆に並べた
ものになるものをすきなだけ求める。
0305デフォルトの名無しさん2014/10/15(水) 15:34:55.70ID:PeoOzmXl
>>304 Haskell
main = 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:Dhllwyhw
>>304
Cで0〜435848050まで求める。
http://ideone.com/E2m2Aj
もっと速く、あるいはもっと大きな数値まで求められるようにならんかな
03071922014/10/15(水) 16:55:04.81ID:ZgiM5EDM
>>305
二桁目以降が9で割り切れるのは当然として、それ以上思いつかない・・・
0308デフォルトの名無しさん2014/10/15(水) 16:58:11.83ID:Dhllwyhw
>>306後、link先コードをちょっと訂正
0309デフォルトの名無しさん2014/10/15(水) 17:54:02.65ID:t4MHvgx0
ttp://ideone.com/VSqCoD
ほぼC。あんまりデバッグしてない。
一応uint64maxまで求めるが5秒程度経過したら打ち切るIdeon仕様。
なんか解がおかしい気がする。
0310デフォルトの名無しさん2014/10/15(水) 22:12:28.28ID:WmYjRURJ
>>305 Python
import 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
ttp://ideone.com/lRX4Bd
こうか。寝不足で問題文しっかり把握してなかった。
しかし、5秒では全然求めれない。
0312デフォルトの名無しさん2014/10/15(水) 23:42:53.33ID:ZgiM5EDM
rubyで、
10000000.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
>>304 C
#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:L9kkBSuK
>>304 Perl
http://ideone.com/yyp91g

効率のいい方法があるのだろうけど…。
0315デフォルトの名無しさん2014/10/16(木) 14:17:10.16ID:0k39MB0/
>>304 C++(Cでもいいかな?)
http://ideone.com/KeXIcz

100桁まで延々と求めるすごいやつだよ
でもこの問題、そのうち必ず9進数のほうが桁長くなって
延々と解が存在するわけじゃないんだよね
1e+24くらいまで行くと9進数のほうが必ず長くなっちゃう
0316デフォルトの名無しさん2014/10/16(木) 14:44:03.10ID:hT/Tacex
>>304,307
Rubyで1.64s
http://ideone.com/paPS8k
0317デフォルトの名無しさん2014/10/16(木) 16:07:43.71ID:je5oFobV
>>304 Ruby
ideone で15桁まで
http://ideone.com/WGUKim

手元の環境で 18桁まで 1分弱
18桁でひとつ見つかる
102461381175475216
11〜22桁の解はたぶんこの1個だけ
0318デフォルトの名無しさん2014/10/16(木) 22:45:42.15ID:Cf57WGfA
>>304 Gauche

(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
>>318
勉強になった
03203182014/10/17(金) 17:18:21.46ID:ATjGSJUI
>>304
あまりにも素朴すぎたので考えてみた。
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の解答を見ているところ。今ここ。
03213182014/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+
>>317 で9進26桁のを発見した
5637812464467200628880677
0323デフォルトの名無しさん2014/10/17(金) 18:58:29.36ID:lHOpH1TH
>>322
5637812464467200628880677
を9進変換すると、
77608882600276446421873650
だから、0が余分だね。

21桁の10進数
111111111111111111111
を9進変換すると、
1012241466642216866353
で、これ以上は必ず9進変換結果の方が長くなるので、
探索は20桁以内で良いはず。
0324デフォルトの名無しさん2014/10/17(金) 19:38:50.80ID:ExqIBXoW
ttp://ideone.com/aJ6HRe
賢者の知恵パクろうと思って頑張ったんだけど、やっぱ届かんなー。
でも9桁程度まで検索できるようになった。>>311と比べても100倍位早くなった。
ただ、普段やってる方法じゃないんで、正当性はかなり怖い。ほらぶるほらぶる。Orz
0325デフォルトの名無しさん2014/10/17(金) 20:05:44.64ID:gpH8x8o+
>>323
上のほうを見ると 801 を答えてる人が多いから、これもありと解釈した
03263182014/10/17(金) 22:19:32.09ID:xtMMPrCh
数学に詳しい人、教えて。
80*n1 - n2 - 99*n3 = 0
はディオファントス方程式にならないの?
0327デフォルトの名無しさん2014/10/18(土) 06:18:45.42ID:weybOOiB
>>326
ディオファントス方程式
一般解も簡単に求まる
例えば
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
動的計画法ってのはおかしかった
ただのバックトラック
03293182014/10/18(土) 08:27:49.96ID:DORW4e79
>>327
ありがとう。
今考えてること。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 .
じゃないかと考えている。係数に規則性があることを利用して計算を効率アップできないだろうか?
と考えてる。
03303182014/10/18(土) 08:49:11.94ID:DORW4e79
>>323
自分も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:weybOOiB
>>330
801 や 5637812464467200628880677 が解かどうかは、
頭の0を許すかどうかの解釈の問題では?

あと 10**20 という10進21桁の数は、9進で
820218515128278060321
という21桁の数になるわけで、どうして21桁が排除できるのか自分にはわかりません
0332デフォルトの名無しさん2014/10/18(土) 10:53:01.54ID:DORW4e79
>>331
プログラム言語という立場なら0801を801と解釈することもアリだと思う。

21ケタというのは計算を間違えてたかも。
数学として見て最上位桁に0を許さない立場ならそのディオファントス方程式が成り立たなくなる
桁数はあると思うのだけど。0を許す立場なら解は無限にあるように思う。
まだ、検討があやふや。
0333デフォルトの名無しさん2014/10/18(土) 11:17:52.38ID:XyqWPbHW
1以上109418989131512359209未満の10進数(最上位の桁が0は10進数とはみなさない)での全解を求める問題と、
最上位の桁が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:sYiHg8yg
文字列ではないからゼロはいい。
0335デフォルトの名無しさん2014/10/18(土) 13:21:49.04ID:DORW4e79
>>331
22桁以上で解が存在しないと思う。
考えを書きとめたので、検証をよろしく。

http://ideone.com/OxnqSa
0336デフォルトの名無しさん2014/10/18(土) 13:54:50.81ID:sYiHg8yg
上位ゼロはいいんだろ。
それで今、22桁が見つかっていないなら誰が発見するかだ。
0337デフォルトの名無しさん2014/10/18(土) 14:17:17.20ID:xHZLfbuK
>>333
問題を分割するってのには賛成だが、
どちらにせよ最上位0を10進数とみなさない問題はもう掘り下げようがない気がする

>>322で5637812464467200628880677(26桁)が見つかったってことは
それ以下の桁は探索済みってことじゃないですかね
0338デフォルトの名無しさん2014/10/18(土) 14:36:56.30ID:DORW4e79
>>337
最上位0を10進数とみなさない場合でも素朴にやるとメモリ不足を
おこす問題なので、いかに効率よく全解探索をするのかという点で
相変わらずとても興味深いお題だと思います。
0339デフォルトの名無しさん2014/10/18(土) 15:30:02.32ID:l/ZwH6UN
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_D
これの最適解
0340デフォルトの名無しさん2014/10/18(土) 20:54:04.56ID:SS+UksSP
>>339
http://codepad.org/LNzVeX56
0341デフォルトの名無しさん2014/10/18(土) 21:14:35.72ID:l/ZwH6UN
はええな
0342デフォルトの名無しさん2014/10/18(土) 22:16:39.73ID:qpj5P0UN
>>339 Perl
@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
>>342
原文に忠実にするなら、本当は一回でも安く買ってある
後に売るというifにしたほうがええのかもなとおもったが
まぁいいや
0344デフォルトの名無しさん2014/10/18(土) 23:13:56.26ID:l/ZwH6UN
一応検証してきました

>>340
正解です http://ideone.com/wpXgOQ

>>342
不正解です http://ideone.com/3a19CV
03453422014/10/19(日) 01:56:08.75ID:F5TtqFoZ
>>344
検証ありがとう、
>>342の安直なコードじゃダメですね。
0346デフォルトの名無しさん2014/10/19(日) 03:08:00.58ID:gAtBbPfl
安直かどうかじゃなく問題文を理解してない
0347デフォルトの名無しさん2014/10/19(日) 04:50:43.92ID:NXkPB3G9
>>329
>(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:taqNQMCO
>>339 Perl
http://ideone.com/7Lu6FE
0349デフォルトの名無しさん2014/10/19(日) 07:53:20.41ID:U1Kh10XS
>>347
一般解が判明すれば、変数は0-9の範囲しか動かないので探索はかなり絞れると思うんだが違うのか。
>>327のこれでは(x,y,z,w) = (t, -9s+91u, -18s+8t+71u, s)
0<= -18s+8t+71u <= 9 だから、例えばs、tを0-9の範囲で動かして、uが範囲内で解があるかとおもうが。
03503492014/10/19(日) 07:54:20.93ID:U1Kh10XS
間違えた。
0351デフォルトの名無しさん2014/10/19(日) 08:50:44.39ID:tV8aOuZd
>>335
ideone のここ数日のが見られなくなってるみたいですね
頭に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 になる組み合わせを探索するようにするということ)
コードは書きかけで、これからしばらくは作業できないけど
03523292014/10/19(日) 08:58:19.17ID:1xiAfPCS
>>347
なるほど! うまい方法だね。
0353デフォルトの名無しさん2014/10/19(日) 13:03:38.46ID:1xiAfPCS
>>339 Julia
http://ideone.com/cerWa0
0354デフォルトの名無しさん2014/10/19(日) 22:00:29.09ID:iMj9jWpt
>>304 Common Lisp
http://ideone.com/DCbMZd
ほぼ>>317の焼き直しなので別段優れてはいないが、せっかく書いたので
0355デフォルトの名無しさん2014/10/20(月) 19:34:54.89ID:K7aVahi7
>>348
正解です http://ideone.com/dkY80m

>>353
最適解でないとの自己申告なのとideoneでテストできないので
コードを読む限りはアルゴリズムは間違ってないので正しい結果が出ると思われます、半正解(?)ということで
0356デフォルトの名無しさん2014/10/20(月) 20:45:01.08ID:yx3CTAmn
>>339 GNU Smalltalk

http://ideone.com/akIZim
0357デフォルトの名無しさん2014/10/21(火) 01:50:53.29ID:u6hR3S9i
>>339 Emacs Lisp

% 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
>>339 Emacs Lisp

誤 (- (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/E6gOJ
>>339
ttp://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/
安価ミスです>>369でなく>>359でした、不正解です
0362デフォルトの名無しさん2014/10/21(火) 05:17:54.92ID:E3/E6gOJ
あれ?間違ってるか。
数字はあってるはずなんだけどなー。
問題の意図がよくわからん・・・。Orz
0363デフォルトの名無しさん2014/10/21(火) 10:17:30.06ID:9YykuKSY
>>339 Python

http://ideone.com/BCpnAD

ただし
・「最初の行に与えられる整数 N 」は無条件に正しい入力とみなし検証しない
・整数を200000個格納可能なメモリ容量があるものとする
0364山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/10/21(火) 11:56:28.30ID:y8HpVMrW
文字aを10回出力するコードを書きなさい

但し以下の文字の使用を禁止する
[0-9<*+]
0365デフォルトの名無しさん2014/10/21(火) 13:56:33.93ID:UqHhNjfc
printf("aaaaaaaaaa");
0366山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/10/21(火) 13:59:37.50ID:y8HpVMrW
それ文字じゃない
文字列だ
0367デフォルトの名無しさん2014/10/21(火) 14:04:05.00ID:tyo0JEbH
文字の列
0368デフォルトの名無しさん2014/10/21(火) 15:43:52.78ID:kBK7Yke+
>>364 GNU Smalltalk

'one to ten' size timesRepeat: ['a' displayNl]

http://ideone.com/7q2gav
0369デフォルトの名無しさん2014/10/21(火) 16:03:25.63ID:bBJqZmAu
<?="a"."a"."a"."a"."a"."a"."a"."a"."a"."a"?>
PHPならこんなにきれいに早く書けるのに
0370デフォルトの名無しさん2014/10/21(火) 16:32:30.00ID:NYSCcl7Z
俺には全部文字列を表示しているように見える
0371デフォルトの名無しさん2014/10/21(火) 20:11:09.14ID:9YVE0Ywp
文字列の要素は文字でしょ
0372デフォルトの名無しさん2014/10/21(火) 21:00:49.45ID:PWD0fNz2
>>364 Ruby
'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:UqHhNjfc
putchar('a');
putchar('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
>>372 の hex を GNU Smalltalk で移植返し。w
大文字のみ(小文字なら 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
>>363
たぶん 正解です
0376デフォルトの名無しさん2014/10/22(水) 07:33:06.22ID:1cQ3wfai
>>364 Perl
print map "a", "a" .. "j";

>>372 を参考に
print q.a. x hex q.a.;
0377デフォルトの名無しさん2014/10/22(水) 17:13:46.02ID:OXQCyhg2
>>364
マイナス文字自体はつかってもいいんだよね?
0378山下雄介@上級者 ◆1Bax/hBUwKIJ 2014/10/22(水) 17:30:07.10ID:4sFRuXmx
ああもちろん
0379デフォルトの名無しさん2014/10/22(水) 17:38:44.08ID:OXQCyhg2
>>364
うわ。iostream直撃なんですが、どうしろと?
http://ideone.com/8Vja7b
C++。意地で解きました。あってるかな?
マイナス記号はOKと見ました。もしかして、規則のない独自記法とかいいませんよね?
0380デフォルトの名無しさん2014/10/22(水) 17:39:52.53ID:OXQCyhg2
>>378
そりゃよかった。
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:OXQCyhg2
>>381
ttp://ideone.com/UlDb0K
ほぼC。書くだけ書いたけど数字が合わないので困惑している。
まぁ、バグってても勘弁してくれ。

まぁ、条件がコンベア上の寿司がなくなるまでではなくて、あなたが喰い終わるまでなのでその誤差はあるかもね。
0383デフォルトの名無しさん2014/10/22(水) 19:10:23.86ID:t6/wwRER
>>381

コンベアが動く向きの指示が実は逆(つまり通常の寿司屋と同じく、寿司は右から来る)で、
2番目の例が "31_3__" の間違い、3番目の結果が 62 秒の間違いなら 98秒。

コンベアが動く向きには誤りはなく(つまり通常の回る寿司屋とはあえて逆設定)で、
1番目、2番目の結果がそれぞれ 9秒、10秒の間違いなら 154秒。
0384デフォルトの名無しさん2014/10/22(水) 19:46:25.39ID:qSncMkng
>>381
C言語
http://ideone.com/gnHnWr

問題の入力例と出力例がおかしくない?
0385デフォルトの名無しさん2014/10/22(水) 20:06:12.41ID:OXQCyhg2
あれ?なんか妙な展開に・・・??
0386デフォルトの名無しさん2014/10/22(水) 20:15:57.99ID:SZ1PSERx
>>381
書いてみたけど、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
ああ、そうか。最短の秒数だから途中で皿をスルーしても全体として最短ならおkなのか
問題を正しく理解してなかったかも。ごめん・・・
0389デフォルトの名無しさん2014/10/22(水) 20:29:37.84ID:OXQCyhg2
グルメさんだなぁ。さてどうしよか・・・。
03903812014/10/22(水) 20:57:06.89ID:GngiahHY
すいません、3番目のケース怪しいです
確認してみます
0391デフォルトの名無しさん2014/10/22(水) 21:36:31.68ID:OXQCyhg2
ttp://ideone.com/W21tkS
だみだ。そうやって普段から順番考えて食うような繊細なタイプじゃないからアイディアないわ。
力技で適当にがモットーなので難しいなぁ。
っていうか>>386が俺より上級者なので投げようと思います。Orz
std::tieにそんな使い方あるとは思いませんでした。勉強になりました。ありがとうございます。
いつもstd::get呼んでたのでgetヘルだったんだけど、なんか面白いことできそうです。
みなさんがんばってー!チアー!!(^p^)/~
0392デフォルトの名無しさん2014/10/22(水) 22:50:38.08ID:6X1uvHzG
>>381 C#

力技ですが・・・
http://ideone.com/YbLysp

上から3ケースは例題通りの結果が得られたが
最後のケースはタイムアウト・・・ローカルで10分以上実行してるけど結果が返りません、ギブアップですわw
ちなみに最後のケースの途中経過を出力させたら今のところ最短98秒となってる
0393デフォルトの名無しさん2014/10/22(水) 23:07:04.00ID:OXQCyhg2
>>392
3番の60でたのね。うーん。
自分で解くには再起構文で書かないと無理そう。
再起あんまり得意じゃないんだけども。。。
0394デフォルトの名無しさん2014/10/22(水) 23:07:30.84ID:A/iYvioz
>>381

31_2 -> _1_2 : 3を食う食べ始め1秒目
1_2_ : 2秒目
_2_1 : 3秒目 (食事中?)
2_1_ : 2の皿を取ることができる

こういうこと?
0395デフォルトの名無しさん2014/10/22(水) 23:13:59.40ID:A/iYvioz
>>381

[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
>>381 C# >>392の続き

最後のケース、20〜30分経ってやっと結果が返ってきた
最短98秒だそうです
0397デフォルトの名無しさん2014/10/22(水) 23:28:13.04ID:6X1uvHzG
>>381

ちなみに>>392は
「1文字目が私の目の前であり、1秒毎に左へ回転する」ということで、何も取らなければ
12_3
2_31
_312
・・・
となる仮定です
逆だったら、また結果は違うと思いますが、後は任せたっ!
03983812014/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秒台で済んだよ
04003812014/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:QTICJd8R
>>381

123456789123456789
これだけタイムオーバーするから無理

C言語
http://ideone.com/pz6SgD
0402デフォルトの名無しさん2014/10/23(木) 00:42:18.56ID:8j+v/8fy
再起オセー。さすがにこれはきついなー。
3番60になりました。
http://ideone.com/LechBt

>>399
マジで6秒台とかどんなマジックを1!!!1111!!!!11
賢者過ぎる。
0403デフォルトの名無しさん2014/10/23(木) 00:43:29.53ID:8j+v/8fy
>>400
ほぇー。2秒ですか・・・。
0404デフォルトの名無しさん2014/10/23(木) 01:21:42.01ID:QTICJd8R
処理速度上げたけど無理だった
http://ideone.com/y6DiZR
0405デフォルトの名無しさん2014/10/23(木) 01:24:38.88ID:QTICJd8R
1つ条件足したら123456789123456789も行けた

http://ideone.com/DBB0i1
0406デフォルトの名無しさん2014/10/23(木) 01:25:42.10ID:QTICJd8R
>>405と思ったら答えが間違った・・・orz
0407デフォルトの名無しさん2014/10/23(木) 01:36:36.29ID:QTICJd8R
たぶんこれでOK

http://ideone.com/NM6es6
0408デフォルトの名無しさん2014/10/23(木) 02:33:14.76ID:8j+v/8fy
>>407
うげ、再起でとけてら・・・。Orz
04093812014/10/23(木) 02:43:07.49ID:IIxcJ9PP
すいません>>400は間違えてそうです・・・
0410デフォルトの名無しさん2014/10/23(木) 03:16:32.58ID:QTICJd8R
>>407は時々タイムアウトしてたので微々たる速度向上させた
http://ideone.com/0cji2g
0411デフォルトの名無しさん2014/10/23(木) 04:16:53.02ID:9RlIYaUE
>>381
C言語
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
>>411
愚直に実装するとそうなるが、>>386にある通り、2個目の例をみて、皿を初見スルーするともっと短時間で食えるようになる。
3番も60秒で食える方法があるので、まだ先があるよ。
0413デフォルトの名無しさん2014/10/23(木) 04:41:45.04ID:LQXcUGbw
初期の着席位置と、目の前の寿司をパスしたほうがいいかの分岐があるってことか。
0414デフォルトの名無しさん2014/10/23(木) 04:51:16.27ID:9RlIYaUE
>>412
そうですね、お邪魔しました。
0415デフォルトの名無しさん2014/10/23(木) 05:06:28.87ID:QTICJd8R
>>407と>>410は間違い、たまたま答えが一致しただけだった、orz
0416デフォルトの名無しさん2014/10/23(木) 05:32:31.33ID:8j+v/8fy
>>413
そう。パスした分は後に回されるので計画的に。

>>414
おう。またこいよ!
0417デフォルトの名無しさん2014/10/23(木) 05:36:57.94ID:8j+v/8fy
>>415
そんなことあるんですか・・・Orz
0418デフォルトの名無しさん2014/10/23(木) 06:12:24.55ID:QTICJd8R
>>404より速度上げたけど123456789123456789は無理だった・・・
http://ideone.com/zmgtvk
0419デフォルトの名無しさん2014/10/23(木) 06:47:55.70ID:0g1QUH9z
>>402
6秒ってのは計算時間の話ねww
同じような総当たりで何十分とか掛かってる人を見たので
0420デフォルトの名無しさん2014/10/23(木) 07:04:27.50ID:8j+v/8fy
>>419
そうだろうけど。って俺のことかー!!!Orz
支障が無ければソースあげてくださいお願いします。刺激をください。
04213922014/10/23(木) 08:44:20.41ID:f1Ltbqcg
>>381 C#

http://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:26o4iaD3
チャレンジしてみたけど、「私」が無限に寿司を拒み続けて食べ終わらないお(´;ω;`)
04253922014/10/23(木) 09:23:50.03ID:f1Ltbqcg
>>381 C#

連投スマン、>>421修正しました
http://ideone.com/jNOBXT

やっぱりそんなに早くはならなかった
最後のケースはやっぱりideoneではタイムアウトだけど、ローカルでの実行結果は約2分17秒強まで短縮できた

98
137278.852ミリ秒
0426デフォルトの名無しさん2014/10/23(木) 09:26:28.21ID:8j+v/8fy
>>424
とりあえず、一回は食べるパスを書いてみるんだ。
0427デフォルトの名無しさん2014/10/23(木) 14:58:06.87ID:v6wc3IXJ
>>381
ローカルPCで
# 実行結果 98
# 実行時間 69.53s

総当り&メモ化したけど、rubyじゃ遅いな・・・

http://ideone.com/DgoL6J
0428デフォルトの名無しさん2014/10/23(木) 16:20:07.94ID:O1f8fk8F
>>381 F#
"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:0ZipcUuC
>>381 Perl
http://ideone.com/ikO1Db

# 一分ぐらい。
04303812014/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:En8l5okm
>>430
forkしてテストケースの値変えてみたらタイムアウトした
http://ideone.com/B7pNyJ
0432デフォルトの名無しさん2014/10/24(金) 00:58:03.86ID:tNm322eE
>>430をみてから、もっと短時間でできるだろと思い今から開発してみる。
プログラムは苦手だが。
04333812014/10/24(金) 01:00:57.26ID:CjrYo0Iu
>>431
バグかと思って焦りましたが、計算量が爆発するケースみたいですね
気づきませんでした
987654321123456789
この987654321の降順の並びが入ってると遅くなるみたいです
04344322014/10/24(金) 01:50:02.69ID:tNm322eE
アイデアだけ書いとく。
マグロ、鮭、玉子、いくら、とあったとして。
簡単のために、2回出現のうちに必ず取るとして。
マグロに0を割り当てたら1度目で取る、1を割り当てたら2度目で取ると約束すると。
初期配置固定なら、何度目でとるかを0000、・・・、1111の2進数で表現できる。
これにもとづいて全部計算。
遅いか?
0435デフォルトの名無しさん2014/10/24(金) 02:05:04.80ID:tNm322eE
特定位置の寿司を2回、3回と連続パスするのは遅くなりありえないと思うんだが。
2回パスや、3回パスが正解となる問は作成可能?
0436デフォルトの名無しさん2014/10/24(金) 02:21:31.57ID:En8l5okm
>>433
テストケースの特定のパターンに依存するということですか
0437デフォルトの名無しさん2014/10/24(金) 02:28:22.38ID:En8l5okm
このお題に関しては最適化というものは難しそうですね
0438デフォルトの名無しさん2014/10/24(金) 02:33:58.40ID:5ltRdMzy
>>434
パターンを全部網羅するのは効率が悪い。
随時取っていって、それまでの最小時間を上回るのが
途中で分かったらすぐに計算打ち切りにした方が良いと思う。
組み合わせは n! (階乗)通りになるのだから
0439デフォルトの名無しさん2014/10/24(金) 03:20:12.30ID:tNm322eE
パターンは、例えば寿司10個だったら10!でなくて1024=2^10だ。(×初期配置のズレ)
2回の出現以内で取る仮定だと。
3回の出現以内だと3^10になって効率が悪いが。
0440デフォルトの名無しさん2014/10/24(金) 04:28:05.08ID:wiSlFvPd
プログラム書いてる人のは見てないからどんなアルゴリズムでやってるかは知らんが
全部の皿の時間数合計以下にはならんのだから、理想的な最短時間は簡単に出るよな
あとはそれを満たす組み合わせを探して、無ければ+1した組み合わせを探して...
ってやっていけばどうだろ
0441デフォルトの名無しさん2014/10/24(金) 04:57:02.17ID:En8l5okm
>>430のおまけみたいなケースだとギャップが大きくないか?
0442デフォルトの名無しさん2014/10/24(金) 11:05:35.08ID:cVnDUIpw
寿司の並びが左から順に
1x
20x
300x
になってる時は、無条件に取っていいだろうね。
今のところ思いつくのはこれぐらい。
0443デフォルトの名無しさん2014/10/24(金) 11:52:32.50ID:tNm322eE
質問。

3 1 3 _ _ は、

1から食べ始めたら7でないのか?

1 -> 3 -> 3
0444デフォルトの名無しさん2014/10/24(金) 11:57:01.21ID:cVnDUIpw
>>443
初期状態: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
04463812014/10/24(金) 12:21:49.95ID:CjrYo0Iu
>>441
誤った答えと正しい答えのギャップが大きくなるように作ってます
>>445
席は文字列の1文字目に固定です
0447デフォルトの名無しさん2014/10/24(金) 16:50:28.89ID:cVnDUIpw
>>381
"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:tNm322eE
>>447
153秒となった。正しさの検証はしてない。

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
>>381
最初の数が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+
>>449
よくわからんけど、はえーな。
ほぇええええー。
0451デフォルトの名無しさん2014/10/24(金) 23:46:11.07ID:s9HkY11H
"987654321123456789"を完食とか食い過ぎだろw
しかもペースが低下しないとかフードファイターですか
0452デフォルトの名無しさん2014/10/24(金) 23:56:09.94ID:En8l5okm
一皿小さめの1貫しかのってないんじゃね
0453デフォルトの名無しさん2014/10/25(土) 02:40:13.48ID:s5oEimPT
>>439
パスN回以上の最適解が存在しない、って証明がないならnPn=n!でやったほうが良いと思う。
最終的に全部の皿を食うんだから、パス回数無制限で考えるならnPnでn!
「59999_____4321」とか、5は多分4回飛ばすのが最適解。

>>440
「それを満たす組み合わせを探し」が処理の本体だからあんまり意味が無い。
探す途中で時間見て打ち切りができるけど、検証を打ち切った事のある順序を
猶予時間が違う条件で複数回調査する事になるから、効率もあまり良くない。
0454デフォルトの名無しさん2014/10/25(土) 03:59:25.14ID:gX7iFCRG
>>449
多分、同一アルゴリズム。時間食ってそうなところを改良。

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
>>449

この行の効果がわからないけど、コピーに時間食うので削ってみたら結果は一緒。


p[nx] = p[cr]; //食べない処理を含む
0456デフォルトの名無しさん2014/10/25(土) 04:27:17.25ID:y0SFSQKU
こういうのって
確実に正しい結果が出ることが期待されるプログラムでの結果と比較しないと怖いよな
枝刈り(?)という処理を減らした部分にバグがある可能性があるし
バグがあっても示されたテストケースのみでは答えが一致するってことは十分ありえるし
0457デフォルトの名無しさん2014/10/25(土) 08:40:51.19ID:s5oEimPT
>>456
枝刈りってのはアルゴリズム(特に探索)ではよく使う言葉だよ。
深さ優先探索で評価値が単調増加ならまず間違えないと思うけど…テストケースが不足っぽい状況が怖いのは同感だ。
0458デフォルトの名無しさん2014/10/25(土) 11:44:27.90ID:gX7iFCRG
これでもいいんじゃないか。シンプルにした。

http://ideone.com/9cOK40
0459デフォルトの名無しさん2014/10/26(日) 06:18:38.95ID:chy6qwDd
お題:ふたつの自然数を連結してひとつの自然数にする。
たとえば123と56なら123456になる。
0460デフォルトの名無しさん2014/10/26(日) 08:27:31.17ID:TWPicZK0
>>459
寿司の食べ方は分からないがそれならできる!

http://ideone.com/5SSpw8
0461デフォルトの名無しさん2014/10/26(日) 09:26:53.01ID:E7QfrGU+
え、、、
1 と 9 連結したら 123456789 とかじゃないのか
0462デフォルトの名無しさん2014/10/26(日) 12:12:40.18ID:NgES14XR
>>459
Rubyで。
http://ideone.com/6ecVTA
0463デフォルトの名無しさん2014/10/26(日) 12:47:30.39ID:chy6qwDd
>>459 Io
f := 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:Tr3nMH6T
>>459 Python

def 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+
123 と 56 で 123456 にならないじゃん
0466デフォルトの名無しさん2014/10/26(日) 13:49:45.08ID:a0fo8RLL
>>459 C
int 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
>>459 訂正
すみません、ごめんなさい。例を間違えました。
123と56で12356になる
でした。
0468デフォルトの名無しさん2014/10/26(日) 14:33:37.27ID:Tr3nMH6T
>>459>>467 Python
def f(a,b):
  print int(a*10**len(str(b))+b)
0469デフォルトの名無しさん2014/10/26(日) 14:51:42.91ID:3PorWqf+
>>449
これ以上は最適化できそうにない。

http://ideone.com/Zrfhkx
04704692014/10/26(日) 15:03:08.59ID:3PorWqf+
最適化はしてみたが、アルゴリズムの正しさは全く検証してない。
答えはあってるようだが、アルゴリズムはあってるのかわかる人いる?
0471デフォルトの名無しさん2014/10/26(日) 16:56:51.13ID:PVLuVEJi
>>459
ttp://ideone.com/b1CkN7
ほぼC。数字には連結してない。

寿司問題難しかったなぁ。なんで1秒以内で解けるのか、賢者すげー。
動的計画法ってすごいんだな。うーん。そっと地頭を呪う。
0472デフォルトの名無しさん2014/10/26(日) 18:05:05.46ID:P8rDdqoY
ほぼC、じゃなくてCで書いたらいかがでしょう
0473デフォルトの名無しさん2014/10/26(日) 18:20:07.01ID:Z+QFP9E4
>>467 Perl
sub f467 { int($_[0] . $_[1]) }
0474デフォルトの名無しさん2014/10/26(日) 18:21:35.11ID:PVLuVEJi
>>472
いやー、配列のコピーめんどくさくて。
メモリ管理とかRAIIに任せた方が確実だし。
はい、ズボラーです。
0475デフォルトの名無しさん2014/10/26(日) 18:26:22.91ID:PVLuVEJi
いやね、ベクタに依存してるから、メモリ管理コードから書かないとやってられんのですよ。
そうすると膨大な行数になるし、サンプル向けじゃないんですよね。
0476 ◆QZaw55cn4c 2014/10/26(日) 18:28:52.87ID:eoLX8RNk
寿司問題まだあきらめていない‥
0477デフォルトの名無しさん2014/10/26(日) 18:29:28.00ID:P8rDdqoY
というか、>>471のコードで「ほぼC」と自称するのに凄く違和感を感じるのですが
04784692014/10/26(日) 18:32:49.00ID:3PorWqf+
おおまかに理解した。
時間とコンベアを進めつつ、その時間に到達しうる寿司の取り方が存在しうる時、
今のサラをとったとしてその先を最小値で更新していくってこと。
0479デフォルトの名無しさん2014/10/26(日) 18:54:29.14ID:PVLuVEJi
>>476
ファイトー。

>>477
ベクター使ってるとはいえあんまりC++っていうこーどでもないですしねぇ。
なんて言えばいいと思いますか?
0480デフォルトの名無しさん2014/10/26(日) 19:11:09.69ID:x9wj00wx
ほぼCと言うなら多少の手直しでCで動くレベルを指す
これはそうじゃない
0481デフォルトの名無しさん2014/10/26(日) 19:17:30.52ID:x9wj00wx
コード全体に対してオブジェクト指向じゃなく関数呼び出しで処理してるっていう意味でならC++らしくないCぽい処理ではあるが
部分部分のコードはCとは互換性ないコードばかりなのでこれをほぼCと呼ぶには違和感
0482デフォルトの名無しさん2014/10/26(日) 19:26:04.80ID:USY7r1W5
c++はもうオブジェクト指向版cじゃなく
マルチパラダイム言語として我が道を突き進んでいる感じだから

ある意味なんでもありなのがc++っぽい
0483デフォルトの名無しさん2014/10/26(日) 19:27:08.98ID:P8rDdqoY
>>479
これはC++11じゃないの?
0484デフォルトの名無しさん2014/10/26(日) 19:29:08.21ID:PVLuVEJi
じゃー、一応今度からはC++と表記することにします。
失礼したしました
0485デフォルトの名無しさん2014/10/26(日) 19:30:12.60ID:PVLuVEJi
>>483
そういう機能も使ってますが、なんかC++っていうには何か足りない気がしてるんですよ。
おいしい所だけ摘まんで食べてる感じで。
0486デフォルトの名無しさん2014/10/26(日) 19:42:53.96ID:P8rDdqoY
28行目
> for (auto& o : Av) R.push_back(o);
って、俺はとてもCに見えない
0487デフォルトの名無しさん2014/10/26(日) 19:49:55.92ID:wpPYehVd
std::cout << argv[1] << argv[2];
0488デフォルトの名無しさん2014/10/26(日) 19:53:07.98ID:wpPYehVd
return std::to_string(i) + std::to_string(j);
0489デフォルトの名無しさん2014/10/26(日) 19:56:26.83ID:3PorWqf+
寿司問題で5秒弱かかる。
これを1秒以内にしたい。

"5988_76_54321_7234_565788939"
0490デフォルトの名無しさん2014/10/26(日) 19:56:42.44ID:PVLuVEJi
ttp://ideone.com/FFxRmJ
C。サンプルとして出しておきます。俺がC書くとこんな感じです。
メモリ管理やりたくないので、C++一本で行きます。
GCC怖い。メモリ破壊怖い。

>>486
今度からC++と表記することにします。ごめんね。
0491デフォルトの名無しさん2014/10/26(日) 20:47:55.36ID:fx3FFnF6
>>479>>490
クラス作ってないだけで普通にC++だろあれは。
C++らしいってどんなコードだと思ってるのというか、
C++の機能をこれみよがしに使えば良いってもんでもないし、「C++らしい」に拘る必要はない。
0492デフォルトの名無しさん2014/10/26(日) 20:50:46.01ID:+iDsoHsQ
うざいかきこみだ
壁にむかってつぶやいてろ
0493デフォルトの名無しさん2014/10/26(日) 21:16:33.47ID:chy6qwDd
>>459 >>467 Lua
function 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
>>467
なんでこんな簡単なのだしたの?
Scheme

(define (foo a b)
(string->number
(string-append
(number->string a) (number->string b))))
0496デフォルトの名無しさん2014/10/26(日) 23:03:13.29ID:PVLuVEJi
>>491
了解。
0497デフォルトの名無しさん2014/10/26(日) 23:35:26.30ID:NgES14XR
>>459
http://ideone.com/ZycO0g
0498デフォルトの名無しさん2014/10/27(月) 00:10:43.57ID:qqJqOOtJ
n人の死刑囚を無人島で処刑することになりました
囚人には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:zpmVa3Ig
>>498
123456789,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:Ex4pjbTm
1234
1回目の処刑、1の右の2の右の3ブッコロ
124
2回目の処刑、2の右の4の右の1ブッコロ
24
3回目の処刑、3いないので4の右の2の右の4ブッコロ
2
0501デフォルトの名無しさん2014/10/27(月) 01:13:39.12ID:qSpzdi+u
>>498 Haskell
import 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
>>498
例えばn=8のとき7回目で囚人7,8は処刑済みなので
「囚人第k号が既に処刑されている場合、k+1以降の番号で最も若い番号を持つ囚人」は存在しないことになると思うけど
どう処理すればいいの?
0503デフォルトの名無しさん2014/10/27(月) 01:28:10.96ID:j1xfvFW3
>>498
>>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:QRuElgFt
>>498 C#

http://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:BaU8nQ1T
>>498 Python
http://ideone.com/P8Oq55
特定の番号しか助からないみたい
0506デフォルトの名無しさん2014/10/27(月) 02:18:10.13ID:XzKSKrvp
>>502
1に循環するんじゃね?おそらく
まぁ出題者が定義しなきゃならんことだけど
0507デフォルトの名無しさん2014/10/27(月) 02:41:08.18ID:j1xfvFW3
>>503のプログラムを変形して、n=0~100で実行してみた。
http://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/
>>469からループ回数を半減できて、
Success #stdin #stdout 0.1s 3476KB
になった。
あとは並列化くらいしかなさげだが困難そう。


http://ideone.com/G4MbxX
0509デフォルトの名無しさん2014/10/27(月) 09:10:56.11ID:qqJqOOtJ
>>498の問題に不備があったようで申し訳ありません。
n = 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:j1xfvFW3
>>509
Rubyで。
http://ideone.com/d9sn3g

実行結果:
input = 13 answer = [4]
input = 8 answer = [6]
input = 0 answer = []
input = 123 answer = [121]
05125102014/10/27(月) 10:27:18.16ID:SrWzdT6O
訂正 >>510
>Aを最後に食べると、BCAの順では、
>3回転目に入って7秒となり、2回転とは矛盾するため、
>例外的に、Cを最後に食べて6秒。ABCの順に食べる

Aを最後に食べると4秒となり、
Cが2回転する、6秒よりも少なくなり矛盾するため、
(最低でも6秒以上かかることは明らかなので)
例外的に、Cを最後に食べて6秒。ABCの順に食べる
05135102014/10/27(月) 12:41:18.09ID:SrWzdT6O
ABCDEFGHIJKLMNOPQR (18コ)
123456789123456789
555555555555555555→回転数

最後の問を紙面上で手計算したら、すべてが5回転となり、
Rを含むスシで、最も早く食べ終わるのは、
Nを最後に食べて90秒となる
もし最後にRを食べれば98秒だが

漏れの考え方のどこかに、間違いがあるかな?
05145102014/10/27(月) 12:50:46.23ID:SrWzdT6O
123456789123456789 の合計が90だから、
90秒ならピッタリ、1秒も休まずに、
食べ続けなければならないから、無理なのか?
05155102014/10/27(月) 13:01:18.20ID:SrWzdT6O
ABCDEFGHIJKLMNOPQR (18コ)
123456789123456789
555555555555555555→回転数

出来るかどうか、最後から、N5,G7,Q8と手計算で、
最初までさかのぼってみます
05165102014/10/27(月) 13:16:48.54ID:SrWzdT6O
最後から最初まで、さかのぼってみました

N5,G7,Q8,M4,K2,J1,
E5,P7,H8,D4,B2,A1,
N5となり重複でダメ。90秒では無理でした
0517デフォルトの名無しさん2014/10/27(月) 13:43:53.04ID:RqlTRjFU
>>509
ttp://ideone.com/q1T21C
C++。組み込み関数使ったらあっさりできて拍子抜け通り越して大丈夫か?って感じ。
そんなコードで大丈夫か。ホント大丈夫か!?
0518デフォルトの名無しさん2014/10/27(月) 14:05:30.45ID:FLzTjxn/
寿司問題でこれはいくつ?

222654322
0519デフォルトの名無しさん2014/10/27(月) 14:43:44.00ID:RqlTRjFU
>>518
54であってる?
0520デフォルトの名無しさん2014/10/27(月) 14:52:50.94ID:RqlTRjFU
コードは>>402の奴を流用。
0521デフォルトの名無しさん2014/10/27(月) 16:02:25.45ID:QRuElgFt
>>498 C#

>>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
>>498です
皆さん正解ですね。さすがです。
思いつくままに作った問題だったから簡単だったかな。
0523デフォルトの名無しさん2014/10/27(月) 17:19:30.93ID:pFvWcM7s
>>498 >>509 Io
Range
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/4qF
>>509 Perl
http://ideone.com/HfOzdj
0525デフォルトの名無しさん2014/10/27(月) 20:23:43.17ID:z4jaAcao
>>509
R言語かつ再帰関数

http://ideone.com/lXfQF6
0526デフォルトの名無しさん2014/10/27(月) 22:34:18.25ID:K9o3lEDr
継子立てか
0527デフォルトの名無しさん2014/10/27(月) 22:36:51.57ID:yx+oFKKT
>>467 Perl

say 123 . 56;

あるいは

say 123, 56;

とか。数値を文字列としても扱えるから…
0528デフォルトの名無しさん2014/10/27(月) 23:37:07.94ID:GV1Ac98A
>>498,509
>>517を見ていたら一般解を求められるようなので C にて
http://ideone.com/ynErn6
0529デフォルトの名無しさん2014/10/28(火) 00:08:28.34ID:OyTPqxJU
>>498

1234 -> 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
>>498
処理コスト度外視

Java
http://ideone.com/tbPo9w
0531デフォルトの名無しさん2014/10/28(火) 00:46:49.03ID:/gCxd/Pw
>>528
鮮明眼!
05325102014/10/28(火) 00:51:55.26ID:nIBZ+v+u
>>510-516
ABCDEFGHIJKLMNOPQR (18コ)
123456789123456789
555555555555555555→回転数

最後の問を紙面上で手計算したら、すべてが5回転となり、
Rを含むスシで、最も早く食べ終わるのは、
N5を最後に食べて90秒となるが、これは無理でした

もし最後にR9を食べれば98秒ですが、
それ以外に、最後がO6なら92秒、P7なら94秒、Q8なら96秒で、
終わることは無理でしょうか?
0533デフォルトの名無しさん2014/10/28(火) 07:21:52.28ID:mh0S7TxZ
>>512
ちゃんと読んでないけど、例外が有るって事はアルゴリズムとして完成してないと思う
>>532
既存回答にぶち込んでみりゃいいじゃん、98秒だよ
0534デフォルトの名無しさん2014/10/28(火) 12:59:22.99ID:TP5uYpuR
島毎に曲角の座標を開始地点の角Aを決めて一周して全て求めよ

xxxxxxxxxx
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:tsbsNhbS
>>534 Haskell
http://ideone.com/tkKhkX
この手の問題は綺麗にかけなくて辛い
0536デフォルトの名無しさん2014/10/28(火) 15:13:42.13ID:OyTPqxJU
テストデータジェネレータとかも作ってくれ
0537デフォルトの名無しさん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:1dL6x9QH
>>536
http://ideone.com/deUdqS
0540デフォルトの名無しさん2014/10/29(水) 01:30:28.70ID:vxICmKNI
>>538 Ruby
http://ideone.com/qpv2yQ
0541デフォルトの名無しさん2014/10/29(水) 13:38:42.23ID:4RRnfYb9
お題:
N銀行は現在の硬貨の発行を止め、現在とは異なる貨幣価値を持つ硬貨の発行を検討している

というのも、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
>>541
こういう、コンビネーションの問題はC++は苦手です。
順列しかないので780!って馬鹿みたいな処理量になるので、コンビネーション関数がほしい所です。
0543デフォルトの名無しさん2014/10/29(水) 18:25:43.96ID:pqipUbgZ
コンビネーション関数ってなんだ?
0544デフォルトの名無しさん2014/10/29(水) 19:04:11.79ID:JUluSNYE
>>543
配列のコンビネーションを回してほしいということです。
std::next_permutationという関数があるんですよ。順列回してくれるんですけどね。
それのコンビネーション版があればなー。という話です。
0545デフォルトの名無しさん2014/10/29(水) 19:05:57.26ID:TgghxHIi
それ、C++が苦手なんじゃなくてあなたが苦手なのでは
0546デフォルトの名無しさん2014/10/29(水) 19:06:34.78ID:JUluSNYE
あぁ、そう。数学は苦手です。正解。
0547デフォルトの名無しさん2014/10/29(水) 19:13:29.92ID:JUluSNYE
>>541
ttp://ideone.com/7CIxAD
C++。こういうコードを書いてみました。が発見できず。
これあってるのかちょっとよくわからんなー。
チェック関数間違えてるかもしれん。誰かデバッグして!お願いプリーズ。
0548デフォルトの名無しさん2014/10/29(水) 20:11:00.17ID:JUluSNYE
あ、やっぱチェック関数バグってら。
ちょろっといじったらイデオンでタイムアウトした。
0549デフォルトの名無しさん2014/10/30(木) 02:21:29.52ID:c6inW4Me
>>541
探索範囲狭いけど、かなり見つかる
http://ideone.com/tzeJd8

全部探索したら何千、何万とかいきそうだけど、勘違いしてる?
05505412014/10/30(木) 02:53:53.44ID:T6lP2S6U
>>549
してました
ご指摘ありがとうございます
挑戦していただいた方、大変失礼しました
>>541は忘れて下さい
0551デフォルトの名無しさん2014/10/30(木) 23:14:27.81ID:EjjZmYZS
  |=番兵|_
 (  ˘ ω˘) < スヤァ
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)ww、w、、www、、
0552デフォルトの名無しさん2014/10/31(金) 00:03:34.17ID:uLzIjtD6
>>550
多分スイートスポットがあるんだよ。
大きなお金で大半削って小さなお金で微調整だから。
0553デフォルトの名無しさん2014/10/31(金) 00:16:29.43ID:8Uf3xK8D
>>549
そういうコードをサクっと書いてしまうとかマジすげえな
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:RMRbc5Qb
>>555
C言語と同等です
0557デフォルトの名無しさん2014/10/31(金) 01:25:30.12ID:bPYHzZZn
ポーランド記法の中に優先順位の情報が含まれているのでは?
0558デフォルトの名無しさん2014/10/31(金) 01:33:06.60ID:0fzkhfga
>>554
>出力: 8/4*(9/3)

出力: 8/4*9/3
でOK?
0559デフォルトの名無しさん2014/10/31(金) 02:03:58.37ID:RMRbc5Qb
>>558
演算の結果としては同じなので、数学なら括弧を外すことができるかもしれませんが
演算の順序が異なってしまうのでなしでお願いします
0560デフォルトの名無しさん2014/10/31(金) 03:03:12.28ID:h7ZI8+Gl
>>554 Ruby
http://ideone.com/G7ndPJ
0561デフォルトの名無しさん2014/10/31(金) 03:07:18.85ID:PyU9LtcS
>>553
すげぇけど、>>552の言うところのスイートスポットをハードコーディングしてるみたいよ?コレ
0562デフォルトの名無しさん2014/10/31(金) 03:24:24.28ID:h7ZI8+Gl
>>561
http://ideone.com/En8CCa
探索範囲広げたやつだけど、これで30分くらい走らせると1万通り以上見つかる
出力眺めてると、もっと範囲を広げればもっと見つかりそうに見える
0563デフォルトの名無しさん2014/10/31(金) 03:43:21.87ID:KaE7v9P9
硬貨枚数にたいし、9枚以内で1-Nが生成可能
という条件で、Nの最大値を求める問題にするのは?
6枚だと780が最大?
0564デフォルトの名無しさん2014/10/31(金) 04:13:38.79ID:bPYHzZZn
>>559
要はポーランド記法を中置記法に直したものをもう一度ポーランド記法に戻したときに元のポーランド記法と一致すりゃいいってことだろ?
0565デフォルトの名無しさん2014/10/31(金) 04:16:54.99ID:bPYHzZZn
Output = Polish2Infix(Input)
Assert Input === Infix2Polish(Output)
こんな感じか?
0566デフォルトの名無しさん2014/10/31(金) 04:31:51.75ID:h7ZI8+Gl
>>563
>>562 の範囲で調べると
1, 3, 10, 32, 82, 281
で N = 1057
0567デフォルトの名無しさん2014/10/31(金) 11:17:21.17ID:9/yMp4aa
>>554 F#

let 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
>>554 C#

ソースコードぐっちゃぐちゃだけど、とりあえず・・・
http://ideone.com/6lOI0t

キレイに出来たら更新しまふ
0569デフォルトの名無しさん2014/10/31(金) 12:50:54.90ID:+z4GttV9
>>554 Perl
http://ideone.com/6QNaon
0570デフォルトの名無しさん2014/10/31(金) 20:06:28.80ID:QPjal7aP
500までの自然数のうち3, 7, 9のそれぞれの倍数の総和を求めよ
ただしループは禁止とする
0571デフォルトの名無しさん2014/10/31(金) 20:07:10.45ID:QPjal7aP
3の倍数の総和 + 5の倍数の総和 + 9の倍数の総和
0572デフォルトの名無しさん2014/10/31(金) 20:48:15.07ID:/oqlxorA
>>570
それ算数だから
0573デフォルトの名無しさん2014/10/31(金) 21:00:15.09ID:qzXnBU4c
初歩的な数列の和は中学校で教えるから一応、数学だよ
0574デフォルトの名無しさん2014/10/31(金) 21:44:42.42ID:kmZP7VPy
n(A) + n(B) + n(C) - n(A∩B) - n(B∩C) - n(C∩A) + n(A∩B∩C)
高校1年生レベルの数学。
0575デフォルトの名無しさん2014/10/31(金) 21:49:46.46ID:kmZP7VPy
まあ実質9の倍数は3の倍数に含まれるから、
n(A) + n(B) - n(A∩B)
でokだろうが。

問題(文の表現)が良くないね。n(A∪B∪C)を求めさせたいんだろうけど。
0576デフォルトの名無しさん2014/10/31(金) 22:07:50.38ID:q7CU3Bn3
また山下君かな
0577デフォルトの名無しさん2014/10/31(金) 22:14:08.28ID:75VYvhjn
口はいいからお題かコードを書きなさい
0578デフォルトの名無しさん2014/10/31(金) 22:15:06.77ID:+z4GttV9
>>570 >>575 Perl
http://ideone.com/dXGgn3
0579デフォルトの名無しさん2014/10/31(金) 22:19:00.97ID:/oqlxorA
>>577
解答はしてるよ
0580デフォルトの名無しさん2014/10/31(金) 22:42:40.11ID:hGenexJ6
>>571 R
> ( 166*(3+3*166)+100*(5+5*100)+55*(9+9*55) )/2
[1] 80693
0581デフォルトの名無しさん2014/10/31(金) 22:55:39.12ID:yKH3ri/a
>>570 C
http://ideone.com/DnQ0l9
0582デフォルトの名無しさん2014/10/31(金) 23:07:58.14ID:qzXnBU4c
>>574
集合表記を使えばそりゃ高校数学になるが、中学校でもこれくらいの問題の解き方は教える
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:Gn0IYvWG
>>582
3集合のは教えない。せいぜい2集合までだろう。
0585デフォルトの名無しさん2014/11/01(土) 00:09:05.90ID:XP9gaYOy
>>583
メモリビットマップが最速かな
0586デフォルトの名無しさん2014/11/01(土) 00:17:55.44ID:oShYnEnM
>>585
どういうこと?バケットソートを使うの?
0587デフォルトの名無しさん2014/11/01(土) 00:20:43.16ID:Zo8J/0CE
ビットを塗ってって、最初の塗り抜けを探すんだろ
0588デフォルトの名無しさん2014/11/01(土) 00:23:17.02ID:XP9gaYOy
>>586

>>587の言うとおり。
素数などを求めるエラトステネスのふるいに似ているというか
0589デフォルトの名無しさん2014/11/01(土) 00:25:13.34ID:oShYnEnM
よくわからない
自然数って上限値が書かれてないけどその手法大丈夫なの?
0590デフォルトの名無しさん2014/11/01(土) 00:26:29.74ID:XP9gaYOy
>>589
そうだね。
俺はうかつだった。
0591デフォルトの名無しさん2014/11/01(土) 00:27:04.75ID:oShYnEnM
ああ1000000個までの数列だから最小の自然数は1000000以下ということが保障されてるから大丈夫なのか
0592デフォルトの名無しさん2014/11/01(土) 00:30:00.14ID:oShYnEnM
でもビット塗ってくってバケットソートとアルゴリズム的には同じなんじゃないのかなあ?ビット塗るってのがよく分からんから違うかもだけど
0593デフォルトの名無しさん2014/11/01(土) 00:32:24.74ID:XP9gaYOy
>>591
保障しない方が面白いような
0594デフォルトの名無しさん2014/11/01(土) 00:41:51.64ID:Gn0IYvWG
>>591-593
全然保障されてない
0595デフォルトの名無しさん2014/11/01(土) 00:45:56.38ID:oShYnEnM
だって「その数列に含まれない自然数のうち最小のものを求めよ」だよ
数列が1000000個なら1000000以下の自然数のどれかでしょ
1000001以上の自然数は問題の最小値にはなりえないのだから
0596デフォルトの名無しさん2014/11/01(土) 00:50:54.13ID:Gn0IYvWG
>>595
数列が1000002〜2000001の自然数だったら?
0597デフォルトの名無しさん2014/11/01(土) 00:51:42.31ID:oShYnEnM
1000000個が0〜999999までの数字全部で埋まってたら最小値は1000000
1000000個の内、0〜999999の数字が1個以上欠けてたら、欠けてるの数字の最小の数
1000000個のうち、0〜999999の数字が1個も含まれてないのなら最小値は0
だよ
0598デフォルトの名無しさん2014/11/01(土) 00:52:51.79ID:oShYnEnM
>>596
その場合は最小値は0でしょ
数列の中に”含まれない自然数”の最小値なんだから
0599デフォルトの名無しさん2014/11/01(土) 00:56:54.94ID:oShYnEnM
数列内の数のうち最小値と最大値の範囲の自然数の中からの最小値なんてどこにも書かれてないんだから
0600デフォルトの名無しさん2014/11/01(土) 00:59:06.02ID:Gn0IYvWG
>>598
スマン、確かにその通りだね。最大値と取り違えてた。
0601デフォルトの名無しさん2014/11/01(土) 01:09:29.32ID:5+XUKxyu
ID:Gn0IYvWG = 山下
0602デフォルトの名無しさん2014/11/01(土) 01:39:51.02ID:Gn0IYvWG
>>601
俺出題者と違うけど
0603デフォルトの名無しさん2014/11/01(土) 10:34:01.89ID:fztHcu0w
お題:自然数Nが与えられたら、Nの各桁のk乗の和(ただしkはNの桁数)を返すという操作を繰り返す。

例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
>>603訂正
例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
>>603,604 Perl

$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:NWvPyPI3
変数aとbに適当な値を入れ、値を入れ替えて出力せよ
0608デフォルトの名無しさん2014/11/01(土) 17:51:01.05ID:6pc74ukR
>>607 perl

($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
>>608
ごめんevalが抜けてた。

($a, $b) = eval <>;
($a, $b) = ($b, $a);
say "$a, $b"
0610デフォルトの名無しさん2014/11/01(土) 18:09:56.72ID:iW3/zCCJ
点Aと点Bを結ぶ線L。
四角形Sの左上の角Kの座標X, Yと縦H横W。
A, Bの座標と、Kの座標・縦横の長さを適当に決めて、LとSが交差していたら1、交差していなければ0を出力せよ。
0611デフォルトの名無しさん2014/11/01(土) 18:10:35.87ID:tkbX0ssu
>>554
やっとできた

R
http://ideone.com/uYKsR9
0612デフォルトの名無しさん2014/11/01(土) 18:16:01.23ID:fq7f8slF
>>607 C++
http://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:/9f2fySD
勝率が99%下回るまでの対戦数じゃないのか
06156132014/11/01(土) 21:35:43.90ID:8otLHyfo
ちょっと考えたら全然練りが足りない気がしてきたので>>613は一旦取り下げます
もうちょっと練ってみます

>>614
例えばアットランダムに手をだしたら33%程度の勝率なので、
固定的な手を出す相手に対していかに素早く勝利を上昇させるか・・・という考えでしたが
なにか勘違いしてましたかね?
0616デフォルトの名無しさん2014/11/01(土) 21:41:35.80ID:/9f2fySD
俺のほうが勘違いしてたようだ
すまぬ
0617デフォルトの名無しさん2014/11/01(土) 21:51:42.85ID:pFRJeQaQ
いつもmakehoge書いてるものだが、
俺が速攻コード書くとお前らの議論が見れないことが分かったのでしばらく休止する。
コード間違ってても指摘してくれんし地頭鍛えるためにもっと喋ってくれ。

んじゃまた。
0618デフォルトの名無しさん2014/11/01(土) 23:01:25.89ID:W6WLiHv3
>>610
Rubyで。
http://ideone.com/74dHkk
0619デフォルトの名無しさん2014/11/01(土) 23:22:42.25ID:/9f2fySD
四角形って正方形や長方形だけ考慮すりゃいいの?
0620デフォルトの名無しさん2014/11/01(土) 23:30:06.57ID:He9Dns4q
おう
0621デフォルトの名無しさん2014/11/01(土) 23:46:17.60ID:rrIYqfYy
>>618
全部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:pFRJeQaQ
直線どうしがクロスしてればヒットってことじゃないのか?
0623デフォルトの名無しさん2014/11/01(土) 23:53:20.25ID:rrIYqfYy
そうすると全部平面の中に線があるデータだから全て0にならないとおかしい
0624デフォルトの名無しさん2014/11/01(土) 23:59:08.14ID:/9f2fySD
>>621
全部は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:pFRJeQaQ
オンライン処理か。境界線系の処理って結構めんどいよね。
0626片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/02(日) 00:05:15.19ID:o1wy83SR
お題:
(i)日時に時間を足したものを求める。
(ii)二つの日時の差を求める。
※日時データはYYYYMMDDhhmmss形式の文字列で与えられる。時間データは秒数とする。
0627デフォルトの名無しさん2014/11/02(日) 00:18:25.02ID:cD/GWeVk
>>613
対戦相手の初手は必ずその左端の手なの?
0628デフォルトの名無しさん2014/11/02(日) 00:18:57.41ID:cD/GWeVk
>>613
対戦相手はどのようにして選ばれるの?
0629デフォルトの名無しさん2014/11/02(日) 00:20:37.83ID:cD/GWeVk
>>610
交差というのは
ディスプレイで例えるなら画面上の同一ドット上に描画ということ?
0630デフォルトの名無しさん2014/11/02(日) 00:22:08.97ID:cD/GWeVk
>>607
変数の型が異なる場合も想定したほうがいいの?
0631デフォルトの名無しさん2014/11/02(日) 00:26:25.66ID:cD/GWeVk
>>603
ループを好きなだけ求めよってどういうこと?
0632デフォルトの名無しさん2014/11/02(日) 00:35:53.79ID:H1LxJTNx
>>624
100も含まれるよ
Ax,Ay=0,1
Bx,By=1,1
Kx,Ky=0,0
Kw,Kh=1, 1で考えてみて
06336032014/11/02(日) 00:36:16.38ID:P2oj7pBx
>>606
ありがとうございます。

>>631
370,370,...や160,217,352,160...のようにある自然数から操作を何回か繰り返すと
自分自身に戻るような列を出来るだけ多く求めよ、と言う意味です。
説明不足ですみませんでした。

参考までに自分のコードをのせておきます。
1000000まで調べて35個のループを見つけました。

Haskell
http://ideone.com/zA3QEj
0634デフォルトの名無しさん2014/11/02(日) 00:42:55.49ID:vzdMzxCD
>>624
なんで99になるの?数学の勉強やりなおしたほうがいいよ
0635デフォルトの名無しさん2014/11/02(日) 00:56:29.42ID:H1LxJTNx
>>621はベクトルの外積で解けるけどもう寝る
0636デフォルトの名無しさん2014/11/02(日) 00:57:01.76ID:H1LxJTNx
アンカー間違えた
>>610だった
0637デフォルトの名無しさん2014/11/02(日) 01:07:07.44ID:cOZRjysN
>>634
0起点か1起点かの話?
0638デフォルトの名無しさん2014/11/02(日) 01:26:03.94ID:QsSuiFos
>>628
全員と対戦してそれぞれの結果を表示してもらうという想定でしたが
>>615に書いた通り練りが足りないので保留して、もうちょっと考えます
具体的には「対戦相手1〜4」だけの例示だとそれだけに勝つことを考えればよくなってしまうわけで
対戦相手の手の出し方自体をランダムに生成するようにしないとなぁとかなんとか
・・・だれか、代わりにやってもらえるなら頼みたいですw
>>616
こちらも説明が下手ですまなかったです
06396062014/11/02(日) 03:24:16.76ID:fr0Fy3+s
>>633
そう言う意味だったんだ、そしたら… 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みたいに複雑になるのか分からない。
06406392014/11/02(日) 03:48:00.27ID:PoxfwvfS
>>639
1..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]
…
06416392014/11/02(日) 03:49:37.30ID:PoxfwvfS
…続き
11227 -> [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 です。(お金ない…)
06426392014/11/02(日) 04:14:35.00ID:fr0Fy3+s
>>641
根性で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/JrPgM
>>603
Rubyで。
http://ideone.com/EyLXVW
0644デフォルトの名無しさん2014/11/02(日) 13:55:37.27ID:LYAK8dQQ
お題:硬貨がn枚あり、合計金額がk円のとき、その内訳を求める。
硬貨の種類は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:hb6xaL8M
>>644 Python

import 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
>>646
三等分も四等分もできないときは?
0648デフォルトの名無しさん2014/11/02(日) 18:57:27.64ID:q60nWMQW
入力を受け付けない
0649デフォルトの名無しさん2014/11/02(日) 19:09:04.32ID:XqbGR+7r
山下雄介
0650デフォルトの名無しさん2014/11/02(日) 19:37:48.02ID:HZCDIsYK
>>644 F#

let 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:UtmlUpzz
>>646 C
http://ideone.com/ZP9JBr
0652デフォルトの名無しさん2014/11/02(日) 21:14:26.15ID:jMZPQf2r
>>610
おそらくできた

R
http://ideone.com/an6YsM
0653デフォルトの名無しさん2014/11/02(日) 21:24:21.77ID:dpGutFPP
>>603
これ難易度が絶妙な良問じゃないですか
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
06546532014/11/02(日) 21:57:11.23ID:dpGutFPP
9桁も1つ見つけたけどこれ以上は俺のオンボロPCじゃ無理っぽい
そもそも数値が計算途中で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:IBnDqJlk
ループする部分だけをユニークに抜き出せってことっしょ、おそらく
06586392014/11/03(月) 01:15:58.11ID:Lxc/V8EZ
オレが調べた範囲(1..2000000)では
・発散するものはなかった
・値が進んでいくと、概出のループに陥るものが多くなり、
新規のルーフに遭遇する機会が減っていった

数字列の辿る数学的な吟味、検討はしていません。
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:EIdpYGy3
数学的に考察してみた

Nが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/RfTt
>>661
limit zero だからといって、step(N)<N が常に成り立つ、とまでは言い切れないのでは?
0663デフォルトの名無しさん2014/11/03(月) 12:59:19.03ID:C9Z/RfTt
言葉を足すね
limit zero だからといって、step(N)<N が常に成り立つ地点(それから先はずっと成り立つ)が存在する、とまでは言い切れないのでは?
0664デフォルトの名無しさん2014/11/03(月) 13:06:51.51ID:6pvwXnwF
Mに対して、M<=Nならばstep(N)<=Nを満たす最小のMはいくつになるのか?
ループ長もある定数以下ってことになるな。
0665デフォルトの名無しさん2014/11/03(月) 13:12:38.46ID:6pvwXnwF
>>662
自分も同じ疑問はもった。しかし結論はあってるのではないか。
step(N)をなるべく大きくしようとすれば、N=1999・・・・の形になるとおもう。
それで実際に計算してみようとすると、ある程度大きいNに対してはstep(N)がNを超えられなくなると思う。
0666デフォルトの名無しさん2014/11/03(月) 13:16:12.66ID:C9Z/RfTt
確かに結論はあってそうですね
0667デフォルトの名無しさん2014/11/03(月) 13:30:48.96ID:DYZQazX2
お題:お絵か木
h=2
_@
@_@

h=3
___@
_@___@
@_@_@_@

h=4
_______@
___@_______@
_@___@___@___@
@_@_@_@_@_@_@_@
0668デフォルトの名無しさん2014/11/03(月) 13:37:03.46ID:6pvwXnwF
step(N)がNを超えられる最大のNはN=-1+2*10^23か?
step(N)=203847576752007525206368
これより先にあるか?
0669デフォルトの名無しさん2014/11/03(月) 13:38:43.93ID:pWQDpgBn
log10(60*9^60)+1 = 60.03...
log10(61*9^61)+1 = 60.99...
だから61桁以上の数値を含むループはなさそうだね
0670デフォルトの名無しさん2014/11/03(月) 13:59:01.52ID:1DGR/mlS
>>667
>>104
0671デフォルトの名無しさん2014/11/03(月) 17:13:42.69ID:hmgWhyGC
>>667 Python
def f(h):
  print "\n".join([(("_"*(2**(i+1)-1) + "@")*(2**(h-i-1)))[2**i:] for i in reversed(range(h))])
06726652014/11/03(月) 17:23:54.05ID:6pvwXnwF
N=10・・・9・・・で桁を伸ばせる可能性があるか?
0673デフォルトの名無しさん2014/11/03(月) 17:27:29.18ID:hmgWhyGC
>>646,648 Python
def 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:6pvwXnwF
0がx個、9がy個、1が1個で、N=10・・・・9・・・・の形でやってみたら、

x=1 y=57 のとき、step(N)=11381065232791397665950138920227498584966012307739723673874で、step(N) > N。

これ以上はないとおもうがどうだろ?  前回のは計算ミスがあった。
0676デフォルトの名無しさん2014/11/03(月) 17:55:09.38ID:Y5JYM2NV
>>674
コラッツの予想だね
0677デフォルトの名無しさん2014/11/03(月) 17:58:45.74ID:ga1lmjsH
>>661
数学よくわからんな
>>653とか見てるとN<step(N)なパターンが散見するけど
N<step(N)なパターンが延々と続くケースとか発生しないってこと?
0678デフォルトの名無しさん2014/11/03(月) 19:11:33.42ID:GluBjznL
>>674
C++
http://ideone.com/j3rp4o
0679デフォルトの名無しさん2014/11/03(月) 19:41:30.72ID:hmgWhyGC
>>674 Python

def 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
>>603
>>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:Y5JYM2NV
>>681
e ならある
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:Y5JYM2NV
πあったね
http://hibari.2ch.net/tech/kako/1308/13087/1308749241.html の >>355
http://ideone.com/oEKtkX
ファインマンポイントまでは計算できているようだ
0684デフォルトの名無しさん2014/11/03(月) 22:00:40.14ID:NPjeGKon
>>681 昔書いたやつ
http://ideone.com/ToWR1j
0685デフォルトの名無しさん2014/11/03(月) 22:11:47.87ID:aNJ5eidf
>>682-684
おいおい、おまえら素晴らしいじゃねーか
おれも、>>683的なオーソドックスなので組んだことはあるけど、
>>684のはどうなってんだ?ちょっとあぜんとしてしまったんだが…。

とりあえず、おみそれした
そして、なんかすまんかった
0686デフォルトの名無しさん2014/11/03(月) 22:17:04.16ID:Y5JYM2NV
確かに >>684 は唖然‥もととなる公式のヒントだけでも
0687デフォルトの名無しさん2014/11/03(月) 22:30:21.40ID:NPjeGKon
>>686
ニュートンの公式で10進2桁ずつ(つまり100進1桁ずつ)計算

公式は例えばここ
http://www.usamimi.info/~geko/arch_acade/elf003_pai/index.xml
マチンより遅いけどコードは簡単
06886392014/11/04(火) 01:57:26.48ID:IWkjhLAE
1988年頃にbitに記載された金田先生の記事に触発されて
i386の32bitモードでπを計算するアセンブラ500stepくらいのを
当時書いた。ソースはどこ行ったか分からなくてアップできない。
10万桁で8時間くらいかかっていた。
スカラCPUでは、楕円積分やガウスルジャンドルよりも、普通に1/arctanの式の方が速かった記憶がある。
06896752014/11/04(火) 03:32:33.17ID:m6tgGZDB
一桁伸ばせた。

x=2 y=57 のとき、
step(N)=102429587095122578993551250282047487264694110769657513064858

今度こそこれより大きいのはないだろ。
0690デフォルトの名無しさん2014/11/04(火) 04:27:15.08ID:3dU+atP7
それは何を求めてんだ?
06916752014/11/04(火) 04:56:48.55ID:m6tgGZDB
max { N | N < step(N) }
06926752014/11/04(火) 05:17:14.43ID:m6tgGZDB
>>603は、何回施行したとしてもmax{M,N}以下の数字しか出現しないということ。



M = 102429587095122578993551250282047487264694110769657513064858
0693デフォルトの名無しさん2014/11/04(火) 07:37:07.88ID:FtAVU3Jn
ループの中には N <= step(N) となるNが必ず1個以上含まれてるはずだから
N <= step(N)となるNだけ調べればokで
その中の最大値が>>692ってことだね
なのでその値まで調べれば全てのループが分かると
0694デフォルトの名無しさん2014/11/04(火) 21:20:53.79ID:6foYtPZ7
  |=番兵|_
 (  ˘ ω˘) < スヤァ
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)513064858
0695デフォルトの名無しさん2014/11/04(火) 22:50:31.60ID:JIygd8XK
>>682
ネイピア数なら円周率より簡単に書けるよ
http://ideone.com/sAEbtW
0696デフォルトの名無しさん2014/11/05(水) 06:41:11.55ID:A3r8Fejs
>>674
不完全だけどできた。答えが合っているかは謎だが
R
http://ideone.com/IlkGr1
0697デフォルトの名無しさん2014/11/05(水) 18:12:27.63ID:oL739v0u
>>674 Haskell
http://ideone.com/cvxwMG
0698デフォルトの名無しさん2014/11/05(水) 22:29:28.68ID:IU8t8wXV
>>674 Squeak Smalltalk

| 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:j6bk88Hb
>>674 Ruby
http://ideone.com/dGY6BC
他のと比べてへぼいことしてしまった
0700デフォルトの名無しさん2014/11/06(木) 00:26:57.88ID:kDWgKS91
>>674
ダメだ分からん
難しい問題だな

PHP
http://ideone.com/icbejZ
0701デフォルトの名無しさん2014/11/06(木) 01:40:04.72ID:z60eCyfg
>>674 C
http://ideone.com/GEEoKc
0702デフォルトの名無しさん2014/11/06(木) 02:28:32.44ID:xbQtbYcA
>>674
RUby
http://ideone.com/SiYj2j
0703デフォルトの名無しさん2014/11/06(木) 07:03:31.65ID:ik6+jvjT
>>674 Perl
http://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:z60eCyfg
>>704
3nは倍にしても6nだから3n-1にはどうやってもできなくね?
0706デフォルトの名無しさん2014/11/06(木) 14:02:03.60ID:CQncpyVm
>>676の言うようにコラッツの予想(Wikipediaにあった式)を適用するだけじゃアカンのか?
0707デフォルトの名無しさん2014/11/06(木) 15:17:08.56ID:Uro6JXyQ
コラッツの予想は 3 * n - 1 のところを 3 * n + 1 に変えたものだから微妙に違うね
0708デフォルトの名無しさん2014/11/06(木) 16:02:35.46ID:4jfyym2c
コラッツ問題は"m"に対して関数を適用していくものだから、"1"に対して適用していく>>674とはまるで違うと思うんだが
これが
a(n) = 2 * n
b(n) = (n + 1) / 3
ならまだしも
0709デフォルトの名無しさん2014/11/06(木) 16:18:03.38ID:aYOy4vHI
もっと初級レベルのお題をだせや
0710デフォルトの名無しさん2014/11/06(木) 17:27:58.91ID:N6Ugp7Tx
geocodeのお題とかってどうよ?
07117002014/11/06(木) 18:00:23.53ID:+E7ivHML
>>674

方針変えてみてがダメぽげ

C++
http://ideone.com/iqkKMT

10 -> bbbaba
4 -> bbbabbbaaaabaaa
67 -> bbbababbababbaabaabaabbaabaaa
175 -> bbbbbababaabbaaaaababbabbaaababbaabaaa
809 ->
07127002014/11/06(木) 18:16:57.11ID:+E7ivHML
>>674

もうちょっと変えてみた

C++
http://ideone.com/tuWzEw

10 -> bbbaba
4 -> bbbabbbaaaabaaa
67 -> bbbababbababbaabaabaabbaabaaa
175 -> bbbbbababaabbaaaaababbabbaaababbaabaaa
809 -> bbbbbababaabbaaabbaaababbbaaababbaabaabaa
0713デフォルトの名無しさん2014/11/06(木) 18:39:44.26ID:UIEA6AtQ
3、6、9、・・・はどうやっても出来ないの?
コラッツ予想ではできるだろう? こっちは1になる問題だが。
07147042014/11/06(木) 18:49:32.52ID:UIEA6AtQ
3が出来るならこの等式を満たさなければならないが
mod 3で等式が不成立だからムリか。等式だったら3の余りでも等しいので。


3*2^m = 3n - 1
0715デフォルトの名無しさん2014/11/06(木) 18:52:01.04ID:7/6JxEpW
b(n)の操作は結果が3の倍数にならないことを保証してるし
3の倍数でない値に対してa(n)の操作をいくら行っても3の倍数にならんだろJK
07167002014/11/06(木) 19:11:22.47ID:+E7ivHML
>>674
>>712をちょっと訂正

http://ideone.com/l7ZTnB

10 -> bbbaba
4 -> bbbababbabaaaaa
67 -> bbbababbabaabbabbababaaaabaaa
175 -> bbbabbbaabbaabbabaabababaabbabaaaabaaa
809 -> bbbbbababaaabbabaabbbabaabaaababbaabaabaa
0717デフォルトの名無しさん2014/11/06(木) 19:22:17.50ID:f9VXhmfJ
>>603
8時間回して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
>>717
どうやったらそんな速く探索できるの?
0719デフォルトの名無しさん2014/11/06(木) 19:50:29.10ID:aYOy4vHI
CPUとメモリをおしえて
0720デフォルトの名無しさん2014/11/06(木) 20:19:03.19ID:f9VXhmfJ
>>718
枝切りなんかね?

>>719
Pentium G6950 2.8GHz メモリ10GB
だけどメモリはあまり使ってないよ

コード整形してからideoneに貼るわ…整形しても汚いけどww
0721デフォルトの名無しさん2014/11/06(木) 20:58:28.51ID:f9VXhmfJ
>>603
Java
http://ideone.com/2KsxRg

コード汚いから晒すの恥ずかしいw
0722デフォルトの名無しさん2014/11/06(木) 22:12:31.87ID:j6bk88Hb
>>721
なるほど
数字の個数だけ考えてると
組み合わせは、40桁で20億、60桁で600億程度だから、
頑張れば探索可能ってことか
0723デフォルトの名無しさん2014/11/06(木) 22:31:22.69ID:f9VXhmfJ
http://ideone.com/26ofhO
43桁まで約13時間…8時間以上新規ループが無いんだがw
0724デフォルトの名無しさん2014/11/06(木) 23:45:17.48ID:xbQtbYcA
>>722
例えば12と21とは互いに同じ結果になるから、もう少し組み合わせは減るかもね。
0725デフォルトの名無しさん2014/11/07(金) 01:09:58.40ID:livM4+ja
>>603
これ難しいな
まんべんなく求めるの無理ぽげ
お前らすげえわ

C++
http://ideone.com/jKq84g
07267252014/11/07(金) 03:52:18.84ID:livM4+ja
>>603

>>725を少し整理した

http://ideone.com/GmTtPx
07277252014/11/07(金) 03:54:46.40ID:livM4+ja
まんべんなく検索してないから他の人の結果と比較して正しい結果かどうか調べるのが面倒くさい
0728デフォルトの名無しさん2014/11/07(金) 05:09:52.98ID:c8JPTKQV
>>721
桁増加で計算量が圧倒的に増えるとおもったら、40桁と60桁ではループは2.75倍になるだけだった。調べる必要がある組み合わせ部分の比較。
f(x):=combination(x+9,9)と置くとf(60)/f(40)=2.758495922234162b1
07297282014/11/07(金) 05:42:51.33ID:c8JPTKQV
27倍だった。40で8時間かかると、24時間稼働させても9日はかかる。
0730デフォルトの名無しさん2014/11/07(金) 09:44:42.77ID:6X/slwZc
各ループにおいては、その中で最大の数をループの先頭に持ってくるようにしておけば
他人の結果と比較するのも楽になるかも
0731デフォルトの名無しさん2014/11/07(金) 09:53:27.00ID:c8JPTKQV
検証は楽だし、最小値とループ長でいいのでは?
07327252014/11/07(金) 11:01:15.87ID:livM4+ja
>>726

JavaのBigIntegerで置き換えた
http://ideone.com/HOiE66

>>730-731
その発想はなかった
0733デフォルトの名無しさん2014/11/07(金) 11:06:57.99ID:vJwgmFmf
>>728-729
この27倍ってのは一回調べた数値はもう調べない場合だよね?

たとえば14を探索(14,17,50,25,29,85,89,145,190,730,370,370...)した後に、
17,50,25,29,85,89,145,190,730が出たらそこで探索打ち切りって感じに。


めもりがたりません
07347252014/11/07(金) 11:11:34.82ID:livM4+ja
最小値が先頭になるように変更した

http://ideone.com/27OuGX
0735デフォルトの名無しさん2014/11/07(金) 11:21:02.16ID:6X/slwZc
>>733
例えば、Nを探索中にN未満の数値が出たらそこで打ち切りという方法を取っていれば
N未満のデータは使わないから削除してしまっていいよね
0736デフォルトの名無しさん2014/11/07(金) 11:25:24.52ID:vJwgmFmf
>>735
それでもめもりたいりょうです・・・
あとデータ追加/削除/containsのコストが高いです・・・
07377252014/11/07(金) 11:44:53.87ID:livM4+ja
Ideoneってマシンスペックがすごいんだね
>>734を自分のPC上で実行したら処理時間がIdeoneの3倍かかった…
07387252014/11/07(金) 11:53:12.41ID:livM4+ja
探索範囲を7桁以下にしてまんべんなく探索できるようにした
http://ideone.com/9nvBFw
07397252014/11/07(金) 12:45:53.38ID:livM4+ja
コスト削減で何とか探索範囲を8桁以下に広げられた
これ以上はもう無理ぽ

>>603
Java
http://ideone.com/DGsSKC
0740デフォルトの名無しさん2014/11/07(金) 13:07:14.49ID:6X/slwZc
a[0] = 0
a[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:WQFnaYxK
お題:
aから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
a+(a+1)+・・・+b = (b+a)(b-a+1)/2

か?
0744デフォルトの名無しさん2014/11/07(金) 18:41:44.71ID:nldP4Bww
>>742
等差数列の総和の公式を使うと早いな
0745デフォルトの名無しさん2014/11/07(金) 19:21:05.23ID:c8JPTKQV
任意の整数は、4個の3乗数の和で表すことができるか(ただし、そのうちの2個は相等しいとする)。すなわち、x^3 + y^3 + z^3 + z^3 と表すことができるか。
http://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
>>742
おそらくできた
R
http://ideone.com/za4Xhv

最後は Runtime error になったけど、PC上では
12345678 -> 24
だった
0747デフォルトの名無しさん2014/11/07(金) 23:30:09.46ID:TJsXBBzp
a=0から始めて12345678ぴったりかそれ付近になるbまで進めて
あとはaとbを少しずつ動かしながら探す感じか?
0748デフォルトの名無しさん2014/11/08(土) 00:19:05.93ID:v0SFyh4V
先日のコラッツの予想とかいうのはCodeIQの問題に触発されてここで出題したん?
それともCodeIQのほうがこのスレに影響されたん?
ttps://codeiq.jp/ace/tomohiro_takahashi/q1154
0749デフォルトの名無しさん2014/11/08(土) 01:01:52.11ID:tAeMnwy9
>>742
Rubyで。
http://ideone.com/Nx9cNI
0750デフォルトの名無しさん2014/11/08(土) 01:05:12.57ID:BIt9hzZd
>>742 Python

http://ideone.com/mrmLd0
0751デフォルトの名無しさん2014/11/08(土) 01:29:16.26ID:BIt9hzZd
また、考え過ぎだったか...
07526742014/11/08(土) 01:30:56.97ID:nf59RGqA
>>748
別にその問題に触発されて出題したわけじゃないです
コラッツの予想から思いついた問題であることは確かです
0753デフォルトの名無しさん2014/11/08(土) 01:42:00.07ID:v0SFyh4V
じゃあCodeIQの出題者がこのスレ見て作ったのかもな
同時期にコラッツの話が出てくるなんて偶然すぎるし
07547172014/11/08(土) 04:02:43.78ID:GYrsKrTd
>>603
結果合ってるか分からんが高速化頑張ったら60桁が1時間弱でおわた
40桁以降にループ出なかった…

でもideone5秒以内だと>>739より出てくるループ少なすw

Java
http://ideone.com/Q3lqlc
0755デフォルトの名無しさん2014/11/08(土) 04:07:28.55ID:GYrsKrTd
>>754で limit=60 sequentialOutput=trueにした出力
http://ideone.com/hmmUNF
0756デフォルトの名無しさん2014/11/08(土) 13:40:23.38ID:dw3O1wOI
>>742 Perl
http://ideone.com/v0wgrS
0757デフォルトの名無しさん2014/11/08(土) 16:15:50.56ID:Pf29+QER
>>754
> でもideone5秒以内だと>>739より出てくるループ少なすw

同じ5秒以内でも実行時間に違いあるじゃん
>>739は4秒半、>>754は3秒半で1秒も違いがあるんだから1秒も長くやってるほうが数が多く出るのは普通だろ
俺の見立てでは>>754がもう1秒やってりゃ>>739より多く出るんじゃね
0758デフォルトの名無しさん2014/11/08(土) 16:16:53.52ID:I3ssoFsy
>>754
long long のない C で頑張ったけど、手元の PC だとそっちの10倍くらいかかる感じ
http://ideone.com/VB9fXS

桁数が小さいときはそれなりに速いから、
桁数が小さい : code に変換してるからループの検出が高速
桁数が大きい : ほとんどの数が数ステップで探索済みの領域に突入するから code 変換が返って邪魔

とかそういうことかな
0759デフォルトの名無しさん2014/11/08(土) 18:00:33.16ID:X9M7IuhT
C/C++でJavaに負けたらだめだろ。
Javaで一時間なら、C/C++で30分はいけるはずだ。
0760デフォルトの名無しさん2014/11/08(土) 20:01:22.07ID:om46DDyf
最近のCPUだとSIMDが使えるけど、そのへんはコンパイラが対応してるかどうかに掛かってくるからなぁ…
JavaのJITは使ってくれるんだろうか。使うのだとしたら下手なC/C++コンパイラではちと分が悪い。
0761デフォルトの名無しさん2014/11/08(土) 20:06:31.47ID:Pf29+QER
IDEONEのJVMはどこのJVMなんだろうか
0762デフォルトの名無しさん2014/11/08(土) 20:47:40.63ID:3fSv7BFT
そもそも C はキャリーとかゼロを記述できないので、C/C++ だけで記述したものと、そのあたりまで最適化したライブラリとで比較されると C/C++ は分が悪い
BigInt とかね
0763デフォルトの名無しさん2014/11/08(土) 20:52:15.27ID:X9M7IuhT
ほんとかよ?
JavaはC/C++コンパイラでビルドしていて、最高でもC/C++の速度でそれ以下かとおもってた。
0764デフォルトの名無しさん2014/11/08(土) 20:52:55.37ID:AV/TLS4T
>>759
Javaが遅いなんて過去の話。
今はJITの最適化が進んでるから下手なC++より速かったりする。
0765デフォルトの名無しさん2014/11/08(土) 20:57:19.44ID:X9M7IuhT
Javaやそのライブラリは、汎用性がある分、無駄があるはずでC/C++か、アセンブラで最適化したコードにはかなわないはずだ。
自分がいまからC/C++で解く問題に最適化したやつを作ってみる。
0766デフォルトの名無しさん2014/11/08(土) 21:19:20.60ID:om46DDyf
>>763
JavaVMは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+QER
JITが優れてるかどうかはJVM次第じゃないのか?
OracleのHotSpotは優秀らしいけど
0768デフォルトの名無しさん2014/11/08(土) 22:52:19.56ID:UHdmp0aU
JavaはCの10倍速いことが証明された。
07697582014/11/08(土) 22:53:03.59ID:I3ssoFsy
単に10倍って書いたのがまずかったけど、手元の環境で走らせた >>758 の C のやつと >>755 の Java の出力の比較だから

調べてみたら
>>758 を手元で走らせると 27秒、ideone だと 3.4秒 だから 8倍弱
>>755 で64個のループを見つけるのに 0.91秒、>>754 の ideone のだと 3.5秒だから4倍弱
単純計算で 30倍程度の差がある
0770デフォルトの名無しさん2014/11/09(日) 00:12:30.29ID:5z0NeOWN
日本語でおk?
0771デフォルトの名無しさん2014/11/09(日) 00:22:07.86ID:aWsOebTN
JavaはCの30倍速いことが証明された。
0772デフォルトの名無しさん2014/11/09(日) 00:47:08.23ID:ww4vQrnx
まじか、快挙じゃねーかw
0773デフォルトの名無しさん2014/11/09(日) 01:23:04.59ID:Xu5ysykw
>>749
Ruby。 ちょっと修正。
http://ideone.com/9k3i7h
0774デフォルトの名無しさん2014/11/09(日) 05:26:39.15ID:5cSXAAC7
>>739をC言語でやろうとしたんだけど
C言語はよく分からない上にBigIntegerとかハッシュテーブルとかどうやって実装するのかもよく分からなかったのでダメだった

http://ideone.com/Ub66na
0775デフォルトの名無しさん2014/11/09(日) 18:04:49.57ID:fpFy2GPJ
kosu*num^ketaはテーブルにしとけば低コストで、足し算と10進各桁を求める部分がボトルネックなるってことか。
0776デフォルトの名無しさん2014/11/09(日) 22:04:40.76ID:AZQNfI2b
>>603
>>758 のバグ修正とケチな高速化をした
http://ideone.com/d4vQOg

手元のPCで7時間で全探索終了
ideone くらいの環境なら1時間程度と思う
結果は >>755 と目視で一致
0777デフォルトの名無しさん2014/11/10(月) 08:39:48.04ID:jDCBd3CZ
JavaがCよりも10倍遅いのは、I/O処理だろう。
でも、このスレのような数値計算なら、Javaの方が速いかも

Javaが遅そうなのは、配列のインデックスのチェックと、
メモリを小刻みに何回も確保するとか
0778デフォルトの名無しさん2014/11/10(月) 10:45:51.93ID:UPYVTgdg
>>776
各桁を求める(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
x/10 = ( x * 214748365 ) >> 31に変形できるけど、64ビット演算になるし、
コンパイラが定数の割り算を似たような変形してて速度差はでないかと。
0780デフォルトの名無しさん2014/11/10(月) 15:45:32.20ID:UPYVTgdg
コンパイラの割り算に、標準的なCの範囲では太刀打ち出来ないと思った。
割り算での対抗はあきらめて、たとえば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:I2gnUofF
>>779
32bitアーキテクチャだけど乗算結果はレジスタ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:I6wYG1VL
>>781 Haskell
http://ideone.com/ewBhi9
0784デフォルトの名無しさん2014/11/10(月) 18:39:25.72ID:walmDA6C
>>777
> Javaの方が速い

CよりJavaの方が速いってどういう場面だろう…?
0785デフォルトの名無しさん2014/11/10(月) 20:02:07.06ID:51rrS0pN
>>781 Squeak(もしくは Pharo) Smalltalk

| 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:9H2dohgO
>>784
JITが有るのでJavaはCの30倍速い。
(実測)
過去レスを読もう。
0787デフォルトの名無しさん2014/11/10(月) 20:48:48.83ID:B0ymrmAC
>>786
へ?
0788デフォルトの名無しさん2014/11/10(月) 20:55:53.49ID:9H2dohgO
あれ?俺なんか間違ってた?
0789デフォルトの名無しさん2014/11/10(月) 20:59:45.27ID:UPYVTgdg
JITがあるから速いって、実測したコードを上げてくれ。Cやアセンブラに速度が届くとおもえん。
0790デフォルトの名無しさん2014/11/10(月) 21:07:41.10ID:u1a/nNQP
JITはその場の最適解をなるべく出してるだけで、天才のコードには追いつかない。けど、凡人よりは早い。
その程度だ。
0791デフォルトの名無しさん2014/11/10(月) 21:12:41.74ID:15BsEw7X
>>789
思えんもなにも…。
HotSpotのころに散々騒がれただろうに。
もう十五年以上前の時点で既に。
>>790が言ってるように、
JITが気の効いた最適化したときに、って話。
0792デフォルトの名無しさん2014/11/10(月) 21:23:16.78ID:9H2dohgO
>>764>>769あたりかな。
0793デフォルトの名無しさん2014/11/10(月) 21:24:35.10ID:UPYVTgdg
それは短絡的だ。アルゴリズムは同一か。
0794デフォルトの名無しさん2014/11/10(月) 21:26:01.00ID:9H2dohgO
JavaはCの30倍速いんやでえ。
0795デフォルトの名無しさん2014/11/10(月) 21:32:47.00ID:walmDA6C
>>786
JITで動くコードってCで書かれてるんじゃないの?
0796デフォルトの名無しさん2014/11/10(月) 21:34:32.02ID:UPYVTgdg
10進の0-9の個数を求めるのに、6ビット*10個のビット列 ( < 64ビット、ビットシフトさせて1変数へ埋め込む)
で計算結果を蓄えておく方針で速くなった。
しかも63個以下だったら、一回の足し算で10個分の足し算が一気に出来る。
0797デフォルトの名無しさん2014/11/10(月) 22:24:00.45ID:pz7HGOij
>>778 の浮動小数点法はやってみたけど駄目だった
まあ、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
>>797

地味な改良。

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+
ふと思ったが、0って1桁の数字ってことでいいの?
0800デフォルトの名無しさん2014/11/11(火) 20:41:33.40ID:nse5PiqP
  |=番兵|_
 (  ・ω・) < ステンバーイ
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)+.------.--------.>+.
0801デフォルトの名無しさん2014/11/11(火) 20:50:31.68ID:G7HLEXn+
>>798
こういうのって結構効くもんなんだね
これと他にに少しいじって、手元の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:wwjiqnkY
ライフゲーム?
0804デフォルトの名無しさん2014/11/14(金) 12:08:50.94ID:iMcMp8AK
美しくない
0805デフォルトの名無しさん2014/11/14(金) 13:16:13.76ID:FoTlv74Y
>>802 Haskell
http://ideone.com/IBF4Xo
0806デフォルトの名無しさん2014/11/14(金) 15:46:34.12ID:CUH+GTTx
ハローワークやめちくりー。Orz
0807デフォルトの名無しさん2014/11/14(金) 21:43:10.90ID:ZgWVahH9
>>805
ふつくしい
0808片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/15(土) 20:09:19.59ID:OpYgM50z
お題:ディレクトリー構造を出力
0809デフォルトの名無しさん2014/11/15(土) 20:20:11.95ID:8u4J/msJ
function seekDir(d,t)
 print 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
>>603
>>801 からまたいじって手元で倍速近く、ideone で18桁まで行けるようになった
http://ideone.com/LnG1mr
0811デフォルトの名無しさん2014/11/15(土) 23:11:12.06ID:mcOwxVGI
>>695
なぜこれでeがもとまるのかヒントをください
配列aの初期値は不定でよいのでしょうか
0812デフォルトの名無しさん2014/11/15(土) 23:18:28.36ID:8u4J/msJ
横だが
ネイピア数を求めるアルゴリズムをググって探せばいいんじゃね
0813デフォルトの名無しさん2014/11/16(日) 02:41:52.98ID:0uaNgO5S
eの定義をウィキペディアででも検索すればよろし
0814デフォルトの名無しさん2014/11/16(日) 18:21:41.04ID:yO4k0ImL
>>808
win32
http://peace.2ch.net/test/read.cgi/tech/1313183984/775
0815デフォルトの名無しさん2014/11/17(月) 02:23:13.89ID:hQM/TM27
>>781 C
http://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:ppTtjJs6
お題:小町算
0818デフォルトの名無しさん2014/11/17(月) 22:52:10.39ID:q8JMQ0WL
>>817
http://peace.2ch.net/test/read.cgi/tech/1313183984/786
0819デフォルトの名無しさん2014/11/17(月) 23:28:05.50ID:nd5jVndp
お題:2人のプレイヤーが先手後手に分かれてゲームを行う。
使用するものは、いくつかの石と一直線のマス目のみ。

最初にマス目上に石がランダムに配置される。
例: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/
>>819
Java
http://ideone.com/Epijmq
0821デフォルトの名無しさん2014/11/18(火) 12:55:59.50ID:iTyFcfWR
>>820
o_oo ⇒ 後手必勝
oo_o ⇒ 先手必勝
と出るけどおかしくない?
0822デフォルトの名無しさん2014/11/18(火) 13:59:19.61ID:qxRrMb2e
お題:√6を100桁まで正確に求めよ
0823デフォルトの名無しさん2014/11/18(火) 14:06:31.59ID:tdQrToq/
>>821
上 先手1 後手2 先手取れない
下 先手1 後手1 先手1 後手取れない
0824デフォルトの名無しさん2014/11/18(火) 14:08:03.14ID:WFCSoEiB
24のプログラミング言語がブラウザで即実行できる『paiza.IO』
https://paiza.io/
0825820=8232014/11/18(火) 14:09:34.89ID:tdQrToq/
おっと、問題思いっきり読み間違えてるか
左から取って行くと勝手に読んでたようだw
0826デフォルトの名無しさん2014/11/18(火) 15:53:58.08ID:O+aK1btb
>>819
どちらでもない、って有るの?
0827デフォルトの名無しさん2014/11/18(火) 17:01:37.40ID:iTyFcfWR
>>822
多倍長ライブラリ使わないで
http://ideone.com/t4D6dt
0828デフォルトの名無しさん2014/11/18(火) 17:56:29.32ID:fEa2iRSy
>>819
各プレイヤーは条件に合う石を自由に選んで取ってよい、という解釈でいいんだよな?
俺もてっきり左から取っていくのかと思ったわ。回転寿司に責任がある。
0829デフォルトの名無しさん2014/11/18(火) 18:57:28.43ID:F8LzGWbb
要するに、単に古典的な山崩しゲームの一度に石を取れる個数を制限したバージョンか。
左から取っていく方が面白そうだねw
08308192014/11/18(火) 19:09:01.87ID:RFny4PrS
>>826
それも含めて考えてほしかったので、あえて入れました。
まあ、考えるまでもなく明らかだったかもしれませんが。

>>828
はい、その解釈でOKです。
0831デフォルトの名無しさん2014/11/18(火) 19:27:26.52ID:XECYI/oL
頭疲れてきた。明日会社で考えよう。
0832デフォルトの名無しさん2014/11/19(水) 00:17:43.90ID:AQBtgxdS
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/
0833デフォルトの名無しさん2014/11/19(水) 00:26:16.25ID:vzlN/B5s
>>819 Haskell
http://ideone.com/phH3gJ
一応答え出したけど合ってるかな
08348192014/11/19(水) 01:23:56.61ID:dm216OYo
>>833
はい、合ってます。

手元の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
>>836
問題に対する探索を虱潰しで検証するのは計算量をさておけばなんとかなるとしても、
照らし合わせる問題(テストケース)を虱潰しするというのは大抵の場合まず無理かと…
0838デフォルトの名無しさん2014/11/19(水) 07:19:53.43ID:aCVs5KcF
P、NP、NP完全、NP困難それぞれに問題を区別して先頭に書いておこうぜ
0839デフォルトの名無しさん2014/11/19(水) 07:31:13.84ID:aCVs5KcF
アルゴリズムの正当性だっけ?
0840デフォルトの名無しさん2014/11/19(水) 17:36:34.24ID:3wKEOI7B
  |=番兵|_
 (  ・ω・) < オツカレサマナノン
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)旦旦旦旦旦旦旦旦
0841デフォルトの名無しさん2014/11/19(水) 23:37:36.90ID:yf5tJOMN
>>819 Ruby
http://ideone.com/1IGJ91

やり方知ってるからなんだけど、石が100個並んでても計算できる
0842デフォルトの名無しさん2014/11/19(水) 23:48:03.06ID:g3hRCnVe
31ゲームみたいなもん?
0843デフォルトの名無しさん2014/11/21(金) 15:01:41.30ID:ttShYQWf
整数Nが与えられる
N桁の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:dAhQCobz
>>843
Rubyで。
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
>>841
二ムだからかな?
0846デフォルトの名無しさん2014/11/21(金) 19:37:57.93ID:i6wyyOWo
>>843
俺が問題を勘違いしてるのか答えが合わない・・・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
paizaは複数ファイルで書けるんだね
なかなかどうして便利すな
0848デフォルトの名無しさん2014/11/21(金) 20:50:03.58ID:Mc3QBWVu
>>843 Perl
https://paiza.io/projects/ybXZFT8qPNzwslE_-EMfvw
0849デフォルトの名無しさん2014/11/21(金) 21:28:10.48ID:zavT8Fs+
>>843 J
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+r
>>843 Python
https://paiza.io/projects/ewq-h5cPYGE9D6d6mL1KBQ
0851デフォルトの名無しさん2014/11/22(土) 00:14:59.85ID:5W4JGCuz
>>843
c
5秒制限に引っかからない 53ビットまで出力してみたけど合ってるのかな
http://ideone.com/CQSEmz
0852デフォルトの名無しさん2014/11/22(土) 00:49:08.62ID:nwjtnU50
>>843 R
http://ideone.com/9mgRmA

石取りゲームはさっぱり分からないし、この問題も効率のいい解法が分からない…
0853デフォルトの名無しさん2014/11/22(土) 01:49:50.48ID:93ERrC4s
>>843
N桁ってのは上位桁が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:xQSK0UIO
>>843 Java
https://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
>>843
少しだけ改良した

R
http://ideone.com/GbXTEU
0856デフォルトの名無しさん2014/11/22(土) 15:17:57.91ID:PQXD1qeq
>>843 R
f <- 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
>>849
いつも短いコードで凄いと思うんだけど、Webで試せる環境がないものか・・・
0858デフォルトの名無しさん2014/11/22(土) 17:22:00.12ID:LOH/JPWZ
>>843 Squeak Smalltalk

| 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:PQXD1qeq
>>857
J言語が試せる所はAnarchy GolfのPerformance checkerぐらいしかしりません。
0860デフォルトの名無しさん2014/11/22(土) 18:53:43.82ID:12O32o1g
オンラインでコードを実行できるサイト

http://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/
0861 ◆QZaw55cn4c 2014/11/22(土) 19:22:31.22ID:8QIDISWL
ほー、以外と多いんだ‥
0862デフォルトの名無しさん2014/11/23(日) 02:22:34.63ID:exByohQM
>>686
ガウス=ルジャンドルの公式かな
0863デフォルトの名無しさん2014/11/24(月) 20:45:35.84ID:U0wuvsWn
  |=番兵|_
 (  ・ω・) < ステンバーイ
  〇={=}〇
  |::::::::::\
、、、し 、、、(((.@)ww、、mv、www、vvvv
0864片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/11/24(月) 21:29:57.30ID:cxOxEmtO
お題:ASCIIテキストファイルを読み込み、2-gramを出力せよ。
0865デフォルトの名無しさん2014/11/24(月) 21:58:43.62ID:roqr151s
オブジェクト指向の生産性と
関数指向の純粋・並列性とを両立するには
両者の利点と欠点の「トレードオフ」を考慮した上で、どのような「最適化」があり得るか議論せよ。
0866デフォルトの名無しさん2014/11/24(月) 22:36:17.34ID:tAtmBlna
>>864 J
f=: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:iz9gskEV
2-gramって何?
0868デフォルトの名無しさん2014/11/24(月) 22:53:07.40ID:/10MgId3
ググったら出てきた

http://d.hatena.ne.jp/mzp/20070619/gram
2-gramは自然言語の統計的性質のひとつ。特定の2文字がどれくらいの頻度で、連続するかを調べる。
0869デフォルトの名無しさん2014/11/24(月) 23:07:35.26ID:cxOxEmtO
>>866
そのページの説明が間違ってるみたいだ。不合格。
0870デフォルトの名無しさん2014/11/24(月) 23:16:04.98ID:LHrE6g58
>>864 Ruby
class 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:cxOxEmtO
>>868の言う通り、頻度を求めないと不合格だよ
0872デフォルトの名無しさん2014/11/25(火) 00:25:51.34ID:nbtqvUhl
>>864 Ruby
https://paiza.io/projects/7zSxwOc8mQoXZTY017ogXQ
0873デフォルトの名無しさん2014/11/25(火) 00:50:34.87ID:rSs/UAQb
>>864 C++
http://ideone.com/x6LRL3
入力ソース
http://www.cs.cmu.edu/~rgs/alice-table.html
0874デフォルトの名無しさん2014/11/25(火) 07:34:59.18ID:OegtB7X3
>>864 Perl
http://ideone.com/tnujcH
0875デフォルトの名無しさん2014/11/25(火) 08:09:19.26ID:4laRyWCB
>>864 R
http://ideone.com/Xe3wbA
0876デフォルトの名無しさん2014/11/25(火) 09:36:26.55ID:gJKZVwWb
1個または連続した2個の石を取ることを、1手とする
最後に石を取った方が勝ち
つまり、最後の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
>>876
>>819と同じじゃねーの?
0878デフォルトの名無しさん2014/11/25(火) 12:18:13.98ID:XNJ9Uhca
| bigramOf |
bigramOf := [: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:yJ4OAUnm
>>864 J
f=: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:ZIMeIskY
>>864 Haskell
import 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:ZIMeIskY
とりあえず双方向探索が有効だということはわかる
0883デフォルトの名無しさん2014/11/25(火) 17:51:29.78ID:/SHShGYK
>>882
順方向は1手順4方向で済むけど、逆方向の探索は計算量爆発しない?
0884デフォルトの名無しさん2014/11/25(火) 17:59:50.27ID:ZIMeIskY
>>883
壁際にくっついてるときか・・・見落としてた
0885デフォルトの名無しさん2014/11/25(火) 19:05:13.39ID:180uvbBo
>>881
状態間の最短経路を求める問題?
0886デフォルトの名無しさん2014/11/25(火) 20:36:16.95ID:yJ4OAUnm
>>864 Io
f := 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:cgOI2K2p
>>864 Python

from 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:RppPx89I
>>881 C++
http://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:0JhIRuCa
順方向探索で最短かどうか不明な24ステップが出たがコードが晒せるレベルじゃねぇ
666862626662688862622446
08918882014/11/26(水) 05:22:52.41ID:RppPx89I
バグだったけど直らないや
0892デフォルトの名無しさん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
>>881
双方向からのほうが計算量は減るよなあ。
前方からの全展開だと一手ごと約4乗ずつ増えてくけど。
双方向からだと中間地点までの展開で済むからなあ。
0894デフォルトの名無しさん2014/11/26(水) 11:04:26.85ID:7e/D93df
あと一歩で確実な手法を確立したい所
ttp://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
ルービックキューブの手法が使えないかと調べたら、3マスが最近解明されたとわかった。



ルービックキューブは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:RppPx89I
>>894の1つめは1分くらいかけて18ステップの解がでたが、ほかは解けない
0897デフォルトの名無しさん2014/11/26(水) 16:48:05.42ID:qw6T8pbV
問題を作る側は解が存在することが分かって無いとダメなはずだから
スマートな解答手順を導き出す方法があるんじゃね
0898デフォルトの名無しさん2014/11/26(水) 18:57:16.60ID:GMqvx0gh
>>897
または、解が存在することが、理屈上判っているとか?
0899デフォルトの名無しさん2014/11/26(水) 21:11:59.03ID:0JhIRuCa
逆方向探索うまく思いつかん
0900デフォルトの名無しさん2014/11/26(水) 22:17:38.58ID:RppPx89I
00000000
00114000
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
>>899
後方のほうがコストはかかるけど、総合すれば前方だけよりはいいのでは?
完成形になる数手前を展開しておいて、前方からの探索がヒットするのを待つ感じでは。
0902デフォルトの名無しさん2014/11/26(水) 23:01:38.38ID:0JhIRuCa
>>900
前方探索のみの俺のは前者32秒 後者3秒だわw
0903デフォルトの名無しさん2014/11/26(水) 23:09:35.79ID:0JhIRuCa
>>901
一手前の形を全部リストアップするうまい方法が思いつかんのん…

900下の完成系から1手前は5*2*2*5+5*2*2*5の200通り?
頭では思いつくけどコードに落とし込めないw
09048882014/11/27(木) 00:25:12.59ID:6aaa4mb/
>>881
一応今の状態を晒す
人に読ませるようには書いてないけど
http://ideone.com/zm3q0s
0905デフォルトの名無しさん2014/11/27(木) 01:08:32.12ID:TBI0xp5s
>>904
すんげぇなぁ

俺は頭がうにだ
0906デフォルトの名無しさん2014/11/27(木) 01:14:32.30ID:wWt/SSri
編集距離、レーベンシュタイン距離に結びつけそのアルゴリズムが使えないものか。
0907デフォルトの名無しさん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
>>881 C++
コマンド流しこんで眺めるだけのコードを書いた
お題には答えてないからアレだけど一応晒し
http://ideone.com/Y0QCAi
09099082014/11/27(木) 08:51:40.89ID:md1v7rrN
>>908
バグってた…
ギャーごめんなさい
0910デフォルトの名無しさん2014/11/27(木) 09:35:19.73ID:md1v7rrN
>>908
修正
http://ideone.com/MgIxHJ
0911デフォルトの名無しさん2014/11/27(木) 19:39:19.39ID:wWt/SSri
残り何手で完成かを推定できればいいんだが。その評価が困難だ。
ほとんど、ゴールに到達していても、長手数や不可能もあり得る。

ゴールはここで
◎□□◎
□□□□
□□□□
◎□□◎

スタートがこれだったら完成不可だ。
●□●□
□□□□
□□□□
●□□●
0912デフォルトの名無しさん2014/11/27(木) 21:21:00.41ID:uAA7J2EP
形を崩して移動する部分と形を元に戻す部分の2つの場面を考える必要があるのか
0913デフォルトの名無しさん2014/11/27(木) 21:47:23.82ID:1KfKaQIf
上向きに動かした結果、四角が底に張り付いている形はあり得ないので(上がつかえていない限り)
動かした結果その形になるという場合の数の方がかなり少ないのだろう
0914デフォルトの名無しさん2014/11/28(金) 10:15:01.81ID:1KQmuKPI
適当に2コマ選んで、ゴールに辿り着く手順をリストアップするというのを
コマを変更して繰り返しそれらリストの共通部分を求める、というのはどうだ。
少なくとも2コマがクリア出来なければ全体もできない。
0915デフォルトの名無しさん2014/11/28(金) 10:26:27.77ID:1KQmuKPI
激問サンプル
http://www.youtube.com/watch?v=Z1eVJ0c37Yo
http://www.youtube.com/watch?v=x8L1_HinQt0
0916デフォルトの名無しさん2014/11/28(金) 10:35:49.87ID:1KQmuKPI
>>914ではムリか。全コマの時は、他のコマが邪魔して動けない時がある。
2コマだと邪魔がない時、コマの動きが変わってしまう。
0917デフォルトの名無しさん2014/11/28(金) 19:26:49.94ID:1KQmuKPI
可能な限り後方からの展開を進めておいてそこへたどり着く手順を見つけるのがいいか。
無展開で闇雲に探索すると難しいが、100万局面展開されていれば当たりやすい。
hash(局面) < 32ビットとして、メモリ上に1か2バイト長でゴールまでの手数を記録する方針でいいか。
0918デフォルトの名無しさん2014/11/28(金) 21:33:40.12ID:RAl0168p
おお このブロックの奴は難しそうでいいな
0919デフォルトの名無しさん2014/11/29(土) 06:59:17.78ID:sDw36FaE
不可逆なものがある。これはクラス1からクラス2、クラス3へは変化できないが逆は可能。
局面からクラスを計算する方法があれば読まなくていいところが判明する。


クラス3
●□□●
□□□□
□□□□
□□□□

クラス2
●□●□
□□□□
□□□□
□□□□

クラス1
●●□□
□□□□
□□□□
□□□□
0920デフォルトの名無しさん2014/11/29(土) 08:10:39.33ID:9ge5Lh8B
>>904のおかげで頭がうにだった俺にも双方向探索が出来るようになりました。
0921デフォルトの名無しさん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
平面上に2つの四角形A、Bがあり、そのA-Bを求めて、
最終結果は幾つかの四角形に分解したいのです。例えば、

例1
  ┌──────┐B
  │      │     
┏━┿━━━━━━┿━┓A     
┃ │      │ ┃    
┃ │      │ ┃  
┗━┿━━━━━━┿━┛   
  │      │     
  └──────┘
を、A-Bして、以下の二つの長方形に分解
┏━┓ ┏━┓A-B     
┃ ┃ ┃ ┃    
┃ ┃ ┃ ┃  
┗━┛ ┗━┛   
0925デフォルトの名無しさん2014/11/29(土) 19:46:00.64ID:2Qy7Z1JP
例2
┏━━━━━━━━┓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
例2
┏━━━━━━━━┓A
┃        ┃
┃    ┌───╂──┐B
┃    │   ┃  │
┃    │   ┃  │
┗━━━━┿━━━┛  │
     │      │
     └──────┘
をA-Bして、
┏━━━━━━━━┓A-B
┃        ┃
┃    ┏━━━┛
┃    ┃
┃    ┃
┗━━━━┛
それを、以下のように分解。
┏━━━━┓┏━━━┓
┃    ┃┃   ┃
┃    ┃┗━━━┛
┃    ┃
┃    ┃
┗━━━━┛
0928デフォルトの名無しさん2014/11/29(土) 19:56:00.60ID:2Qy7Z1JP
ダメだ。またずれました。失礼しました。
0929デフォルトの名無しさん2014/11/29(土) 19:57:58.66ID:9ge5Lh8B
画像でやれw
0930デフォルトの名無しさん2014/11/29(土) 20:04:45.61ID:sHWd6Lx7
例2
┏━━━━━━━━┓A
┃                ┃
┃        ┌───╂──┐B
┃        │      ┃    │
┃        │      ┃    │
┗━━━━┿━━━┛    │
          │            │
          └──────┘
をA-Bして、
┏━━━━━━━━┓A-B
┃                ┃
┃        ┏━━━┛
┃        ┃
┃        ┃
┗━━━━┛
それを、以下のように分解。
┏━━━━┓┏━━━┓
┃        ┃┃      ┃
┃        ┃┗━━━┛
┃        ┃
┃        ┃
┗━━━━┛
0931デフォルトの名無しさん2014/11/29(土) 20:07:13.19ID:sDw36FaE
Bはあまり関係なく、一般には多角形を、正方形や長方形で埋めるってことだろ。なるべく少ない数がいいのか。
0932デフォルトの名無しさん2014/11/29(土) 20:12:25.65ID:2Qy7Z1JP
補足です。
座標は整数値です
最後の例は縦に切っていますが、横でもかまいません。
それ以上は分割したくありません。
0933デフォルトの名無しさん2014/11/29(土) 20:12:53.94ID:2Qy7Z1JP
>>930
ありがとうございます。
0934デフォルトの名無しさん2014/11/29(土) 21:48:20.73ID:sDw36FaE
激問は、一つのパネルだけを任意のマスへ移動させるのが低コストで出来れば確実に正解はできるな。
長手数でも正解手順を作って、それをショートカットする手順を追加したらいいかも。
しかし、一つ以外の形・模様を変えない移動方法がわからん。
0935デフォルトの名無しさん2014/11/29(土) 22:23:13.29ID:8qv5hUBC
>>933
BがAの中に入っちゃう場合は、4つに分けるってこと?
0936デフォルトの名無しさん2014/11/29(土) 22:25:18.68ID:2Qy7Z1JP
>>935
そうです。
0937デフォルトの名無しさん2014/11/29(土) 22:35:06.97ID:8qv5hUBC
>>936
では、BがAからはみ出してる分をトリム後、ABの座標差を出力すればいい。
0938デフォルトの名無しさん2014/11/29(土) 22:41:05.29ID:tRG4REso
>>924
Bの上辺を通る直線で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:8qv5hUBC
>>924
Rubyで。
http://ideone.com/tnXtK0
0940デフォルトの名無しさん2014/11/29(土) 23:26:43.26ID:8qv5hUBC
>>939
訂正
http://ideone.com/x6pxE2
0941デフォルトの名無しさん2014/11/30(日) 00:12:40.88ID:A3bvJH4W
スマートだな
0942デフォルトの名無しさん2014/11/30(日) 00:26:32.17ID:GENLcuux
>>924
C#
座標系は普通のデカルト座標。(Y軸が上向き)
http://ideone.com/V6fJGX
0943デフォルトの名無しさん2014/11/30(日) 01:11:14.00ID:A3bvJH4W
すげえじゃん
0944デフォルトの名無しさん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:zFCnNii2
>>881 Java
http://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:9ZbThdOU
>>947 Java
http://ideone.com/vYlvs7

7の倍数の方あってるかどうかわからん
0949デフォルトの名無しさん2014/12/01(月) 10:13:53.73ID:9ZbThdOU
そういえば0は倍数に含まれる気がするけど、947で含んでないから含まないで良いよねw
0950デフォルトの名無しさん2014/12/01(月) 10:21:13.10ID:6glZ0bPp
>>881の激問は>>946が現在、最速なの?
0951デフォルトの名無しさん2014/12/01(月) 11:40:30.59ID:q+u8ChsU
>>947
codepad、paiza.ioではタイムアウト。
http://ideone.com/CHHPWn
0952デフォルトの名無しさん2014/12/01(月) 14:58:02.66ID:9ZbThdOU
>>951を高速化してみた
http://ideone.com/FshVnV
0953デフォルトの名無しさん2014/12/01(月) 15:50:39.63ID:SXEnqpb2
>>947
全通り検索する以外の方策あるのこれ?
Sの最大が5万桁とか無理ぽげ
0954デフォルトの名無しさん2014/12/01(月) 16:05:39.20ID:SXEnqpb2
倍数の判定てこれ使うん?
http://www004.upp.so-net.ne.jp/s_honma/number/multiple.htm
0955デフォルトの名無しさん2014/12/01(月) 16:44:58.46ID:09mVmnW8
普通に剰余が0でいいじゃん
0956デフォルトの名無しさん2014/12/01(月) 16:59:59.15ID:9ZbThdOU
>>947
http://ideone.com/OPy4YC
速くなった
0957デフォルトの名無しさん2014/12/01(月) 20:03:18.94ID:q+u8ChsU
>>951
ロジック修正、高速化
http://ideone.com/bXlJOv
0958デフォルトの名無しさん2014/12/01(月) 20:57:33.68ID:ijHbSx6t
同じ数は2回数えて良いのか?
0959デフォルトの名無しさん2014/12/02(火) 01:00:59.61ID:h63pZmVM
>>947
Python3で。
http://ideone.com/otGM4p
0960デフォルトの名無しさん2014/12/03(水) 17:16:06.37ID:iXJD6liK
paizaのオンラインハッカソン
https://paiza.jp/poh/enkoi

漫画をコンプリートしようぜ
0961デフォルトの名無しさん2014/12/03(水) 20:58:27.30ID:jxdxvQyf
>>960
結婚できたけど、3で0.03秒切れなかったな
0962デフォルトの名無しさん2014/12/03(水) 23:19:42.23ID:wjBJZQtz
>>947
今更C#で参戦。
http://ideone.com/cp42Qc

ダメだ1万に減らしてもクソ遅い
0963デフォルトの名無しさん2014/12/04(木) 05:40:40.21ID:0vTQY+f3
たしか各桁の合計が3の倍数なら
3の倍数だからそれ使うのかなあ
0964デフォルトの名無しさん2014/12/04(木) 06:45:26.38ID:zmKnP70x
>>947の(1)

5万桁入力値生成
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:xzIHTICo
>>881 Java
http://ideone.com/7OC7iK

>>946に>>921を入れてみた…ideone15秒なら解けるようになったが最短手筋ではない。
0966デフォルトの名無しさん2014/12/04(木) 10:22:55.54ID:O8i/JhQL
>>965
やるな
0967デフォルトの名無しさん2014/12/04(木) 20:07:46.59ID:O8i/JhQL
>>921は評価、探索がいくつか変種ができそう。
パネルからゴールまでの最短距離をcost(i)としたとき評価関数を
和 Σcost(i)、
積 Π(1+cost(i))、
max(cost(i))とするとか。

探索は、現・読み深さ + 評価値 (残り指し手を推定してるとみなす) が最も小さい所だけを読むとか。
評価が最善ではないところにも解がある想定で、最善以外も評価値に応じて読む量を変えるとか。
0968デフォルトの名無しさん2014/12/04(木) 20:27:06.85ID:e632zg1P
>>967
おう、それはまさしく最良優先探索の雄 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:OMWnCsLY
お題:辺の長さが整数の三角形の面積を小さい順に好きなだけ求める。
0972デフォルトの名無しさん2014/12/06(土) 09:06:50.46ID:mq+/hqib
>>971 Java
http://ideone.com/rtlklH

3辺から面積を求めるのは簡単だったけど、
面積小さい順を求める方法が思いつかないとダメだな…
0973デフォルトの名無しさん2014/12/06(土) 09:09:42.24ID:mq+/hqib
あれ、見直したらどこか間違えてるw
0974デフォルトの名無しさん2014/12/06(土) 09:12:51.28ID:mq+/hqib
いや、間違えてなかったw
0975デフォルトの名無しさん2014/12/06(土) 09:55:35.72ID:mq+/hqib
>>971 Java
http://ideone.com/nanJBZ

>>972だと同じ面積の三角形が2個以上あってもリストアップされてなかった。
0976デフォルトの名無しさん2014/12/06(土) 16:30:28.72ID:V09VpuI5
簡単過ぎず難し過ぎず、面白い問題ってのはなかなかないものだな
0977デフォルトの名無しさん2014/12/07(日) 03:22:46.80ID:8tL83yqw
激問>>881は優しすぎず難しくない。邪魔がなければ入力方向へブロックが移動するという単純ルール。
詰将棋だと最短手順が2000手となるものがあったりするが、激問で2000手の物が存在するかとか、マス9*9、10*10と増やすと難度もアップ。
多項式時間ではとけないという巡回セールスマンと同じ計算量の気がするがどうか。
0978デフォルトの名無しさん2014/12/07(日) 03:27:31.51ID:8tL83yqw
詰将棋の最長は現在1525手らしい。



橋本孝治「ミクロコスモス」 [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:HaOgOobj
どんだけ長い王手なんだよw
0980デフォルトの名無しさん2014/12/07(日) 03:40:16.93ID:jGd9Zosu
そういうのこそ「続きはWebで!」がいいと思うがな
0981デフォルトの名無しさん2014/12/07(日) 09:31:04.96ID:bNXIzb/B
>>977
お題じゃなくて売り物作らされてるだけだからなぁ
0982デフォルトの名無しさん2014/12/07(日) 11:13:56.92ID:mrRmmrII
>>979
これが江戸時代の「煙詰め」とか「裸玉」とか「寿」とか、どんな思考回路なのかと思ってしまう
最近は将棋プロもコンピュータに負かされつつあるが、詰将棋は、一つの芸術的労作として後世まで残ってほしいと思う
0983デフォルトの名無しさん2014/12/07(日) 17:37:19.66ID:METsjyYp
本当にそれより短い手順で詰んだり、実は詰まない方法があったりしないのかな
0984デフォルトの名無しさん2014/12/07(日) 19:03:11.00ID:utwyAni3
ここに詳しい解説があるよ

Famous Mate Problems: "Micro-cosmos"
https://www.youtube.com/watch?v=7iZQdP7nPOg
0985デフォルトの名無しさん2014/12/07(日) 22:20:24.98ID:sFtpWfCS
>>984
コメ欄見ると熱心な外人さんが多いね
0986デフォルトの名無しさん2014/12/07(日) 23:26:58.40ID:8tL83yqw
お題
詰将棋ミクロコスモスを解くプログラム
0987デフォルトの名無しさん2014/12/08(月) 01:05:40.60ID:idZHWDVc
http://ja.wikipedia.org/wiki/%E7%AE%B1%E5%85%A5%E3%82%8A%E5%A8%98_%28%E3%83%91%E3%82%BA%E3%83%AB%29

これを解くプログラム
0988デフォルトの名無しさん2014/12/08(月) 05:13:39.18ID:IpD9Rz54
>>987
http://www.kashi.info.waseda.ac.jp/~kashi/lec2000/jsj/hako/

ここにあるね
0989デフォルトの名無しさん2014/12/08(月) 22:38:52.00ID:m6wBRCkx
>>988
そのリンク死んでないかい?
0990デフォルトの名無しさん2014/12/08(月) 22:40:07.10ID:m6wBRCkx
>>986
詰め将棋全般にいえることだが、無駄間(無駄な間駒)を排除する決まりが難しい‥どうすればいい?
0991デフォルトの名無しさん2014/12/08(月) 23:25:04.42ID:dY1jUe/P
>>989
俺は見れたが
0992デフォルトの名無しさん2014/12/09(火) 08:02:14.20ID:hxOL7VFQ
>>990
この記事が参考になるかも

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/
22220000 22420440 44420440 22220000 00001111 04401444 04401411 00001111
今日の激問(最短23手)をideoneで解けるようにしたい…

>>965に解かせても15秒タイムアウトw
残り距離の重み付け(79行目)を3倍にしたら解けるようになったが30手ww
http://ideone.com/qVZxgP
0995デフォルトの名無しさん2014/12/10(水) 23:05:11.96ID:X4ZXIzIa
次スレお願い
0996デフォルトの名無しさん2014/12/11(木) 08:03:08.79ID:fOkuaX7a
>>860
もテンプレに入れて
0997デフォルトの名無しさん2014/12/11(木) 15:18:30.03ID:Ipp+K308
次
http://peace.2ch.net/test/read.cgi/tech/1418278634/
0998デフォルトの名無しさん2014/12/11(木) 16:17:45.85ID:Knr7owVD
梅干し
0999デフォルトの名無しさん2014/12/11(木) 16:20:05.74ID:Knr7owVD
もっと産め産め
1000デフォルトの名無しさん2014/12/11(木) 16:22:44.18ID:Knr7owVD
子育て代行
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。