プログラミングのお題スレ Part18at TECH
プログラミングのお題スレ Part18 - 暇つぶし2ch605:デフォルトの名無しさん
20/09/20 13:05:52.02 wHMtOvf4.net
>>594
ちなみにn=3の場合の14個は
1×1の正方形:4個
2×2の正方形:1個
√2×√2の正方形:1個
2×1の長方形:4個
4辺が1,1,√2,2√2の等脚台形:4個
の14個

606:デフォルトの名無しさん
20/09/20 18:36:43.29 XyOg3AIQ.net
>>594
URLリンク(ideone.com)
{0,1,14,184,762,2257,5704,13040}と出たんだが
どっちが合ってる?

607:デフォルトの名無しさん
20/09/20 18:44:44.75 XyOg3AIQ.net
一直線上にある4点の組を余分に数えたところ >>594 の解と一致した
URLリンク(ideone.com)

608:デフォルトの名無しさん
20/09/20 18:56:48.73 wHMtOvf4.net
あ、ホントだ失礼しました

609:デフォルトの名無しさん
20/09/20 19:10:27.22 wHMtOvf4.net
[0,1,14,184,762,2257,5704,13040]
が正解ですね
URLリンク(ideone.com)

610:デフォルトの名無しさん
20/09/20 22:46:33.41 9sb+TTLg.net
>>594
問題がわからない。

611:デフォルトの名無しさん
20/09/21 00:11:09.46 ZXxiMs6i.net
>>600
n=3だと
●●◯ ◯●● ◯◯◯ ◯◯◯
●●◯ ◯●● ●●◯ ◯●●
◯◯◯ ◯◯◯ ●●◯ ◯●●
●◯● ◯◯◯ ●●◯ ◯●●
●◯● ●◯● ◯◯◯ ◯◯◯
◯◯◯ ●◯● ●●◯ ◯●●
●●◯ ◯●● ◯◯● ●◯◯
◯◯● ●◯◯ ◯◯● ●◯◯
◯◯● ●◯◯ ●●◯ ◯●●
●◯● ◯●◯
◯◯◯ ●◯●


612: ●◯● ◯●◯ の14通り



613:デフォルトの名無しさん
20/09/21 11:36:08.07 VFD1LGbi.net
>>594のお題は、
平面上に4点を選んだとき、その4点をすべて含む円周が存在する場合としない場合がある
xy平面上に、x,yの各座標が1~nの整数であるような、互いに異なる点を4つ選んだとき、4点すべてを含む円周が存在するものがいくつあるか?
n=1~8についてそれぞれ数え上げよ
(註:n=1のときは異なる4点を選べないので、解は0でよい)
ってことでいいかな?

614:デフォルトの名無しさん
20/09/21 13:45:14.08 tVxoOCVr.net
>>601
n=4 のときの184通り
URLリンク(imgur.com)

615:デフォルトの名無しさん
20/09/21 14:54:29.54 /KyZWHiy.net
>>603
正解だと思う
おそらくn=9までは
[0,1,14,184,762,2257,5704,13040,25996]
今作ってるのはC[n^2,4]を全数検査してるのでO(n^8)で計算量増えるので二桁以上はしんどいorz

616:デフォルトの名無しさん
20/09/22 00:03:46.43 jIz1rAqD.net
誰かフォルダにパスワード駆ける方法教えてくれ

617:253
20/09/22 02:15:18.79 jDcMk3G3.net
対象性を考慮する以外の計算量の削減手段はないのかねこの手の問題は
解決すべき課題は計算量の削減ばかりではないだろうけれどさ

618:デフォルトの名無しさん
20/09/22 09:28:15.64 yucbsR+t.net
まぁ何に重きを置くかですな
数学板でこの手のプログラムが必要になるのは誰も答え持ってなくて、一応答えは出てるけど確認したいときとか
その時は速度より“確実に正しい”事の方が重要になる
この場合も対称性やら、明らかに無駄な可能性を排除すれば速度は上がるけど“確実に正しい”のかは怪しくなってしまう
実務でプログラム使う人もその辺のtpoは意識してるのでは?、
コード汚くても高速な奴も募集中

619:デフォルトの名無しさん
20/09/22 11:56:55.93 LgsCAwYw.net
>>603に挙げられている184通りのうち、その3/4にあたる138通りが、直径が√10のものである
そのうち、円の中心が図の中央にあるものは、候補となる点が8個あるので、8C4 = 70 通りある。
図の中央から(±1,0)または(0,±1)ずれたものは、候補となる点が6個なので4×(6C4)=60通り
図の中央から(±2,0)または(0,±2)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
図の中央から(±1,±1)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
合わせて 70+60+4+4=138 通りと数え上げることができる
図の中央を基準にすることができるものばかりとは限らないところには注意が必要だが
総当たりよりは効率化が見込めると思われる。

620:253
20/09/28 22:51:28.57 mT2w1+AU.net
>>518 Python3, >>585を参考に計算量を√nに減らした解法
import math
for n in [81, 87, 91, 13]:
  s = math.sqrt(n)
  f = n
  for i in reversed(range(2, 1 + math.floor(s))):
    q, m = divmod(n, i)
    if m == 0: f = q; break
  print(n, '=>', f)

実行結果
~ $ python 18_509_99_rootn.py
81 => 9
87 => 29
91 => 13
13 => 13
もっとスマートな解法を考えていると双曲線を意識した解法を意識してしまうが、
簡単には解けない数学の問題に突き当たると思う

621:253
20/09/28 22:53:47.02 mT2w1+AU.net
>>609
× 意識した解法を意識してしまうが、
○ 意識した解法を思い浮かべてしまうが、

622:デフォルトの名無しさん
20/09/29 18:23:40.44 TPx3FsW2.net
お題: バブルソートを実装せよ

623:253
20/09/29 23:24:18.49 219xwwXO.net
>>611
プログラミングのお題スレ Part13
スレリンク(tech板:231番)

624:デフォルトの名無しさん
20/09/30 20:15:38.19 rtPyMlCZ.net
古参はここで「番兵おけやボケェ!」と言う

625:デフォルトの名無しさん
20/10/01 01:25:55.75 cJ6xF5hb.net
お題:
アッカーマン関数の引数が与えられるので、計算過程を1ステップずつ出力してください
入力:
2 1
出力:
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5

626:デフォルトの名無しさん
20/10/01 11:20:33.49 iee67Noq.net
>>614
Haskell
astr m n = "A(" ++ m ++ "," ++ n ++ ")"
ack' 0 n = (n+1, [astr (show 0) (show n), (show $ n+1)])
ack' m 0 = let
(val, ss) = ack' (m-1) 1
in (val, (astr (show m) (show 0)) : ss)
ack' m n = let
(val1, ss1) = ack' m (n-1)
(val2, ss2) = ack' (m-1) val1
ss = [astr (show $ m-1) s | s <-ss1] ++ (tail ss2)
in (val2, (astr (show m) (show n)):ss)
ack m n = map (++"\n") $ snd $ ack' m n
main = do
[x,y]<-(return.(map read).words)=<<getLine
mapM_ putStr $ ack x y

627:デフォルトの名無しさん
20/10/01 12:09:11.51 OaA9a4hN.net
Haskellでもこんな長くなるの?

628:デフォルトの名無しさん
20/10/01 12:15:24.40 O+PWz9pR.net
>>616
いや、上手な人ならもっと上手くやるはず
アホほどライブラリがあってそれ使えば楽々のハズだけど修行中の身ではこんなもんorz

629:デフォルトの名無しさん
20/10/01 14:04:34.18 Am+nhG+G.net
>>615
ちょっとチューンナップ
達人なら***とか>>>とか意味わからん演算子使ってもっとスッキリ書くんだろうけどアホほどあって使いこなせんorz
haskell
----
astr m s = "A(" ++ (show m) ++ "," ++ s ++ ")"
ack 0 n = [astr 0 $ show n, show $ n+1]
ack m 0 = (astr m $ show 0) : ack (m-1) 1
ack m n = let
ss1 = ack m (n-1)
in [astr m $ show n]
++ (map (astr (m-1)) ss1)
++ (tail $ ack (m-1) (read $ last ss1))
main = do
[x,y]<-(return.(map read).words)=<<getLine
mapM_ ((putStr).(++"\n")) $ ack x y

630:蟻人間
20/10/02 19:50:35.06 gQLwfaGp.net
お題: 野球のボールの動きを物理シミュレートして、ピッチャーの投げてきたボールをより遠くにかっ飛ばすバッターAIを開発せよ。

631:デフォルトの名無しさん
20/10/02 20:54:50.29 tP403VLl.net
カーブやシュートも再現しろよ

