プログラミングのお題スレ Part3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/01/24(金) 09:59:09.83前スレ
プログラミングのお題スレ
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/01/24(金) 11:28:16.25ニニЭ・:∴:・゚・。。・:∴。・゚・・。・。。・゚・'.
0003デフォルトの名無しさん
2014/01/24(金) 19:07:12.790から遠ざかる方向へ丸める。bが実数の場合は誤差はやむを得ないものとする。
例
a=123,b=12 -> 120
a=126,b=12 -> 132
a=-123,b=12 -> -120
a=-126,b=12 -> -132
a=1.234,b=0.01 -> 1.23
a=1.235,b=0.01 -> 1.24
>a=123,b=120 -> 120
>a=126,b=120 -> 132
>a=-123,b=120 -> -120
>a=-126,b=120 -> -132
じゃないのか?仕様をちゃんと記述してみろよ、このスカポンタン
0005デフォルトの名無しさん
2014/01/24(金) 20:30:27.51お前は馬鹿か?
bの倍数に丸めるのにbが120で解が132ってどんだけ間が抜けているんだ?
0006デフォルトの名無しさん
2014/01/24(金) 21:08:15.26; Common Lisp
(defun f3 (a b)
(let* ((rem (rem a b))
(i (- a rem)))
(if (< (abs rem) (/ b 2))
i
(funcall (if (plusp a) #'+ #'-) i b))))
0007デフォルトの名無しさん
2014/01/24(金) 21:56:09.16def f3(a,b):
x = a + b*(0.5+1e-10*(a*b)/abs(a*b))
return x - x%b
for a,b in [(123, 12), (126, 12), (-123, 12), (-126, 12), (1.234, 0.01), (1.235, 0.01)]:
if not isinstance(a+b, float):
print "a=%d, b=%d -> %d" % (a, b, f3(a,b))
else:
print "a=%f, b=%f -> %f" % (a, b, f3(a,b))
0008デフォルトの名無しさん
2014/01/24(金) 22:31:58.20#module
#defcfunc f3 double a, double b, \
local abs_a, local abs_b, local is_minus, local c, local d, local r
abs_a=absf(a)
abs_b=absf(b)
if a*b<0.0 : is_minus=1
c=int(abs_a/abs_b)
d=abs_a-abs_b*c
if d*2>=abs_b : c++ : d-=abs_b
r=abs_a-d
if is_minus : r=-r
if double(int(b))=b : r=int(r)
return r
#global
mes f3(123, 12)
mes f3(126, 12)
mes f3(-123, 12)
mes f3(-126, 12)
mes f3(1.234, 0.01)
mes f3(1.235, 0.01)
0009デフォルトの名無しさん
2014/01/24(金) 23:35:33.38| a b |
a := 123. b := 12. a roundTo: b. "=> 120 "
a := 126. b := 12. a roundTo: b. "=> 132 "
a := -123. b := 12. a roundTo: b. "=> -120 "
a := -126. b := 12. a roundTo: b. "=> -132 "
a := 1.234. b := 0.01. a roundTo: b. "=> 1.23 "
a := 1.235. b := 0.01. a roundTo: b. "=> 1.24 "
0010デフォルトの名無しさん
2014/01/24(金) 23:58:24.81use 5.016;
use warnings;
use bignum;
sub f { ($_[0] <=> 0) * (int((abs($_[0]) + abs($_[1] / 2)) / $_[1]) * $_[1]) }
say f(123, 12);
say f(126, 12);
say f(-123, 12);
say f(-126, 12);
say f(1.234, 0.01);
say f(1.235, 0.01);
0011デフォルトの名無しさん
2014/01/25(土) 00:06:22.40Number f := method(b, (self / b) round * b)
Io> 123 f(12)
==> 120
Io> 126 f(12)
==> 132
Io> -123 f(12)
==> -120
Io> -126 f(12)
==> -132
Io> 1.234 f(0.01)
==> 1.23
Io> 1.235 f(0.01)
==> 1.24
0012デフォルトの名無しさん
2014/01/25(土) 00:20:06.75roundToMultiple :: (Enum a, RealFrac a) => a -> a -> a
roundToMultiple _ 0 = 0
roundToMultiple a b0 = f $ map ((signum a *) . (b *)) [fromIntegral . floor $ a/b ..]
where
b = abs b0
f (x:y:ys)
| abs (x-a) == b / 2 = y
| abs (x-a) < b / 2 = x
| otherwise = f (y:ys)
main :: IO ()
main = print $ map (uncurry roundToMultiple)
[(123,12),(126,12),(-123,12),(-126,12),(1.234,0.01),(1.235,0.01)]
-- -> [120.0,132.0,-120.0,-132.0,1.23,1.24]
0013デフォルトの名無しさん
2014/01/25(土) 02:16:38.19def f3(a, b)
(a / b.to_f).round * b
end
p [[123,12],[126,12],[-123,12],[-126,12],[1.234,0.01],[1.235,0.01]].map{|(a, b)| f3(a, b)}
↓
[120, 132, -120, -132, 1.23, 1.24]
0014デフォルトの名無しさん
2014/01/25(土) 03:55:11.45"a=123,b=12 -> 120
a=126,b=12 -> 132
a=-123,b=12 -> -120
a=-126,b=12 -> -132
a=1.234,b=0.01 -> 1.23
a=1.235,b=0.01 -> 1.24
"
.scan(/=([\d\-\.]+)/).flatten.each_slice(2) do | a , b |
printf("[%s,%s]," % [a,b])
end
# => [123,12],[126,12],[-123,12],[-126,12],[1.234,0.01],[1.235,0.01],
0015デフォルトの名無しさん
2014/01/26(日) 13:31:26.98例
p(p(p(1)+1)+1)
1
2
3
0016デフォルトの名無しさん
2014/01/26(日) 14:11:18.45| p |
p := [:x | x printNl].
p value: (p value: (p value: 1) + 1) + 1
http://ideone.com/PKb532
--
Squeak Smalltalk
| p |
Transcript open.
p := [:x | Transcript showln: x. x].
p value: (p value: (p value: 1) + 1) + 1
0017デフォルトの名無しさん
2014/01/26(日) 14:23:07.25def f15(x)
puts x;x
end
f15(f15(f15(1)+1)+1)
0018デフォルトの名無しさん
2014/01/26(日) 14:42:47.02ttp://ideone.com/4h4Zue
C++標準でSign関数搭載してくれないかなぁ。イチイチ書くの面倒くさい。
Sign関数はNYSLでいいので。
0019デフォルトの名無しさん
2014/01/26(日) 15:04:53.97関数パースしないといけないのかと思って一瞬ビビったのは内緒だ。
#include <iostream>
template<class T>
const T& p(const T& In){
std::cout << In << std::endl;
return In;
}
int main(){
p(p(p(1) + 1) + 1);
return 0;
}
0020デフォルトの名無しさん
2014/01/26(日) 15:25:01.73import Control.Applicative
import System.IO.Unsafe
p :: Show a => a -> a
p = unsafePerformIO . liftA2 (>>) print return
eval :: a -> IO ()
eval x = x `seq` return ()
main :: IO ()
main = eval $ p ( p ( p 1 + 1 ) + 1 )
0021デフォルトの名無しさん
2014/01/26(日) 19:54:12.62#module
#defcfunc f15 int x
mes x
return x
#global
dummy=f15(f15(f15(1)+1)+1)
0022デフォルトの名無しさん
2014/01/26(日) 22:13:47.32use 5.016;
use warnings;
sub p { sub{ $_[0] }->($_[0], say $_[0]) }
p(p(p(1) + 1) + 1);
0023デフォルトの名無しさん
2014/01/27(月) 13:49:38.56リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する
ソートされていなければ先頭からソートされている個数を出力する
[6,6,3,2,6,4,7,4,7,4] => 4
[2,3,4,4,4,6,6,6,7,7] => AS
[7,7,6,6,6,4,4,4,3,2] => DES
[1,1,1,1,1,1,1,1,1,1] => EQ
[] => EQ
[1] => EQ
0024デフォルトの名無しさん
2014/01/27(月) 14:38:45.18リストを与え、昇順でソートされている部分列のリスト出力する
[8,3,4,9,9,10,6,1,4,3] => [[8],[3,4,9,9,10],[6],[1,4],[3]]
[1,3,3,4,4,6,8,9,9,10] => [[1,3,3,4,4,6,8,9,9,10]]
[10,9,9,8,6,4,4,3,3,1] => [[10],[9,9],[8],[6],[4,4],[3,3],[1]]
[1,1,1,1,1,1,1,1,1,1] => [[1,1,1,1,1,1,1,1,1,1]]
[] => []
[1] => [[1]]
0025デフォルトの名無しさん
2014/01/27(月) 16:03:34.28[3,4]も[3,4,9]だって部分文字列だろう。
適切な文言で表現をするべきだ。
0026デフォルトの名無しさん
2014/01/27(月) 16:11:04.85| sortOrder |
sortOrder := [:arr |
| signs |
arr size < 2 ifTrue: [#EQ] ifFalse: [
signs := (arr allButFirst - arr allButLast) sign.
true caseOf: {
[signs allSatisfy: #isZero] -> [#EQ].
[signs allSatisfy: #positive] -> [#AS].
[signs negated allSatisfy: #positive] -> [#DES]
} otherwise: [
| first |
first := signs detect: [:each | each ~= 0].
signs findFirst: [:sign | sign ~= 0 and: [sign ~= first]]
]
]
].
sortOrder value: #(6 6 3 2 6 4 7 4 7 4). "=> 4 "
sortOrder value: #(2 3 4 4 4 6 6 6 7 7). "=> #AS "
sortOrder value: #(7 7 6 6 6 4 4 4 3 2). "=> #DES "
sortOrder value: #(1 1 1 1 1 1 1 1 1 1). "=> #EQ "
sortOrder value: #(). "=> #EQ "
sortOrder value: #(1). "=> #EQ "
0027デフォルトの名無しさん
2014/01/27(月) 16:16:42.56| groupsOfSorted |
groupsOfSorted := nil.
groupsOfSorted := [:arr |
arr ifEmpty: [arr] ifNotEmpty: [
| limit rest |
limit := (1 to: arr size) findLast: [:m | (arr first: m) isSorted].
rest := arr allButFirst: limit.
{arr first: limit}, (groupsOfSorted value: rest)
]
].
groupsOfSorted value: #(8 3 4 9 9 10 6 1 4 3). "=> #(#(8) #(3 4 9 9 10) #(6) #(1 4) #(3)) "
groupsOfSorted value: #(1 3 3 4 4 6 8 9 9 10). "=> #(#(1 3 3 4 4 6 8 9 9 10)). "
groupsOfSorted value: #(10 9 9 8 6 4 4 3 3 1). "=> #(#(10) #(9 9) #(8) #(6) #(4 4) #(3 3) #(1)). "
groupsOfSorted value: #(1 1 1 1 1 1 1 1 1 1). "=> #(#(1 1 1 1 1 1 1 1 1 1)). "
groupsOfSorted value: #(). "=> #(). "
groupsOfSorted value: #(1). "=> #(#(1)) "
0028デフォルトの名無しさん
2014/01/27(月) 17:40:59.68#module
#const IS_ASCEND 1
#const IS_DESCEND 2
#const IS_EQUAL 4
#const MASK_ALL (IS_ASCEND|IS_DESCEND|IS_EQUAL)
#defcfunc f23 array arr, int arr_num, local mask
mask=MASK_ALL
repeat arr_num
if cnt=0 : continue
if arr(cnt)>arr(cnt-1) : mask &= IS_ASCEND
if arr(cnt)<arr(cnt-1) : mask &= IS_DESCEND
if mask=0 : r=cnt : break
loop
if mask & IS_EQUAL : return "EQ"
if mask & IS_ASCEND : return "AS"
if mask & IS_DESCEND : return "DES"
return str(r)
#global
arr=6,6,3,2,6,4,7,4,7,4
mes f23(arr, 10)
arr=2,3,4,4,4,6,6,6,7,7
mes f23(arr, 10)
arr=7,7,6,6,6,4,4,4,3,2
mes f23(arr, 10)
arr=1,1,1,1,1,1,1,1,1,1
mes f23(arr, 10)
mes f23(arr, 0)
arr=1
mes f23(arr, 1)
0029デフォルトの名無しさん
2014/01/27(月) 17:57:49.80#module
#defcfunc f24 str s_, local s, local data_str, local data_num, local data, local ret
s=s_
if s="" : return "[]"
split s, ",", data_str
data_num=stat
repeat data_num
data(cnt)=int(data_str(cnt))
loop
ret=strf("[[%d", data(0))
repeat data_num-1, 1
if data(cnt)<data(cnt-1) {
ret+=strf("][%d", data(cnt))
} else {
ret+=strf(",%d", data(cnt))
}
loop
ret+="]]"
return ret
#global
mes f24("8,3,4,9,9,10,6,1,4,3")
mes f24("1,3,3,4,4,6,8,9,9,10")
mes f24("10,9,9,8,6,4,4,3,3,1")
mes f24("1,1,1,1,1,1,1,1,1,1")
mes f24("")
mes f24("1")
0030デフォルトの名無しさん
2014/01/27(月) 18:25:37.70require 'enumerator'
def f23(a)
s = a.enum_cons(2).inject([]) {|cs, (x, y)|cs << (x == y ? '=' : x < y ? '<' : '>')}.to_s
pairs = [[/^[=]*$/, 'EQ'], [/^[<=]+$/, 'AS'], [/^[>=]+$/, 'DES'], [//, nil]]
pairs.find() {|(re, tag)| re =~ s}.last || 1 + [s.index('<'), s.index('>')].max
end
p f23([6,6,3,2,6,4,7,4,7,4])
p f23([2,3,4,4,4,6,6,6,7,7])
p f23([7,7,6,6,6,4,4,4,3,2])
p f23([1,1,1,1,1,1,1,1,1,1])
p f23([])
p f23([1])
>>24 ruby 1.8.6
def f24(a)
a.inject([[]]) {|xss, x|
!xss.last.last || xss.last.last <= x ? xss.last << x : xss << [x]
xss
}
end
p f24([8,3,4,9,9,10,6,1,4,3])
p f24([1,3,3,4,4,6,8,9,9,10])
p f24([10,9,9,8,6,4,4,3,3,1])
p f24([1,1,1,1,1,1,1,1,1,1])
0031デフォルトの名無しさん
2014/01/27(月) 18:54:13.58リストを隣合う要素の左側が右側より大きい箇所を境目にグループ化したリストを出力する
0032デフォルトの名無しさん
2014/01/27(月) 18:55:30.11勝手に文字列に変換してる奴がよく言うwww
0033デフォルトの名無しさん
2014/01/27(月) 19:38:13.50def f24(a)
a.inject([]) {|xss, x|
xss.size < 1 || xss.last.last > x ? xss << [x] : xss.last << x
xss
}
end
p f24([])
p f24([1])
↓
[]
[[1]]
0034デフォルトの名無しさん
2014/01/27(月) 20:05:31.93import Control.Monad
isSorted :: Ord a => [a] -> Either Int Ordering
isSorted [] = Right EQ
isSorted [_] = Right EQ
isSorted xs = foldM f EQ $ zip [1..] $ zipWith compare xs $ tail xs
where
f EQ (_,x) = Right x
f acc (_,EQ) = Right acc
f acc (i,x)
| acc == x = Right acc
| otherwise = Left i
main :: IO ()
main = do
test [6,6,3,2,6,4,7,4,7,4] -- => 4
test [2,3,4,4,4,6,6,6,7,7] -- => AS
test [7,7,6,6,6,4,4,4,3,2] -- => DES
test [1,1,1,1,1,1,1,1,1,1] -- => EQ
test ([] :: [Int]) -- => EQ
test [1] -- => EQ
test :: (Ord a, Show a) => [a] -> IO ()
test xs = do
putStr $ show xs ++ " => "
putStrLn $ case isSorted xs of
Left i -> show i
Right EQ -> "EQ"
Right LT -> "AS"
Right GT -> "DES"
0035デフォルトの名無しさん
2014/01/27(月) 20:10:40.70groupBySorted :: Ord a => [a] -> [[a]]
groupBySorted [] = []
groupBySorted (x0:xs0) = ls0 : groupBySorted rs0
where
(ls0, rs0) = f x0 xs0
f x [] = ([x], [])
f x (y:ys)
| x <= y = let (ls, rs) = f y ys in (x:ls, rs)
| otherwise = ([x], y:ys)
main :: IO ()
main = do
test [8,3,4,9,9,10,6,1,4,3] -- => [[8],[3,4,9,9,10],[6],[1,4],[3]]
test [1,3,3,4,4,6,8,9,9,10] -- => [[1,3,3,4,4,6,8,9,9,10]]
test [10,9,9,8,6,4,4,3,3,1] -- => [[10],[9,9],[8],[6],[4,4],[3,3],[1]]
test [1,1,1,1,1,1,1,1,1,1] -- => [[1,1,1,1,1,1,1,1,1,1]]
test ([] :: [Int]) -- => []
test [1] -- => [[1]]
test :: (Ord a, Show a) => [a] -> IO ()
test xs = putStrLn $ show xs ++ " => " ++ show (groupBySorted xs)
0036デフォルトの名無しさん
2014/01/27(月) 20:12:12.040037デフォルトの名無しさん
2014/01/27(月) 20:27:36.92def f23(a):
sign = 0
for i in range(len(a)):
if i and a[i] != a[i-1]:
if sign and sign * (a[i] - a[i-1]) < 0: return i
sign = int((a[i] - a[i-1]) / abs(a[i] - a[i-1]))
return ["DES", "EQ", "AS"][sign+1]
q23 = [
[6,6,3,2,6,4,7,4,7,4],
[2,3,4,4,4,6,6,6,7,7],
[7,7,6,6,6,4,4,4,3,2],
[1,1,1,1,1,1,1,1,1,1],
[],
[1],
]
for x in q23:
print x, "=>", f23(x)
0038デフォルトの名無しさん
2014/01/27(月) 20:29:09.36def f24(a):
if len(a) == 0: return []
ans = []
i = 0
for j in range(len(a)):
if j and a[j] < a[j-1]:
ans.append(a[i:j])
i = j
return ans + [a[i:]]
q24 = [
[8,3,4,9,9,10,6,1,4,3],
[1,3,3,4,4,6,8,9,9,10],
[10,9,9,8,6,4,4,3,3,1],
[1,1,1,1,1,1,1,1,1,1],
[],
[1],
]
for x in q24:
print x, "=>", f24(x)
0039デフォルトの名無しさん
2014/01/27(月) 20:37:22.62ttp://ideone.com/MB7PRq
バグいじくりまわしてたら正常動作するようになったぁゃしぃコード。まともなデバッグしてない。
0040デフォルトの名無しさん
2014/01/27(月) 21:26:25.61ttp://ideone.com/okr2GQ
今回はボトムアップで作った。なんかコード短くなった気がする。
0041デフォルトの名無しさん
2014/01/27(月) 21:59:48.76#include <stdio.h>
#define SIZE(a) (sizeof a / sizeof *a)
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int eq(int a, int b) {return a == b;}
int le(int a, int b) {return a <= b;}
int ge(int a, int b) {return a >= b;}
int count_true_pair_combo(int *is, int size, int (*f)(int, int)) {
int i;
for (i = 0; i < size - 1; i++) if (!f(is[i], is[i + 1])) break;
return i;
}
void f23(int *is, int size) {
int n_pairs = size - 1;
int n_eq = count_true_pair_combo(is, size, eq);
int n_le = count_true_pair_combo(is, size, le);
int n_ge = count_true_pair_combo(is, size, ge);
if (size < 2 || n_eq == n_pairs) puts("EQ");
else if (n_le == n_pairs) puts("AS");
else if (n_ge == n_pairs) puts("DES");
else printf("%d\n", 1 + MAX(n_le, n_ge));
}
int main() {
int a[] = {6,6,3,2,6,4,7,4,7,4}; f23(a, SIZE(a));
int b[] = {2,3,4,4,4,6,6,6,7,7}; f23(b, SIZE(b));
int c[] = {7,7,6,6,6,4,4,4,3,2}; f23(c, SIZE(c));
int d[] = {1,1,1,1,1,1,1,1,1,1}; f23(d, SIZE(d));
int e[] = {}; f23(e, SIZE(e));
int f[] = {1}; f23(f, SIZE(f));
return 0;
}
0042デフォルトの名無しさん
2014/01/27(月) 23:32:06.68http://ideone.com/Q8Vxe7
0043デフォルトの名無しさん
2014/01/28(火) 19:03:35.07例
# {'a','b','c','d'} の数珠順列の全て
necklace=λ kfsAg:sum([[(kfsAg.sl[0],y)+x+(z,) for x in permutate(kfsAg-kfs([kfsAg.sl[0],y,z]))] for y,z in combinate(kfsAg.sl[1:],2)],[]); necklace(kfs("abcd"))
===============================
[('a', 'b', 'd', 'c'), ('a', 'b', 'c', 'd'), ('a', 'c', 'b', 'd')]
# [1, 2, 3, 4, 5] の数珠順列の全て
necklace=λ kfsAg:sum([[(kfsAg.sl[0],y)+x+(z,) for x in permutate(kfsAg-kfs([kfsAg.sl[0],y,z]))] for y,z in combinate(kfsAg.sl[1:],2)],[]); necklace(kfs([1,2,3,4,5]))
===============================
[(1, 2, 4, 5, 3), (1, 2, 5, 4, 3), (1, 2, 3, 5, 4), (1, 2, 5, 3, 4), (1, 2, 3, 4, 5), (1, 2, 4, 3, 5),
(1, 3, 2, 5, 4), (1, 3, 5, 2, 4), (1, 3, 2, 4, 5), (1, 3, 4, 2, 5), (1, 4, 2, 3, 5), (1, 4, 3, 2, 5)]
参考 URL;;http://www.geocities.jp/m_hiroi/light/pyalgo62.html
0044デフォルトの名無しさん
2014/01/28(火) 20:28:25.53ttp://ideone.com/9drS0R
リンク先のベタ移植。値の加工はまた今度。たまたま時間なかった。
演算子がよくわからんかった。
0045デフォルトの名無しさん
2014/01/28(火) 21:43:08.63ttp://ideone.com/cv8WVj
>>44の値を加工した。適当に加工したので使いにくいな。
実はC++には・・・順列が・・・。
0046デフォルトの名無しさん
2014/01/28(火) 22:11:10.23C++。これライブラリ使って作ってみたけど、これ円順列の方かな???
そう言えば任意のオーダーで数珠順列作りたかったら、
まじめにけいさんして返ってきた(0,N]の配列を配列のインデックスにすれば良かったんだな。
考えが足りなかった。
0047デフォルトの名無しさん
2014/01/28(火) 23:30:56.13| necklace |
necklace := [:arr |
arr size < 4 ifTrue: [arr] ifFalse: [
Array streamContents: [:ss |
arr allButFirst combinations: 2 atATimeDo: [:yz |
(arr copyWithoutAll: {arr first}, yz) permutationsDo: [:x |
ss nextPut: {arr first. yz first}, x, {yz second}]]]]].
necklace value: #(1 2 3 4 5)
=> #(
#(1 2 4 5 3)
#(1 2 5 4 3)
#(1 2 3 5 4)
#(1 2 5 3 4)
#(1 2 3 4 5)
#(1 2 4 3 5)
#(1 3 2 5 4)
#(1 3 5 2 4)
#(1 3 2 4 5)
#(1 3 4 2 5)
#(1 4 2 3 5)
#(1 4 3 2 5))
0048デフォルトの名無しさん
2014/01/29(水) 04:01:27.44ttp://ideone.com/HoNicQ
ほぼC。たぶんこれで完成。
例文の関数言語は読めないので翻訳できない。Orz
0049デフォルトの名無しさん
2014/01/29(水) 12:14:31.55AABCD
みたいに同一の要素が入ることは無いのかな?
0050デフォルトの名無しさん
2014/01/29(水) 21:03:29.91def combination(a, k, is = [], acc = [])
if is.size == k
acc << is.map {|i| a[i]}
else
start = is.empty? ? 0 : is.last + 1
(start..a.size - 1).each {|i| combination(a, k, is + [i], acc) if i < a.size}
end
acc
end
def rotated_arrays(org, n_times, pos)
tmp = org.dup
(1..n_times).inject([]) {|ras, a| ras << (tmp << tmp.delete_at(pos)).dup}
end
def permutation(a, pos = 2, acc = [])
if a.size < 2
acc.concat a
elsif a.size == pos
acc.concat rotated_arrays(a, pos, -pos)
else
rotated_arrays(a, pos, -pos).each {|ra| permutation(ra, pos + 1, acc)}
end
acc
end
0051デフォルトの名無しさん
2014/01/29(水) 21:08:04.10def f43(a)
a.size <= 3 ? a : combination(a[1, a.size - 1], 2).inject([]) {|acc, (y, z)|
permutation(a - [a[0], y, z]).inject(acc) {|acc, x|
acc << [a[0], y, x, z].flatten
}
}
end
p f43(('a'..'d').to_a)
p f43((1..5).to_a)
↓
[["a", "b", "d", "c"], ["a", "b", "c", "d"], ["a", "c", "b", "d"]]
[[1, 2, 5, 4, 3], [1, 2, 4, 5, 3], [1, 2, 5, 3, 4], [1, 2, 3, 5, 4], [1, 2, 4, 3
, 5], [1, 2, 3, 4, 5], [1, 3, 5, 2, 4], [1, 3, 2, 5, 4], [1, 3, 4, 2, 5], [1, 3,
2, 4, 5], [1, 4, 3, 2, 5], [1, 4, 2, 3, 5]]
combinationとpermutationの自作に正直ホネが折れた。
>>43が何を書いてるかサッパリ分からないがそこはフィーリングで。
0052デフォルトの名無しさん
2014/01/31(金) 23:20:26.68末尾が0の数字はスキップする。
例
1,11,12,2,21,13,...,1001
0053デフォルトの名無しさん
2014/02/01(土) 00:48:39.92f=:3 :'if. y-:i.0 0 do. a: else.(1,0<(}:-}.)y)<;.1 y end.'
f 8 3 4 9 9 10 6 1 4 3
+-+----------+-+---+-+
|8|3 4 9 9 10|6|1 4|3|
+-+----------+-+---+-+
f 1 3 3 4 4 6 8 9 9 10
+--------------------+
|1 3 3 4 4 6 8 9 9 10|
+--------------------+
f 10 9 9 8 6 4 4 3 3 1
+--+---+-+-+---+---+-+
|10|9 9|8|6|4 4|3 3|1|
+--+---+-+-+---+---+-+
f i.0 0
++
||
++
f 1
+-+
|1|
+-+
0054デフォルトの名無しさん
2014/02/01(土) 01:39:53.62| shiritori |
shiritori := Generator on: [:g |
| keys |
keys := {'11'}, ((1 to: 9) gather: [:hd | (hd+1 to: 9) gather: [:tl |
{hd asString, tl},
(hd = 1 ifTrue: [{tl asString, tl}] ifFalse: [{}]),
{tl asString, (tl = 9 ifTrue: [hd = 8 ifTrue: [1] ifFalse: [hd+1]] ifFalse: [hd])}]]).
keys do: [:pair |
pair asSet size = 1 ifTrue: [g yield: pair first digitValue].
g yield: pair asNumber].
0 to: 9 do: [:m |
keys do: [:pair | g yield: (pair first asString, m, pair last) asNumber]].
g yield: 1001].
(shiritori next: 15) asArray. "=> #(1 11 12 2 22 21 13 3 33 31 14 4 44 41 15) "
shiritori contents last: 10. "=> #(896 699 997 798 897 799 998 899 991 1001) "
0055デフォルトの名無しさん
2014/02/01(土) 13:41:11.131~1001の中で末尾が0以外の数字は全部使うの?
005655
2014/02/01(土) 13:57:58.060057デフォルトの名無しさん
2014/02/01(土) 14:07:22.51http://ideone.com/MShWfd
0058デフォルトの名無しさん
2014/02/01(土) 17:27:30.38伝家の宝刀「なぜか動いた」。脳みそ0mgでお送りします。
少なくとも1..101と1..1001のときなぜか答えを返すのを確認。
def f52(r)
trios = r.inject([]) {|trios, i|
cs = i.to_s.scan(/./)
l, r = cs.first.to_i, cs.last.to_i
r == 0 ? trios : trios << [l, i, r]
}
l, r = [trios.shift], [trios.pop]
while 0 < trios.size
trio = trios.shift
if l.last.last == trio.first
l.push trio
elsif trio.last == r.first.first
r.unshift trio
else
trios.push trio
trios.push l.pop if 1 < l.size
end
end
l.last.last == r.first.first ? (l + r).map {|trio| trio[1]} : nil
end
p f52(1..1001)
0059デフォルトの名無しさん
2014/02/01(土) 17:30:35.99[1, 155, 546, 697, 748, 81, 185, 596, 667, 768, 889, 91, 177, 798, 899, 991, 184
, 465, 566, 687, 788, 879, 981, 112, 2, 253, 364, 485, 576, 677, 778, 869, 971,
143, 394, 445, 526, 61, 175, 556, 647, 728, 859, 992, 233, 374, 475, 586, 657, 7
58, 849, 961, 197, 718, 839, 982, 283, 384, 425, 516, 637, 738, 829, 972, 213, 3
54, 495, 536, 627, 799, 962, 263, 344, 496, 617, 708, 819, 951, 193, 334, 455, 5
87, 789, 941, 165, 597, 779, 952, 203, 324, 486, 698, 809, 931, 164, 476, 607, 7
69, 942, 293, 314, 435, 567, 759, 932, 273, 304, 405, 577, 749, 921, 12, 294, 41
5, 557, 739, 922, 243, 395, 547, 729, 911, 122, 223, 385, 537, 719, 901, 183,
:
, 665, 564, 463, 362, 261, 116, 69, 958, 857, 756, 655, 554, 453, 352, 251, 128,
85, 59, 948, 847, 746, 645, 544, 443, 342, 241, 107, 74, 49, 938, 837, 736, 635
, 534, 433, 332, 231, 129, 96, 63, 39, 928, 827, 726, 625, 524, 423, 322, 221, 1
19, 97, 75, 53, 31, 19, 918, 817, 716, 615, 514, 413, 312, 211, 108, 86, 64, 42,
29, 9, 999, 989, 979, 969, 959, 949, 939, 929, 919, 909, 908, 898, 888, 878, 86
8, 858, 848, 838, 828, 818, 808, 807, 797, 787, 777, 767, 757, 747, 737, 727, 71
7, 707, 706, 696, 686, 676, 666, 656, 646, 636, 626, 616, 606, 605, 595, 585, 57
5, 565, 555, 545, 535, 525, 515, 505, 504, 494, 484, 474, 464, 454, 444, 434, 42
4, 414, 404, 403, 393, 383, 373, 363, 353, 343, 333, 323, 313, 303, 302, 292, 28
2, 272, 262, 252, 242, 232, 222, 212, 202, 201, 191, 181, 171, 161, 151, 141, 13
1, 121, 111, 109, 99, 98, 88, 87, 77, 76, 66, 65, 55, 54, 44, 43, 33, 32, 22, 21
, 1001]
0060デフォルトの名無しさん
2014/02/01(土) 21:13:43.00http://ideone.com/W7AlWc
0061デフォルトの名無しさん
2014/02/02(日) 01:34:45.960062デフォルトの名無しさん
2014/02/02(日) 02:10:06.26ttp://ideone.com/gY3R3j
ゴリ押しで問題といてみた。他の数字で動くときはほぼ偶然。
具体的には9から昇順サーチしてって、
1000個だとピッタリ循環するんだけど1001個だと1001番が余るので配列を結果見てから2個後ろにずらして、1001番を追加している。
非常にダーティなハックですなー。もっと綺麗に書きたい。
パズルとか思考のネストが深いと頭がオーバーヒートする。Orz
0063デフォルトの名無しさん
2014/02/02(日) 10:47:08.50f=:3 :0
a=.~.;".&.>/:~":&.> ~./:~@(,|.&.":)&.>;/(#~0<10&|)>:i.1000
b=.(+/(1+i.9)="0 1[a)<;.1 a
c=.18}.;{.b
1,101,(;,(;/102+i.8),.(}.b),.(;/1+100*2+i.8)),c,1001
)
1 101 102 2 202 203 302 204 402 205 502 206 602 207 702 208 802 209 902 212
213 312 214 412 215 512 216 612 217 712 218 812 219 912 22 222 223 322 224 422
...
179 971 18 81 181 182 281 183 381 184 481 185 581 186 681 187 781 188 881 189
981 19 91 191 192 291 193 391 194 491 195 591 196 691 197 791 198 891 199 991
1001
自分で出題したのに知らないうちに難易度が上がってうまく解けないよ。
全部の数字を使い切らない解しか想定していませんでした。
みなさん、お題を育ててくれてありがとう。
0064デフォルトの名無しさん
2014/02/02(日) 11:02:24.20> 全部の数字を使い切らない解しか想定していませんでした。
な、なんだって〜!w
使い切らないで良いなら1,1001で終わるから違うんだろうなぁって判断した。
0065デフォルトの名無しさん
2014/02/02(日) 11:07:00.140066デフォルトの名無しさん
2014/02/02(日) 11:12:11.740067デフォルトの名無しさん
2014/02/02(日) 11:19:47.55解も様々あるし。
0068デフォルトの名無しさん
2014/02/02(日) 12:36:56.93>>54 は全部列挙できるルールを見つけたのでそれに基づいたジェネレーターを書き下ろしただけで
解いてはいません。ほめてもらってるのにすみません。でもSmalltalkに興味を持ってもらえるのは嬉しいです。
余計なことかもしれませんが、Smalltalkは処理系に違いで、あるいは同じ処理系でも
バージョンの違いですぐコードが動かなくなりますので、写経とかするときは注意してください。
古いバージョンでも大枠は学べるので、しょっぱな最新版をおっかけないほうがいいです。
一般に、何か教本を用いるときは、その教本が想定としている処理系(可能ならバージョンも)を
できるだけ一致させるのが吉です。あと、分からないことはプライドは捨ててどんどん訊いてください。
以下、比較的名前の知られた処理系のご紹介。
GNU Smalltalkは、紛らわしいことにSmalltalkとしてはかなり変わり種の処理系で、
ファンが作ったオレオレSmalltalk処理系ですが、通常のスクリプト言語に近い感じで使えるので
Smalltalkを素朴に言語処理系として学びたい人にはお勧めです。ideone.comでも使えます。
どうせなら(自分はともかく誰かが)仕事で使っているクオリティのきちんとした処理系で学びたい
ということでしたら、Cincom社のVisualWorksという処理系がお薦めです。非商用はフリーです。
http://smalltalk.cincom.jp/main/
http://smalltalk.cincom.jp/tutorials/index.ssp
Squeakは、処理系としてはめちゃくちゃですが、くだらない(というと語弊がありますが
「多岐のユースケースに沿った」というとちょっと恰好がつきますか…)クラスやAPIが充実しているので
こういうお題を解くときに痒いところに手が届くので個人的には気に入って使っています。
http://sourceforge.jp/projects/squeak-ja/
http://swikis.ddo.jp/squeak/13
PharoはSqueakのコアメンバーが、Squeakの冗長さにイヤ気して、よくある「整理したい」
「大胆にやりなおしたい」症候群でやっているプロジェクトで、Squeakより処理系としては
少しまともな半面、まだ発展途上なのが注意点です。
http://www.pharo-project.org/home
https://github.com/SquareBracketAssociates/PharoByExample-japanese
http://dotinstall.com/lessons/basic_smalltalk
0069デフォルトの名無しさん
2014/02/02(日) 17:23:47.94n=1のとき
01
10
n=2のとき
0011
0011
1100
1100
n=3のとき
000111
000111
000111
111000
111000
111000
を表示する。
0070デフォルトの名無しさん
2014/02/02(日) 17:50:09.02def f69(n)
puts ['0' * n + '1' * n] * n + ['1' * n + '0' * n] * n
end
(1..3).each {|n| f69(n)}
0071デフォルトの名無しさん
2014/02/02(日) 18:40:53.61#module
#deffunc f69 int n
mes n_str(n_str("0", n)+n_str("1", n)+"\n", n)+n_str(n_str("1", n)+n_str("0", n)+"\n", n)
return
#defcfunc n_str str s, int n, local buf
sdim buf
repeat n : buf+=s : loop
return buf
#global
f69 1
f69 2
f69 3
0072デフォルトの名無しさん
2014/02/02(日) 18:45:47.05zeroOneMatrix :: Int -> String
zeroOneMatrix n = unlines . replicate n . (replicate n =<<) =<< ["01","10"]
main = putStr $ zeroOneMatrix 3
0073デフォルトの名無しさん
2014/02/02(日) 19:03:18.19| checker |
checker := [:n |
| zeros ones CRs |
zeros := Matrix new: n element: $0.
ones := Matrix new: n element: $1.
CRs := Matrix rows: n columns: 1 element: Character cr.
((zeros, ones, CRs),, (ones, zeros, CRs)) asArray as: String].
checker value: 3.
000111
000111
000111
111000
111000
111000
0074デフォルトの名無しさん
2014/02/02(日) 21:25:11.08http://ideone.com/6J77ik
ほぼC。いつもより多めに回っております。
007566 ◆QZaw55cn4c
2014/02/02(日) 22:34:05.84http://codepad.org/Y0a4Rhvk
>>68
thx a lot! c++/java とは違う世界に期待して.
先日のお題で,√2 1000桁を追試しようと squeqk (だと思う)を早速いれたけれども,これってウィンドウシステム全体を入れたみたいな扱いなんですね.
0076デフォルトの名無しさん
2014/02/02(日) 22:42:23.06トリ割れしたのにまだそれつかってんの?w
それとも、それは勘違いでそのトリは新しいやつなの?
0077デフォルトの名無しさん
2014/02/02(日) 22:59:04.21f:=method(n,
a:="0"repeated(n)
b:="1"repeated(n)
(a .. b .. "\n")repeated(n)..(b .. a .."\n")repeated(n)
)
Io> f(2)println
0011
0011
1100
1100
0078デフォルトの名無しさん
2014/02/02(日) 23:06:02.37void f(int n){
int x,y;
for(y=n*2;y--;){
for(x=n*2;x--;){
putchar(x/n^y/n|48);
}
puts("");
}
puts("");
}
int main(){
f(1);
f(2);
f(5);
return 0;
}
0079デフォルトの名無しさん
2014/02/02(日) 23:41:49.49>これってウィンドウシステム全体を入れたみたいな扱いなんですね.
そうです。Smalltalk はアラン・ケイらが自身が構想した理想のパーソナルコンピューターである
「ダイナブック」http://swikis.ddo.jp/abee/74 の暫定OSとして独特な思想や世界観を背景
http://web.archive.org/web/20041016084842/marimpod.homeip.net/chomswiki/24 に作られたため
セルフホスティング(処理系・環境の大部分がSmalltalk自身で記述されている)の仮想OSのような構成で
独自のウインドウシステムも環境の中に備えています。余談ですが、このウインドウシステムを
スティーブ・ジョブズらが観てインスパイアされ(有り体に言えばパクって)LisaやMacを作ったり、
そのときは真似られなかったAPIを参考に、のちに改めてNeXTSTEP(今のOS X、iOSの前身)を
作ったのは比較的よく知られた話です。http://americanhistory.si.edu/comphist/sj1.html#soft
そんなわけで、もしSmalltalkを使うためだけに慣れたUNIX環境などから離れたくない、
ということでしたら、繰り返しになりますがGNU Smalltalkをお薦めします。
言語のみのSmalltalk、という本来のSmalltalkからすれば限定的な世界しか体験できませんが、
それでも組み込みライブラリひとつとってもSmalltalkはかなり盛りだくさんなので、
学ぶのに退屈することはないかと思います。
参考まで、件のコードをGNU Smalltalkでも動作するように書き換えてみました(ideone.com でも
時間切れにならないように 100桁で)。
| m x epsilon delta |
m := 100.
x := 1.
epsilon := 10 raisedTo: m negated.
[(delta := -2 * x * x + 1 * x / 2) abs > epsilon] whileTrue: [x := x + delta].
((x * 2) asScaledDecimal: m) printNl
http://ideone.com/MwgorF
0080デフォルトの名無しさん
2014/02/02(日) 23:55:20.39>余談ですが、このウインドウシステムをスティーブ・ジョブズらが観て
いうまでもなく「このウインドウシステム」は、1979年当時の―です。念のため^^;
http://classes.soe.ucsc.edu/cmps112/Spring03/readings/st76figure3.gif
0081デフォルトの名無しさん
2014/02/03(月) 00:34:55.88>>78の真似
f <- function(n){
a <- rep(0:1,c(n,n))
write(1-outer(a,a,"=="),"",n*2,sep="")
}
0082デフォルトの名無しさん
2014/02/03(月) 18:16:35.78f =: '01'&([ {~ [: ~:/~ ] # [)
smoutput@(f"0) 1 2 3
01
10
0011
0011
1100
1100
000111
000111
000111
111000
111000
111000
0083デフォルトの名無しさん
2014/02/03(月) 19:21:46.77logは自然対数、sqrtは平方根、!は階乗、^は累乗とする。
2^n
2^log(n)
4^n
n
n^2
n!
n*log(n)
log(n!)
log(log(n))
sqrt(log(n))
0084デフォルトの名無しさん
2014/02/03(月) 20:15:11.09def f83(n)
a = []
a << [2 ** n, '2^n']
a << [2 ** Math.log(n), '2^log(n)']
a << [4 ** n, '4^n']
a << [n, 'n']
a << [n ** 2, 'n^2']
a << [(1..n).inject(1){|r, i| r * i}, 'n!']
a << [n * Math.log(n), 'n*log(n)']
a << [Math.log((1..n).inject(1){|r, i| r * i}), 'log(n!)']
a << [Math.log(Math.log(n)), 'log(log(n))']
a << [Math.sqrt(Math.log(n)), 'sqrt(log(n))']
a.sort.reverse
end
puts f83(10).map {|a| a.join(' = ')}
↓
3628800 = n!
1048576 = 4^n
1024 = 2^n
100 = n^2
23.0258509299405 = n*log(n)
15.1044125730755 = log(n!)
10 = n
4.9334096679146 = 2^log(n)
1.51742712938515 = sqrt(log(n))
0.834032445247956 = log(log(n))
0085デフォルトの名無しさん
2014/02/03(月) 21:48:51.10| n exprs |
n := 10.
exprs := {
'2^n' -> [2 raisedTo: n].
'2^log(n)' -> [2 raisedTo: n ln].
'4^n' -> [4 raisedTo: n].
'n' -> [n].
'n^2' -> [n raisedTo: 2].
'n!' -> [n factorial].
'n*log(n)' -> [n * n ln].
'log(n!)' -> [n factorial ln].
'log(log(n))' -> [n ln ln].
'sqrt(log(n))' -> [n ln sqrt]}.
^(exprs collect: [:kv | kv value value -> kv key]) sort reversed
=> {3628800->'n!' .
1048576->'4^n' .
1024->'2^n' .
100->'n^2' .
23.02585092994046->'n*log(n)' .
15.10441257307552->'log(n!)' .
10->'n' .
4.9334096679146->'2^log(n)' .
1.517427129385147->'sqrt(log(n))' .
0.834032445247956->'log(log(n))'}
0086デフォルトの名無しさん
2014/02/03(月) 21:59:00.40あってるかな?数学はダメなんだよね。
階乗だけ手書きした。64ビット変数でも簡単にオーバーフローするので気をつけてね。
0087デフォルトの名無しさん
2014/02/03(月) 22:01:45.80安価忘れてた。Orz
0088デフォルトの名無しさん
2014/02/03(月) 22:54:03.60http://ideone.com/faF5kM
出来てるはず……。
>>69 Perl
use 5.016;
use warnings;
sub f { map{ (join '', map{ $_ x $_[0] } @{$_}) x $_[0] } ([0, 1], [1, 0]) }
foreach(1 .. 3){
say join("\n", f($_));
}
>>83 Perl
http://ideone.com/GshPeG
0089デフォルトの名無しさん
2014/02/04(火) 00:43:17.27http://ideone.com/H9pU6e
0090デフォルトの名無しさん
2014/02/04(火) 11:58:40.99JavaScript
var NumberObj={};NumberObj.Number=0;
NumberObj.SetNumber=function (n){this.Number=n;}
NumberObj.Main=function (){
var ReturnNumberString='';
for(l=0;l<this.Number;l++){
for(n=0;n<this.Number;n++){var ReturnNumberString;ReturnNumberString+="0";}
for(m=0;m<this.Number;m++){var ReturnNumberString;ReturnNumberString+="1";}
ReturnNumberString+="\n" ;}
for(i=0;i<this.Number;i++){
for(j=0;j<this.Number;j++){ReturnNumberString+="1";}
for(k=0;k<this.Number;k++){var ReturnNumberString;ReturnNumberString+="0";}
ReturnNumberString+="\n";}
window.alert(ReturnNumberString);
}
NumberObj.SetNumber(5);NumberObj.Main();
スマートではないですが勉強の一環として。改行多すぎといわれたため可読性低下。
009190訂正
2014/02/04(火) 12:00:23.99var NumberObj={};
NumberObj.Number=0;
NumberObj.SetNumber=function (n){this.Number=n;}
NumberObj.Main=function (){
var ReturnNumberString='';
for(l=0;l<this.Number;l++){
for(n=0;n<this.Number;n++){ReturnNumberString+="0";}
for(m=0;m<this.Number;m++){ReturnNumberString+="1";}
ReturnNumberString+="\n" ;
}
for(i=0;i<this.Number;i++){
for(j=0;j<this.Number;j++){ReturnNumberString+="1";}
for(k=0;k<this.Number;k++){ReturnNumberString+="0";}
ReturnNumberString+="\n";
}window.alert(ReturnNumberString);
}
NumberObj.SetNumber(5);
NumberObj.Main();
NumberObj.SetNumber(5);NumberObj.Main();
スマートではないですが勉強の一環として。改行多すぎといわれたためインデント等省き可読性ゼロ。
スマートではないですが勉強の一環として。改行多すぎといわれたため可読性低下。
0092デフォルトの名無しさん
2014/02/04(火) 12:13:20.70f=:3 :0
s=.'2^n';'2^log(n)';'4^n';'n';'n^2';'n!';'n*log(n)';'log(n!)';'log(log(n))';'sqrt(log(n))'
v=.((2&^);(2&^@^.);(4&^);(]);(^&2);(!);(*^.);(^.@!);(^.@^.);(%:@^.))y
;"1 |."1 ":&.> \:~ v ,. (<' = ') ,. s
)
f 10
n! = 3628800
4^n = 1048576
2^n = 1024
n^2 = 100
n*log(n) = 23.02585093
log(n!) = 15.10441257
n = 10
2^log(n) = 4.933409668
sqrt(log(n)) = 1.517427129
log(log(n)) = 0.8340324452
0093デフォルトの名無しさん
2014/02/04(火) 20:12:25.22f(n):=?format(?t,"~v@{~:*~v@{0~}~:*~v@{1~}~%~}~v@{~:*~v@{1~}~:*~v@{0~}~%~}",n,n,0);
0094デフォルトの名無しさん
2014/02/04(火) 22:06:24.71>>93を元に、任意の文字を指定できるようにしてみた(Common Lisp)。
ideone.com/rzzYhs
ちなみにこっちは自分で一昨日書いたもの。
ideone.com/sEOxWw
"@" を使わず、"~:*" の使いどころもなってないので(formatの)引数がぐっちゃぐちゃ。
0095デフォルトの名無しさん
2014/02/04(火) 23:17:59.32単語と英文の文字列比較の回数を数える
文字列比較の回数を画面表示する
ようなプログラムを作成しなさい。
0096デフォルトの名無しさん
2014/02/05(水) 05:33:50.45( ・ω・) <C/C++の宿題片付けます 166代目
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)ttp://toro.2ch.net/test/read.cgi/tech/1381909900/
0097デフォルトの名無しさん
2014/02/05(水) 18:13:42.67文字と移動量の対応がわかれば表現は自由。
例 Jの場合
f=:3 :'|:~.y;"0((|.y) i. y){_1|.>:i.#y'
f'hello'
+-+-+-+-+
|h|e|l|o|
+-+-+-+-+
|4|3|1|5|
+-+-+-+-+
f'boyer-moore'
+--+-+-+--+-+-+-+
|b |o|y|e |r|-|m|
+--+-+-+--+-+-+-+
|10|2|8|11|1|5|4|
+--+-+-+--+-+-+-+
0098デフォルトの名無しさん
2014/02/05(水) 20:23:45.80def bmmap(s)
cs = s.scan(/./)
(0...cs.size - 1).inject({}) {|m, i| m[cs[i]] = cs.size - 1 - i; m}.update({cs.last=>cs.size})
end
p bmmap('hello')
p bmmap('boyer-moore')
↓
{"l"=>1, "o"=>5, "e"=>3, "h"=>4}
{"m"=>4, "-"=>5, "b"=>10, "y"=>8, "o"=>2, "e"=>11, "r"=>1
0099デフォルトの名無しさん
2014/02/05(水) 21:17:51.79use 5.016;
use warnings;
sub f {
sub {
+{ (map{ $_[$_] => $#_ - $_ } (0 .. $#_ - 1)), $_[-1] => 0+ @_ }
}->(split //, shift)
}
use Data::Dumper;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Indent = 0;
say Dumper(f("hello"));
say Dumper(f("boyer-moore"));
結果
{'l' => 1,'e' => 3,'h' => 4,'o' => 5}
{'-' => 5,'e' => 11,'y' => 8,'r' => 1,'b' => 10,'m' => 4,'o' => 2}
0100デフォルトの名無しさん
2014/02/05(水) 23:39:16.03ttp://ideone.com/p3ohB2
ほぼC。これあってる?検索してでたページを勝手に解釈して作ったんだけど。
頭悪いからこういう理論系ってにがてー。Orz
0101デフォルトの名無しさん
2014/02/06(木) 01:13:55.34bmAlist :: Eq a => [a] -> [(a, Int)]
bmAlist [] = []
bmAlist xs = let (ln,(y,_):ys) = reverse `fmap` foldr f (0,[]) xs in (y,ln) : ys
where
f x (i,ys) = maybe (i+1,(x,i):ys) (const (i+1,ys)) $ lookup x ys
main :: IO ()
main = mapM_ print $ map bmAlist ["hello","boyer-moore"]
-- [('o',5),('l',1),('e',3),('h',4)]
-- [('e',11),('r',1),('o',2),('m',4),('-',5),('y',8),('b',10)]
0102_uy2.1p0
2014/02/06(木) 07:44:59.04# >>30 , >>33
def f24(a)
a.inject([]){|xss, x| xss.empty? || xss.last.last > x ? xss << [x] : xss.last << x ; xss}
end
p f24([]) ; p f24([1])
# >>50 , >>51
p [1,2,3,4].combination(2).to_a
p [1,2,3,4].permutation(2).to_a
# >>84
n = 9
p [(1..n).inject(1,:*), 'n!']
# >>98
def bmmap(s)
cs = s.split(//)
cs.size.times.inject({}) {|m, i| m[cs[i]] = cs.size - 1 - i; m}.merge(cs.last=>cs.size)
end
p bmmap('hello') ; p bmmap('boyer-moore')
# => []
# => [[1]]
# => [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
# => [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3]]
# => [362880, "n!"]
# => {"h"=>4, "e"=>3, "l"=>1, "o"=>5}
# => {"b"=>10, "o"=>2, "y"=>8, "e"=>11, "r"=>1, "-"=>5, "m"=>4}
0103デフォルトの名無しさん
2014/02/06(木) 18:06:34.12回答例と出力例:
require 'date'
def weeks(year, mon)
first, last = Date.new(year, mon, 1), Date.new(year, mon, -1)
weeks = (first..last).inject([]) {|ws, d| d.day == 1 || d.wday == 0 ? ws << [d] : ws.last << d; ws}
weeks[0] = [nil] * (7 - weeks.first.size) + weeks.first
weeks[-1] = weeks.last + [nil] * (7 - weeks.last.size)
weeks
end
def calendar(year, mon)
weeks(year, mon).map {|days| days.map {|d| d ? "%2d" % d.day : ' '}.join(' ')}
end
def yearmon(date = Date.today)
[date.year, date.mon]
end
puts calendar(*yearmon)
↓
ttp://codepad.org/HvvYuSMi
0104デフォルトの名無しさん
2014/02/06(木) 18:18:12.91#!/bin/sh -f
/bin/cal $2 $1
0105デフォルトの名無しさん
2014/02/06(木) 19:01:30.57import calendar as cl; cl.prmonth(2014, 02, w=11, l=2)
February 2014
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
1 2
3 4 5 6 7 8 9
・・
24 25 26 27 28
0106デフォルトの名無しさん
2014/02/06(木) 20:40:25.00| bmTable |
bmTable := [:str |
str asSet collect: [:chr | chr -> ((str size - (str lastIndexOf: chr)) - 1 \\ str size + 1)]
].
bmTable value: 'hello'. "=> a Set($o->5 $e->3 $h->4 $l->1) "
bmTable value: 'boyer-moore'. "=> a Set($y->8 $o->2 $-->5 $b->10 $r->1 $e->11 $m->4) "
0107デフォルトの名無しさん
2014/02/06(木) 21:29:49.77| ans month |
Transcript open.
ans := FillInTheBlank request: 'yyyy-mm' initialAnswer: (Date today yyyymmdd allButLast: 3).
month := (ans ifEmpty: [Date today] ifNotEmpty: [(ans, ' 1') asDate]) month.
month weeks do: [:week |
week dates do: [:date |
Transcript nextPutAll: (date month = month
ifFalse: ['__']
ifTrue: [date dayOfMonth printPaddedWith: $_ to: 2])
] separatedBy: [Transcript space]
] separatedBy: [Transcript cr].
Transcript endEntry
'2014-02' =>
__ __ __ __ __ __ _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 __
0108デフォルトの名無しさん
2014/02/06(木) 22:09:57.68https://ideone.com/i2tE8a
0109デフォルトの名無しさん
2014/02/06(木) 22:17:48.04ideone.com/sW9TkK
0110デフォルトの名無しさん
2014/02/06(木) 23:43:50.60load 'dates'
f=:3 :0
({.6!:0'')f y
:
a=:>:i.(todayno x,(y+1),1)-todayno x,y,1
b=.'SMTWTFS'
(_7,\((weekday x,y,1)#0),a){'_123456789abcdefghijklmnopqrstuv'
)
2014 f 2
SMTWTFS
______1
2345678
9abcdef
ghijklm
nopqrs_
0111デフォルトの名無しさん
2014/02/06(木) 23:48:26.08ほぼC。まともに書いたの初めてかも。
色々検索してやっと書けた。
ライブラリなしでも書けるもんだな。
0112デフォルトの名無しさん
2014/02/06(木) 23:58:15.89安価忘れた。コードあってるよね?
0113デフォルトの名無しさん
2014/02/07(金) 08:01:51.73デバッグの楽しみを奪うのは気が退けるから自分で頑張ってテストしてくれ。
で、ぱっと見で気づいた点。
・trueと比較するな。
・全部大文字の変数名を作るな。
紛らわしい。
0114デフォルトの名無しさん
2014/02/07(金) 08:41:47.66Defineは基本的には使わない主義なので全部大文字だと、困るかなぁ。
いい名前思い浮かばなかったのは確かだけど。まぁ、これは失態。
でも、trueと比較するのは個人的な流儀なのでこれは曲げれん。
葉末を叩くより、ロジックを洗って欲しかった。
0115デフォルトの名無しさん
2014/02/07(金) 10:09:05.19そこはそれこそ、自分でやるべきことだがな<ロジック
他に気づいた点。
・「与えられた」と言う仕様(お題)を満たしていない。
・主義なら止めないが、std::endlは'\n'とイコールではないぞ。
・定数にはconstをつけよう。特に、文字列。
・ついでに言えば、文字列配列はstaticにして無駄な代入は減らすべき。
・5とか6とかマジックナンバーうぜぇ。それこそ、const int Sunday = Saturday + 1;とかしたらいいのに。
・LastDayOfMonth()が折角異常時に負値を返しているのに呼び出し元がケアしてないのな。
・1900年から足すのは流石に地道過ぎる。例えば2000年辺りを基準に365*3+366で計算しちゃえば?
・つーか、元を糾せばtime.h使えば楽なのに。まぁ、そこを自力でやりたかったのか。
それにしても、trueと比較って意味がわからねぇ。
比較結果を返す関数の結果がtrueかどうか比較したくなるなら、なんで普通の比較はtrueと比較したくならないんだ?
ついでに言えば、折角コンパイラが勝手に最適化してくれる可能性を自ら潰しているぞ。
0116デフォルトの名無しさん
2014/02/07(金) 10:13:32.43書いた方は困らんだろうけど読む方は勘違いする罠。
それと、LastDayOfMonth()はテーブル使った方が見やすくないか?
0117デフォルトの名無しさん
2014/02/07(金) 17:03:02.76f := method(y,m,
d1 := Date clone setYear(y) setMonth(m) setDay(1)
d2 := Date clone setYear(y + (m / 12)floor) setMonth(m % 12 + 1) setDay(1)
a := (d2 - d1) days
w := d1 asString("%w") asNumber
writeln(" Su Mo Tu We Th Fr Sa")
for(i,1,w + a,
write(if(i <= w, "___", (i - w) asString(3,0).. if((i % 7) == 0, "\n","")))
)
writeln
)
Io> f(2014,2)
_Su_Mo_Tu_We_Th_Fr_Sa
____________________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
0118103
2014/02/07(金) 18:05:49.35> コードあってるよね?
シラネw ワカンネw
回答者ならではとか言語ならではの違いが見たいだけだから、
答えがあってるかどうかまでは見てないんす。すまんすw
あとはお題に対する解釈で、どこを押さえてくれて、
どこで遊んでくれるのかを見るのも、それも楽しみかなあ。
いいかげんで無責任な出題でホント申し訳ないw
0119デフォルトの名無しさん
2014/02/07(金) 18:21:13.82おはよう。
お題をみたしてないってどういうこと?余計に表示してるってことなのか、それとも他に?
Endlineって\nじゃないの?
constはあんまり突ける癖ないな。コンパイル時定数はさすがにstatic constにするけど。
マジックナンバーは、最後の詰めが甘かったね。反省。ほぼ完成した後追加したから気が回らなかった。
関数書くときは異常系もちゃんと書いておくんだよ。あんまり使わないけど。自分の範囲内だから他人がいじるのは想定してない。
1900から足しているのは、仕様だ。まぁ、検索した時に出てきた資料に沿ったんだけどさ。あとはある程度ロールバックできるようにしたかった。
time.hって乱数以外で使ったこと無いのよね。自前で書けそうだったのと調べるの面倒だったので手書きした。
trueとの比較は、自分のコーディングスタイルなので効率とかそういう話じゃない。
とにかく、X==Yの形で書いてないと俺自身の字句解析がおかしくなるんだよ〜。かっこ厨だしな。
左から右に流れて読む癖があるからね。
とりあえず、要求満たしてないっていうのがどういうことなのか知りたい。
>>116
それについては俺も反省。
Define使わない主義だけど、やっぱ紛らわしいか。せめてスコープ内位は探して欲しいが。
テーブルの件は確かにそうだね〜。実質2時間程度で書いたので意識が散漫だった。
のと、グローバル変数はなるべく使わない主義なので、選択肢になかった。
でも、テーブルでも良かったかな。std::vectorがイニシャライザリスト使えることだし、そんなに悪い選択でもなかった。
あ、でもうるう年のとき面倒くさいな。難しい選択だ。
0120デフォルトの名無しさん
2014/02/07(金) 18:24:01.67まぁ、そういうことなら一応安心。
蛇足も許してくれそうでよかった。
0121デフォルトの名無しさん
2014/02/07(金) 18:26:38.97そだそだ、暇だったら参加してよ。
コールドリーディングもいい勉強になるからさ。
0122デフォルトの名無しさん
2014/02/07(金) 18:33:32.22http://codepad.org/NvNlmZ8f
0123デフォルトの名無しさん
2014/02/07(金) 18:42:25.97コールドリーディングってなんぞ?コード・リーディングな。。。Orz
IMEのサジェストに頼ったのがいけなかったな。
0124デフォルトの名無しさん
2014/02/07(金) 19:01:56.81いったい何を聞き出すんです?
まあSE的にはそれなりに役立ちそうな能力だが>コールドリーディング
0125103
2014/02/07(金) 19:04:30.81回答する人にとって余計な負担になると思って省いたが、
つけてる人の見るとやっぱそっちがカッコイイのでいちおうつけとく。
def calendar(year, mon)
lines = weeks(year, mon).map {|ds| ds.map {|d| d ? "%2d" % d.day : ' '}.join(' ')}
lines = [(0...7).map {|i| Date::DAYNAMES[i].gsub(/^(..).*/, '\1')}.join(' ')] + lines
lines = [(Date::MONTHNAMES[mon] + ' ' + year.to_s).center(lines.first.size)] + lines
end
↓
February 2014
Su Mo Tu We Th Fr Sa
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
0126デフォルトの名無しさん
2014/02/07(金) 23:31:44.60import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.prmonth(2014, 2)
0127デフォルトの名無しさん
2014/02/08(土) 01:33:16.94「与えられた年、月のカレンダー」と言うお題に対して、2014年のカレンダーを出力しているってことでしょ。
ShowCalendar()がその意味ではお題に対する解ってことでいいんでない?
0128デフォルトの名無しさん
2014/02/08(土) 01:55:54.14まぁ、そういうことなら安心だ。
何事かと思った。
0129デフォルトの名無しさん
2014/02/10(月) 21:30:11.23問題の与え方は(ハードコードを含め)自由です。
結果は、先頭の文字の場所を示せればOKです。
余力があれば、一つの単語の解答が複数ある場合にも対応してください。
入力例:
WVERTICALL
ROOAFFLSAB
ACRILIATOA
NDODKONWDC
DRKESOODDK
OEEPZEGLIW
MSIIHOAERA
ALRKRRIRER
KODIDEDRCD
HELWSLEUTH
WEEK
FIND
RANDOM
SLEUTH
BACKWARD
VERTICAL
DIAGONAL
WIKIPEDIA
HORIZONTAL
WORDSEARCH
出力例:
WEEK, なし; FIND, (2,5); RANDOM, (2,1); SLEUTH, (10,5);
BACKWARD, (2,10); VERTICAL, (1,2); DIAGONAL, (9,7);
WIKIPEDIA, (10,4); HORIZONTAL, (10,1); WORDSEARCH, (1,1)
0130デフォルトの名無しさん
2014/02/10(月) 21:53:29.85もしかして、入力って2次元配列なの?
0131デフォルトの名無しさん
2014/02/10(月) 22:55:20.67ワードサーチパズルは、たとえばこんなのです。
http://www.eigo21.com/03/srch/00.htm
0132デフォルトの名無しさん
2014/02/10(月) 23:17:38.30| str mat words dirs |
str := 'WVERTICALL
ROOAFFLSAB
ACRILIATOA
NDODKONWDC
DRKESOODDK
OEEPZEGLIW
MSIIHOAERA
ALRKRRIRER
KODIDEDRCD
HELWSLEUTH'.
words := #('WEEK' 'FIND' 'RANDOM' 'SLEUTH' 'BACKWARD' 'VERTICAL'
'DIAGONAL' 'WIKIPEDIA' 'HORIZONTAL' 'WORDSEARCH').
mat := Matrix rows: str lines size columns: str lines first size contents: str lines concatenation.
dirs := {1@0. 1@1. 0@1. -1@1. -1@0. -1@ -1. 0@ -1. 1@ -1}.
^words collect: [:word |
| res pos |
mat replaceAll: word first with: $*.
res := 0@0.
[(pos := mat indexOf: $*) isZero] whileFalse: [
mat at: pos x at: pos y put: word first.
((1 to: word size - 1) allSatisfy: [:m | m * dirs + pos anySatisfy: [:cur |
(mat at: cur x at: cur y ifInvalid: nil) = (word at: m + 1)]]) ifTrue: [res := pos]].
word -> (res isZero ifTrue: ['not found'] ifFalse: [res])]
=> {'WEEK'->'not found' . 'FIND'->2@5 . 'RANDOM'->2@1 . 'SLEUTH'->10@5 .
'BACKWARD'->2@10 . 'VERTICAL'->1@2 . 'DIAGONAL'->9@7 . 'WIKIPEDIA'->10@4 .
'HORIZONTAL'->10@1 . 'WORDSEARCH'->1@1}
0133デフォルトの名無しさん
2014/02/10(月) 23:39:38.16出遅れたか……言語はC++
http://codepad.org/ER55e69s
なお、input.txtと出力は次の通り(1行目は横サイズ・縦サイズ・単語数)
http://codepad.org/OruCO0Nq
0134デフォルトの名無しさん
2014/02/11(火) 00:25:21.92うぇー、斜めあるんですか。。。
ちょっと大変だなー。
0135デフォルトの名無しさん
2014/02/11(火) 06:06:40.15ほぼC。アーちきしょー。イッパイ殴られたわ。正直合ってるかどうかわからん。
汎用性は持たせたが、ほぼハードコーディングだし、処理速度遅め。
久しぶりにすごい勢いでコード書いたわ。あー疲れた。
最初もっと難しい問題かと思って何度か書きなおしちゃったよ。
6時間もかかるとか想定外だ。ほんっと疲れた。Orz
>>132の設計のほうがいいな〜。土台できてから書きえるのはリスキーだね。
自分の頭呪いたい。超絶呪いたい。俺に才能をクレ。
0136135
2014/02/11(火) 06:14:18.91グダグダ言ってしまったが、歯ごたえのあるイイ問題だった。
半分くらいは自分のせいだが、いやーすごかった。
0137デフォルトの名無しさん
2014/02/11(火) 10:38:18.77def f129(table, words, SP = "*"):
result = dict((word, []) for word in words)
h, w = len(table), max(len(x) for x in table)
table = [x.ljust(w) for x in table]
def f129s(table, down=0, right=1):
if down:
if right < 0: table = [SP*i + table[i] + SP*(w-1-i) for i in range(w)]
elif right > 0: table = [SP*(w-1-i) + table[i] + SP*i for i in range(w)]
table = ["".join(table[i][j] for i in range(len(table))) for j in range(len(table[0]))]
for word in words:
rev_word = "".join(reversed(word))
for i in range(len(table)):
for (wd, inv, ofs) in [(word, 1, 0), (rev_word, -1, len(rev_word)-1)]:
if wd in table[i]:
row, col = i, table[i].find(wd) - inv*ofs
if down:
row += col*right
if right > 0: row -= w-1
row, col = col, row
result[word].append(((row+1, col+1), (row+inv*down*len(wd), col+inv*right*len(wd)),(inv*down, inv*right)))
for (down, right) in ((0,1), (1,0), (1,1), (1,-1)):
f129s(table, down, right)
for k in words:
print k, result[k]
table = ['WVERTICALL', 'ROOAFFLSAB', 'ACRILIATOA', 'NDODKONWDC', 'DRKESOODDK', 'OEEPZEGLIW', 'MSIIHOAERA', 'ALRKRRIRER', 'KODIDEDRCD', 'HELWSLEUTH']
words = ['WEEK', 'FIND', 'RANDOM', 'SLEUTH', 'BACKWARD', 'VERTICAL', 'DIAGONAL', 'WIKIPEDIA', 'HORIZONTAL', 'WORDSEARCH']
f129(table, words)
0138デフォルトの名無しさん
2014/02/11(火) 10:46:44.75WEEK []
FIND [((2, 5), (5, 8), (1, 1))]
RANDOM [((2, 1), (7, 0), (1, 0))]
SLEUTH [((10, 5), (9, 10), (0, 1))]
BACKWARD [((2, 10), (9, 9), (1, 0))]
VERTICAL [((1, 2), (0, 9), (0, 1))]
DIAGONAL [((9, 7), (0, 6), (-1, 0))]
WIKIPEDIA [((10, 4), (0, 3), (-1, 0))]
HORIZONTAL [((10, 1), (-1, 10), (-1, 1))]
WORDSEARCH [((1, 1), (10, 10), (1, 1))]
((開始位置), (終了位置), (探索方向)) のリストになってます
0139133
2014/02/11(火) 12:14:00.95方向ごとに関数書くとかゴリ押しすぎるだろwww
……ま、移動方向の差分が各方向に-1〜1で済むというアイデアは、
皆どこかで拾ったか昔思いついたんだろうね
0140デフォルトの名無しさん
2014/02/11(火) 18:19:25.64def ddup(o)
Marshal.load(Marshal.dump(o))
end
def f129(table, words)
css = table.map {|s| s.scan(/./)}
trioss = (0...css.size).inject([]) {|trioss, i| trioss << (0...css[i].size).inject([]){|trios, j| trios << [i, j, css[i][j]]}}
naname = Array.new(trioss.size + trioss[0].size - 1) {|i| []}
tmp, a, b = trioss.dup, ddup(naname), ddup(naname)
while !tmp.empty?
trios = tmp.pop
i = trios.size - 1 - tmp.size
trios.each_index{|j| a[i + j] << trios[j]; b[i + j] << trios[trios.size - 1 - j]}
end
lines = trioss + trioss.transpose + a + b # 横、縦、斜め、逆斜め
lines = lines + lines.map {|trios| trios.reverse} # 逆方向
tails = words.inject({}) {|h, w| h[w] = w.scan(/./).size - 1; h}
lines.each {|trios|
s = trios.map{|trio| trio.last}.join
words.each{|w|
i = s.index(w)
puts w + ' ' + trios[i].inspect + '..' + trios[i + tails[w]].inspect if i
}
}
end
table = %w(WVERTICALL ROOAFFLSAB ACRILIATOA NDODKONWDC DRKESOODDK OEEPZEGLIW MSIIHOAERA ALRKRRIRER KODIDEDRCD HELWSLEUTH)
words = %w(WEEK FIND RANDOM SLEUTH BACKWARD VERTICAL DIAGONAL WIKIPEDIA HORIZONTAL WORDSEARCH)
f129(table, words)
0141デフォルトの名無しさん
2014/02/11(火) 18:19:57.74↓
VERTICAL [0, 1, "V"]..[0, 8, "L"]
SLEUTH [9, 4, "S"]..[9, 9, "H"]
RANDOM [1, 0, "R"]..[6, 0, "M"]
BACKWARD [1, 9, "B"]..[8, 9, "D"]
HORIZONTAL [9, 0, "H"]..[0, 9, "L"]
WIKIPEDIA [9, 3, "W"]..[1, 3, "A"]
DIAGONAL [8, 6, "D"]..[1, 6, "L"]
WORDSEARCH [0, 0, "W"]..[9, 9, "H"]
FIND [1, 4, "F"]..[4, 7, "D"]
0142デフォルトの名無しさん
2014/02/11(火) 18:22:19.500143デフォルトの名無しさん
2014/02/11(火) 19:27:28.93勘違いして別の問題のコード書いてた設計そのまま使ったので結果的に損した感じ。
初見の選定眼って大事!Orz
0144デフォルトの名無しさん
2014/02/11(火) 19:50:50.70#module
#defcfunc is_match array field, int x, int y, int c
if y<0 or y>=length(field) : return 0
if x<0 or x>=strlen(field.y) : return 0
return peek(field.y, x)=c
#deffunc f129 array field, var word, local found_count
vx= 1, 1, 0,-1,-1,-1, 0, 1
vy= 0,-1,-1,-1, 0, 1, 1, 1
for sy, 0, length(field)
for sx, 0, strlen(field.cnt)
for d, 0, 8
is_found=1
x=sx : y=sy
repeat strlen(word)
if is_match(field, x, y, peek(word, cnt))=0 : is_found=0 : break
x+=vx.d : y+=vy.d
loop
if is_found : mes strf("%s %d,%d", word, sx+1, sy+1) : found_count++
next
next
next
if found_count=0 : mes strf("%s not found.", word)
return
#global
field="WVERTICALL","ROOAFFLSAB","ACRILIATOA","NDODKONWDC","DRKESOODDK","OEEPZEGLIW","MSIIHOAERA","ALRKRRIRER","KODIDEDRCD","HELWSLEUTH"
words="WEEK","FIND","RANDOM","SLEUTH","BACKWARD","VERTICAL","DIAGONAL","WIKIPEDIA","HORIZONTAL","WORDSEARCH"
foreach words
f129 field, words.cnt
loop
0145デフォルトの名無しさん
2014/02/11(火) 19:52:18.90for sx, 0, strlen(field.cnt)
↓
for sx, 0, strlen(field.sy)
0146デフォルトの名無しさん
2014/02/11(火) 21:23:26.33https://ideone.com/BO0SSu
0147135
2014/02/12(水) 05:09:52.50ttp://ideone.com/q1WcWA
ほぼC。>>132を勝手にいただいて書きなおした。
1/3になったんで>>135の時は相当おかしなこと考えてたんだな。
マダマダ修行が足りない。Orz
0148デフォルトの名無しさん
2014/02/12(水) 17:31:15.91長方形状の盤面が与えられますので、その中に畳を敷いて下さい。
ただし、畳の縁が盤面を突っ切ってはいけません。
例:
5x6の場合、この盤面は矢印で示した2箇所がNG。
┌┬┬─┬┬┐
││├┬┤││
├┴┤│├┴┤
├┬┴┼┼─┤←
│├─┤├─┤
└┴─┴┴─┘
↑
一方、この盤面は突っ切りがないのでOK。
┌─┬┬─┬┐
├┬┤├─┤│
││├┴┬┼┤
├┼┴┬┤││
│├─┤├┴┤
└┴─┴┴─┘
入出力の形式:
自由です。標準入出力でもファイルでもソースに直書きでも構いません。
ヒント:
対称盤面を除かずにカウントした場合、条件に当てはまる盤面数は次の通り。
5x6→6個
5x8→108個
6x6→0個
6x7→124個
0149デフォルトの名無しさん
2014/02/12(水) 19:55:50.60再帰関数で解こうと思ったがうまく敷き詰めるのもできないなー。
リファレンス求む。
0150デフォルトの名無しさん
2014/02/12(水) 20:16:40.40リファレンス……模範解答ってことか?
参考になるかは分からんが、昔Cで書いたのがこんな感じ。
(stdin部分をコメントアウトしている)
http://codepad.org/csbtDZ5M
0152デフォルトの名無しさん
2014/02/12(水) 21:08:00.99あら、ちゃんと出来てるなー。
俺は謎のバグが取れなくて泣いてるよ。なぜだーーー。
あと、どういうのが正常系の配列なのかの定義がよくわからん。
0153148
2014/02/12(水) 21:30:39.85「突っ切る」イメージは>>148以上に説明しようがないのが辛いところです
(要するに、全ての縦/横の筋に対して、1枚でも畳が横切っていればOKということ)
どう実装するかは頭を捻ってもらうしか……
0154149
2014/02/12(水) 21:40:03.46正直、ギブアップなので、コード晒そうと思ったんだが。。。
これでは収まりが付かないので移植してみるか。
万が一うまく言ったらアップする。
0155デフォルトの名無しさん
2014/02/12(水) 21:46:33.21「盤の辺と同じ長さの直線が四辺以外に生じてはならない」とか、
「盤面を分断する直線はNG」とか、そういうことだと思う。
>>148の図を元にNGとされる直線を太線で示すとこうかな。
┌┬┬─┰┬┐
││├┬┨││
├┴┤│┠┴┤
┝┯┷┿╋━┥
│├─┤┠─┤
└┴─┴┸─┘
0156デフォルトの名無しさん
2014/02/12(水) 22:35:03.25http://codepad.org/XjgdObG6
0158156
2014/02/12(水) 23:00:09.39HSP が遅いってのも少しはあるけど
アルゴリズムが悪いだけ
再帰呼び出しで畳をすべて敷き詰めてみてから
分断する線がないかどうかチェックしてる
縦方向に分断する線について考えるとき
横幅 6 なら 5本 の可能性がある
畳を横向きに置いたとき
対応する縦線に対応するカウンタを増やす
最終的にカウンタが 0 の線があれば
分断されていると判断できる
横方向に分断する線についても同様に考える
カウンタを増やす理由は
1、0 だけでやると元に戻すときに変更前の値を保存しておかないといけないから
面倒くさいという理由
>>156 では畳に1〜 の番号を振って
カウンタも畳の番号と同じものを増減させてる
0159デフォルトの名無しさん
2014/02/12(水) 23:11:09.06ttp://ideone.com/jZJoae
ベターCに移植してみた。設計いいから簡単だった。変換がちょっとややこしいけど。
移植してみた感想?うーん。わからん!利点は、グローバル変数が消えました。位・・・。Orz
チャック関数が何やってるのかサッパリわからん。
うーん。脱力。
ttp://ideone.com/IZDTEt
上のようなコードを移植前に書いていたがダサすぎる。
俺に才能をクレ。Orz
0160148
2014/02/12(水) 23:18:35.82あー、私が書いたコードの場合はちゃんと枝刈りするから速いんでしょうね……
(明らかにこれは駄目だ、と判定されたら次の畳を置かない)
>>159
check関数では、「明らかに駄目」な盤面ならfalse(0)を返すようにしています
盤面データは、「0なら置かれていない、1以上(畳の番号)なら置かれている」として、
水平・垂直方向にそれぞれ走査してチェックしています。……まあ要するに、
「筋の両側のペアを見て、もし筋の両側が完全には埋まっていなかったり、
筋を跨ぐ方向に畳が存在した場合はチェックをパスする(駄目扱いしない)」
ってことなんですけどね
0161デフォルトの名無しさん
2014/02/12(水) 23:41:06.71import itertools, copy
def f148(tate, yoko):
area = [[None for y in range(yoko)] for x in range(tate)]
result = dict()
def f148r(area, tate, yoko, n=0):
for x,y in itertools.product(range(yoko), range(tate)):
if not area[y][x]:
for (dx,dy) in [(1,0), (0,1)]:
if x+dx<yoko and y+dy<tate:
if not area[y+dy][x+dx]:
area_copy = copy.deepcopy(area)
area_copy[y][x], area_copy[y+dy][x+dx] = u"→↓"[dy], u"←↑"[dy]
f148r(area_copy, tate, yoko, n+1)
return
elif y != tate-1:
if x == yoko-1 and all(c in u"→←↑" for c in area[y]): return
else:
if x != yoko-1 and all(c in u"←↑↓" for c in [area[i][x] for i in range(len(area))]): return
else:
key = "".join("".join(line) for line in area)
if not result.has_key(key): result[key] = [1, area]
else: result[key][0] += 1
f148r(area, tate, yoko)
print "<result>", len(result.keys())
for key in sorted(result.keys(), lambda x,y: cmp(x[0],y[0]))[-3:]:
n,a = result[key]
print "(%d)" % (n)
for x in a: print "".join(x)
f148(6,7)
0162デフォルトの名無しさん
2014/02/12(水) 23:48:08.06<result> 124
(1)
↓↓→←↓→←
↑↑→←↑↓↓
↓→←→←↑↑
↑→←↓→←↓
→←↓↑→←↑
→←↑→←→←
(1)
↓→←→←→←
↑→←→←↓↓
→←→←↓↑↑
↓→←↓↑→←
↑→←↑→←↓
→←→←→←↑
(1)
↓→←→←→←
↑→←↓→←↓
→←↓↑→←↑
→←↑→←↓↓
↓↓→←↓↑↑
↑↑→←↑→←
0164156
2014/02/13(木) 00:21:35.43if x>=length(field) : x=0 : y++
↓
if x>=length(field) {
if y+1<length2(field) : if cnt_v(y)=0 : return
x=0
y++
}
>trueと比較するのは個人的な流儀なのでこれは曲げれん。
記述性/可読性に関する個人的な見解に異論を挟むつもりはまったくないのだけれども、
こと、C/C++ に関しては true/false との比較では、単に可読性の問題ではすまないと考えているので、 >>113 が教条主義とはどうしても思えない。
歴史的事情なのかどうかは定かではないが、C/C++ では「true/false」は「非零/零」の対立に対応するので(isalpha() とかね)、
「== true」は、それをみただけで、「まずい」、と感じるセンスが必要なのかもしれないかと。
でも、最近、お題についていけないかわいそうな状態の私がこれ以上の意見を述べるのは、ここではちと身の程知らず
なにかお題を解いたら、これについてちょっと説明を考えてみますね、最近のお題は結構むずかしいなあ‥‥
0166デフォルトの名無しさん
2014/02/13(木) 10:17:51.750168デフォルトの名無しさん
2014/02/13(木) 13:38:15.340169デフォルトの名無しさん
2014/02/13(木) 14:23:52.850170デフォルトの名無しさん
2014/02/13(木) 17:43:49.69m=3 -> 1/3,1/2,2/3
m=5 -> 1/5,1/4,1/3,2/5,1/2,3/5,2/3,3/4,4/5
0171デフォルトの名無しさん
2014/02/13(木) 18:31:06.45もうクズ呼びでもいいやとでも思っているのだろうか……>QZ
0172デフォルトの名無しさん
2014/02/13(木) 20:24:19.46ム板のコテは自虐入ってるくせに非難されてもメゲないという地味にウザい性格の奴が多いようで
0173デフォルトの名無しさん
2014/02/13(木) 21:07:45.02この問題いいの?
某所からのパクりじゃない?
0174デフォルトの名無しさん
2014/02/13(木) 21:17:35.87ttp://ideone.com/0nAThz
保険にちょっと大げさに警告文書いておいた。訴訟もじさないなら流用してミソ。
>>173ソースプリーズ。
畳に比べたら簡単。ほぼC。
0175デフォルトの名無しさん
2014/02/13(木) 21:42:17.70(defun f (m)
(let ((rs (loop for n from 1 upto (1- m)
nconc (loop for d from 1 upto m for r = (/ n d) collect r))))
(sort (remove-duplicates (remove-if (complement (lambda (x) (< 0 x 1)))
rs))
#'<)))
(loop for m from 2 upto 10 do (format t "~D => ~S~%" m (f m)))
2 => (1/2)
3 => (1/3 1/2 2/3)
4 => (1/4 1/3 1/2 2/3 3/4)
5 => (1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5)
6 => (1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6)
7 => (1/7 1/6 1/5 1/4 2/7 1/3 2/5 3/7 1/2 4/7 3/5 2/3 5/7 3/4 4/5 5/6 6/7)
0176デフォルトの名無しさん
2014/02/13(木) 22:13:46.500177デフォルトの名無しさん
2014/02/13(木) 22:15:03.21回答者の気まぐれによる。
あった方がいい。
0178デフォルトの名無しさん
2014/02/13(木) 22:24:39.560179174
2014/02/13(木) 22:30:07.380180デフォルトの名無しさん
2014/02/13(木) 23:29:46.18import Data.List (nub, sort)
import Data.Ratio
f170 :: Integral a => a -> [Ratio a]
f170 m = sort . nub $ [a % b | b <- [2..m], a <- [1..b-1]]
main :: IO ()
main = flip mapM_ [3,5] $ print . f170
-- [1 % 3,1 % 2,2 % 3]
-- [1 % 5,1 % 4,1 % 3,2 % 5,1 % 2,3 % 5,2 % 3,3 % 4,4 % 5]
0181デフォルトの名無しさん
2014/02/14(金) 00:59:38.56| fractions |
fractions := [:m | ((2 to: m) gather: [:n | (1 to: n-1) / n]) asSet asSortedArray].
fractions value: 3. "=> {(1/3) . (1/2) . (2/3)} "
fractions value: 5. "=> {(1/5) . (1/4) . (1/3) . (2/5) . (1/2) . (3/5) . (2/3) . (3/4) . (4/5)} "
0182デフォルトの名無しさん
2014/02/14(金) 05:12:23.78m=3; ts(); sorted({`1r nmrtr/dnmntr for dnmntr in range(1,m+1) for nmrtr in range(1,dnmntr)})
===============================
[1/3, 1/2, 2/3]
m=5; ts(); sorted({`1r nmrtr/dnmntr for dnmntr in range(1,m+1) for nmrtr in range(1,dnmntr)})
===============================
[1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5]
0183デフォルトの名無しさん
2014/02/14(金) 07:40:02.13f:=method(m,g(0,1,1,1,m))
g:=method(a,b,c,d,n,
if(b+d<=n,
g(a,b,a+c,b+d,n)
write(a+c,"/",b+d," ")
g(a+c,b+d,c,d,n)
)
)
Io> f(3)
1/3 1/2 2/3 ==> false
Io> f(5)
1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 ==> false
0184174
2014/02/14(金) 18:06:37.53みんな、どうやって既約判定してるのか全然読めない俺の頭が恨めしい。
>>173が逃げたのでブラフは一応気にしなくていいよ。このスレ内ではね。
0185デフォルトの名無しさん
2014/02/14(金) 18:17:36.81#module
#deffunc swap var a, var b, local c
c=a : a=b : b=c
return
#defcfunc gcd int a, int b
if b=0 : return a
return gcd(b, a\b)
#defcfunc f170 int n, local i, local j, local ans_double, local ans_frac, local ans_count, local ret
for i, 2, n+1
for j, 1, i
if gcd(j, i)=1 {
ans_double(ans_count)=double(j)/i
ans_frac(ans_count)=strf("%d/%d", j, i)
ans_count++
}
next
next
sdim ret
for i, 0, ans_count
for j, 0, ans_count-1-i
if ans_double(j)>ans_double(j+1) {
swap ans_double(j), ans_double(j+1)
swap ans_frac(j), ans_frac(j+1)
}
next
ret=strf("%s ", ans_frac(ans_count-1-i))+ret
next
return ret
#global
mes f170(3)
mes f170(5)
0186174
2014/02/14(金) 19:17:38.74いやー、ほんとユーグリッドの互除法無しでどうやって既約判定してるのか全然読めんわ。
なんか他アルゴリズムあるんだろうけど、俺にはわからないなー。Orz
ほんっと、数学ダメなんだよね。
0187デフォルトの名無しさん
2014/02/14(金) 19:41:58.71f=:3 :'~./:~(#~1&>),%/~x:>:i.y'
f 3
1r3 1r2 2r3
f 5
1r5 1r4 1r3 2r5 1r2 3r5 2r3 3r4 4r5
0188デフォルトの名無しさん
2014/02/14(金) 19:53:25.76#module
#deffunc ans_add double d, str f, array ans_double, array ans_frac, var ans_count, local i, local j
for i, 0, ans_count
if ans_double(i)=d : return
if ans_double.i>d : _break
next
for j, ans_count, i, -1
ans_double(j)=ans_double(j-1)
ans_frac(j)=ans_frac(j-1)
next
ans_double(i)=d
ans_frac(i)=f
ans_count++
return
#defcfunc f170 int n, local i, local j, local ans_double, local ans_frac, local ans_count
for i, 2, n+1
for j, 1, i
d=double(j)/i
f=strf("%d/%d", j, i)
ans_add d, f, ans_double, ans_frac, ans_count
next
next
sdim ret
repeat ans_count
ret+=ans_frac(cnt)+" "
loop
return ret
#global
mes f170(3)
mes f170(5)
0189174
2014/02/14(金) 19:56:33.38ホント、何もしないって。
0191174
2014/02/14(金) 20:15:28.50たまたま被ったのか。そーりー。
これでしばらく黙ります。しーゆー。
0192174
2014/02/14(金) 20:22:59.01慣れないことはするもんじゃないね。トホホ・・・。Orz
0193175
2014/02/14(金) 20:49:00.82>>175ですが、既約分数の判定は(陽には)していません。Common Lispでは除算
の結果が整数で表せない場合、分数が返されますが、それらは既に約分されて
います(他の分数を扱える言語やライブラリでもそうなんじゃないかな)。
(/ 2 4) ;=> 1/2
;; リテラルでも
2/4 ;=> 1/2
なので、分子(n)と分母(d)を列挙してそれらを除算(/ n d)した数のリストをま
ず作り、そこから重複要素を取除くことで目的の結果を得ています。
0194デフォルトの名無しさん
2014/02/14(金) 21:16:33.96結城浩の日記 - 2003年12月30日 (火) - 既約分数
http://www.hyuki.com/diary/dia0312.html#i30
Scheme:数遊び:既約分数
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E6%95%B0%E9%81%8A%E3%81%B3%3A%E6%97%A2%E7%B4%84%E5%88%86%E6%95%B0
上記問題に対するSchemeによる回答。
「Haskellによるエレガントな解法」へのリンクがあったらしいが404。一つだけInternet Archiveに残ってた。
http://web.archive.org/web/20060513102938/http://www.sampou.org/cgi-bin/cahier.cgi?Cahier%3a2004-01-02
0195184==174
2014/02/14(金) 21:42:05.70>>193
まず、反省なんだけど。
俺、既約って言うことについてWikipediaで読んだくらいの知識しか無いんだわ。
>>193読んでてそう言えば小学校で習ったかもと思い出した。俺、算数もできなくなってるよ。Orz
んで、やっぱり高級言語はそうでないとね。C系列はライブラリなさすぎなんだよなぁ。
解説ありがとう。色々納得いっていい勉強になりました。
アルゴリズムはこうか。
既約とは分数の約分がすでに終わっていることである。
分母分子の小さなものの答えが小さい方から貯めていって、
すでにあったらそれは分母分子が規約分数の倍数である。
なのでそれを取り除く。って感じか。
なるほど。前は違うこと考えて解いてたわ。(汗
>>170
ttp://ideone.com/g49nVI
コードは思うところがあって共変しようと思って>>188を参考に書いてみた。
これで循環。キモいな俺。
>>194
ソースありがとう。
なんかのコンテストじゃなくてよかったよ。
0196デフォルトの名無しさん
2014/02/14(金) 22:11:46.50std::map 使えばいいのにw
0197デフォルトの名無しさん
2014/02/14(金) 22:16:45.46あ、やっぱ言われた。
書き終わって、あーこれエラトステネスの篩と同じ系統だ。
と理解して納得したまでが今日のハイライト。
まぁ、暇なので書いてみるよ。
0198デフォルトの名無しさん
2014/02/14(金) 22:39:33.52ttp://ideone.com/gP0wYa
書いたよ。アルゴリズムの理解が済んでると早いね。ただ合ってるかしらんけど。
ソートはMapが勝手にやってくれるので手でやる必要がない。
それくらいかな。
0199デフォルトの名無しさん
2014/02/15(土) 11:41:05.83http://ideone.com/iozPxO
0200デフォルトの名無しさん
2014/02/15(土) 15:46:46.02function f(m)
local r={}
for i=m,2,-1 do
for j=i-1,1,-1 do r[j/i]=j.."/"..i end
end
local d={}
for k,v in pairs(r) do table.insert(d,k) end
table.sort(d)
for i,v in pairs(d) do io.write(r[v].." ") end
print()
end
> f(3)
1/3 1/2 2/3
> f(5)
1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5
0201デフォルトの名無しさん
2014/02/16(日) 10:59:32.12入力:2つの正整数
出力:筆算の計算過程(例:http://codepad.org/lPPcBt2p)
0202デフォルトの名無しさん
2014/02/16(日) 11:34:15.78#module
#defcfunc n_str str s, int n, local buf
sdim buf
repeat n
buf+=s
loop
return buf
#deffunc f171 int a, int b_, local result, local result_len, local b, local x
b=b_
result=a*b
result_len=strlen(str(result))
mes strf(strf(" %%%dd", result_len), a)
mes strf(strf("x%%%dd", result_len), b)
mes n_str("-", result_len+1)
repeat
if b=0 : break
x=a*(b\10)
if x : mes strf(strf(" %%%dd", result_len-cnt), x)
b=b/10
loop
mes n_str("-", result_len+1)
mes strf(strf(" %%%dd", result_len), result)
return
#global
f171 1234, 567
f171 1234, 1001
0203デフォルトの名無しさん
2014/02/16(日) 14:25:04.18#include <cstdio>
#include <cmath>
unsigned int GetUIntLen(unsigned int x) {
unsigned int len = 0;
do {len++, x /= 10;} while (x);
return len;
}
void OutputSpace(unsigned int len) {
for (unsigned int i = 0; i < len; i++) std::putchar(' ');
}
void OutputLine(unsigned int len) {
for (unsigned int i = 0; i < len; i++) std::putchar('-'); std::putchar('\n');
}
void func(unsigned int a, unsigned int b) {
unsigned int ans = a * b, a_len = GetUIntLen(a), b_len = GetUIntLen(b), ans_len = GetUIntLen(ans), DelSpace = 0, zero, output;
std::putchar(' '), OutputSpace(ans_len - a_len), std::printf("%u\n", a);
std::putchar('x'), OutputSpace(ans_len - b_len), std::printf("%u\n", b);
for (OutputLine(ans_len + 1), zero = 0; b; DelSpace += 1 + zero, zero = 0, b /= 10) {
while (b % 10 == 0) {zero++, b /= 10;}
output = a * (b % 10) * std::pow(10, zero);
if (GetUIntLen(output / std::pow(10, zero)) == a_len) std::putchar(' ');
OutputSpace(ans_len - a_len - DelSpace - zero), std::printf("%u\n", output);
}
OutputLine(ans_len + 1), std::printf(" %u\n", ans);
}
int main() {
func(1234u, 567u), func(1234u, 1001u), func(99u, 909090u);
return 0;
}
0204デフォルトの名無しさん
2014/02/16(日) 15:53:24.46; Common Lisp
(defun f (n m)
(let* ((result (* n m))
(length (1+ (length (princ-to-string result))))
(kugiri (make-string length :initial-element #\-)))
(format t "~@?~%x~@?~%~a~%~@?~a~% ~d~%"
(format nil "~~~dd" length) n
(format nil "~~~dd" (1- length)) m
kugiri
(format nil "~~{~~~d@a~%~~}" length)
(loop for c across (nreverse (princ-to-string m))
for zero = 0 then (if (zerop i) (1+ zero) 0)
for space = 0 then (if (zerop i) space (1+ space))
for i = (* n (parse-integer (string c)))
unless (zerop i)
collect
(concatenate 'string
(princ-to-string i)
(make-string zero :initial-element #\0)
(make-string space :initial-element #\ )))
kugiri
result)))
0205デフォルトの名無しさん
2014/02/16(日) 16:40:38.41ほぼC。速度で負けてしまったが、まぁいいんだ。
今回は表示系頑張ったよ。データが適当なので扱うの大変かも。
っていうか、コード片の流用禁止な。アルゴリズムは別にいいよ。
っていうかあってるか?
0206デフォルトの名無しさん
2014/02/16(日) 18:46:11.79http://ideone.com/N9C270
0207デフォルトの名無しさん
2014/02/16(日) 19:25:13.52def f201(a, b):
mid = [(i, a*long(s)) for (i,s) in enumerate(reversed(str(b))) if s != "0"]
res = long(a)*long(b)
w = len(str(res)) + len("x")
aa = [str(a), str(b), "-"*w] + [str(x) + " "*i for (i,x) in mid] + ["-"*w, str(res), ""]
ss = ["".join(list(s)).rjust(w) for s in aa]
ss[1] = "x" + ss[1][1:]
for s in ss:
print s
f201(1234, 567)
f201(1234, 1001)
f201(12, 1999808070605040302010) #otsu
0208204
2014/02/16(日) 19:55:56.33http://ideone.com/ruEXDp
0209デフォルトの名無しさん
2014/02/16(日) 22:50:46.50#include <stdio.h>
#define SPACE(n) (&"________________________________"[32-(n)]) /* ほんとは下線=SP */
#define BAR(n) (&"--------------------------------\n"[32-(n)])
static int len(unsigned long long x) {
int n; for (n = 0; n++, x /= 10, x;); return n;
}
static void f201(unsigned int a, unsigned int b) {
unsigned long long d, ans = (unsigned long long)a*b;
unsigned int i, n, w = len(ans);
printf(" %s%d\n", SPACE(w-len(a)), a);
printf("x%s%d\n", SPACE(w-len(b)), b);
printf(BAR(w+1));
for (i = 0, n = len(b); i < n; b /= 10, i++)
if (d = (b % 10))
printf(" %s%lld%s\n", SPACE(w-i-len(d*a)), d*a, SPACE(i));
printf(BAR(w+1));
printf(" %s%lld\n\n", SPACE(w-len(ans)), ans);
}
int main(void) {
f201(1234, 567);
f201(1234, 1001);
return 0;
}
0211デフォルトの名無しさん
2014/02/17(月) 02:20:01.03| hissan |
hissan := [:a :b |
| res bar |
a := a asString. b := b asString.
res := {a. b. a * b} asOrderedCollection.
res add: (bar := String new: (res last size max: res second size + 2) withAll: $-) before: res last.
res := res collect: [:each | each forceTo: bar size paddingStartWith: $_].
res second at: 1 put: $x.
(b asArray collectWithIndex: [:dig :idx | a * dig asString forceTo: bar size - b size + idx paddingStartWith: $_])
do: [:each | each asInteger isZero ifFalse: [res add: each after: bar]].
res add: bar before: res last; asStringWithCr].
hissan value: 1234 value: 567.
=>
__1234
x__567
------
__8638
_7404
6170
------
699678
0212デフォルトの名無しさん
2014/02/20(木) 16:59:36.42(a) 4つ以上連続した数を消す (複数ある場合は一番左を優先する)
(b) (a)を繰り返す
例:
-------
in : 11233344433331111143322211
out:
11233344433331111143322211
1123334441111143322211
11233344443322211
1123333322211
11222211
1111
-------
in : 1122224411112222
out:
1122224411112222
114411112222
11442222
1144
-------
in : 211222211333312
out:
211222211333312
21111333312
2333312
212
0213デフォルトの名無しさん
2014/02/20(木) 18:19:37.46ttp://ideone.com/XqaHUW
ほぼC。今回は消去法で実装。あってるかな?
一ラインずつでももっと一気にガッツリ消したほうが早いと思う。
0214デフォルトの名無しさん
2014/02/20(木) 18:31:12.190215デフォルトの名無しさん
2014/02/20(木) 18:40:17.00use 5.016;
use warnings;
sub f {
my $d = $_[-1];
return ($d =~ s/(\d)\1{3,}// ? f(@_, $d) : @_);
}
say join("\n", f('11233344433331111143322211'));
say join("\n", f('1122224411112222'));
say join("\n", f('211222211333312'));
0216デフォルトの名無しさん
2014/02/20(木) 18:41:11.97#include <iostream>
#include <string>
#include <cstddef>
#define NUM 4
void func(std::string s) {
std::size_t p, i, n;
char c;
std::cout << s << '\n';
for (p = 0; p < s.size(); ) {
c = s[p];
for (i = p + 1, n = 1; c == s[i]; i++, n++);
if (n >= NUM) {
s.erase(p, n);
std::cout << s << '\n';
p = 0;
} else {
p++;
}
}
std::cout << "-------" << '\n';
}
int main() {
func("11233344433331111143322211");
func("1122224411112222");
func("211222211333312");
return 0;
}
0217デフォルトの名無しさん
2014/02/20(木) 18:55:55.43途中解も出す必要があるのが面倒くさい……
C++で書こうかと思ったがだるいのでHSPに変更
http://codepad.org/u9j7BfcR
0218デフォルトの名無しさん
2014/02/20(木) 19:23:42.84無駄な検索してた
p++;
↓
p += n;
0219デフォルトの名無しさん
2014/02/21(金) 00:09:30.20f <- function(s)
local r = 1
while r == 1 do
print(s)
s,r = s:gsub("(.)%1%1%1","",1)
end
end
> f("211222211333312")
211222211333312
21111333312
2333312
212
0220デフォルトの名無しさん
2014/02/21(金) 00:38:43.53| dropQuad |
dropQuad := [:str |
| ra idx |
Transcript showln: str.
ra := str asString.
[(idx := (ra := ra as: RunArray) runs findFirst: [:len | len >= 4]) isZero] whileFalse: [
ra runs at: idx put: 0.
Transcript showln: (ra := ra as: String)
]
].
Transcript open.
dropQuad value: 11233344433331111143322211.
dropQuad value: 1122224411112222.
dropQuad value: 211222211333312.
0221デフォルトの名無しさん
2014/02/21(金) 01:59:38.30VCと同等の環境ってなかなか置いてないね。
未満だとCodepad使えばいいんだけど。foreachとauto使えないのはやだなー。
0222デフォルトの名無しさん
2014/02/21(金) 02:38:17.22間違えた。
f <- は f = です。
0223デフォルトの名無しさん
2014/02/21(金) 03:29:21.31Python 3
http://ideone.com/ZNq2Hz
0224デフォルトの名無しさん
2014/02/21(金) 19:31:04.950225デフォルトの名無しさん
2014/02/21(金) 19:58:20.640226デフォルトの名無しさん
2014/02/21(金) 20:45:14.74http://ideone.com/Ry0hWl
文句ばっか言ってるのもアレなんで、一応書いたよ。
最初に言っておくが美的センスは絶望的だ。
JSで書いたほうが効率的だな。書かないけど。
動作確認はIE11でやった。汚い縦伸びが見えた。
以上だ。
0227デフォルトの名無しさん
2014/02/22(土) 01:35:24.56これってfizzbizzみたいに凝って書いたほうが評価高いの?
0228デフォルトの名無しさん
2014/02/22(土) 05:11:32.780229デフォルトの名無しさん
2014/02/22(土) 06:04:46.54f:=method(a,b,
for(y,-a,a,
writeln("<hr width=\"",(((1-y*y/(a*a))*b*b)sqrt*40)round,"\">")
)
)
0230デフォルトの名無しさん
2014/02/22(土) 06:28:14.00あれはいかようにも書けるけど、設計を見る問題だと思ってるよ。
関数で書くより、オブジェクト思考で設計すると相当難易度上がる。
だから、熟練プログラマほど難しいんだってさ。
お題:http://toro.2ch.net/test/read.cgi/tech/1364631733/12
Java: http://toro.2ch.net/test/read.cgi/tech/1313183984/190,191
C++: http://toro.2ch.net/test/read.cgi/tech/1313183984/730
0232デフォルトの名無しさん
2014/02/22(土) 11:14:53.96use 5.016;
use warnings;
sub hr { qq{<hr style="padding: 0; margin: 0 auto; width: $_[0]">\n} }
sub _width { map{ int(sqrt((1 - ($_ / $_[1]) ** 2) * $_[0] ** 2)) } (0 .. $_[1] - 1) }
sub f { sub{ map{ hr($_ * 2) } (reverse(@_), @_[1 .. $#_]) }->(_width($_[0] / 2, $_[1] / 2 + 1)) }
say f(240, 80);
0233デフォルトの名無しさん
2014/02/22(土) 12:12:46.13import math
def f224(a, b, c=0.0):
""" 楕円を<hr>で表示するHTMLを出力
楕円 : (x/a)^2 + (y/b)^2 + 2*c*(x/a)*(y/b) = 1
ある y における x の座標: x = a*(c*y/b + sqrt((c*c-1)*y/b + 1))
y の範囲(最大値) : y = b/sqrt(1-c*c)
"""
a, b, c = [float(x) for x in (a, b, min(c,1.0))]
qq = []
max_y = b / math.sqrt(1-c*c)
for i in range(int(-max_y-0.5), int(max_y+0.5)+1):
Y = float(i) / b
D = max((c*c - 1.0)*Y*Y + 1.0, 0)
x1 = a*(-c*Y - math.sqrt(D))
x2 = a*(-c*Y + math.sqrt(D))
qq.append((x1, x2-x1))
ofs = min(x1 for (x1,w) in qq)
qq = [(int(x1-ofs+0.5), int(w)) for (x1,w) in qq]
print "<html>\n<head>\n</head>\n<body>"
for (x,w) in qq:
print "<hr width=%d align=left style=\"margin-left:%dpx;\">" % (w, x)
print "</body>\n</html>"
f224(300,20,0.5)
0234デフォルトの名無しさん
2014/02/22(土) 12:52:15.52誤 a, b, c = [float(x) for x in (a, b, min(c,1.0))]
正 a, b, c = [float(x) for x in (a, b, min(max(c,-1.0),1.0))]
0235デフォルトの名無しさん
2014/02/22(土) 16:33:19.55cが何を表しているのか解らなかったので実行してみた。
おお、傾きの度合いだったのか。
0236デフォルトの名無しさん
2014/02/22(土) 17:23:58.73| trait |
trait := Trait named: #FizzBuzz uses: #() category: 'FizzBuzz-Traits'.
trait compile: 'fizzBuzz: spec
| assoc |
(self isKindOf: Integer) ifTrue: [Processor activeProcess environmentAt: #fizzBuzz put: self->''''].
assoc := Processor activeProcess environmentAt: #fizzBuzz.
^(assoc key isDivisibleBy: spec key)
ifTrue: [assoc value: assoc value, spec value; value]
ifFalse: [assoc value ifEmpty: [assoc key]]'.
trait compile: 'fizz ^self fizzBuzz: 3->''Fizz'''.
trait compile: 'buzz ^self fizzBuzz: 5->''Buzz'''.
trait compile: 'gizz ^self fizzBuzz: 7->''Gizz'''.
{Integer. String} do: [:class | class uses: trait].
1 fizz buzz. "=> 1 "
3 fizz buzz. "=> 'Fizz' "
5 fizz buzz. "=> 'Buzz' "
15 fizz buzz. "=> 'FizzBuzz' "
7 fizz buzz gizz. "=> 'Gizz' "
21 fizz buzz gizz. "=> 'FizzGizz' "
35 fizz buzz gizz. "=> 'BuzzGizz' "
105 fizz buzz gizz. "=> 'FizzBuzzGizz' "
105 fizz gizz buzz. "=> 'FizzGizzBuzz' "
0237デフォルトの名無しさん
2014/02/22(土) 17:26:46.97999.fizz.buzz は "Fizz" の間違い?
失礼しました、ご指摘のとおり問題の間違いです。
3 でも 5 でも 7 でも割り切れなかったら、その数字をそのまま出力ください。
1
Fizz
Buzz
Gizz
FizzBuzz
FizzGizz
BuzzGizz
FizzBuzzGizz
997
0239デフォルトの名無しさん
2014/02/22(土) 18:53:12.94module FizzBuzz
def fizz_buzz(spec)
Thread.current[:fizzbuzz] = [self, ""] if kind_of?(Integer)
state = Thread.current[:fizzbuzz]
state[0] % spec[0] == 0 ?
state[1] += spec[1] :
(state[1].empty? ? state[0] : state[1])
end
def fizz; fizz_buzz([3, "Fizz"]) end
def buzz; fizz_buzz([5, "Buzz"]) end
def gizz; fizz_buzz([7, "Gizz"]) end
end
[Integer, String].each{ |klass| klass.include(FizzBuzz) }
1.fizz.buzz #=> 1
3.fizz.buzz #=> "Fizz"
5.fizz.buzz #=> "Buzz"
15.fizz.buzz #=> "FizzBuzz"
7.fizz.buzz.gizz #=> "Gizz"
21.fizz.buzz.gizz #=> "FizzGizz"
35.fizz.buzz.gizz #=> "BuzzGizz"
105.fizz.buzz.gizz #=> "FizzBuzzGizz"
105.fizz.gizz.buzz #=> "FizzGizzBuzz"
999.fizz.buzz #=> "Fizz"
0240デフォルトの名無しさん
2014/02/22(土) 18:59:35.22そのJavaとかC++の解答例ってお題の要求仕様を無視してないか?
双方ともオープンクラスじゃないから、buzz(fizz(1)) で 1、
buzz(fizz(15)) で "FIzzBuzz" とかを返せるようにしないと。
0241デフォルトの名無しさん
2014/02/22(土) 19:38:56.78ttp://ideone.com/qcjk9X
C++。自分が真面目に設計すると大体こんな感じになる。実装手抜きだけど。
一応簡単に拡張できるようにはなってるんだが、必要だっただろうか・・・。Orz
0242デフォルトの名無しさん
2014/02/22(土) 19:47:56.240243241
2014/02/22(土) 20:37:25.68そのほうが勉強になる。
0244デフォルトの名無しさん
2014/02/22(土) 20:56:52.38>>240
0245デフォルトの名無しさん
2014/02/22(土) 21:03:25.19http://ideone.com/Osyt5g
0246デフォルトの名無しさん
2014/02/22(土) 21:30:43.91なるほど、これだったらクラスつかうんじゃなかったな。
>>245を参考にさせてもらう。
ま、評価結果自体を切り替えるのがホンモノですが、確かにその域までは無理でした‥‥
0248デフォルトの名無しさん
2014/02/22(土) 22:05:42.04ttp://ideone.com/AZIcMU
ベターC。これであってると思う?保守性メチャクチャ悪いんだけど。
今回はちゃんとBuzzにしたよ!
0249デフォルトの名無しさん
2014/02/22(土) 22:10:06.81逆に、スレッドローカル以外での実現方法はないものか。
換言すると、副作用を許さない関数型では絶対無理なんだろうか?
0250デフォルトの名無しさん
2014/02/22(土) 22:18:09.630251デフォルトの名無しさん
2014/02/22(土) 23:00:08.33class FizzBuzzInt(int):
def __init__(self, number, tests={"fizz":3, "buzz":5, "gizz":7}):
self.number = number
self.tests = tests
self.strings = []
def test(self, name):
if (self.number % self.tests[name]) == 0:
self.strings.append(name.capitalize())
return self
def __getattr__(self, name):
if name not in self.tests.keys():
raise AttributeError
return self.test(name)
def __str__(self):
if self.strings:
return "".join(self.strings)
return int.__str__(self)
def fizz(x):
if not isinstance(x, FizzBuzzInt): x = FizzBuzzInt(x)
return x.test("fizz")
def buzz(x):
if not isinstance(x, FizzBuzzInt): x = FizzBuzzInt(x)
return x.test("buzz")
def gizz(x):
if not isinstance(x, FizzBuzzInt): x = FizzBuzzInt(x)
return x.test("gizz")
print gizz(buzz(fizz(15)))
print FizzBuzzInt(21).fizz.buzz.gizz
どっちの書き方でもできるようにしました。
0252デフォルトの名無しさん
2014/02/22(土) 23:13:22.81module FizzBuzz
def fizz_buzz(n, msg)
Thread.current[:fizzbuzz] = [self, ""] if kind_of?(Integer)
state = Thread.current[:fizzbuzz]
state[0] % n == 0 ? state[1] += msg : (state[1] == "" ? state[0] : state[1])
end
def fizz; fizz_buzz(3, "Fizz") end
def buzz; fizz_buzz(5, "Buzz") end
def gizz; fizz_buzz(7, "Gizz") end
end
[Integer, String].each{ |klass| klass.include(FizzBuzz) }
1.fizz.buzz #=> 1
3.fizz.buzz #=> "Fizz"
5.fizz.buzz #=> "Buzz"
15.fizz.buzz #=> "FizzBuzz"
7.fizz.buzz.gizz #=> "Gizz"
21.fizz.buzz.gizz #=> "FizzGizz"
35.fizz.buzz.gizz #=> "BuzzGizz"
105.fizz.buzz.gizz #=> "FizzBuzzGizz"
105.fizz.gizz.buzz #=> "FizzGizzBuzz"
999.fizz.buzz #=> "Fizz"
0253デフォルトの名無しさん
2014/02/22(土) 23:27:14.72あー、これすげー。俺の実力では笑うしかない。
C++でやるときはどうすればいいかなー。
グローバル変数なしだとつらいなー。むー。
0254デフォルトの名無しさん
2014/02/22(土) 23:33:10.8115.fizz.buzz.gizz + "XXX" #=> "FizzBuzzXXX"
もしくは
buzz(fizz(1)) + 2 #=> 3
gizz(buzz(fizz(15))) + "XXX" #=> "FizzBuzzXXX"
となるかどうかで、要件を満たしているかが分かるからチェックしてみるといいと思うよ
0255デフォルトの名無しさん
2014/02/22(土) 23:40:31.53>>236
1 fizz buzz + 2. "=> 3 "
(1 fizz buzz + 2 buzz) fizz. "=> 'Fizz' "
15 fizz buzz, 'XXX'. "=> 'FizzBuzzXXX' "
0256デフォルトの名無しさん
2014/02/23(日) 00:13:01.99intはプリミティブ型でいかなるプロパティとかメソッドとか持ってないんだよ。
そういうのは全部ライブラリ関数とかの仕事なんだ。
DにはUFCSっていうのが有るんだけどね。
0257デフォルトの名無しさん
2014/02/23(日) 00:19:16.050259デフォルトの名無しさん
2014/02/23(日) 00:56:37.23FizzBuzzみたいな処理をオブジェクト思考で設計する同僚とか嫌すぎねぇ?
そういう書き方もできる頭を持った人間はそれはそれで有用だろうけど
必要もないのにそういう書き方する奴の書いたコードなんて触りたくない
0260デフォルトの名無しさん
2014/02/23(日) 01:34:01.03そういうテストだからねぇ。
ちなみにそれを信じてとある会社の入社応募でサンプル提出したら落とされました。
C言語で原始的かつ素朴に書いたんだけど。
まぁ、あれ1個で審査しろって言ってもしょうがないけど。
0261デフォルトの名無しさん
2014/02/23(日) 02:20:02.34FizzBuzzみたいな短いのは抜き打ちにその場でやらせるモノだろ。
まさか「あなたが書いたソースコードのサンプルを見せて下さい」
でFizzBuzz渡したのなら落とされて当然だけど、そんなことはない…よな?
0262デフォルトの名無しさん
2014/02/23(日) 05:03:50.69それそれ。Orz
まぁ、今は無事ニートだ。祝ってくれ。LOL
0263デフォルトの名無しさん
2014/02/23(日) 13:25:26.76http://ideone.com/4oU4k5
0264デフォルトの名無しさん
2014/02/23(日) 17:17:23.64http://ideone.com/nj1VFQ
dualvarを使う
http://ideone.com/ITkg5t
0265デフォルトの名無しさん
2014/02/23(日) 17:25:09.71よかった、捻ったFizzBuzz実装を求める会社は居なかったんだ・・・っ!
どんまい
0266デフォルトの名無しさん
2014/02/23(日) 19:18:10.31Fb := Object clone
Fb do(
n := nil
s := ""
f := method(x, a, b,
if(x type == "Number", n = x; s = "")
if(n % a == 0, s = s .. b, if(s == "", n, s))
)
)
fizz := method(Fb f(self, 3, "Fizz"))
buzz := method(Fb f(self, 5, "Buzz"))
gizz := method(Fb f(self, 7, "Gizz"))
0267デフォルトの名無しさん
2014/02/23(日) 19:20:28.56Io> 1 fizz buzz
==> 1
Io> 3 fizz buzz
==> Fizz
Io> 5 fizz buzz
==> Buzz
Io> 15 fizz buzz
==> FizzBuzz
Io> 7 fizz buzz gizz
==> Gizz
Io> 21 fizz buzz gizz
==> FizzGizz
Io> 35 fizz buzz gizz
==> BuzzGizz
Io> 105 fizz buzz gizz
==> FizzBuzzGizz
Io> 105 fizz gizz buzz
==> FizzGizzBuzz
0268デフォルトの名無しさん
2014/02/23(日) 21:36:58.49http://toro.2ch.net/test/read.cgi/tech/1391921013/291
291 名前:デフォルトの名無しさん[sage] 投稿日:2014/02/23(日) 18:00:19.87
問題:
Windowsのエクスプローラでリネームすることな可能なファイル名をパラメータとして受け入れ、
それをファイル単位でechoした後に自身を同一のパラメータで再帰呼び出しするバッチファイルを作成せよ
エクスプローラ上でバッチファイルに対象ファイルをD&Dした際と同じルールでのクオートを想定すること
なお、cmd.exeの組み込みコマンド以外は使用を禁止する
実行例:
C:\>a.bat C:\^`!%&$() 001.txt "C:\^`!%&$() 002.txt"
C:\^`!%&$() 001.txt
"C:\^`!%&$() 002.txt"
C:\^`!%&$() 001.txt
"C:\^`!%&$() 002.txt"
(以下略)
0269デフォルトの名無しさん
2014/02/23(日) 22:58:35.730270デフォルトの名無しさん
2014/02/23(日) 23:59:38.40(つーか実行例の一行目の表記から期待する動作を引き出すのは無理かも)
ってことじゃないかね
0271デフォルトの名無しさん
2014/02/24(月) 00:32:50.43powershell使えよ
0272デフォルトの名無しさん
2014/02/24(月) 10:58:02.900273デフォルトの名無しさん
2014/02/24(月) 12:10:15.380274デフォルトの名無しさん
2014/02/24(月) 12:22:27.07dualvar を使ったシンプルな解法は Perl ならではですね。
Perl 嫌いだけどちょっと見直した。
0275デフォルトの名無しさん
2014/02/25(火) 11:35:19.480276デフォルトの名無しさん
2014/02/25(火) 15:59:11.02% Prolog
リストの複製をつくる([],[]).
リストの複製をつくる([A|R1],[A|R2]) :- リストの複製を作る(R1,R2).
0277デフォルトの名無しさん
2014/02/25(火) 16:01:44.67% Prolog
リストの複製をつくる(L1,L2) :- findall(A,member(A,L1),L2).
0278デフォルトの名無しさん
2014/02/25(火) 16:20:20.02;;;Common Lisp
;;;リストの複製を作る
(defun Copy-list (lst)
(cond
((null lst) nil)
(t (cons (car lst)
(Copy-list (cdr lst))))))
0279デフォルトの名無しさん
2014/02/25(火) 18:48:03.12| arr0 arr1 arr2 arr3 |
arr0 := #('a' 'b' 'c').
arr1 := arr0 copy. "配列のみ複製し、各要素は再利用(シャローコピー)"
arr2 := arr0 deepCopy. "各要素を単純に複製したものに置き換えた配列を作成"
arr3 := arr0 veryDeepCopy. "要素間の等価関係も維持しつつ配列を複製"
arr0 first at: 1 put: $X. "元配列の第1要素を破壊的に変更してみる"
{arr0. arr1. arr2. arr3}. "=> #(#('X' 'b' 'c') #('X' 'b' 'c') #('a' 'b' 'c') #('a' 'b' 'c')) "
arr0 := #('a' 'b' 'c' 'd').
arr0 first == arr0 fourth. "=> false "
arr0 at: 4 put: arr0 first. "第4要素を第1要素に置き換え"
arr0 first == arr0 fourth. "=> true "
arr1 := arr0 copy.
arr2 := arr0 deepCopy.
arr3 := arr0 veryDeepCopy.
arr0 first at: 1 put: $X.
arr2 first at: 1 put: $Y.
arr3 first at: 1 put: $Z.
{arr0. arr1. arr2. arr3}. "=> #(#('X' 'b' 'c' 'X') #('X' 'b' 'c' 'X') #('Y' 'b' 'c' 'a') #('Z' 'b' 'c' 'Z')) "
arr0 := #('a' 'b' 'c' 'd').
arr0 at: 4 put: arr0. "第4要素を自分自身に置き換え"
arr0 fourth == arr0. "=> true "
arr1 := arr0 copy.
"arr2 := arr0 deepCopy. => 無限ループ "
arr3 := arr0 veryDeepCopy.
{arr1 fourth == arr1. arr3 fourth == arr3}. "=> #(false true) "
{arr1 fourth == arr0. arr2 fourth == arr0}. "=> #(true false) "
0280デフォルトの名無しさん
2014/02/25(火) 19:03:11.81ttp://ideone.com/MTSKdh
C++。配列の複製とstd::vectorの複製とvectorへ変換。
配列は扱いが面倒なので普段は使いません。STLを使いましょう。
境界線系のチェックもSTLなら簡単!
0281デフォルトの名無しさん
2014/02/25(火) 22:38:45.80sub f { map{ (ref $_ eq 'ARRAY') ? [ f(@{$_}) ] : $_ } @_ }
0282デフォルトの名無しさん
2014/03/01(土) 01:36:16.46のこりの数からとりのぞいた2個の数を求める。
例
3,1,2,6 -> 4,5
0283デフォルトの名無しさん
2014/03/01(土) 02:04:51.06それ、入力があらかじめ与えられていないとインチキできませんかね……?
(まっとうに考えれば「シャッフル(O(N))してバケットソート(O(N)後、先頭から見ていって足りない2数を探す(O(N))」
でいいが、「シャッフル(O(N))してから最後尾2つ以外を出力してから最後尾2つを出力する」という
操作で「同じ表示」になる)
0284デフォルトの名無しさん
2014/03/01(土) 02:27:16.11ソート禁止とは書いてないですね。
練習がてら書いてみるか。
0285283
2014/03/01(土) 02:30:32.35ビットボードとかですらバケットソートに該当するし
0286デフォルトの名無しさん
2014/03/01(土) 02:58:16.94C++。ピットボードで実装してみたんだが。遅かったか。
これより小さいコード書くのは結構大変だと思う。
std::vector<bool>の実装がタコだったりするので泣けるが。
0287デフォルトの名無しさん
2014/03/01(土) 03:27:40.12ttp://ideone.com/7YIxZx
ほぼC。遅い方を実装してみた。
ついでにドロップ値を可変にしてみた。
メモリは確かに食わないがプロセッサ依存ですなー。
これアレだ。
今から数字いうから抜けてるやつを探してね。
って言って高速で数字言って混乱させるやつだ。
0288デフォルトの名無しさん
2014/03/01(土) 03:43:17.28#module
#deffunc swap var a, var b, local c
c=a : a=b : b=c
return
#deffunc f282_ready array nums, int n, local work
repeat n
work(cnt)=cnt+1
swap work(cnt), work(rnd(cnt+1))
loop
dim nums, n-2
memcpy nums, work, 4*(n-2)
return
#defcfunc f282 array nums, local is_exist, local result, local result_num
dim is_exist, length(nums)+2+1
foreach nums
is_exist(nums(cnt))=1
loop
repeat length(nums)+2, 1
if is_exist(cnt)=0 {
result(result_num)=cnt
result_num++
}
loop
return arr2str(result)
#defcfunc arr2str array arr, local buf
sdim buf
foreach arr : buf+=strf("%d,", arr(cnt)) : loop
return buf
#global
f282_ready nums, 20
mes arr2str(nums) + " -> " + f282(nums)
0289デフォルトの名無しさん
2014/03/01(土) 06:45:39.06| n collection |
n := 6.
collection := (1 to: n) asOrderedCollection shuffled.
2 timesRepeat: [collection remove: collection atRandom].
^collection asArray -> ((1 to: n) difference: collection) "=> #(1 4 3 6)->#(2 5) "
0290デフォルトの名無しさん
2014/03/01(土) 10:21:30.41use 5.016;
use warnings;
use List::Util qw(shuffle);
sub f {
my ($n) = @_;
my @list = (shuffle 1 .. $n)[ 2 .. $n - 1 ];
my @bin;
@bin[@list] = (1) x @list;
return [ @list ], [ grep{ !$bin[$_] } (1 .. $n) ];
}
say join ' -> ', map{ join ',', @{$_} } f(6);
0291デフォルトの名無しさん
2014/03/01(土) 10:41:52.31f <- function(x){(1:(length(x)+2))[-x]}
> f(c(3,1,2,6))
[1] 4 5
> f(sample(1:1000000,1000000-2))
[1] 348288 977984
0292デフォルトの名無しさん
2014/03/01(土) 18:21:24.63例
a=31.0, b=2.0 -> 97.39
a=28.0, b=5.0 -> 219..91
0293デフォルトの名無しさん
2014/03/01(土) 18:24:30.43> a=28.0, b=5.0 -> 219..91
a=28.0, b=5.0 -> 219.91
0294デフォルトの名無しさん
2014/03/01(土) 19:02:33.350295デフォルトの名無しさん
2014/03/01(土) 20:20:26.77数学的に解いた http://ideone.com/ZhzaJi
三分探索 http://ideone.com/Ph6MBb
0296デフォルトの名無しさん
2014/03/01(土) 21:49:26.20ttp://ideone.com/m0kcsp
C++。こういうの必要なのってlisperあたりか?
>>292は俺には解けねぇOrz >>295マジスゲー。
0297デフォルトの名無しさん
2014/03/01(土) 22:47:21.010298デフォルトの名無しさん
2014/03/01(土) 22:56:04.28まず一辺が1の正方形を囲む円の半径について考えると
半径 r=√2/2 → 面積S=πr^2= π/2
長辺方向にa倍する
πa/2
短辺方向にb倍する
πab/2
完成!
0299297
2014/03/01(土) 23:01:44.32三平方とかいろいろ考えてたはwwww
0300デフォルトの名無しさん
2014/03/04(火) 18:13:05.27・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。
例
A(10) -> 5
A(100) -> 21
A(1000) -> 86
0301デフォルトの名無しさん
2014/03/04(火) 19:58:49.54暗号すぎる。
0302デフォルトの名無しさん
2014/03/04(火) 20:03:05.210303デフォルトの名無しさん
2014/03/04(火) 20:05:24.39質問。一個の1000に一個の100は含まれているか?
0304デフォルトの名無しさん
2014/03/04(火) 20:07:08.40多分、多倍長演算できないと無理なので、C++いつも書いてるが降りる。
0305デフォルトの名無しさん
2014/03/04(火) 20:11:44.260306デフォルトの名無しさん
2014/03/04(火) 20:53:32.80ttp://ideone.com/FzkgAH
ほぼC。こういうことじゃないよね?
0307デフォルトの名無しさん
2014/03/04(火) 23:44:58.800308デフォルトの名無しさん
2014/03/04(火) 23:49:48.490309デフォルトの名無しさん
2014/03/05(水) 00:03:18.15#include <iostream>
#include <vector>
using namespace std;
int A(unsigned int i)
{
vector<int> v(1, 1);
while (v.size() < i) {
v.insert(v.end(), v[v.back() - 1], v.back() + 1);
}
return v[i - 1];
}
int main()
{
cout << A(10) << endl;
cout << A(100) << endl;
cout << A(1000) << endl;
}
0310デフォルトの名無しさん
2014/03/05(水) 00:16:35.38int A(unsigned int i)
{
vector<int> v(4);
v[0] = 0;
v[1] = 1;
v[2] = v[3] = 2;
while (v.size() <= i) {
v.insert(v.end(), v[v.back()], v.back() + 1);
}
return v[i];
}
0311デフォルトの名無しさん
2014/03/05(水) 00:26:34.05その発想はなかった。なるほど。
そういう数列か。
0312デフォルトの名無しさん
2014/03/05(水) 00:28:43.24解けなかった身であんまりチャチャ入れたくないんだが、
push_back使うとそういう最初にどれだけ確保したとか考えなくていいよ。
0313デフォルトの名無しさん
2014/03/05(水) 00:29:06.30すまん、解説を頼む
0314デフォルトの名無しさん
2014/03/05(水) 00:39:40.37そのカウンタと同じ数だけ配列にそのカウンタの数を後ろに追加していく。
と、いう無限数列が有るわけだ。
その数列の10番目と100番目と1000番目を求めよという話だった。
条件としてA[1]が1である。ZEROの扱いが不定なのは出題者の不備だろう。
と、いうことだと思うんだが・・・。
0315デフォルトの名無しさん
2014/03/05(水) 00:56:29.18>>309-310こそ勝者だ!
0316デフォルトの名無しさん
2014/03/05(水) 01:35:10.370317デフォルトの名無しさん
2014/03/05(水) 01:52:49.37アルゴリズムあってるかわからん
0318デフォルトの名無しさん
2014/03/05(水) 05:29:19.53f300 = [0,1,2,2] ++ f 3
こうしないと、でだしの数列がおかしい。
0319デフォルトの名無しさん
2014/03/05(水) 09:10:08.93A(10) -> 4
A(100) -> 14
A(1000) -> 45
が正しいのではないか。
0320デフォルトの名無しさん
2014/03/05(水) 09:23:28.24A(2)->2
A(3)->2
A(4)->3
A(5)->3
A(6)->4
A(7)->4
A(8)->4
A(9)->5
A(10)->5
A(11)->5
こうじゃない。
0321デフォルトの名無しさん
2014/03/05(水) 09:32:01.473が2つから始まるの?
122333444455555666666
こういう並びじゃないの?
0322デフォルトの名無しさん
2014/03/05(水) 10:01:57.31「・インデックス番号iの配列の値A(i)は配列内のiの個数である。」から
A(3)->2 なので、数列に3は2つだけ
0323デフォルトの名無しさん
2014/03/05(水) 10:03:14.53ほぼC。配列ですら無くてタダの関数だったのか??
こういう感じかと思ったんだが、違うんだったら、>>314の数列は間違ってるな。
あるぅえー?謎は深まる。
なんかのローカルなセキュリティプロテクトか?これ。
0324デフォルトの名無しさん
2014/03/05(水) 10:15:07.75理解した。>>314はミスリードしてるな。すまない。
すでに規定の配列を推測する問題だから、それでいいのか。
2の扱いに気づかなかったら解けないね。
0325デフォルトの名無しさん
2014/03/05(水) 10:54:07.72ほぼC。モヤモヤしてたから自分流で書きなおした。
カッとなってやった今では反省している。
あーちくしょ。結構面白かったから自力で解きたかった。Orz
0326デフォルトの名無しさん
2014/03/05(水) 20:09:21.96#module
#defcfunc f300 int i, local x
if length(s_ans)=1 : s_ans=0, 1, 2, 2
repeat
if length(s_ans)>i : break
x=s_ans(length(s_ans)-1)+1
repeat s_ans(x)
s_ans(length(s_ans))=x
loop
loop
return s_ans(i)
#global
mes f300(10)
mes f300(100)
mes f300(1000)
0327デフォルトの名無しさん
2014/03/05(水) 20:50:04.06Wikipedia を見て
#include <stdio.h>
#include <math.h>
#define P (sqrt(5) / 2 + 0.5)
void f(int n) {
printf("%.f\n", pow(P, 2 - P) * pow(n, P - 1));
}
int main() {
f(10); // 5
f(100); // 21
f(1000); // 86
return 0;
}
0328デフォルトの名無しさん
2014/03/05(水) 22:18:08.00申し訳ないがそのページ教えてください。
0329デフォルトの名無しさん
2014/03/05(水) 22:47:39.63ここね
ttp://en.wikipedia.org/wiki/Golomb_sequence
0330デフォルトの名無しさん
2014/03/05(水) 22:54:14.49http://pgf2.blogspot.jp/2011/08/blog-post.html
0331デフォルトの名無しさん
2014/03/05(水) 23:58:30.68| A |
A := OrderedCollection withAll: #(1 2 2).
A assureUniClass class compile: 'at: idx
[self size >= idx] whileFalse: [
| next |
next := self last + 1.
(self at: next) timesRepeat: [self add: next]].
^super at: idx'.
#(10 100 1000 1000000) collect: [:idx | A at: idx] "=> #(5 21 86 6137) "
0332デフォルトの名無しさん
2014/03/06(木) 01:13:36.22http://ideone.com/hmU8pn
0333デフォルトの名無しさん
2014/03/06(木) 01:18:37.92アドレスありがとう。
なるほど。綺麗な数式があるのか。
しかし、微妙に出来損ないの数列に見えるな。
応用はまだ無いのかな。なんかに使えるかなぁ??
最初見た時はセキュリティ暗号の一種に見えたんだよね。
こういう汚い規則性って直感的じゃないからね。ふむむ。
0334デフォルトの名無しさん
2014/03/06(木) 01:40:25.43ttp://ideone.com/bB0qJR
ほぼC。
と、いうわけで、>>329に書いてあるColin Mallows式で。
0335デフォルトの名無しさん
2014/03/06(木) 06:45:11.17def f300(n):
A = [1]
while len(A) < n:
i = p = A[-1] + 1
if i <= len(A):
p = A[i-1]
A += [i] * p
return A[n-1]
print f300(10)
print f300(100)
print f300(1000)
0336デフォルトの名無しさん
2014/03/06(木) 06:48:29.85#include <stdio.h>
int f300(int n) {
int len, val, p, s, a[1000]={1}; // 1*1 2*2 3*2 4*3 5*3 6*4 ...
for (len=1, val=1; len < n; len += (a[val-1]=p)) {
if (++val >= 1000) break;
p=2; if (len > 1) for (p=s=0; s < val; s+=a[p], p++);
}
return val;
}
int main(void) {
int i, TEST[] = {10,100,1000,};
for (i = 0; (size_t)i < sizeof(TEST)/sizeof(TEST[0]); i++)
printf("A(%d) = %d\n", TEST[i], f300(TEST[i]));
return 0;
}
0337デフォルトの名無しさん
2014/03/08(土) 05:15:42.42ウラムの螺旋を描くために、二次元整数格子上の点の数列を生成せよ。
数列例
[ 0., 0.] [ 1., 0.] [ 1., 1.] [ 0., 1.] [-1., 1.] [-1., 0.] [-1., -1.] [ 0., -1.] [ 1., -1.] [ 2., -1.] ...
この位置数列上の整数連番が素数のとき、その格子位置に印を描いていけばウラムの螺旋を描けます。
参考URL;;http://ja.wikipedia.org/wiki/ウラムの螺旋
0338デフォルトの名無しさん
2014/03/08(土) 05:49:58.40この位置数列上の整数連番に対する印の付け方を isprime(n^2+n+1) など別のものに変
えてやれば、別の素数分布パターンを作れます。通常はランダム・パターンなるだけで
す。でも新しい素数分布パターンを見つけられたら、それを論文にできます。
0339デフォルトの名無しさん
2014/03/08(土) 05:58:50.48二次元ではなく、三次元整数格子上の位置数列を作れたら、別の素数パターンを見つけ
られるかもしれません。でも私の能力では、そのような位置数列を生成できませんでし
た。三次元整数格子上の位置数列を作れたら、是非とも教えてください。
0340デフォルトの名無しさん
2014/03/08(土) 07:26:03.31前スレ>940の派生か?
0341デフォルトの名無しさん
2014/03/08(土) 07:56:39.33前スレ>940 は知らんかった。
こっちの主題は素数分布のはなし。前スレでの格子点を覆う数列コードを持っているひ
とは、それで素数分布を表してくれ。それがウラムの螺旋と異なるパターンになるとき
は教えてくれ。
0342デフォルトの名無しさん
2014/03/08(土) 22:33:02.87http://codepad.org/qEnUzuHN
0343デフォルトの名無しさん
2014/03/09(日) 03:39:18.84C++も簡易ウインドウライブラリ入りそうな気配は有るんだけどまだ何年も先の話だ。
非常にもどかしい。
0344デフォルトの名無しさん
2014/03/09(日) 06:49:54.98ttp://eel.axfc.net/uploader/l/764163901231842/v/3189894.gif
ttp://www1.axfc.net/u/3189894.gif
ほぼC。グラフィックはほとんど扱わないから微妙にズレてるかも知れない。
こんな感じでいいのだろうか。Win32Apiは書きなおしてほしいなぁ。もーダサイ。
あと、axfcもあんまり扱わないので間違ってるかもしれない。
0345デフォルトの名無しさん
2014/03/09(日) 10:08:57.80http://ideone.com/Mc2Q9F
0346デフォルトの名無しさん
2014/03/09(日) 13:41:35.17よろしくお願いします
プログラム板 強制ID制導入に関する投票スレ
http://kohada.2ch.net/test/read.cgi/vote/1394290844/
0347デフォルトの名無しさん
2014/03/15(土) 07:01:07.78ID:OHZ/3hPV0348デフォルトの名無しさん
2014/03/15(土) 07:13:47.95ID:5BnzaWCA0349デフォルトの名無しさん
2014/03/15(土) 08:05:44.67ID:SruwrWuEhttp://ideone.com/U4p3Nm
はいよ。C++。標準にはいってほしいと思ってる関数だ。ゲーム作るとき結構便利なのよ。
だいぶん前に考えたんだけど、どうにも広める手段がわからんのでここにさらしておく。
仕様は、Valueがいかなる値をとってもMin以上Max以下にはならないというもの。
お洒落な回答だね
0351デフォルトの名無しさん
2014/03/15(土) 21:21:59.78ID:SruwrWuE0352デフォルトの名無しさん
2014/03/15(土) 21:23:31.38ID:H2cF6eMjtemplate<typename T>const T& Limit(const T& lower, const T& upper, const T& value)
{
return std::min(std::max(value, std::min(lower, upper)), std::max(lower, upper));
}
0353349
2014/03/15(土) 21:28:53.47ID:SruwrWuEウマイことまとめたね。
俺が、引数の大小関係をうまく処理できないので3項演算子で処理してるわけなんだが。
おー、すばらしい。賞賛する。
0354デフォルトの名無しさん
2014/03/15(土) 22:15:01.94ID:pdEPX5UK2つならいくらでもあるし、3つ必要な場合は大抵4つ以上でも考えられるやつだ
0355デフォルトの名無しさん
2014/03/15(土) 22:50:43.65ID:H/IqmEMC3引数と言えばやっぱりたらい回し関数っしょ→
http://codepad.org/iowOAtSa
0356デフォルトの名無しさん
2014/03/15(土) 23:00:13.68ID:9QOnV1hLwikipedia 経由で‥‥http://d.hatena.ne.jp/aike/20111112
0357デフォルトの名無しさん
2014/03/16(日) 01:22:23.82ID:HbADQUiif <- function(a,b,c){median(c(a,b,c))}
0358デフォルトの名無しさん
2014/03/16(日) 02:57:03.04ID:H8fpIg100359デフォルトの名無しさん
2014/03/16(日) 08:00:55.27ID:TS+hDRL9>>346
0360デフォルトの名無しさん
2014/03/16(日) 17:29:02.84ID:H8fpIg100361デフォルトの名無しさん
2014/03/16(日) 17:44:55.51ID:TS+hDRL9自演で議論誘導しようとして失敗して最後は辞任で逃走なんて騒ぎもあったがな
おそらく告知はやれ程度の話を議論でsageレス多ければ却下とかに拡大解釈したんだろうけど
Win32APIスレの無申告削除といい、この板に関わってるボランティアって一体どうなってんだ…
0362デフォルトの名無しさん
2014/03/16(日) 18:10:30.59ID:wmlsbQd6おかげで高笑いさせていただいた
0363デフォルトの名無しさん
2014/03/16(日) 18:11:30.89ID:H8fpIg10日本人の性格を顧みて、陰湿な因子を持ったシステムはダメなんだろう。
明示的なことに弱いんだから明示的にするべき。実名は嫌だが。
それに適応できなければ先は暗いと思うし。まぁ、IDあれば当分は大丈夫だろう。
0364デフォルトの名無しさん
2014/03/16(日) 18:27:31.52ID:DXN/VHqe0365デフォルトの名無しさん
2014/03/16(日) 22:23:48.12ID:H8fpIg10利便性との兼ね合いがちょっと難しい話だね。
0366片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/16(日) 23:34:56.62ID:34DyvalP線分の連結部分は線分の端っこでなければならない。
線分の傾きは水平線の向きから30度刻みに制限される。
連結に使う線分の全体は点対称であり、中心点を中心に180回転すると一致する。
連結に使う線分は以上の条件を満たす最短距離でなければならない。
与えられた2つの点の座標値から連結に使う線分全部の座標値を求めよ。
0367片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/16(日) 23:48:32.05ID:34DyvalP0368デフォルトの名無しさん
2014/03/20(木) 00:19:53.82ID:v5V8kLPf興味のあるベンチマークを作ってみよう。
なんでもいいです。コンピュータをイジメる欲望にしたがってベンチマークを作ってみましょう。
ベンチマークといったらタライ=竹内関数とかアッカーマン関数とかが有名ですが、
気が向いたら創作してみるのもいいじゃないですか。
貴方は何をつくりますか?
*見どころ。*
・速度向き極最適化後に重いほど良い。
・コーディングで手を抜いたら減点。
・なるべく読めるコードにしましょう。
発表時には、アルゴリズムについて一言ください。
*エラトステネスの篩ベンチ。*
5000個生成して更に最後に生成した数字から更に+50000プラスした数字の次の素数を求めた。
キャパシティは64bit整数です。それするとメモリもソレくらい必要になりますが。
追記型エラトステネスの篩を設計してみました。
作った後これクラス化できるナーと思ったけどヤってないです。
ttp://ideone.com/AtMDRS
ウチのPCでは15秒ほどかかります。
0369デフォルトの名無しさん
2014/03/20(木) 00:27:35.69ID:v5V8kLPf0370デフォルトの名無しさん
2014/03/20(木) 00:50:47.25ID:bN7kenn5「経過時間は777ミリ秒だ!」ってideoneさんが言ってたんだけど……
0371デフォルトの名無しさん
2014/03/20(木) 01:03:59.14ID:v5V8kLPfソレはideonさんが良いPC使ってるからだよ。数字上げればもっと重くなるよ。
ゾロ目なのはたまたまでいい数字だと思うよ。
10000万個生成した後100000万まで生成してみたらIdeonさんがランタイムエラー吐いたので減らしたんだよ。
多分出力が多すぎたんだ。
で、どれくらい重いといいと思う?
0372デフォルトの名無しさん
2014/03/20(木) 01:04:40.06ID:7t1hv0EQ274ミリ秒でした
0373デフォルトの名無しさん
2014/03/20(木) 01:08:35.85ID:v5V8kLPf0374デフォルトの名無しさん
2014/03/20(木) 01:11:55.45ID:v5V8kLPfなかなかいいPC使ってるね。俺も良いPCほしいよ。
これ、どっちかって言うと処理も食うけど単純にメモリもガッツリ食うんだよね。
規模を大きくするとボトルネックになるのはどっちかって言うとメモリ量。
ちなみに、大きな素数はお金になるよ。数学的知見がいるけど。
0375デフォルトの名無しさん
2014/03/20(木) 01:13:36.17ID:v5V8kLPf0376デフォルトの名無しさん
2014/03/20(木) 01:15:38.44ID:bN7kenn5じゃあちょっとこのパズルのソルバ作ってくんない?
大きな盤面(ページ内の画像ぐらいの規模)になると急に回答時間が長くなるから困ってるんだ……
http://www4.ocn.ne.jp/~pachalle/paperchalleran126.html
http://www4.ocn.ne.jp/~pachalle/paperchalleran127.html
0377デフォルトの名無しさん
2014/03/20(木) 01:23:56.60ID:7t1hv0EQi7にしようと思ったんだけどHTとL3キャッシュの事でベンチマーク厨じゃないから
これでいいやと妥協
その気になれば差し替えられるし
0378デフォルトの名無しさん
2014/03/20(木) 01:26:32.48ID:v5V8kLPfいや、俺はもうベンチ作ったから、あんた作ってよ。www
普通に重み付き経路問題で再帰処理をループに置き換えれば大きな迷路もイケルと思うよ。
ただ、普通の重みなし経路問題でも2000*2000位のやつをペインターアルゴリズムで解くと結構重いよ。
C#でランダム重みなし迷路作ってMSペイントに解かせた事あるんだよ。
普通にフリーズしたわ。
0379デフォルトの名無しさん
2014/03/20(木) 01:31:51.65ID:bN7kenn5これただの経路問題じゃないんだわ……
「最短」じゃなくて「最高得点」を目指すから経路はかなり長くできるし、
交差点は二度通れるからクヌース先生のZDDすら使えないんだわ……
ベンチマークとしてはシミュレーションとかはどう?
二次元におけるラプラス方程式を陽的に解くやつを最近書いたから、
他人がどこまで書けるか興味ある。要するに連立方程式を解くだけなんだけどね
サンプル(windows.h使ってるからcodepadbカゃ動かない)→http://codepad.org/wWHQDJXo
0380デフォルトの名無しさん
2014/03/20(木) 01:32:17.58ID:v5V8kLPfおぉいいね。最新構成じゃない。
俺もスカイレークが出たら変えようと思っている。
来年の話なのでまだ我慢!
0381デフォルトの名無しさん
2014/03/20(木) 01:40:41.49ID:v5V8kLPf設計の要点として、通ったところを壁にする。ッて言うことかな。
壁はビットで持っておくと1変数に4枚入るよ。
ちなみにこれ全通り試行しないと答えでないタイプじゃないの?
0382デフォルトの名無しさん
2014/03/20(木) 01:49:52.20ID:v5V8kLPfデータ入力するのメンドクサ。
0383デフォルトの名無しさん
2014/03/20(木) 02:03:20.41ID:bN7kenn5全通り出さないと駄目なタイプだからキツイでござる……
ビット操作も使ってるんだけど
と言うかいわゆる「計算量が爆発的に増大」するタイプだから小さい盤面でテストすることを推奨
>>382
確かにデータ構造を考えるのも入力するのも大変だった
自分の場合は入力データを↓のような感じにして、入力用コードを複雑にして対処している
----------
3 4
*3 +3
+5 -2 +1
*3 +1
-2 +5 +6
+7 +9
+7 +2 +7
-2 +6
----------
0384デフォルトの名無しさん
2014/03/20(木) 03:28:13.56ID:v5V8kLPfうわわーん。
0385デフォルトの名無しさん
2014/03/20(木) 05:15:19.29ID:v5V8kLPfデータ入力して力尽きた。
これよく考えたら巡回セールスマン問題ライクなやつじゃねーか。
そりゃベンチになるけど、俺のターンは終わってるよ〜。
後は再帰的に解いてくだけなんだけど、再帰関数では足りないのでループで書かないとダメだな。
とにかく、データ入力は脳弱になるー。
この前の畳をヒントにすれば速度は出るかなーと思うけど、メモリが馬鹿にならん。
明日、覚えてたら続きやる。
0386デフォルトの名無しさん
2014/03/20(木) 06:24:00.20ID:Tny2Ip76これはエラトステネスの篩ではないよ
0387デフォルトの名無しさん
2014/03/20(木) 06:54:02.18ID:v5V8kLPfえ?まじで?素数間違ってる?
エラトステネスの篩って、低い方の素数で整数を割ってくんだよね。
あれ?
0388デフォルトの名無しさん
2014/03/20(木) 07:18:25.44ID:v5V8kLPfギブアップ。素直に、経路問題的手法で解こうと思ったんだが。
ttp://ideone.com/pVs5KO
エラトステネスの篩じゃないって言われて思考全部吹き飛んだ。www
エラトステネスの篩については、
完全なアルゴリズムだからここ数年考察していて最近納得行くコードがかけるようになったんだ。
それ否定されちゃったら結構大変だ。どこがバグってるか是非聞きたい。
0389デフォルトの名無しさん
2014/03/20(木) 07:29:06.60ID:v5V8kLPfあー、この発言バグってる・・・。
10000万じゃなくて、1万。100000万じゃなくて10万。
うほぉおおおお。ごめんなさい。
0390デフォルトの名無しさん
2014/03/20(木) 11:06:36.53ID:bN7kenn5大昔に書いた最初のバージョン→http://codepad.org/Pky6fZZl
1、2ヶ月ほど掛けて高速化したバージョン→http://codepad.org/KUHgY3K3
実は、中学時代に当該画像
(http://www4.ocn.ne.jp/~pachalle/paperchalleran126.html)
を授業で解かされたことがあって、その時から最適解がどれだけか凄く
気になってたんだよね。最終的に下の経路が最適解(4091点)だと分かったんだけど、
http://i.imgur.com/mi86JzL.png
それが分かるまでにi7-4770K×100(学校のやつ)をマルチスレッドで動かして
5時間ほど掛かった……とんでもない難問だった……
エラトステネスの篩は後で書いてみます。
0391デフォルトの名無しさん
2014/03/20(木) 12:48:27.08ID:v5V8kLPfエラトステネスの篩は簡単だよ〜。
数字の半分までの素数を判別すればいいからマルチスレッド化も可能。同期機構いるけどね。
メモ化すればメモリ食うけど超高速になる。高強度暗号創造して君も大金持ちだ。
しかし、中学や高校からC言語できるとはいい環境ですなー。しかも機材が素晴らしい。
自分の時はBASICだったもん。しかもコンピュータクラブ入らないと扱えなかった。
C言語は専門行ってから覚えたし、ひたすら模写して覚えたもんだ。(遠い目
最初ポケコンでプログラム覚えたから、1ソース200行以上扱えないんだよね俺。
ローテクすぎる。
俺マルチスレッドプログラミングってできないんだよね。
C++標準化待ちしてる間にドンドン時代遅れになってくわ。
君、結構ハイスペックだな。
0392デフォルトの名無しさん
2014/03/20(木) 12:56:56.09ID:v5V8kLPf結局、どういう意味だったのかわからなくて寝てないんだよ。
さすがにそろそろ辛くなってきた。むはぁ〜。
0393デフォルトの名無しさん
2014/03/20(木) 13:12:58.26ID:bN7kenn5>ハイスペック
いやそれほどでも……私もコード書き始めたのは中学からHSPでですし
>>エラトステネスの篩
よし出来た。自環境(i5-3210M、64bitWin7、VS2013)では
MaxNumber=1000000にしても15.12秒(表示部分を抜いたら0.069秒)だった。
なお計測は「don - 簡易経過時間計測ユーティリティ」
(http://cetus.sakura.ne.jp/softlab/toolbox2/)を使用。
http://ideone.com/SwJLoq
0394デフォルトの名無しさん
2014/03/20(木) 13:48:55.18ID:v5V8kLPfおっさん流小言。。。
newするのやめよう。配列構造はvector、ツリー構造はset一族、list構造はlist一族をつかおう。これらはコンテナという。
<limits>のstd::numeric_limitsを使おう。C++標準定義の定数が得られる。
<cstdint>を使おうintはstd:::int32_t、unsigned intはstd::uint32_tを使おう。C/C++を使うからにはメモリのサイズも目を配ろう。
時間関係は<chrono>にお任せ。時計も取れます。
これらは標準なのでソース互換性が向上するよ。
C++は大きく行ってC++98、C++03、C++11、C++14、C++17。という規格があって大きな機能もそれに準じる。今はC++11が主流でC++14が準備中。未来では更に増えるだろう。
逆にSqrtMaxNumberはイイ最適化だね。ただ、!=だと切りの悪い数字で止まらなくなることがあるかも知れない。
大なり記号で制御したほうが安心。C++は生配列だとなかなかオーバーランで例外吐いて落ちるってことが無いからね。
コンテナだと違うんだけどね。
と、言うわけで今思いついた小言でした。
0395デフォルトの名無しさん
2014/03/20(木) 13:51:14.26ID:v5V8kLPfそだそだ。結構良いタイム出してるな。
俺もPC変えたい!Core2DuoE8500だよ。。。
0396デフォルトの名無しさん
2014/03/20(木) 14:17:34.39ID:v5V8kLPfttp://ideone.com/0WsxkP
バージョンアーップ。
>>393の最適化をパクってみたら10倍位早くなった。吹いたわ。
ソレにともなって試験値を向上。
N200000まで生成後100000個追加で生成するように順番を入れ替えた。
これで改良まえと同じくらいの負荷になった。
あと、無意味にstd::map使ってたのをstd::setに差し替え。これは無知だった。
こういうことって有るんだねー。
0397デフォルトの名無しさん
2014/03/20(木) 18:26:52.30ID:e3O4v3W90398デフォルトの名無しさん
2014/03/20(木) 20:10:17.10ID:k2Bce3DCなら大差ないじゃん
計算時間だけならHaswellでも2倍ほどしか行かなかった
なんだかんだいっていつも人気者だね
素数ってそんなに素敵なんだろうか?素数の勉強って数学のどの分野?
0400デフォルトの名無しさん
2014/03/20(木) 20:45:18.93ID:bN7kenn5ん、newよりコンテナの方が速いですかね?
「!=」の部分は別にループの判定条件とは関係ありませんので問題ないかと。
<chrono>等は参考にさせてもらいます。
とりあえず書き直してみました。(注:MaxNumber=1000000だと0.005秒ほど)
http://ideone.com/VQVins
>>397
篩も2〜√nまで試したら終了だったと思うんだけど……
>>399
数論じゃね?
まあ今時は数論も「役立つ」分野だからな……
0401デフォルトの名無しさん
2014/03/20(木) 21:25:09.00ID:nG8EqR7/何言ってんだコイツって気分になった
0402デフォルトの名無しさん
2014/03/20(木) 22:06:56.25ID:v5V8kLPf>>397
何が違うのかワカラナイです。Orz
>>399
暗号とか知っとくとお金になるかもよ。RSAとかあのへん。
まぁ、完全なアルゴリズムだからね。簡単だし。
>>400
コンテナのほうが安全。
C言語系はバグでコンピュータをハード的にぶち壊せる言語なので一応気をつけるのだ。
まぁ、ハード的にぶち壊すのも結構大変だけどね。メモリ書き換えでOSの挙動変わることは結構あるよ。
0403デフォルトの名無しさん
2014/03/20(木) 22:27:29.67ID:bN7kenn5ID:v5V8kLPfの生活リズムが、私気になります!
>何が違うのか
試し割り法→素数判定、もしくは素因数分解のために2〜√nまで順に割っていく手法
エラトステネスの篩→素因数の性質を利用した試し割り法のメモ化Ver、みたいなもの
前者は素因数分解法としても素数判定法としても素朴すぎてちょっとアレ
(大きな数相手だと性能が悪い≒遅い)
後者はメモリをビシバシ食うが素数一覧を出す用としてはかなり速い
0404デフォルトの名無しさん
2014/03/20(木) 23:12:28.61ID:v5V8kLPfただの夜型人間だよ。昨日はたまたま昼も起きてたんだ。
うーん。わからん。Orz
ちとネット見てくる。
0405デフォルトの名無しさん
2014/03/20(木) 23:18:49.75ID:v5V8kLPf試し割り方は、素数を持つことが真で、
エラトステネスの篩は素数じゃない方を重視するのが真なんだな。
たぶん。
勘違いしてた。どっちもエラトステネスの篩の括りだとおもってたけど、名前ついてたとは。
エラトステネスのほうはまともなbitvectorあれば超高速だな。
追記型にするのはちと面倒だけども。
寝足りなくて頭回らん。。。Orz
0406デフォルトの名無しさん
2014/03/21(金) 15:35:49.09ID:GS+Tt5Igそれゆえエラトステネスは高速になるわけです。
ただかわりにメモリを消費するので、それをどう節約するかが
工夫のしどころかと。
フラグにビットを使っても、ちょっと大きな素数を探すと
すぐメモリがあふれちゃいますし無駄が多いです。
>まあ今時は数論も「役立つ」分野だからな……
考えてみれば、女王様も実は龍+馬の無敵駒だったね
0408デフォルトの名無しさん
2014/03/22(土) 22:52:53.57ID:ORbYIg/G( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0409デフォルトの名無しさん
2014/03/23(日) 17:59:41.19ID:+KKF1sNHビットに割り付ける数を小さい素数で篩っておけば多少は圧縮できるとかか
2の倍数を除外で作業用バイト数×16(8*2/1)とか
2と3の倍数を除外で作業用バイト数×24(8*2*3/2)とか
2と3と5の倍数を除外で作業用バイト数×30(8*2*3*5/8)とか
1GBも使えば30,000,000,000以下はカバーできる計算
0410デフォルトの名無しさん
2014/03/23(日) 18:02:52.27ID:8jLtLR5A0411デフォルトの名無しさん
2014/03/23(日) 20:50:11.36ID:mekPg/he2, 3, 5, 7 版がこちらに。
http://www.rsok.com/~jrm/printprimes.html
0412デフォルトの名無しさん
2014/03/25(火) 21:28:46.06ID:HPBQlIXi0413デフォルトの名無しさん
2014/03/25(火) 22:48:48.32ID:yMNhQqld0414デフォルトの名無しさん
2014/03/28(金) 00:01:08.12ID:91CrYjAmx+y
f(x,y) = (煤@n) + x (x≧0, y≧0)
n=0
例
39 -> x=3, y=5
2014 -> x=61, y=1
246909876 -> x=12345, y=9876
0415デフォルトの名無しさん
2014/03/28(金) 00:24:51.57ID:JGwxbPtx#include <stdio.h>
#include <math.h>
void f(n){
int z = (sqrt(8 * n + 1) - 1) / 2;
int x = n - (z + 1) * z / 2;
printf("x=%d, y=%d\n", x, z - x);
}
int main(){
f(39);
f(2014);
f(246909876);
return 0;
}
0416デフォルトの名無しさん
2014/03/28(金) 01:12:42.80ID:SMJgLyGD導関数とかマッタク理屈がわからん・・・。\(^o^)/オワタ
0417174
2014/03/28(金) 11:25:40.60ID:SMJgLyGDttp://ideone.com/stwHzp
ベンチマーク作ったよ。
これぞ究極の圧縮展開アルゴリズム!しかも可逆!!!ただし、o(N!)だ。
現在のC++では20バイト程度しか圧縮できない。
それでもかなりかかる。
軽いなーと思ったら、MakeData()の数字を上げてみましょう。
多倍長はいっても、何メガバイトまで圧縮できるのやら・・・。
*順列圧縮*
バイナリをとあるソート済みの配列の順列の途中経過であると仮定する。
ならば、バイナリを順列にかければ1週の間に最低一回はソート済みの数列になるのではないか。
という理論を思いつきまして、書いてみたんですよ。
採算分岐点は3kb程度、o(3000!)とかふざけてるが、それ以上になるとなんでも概ね3kb程度に収まる。
とにかく順列が馬鹿みたいに重いのでこれを高速化できればストレージ問題はほぼ解消する。
ランレングスこそ過去にして未来だったのだ。
と、いう感じです。
0418デフォルトの名無しさん
2014/03/28(金) 11:49:11.00ID:a5++l4GPまさかお前……ブロックソートを知らないとでも言うのか……
まあアッチはO(n)かO(nloglogn)かO(nlogn)だけど。ベンチマークなら無駄に重くても別にいいのか
0419デフォルトの名無しさん
2014/03/28(金) 12:50:03.67ID:6uoLiniK0420片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/28(金) 13:47:49.43ID:calBLgbH0421デフォルトの名無しさん
2014/03/28(金) 13:57:47.02ID:a5++l4GP高速化も何も、思いっきりnext_permutation(STL)に依存しているじゃないですかー!
0422デフォルトの名無しさん
2014/03/28(金) 16:30:05.20ID:zzqObK8g20文字越えると順列の序数がstd::uint64_tを超えるからこのコードでは死ぬんじゃないか?
>>418
変換後のデータ列に何番目の順列かって情報も含まれるからブロックソートとは違うな
あとブロックソートでは同じ文字が連続しやすいだけで連続すると確定してるわけじゃない
>>421
そこは脱STLするとかで。
0423デフォルトの名無しさん
2014/03/28(金) 16:42:24.18ID:a5++l4GPまあブロックソートとは違うのは知ってる
それとブロックソートの方がずっと速いことも知ってる
……ああそうか、無駄に重いから高速化する実験にもってこいなのかw
ちょっと検討してみますね
0424デフォルトの名無しさん
2014/03/28(金) 19:54:51.56ID:SMJgLyGDyes!20バイトしか圧縮できないのはじぶんの手落ちでございます。
多倍長演算できないと自分には扱えない。
そして、O(N!)で死ぬ。
>>417になんで名前欄はいってるんだ。
間違ってないけど、入れる気はなかった。
0425デフォルトの名無しさん
2014/03/28(金) 20:02:05.65ID:SMJgLyGD名前は聞いたこと有るんだけど、理論がどういうものかはサッパリ。
数学なんてぇ〜。
0426デフォルトの名無しさん
2014/03/28(金) 22:26:59.14ID:a5++l4GP要するに巡回シフトした文字列をソートすればええんやでー
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88
http://www.atmarkit.co.jp/ait/articles/0904/02/news113.html
http://www.geocities.jp/m_hiroi/light/pyalgo48.html
ガチな圧縮プログラムにも使われる優秀なアルゴリズムだったりする
0427デフォルトの名無しさん
2014/03/28(金) 23:35:57.42ID:SMJgLyGDなんとなく理解した。
配列を右か左に一回ずつシフトしていった履歴一列をXに展開するようにY方向へ並べていって、
まじめにソートされた列をX方向へY方向に観測しながら見つける。
これすごい発想だけど、メモリがN*N必要じゃん。
順列するより早いけど、ランレングスで1ブロックに1KBかかるな。
オンメモリの場合メモリ4Gで64kしか圧縮できなくないか?でも1/64なら相当か。
むむむ・・・・。
0428デフォルトの名無しさん
2014/03/28(金) 23:37:30.66ID:SMJgLyGD0429デフォルトの名無しさん
2014/03/28(金) 23:38:07.86ID:a5++l4GP消費メモリもケチろうと思えばずっとケチれる
本気でやりたければググって情報を集めることが肝心
0430デフォルトの名無しさん
2014/03/29(土) 01:54:15.14ID:Dat1iyHBなんで完全にソートされネーんだーと悩んでたが、そういうものだったのね。
ランレングスは完全にソートされてないと効果薄いんだよな。
>>429
本業じゃないのでお遊びだけど、なかなか悩まされる。
0431デフォルトの名無しさん
2014/03/29(土) 02:06:00.22ID:ZX0ATnLv既に実装されている≒特性を生かしつつ現実的なオーダまで計算量やメモリ量を削減する方法がある
逆変換の仕組みが面白いよねコレ
ttp://research.preferred.jp/2012/11/burrows-wheeler-transform-lf-mapping/
ウェブレット木と組み合わせた応用で全文検索にも使えるそうだ
で、生物学方面では次世代シーケンスデータ解析などのバイオインフォマティクス分野では普通に使われているらしい
ttp://d.hatena.ne.jp/biochem_fan/20140306/1394127619
>>430
同一単語・文章のN+1文字目を頭にした文字列は同じ位置に固まるから、N文字目は結構固まってるはずだよ
後ろ3文字がユニークな並びである10文字の単語が10回分あるなら、10文字ブロックが7回出現する計算になるはず
生データや簡単なフィルタ出力と比較したら桁違いに高性能だと思うけどなぁ…
0432デフォルトの名無しさん
2014/03/29(土) 03:59:04.62ID:Dat1iyHBバグってる。C++。
ベンチつくろうと思ってブロックソーティング実装してたんだが、ランダムデータ時にうまくいかねー。
とりあえずローテーションがうまくいってないのかよくわからん。
あー、もういいや。投げる。変換ばっか考えてたら頭死んだ。
0433デフォルトの名無しさん
2014/03/29(土) 04:08:14.95ID:Dat1iyHBそういう応用考えられるってすごいね。
ただ、メモリを削減するのに毎回苦心するのはやだなー。
マトリクス使わない実装が待たれるところだな。
0434デフォルトの名無しさん
2014/03/31(月) 21:33:13.83ID:qPE1ghQm( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)3% 5% 8%
0435デフォルトの名無しさん
2014/04/02(水) 18:39:42.82ID:p3nTiGpo例
1 -> 0
12345 -> 4038
256 -> 255
0436デフォルトの名無しさん
2014/04/02(水) 23:21:59.14ID:XXlXqB5Tttp://ideone.com/bIngPd
ほぼC。Xorはよくわからん。
0437デフォルトの名無しさん
2014/04/02(水) 23:26:26.14ID:UGb7U0P6#module
#defcfunc f435 int x, local y
y=x
y|=y>>1
y|=y>>2
y|=y>>4
y|=y>>8
y|=y>>16
return y-x
#global
mes f435(1)
mes f435(12345)
mes f435(256)
0438デフォルトの名無しさん
2014/04/02(水) 23:31:14.62ID:XXlXqB5Tついでなんで、ブロックソーティングベンチのバグ取れた??版を
合ってるかしらんけど復号のバグがとれたっぽい。
でも、なんかウマイことランレングスに適した形になったとは言いがたいな。
ハフマンはよくわからんし、とりあえず終了。
0439デフォルトの名無しさん
2014/04/03(木) 01:06:28.09ID:pbb0he17MakeBitOnArray()の引き数はその前段からintで充分じゃないかと。
ついでに言えば、return (std::uint64_t(1) << N) - 1; でいいべさ。
0440デフォルトの名無しさん
2014/04/03(木) 01:19:00.66ID:+UMFHe67引数とかは趣味です。
まぁ確かにIntでもいいんですけど、マイナスとっちゃうと大変だなーとunsigned型にしたはずです。
後段は確かにそうかも。20分で書いたからスピード勝負であんまり設計に時間かけなかったんだよね。
とにかく、ご指摘ありがとう。参考にします。
0441デフォルトの名無しさん
2014/04/03(木) 05:18:10.53ID:Qmt7sLIR乱数列は元々どんな圧縮アルゴリズムとも相性悪い。
ブロックソートは例えば「abcdef」って単語が100回出る文章を変換すると、
「bcdef【中略】a」が100行並んで結果「a」が100文字並び、
「cdef【中略】ab」が100行並んで結果「b」が100文字並び…て理屈でランレングスなどで圧縮しやすくなる。
乱数列では同じ文字の後に同じ並びがほぼ来ないから意味が無い。
ランレングスやスライド辞書は同じパターンの繰り返しを特定の記号で表すだけ。
乱数列では同じパターンがほぼ出て来ないから意味が無い。
ハフマン等の符号化は原文のビット列A(単語A)を出力ではビット列A’(略語A’)に置換するってだけ。
よく出現する原文のビット列(単語)に短い略語を当てたら出力も短くなるみたいな理屈。
注:原文のビット列(単語)は、通常原文を8ビット単位で区切って得られる256種の単語とかそういうノリなんで一般的な単語とは関係ない
乱数列では出現頻度が偏らないから短い略語を割り当てるべき入力語が無くてほぼ意味が無い。
0442デフォルトの名無しさん
2014/04/03(木) 06:20:02.96ID:X2rjePNCuse 5.016;
use warnings;
sub f { oct '0b' . join '', map{ $_ ^ 1 } split //, sprintf('%b', shift) }
say f(1);
say f(12345);
say f(256);
0443デフォルトの名無しさん
2014/04/03(木) 06:21:35.25ID:+UMFHe67解説ありがとう。できればコードが間違ってるかどうかも検証していただけると非常に自信につながる。嫌なら嫌と。
で、そういえば、一様乱数だから偏り無いのか。圧縮の原理をすっかり失念していた。順列圧縮こそ至高と言いたいところだな。
関係ないけど、符号化時のメモリ量をN*2にする方法は思いついたんだけど、実装面倒でヤってない。
方法はネットにある方法とほぼ同じだと思いついてから気づいた。
でも、自己流だと、一個メモリ扱うクラス書かないといけないので面倒なんだ。Orz
まぁ、これで何かしようっていうアイディアもないのだけど、趣向としては面白かった。
0445デフォルトの名無しさん
2014/04/03(木) 18:57:32.40ID:+UMFHe67いや簡単だよ。
ネットに書かれている通り、データの後ろに同じものをプッシュバックしてそれを長さNを仮想的に扱えるポインタコンテナ書くだけ。
あとはどうやってソートに耐えるデータ構造にするか。ということを考える。
というわけで、ポインタコンテナを自作しないといけないわけなのだ。俺流だとね・・・。
0446デフォルトの名無しさん
2014/04/03(木) 21:32:11.85ID:+UMFHe67ttp://ideone.com/i7CpyV
と、言うわけで書いては見たもののGCCでは動かない。C++モドキ。
VCならそこはかとなく動いてる気がする。すげー自信ない。
普段から演算子オーバーロードやらないからサッパリわからん。
コンテナのソートがこんなに大変だったなんて・・・。Orz
ちなみに今回書いたコンテナのことを俺はゴーストメモリと呼んでます。
メモリそのものの所有権を主張しないので時たま便利ですね。
GCCのエラーはいみわからなさすぎる。慣れてないのもあるけど。
0447デフォルトの名無しさん
2014/04/03(木) 23:10:36.98ID:VpjRoAAmconstメンバ関数にすればエラー消えたよ
constと非constの比較ってエラーに出てる
それとC++はメンバの並び順に初期化するけど、初期化リストがその順に
書いてないと警告を出すんでそれも直しといた
そんだけ
http://ideone.com/SfhtgY
0448デフォルトの名無しさん
2014/04/04(金) 02:06:05.29ID:toIVPJVd>>447
ご指摘ありがとう。GCCは不慣れなので脳みそ停止してた。
こっちでも直してみたら治ったので今後の参考にします。
ありがとう。勉強になったよ。
ついでなんで直してくれたそのコードを貴方にライセンス致します。
対価はもうもらったんでもういらねーです。
内容は自己責任でお願いします。と、いうことで有効範囲は規定しません。
まぁ、こんな簡単にバグ潰せるんだったら自作簡単だと思うけどね。
で、なんかすごい圧縮ライブラリ作ってくださいよ。
それか、応用で自然言語解析とかで実績出してくれてもいいよ。
全部受け売りだけど。Orz
まぁ、俺は優しい人は好きなんだ。へへ。
0449デフォルトの名無しさん
2014/04/04(金) 02:26:43.41ID:toIVPJVd32BITで4Gアロケートできるときに大体2G程度のデータを処理できるくらいのものになった気がする。
元が64kbだったのに比べたら大分良くなったなぁ。
これ以上は自分のキャパシティ超えるので無理だなぁ。
まぁ、今日は満足したのでそろそろ寝るか。
0450デフォルトの名無しさん
2014/04/04(金) 03:00:59.07ID:/IMb1satオプションを付けないとRDRAND命令を使ってくれなくて、
http://www.cplusplus.com/reference/random/random_device/entropy/
これが0を返しちゃうな
Ivy-Bridge以降で正しく動くぜ
と思ったけど駄目だったorz
自分でRDRANDアセンブリルーチンをくっつけて呼び出すしかないや
+1612 (gcc4.8.1)
double
py() const noexcept
{ return 0.0; }
これじゃアカンな
gccの作者にアセンブリルーチン作って送りつけてやっか
0451デフォルトの名無しさん
2014/04/04(金) 03:42:37.05ID:toIVPJVdロートルVCユーザには関係ないはず。汗
パッチ書けるんだったら書いたほうがベターだねぇ。
俺にはちと無縁な話。
関係ないけど、>>448はGhostMemory自体は16バイトほどクラスストレージを食うのでもしかしたら、
16*Nバイト食うの計算にはいってないかも。結構バカにできんなー。
0452デフォルトの名無しさん
2014/04/10(木) 20:07:02.64ID:EgKEDaEbNumber f:=method((-self-1)&(2**(self log2 floor)-1))
Io> 1 f
==> 0
Io> 12345 f
==> 4038
Io> 256 f
==> 255
0453デフォルトの名無しさん
2014/04/10(木) 22:06:01.98ID:4bNYm9hYC: http://toro.2ch.net/test/read.cgi/tech/1392388003/284
つっこみその一:http://toro.2ch.net/test/read.cgi/tech/1392388003/286
0454デフォルトの名無しさん
2014/04/10(木) 23:55:04.49ID:Qm6tnX60ttp://ideone.com/Ir8Wdl
C言語。書いたは書いたんだが、VCとGCCで挙動が違う・・・。
更に小数点以下の挙動の制御ってあんまりヤったこと無いから誤差がボロボロ出てる。
この辺よくわからない・・・。Orz
0455デフォルトの名無しさん
2014/04/11(金) 11:47:14.89ID:OvDOhNIT例
1 5 3 4
0 4 1 0
7 2 3 1
↓
0 0 1 4
1 2 3 5
1 3 4 7
0456デフォルトの名無しさん
2014/04/11(金) 19:33:58.69ID:ACbQzJyJその例じゃよく分からん……
レファレンスは無いの?
0457デフォルトの名無しさん
2014/04/11(金) 19:49:00.03ID:5cksvlPr#module
#deffunc f455 array data, local w, local h, local work, local i, local j, local t
w=length(data)
h=length2(data)
dim work, w*h
for i, 0, h
memcpy work(w*i), data(0, i), 4*w
next
for i, 0, w*h
for j, 0, w*h-1-i
if work(j)>work(j+1) : t=work(j) : work(j)=work(j+1) : work(j+1)=t
next
next
for i, 0, h
memcpy data(0, i), work(w*i), 4*w
next
return
#global
dim data, 4, 3
data(0, 0)=1,5,3,4
data(0, 1)=0,4,1,0
data(0, 2)=7,2,3,1
f455 data
for y, 0, length2(data)
buf=""
for x, 0, length(data)
buf+=strf("%d ", data(x, y))
next
mes buf
next
0458デフォルトの名無しさん
2014/04/11(金) 20:06:51.49ID:oOkhPOIzもっと簡単な方法あるのかね
0459デフォルトの名無しさん
2014/04/11(金) 20:13:31.39ID:GvHlzSSy0 4 1 0
7 2 3 1
を
1 5 3 4 0 4 1 0 7 2 3 1
と1列にしてソートして
0 0 1 1 1 2 3 3 4 4 5 7
3列に分割する
0 0 1 1
1 2 3 3
4 4 5 7
0460デフォルトの名無しさん
2014/04/11(金) 20:22:20.93ID:ACbQzJyJx行y列の行列の場合、
縦横ソート→O(x log x) + O(y log y)
一列ソート→O((x + y) log (x + y))
となる。オーダは実質同じなので係数の問題?
0461デフォルトの名無しさん
2014/04/11(金) 20:29:24.85ID:GvHlzSSy(x+y)*log(x+y) = x*log(x+y)+y*log(x+y) = log((x+y)^x)+log((x+y)^y)
0462デフォルトの名無しさん
2014/04/11(金) 20:53:38.38ID:ACbQzJyJオーダーを単純に足し引きするのって意味あるんですかね……
まあ後者の方が遅くなる気はするが
0463デフォルトの名無しさん
2014/04/11(金) 21:00:05.79ID:GvHlzSSy一列にするならx*yじゃないの
0464デフォルトの名無しさん
2014/04/11(金) 21:11:07.92ID:ACbQzJyJそうだった……となると一列ソートはO(xy log xy)か
雑把にはn log nとn^2 log nだから明らかに後者の方が遅いね
0465デフォルトの名無しさん
2014/04/11(金) 21:15:04.05ID:GvHlzSSy0466デフォルトの名無しさん
2014/04/11(金) 21:34:01.14ID:ACbQzJyJそれもそうか。俺アホスwwww
0467デフォルトの名無しさん
2014/04/12(土) 00:12:36.20ID:wXt+PNvWこれだと結果違わない?
0468デフォルトの名無しさん
2014/04/12(土) 00:15:38.09ID:21oOarab0469455
2014/04/12(土) 00:29:07.49ID:8ihswKZA各行、各列が昇順であればokです。
0470デフォルトの名無しさん
2014/04/12(土) 01:35:44.88ID:dQYOvpeuじゃ、とりま縦ソート横ソートすれば大丈夫か
計算量(修正)はO(x*log(y)+y*log(x))かな
これ何か現実に活用できる問題だったりするの?
0471デフォルトの名無しさん
2014/04/12(土) 02:40:15.13ID:21oOarab0472デフォルトの名無しさん
2014/04/12(土) 03:06:53.66ID:dQYOvpeuじゃ、O(x*y*log(y)+x*y*log(x))に修正
0473デフォルトの名無しさん
2014/04/12(土) 08:58:48.10ID:wXt+PNvW0474デフォルトの名無しさん
2014/04/12(土) 20:22:49.27ID:PiT6+Idw>>458 のやり方で。
>>459 をやりたかったがわからなかった。
http://ideone.com/f5ahdZ
0475474
2014/04/12(土) 20:42:45.41ID:PiT6+Idw0476デフォルトの名無しさん
2014/04/12(土) 21:41:15.82ID:bj2JFV3Yhttp://ideone.com/FrdgBI
0477474
2014/04/12(土) 21:41:47.28ID:PiT6+Idw>>459 の方法で
http://ideone.com/cF31w0
0478デフォルトの名無しさん
2014/04/13(日) 05:11:31.97ID:on6fFshOttp://ideone.com/slaSyu
ほぼC。>>458メソッドで書いてみた。できてる気がする。
見よ、渾身のバブルソートを!!
ちぐはぐな長さのジャグ配列食わせると落ちるので気をつけて。
0479デフォルトの名無しさん
2014/04/13(日) 06:52:41.46ID:FOz/WRMt列ごとにソートして行ごとにソートする
function z = f(x)
z = sort(sort(x), 2);
endfunction
一次元配列に直してソートしてから二次元配列に戻す
function z = g(x)
a = size(x);
z = reshape(sort(x(:)), a(1), a(2));
endfunction
0480デフォルトの名無しさん
2014/04/13(日) 10:36:42.95ID:SWiQOeUP>ちぐはぐな長さのジャグ配列
そもそも元データは行列なんですがそれは
0481デフォルトの名無しさん
2014/04/13(日) 17:02:49.71ID:on6fFshOあー、オリジナルのデータ食わせるときね。
0482デフォルトの名無しさん
2014/04/13(日) 18:14:35.29ID:FOz/WRMt例
aabaabbab -> a
0483デフォルトの名無しさん
2014/04/13(日) 19:23:09.05ID:SWiQOeUPどう書いてもO(n)は免れないのでなるべく単純に……
http://codepad.org/l5urRBhK
0484デフォルトの名無しさん
2014/04/13(日) 19:23:26.62ID:FjBeXDNH#module
#defcfunc f482 str s_, local s, local count, local c, local max_index, local is_valid
s=s_
dim count, 256
repeat strlen(s)
c=peek(s, cnt)
count(c)++
if max_index!c {
if count(max_index)=count(c) : is_valid=0
if count(max_index)<count(c) : max_index=c : is_valid=1
}
loop
return strf("%c", max_index*is_valid)
#global
mes f482("aabaabbab")
0485デフォルトの名無しさん
2014/04/13(日) 19:38:12.17ID:SWiQOeUPHSPなら、(長い文字列の場合)ループ回すよりそのまま置換した方が速くね?
;準備
StringBuffer = "aabaabbab"
sdim Char, 1, 2
dim Count, 2
;1種類目の文字を抽出
Char(0) = strmid(StringBuffer, 0, 1)
;strrep+strlenで各個数を数える
StringBuffer_ = StringBuffer
strrep StringBuffer_, Char(0), ""
Count(1) = strlen(StringBuffer_)
Count(0) = strlen(StringBuffer) - Count(1)
;2種類目の文字を検出して表示
Char(1) = strmid(StringBuffer_, 0, 1)
if(Count(0) > Count(1)){
mes StringBuffer + "->" + Char(0)
}else{
mes StringBuffer + "->" + Char(1)
}
stop
0486デフォルトの名無しさん
2014/04/13(日) 19:49:37.78ID:SWiQOeUP>>484が6.634秒に対し>>485が0.391秒となった。
基本的にHSPは遅いので、命令を上手く使う方向で書いた方が速いです。
0487デフォルトの名無しさん
2014/04/13(日) 19:57:03.42ID:FjBeXDNH#module
#defcfunc f482 str s_, local s, local char1, local char2
s=s_
char1=strmid(s, 0, 1)
strrep s, char1, ""
count1=stat
char2=strmid(s, 0, 1)
count2=strlen(s)
if count1>count2 : return char1
if count1<count2 : return char2
return ""
#global
mes f482("aabaabbab")
0488デフォルトの名無しさん
2014/04/13(日) 19:59:00.05ID:f3OGXPtA文字列の長さが事前に分かってるなら片方が過半数に達した時点で終われるんじゃないの?
0489デフォルトの名無しさん
2014/04/13(日) 20:06:39.69ID:Ucj0IS4sなんで二重ループにするのはなぜなんだぜ
// C
#include <stdio.h>
#define ___ /*empty*/
char majorChar(const char* p) {
___ if (*p) {
___ ___ char cx = *p; // 先頭の文字は「一方の文字」で確定
___ ___ char cy = '\0'; // もう一方の文字(未定)
___ ___ int nx = 1;
___ ___ int ny = 0;
___ ___
___ ___ while (*++p) {
___ ___ ___ if (*p == cx) {
___ ___ ___ ___ ++nx;
___ ___ ___ }else{ ___ // 三種類以上は無いって信じてるぜ...
___ ___ ___ ___ if (!cy) cy = *p; // 毎回上書きのほうが効率いいかな??
___ ___ ___ ___ ++ny;
___ ___ ___ }
___ ___ }
___ ___ return (nx >= ny) ? cx : cy; // 偶数文字で同じ数だったら先頭の文字を返すぜ
___ }else{
___ ___ return '\0';
___ }
}
void main(void) {
___ char* given = "aabaabbab";
___ printf("%s -> %c\n", given, majorChar(given));
}
0490デフォルトの名無しさん
2014/04/13(日) 20:16:37.98ID:XFAcJ4RGpython3
http://codepad.org/fGHhbu15
0491デフォルトの名無しさん
2014/04/13(日) 20:20:16.69ID:3MhgQtMC賢いですね
0492デフォルトの名無しさん
2014/04/13(日) 20:22:37.50ID:FjBeXDNHif count(max_index)=count(c) : is_valid=0
↓
if count(max_index)=count(c) : max_index=c : is_valid=0
0493デフォルトの名無しさん
2014/04/13(日) 20:36:18.70ID:on6fFshOttp://ideone.com/2lFAWc
C++。先客がいたのでちょっとひねってみた。
O(2N)位??オーダー計算はよくわからん。
毎度おなじみランダムデータ搭載。おまけです。
と、思ったら2種類限定だった・・・。Orz
0494デフォルトの名無しさん
2014/04/13(日) 20:38:11.97ID:SWiQOeUPその発想はあったわ……修正っと
http://codepad.org/oZiVUUFQ
>>489
よく見るんだぜ、内側ループはちゃんと終了後に抜けるからO(n)なんだぜ
俺だって2種類だと信じての実装なんだぜ
>>491
どこがだ、ソートはO(n log n)だろと
0495デフォルトの名無しさん
2014/04/13(日) 20:42:41.30ID:on6fFshOこれはGJ。
0496デフォルトの名無しさん
2014/04/13(日) 20:50:32.35ID:XFAcJ4RG>>488がヒントくれたから、思いついた
0497デフォルトの名無しさん
2014/04/13(日) 20:55:48.12ID:on6fFshOまぁ、コードをイッパイ書いてオーダー下げるのも手だが、
スマートなアルゴリズムで記述量を下げるのも高速化の手法では有る。
書いたら書いただけ処理量取られるからね。
0498デフォルトの名無しさん
2014/04/13(日) 21:08:09.62ID:hW10iHTJdef f482(s):
return sorted(set(s), key=lambda x:s.count(x))[-1]
s = "aabaabbab"
print "%s -> %s" % (s, f482(s))
0499デフォルトの名無しさん
2014/04/13(日) 21:23:43.24ID:SWiQOeUPま、記述量削った方が楽でいいわな……
スクリプト言語なんて特に、記述時間+実行時間の
合計を短縮する方向性で作られているものだし
0500デフォルトの名無しさん
2014/04/13(日) 21:48:43.64ID:on6fFshO2行を1行にするときの苦しみはソレはソレは楽しい瞬間だ。
まぁ、記述量減らすのはハッカーの本分でもあるので一度トライしてみるのがオススメ。
0501デフォルトの名無しさん
2014/04/13(日) 22:29:19.87ID:NRHwj26uimport Data.Function (on)
import Data.List (sortBy)
import Data.Map (empty, toList, insertWith)
f :: String -> Char
f = fst . head . reverse . sortBy (on compare snd) . toList . foldl (flip $ flip (insertWith (+)) 1) empty
main :: IO ()
main = print $ f "aabaabbab"
0502デフォルトの名無しさん
2014/04/13(日) 22:56:16.18ID:rQlHLbBVhead . reverse . sortBy (on compare snd) === maximumBy (on compare snd)
0503デフォルトの名無しさん
2014/04/14(月) 00:05:43.18ID:67iBMWumhttp://ideone.com/6he8zG
0504デフォルトの名無しさん
2014/04/14(月) 01:17:58.47ID:NaHx6xHB過半数に達したかどうか分かるのは最低でも全体の半分は検査が終わってる時点(aしか出現してないなど)
過半数判定そのものが1ループのコストより遥かに小さいものでないと速くならないが
実際は過半数判定がそれなりにコストのかかるものなので、過半数判定が無いものより高コストになるだけ
文字列検査の1ループは ループ処理のコスト[A] + 1文字判定・カウントのコスト[B] + カウントが過半数に達したかの判定のコスト[C]
過半数判定なしは n×([A]+[B]) (文字列の最後まで検査)
過半数判定ありは m×([A]+[B]+[C]) (n/2 < m <= n)
過半数判定は前半部n/2では必要ないからループを前半部と後半部の2回に分けて
過半数判定ありは (n/2)×([A]+[B]) + m'×([A]+[B]+[C]) (0< m' < n/2)
とも出来るけど
m'×([A]+[B]+[C]) < (n/2)×([A]+[B]) になる確率はそんなに高くなさそうな気がするが
[A]はコスト 3 くらいか、[B]もコスト 3 くらい、[C]はコスト 2 くらいだとしたら
m'×8 < (n/2)×6 となるから m' < (3/4)×(n/2) ・・・ これは何なのか自分でも分からなくなった
0505デフォルトの名無しさん
2014/04/14(月) 05:01:16.13ID:2/i+FDjcf:=method(s,
a := s at(0)
b := 0
c := 0
s foreach(v, c = c + if(a == v, 1, b = v; -1))
if(c > 0, a, b) asCharacter
)
Io> f("aabaabbab")
==> a
0506デフォルトの名無しさん
2014/04/14(月) 08:19:42.85ID:iMQET/gaだったらベンチすればええやん……
まあ今回は処理が軽すぎてHSP(>>486)ですら役不足だが
0507デフォルトの名無しさん
2014/04/14(月) 16:57:49.07ID:xLNOrgWs0508デフォルトの名無しさん
2014/04/14(月) 17:22:02.98ID:buURFUekint count32bit(unsigned v) {
unsigned count = (v & 0x55555555) + ((v >> 1) & 0x55555555);
count = (count & 0x33333333) + ((count >> 2) & 0x33333333);
count = (count & 0x0f0f0f0f) + ((count >> 4) & 0x0f0f0f0f);
count = (count & 0x00ff00ff) + ((count >> 8) & 0x00ff00ff);
return (count & 0x0000ffff) + ((count >> 16) & 0x0000ffff);
}
int count64bit(unsigned __int64 v) {
unsigned __int64 count = (v & 0x5555555555555555) + ((v >> 1) & 0x5555555555555555);
count = (count & 0x3333333333333333) + ((count >> 2) & 0x3333333333333333);
count = (count & 0x0f0f0f0f0f0f0f0f) + ((count >> 4) & 0x0f0f0f0f0f0f0f0f);
count = (count & 0x00ff00ff00ff00ff) + ((count >> 8) & 0x00ff00ff00ff00ff);
count = (count & 0x0000ffff0000ffff) + ((count >> 16) & 0x0000ffff0000ffff);
return (int)((count & 0x00000000ffffffff) + ((count >> 32) & 0x00000000ffffffff));
}
http://marupeke296.com/TIPS_No17_Bit.html
0509デフォルトの名無しさん
2014/04/14(月) 17:47:29.39ID:x8/AYQxN過半数判定はCPUの中で完結するので「主処理で使わないCPUリソース内で処理できるなら」演算時間は増加しない。
入力がキャッシュに乗り切らない場合の主処理はメモリ速度が上限だから、CPUリソースが余る環境も普通にあるんじゃね?
0510デフォルトの名無しさん
2014/04/14(月) 19:35:21.23ID:2/i+FDjcf(s):= (
a: sremove(charat(s, 1), s),
charat(if slength(s) / 2 < slength(a) then a else s, 1)
);
(%i20) f("aabaabbab");
(%o20) a
0511デフォルトの名無しさん
2014/04/15(火) 12:26:35.96ID:uhh91mQUトランプのカードを自分の手でシャッフルする様子をエミュレーションしてみましょう。
今回はヒンズーシャッフルを書いてみました。
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A3%E3%83%83%E3%83%95%E3%83%AB_(%E3%82%AB%E3%83%BC%E3%83%89)
*リファレンス*
ttp://ideone.com/2abVbM
いい感じに偏った混ざり方してると思います。
ドヤァ!!
0512デフォルトの名無しさん
2014/04/15(火) 18:33:33.02ID:3q2WkJR9f=:3 :0
a=.(}.~?@#)@({.~>:@?@#)y
a,y-.a
)
f^:(10) i.52
23 25 26 27 28 41 42 43 44 45 46 47 48 49 50 51 13 29 30 31 32 33 34 35 36 37 38 10 11 12 14 15 16 17 18 40 39 5 6 7 8 9 19 20 21 22 24 0 1 2 3 4
0513デフォルトの名無しさん
2014/04/15(火) 22:43:59.10ID:uhh91mQUと、かくの忘れました。Orz
>>512
ヒンズーシャッフルかな?相変わらずJはすさまじい言語だな。
読めないけど、この短さは素晴らしい。
0514デフォルトの名無しさん
2014/04/16(水) 07:38:26.41ID:ckogKF6qせめて、「サラサラサラ」くらいの記述が欲しい。
0515デフォルトの名無しさん
2014/04/16(水) 15:51:23.35ID:xsepAi6V今更ながら
言語はC
ideone.com/6CKmuQ
0516デフォルトの名無しさん
2014/04/17(木) 10:51:31.41ID:+NUFkt0L今更ながら
Schemeで
リスプ系初心者なのでよく言語をしらないので効率悪いだろうけど
ttp://ideone.com/imtVu8
0517デフォルトの名無しさん
2014/04/17(木) 22:58:57.53ID:UrX6PTIuhttps://paiza.jp/poh/paizen
0518デフォルトの名無しさん
2014/04/18(金) 01:19:21.75ID:fMz311pO適当に書いてもテストケース3までは通ったけど……
それ以降になるともう一捻り要るか
(そもそもウィジェットに求めるサイズ大きくね?)
0519デフォルトの名無しさん
2014/04/18(金) 02:14:20.45ID:fMz311pO0520デフォルトの名無しさん
2014/04/18(金) 09:56:06.59ID:fMz311pOhttps://paiza.jp/poh/paizen/result/91838352dea16a5f25ac65adeb683218
0521デフォルトの名無しさん
2014/04/18(金) 10:22:32.01ID:MnNN4KUVむずかしい
0522デフォルトの名無しさん
2014/04/18(金) 13:53:23.38ID:iHdeWdhahttp://paiza.jp/poh/paizen/result/5c37290eba362a5a8e6034a67424b689
しかし6は難しいなぁ……
0523デフォルトの名無しさん
2014/04/18(金) 17:46:39.72ID:447+Ksf00524デフォルトの名無しさん
2014/04/18(金) 19:47:16.22ID:6eqREVdSこの前解けなかったんだよなぁ・・・。
0525デフォルトの名無しさん
2014/04/19(土) 02:56:59.99ID:0ogt1s2i「コーディングスキルチェック」なるものを解いてるんだが、
あっという間にAランクまで解けたんだけど……
これ数冊アルゴリズム本読んでたらS余裕じゃね?
0526デフォルトの名無しさん
2014/04/19(土) 02:58:26.89ID:0ogt1s2i> ただし面接時には書いたコードが求人企業側に提出されますので、
> コードの書き方、 コメントの入れ方、オブジェクト指向で書かれているかなど
> 各社の視点での評価がされるため、その点を意識してコードを書いてください。
いっけね、ICPC用に組んでたテンプレコードを弄って投稿したから結構テキトーだったw
どうでもいい機能インクルードしてるしコメント端折りまくりwwwサーセンwwww
0527デフォルトの名無しさん
2014/04/19(土) 22:37:02.11ID:TtdO3ik2こんなの気にしてあのを時間内に問題解けって無理だろw
0528デフォルトの名無しさん
2014/04/19(土) 22:45:02.76ID:0ogt1s2i競技プログラミングとは真逆の発想だよねw
いや別に難易度はそれほど高くないから
入れようと思ったら入れられないこともないけどwww
あの問題サイズでオブジェクト指向とか何考えているんだよ(真顔)
0529デフォルトの名無しさん
2014/04/21(月) 16:12:16.18ID:8o/8KwGlこの問題では最初に1 ~ nまでの数字が小さい順位並んでいます。これを列1とします。
次にその数字の並びを適当に入れ替えます。これを列2とします。
列1を上に並べ、列2下に並べます。
そして同じ数字同士を線で結ぶと交差点がいくつかできると思います。この交差点の数を正確に速く数える問題です。
実際にチャレンジするのは『1 ~ 314159』の数字の交差点を数える必要があるのでもうやってられなーい状態なのです。
http://www.geocities.jp/xhkhc873/image/crossing/crossing.png
http://www.geocities.jp/xhkhc873/codeIQ/crossing.html
0530デフォルトの名無しさん
2014/04/21(月) 16:22:56.63ID:qtHldiIk結城さんの問題でそういうのあったと思うので解いて発表しても大丈夫なのか!!?
0531デフォルトの名無しさん
2014/04/21(月) 17:13:37.43ID:FEeaacIPそれ多分15パズルの成否を問う判定問題の拡張だろ?
よく知らないが楽勝なんじゃねーの?
0532デフォルトの名無しさん
2014/04/21(月) 18:11:17.39ID:uLWL3P6q1 2 3
\|/
*
/|\
3 2 1
のような並びの場合、交点が1箇所で重なると思うのだけど
これも交点3つって数えていいのかね?
それならさほど難しくなかったけど、多重交点をカウントする処理は骨が折れる
0533デフォルトの名無しさん
2014/04/21(月) 18:29:06.34ID:8o/8KwGl最大交点は2つで。こうすると3重はない。
1 2 3
3 2 1
0534デフォルトの名無しさん
2014/04/21(月) 18:40:10.11ID:uLWL3P6q0535デフォルトの名無しさん
2014/04/21(月) 18:42:22.06ID:GRQWVWO3正しい
0536デフォルトの名無しさん
2014/04/21(月) 18:43:43.69ID:uLWL3P6qそれだと3点で交差しないかい?
俺、何か勘違いしてるかも。
0537デフォルトの名無しさん
2014/04/21(月) 18:45:11.77ID:8o/8KwGl並べ替えなしの配置だけで答えが変わるのは良くない。
0538デフォルトの名無しさん
2014/04/21(月) 19:41:21.84ID:S+ssHDvV個数さえカウントすれば良かったのか
0539デフォルトの名無しさん
2014/04/21(月) 19:48:23.99ID:qtHldiIkなんか軽量化できないかなー。
0540デフォルトの名無しさん
2014/04/21(月) 21:14:22.32ID:/9iyZBJ20541デフォルトの名無しさん
2014/04/21(月) 22:46:14.13ID:qtHldiIkほぼC。とりあえず書いてみた。3秒以内で30万件とか無理。
っていうかあってるのかどうかもわからん。
真面目に連立方程式といてみたんだけど数学苦手なんだよな。
ちなみにY軸が正規化された範囲で交差すること!っていう制約無いよね??
0542デフォルトの名無しさん
2014/04/21(月) 23:01:35.78ID:/9iyZBJ21〜10の数で列2で19番目以下にあるものは 11 とは交差しない
言い換えると 1〜10の数で21番目以降にあるものは 11 と交差する
言い換えると 1〜10の数で19番目までに現れなかったものは 11 と交差する
12〜20の数で列2で21番目以降にあるものは 11 と交差しない
言い換えると12〜20の数で19番目以下にあるものは 11 と交差する
言い換えると 12〜20の数で19番目までに現れなかったものは 11 と交差しない
21以上の数で19番目以下にあるものは 11 と交差する
言い換えると19番目までに21以上の数が現れれば 11 と交差する
これをなんとかアルゴリズム化して1〜nまでの順繰りで交差数をカウントしていければいいんじゃないの?
0543デフォルトの名無しさん
2014/04/22(火) 23:20:05.27ID:6qYkrJ4Eimport time, random, bisect, array
def f529(q):
count = 0
x = array.array('i') # 列2 <= 列1 の数字 (/)
y = array.array('i') # 列2 > 列1 の数字 (\)
for i, a in enumerate(q):
j = bisect.bisect(x, a)
count += len(x) - j
if i+1 <= a:
x.insert(j, a)
else:
k = bisect.bisect(y, a)
count += len(y) - k
y.insert(k, a)
return count
q = array.array('i', range(1, 1+314159))
random.shuffle(q)
t0 = time.clock()
count = f529(q)
t1 = time.clock()
print "cross points of 1~%d = %d (%f second)" % (len(q), count, t1-t0)
0544デフォルトの名無しさん
2014/04/23(水) 21:06:50.05ID:I5h19qdVこれわからんちん
0545デフォルトの名無しさん
2014/04/23(水) 21:46:11.53ID:MKNj208zマルチはどうなるかわかってるよなぁ・・・。
0546デフォルトの名無しさん
2014/04/25(金) 23:02:32.06ID:GT7mg3QG暇人向け。移植してみましょう。
RNDは(0,1)を返すみたい。
0547デフォルトの名無しさん
2014/04/25(金) 23:13:54.39ID:LtcOoigKめっちゃBASICなのに草生えるw
https://d2sx9mrt4zumaq.cloudfront.net/wp-content/uploads/2014/04/DND1_Complete.pdf
0548デフォルトの名無しさん
2014/04/25(金) 23:31:43.94ID:GT7mg3QG関数の概念はまだ見えるけどラベルすら無いとか泣けるわ。
マジで意味のわからんGotoが大量にある。
0549デフォルトの名無しさん
2014/04/26(土) 00:52:02.76ID:LAXHDRshしかし中身はD&D……数日後には他言語で書きなおされた奴がうpされるんじゃね(適当)
0550デフォルトの名無しさん
2014/04/26(土) 01:05:28.00ID:bLFzsW030551デフォルトの名無しさん
2014/04/26(土) 01:58:04.15ID:fIjhv7f70552デフォルトの名無しさん
2014/04/26(土) 03:56:11.07ID:a2N0K2cL0553デフォルトの名無しさん
2014/04/26(土) 13:15:06.34ID:pdO++Zde0554デフォルトの名無しさん
2014/04/26(土) 15:03:48.27ID:VpWmdmwvあなたの使っているプログラミング言語ではどうなりますか?
0555デフォルトの名無しさん
2014/04/26(土) 15:14:07.75ID:BWKQ7kUXただの質問?
0556デフォルトの名無しさん
2014/04/26(土) 15:24:54.11ID:uzhJOC1wRacet NECDOS を使えばキレイに展開してくれる...
0557デフォルトの名無しさん
2014/04/26(土) 15:24:55.46ID:LxUn3m1D100^0 = 1
1^0 = 1
0.01^0 = 1
0.0000001^0 = 1
0.0000000000000000000001^0 = 1
0558KAC
2014/04/26(土) 15:30:16.64ID:+E4Yxb7w0^2=0
0^1=0
0^0=1
>>554
冪乗をサポートしない言語も結構あるけど・・・?
0559デフォルトの名無しさん
2014/04/26(土) 15:38:51.25ID:gc1VgHxN0^1 = 1*0 = 0
0^0 = 1 = 1
0560デフォルトの名無しさん
2014/04/26(土) 15:50:27.03ID:Nkur8dwT;;;掛け算と引き算で作ると
;;;その場合、0^0 → 1 が自然だな
(define **
(lambda (a b)
(cond
((zero? b) 1)
(else
(* a (** a (- b 1)))))))
0561デフォルトの名無しさん
2014/04/26(土) 15:53:44.14ID:Nkur8dwT乗法の単位元たる1の意味がもろ出る再帰定義だな
0562デフォルトの名無しさん
2014/04/26(土) 18:09:29.59ID:LAXHDRsh数学的に考えると0の0乗は「定義されない」が正解(極限をとっても定まらないから)
で、数式処理ソフトではMathematicaは「Indeterminate」、Maximaは「undefined」と定める
(しかしなぜかMapleでは1として扱う)
でもクヌース先生的には「(実用的な意味で)1と定義するのが妥当」だそうな
それだからか知らんが、0の0乗は色々な言語で「1」として扱われる
(WikipediaによるとJava・Python・Ruby・Perl・Haskell・Common Lisp・ML・Scheme・
R・MATLAB・APL・J・Windowsの電卓・Googleの電卓機能など)
0563デフォルトの名無しさん
2014/04/26(土) 18:18:22.35ID:1vhl4T7Zむちゃくちゃや
0564デフォルトの名無しさん
2014/04/26(土) 19:29:50.29ID:uzhJOC1w0565デフォルトの名無しさん
2014/04/26(土) 19:35:41.70ID:g8oJLCb+C++で全て0.01で通ってる人が居るんだがどうやってるんだろう
規模ごとに処理を分けてるのかな
0566デフォルトの名無しさん
2014/04/26(土) 19:38:19.60ID:rnp+GXdW0567デフォルトの名無しさん
2014/04/26(土) 20:34:01.29ID:LAXHDRsh別に0^0が「x^xでx→0」とは限らないじゃん?
「0^xでx→0」とか「x^0でx→0」とかもありうるわけで、
数学的にはそれらが全て同じ値にならないと「極限が存在している」とは言えない
0568デフォルトの名無しさん
2014/04/26(土) 20:46:20.85ID:DhTsVAJ/0569デフォルトの名無しさん
2014/04/26(土) 20:49:09.41ID:DhTsVAJ/0570デフォルトの名無しさん
2014/04/26(土) 20:58:10.85ID:rnp+GXdWhttp://www.rupan.net/uploader/download/1398513458.png
0571デフォルトの名無しさん
2014/04/26(土) 21:04:17.39ID:rnp+GXdW0572デフォルトの名無しさん
2014/04/27(日) 06:46:28.99ID:sBV4f8oM>> power 0 0
== 0.0
>> power 2 0
== 1.0
0573デフォルトの名無しさん
2014/04/27(日) 17:40:49.38ID:sBV4f8oM例
n=4 -> 1634 8208 9474
n=5 -> 54748 92727 93084
n=8 -> 24678050 24678051 88593477
0574デフォルトの名無しさん
2014/04/27(日) 17:44:20.54ID:5q9p4CyvC言語系だと簡単にオーバーフローしそうな・・・。
0575デフォルトの名無しさん
2014/04/27(日) 17:59:46.92ID:Ku2C+Nnxhttp://www.nintendo.co.jp/ds/a2yj/inf.html
再現するのは「多桁×多桁の掛け算(110.6×19など)」だけでかまわない
入出力仕様:
110.6*18=1990.8
110.6*19=1101.4(!)
110.6*20=2212
1106*19=11014(!)
110.5*19=2099.5
余裕があれば「割られる数が9桁の割り算」も再現する
不具合が出る入力は不明なので各自推理する
入出力仕様:
214358881/11=19487171
965782365/19=50830650.7(切り捨て)
0576デフォルトの名無しさん
2014/04/27(日) 18:07:12.66ID:5q9p4Cyv10進化浮動小数点型が流行るまでお茶を濁せ!
0577デフォルトの名無しさん
2014/04/27(日) 18:24:41.02ID:5q9p4Cyvttp://ideone.com/XUbsST
一応、書いてみた。ほぼC。今回は桁切るのにベクター使ってみた。
いつも使ってるのは処理食うのでメモリにキックしてみた。
8桁はIdeonさんでも時間的に無理だったので値を低くしてある。
0578デフォルトの名無しさん
2014/04/27(日) 18:39:26.25ID:AYOAUkbI自由バイト長多桁演算libを「考えていた」ところだったんだが‥‥
宿題スレからの分岐時点から居るが、このスレは恐ろしいね
0579デフォルトの名無しさん
2014/04/27(日) 18:56:44.09ID:5q9p4Cyvttp://ideone.com/uN4hUf
これであってる?
浮動小数点型の問題は扱いが難しいので面倒くさいんだよな。
俺も完全には扱えてないし銀行なんかはデシマルつかうよ?
業務アプリにFloatつかうなんてもってのほかだと思うんだが、ドウだろう。
これ、報酬つくのかねー。笑
0580デフォルトの名無しさん
2014/04/27(日) 18:58:45.23ID:5q9p4Cyvもっと褒めてー。笑
そのライブラリのパーツのクイズといてるだけなので、設計なんてほとんど適当だし適時直しておいて。
0581デフォルトの名無しさん
2014/04/27(日) 19:39:01.07ID:oatitqLc0582デフォルトの名無しさん
2014/04/27(日) 19:48:47.09ID:5q9p4Cyv割り算は精度系のバグで、掛け算は表示系のバグじゃね?向こうの。
定数で10^Nとかなんか引き算してるようにしか見えないんだけど。
0583デフォルトの名無しさん
2014/04/27(日) 19:59:09.99ID:biUcUHEO中の石(ARM946E-S)の仕様を見る限りでは32ビットARMアーキテクチャで、
IEEE 754に完全対応(倍精度もOK)らしいんだけど……
http://www.arm.com/ja/products/processors/classic/arm9/arm946.php
0584デフォルトの名無しさん
2014/04/27(日) 20:02:29.04ID:5q9p4Cyvパンピーがそんなこと知るわけねーだろ。浮動小数点型の仕様は情報の基礎だぞ。
誤差なんか簡単に出るし古代人は整数でエミュレーションしてました。
0585575
2014/04/27(日) 20:26:35.93ID:Ku2C+NnxIEEE754 32bit-floatなら8桁のときも不具合がおきると思ったので
単純な精度問題だとは考えていなかった
割り算の出力形式はよくある電卓同様で
・むやみに小数点以下の0を付けない
・9桁(小数点含まず)を超えた場合は10桁目を切り捨てる
を守ってほしい
だから>>579では駄目だね
0586デフォルトの名無しさん
2014/04/27(日) 20:29:16.25ID:5q9p4Cyvふむ、じゃ俺の手番は終わりだ。俺にはわからん。
他の人任せた。
0587デフォルトの名無しさん
2014/04/27(日) 20:38:30.27ID:biUcUHEOコード書けるのなら自分で試行錯誤してみてはどうか?
>>582のようにfloatに起因する以外の原因だってありえるんだし
0588デフォルトの名無しさん
2014/04/27(日) 21:19:41.22ID:1EPZIkPMやってみようかと。
大小の包含関係で並べ替えて、小さい順に探索して、結果をキッシュして再利用すればいいんだよな?
0589デフォルトの名無しさん
2014/04/27(日) 21:41:32.42ID:dRMpu4rZ0590デフォルトの名無しさん
2014/04/27(日) 22:10:15.36ID:sAnV1ywJ0591デフォルトの名無しさん
2014/04/27(日) 22:15:48.24ID:biUcUHEOとりあえず自分の結果(ちなみにCとAのみ)とTwitter漁っただけ。誰かBとDのURL教えてくれ……
(注:Eは全問失敗、Cは3番めまで、Aは5番めまで(?)、S以降は全問正解な模様)
E http://paiza.jp/poh2/images/poh2_majide.jpg
C http://paiza.jp/poh2/images/poh2_yareyare.jpg
A http://paiza.jp/poh2/images/poh2_mumu.jpg
S http://paiza.jp/poh2/images/poh2_otto.jpg
SS http://paiza.jp/poh2/images/poh2_sugoine.jpg
SSS http://paiza.jp/poh2/images/poh2_kirakira.jpg
まあ一発書きでSSS取る変態もTwitterを見る限りいるようだがw
0592デフォルトの名無しさん
2014/04/27(日) 22:21:02.50ID:sAnV1ywJちなみにSランクは俺が見た限り2パターンあるよ
0593デフォルトの名無しさん
2014/04/27(日) 22:29:23.35ID:biUcUHEOえ、マジ?
もう一方のURL教えてくれ
0594デフォルトの名無しさん
2014/04/27(日) 22:31:33.80ID:sAnV1ywJhttp://nozomi.2ch.net/test/read.cgi/prog/1389862103/298
0595デフォルトの名無しさん
2014/04/27(日) 22:39:16.93ID:biUcUHEOthx
……何すれば画像が違ってくるのそれw
Sその2 http://paiza.jp/poh2/images/poh2_awawa.jpg
>>590
見てきた。……シンプルなコードで全ケース通過とかヤバすぎwww
(いやメモ化自体は俺も思いついて実装していたが、それをもっと推し進められるとは……
ちょっと実装してS取ってくる)
0596デフォルトの名無しさん
2014/04/27(日) 22:49:55.40ID:1EPZIkPMたとえば1を調べるのに、2-4が置ける場所を事前に調べてあったら、
ビット演算などで置ける可能性の場所を絞り込んだらいいと思うが。
1
■■■■■
■■■■■
■■■■■
■■■■■
2
■■
■■
■■
■■
3
■■■■
■■■■
4
■■■
■■■
■■■
0597デフォルトの名無しさん
2014/04/27(日) 23:09:38.22ID:DrXQYBWwウィジェットごとに検索してたら5以降通らないね
予めすべてのサイズの個数だけカウントしとけば良い
0598デフォルトの名無しさん
2014/04/28(月) 00:15:32.29ID:Dj45W54A0599デフォルトの名無しさん
2014/04/28(月) 01:26:43.60ID:vBB1ZBuLhttp://paiza.jp/poh/paizen/result/96a040a413a4dfd7736578e387dae2fb
……後は最適化に全力を尽くしてみる所存
ちなみにケース3はウィジェットサイズ>盤面サイズなのが混じってる問題だから気をつけろよ!
0600デフォルトの名無しさん
2014/04/28(月) 01:31:03.56ID:Dj45W54A0601デフォルトの名無しさん
2014/04/28(月) 02:01:20.98ID:vBB1ZBuLまあそうだけどね……
C++で書いてたから最初気付かなくてさ
思い込みで書くとエライ目に遭う典型といえる
0602デフォルトの名無しさん
2014/04/28(月) 06:25:15.08ID:t63YSNJYおめ!これは別のSパターンか
0603デフォルトの名無しさん
2014/04/28(月) 07:44:24.94ID:zA2QJfGQ0604デフォルトの名無しさん
2014/04/28(月) 10:33:49.06ID:3V71eLEmimport time, itertools
def f573(n):
t = time.clock()
ans = []
q = [i**n for i in range(10)]
cwr = itertools.combinations_with_replacement
for p in cwr(range(10), n):
s = sum(q[d] for d in p)
if len(str(s)) == n and s == sum(q[int(c)] for c in str(s)):
ans.append(s)
ans.sort()
print "n=%d -> %s %f" % (n, str(ans), time.clock() - t)
for n in [3,4,5,6,7,8]:
f573(n)
n=3 -> [153, 370, 371, 407] 0.000000
n=4 -> [1634, 8208, 9474] 0.000000
n=5 -> [54748, 92727, 93084] 0.016000
n=6 -> [548834] 0.031000
n=7 -> [1741725, 4210818, 9800817, 9926315] 0.078000
n=8 -> [24678050, 24678051, 88593477] 0.172000
0605片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/04/28(月) 20:30:08.04ID:nYC6TNjH与えられたa,b,c,d,eに対して
{ax + by ≦ 0
{cx + dy ≧ 0
{y ≦ e
がなす面積を求めるプログラム。
0606デフォルトの名無しさん
2014/04/28(月) 20:39:13.58ID:Dj45W54A0607デフォルトの名無しさん
2014/04/28(月) 20:57:21.73ID:sJD8oZI6なんでこんな速いの?
0608片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/04/28(月) 21:03:34.82ID:nYC6TNjH0609片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/04/28(月) 21:39:55.60ID:nYC6TNjH0610デフォルトの名無しさん
2014/04/28(月) 22:14:15.80ID:3V71eLEmループ回数を調べてみた
n=3 : 220
n=4 : 715
n=5 : 2002
n=6 : 5005
n=7 : 11440
n=8 : 24310
リファレンスによると、繰り返しを許した組合せ
# combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
で組み合わせの数の計算式は (10+n-1)! / n! / (10-1)!
0611デフォルトの名無しさん
2014/04/28(月) 23:01:46.19ID:66gAIT7y俺にはわからんけど、仕事投げるんじゃネーですよ。
0612デフォルトの名無しさん
2014/04/28(月) 23:31:34.79ID:vBB1ZBuLよく分からんが、つまり三角形の面積を出したいのか?
三直線の交点を出して、後はベクトル使えば一瞬で面積が出る
(不等号によって「解なし」があり得る場合は別途外積で判別する)
http://www004.upp.so-net.ne.jp/s_honma/heron/heron.htm
http://marupeke296.com/COL_Basic_No1_InnerAndOuterProduct.html
0613デフォルトの名無しさん
2014/04/28(月) 23:33:19.64ID:Dj45W54A片方はy固定だからy=eが交点だし
0614デフォルトの名無しさん
2014/04/28(月) 23:36:37.12ID:PJcE9AjA0615デフォルトの名無しさん
2014/04/29(火) 05:20:55.18ID:JNr9eOSo0616デフォルトの名無しさん
2014/04/29(火) 05:22:21.00ID:O4P4m21I0617デフォルトの名無しさん
2014/04/29(火) 05:38:07.78ID:JNr9eOSo0618デフォルトの名無しさん
2014/04/29(火) 05:50:47.85ID:3UHy5Aq50619デフォルトの名無しさん
2014/04/29(火) 09:34:29.53ID:n94FNzPy0620デフォルトの名無しさん
2014/04/30(水) 02:26:36.45ID:ISHUKu9u0621デフォルトの名無しさん
2014/04/30(水) 06:24:52.47ID:r69v9/KD0622デフォルトの名無しさん
2014/04/30(水) 19:21:46.90ID:1rY13TGB0623デフォルトの名無しさん
2014/04/30(水) 21:22:28.57ID:4b+5cuCo1のビットが3個ある二進表記文字列を求める。
例
111 -> 1011
1110 -> 10011
101100 -> 110001
0625デフォルトの名無しさん
2014/05/01(木) 00:29:24.54ID:djQak4Wkhttp://ideone.com/cx6aI3
0626デフォルトの名無しさん
2014/05/01(木) 01:26:08.60ID:v3Exm+G7#module
#defcfunc n_str str s, int n, local ret
sdim ret
repeat n : ret+=s : loop
return ret
#defcfunc f623 str s_, local s, local l, local c, local count
s=s_
l=strlen(s)
dim count, 2
for i, l-1, 0-1, -1
c=peek(s, i)
if c!'0' and c!'1' : return "ERROR"
if count(1) : if c='0' : _break
count(c-'0')++
next
if count(1)=0 : return "ERROR"
return strmid(s, 0, i)+"1"+n_str("0", count(0)+1)+n_str("1", count(1)-1)
#global
mes f623("111")
mes f623("1110")
mes f623("101100")
0627デフォルトの名無しさん
2014/05/01(木) 03:27:29.07ID:KnrIvksS#include <stdio.h>
#include <string.h>
void f623(char *dst, const char *src) {
int k;
char *p, *base, *q;
sprintf(dst, "000" "%s", src);
for (p = dst; *p; p++)
*p = (*p < '1') ? '0' : '1';
(base = strrchr(dst, '1')) || (base = dst);
for (k = 0, p = dst; p <= base; k += (*p++ >= '1'));
while (k >= 3)
for (k++; (*base += 1) >= '2'; k--, *base-- = '0');
for (; *(base+1); base++);
while (k < 3)
for (p = base, k++; (*p += 1) >= '2'; k--, *p-- = '0');
if (dst[0] != '1')
for (p = dst, q = strchr(dst, '1'); *p++ = *q++;);
printf("%s -> %s\n", src, dst);
}
int main(void) {
char buf[64+sizeof("000")];
f623(buf, "111");
f623(buf, "1110");
f623(buf, "101100");
return 0;
}
0628デフォルトの名無しさん
2014/05/02(金) 02:46:57.41ID:8voevSBLhttp://codepad.org/BPAfTRSX
0629デフォルトの名無しさん
2014/05/02(金) 02:49:48.15ID:8voevSBL0630デフォルトの名無しさん
2014/05/02(金) 05:16:47.30ID:nCnB44yYttp://ideone.com/CNUaCe
ほぼC。バグっている。ウオーニング等は出てない。VCでもGCCでも同じ挙動。
64bitで書くとなんか謎の挙動しててバグが取れなかった。
らしい動きはしてるんだが、これなんだろう・・・。Orz
0631デフォルトの名無しさん
2014/05/02(金) 05:23:30.69ID:nCnB44yYよくわからねー。
0632デフォルトの名無しさん
2014/05/02(金) 05:51:30.64ID:+HIQMOvhhttp://ideone.com/zKFNBg
0633デフォルトの名無しさん
2014/05/02(金) 06:09:38.18ID:nCnB44yYほぼC。バグ取れた。リテラルの問題だった。
リテラルはあんまり使わないのですっかり失念していた。
俺が間違っていた・・・。Orz
0634デフォルトの名無しさん
2014/05/02(金) 22:03:46.87ID:bMo4WRDhf := method(s,
n := s fromBase(2)
a := n ^ (n & (n - 1))
b := a + n
(b | ((b ^ n) / a) / 4) asBinary
)
Io> f("111")
==> 1101
0635デフォルトの名無しさん
2014/05/02(金) 22:17:55.51ID:bMo4WRDh実行結果が間違っていました。訂正と他の例を追加します。
Io> f("111")
==> 1011
Io> f("1110")
==> 10011
Io> f("101100")
==> 110001
0636デフォルトの名無しさん
2014/05/03(土) 01:09:33.02ID:IG8YcVY0(defn f [s] (->> (Integer/parseInt s 2)
inc
(iterate inc)
(map #(Integer/toBinaryString %))
(drop-while #(not= ((frequencies %) \1) 3))
first))
(println (f "101100")) ;; 110001
0637デフォルトの名無しさん
2014/05/03(土) 01:14:25.51ID:k6wExosO模範解答とかいうのが各言語1〜3番まで出てて3番のがテストケース7まで通るコードだね
0638デフォルトの名無しさん
2014/05/03(土) 01:30:43.09ID:cKwAiZbq模範を見ずに自力で7まで突破してから見たけど、あの#defineだらけのコードなんじゃこれ……
0639デフォルトの名無しさん
2014/05/03(土) 08:18:57.92ID:LnPAwYiYこの三角形の内部に点をとり、その点から各頂点までの距離の和の最小値を求める。
例
20,18,10 -> 26.89
1,1,1 -> 1.73
7,6,5 -> 10.29
0640デフォルトの名無しさん
2014/05/03(土) 13:11:29.15ID:sVH/zfSt#module
#defcfunc heron double a, double b, double c, local s
s=(a+b+c)/2
return sqrt(s*(s-a)*(s-b)*(s-c))
#defcfunc len double x, double y
return sqrt(x*x+y*y)
#defcfunc sum3 double x, double y, double a, double b, double c
return len(x, y)+len(x-a, y)+len(x-b, y-c)
#defcfunc f639 double a, double b, double c, local ax, local ay, local x, local y, local d, local dx, local dy
ay=heron(a, b, c)*2/a
ax=sqrt(b*b-ay*ay)
dx=1.0 : dy=1.0
x=0.0 : y=0.0
repeat 1000
d=sum3(x+dx, y, a, ax, ay)-sum3(x, y, a, ax, ay)
if d>0 : dx*=-0.4 : else : x+=dx : dx*=1.5
d=sum3(x, y+dy, a, ax, ay)-sum3(x, y, a, ax, ay)
if d>0 : dy*=-0.4 : else : y+=dy : dy*=1.5
loop
return sum3(x, y, a, ax, ay)
#global
mes f639(20, 18, 10)
mes f639(1, 1, 1)
mes f639(7, 6, 5)
0641デフォルトの名無しさん
2014/05/04(日) 10:41:47.26ID:mBc+6kiFScheme
http://codepad.org/8js70IEm
0642デフォルトの名無しさん
2014/05/04(日) 12:38:44.31ID:B9VVKrakelispかcommon lisp
(defun next-bigger (bin)
(let ((fst (car bin))
(last1 (car (last bin)))
(mid (cdr (butlast bin))))
(append '(1)
(next-bigger2 mid)
'(1))))
(defun next-bigger2 (bin)
(if (eq 1 (car bin))
(append (cdr bin) '(0 1))
(append (cdr bin) '(0))))
0643デフォルトの名無しさん
2014/05/04(日) 12:43:00.21ID:B9VVKrak0644デフォルトの名無しさん
2014/05/04(日) 13:44:48.51ID:fZG39myL@Mathematica
nextThreeOne[d_]:=Module[{countOne,addN},
countOne[dx_]:=IntegerDigits[dx]//
Count[#,1]&;
addN[dx_,nx_]:=dx//
IntegerDigits[#,10]&//
FromDigits[#,2]&//
#+nx&//
IntegerDigits[#,2]&//
FromDigits[#,10]&;
NestWhile[addN[#,1]&, addN[d,1], countOne[#]!=3&]
];
In := {111, 1110, 10110}//Map[nextThreeOne, #] &
Out = {1011,10011,11001}
0645デフォルトの名無しさん
2014/05/04(日) 16:46:13.36ID:AIHO5oywttp://ideone.com/QfNisQ
0646デフォルトの名無しさん
2014/05/04(日) 17:56:19.39ID:yKnZ+/VU一番最後、間違ってないかい?
0647デフォルトの名無しさん
2014/05/04(日) 18:41:34.65ID:bDkzSW8IFUNCTION f(a,b,c)
LET d=(a+b+c)/2
LET s=SQR(d*(d-a)*(d-b)*(d-c))
LET f=SQR(a*a+c*c-2*a*c*COS(ASIN(2*s/a/c)+PI/3))
END FUNCTION
PRINT USING "f(20,18,10) = ######.##": f(20,18,10)
PRINT USING "f(1,1,1) = ######.##": f(1,1,1)
PRINT USING "f(7,6,5) = ######.##": f(7,6,5)
END
実行結果
f(20,18,10) = 26.89
f(1,1,1) = 1.73
f(7,6,5) = 10.29
0648デフォルトの名無しさん
2014/05/04(日) 23:51:23.23ID:onUxYY9Oそれを思いついたのでフローだけ書いておきます。
できたら報告ください。これは、問題では無いです。
リングバッファとソートバッファを用意します。
リングバッファにはデータを。ソートバッファには0〜Nの1刻みの数字で初期化します。
ソートバッファは、リングバッファのインデックスの列です。
それで、リングバッファのi番目の列とj番目の列を比較できるようにします。
comp(ring,Sort[i],Sort[j])>0;的な
リングバッファの方は絶対改変しませんので、安心して比較できます。
それを使ってソートしましょう。
比較後交換されるデータはソートバッファの方です。
if(IsSwap) std::swap(Sort[i],Sort[j]);
まぁ、俺の実力ではコムソート位が限界なのでコムソートを実装します。
それで、Ring[Sort[i]-1]がソート後のほしいデータ列です。
ソートバッファの中の0が先頭です。ソートバッファの0があるインデックスを返しましょう。
と、言うものですが、ドウでしょうか。
0649デフォルトの名無しさん
2014/05/05(月) 00:04:02.12ID:hHz7BMiD0650デフォルトの名無しさん
2014/05/05(月) 00:11:19.56ID:CN0OEHd5いただいてもいいですか?
0651デフォルトの名無しさん
2014/05/05(月) 00:16:46.78ID:Y0QSR5Wu0652デフォルトの名無しさん
2014/05/05(月) 00:30:15.27ID:hHz7BMiD自己責任でお願いします。
コードがかけたらネットに晒して欲しいですが、まぁ、任意でお願いします。
ホント、自己責任でお願いします。それだけです。
それ以外は何に使ってもいいです。自分は。
>>651
頭のなかで粘土ヤってたら思いついたので個人的な実装はありません。LOL!
0653デフォルトの名無しさん
2014/05/05(月) 00:31:46.56ID:rWVvnRCfデータ構造,アルゴリズム,デザインパターン総合スレ 2
http://toro.2ch.net/test/read.cgi/tech/1362301811/
0654デフォルトの名無しさん
2014/05/05(月) 00:44:23.14ID:hHz7BMiD前に出したベンチマークを作ろうの流れなのでこっちに書きました。
こういうのは頻繁に思いつくような類ではないので転載したかったらヤっておいてください。
お願いします。
0655デフォルトの名無しさん
2014/05/05(月) 01:11:55.79ID:hHz7BMiDuint64_tのメモリデカイよ!uint32_tにすれば5*Nくらいになるかなー。Orz
0656デフォルトの名無しさん
2014/05/05(月) 01:39:30.89ID:hHz7BMiDちなみに、実行時間のほとんどはソートなので奇偶転置ソートっつーの使えば、並列化可能。N^2だけど、リアルタイムは抑えられるはず。
だけど、メモリの持ち方に問題があるので、まぁ、並列化アクセラレータにCPUメモリのポインタ投げれるようにしておいたほうがよさ気。
0657デフォルトの名無しさん
2014/05/05(月) 08:06:47.61ID:wP+UVhzo>>392
式に変数も認めるバージョン
演算子情報はは演算子データベースに保持
http://codepad.org/c65AyXpd
0658デフォルトの名無しさん
2014/05/05(月) 09:12:58.03ID:jHWDYlg+バグ修正です。
ttp://ideone.com/ljagX5
1.入力の先頭は111か?
1.1.YESなら桁数が増えるので、入力の先頭から1を除いて、111を110とし、末尾に01をつける。終わり。
1.2.NOなら桁数は増えない。先頭の1を除いて1は残り2個となる。
1.3.2個の1は連続しているか?
1.3.1.YESなら011を100に置き換えて、末尾の0を1に代える。終わり。
1.3.2.NOなら後方の01を10に置き換える。終わり。
0660デフォルトの名無しさん
2014/05/05(月) 16:26:16.59ID:MN29FRqMすばらしい
頭の良さの勝利だな
俺は
1. 今の数より大きく1の数が三個以内になる数を得る
(操作としては一番小さな桁の1に1を加える)
2. 得られた数の1の数に応じて加える数を変える
2.1 一個なら11を加える
2.2 二個なら1を加える
2.3 三個なら0を加える(なにもしない)
俺のより全然スマートだな。>>659のような頭脳を持ってる人が羨ましい
0661デフォルトの名無しさん
2014/05/05(月) 16:28:49.26ID:o580j4q60662デフォルトの名無しさん
2014/05/05(月) 16:45:52.67ID:I8tguettん?そうなのか?
そうなら
すばらしい頭脳だな
おれは、なるほどとおもってしまった
1.一番下(右側)の1を見て、その前(左側)に1が何個連続するか?
1.1.111なら1に置き換えて、末尾に011を追加する。(-2+3=+1)
1.2.011なら10に置き換えて、末尾に1を追加する。(-1+1=0)
1.3.01なら10に置き換える。
0664デフォルトの名無しさん
2014/05/05(月) 18:20:20.81ID:wP+UVhzoおお、誉められた
うれしい
が、そういう記号操作だけでの変換を目指したが俺は加算してしまった
サンクス、それで書き換える
0665デフォルトの名無しさん
2014/05/06(火) 12:30:13.72ID:yUcXwlIZhttp://ideone.com/X6fsMe
0666665
2014/05/06(火) 13:38:39.15ID:yUcXwlIZ訂正:
http://ideone.com/AGY6VB
0667デフォルトの名無しさん
2014/05/06(火) 19:04:48.61ID:jAXc39Re>>660,663 と >>666 を参考にした。thx
import re
def f623(s):
print s, "->", re.sub("0?1(1*)(0*)$", r"10\2\1", s)
0668デフォルトの名無しさん
2014/05/08(木) 12:18:40.46ID:97XJLzXo誉められたらうれしいか。
よし俺が誉めてやる。
君は凄い!
どう凄いか分からないけど凄すぎる!
凄い凄い
0669デフォルトの名無しさん
2014/05/08(木) 12:21:10.46ID:KH+z9iVCバカにほめられてもね、
うれしくないものなんだよ
知らなかった?
覚えようね
0670デフォルトの名無しさん
2014/05/09(金) 21:53:22.97ID:+RNGlBpz( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0671デフォルトの名無しさん
2014/05/12(月) 23:43:08.09ID:fxgozVYn0672デフォルトの名無しさん
2014/05/12(月) 23:46:46.37ID:5TwcseLyえ、Atom向けに最適化を?
0674デフォルトの名無しさん
2014/05/13(火) 00:36:05.81ID:HKb1GoLWいやー、Cゲンガーだから、書くコードは変わらんよ。
ただ、体感変わるんで多少チューニングのしがいがあるかな。
プログラマのPCは最新命令セットでチープであるべきというのが持論です。
0675デフォルトの名無しさん
2014/05/13(火) 00:40:06.56ID:Iv7eBFJtパズルプログラミングスレで、ガチでAtom開発な奴がいたなあ……
当人に悪気はないんだろうがソースコードがガチで読みづらかったことは覚えてるw
0676デフォルトの名無しさん
2014/05/13(火) 00:42:46.46ID:HKb1GoLWカリカリチューンは苦手なのでアルゴリズムで勝負!と行きたいところだ。
そんな頭もこれから開発しないといけないんだが・・・。Orz
0677デフォルトの名無しさん
2014/05/13(火) 00:47:34.82ID:Iv7eBFJtまあぶっちゃけると俺あのスレの>>608なんだけどねw
アルゴリズムが重要なのは全くその通りなんだぜ
(オーダ的な意味でチューニング<アルゴリズムだから)
制作支援ソフトとかは配布版作ろうとしたけど停滞中。
いつかは出したいけど今はちょっとモチベが下がっててね……
0678デフォルトの名無しさん
2014/05/13(火) 00:53:07.04ID:HKb1GoLWあぁ、すまん。なんか勘違いしてるようだが。
俺はそのすれ知らん。今日組んだんだ。その前はCore2だった。
光学+SSD+2.5HDD*2+RaidCardで電力が30Wくらい。ゴッツイな。
結構満足だ。
0679片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/13(火) 02:23:07.26ID:8dff/8hW0680デフォルトの名無しさん
2014/05/13(火) 10:30:46.83ID:Iv7eBFJtそれお前が欲しいだけじゃねw
お題:文字列に対するSHA-1ハッシュを計算して、16進数で表示する
0681デフォルトの名無しさん
2014/05/13(火) 13:04:54.68ID:7lkK/YFi0682デフォルトの名無しさん
2014/05/14(水) 01:31:14.84ID:Qd/1lT4o0683デフォルトの名無しさん
2014/05/14(水) 01:33:37.97ID:Qd/1lT4oわからん
0684デフォルトの名無しさん
2014/05/14(水) 01:36:06.03ID:mdmP4rsgまたマルチポストかい?
C/C++の宿題片付けます 167代目
http://toro.2ch.net/test/read.cgi/tech/1392388003/344
344 名前:デフォルトの名無しさん[] 投稿日:2014/05/14(水) 01:32:28.65 ID:Qd/1lT4o
http://gyazo.com/d95028bdea8af92bad1729ad221b1130
これわからん・・。
0685デフォルトの名無しさん
2014/05/14(水) 01:39:40.87ID:hD/bpS5Rグローバル変数はローカル変数に隠蔽されるから普通には無理じゃね?
そりゃポインタ作れば読めるだろうけど……
http://codepad.org/i5CbJhId
参考:
http://www.kishiro.com/programming/c/varname_conflict.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1392455598
0686デフォルトの名無しさん
2014/05/14(水) 01:41:22.64ID:d9o6zc9B宿題スレで答えが出た
0687デフォルトの名無しさん
2014/05/14(水) 01:49:54.31ID:Qd/1lT4ohttp://gyazo.com/04627d9e96104949d99b77baad0d62d9
難しすぎて自分頭わるいのかと・・・これもわからない;;
0688デフォルトの名無しさん
2014/05/14(水) 01:53:13.74ID:hD/bpS5R宿題なら宿題スレに投げろや
0689デフォルトの名無しさん
2014/05/14(水) 01:54:34.85ID:d9o6zc9B頭悪いのは間違いないよ
授業料がもったいないから俺にくれ
0691デフォルトの名無しさん
2014/05/14(水) 12:08:13.25ID:mJzoB0fa#include<stdio.h>
int num = 100;
int main(void)
{
int n = 0;
n = 10;
printf("%d\n", n);
printf("%d\n", num); // グローバル変数の方を出力
return 0;
}
コードをコピペできなくてイライラする。
Gyazoとかいうツールをダウンロードさせようとポップアップが鬱陶しいし。
今度からは http://ideone.com/ か http://codepad.org/ に
貼り付けるようにして欲しい。
0692デフォルトの名無しさん
2014/05/14(水) 12:19:37.45ID:bxygoInU0693デフォルトの名無しさん
2014/05/14(水) 15:42:49.93ID:mJzoB0fa0694デフォルトの名無しさん
2014/05/14(水) 15:48:44.92ID:DvAQCprN問題改竄して?
きょうからオボカタ君と呼ぼう
0695デフォルトの名無しさん
2014/05/14(水) 16:34:11.54ID:OTMDvNHHもっとも
int num = 0;
num = 10;
を消せば良いんだが
0696デフォルトの名無しさん
2014/05/14(水) 16:36:37.34ID:xAUxm1CEそれぞれの配列要素のアドレスがどう変化するかを
表示するプログラムを作成しなさい。
実行例
int型のアドレス
2357532
2357536
2357540
2357544
2357548
char型のアドレス
2357492
2357493
2357494
2357495
2357496
double型のアドレス
2357432
2357440
2357448
2357456
2357464
続行するには何かキーを押してください...
これできる人います??
0697デフォルトの名無しさん
2014/05/14(水) 16:51:31.91ID:kvjcNNPe0698デフォルトの名無しさん
2014/05/14(水) 16:52:03.50ID:DvAQCprN0699デフォルトの名無しさん
2014/05/14(水) 16:57:09.62ID:xAUxm1CE0700デフォルトの名無しさん
2014/05/14(水) 17:04:32.16ID:OTMDvNHHそこを人任せにしたら今後に関わるでござる
0701デフォルトの名無しさん
2014/05/14(水) 17:06:39.58ID:xAUxm1CE0702デフォルトの名無しさん
2014/05/14(水) 17:08:14.93ID:d9o6zc9Bdim int_array, 5
mes "int型のアドレス"
repeat 5
mes varptr(int_array.cnt)
loop
sdim char_array, 5
mes "char型のアドレス"
repeat 5
mes varptr(char_array)+cnt
loop
ddim double_array, 5
mes "double型のアドレス"
repeat 5
mes varptr(double_array.cnt)
loop
0703デフォルトの名無しさん
2014/05/14(水) 17:10:08.08ID:xAUxm1CE本当にありがとう!
0704デフォルトの名無しさん
2014/05/14(水) 18:52:42.26ID:hD/bpS5R0705デフォルトの名無しさん
2014/05/14(水) 20:35:49.00ID:UmOXhD1Kここは?
http://toro.2ch.net/test/read.cgi/tech/1393965167/
C言語なら俺に聞け
printf("%d\n", num);
{
extern num; // extern int num;
printf("%d\n", num); // グローバル変数の方を出力したい
}
printf("%d\n", num);
0707デフォルトの名無しさん
2014/05/15(木) 07:11:43.73ID:LD1u0cAx#include<stdio.h>
int num = 100;
int main(void)
{
int* push_num = &num:
int num = 0;
num = 10;
printf("%d\n", num);
num = *push_num;
printf("%d\n", num); // グローバル変数の方を出力
return 0;
}
0708デフォルトの名無しさん
2014/05/15(木) 07:38:24.58ID:ARfjiSB0習ってる範囲の知識を使って解かないとダメなんだよね本来は
章の問題ならその章で扱ってたやり方を使わないと不正解
0709デフォルトの名無しさん
2014/05/15(木) 22:32:21.44ID:smb9AJZLint num = 100;
int main(void)
{
{int num = 0;
num = 10;
printf("%d\n",num);}
printf("%d\n",num);
return 0;
}
0710デフォルトの名無しさん
2014/05/15(木) 22:39:08.16ID:smb9AJZL>>682
0711デフォルトの名無しさん
2014/05/15(木) 22:51:50.44ID:ARfjiSB0int getGlobalNum(void) {
return num;
}
0712デフォルトの名無しさん
2014/05/16(金) 08:58:07.88ID:OZRww1vZttp://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/c/022.html
0713デフォルトの名無しさん
2014/05/16(金) 13:57:03.32ID:BQRU/e0/いかに問題としていい加減かがよくわかるな
0714デフォルトの名無しさん
2014/05/16(金) 15:56:56.54ID:TlIzzni4変数名を変えるのが一番マトモだな
0715デフォルトの名無しさん
2014/05/16(金) 17:01:58.74ID:rkx/vo/u0716デフォルトの名無しさん
2014/05/16(金) 17:06:21.87ID:rkx/vo/uこれが模範解答の一つになっているが、こいつの問題点は
単に解答になっているだけで、実際にはバカ丸出しに近い。
もともと関数スコープであったローカルnumをさらに局所化している。
同じ人物の答えとしては
>>711のほえがスコープを殺さないから良い
呼び出しのオーバーヘッドかかるけどな。
>>707これが実践的だな
んん?おおや?俺の解答しゃないか
あはは
0717デフォルトの名無しさん
2014/05/16(金) 19:05:24.21ID:wFLqrBHCr、r.rヽ / (0)(―)ヽ
r |_,|_,|_,|/ ⌒`´⌒ \ ふむふむ・・・なるほどなるほど・・・
|_,|_,|_,|_,| , -) (-、.|
|_,|_,|_人 (^ i ヽ__ ノ l |
| ) ヽノ | ` ⌒´ /
| `".`´ ノ
入_ノ
\_/
/
/
./ニYニヽ
r、r.rヽ. / (0)(0)ヽ
r |_,|_,|_,|/ ⌒`´⌒ \ で?
|_,|_,|_,|_,| , -) (-、.|
|_,|_,|_人 (^ iヽ__ ノ l |
| ) ヽノ | `ー'´ /
| `".`´ ノ
入_ノ
\_/
/
/
0718デフォルトの名無しさん
2014/05/16(金) 19:30:12.72ID:XlirJvLT0719デフォルトの名無しさん
2014/05/16(金) 19:52:00.34ID:ZlViVWqR0720デフォルトの名無しさん
2014/05/16(金) 20:03:39.40ID:VgQpFLHOCだと>>709アウトだと思うんだけど、C99だと大丈夫なんだっけ?
>>719はC++だし。
0721デフォルトの名無しさん
2014/05/16(金) 20:26:08.57ID:XlirJvLT>>712
答えも載ってる
0722デフォルトの名無しさん
2014/05/16(金) 21:02:00.40ID:VgQpFLHOあぁ、大丈夫になったのね。
勉強になった。ありがとう。
0723デフォルトの名無しさん
2014/05/16(金) 21:03:54.50ID:XlirJvLT0724デフォルトの名無しさん
2014/05/16(金) 21:07:51.72ID:/u1xdpEL0725デフォルトの名無しさん
2014/05/16(金) 21:19:20.78ID:VgQpFLHO昔のこと過ぎて記憶が・・・。
0726デフォルトの名無しさん
2014/05/16(金) 21:21:45.22ID:XlirJvLT0727デフォルトの名無しさん
2014/05/16(金) 21:34:28.15ID:VgQpFLHO>>726
K&RもANSIには対応してないはずだ。対応版あったっけ?
0728デフォルトの名無しさん
2014/05/16(金) 22:11:00.74ID:a2G3KqVr初版のがいわゆる「K&Rスタイル」で、
第二版からANSI準拠になったんだよね>プログラミング言語C
0729片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/17(土) 01:02:28.30ID:MhKuGNEw手順の例:○(0,0)→×(0,1)→○(1,1)→×(1,2)→○(2,2)
┏━━━┓
┃○× ┃
┃ ○×┃
┃ ○┃
┗━━━┛
0730デフォルトの名無しさん
2014/05/17(土) 01:12:19.02ID:9GL1ir6oK&Rの最初っから出来た
0731デフォルトの名無しさん
2014/05/17(土) 01:13:32.12ID:k5NDlW5wそうなんだ。教えてくれてありがとう。
0732デフォルトの名無しさん
2014/05/17(土) 01:14:26.58ID:k5NDlW5wあら、そうなんだ。それは失礼。
0733片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/17(土) 01:21:42.74ID:MhKuGNEw当たりくじを引く手を求めよ。橋と橋の交差はないと仮定する。
入力データ:くじの本数num。左から数えた当たりくじの位置mark。各橋の両端のくじの位置(left,right)を上から並べたリスト。
0734片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/17(土) 01:34:01.96ID:MhKuGNEw0735片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/17(土) 01:37:41.11ID:MhKuGNEwお題:1変数n次多項式を積分せよ。
0736デフォルトの名無しさん
2014/05/17(土) 02:55:26.96ID:CgtrazLe0737デフォルトの名無しさん
2014/05/17(土) 03:26:36.33ID:k5NDlW5w情報がなさ過ぎて回答に困る。
0738デフォルトの名無しさん
2014/05/17(土) 07:04:01.65ID:nwVOk95Q俺、MZ-80B
息子、マジンガーZ
パリティを調べるだけでいいんでないの?
0740片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
2014/05/20(火) 01:54:45.36ID:DYOJrjk8悩んで悩んで絶望のふちでもがき苦しむがいい。
0741デフォルトの名無しさん
2014/05/21(水) 21:03:55.59ID:AVBbOV7Q結果発表来たね
http://paiza.hatenablog.com/
0742デフォルトの名無しさん
2014/05/21(水) 21:36:21.01ID:GgA/fGkQ「※ コードの実行は引き続き可能です。」だそうだけど、
どうせなら各段階におけるサンプルデータも欲しかったな……
0743デフォルトの名無しさん
2014/05/21(水) 22:07:38.60ID:TO/h2bm1そのブログ面白いね。
0744デフォルトの名無しさん
2014/05/22(木) 23:32:45.04ID:B3oRXjWe例
a=54, b=66 のとき
0 0
9 11
18 22
27 33
36 44
45 55
54 66
0745デフォルトの名無しさん
2014/05/23(金) 00:40:20.49ID:m/paob5rttp://ideone.com/4TYMLL
ほぼC。これであってる?浮動小数怖いです。(^q^
でねぶかいとすあるしゃまーり〜〜〜。
0746デフォルトの名無しさん
2014/05/23(金) 19:47:20.98ID:XGwnlXvLC++のコード何やってるか分かんね
こんなの思いつく人神だわ
0747デフォルトの名無しさん
2014/05/23(金) 21:59:06.56ID:m/paob5r>>745は第一象限でしか動作しません。
と、怒られて言い訳してたんだが。
>>744への解答として俺が書いたもの((a,b)が第一象限以外でもOK):
http://codepad.org/kXE3s8yI
0749デフォルトの名無しさん
2014/05/24(土) 07:55:36.23ID:/64XDFSfhttp://ideone.com/EvJAXY
0750デフォルトの名無しさん
2014/05/24(土) 08:36:46.37ID:gwzwW68Ygcd := method(a,b,if(b==0,a abs,gcd(b,a%b)))
f := method(a,b,
c := gcd(a,b)
d := a/c
e := b/c
for(i,0,c,
writeln((d*i)asString(0,0)," ",(e*i)asString(0,0))
)
)
Io> f(9876543213,123456789)
0 0
3292181071 41152263
6584362142 82304526
9876543213 123456789
>以前のCでは構造体の代入ができなかった
正義だとしか表現できない妥当な仕様ではなかったとは誰がいえようか
0752デフォルトの名無しさん
2014/05/24(土) 15:36:41.73ID:hlo3j/US0753デフォルトの名無しさん
2014/05/24(土) 15:38:35.34ID:kHQIp9PWsizeofでみてもデータ分しか無いよね
0754デフォルトの名無しさん
2014/05/24(土) 18:44:02.75ID:FMzUCyJQ結構難しいかも。
上級者の人は、どうやったら計算量を落とせるかも考えてくれるとうれしい。
0755デフォルトの名無しさん
2014/05/24(土) 19:03:41.87ID:10FEvEcT一応出題意図としては、トランジスタから構成され本質的にはビット演算しか出来ない CPU から
四則演算が出来る計算機はどのように構成されているか?
という原理が分かるかなと思ったからです。
0756デフォルトの名無しさん
2014/05/24(土) 19:07:44.39ID:5k74nlaX0757デフォルトの名無しさん
2014/05/24(土) 19:27:38.81ID:4Shar09G津志田と思うけどまじれすすると
XORがミソだよ
0758デフォルトの名無しさん
2014/05/24(土) 19:37:00.83ID:5k74nlaX0759デフォルトの名無しさん
2014/05/24(土) 19:45:03.49ID:Ri0gNSHNで CLA の最適化で計算量が減る
0760デフォルトの名無しさん
2014/05/24(土) 19:50:21.68ID:jYoMAPG8シフトレジスタとかループそのものなんだが‥
乗算や特に除算は基本的にループを使わないと簡単でないと思うが‥
今のCPUでは、乗算や除算を1クロックでたたき出しているのか?
0761デフォルトの名無しさん
2014/05/24(土) 19:51:12.11ID:efJDjnh7>本質的にはビット演算しか出来ない CPU
何故そう考えたのかには興味が有る。
実際のCPUは、キャリーみたいにループを使ってるよ。
0762デフォルトの名無しさん
2014/05/24(土) 19:52:17.80ID:jYoMAPG8CLA? なんの略?
0763デフォルトの名無しさん
2014/05/24(土) 19:57:31.97ID:jYoMAPG8組み合わせ回路から順序回路への飛躍が重要なんだけれども、その辺りどう考えている?
0764デフォルトの名無しさん
2014/05/24(土) 19:57:38.89ID:/BvmKfbO比較と条件分岐は大丈夫です。書き忘れてました。
>>758
CPUは複数のトランジスタから構成されているので、それらからどう算術論理回路を作るか、ということです。
コード自体は、3-4行で書けると思います。
0765デフォルトの名無しさん
2014/05/24(土) 20:02:54.98ID:oLTWIoFYあと一つ書き忘れてましたが、int など整数が固定長の言語でお願いします。
>>763
鋭いですね。おっしゃる通りです。
そこの部分が一番難しいポイントだと思います。
再帰をうまく使わないと解けません。
0766デフォルトの名無しさん
2014/05/24(土) 21:03:22.37ID:trY52c2mで? 誰か妥当でないと言ってたの?
一応自分の書き込みだから再掲しておこうか。
--
760 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 10:14:54.12 ID:KAZQ16GG
>>750
size_tが8バイト、intが4バイトの環境なら、速度的にもサイズ的にも不利だね。
それと、constは最適化の為というよりバグを出さない為や他人に読ませる為。
761 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 10:33:40.06 ID:KAZQ16GG
>>755
あんたの言い分だと、これもダメになるぞ。
typedef int type;
type func(type bar)
{
type foo = bar;
return foo;
}
これを、
typedef struct DType type;
しただけの違いじゃないか。
# 確かにごく初期のansi以前のCでは構造体の代入ができなかったらしいが。
0767デフォルトの名無しさん
2014/05/24(土) 21:27:09.51ID:CbUGe6dUhttp://codepad.org/dgZfNsh0
とりあえず符号なしで。符号付き乗除算は符号判別して符号なしに帰着でいいでしょ。
0768デフォルトの名無しさん
2014/05/24(土) 22:00:24.25ID:qE+UoRiEすばらしい。正解です。
0769デフォルトの名無しさん
2014/05/24(土) 22:06:59.43ID:jYoMAPG8要はループを再帰でやれってことだね
これはトランジスタ云々のデバイスサイドとはまったく逆の計算理論(論理学?)サイドのアプローチなんだが‥
まあいい、再帰は散々書いてもう飽いているが気が向いたら
http://peace.2ch.net/test/read.cgi/tech/1392388003/283,306
http://codepad.org/5zbOAPWc
0770デフォルトの名無しさん
2014/05/24(土) 23:14:24.49ID:54g4/Ytq素晴らしいな。スゲースマート。
0771デフォルトの名無しさん
2014/05/24(土) 23:33:49.33ID:gwzwW68Yaddの中の (a | b) ^ c は a ^ b でもよさそう
0772デフォルトの名無しさん
2014/05/25(日) 00:10:23.71ID:XqOF+ghk0773デフォルトの名無しさん
2014/05/25(日) 06:24:15.39ID:m3HlWNFr0774デフォルトの名無しさん
2014/05/25(日) 07:56:51.19ID:dtutVys20775デフォルトの名無しさん
2014/05/25(日) 11:07:34.80ID:4HcH8XE8を最上位ビットを7、最下位ビットを0として
以下のように対応させ、2x2x2の白黒立方体をつくる。
1段目
0 1
2 3
2段目
4 5
6 7
ふたつの2進数が与えられたとき対応するふたつの白黒立方体が
同じ配色パターンかどうかを判定する。
例
00000001, 10000000 -> 真
00001111, 10101010 -> 真
10010000, 01000001 -> 偽
0776デフォルトの名無しさん
2014/05/25(日) 11:17:56.98ID:PdXrw9AK0777デフォルトの名無しさん
2014/05/25(日) 16:03:29.28ID:EZSYJaem0778デフォルトの名無しさん
2014/05/25(日) 19:59:08.60ID:AMNo8g3jなんかいい回転の仕方ないかなぁ。全部列挙するのもダサいしなー。
うーん。
0779デフォルトの名無しさん
2014/05/25(日) 20:13:42.38ID:AMNo8g3jやっぱ、俺、頭悪いなー。Orz
0781デフォルトの名無しさん
2014/05/25(日) 22:05:48.42ID:AMNo8g3jべたーC。これなんでテスト通らないんだろう??誰かデバッグしてー!!!!Orz
俺頭悪くて頭の中でキューブが回らん。
Ideon死んでるし。
0782デフォルトの名無しさん
2014/05/25(日) 22:09:07.31ID:AMNo8g3j>>782 これで助かったか? 証明:
10010000->00000110
01000001->00000110
0784デフォルトの名無しさん
2014/05/25(日) 22:54:36.09ID:AMNo8g3j超助かった。俺は間違ってなかった!!ヒィーーハーー。Orz
マジで戦々恐々だったんだけど。超感謝!!
>>775は何か一言!
ちなみに俺たまにCゲンガーの逆襲書いてる人ね。
今回はがんばってインデックスマジックでときました。
0785デフォルトの名無しさん
2014/05/25(日) 23:08:53.50ID:AMNo8g3j0786775
2014/05/25(日) 23:39:06.66ID:4HcH8XE80787デフォルトの名無しさん
2014/05/26(月) 00:01:22.27ID:A1ad6/Mwこの際わざとかどうかはいいけど、テスト違ってると悶絶するから気を付けてね。
00010010,00000110 -> 偽
00010011,00000111 -> 偽
00010100,00000110 -> 偽
00010101,00000111 -> 偽
寝るら
0789デフォルトの名無しさん
2014/05/26(月) 00:12:49.35ID:A1ad6/Mw>>788
おつかれー。
0790デフォルトの名無しさん
2014/05/26(月) 01:08:44.41ID:XKYHDmPBdef f755(a,b):
a, b = ["{:08b}".format(c) for c in (a, b)]
aa = []
for i in range(3): # (x,y,z) -> (z,x,y)
for j in range(2): # upside down
for k in range(4): # rotation in (x,y)
aa.append(a)
a = "{1}{3}{0}{2}{5}{7}{4}{6}".format(*list(a))
a = "{5}{4}{7}{6}{1}{0}{3}{2}".format(*list(a))
a = "{0}{4}{1}{5}{2}{6}{3}{7}".format(*list(a))
print("{}, {} -> {}".format(a, b, b in aa))
f755(0b00000001, 0b10000000)
f755(0b00001111, 0b10101010)
f755(0b10010000, 0b01000001)
f755(0b10010000, 0b01000010)
0791788
2014/05/26(月) 07:29:07.91ID:DX+XivPL790 明日までに後で走らせて見る。789とはパターンが違う。
789 のパターンは、
bool RotX(DType &v)// 23670145
bool RotY(DType &v)// 13025746
bool RotZ(DType &v)// 40625173
0793デフォルトの名無しさん
2014/05/26(月) 07:44:11.45ID:ptXAqcmgint など整数が固定長の言語でお願いします。
結構難しいかも。
上級者の人は、どうやったら計算量を落とせるかも考えてくれるとうれしい。
0794デフォルトの名無しさん
2014/05/26(月) 07:45:41.42ID:ptXAqcmgint など整数が固定長の言語でお願いします。
結構難しいかも。
上級者の人は、どうやったら計算量を落とせるかも考えてくれるとうれしい。
0795デフォルトの名無しさん
2014/05/26(月) 07:46:04.23ID:UJEeKjCa0796デフォルトの名無しさん
2014/05/26(月) 07:51:28.91ID:ptXAqcmg>>753 は間違いです
>>754 でおながいします
0797デフォルトの名無しさん
2014/05/26(月) 07:55:14.31ID:A1ad6/Mw0798デフォルトの名無しさん
2014/05/26(月) 08:18:30.79ID:ptXAqcmg剰余を使わないと出来ないのであれば使っても良いです
0799デフォルトの名無しさん
2014/05/26(月) 08:50:13.97ID:A1ad6/Mw0800デフォルトの名無しさん
2014/05/27(火) 01:07:30.65ID:g/OODa/4(define mod
(lambda (a b)
(cond
((zero? b) #f)
((< a b) a)
((= a b) 0)
(else
(mod (- a b) b))))
割り算はいらないな
0801デフォルトの名無しさん
2014/05/27(火) 01:57:51.05ID:5Qu+jOxY奥さん、再起禁止なんですってよ。
むずかしいわねー。
0802デフォルトの名無しさん
2014/05/27(火) 06:06:23.36ID:g/OODa/4知らなかったわ
0803デフォルトの名無しさん
2014/05/27(火) 16:14:50.75ID:IrQQ/nzK0804デフォルトの名無しさん
2014/05/27(火) 16:20:06.54ID:6eXUGxGD読解力ないやっちゃな
0805デフォルトの名無しさん
2014/05/27(火) 21:06:20.06ID:5Qu+jOxYじゃないと書きようもないですし。
0806デフォルトの名無しさん
2014/05/27(火) 21:16:01.00ID:ZPl6eSmM0808デフォルトの名無しさん
2014/05/27(火) 22:36:40.58ID:5Qu+jOxYまぁそういうことになるんかねー。
アルゴリズム一発で解けるんだったら溶いてほしいね。出題者じゃないけど。
やっとビット抜き出す処理書いた。きついー。マジきつい。
>>807
そういう意味では君も結構すごいと思うよ。
0809デフォルトの名無しさん
2014/05/27(火) 23:48:42.97ID:5Qu+jOxYttp://ideone.com/do33Ns
ほぼC。マジで死ぬよー。あってるのか??
Mod使いました。変換可能らしいので変換してください。
スナイプさえ作れば後は足し算で済むし、Notあれば逆変換も作れるし。
たぶん大丈夫だよね?表示関数は正確性のために組み込み演算子使ってます。
計算量落とすってどうやってやるんだぁ〜〜〜〜!!!!!死ぬ。
0810デフォルトの名無しさん
2014/05/28(水) 00:02:18.77ID:BR1Tkgwoa - d * (a / d) で?
0811デフォルトの名無しさん
2014/05/28(水) 00:08:12.82ID:1CfqcAEAそう。余り。剰余。説明は>>798かな?
それであってると思うよ。
0812デフォルトの名無しさん
2014/05/28(水) 01:09:11.29ID:1CfqcAEA馬鹿ですが解けましたよ?(ニッコリ
多分。(がくがくぶるぶる。
0813デフォルトの名無しさん
2014/05/28(水) 19:28:15.71ID:r7yQZe0C模範解答の解説来たね
http://paiza.hatenablog.com/
0814デフォルトの名無しさん
2014/05/28(水) 19:35:45.93ID:BR1Tkgwo> スタックを使うO(HW) 解法が存在します。
どんな方法や
0815デフォルトの名無しさん
2014/05/28(水) 21:24:07.39ID:EZ6i74UChttp://ideone.com/vPuYAR
1bitずつ32個計算する方法しか思いつかんかった。。。
0817デフォルトの名無しさん
2014/05/29(木) 08:52:56.01ID:QcRCI5DY正解っぽいね
乙でした
0818809
2014/05/29(木) 23:10:25.35ID:xZLwX0Bk0819デフォルトの名無しさん
2014/05/30(金) 10:04:16.43ID:ap828pqo0820デフォルトの名無しさん
2014/05/30(金) 11:04:19.83ID:K92fSmS+俺には難しい
マイナスは2の補数で表現するってあたりから勉強する
でも、とても励みになった、サンクスです
0823デフォルトの名無しさん
2014/05/31(土) 05:11:19.49ID:74UzWmZV0824デフォルトの名無しさん
2014/05/31(土) 06:28:06.16ID:S66lgqUj0825デフォルトの名無しさん
2014/05/31(土) 20:17:31.24ID:RzySFflE四則演算+剰余しか使ってないのにぃ〜。
1ビット算出して大きくしてるだけじゃないですかー。Orz
関数も使っちゃダメなの?そんな話ないよ。
たとえ関数がだめでも展開するだけになっちゃうよ?マクロ組むとか。
具体的にどう四則演算になってないか教えてください。
お願いします。
0826デフォルトの名無しさん
2014/06/01(日) 10:03:30.64ID:JwNR3eSOビット演算になっていにょいようにょ
0827デフォルトの名無しさん
2014/06/01(日) 10:50:18.35ID:QQAPK+BU0828デフォルトの名無しさん
2014/06/01(日) 21:15:24.10ID:073ZpLpT再起禁止なんですよね。
テンプレートの扱いについては未定義ですが・・・。
0829809
2014/06/02(月) 00:03:02.55ID:Zd9YSbvWわけがわからないよ。
うぅわああああん。(ToT
http://ideone.com/cs3nmw
0831デフォルトの名無しさん
2014/06/03(火) 02:23:16.40ID:R8wsXVj9がんばってるねー。
これだけ真面目に改造してくれると書いた方も誉れだよ。
がんばって!
そうそう、ループ回数が4*4*4のようだけど、あってる?
自分でやれってこと?
0832デフォルトの名無しさん
2014/06/03(火) 02:30:34.43ID:R8wsXVj9そうそう、投稿するときは一言ほしいなー。
このテストパターンは全部真になることを想定して書いてあるの?
0833デフォルトの名無しさん
2014/06/04(水) 05:30:43.92ID:QbUS6u7k( ・ω・) <ステンバーイ
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)
0834デフォルトの名無しさん
2014/06/04(水) 09:59:31.38ID:q8b8aypYC++11 から C++ に直してくれ。アップアップ溺れそう
0835デフォルトの名無しさん
2014/06/04(水) 23:41:52.12ID:1iROfyZz例
x=10 -> 36
x=64 -> 13947137604
x=100 -> 7412080755407364
0836デフォルトの名無しさん
2014/06/05(木) 01:08:46.94ID:MiWap7Hz1/3の三乗は1/27だから
中央値に近い自乗が最大?
0837デフォルトの名無しさん
2014/06/05(木) 01:12:17.98ID:t1UhlRAehttp://ideone.com/PtLu5N
0838デフォルトの名無しさん
2014/06/05(木) 01:20:29.41ID:MiWap7Hz0839デフォルトの名無しさん
2014/06/05(木) 02:36:57.82ID:g1rky1u8from __future__ import print_function
def f835(x):
a, b = x % 3, int(x / 3)
if a <= 1 and b >= 1:
a += 3
b -= 1
s = "{}*3**{}".format(a, b)
m = eval(s)
print("x={0} -> {3}={1}".format(x,m,a,s))
for i in range(10): f835(i)
f835(10)
f835(64)
f835(100)
0840デフォルトの名無しさん
2014/06/05(木) 06:15:27.83ID:/utsiCTM特に特殊なことやってないと思うんだけど。
for文がForeachなだけで。俺もvc2013eeで書いてるし。
C++03は忘れました。テヘッ!
0841ゴアー神風 ◆mW2uevDxfA
2014/06/05(木) 07:26:17.09ID:tu5JPzwBttp://ideone.com/i8yatB
ほぼC。間違ってること確定だが、問題が不明瞭で正確性がない。
言い訳はソースに書いておいた。
テストとは一致してないので、多分俺のだめだね。
結果が与えられてるんだったら、素数で割ってけばNを求められるんだがね〜。
結果書いてあるけど、それは計算前に取得できるのか、計算後に取得できるのか不明瞭だ。
とりあえず書いたので、>>837を参照しようと思う。
0842デフォルトの名無しさん
2014/06/05(木) 07:27:28.84ID:tu5JPzwBPCゲーのHeathstoneをよろしく!
0843デフォルトの名無しさん
2014/06/05(木) 07:40:09.12ID:tu5JPzwB上限値を超えない保障をどうやってやってるのかよくわからん・・・。Orz
0844デフォルトの名無しさん
2014/06/05(木) 08:49:21.85ID:tu5JPzwBうーん。お手軽実装だと、ここら辺が限界。
一応、偏ってるが思いつく総当たりはしてるが、思った結果にならんね。
うーん。よくわからん。
0845デフォルトの名無しさん
2014/06/05(木) 09:18:40.08ID:nSDQrrzJruby
ttp://ideone.com/vKiuYj
0846デフォルトの名無しさん
2014/06/05(木) 09:25:06.90ID:tu5JPzwB0847デフォルトの名無しさん
2014/06/05(木) 11:01:34.79ID:2vI6486P大丈夫、はなから諦めてる俺がいる
0848デフォルトの名無しさん
2014/06/05(木) 11:42:34.78ID:tu5JPzwBとりあえず、間違ってもいいから答えを出すのがモットーだが、
あきらめた時の敗北感だけはどうしても許せん。ので書くんだが、この格差ですよ。
世の中広い!Orz
0849デフォルトの名無しさん
2014/06/05(木) 12:36:51.82ID:fFqYdufVf := method(x,(3**((x/3)floor-1)*(2+2**(x%3)))floor)
Io> f(10)
==> 36
Io> f(64)asString(0,0)
==> 13947137604
Io> f(100)asString(0,0)
==> 7412080755407364
0850デフォルトの名無しさん
2014/06/05(木) 15:15:41.63ID:X0QJHSOXSchme
手順1
自然数xは3をm回加えて、2をn回加えた数となるような
m,nを求める
手順2
3をm回かけた数に2をn回かけた数をかける
(求める最大値= 3^m * 2^n )
ttp://codepad.org/20fkwUl9
0851デフォルトの名無しさん
2014/06/05(木) 15:19:17.67ID:X0QJHSOX正しくは
>>835 への解答
0852デフォルトの名無しさん
2014/06/05(木) 18:22:28.75ID:O76MB/nLGo で動的計画法
http://gist.github.com/anonymous/c30826b49bcdd418b08e
0853デフォルトの名無しさん
2014/06/05(木) 18:48:16.27ID:O76MB/nL0854デフォルトの名無しさん
2014/06/05(木) 20:04:01.52ID:O76MB/nL自己解決。
簡単のため N を k "等"分した場合の最大値を求めることにする。
この時 Σ(i ~ k) (N/k) = N/k Σ(i ~ k) = (N / k) * k = N と表せることから
Π(i ~ k) (N/k) = (N/k) ^ k ... (1)
を最大にするような k を選べばよい。
(1)の対数を取って f(k) として、対数の最大値を求めることにする。
f(k) = log((N/k)^k) = k * log(N/k)
k を微分して極値を求めると
f'(k) = log(N) - log(k) - 1
より f'(k) = 0 の時 k = (N/e) となる。
つまり (N/e) 等分した場合最大値を取る。 e = 2.718 で、この値は今回の場合実数ではなくて、自然数でなければならない。
ここで、以下の点に着目することにより
f(N/2) = N * log(2)/2 = N * 0.34657
f(N/3) = N * log(3)/3 = N * 0.36620
から f(N/2) < f(N/3) となるので、N = 3 で分割させるのがよい。
(もし余りが存在する場合は、余りを 2 の倍数にするようにする)
よって >>850 のようなアルゴリズムになる。
0855デフォルトの名無しさん
2014/06/05(木) 20:07:01.78ID:2vI6486PScheme >>850のデバッグ版
;;; 手順1
;;; 自然数xは3をm回加えて2をn回加えた数
;;; であるようなm,nを求める。mは可能な最大値を
;;; 求める
;;; (例)
;;; 14 -> (+ 3 3 3 3 2) m=4,n=1 Ok
;;; 14 -> (+ 3 3 2 2 2 2) m=2,n=4 No
;;;
;;; 手順2
;;; 3をm回かけた数に2をn回かけた数をかける
;;; 求める最大値-> 3^m * 2^n
ttp://codepad.org/WVzTwBh6
0856841
2014/06/05(木) 23:25:09.50ID:tu5JPzwBなるほど、わからん。
けど、3^m*2^nにすればいいことが分かったのでこれなら解けるわ。
数学できる人ってすごいなー。
0857841
2014/06/06(金) 00:04:08.90ID:tu5JPzwB>>855メソッドをパクッてそれっぽい値を出してみた。
確かに出るなー。うーん。俺ってほんと馬鹿。
0858デフォルトの名無しさん
2014/06/06(金) 00:16:27.56ID:K7YTK/420859デフォルトの名無しさん
2014/06/06(金) 00:20:59.52ID:gpt2nU9A最近出題者の失踪が相次いでて出てきてくれないんだよね。
0860デフォルトの名無しさん
2014/06/06(金) 00:39:43.36ID:tIw3lkPh全ケースの一般解じゃない?
ちなみに 8 バイトの long long でも 1000 までは計算できない
問題としてはシンプルで面白いと思うけど
0861デフォルトの名無しさん
2014/06/06(金) 00:48:59.44ID:K7YTK/420862デフォルトの名無しさん
2014/06/06(金) 00:53:56.18ID:K7YTK/42と
3+3=6 -> 3*3=9
の
このパターンのみが和と積の大小関係が逆転するケースって感じなのかな?
0863デフォルトの名無しさん
2014/06/06(金) 01:07:41.46ID:K7YTK/42http://ideone.com/ZFLn23
0864デフォルトの名無しさん
2014/06/06(金) 01:27:53.53ID:oWmY0rhmlong long int pow3(int a){
if(a == 0) return 1;
return 3 * pow3(a-1);
}
void f(int n){
int a2, a3;
long long int m;
a3 = n/3;
a2 = n%3;
if(a2 == 0) a2 = 1;
else if(a2 == 1) {a3--; a2 = 4;}
m = pow3(a3) * a2;
printf("%lld\n", m);
}
int main(){
int i;
for(i = 2; i < 120; i++){
printf("%d\t", i);
f(i);
}
return 0;
}
0865デフォルトの名無しさん
2014/06/06(金) 02:50:28.11ID:gpt2nU9Aへぇ、同じコストで逆転することがあるのか。
例外ってこういうことを言うのかねぇ〜。
べんきょうになるわ。
0866デフォルトの名無しさん
2014/06/06(金) 03:55:37.93ID:GstR2kK+これは2をはじめに考えてしまっている
なるべく積がおおきくなるようにしたいのだから
3をはじめに考えなければならない
そうすれば6で場合分けする必要はない
0867デフォルトの名無しさん
2014/06/06(金) 03:59:18.71ID:GstR2kK+>>855 のデバッグ版(+ m,n表示付き)
ttp://codepad.org/UKKAW4Cy
0868デフォルトの名無しさん
2014/06/06(金) 04:39:58.94ID:LPhXdKGTreturn pow(3*3, (int)(x/6)) * (x%6 ? (x%6==5? 2*3 : x%6) : 1);
}
0869デフォルトの名無しさん
2014/06/06(金) 05:40:59.09ID:47r183Byf(1)がキケン
0870デフォルトの名無しさん
2014/06/06(金) 05:52:02.29ID:47r183By数が1個では和も積も計算できませんね。失礼しました。前言、忘れてください。
0871デフォルトの名無しさん
2014/06/06(金) 05:53:24.09ID:LPhXdKGTreturn pow(3, (int)((x-4*((x%3)%2))/3)) * (4*((x%3)%2) + (x%3)*(1-(x%3)%2));
}
0872デフォルトの名無しさん
2014/06/07(土) 07:57:32.21ID:rofUEf38■なぜ3^m * 2^nが最大値となるのか
ええと、別表現です(ま、いろいろ言えるわけですが)
なぜ3のm乗と2のn乗との積が最大値になるのか?というと
1. 自然数2と3はそれを1ではない2つの自然数の和としては表現できない。
( 1は乗法の単位元なので最大の積を求めるためには最悪だから無視するよーん
1を認めてしまうと (a1 + a2) > ( a1 * a2)
となってしまい、最大の積を求めるもクソもなくなる
例:x=100
100 = ( 1 + 99) -> ( 1 * 99)=99 )
2. しかし4以上は2または3の和として表現できる
3. さて一般に1でない自然数数a1,a2の積はその和に等しいかそれよりも大きい
(a1 * a2) >= ( a1 * a2)
4. 以上から4以上は3と2の和に分解したほうが大きな積を得ることができる(正確には小さな積を得ることを防げる)
5. そこで、3のm乗と2のn乗の積にするのが一番大きな積にできる
例1: x=10の場合
(+ 4 6) -> (* 4 6)=24 とするよりも (* (* 2 2) (* 3 3))=36
としたほうが大きな数になる
例2:x=4の場合
(+ 2 2)しかないので(* 2 2) これは(+ a1 a2 ) = (* a1 2)の場合
0873デフォルトの名無しさん
2014/06/07(土) 08:12:47.01ID:rofUEf38どうして、自然数4以上は、2と3の和として表現できるか?といえば、
1. 自然数は偶数か奇数である
2. 偶数は2の和として表現できる
3. 奇数はan = (3+ 2*(n 1)) なので3と2の和として表現できる
おしまい
0875デフォルトの名無しさん
2014/06/07(土) 08:33:20.60ID:y6RJGWR30876864
2014/06/07(土) 12:44:00.88ID:tEh/6PYva2 = 4*(n%3%2) + (1+n%3/2) * (1-n%3%2);
m = pow3(a3) * a2;
>>875 その前にダメなんだけど。(:->)
0877デフォルトの名無しさん
2014/06/07(土) 16:47:10.59ID:fH+IC/Nz例
today -> to td ta ty od oa oy da dy ay
0879デフォルトの名無しさん
2014/06/07(土) 18:33:44.13ID:rofUEf380880デフォルトの名無しさん
2014/06/07(土) 19:26:39.16ID:3R8CEA88char buf[1000];
fgets(buf,1000,stdin);
int len=strlen(buf);
buf[--len]=0;
for (int i=0;i<len-1;++i)
for(int j=i+1;j<len;++j)
{putchar(buf[i]);putchar(buf[j]);putchar(' ');}
0881デフォルトの名無しさん
2014/06/07(土) 19:33:16.22ID:y6RJGWR3> その前にダメなんだけど。(:->)
ダメって?
0882デフォルトの名無しさん
2014/06/07(土) 19:35:01.70ID:lO6x1Rj4subseq2 [] = []
subseq2 (x:xs) = foldr (\y acc -> [x,y] : acc) (subseq2 xs) xs
main = print $ subseq2 "today" -- ["to","td","ta","ty","od","oa","oy","da","dy","ay"]
0883デフォルトの名無しさん
2014/06/07(土) 21:19:33.26ID:uZb6ezHdScheme
;;; 手順1
;;; 文字列strを最初の1文字carと
;;; 2文字目以降の文字列cdrに分ける
;;; 例:"today"
;;; str="today"
;;; car = 't
;;; cdr = "oday"
;;;
;;; 手順2
;;; carと(cdrのn文字目)の組set1を作る
;;; 例 car= 't cdr="oday"
;;; set=("to" "td" "ta" "ty")
;;;
;;; 手順3
;;; strを2文字目以降に更新する
;;; 例 str="today" -> str="oday"
;;;
;;; もしstrの長さが1以下になったらset1が解答
;;; そうでなければset1に(手順1から手順3を
;;; 繰り返してできた組を加えたものが答え)
;;; (再帰させる)
ttp://codepad.org/kT3XrspK
0884デフォルトの名無しさん
2014/06/07(土) 23:27:58.59ID:fH+IC/Nzf =: {~4$.[:$.[:</~i.@#
,' ',.f 'mevius'
me mv mi mu ms ev ei eu es vi vu vs iu is us
0885デフォルトの名無しさん
2014/06/08(日) 08:26:25.33ID:W6M7L2Zj'長さが3文字以上の文字列が与えられたとき、2文字の組合せを求める。'(_文字列,_文字組合せ) :-
sub_atom(_文字列,0,1,_,_文字_1),
sub_atom(_文字列,1,_,0,_文字列_2),
'長さが3文字以上の文字列が与えられたとき、2文字の組合せ'(_文字列_2,_文字_1,_文字組合せ).
'長さが3文字以上の文字列が与えられたとき、2文字の組合せ'(_文字列_2,_文字_1,_文字組合せ) :-
sub_atom(_文字列_2,_,1,_,_文字_2),
atom_concat(_文字_1,_文字_2,_文字組合せ).
'長さが3文字以上の文字列が与えられたとき、2文字の組合せ'(_文字列_2,_,_文字組合せ) :-
'長さが3文字以上の文字列が与えられたとき、2文字の組合せを求める。'(_文字列_2,_文字組合せ).
0886デフォルトの名無しさん
2014/06/08(日) 16:48:08.68ID:R0ABWUTDttp://ideone.com/hpiuHI
べたーC。あってるかな?
おまけで逆順検索入れておいた。簡単だったし。
なんか途中で動かないコードに出会って泣いてたが、アドレス計算になってたのかなぁ。
この辺があいまいだな。俺。
0888デフォルトの名無しさん
2014/06/08(日) 17:17:45.89ID:R0ABWUTDやっといてあれだけど、遅いよ。
問題は正確に作りましょう。仕様書だからねぇ。
0889デフォルトの名無しさん
2014/06/08(日) 17:26:59.27ID:8aybWNLhえ?
そうなの?
なら書き直すか
0890デフォルトの名無しさん
2014/06/08(日) 17:29:35.06ID:8aybWNLh0891デフォルトの名無しさん
2014/06/08(日) 17:33:25.88ID:R0ABWUTD同じ2文字というのは、たとえば"aa"という組み合わせはおk?
それとも、"AB"と"BA"が同じ意味ということでNG?
その両方?
0892デフォルトの名無しさん
2014/06/08(日) 17:39:01.44ID:8aybWNLh出題者に聞かないとわからないね
"abababab"の場合、どうなりますかあ?
ま、問題が甚だ曖昧だった!かな
0893デフォルトの名無しさん
2014/06/08(日) 17:45:09.43ID:R0ABWUTDまぁ、そうだねー。
その例題解いてくれればヒントになるわな。
俺の場合"aa"は許可してるからねぇ。
0895デフォルトの名無しさん
2014/06/08(日) 18:03:24.82ID:8aybWNLhん?出題者?
あれれ?
0896デフォルトの名無しさん
2014/06/08(日) 18:09:55.46ID:R0ABWUTD英語読めない情弱に英語で立ち向かってくるとはやるな!!
0897デフォルトの名無しさん
2014/06/08(日) 18:12:51.81ID:R0ABWUTDあってる?
0898デフォルトの名無しさん
2014/06/08(日) 18:16:16.90ID:FvrpJhIifrom __future__ import print_function
import itertools
def f887(s):
a = ["".join(x) for x in itertools.combinations(s, 2)]
b = []
for x in a:
if x in b: continue
# if x[0] == x[1]: continue
b.append(x)
print("{} -> {}".format(s, " ".join(b)))
f887("today")
f887("abcdcba")
言葉足らずな出題者様の仰せのままに。
0899877
2014/06/08(日) 18:28:34.45ID:6CdOGeRBf := method(s,
a := s size - 1
for(i, 0, a - 1,
for(j, i + 1, a,
write(s slice(i, i + 1),s slice(j, j + 1), " ")
)
)
)
Io> f("book")
bo bo bk oo ok ok
>>878 >>887 >>894
は私は関知しません。
組合せの問題も2個に限れば簡単にできるな、という問題のつもりでした。
0900デフォルトの名無しさん
2014/06/08(日) 18:41:23.39ID:R0ABWUTD解答は示した。としておこう。
俺の微妙に間違ってるけど、いっか。
0901デフォルトの名無しさん
2014/06/08(日) 19:41:38.65ID:Qs6rCHv1http://ideone.com/05potW
0902デフォルトの名無しさん
2014/06/09(月) 09:38:35.10ID:EjU0b0TWお題:文字列sにあるn個の文字からなる集合を
要素とする集合をつくる
例1:以下n=2
"today"-> {to td ta ty od oa oy da dy ay}
"book" -> {bo bk ok}
"ababab" -> {ab}
"ab" -> {ab}
"aa" -> {}
"a" -> {}
"" -> {}
例2:以下n=3
"today"-> {tod toa toy oda ody day dat ayt ayo}
"book" -> {boo bok okb}
"abc" -> {abc}
"ababab" ->{}
"ab" -> {}
"a" -> {}
"" -> {}
0903デフォルトの名無しさん
2014/06/09(月) 11:12:28.10ID:EjU0b0TW例に誤りあり
n=3のとき
"book"はbokのみとなる
0904デフォルトの名無しさん
2014/06/09(月) 11:28:08.89ID:1UHtXUZI0905デフォルトの名無しさん
2014/06/09(月) 12:50:38.64ID:nO8TK9sWttp://ideone.com/YR1Ahf
ほぼC。難しかった。多分あってると思うけど、バグってるかも。
一瞬滅茶苦茶汚くなって投げようかと思ったが、途中で閃いて短くなった。
今回は計算量多め。Goto使ってるし。微妙に黒魔術のにおいがする。
スゲー疲れた。
0906デフォルトの名無しさん
2014/06/09(月) 14:19:44.15ID:2ms5Efhd文字列にあるn個の文字からなる集合を要素とする集合をつくる(_文字列,_n,_文字列集合要素) :-
atom_chars(_文字列,_文字ならび),
文字列の要素の重複を取り除いた文字ならび(_文字ならび,_要素に重複のない文字ならび),
組合せ(_要素に重複のない文字ならび,_n,_組合せ),
atom_chars(_文字列集合要素,_組合せ).
文字列の要素の重複を取り除いた文字ならび(_文字ならび,_要素に重複のない文字ならび) :-
findall(_文字,(
append(L1,[_文字|_],_文字ならび),
\+(member(_文字,L1))),
_要素に重複のない文字ならび).
組合せ(L,1,[A]) :-
member(A,L).
組合せ([A|R1],N,[A|R2]) :-
N > 1,
N_1 is N - 1,
組合せ(R1,N_1,R2).
組合せ([_|R1],N,X) :-
N > 1,
組合せ(R1,N,X).
0907906
2014/06/09(月) 14:33:28.06ID:2ms5Efhd文字列の要素の重複を取り除いた文字ならび(_文字ならび,_要素に重複のない文字ならび),
ここですが、「文字ならびの要素の重複を取り除いた文字ならび」ですね。
最初は atom_chars が「文字列の要素の重複を取り除いた文字ならび」の中にあったので、
この述語名でよかったのですが、外に出したので変えないといけません。最終的に、
atom_chars のサンドイッチにしたくなったのです。
0908906
2014/06/09(月) 14:41:50.50ID:2ms5Efhd文字列にあるn個の文字からなる集合を要素とする集合をつくる(_文字列,_n,_文字列集合要素) :-
atom_chars(_文字列,_文字ならび),
要素の重複を取り除いた文字ならび(_文字ならび,_要素に重複のない文字ならび),
組合せ(_要素に重複のない文字ならび,_n,_組合せ),
atom_chars(_文字列集合要素,_組合せ).
要素の重複を取り除いた文字ならび(_文字ならび,_要素に重複のない文字ならび) :-
findall(_文字,(
append(L1,[_文字|_],_文字ならび),
\+(member(_文字,L1))),
_要素に重複のない文字ならび).
組合せ(L,1,[A]) :-
member(A,L).
組合せ([A|R1],N,[A|R2]) :-
N > 1,
N_1 is N - 1,
組合せ(R1,N_1,R2).
組合せ([_|R1],N,L) :-
N > 1,
組合せ(R1,N,L).
0909デフォルトの名無しさん
2014/06/09(月) 17:35:33.51ID:IN2EaOk7https://ideone.com/6vXiAe
0910デフォルトの名無しさん
2014/06/09(月) 17:58:05.12ID:CY4xKrUThttps://ideone.com/YVZnK3
0911デフォルトの名無しさん
2014/06/09(月) 18:13:51.04ID:ONQsoPE1ただし(4,5,6,9)の倍数と被る場合はカウントしないとする
処理時間は2.0秒以内、最大使用メモリは256MBまででコードをおしえて
0912デフォルトの名無しさん
2014/06/09(月) 18:19:44.30ID:jH+dLrn9時間はかかるが。
0913デフォルトの名無しさん
2014/06/09(月) 19:11:27.34ID:Q8TzlagX0914デフォルトの名無しさん
2014/06/09(月) 20:34:36.16ID:nO8TK9sW寝不足なので、今日はパス。
0915デフォルトの名無しさん
2014/06/09(月) 21:20:01.76ID:CY4xKrUT>>913をヒントにやった http://codepad.org/0LJcjDnk
0916デフォルトの名無しさん
2014/06/10(火) 00:33:14.49ID:qXXNDqVcimport itertools, fractions
def f911(n, m, x):
k = int((n+1) / m)
ans = k
lcm = lambda a,b: a*b/fractions.gcd(a,b)
combinations = [itertools.combinations(x, i+1) for i in range(len(x))]
for p in itertools.chain(*combinations):
ans -= ((len(p) % 2)*2-1) * int(k / reduce(lcm, p))
print ans
f911(100000000000, 7, [4,5,6,9])
ベン図で解いた。繰り返し部分は
[(4,), (5,), (6,), (9,), (4, 5), (4, 6) ... (5, 6, 9), (4, 5, 6, 9)]
で引いたり足したり。
0917デフォルトの名無しさん
2014/06/10(火) 00:53:12.22ID:IE+cVxVO0918デフォルトの名無しさん
2014/06/10(火) 01:05:15.77ID:JBIqHwIPいっとくけど100,000,000,000回ループして調べるのは不正解
0919デフォルトの名無しさん
2014/06/10(火) 01:06:08.37ID:JBIqHwIP>>911の問題はいっとくけど100,000,000,000回ループして調べてもいいけど30点しかあげられない
数学の知識を使う
0920デフォルトの名無しさん
2014/06/10(火) 02:48:40.24ID:VICE9FQV1~M までの7の倍数の個数はM/7
よって M/7 から (4, 5, 6, 9) に7の全ての組み合わせに7を掛けた数
2^4 - 1 = 15
(28, 35, 42, 63, 140, ...)
個をそれぞれMで割り算させて、M/7からを引けばよい?
1を引いたのは空集合を除いたため。
数学の知識というのがよくわからんが
0921デフォルトの名無しさん
2014/06/10(火) 04:56:04.50ID:oUviKcQy1秒間の計算量は最大でも、100万回〜1千万回まで
まあ、5百万回までが無難
0922デフォルトの名無しさん
2014/06/10(火) 07:18:03.55ID:SDacdvdD0923デフォルトの名無しさん
2014/06/10(火) 07:57:54.49ID:mJvyaCr+f=:3 :0
a =. *./4 5 6 9 7
b =. 0 = 7 | >: i.a
c =. b - b *. +./ 0 = 4 5 6 9 |"0 1 >: i.a
d =. (a | y) {. c
(+/d) + (<. y % a) * +/c
)
f 10000
699
f 100000000000
6984126984
0924デフォルトの名無しさん
2014/06/10(火) 08:11:42.99ID:aW1QUou7例
in: ((a + 2) (* 9 b) -)
out: (- (+ a 2 ) (* 9 b ) )
in: ((2 * x) - ((5 + y) * z)))
out: (- (* 2 x ) (* (+ 5 y ) z ) )
演算子と変数をどう区別するかは任せます。
0925デフォルトの名無しさん
2014/06/10(火) 13:17:10.36ID:kKsVvptAhttp://ideone.com/Ze3ivL
0926デフォルトの名無しさん
2014/06/10(火) 14:29:51.99ID:X0PhLNy5n*k=j
jの各桁同士の和をtとする
t=kとなるnとkの組み合わせはなん通りあるか求めよ
例
n=4
k=9
n*k=36
3+6=9
0927デフォルトの名無しさん
2014/06/10(火) 15:30:40.71ID:8zhTAAnmただしsを文字・文字列・数値と比較することは禁止する
0928デフォルトの名無しさん
2014/06/10(火) 16:35:25.09ID:K8gzkODy0929デフォルトの名無しさん
2014/06/10(火) 17:23:50.27ID:EOz1UYwi比較した。
0930デフォルトの名無しさん
2014/06/10(火) 17:27:32.30ID:wH47xOBCなら良いんでない
0931デフォルトの名無しさん
2014/06/10(火) 18:17:05.35ID:mJvyaCr++/0=(|~ +/@:("."0@":))"0 >:i.1000000
95428
0932デフォルトの名無しさん
2014/06/10(火) 22:40:09.77ID:CF7cNgR4ttp://ideone.com/0YX10k
C++。イデオン先生でも1000*6000が限界だった。
初めてfuture使って高速化しようと思ったんだが、慣れないせいでうまくいかなかった。
イデオン先生では通らなかったし。頑張った努力は認めてくれ。Orz
0933デフォルトの名無しさん
2014/06/10(火) 22:49:41.63ID:CF7cNgR4数学の表記が分からないとこういう時不便だ・・・。Orz
0934デフォルトの名無しさん
2014/06/10(火) 23:14:16.99ID:qXXNDqVcint f927(char *s) {
return (strlen(s) == 1) && strchr(s, 'a');
}
0935初級
2014/06/10(火) 23:30:48.18ID:hzvlFa112<=W<=1000、2<=H<=1000
箱の枠は「+」、箱の中は「@」で出力しなさい
入力は以下の形式で標準入力から与えられます
W H
例
---------------------
2 2
++
++
---------------------
10 4
++++++++++
+@@@@@@@@+
+@@@@@@@@+
++++++++++
0936デフォルトの名無しさん
2014/06/11(水) 00:09:45.96ID:okbFrAHqttp://ideone.com/zpFa6K
ほぼC。これでよかったりする?
N^2は超重たい。
数学ってむずかしー。Orz
0937デフォルトの名無しさん
2014/06/11(水) 00:40:21.44ID:okbFrAHqttp://ideone.com/Lz63jb
ほぼC。俺もこれで初級か。長かったなー。
STDINはよくわからないんだよなー。OSの仕様とかあるし。
0938デフォルトの名無しさん
2014/06/11(水) 00:53:00.82ID:eYhJPJH3甘い!もっと仕様を理解して!
2<=W<=1000、2<=H<=1000
0939デフォルトの名無しさん
2014/06/11(水) 01:01:08.37ID:okbFrAHqそれじゃー、例が間違ってるわ。
俺、例に合わせたんだもん。
0940デフォルトの名無しさん
2014/06/11(水) 02:14:08.98ID:eYhJPJH3if使わなくても書けるしソッチのほうが早い
0941デフォルトの名無しさん
2014/06/11(水) 03:44:45.16ID:okbFrAHqttp://ideone.com/X6UUY9
これでどうじゃ。スゲー気持ち悪い。
これで間違ってたら知らん。
>>940もコード出すべき。
0942デフォルトの名無しさん
2014/06/11(水) 05:28:51.27ID:+SSwoG3D間違っているので取り下げます
0943デフォルトの名無しさん
2014/06/11(水) 05:31:39.18ID:IizW2pDG実際、intよりsize_tが大きい環境で効率を落としかねない。
falseやtrueと比較するのが気持ち悪い。
前にも書いたな。
一文字変数名が気持ち悪い。
理由は説明するまでもないだろう。
std::endlを改行文字の代用にしていて気持ち悪い。
なんで普通に改行文字を出力しないんだ?
0944デフォルトの名無しさん
2014/06/11(水) 05:57:46.26ID:+SSwoG3Df := method(w, h,
a := "+" repeated(w)
b := "@" repeated(w - 2)
writeln(a)
for(i, 1, h - 2, writeln("+", b, "+"))
writeln(a)
)
File standardInput readLine split map(asNumber)do(f(first,last))
0945デフォルトの名無しさん
2014/06/11(水) 06:11:05.13ID:o2OaGDZj普通でごめん
https://ideone.com/eHH9GT
>>940
>>941 の狙いはわかる、>>945 のような if () の使い方を嫌ったんだね
>>943
>std::endlを改行文字の代用にしていて気持ち悪い。
std::endl でも悪くないとおもうけれども
0946デフォルトの名無しさん
2014/06/11(水) 06:47:43.19ID:okbFrAHqだーかーらー、文句あるなら自分の解答先に出してくれ。その方がスレがにぎわう。
この程度の問題で効率云々言ってもしょうがないでしょ。早解きする方が楽しいんだよ。
改行文字を出力しないのはストリームの流儀に従ってるだけだ。タイプ数多いから面倒は面倒なんだよ。
それと、気持ち悪いのは主観の問題だ。
0947デフォルトの名無しさん
2014/06/11(水) 07:27:33.61ID:n3P0gfqwこりゃ精神病の特徴ですぎだぞ
0948デフォルトの名無しさん
2014/06/11(水) 07:45:55.54ID:IizW2pDGストリームの流儀……
うん、言うだけ無駄だったね。ごめん。
0949デフォルトの名無しさん
2014/06/11(水) 07:50:18.55ID:okbFrAHqで、回答は?
その権威使って解答書くくらい簡単だろう。やってくれよ。
0950デフォルトの名無しさん
2014/06/11(水) 07:51:11.53ID:n3P0gfqwそうだぞ
精神病は壁と対話してなさい
0951デフォルトの名無しさん
2014/06/11(水) 07:52:19.11ID:n3P0gfqw頭きて当然だろうけど、あまり、相手にしない方が
あ、俺もか
黙ります
0952デフォルトの名無しさん
2014/06/11(水) 07:55:00.96ID:okbFrAHqちなみに一つ忠告しておくが、ハードル上げてるのは君自身の行いだぞ。
人に喧嘩売ってるんだからね。
0953デフォルトの名無しさん
2014/06/11(水) 07:55:51.26ID:okbFrAHqりょうかーい。
0954デフォルトの名無しさん
2014/06/11(水) 09:12:16.70ID:ZIJKyf1kttp://ideone.com/Adf5E2
0955デフォルトの名無しさん
2014/06/11(水) 09:40:24.65ID:o/A/DRr5Whitespace http://ideone.com/S4jaMG
0956デフォルトの名無しさん
2014/06/11(水) 11:03:24.86ID:W0HPwd2ustruct PType {
&#160;&#160;int width;
&#160;&#160;int height;
};
bool GetInput(PType& P){
&#160;&#160;P.width = 0, P.height = 0;
&#160;&#160;cout << endl << "Please Input:W H" << endl;
&#160;&#160;std::cin >> P.width >> P.height;
&#160;&#160;if (P.width < 2 || P.width > 1000 || P.height < 2 || P.height > 1000){
&#160;&#160;&#160;&#160;cout << "Invalid Input. to Quit Program!"<<endl;
&#160;&#160;&#160;&#160;return false;
&#160;&#160;}
&#160;&#160;return true;
}
void MakeHoge(PType P){
&#160;&#160;for (int i = 0; i < P.height; i++){
&#160;&#160;&#160;&#160;for (int j = 0; j < P.width; j++){
&#160;&#160;&#160;&#160;&#160;&#160;if (i == 0 || i == P.height-1 || j == 0 || j == P.width-1)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cout << '+';
&#160;&#160;&#160;&#160;&#160;&#160;else cout << '@';
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;cout << endl;
&#160;&#160;}
}
void main(void){
&#160;&#160;PType P;
&#160;&#160;while (GetInput(P))
&#160;&#160;&#160;&#160;MakeHoge(P);
}
0957デフォルトの名無しさん
2014/06/11(水) 11:04:36.99ID:W0HPwd2uint width;
int height;
};
bool GetInput(PType& P){
P.width = 0, P.height = 0;
cout << endl << "Please Input:W H" << endl;
std::cin >> P.width >> P.height;
if (P.width < 2 || P.width > 1000 || P.height < 2 || P.height > 1000){
cout << "Invalid Input. to Quit Program!"<<endl;
return false;
}
return true;
}
void MakeHoge(PType P){
for (int i = 0; i < P.height; i++){
for (int j = 0; j < P.width; j++){
if (i == 0 || i == P.height-1 || j == 0 || j == P.width-1)
cout << '+';
else cout << '@';
}
cout << endl;
}
}
void main(void){
PType P;
while (GetInput(P))
MakeHoge(P);
}
0958デフォルトの名無しさん
2014/06/11(水) 11:11:57.65ID:okbFrAHq俺それ書いて怒られたんだけど、新規性っていうか、改良箇所教えて!プリーズ。
0960デフォルトの名無しさん
2014/06/11(水) 11:21:54.96ID:5KWw7cXR誰かおこなの?w
それはさて、MakeHoge()がwhileループに入ったとか、メンバがwidth/heightになったとか、
不要なbool変数を設けないとか、いろいろあるね。
まぁ、pairで済ますかwhidth/heightの構造体を新規に作るかはどちらがいいとは言い切れないけれど。
0962デフォルトの名無しさん
2014/06/11(水) 11:29:07.02ID:okbFrAHq基本設計は変わってないのか。
いやねー>>938が何を指摘したのかいまだによくわからない。Orz
上限の境界線系のエラーかと思ったが、なんかそうでもなく。
>>959
イヤー、両方俺ですがな。
0963デフォルトの名無しさん
2014/06/11(水) 11:31:59.93ID:okbFrAHqまぁ、こうやって問題提供してくれるんだからありがたい人ですよ。
日々退屈なので。
0964デフォルトの名無しさん
2014/06/11(水) 11:38:07.58ID:okbFrAHq0965デフォルトの名無しさん
2014/06/11(水) 12:05:58.84ID:+SSwoG3Decho '+@'{~<./~&(<:|i.)/".;cutopen stdin''
0966デフォルトの名無しさん
2014/06/12(木) 15:39:41.78ID:FT+xwffOk=237
nをkで割った余りを求めよ
ただし,以下の文字の使用を禁止する
%
0967デフォルトの名無しさん
2014/06/12(木) 15:40:53.58ID:FT+xwffOk=237
nをkで割った余りを求めよ
ただし,以下の文字の使用を禁止する
%
また、言語に実装された余りを求める関数やライブラリの使用も禁止する
0968デフォルトの名無しさん
2014/06/12(木) 18:53:26.45ID:qxNDNmajc
abd
?
abe
b
ae?
a
???
これはある規則に沿って表示されている
?の部分の文字を埋めよ
0969デフォルトの名無しさん
2014/06/12(木) 18:58:38.06ID:T2wA+csqc
abd
d
abe
b
aef
a
efg
0970デフォルトの名無しさん
2014/06/12(木) 19:39:20.93ID:t+itJ/+wttp://ideone.com/7wocLc
0971デフォルトの名無しさん
2014/06/12(木) 20:04:45.33ID:TIE2YHiqその場合、どうやって求めるんだろう。Orz
0972デフォルトの名無しさん
2014/06/12(木) 20:12:35.35ID:g50eIfechttp://ideone.com/4fktOU
0973デフォルトの名無しさん
2014/06/12(木) 20:17:16.17ID:TIE2YHiq原理がよくわからんけど、できてるなー。なぜだーー!!Orz
まーべらす。
0974デフォルトの名無しさん
2014/06/12(木) 20:35:11.02ID:T2wA+csq0975デフォルトの名無しさん
2014/06/12(木) 20:37:44.12ID:TIE2YHiqそれでちゃんと累積するんだね。へぇー。
0976デフォルトの名無しさん
2014/06/12(木) 20:52:15.36ID:qt4Roz23http://ideone.com/zgOOWj
0977デフォルトの名無しさん
2014/06/12(木) 20:54:44.09ID:TIE2YHiq人のこと言えた義理じゃないしパールわかんないけど、組み込み型剰余命令は禁止ですぜ。
0978デフォルトの名無しさん
2014/06/12(木) 21:06:10.67ID:qt4Roz23ありが�d。
>>967 Perl
http://ideone.com/TBFsgh
0979デフォルトの名無しさん
2014/06/12(木) 21:38:30.26ID:T2wA+csq237の倍数でもあるってことで
引いても余りに影響しないって感じ
0980デフォルトの名無しさん
2014/06/12(木) 21:49:24.61ID:qxNDNmaj1番目の?だけ正解
他は×
0981デフォルトの名無しさん
2014/06/12(木) 22:06:48.17ID:u9xtnkCb0982デフォルトの名無しさん
2014/06/12(木) 22:21:47.87ID:t+itJ/+wこういうのって、他言語で書いてからwsに変換するんだっけ?
0983デフォルトの名無しさん
2014/06/12(木) 22:44:34.10ID:u9xtnkCbだから簡単な問題しか解けない
0984デフォルトの名無しさん
2014/06/12(木) 22:45:45.39ID:JGtl8L6J日別の購入データの通し番号から、マスターを参照してジャンル分けして、ジャンルごとの合計金額を出したいです。
http://light.dotup.org/uploda/light.dotup.org28231.png
↑
データはこのような画像の通りにシート3つに分かれて存在しています。
どのようなマクロを組めばいいかお教え願いたいです。
ジャンルごとに変数というものを持たないといけないのでしょうか?
実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・
大変面倒な質問ですが、お願いします
具体的なコードを教えてください
本当に困っていますお願いします
0985デフォルトの名無しさん
2014/06/12(木) 23:13:55.09ID:JEBLFpsKK=Nが知りたいのでNを探しだせ。
例えばN=123450であれば、1,23,4,50や12,34,5,0のように分割する。
同じ演算子を複数使うことは禁止する。
0986デフォルトの名無しさん
2014/06/12(木) 23:38:12.98ID:0So04fEbhttp://codepad.org/VK0bliUN
力押し。全部やると30時間以上掛かります
0987デフォルトの名無しさん
2014/06/13(金) 00:33:51.72ID:Q8FRmQS5>>979
なるほど。
>>985
今までやってきたの組み合わせればできそうだけど、重いなー。うむむむむむ・・・。
0988デフォルトの名無しさん
2014/06/13(金) 00:45:26.87ID:ICABjIbA整数Nを4つに分割して+-*/4つの演算子全てを使って求めた解をKとする。
K=Nが知りたいのでNを探しだせ。
例えばN=123450であれば、1,23,4,50や12,34,5,0のように分割する。
分割した整数の位置を入れ替えと、同じ演算子を複数使うことは禁止する。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0989デフォルトの名無しさん
2014/06/13(金) 03:45:02.93ID:Q8FRmQS5一発でうまくいく方法ないかなー。
0990デフォルトの名無しさん
2014/06/13(金) 06:21:07.82ID:Q8FRmQS50991デフォルトの名無しさん
2014/06/13(金) 06:31:09.90ID:Q8FRmQS5一応コード書いたよ。
だけど、数字が見つからなくてアップするべきかよくわからん。あってるかもわからん。
サンプルプリーズ。
0992デフォルトの名無しさん
2014/06/13(金) 07:26:06.79ID:Q8FRmQS5さ、サンプルプリーズ。
0993デフォルトの名無しさん
2014/06/13(金) 07:29:55.54ID:Q8FRmQS5ttp://ideone.com/rCSNy8
ほぼC。現在デバッグ中。
みつかるといいね!
あー、サイオン足りねー。
0994デフォルトの名無しさん
2014/06/13(金) 07:53:48.26ID:Q8FRmQS5kMax==78839152107695295
何ケタか足りません。
さて、見つかるのでしょうか。
0995デフォルトの名無しさん
2014/06/13(金) 08:08:58.99ID:Q8FRmQS5int64_t内に解なしだわ。多分。現在計算中。
計算の性質上、1要素の最大の数字は与えられた数字の最低で1/100される。
これを補う掛け算ができるかということになる。
だからと100かけようとするとほかに2桁取られるので、1/10000される。
これを補うための計算として、10000かけるにはどうすればいい。
うまい組み合わせを見つけないといけない。
あり得る組み合わせとしては、
N*N-LossX+MassiveYという組み合わせが見つかれば希望がある程度。
と、数学できないなりに推測してみた。
0996デフォルトの名無しさん
2014/06/13(金) 08:14:52.16ID:Q8FRmQS5もしかしたら割られる数は一桁多いかもしれん。
0997デフォルトの名無しさん
2014/06/13(金) 08:28:29.17ID:ygQxtO3f普通は通し番号ではなく、この場合だと品物番号という。
通し番号といってしまうと、購入データIDのことだと誤解される。
0998デフォルトの名無しさん
2014/06/13(金) 08:29:44.47ID:Q8FRmQS5っていうか次スレプリーズ??
0999デフォルトの名無しさん
2014/06/13(金) 08:38:18.84ID:Q8FRmQS5KMax == N/1000*9-0+9 じゃねーの?
さて、オチはつきましたでしょうか。
1000デフォルトの名無しさん
2014/06/13(金) 09:20:25.84ID:ygQxtO3f一箇所、数を連続して使うことは許されるということだろうか。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。