プログラミングのお題スレ Part9 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>567
好きな方をどうぞ
curses使うのはいいですね
こちらからは見れませんが じゃ、とりあえず CR 出力版。Perl プログラム。
但し、待ち時間入れないと速すぎて見えないので適当に usleep を入れた。
テストした環境は Linux で端末は Windows の TeraTerm。
TERM=xterm の状態。
但し、プログラムを貼り付けたサイト(paiza.io)での出力はおかしくなる。
何故なら端末として動いてないから。
試したい場合はプログラムをコピーして自分の環境のエディタ等にペーストして保存後に実行して。
https://paiza.io/projects/rQDCQizcsrydlcrkxylR1w お題:A〜Z、1〜9で出来たランダムな文字列がある(文字列はプログラム開始時に自動的に決めてよい)
キーを2つ決めて(←→キーが自然かも)例えば→キーを押すと、文字列のうち2〜9があるか
どうかを調べ、あればそのうち一つをランダムに選び、数字を一つ減らし(9なら8へ)、左右ランダムに
1を置く
つまり2以上の数字文字があればそこがゴムのような役目をして文字列が伸びる
全部の数字文字が1になったら何もしない
逆に例えば←キーを押すと、文字列のうち1〜8があるかどうかを調べ、そのうちランダムに一つを
選び、その左右どちらかに数字文字がないかを調べ、足した合計が9を超えないようなら足し合わせて
数字文字をその合計値にし、文字列を1つ縮める
足し合わせた合計が9を超えるようなら他の数字文字もランダムに同様に一つ選び、足し合わせて
9を超えない数字文字の部分が見つかったらそれを一つだけ足し合わせて縮める
全部の数字文字が9になるか、9に満たないが足し合わせると9を超えるようになったら何もしない >>571
https://ideone.com/pjZbOc
C++。デバッグ難しくてやる気がしないのでバグってるかも。
カーソルキー取るの面倒だからASキーにしておいた。
こんな感じでいいのか?
何のシミュレータかしらんけどめんどくせーな。 あ、それと、文字列で計算するのめんどくさかったから、数字でやった。
そっち事情なんか知ったこっちゃない。 %%%%1000%%%%
000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end いろんなところでたまに見かけるけど、>>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<_>>())
} ■ このスレッドは過去ログ倉庫に格納されています