632:253
20/10/02 21:41:56.95 kl4hmyt8.net
>>619
─┼─┐─┼─  /  ,.           `゙''‐、_\ | / /
  │  │─┼─/| _,.イ,,.ィ'    ───‐‐‐  *  ←>>蟻人間
  │  |ツ │    |  |  | イン /´⌒`ヽ    // | \
                     {,    リ)  / ./ |  \
               __ /}从、 リ( /  /  |
      ,. ,. -‐===‐- `つ/ ,.イ ’^ソハノリ   / ∵|:・.
    〃〃〃〃      //ミノ__  /´   /∴・|∵’
ヽ_I__I__I__I__I_I     __ノ_/ /    ヽミ、、   .∵.;|∵’:;
ー{____,,二二二ニ) ノΘ(__   )  ゙ 、∵.;|∵’,
 /I I I I I I     .^^^'   \ !  ̄フ    ゙ 、 |∴
                   ソ  /      `
                  ノ⌒ヽ')
                / ノ/ /
               /\/ ∧/   /       ',
              / /  ノ./   ./        ',
             ノ/   ヘ__、  ./ / ̄ ̄ ̄ヽ .',
            ヘ_'_,       /  \   /  ',
                     /    \/    ',
            ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙             ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙

633:デフォルトの名無しさん
20/10/02 21:46:15.88 JDxjQVnw.net
ナイス

634:デフォルトの名無しさん
20/10/02 22:04:39.76 jsz+6t1Q.net
>>621
くっそワロタ

635:253
20/10/03 01:10:19.52 io8Ij0O0.net
>>614 Perl5
use feature qw{signatures say}; no warnings 'experimental';
sub A($m, $n, $l, $r) {
 say "${l}A($m, $n)$r";
 $m ? $n
  ? A($m-1, A($m, $n-1, "${l}A(".($m-1).', ', ")$r"), "${l}A(".$m.', ', ")$r")
  : A($m-1, 1, "${l}A(".($m-1).', ', ")$r") : $n + 1;
}
say A(2, 1, '', '');

実行結果
~ $ perl 18_605_Ackermann_func.pl
A(2, 1)
A(1, A(2, 0))
A(1, A(1, A(1, 1)))
A(1, A(1, A(0, A(1, 0))))
A(1, A(1, A(0, A(0, A(0, 1)))))
A(1, A(1, A(1, A(0, 2))))
A(2, A(1, 3))
A(2, A(0, A(1, 2)))
A(2, A(0, A(0, A(1, 1))))
A(2, A(0, A(0, A(0, A(1, 0)))))
A(2, A(0, A(0, A(0, A(0, A(0, 1))))))
A(2, A(0, A(0, A(1, A(0, 2)))))
A(2, A(0, A(1, A(0, 3))))
A(2, A(1, A(0, 4)))
5

636:253
20/10/03 01:13:51.37 io8Ij0O0.net
なんかBugってる…orz

637:デフォルトの名無しさん
20/10/03 12:07:42.48 xbar0BlH.net
>>614 perl5
URLリンク(ideone.com)
s///e でいける

638:デフォルトの名無しさん
20/10/03 12:20:08.70 nr2+4P+J.net
perlの正規表現マジック恐ろしや

639:デフォルトの名無しさん
20/10/03 12:37:17.41 MOu6VxbM.net
>>626
すげえな
ほとんどワンライナーだ

640:デフォルトの名無しさん
20/10/03 12:46:20.34 ul2MWjNf.net
そうなのよね
入力もらって表示→ワンステップだけ展開して戻る
の繰り返しが1番楽なんだけどなぁ

641:253
20/10/03 14:01:25.06 5WkJC33J.net
>>614 Perl5、>>624 を修正。 >>626 あら正規表現で書けちゃうのかイナ…
use feature qw{signatures say}; no warnings 'experimental';
sub A($m, $n) {
 $m ? $n
  ? do{ my ($m2, $n2) = ($m-1, $n-1);
     push @$l, "A($m2, "; push @$r, ')';
     say @$l, "A($m, $n2)", @$r; A($m2, A($m, $n2)) }
  : do{ my ($m2, $n2) = ($m-1, 1);
     say @$l, "A($m2, $n2)", @$r; A($m2, $n2)}
  : do{ my $s = $n + 1; say @$l, $s, @$r; pop @$l; pop @$r; $s };
}
($m, $n) = (2, 1);
say "A($m, $n)";
A($m, $n);
実行結果
$ perl 18_605_Ackermann_func.pl
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5

642:デフォルトの名無しさん
20/10/03 18:00:38.18 WWjeAKvH.net
>>614 ocaml
URLリンク(ideone.com)
let (>>) f g x = g (f x)
let rec a m n p =
let () = p (Printf.sprintf "A(%d, %d)" m n) in
if m = 0 then n + 1
else if n = 0 then a (m - 1) 1 p
else a (m - 1) (a m (n - 1) (Printf.sprintf "A(%d, %s)" (m - 1) >> p)) p
let () = print_int (a 2 1 print_endline)

A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5

643:デフォルトの名無しさん
20/10/07 20:33:26.90 0TsEuxhN.net
>>614 octave
URLリンク(ideone.com)
function c = a(m, n, p)
p(sprintf('A(%d, %d)', m, n));
if m == 0
c = n + 1;
elseif n == 0
c = a(m - 1, 1, p);
else
c = a(m - 1, a(m, n - 1, @(s) p(sprintf('A(%d, %s)', m - 1, s))), p);
end
end
disp(a(2, 1, @disp));

644:253
20/10/08 02:27:24.66 Gy7CYzaJ.net
藻前ら、なかなかやるなー
気に入った。

645:蟻人間
20/10/08 13:59:34.65 N89hoMl4.net
お題: ax**2+b*x+c==0という形の二次方程式を解き、全ての実数解と実数解の個数を表示する。

646:デフォルトの名無しさん
20/10/08 15:03:23.36 eK30Q5Ei.net
実数解はルートを含んだ形でいいのか?
あるいは小数点以下何桁まで正確に求めるのか?

647:蟻人間
20/10/08 15:04:48.84 N89hoMl4.net
>>635
浮動小数点数でいいよ。

648:デフォルトの名無しさん
20/10/08 21:36:29.64 Q4ykcHSC.net
>>633
∧_∧  / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
(    )  \_____
| | |
(__)_)

649:蟻人間
20/10/09 13:26:20.64 pUAVGuih.net
お題:計算ができる文章テンプレートを実装し、つるかめ算を自動生成せよ。
文章テンプレートの例:
「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。
足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。
カメは何匹いますか。」
変数は「$(変数名)」のように表し、その具体的な値は入力として与えられる。
計算式は{ }で囲って表す。
計算式は変数や定数、加減乗除の演算子、または丸カッコを含むことができる。
入力の例:「ツルの数=3, カメの数=4」

650:デフォルトの名無しさん
20/10/09 14:02:14.80 /NdRCF04.net
>>634 js
function quadraticWithCount(a, b, c) {
const inSqrt = b ** 2 - 4 * a * c
if (inSqrt < 0) return [[], 0]
const l = - b / (a * 2)
if (inSqrt === 0) return [[l], 1]
const r = Math.sqrt(inSqrt) / (a * 2)
return [[l - r, l + r], 2]
}
console.log(quadraticWithCount(3, -2, -1))
console.log(quadraticWithCount(3, 6, 3))
console.log(quadraticWithCount(1, 2, 3))
// [ [ -0.3333333333333333, 1 ], 2 ]
// [ [ -1 ], 1 ]
// [ [], 0 ]

651:蟻人間
20/10/09 14:14:06.07 LR5flFjI.net
>>638
追記: パーサーを作れない人はevalを用いても構わない。

652:デフォルトの名無しさん
20/10/09 14:14:59.57 /NdRCF04.net
>>634 js 改善
function quadratic(a, b, c) {
const rt = Math.sqrt(b ** 2 - 4 * a * c)
return [(-b + rt) / (2 * a), (-b - rt) / (2 * a)]
}
function quadraticReal(...abc) {
const ans = quadratic(...abc)
const [a1, a2] = ans
if (isNaN(a1)) return []
if (a1 === a2) return [a1]
return ans
}
const quadraticRealWithCount = (...abc) => addCount(quadraticReal(...abc))
const addCount = a => [a, a.length]
console.log(quadraticRealWithCount(3, -2, -1))
// [ [ 1, -0.3333333333333333 ], 2 ]
console.log(quadraticRealWithCount(3, 6, 3))
// [ [ -1 ], 1 ]
console.log(quadraticRealWithCount(1, 2, 3))
// [ [], 0 ]

653:デフォルトの名無しさん
20/10/09 17:52:52.10 gniylpO4.net
>>638 Ruby
ツルの数 = 3
カメの数 = 4
Template =<<_EOT_
「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。
足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。
カメは何匹いますか。」
_EOT_
puts Template.gsub( /\{(.*?)\}/ ){ eval $1.gsub( /\$\((.*?)\)/ ){ $1 } }

654:253
20/10/09 22:43:14.04 /QeZd0d9.net
>>638 Perl5
use utf8;
no warnings 'utf8';
$ツルの数 = 3;
$カメの数 = 4;
print <<EOF
「ツルとカメが合わせて@{[${ツルの数}+${カメの数}]}います。
足の合計本数が@{[${ツルの数}*2+${カメの数}*4]}本です。
カメは何匹いますか。」
EOF

実行結果
~ $ perl 18_633_ツルの数+カメの数.pl
「ツルとカメが合わせて7います。
足の合計本数が22本です。
カメは何匹いますか。」

655:蟻人間
20/10/09 23:14:45.18 LR5flFjI.net
お題: 2つのRGBカラーが#RRGGBB形式で与えられる(RRGGBBは六桁の十六進数とする)。
2つの中間色を#RRGGBB形式で出力せよ。
可能ならばこれら3つの色をカラーバーとして表示せよ。

