プログラミングのお題スレ Part9 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
いろんなところでたまに見かけるけど、>>547 ってPGなの? >>575>>577
>>574はvbsウィルスの一部だよ
つまりワクチンソフトに引っかかるとこのログが検疫されるので注意 お題
())())のように括弧のみからなる文字列が与えられるので
すべての括弧が正しく対応付けされるためには
最低で何箇所の括弧を逆向きに変更すればよいか求めよ
例えば上の例では2文字目か3文字目を変更すればよいので1を出力せよ
何文字変更しても正しく対応付けできない場合は-1を出力せよ
) -> -1
())()) -> 1
)()()( -> 2
)))((( -> 4
(())())((())(()( -> 3
())((())()))()(((()))()((((((((()()(())) -> ? >>583
https://ideone.com/OkCwgQ
C++。効率とかショートコーディングとかそういうものをかなぐり捨ててべた書き。
あってるかな? 誤爆
>>583 Ruby
def calc str
return -1 if str.size.odd?
ary = optimise str.scan(/(?=.)(\(*)(\)*)/).map{|a, b| a.size - b.size}
(-ary[0] + ary[1].to_i).abs/2 + ary[0]%2
end
def optimise ary
a = ary.reject(&:zero?).chunk(&:positive?).to_a.transpose[1].map(&:sum)
return a if a.size < 3
a.unshift(0) if a[0] < 0
optimise a.each_slice(2).map(&:sum)
end
STR = %w{
)
())())
)()()(
)))(((
(())())((())(()(
())((())()))()(((()))()((((((((()()(()))
}
STR.each{|s| puts "%s -> %d"%[s, calc(s)]} #=>
) -> -1
())()) -> 1
)()()( -> 2
)))((( -> 4
(())())((())(()( -> 3
())((())()))()(((()))()((((((((()()(())) -> 5 Quineの派生ということで、コードそれ自身を反転させたものを出力せよ
反転とは文字列"abc\ndef"を"fed\ncba"にすること 数列 6,66,666,6666,66666.....
これをダミアン数列と呼ぶことにしましょう
nを自然数としたときn^n(^はべき乗)の桁数(10進数で)が
ダミアン数列のどれかになることはあるか?
初歩的な計算で7^7=823543が6桁になることがわかります
問 このような不吉な数は
7のみである
有限個存在する
無限に存在する
ここまで書いてみたけどこの問題だとプログラミングのお題じゃないね
数論で解けるのかなあ?
改めてお題
ダミアン数列の最初の10項につながる不吉な自然数はあるか、あるとすれば
その数はいくつか
力技では時間が掛かりすぎると思うので工夫してみてください >>591
https://ideone.com/1bQnxO
C++。VCオンリー。
ウニコード対応しようと思って色々やってたけど、なんかうまくいかねー。
一応VCではうまくいってるっぽいけど、GCCと共通のコードはまだ規格的にきつそうだ。
うへー。大変だったわ。やっぱ、文字列は鬼門。 >>591 Squeak/Pharo Smalltalk
thisContext method getSource reversed allButLast: 8
"=> '8 :tsaLtuBlla desrever ecruoSteg dohtem txetnoCsiht' " >>597 ruby
d="]esrever.d,d[%'d=p%;s%' stup";puts '%s;%p=d'%[d,d.reverse]
#=> ]esrever.d,d[%'d=p%;s%' stup;"puts '%s;%p=d'%[d,d.reverse]"=d >>595
2で割らずにシフトしてたり芸が細かいですな お題。ツイッターのフォロワーを使ってお金を稼ぐ具体的な方法を思い付く限り列挙せよ。 コード中でa-zA-Z0-9の文字を一切使わずに
Hello World!!
と出力せよ。
"!"の後ろの改行の有無は問わない。 >>606
それじゃプログラム組めないと思うんだが、記号だけの言語みたいなの使えってこと? >>606 Ruby
https://ideone.com/z4vm4F
perlとjavascriptでも殆ど同じことができる 今日は七五三ということで
7,5,3,+,-,×,÷,(),^2を使った式(ただし7,5,3は一個しか使えない)で1から連続でいくつまで数を作れるか
1=3+5-7
2=5-3
3=3
4=(5-3)^2
5=5
6=(7-5)×3
… >>606
Ruby で、
unpacked = "Hello World!!".unpack("c*")
p unpacked
#=> [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 33]
packed = unpacked.pack('c*')
puts packed
#=> Hello World!! >>616
特殊変数$$から1を作ってそれをもとに2, 4, 8, 16などを作る
"%c"を繰り返したものをあらかじめ作っておき
そこに上記の数字で作った"Hello World!!"の文字コードをsprintフォーマットする
標準出力を表す特殊変数$>に<<メソッドでできた文字列を出力する
あとは 「"" << 文字コード」で「文字コード.chr」と同様の結果が得られるので適宜利用すると便利 >>614
^2 は
int sqr(int n){return n*n;}
みたいな関数が使えるって意味だよね
つまり、
x^2^2 とかは (x^2)^2 の意味で使うなら可能ってことだよね >>618
記号で1を作って、数値、文字コード、文字列としてくのか
いろんな省略記法も知らないとできないな
解説ありがとう >>614
5と3を繋げて53にするようなこともしていいの? 計算部は書いたけど、元の表記で何算してるか表記するのが面倒だ。
あと、遅い・・・。 >>614
https://ideone.com/k7hAtB
C++。
それとなく書いてみたけど、誤差でまくり。割り算鬼門すぎる。
多分バグってる。あと、題意理解してない可能性が微レ存。 あ、そうだ。
カッコの処理がバグバグだったからカッコ使わなかった。 うーむ・・・。なんていうか。。。
ギブアップだ。Orz >>625
「題意理解してない可能性が微レ存」どころじゃねえだろこれww 整数の範囲でも有理数の範囲でも答えが変わらないからつまらん
一旦非整数を経由しないと作れないのがないとやっぱり... (3^2)^2 = 3^4
((3^2)^2)^2 = 3^8
だから、3^(2*3) とかやっちゃダメだろ
あと、
3×5÷7 = 15÷7 ≠ 2 >>631
あー、俺がタコでした。
まぁ、前段は表示系の問題だと思うお。
後者は割り算が全部悪い。
浮動小数で比較したくないんだよなぁ。悩ましい。 有理数の法則がよくわかってないし、デカイ。
ままならんなー。 (a/b) + (c/d) = (ad + bc) / bd
(a/b) - (c/d) = (ad - bc) / bd
(a/b) * (c/d) = ac / bd
(a/b) / (c/d) = ad / bc
(a/b) = (c/d) <===> ad = bc
分子 : 整数
分母 : 0以外の整数 紙とペンで考えてみたところ
0以外の任意の整数なら3,5,7で表わせるから問題として不適なのでは? >>637
3,5,7は1回までって回数制限があるから
表せる数は限られるよ。 ああ、本当だ。17はどうやっても作れないね
しかしこれをどうやってコードで計算すんだろう
^2があるから全探査はできないし
自分は「+または-」をいくつ使うかで場合分けして一個一個可能性を消していったんだけれども 独自有理数クラス
演算回数を1回ずつ増やしていって、
出来た値に対応するフラグをセット 数値をstd::multisetで保持
演算n回目のmultisetをstd::setで保持 ABC4D
-E3FG
-----
77777
A〜G は、1〜9 の異なる数字。
ただし、3, 4 ではない >>645 Ruby
f = ->a, b, c, d, e, f, g{10000*a + 1000*b + 100*c + d - (1000*e + 10*f + g) == 78037}
[1, 2, 5, 6, 7, 8, 9].permutation{|a| puts "%d%d%d4%d - %d3%d%d == 77777" % a if f[*a]}
#=>87142 - 9365 == 77777 >>647
何も、そこまで作り込まなくても良いだろw
色々な覆面算に対応するため、汎用的に書いたのか 500, 100, 50, 10, 5, 1円のすべての種類の硬貨を、1枚以上使って、
合計15枚で750円にする時、10円硬貨は何枚になるか?
A〜E の5人のランナーが走った結果、
完走したのは、1着とべべの2人で、残りの3人は、途中で棄権した
ここで、完走した2人は、必ず真実を言い、
棄権した3人は、必ず嘘をつくものとする
(つまり、事実に対して、真偽値を取る)
A: D は棄権した
B: A は、べべだった
C: E は棄権した
D: C は、べべだった
E: B は完走した
A〜Eがこのように答えた時、1着は誰か? 先に答えやそれに至る式がわかっててコードに書き直すだけになっちゃうから
数学的に道筋立てて答えが出せるものはあんまりおもしろくないんだよな アルゴリズムとは、数式の完全コピー
最初に、数式を考えて、その数式が間違っていれば、
撃墜モードでは、そこを突かれて撃墜される
結局、数式の証明が大事。
証明に、勘違いが無いかどうか お題
1から99を表示する
お題:1から999を出力する
ただし0を含む数は除く >>658
1000.times{|i|p i unless i.to_s[?0]} >>658 GNU Smalltalk
1 to: 999 do: [:n | (n asString includes: $0) ifFalse: [n displayNl]] >>658 F#
let () = seq { 1..999 } |> Seq.iter (printfn "%d") >>658
https://ideone.com/unKY2z
C++。ほかの言語だと一行で書けるんだけどなぁ。
まぁ過去に比べれば大分短くなったけど。 >>658
文字も数もその場に合わせて適当に解釈してくれる言語だと楽だね。
perl だとこれでできる。
for(1..999){print"$_\n"unless(/0/)} >>658
@Mathematica
nListWithoutZero[n_]:=n//
Range[1,#]&//
Map[ToString,#]&//
StringCases[#,RegularExpression["^(?!.*0).*$"]]&//
Flatten;
In[1] := nListWithoutZero[999]
Out[1] = (略) >>658 rust
https://ideone.com/NFrvi7
fn main() {
println!("{:?}", (1..1000).filter(|i| !i.to_string().contains("0")).collect::<Vec<_>>())
} >>658
Kotlin で文字列変換してやる場合
fun main(args: Array<String>) {
for (i in 1..999)
if (! i.toString().contains('0', false))
println(i)
}
数値のままやる場合
fun main(args: Array<String>) {
for (i in 1..999)
if (i % 10 != 0
&& (i < 10 || i / 10 % 10 != 0)
&& (i < 100 || i / 100 % 10 != 0))
println(i)
} http://rio2016.2ch.net/test/read.cgi/math/1510671832/722
お題:
n^2-1 = m^5
を満たす自然数 n, m は存在するか?
存在するという人と存在しないという人の両方が存在します >>670
(n, m) = (1, 0)
揚げ足取りはおいておいて、プログラミングで説く問題じゃないよね >>658
python
今回は必要ないかもだけど桁数増えた場合を考え再帰で
https://ideone.com/WC8Ksm >>671
まあ自明な解はさておき、その他は見つからないのが不思議です >>673
カタラン予想ですでに存在しないことが証明されているのに何が不思議なのかね >>673
その問題は数学的に解くものではないかな?
まあ、コンピュータなら力業でかなりの値を n, m に入れて計算して確認できるけどさ。 ■ このスレッドは過去ログ倉庫に格納されています