プログラミングのお題スレ Part11
レス数が1000を超えています。これ以上書き込みはできません。
出題に際しては
- お題の意図を汲みやすい入出力例も示す
- 事前に自分でもコードを書いてみる このスレ久しぶりに来た
数学できない勢だけどよろすこ >>6
過去ログから持ってきた訳じゃないんだけど、こういうお題を考えた
平面座標aとbが入力されます。bから見てaがおおよそ何時の方角にあるか時刻で出力してください。
例えば座標の方角が2時と3時の中間だった場合は両方の時刻を同時に出力してください。
座標が重なった場合は0時と出力してください。方角の精度は時刻み、分刻みから選択自由とします。
でも何か既視感あるんだよな
過去ログに似たようなお題があったかもしれない (逆)三角関数使わずにって制限つければまあまあ面白いかもしれない 数学じゃん。
紙と鉛筆で解いて算出は電卓でやれ。
プログラムでやっても電卓でできる程度のことしかしないじゃん。 >>7 Squeak Smalltalk
| fn |
fn := [:a :b | (a - b) theta negated / (2 * Float pi) * 12 + 3 \\ 12].
fn value: 6@12 value: 6@6. "=> 0.0 "
fn value: 6+(2*3 sqrt)@12 value: 6@6. "=> 1.0 "
fn value: 6-(2*3 sqrt)@12 value: 6@6. "=> 11.0 "
fn value: 12@6 value: 6@6. "=> 3.0 "
fn value: 6@0 value: 6@6. "=> 6.0 "
fn value: 0@6 value: 6@6. "=> 9.0 "
fn value: 6@6 value: 6@6. "=> 0.0 " 過去ログから、さすがにこれはプログラミングの問題でしょ
お題:
下図のように山の麓(標高0)の両側にいるA君B君が頂上(標高10)を目指して同時に出発する
ただし、A君B君のいる位置の標高はどの時刻でも等しくなるように登らなければならない
(下図でA君が標高7の峠から標高3の谷へ下るときにはB君は来た道を引き返す必要がある)
標高1だけ上るor下るのに1時間かかるとして頂上まで最短で何時間かかるか求めよ
10
7 /\
/\/3 \
A 0/ \0 B
山の形状は以下のような文字列で表現する
1)文字列の先頭と末尾はA君B君のスタート地点(標高0)を表し、必ず'0'である
2)ゴールの頂上(標高10)の位置は':'で表す(文字コードがちょうど':'='0'+10なので)
3)途中の峠と谷の標高を'1'〜'9'で表す(上図の山の形状は"073:0"と表される)
4)途中の峠と谷は交互に現れるようにする(例えば"037:0"は無し)
テスト例
"073:0" -> 18
"07362:450" -> 36
"06464:36470" -> 42
"0827171:28480" -> 66
"0737491:28180" -> 146
"05374734372747484:184618186912120" -> ? >>11
手計算でやっても答えが一致しないのだが、本当にそんな時間掛かるか?
C++ https://ideone.com/GK5A8F >>12
あ、ごめん私が間違えてた
計算し直してくる スレの宿題のをやってみた (規制対象なのでurlに全角スペースいれてます)
https://bi t.ly/2FdJBkh
以下のルール
全員が以下のルールを守って空席に決められた順に座るものとする
・全員の数字と着席順は皆が知っている
・スコアは上下左右の2〜4セルの数値の合計
・必ず空席のうちの最大のスコアになる席に座る
・最大のスコアの席が複数ある場合はどこに座っても良い
・「最大のスコアの席」とは、以降の人のルールに適う選択を考慮した上で決定される
(現在スコア5の2つの空席A, B があったとして、全員がルール通り座った結果Aが8、Bが7に
なる場合はAを選択しなくてはならない)
座席
〇〇5
〇9〇
12〇
に対して、
番号 3、4、6、77、8 がこの順でルール通り座ろうとすると下記の結果になった。
座る順の早い4番が77の隣に行けず6番に負けてしまうとかちょっとおもしろい
77 3 5
6 9 4
1 2 8 >スレの宿題のを
「前スレの宿題の」と書こうとしてミスしました。
実際のとこ宿題なのかどうかは知らないけど。 >>14のをちょっとだけ訂正
(コードをcodeの方に書いただけ)
https://bit. ly/2HYN8WH >>11
テスト例の最初のやつはなぜ18になるのか?7+3+7=17ではないのか? 7 + (7 - 3) + 7 = 18
あってるよ 度々ごめん
直に書けないurlはこう貼ればいいとわかったので
(もしかして常識だったか)
https://%62it%2Ely/2Jplh1k >>12
最後の b++ は b -- の打ち間違いか >>11 の参考として戻る必要があるケースの例
05131:4501050
手計算では40時間。あってるかな
[ ]がA君B君の位置、
左端はそのステップに要する時間
0 [0]5131:450105[0]
5 0[5]131:45010[5]0
5 [0]5131:4501[0]50
1 0[]5131:450[1]050
1 [0]5131:45[0]1050
5 0[5]131:4[5]01050
4 05[1]31:45[]01050
3 051[3]1:45[]01050
2 0513[1]:45[]01050
4 05131[]:4[5]01050
1 05131[]:[4]501050
9 05131[:]4501050 >>14
A, B, C の3人の順番で、
Bがaマスを選ぶと、Cには最高点になるx, y の2つの選択肢があり、
Cがxの場合、Bは10点、
Cがyの場合、Bは5点となる
この場合、Bがaの場合は5点と考えるので、
Bがbの場合が7点なら、Bはbを採用する
しかし、Bのbが5点なら、aと同じだから、どうなるんだ? >>11
理解できてなかったわ
"07362:450" の解がもうわからん >>23
Bはa,bどちらも5点ならどちらを選んでも良い
各人は自分の順になったとき、
選択可能な各位置について「以降誰が何をしても最悪でも〜点とれる」という点数を考え、
それが最大になる位置(のうちのどれか一つ)を選ぶ
(何をしても、といってももちろん皆が上記のルールは守るものとする)
ストレートなMin-Max戦略だなこれ >>24
0 [0]7362:45[0]
5 0[]7362:4[5]0
1 0[]7362:[4]50
3 0[7]362:[]450
3 07[]362:[4]50
1 07[]362:4[5]0
2 07[3]62:45[]0
2 073[]62:4[5]0
1 073[]62:[4]50
2 073[6]2:[]450
2 0736[]2:[4]50
1 0736[]2:4[5]0
3 0736[2]:45[]0
3 07362[]:4[5]0
1 07362[]:[4]50
6 07362[:]450
36時間 >>26
ありがとう
問題は理解できていて頭が悪いだけでした >>25
Bのa・b 戦略が、共に5点の同点で、その2つをA に戻すから、
Aは両方を比較しなければならないから、複雑だと思って >>11
やってみた
https://ideone.com/LsjBLX
結果
"073:0" => 18
"07362:450" => 36
"06464:36470" => 46
"0827171:28480" => 66
"0737491:28180" => 146
"05374734372747484:184618186912120" => 400
一箇所だけ>>11と違うな >>29 手計算
0 [0]6464:3647[0]
6 0[6]464:3647[]0
2 06[4]64:3647[]0
2 064[6]4:3647[]0
2 0646[4]:3647[]0
3 06464[]:364[7]0
3 0646[4]:36[4]70
2 064[6]4:3[6]470
2 06[4]64:3[]6470
2 0[6]464:3[6]470
3 0[]6464:[3]6470
3 0[6]464:[]36470
2 06[4]64:[]36470
2 064[6]4:[]36470
2 0646[4]:[]36470
6 06464[:]36470
>>30
無いんじゃね? >>29はバグってた
直したら>>11と一致しました
https://ideone.com/ECmxkW
常に解がありそうだけど証明はどうやるんだろ ちょっと考えてみたけど至る所微分不可能な山ではない限り解は存在するね 適当に折り返すことによって山谷の数を合わせられる
あとは略、って感じか e^(z) + 1 = 0 を満たす全ての z∈C の絶対値の集合をSとする.
この時、Sの中でN番目(N≦10^5)に小さい元を求めよ.
なお, e = Σ{n∈N}(1/n!) である. 数学じゃん。まーたセンセか。
数学板で相手してもらえないのかな? 簡単なところで。
【お題】
与えられた整数のリストを、
すべての奇数がすべての偶数の前に来るよう並べ替えなさい。
ただし奇数、偶数、それぞれの順番は変えないこと。
[-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7]
-> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8] J
((#~2&|),(#~2&|&>:)) -1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7
出力
_1 9 3 _5 _7 _9 _7 _2 _8 _2 _6 10 _8
(Jでは_が負の符号) >>40 Perl
@a = (1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7);
@o = grep{$_ & 1} @a;
@e = grep{!($_ & 1)} @a;
use feature 'say';
use Data::Dump qw(dump);
say dump [@o, @e];
$ perl 11_41.pl
[1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8] > _1 9 3 _5 _7 _9 _7 _2 _8 _2 _6 10 _8
Jは全くわからんが、出力おかしくないけ?
_1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8 になるはず? >>44
おかしい。こんな短いものでバグ作るとは。 なんだJニキたいしたことなかったんだな。ガッカリだわ >>42
>((#~2&|),(#~2&|&>:)) -1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7
こう書かなきゃダメだった
((#~2&|),(#~2&|&>:)) _1 2 8 _9 _2 _3 _6 _10 _8 5 7 9 7 カンマはあっても良いんだけど _2 を -2 と書くと
,- なる演算子のコンビネータで世にも奇妙な動きになる 違った
1,2,3 => 1 2 3
1, -2, 3 => 1 _2 _3
マイナスがそれまで連結したそれより右、
上の例だと 2 3 全体に作用してた あー!
ソートするだけか。グッと短くなるな
J
(\:2&|) _1, 2, 8, _9, _2, _3, _6, _10, _8, 5, 7, 9, 7
結果
_1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8 >>40 Squeak/Pharo Smalltalk
| fn1 fn2 |
fn1 := [:arr | (arr select: #odd), (arr select: #even)].
fn2 := [:arr | (arr sort: [:x | x odd asBit] descending) asArray].
fn1 value: #(-1 2 8 -9 -2 -3 -6 -10 -8 5 7 9 7).
"=> #(-1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8) "
fn2 value: #(-1 2 8 -9 -2 -3 -6 -10 -8 5 7 9 7).
"=> #(-1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8) " >>40
# Rubyで。
def f040(a)
a.select(&:odd?) + a.select(&:even?)
end >>40 Perl
@s = (-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7);
push @{$a[$_ & 1]}, $_ for @s;
($e, $o) = @a;
print "@$o @$e\n";
$ perl 11_40.pl
-1 -9 -3 5 7 9 7 2 8 -2 -6 -10 -8 [[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ] >>59
やり方による
>>53みたいな奴だと安定ソートが必要 >>36って S = {(2m + 1)π / √((2nπ)^2 + 1)|(m, n)∈N^2}だから最小値存在しなくね?
複素数の複素数乗って多価関数だよね? >>61
e は実数で S = {(2n-1)π} じゃないの。
数学は良く知らんけど。
[[[{[{{]] を見て反省してJの良さが伝わりやすいように>>54をわかりやすく書き直してみた
定義
data =: _1 2 8 _9 _2 _3 _6 _10 _8 5 7 9 7
modulo =: |~
ascending_sort_by = \:
実行
data ascending_sort_by 2 modulo data
結果
_1 _9 _3 5 7 9 7 2 8 _2 _6 _10 _8
これを分かりにくくして行くと>>94になる
2項演算子 f と単項演算子 g から単行演算子 (f g)、
(f g) x の値は x f (g x) を作れる仕組み
2項演算子 f の左側引数をxに固定した単項演算子 x&f、(x&f) y の値は x f y を作れる仕組み
これらを使って「2での剰余をキーとしてソートする
単行演算子」を作って data に適用する形に書き直すと
(ascending_sort_by (2&modulo)) data
これを直に書いて不要な空白や括弧を取ると>>94の
(\:2&|) data ↑
\ になってる文字は本来バックスラッシュ
Jはスマフォアプリがあるので暇で困っている人にはパズル的に遊ぶのにお勧め >>62
z := x + y*i (x, y∈R)
e^z = -1
⇔ exp((x + y*i)(p.v.Log|e| + i*arg(e))) = -1
⇔ exp(x - 2nπy)*exp((2nπx + y)i) = -1
⇔ x = 2nπy and 2nπx + y = (2m + 1)π
⇔ x = 2nπy and y = (2m + 1)π/((2nπ)^2 + 1)
⇔ z = (2m + 1)π/(2nπ - i)
⇒ |z| = |2m + 1|π/sqrt(4n^2π^2 + 1) (m, n∈N)
だからS = {(2n-1)π}はありえないよ >>40 Ocaml
https://ideone.com/tZmgi1
初めて扱った言語だから分かりやすさ優先
冗長だよなぁ >>62
>>>61
>modulo =: |~
~ はタイプミス(不要)でしたごめんなさい寝ます >>40 javascript
var ary = [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7];
// 条件判定が二倍走るのが気に食わない
var ans = [...ary.filter(n => n % 2), ...ary.filter(n => !(n % 2))];
console.log(ans);
// のでこうした。長い…読むとき引っ掛かりそう
var ans = ary.reduce((acc, n) => n % 2 ? {odd: [...acc.odd, n], even: acc.even} : {odd: acc.odd, even: [...acc.even, n]}, {odd: [], even: []});
console.log([...ans.odd, ...ans.even]);
// 結局俺にはこれが分かりやすくていいや
var odd = [], even = [];
ary.forEach(n => {n % 2 ? odd.push(n) : even.push(n);});
console.log([...odd, ...even]); >>40 ruby
p [-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7].partition(&:odd?).flatten >>40 ocaml
https://ideone.com/Izv76M
is_oddはぐぐって見つけたのの丸パクリ >>40 rust
https://ideone.com/epTHxQ
タプルにflattenとかできたらよかったのに… [[[ []]]]*[[ [][] ][] } } {} [[[ お題: 文字列をソートしなさい。ただし、英字のみをソートし他はそのままにすること。
例:
"213cba213cba213cba" -> "213aaa213bbb213ccc" >>77 Riby
"213cba213cba213cba".yield_self{|v|r=/[a-zA-Z]/;s=v.scan(r).sort;v.gsub(r){s.shift}} #=> "213aaa213bbb213ccc" お題
二次元平面上の4点が与えられる。この4点で凸四角形を構成できるか判定せよ。
※4点の順番は、時計回りや反時計回りとは限らない。
(0, 0), (1, 0), (1, 1), (0, 1) => true
(0, 0), (1, 1), (1, 0), (0, 1) => true
(0, 0), (2, 0), (1, 1), (0, 2) => false
(0, 0), (1, 1), (2, 2), (3, 3) => false
(0, 0), (0, 0), (0, 0), (0, 0) => false そんな空気読めないから学生に不人気なんだよ数学板帰れ >>77 Squeak/Pharo Smalltalk
| fn |
fn := [:str |
| letters |
letters := OrderedCollection new.
((str asArray gather: [:chr | chr isLetter
ifTrue: [letters add: chr. '{', letters size asString, '}']
ifFalse: [chr asString]]
) as: String) format: letters sort
].
fn value: '213cba213cba213cba' "=> '213aaa213bbb213ccc' " >>77 Perl5
@s = split '', '213cba213cba213cba';
@i = 0..$#s;
@k = grep{$s[$_] =~ /[a-z]/} 0..$#s;
@l = sort @s[@k];
$s[$k[$_]] = $l[$_] for 0..$#k;
use feature 'say';
say @s;
$ perl 11_77.pl
213aaa213bbb213ccc >>83
@i = 0..$#s;
この行、要らなかった、消し忘れた…orz >>77 C++
#include <iostream>
#include <string>
#include <algorithm>
#include <boost/iterator/filter_iterator.hpp>
template <typename FwdIt>
void selection_sort(FwdIt first, FwdIt last) {
for (auto it = first; it != last; ++it) std::iter_swap(it, min_element(it, last));
}
int main() {
std::string s;
std::cin >> s;
selection_sort(boost::make_filter_iterator(&::isalpha, s.begin(), s.end()), boost::make_filter_iterator(&::isalpha, s.end(), s.end()));
std::cout << s << std::endl;
} >>77
Haskell
アルゴリズム自体は単純だけどコードが泥臭い
もっと綺麗に書けそう
import Data.Char
import Data.List
solve [] ys = ([],reverse $ sort ys)
solve (x:xs) ys = if isAlpha x
then let (vs,w:ws) = solve xs (x:ys) in (w:vs,ws)
else let (vs,ws) = solve xs ys in (x:vs,ws)
main = putStrLn $ fst $ solve "213cba213cba213cba" [] それは概念的な方?それとも実際に仕事に影響する方?
後者ならプレミアムフライデー列挙は0文字でできるが あれ?strdup() で警告出てるな。strdup() って標準ではないか。
まあでもCコンパイラのアバウトな処理によって動くバイナリは作られたようだがw
やりたいことは分かると思うのでそのままにしておく。 >>77 Squeak/Pharo Smalltalk
| fn |
fn := [:str |
| letters |
letters := (str select: #isLetter) sort readStream.
str collect: [:chr | chr isLetter ifTrue: [letters next] ifFalse: [chr]]
].
fn value: '213cba213cba213cba' "=> '213aaa213bbb213ccc' " >>87 Squeak/Pharo Smalltalk
| preKinsOf |
preKinsOf := [:year |
(year asInteger asYear months collect: [:month |
(month dates select: [:date | date weekday == #Friday]) last]
) reject: [:date | date mmddyyyy beginsWith: '4/29']
].
preKinsOf value: 2022
"=> {28 January 2022 . 25 February 2022 . 25 March 2022 . 27 May 2022 .
24 June 2022 . 29 July 2022 . 26 August 2022 . 30 September 2022 .
28 October 2022 . 25 November 2022 . 30 December 2022} " >>77
>>86のアロー版
import Control.Arrow
import Data.Char
import Data.List
solve ([],_) = ([],[])
solve ((x:xs),~yss@(y:ys)) = if isAlpha x
then first (y:) $ second (x:) $ solve (xs,ys)
else first (x:) $ solve (xs,yss)
main = putStrLn $ loop (second sort . solve) "213cba213cba213cba" [[[ [ "[]" ]]] [] [][[[ [] ]][] >>77 Emacs Lisp
(defun f (a)
(flet ((alphaumericp (c) (string-match "[A-Za-z]" (string c))))
(let* ((b (concatenate 'list a))
(c (sort (remove-if-not #'alphaumericp b) #'<)))
(concat (mapcar (lambda (d) (if (funcall #'alphaumericp d) (pop c) d)) b)))))
f
(f "213cba213cba213cba")
"213aaa213bbb213ccc" >>98
書き込んでから気がついたけど、お題の5個の入力では問題を起こさないが
差ベクトルが短すぎる場合や外積の面積が細過ぎる場合の打ち切りは、
nextで一階層ブロック脱出ではなく更にもう一階層外側のloopに脱出すべきか…orz
ま、いいか、テヘペロ >>64
e^(πi) = e^(3πi) = e^(5πi) = ... = -1 じゃないの? >>100
e^z = -1 に対して z = (2m + 1)i は十分条件でしかないよ
必要十分条件は z = (2m + 1)π/(2nπ - i) なの
で今 e^z = -1 を満たす「すべての」zって言われてるから十分条件じゃ意味なのは分かる?
そもそも十分条件って言葉は知ってるかな?
exp(x) と e^(x) が違うことはわかってる? お題
大人数で一斉にじゃんけんを行った
各人の手のリストが与えられるのでその中で勝者が何人いるか答えよ
(g=グー,c=チョキ,p=パー)
gccgc -> 2
ggggggg -> 0
cppcppppccpppppc -> 5
cppcppppccpgpppc -> 0 >>101
それ、おかしくない?
m = n = 1 のとき、
すなわち e^((3*pi)/(2*pi - i)) を wolfram-alpha に食わせてみたんだが、-1 にならない
http://www.wolframalpha.com/input/?i=e%5E((3*pi)%2F(2*pi+-+i))
>>64
exp((x + y*i)(p.v.Log|e| + i*arg(e))) = -1
ってどういう意味なの? >>103
exp(z) := Σ{n∈N}z^n/n!
pv log(z) := log(z)の主値
arg(z) := 複素数zの偏角
リンクの wolfram-alpha はそりゃ値が一致しないよ。前提が違うんだから >>101
>>105
>>101
z = (2m + 1)π/(2nπ - i)
これを愚直に展開すると
z = (2m + 1)・2nπ/(4n^2・π^2 + 1) + j(2m + 1)(4n^2π^2 + 1))…@
一方
複素指数関数を e^z = Σz^n/n! と定義して
z = x + yj(x, y ∈ R) のとき、
|e^z| = |e^x|、かつ |e^yj| = 1
ここで e^z = -1 だから
|e^z| = |e^x| = 1, x ∈ R
x = 0
にしかならないけれども、@のzの実部はm, n によっていろいろ変わるのはおかしいね >>106
いやだから e^z(2.718281828...のz乗) と exp(z) は別物だって言ってんじゃん
わざと嫌がらせしてる? >>102 Emacs Lisp
(defun f (g)
(let* ((c (concatenate 'list g))
(p (remove-duplicates c)))
(if (= (length p) 2)
(count (cdr (assoc (apply #'+ p) '((202 . ?g) (211 . ?c) (215 . ?p)))) c) 0)))
(f "gccgc") 2
(f "ggggggg") 0
(f "cppcppppccpppppc") 5
(f "cppcppppccpgpppc") 0 >>107
え?
z = x + yj
exp(z) = Σz^n/n! と定義するのと
exp(x + jy) = e^x・(cos(y) + j・sin(y)); x, y ∈R と定義するのとは同値でしょう?
後者を採用して、|exp(x + jy)| = |e^x|
e^z = -1 より |e^x| = 1, x ∈ R
だったら、やっぱり x = 0 しか取り得ないと思いますが… >>109
同じことを何度言えば理解してもらえるんですかね
x = 2.71828...とすると
x^z = exp(z log(x))
= exp(z(pv log|x| + i*arg(x))
= exp(z + 2nπzi)
exp(z + 2nπzi)とexp(z)が一般に同値な訳ないでしょ
何度も言うけどわかりました? (2.718...)^z と Σ{n∈N}(z^n/n!)は全く別の値なんです ついでになんか勘違いしてるみたいだから指摘しておきますけど
xが実数であっても exp(x) != (2.7...)^x じゃありませんからね(e.g. x=0.5などとすれば直ちに自明でしょう)
高校数学の感覚ではこれらは同じ値なのでしょうけど複素解析の文脈では指数関数は一般に多値関数ですからね 誤字
xが実数であっても exp(x) = (2.7...)^x じゃありません >>112
z = x + yj,∈C, x, y ∈R において、
複素指数関数 exp(z) を
exp(z) = Σz^n/n! と定義する…@
exp(x + jy) = e^x・(cos(y) + j・sin(y)); x, y ∈R と定義する…A
@⇔Aであることを前提とすれば、
x ∈R において
exp(x)
= e^x(cos0 + j・sin0)(∵A)
= e^x(1 + j・0)
= e^x
で
xが実数なら exp(x) = (2.7...)^x
ですね
でも >>110 の欠点がみえない
exp(z) = exp(z + 2nπj)(複素指数関数の周期性)
なのは理解しているつもりなんですが >>113
再三再四申し上げますが一般に exp(z) と ネイピア数のz乗は別物です
あと何百回言えばこれを理解してもらえるんですかね
従ってAの定義は「exp(x + jy) = exp(x)・(cos(y) + j・sin(y))」としなければならないし
偽な命題を前提とすればそりゃどんな結論だって導けるってものです
というのも P ⊃ Q は P が偽の時常に真ですから プログラミングやってると数学学びたい欲求が出てくる 同値の意味も知らないような数学の素人がなにか言い合いしてますねえ お題
o,d,a,iからなる文字列Sが与えられる。
Sからいくつかの文字を取り除くことで"odai"をN回繰り返した文字列が得られたとする。
Nの最大値を求めよ。
odaiodai -> 2
ooddaai -> 1
idao -> 0
ododoadioadioadioadioadioadiodaioadodioadiaodi -> ? >>102 Perl5
use feature 'say';
for (<DATA>) {
chomp;
my ($i, %h);
$h{$_}++ for split'';
%gcp = (g=>c, c=>p, p=>g);
delete @gcp{keys %h};
@r = keys %gcp;
$k = $gcp{$r[0]};
say "$_ -> ", (1 == @r) ? $h{$k} : 0;
}
__DATA__
gccgc
ggggggg
cppcppppccpppppc
cppcppppccpgpppc
実行結果
$ perl 11_102.pl
gccgc -> 2
ggggggg -> 0
cppcppppccpppppc -> 5
cppcppppccpgpppc -> 0 >>77 javascript
var{nums,wrds}=(str=>eval(`((nums,...wrds)=>({nums,wrds}))\`${str.replace(/[a-zA-Z]+/g,'\${"$&"}')}\``))('213cba213cba213cba')
console.log(String.raw(nums,...(wSrt=>wrds.map(w=>wSrt.splice(0,w.length).join``))([...wrds.join``].sort()))) >>117 Perl5
use feature 'say';
for (<DATA>) {
chomp;
@k = qw{o d a i};
$j = 0;
for ($n = 0; $n < length($_)>>2; $n++) {
for $c (qw{o d a i}) {
$i = index $_, $c, $j;
goto L1 if $i < 0;
$j = $i + 1;
}
}
L1:;
say "$_ -> ", $n;
}
__DATA__
odaiodai
ooddaai
idao
ododoadioadioadioadioadioadiodaioadodioadiaodi
実行結果
$ perl 11_117.pl
odaiodai -> 2
ooddaai -> 1
idao -> 0
ododoadioadioadioadioadioadiodaioadodioadiaodi -> 5 >>114
>一般に exp(z) と ネイピア数のz乗は別物です
それは心得ているつもりです。
以下、結構雑に書きますが、
exp(z)=Σz^n/n!…@
と定義する。
このときも@が収束すること、および
exp(z1 + z2) = exp(z1)exp(z2), z1, z2 ∈C…A
が成立することを暗黙の了解とする
z∈C, z = x + jy, x, y ∈R のとき
exp(z) = exp(x)exp(jy) …B(∵A)
exp(x) = Σx^n/n! = e^x
exp(jy) = 1 + (yj)/1! - y^2/2! - j・y^3/3! + y^4/4! + j・y^5/5! + …
=(1 - y^2/2! + y^4/4! - …) + j ・ (y/1! - y^3/3! + y^5/5! - …)
=cos(y) + j・sin(y)
すなわち exp(z) = e^x・(cos(y) + j・sin(y))…C
以上の議論は手元の教科書の引き写しです。 >>121 続き
>従ってAの定義は「exp(x + jy) = exp(x)・(cos(y) + j・sin(y))」としなければならないし
以上より exp(x + jy) = e^x・(cos(y) + j・sin(y)) …Cで問題ありません。
だから、x ∈ R とすれば exp(x) = e^x(cos0 + j・sin0) = e^x になります
つまり
>>114 をより正確にいえば
「exp(x) は e^x の自然な拡張」となり、>>112 は誤りとなります
また exp(z) の絶対値を考えると
.(exp(x + jy)) = √((e^x・cos(y))^2 + (e^x・sin(y))^2)
= e^x・√(cos^2(y) + sin^2(y))
= e^x
すなわち |exp(z)| = |e^x| すなわち複素指数関数の絶対値は引数の実部によって決まり、引数の虚部の影響を受けません
以上の議論は
https://ja.wikipedia.org/wiki/%E8%A4%87%E7%B4%A0%E6%8C%87%E6%95%B0%E5%87%BD%E6%95%B0
に書いてありました >>122 続き
今 exp(z) = -1, z ∈C
>>122 Cより
exp(x + yj) = -1, x, y ∈R
e^x(cos(y) + j・sin(y)) = -1
e^x・cos(y) + j・e^x・sin(y) = -1…D
よってDの両辺の虚部が 0 だから
e^x・sin(y) = 0
e^x > 0 より sin(y) = 0
y = nπ…D(必要条件)
このとき
cos(y) = ±1
このときDの両辺の実部を比較して
e^x(±1) = -1
e^x > 0 だから cos(y) = -1 となるのはDの中でも y = (2n + 1)π, n ∈Zのときのみ
また y = (2n + 1)π のとき、e^x = 1, x = 0
>>109
exp(z) の絶対値は z の実部にのみ影響されます
exp(z) = -1 から |exp(z)| = 1
|exp(z)| = e^x
ですから
e^x = 1
これを満たすのは x = 0 のみ、という推論はどうでしょうか? >>121-123
>exp(x) = Σx^n/n! = e^x
なんでexp(x)とe^xを比較する議論の前提で、この2つが正しいことを利用してるの?
循環論法です。破綻しています
>exp(jy) = 1 + (yj)/1! - y^2/2! - j・y^3/3! + y^4/4! + j・y^5/5! + …
>=(1 - y^2/2! + y^4/4! - …) + j ・ (y/1! - y^3/3! + y^5/5! - …)
exp(x)が収束することしか仮定されていないためこの変形は成り立ちません
きちんと絶対収束(absolute convergence)することを示すか仮定しましょう。破綻しています
よって以後の議論は全て誤りですので参考になりません
殊に循環論法による誤謬は致命的ですね
あなたはまず複素解析の文脈で任意の実数xに対して exp(x) = (2.7...)^x となる事を証明しなければなりません
尤も、expは単射なのに対してa^zは多価関数なのでこれらが等しくないことは計算するまでもなく自明なんですが、
なんでここにこんなにつっかかってくるんですかね…… >>102 javascript
var f = s => {
var d = [...new Set(s)]
return d.length == 2
? ((a,b) => ({g:'c',c:'p',p:'g'})[a] == b)(d[0],d[1])
? s.match(new RegExp(d[0],'g')).length
: s.match(new RegExp(d[1],'g')).length
: 0;
}
console.log(f('gccgc')) //=> 2
console.log(f('ggggggg')) //=> 0
console.log(f('cppcppppccpppppc')) //=> 5
console.log(f('cppcppppccpgpppc')) //=> 0 >>124
>>121 >>exp(x) = Σx^n/n! = e^x
>なんでexp(x)とe^xを比較する議論の前提で、この2つが正しいことを利用してるの?
>循環論法です。破綻しています
いいえ循環論法ではありません
仮定は
exp(z) = Σz^n/n! が z ∈ C で収束すること…@
exp(z1 + z2) = exp(z1)exp(z2), z1, ze ∈C …A
のみです
z = x + jy と置いたとき
exp(z1 + z2) = exp(z1)exp(z2), z1, z2 ∈C…A
が成り立つ前提で
z1 = x, z2 = yj
とおいて
exp(x + yj) = exp(x)exp(yj)
と変形します
もともと exp(z) = Σz^n/n! と置いたのですから
x ∈R のとき、exp(x) = Σz^n/n!
Σx^n/n! = e^x の収束は別途長い議論を経ないといけませんが、ここでは既知としています
最終的には >>121 は
exp(x + jy) = e^x(cos(y) + j・sin(y))
を導きだすのが目的です >>125
((a,b) => ({g:'c',c:'p',p:'g'})[a] == b)(d[0],d[1])
は単純に
({g:'c',c:'p',p:'g'})[d[0]] == d[1]
でよかった。
最初関数として作ってあったもので単純化し忘れ。 >>77 Perl5 >>83を書き込んだけど気に入らなかったので少し修正した。
@s = split '','213cba213cba213cba';
@k = grep{$s[$_] =~ /[a-z]/} 0..$#s;
@s[@k] = sort @s[@k];
print @s,"\n";
実行結果
$ perl 11_77_2.pl
213aaa213bbb213ccc >>126
>exp(x) = Σx^n/n! = e^x
において e^x = Σx^n/n! と勝手にしているのが結果を先取り(しかも誤謬)していて宜しくないと言っているのです
「複素解析の文脈」では w^z = exp(z*(p.v. log|w| + i*arg(w))) なのです
これは定義です。これが気に食わなくて、どうしても exp(x) = e^x を言いたいのであれば
より妥当性がありwell-definedな w^z の定義を提示してください
繰り返します。あなたは「e^z = exp(z)が成立するように、任意の複素数w, zに対して w^z を定義する」必要があります
>Σx^n/n! = e^x の収束は別途長い議論を経ないといけませんが、ここでは既知としています
Σx^n/n!が収束するだけでは弱くて、
「絶対収束」(絶対に収束するという意味ではありません)を仮定する必要があると言っているんですけど
まあ枝葉末節なので不問とします >>124
>exp(x)が収束することしか仮定されていないためこの変形は成り立ちません
>きちんと絶対収束(absolute convergence)することを示すか仮定しましょう。
厳しいですね…手元の教科書(高木・解析概論、ただ結構いい加減な本だそうですが)の引き写しなんですが…
虚数単位を j と置いていることからもわかるように、工科系の出自で、厳密な話は苦手です
>なんでここにこんなにつっかかってくるんですかね……
そのようなつもりはなく、純粋に数学的関心から書いているものです
>>123-121 >>113 >>109 >>106 >>103 を見返しても問題はないと思いますが
>あなたはまず複素解析の文脈で任意の実数xに対して exp(x) = (2.7...)^x となる事を証明しなければなりません
>尤も、expは単射なのに対してa^zは多価関数なのでこれらが等しくないことは計算するまでもなく自明なんですが、
exp(z) = exp(z + 2nπj) なので exp(z) は周期関数であることはわかるのですが、
これ以上のことはちょっとわかりません、今日はここまででお休みします
お付き合いくださりありがとうございました >>87
Kotlin
https://paiza.io/projects/lG5nWGdi-n7XwGLr0YAi_A
Javaのライブラリに日付や曜日の計算任せちゃってて自分ではほとんど何もやってません。 スレタイも読めない数学荒らしが一族郎党苦しんで死にますように。 そこまでのろわなくてもよい希ガスるけど、、
数学的お題でもいいけど、明快なお題を出すか、回答を書き込むかを重視し
解釈のかみ合わない議論は程々にした方が医院ジャマイカ >>117 Emacs Lisp
(defun f (S)
(let ((s 0) (N 0))
(ignore-errors (loop (mapcar (lambda (c) (setq s (1+ (position c S :start s)))) "odai") (incf N)))
N))
(f "odaiodai") 2
(f "ooddaai") 1
(f "idao") 0
(f "ododoadioadioadioadioadioadiodaioadodioadiaodi") 5 >>131
純粋に数学的関心ならもうプログラミング関係ないんだから、適切な板、スレを探してそっちで好きなだけやってこい 数学は別にいいんだが難しすぎるのはちょっとな
簡単なお題なら個人的に歓迎 >>117 Squeak/Pharo Smalltalk
| fn |
fn := [:str |
| strm odai count |
strm := str readStream.
odai := 'odai' readStream.
count := 0.
[strm atEnd] whileFalse: [
((strm skipTo: odai next) and: [odai atEnd])
ifTrue: [odai reset. count := count + 1]
].
count
].
fn value: 'odaiodai'. "=> 2 "
fn value: 'ooddaai'. "=> 1 "
fn value: 'idao'. "=> 0 "
fn value: 'ododoadioadioadioadioadioadiodaioadodioadiaodi'. "=> 5 " >>102 Squeak/Pharo Smalltalk
| numOfWinnersOf |
numOfWinnersOf := [:jkStr |
| arr set |
arr := jkStr asArray collect: [:chr | 'gcp' indexOf: chr].
(set := arr asSet) size = 2 ifFalse: [0] ifTrue: [
| one other |
one := set anyOne. other := set remove: one; anyOne.
arr occurrencesOf: (one - other \\ 3 = 2 ifTrue: [one] ifFalse: [other])
]
].
numOfWinnersOf value: 'gccgc'. "=> 2 "
numOfWinnersOf value: 'ggggggg'. "=> 0 "
numOfWinnersOf value: 'cppcppppccpppppc'. "=> 5 "
numOfWinnersOf value: 'cppcppppccpgpppc'. "=> 0 " >>80 Squeak/Pharo Smalltalk
| fn |
fn := [:ps |
ps asSet size = 4 and: [
ps noneSatisfy: [:p1 |
[:p2 :p3 :p4 |
(p3 - p2 crossProduct: p4 - p2) = 0 or: [p1 insideTriangle: p2 with: p3 with: p4]
] valueWithArguments: (ps copyWithout: p1)
]
]
].
fn value: {0@0. 1@0. 1@1. 0@1}. "=> true "
fn value: {0@0. 1@1. 1@0. 0@1}. "=> true "
fn value: {0@0. 2@0. 1@1. 0@2}. "=> false "
fn value: {0@0. 1@1. 2@2. 3@3}. "=> false "
fn value: {0@0. 0@0. 0@0. 0@0}. "=> false " >>117
お題のサンプル程度なら正規表現で十分かと
PowerShell
PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('odaiodai').Count
>>
2
PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('ooddaaii').Count
>>
1
PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('idao').Count
>>
0
PS C:\> ([regex]'o.*?d.*?a.*?i.*?').Matches('ododoadioadioadioadioadioadiodaioadodioadiaodi ').Count
>>
5 文字をATCGにして長さ1億くらいにすればプログラミングっぽくなるんじゃねえの お題
大きさW×Hでポケットのないビリヤード台を想像してください。
左下の座標を(0,0)、右上の座標を(W,H)とします。
位置(0,0)から右上に向かって毎秒(a,b)の速度でボールを射出したとき、
ボールが位置(0,0)に戻ってくるのは何秒後でしょうか?
ボールの大きさや摩擦などは無視します。
[input]
W H a b (すべて正の整数)
[example]
2 4 1 1 -> 8
3 4 2 1 -> 24
4 5 2 4 -> 20
1 2 10 5 -> 0.8 公式があるね。
周期=2WH/gcd(aH,bW)
(gcdは最大公約数) >>150 Perl5
use feature 'say';
for (<DATA>) {
chomp;
($W, $H, $a, $b) = split;
($x, $y, $t) = 0x3;
($w, $h) = ($W, $H);
do {
($w, $h) = (2*$w, 2*$h);
($tx, $ty) = ($w/$a, $h/$b);
$t = ($tx < $ty) ? $tx : $ty;
($x, $y) = ($a*$t, $b*$t);
} while ($x % (2*$W) != 0 or $y % (2*$H) != 0);
say "$_ -> $t";
}
__DATA__
2 4 1 1
3 4 2 1
4 5 2 4
1 2 10 5
実行結果
$ perl 11_150.pl
2 4 1 1 -> 8
3 4 2 1 -> 24
4 5 2 4 -> 20
1 2 10 5 -> 0.8 >>151
やっぱ公約数に帰結するんだ、
>>152書いてて繰り返し不要な解法がありそうだという気がしてきた
まいいや自分で考えることも面白いから >>150 Squeak/Pharo Smalltalk
| fn |
fn := [:W :H :a :b |
| time |
time := 2 * W * H / (b * W gcd: a * H).
time isInteger ifTrue: [time] ifFalse: [time asFloat]
].
fn valueWithArguments: #(2 4 1 1). "=> 8 "
fn valueWithArguments: #(3 4 2 1). "=> 24 "
fn valueWithArguments: #(4 5 2 4). "=> 20 "
fn valueWithArguments: #(1 2 10 5). "=> 0.8 " >>117 javascript
var f = s => {console.log((s.match(/o.*?d.*?a.*?i.*?/g)||[]).length)}
f('odaiodai') //=> 2
f('ooddaai') //=> 1
f('idao') //=> 0
f('ododoadioadioadioadioadioadiodaioadodioadiaodi') //=> 5
>>147と同じ お題
大きさが(X, Y, Z)のナップサックに大きさが(x_i, y_i, z_i)で価値がv_iの荷物を価値の総和が最大になるように詰めたい
X Y Z N
x_1 y_1 z_1 v_1
︙
x_N y_N z_N v_N
と荷物及びナップサックが与えられた時、最大の価値を求めよ
可能ならどれを詰めたかも求めよ
なお荷物は回転させて詰めても良いものとする お題
政令指定都市名を受け取り, 隣接する区を異なる色になるように塗り分けるのに必要な最少の色数を返す.
f(Sagamihara) => 2
f(Yokohama) => 4 >>157は、巡回セールスマン問題に並んで有名なナップサック問題である。
なお、この手の問題をNP完全問題だとかNP困難問題だとか呼ぶのは
「ナップサック」(NaPpsuck)に由来する。 自分が理解できないからって数学荒らし呼ばわりは惨めすぎるね >>164
じゃロシア語で埋めてくな。
文句ないんだろ。 Текущая версия страницы пока не проверялась опытными участниками и может
значительно отличаться от версии, проверенной 11 апреля 2015;
проверки требуют 20 правок.
Бу́ря (шторм) — собирательное понятие, обозначающее очень
сильный ветер (а также сильное волнение на море), возникающий по
различным причинам и в разных областях Земли. Скорость
приземного ветра (на стандартной высоте измерений 6—12 м над
земной поверхностью) при буре составляет, по разным источникам,
15—20 м/с и более (21-25 м/с или 75-88 км/ч). Бури бывают снежные,
песчаные и водные. Скорость ветра при буре гораздо меньше, чем при
урагане, однако буря чаще всего сопровождается переносом песка,
пыли или снега, что приводит к ущербу сельскому хозяйству, путям
сообщения и другим отраслям экономики. Буря может наблюдаться:
при прохождении тропического или внетропического циклона;
при прохождении смерча (тромба, торнадо);
при шквале — кратковременном усилении ветра, связанном с местной или фронтальной грозой.
К бурям по шкале Бофорта относятся ветры скоростью более 20 м/с (9 баллов), а к ураганам — ветры со
скоростью более 32,6 м/с (12 баллов). Кроме того, по этой шкале различают:
сильную бурю со скоростью 24,5-28,4 м/с (10 баллов);
жестокую бурю со скоростью 28,5-32,6 м/с (11 баллов). Термин «ураган» имеет также более узкое значение — тропический циклон. По месту образования тропические циклоны делят на:
Субтропический шторм
Тропический шторм
Ураган (Атлантический океан)
Тайфун (Тихий океан)
Если скорость ветра в тропическом циклоне превышает 60 км/ч, ему присваивается собственное имя. По мнению американских учёных, для областей, расположенных в
северных широтах, снежной бурей можно считать зимний сильный
ветер, во время которого скорость ветра достигает и превышает 15 м/с (56 км/ч).
При этом температура воздуха опускается до −7 °C и ниже.
Территория распространения снежной бури может быть сколь угодно обширной. 数学は少なくとも話してる本人は内容を理解している
一方お前のクソみたいなロシア語はお前はその内容を理解していない
一つ聞くが、お前がコピペした文章の中には原意が支配するという意味のロシア語の単語が出てくるが、
その単語の性数態をお前は適切にこたえられるか?
答えられないだろうな。奇を衒って知りもしない外国語の文章をコピペしただけなんだから >>157
これは普通のナップザック問題と違って、荷物を積む積まないの選択肢のみならず
それに加えナップザック中に残されているスペースの形状・大きさ、
荷物を積むならば配置する向きと位置
そういったすべての条件の組み合わせに配慮して、最終価値最大の解を探索せねばならず、
単に荷物の重さと価値のみに着目して動的計画法で価値最大化プログラムをちょいちょいと書く
ような課題とは全然違った難しさがあるな… なるほど。じゃ落語で埋めてくわ。
本人が理解してりゃスレ違いでもいいらしいからな。 >>173
数学が理解できなくてそんなに悔しかった??
自分がロシア語も理解できないのにコピペしたのがバレてそんなに悔しかった??
本当に惨めだね。あ、僕は落語なら浜野矩随が好きだからよろしくね、ど低能くん^^ こんな話がございます。
両国の回向院に猫塚トいうものがございます。
猫が死にますト、飼い主が回向料とともに、猫の亡骸を持ち込みまして。
寺の僧侶がお経を読んで、猫を葬ってくれるという。
これは、この塚に最初に入ったという猫の話でございます。
八丁堀の玉子屋新道に、魚屋を営む定吉ト申す者がございました。
もっとも、魚屋とは名ばかりで、その実は博奕打ちでございます。
毎日を遊んで暮らしている。 この日も、朝湯の帰りに馴染みの三河屋という居酒屋に立ち寄りまして。
風呂あがりの一杯とばかりに、呑気に引っ掛けておりますト。
ポカッ、ポカッと、頭の上から妙な音が聞こえてくる。
博奕打ちというのは、我々とはものの考え方が異なっているようで。
――板に何かを叩きつける音がする。
なるほど、やってやがるな―― ト、てっきり丁半博打の壺を伏せる音と勘違いいたしまして。
「おい、六さん」
店の者を呼びつけます。
「なんだい、水臭えじゃねえか。やってるならやってるで、教えてくれてもいいだろうに。俺も仲間に入れてくれ。取り次いでくんなよ」
「博奕ですか。滅相もない。うちではそういったことはさせません。二階は物置ですよ」 それでも、確かに音がするのは妙でございます。
店の者が二階へ上がっていって、やがて下りてまいりました。
「分かりました。あれは猫です」
こういった店は、商売柄、どうしても猫が寄ってくる。
今朝も早くに仕入れておいたイナダを、勝手に食ってしまったそうで。
あんまり腹が立つから、焼け火箸で目玉を刺してやろうかとも思ったが。
店の主人が、せめて橋の上から放り投げる程度にしてやれと言ったという。 「それで柱にふん縛っておいたんですがね。今、見に行ったら、なんとか逃げ出そうとして、立ち上がっては倒れてやがる。あれはその音ですよ」
定吉は柄にもなく、猫がちょっと不憫に思えまして。
死なせるくらいなら、自分が引き取って育てるからト。
金を渡して猫を貰い受けました。
差し毛の一本も見当たらない、正真正銘の黒猫です。
定吉は懐に入れるト、店を出て家に帰った。 家では女房のお滝が待っています。
定吉が懐から黒猫を取り出しますト、途端に渋い顔を浮かべまして。
「やだよ、そんなものを持って帰って。私は猫は嫌いなんだよ」
ト、そっぽを向いて風呂に行ってしまう。
定吉は、自分が命を救ってやった猫ですから。
恩を着せるわけではないが、やはり可愛い。
一人残った家の中で、猫を抱き上げて話しかける。 「そういや、名前を聞いてこなかったな。大抵の猫ならタマとかミケとか付けるんだが、お前はそんなガラじゃねえ。全身真っ黒で、熊みてえだもんな。そうだ。クマってのはどうだ」
するト、猫がにゃーごト鳴く。
「にゃーごだと。ヘヘ。鳴かなくていいから、恩返しのひとつでもしてみろよ。俺をちょっとは儲けさせてくれたら、拾った甲斐もあるってもんだ」
ト、猫に博奕の講釈をいたします。 「一つでやるのをチョボイチ、 二つ使うのを丁半、三つ使うのをきつねと言う。俺がやってるのは丁半だ。グニの半、二ゾロの丁ってな」
定吉は賽を湯のみに入れて、畳の上に伏せますト。
「どうだ。表から見たらどの目か分からないだろう。だから、銭を賭けて当てるんだ。猫は魔物というから、お前なら当てられるだろう。おい、なんとか言ってみろよ」
猫は相変わらず、にゃーごト鳴く。 「俺は、丁が出ると思うな。お前は何だ。にゃーごか。よし、俺が丁で、お前がにゃーご。勝負ッ」
ト、戯れながら湯呑みを開けますト、一二の半。
「おかしいな、半か。するってえと、お前のにゃーごは半か。ヘヘ、にゃご半か。それじゃあ今度は俺が半だ」
すると、今度は猫がにゃご、にゃごト、二回鳴く。 「なんだい、妙な鳴き方をしやがる。今度はにゃごにゃごの丁ってか」
ト、笑いながら湯呑みを開けるト、二ゾロの丁。
それから何度繰り返してみましても、猫がにゃーごと鳴くと半。
にゃごにゃごト、二回鳴くと丁が出ます。
「お前、本当に恩返ししてくれるつもりだな。こいつはいい」 それから定吉は、賭場へ行くたびにこの猫を懐に忍ばせていく。
にゃーごの半、にゃごにゃごの丁で、どんどん金が儲かりまして。
羽振りがよくなるト、兄い、親分と立てられるようになる。
猫を始終連れて歩くので、そのうちに猫定と呼ばれるようになった。 博徒の世界では、あだ名がついたら一人前ト申すそうでございますが。
一人前になるト、自然、悪評も目立つようになる。
そのうちに江戸にいられなくなり、ふた月ばかり旅に出ることにいたしまして。
定吉は、猫を女房に預けて家を出た。
これが惨劇の幕開けでございます。
――チョット、一息つきまして。 数学厨よりひどいあらしだな
スレが機能しなくなっちゃった どこまでお話しましたか。
そうそう、博奕打ちの定吉が、猫の鳴き声で賽の目を当て、兄い、親分ト立てられるようになるところまでで――。
亭主の定吉が家を空けますト。
女房のお滝は、子分の若い者を家に引き入れるようになりまして。
長屋の住人たちが眉をひそめるのも、まったく気にしておりません。 数学ができないやつは論理的思考もできないということを示す良い例だな
頼むからスレから未来永劫消えてくれ いてもいいけど荒らすな
お題を出し
解答プログラムを書くこと あの〜続きが気になるから http://onboumaru.com/049-nekosada から無断転載した「猫定」を
最後まで張ってくださいませんか?? 無能ロシア語落語さん^^ 自分が理解できれば何を書いてもいいというのは数学厨が示したルールだが。
文句を言われたらこう言って開き直ればいいそうだ。
「自分が理解できないからって荒らし呼ばわりは惨めすぎるね」 >>191
了解。>>191の依頼に従い、続行する。 そのうちに、人の噂も七十五日トばかりに。
ほとぼりが覚めた頃を見計らって、定吉が江戸に帰ってくる。
帰ってくるト、猫を連れてまたぞろ博奕へ出掛けます。
その夜。
お滝は、間男の若い者を呼びつけ、相談をした。
定吉がいては、お互い落ち着いて逢瀬を楽しむこともままならない。
いっそ、ひと思いに殺してしまってほしい。 >>192
数学は少なくともスレのお題と関係があったがお前のクソみたいなコピペはスレと無関係のただの荒らしだろうが
どっちもウザイのは同じだが、一緒くたにすんなハゲ! 若い者は、親分の家の姉御に見込まれたことで、男が上がったつもりになり。
箒を斜に切って油をかけ、ジリジリと火で炙る。
これは竹槍を作っているのでございます。
そうして、鯵切り包丁を手ぬぐいで包みますト。
腰に差して、長屋を飛び出していきました。
定吉は、馴染みの賭場へやってきておりましたが。
その晩はどうしたことか、猫が一向に鳴きません。 体の具合が悪いのだろうか。
まあ、今まで稼がせてもらったのだから。
ト、この時にはすでに情が移っておりますから。
猫の具合を優先して、素直に帰ることにいたしました。
賭場を出るト、ポツポツと雨が降り出してくる。
定吉は猫を懐に大事にしまって、新橋の喜多川といううなぎ屋に駆け込んだ。
一杯やりながら、猫に鰻の切れ端をやるのが、この頃の楽しみでございます。
ところが、いつもはよく食う猫が、これまた今日に限って口をつけようといたしません。 責任転嫁すんなハゲ
お前のせいで直近のお題が迷子だっつーの
もう二度とこないでください >>200
お前さんがやってる煽りも、ロシア語はってるいじけた小学生みたいな奴と同じレベルだよ。数学ができたとしても精神レベルは同程度。お前さんにどんな言い分があろうとも、周囲からはそう見える。 重み付き3次元箱詰め問題みたいなもんをここのお題に出すバカ
各都市の区の具体的なグラフが必要な問題をそれぞれのグラフも与えずに出すバカ
自分で解いて楽しいかどうか考えろよ お題が流れたみたいなのでリンクまとめ
>>11
"073:0" -> 18
"07362:450" -> 36
"06464:36470" -> 42
"0827171:28480" -> 66
"0737491:28180" -> 146
"05374734372747484:184618186912120" -> ?
>>40
[-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7]
-> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8]
>>77
"213cba213cba213cba" -> "213aaa213bbb213ccc"
>>102
gccgc -> 2
ggggggg -> 0
cppcppppccpppppc -> 5
cppcppppccpgpppc -> 0
>>117
odaiodai -> 2
ooddaai -> 1
idao -> 0
ododoadioadioadioadioadioadiodaioadodioadiaodi -> ? お題:Hello, World!を10回出力してください。ただし、偶数文字を小文字、奇数文字を大文字にすること。さらに3の倍数の文字をランダムな英字にすること。 >>206 Perl5
use feature 'say';
@s = split'','Hello, World!';
@Az = ('A'..'Z', 'a'..'z');
for $i (0..9) {
do {$s[$_ - 1] = $Az[int(rand(@Az))]
if $_ % 3 == 0} for 1..@s;
my @t;
push @t, $i % 2 ? lc $c : uc $c
while ($i, $c) = each @s;
say @t;
}
実行結果
$ perl 11_206.pl
HeHlOg wQrLz!
HeOlOp wOrLo!
HeAlOh wMrLf!
HeZlOs wJrLz!
HeElOh wBrLg!
HeBlOa wIrLy!
HeFlOw wCrLb!
HeTlOc wSrLp!
HeOlOm wNrLx!
HeJlOt wSrLl! >>206 Squeak/Pharo Smalltalk
Transcript open.
10 timesRepeat: [
| hello |
hello := 'Hello, World!' collectWithIndex: [:chr :idx |
((idx isDivisibleBy: 3) ifTrue: [Character alphabet atRandom] ifFalse: [chr])
perform: (idx even ifTrue: [#asLowercase] ifFalse: [#asUppercase])
].
Transcript cr; show: hello
]
=> HeYlOz wJrLp!
HeNlOe wArLr!
HeBlOn wWrLi!
HeSlOx wOrLk!
HeKlOy wRrLb!
HeIlOs wJrLw!
HeMlOd wGrLm!
HeElOz wLrLf!
HeJlOw wUrLr!
HeTlOe wMrLy! お題
N項目のレーダーチャートを考える。
各項目の点数が配列A[N]で与えられるので、
項目の並べ方を調整して、レーダーチャートの面積を最大化せよ。
※レーダーチャートの形状は正N角形であり、A[i]は中心からの距離を意味する。
{4,3,2,1,0}
=> 10.9371 //{0,1,3,4,2}
{10,0,0,10,10,0,10,10}
=> 141.421 //{0,0,0,10,10,10,10,10}
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
=> 280.698 >>206 Emacs Lisp
(defun* f (a &aux (b 0))
(map 'string (lambda (c) (let ((d (if (= (% (incf b) 3) 0) (+ ?a (random 26)) c))) (if (oddp b) (upcase d) (downcase d)))) a))
(mapc (lambda (x) (princ (funcall #'f x)) (terpri)) (make-list 10 "Hello, World!"))
HeElOf wBrLb!
HeAlOj wYrLk!
HeZlOz wQrLd!
HeBlOh wIrLm!
HeMlOy wIrLb!
HeZlOo wTrLk!
HeRlOq wErLv!
HeFlOn wKrLq!
HeAlOg wQrLv!
HeFlOa wRrLi! >>211 Emacs Lisp
(defun* f (a &aux b c)
(loop for i from 0 below (length a) do
(if (< i 3)
(setq b (append b (list (nth i a))))
(dotimes (n (length b))
(push (cons (+ (abs (- (nth n b) (nth i a))) (abs (- (nth (% (1+ n) (length b)) b) (nth i a)))) n) c))
(let ((d (1+ (cdar (sort (copy-seq c) (lambda (a b) (< (car a) (car b))))))))
(setq b (append (subseq b 0 d) (list (nth i a)) (nthcdr d b))))))
b)
(defun g (a)
(flet ((b (c d e)
(when (> c d) (rotatef c d))
(if (= d 0) 0.0 (* d (sin (/ pi e)) d (cos (/ pi e)) c (/ (float d))))))
(let ((h (length a)) (i 0.0))
(dotimes (n h)
(incf i (apply #'b (list (nth n a) (nth (% (1+ n) h) a) h))))
i)))
(f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) => (1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3)
(g (f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) => 280.69829763979334 >>211
J
山型に並べるだけ。
証明は略
(谷がある並び順は谷底を移動してより大きく出来ることが示せる。
谷がない場合、頂上から左右に振り分けて行くのが最大と示せる)
NB. sin α
sinA =: 1&o.@((o.2)&%)@#
NB. ズラして掛けた総和
s =: +/@(*(}.@,{.))"1
NB. 山型に並べる
raz =: (/:[)/:(/:+/@(* ,~/"1)@(*\)@i.@#)
NB. 山型に並べてズラして掛けた総和にsinα掛けて半分にする
ans =: -:@(sinA*(s@raz))
1行で書くと
ans =: -:@(1&o.@((o.2)&%)@#*+/@(*(}.@, {.))"1@((/:[)/:(/:+/@(*,~/"1)@(*\)@i.@#)))
実行例
ans 4 3 2 1 0
10.9371
ans 10 0 0 10 10 0 10 10
106.066
ans 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
280.698
https://%62it.ly/2jlIjeo >>211
J 一応総当たりも (sinA, s は同じ)
all =: A.~(i.@!@<:@#)
min =: >./
ans2 =: -:@((sinA)*(min@(s@all)))
実行例
ans2 4 3 2 1 0
10.9371
ans2 10 0 0 10 10 0 10 10
141.421
ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|out of memory: all
| ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 あれ?バグってるなこれ
総当たりの方は取り消します >>216
正しくはこうでした
sinA =: 1&o.@((o.2)&%)@#
s =: +/@(*(}.@,{.))"1
raz =: ((\: [) {~ (/: (* <:@(2&*)@(2&|)))@i.@#)
ans =: -:@(sinA*(s@raz))
1行にするのは略
https://%62it.ly/2w3XF0m >>211
それ、俺の直感ではsortすればいいだけなんじゃあ?
証明できんけど。 >>223
>>211
… (ry
> {4,3,2,1,0}
> => 10.9371 //{0,1,3,4,2}
_________~ ~ >>224
あー。ちょっと違うな。崖作らずに山作る感じか。
証明できんけどw >>225
「大きい方から順に取って、既存の列の大きい端の外側に配置」を繰り返せばいい
0 1 2 3 4 のときは
4
4, 3
2, 4, 3
2, 4, 3, 1
0, 2, 4, 3, 1
この時の面積は
1/2・sin 72° ・(0*2+2*4+4*3+3*1+1*0) = 10.9371 面倒なので証明しないで全パターンの面積を求めて最大のやつを出すように作ろうかと思ったが、
腹が減ったので飯食ってから考えよう。(というかこうするならほとんど考える必要ないなこれw) 問題思いついた後、ググって>>227見つけたので出題した次第です。
最小化については上手い方法があるんだろうか? >>227
そのπってのが真ん中から左右に配置して行くインデックス列。
でその証明は不完全(*1)だけど結論は合ってる。
(*1)
n-1個の時の最大になる列のどこかに
n番目の数を挿入すればn個の時の解が得られる、
ということを証明せずに利用している。
小さくするには山谷の数を多くする(小さいのと大きいのがなるべく隣接するように置く)
ってことは直感的にわかるんだけど具体的な構成法は考察がいるな >>211 Squeak/Pharo Smalltalk
| fn |
fn := [:arr |
| strm res |
strm := arr sorted readStream.
res := OrderedCollection withAll: (strm next: 3).
[strm atEnd] whileFalse: [
| next foundPos |
next := strm next.
foundPos := (1 to: res size) detectMax: [:idx |
| a1 a2 |
(a1 := res at: idx) + (a2 := res atWrap: idx+1) * next - (a1 * a2)].
res add: next afterIndex: foundPos
].
res := res asArray.
(res * (2 * Float pi / res size) sin * ({res last}, res allButLast) / 2) sum -> res
].
fn value: #(4 3 2 1 0).
"=> 10.937149937394265->#(0 1 3 4 2) "
fn value: #(10 0 0 10 10 0 10 10).
"=> 141.42135623730948->#(0 10 10 10 10 10 0 0) "
fn value: #(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
"=> 280.6982976397934->#(1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3) " >>230 最小を目指して, 山谷の数を多くしてみました.
(defun f2 (a)
(let* ((b (sort (copy-seq a) #'<))
(c (/ (length b) 2))
(d (let ((e (subseq b 0 c))) (apply #'append (mapcar (lambda (x) (let ((y (pop e))) (if y (list x y) (list x)))) (reverse (subseq b c))))))
(h))
(loop for i from 0 below (length d) do (setq h (if (or (= (% i 4) 1) (= (% i 4) 2)) (append h (list (nth i d))) (append (list (nth i d)) h))))
h))
(f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))
(8 10 6 12 4 14 2 16 1 15 3 13 5 11 7 9)
(g (f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)))
157.47423241823444 >>233
無為に捨てられる何千もの’Hello, World!’がかわいそうすぎね?(´;ω;`) >>211 Perl5
https://ideone.com/cMJGDR
自力で動的計画法による解法を考えようとしていたけど、
>>227で紹介されたWEBの解法に勝る見込みが無さそうなので
思考を停止してWEBの解法を愚直に実装したものです 【お題】
与えられた整数のリストで、
2つの要素の和が100になるすべての組を列挙せよ。
例:
[1, 99, 20]
-> [[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
-> [[40, 60], [-16, 116], [-81, 181]]
[100, 0, 100, 0]
-> [[0, 100], [0, 100], [0, 100], [0, 100]] >>236
Ruby。
ary.combination(2).select{|x|x.inject(:+)==100} >>236 Squeak/Pharo Smalltalk
| fn |
fn := [:arr |
| bag |
bag := Bag new.
arr combinations: 2 atATimeDo: [:comb |
comb sum = 100 ifTrue: [bag add: comb sorted]].
bag asArray
].
fn value: #(1 99 20).
"=> #((1 99)) "
fn value: #(62 116 181 86 60 98 -16 73 131 16 80 -81 40).
"=> #((-81 181) (-16 116) (40 60)) "
fn value: #(100 0 100 0).
"=> #((0 100) (0 100) (0 100) (0 100)} " >>236 Perl5
use Data::Dump 'dump';
for ([1, 99, 20],
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40],
[100, 0, 100, 0]) {
sub c {my $d = shift;
my @l = c(@_) if 1 < @_;
@l, map{[$d, $_]} @_};
@s = grep{100 == $$_[0]+$$_[1]} c @$_;
print dump($_)."\n->".dump(\@s)."\n";
}
実行結果
$ perl 11_236.pl
[1, 99, 20]
->[[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
->[[60, 40], [181, -81], [116, -16]]
[100, 0, 100, 0]
->[[100, 0], [0, 100], [100, 0], [100, 0]]
※実行にはperlのData::Dumpモジュールが必要ですが、
Ideoneのperl 24にはインストールされてないようでした >>236 javascript
var f = l => {
console.log(
l.reduce((acc, m, i, ary) =>
[
...acc,
...ary.slice(i+1)
.filter(n => m + n == 100)
.map(n => [m, n])
],
[]
)
)
}
f([1, 99, 20])
//=> [[1, 99]]
f([62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40])
//=> [[116, -16], [181, -81], [60, 40]]
f([100, 0, 100, 0])
//=> [[100, 0], [100, 0], [0, 100], [100, 0]] Smalltalk のメソッドの充実っぷりには毎回感心 それなりの規模の処理系(GUI付きOSモドキ)をセルフホスティングで構築・維持していると
イディオムがイディオムとして認識・共有されやすく、さらにメソッドとしてまとめられやすいのかも
たとえばスクリプト言語処理系でしかないGNU Smalltalkはあまり便利メソッドが増える感じがしないので お題
10,000個の単純変数に1から10,000の整数を代入する >>247 Ruby
(1..10000).each{|i|instance_variable_set("@v#{i}", i} >>247
Perl
for(1..10000){eval”\$a$_=$_”}
こんなんでいいのか? >>250
シェルもperlみたいにeval使えば簡単だと思うよ。その他の言語も同様。
てかこれ、インタープリタの言語にはできてもコンパイルする言語の場合は普通の方法ではできないんじゃないかな。
トリッキーな方法使ってようやっとできるかも知れないって感じじゃないだろうか。 Cプリプロセッサでもやろうと思えばできるけど面倒だからやらない お題:パイ生地を折り畳め
ただし要素数は二個以上で偶数とする
気が向いた人は逆の操作も実装せよ
https://ideone.com/W9woGu >>255
分からないときは好きに解釈していいのがこのスレのルール >>254 Perl5
sub f {pop, shift, @_ ? f(@_) : ()}
sub g {@_ ? do{my $a = shift; shift, g(@_), $a} : ()}
use feature 'say';
sub pai {
say "@pai";
@pai = f(@pai); say "@pai";
@pai = g(@pai); say "@pai";
}
@pai = qw{1 2 3 4 5 6}; &pai;
@pai = qw{a b c d e f}; &pai;
実行結果
$ perl 11_254_1.pl
1 2 3 4 5 6
6 1 5 2 4 3
1 2 3 4 5 6
a b c d e f
f a e b d c
a b c d e f f, g のような変換関数を作ること自体は簡単な感じがするが、それと「パイ生地の折り畳み」がどう関係するのかがわからんな。
単にここでは折り畳んだらそういう並びになるというルールなだけ? 半分に折る->後半部を逆順に
折重ねたまま元の大きさまで伸ばす->前半部に合成
パイ生地の作り方からの連想だとは思う >>247 javascript
eval('var ' + [...Array(10000)].map((_, i) => `a${i+1}=${i+1}`).join())
>>252の通りやった >>258 分からないと言うことをいろいろ言うつもりは無いけどm
>>254 のレスの内容とoctaveのコードから考えて
1 2 3 5 6
をパイ生地のように二つに折り畳んだ
1 2 3
6 5 4
を(下を先に選択して)リストで表すと
6 1 5 2 4 3
だということは想像に難くないので、そう解釈して解答を考えた。
gはその逆。誤解はあるかもしれない。
講釈がコードより長くなったけど、
「だけ?」って一体どういういみだよ? >>262
「パイ生地の折り畳み」という言葉に他の意味がないかってこと。 >>254
J
l =: -: * -.@(2&|)
r =: (# - -:@>:) * 2&|
p_fold =: {~((l+r)@i.@#)
折りたたみちょっと面白いね
何度か繰り返し適用すると元に戻る
例えば4つだと p_fold^:3 (1 2 3 4) => 1 2 3 4
と3回適用すると元に戻る
(^:n ってのはn回適用するJの仕組み)
同様に
p_fold^:5 (1 2 3 4 5 6) =>1 2 3 4 5 6
p_fold^:4 (1 2 3 4 5 6 7 8) => 1 2 3 4 5 6 7 8
p_fold^:9 (1 2 3 4 5 6 7 8 9 10) => 1 2 3 4 5 6 7 8 9 10 >>254 Ruby 条件分岐を使わずにindexのみから求めてみた
f=->a{a.size.times.map{|i|a[(i&1)*i-i/2-1]}}
g=->a{(s=a.size).times.map{|i|a[~(4*i-2*s+3).abs/2]}}
p f[[*1..6]] #=> [6, 1, 5, 2, 4, 3]
p g[f[[*1..6]]] #=> [1, 2, 3, 4, 5, 6] >>254 Squeak/Pharo Smalltalk
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:idx | arr perform: (#(atLast: at:) atWrap: idx) with: (idx / 2) ceiling]
) as: arr species
].
g := [:arr |
(((1 to: arr size) select: #even), ((1 to: arr size) select: #odd) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) " >>254 Squeak/Pharo Smalltalk >>265っぽい方針も入れて書き直し
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:m | arr atWrap: m * m even asBit - (m // 2)]
) as: arr species
].
g := [:arr |
((2 to: arr size by: 2), (1 to: arr size by: 2) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) " お題
N×Mのフィールドが与えられる。各マスの意味は以下の通りとする。
'S':始点
'G':終点
'.':通行可
'#':通行不可
連続して同じ方向に進むことができないという制約下で、
始点から終点までの最短距離を求めよ。
[example 1]
S....
#....
..#..
....G
=> 9
[example 2]
S.....G
.......
=> 12 >>269
配列の長さを L とすると、
f(パイをたたむ)は;
i(0 <= i < L)番目の要素を元の配列の (~...~[i / 2]) % L 番目から持ってくればよい
(~...~はビット反転を i 回繰り返したもの)
g(パイを開く)は;
i(0 <= i < L)番目の要素を元の配列の (- 0.5 - |2 * i - L + 1.5|) % L 番目から持ってくればよい [][][] [[[ ] X_[[[ [] ][ [] ][][[[] 今抱えてる課題
1から100までインクリメントする変数iを用いて
300から1までの実数を100個出力せよ
i=1の時は300
i=100の時は1
となる式を考えてちょ(人・ω・)☆ >>273
300 - (299.0 / 99.0) * (i - 1) お題:文字駒を滑らせろ
四方を囲いで被われ駒がこぼれる心配のないM×Nマスのボードがある。
ここに英小文字が印字された正方形の駒が適当に配置されている。(駒のないマスは.(ドット)で表す)
与えられる、ボードを傾ける指示を完遂したときの最終盤面を表示せよ。
指示の方向はU(向かい方向)、D(手前方向)、L(左方向)、R(右方向)の四種類。
例1)
solve([
'...',
'.a.',
'...',
], 'UR')
// ↓
// [
// '..a',
// '...',
// '...',
// ]
https://jsfiddle.net/en6rd3vk/
※盤面は文字列の配列にしているが文字の配列の配列など言語で扱いやすいよう好きにしてよい
例2)
solve(
[".....", ".d.i.", "kmegk", "..tu."],
"LRRLLUDRRLRLRRURRRRLLLRULDUDULDLLRDULURULUDLDLUDDL"
)
//=> [".....", "gk...", "km...", "dietu"]
暇な人は300×300、指示数50くらいでやってみてください。最適化しないと結構時間かかっちゃうと思いますが。 >>274
ありがとうございます(^○^)
範囲を等分してiと合わせるだけだったんですね
これを思いつかないとは・・・寝てきます(・_・;) お題
Y円を支払うとき、同種の通貨の枚数を最小化する。
Y=500
=> 1 (500*1, 同種の通貨は最大1枚)
Y=300
=> 2 (2*100+2*50, 同種の通貨は最大2枚)
Y=40
=> 3
Y=60
=> 1 >>281
通貨の種類は 1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000? >>282 それでいいです。任意の種類に対応できたら尚良し >>281
=> 0 (カード決済または電子マネー決済) >>281 Ruby ぴったり払えない時は No Solutions と出力
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
sums = currency.size.times.map { |i| currency[0..i].sum }
[74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40].each { |yen|
print '%d => ' % yen
min = currency.zip(sums).reverse_each.map { |c, s|
yen -= c * x = [yen/c, -(-yen/s)].min
x
}.max
puts yen.zero? ? min : 'No Solutions'
}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3 >>275
一度でも水平垂直の両方に傾けると
座標じゃなくて単に駒の二次元リストでいけると思うから
指示の短縮と合わせて早くできると思うけど
どう書けばいいか悩んでる・・・ >>281 Ruby >>288を修正
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
samples = [74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40]
cands = currency.zip(currency.reduce([]){|s, e| s << s.last.to_i + e}).reverse_each
breakdown = lambda do |yen|
x = cands.map{|c, s| yen -= c * x = [yen/c, -(-yen/s)].min; x}.max
yen > 0 ? 'No Solution' : x
end
samples.each{|yen| puts '%d => %s' % [yen, breakdown[yen]]}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3 }]] [[《_["[[]]" 〈[]》》 [][][]0,1》》〈〉 [] } } "B,V,0%%%,*1BVLO,SASA1`}}//%\\0,1\"VL"\ はっ。それはもしや45の倍数・・・
おや?こんな夜中に誰だ? >>289
それって例えば初期配置が以下のとき(■が駒)
□■■□□■
□□■□■□
■■□■□■
□□■■□□
□■□■□□
■□■□□■
最初に例えばULが来ると以下のようになって…
■■■■■■
■■■■■□
■■■■□□
■□□□□□
□□□□□□
□□□□□□
□だけの行、□だけの列はこれからハブいてループ回せるじゃんってことだよね。この例だと下二行。
なるほど命令の最適化ばっかり考えてて全然気づかなかった。 >>292 Squeak/Pharo Smalltalk
(1 to: 9) sum * (1 to: 9) "=> #(45 90 135 180 225 270 315 360 405) "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum. "=> #(45 90 135 180 225 270 315 360 405) "
ついでに全段の合計も
((1 to: 9) sum * (1 to: 9)) sum. "=> 2025 "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum sum. "=> 2025 "
(Matrix rows: 9 columns: 9 tabulate: [:x :y | x * y]) sum. "=> 2025 "
((1 to: 9) asArray +* (Matrix rows:1 columns: 9 contents: (1 to: 9))) sum. "=> 2025 " >>275
これの最適化したいんだけど誰か大きいボードのサンプルくれないかなあ >>296
Smalltalk なのに普通だ…いやtabulateが便利そう
J
格段の和
+/(*/[)>:i.9
45 90 135 180 225 270 315 360 405
さらに足すと
+/+/(*/[)>:i.9
2025
先に,で1次元化してから足せば1文字短く
+/,(*/[)>:i.9
2025 >>297
すごくでかくなったので分けた。ごめんよjsfiddle...
board(1980x1080, 文字列の配列形式)
https://jsfiddle.net/eqyuvgm9/
actions(256)
https://jsfiddle.net/2j2817rc/
result(1980x1080, 文字列の配列形式)
https://jsfiddle.net/uyboko52/
このサンプルでchromeのコンソールで試した結果、
最適化なしでは47.4秒
命令の最適化だけで1.8秒になった
>>289も試してみようと思う >>292
Kotlin
(1..9).forEach { a -> println((1..9).map { it * a }.sum()) }
この1行をファイルに入れて kotlinc -script でファイルを指定するとスクリプトとして実行されて計算結果が出力される。
45
90
135
180
225
270
315
360
405 >>292 Nim
import math
const s1 = (sum[int]([1,2,3,4,5,6,7,8,9]))
var s=0; for i in 1..9: s+=s1; echo s >>300
命令はもう LDRULDRU... で与えた方がいいかもね
この256文字?命令も URDLURDLU まで最適化できちゃうわけだし >>300 Ruby
>>289を意識して最適化してみた
https://ideone.com/zwyM7p
2回動かした後、適切に反転させて右下が開くようにしておけば、
abc-
ed--
f---
----
LとRは、
cba-
de--
f---
----
UとDは、
fdc-
eb--
a---
----
と垂直、鉛直方向にそれぞれ反転するだけでいい
最適化された命令は時計回りか反時計回りに回すことになるけど、((駒の数)! + 1)回以内には必ずでループするのでそれも考慮
が、1980x1080には4秒要する模様 >>295
マス単位で省けると思う
[a....,bcd..,efghi]を[a,bcd,efghi]って表現して
これを上に傾けて[acdhi,bfg,e]にする操作はこんなコードで出来る
https://ideone.com/i7EmbB
他の方向へは対称性を利用すれば書けるから
今は左下に寄ってるみたいな情報を持ってればいいし
その情報で行列表現にも戻せる
まあ駒の数が多い場合は大して速くならないけど あとは2回目以降どうやって傾けても駒の配置は合同(かその反転)になるから
2回傾けた結果を使って4回目を求めて……ってやればO((駒の数)*log(最適化された命令の長さ))で済みそうだよね >>305
面倒なループ書かなくても反転でいけたのか・・・
数学力が足りなかった >>275を>>300のボードで
こういう処理はCが速かろうということで何の工夫もないコードを書いてみた
アクションの最適化なしで256回動かした場合
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.638s
user 0m0.625s
sys 0m0.009s
638ミリ秒
アクションの最適化だけ実装すると
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.045s
user 0m0.037s
sys 0m0.006s
45ミリ秒
https://ideone.com/bZmXpg 補足
256回というのは>>300にある256アクションをそのまま行うということ 目先を変えて Apple の GCD を使って8スレッド並列にしてみた
4コアのPCで3倍くらいになった
アクションの最適化なし
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.218s
user 0m1.190s
sys 0m0.027s
218ミリ秒
アクションの最適化あり
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.023s
user 0m0.058s
sys 0m0.008s
23ミリ秒
100回繰り返すと1回あたり18msec程度になる模様
MacBook-Pro:tmp$ time for i in `seq 1 100` ; do ./c.out <data.raw >rc.raw ; done
real 0m1.814s
user 0m6.659s
sys 0m0.589s
https://ideone.com/ULrjTi (そして今試してわかったが dispatch_group は
>>311のように使いまわさず wait 後破棄してまた create する方が高速、と) スクリプト言語のわりには速いと言われるjsだけど当たり前なのかもしれないが桁違いにぜんぜん敵わんくて糞ワロタww JS のは配列の初期化や文字列操作関数とかが足引っ張ってるんじゃないだろうか。
毎回メモリアロケートするからキャッシュも効きにくそうだし。
2次元配列に初期値セットしてからコードで操作した方が速い気がする。 PCの速度差がかなりあるだけかも知れんし後でjs版も計測してみる 各コマの最大可動範囲は最初に定まるし
ターンが進むにつれ狭まりもするから
それで最適化できん?
知らんけど >>305のやり方だと二回傾けて以降は駒の入れ替えだけでいいから
numpyでboard[board!='.']=np.fliplr(board)[np.fliplr(board)!='.']とかやれば速いかな
インデックスは毎回計算しなくてもいいけど 本当は数値計算みたいにもっと速い命令を使ってくれるかなと期待してたんだけど
そういう上手くはいかなかった >>275のコードで>>300のデータを
C版を計測したMacのChromeで計測してみた
結果は>>300と似たような数字で性能差はあまりなさそう
actions(256個)そのまま
37.972秒
最適化した URDLURDLU を使用
1.861秒 じゃあArray版作るか…
思ったんだけどこれWebGLでGPU計算出来るかな?いやGPGPU向きの問題かどうかすら分かんないんだけど詳しい人いるかと思って。 >>275
J
left =: (((#~-.),(#~))'.'&=)"1
right =: (((#~),(#~-.))'.'&=)"1
solve =: 3 : 0
:
if. (#x) = 0 do. y return. end.
action =. {. x
actions_left =. }. x
if. action = 'U' do. board =. |: left |: y
elseif. action = 'D' do. board =. |: right |: y
elseif. action = 'L' do. board =. left y
elseif. action = 'R' do. board =. right y
end.
actions_left solve board
)
Cシングルスレッド版の3.5〜6.6倍遅い
アクション(256個)そのまま
4.242秒
最適化した URDLURDLU を使用
0.161秒
https://%62it.ly/2rybKgZ 先頭2行のJらしい部分の解説
文字列を.と等しいか('.'&=)でマスク(#~)
(#~'.'&=) '..a.b' => '...'
その論理否定(-.)でマスク
((#~-.)'.'&=) '..a.b' => 'ab'
,で繋げる
(((#~),(#~-.))'.'&=) '..a.b' => '...ab'
これで右寄せ。反対に繋げれば左寄せ。
直感的で 読 み や す い 2つの普通のサイコロを
面と面をくっつけて直方体を作る
何種類の異なる直方体ができるか?
回転して同じものは同じ種類とする >>330
C言語
#include <stdio.h>
int main(){ printf("%d¥n", (6+5+4+3+2+1)*4); return 0; } >>330
直方体そのものは1つなのでは?各面に打ってある点の数は違うけど同じ直方体であることには変わりないよね。
などと言ってしまったら問題にならなくて全然面白くないので後で考えてみるよ。w まず数学的に考えると、6面の内の一面がくっつくのでこれで6種で、更にくっ付けられる面が6面なので6倍。そして4回回転できるので更に4倍。しかし同じ値の面がくっついた時はお互いに回転させても同じのができるのでこれを引く。
とすると6*6*4-6*4=6*4*(6-1)=6*4*5=120でいいのかな。 ま、しかし、数学的に答え出しちゃったらプログラム作る意味なくなるような気がするので全パターン作って確かめるようなの作るか。 >>337
1-1
1-2 2-2
1-3 2-3 3-3
1-4 2-4 3-4 4-4
1-5 2-5 3-5 4-5 5-5
1-6 2-6 3-6 4-6 5-6 6-6
すなわち (6+5+4+3+2+1)×4面 >>335
改行書くことすら惜しむくらいなら、「return 0;」省略すればいいのに・・・
>>338
そういうときはn面体に対するものにするとか、
m個くっつける場合のものにするとか、どこかの値を可変にすればいい。 >>339
そうか。何が違うのか今のところ俺にはわからない。
>>342
その説明の意味がわからない。何を表しているのか? >>344
くっついている面の組み合わせ(サイコロを2つ振って出る目と同じ)×4回転 >>345
あ、そうか。例えば1、6は6、1と同じか。 6*7/2*4=6*7*2=84てことだな。
じゃ、あとは無理矢理全パターン出して全件チェックするブルートフォースなプログラムでもゆっくり作るとするか。 散々考えて作ったプログラムで 96 と結果が出てしまい、何がどう間違ってるのか探すの面倒なのでとりあえず休止。
またその内気が向いたらやってみよう。 よくある総当たり戦の試合数を求める問題の変形だろ
いくらなんでも算数レベルはさすがに・・・ 算数レベルだと不満があるみたいなので類題を
正五胞体の各面に1〜10の番号が振られたサイコロが2つある
2つの正五胞体の面を合わせて新たな多胞体を作るとき、
面の模様の組み合わせ合わせてを合わせて何通り作ることができるか求めよ 面を合わせる操作で胞はどうなるんだろう
模範解答が欲しいな 無理だろ
問題のクラスがどこに属するかを確かめてから……ってのは 出題者は学校の宿題をコピペしてるだけなんだからそんなの分かるわけないだろw 円周上の格子点を求めるプログラムをしこしこ作ってるが、
マルチスレッドで動かしたらPentium G6950とAtom x5-Z8350タブレットでほとんど変わらなくて(´・ω・`) これか
「自然数Nに対して、平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」
例)
x^2 + y^2 = 1の整数点は4つだがN=4の最小半径ではない。
(x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。 4点は(0,0) (1,0) (0,1) (1,1) ああ、自称数学が出来る人がアホな事を言ってたヤツだな
最小値は存在しないとか
最小値が存在する証明は簡単だとか言いつつまったく出来てなかったり 全く解いてないけど
力業しか方法は無いのかな?
AVX512とかGPUとか使えたりする? >>359
複数解があれば、その中で一番小さい物が最小値
という当たり前の定義に何か疑問でも? >>361
最小値が存在するためにはいくつかの条件があって
その条件を全く考慮しないで「証明」と言い張ってたアホがいたと
まさか君じゃないよね? それより数学のセンセが複素指数関数をなんだか誤解しているのを何とか説き伏せたいのだけれども… >>364
多値関数のことを周期関数とか見当違いのことを言っていたあなたが何か言えることなんてあるんですか?
でこの話題まだ続けたいの? なんか最小値とかでよほど辛い目にあったんだろうなw >>365
続けます、今必死に
http://www.eng.niigata-u.ac.jp/~nomoto/2.html
を理解しようとしています、とてもつらいです、涙が知らず知らず頬を伝っているありさまです… せんせーともども数学板へどうぞ。
こいつら異世界転生もののアニメ見てそうだなワラ 仲間内じゃうだつが上がらないのかな、誉められたくてこんなとこまで来てチンコしごいてんのか気持ち悪い。
リアルで軽んじられてる理由が透けて見えるよ。ほんと迷惑な話。 >>369みたいなアニオタは巣から出てくるな 不快な上に真面目に気持ち悪いわ お題
辺の長さと面の面積と体積の全てが整数である4面体を求める >>368
もしかしてリーマン面とかも知らずに留数定理がどうのこうの言ってたのか?
厚顔無恥ってこのことだぜ >>375
言ってる事がよくわからないんだが?
もしかしてくやしいの? 数学コンプがプログラミングに逃げたが
やっぱり数学からは逃れられなかっただけ お題
(1) 入力された英数字([A-Z0-9])をモールス信号を表す文字列に変換する。大文字小文字は区別しない。
記号は変換出来なくても良い。また数字の略体は不要。短点と長点には何の文字を使っても良いが、
なるべく分かり易くするために「・」、「−」等にすること。
(2) (1)で作ったモールス信号を表す文字列の逆変換。
(3) 和文版の(1)と(2)
欧文、和文モールス符号については下記ページ参照
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7 >>350
問題そのものとは関係ないかもしれんが正五胞体の面同士を重ねても通常の多胞体にはならないんじゃ
次元をひとつ下げればふたつの正四面体の辺同士を重ねる操作にあたるよね >>376
おれは数学の専門家だって
>>368と>>374の低レベルなバトル楽しみにしてるよ その自称数学の専門家がなんでまたこんな場違いな板のスレに粘着してんの?
お前も実は数学コンプなんだろ もう数学問題に特化したお題スレ作った方が良いのでは? >>382
趣味のプログラマーだから
数学的に面白いネタ探し
>>384
プログラムで書きなさい
printf("ない??n"); >>385
いちいちID変えてる時点でこいつが誰なのかすぐに分かってしまいますね 円マークかな?Unicodeだとバックスラッシュとはコードが違うよね。 前にLinuxの端末でバックスラッシュと円マークの両方が半角で普通に両方入力できて驚いたことがある。やっとまともになったのかとw >>387
おれは誰なんだ?
ごくたまにしか書き込んで無いけど datをバイナリエディタで見たら化けてる所は 0xfc 0xfc になってるが、なぜそれになるのかは知らん。 ていうかC言語等の文字のエスケープに使う文字は本来であればバックスラッシュだ。
円マークになってる入門書等が多い理由は歴史的な理由による。
どういう歴史的理由かは長くなるので省略。 中途半端な知識で語りたがりが多いな
数学といい文字コードといい "\" 円(U+00A5)
"\" バックスラッシュ(U+005C) SIPやアプリや5chがどういう文字コードを扱ってどういう変換をしてるかがわからん
これは調べたり実験しないと
教えたがりの書き込みは全く役に立ってないから
書かなくて良いよ
釈迦に説法 >>401
いちいち突っかかるお前も大概だがな
黙って見ているってこともできないのか 5ch はシフトJISだから1バイトのバックスラッシュは基本書けないし読めない
(U+00A5に対応する文字コードがない)
実体参照の使用が許可されてる板なら実体参照でU+00A5の字も書ける
fcfc はわかんないな
ググるとfcfcはシフトjisのibm拡張文字領域で、
aixの修正された不具合の説明で文字コード変換の際に
意味のないコードfcfcになるのがどうのこうのというページがあったから
libicu(ibmの文字コード関係ライブラリ。割と広く使われている)で
そういう不具合のあるバージョンがあるんだろうな >>404の補足
5ch は投稿されたfcfcをそのまま出してるだけで、
誤変換しているのは投稿しているアプリ
それはそれとしてこの板ではバックスラッシュ使いたいよね >>404
U+00A5がYen signじゃろ… 日本人にも責任がある
【666の獣トランプ涙目w】 2000年ぶりにWあの漢″帰郷の噂… <再臨> イスラエル、また処刑する!?
http://rosie.5ch.net/test/read.cgi/liveplus/1526351394/l50 >>407
そっかごめん訂正
u+00A5 はシフトjisの0x5c に変換されて書けるけど、
ユニコードの u+005c のバックスラッシュは書けない、が正解だった。 バックスラッシュと言えば Visual Studio で c のソース編集時に
バックスラッシュが表示されてて、文字コードはshift jisなのに何故?
と思ってたが Visual Studio では0x5Cがどっちで表示されるかはフォント任せなんだな
shift jis (cp932) では円マークと規定されてるのに。 >>396
何事も、ニワカな奴ほど語りたがるからしゃーない 数学コンプだけじゃなくて文字コードコンプまで発症したのかw 頭がおかしいんだから仕方ないね
精神科のお薬飲んで寝ろ 禁煙の立て札の前でタバコを吸う数学奴文字コード奴であった。 そんなに数学挑みたいならこれでもどうぞ
お題
2つ以上の正の整数が与えられる
この時、最後を除く自然数に対し四則演算及び括弧を使い数式を作ることで、最後の自然数と同値にせよ
複数の数式が考えられる場合、どれか1個を出力すれば良い
入力例1: 5 2 3 3 10
出力例1: -5+(2+3)*3=10
入力例2: 0 1
出力例2: Impossible 飲食禁止の貼り紙の前でクチャクチャと音を立ててキムチを食す数学奴 極度の数学コンプとそれを煽る人達のせいで訳わからなくなってるな
数学コンプの人らは数学に関するすべてを禁止したスレを立ててそっちに移住したほうが平和なんじゃないの スレが荒れるなら分岐したほうがいいのかね
プログラミングのお題スレ(数学)
みたいに
あんまり人がいないなら別にこのスレでも良いと思うがな(俺は) >>423
なるほど、禁止するなら
プログラミングのお題スレ(数学禁止 )
こうだな
こっちでもいいな >>420と同じようなのをやった気がするなとログ探したらやっぱりやってた…3年以上前やw
プログラミングのお題スレ Part6(c)2ch.net
https://peace.5ch.net/test/read.cgi/tech/1418278634/148,703 >>426
数学要素があること自体はいいんだけど、数学的に解いたら後は手計算の代わりに入出力と演算をプログラムにやらせるだけっていうお題は興醒めというか面白味がないね。 でもO(1)かどうか確かめられない人がほとんどなんでしょう お題スレ Part9 では、
tan() の値が有理数になる場合についての
数学的証明が活発に議論されていたな 数学者がプログラミングの領域にしゃしゃり出てくんなや
プログラミングはExcel方眼紙を操る文系の神聖不可侵領域なんや ディープラーニングとかAIとかモロ数学(知識)では? プログラミングも一応数学の一部ではあるけどな。計算手順だし。
しかしプログラミングのお題として数学問題そのまま出されると数学的に頭で考えるだけで解けてしまってあまり意味がないだろう。
コンピュータに計算をさせるという要素がなくなりプログラミングのお題にならない。それは数学のお題だ。 >>430 の過去スレの有理数・無理数の問題が数学問題で、
このスレの>>420 は、プログラミング問題だな。 >>420
「同値」の意味くらいは知っておいた方が良いかと >>428
プログラムってのはそういうもんだろ
人間が考えたアルゴリズムを言語という形にするだけ 数学ってアルゴリズム考える所までで終わりじゃない?算数や物理じゃないから式に値を入れて計算して答えを出す所までやる必要がなくて、式そのものを求めて終わり。 このスレで数学って言ってるのは
式だけじゃなくアルゴリズムまで含んでる気がするけど
アルゴリズムは数学じゃないっていうなら
>>420なんか数学的要素ゼロになっちゃう プログラミング的な試行錯誤のあるお題を考えるのって難しくない?
まぁ俺には数学的なお題を考えるのも難しいが あらら、やっぱ>>420はもう出てたか
よくある設定だし既出かもなーとは思ったが >>439
まあ、式を複雑にしたのがアルゴリズムみたいなものかな。
で、コンピュータを使う理由は普通はプログラムを作るためではなくて、実際にプログラムを動かして計算させて結果を得るためだ。
正解となるプログラムを作った段階で終わりにはしない。 式とアルゴリズムは別物
計算アルゴリズムが存在しない式もある やっぱり不気味だよ
例えば>>275なんて最終盤面がU・D・L・R(上下左右)とUR・UL・DR・DL(左上・右上・左下・右下)の8つしか無いだろ
2回計算して終わりじゃん 2回かどうかは知らんが、最後に2パターンのうちの一つを作って回転もしくは反転させるだけだわな
入力ごとに馬鹿正直に駒を動かすようなプログラムを組む奴は壊滅的にセンスが欠けている お題:
以下のように操作を繰り返して単一リストになったらその要素を返す
[1,2,3,4,5,6,7,8,9]
-> [5,1,13,2,21,3,29,4]
-> [16,16,41,1,66,38,91]
-> [8,8,124,69,33,19]
(中略)
-> [4,216]
-> [2]
テスト例:
[1,2,3,4,5,6,7,8,9] -> 2
[9,8,7,6,5,4,3,2,1] -> 2496
[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6] -> ? >>455
要素が1個になるまで繰り返す
奇数の場合3で掛けて右の数値を足す
配列の右端を切り捨てる
とか、どこ情報なの?
こんなの読み取らなきゃいけないのなんて「プログラミングのお題」ではない
こんな糞問題出すなや >>452 誰でも簡単に出来るお題じゃあつまらんから
数学だったりパズルだったりの要素があってもいいかと なぜ朝鮮人はプログラムを書かないのか
それは書かないからではなくて「書けない」からである >>450
題意はわかってるけど頭の中でコマを動かせないんだと思うぞ >>488
例えばこんな風に動くとかわかる?
よく考えてみて
元のボード
abcdefghi.
12345678..
..........
'DRUL' 適用
1abcdefgh.
2345678i..
..........
もう一度'DRUL' 適用
21abcdefg.
345678ih..
..........
さらに'DRUL' 適用
321abcdef.
45678ihg..
.......... ああ>>446, >>448は勝手に駒の区別をしないことにしたうえで難癖付けてたのか
プログラミング以前に日本語のセンスが「壊滅的に欠けている」なw 日本語の問題なんだろうなとは俺も思った。それにしてもちょっとでもコーディングしてみれば勘違いに気づきそうなものだが…
コーディングしない系プログラマなのか ×コーディングしない系プログラマ
◎コーディングはできない、プログラマでもない、人にいちゃもんつけるのが得意なだけの嫌われ者 >>465
俺はIQ高いから頭ん中でシミュレーションしてみたんだわ
ただ、駒が全部真っ黒で見分けが付かなかった
すまんな このスレもう4年以上経つのか
時の流れって怖すぎだよな >>464
それってそんなにコマ沢山使わなくてもわかるよね。
3つのコマを2*2の4枠の中に入れれば傾けるだけでくるくる回せるから。 >>471
>>446で本人が言っている8種
>>448で反転だの言ってるからその倍にして16種
結果の盤面がそれ以下のバリエーションだと
「やっぱり8種類以下しかないじゃないか!」とかになるだけだろ もちろんもっと少ないコマでも結果が16種より多くなる盤面はあるけど、
幾らでも多くなるよというのをイメージしやすいように大きめにした >>358
勉強をかねてこれやってるが、ある程度、できたところでアップしてみる。
考えてる方針が速いとはおもうが・・・ >>378 HTML5 + Web Audio API
(1) を音声出力
https://ideone.com/9aOhLO お題
スペース区切りで入力された文字列をすべて含むリング状の文字列を出力し、
その後に、各入力文字列に対応するインデックスと長さを出力せよ
出力文字列の構成・格納順に関しては特に制約は設けない
インデックスと長さは出力文字列の先頭からの最短マッチで求める
[制約] (なくしてもいい)
文字列の構成文字は0と1の二種類とする
入力の各文字列長は最大9文字とする
入力要素数は最大255個とする
[入力例1]
0 1 01 10 111 1001
[出力例1]
01110
(0,1) (1,1) (0,2) (3,2) (1,3) (3,4)
[入力例2]
01 1000 1010 100 0 0010 110 0000 00 0111 101 0100 11 10 111 0110 1101 010 000 1 001 0001 011 1001 1011 1100
[出力例2]
010100001101110
(0,2) (3,4) (1,4) (3,3) (0,1) (14,4) (8,3) (4,4) (4,2) (10,4) (1,3) (2,4) (8,2) (1,2) (11,3) (7,4) (8,4) (0,3) (4,3) (1,1) (6,3) (5,4) (7,3) (13,4) (9,4) (12,4)
関連 >>378 >>419 >>474
じゃあ競争しよう
私はこれからスタートであまり時間もないので
ちょっと時間がかかるかも知れないけど >>477
入力文字列を単純につなげば解の1個だが...
求める文字リングが短いほど良い解っていう条件? >>479
そんな感じです
ほどほどに圧縮できてれば必ずしも最短でなくても >>478 です
とりあえずこれだけ出来ました
4770でシングルスレッドのC++で15分くらい
半径を倍にすると16倍くらいは時間がかかりそうなので
マルチスレッド&アセンブラ&AVXでガシガシに最適化したくらいじゃ
大して検索範囲は増えなそう
何かアイデアがないか考え中
----
3 : r=1.178511
4 : r=0.707107
5 : r=5.892557
6 : r=2.500000
7 : r=23.890677
8 : r=1.581139
9 : r=15.320647
10 : r=12.500000
11 : r=57.536370
12 : r=3.535534
13 : r=111.621856
14 : r=62.500000
15 : r=76.603235
16 : r=5.700877
18 : r=32.500000
20 : r=17.677670
24 : r=12.747549
28 : r=88.388348
32 : r=23.505319
36 : r=45.961941
40 : r=63.737744
48 : r=52.559490
64 : r=117.526593 ピタゴラス素数(4n+1型の素数、5、13など)は2乗和で表わせて。
逆に、2乗和(X^2+Y^2)は、2とピタゴラス素数の積の表わせる、もしくはこの問題を考える上でそれだけに限定していいとおもってる。
2^i * 5^j * 13^k * ・・・・をピタゴラス合成数と名付けると。
X^2 + Y^2 = ピタゴラス合成数、の解とその個数は比較的カンタンに求まる。
それを利用して、拡大(縮小)と並行させたやつで、最小半径を与えるのは全て表せるはず。
具体的には、上の解が求まっていれば、
(mx + a)^2 + (my +b)^2 = ピタゴラス合成数、の解と個数もそれなりの低コストでもとまる。
mの剰余を考えれば、解があるaとbの範囲も限定できる。 ノーヒント、全て自力で求めようと思ってたんだけど
だから競争って
まあいいや
使えそうなら使わせていただきます ピタゴラス素数は2乗和であらわせて。
(a^2 + b^2) (x^2 + y^2) = (ax + by)^2 + (bx - ay)^2 が常に成立するので、
ピタゴラス素数と 2 = 1^2 + 1^2 の積で、新たな2乗和の式が作り出せる。
この式から、解とその個数も求まるはず。
しかし、これがわかっても最小値を求めるのは簡単ではないとおもう。かなりの計算量がいるはず。 z = x + yiという複素数でいうと、このノルムは| z = x + yiという複素数でいうと、ノルムは|z|^2 = x^2 + y^2 であって
|z||w| = |zw|を満たすので、
>>484の式は、新たな複素数 zwを作り出すことと一緒。 お題
ケブンリッジジェネレータ
知らない人のために解説すると、人間の認識力の問題で単語の最初と最後が正しいと途中の文字順序が違っていても正しい単語と見間違えるというのがある。
例えば「よこうそ」は「ようこそ」と見間違える。「およはう」は「おはよう」と見間違える。(これは違うと分かっていても見えてしまうという、空耳アワーの歌みたいでもある)。
以前2chでこのことについてケブンリッジで発見されたというような内容の文章がコピペされて広まり一時期有名になりそれ用の変換をするケブンリッジジェネレータのページ(JavaScriptで作られてたと思う)が作られたりもしていた。
今はもうないようだが今回のお題はこれである。つまり、入力された単語の最初と最後はそのままで途中の文字順序をランダムに入れ替えた結果を出力する。
日本語の文章は普通は単語と単語の間にスペースがないが、これについては処理を簡単にするためにスペースありで入力された文章しか正常に処理しないということにして良い。 >>487 Ruby
str = <<~EOT
Alice was beginning to get very tired of sitting by her sister on the bank,
and of having nothing to do: once or twice she had peeped into the book
her sister was reading, but it had no pictures or conversations in it,
'and what is the use of a book,' thought Alice 'without pictures or
conversations?'
EOT
puts str.gsub(/(?<=\b\w)\w*(?=\w\b)/){|m| m.chars.shuffle.join}
#=>
Aclie was bngneniig to get very terid of sntitig by her seistr on the bnak,
and of hnvaig nnthoig to do: ocne or twcie she had ppeeed into the book
her sitser was rniadeg, but it had no piteucrs or cinsoentravos in it,
'and waht is the use of a book,' tohught Aclie 'wtihuot pricetus or
coenrovanstis?' >>477
これってその条件内なら普通に最適解(圧縮度)出せる方法とか存在する? >>487 Squeak/Pharo Smalltalk
| input nonLetters |
input := 'Alice was beginning to get very tired of sitting by her sister on the bank,
and of having nothing to do: once or twice she had peeped into the book
her sister was reading, but it had no pictures or conversations in it,
''and what is the use of a book,'' thought Alice ''without pictures or
conversations?'''.
nonLetters := input reject: #isLetter.
(input findTokens: nonLetters keep: nonLetters) inject: '' into: [:acc :token |
(token first isLetter and: [token size > 1])
ifTrue: [acc, (token first: 1), token allButFirst allButLast shuffled, (token last: 1)]
ifFalse: [acc, token]
]
"=> Ailce was beingnnig to get vrey tierd of sttinig by her seitsr on the bank,
and of hvanig nohintg to do: once or twice she had peeepd into the book
her seitsr was riaendg, but it had no piercuts or coitnevnarsos in it,
'and what is the use of a book,' thuoght Alice 'wtiohut ptriecus or
ctnaseinroovs?' " >>482
やってみたけど、
馬鹿正直に検索するのと大して変わらんね
半径1000以下を全て検索するのは厳しそう
円周を検索するする昔ながらのアルゴリズムは優秀だ >>487 Squeak/Pharo Smalltalk 日本語文章処理例
| input nonLetters |
input := '以前2ch で このこと に ついて ケブンリッジ で はっけん された と いうような ないよう の ぶんしょう が コピペ されて ひろまり
いちじき ゆうめい になり それよう の へんかん を する ケブンリッジ ジェネレータ の ページ(Java Script で つくられ てたと 思う)が つくられ たりも していた。
今 は もうない ようだが こんかい の お題 は これ である。つまり、にゅうりょく された 単語 の さいしょ と 最後 は そのまま で とちゅう の もじじゅんじょ を ランダム に いれかえ た 結果 を しゅつりょく する。
にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に するため に スペース あり で にゅうりょく された ぶんしょう しか せいじょう に 処理 しない ということ に してよい。'.
nonLetters := input reject: #isLetter.
(input findTokens: nonLetters keep: nonLetters) inject: '' into: [:acc :token |
(token first isLetter and: [token size > 1])
ifTrue: [acc, (token first: 1), token allButFirst allButLast shuffled, (token last: 1)]
ifFalse: [acc, token]
]
"=> 以前2ch で このこと に ついて ケブリンッジ で はっけん された と いうような なよいう の ぶんょしう が コピペ されて ひろまり
いちじき ゆうめい になり そよれう の へかんん を する ケンブッリジ ジレェーネタ の ページ(Jvaa Spcirt で つくられ てたと 思う)が つくられ たりも しいてた。
今 は もうない ようだが こんかい の お題 は これ である。つまり、にりゅうょく された 単語 の さしいょ と 最後 は そのまま で とちゅう の もゅんじじじょ を ラダンム に いかれえ た 結果 を しょゅつりく する。
にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に すたるめ に スーペス あり で にゅうりょく された ぶしんょう しか せょじいう に 処理 しない といこうと に してよい。" >>495
ランダムに入れ替えるのはいいけど、元の単語と同じ並びは排除しないと期待外れの出力になるね 完全にランダムなんだから、結果が同じ並びでもそのまま出力するのが筋だろ
変更するなら日本語の文章の方だ >>487 Squeak/Pharo Smalltalk 同じ並びは排除
| input nonLetters |
input := '以前2ch で このこと に ついて ケブンリッジ で はっけん された と いうような ないよう の ぶんしょう が コピペ されて ひろまり
いちじき ゆうめい になり それよう の へんかん を する ケブンリッジ ジェネレータ の ページ(Java Script で つくられ てたと 思う)が つくられ たりも していた。
今 は もうない ようだが こんかい の お題 は これ である。つまり、にゅうりょく された 単語 の さいしょ と 最後 は そのまま で とちゅう の もじじゅんじょ を ランダム に いれかえ た 結果 を しゅつりょく する。
にほんご の ぶんしょう は 普通 は 単語 と 単語 の 間 に スペース が ないが、これ に ついては 処理 を かんたん に するため に スペース あり で にゅうりょく された ぶんしょう'.
nonLetters := input reject: #isLetter.
(input findTokens: nonLetters keep: nonLetters)
inject: ''
into: [:acc :token |
| middle |
(token first isLetter and: [token size > 3
and: [(middle := token copyFrom: 2 to: token size - 1) asSet size > 1]])
ifTrue: [
| shuffled |
[(shuffled := middle shuffled) = middle] whileTrue.
acc, (token first: 1), shuffled, (token last: 1)]
ifFalse: [acc, token]]
"=> 以前2ch で ここのと に ついて ケンブッリジ で はけっん された と いううよな なよいう の ぶしょんう が コピペ されて ひまろり
いじちき ゆめうい になり そよれう の へかんん を する ケリンッブジ ジネレェータ の ページ(Jvaa Srcpit で つらくれ てたと 思う)が つらくれ たりも しいてた。
今 は もなうい よだうが こかんい の お題 は これ である。つまり、にりょうゅく された 単語 の さしいょ と 最後 は そまのま で とゅちう の もじじんゅじょ を ラダンム に いかれえ た 結果 を しょつゅりく する。
にんほご の ぶしんょう は 普通 は 単語 と 単語 の 間 に スーペス が ないが、これ に つていは 処理 を かたんん に すたるめ に スーペス あり で にうりょゅく された ぶょんしう" 単語の最初と最後が正しいと途中の文字順序が違っていても正しい単語と見間違える
というのは無いこともないが、やっぱりおかしな単語はおかしく見えるな >>487
Kotlin
https://paiza.io/projects/vW2LiM_sGEYAb_l7QfaA_g
paiza.io の Kotlin はちょっとバージョンが古いようで shuffle() がなかったので自作した。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
AI2XF 僕の 知合いりの 知合りいが できた パコソン 一台で お持れちにな金る やり方
役立につ かまれもしせん
グルグーで 検るす索と いかいも 『 ネットぐ方稼で法 モヌレアフニノ 』
AXI2F 荒らし業者の連投規制回避の小さな変更
さっさとアク禁になれ 2個目はどう考えても業者じゃなくてスレ住人だろ…
業者はアク禁になってほしいのは同意 >>506
お前のレスがあるまでケブンリッジジェネレータなのに気付かなかったわw 人間の認識力はそんなもんなんだろうな。ちょっと似てると同じと判断しまう。そうやって脳は省力化してエネルギーあまり使わないようにしてるのかも知れない。脳を動かすには糖分沢山必要だからな。 逆に言えばいちいち全部の文字を正確に認識してたらちょっと誤字脱字や書き損じがあっただけで意味がわからなってしまうぞ botの書き込みなんていちいち推敲モードで読まないからな >>518
あ、ホントだ、恥ずかしいww
校正というべきだったか あ、ごめん。テキストファイルじゃなくて標準入力からでもいい。
何処から入力するかはたいした問題ではない。 http://www.din.or.jp/~ohzaki/mail_regex.htm
RFC通りのメールアドレス判定なんて不毛だってはっきりわかんだね 昔仕事で MUA 作った時に >>526 にある
folding white space をぶち込んでくる送信元がいて苦労した記憶が… >>526
ここはお題スレだから不毛で良いんだよ。パズルを解くようなもんなんだから。 計算式まで示されちゃってるから出力形式に凝らないと厳しいかな・・・ お題:
ある数値nが与えられた時に、次の条件を満たす2つの数値a,bを求め、表示するプログラムを作成しなさい。
●aとbの最小公倍数がnとなる
●a<bかつaとbの差(b-a)が最小となる
例:n= 360→a= 36,b= 40
n=1000→a=125,b=200
例が間違ってたらゴメン >>533
n=1000だとa=200,b=250? 数学板じゃなくてもさすがに最小公倍数くらいは
このスレならみんな知ってると思ってた >>541
公倍数は最小公倍数の倍数
公約数は最大公約数の約数
…当たり前のように思えて実際の証明は結構イメージしにくく、一回読んだだけではよくわからないのでした… お題:標準入力からhtmlが一行ずつ与えられるのでh1,h2などのhタグを階層化して出力しなさい。タグ内のテキストも一緒に出力し、タグ内にimgが含まれていたらそのaltを出力しなさい。
出力例:
h1 5ちゃんねるにようこそ
....h2 クソスレ乙
........h3 逝ってよし
....h2 オマエモナー 任意の文字列を含む有効なビットコインのアドレスを生成するプログラムを作成せよ。有効な形式のアドレスでなければブロックチェーンエクスプローラで検索しても認識されない。ビットコインアドレスの形式については下記サイトを参照。
https://qiita.com/pokochi/items/4d536a4a24067505abea
例:下記サイトの二番目にあるようなアドレス、
https://bitflyer.com/ja-jp/glossary/address >>533
C++(使ってるのはほとんどCですが)
https://ideone.com/S4H5Mo
自分の考えてたアルゴリズムをCで記述してみました。
模範解答、とはとても言えない代物です。もっと改良の余地がありますし、バグも取りきれてないかもしれません。
それと>533出題時に考えてたアルゴリズム(手計算でやってましたが)を↓に記述してみました。
こちらは明確に誤った答が出されてしまいます。参考程度に orz
https://ideone.com/HdfYPe
↓ お題:三捨四入せよ
負の丸め方向はどちらでも良い
https://ideone.com/Z6fTGh やれるものならやってみろ。
などと挑発してみるとアホが大漁に釣れるかも知れない。 問題は釣れるのがアホなのでものすごく頑張った揚げ句たいしたものができない率が非常に高いことにある。 これでこんなこともできる
https://chainflyer.b;itflyer.jp/Address/1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC >>543
io !(?<_><.?>)(.)\k<_>! <- '\1' >>561>>562
それなんてエロゲ、じゃない、なんて言語? 情報オリンピックの問題って組合せ最適化ばかりなのかなぁ?
ttps://www.ioi-jp.org/joi/problem_archive-light.html 鈴木貫太郎
灘中 中学入試 整数問題
https://youtu.be/okKan0C_--E
問1
4つの異なる数字、1, 3, 9, x から、
異なる数字を取り出して並べる、3桁の整数は24個あり、それらの平均値は555 である時、x は何の数字か?
問2
5桁の36の倍数で、2, 3, 5 のどれもが、
いずれかの桁に、1回以上現れる整数のうち、最小のものを求めよ
答え、問1 : 7、問2 : 13,572 灘中の問題は、以下の性質を使うものが多い
2 の倍数は、下1桁が偶数
4 の倍数は、下2桁が4の倍数
3 の倍数は、各桁の数字を足したものが、3の倍数
9 の倍数は、各桁の数字を足したものが、9の倍数
だから数字を因数分解して、これらに該当するかどうかで、問題を判別できる >>569
問1 を、Ruby で作った。
問2 は、難しくて作れない
nums_3 = [1, 3, 9]
nums_4 = nums_3 + [0]
(0..9).each do |num|
next if nums_3.include? num # 含まれていれば
nums_4[-1] = num
sum = 0
nums_4.permutation(3) { |a, b, c| sum += (a*100 + b*10 + c) }
puts num if sum == 24 * 555 #=> 7
end じゃあ問2を酷いコードで
>>569 Java
java.util.stream.IntStream.range(10000, 100000).filter(i -> i % 36 == 0).mapToObj(Integer::toString).filter(s -> s.matches("(?=.*2)(?=.*3)(?=.*5).*")).findFirst().ifPresent(System.out::println); コンピュータを使ってブルートフォースで答えを探す方法はわかってもコンピュータを使わずに数学的に解く方法が思い浮かばない。
しかしそれを小学生が解いて入学するという現実。orz >>569 Squeak/Pharo Smalltalk
"問1"
((0 to: 9) copyWithoutAll: #(1 3 9)) detect: [:n |
| set |
set := Set new.
'139', n asString combinations: 3 atATimeDo: [:comb |
comb permutationsDo: [:perm |
perm first ~= $0 ifTrue: [set add: (perm as: String) asInteger]
]
].
set size = 24 and: [set average = 555]
] "=> 7 "
"問2"
((10000 roundTo: 36) to: 99999 by: 36) detect: [:n | n asString includesAllOf: '235'] "=> 13572 " このスレprologニキっていないの?
手続き型以外の解法見たい
あとJニキ最近見なくて寂しい >>569
問1
4種の数字から作られる24個の数字の平均が555
→合計が1110になる12組の数字にまとめられる→どの桁も合計が10になる2組の数字の組合せで構成される
→1,3,9,xのうち1と9を除外した3と「足して10になる数」→x=7
問2
36の倍数→4の倍数かつ9の倍数
→5桁の数字は9の倍数なので各桁の数字の合計が9の倍数になる
→5桁の数字には「2,3,5」が少なくとも1つ以上含まれているので、この時点で各桁の数字の合計は10より多くなる。
→各桁の数字の合計は9ではないので、18とする。残り2桁の数字の合計は8。この中で一番小さな数が作れるのは1,7。
→「1,2,3,5,7」の組み合わせの内、下2桁が4の倍数で最も小さい数は13572となる。
かなり乱暴に書くとこんな感じで解けば良いのかな?
しかし、これをプログラムで表現しようとするのはかなり骨っぽい(数を1桁ずつ分解するのに余計な手間がかかりそう)。
それよりも総当たりで解いた方がコンピュータ的には手っ取り早い気がしますね。 >>578
最初の「合計が1110になる12組の数字にまとめられる」が何故なのかわからん。 >>579
作成される数字を順列とみなした時に
「ABCD ABDC ACBD ACDB ...」を逆順にした
「DCBA DCAB DBCA DBAC ...」という列を組み合わせたら…なんて考えてたんですが、後で見ると意味不明でした。申し訳ない。
問1について、それよりも単純な方法がありました。
xがどの桁で使用されてるかで場合分けし、それぞれを合計する
x不使用:139 193 319 391 913 931 :2886
xが1の桁:13x 19x 31x 39x 91x 93x :2860 + 6x
xが10の桁:1x3 1x9 3x1 3x9 9x1 9x3 :2626 + 60x
xが100の桁:x13 x19 x31 x39 x91 x93 :286 + 600x
上記をすべて合計:8658 + 666x
24個の数字の平均が555だから合計は 555*24=13320
8658+666x=13320
666x=4662 x=7
若干手続きはコンピュータ向けと言えなくもないですが、やはりプログラミングするには手間ですね。 問1
24=4! なので4個の数字はすべて異なる
24通りを並べると各桁1, 3, 9, x が同じ回数出現する
これらの平均が555なので
1, 3, 9, x の平均が5とわかる
1, 9の平均が5なので3, xの平均が5となる7が答え
問2
最小を求めるので10000の位が1になる数を考える
(考えて、なければ他を考える)
各桁の合計が9の倍数から1, 2, 3, 5, 7とわかる
この中で偶数は2だけなのでこれが1の位
1の位が4で割りきれないので10の位は奇数であれば4の倍数
つまり10の位が3, 5, 7のどれでも36の倍数になる
3, 5, 7を小さい順にならべて13572が答え 問1
x = 111 * (24 * 5 - 6 * (1 + 3 + 9) ) / (6 * 111)
= 7
問2
5つの数を A, B, 2, 3, 5 とすると
A + B + (2 + 3 + 5) = 0 mod 9 <=> A + B + 1 = 0 mod 9
かつ末尾2桁が4の倍数になる
従って一番左の桁は1で確定し {A, B} = {1, 7}も確定
2が末尾に来ることは確定していてかつそのとき任意の並びで4の倍数になるため13572が題意を満たす数
以上が東大理学部物理学科卒の考え方
両方合わせて40秒くらい やっぱ紙と鉛筆で解く問題だよね。
最初から解析的に解けない問題出して欲しい。 >>580
小学生が解く場合に途中で 8658+666x=13320 のような数学的表現で考えるのはありなのか?
回答者個人にそれができるかできないかの問題ではなく小学校が教えている範囲にそれが含まれるのかの問題ね。
もし含まれていないとしたら他の方法で解く事が可能という事になる。 >>583
「従って一番左の桁は1で確定し」
がわかりません
>>584
だよね 36の倍数は、4, 9 の倍数で、それらの特徴を利用できるかどうかだけ
捨て問題だろ。
考えたり解いたりすると、2問で10分使うから、落ちるだけ。
即座に無視しないといけない。
新パターンの問題は、時間を使わせるから無視しろっていう、受験テクニック
灘中高は、100%塾の生徒しか受からない。
灘用の受験技術だから、その授業を受けていないと受からない
文系が東大工学部に入る、受験技術のマンガ「ドラゴン桜」と同じ。
賢い者ではなく、塾代という貧富の格差で決まる
大型資格もそう。
TAC, 大原などに行ってないと受からない
貧富の格差、貧富の遺伝 >>586
ものすごくかみ砕いて言うと
A + B + 1 = 0 mod 9 (A, B ∈ {0, 1, ..., 9}) を満たす A, B に関して
任意のAに対して対応するBが少なくとも1つは存在することは自明なので
A = 1 として 1XX32 という数を考えればこの数は36の倍数でありかつ 2, 3, 5 を各桁に含む
(XXには A = 1 に対応する B の値の内の1つと 5 が入る)
解は10000以上1XX32以下の整数なので左端の桁は1であると確定する >>569
Rubyで問1。
def odai_11_569_1(a_ary, a_avg)
(a_ary.size + 1) * (a_avg / 111) - a_ary.inject(:+)
end
w_ary = [1, 3, 9]
w_avg = 555
p odai_11_569_1(w_ary, w_avg)
結果:7 >>569
Rubyで問2。
def odai_11_569_2(a_ary, a_base, a_col)
a_ary.map!(&:to_s)
w = 10**(a_col - 1)
w = w / a_base - (w % a_base > 0 ? 0 : 1)
w *= a_base
loop do
w += a_base
next if (a_ary - w.to_s.split('')) != []
return w
end
end
a_ary = [2, 3, 5]
a_base = 36
a_col = 5
p odai_11_569_2(a_ary, a_base, a_col)
# 結果:13572 rubyならさくっとワンライナーで
p (10000-10000%-36).step(10**5,36).find{|i|(i.digits&[2,3,5])[2]}
#=> 13572 >>569
Rubyで、問2
str_ary = %w(2 3 5)
(10_000...100_000).select do |num|
next unless num % 36 == 0
# 2, 3, 5 をすべて含む
if str_ary.all? { |s| num.to_s.include? s }
puts num #=> 13,572
break
end
end そろそろ新しいお題を。
既出なら申し訳ない。
お題:
再帰・スタックを使用しないマージソートを実装し、整数型のデータn個の配列をソートするプログラムを作成しなさい。
データの個数は不定とし、特定の条件を満たす個数の配列にのみ有効なプログラムは不可とします。
データの内容はランダムとします。乱数の生成法はお任せします。
出来ればソート完了後に配列(の一部)を表示する、正しくソート出来たかチェックする処理を追加してみて下さい。
追加お題:
上記のマージソート処理の際、作業領域を元のデータの半分の量しか確保せずにソートを実行するプログラムを作成しなさい。 1から100までの数字から4つを取り出したそれぞれに番号を振る速い方法ありますか?
メモリもあまり使わずに
1 2 3 4 -> 1
1 2 3 5 -> 2
1 2 3 6 -> 3
96 97 98 99 -> 3921221
96 97 98 100 -> 3921222
96 97 99 100 -> 3921223
96 98 99 100 -> 3921224
97 98 99 100 -> 3921225 スタック不可だとスタック操作が隠蔽されてる高級言語はほぼ使用出来ない
無理やりCやC++でやるとしてもローカル変数や関数呼び出しを殆ど封印しなければならない
これを良い問題と見るか悪い問題と見るかは分からないが俺はやる気が出ない >>599
組み合わせか
北大の湊 真一のZDD とか。
本も出てる お題:Hello, World!を出力せよ。ただし出力系の関数を使ってはならない。 >>601
すみません。>598の「スタック」はデータ構造としての利用のみを想定していて、他関数呼び出しの禁止などは意図してませんでした。
問題文が不明瞭ですみません。
>>600
ご期待に添えず申し訳ない。他のお題を思いついたら、また出題させていただきます。 お題: マップの広さと部屋の個数及び部屋間の繋がりが与えられた時、ダンジョンを作成せよ
・ダンジョンは部屋と通路からなる
・部屋は少なくとも3x4の大きさを持つ
・通路の幅は1
・部屋同士は接しない
・マップ外に部屋や通路は無い
一応、想定としては標準出力に'#'と'.'で表示を考えてる
生成方法は自由だからゲーム的面白さのあるマップ作っても良い 解釈がいろいろあり過ぎて
コードに対して仕様の説明文が必要になるぞ >>604
>>598 の問題はおもしろいし、お題として成立していると思います
・再帰を使用しないマージソートを実装
・作業領域を元のデータの半分の量しか確保せずにソートを実行する
で考えているところです >>603
出力せよといいつつ、出力系は使うなとは、まるで一休さんのような まて、関数は、とある
つまりはシステムコールを直につかうんだ! >>603
じゃあC言語で。
#include <stdio.h>
int main()
{] >>603
#include <stdio.h>
int main()
{
system("echo Hello, World!");
return 0;
} >>609
システムコールの内部は関数
だったりして >>609
クラスもありかも知れない。クラスの中にはメソッドがある。メソッドはメソッドであって関数ではない。
あるいは procedure でも良いのかも知れない。procedure は手続きであって関数ではない。
サブルーチンもありかも知れない。
昔のマイコン用のBASICでVRAMに直接 POKE で値を書き込んだりするのもありかも知れない。
もはや一休さん並のトンチであり言葉遊びである。 関数を使わないとなると
int 21
とかじゃないの? >>603
J
'Hello, World!'
REPL な処理系なら簡単 >>599
とりあえず出来たけどもっと簡単に変換する方法があるような気がする
https://ideone.com/EnmoNU cat
Hello, World!
もはやプログラムですらない。 >>599
100この中から4個を選ぶことだから完全最小ハッシュ関数が使える >>603
紙にペンでHello, World! と書く。 >>603
紙にペンでHello, World! と書く。 「何々禁止で何々を書け」って類いの問題で面白くなることはあんましないな >>621
>>626
考え方分かりました
ありがとうございました 質問一回許すとなし崩しに宿題だらけになるぞ。警告はした。 これ宿題じゃないですよ
ここに書く前にコードも書いてたしもっと効率いい方法ここの人達なら知ってそうだと思ったから >>599
1 2 3 4 -> 001002003004
97 98 99 100 -> 097098099100 >>619のもっと効率悪い奴だよ
元は100C4じゃなくて28C4だったけど
int cc[4][32][32];
こんな二次元の配列使ってた https://ideone.com/VFv36f
2年前に書いたやつで今は何やってるかよく分からないけど
>>619のは昨日元のこのコードを見ないで30分くらい考えて作った それの何が不満?
何をどう改善したいのかわからないと
テーブル作成の速度?
テーブル検索の速度?
コードサイズ?
バイナリサイズ?
コードの分かりやすさや移植性? 605、出題しておいて何だがこれめっちゃ難しいな
マップの大きさの制約があると通路引くのが難しすぎる いちおう解けるのを自分で確認してから出してくれないと困る >>643
一般に、再帰を非再帰に書き下すのは難しいのです… お題
ポーランド記法による計算機を実装せよ
演算子は加算(+)と乗算(*)をサポートすること
* + 1 5 + 2 3
=> 30
* * * * 2 3 4 5 6
=> 720 >>645 Ruby 2.5.0
[
"* + 1 5 + 2 3",
"* * * * 2 3 4 5 6"
].each do |_exp|
exp = +-_exp
nil while exp.gsub!(/([^\d\s]+) +(\d+) +(\d+)/){$2.to_i.send($1, $3.to_i)}
puts '%s => %s' % [_exp, exp]
end
#=>
* + 1 5 + 2 3 => 30
* * * * 2 3 4 5 6 => 720 お題
N個の整数(a_1, a_2, ..., a_n, ..., a_N)と*+/()を使った数式の値が、ある整数aにもっとも近い数式とその値(実数)を出力せよ
引き算はなし
a_n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} >>606
>>605のは要はローグライクの部屋を作れってことだろ
出題者の説明不足
画像の1枚でも張れば見て分かる
ttps://cdn-ak.f.st-hatena.com/images/fotolife/g/gaou2/20170905/20170905111314.png これ見た目では普通だけどかなり横に長い部屋なんだよな >>654
今だと全角文字で作ればいいかな。絵文字もまじえて。 >>597 Java
https://ideone.com/VUgSXO
1行〜5行までしか答え出ないな
うちの環境で
9行を探索するのに4.6秒
10行を探索するのに61.6秒
2018行はあかんww いやさすがに数学板でやれや。
国際数学オリンピックて自分で言うてるやんけ 数学とか使わずに総当たりでやってるのに数学板に行けとな いやこれは総当たりでは計算量的に無理だろ
コードは書けるだろうけど
存在することを帰納法で証明するしかないから数学板の問題だ まーた数学コンプレックスが暴れてるのか
数オリに出るくらいの賢さがないから計算機の力も借りて解くっていう方向性は別にスレチじゃないだろ ここでレスリングの話しだして苦言を呈されると「まーたレスリングコンプレックスが暴れてるのか」
極端に言うとこういうこと。
レスリング板、数学板があるだろ。
わざわざここでオナニーしたいのは専門以外の板でマウント取りたいのかな?
そんなひねくれた根性だから現実世界でミジメな生活なんだよ。 早速暴れてて草
正攻法で数オリの問題を解く話を延々してたんならうざいけど
飽くまで計算機使って解いてみようぜって言ってる人にまでその理屈が当てはまるわけないだろ
それとも数学だけじゃなくて論理的思考もできないタイプか?それなら納得だわw 数学で解ける問題をわざわざコンピューターでムダな解き方するの??
突き詰めていくと数学で出した解法そのまま引き写すだけになるのが分かりきってるのに。 だからわざわざ「数オリに出るくらいの賢さがないから」って言ってるだろ日本語読めねえのかよ
そりゃ灘の入試レベルならその通りだろうけど数オリで正解率1割切ってたような問題なんだから計算機使ったアプローチしてみるのもプログラミングのお題としては面白いだろ
それともなんだ、円周率の計算だってペンと紙でできるんだから無駄だっていうのか?w
そんな極論言うレベルの頭だから数学もできないんだよw そういう無駄に一般化した話も結構だけど、
個別具体的な話として>>597は計算機を併用することに効果が無いから数学の問題だと言ってるんだよ。
2018を解けるほど効率化できるなら既に人力で解けているだろうからね。 それは総当たり以外にうまい方法が思い浮かばないから言えるだけでしょうよ。
あと素数判定アルゴリズムなんか考えればわかるけど、効率化できることと人力で解けることに相関はないぞ。
少なくともスレチではないと思うよ。 部外者だが
嫌なら回答しなきゃいいだけなのに
何文句言ってるの?
って感じ そんなことより野球のはなししようぜ!嫌なら無視すりゃいいだけ。 アプローチ以前に
>>597の問題って存在するの
それとも無いの 作るのは無理な気がするがよーわからん
一番大きい数値 1+2+…2018 = 2037171 は差の絶対値で作れないので最下段確定
一番大きい数値を出来るだけ上段に伝搬させるために小さい数値(1~2017)と組み合わせていっても最上段に残るのは 2018
→ 2019 以上と組み合わせると 2017 未満の数値がダブる
最下段で 2037171 と 1 を組み合わせた場合、 2037169 も最下段に設置する必要がある
2037169 は 1~2018 の大部分と組み合わせられないので上のほうまで伝搬できずにアウト その長々とした理屈は2018が7でも6でも同様のことが言えるよね
そして7や6には解がある >>673
適当に作ったプログラム(>>657)じゃ5までしか見つかっとらんのだけど、6や7にも解あるんか 5以下の場合は数字が足りなくなる前に最大値からの流れに合流出来てるんじゃね? >>674
>>657じゃなくてCで書いたけど6〜40までは解無し 数オリ経験者、東大数学科卒だけど
今度挑戦してみるか お題
非負整数nが与えられるので、以下に示すような六角形状の螺旋を描画せよ
https://ideone.com/MmH3N6 >>679
質問です。
n>99の場合はズレが生じてくると思いますが、その時はどうしますか?
それともn≦99で範囲を絞ってもよろしいんでしょうか?
まぁ、私が作れるかどうか分からないんですがorz 難しそうだが良いお題だな
こういうお題を考えられるようになりたい まずは数学から入るか
中心つき六角数 - Wikipedia
ttps://ja.wikipedia.org/wiki/%E4%B8%AD%E5%BF%83%E3%81%A4%E3%81%8D%E5%85%AD%E8%A7%92%E6%95%B0 >>680
nの大きさに合わせて-の数を決めれば、歪にならないと思うよ。 >>685
へ〜やっぱ n = 5 までしかないんだな
後でちゃんと読んどくわ 出題者は自分で書けるのを一度確認してから出題してほしいわ >>688 BF
+>+<-][+[->+[+>-<]<]<+[>+[.>]-]-] >>688
awk
Linux 用
awk '{printf "%.3f℃n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp
実行例
56.000℃ あれ?\n が抜けた。
これね。
awk '{printf "%.3f℃\n", $1 / 1000}' /sys/class/thermal/thermal_zone0/temp 鈴木貫太郎
灘中 中学入試問題シリーズ 整数問題
https://youtu.be/98U2qVDQltc
6桁の整数、5AB,C15 が999 の倍数である時、ABC を求めよ
答え
A=8, B=4, C=4 お題:与えられた正の整数nを2進数〜16進数に変換して表示する。
11進数以降の10以上を表す文字はABCDEFを使用。
(10=A, 11=B, 12=C, 13=D, 14=E, 15=F)
例:12進数の11 ---> B
出力例:
n=123456
base(2) ---> 11110001001000000
base(3) ---> 20021100110
base(4) ---> 132021000
base(5) ---> 12422311
base(6) ---> 2351320
base(7) ---> 1022634
base(8) ---> 361100
base(9) ---> 207313
base(10) ---> 123456
base(11) ---> 84833
base(12) ---> 5B540
base(13) ---> 44268
base(14) ---> 32DC4
base(15) ---> 268A6
base(16) ---> 1E240 >>696
500015 + <ABC00> = 0 mod 999
<=> 4151 + <ABC> = 0 mod 999
<=> 4151 + <ABC> = 999*5
<=> <ABC> = 844
>>699 Ruby
#!ruby -p
b, n = $_.scan(/\d+/).map &:to_i
puts n.to_s(b).upcase
#=>
12進数の11
B
2進数の123456
11110001001000000
3進数の123456
20021100110
16進数の123456
1E240 >>696
何も考えてないPerlのワンライナー
perl -e 'for(0..999){$n=sprintf"5%03d15",$_;if($n%999==0){print"$n\n"}}'
584415 >>699
Linux等で動くGNUのbcコマンド
プログラムをファイルに入れておいてbcの引数で指定し、変換させたい数値は標準入力から読ませる。
ibase = 10
n = read()
for (i = 2; i <= 16; i++) {
obase = 10
print "base(", i, ") --> "
obase = i
print n, "\n"
} >>700
既出でしたか 失礼しました
では追加でもう1つ
お題:
時間を表わす文字列(hh:mm:ss形式の8文字)の秒数を求める
最上位の時間だけは99時間を超えた場合拡張される
例:123時間45分6秒 ---> 123:45:06
出力例:
01:23:45 = 5025 sec
333:33:33 = 1200813 sec
出題者の回答例:C言語 https://ideone.com/pnrcQ6 >>706 Ruby ゴルフ気分で
#!ruby -palF:
$_='%d sec'%(0..2).map{|i|$F[~i].to_i*60**i}.sum
# input
01:23:45
333:33:33
# output
5025 sec
1200813 sec お題:10兆までの素数のリストを作ってみませんか?
https://tech.nikkeibp.co.jp/it/article/Watcher/20100519/348242/
条件:既存のライブラリ、モジュール、外部コマンド等を利用するのは不可
すべて自分で記述すること
int64_t, uint64_t の使用は許可する Ruby では百万までで、処理に数秒掛かって、78,498個の素数があった
class PrimeNumber # 素数
def initialize (to = 20)
@to = to
@prime_numbers = []
end
def add_table (n)
limit = Math.sqrt(n).ceil
@prime_numbers.each do |prime_num|
# 割り切れたら、素数ではない
return if n % prime_num == 0
# sqrt より大きいなら、確かめずとも素数である
break if limit < prime_num
end
@prime_numbers.push n # 割り切れない
end
def print
(2..@to).each do |n|
add_table n
end
puts @prime_numbers.length
end
end >>713
perl
一応これで理屈の上ではできるとは思うんだが、477577まで行ったところでアホらしくなって止めたw
#!/usr/bin/perl
use strict;
use warnings;
my @pn = (2);
my $n = 1;
print "$n: $pn[0]\n";
$n++;
LOOP:
for (my $i = 3; $i <= 10000000000000; $i += 2) {
for (@pn) {
next LOOP unless ($i % $_);
}
push(@pn, $i);
print "$n: $i\n";
$n++;
} >>713 Ruby
10兆なら改良されたAtkinの篩を使ってガシガシやるしかないだろう
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.192.4926&rep=rep1&type=pdf
sup = 10**7
primes = [2, 3]
5.step(sup, 6){|i|
2.times{
primes << i if primes.none?{|pr| break true if pr*pr > i; i % pr == 0}
i += 2
}
}
primes.pop if primes[-1] > sup
p primes.size #=> 664579 >>713
昔やった
アセンブラ & AVX & マルチスレッド
探してみる みつかりました
そんなに昔じゃなかった
2年半前
41兆くらいまで求めてます
マルチスレッドではありませんでした
処理内容はよく覚えていません
素数表作成
ビットパターン作成
ふるい
のようなコメントがあります
105単位でなにかやってます だんだん思い出してきました
6n+1, 6n+5 に対応するビット列を保持
小さな素数の倍数はマスクを作ってAVX命令でANDしていって
大きな素数の倍数はp(210n+48個の値) にしぼって
ビット命令でひたすらふるう感じ
キャッシュサイズを考えて小さなバッファでやってます お題:
ロト6で申込数字のいずれかが必ず5等以上に当選する
最小の申込数字の組み合わせを作ってください
ロト6は01〜43の数字から異なる数字6個を順番不問で選び
申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります >>721
・5等の当選条件を満たしている
・5等以上のいずれかの当選条件を満たしている
この2つは同値なの? >>723
1〜5等に該当するならば必ず当選番号と同じ数字が少なくとも3つ入っているということがはっきりしない限り解けないでしょ ごめん
申込数字6個のうち3個以上が本数字と一致すれば5等以上に当選となります
を
申込数字6個のうち3個以上が本数字と一致すれば5等に当選となります
と読み間違えてたわ >>727
>>722は>>721とは無関係だが
>>724は(>>721の解釈次第では)無関係ではない >>724は
3個以上一致 <===> 5等以上に当選
3個以上一致 ====> 5等以上に当選
のどちらかをたずねたのかと思った >>730
そもそもこっちが>>722と>>724で「申込数字6個のうち3個ちょうど本数字と一致すれば5等に当選」って誤解してたのが始まりなんだ
わけわかんないこと言ってごめんね >>706 Squeak Smalltalk
('01:23:45' subStrings: ':') reversed polynomialEval: 60 "=> 5025 "
('333:33:33' subStrings: ':') reversed polynomialEval: 60 "=> 1200813 "
Pharo Smalltalk
(('01:23:45' substrings: ':') collect: #asInteger) reversed polynomialEval: 60 "=> 5025 "
(('333:33:33' substrings: ':') collect: #asInteger) reversed polynomialEval: 60 "=> 1200813 " >>713 Squeak/Pharo Smalltalk で 100億まで
| count |
count := 0.
Integer primesUpTo: 1e10 do: [:prime | count := count + 1].
count '=> 455052511 '
組み込みだけど、書くとしても同じアルゴリズムで書くと思うので…
https://ideone.com/zKMZYx >>721 C++
https://ideone.com/gCsPec
コンビネーション使う方法と、確率DPの二通りでやってみた。
(ちなみに5個当り222本は 6本が2等で、216本が3等)
※確率、期待値系は苦手だ >>734
>>721って、
・抽選される6個の数字が43C6通りのどの組み合わせでも5等以上が当たるようにくじを買う。
・くじの購入数はできるだけ少なくなるようにする。
ってことじゃないのん? >>735
いいのかこんなんで?
cd /etc
grep localhost hosts >>735
訂正
お題:LANに繋がっているホストの一覧を出力しなさい >>741
Linux 等の UNIX 系OSで
ping -b ブロードキャストアドレス
とやると同じセグメントに繋がっているやつは ICMP ECHO を返して来て IP アドレスが分かるかも知れない。
但しファイヤーウォールの設定で返さないかも知れない。また他のセグメントにはパケット送らないのでわからない。 あ、ごめん。これは IPv4 限定の話かも知れない。 身長と体重がいくつか与えられるのでBMIを求めなさい
なお身長と体重は1以上1000未満の整数とする
出力精度は小数第三位を四捨五入
各言語で一番短くかけた人が勝ち
例 ruby
while gets
end
# input
150 50
160 55
180 120
# output ミスった。
単位は身長cm, 体重kg
例 ruby
while gets
h, w = $_.split.map &:to_i
puts '%.2f' % (1e4 * w / h**2)
end
# input
150 50
160 55
180 120
150 225
# output
22.22
21.48
37.04
100.00 >>744
Perl
https://paiza.io/projects/4DM4_8fx_EiOXO4D3aOV4A
普通ならダブルクォーテーション使いそうな箇所で qq() 使ってクォートしている理由は今Androidのタブレット使っててうまく入力出来なかったため。 鈴木貫太郎
灘中
https://youtu.be/BnS7vMsVV2s
6桁の整数、ABCDEF の一番上の位のAを、
一の位へ移動した数、BCDEFA が、元の数の3倍になるとき、
この条件を満たす、元の数をすべて(2つ)答えよ
ヒント。x = BCDEF とおいて考える
答え、142857, 285714 >>744
Ruby 43 bytes
#!ruby -pa
$_='%.2f'%eval('1e4/'+$F*'**2*')
>>750
3 * ABCDEF = BCDEFA ∧ A != 0
<=> 42857 * A = BCDEF ∧ A != 0
<=> 42857 * A = BCDEF ∧ A = 1, 2
<=> ABCDEF = 142857, 285714 お題:
1.BINGOカードを作る
2.BINGO抽選機を作る
ここで使われるビンゴカードは5x5のマス目に1から75までの数字が
ランダムに配置されており、数字が見つけやすいように左の列から
B列(1〜15), I列(16〜30), N列(31〜45), G列(46〜60), O列(61〜75)が
配置された一般的によく使われるタイプ。
5x5のマスの中央はFree(すでに開いた状態)。
出力例:https://ideone.com/R6eADP
(この形に従う必要はないです)
回答例(C言語):
カード作成 https://ideone.com/aJBJ9v
抽選機 https://ideone.com/NuIRYm >>750
Kotlin
https://paiza.io/projects/BFd9v2qeKaNcdssTQuj5Jw
これも力業だな。ただループして調べているだけ。
尚、最上位桁が0の場合も含めると0も該当する値になる。 お題:【構造のあるテキストの処理】各項目の内容をそれぞれソートして元のテキストに埋め込め。
====== 標準入力 ==========
* Fruit
apple
banana
orange
banana
* Animal
dog
cat
penguin
====== 標準出力 ==========
* Fruit
apple
banana
orange
* Animal
cat
dog
penguin
条件:ソートには外部コマンドを用いること。 ソートに外部コマンドを使うのは、テキストの処理を取り替える拡張を想定しています。
例えば sort -u コマンドを tr '[a-z]' '[A-Z]' に置き換えて
* Fruit
APPLE
のようにできるようにしたい。
UNIXプログラミング質問スレにて、
このような処理はシェルスクリプトには荷が重く Powershell や Ruby が向いている、みたいなことを伺いました。
ぜひ回答を参考にしたいです。 >>758 Ruby
ext_cmd = 'sort -u'
ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m)
str = ary.map.with_index do |s, i|
temp_fname = "temp#{i}"
File.write(temp_fname, s[/\n\K.*/m])
heading = s[/\A.*/]
execed = `#{ext_cmd} #{temp_fname}`
File.delete(temp_fname)
[heading, execed] * $/
end
puts str * $/ catを使うように修正
catのヒアドキュメントさえ使えれば一時ファイル作らなくて済むんだけど
ext_cmd = 'tr a-z A-Z'
ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m)
str = ary.map.with_index do |s, i|
temp_fname = "temp#{i}"
File.write(temp_fname, s[/\n\K.*/m])
heading = s[/\A.*/]
execed = `cat #{temp_fname}|#{ext_cmd}`
File.delete(temp_fname)
[heading, execed] * $/
end
puts str * $/ >>758 zsh
setopt rcquotes; sed -n '/^*/h; /^*/!{x;p;x;p;}' | paste - - \
| awk -F' ' -v OFS=' ' '$2 { print $1,$2 } ! $2 { printf "%c",0 }' \
| xargs -0 -n 1 -I@ -- zsh -c 'echo ''@'' | tee >(read -e | cut -f 1) | sed ''$d;'' | cut -f 2 | sort -u ;echo'
null区切りでチャンク分け。構造がもっと複雑になるとこの方針では対応できない。 単純に、別々のファイルに、分割すれば良いのでは?
* Fruit のファイル
* Animal のファイル
各ファイルを、sort, unique する 一旦、別々のファイルにしたなら、PowerShell で、
cat .\test.txt | sort | gu
gu は、Get-Unique のエイリアス。
漏れのPowerShell では、uniq のエイリアスは使えない >>767
Linuxのディストリビューションでは最初からインストールされてるのがよくあってある程度有名で、sh互換でshしか知らなくても書けるからではないかな。
それとWebの実行環境があるというのも理由かも。こういう所で公開するのには都合が良い。 >>769
そうなんですね!
みんなの回答見てると正規表現や少ないコードや難しい表現でコーディングできてて関心します‥
自分にはとても到達出来ない‥ >>758 zsh
setopt rcquotes; sed -E -e 's:^(\* .*):{ echo ''\1''; sort -u; echo } << *:' -e 's:^$:*:' | zsh
xargsの区切り文字の辛さからは開放されたが、echo ''\1'' がイマイチだ。
なるほど、構造のあるデータはむしろファイル階層として表現したほうが自然か… >>758 Vim
$ cat odai-pt11-758.input | vim -es '+:g /\%(^\*.*\n\)\@<=/,/[ \t\n]*\%(\n\*.*\|\%$\)/ !sort | tr a-z A-Z | nl' '+%p' '+:q!' /dev/stdin
* Fruit
1 APPLE
2 BANANA
3 BANANA
4 ORANGE
* Animal
1 CAT
2 DOG
3 PENGUIN
$ 64ビットWindows10 なら、WSL で、Ubuntu を入れると、
bash, vim, Python は最初から入っている
WindowsのExplorer では、BOMなしUTF-8 のファイルは検索できないから、
WSL でLinux側から、grep で検索している
シェルスクリプトの欠点は、パイプラインがテキスト渡しになる。
オブジェクトの型が無くなって、すべて文字列になる
一方、PowerShell ではオブジェクト渡しだから、オブジェクトの構造・型が維持できる
>>758-759
外部コマンドを切り替えるという抽象的な処理を、処理間にはさむのは難しい。
すべての処理の冒頭か最後で、一括でフィルターする方がバグらない >>773
なるほど…
Powershellでの完全な回答例を見せていただけませんか?
標準入力からファイルに落として出力に吐くまで。オブジェクト渡しの雰囲気を感じたいです。 Set-PSDebug -Strict # 変数宣言を強制する
$file = ( cat in.txt ) # 入力ファイル
$dat_basenames = @() # 拡張子なしのファイル名の配列
foreach ( $line in $file ) { # 各行
if( $line.Length -eq 0 ){ continue } # 空行は処理しない
if ( $line.Substring( 0, 1 ) -eq '*' ) { # 1文字目が、* なら
$fname = $line.Substring( 2 )
$dat_basenames += $fname # 追加
$fname += '.dat' # 拡張子つき
} else {
Add-Content $fname $line # 追記
}
}
foreach ( $dbname in $dat_basenames ) { # 各 .dat ファイル
$fname = $dbname + '.dat' # 拡張子つき
$str = "* ${dbname}`r`n"
$tmp = cat $fname | sort | gu # sort, unique
$str += ( $tmp -join "`r`n" ) # 改行区切り
echo $str
}
PowerShell で作った。
cd で、作業フォルダへ移動してから実行して
入力ファイル、in.txt から、各ファイルへ分割する。
分割後のファイル名を、Fruit.dat, Animal.dat として、各ファイルを処理した 点が10個一直線に並んでおり、各点が他の点との右方向の距離をいくつか知っている時、最も左にある点を求めよ
最も左にある点が求められない時はあと何の情報があれば求められるのかを最低個数で列挙すること
例1
a,b,cの点がある。
a点はb点が30右にあることを知っている。
b点は何も知らない。
c点はb点が-40右にあることをしっている。
結果
最も左にある点はa点
例2
a,b,c,dの点がある。
a点はb点が30右にあることを知っている。
b点は何も知らない
c点はd点が20右にあることを知っている。
d点は何も知らない。
結果
求められない。必要な情報は
a点からc点までの距離 >>776
実際に自分で書いてみて、求められたら解答例を提示できる? 「知っている」の主語が点に見えるけど
そうじゃないよね?
なんでそういう文にしたの? 連結リストを使って、出来上がったグラフが連結なら求められる
つまり、出来上がったグラフが二つ三つそれ以上に分かれている非連結グラフになってると、距離は分からない
……直感的には多分こうだが、何かしらの証明は必要
「連結グラフだが距離が分からない」反例があればいい >>776
点が10個あるなら例1,2両方とも判断不能。どっちもあと最低7個必要
しかも直線がRなのかR∪∞∪-∞なのかで解が変わるから提示しろ
あと出力はともかくデータの与えられ方くらい提示しろ text = File.read 'in.txt' # 入力ファイル
header = ""
str_hash = { }
result = [ ]
def sort_string ( head, hash, res )
res.push head
Hash[ hash.sort ].each_key { |key| res.push key } # sort
hash.clear # 空にする
end
text.each_line do |line| # 各行
line.chomp! # 末尾の改行を削除する
next if line.empty? # 空文字は処理しない
if line.start_with? '*' # 先頭文字が、* なら
sort_string( header, str_hash, result ) unless str_hash.empty? # 空でなければ
header = line
else
str_hash[ line ] = true
end
end
sort_string( header, str_hash, result )
puts result
Ruby で作った。
PowerShell よりは断然、作りやすい。
ただ、sort_string( ) を2か所で呼ぶのが、ダサイ お題
将棋の初期状態の駒40枚を
利き筋に他の駒がないように配置する 明記されてない条件は好きにしていいのがこのスレのルールですよ お題を出す前に出題者は自分の解答を(解くことが可能かの確認も兼ね)作っておくのもルールだ
適切な入出力例や問題文にあるべき条件が抜けてるっていうのはそれをやってない証拠 >>782
有名な作品がいくつかあるね
全て同じ方向を向いたヤツも
>>783
全ての組み合わせを数えた人がいるの? トランプの配置についてのアルゴリズムを考えてます。
トランプの横幅をX
トランプの高さをYとし
並べるトランプは偶数枚
全てのトランプを配置した時の全体を、トランプ配置と呼ぶとして
トランプ配置の横幅と縦幅の割合を、おおよそX:Yとしたい
この場合、アルゴリズムはどう考えたらいいでしょうか? ゴリ押しの総当たり
並べる枚数横にx縦にyが無尽蔵に大きくなれば比率に近づく
並べるトランプの上限が決まって無くて偶数枚だけが条件なら延々と並べる枚数を増やせばいい
一兆枚くらい並べれば比率はX/Yに近づく
1000000000億兆枚くらいのトランプを使えば横幅X高さYなんて充分に蟲出来るから全体の割合を調整するのは枚数が多ければ多いほどラク
10那由多ほど並べれば、本当にカードは点くらいなもので、縦横比率はx、yの枚数だけで決まる >>787
おおよそとかいまいちよくわからん
例を示して >>788
バカなの?
> 並べるトランプの上限が決まって無くて偶数枚だけが条件
なら、縦横2枚ずつ(計4枚)並べればいいだけ n枚をnX nYの長方形の対角線上に斜めにならべれば
X:Yになるけど
問題あってる? >>787
┌─┐
│ ?│
└─┘
これを偶数枚並べて縦横比同じにするなら
こうだよね
↓
┌─┬─┐
│ ?│ ?│
├─┼─┤
│ ?│ ?│
└─┴─┘
アルゴリズムもクソもないように思うのだが?
問題の書き方間違ってない? 枚数nに対して p * q = n を満たす正の整数 p, q の内 |p - q| / |p^2 + q^2| が最小になる組み合わせを求めるだけでしょ? https://mevius.5ch.net/test/read.cgi/tech/1480579110/981
に引き続いて、現に困ってしまった問題を出題
windows コマンドラインの xcopy コマンドを実装せよ
コマンドラインから「xcopy パス1 パス2」 と入力すると
パス1 以下にあるファイルをすべてパス2以下にコピーするようにせよ
ディレクトリについては、再帰的にコピーせよ
・現実の xcopy コマンドには色々なオプションがあるが、それは実装しなくてもよい
・読み込み対象のファイルの属性については考慮しなくてよい、読み込めるファイルのみ所定のパスにコピーできればそれでよい
・その他、コピーに問題のある状態が発生したときには、標準エラー出力にエラー内容を表示すればそれでいい
Windows Update の度にPCが激遅になるのに堪えかねて、C ドライブを SSD に換えることにしました。OS は再度インストールしなおすつもりです。
現在の C ドライブの内容は別途コピーしておいて、困ったときには参照できるようにしたいと思いました。
ところが、「xcopy c: x:/tmp」とすると、「メモリーが足りなくなった」といって途中で止まるのです…困りました… >>795
条件を追加します
ハードリンクやシンボリックリンクは考えなくともよい
xcopy パス1 パス2
のパス2 がパス1 の下にある場合、実装がまずいと永遠にコピーし続ける困ったことになるが、それも考慮しなくてもよい
(今回やりたいことは、「xcopy c: x:/tmp」であるので、これが問題なく動けばそれでよい…) >>795
Windowsならエクスプローラ使ってただコピーするのでは何か不都合があるのか?
まあ、お題としてそういうのなしで作れというのはアリだが、なんとなくWindowsの場合はエクスプローラが使っているのと同じライブラリ関数を一回呼び出すだけで終わってしまいそうな気がしてならない。 xcopy ではなく、robocopy を使えば? >>792
他の人も勘違いしてるけど、横縦比をx:yにする問題だよ。おおよそらしいけど。 >>802
トランプの横幅がYで高さがXでしょ?
で、偶数枚並べてX:Yにするんでしょ?
4枚でなるじゃん。およそどころかぴったりX:Yに。 >>795-796
https://mevius.5ch.net/test/read.cgi/tech/1434079972/52
>>799
有用な情報ありがとうございます
なるほど、256バイト以上のパスは受け付けない、ですか…
MSDN https://msdn.microsoft.com/ja-jp/library/cc429198.aspx
なんかをみると、「この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。」と書いてありますね
でも、C++ でユニコードバージョンに対応させるってどうするのだろう?#define UNICODE だけではダメみたいだし… >>809
>適切なスレ
って、あなたはどこを想定しているのですか? >>805
流石に与えられた枚数は全て使うだろ
アスペかよw とりあえず>>787はちゃんと問題書くか取り下げるかしろよ… >>813
近似値も想定している文意から汲めないならアスペ >>816
ぱっと見て
カードの数nとカードの縦と横の長さx, yが与えられたときに
総てのカードを並べて作った矩形の縦と横の長さをX, Yとして
|X/Y - x/y|が最小になるような(X, Y)を求める問題かと思ったんだけど
というか>>787は言葉足らず過ぎるしアスペ云々は言い過ぎだったわすまん n枚を矩形になるように並べる
なんてことは書いてないけど
あと
『|X/Y - x/y| が最小』
は数学的センスが無い
x,yを入れ替えても値が変わらない誤差の定義にしたい >>818
矩形じゃないと縦幅と横幅が定義できないからそこはいいんでない?
>『|X/Y - x/y| が最小』は数学的センスが無い
はその通りだね
m := min{x, y}, M := max{x, y}, λ_x = X, λ_y = Y として
として |m/M - λ_m/λ_M|の最小値を求めるべきだね >>819 前半
どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある
>>819 後半
さらにセンスが無い >>820
『どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある』
これは偽
少しは検討してから書き込んだらどうなんだ
後半が理解できないなら「テンソル」で調べてね 横方向をx軸、縦方向をy軸としたx, y平面上に
トランプを並べるとする
有限サイズ(>0)のトランプを有限枚(>0)並べるので
トランプは有界で非空
xの上限 - xの下限 = 横幅
yの上限 - yの下限 = 縦幅 >>822
勝手な距離空間持ち出してこないでくれませんかねぇ 勝手な距離空間www
後に引けなくなってさらに痛くなる はいはい。頭いいね坊や
今度からは算数をきちんと勉強してからレスしてね お題:標準入力から(で始まり)で終わる顔文字が与えられる。この顔文字を太らせて標準出力に出力しなさい。 >>830
ちげーよ、出題者ならまともな条件追加してるわw
自分では何も提示しないのに難癖つけてくるアホがうざったいだけ トランプを並べる問題で
非ユークリッド空間を前提にしちゃう
頭がおかしい人 頓珍漢なオレオレ解釈提示してドヤってる方がウザいわ >>787
並べるのが矩形に限らないのであれば
>>791のとおり任意の枚数で可能
矩形に並べるとして
枚数が与えられないなら>>792のとおり4枚で可能
与えられるなら>>794のとおり
与えられた自然数を最も僅差の2つの自然数の積で表す問題と同値
ただこの場合、問題文の不備を不問にしても
>並べるトランプは偶数枚
って条件がなぜ必要になるのか疑問が残るが…
いずれにしても問題としては終わってるので
これ以上長引かせるのは不毛 × 問題としては終わってる
○ 人間としては終わってる どこからも
矩形に隙間なく並べる
とは読めないのだけど 書かれていない条件は勝手に解釈すればいい
その条件の問題を解くのが楽しいと感じるならその条件で回答すればいいだけ
グダグダと問題自体を統一する必要は無い >>839
「問題を解く」という言葉がふさわしいような条件が見つからないから困っているわけで >>247
java
pastebin,com/7cnjtkNG >>846
変数宣言を増やせばいくらでも行けるけどこれが限界かも
リフレクションはやっぱりクソだな >>247 Squeak Smalltalk, インスタンス変数で254個まで
| obj n limit |
obj := Object new assureUniClass.
n := 0.
[[obj addInstanceVarNamed: 'i', (n := n + 1) asString withValue: n] repeat] ifError: [].
limit := obj class instSize. "=> 254 "
obj instanceVariableValues asArray = (1 to: limit) asArray "=> true " 自然数nに対して
3Σ_{k = 0}^{2n}(-2)^k / (2n + 1)^2
が整数となるnを総て求めよ >>849
数式というか文字が何を表しているのか分からない。最初の { の直前の _ は何を意味するんだ?
更に { } で括った部分と ( ) で括った部分の違いは?
まあわかったとしても解く気は起きないかも知れないので面倒なら解説しなくても良い。 >>849じゃないけど
_はΣの下
^はΣの上
テキスト限定でのよくある表記 >>852
そういう意味だとすると>>849はこうかな。
Kotlin
https://paiza.io/projects/3ObT5j3XNNkuKqDXdk6E7g
しかし、本当にこれで全てなのかは不明。
Double 型で計算できる所まで計算して結果が整数の時の n を出してるだけなので。 >>849
(1 + 2 ^ (2n + 1)) / (2n + 1) ^ 2
に変形できる
答えは多分n=1だけだと思う
python3で時間いっぱいまで総当たり
https://ideone.com/GGijCL >>849は数学オリンピックのマスターデーモンだな
答えはn=0, 1のみ >>857
あれ?そうなの?
じゃあプログラム何か間違ってんのかなあ? >>860
double型の精度の問題
計算結果は指数関数が支配しているからnが大きくなると有効桁数が足りなくなる >>861
なるほど。とすると32以上はもうダメな値ってことだな。
かといってBigDecimalとか使って延々と計算しても意味ないな。
数学的に答え出てるし。 質問スレからパクってきた配列の易しい問題
質問者は他レス見るにプログラミング自体経験なさそうだが
893 デフォルトの名無しさん (アウアウカー Sa8f-aTuM [182.250.241.36])[sage] 2018/09/08(土) 21:43:04.65 ID:6/Xg/XCUa
どこで質問するべき内容なのか迷っていたのですが調べているとプログラミング関係のようなのでここで質問させていただきます
例えば
1〜50までの数字の中で数字を10個ランダムで選ぶ乱数ツールは検索するとすぐにでてきます
しかし、自分が求めているものは2つあり
@
1〜50までの数字の中で2.16.22.23.42.50を除いて10個ランダムで選ぶことができるもの
A
1.2.5.6.16.18.20.21.23.28.30.33.39.4047.49.50の選択した数字中から10個ランダムで選ぶことができるもの
@とAで挙げた数字は適当ですが場合によっては@で除外した数字やAの選択した数字は変えたいです
このような場合自分でプログラミングしないといけないのでしょうか? >>864 Squeak/Pharo Smalltalk
"@"
((1 to: 50) copyWithoutAll: #(2 16 22 23 42.50)) shuffle first: 10.
"A"
#(1 2 5 6 16 18 20 21 23 28 30 33 39 40 47 49 50) shuffle first: 10. >>864 Ruby
([*1..50] - [2, 16, 22, 23, 42, 50]).sample(10)
[1, 2, 5, 6, 16, 18, 20, 21, 23, 28, 30, 33, 39, 40, 47, 49, 50].sample(10)
というか1~44までの数字の中で数字を10個ランダムで選ぶ乱数ツール使えばいいだけなのに質問者が謎 ロト6を当てたい一般人だろ
そんくらいは察してやれよ イ '、
/ ハ ',
i ハ ノ | i、 |
r‐-、 ,...,, | リ从-ノ ノリノノ-)リ、 l
:i! i! |: : i!| | リ ‐=・-; -・=‐ Y l イェ〜イ〜プログラミング好きなオタクみってるう?なんJ民デース!
! i!. | ;| . .i从 | ` ̄,:  ̄´ |从!
i! ヽ | | i リ,i ゚人,,__,,人:. | リ}
ゝ `-! :|! . ハ: i. , __ij..__ 、: 'iノ´
r'"~`ヾ、 i! 彡、 `Zエlフ'´ /ミ
,.ゝ、 r'""`ヽ、i! 彡イ\ ` ̄´ / ト ミ
!、 `ヽ、ー、 ヽ _/ ∧ > ―< ∧ \
| \ i:" ) ─ ' ¨: : : : | \ / |: : : \ なんj書き込んだキッズ
今度から一人で解決しようね🤗 >>871
>>873
実はこいつがなんJでスレ建てたんやで
>>868
は被害者や ここになんjに助けを求めたガイジはいませんかー?🙋
負け犬は何処かな🤔 なんJにスレ立ててまでするチンパンジーが見れると聞いて来ました 恥ずかしがらずに出てこいよ😘
ガイジくん😁
それとも顔真っ赤で出てこれないかな?🤔 意味わからないんだがw
ハンJでしょうもないプログラミングの質問した人がいたってことか? また日本語怪しいじゃん君なんJでもまともに喋れなかったよね? >>871が建てたのはこれかw
http://tomcat.2ch.s c/test/read.cgi/livejupiter/1536469396/ >>900でなんjをハンjと打ち間違える時点で通報騒動知ってるやつやん
>>872で自分に都合の悪いレスつくと本人認定するような奴だしなんでもかんでも人のせいにしてきたんだろうな あ、これ俺に成りすまして他板でクソスレ立てて人をこっちに呼び込んでんのね
今理解したわ
このスレの住人なら>>870-871程度のことで他の板にスレ立てるわけないってわかってもらえると思うけど
荒れると嫌なんでしばらくROMりますわ >>907
今理解したわとか嘘だろ
>>903で>>871が建てたと認定してる時点でお前はとっくにわかってただろ 単発ばっかだし質問を小馬鹿にされた質問者が自演で荒らしてんだろ
いちいち反応すんなkz >>909
kzとかいつの時代やねん
お前はミスターアンモナイトかwwwww a-zからなる単語のペアが与えられるのでそれぞれの元を辞書順にソートした上で同値類を求めなさい
なお同一のペアが2度以上入力されることはなく、また出力時の各行は順不同とする
例
-*- input -*-
goose pigeon
cat dog
eel goldfish
goose duck
horse dog
cod eel
dove pigeon
dog rhino
goldfish squid
goose lark
-*- output -*-
dove duck goose lark pigeon
cat dog horse rhino
cod eel goldfish squid >>912
入力のペア"A B"は A = B を表しているものとして等しいもの同士をグループにまとめて出力してねという問題
正確には「同値類に分割せよ」か「商集合を出力せよ」と言うべきだったか
例えば S = {A, B, C, D, E, F, G} に対して
A = B, C = A, D = F, E = G ……(☆) が成り立っているとすると
S の全ての要素は A = B = C と D = F と E = G っていう同じもの同士に分類できるよね
で (☆) の下で A の S における同値類とは {A, B, C} のことであり、
(☆) の下での S の商集合とは {{A, B, C}, {D, F}, {E, G}} のことを言うよ
問題を解く上で数学的な要素は無いから数学の言葉を使わないで出題すべきだった >>911 Squeak Smalltalk
| input groups |
input := 'goose pigeon
cat dog
eel goldfish
goose duck
horse dog
cod eel
dove pigeon
dog rhino
goldfish squid
goose lark'.
groups := OrderedCollection new.
input linesDo: [:line |
| pair |
pair := line subStrings.
(groups detect: [:group | group includesAnyOf: pair] ifNone: [groups add: Set new])
addAll: pair
].
(groups collect: [:each | each asSortedCollection joinSeparatedBy: ' ']) asStringWithCr
"=> 'dove duck goose lark pigeon
cat dog horse rhino
cod eel goldfish squid' " >>913
それは良いとしても>>911の問題における同値類とはなんなのか?
例として出されているのは入力が動物の名前のようで、出力は重複をなくした上で大まかな種類ごとに分類されているようではある。
しかしこのそれぞれの分類は一体いかなる基準によって同じと判別したのか?
もしこれが単語の意味、およびそれの分類(動物なら四つ足だとか哺乳類だとか)によって分けなければならないとすると、単語の意味やその分類がプログラムの側でわかっていなければならない。
しかも入力にはどんな単語が来るかわからないというのであれば辞書並みの単語数に関してそれを保持していなければまともに分類できない。 >>914
え?それでいいの?ペアになってるなつが同じ種類ってこと? >>915-916
>入力のペア"A B"は A = B を表している なるほど。また最初の問題が不備で無限の回答が出るか一つも回答が出ないパターンだったと。 見た感じ問題に不備はない
まだ何か勘違いしてるのでは >>911 Squeak Smalltalk (>>914 は入力順等によっては機能しないので差し替え)
| fn input |
fn := [:str |
| groups |
groups := OrderedCollection new.
str linesDo: [:line |
| pair found |
pair := line subStrings asSet.
found := (groups select: [:group | group includesAnyOf: pair])
ifEmpty: [{groups add: Set new}].
groups removeAll: found; add: (found inject: pair into: #,)
].
(groups collect: [:group | group asSortedCollection joinSeparatedBy: ' ']) asStringWithCr
].
input := 'goose pigeon
以下略'.
fn value: input.
"=> 'cat dog horse rhino
cod eel goldfish squid
dove duck goose lark pigeon' "
fn value: input, String cr, 'squid lark'.
"=> 'cat dog horse rhino
cod dove duck eel goldfish goose lark pigeon squid' " >>917
「それぞれの元を辞書順にソートした上で」
これは間違いってことね。 cat dog horse rhinoとかってアルファベット順に出力するよう要請してるのだから少なくともそのフレーズに間違いはないよ >>911 「cat cat」とか重複するペアとか任意のペアが来てもオッケーなバージョン
def qs(er)
h = Hash.new Float::INFINITY
erc = 0
er.each do |r|
min = r.map{|e| h[e]}.min
ern = min == Float::INFINITY ? erc += 1 : min
r.each{|e| h[e] = ern}
end
h.group_by(&:last).values.map{|s| s.map(&:first).sort}
end
er = $<.readlines.map &:split
puts qs(er).map{|a| a * ' '} * $/
#=>
dove duck goose lark pigeon
cat dog horse rhino
cod eel goldfish squid >>923
その実装だと仮に squid lark のペアが末尾に追加されたとき
すでにある goldfish squid がキャンセルされちゃうけど?
https://ideone.com/sbA9P5 >>926
よーわからんがペアの両方が既知の場合のマージ処理が抜けてない?
A B
C D
A C
の場合とか >>911の例をマージが必要になる順とかにしといてくれてれば… >>911 perl
%h;
while(<>){
chomp;
($f, $s) = split/ /;#first, second
undef $keyf;
undef $keys;
for $k (keys %h){
$keyf = $k if grep /$f/, @{$h{$k}};
$keys = $k if grep /$s/, @{$h{$k}};
}
if(!defined $keyf and !defined $keys){
push @{$h{$.}}, $f;
push @{$h{$.}}, $s;
}else{
push @{$h{$keys}}, $f unless defined $keyf;
push @{$h{$keyf}}, $s unless defined $keys;
}
}
map{print join " ", (sort{$a cmp $b}@{$h{$_}}), "\n"}keys %h; >>927
両方が既に入ってるなら何もする必要ないと思うのだが。 >>911 >>932
%h;
while(<>){
chomp;
($f, $s) = split / /;#first, second
undef $keyf;
undef $keys;
for $k (keys %h){
$keyf = $k if grep /$f/, @{$h{$k}};
$keys = $k if grep /$s/, @{$h{$k}};
}
if(!defined $keyf and !defined $keys){
push @{$h{$.}}, $f;
push @{$h{$.}}, $s;
}elsif( (defined $keyf and defined $keys) and !($f eq $s) ){#merge
push @{$h{$keys}}, @{$h{$keyf}};
delete $h{$keyf};
}else{
push @{$h{$keys}}, $f unless defined $keyf;
push @{$h{$keyf}}, $s unless defined $keys;
}
}
map{print join " ", (sort{$a cmp $b} @{$h{$_}}), "\n"} sort{$a <=> $b} keys %h; >>932
あー。なるほど。そういうことか。
また考えよう。 >>935
差し支えなければ修正前のコードも別URLで再掲載してもらえますか?
あるいは公開バージョンの履歴や差分を参照する機能がpaoza.ioにあったら教えてください
くしくもマージを考慮「しない版」と「する版」が出揃ったのでどういう修正で対処したか調べると
それぞれの言語の(あるいはアルゴリズムの)特徴が際立って面白いのではないかなぁとふと思ったので >>936
すまん。前の版はもうない。paiza.ioはそういう機能はない。
思い出して時間があったらなんとかする。 >>937
あーいやそこまでしなくても結構です。ありがとうございます! 結構みんな人の書いたコード読んでるんだな
いい意味でびっくり >>952
あくまでも過去の出題例、だからいいんじゃないですか? アウトかセーフか分からないときは答え公開しないほうが無難 >>955
アウトになる条件は、「エントリー後メールにて送付されるコーディング試験問題は、当社への応募以外の目的で無断使用しない」…@
だが、>>951 のリンクの問題は「エントリー後メールにて送付されるコーディング試験問題」ではないから@に反しない…A
さらに、無条件に誰でも見ることのできる問題であること…B
Aよりアウトではないと断定できるし、BがAの結論を補強する
結論として、>>951 のリンクの問題を公開しても問題ない
>>955 「アウトかセーフかわからない」という結論にどういう道筋で到達したの? お題:コンプリートパネル(出展:高校生クイズ2018)
5×5のパネルが与えられる。各パネルは赤色か白色である。
各パネルに侵入すると、そのパネルの色が赤なら白、白なら赤に変化する。
最初のステップは、場外(左下のパネルの左隣)から左下のパネルへ侵入することである。
以降のステップでは、上下左右に移動することができる。
ただし、ひとつ前のパネルや場外に移動することはできない。
すべてのパネルを白色にするための移動経路を構成せよ。
WWWRR
WWWWR
WWWWR
WWWRR
RRRRW
=> 10 RRRRURUUUL (→→→→↑→↑↑↑←)
WWWWW
WWWWW
WWWWW
WWWWW
WWWWW
=> 0 (移動の必要なし)
WWWWW
WWWWW
WWWWW
WRWWW
WWWWW
=> 21 RRRRULULLDDRULURRDRDL (必ずしも最短経路である必要はない) >ひとつ前のパネルや場外に移動することはできない
全部踏めばいいんだからライツアウトの解法の亜種で解けるんじゃねえの 状態を変えずに任意の場所まで移動できるなら
6箇所だけそれぞれ1つだけRだった場合を計算してあとは回転なりなんなりして重ね合わせればいけるな ↑
□□□
□□□→
2*3の全パターンで、この二つの方向のどちらかに抜ける経路が存在すればいい
あとは合成で何とかなる うーん。これはブルートフォースでやろうとするとかなり無駄が多くなって時間とメモリを山盛りに食いそうな予感。 5x5=25マスの赤or白の2値だから25bit、現在位置25通り(5bit)に前回位置相対で4通り(2bit)、あわせて32bitパターン? 5x5は序の口で、100x100くらいが本命でしょう
ついでに最短の最適解も
問題も作るだけならラクだから1000x1000だって0.1秒程度で作れる
もちろん解くのは面倒 プログラム考える以前に解くためのいいアルゴリズムが思い浮かばん 辺の長さが3以上の時は戻るの禁止ってルールは実質的に無視できそうだな
というのも閉路を2周すれば元通りに戻るわけだから
xxx
x↓x
x↑x
上に行ってまた下に戻るって進みたいときは
→↓x
↑←x // 中央「←」を3回目に踏むときは下に進む
x↑x
ってすればいいわけで
2*2 かどちらかの辺が 1 の場合以外は任意のパターンで解があることになる RWWWR
WRWWW
RWRWW
RWWRW
WRRWR
全てのパターンが解けて最長がこの形で44手かかる
となったけどできたばかりだからまだまだバグがありそう https://ideone.com/S7UA0k
表示までできるようになったので
ここでは5秒超えるので結果表示されないみたい
10年前のノートで2分半かかる
結果はこんな感じ
- - - - -
- - - - -
- - - - -
- x - - -
- - - - -
RRRRULDRULLDL 13
x - - - x
- x - - -
x - x - -
x - - x -
- x x - x
RRRRRUUUULLLLDDDDRRRURUULDLDDLUURDLURRUULLDL 44 最適解ではないが、人間にも実行可能なアルゴリズムを考えた
上のラインから順番に確定させていく感じ
https://ideone.com/nUgNh3 解法全然分からないけど
枝狩りもメモ化もせず愚直に全探索すると44手目で10760814742109228通りになるのか…ヤバイな
http://codepad.org/JXkGjMKb >>962の理屈上なら>>971のstepの累積和が3,355,443,200(=25<<27)になった時点で全通り出たことになって最短の上限になるのかな? ttps://cdn-ak.f.st-hatena.com/images/fotolife/m/motcho/20180127/20180127034515.png
連続殺人犯が全ての目撃者を消して完全犯罪を目論む 文字列のペアがn対与えられる。
s(1),t(1)
...
s(n),t(n)
この時、ペアを適切な数選び適切な順番で並べる事で
s(a1)s(a2)...s(ak) = t(a1)t(a2)...t(ak)
とできるかどうか判定せよ
(ペアを重複して選ぶのもOK) >>974
それって「s(i)=t(i)となるiが1つ以上存在するか」というだけのように思えるけど、違うかな? >>975
最初全く同じこと思ったわw
でもこれって十分条件に過ぎないんだな
a ab
bc c
s(1)s(2) = t(1)t(2) = 'abc' 応用だけは思い付いた
ATCGTTGTAC, AAATTTCTCTCTTTCT
GTGATGCGTTGCAGGT, ATGCCATGTGAC
AAATTGCTGAC, ATGTTGCGTC
ATGCGTACCCACG, AGTGCGTTCGTAC
...(以下、1万行続く) 重複しても良いってなっているのでどうやっていいか分からなくなった。
重複なしなら単に順列の問題で全パターン調べれば良いだけなんだけどな。 >>979
含むと何も並べなければOKって事になりそう >>981
結果じゃなくて入力に
一つも選ばないのがOKならそもそも問題として成立しないだろ >>969
ルール合ってるのかどうか知らないけど
ゲーム風にしてみた (Win専用)
http://fast-uploader.com/file/7093342064119/
PASS:11957
慣れると何となく解き方のコツが見えてくる
今まで解けなかった例は無さげ 任意のパターンで解けることはここですでに言及されてるよ エビングハウスの忘却曲線っていって人間のベストな復習間隔があるんだけど
例えば今日勉強したことは明日復習して3日後、1週間一ヶ月ごとに復習すると完全に長期記憶になる
これをスマホアプリで管理するプログラミングしたい
理屈は簡単、カレンダーに今日覚えたことを「○○の20-40ページ」とか記入して
明日になったら今日やる復習を表示してくれるシステム
プログラミングのプの字も知らんのだ
どの言語を使うとかもわからんmacとxcodeはある
どういう作り方すればいいかわからない教えてください個人用に使う >>986
このスレはそういう質問するスレではなく、誰かがお題を出して回答したい人がプログラミングして回答するスレだ。
そういう質問はまずは既存のソフトでそういうことが出来るのがないか以下のスレで聞いた方が良いと思う。
気軽に「こんなソフトありませんか?」Part.176
https://egg.5ch.net/test/read.cgi/software/1529929775/
それからどうしてもプログラムを自分で作ってみたいというのであれば何らかの言語を覚える必要があるが、
MacやiPhoneの場合は何が良いのか俺はよく知らない。この頃だと Swift なんだろうか? Swift は確か xcode
使って作れたと思うが、詳細は今の俺には分からん。MacOSやiOS関係のスレを探して聞いてくれ。 お前らってファイルそのものへの参照を禁止したうえでquineを自力で書ける? このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 157日 0時間 44分 30秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。