656:蟻人間
20/10/09 23:26:06.11 LR5flFjI.net
>>644
入力例1: #112233, #99AAFF
入力例2: #AD03ff, #a39e75

657:デフォルトの名無しさん
20/10/09 23:55:14.23 ACx6TREf.net
>>644,645
自明な入力例だけを示しても、出力例も出さないと意味ないだろう。
2色の中間色ってのが曖昧じゃね?
単にR,G,Bそれぞれの平均を取るだけなのか、赤と紫の中間が赤紫になるように循環する色相で中間をとるのかとか。

658:デフォルトの名無しさん
20/10/10 02:56:37.74 KFXrJR76.net
問題が玉石混合だなぁ

659:デフォルトの名無しさん
20/10/10 07:06:51.16 PdovQueR.net
>>643
>変数は「$(変数名)」のように表し、

660:デフォルトの名無しさん
20/10/10 07:45:17.48 nh4sk35x.net
お題: 20201010と出力してください。ただしコードに使っていい数字は1のみです。

661:デフォルトの名無しさん
20/10/10 08:25:49.31 qt6u2bFw.net
>>649 python
a=1;b=a+a;c=a-a
print(b,c,b,c,a,c,a,c,sep='')
#出力20201010

662:デフォルトの名無しさん
20/10/10 10:53:30.16 nh4sk35x.net
>>649 自分で js
const t = `
`.charCodeAt()
console.log(t + t + "" + (t + t) + t + t)
const m = "ϲ".charCodeAt()
console.log(m + m + "" + m)

663:デフォルトの名無しさん
20/10/10 12:06:27.17 0z4oJBva.net
>>649
js本日限定
new Date().toLocaleDateString().split(/-|\//).join``
//=> "20201010"

664:デフォルトの名無しさん
20/10/10 14:54:47.61 iOujIiR/.net
>>647
×こんごう
○こんこう

665:デフォルトの名無しさん
20/10/10 14:57:00.84 iOujIiR/.net
>>649
Java
URLリンク(paiza.io)

666:デフォルトの名無しさん
20/10/10 15:40:40.94 Duwb5Fsi.net
>>654
012にOIZ使うのセンスある

667:デフォルトの名無しさん
20/10/10 18:37:22.80 jNM1f0U4.net
>>649 C
URLリンク(ideone.com)

668:デフォルトの名無しさん
20/10/10 18:54:45.98 V01gi3BN.net
>>656
Windowsでもそのままでいけるのか?

669:蟻人間
20/10/10 19:24:31.52 c6WyhNHP.net
お題: 振動数1000Hzの音を1秒間発振せよ。

670:デフォルトの名無しさん
20/10/10 19:32:24.80 53GLINoh.net
>>649 c
URLリンク(ideone.com)

671:デフォルトの名無しさん
20/10/10 19:46:18.01 LCYuVeVr.net
haskell
import Data.Maybe
main = print $ product $ map ((fromJust).(flip lookup (zip ['\t'..] [1..]))) "&myC"

672:デフォルトの名無しさん
20/10/10 21:44:48.33 0z4oJBva.net
>>658 js
var ctx = new window.AudioContext
var osc = ctx.createOscillator()
osc.type = 'sine'
osc.frequency.value = 1000
osc.connect(ctx.destination)
osc.start()
osc.stop(1)

673:デフォルトの名無しさん
20/10/10 23:07:21.98 t1LUP7rm.net
>>649
haskell 改良
unicode = length . tail . (enumFromTo minBound)
main = print $ product $ map unicode "ാᝇ"

674:デフォルトの名無しさん
20/10/10 23:18:40.46 iOujIiR/.net
>>644
Java
URLリンク(paiza.io)
URLリンク(dotup.org)

675:デフォルトの名無しさん
20/10/11 00:16:06.04 6GsmNhIZ.net
>>649 JavaScript
[1+1,1-1,1+1,1-1,1,1-1,1,1-1].reduce((acc,n)=>acc+n,'')

676:デフォルトの名無しさん
20/10/11 01:54:01.50 eYi6TEVp.net
>>614
Java
URLリンク(paiza.io)

677:デフォルトの名無しさん
20/10/11 08:58:57.96 luIvAMCe.net
>>649 J
smoutput ,&":/ 'amp' i. 'papamama'

678:デフォルトの名無しさん
20/10/11 11:20:41.53 eXVrSXVr.net
>>649 bash
aa=1; bb=$((aa-aa)); cc=$aa$bb$aa$bb; printf "%d" $((cc+cc)) $cc; echo

679:デフォルトの名無しさん
20/10/11 17:59:24.67 /6XslNRS.net
>>638
Perl
URLリンク(paiza.io)
eval が使えて楽なので、つい。

680:デフォルトの名無しさん
20/10/11 18:12:54.16 eYi6TEVp.net
>>611
Java
URLリンク(paiza.io)

681:デフォルトの名無しさん
20/10/11 19:16:59.76 /6XslNRS.net
>>644
Kotlin
URLリンク(paiza.io)
paiza.io はHTMLで出力させてブラウザに表示できるのでカラーバーも出してみました。

682:デフォルトの名無しさん
20/10/11 19:36:20.38 eYi6TEVp.net
これは良いこと聞いた

683:デフォルトの名無しさん
20/10/11 19:48:34.94 ki6dTuuo.net
>>649 Common Lisp (SBCL, 処理系依存)
URLリンク(ideone.com)

684:デフォルトの名無しさん
20/10/11 20:05:13.72 FQjAt+Dq.net
>>672
かわいい

685:デフォルトの名無しさん
20/10/11 20:30:57.80 vt3DXswM.net
>>649 brainfuck
>+++++++[<+++++++>-]<+.--.++.--.+.-.+.-.

686:
20/10/11 23:30:32.44 A2vGg89g.net
>>614
C(C++) スレリンク(tech板:70番)

687:蟻人間
20/10/11 23:57:26.40 4cQ/GxGI.net
お題: 整数0~10の一様分布の乱数を百回発生させて、その統計結果を基に各整数を横軸、回数を縦軸とする棒グラフ(ヒストグラム)を描画し(棒の最大幅32字)、ほぼ一様であることを確かめなさい。

688:デフォルトの名無しさん
20/10/11 23:59:14.77 B+MSoWxK.net
paiza.io は、text, html, json で出力できるのか
html も、部分的なタグだけを書いても動くのか

689:蟻人間
20/10/12 00:01:01.03 rx5xRSFU.net
>>676 訂正。
(誤)各整数を横軸、回数を縦軸とする棒グラフ
(正)各整数を縦軸、回数を横軸とする棒グラフ

690:デフォルトの名無しさん
20/10/12 01:06:07.97 eqKg5iqj.net
haskell

import Data.List
import System.Random
trial records = do
x <- randomRIO (0, 1) :: IO Double
return $ (truncate $ x * 11) : records
experience = iterate (>>= trial) (return [0..10])
showrecord (x,y) = let
clsstr = id
$ reverse
$ take 2
$ ( ++ (repeat '0'))
$ reverse
$ show x
barstr = replicate y '*'
in concat [ clsstr," ", barstr,"\n"]
main = do
records <- experience !! 100
putStr $ id
$ concat
$ map showrecord
$ map (\x -> (head x, length $ tail x))
$ group
$ sort
$ records

691:デフォルトの名無しさん
20/10/12 01:14:47.03 hVCmG980.net
>>649
Kotlin
URLリンク(paiza.io)
ちょっと変わった感じにしようと思ってこうした。

692:デフォルトの名無しさん
20/10/12 08:18:41.49 fHHXzdlp.net
>>676
二項分布になるんじゃないかなあ

693:デフォルトの名無しさん
20/10/12 16:10:06.27 Wx/lfAmjI
「頭使えよ貧乏人」に思う、寝てても金入るシステムを作る人
URLリンク(www.youtube.com)
バカ不平多し★へつらい生きてるからリストラ対象
URLリンク(www.youtube.com)
勝ちは偶然、負けは必然★負けて消えた人に足りなかったものは?
URLリンク(www.youtube.com)
リーダー達の給料が高いのは単純労働者じゃないから
URLリンク(www.youtube.com)
できません、自信がありません、無理です★ボンクラにしたのは誰?
URLリンク(www.youtube.com)
稼げない人へ★�


694:﨣、材こそ稼げない分野が分かるhttps://www.youtube.com/watch?v=x_2nSmlx3og9割の人は、ただの作業員★自学自習こそ仕事の基本https://www.youtube.com/watch?v=vIGKDmmBJcsサラリーマン、10年経てばボンクラ説https://www.youtube.com/watch?v=QdfVJnVuLlY



695:デフォルトの名無しさん
20/10/14 15:32:12.46 M1NONSBM.net
>>658 オーディオ系はシステム依存度が高いから余りサンプルが出てこないね。 WindowsやMacOSなら簡単そうだが
1kHz の音源ファイルを使うのは違反かな?

696:蟻人間
20/10/14 17:27:12.50 TNR/wFHW.net
>>658 C/C++ with Win32
#include <windows.h>
int main(void)
{
Beep(1000, 1000);
}

697:デフォルトの名無しさん
20/10/14 17:57:41.59 qOYZdiW9.net
答え出てきても試しようがない

698:蟻人間
20/10/14 18:19:22.34 TNR/wFHW.net
>>658 Python with Windows
import winsound
winsound.Beep(1000, 1000);

699:蟻人間
20/10/14 18:24:27.45 TNR/wFHW.net
>>658 Python with Mac
import os
os.system('play -n synth 1 sin 1000');

700:デフォルトの名無しさん
20/10/14 18:36:34.21 Azmo5ss/.net
シェル経由でSoX playコマンド呼んでるだけやんけ
Pythonもmacも関係ねぇわ

701:デフォルトの名無しさん
20/10/14 19:17:28.35 Y0U/d7P+.net
OSにつく前置詞はwithじゃなくてonだろハゲ

702:デフォルトの名無しさん
20/10/14 19:30:29.09 pZU5VHHG.net
試すと音が出て煩そうだから試す気になれない。

703:蟻人間
20/10/14 19:50:02.82 TNR/wFHW.net
テレビの自主規制音と同じ音だよ。
URLリンク(ja.wikipedia.org)

704:デフォルトの名無しさん
20/10/15 00:45:55.69 BUh584nA.net
>>688 iOS じゃ、play コマンドがなさそうなんだよな。

705:デフォルトの名無しさん
20/10/15 01:18:37.79 fqrOjoDi.net
結局このスレで盛り上がるのは環境によらず言語によらず、でも多少は骨のあるようなお題なんだよな
へぇその言語ならそんなにキレイに書けるのかとか普段自分が使ってない言語ではどうやって実現できるのか眺めたりするのが面白い
音鳴らすなんてお題として面白いわけがない

706:デフォルトの名無しさん
20/10/15 01:40:28.46 S6IC+plr.net
ヒント:出題者

707:デフォルトの名無しさん
20/10/15 11:44:28.12 cDg3UiVL.net
蟻人間さんへのお題:
文字列を受け取って、RFC 5322にしたがってSubjectヘッダを出力してください(MUST、SHOULDを満たすこと)
文字コードはUTF-8、エンコーディングはBエンコードを使用してください

708:蟻人間
20/10/15 13:28:00.67 s1gNbcw/.net
>>695 Python
text = 'Re: Re: This is a subject text. This is a subject text. This is a subject text.'
if text[0:4] == 'Re: ':
__while text[0:4] == 'Re: ':
____text = text[4:]
__text = 'Re: ' + text
import base64
text = 'Subject: ' + base64.b64encode(text.encode('utf-8')).decode('ascii');
ary = []
while len(text) > 78:
__ary.append(text[0:78])
__text = text[78:]
ary.append(text)
import platform
if platform.system() == 'Windows':
__for item in ary:
____print(item)
else:
__for item in ary:
____print(item, end="\r\n")

709:蟻人間
20/10/15 13:49:36.74 IXtC9lOP.net
>>696 訂正。
(誤) while len(text) > 78:
(正) while len(text) >= 78:

710:デフォルトの名無しさん
20/10/15 14:30:46.93 cDg3UiVL.net
>>696
いろいろ違うので・・・メールのソース眺めたが良いです

711:デフォルトの名無しさん
20/10/15 19:14:52.90 QzXinxJa.net
頭の悪いお題を連投してるやつはやっぱり頭悪いんだな

712:デフォルトの名無しさん
20/10/15 19:22:03.88 cDg3UiVL.net
そんなことないと思うけどな
あまり他人の悪口言わない方が良いよ

713:デフォルトの名無しさん
20/10/15 19:28:33.00 QzXinxJa.net
くっそみたいなお題延々と出し続けてウザいじゃん

714:デフォルトの名無しさん
20/10/15 19:29:59.48 MTvivIgb.net
>>638なんかはいいと思うんだけどな
eval使えないHaskellerにはいい練習問題になってる

715:デフォルトの名無しさん
20/10/15 19:38:14.90 QzXinxJa.net
ウェブアプリつくれだのGUIアプリつくれだの酷い事散々言いまくってるじゃん
◆QZaw55cn4cの方がまだマシ

716:デフォルトの名無しさん
20/10/15 19:40:03.02 MTvivIgb.net
まぁ音出せとかカラーバー出せとかはクソお題だな

717:デフォルトの名無しさん
20/10/16 19:48:26.76 2tllxc0n.net
お題
自然数nを 2進数にした時、 1が連続する個数の最大値を求める。

20201016 -> 5

718:デフォルトの名無しさん
20/10/16 20:25:28.88 YQH8/KbW.net
haskell
import Data.List
maxConsOne = maximum . map length . filter ((==1).head) . group . unfoldr (\n ->if n == 0 then Nothing else Just (mod n 2, div n 2))
main = print $ maxConsOne $ 20201016
----
5

719:デフォルトの名無しさん
20/10/16 21:03:20.03 a9PKFHNt.net
>>705 ruby
f = ->(n) {n.to_s(2).chars.chunk(&:itself).map {|k, a| k == '1' ? a.size : 0}.max}

720:デフォルトの名無しさん
20/10/16 21:35:06.98 XtprH8ZD.net
>>705 JavaScript
const f = (n = 0) => Math.max(...(n.toString(2).match(/1+/g) ?? ['']).map(m => m.length))
console.log(f(20201016)) //=> 5

721:253
20/10/16 23:46:14.30 5gS0lg4h.net
>>705 Perl5
use List::Util max;
print max map{length} sprintf('%b', 20201016) =~ /(1+)/g;

実行結果
$ perl 18_695_bin1.pl
5

722:デフォルトの名無しさん
20/10/17 00:12:43.05 7ct7R1y+.net
>>705 Ruby
p 20201016.to_s(2).split("0").max.size

723:デフォルトの名無しさん
20/10/17 00:24:53.85 u2s9P3C4.net
haskell
無名関数というインチキ使ってしまったので再挑戦バージョン
import Data.List
main = print $ maximum . map sum . group . map (flip mod 2) . takeWhile (/=0) . iterate (flip div 2) $ 20201016

724:
20/10/17 00:46:45.25 4JRxXuyk.net
>>705
URLリンク(ideone.com)

725:デフォルトの名無しさん
20/10/17 01:58:38.41 S6LboNFt.net
>>705 Ruby
n = 20201016
nl = 0
while n > 0
nl = ((nc = (n.odd?)? nc + 1 : 0) > nl)? nc : nl
n >>= 1
end
puts nl

726:デフォルトの名無しさん
20/10/17 01:59:32.64 u2s9P3C4.net
>>712
125の時1になった

727:デフォルトの名無しさん
20/10/17 02:41:53.51 AbkDXvLA.net
これだからQZ

728:
20/10/17 02:53:09.41 4JRxXuyk.net
>>705
C++: URLリンク(ideone.com)
>>712 にはロジックに欠陥がありました
>>714
ご指摘ありがとうございます。

729:703
20/10/17 09:22:46.57 S6LboNFt.net
>>714
自分の >>713
- nl = 0
+ nc = nl = 0

730:デフォルトの名無しさん
20/10/17 12:19:37.13 a+zi+w45.net
>>705 C++
URLリンク(wandbox.org)

731:デフォルトの名無しさん
20/10/17 13:46:27.15 eBu6AjRf.net
>>705 C
URLリンク(ideone.com)

732:デフォルトの名無しさん
20/10/17 18:57:16.23 S6LboNFt.net
>>705 Ruby
n = 20201016
i = 0
while n != 0
n &= n << 1
i += 1
end
puts i

733:デフォルトの名無しさん
20/10/17 19:11:03.54 wXdm0x1E.net
>>720
うまいやり方だな。それには気付かなかった。

734:デフォルトの名無しさん
20/10/17 19:29:10.40 wXdm0x1E.net
>>705
Kotlin script
2進数文字列に変換してから 0 を区切り文字にして分割してその中の一番長い文字列の長さを出すというやり方。
fun max1(n: Int) = n.toString(2).split('0').map { it.length }.max()
println(max1(20201016))
これで 5 が出る。
同じやり方を perl5 で(特にモジュール使わずに)やるとこんな感じ。
perl -e '$n=20201016; $m = (sort { $b <=> $a } map { length($_) } (split /0+/, sprintf("%b", $n)))[0]; print "$m\n"'
同じく5が出る。

735:デフォルトの名無しさん
20/10/17 20:05:12.33 vimxgZ9f.net
>>705 JavaScript
let num = 20201016
let ans = num.toString(2).split`0`.sort().pop().length
console.log(ans) //=> 5

736:デフォルトの名無しさん
20/10/17 20:50:55.84 w8j3NnhR.net
>>705 octave
URLリンク(ideone.com)
f = @(n) max(cellfun(@numel, strsplit(dec2bin(n), '0')));
f(20201016)

737:デフォルトの名無しさん
20/10/17 20:54:06.81 frzgm+pU.net
>>705
Perl
URLリンク(paiza.io)

738:デフォルトの名無しさん
20/10/17 23:22:21.08 P3PLPttw.net
いつもRubyの人からなにかしら学ぶことがある

739:デフォルトの名無しさん
20/10/18 00:42:32.49 nYmbGZmV.net
ハトにエサを与えないで下さい

740:デフォルトの名無しさん
20/10/18 01:06:12.01 qT62bbHa.net
QZは自分の頭が悪いのをわざわざ周知してもらうためにクソコードを晒すのか
ドMだな

741:デフォルトの名無しさん
20/10/18 03:42:01.18 DpwMGaW+.net
>>720
なるほどな、感心した
n>>1でもいいわけだな

742:デフォルトの名無しさん
20/10/18 04:21:53.35 xWXtsYNK.net
>>710 のほうが速いと思うが

743:デフォルトの名無しさん
20/10/18 04:36:21.54 F/EhVBet.net
rubyよく分からないけど>>720の方が100倍くらいは速そうに思える

744:デフォルトの名無しさん
20/10/18 05:53:44.51 28u9FaXE.net
うん。速そうだね。数値計算しかしてないし。

745:デフォルトの名無しさん
20/10/18 10:06:25.57 ARbR7jXS.net
20201016みたいに桁数が少ないならそうだけど桁数が増えるとルーブが答え×桁数回だからアルゴリズムそのものは遅い
桁数が少ないうちは内部関数しか使ってない利点で早いとは思うけど

746:デフォルトの名無しさん
20/10/18 12:07:22.14 GUbLWvo/.net
>>733
>>710,720 をベンチマークで比較してみた
URLリンク(ideone.com)
URLリンク(ideone.com)
20201016 では 5~6倍
巨大な数だと 7000倍以上

747:
20/10/18 15:53:00.51 xUpUEWAV.net
>>703
残念ながら、私の出題もイマイチ人気がありませんでした‥‥

748:デフォルトの名無しさん
20/10/18 21:20:25.30 wanN/5Zd.net
>>695
Java
URLリンク(paiza.io)

749:デフォルトの名無しさん
20/10/18 21:43:52.67 wanN/5Zd.net
>>678
Java
URLリンク(paiza.io)

750:デフォルトの名無しさん
20/10/18 22:06:12.69 wanN/5Zd.net
>>676
Java
URLリンク(paiza.io)

751:デフォルトの名無しさん
20/10/18 22:14:01.64 wanN/5Zd.net
>>705
Java
URLリンク(paiza.io)

752:デフォルトの名無しさん
20/10/18 22:45:56.62 F/EhVBet.net
>>734
x = n
while x != 0
x &= x << 1
i += 1
end
ruby知らないから適当に書いたけど
こんな感じにしないと二回目以降nが0でやってるっぽい
こうすると22倍くらいの差だった

753:デフォルトの名無しさん
20/10/18 22:54:22.98 F/EhVBet.net
連続してるビット数が多いときはこの方が速くなったけど
すごいごちゃごちゃになった
i = 0
s = 1
x = n
while x != 0
t = x & (x << s)
if t == 0 then
if s == 1 then
i += 1
break
end
s = 1
else
x = t
i += s
s = (s << 1)
end
end

754:デフォルトの名無しさん
20/10/18 22:56:30.98 QW0aA1Hz.net
>>734
GJ

755:デフォルトの名無しさん
20/10/19 06:30:07.92 8QFJcUQW.net
>>705
echo "obase=2; 20201016" | bc | sed 's/./&\n/g' | uniq -c | perl -lane 'if ($M < $F[0]) {$M = $F[0]}; END{print $M}'
5

756:724
20/10/19 15:26:08.35 u+lqDWSF.net
>>740
ご指摘の通りでした
URLリンク(ideone.com)
を修正しました
>>720 は 1の連続が多いと弱いですね

757:デフォルトの名無しさん
20/10/19 17:41:48.20 Sd7Rn+fr.net
お題
2^(1/3)を百桁表示せよ
出力
1.2599210498948731647672106072782283505702514647015079800819751121552996765139594837293965624362550941543102560356156652593990240
参考 
a(n+3) = 3*a(n+2) + 3*a(n+1) + an
a(1) = 3, a(2)=3, a(3)=15
で決まる数列について
min (a(n)/a(n+1), a(n+1)/a(n+2), a(n+3)/a(n+3) )
. < 2^(1/3)-1
. max (a(n)/a(n+1), a(n+1)/a(n+2), a(n+2)/a(n+3) )
で lim a(n)/a(n+1) = 2^(1/3)-1となる

758:デフォルトの名無しさん
20/10/19 21:36:44.38 gq9726ze.net
>>743
echo "obase=2; 20201016" | bc | sed 's/0\+/\n/g' | wc -L
でよくね?

759:デフォルトの名無しさん
20/10/19 22:00:17.27 gq9726ze.net
>>745 Bash
$ echo "scale=100;e(l(2) / 3)" | bc -l
1.25992104989487316476721060727822835057025146470150
79800819751121552996765139594837293965624362550940

760:デフォルトの名無しさん
20/10/19 22:30:56.87 14xSvmON.net
>>745 dc
dcには平方根の演算子はあるが立方根はないので
c^(1/3) = sqrt(c/sqrt(c/sqrt(c/...)))
と変形して適当に反復
100k[2z333>av/]dsaxp
1.2599210498948731647672106072782283505702514647015079800819751121552\
996765139594837293965624362550941

761:デフォルトの名無しさん
20/10/19 23:54:32.40 mPlPc+C9.net
>>745
参考を誰も参考にしてくれないのにワロタ
参考を元に作ったコード
Haskell
URLリンク(ideone.com)
ちなみにrubyのpi.rbが同じテクニック使ってます
そっちは定数係数でない三項間関係の漸化式パージョン

762:デフォルトの名無しさん
20/10/20 02:36:31.61 gFGmv7lM.net
>>746
たしかに

763:デフォルトの名無しさん
20/10/20 04:08:13.14 Mf7a0fdE.net
おっせえじゃん

764:デフォルトの名無しさん
20/10/20 21:07:35.93 hsuNVmIy.net
お題:ぼくがかんがえたさいきょうのちょうわへいきん
2変数調和平均 f(x, y) = 2 / (1 / x + 1 / y)
但し xまたはyがゼロの時、f(x, y) == 0
の計算を考える。
Cのdoubleに相当する精度で計算する際に、理論値(≒多倍長精度で計算したものを
double相当に丸めたもの)と一致しない割合(エラー率)をモンテカルロ法で求めよ。
x, yは、正規分布N(0, 1)の絶対値に従うものとする。
発展的なお題:
前掲の調和平均の式を変形し、エラー率の変化を調べよ。例えば、
f(x, y) = 2 * x * y / (x + y)
のエラー率は、前掲の式と比較してどうだろうか?
また、2 / (1 / x + 1 / y)よりエラー率が低い式は在るだろうか?
発展的なお題その2:
x, yがベンフォードの法則に従う場合はどうなるか。
正規分布N(0, 1)の絶対値の場合と比べて、エラー率の順位は入れ替わるだろうか?

765:デフォルトの名無しさん
20/10/22 01:17:43.95 rA+WIIWx.net
...but nobody answered

766:253
20/10/23 09:17:13.74 7L0FHKID.net
正規乱数をモンテカルロ法で算出して
doubleと多倍長浮動小数点でそれぞれ計差した2変数調和平均に
差がある率を求めれば良いの?
正規乱数なら書かなくともライブラリにあるんだよね。
あるいは誤り率の計算そのものにモンテカルロ法を使うようなやり方なのかな

767:デフォルトの名無しさん
20/10/23 14:48:32.25 oxO2c12D.net
次のプリーズ

768:デフォルトの名無しさん
20/10/23 20:02:36.14 Vzf4XOui.net
お題
乱数を使ってシミュレーションしてください
ジョーカーを除くトランプ52枚から1枚抜き取って箱に入れました
その後、残った51枚から3枚引いて確認したら3枚ともダイヤでした
では最初に抜き取った箱の中が1枚がダイヤである確率はいくらか?

769:デフォルトの名無しさん
20/10/23 20:27:24.17 LovVc5SM.net
>>756 Ruby
DECK = [*0..51]
def hoge
a, *b = DECK.sample(4) until b&.all?{|v| v % 4 == 0}
a % 4 == 0
end
def fuga(n)
1.0 * n.times.count{hoge} / n
end
p fuga(1e6) # => 0.20414
p 10 / 59 # => 0.20408163265306123

770:デフォルトの名無しさん
20/10/23 20:46:02.34 LovVc5SM.net
途中で送信してしまった
99%信頼区間は 0.20414±0.0010382 => [0.2031018, 0.2051782]
理論値は 10/49 = 0.20408163265306123

771:デフォルトの名無しさん
20/10/23 20:49:11.91 5NWyTruo.net
確認前後での確率変動を出せ、っていうお題じゃねえのコレ

772:デフォルトの名無しさん
20/10/24 01:58:03.71 6bv42JD2.net
お題
ジョーカー除く52枚のカードがある
スートを表すS,H,D,Cと、A,K,Q,J,X,9,8,7,6,5,4,3,2との2文字からなる文字列でカードの柄を表すこととする。
当然ながら52枚のうちどの2枚も同じ柄でない
この一組のカードを使ってポーカーゲームをする。
すなわち、初手のカード5枚を配られたプレイヤーは、そのうち0枚以上5枚以下のカードを場に捨てて、同じ枚数のカードを残りの山札47枚から引くことができる。
このときどのカードが選ばれるかは無作為であり、プレイヤーは選択できない。
さて、プレイヤーは、初手のカード5枚に対して、最終的に手に残る5枚のカードをポーカーのルールで評価して得られる配点の期待値が最も高くなるように捨て札を決めたい。
入力としてカード5枚が与えられたとき、そのような捨て札の組み合わせを求めるプログラムを記述せよ。
ここで、ポーカーの役と配点の対応はプログラムのパラメータとして組み込んで良い。

773:デフォルトの名無しさん
20/10/24 21:09:47.85 xQuuF55s.net
>>760
// 任意の役の配点を0とする
printf(0);

774:デフォルトの名無しさん
20/10/24 23:43:41.92 DlOr4HzX.net
>>756
Java
URLリンク(paiza.io)

775:デフォルトの名無しさん
20/10/25 09:27:41.37 dKQi7OF0.net
>>760 Perl5
URLリンク(ideone.com)
役のレートは某ゲームのものを使用
ノーペアのとき
全部変える�


776:謔�1枚残したほうが有利という結果が出てちょっと驚いてる



777:デフォルトの名無しさん
20/10/25 10:49:49.59 zd7LSfWt.net
3が1枚来てて、3が3枚残ってるなら、
・手元の3を捨てると、3が来ても何も起こらない
・手元に3を残すと、3が来るとワンペアになる
つまり、残りのカードを引けるかどうか、になる
>>756の亜種

778:デフォルトの名無しさん
20/10/25 11:44:16.63 c/nOQwtG.net
746はシミュレーションも何もただの引っ掛け問題でしょ
モンティホール問題の方が引っ掛け問としては出来が良い

779:デフォルトの名無しさん
20/10/25 12:58:23.56 vQGWPLvq.net
引っかけも何も条件付確率の初歩の初歩の問題だろ

780:デフォルトの名無しさん
20/10/25 14:14:17.31 tOCt4zCM.net
52枚トランプの束で2枚目から4枚目までがダイアであるような場合に限定してその内先頭もダイアであるような場合は全体の何バーセントかを問う問題

781:742
20/10/26 01:17:42.67 LimhPZzI.net
>>754
正規乱数自体は既存のライブラリで(Pythonならnumpy.random.randnとか)。
例えば、最初のお題(2/(1/x+1/y)で計算するやつ)は、34%位のエラー率になります。

782:253
20/10/27 00:51:04.61 uqMOOUWw.net
そうすると俺にはモンテカルロ法をわざわざ使うところが
どこかよく分からないんだよね…

783:デフォルトの名無しさん
20/10/27 23:07:51.35 9NNPSda/.net
結局>>752は数学的にはどういう意味なんやろ
x,yがN(0,1)に従う独立確率変数、
ρ:R→RがDouble型に丸める関数(Doubleのレンジに入らない確率はほとんど0だから無視)、
h(x,y)=2xy/(x+y)
としたとき
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
って事?

784:253
20/10/28 00:01:38.74 Jno143Es.net
面白い記号だなそれ。
だが、他の人にも伝わるように書いた方が話が広がってよいよ。
どんなに数学が得意な人でも本当に優秀な人はそうすることができると思う

785:デフォルトの名無しさん
20/10/28 00:17:22.90 3yQQm3er.net
Φρズと書いてハイロウズと読みます

786:デフォルトの名無しさん
20/10/28 00:21:17.79 n11gpLQR.net
煽りでもなく素直に疑問なのだが>>770のどこら辺がわからないんだ?
正規分布の下りか?

787:253
20/10/28 00:30:53.43 Jno143Es.net
>>772
マジレスしようと思ったが、そういう問題じゃないんだよ
言葉で書きゃー2,3行のことなんだから
言葉で人に伝わるように書けばいいだろ

と、突き放しちゃ実も蓋も無いので少しマジレスすると
ρ:R→R が写像なのは分かる。
がしかしだ
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
って、お前の教室のホワイトボードじゃねんだぞ。
そんなんでどうっやって世の人と付き合ってんだか…

788:253
20/10/28 00:40:32.18 Jno143Es.net
大体、P()てのは何の関数だ。
どこにでもあるような関数名だが、一般的な関数か?
いや、そんなことの説明は要らない
お前の言いたいことはそんな自己流の式よりも
手短な読んで分かる日本語で書けるはずだ
いいやP()に限らない、お前のレスは一事が万事そんな感じ
一からからやり直せ
そしたら相手してやる

789:デフォルトの名無しさん
20/10/28 00:42:08.54 n11gpLQR.net
>>775
文脈から明らかにP(A)はAが起こる確率でしょうが
ちなみに俺は>>770じゃないんで

790:253
20/10/28 00:43:23.90 Jno143Es.net
>>776
それ関数じゃないだろ。何で関数として書くんだ。
どういう関数空間なんだ?

791:253
20/10/28 00:47:05.09 Jno143Es.net
簡単なことを
わざわざ難しいことのように書くのは
有能な人のすることではない

792:デフォルトの名無しさん
20/10/28 00:51:02.28 n11gpLQR.net
>>777
落ち着けよお前
P(事象A) := 事象Aが起こる確率 なんて高校数学の範疇だぞ
>>770が殊更ペダンチックには感じない

793:253
20/10/28 01:00:33.01 Jno143Es.net
>>779
別に落ち着いているけど
これか
URLリンク(ja.wikipedia.org)
P()が確立っていつから?
俺が大学の頃まではこういう記法は見た記憶が無いんだけど
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
これは言葉で書いたらもっと分かりやすくならないのか?

794:253
20/10/28 01:15:04.26 Jno143Es.net
結局 >>770
2 / (1 / x + 1 / y)をdoubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合
この一行をわざわざ他の人に分かりにくい式で再度書いているだけのこと
繰り返しだし分かりにくいし
意味(doubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合)
が欠落している
そういうことに気づきな

795:デフォルトの名無しさん
20/10/28 01:17:27.13 6h0Rpnv/.net
多分ですけど、あなた以外はそこまでわかりにくい表現だとは感じていないのだと思いますよ

796:253
20/10/28 01:19:14.69 Jno143Es.net
まじかw
そしたら回答山盛りだ
お前もさんも回答よろしくな

797:デフォルトの名無しさん
20/10/28 01:20:24.09 6h0Rpnv/.net
>>752の意味するところが数学的に自明になればおのずと回答も付くでしょう

798:253
20/10/28 01:20:47.31 Jno143Es.net
蛇足だが、あの式で意味がわかった上で
まさか回答できなかったら、単なる無能だからな

799:253
20/10/28 01:27:14.39 Jno143Es.net
>>784
参考までにあなたは今までどのような回答を投稿されましたか?

800:デフォルトの名無しさん
20/10/28 01:29:09.84 3yQQm3er.net
>>771
> 面白い記号だなそれ。
で、結局面白い記号って何だったの?

801:253
20/10/28 01:30:24.94 Jno143Es.net
ふふ、それは
ヒ・ミ・ツ

802:デフォルトの名無しさん
20/10/28 01:43:43.54 3yQQm3er.net
教科書ないから高校数学 確率で一番上に出たやつ。
URLリンク(studysapuri.jp)
やっぱ高校の教科書に載ってたよなあww
仮に載ってなかったとして大学で使う書籍にもP載ってないって?w
> 俺が大学の頃まではこういう記法は見た記憶が無いんだけど

803:253
20/10/28 01:56:33.39 Jno143Es.net
ゆとり以降だなそりゃ

804:デフォルトの名無しさん
20/10/28 02:11:35.07 d52OC3St.net
恥の上塗りするくらいなら黙ってればいいのに

805:253
20/10/28 02:16:39.09 FRCNqyyj.net
じゃあ何か自慢の回答でもしてよ

806:742
20/10/28 05:10:48.17 MEeLXnFm.net
>>770
2/(1/x+1/y)

2*x*y/(x+y)
と変形した場合だと、36%位です(100万回試行してみた)。

807:デフォルトの名無しさん
20/10/28 06:02:02.77 W3KKdO+Q.net
>>752 C
URLリンク(ideone.com)
2 / (1 / x + 1 / y) のエラー率は 38.5%
2 * x * y / (x + y) のエラー率は 40.4%
と出た

808:742
20/10/28 12:23:39.00 jim4KuYP.net
>>794
h0の計算は、xdやxdをlong doubleにcastする感じで!
>double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));

809:742
20/10/28 13:16:35.16 jim4KuYP.net
間違えました
double h0 = ( xd == 0. || yd == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));

810:デフォルトの名無しさん
20/10/29 00:16:48.93 GFOWX4AY.net
お題:言語機能のみを使い単方向リストを実装しメソッドpush


811:とpopを実装せよ pushはリスト末尾にノードをプッシュし、popはリスト末尾からノードをポップする ノードの持つ値は整数とする



812:デフォルトの名無しさん
20/10/29 00:52:01.80 wtq/xrTf.net
複数pushできるの?
popも個数指定できるの?一個ずつ?
pushの戻り値はリスト自身?入れた値?成否?

813:デフォルトの名無しさん
20/10/29 01:01:50.46 GFOWX4AY.net
>>797
>>798
pushもpopも値は1つずつ
pushの戻り値はなんでもいい

814:デフォルトの名無しさん
20/10/29 10:47:03.25 jsAu6jIB.net
>>797 js
入出力のサンプルケース書いてないやつ絶対自分はやってないだろ
class SinglyLinkedList {
push(value) {
this.head = { next: this.head, value }
}
pop() {
if (!this.head) return
this.head = this.head.next
}
str() {
let { head } = this, s = ""
while (head) {
s += head.value + ", "
head = head.next
}
return s
}
}

815:デフォルトの名無しさん
20/10/29 12:03:58.95 GFOWX4AY.net
>>800
なんで>>797,799の仕様でこんな実装になるんだ?
お題ちゃんと読んでる?

816:デフォルトの名無しさん
20/10/29 12:11:08.30 moZIRBYC.net
>>801
「言語機能のみを使い」は引っかかる表現だったけどそれのことかい?

817:デフォルトの名無しさん
20/10/29 12:16:22.08 95aSRVZj.net
オレもこの「言語機能のみを使い」がわからなかった
「ライブラリ関数使うな」か「文字列操作関数のみを使い」かどっちかかなと
わからんから様子見

818:デフォルトの名無しさん
20/10/29 12:18:16.67 GFOWX4AY.net
>>802
>>800
は787の仕様としてただしかったわ
すまんな
こっちのお題の定義があいまいすぎたらしい
言語機能は問題ない

819:デフォルトの名無しさん
20/10/29 12:21:59.18 GFOWX4AY.net
>>803
ライブラリ使うなって言いたかった
あとお題提出前の実装については>>800に比べるとかなり冗長な実装をしてある
ここに晒す気はないが

820:デフォルトの名無しさん
20/10/29 12:33:09.26 AOpu1Zek.net
stdlib.h使わずに作るの?

821:デフォルトの名無しさん
20/10/29 12:36:05.93 jsAu6jIB.net
>>804
まあええわ
俺もclassは久々に使ったけどできれば使わずに実装したかったわ

822:デフォルトの名無しさん
20/10/29 12:50:57.59 GFOWX4AY.net
>>807
こっちの実装したコードに比べるとそっちのコードはえらくシンプルなんだよな
軽くショックだわ
>>801みたいな口きいてすまんかったな

823:デフォルトの名無しさん
20/10/29 13:24:14.72 GFOWX4AY.net
>>806
リスト以外の実装は自由の想定
stdio.hも使っておk

824:デフォルトの名無しさん
20/10/29 13:27:39.52 GFOWX4AY.net
>>806
C/C++などの言語はmallocなどを使っても良いことにする

825:デフォルトの名無しさん
20/10/29 15:09:10.20 dNWGwdex.net
Haskellみたいな純粋関数だとそもそも標準ライブラリだけだと“状態”を作るのも難しいんだよな
同じ表現は永遠に同じ答えを返すからスタックの“状態”を変化させるというのがそもそもできない
それをなんとかするのに“モナド”というのがあるんだけど状態を処理する“ステートモナド”は標準ライブラリではないんだよな
ほとんど“準標準”だけど

826:デフォルトの名無しさん
20/10/29 16:24:06.73 95aSRVZj.net
State モナドを“準標準”と認めてもらえるなら簡単
Haskell
import Control.Monad.State
pop :: State [a] a
pop = do
a <- get
modify tail
return $ head a
push :: a -> State [a] ()
push x = do
modify ((x :))
return ()
test = do
push 1
push 2
push 3
a <- pop
b <- pop
c <- pop
return ([a,b,c])
main = print $ evalState test []
---
出力
[3,2,1]

827:
20/10/29 19:01:42.56 7aED6VYA.net
>>797
双方向リストの方が、後々いろいろ流用できてありがたいんですけど、それでも端方向リストでインプリしないといけないのですか?

828:デフォルトの名無しさん
20/10/29 19:02:59.18 c1P6mcgH.net
持て余すくらいなら「なるべく使わない」とか評価基準を示すだけにしとけばいいのに

829:デフォルトの名無しさん
20/10/29 19:32:46.09 EQ9lcE/o.net
>>803
全く同じこと思ってたわw

830:デフォルトの名無しさん
20/10/29 19:34:40.84 EQ9lcE/o.net
>>807
どうでもいいけどお前のIDもjsだsな

831:デフォルトの名無しさん
20/10/29 19:40:10.12 Pf0NRL7D.net
>>797 Brainfuck
push: <[>],
pop: <[>]<[-]<

832:デフォルトの名無しさん
20/10/29 20:59:03.61 zgfLAX1f.net
>>797
push,popってリストじゃなくてスタックの機能じゃ?
リストにさせるなら、先頭に追加してく方が速くて楽なのに。
push xs a = a:xs
pop (x:xs) = (xs,x)
反転させたいなら最後の最後にすべきだよ。
Haskell
― 使用例用main関数
main = do pushlist <- (return.push (Cons 1 (Cons 2 Null))) 3
(poplst, popval) <- (return.pop) pushlist
print pushlist
print popval
print poplst
― ここからお題のコード(整数に限定じゃないとダメならdataのList a/Cons aのaをIntに)
data List a = Null | Cons a (List a) deriving (Show)
push xs a = xs +++ (Cons a Null)
pop xs = (myinit xs, mylast xs)
Null +++ ys = ys
(Cons x xs) +++ ys = Cons x (xs +++ ys)
myinit (Cons x Null) = Null
myinit (Cons x xs) = Cons x (myinit xs)
mylast (Cons x Null) = x
mylast (Cons _ xs) = mylast xs

833:デフォルトの名無しさん
20/10/29 21:10:47.05 wtq/xrTf.net
>>797 JavaScript
class List {
#data = []
push(n) {
this.#data = [n, this.#data]
return this
}
pop() {
const [head, tail] = this.#data
if (tail) this.#data = tail;
return head
}
toArray() { return this.#data.flat(Infinity) }
toString() { return String(this.toArray()) }
toJSON() { return this.toArray() }
}
const list = new List
list
.push(0)
.push(7)
.push(2)
console.log('文字列: ' + list) //=> 文字列: 2,7,0
console.log('JSON: ' + JSON.stringify(list))
//=> JSON: {"test":[2,7,0]}
list.pop() //=> 2
list.pop() //=> 7
list.pop() //=> 0
list.pop() //=> undefined

834:デフォルトの名無しさん
20/10/29 21:13:39.21 wtq/xrTf.net
うわ
console.log('JSON: ' + JSON.stringify({'test': list})) //=> JSON: {"test":[2,7,0]}
だった

835:デフォルトの名無しさん
20/10/29 23:09:01.60 MaNQDMIt.net
>>813
お題
双方向リストをC89で実装してください

836:253
20/10/29 23:20:15.73 UgpGZWA4.net
>>817

837:デフォルトの名無しさん
20/10/29 23:24:39.19 3o7XtB23.net
>>797 ocaml
URLリンク(ideone.com)
type 'a _list = Nil | Cons of 'a * 'a _list
exception EmptyListException
let push xs x = Cons(x, xs)
let pop = function Nil -> raise EmptyListException | Cons (x, c) -> (x, c)
let rec each f = function Nil -> () | Cons (x, xs) -> f x; each f xs
let x, xs = pop (push (push (push Nil 1) 2) 3)
let () = print_int x; each print_int xs

838:デフォルトの名無しさん
20/10/29 23:26:08.36 GFOWX4AY.net
>>813
双方向書きたいってことなら書けば
お題は単方向だけど

839:デフォルトの名無しさん
20/10/30 00:06:20.24 aDtUVDPI.net
>>812を改良?
State [Int] だとあらかじめ用意した一個のstackしか使えない
噂に聞いたことあつたST monadで複数のスタック使えるように改造
Haskell
import Control.Monad
import Control.Monad.ST
import Data.STRef
data Stack a = Empty | N { car :: a, cdr :: Stack a } deriving (Show)
push stk val = modifySTRef stk (N val)
pop stk = car <$> readSTRef stk <* modifySTRef stk cdr
main = print $ runST $


840: do sA <- newSTRef Empty sB <- newSTRef Empty push sA 'o' >> push sA 'o' >>push sA 'f' push sB 'r' >> push sB 'a' >> push sB 'b' a1<-pop sA a2<-pop sA a3<-pop sA b1<-pop sB b2<-pop sB b3<-pop sB return [a1,a2,a2,b1,b2,b3] ---- 出力 "foobar"



841:253
20/10/30 00:07:47.66 hMjmzAXb.net
>>797 Perl5
公式マニュアルに書かれている通りsplice関数を使ってpush, popを記述できる。
 splice(@a,@a,0,$x); # push(@a, $x)
 splice(@a,-1);    # pop(@a)
なんだけどspliceを使わず言語のstatementだけでpush, pop関数を記述すると…こんな感じ
use v5.18;
use feature 'signatures';
no warnings "experimental::signatures";
sub Push($a, $x) {
 @$a = (@$a, $x);
}
sub Pop($a) {
 my @a = @$a;
 my $b = $a[-1];
 @$a = @a[0..$#a-1];
 $b;
}
my @s = (1,2,3); # test main
Push(\@s, 4);
say "@s";
my $y = Pop(\@s);
say $y;

実行結果
~ $ perl 18_787_push_pop.pl
1 2 3 4
4
1 2 3

842:253
20/10/30 00:09:56.81 hMjmzAXb.net
>>826
say $y;
の下に書いてあった最後の行
say "@s";
をコピペしそびれた…orz

843:253
20/10/30 00:22:38.86 hMjmzAXb.net
>>826 Pop関数はこっちの方がいいな、無駄なコピーもないし。
sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
 $b;
}

844:253
20/10/30 00:32:51.98 hMjmzAXb.net
>>828 deleteは削除したスカラー値を返すわ。だから以下でいいんだ
sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
}

845:253
20/10/30 00:34:30.90 hMjmzAXb.net
>>829 my $b = @$a[-1]; 不要だった…orz
sub Pop($a) {
 delete @$a[-1];
}

846:デフォルトの名無しさん
20/10/30 00:50:28.84 9RgBA+ge.net
>>797
Java
URLリンク(paiza.io)

847:デフォルトの名無しさん
20/10/30 02:22:50.19 9RgBA+ge.net
>>821
Java
URLリンク(paiza.io)

848:デフォルトの名無しさん
20/10/30 07:07:30.18 cChJ6BWU.net
>>822
あ?

849:デフォルトの名無しさん
20/10/30 23:30:40.86 hYhF3+Ov.net
Brainfuck読めないわ
覚えようかな

850:デフォルトの名無しさん
20/10/31 13:49:55.42 QnYm1bfS.net
お題
与えられた文字列を一文字ずつ見ていき"trick"と"treat"の5文字でどちらが先に揃うか判定してください(順序込み)
どちらもヒットしないときは考慮しなくていいです
treakOrTreat("trick or treat")
// => trick
treakOrTreat(". tr ick")
// => trick
treakOrTreat("ttrriecatk")
// => treat
treakOrTreat("tri kc eat")
// => treat
treakOrTreat("my money")
// => none

851:デフォルトの名無しさん
20/10/31 13:51:26.24 QnYm1bfS.net
>>835 js(self)
function treakOrTreat(text) {
const [tri] = /t.*r.*i.*c.*k/.exec(text) || []
const [tre] = /t.*r.*e.*a.*t/.exec(text) || []
if (!tri && !tre) return 'none'
if (!tri) return 'treat'
if (!tre) return 'trick'
return tri.length < tre.length ? "trick" : "treat"
}

852:デフォルトの名無しさん
20/10/31 14:54:50.69 HHhQTZ6R.net
関数名のミススペリングは修正していいですか

853:デフォルトの名無しさん
20/10/31 15:02:04.99 QnYm1bfS.net
ごっつtypoしてたすまんFIXME

854:デフォルトの名無しさん
20/10/31 15:07:31.21 DmLmDhBA.net
>>835 Common Lisp
URLリンク(ideone.com)

855:デフォルトの名無しさん
20/10/31 15:33:31.91 I05R+wBh.net
相変わらずキモいなあ、いつもの勝手に認定キッズ
ミュートにしてるという情報から相手が雑魚であるというぶっ飛んだ推論をする知性の欠片も持ち合わせない負け組

856:デフォルトの名無しさん
20/10/31 15:36:09.16 DmLmDhBA.net
>>835 Common Lisp
URLリンク(ideone.com)
>>839は無駄な条件判定(二つめの (null a))があったので修正

857:デフォルトの名無しさん
20/10/31 15:44:11.18 pGrSKCPz.net
>>835 JavaScript
function trickOrTreat(str = '') {
const trick = [...'trick']
const treat = [...'treat']
let result = 'none'
for (const c of str) {
if (c === trick[0]) trick.shift()
if (c === treat[0]) treat.shift()
if (!trick.length || !treat.length) {
result = trick.length ? 'treat' : 'trick'
break;
}
}
console.log(result)
}

858:デフォルトの名無しさん
20/10/31 15:54:22.22 i0S/O8KX.net
>>797
C
URLリンク(paiza.io)

859:デフォルトの名無しさん
20/10/31 16:42:52.45 B0ELcd4k.net
>>835
Haskell
URLリンク(ideone.com)

860:デフォルトの名無しさん
20/10/31 17:10:35.46 M62mfk9p.net
>>797
Perl
URLリンク(paiza.io)

861:デフォルトの名無しさん
20/10/31 17:42:14.32 /zmNVLOW.net
>>797
Kotlin
URLリンク(paiza.io)

862:デフォルトの名無しさん
20/10/31 21:33:28.24 g64iH70d.net
>>835
Java
URLリンク(paiza.io)

863:デフォルトの名無しさん
20/10/31 21:58:58.47 t2sIU1o6.net
>>835 Ruby
def trickOrTreat( str )
trick = str.match( /\A.*?t.*?r.*?i.*?c.*?k/ )
treat = str.match( /\A.*?t.*?r.*?e.*?a.*?t/ )
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick[0].size < treat[0].size)? 'trick' : 'treat'
end
[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}

864:デフォルトの名無しさん
20/10/31 22:19:45.63 B0ELcd4k.net
>>844
改定
やはりHaskellerがこのお題でparsec使わないのはダメという事で
Haskell
import Text.ParserCombinators.Parsec
makeP cs = foldl1 (<>) $ map (\c -> (many $ noneOf [c]) <> (return <$> anyChar) ) cs :: Parser String
first xs ys = case (runParser (makeP xs) () "" ys) of
Left _ -> (1, 0)
Right x -> (0, length x)
trickOrTreat x = case compare (first "trick" x) (first "treat" x) of
LT -> "trick"
GT -> "treat"
otherwise -> "Happy Halloween"
main = do
mapM_ (print.trickOrTreat) ["trick or treat", ". tr ick","ttrriecatk","tri kc eat","my money"]

865:デフォルトの名無しさん
20/10/31 22:49:38.34 pe+8/Oyn.net
>>835
C
#include<stdio.h>
char* trickOrTreat(char*s, char*tk, char*tt){
if(!*tk)return "trick";
if(!*tt)return "treat";
if(!*s) return "none";
if(*s == *tk)tk++;
if(*s == *tt)tt++;
return trickOrTreat(s+1, tk, tt);
}
int main(void){
char* str[] = {"trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",};
const int size = sizeof(str)/sizeof(str[0]);
char tk[] = "trick";
char tt[] = "treat";
int i;
for(i=0; i<size; i++){
printf("%s\n", trickOrTreat(str[i], tk, tt));
}
return 0;
}

866:253
20/10/31 22:58:55.98 i+h07tFB.net
>>835 Perl5
for (<DATA>) {
 chomp;
 %h = map{$_ => [split'']} qw{trick treat};
 $k = 'none';
 for $c (split'') {
  for (keys %h) {
   $r = $h{$_};
   shift(@$r) if $c eq $$r[0];
   unless (@$r) { $k = $_; goto L }
  }
 }
L: print "$_ -> $k\n";
}
__DATA__
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money
実行結果
~ $ perl 18_825_trickOrTreat.pl
trick or treat -> trick
. tr ick -> trick
ttrriecatk -> treat
tri kc eat -> treat
my money -> none

867:デフォルトの名無しさん
20/10/31 23:10:35.06 8FYB/kmH.net
>>851
なんでお前ずっとコテハンつけてんの?

868:253
20/10/31 23:20:38.29 i+h07tFB.net
>>852 IPアドレスがたまに変わるのと自分のレスを見分けやすくするため。固定ではなく番号はたまに変えてる
気にしないで

869:デフォルトの名無しさん
20/10/31 23:26:17.77 OVAIfmUR.net
>>797 c
URLリンク(ideone.com)

870:デフォルトの名無しさん
20/10/31 23:27:34.12 wd4K8eMC.net
>>853
専ブラ使えばいいのに

871:253
20/10/31 23:32:26.70 i+h07tFB.net
>>855
IPアドレスが変わったり日にちがたった自分のレスを簡単に表示し分けられる専ブラで良いのある?
出来ればLinuxで。ちなStyleは好みではない

872:253
20/10/31 23:38:27.89 i+h07tFB.net
>>854
教科書に載っているようなきれいなコード書くね

873:デフォルトの名無しさん
20/10/31 23:54:01.35 OVAIfmUR.net
>>857
サンクスコ
でも、引数の評価順については正直お行儀悪いんで
勉強してるみんなはそのへん各自ぐぐってみてね

874:デフォルトの名無しさん
20/11/01 00:59:27.52 KABEK1ar.net
>>835
Ruby
text = <<'TEXT'
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money
TEXT
# 配列化
Trick = "trick".chars
Treat = "treat".chars
次へ続く

875:849
20/11/01 01:00:32.73 KABEK1ar.net
>>859
の続き
def find_index( str, original )
idx_2 = 0
str.each_char.with_index do |char, idx| # 1文字ずつ処理する
idx_2 += 1 if char == original[ idx_2 ]
return idx if idx_2 == original.length # すべての文字が一致
end
nil
end
results = text.each_line.map do |line|
trick = find_index( line, Trick )
treat = find_index( line, Treat )
if !( trick || treat ) then "none"
elsif !trick then "treat"
elsif !treat then "trick"
elsif trick < treat then "trick"
elsif trick > treat then "treat"
else "same"
end
end
p results
#=> ["trick", "trick", "treat", "treat", "none"]

876:デフォルトの名無しさん
20/11/01 01:29:12.30 17LNcGyj.net
>>835
Kotlin
URLリンク(paiza.io)

877:デフォルトの名無しさん
20/11/01 01:49:31.61 17LNcGyj.net
>>835
C
URLリンク(paiza.io)

878:838
20/11/01 12:58:01.92 g/v4ZA9S.net
>>835 Ruby
正規表現を捨てて index+inject に
def trickOrTreat( str )
trick = 'trick'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
treat = 'treat'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick < treat)? 'trick' : 'treat'
end
[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}


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