プログラミングのお題スレ Part12
: デフォルトの名無しさん [sage] 2018/09/28(金) 10:09:07.13:phwOkayR プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん 使用言語 回答本文 【ソースコードが長くなったら】 (オンラインでコードを実行できる) ttp://https://ideone.com/ ttp://http://codepad.org/ ttp://http://compileonline.com/ ttp://http://rextester.com/runcode ttp://https://runnable.com/ ttp://https://code.hackerearth.com/ ttp://http://melpon.org/wandbox ttp://https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 前スレ プログラミングのお題スレ Part10 ttps://mevius.5ch.net/test/read.cgi/tech/1514772904/ プログラミングのお題スレ Part11 ttps://mevius.5ch.net/test/read.cgi/tech/1524570314/ : デフォルトの名無しさん [sage] 2018/09/28(金) 10:41:53.02:Trt/L8Tp console.log('>>%d乙', 1); : デフォルトの名無しさん [sage] 2018/09/28(金) 10:55:48.49:Xb8eTiN0 3つの値の最小値を調べるには2回比較をしなくてはならないことを証明せよ : デフォルトの名無しさん [] 2018/09/28(金) 12:28:47.83:6mi1IA73 やだ : デフォルトの名無しさん [] 2018/09/28(金) 13:55:38.90:jm6QTuW3 3つの値のうちの最小値が分かった時の情報量はlog3 1回の比較によって得られる情報量はlog2 2回の比較で2log2=log4 log2<log3<log4なので最低2回の比較をしなければ最小値を知る事はできない : デフォルトの名無しさん [sage] 2018/09/28(金) 14:20:38.29:25C/+Q0q 回数の定義による ハードウェアでパラにやれば1回だと言い張ることもできるし : デフォルトの名無しさん [] 2018/09/28(金) 14:26:10.16:6mi1IA73 ここは数学のお題を解くスレではなくプログラミングのお題スレなので証明せよというお題ならば証明をするプログラムを作れという意味になる。 決して人間が頭で考えて証明してはならない。 : デフォルトの名無しさん [] 2018/09/28(金) 14:46:03.56:jm6QTuW3 3つの数単体同士の比較だけじゃなくて、a+bとcとかa^cとb+cとか無限に考えられるから有限時間で証明するのは無理では? : デフォルトの名無しさん [sage] 2018/09/28(金) 21:22:39.80:CwsEryp/ ID:jm6QTuW3 : デフォルトの名無しさん [sage] 2018/09/28(金) 22:47:33.75:21310r5m [a, b, c].min : デフォルトの名無しさん [sage] 2018/09/28(金) 23:21:12.89:I0zPpFv8 値と言ってるのにどこから数式が出てくるんだろう… : デフォルトの名無しさん [sage] 2018/09/28(金) 23:31:28.87:Trt/L8Tp 例えばR^3の関数f(x, y, z)で xが最小の時負、xが最小でなくyが最小の時0、xかyが最小でなくzが最小の時正 になるC^∞級の関数は存在するのでこの関数を使えば比較は1回で済む : デフォルトの名無しさん [] 2018/09/29(土) 00:17:28.49:mZMDBHA7 例えばどんな関数? : デフォルトの名無しさん [sage] 2018/09/29(土) 01:00:25.54:SXeyKQEb 比較って値そのものの大小の比較ってとだろ : デフォルトの名無しさん [] 2018/09/29(土) 01:06:03.17:IuTgmxg/ 比較というのは差をみつけることだからな ココでの差は引き算の差の意味ではない、当然 数字を引き算して差を求めることもできる、当然 : デフォルトの名無しさん [sage] 2018/09/29(土) 01:15:28.45:SXeyKQEb が言ってる比較って値そのものの差による比較ってことだろ ってことな わかった? : デフォルトの名無しさん [] 2018/10/01(月) 20:03:33.29:IziOBEHB お題:f(n)::={nを連続するいくつかの正整数の和として表す表し方の総数}とおく 例えば、15=7+8=4+5+6=1+2+3+4+5よりf(15)=4である 上限Nが与えられたとき、n<=Nでf(n)が奇数となるようなnをすべて足し合わせた値を求めよ 10 -> 24 100 -> 665 1000 -> 18006 10000 -> 571940 100000 -> 18010994 1000000 -> 569929080 10000000 -> 18001029437 100000000 -> 569128815672 1000000000 -> 17994029079715 : デフォルトの名無しさん [sage] 2018/10/01(月) 20:21:00.27:XiA3uZUZ > nを連続するいくつかの正整数の和として表す表し方の総数 15は7+8と4+5+6と1+2+3+4+5の3通りの表し方があって その総数f(15)が4ってどういうこと? : デフォルトの名無しさん [sage] 2018/10/01(月) 20:26:01.73:8OIwu5Mv 自身も含まれるんじゃない? : デフォルトの名無しさん [sage] 2018/10/01(月) 21:52:20.39:RJeKuxhD Java ttp://https://ideone.com/FqcPpb 適当に作ったが考え方を変えないとideone時間が足りない : デフォルトの名無しさん [sage] 2018/10/01(月) 22:05:00.23:88z5+fOs >連続するいくつかの正整数の和として表す表し方の総数 ttp://http://izumi-math.jp/sanae/MathTopic/renzokuwa/renzokuwa.htm >1以外の奇数の約数と同じだけある ttps://www.eikoh-seminar.com/echtas/blog/2015/10/post-224.html >1以外の奇数の約数を何個持っているか : デフォルトの名無しさん [sage] 2018/10/01(月) 23:56:46.25:RJeKuxhD Java ttp://https://ideone.com/z2q0Sj の考え方を導入してみた : デフォルトの名無しさん [sage] 2018/10/02(火) 20:12:32.93:3l+a4b56 Java ttp://https://ideone.com/m7oieG BitSetなんて使わず普通に再帰使ったほうが早かった… : デフォルトの名無しさん [sage] 2018/10/04(木) 17:48:26.02:WD/5XFit 10月の学校に着いた時間と帰った時間を平日分全部出力する(土日のみ休みで平日は必ず学校がある) A君は神経質なので秒まで着いた時間と帰った時間をメモする 時間は任意とする。 入力例 2018/10/01 09:25:00 2018/10/01 17:30:00 出力例 入力例と同じフォーマットの形式の日付時間が平日分全て出力された後に、 今度は別のフォーマットで平日分全て出力される 出力例 2018/10/01 09:25:00 2018/10/01 17:30:00 2018/10/02 09:26:00 2018/10/02 17:24:00 : : : 平日のみ全部出力 : : 別フォーマット出力例 20181001 092500 20181001 173000 : デフォルトの名無しさん [sage] 2018/10/04(木) 18:15:15.90:rW/Q6M2G やはり10/1と10/8は平日だった : デフォルトの名無しさん [sage] 2018/10/04(木) 18:17:14.17:THaWokSR 日本語でおk : デフォルトの名無しさん [sage] 2018/10/04(木) 18:18:57.90:GgsL2+/f 勤怠記録を整形したいです と正直に言えば話が早いのに : デフォルトの名無しさん [sage] 2018/10/04(木) 19:56:11.98:WD/5XFit そうなんですけど、VBAで会社にソースはあるんですけど、他の言語でも見たいんです : デフォルトの名無しさん [sage] 2018/10/04(木) 21:05:04.35:THaWokSR 平日って設定要る? 文字列 "YYYY/MM/DD HH:MM:SS" をいろんなフォーマットに変換するだけの問題じゃ駄目? なんで一旦 echo するの? 責めてるんじゃなくて単純な疑問ね : デフォルトの名無しさん [sage] 2018/10/04(木) 22:21:43.46:pTnAHI9j C++ #include <cstdio> #include <vector> #include <tuple> using namespace std; int zeller(int y, int m, int d) { if (m < 3) { y--; m += 12; } return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d ) % 7; } int main() { vector<tuple<int, int, int, int, int, int>> v; for (int y, m, d, h, i, s; scanf("%d/%d/%d %d:%d:%d", &y, &m, &d, &h, &i, &s) == 6; ) { if (int w = zeller(y, m, d); 1 <= w && w <= 5) { v.emplace_back(y, m, d, h, i, s); } } for (auto [y, m, d, h, i, s] : v) { printf("%d/%02d/%02d %02d:%02d:%02d\n", y, m, d, h, i, s); } for (auto [y, m, d, h, i, s] : v) { printf("%d%02d%02d %02d%02d%02d\n", y, m, d, h, i, s); } } : デフォルトの名無しさん [sage] 2018/10/04(木) 22:45:58.84:yblvOSiR 平日って設定の理由としては、問題を少し複雑にしたかったから、あえて入れてみた まあその制限が問題を難しくしてるのかって話もあるけど 文字列を色々なフォーマットにするでもいいけど、日本語でおkとか入力例とか出力例が自分でも適当過ぎた気がするので、また今度の機会に‥ C++は好きな言語だ 今度の連休で遊ばせてもらいます : デフォルトの名無しさん [] 2018/10/04(木) 22:49:59.54:9/syaOEb そう言えば寝てたら未来へ行っちゃうってのは、Islandにちょっと似てる。 : デフォルトの名無しさん [] 2018/10/04(木) 22:50:28.48:9/syaOEb ごめん。誤爆。 : デフォルトの名無しさん [] 2018/10/05(金) 00:59:15.29:x9IT1j0q kotlin ttp://https://paiza.io/projects/exHqCjTWt7PPhZheEMwucw ほとんど何も考えずただ入力して出力しているだけ。 : デフォルトの名無しさん [sage] 2018/10/05(金) 07:17:46.24:wqnG0hHC 春分の日と秋分の日はその前の年に気象庁だかどっかから指定される休日だから任意の時刻に対して平日判定を行うのは不可能 : デフォルトの名無しさん [sage] 2018/10/05(金) 08:06:04.84:f0hsTKrn まず問題文をよく読めって学校で教わらなかったのか? : デフォルトの名無しさん [sage] 2018/10/05(金) 09:07:05.89:wqnG0hHC ああ10月限定かすまんな それでも無駄な情報が多くて何をさせたい問題なのかやっぱりわからんわ : デフォルトの名無しさん [] 2018/10/05(金) 09:48:23.51:ExR6m3Ew お題 1から連続する自然数の並びで 最初の a個の総和と それに続くb個の総和が 等しくなるものを 好きなだけ求めるち : デフォルトの名無しさん [sage] 2018/10/05(金) 10:50:56.93:wqnG0hHC (0..10**8).each{|i|n=2*i*(i+1)+1;x=Integer.sqrt(n);puts'a=%d, b=%d'%[a=(x-1)/2,i-a]if x**2==n} #=>a=0, b=0 a=2, b=1 a=14, b=6 a=84, b=35 a=492, b=204 a=2870, b=1189 a=16730, b=6930 a=97512, b=40391 a=568344, b=235416 a=3312554, b=1372105 a=19306982, b=7997214 : デフォルトの名無しさん [sage] 2018/10/05(金) 14:58:28.47:mgzjyvv8 koltin全く知らないけど、あとで読んでみます! : デフォルトの名無しさん [sage] 2018/10/05(金) 20:22:47.58:3qR/q5rp C++ ttp://https://ideone.com/PLj4M9 Wolfram先生によると一般項があるらしい ttp://http://www.wolframalpha.com/input/?i=2a(a%2B1)%3D(a%2Bb)(a%2Bb%2B1)+and+a%3E%3D0+and+b%3E%3D0 : デフォルトの名無しさん [sage] 2018/10/06(土) 10:59:33.32:MgCaJaM3 半角スペース区切りで数字が入力されるのでソートして出力しなさい いろんなアルゴリズムでやってみよう -*- input -*- 3 1 4 1 5 9 2 6 53 58 97 93 2 38 46 26 -*- output -*- 1 1 2 2 3 4 5 6 9 26 38 46 53 58 93 97 例) Ruby ボゴソート ary = gets.split.map(&:to_i) nil while ary.shuffle!.each_cons(2).any?{|a, b| a > b} puts ary * ' ' バブルソート ary = gets.split.map(&:to_i) (ary.size - 1).times do ary.each_cons(2).with_index{|(a, b), i| ary[i, 2] = b, a if a > b} end puts ary * ' ' : デフォルトの名無しさん [] 2018/10/06(土) 13:39:49.65:J8Y2BFN6 perl -ne '@d=split;print join(" ",sort {$a <=> $b} @d)."\n"' 無念無想のままたった今打った。1回も試していない。 : デフォルトの名無しさん [sage] 2018/10/06(土) 21:20:29.96:evMRo/Iv 何かと思えば円周率か 要約気付いた : デフォルトの名無しさん [sage] 2018/10/06(土) 22:11:52.69:xFDNl+om GNU Smalltalk スリープソート ttp://https://ideone.com/BseQtg : デフォルトの名無しさん [sage] 2018/10/06(土) 22:49:39.54:MgCaJaM3 なんだこれw 4ch発祥かぁ。面白いね : デフォルトの名無しさん [sage] 2018/10/07(日) 00:58:45.52:KvcjzmFM A君は平日以外学校に行かんのだろ? なら曜日なんぞ気にせず入力された登下校時刻を単に変換するだけになるような : デフォルトの名無しさん [sage] 2018/10/07(日) 07:50:57.08:VJ+UDRYt アスペか?アスペにはこのスレはたぶん無理 ↑これの読解もままならないだろうが(苦笑 : デフォルトの名無しさん [sage] 2018/10/07(日) 13:41:58.37:9vVPTzNb そうだね さらに 10/01だけの入力から 10/02が出力されるところも謎だ : デフォルトの名無しさん [] 2018/10/07(日) 18:04:09.18:t8TfnMHv お題 現在の時刻をスウォッチ・インターネットタイムで表示する 例 @042 : デフォルトの名無しさん [sage] 2018/10/07(日) 19:17:11.77:MD9q6Ezo Ruby UTC基準で d=24*60*60;$><<'@%f'%((Time.now.to_f%d)*1e3/d) #=> @426.818338 : デフォルトの名無しさん [sage] 2018/10/07(日) 21:21:58.39:T4GR84FI ビール標準時が基準点でないものはスウォッチ・インターネットタイムではない : デフォルトの名無しさん [sage] 2018/10/07(日) 21:30:25.37:MD9q6Ezo d=24*60*60;$><<'@%f'%(((Time.now.to_f-60*60)%d)*1e3/d) : デフォルトの名無しさん [] 2018/10/08(月) 02:11:26.03:tKqgyITq perl -e '$s=86400;$n=1000*((time()+3600)%$s)/$s;printf "@%d\n",$n' 今実行するとこう出る。 @757 : デフォルトの名無しさん [] 2018/10/08(月) 16:16:40.26:SHTmPUE+ ttp://https://exoplanetarchive.ipac.caltech.edu/docs/transit_algorithms.html まずこのサイトを読んで日時(UTC基準)からJDを求めるプログラムを作りなさい 逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない プログラムの結果が正しくなるように修正し、 このサイトのどこに誤記があるかその箇所を指摘しなさい : デフォルトの名無しさん [] 2018/10/08(月) 16:19:35.99:SHTmPUE+ 訂正 (正)逆にJDから日時(UTC基準)を求めるプログラムも作りなさい (誤)逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい : デフォルトの名無しさん [sage] 2018/10/08(月) 20:56:19.15:P7JfEPgv Ruby ttp://https://ideone.com/SKS4yj : デフォルトの名無しさん [sage] 2018/10/08(月) 22:00:20.72:c9HgNpeF (365.25*dy).to_i とかは 1461*dy/4 にしないとまずい : デフォルトの名無しさん [sage] 2018/10/08(月) 22:51:07.00:P7JfEPgv 365.25 は 101101101.01(2) だから誤差の心配は無いよね? (1..3000).each{|n| p n if (365.25*n).to_i != 1461*n/4 } とかやってみて : デフォルトの名無しさん [sage] 2018/10/08(月) 23:14:43.42:c9HgNpeF それは良いとしても ( (c-122.1)/365.25 ).to_i の類の表現が他の個所にも複数あり この内のどれかが p (5.151/1.717).to_i #=> 2 のようにならないとはコードをみただけでは明確ではなく 剰えrubyのFloat classの精度は実装依存であるためこの様な処理はすべきではない : デフォルトの名無しさん [sage] 2018/10/08(月) 23:58:05.73:5rk01rQ6 え ruby って IEEE 754 に準拠してないの? 信じ難いなそれ 使い物にならないじゃん : デフォルトの名無しさん [sage] 2018/10/09(火) 00:09:36.06:lL60bjnv IEEE754関係ないやろ Cのdoubleも環境依存やで : デフォルトの名無しさん [sage] 2018/10/09(火) 02:53:53.02:z616RbAo いや関係なかったら困るだろ バグってんだか仕様だかわからなくなるぞ : デフォルトの名無しさん [sage] 2018/10/09(火) 07:49:23.39:G0ViTg21 関係ないってそういう意味ではないのでは? の指摘することとIEEE 754は関係ないってだけで。 例えば32bitか64bitでdouble型の精度が違うなんて別に珍しいことではないと思うんですけど。 : デフォルトの名無しさん [sage] 2018/10/09(火) 19:02:39.94:jSAcVkU7 > 32bitか64bitでdouble型の ん? 32bitのdoubleなんてありえるの? IEEE 754以外で倍制度を決めてる何かがあるの? : デフォルトの名無しさん [sage] 2018/10/09(火) 21:21:14.72:7Krlta4j たかだか30行程度のループも再帰もない一本道なので具体的に示してもらえるとありがたいです。 この種のプログラムは地デジの日付情報が MJDで ARIBの規格書にも載っていて、 ごく一般的に使われているので、もし問題があるようならばなんとかしたいですよね。 >( (c-122.1)/365.25 ).to_i 浮動小数点で JD が扱える精度+αくらいならこれは問題ないと思いますが。 c は整数ですし、分母の 365.25もすでに説明しましたね。 グレゴリオ暦6239年で JD が 4000000辺りで分子が 365.25の倍数前後は 4000217.1/365.25 と 4000218.1/365.25 だから仮数部が 19bitほどあればいいわけですね。 # こんな定数のままだとコンパイラが最適化してしまいますけどね 組み込み用途などによっては考慮すべきかもしれないけれど、 最初のお題( )ってそういう意図があったのでしょうか? >このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない これは特定の環境に限られたものを指していたのかな? : デフォルトの名無しさん [sage] 2018/10/09(火) 21:40:48.90:BHyo+myF 精度的に問題ないって理解してれば良いのでは よく理解してない人が小数点使う必要ない場面で使って事故って何も分かりませんみたいな事あるし コンシューマゲームなんかだとシビアなんで、癖みたいにしておかないとハマってしまうけど : デフォルトの名無しさん [] 2018/10/09(火) 22:33:03.53:uKgwXIAC はココからが本当の本題 @ のコードでの誤記の指摘は概ね正解 ただのコードの修正だけでは紀元前に対応していない 紀元前が対応するように修正しなさい A @のプログラムの通日を整数の通ナノ秒にして、ナノ秒までの時刻を正確に相互変換できるようにしなさい B Aにうるう秒をいれて正確に相互変換できるようにしなさい(制約で問題が発生する場合、問題が発生する時刻を書きなさい) 参考URL: ttp://http://maia.usno.navy.mil/ser7/tai-utc.dat Bは普通にやったら結構めんどい課題と考えられる 力技でやるなら暇人以外にはオススメしない(力技でやらないほうがいいと一応警告しておいたからな) コードの一部を出力するコードをサクッと作るぐらいの力量がなければ きっとサクッとはできないしサクッと結果の評価もできないと考えられる : デフォルトの名無しさん [] 2018/10/09(火) 22:35:06.29:uKgwXIAC 訂正 (正) (誤) : デフォルトの名無しさん [] 2018/10/09(火) 22:56:04.77:uKgwXIAC ttp://https://ideone.com/fF1kvl Bで使えるデータは用意しておいた 気が向いたヤツはチャレンジしなさい : デフォルトの名無しさん [sage] 2018/10/09(火) 23:20:13.38:UrO6v+ga はサマータイムスレで暴論吐いてた奴じゃない? : デフォルトの名無しさん [sage] 2018/10/10(水) 00:03:10.45:uHP11E7s C言語スレとかのいろいろな所に出没してる半角先生だ どこでも相手にされなくなったから出題しに来た : デフォルトの名無しさん [sage] 2018/10/10(水) 09:42:44.92:hOT3iUsl サマータイムスレでの暴論って何なんだろう? まさかのサマータイム賛成なんて奴だったら許せんな。 : デフォルトの名無しさん [] 2018/10/10(水) 16:39:18.23:slDdF7J+ お題 倍精度実数で整数部分が正確に表現できる最大値を求める : デフォルトの名無しさん [sage] 2018/10/10(水) 17:03:11.31:8BTNYbZT 浮動小数点実数型と言えど最大要素に近い 部分は、整数×2^整数という形の整数也 : デフォルトの名無しさん [sage] 2018/10/10(水) 17:03:47.89:8BTNYbZT 整数×2^自然数 だた : デフォルトの名無しさん [sage] 2018/10/10(水) 17:41:41.04:8BTNYbZT (2^m-1)×2^n という形 : デフォルトの名無しさん [sage] 2018/10/10(水) 18:05:44.00:TfVezTBt 区間を求めるなら仮数部だけで収まる最大値だけど、 とある数の整数部が正しく表現されているだけなら仮数部も込みで double の最大値が答え それを std::numeric_limits<double>max() や DBL_MAX を使わずに計算せよ、ということか : デフォルトの名無しさん [sage] 2018/10/10(水) 19:38:40.27:TfVezTBt を2分探索で計算で出すコード書いてて ideone のコンパイラのバグ見つけた気がする ttp://https://ideone.com/D3ip5M if 文の条件式の値が1なのに実行されない find_max<char> とか int32_t で起きる 何か間違ってるかな : デフォルトの名無しさん [sage] 2018/10/10(水) 20:37:17.47:GOApHyvI 符号付き整数オーバーフロー(未定義動作)のせいで 変な最適化でもかかってるんじゃね? : デフォルトの名無しさん [sage] 2018/10/10(水) 21:07:51.69:3iBo9D9z 通常 JDは UTCを元にするので閏秒は考慮しないと思いますよ、 天文計算などする場合は必要に応じて UT1とかに変換しているのじゃないかと? : デフォルトの名無しさん [sage] 2018/10/10(水) 22:22:14.63:TfVezTBt なるほど。 オーバフローが未定義動作だとすると符号付整数の最大値を求めるのは難しそうだな。 : デフォルトの名無しさん [] 2018/10/11(木) 00:30:47.35:p15CvoFg ものすごい頭悪いこといってるわ。。。 UTCは う る う 秒 入 れ た 時 刻 のことだぞ マジでなんでこんな頭悪いの 天文でつかわれるユリウス日なんかはアホがいうとおり固定 1光年も固定でもないとヤバイからな 1光年は光が1ユリウス年(365.25日)進む距離になる そもそもオレの課題ではそんなことを問題になんかしてないからな 課題どおりにやればいい : デフォルトの名無しさん [] 2018/10/11(木) 00:34:27.93:p15CvoFg 低学歴知恵遅れが知ったぶりしてハジかく典型的な例といっていい 低学歴知恵遅れはいちいち自分が低学歴知恵遅れですと自白するからな : デフォルトの名無しさん [] 2018/10/11(木) 01:18:58.62:ZbBeURnP おまえまたくっさいくっさい自演しとんのか : デフォルトの名無しさん [sage] 2018/10/11(木) 12:46:49.51:ZOnVTpMr 誰からも相手にされなくなったか : デフォルトの名無しさん [sage] 2018/10/11(木) 13:22:48.89:yY2EC70D 相手にされなくなったんで問題だせば自動的に相手にされると思い込んでいる その辺りが半角先生の思考の限界 : デフォルトの名無しさん [] 2018/10/11(木) 14:46:25.14:MYvNBgY5 ここが適切なのかわかりませんが、知恵を頂けたら幸いです。 当方CGクリエーターで、プログラミングの知識は殆どありません。 そこで質問なのですが、 Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、 Bのワールド位置を維持して、BをAのローカル座標位置へ移動させるには どのような行列式になるでしょうか? ネットで座標変換とか色々調べてみましたが、子のワールド位置を維持した状態で 親に該当するローカル座標へ移動させる方法がわかりませんでした。 本来の目的としては、 CGアニメーションソフトのコンストレイント機能にペアレントがありますが、 それを行列式(ノード)で行いたいのです。 (コンストレインのペアレントとは、 時間軸上の任意の位置で親子関係の接続や解除を行うことが出来る機能です。 その接続/解除時には、子は現在のワールド位置を維持します。 : デフォルトの名無しさん [sage] 2018/10/11(木) 15:04:14.07:3Bdkvxy9 スレ違い 「3d 行列」で検索! : デフォルトの名無しさん [sage] 2018/10/11(木) 15:26:21.10:ZOnVTpMr スレのルールに則れば誰か答えてくれるかもね : デフォルトの名無しさん [sage] 2018/10/11(木) 16:45:05.30:NcfxmDj4 >Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、 (1,2,3) を (-1,-2,-3) からの相対値で表すということなら (1,2,3) 引くことの (-1,-2,-3) イコール (2,4,6) : デフォルトの名無しさん [sage] 2018/10/11(木) 21:49:13.39:anEb94RG >B Aにうるう秒をいれて正確に相互変換できるようにしなさい >UTCは う る う 秒 入 れ た 時 刻 のことだぞ うるう秒を入れるでなく、外すが正解ですね。すでに UTCには閏秒が入っていますから。 UTC(協定世界時)は TAI(国際原子時)を元に閏秒で補正して UT1(世界時)に合わせています。 7:00:00(UTC)の一日先の時間が24h+-1sec(閏秒)でも時刻は7:00:00(UTC)となるわけです。 よって JDに24hを足すと翌日になり JD/24h%7で曜日が分かります。 未来の日付も計算可能ですが、閏秒を入れないTAI(国際原子時)では地球の自転次第で変化します。 >天文でつかわれるユリウス日なんかはアホがいうとおり固定 逆です、天文計算で使うような時間は UT(世界時)を基準にしています。 それは天体の運動方程式を解くために基準の時刻からの正確な時間が必要だからです。 : デフォルトの名無しさん [] 2018/10/11(木) 23:02:27.87:p15CvoFg ttp://https://warwick.ac.uk/fac/sci/physics/research/astro/people/steeghs/mpags-as2/mpags_techniques_2012_1b.pdf ・International Atomic Time (TAI) - SI second defined by frequency of hyperfine transition of cesium133 - Measured and counted with international network of atomic clocks ・Co-ordinated Universal Time (UTC) - Our civil time (in winter) - Based on SI second, with 86400s/day - Kept synchronised with UT1 since 1972 by addition of leap seconds - Leap seconds not added to TAI, so TAI-UTC is not constant - Currently (Nov 2012) TAI - UTC = 35s - Use of leap secs currently under discussion (inconvenient for astro) ・Co-ordinated Universal Time (UTC) - Currently (Nov 2012) TAI - UTC = 35s ・Calendar is independent of time system, so state both, e.g. - 2011 November 11 11:00:00.0 UTC - 2011 November 11 11:00:34.0 TAI - JD 2455876.958333 UTC - JD 2455876.958727 TAI コレでオレの課題ができないなら 人間やめたほうがいい : デフォルトの名無しさん [] 2018/10/12(金) 01:38:38.44:xbwLlD7o 倍精度って、これでいいの? ttp://https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0 とすると -2^53 〜 2^53 になるわけでプログラムを作る必要性がないわけだが。 それとも仮数部が何ビットか分からない倍精度実数のビット数を求めるプログラムを作れってこと? : デフォルトの名無しさん [sage] 2018/10/12(金) 02:02:42.62:ZYTXH3K/ プログラミングのお題 「10以下の素数の和を求めよ」 答え 「17。コード書くまでもないんだがこれでいいのか?」 これはおかしいだろう : デフォルトの名無しさん [sage] 2018/10/12(金) 02:23:49.18:I/tzu8NI ruby n = 10 Prime.reduce(0){|s, i|break(s) if i > n; s + i} : デフォルトの名無しさん [] 2018/10/12(金) 02:35:54.36:xbwLlD7o え?じゃ、こんな感じ? perl -e 'for($n=1;(2**$n)!=(2**$n+1);$n++){} printf "%d, %.0f\n", $n, 2 ** $n;' 動かすとこう出るが。 53, 9007199254740992 : デフォルトの名無しさん [sage] 2018/10/12(金) 06:06:04.48:j3qUjmca Pharo/Squeak Smalltalk (Integer primesUpTo: 10) sum : デフォルトの名無しさん [sage] 2018/10/12(金) 07:40:50.69
:GdhRssFx ruby -rPrime 'p Prime.first(10).sum' #=> 17 : デフォルトの名無しさん [sage] 2018/10/12(金) 09:39:43.72:1UpgDbu2 first(10)って普通は最初の10個を列挙するもんだがrubyは違うのか… 名前重要ってわりにセンスないな : デフォルトの名無しさん [sage] 2018/10/12(金) 10:33:46.63:oIm8hJ6E じゃあちなみにこの関数名は何ならいいんだ? お前の考えを言ってみろよ センスを判定してやるよ : デフォルトの名無しさん [sage] 2018/10/12(金) 10:49:03.90:6UbBSJp3 first(10)が10までってセンスは普通におかしいだろ つーかrubyも最初の10個返すんだが…? : デフォルトの名無しさん [sage] 2018/10/12(金) 13:22:40.26:+EEi3z6C 誰も動作を疑わずに書かれたものを脳死で信じるいい例だな、 のは17にはならん : デフォルトの名無しさん [sage] 2018/10/12(金) 13:50:43.62:oIm8hJ6E ruby/ruby: The Ruby Programming Language ttps://github.com/ruby/ruby そりゃそうだろ スクリプト言語のソースコードは公開されてて誰でも読めるが 大抵のユーザーは書かれたものを脳死で信じるしかないだろ それともお前は使うスクリプト言語のソースコードは全部精査してるのか? コンパイラのソースコードまで熟読してるのか? ンなモン、脳死で信じるしかねーだろ : デフォルトの名無しさん [sage] 2018/10/12(金) 13:54:46.58:VST6PShP 最近JavaとかC++とか少ないな Javaは例の騒動があるから仕方ないとしてCとかC++はないんか : デフォルトの名無しさん [] 2018/10/12(金) 16:36:53.91:OhxorjMK はC++だね。 : デフォルトの名無しさん [sage] 2018/10/12(金) 18:59:19.35:eR+rcBR9 ruby require 'prime' p Prime.take_while {|i| i < 10}.inject(:+) : デフォルトの名無しさん [sage] 2018/10/12(金) 20:05:50.75:oyAlSwuR 例の騒動って何 : デフォルトの名無しさん [sage] 2018/10/12(金) 20:13:31.37:jorGy8Se gcc8.1だと char (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 0 (!(n > d && is_usual_num(n))) 1 (!(n > d && is_usual_num(n))) 0 break calculated = -128 numeric_limits = 127 128 127 となるね : デフォルトの名無しさん [sage] 2018/10/12(金) 21:22:44.25:+EEi3z6C ORACLEがお金取りますよってやつじゃない? : デフォルトの名無しさん [sage] 2018/10/12(金) 21:27:58.87:+EEi3z6C なぜか言語自体のコード読む読まないの話になってるけど、これくらいのコードなら動かせばすぐにfirstが何してるか分かるじゃん、って思っただけだわ : デフォルトの名無しさん [sage] 2018/10/13(土) 10:05:11.14:m4emGyLz お題 方程式 1/n = 1/x + 1/y (ただし、n,x,yは正整数でx≦y)について考える 例えばn=4のとき、1/4 = 1/5 + 1/20 = 1/6 + 1/12 = 1/8 + 1/8 より解の個数は3である 上限Mが与えられたとき、上の方程式の解の個数がMを超える最小のnの値を求めよ 2 -> 4 5 -> 12 10 -> 24 100 -> 1260 1000 -> 180180 10000 -> 116396280 250000000000 -> ? : デフォルトの名無しさん [sage] 2018/10/13(土) 11:29:08.44:4qDoRB+X つまんない : デフォルトの名無しさん [sage] 2018/10/13(土) 11:32:11.63:QkDteBzw n = 2の時 1/4 + 1/4 = 1/2 1/3 + 1/6 = 1/2 だけだから結果は2だよ n=4の時より大きくなることはあり得ないし : デフォルトの名無しさん [sage] 2018/10/13(土) 11:52:27.26:QkDteBzw ごめん。は勘違い無視して : デフォルトの名無しさん [sage] 2018/10/13(土) 17:46:23.51:QtssFnIu Java ttp://https://ideone.com/Y57fPl : デフォルトの名無しさん [sage] 2018/10/15(月) 17:32:39.82:lmCCx0VP 回答一人で出題者からの返事がないとあってるかどうかわからないから困る : デフォルトの名無しさん [] 2018/10/17(水) 11:31:35.00:UkGf74ne お題 [0,1]の一様乱数をN個発生させ、小さい順に並べてa(1), ..., a(N)とする 同様にもうN個作って小さい順にb(1), ..., b(N)とする 同じ順位同士で(a(1), b(1)), ..., (a(N), b(N)) とペアを作った時、a>bとなるペアの個数は0〜N個になるが、その分布は? またa, bを一様分布以外の分布から取ってくるとどうなる? : デフォルトの名無しさん [sage] 2018/10/17(水) 12:32:44.20:DKH+Jm9W それはプログラミングで解くお題なのか? : デフォルトの名無しさん [] 2018/10/17(水) 13:07:54.93:OYXuI76a シミュレーションしてみるのも面白いかなと : デフォルトの名無しさん [] 2018/10/17(水) 13:50:50.88:8efdFbKL 趣味で : デフォルトの名無しさん [sage] 2018/10/17(水) 14:07:56.22:4awkQadJ これはひどい : デフォルトの名無しさん [sage] 2018/10/17(水) 15:35:45.15:5mPHIqhK プログラミングで解くということに挑戦することから逃げるプログラマー : デフォルトの名無しさん [] 2018/10/17(水) 15:55:41.32:mC+TJhph 数学に逃げちゃ駄目だ。 : デフォルトの名無しさん [sage] 2018/10/17(水) 17:12:22.62:DXXGfTNm 乱数全部同じパターンを引いてもその結果のみから分布を論じてかまわないというならそれでもいいがな : デフォルトの名無しさん [sage] 2018/10/17(水) 17:34:51.31:slnS35LM ちょっとやってみた J で NB. monadic sort operator sort=: /:~ NB. monadic operator returns count of a_n > b_n NB. where a and b is sorted y-length array of rand(1000) do1=: verb define a =. sort ?y$1000 b =. sort ?y$1000 +/ (a>b) ) NB. dyad operator returns count of number x in array y count=: dyad define +/ (x = y) ) 続く : デフォルトの名無しさん [sage] 2018/10/17(水) 17:35:05.08:IG2KKzqQ Squeak/Pharo Smalltalkでシミュレーションのみ 擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller) | N M random bag | N := 10. M := 1e6. random := Random new. bag := Bag new. M timesRepeat: [ | pairs count | pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}]. count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair]. bag add: count ]. bag sortedElements "Squeak =>{ 0->981. 1->9873. 2->44008. 3->117136. 4->205258. 5->246203. 6->204286. 7->117345. 8->44247. 9->9702. 10->961} " : デフォルトの名無しさん [sage] 2018/10/17(水) 17:38:20.84:cKcilnbV Squeak/Pharo Smalltalkでシミュレーションのみ 擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller) | N M random bag | N := 10. M := 1e6. random := Random new. bag := Bag new. M timesRepeat: [ | pairs count | pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}]. count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair]. bag add: count ]. bag sortedElements "Squeak =>{ 0->981. 1->9873. 2->44008. 3->117136. 4->205258. 5->246203. 6->204286. 7->117345. 8->44247. 9->9702. 10->961} " : デフォルトの名無しさん [sage] 2018/10/17(水) 17:40:58.97:wdgUzBYj あ、誤連投&Jのにきスマン : デフォルトの名無しさん [sage] 2018/10/17(水) 17:41:12.83:slnS35LM 続き NB. 長さ100の配列で100000回試行 r =: (do1 "0) 100000$100 NB. r を表示 r => 43 77 58 31 23 36 59 26 85 15 73 72 4 34 0 26 22 26 85 70 95 2 64 46 22 84 22 86 78 39 51 34 92 94 68 98 47 38 68 92 48 43 19 97 80 18 13 65 76 79 17 88 19 39 72 74 16 54 32 11 99 3 80 32 94 25 87 91 ... NB. 0...100 の各数値の出現数 (i. 101) (count "0 1) r => 109 107 118 94 104 93 98 100 76 87 97 102 93 98 101 94 94 90 112 107 92 103 109 97 112 89 113 118 97 108 96 81 86 103 87 102 107 101 95 90 96 102 96 87 100 88 108 115 97 119 129 104 94 100 104 101 114... NB. グラフ化 plot (i. 101) (count "0 1) r ttps://i.imgur.com/QSKqVC6.jpg 一様分布っぽい : デフォルトの名無しさん [sage] 2018/10/17(水) 17:43:54.06:slnS35LM だいぶ結果が違っててわろすw ソート忘れてないか? : デフォルトの名無しさん [sage] 2018/10/17(水) 17:47:40.41:slnS35LM 理屈で考えると乱数がどんな分布でも a、b の分布が同じならコレの結果は常に同じ分布か : デフォルトの名無しさん [sage] 2018/10/17(水) 19:01:16.05:wdgUzBYj なんか書き込めん… たしかに^^; pairs := (random next: N) sort with: (random next: N) sort collect: [:a :b | {a. b}]. で同じ分布になった : デフォルトの名無しさん [] 2018/10/17(水) 22:28:10.42:9jVKFKz5 ハローワールドの次にやる問題ってなんだろう : デフォルトの名無しさん [] 2018/10/17(水) 22:28:34.01:Ny9Q/0jK ハローワークへ行きなさい : デフォルトの名無しさん [sage] 2018/10/17(水) 22:47:23.45:ysrRFDeq echoかfizz buzzでもやれば : ◆QZaw55cn4c [sage] 2018/10/17(水) 23:45:01.56:DyWl92+N >echo ? : デフォルトの名無しさん [] 2018/10/18(木) 09:27:49.01:xtVP5nmJ echoコマンドの実装ってことじゃない? \0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。 : デフォルトの名無しさん [sage] 2018/10/18(木) 19:47:17.70:3zhbamE0 136本人が出てきて答えなさい : デフォルトの名無しさん [sage] 2018/10/18(木) 22:31:25.80:qi6SRLg2 ハローワールドの次ぐらいだとすごろくとかじゃない : デフォルトの名無しさん [] 2018/10/19(金) 16:49:17.22:F1UCQFsO お題 標準入力から入力したデータをそのまま標準出力人出力する : デフォルトの名無しさん [] 2018/10/19(金) 17:05:33.84:veK9KPY5 ttp://http://3dnchu.com/archives/tree-it/ このようなソフトはvisual studioで作るんですか? なんの言語がいいか教えてください : デフォルトの名無しさん [] 2018/10/19(金) 17:15:05.14:gPrGaWTX cat : デフォルトの名無しさん [sage] 2018/10/19(金) 18:18:43.95:rCjk/mnI Brainfuck ,[.,] : デフォルトの名無しさん [sage] 2018/10/19(金) 18:19:25.68:rCjk/mnI 安価ミス -> : デフォルトの名無しさん [sage] 2018/10/19(金) 20:16:34.44:qai0UNii お題 マルチバイト文字だけ文字化けさせて出力 : デフォルトの名無しさん [] 2018/10/19(金) 20:39:51.48:5dseSh/K Python ttp://https://ideone.com/sT2p2O : デフォルトの名無しさん [sage] 2018/10/20(土) 03:08:59.15:gD7ZVb6v iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん : デフォルトの名無しさん [] 2018/10/20(土) 05:27:36.15:qwv4GmvH Kotlin ttp://https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw 入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。 つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。 化け方は2通りでサロゲートペアの文字は % になりその他は * になる。 : デフォルトの名無しさん [] 2018/10/20(土) 17:10:58.56:hxCjYBWY Io File standardInput contents print : デフォルトの名無しさん [sage] 2018/10/20(土) 17:46:57.83:cv2X893a お題: 超簡単なステートマシン 以下の3つのデータがランダムに入力される。 1: hi 2: wake up 3: sleep 1が入力された場合、状態がwake upであれば「hello」、状態がsleepであれば「zzz...」と出力せよ。 2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。 : デフォルトの名無しさん [] 2018/10/20(土) 18:05:02.67:Nttc2RvP つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね) データは勝手に標準入力にするけど。 (リダイレクトでファイルからに出来るし) : デフォルトの名無しさん [] 2018/10/20(土) 18:08:05.20:Nttc2RvP あれ、違うぞ? hiが入力された時、「かつ」wake upだったら”hello”出力か。 んでsleepなら”zzz...”ね。 それ以外無視と。 了解。 : デフォルトの名無しさん [] 2018/10/20(土) 18:12:34.08:Nttc2RvP てか、1ー3の数字だけで良いわ。 状態の意味はわかったけど、状態の文字は要らんね。 : デフォルトの名無しさん [sage] 2018/10/20(土) 18:16:14.29:xvv7H8Vz それ以外をどう考慮すべきかは書かれてないから、 ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉 そんなことよりステートマシンなら初期状態は与えろよw : デフォルトの名無しさん [] 2018/10/20(土) 18:28:45.80:AUqXYm6F python3 state = "sleep" while True: x = input("> ") if x == "hi": print("zzz..." if state == "sleep" else "hello") elif x == "wake up": state = "wake up" elif x == "sleep": state = "sleep" else: print("invalid input.") : デフォルトの名無しさん [] 2018/10/20(土) 18:42:18.95:Nttc2RvP #include <stdio.h> #include <conio.h> int main(void) { char c,state = 0; while(1) { c = getchar(); switch(c) { case '1': if(state == '2') { printf("hello"); } else if(state == '3') { printf("zzz..."); } break; : デフォルトの名無しさん [] 2018/10/20(土) 18:43:23.41:Nttc2RvP case '2': state = '2'; break; case '3': state = '3'; break; default: break; : デフォルトの名無しさん [] 2018/10/20(土) 18:43:31.11:Nttc2RvP } } return 0; } バッファ 無い方がいいのかと思ってバッファ無し版。(押したら即時入力) conio.hは環境依存だけど、どうせWinだろ。 stdio.hのgetcだったら、バッファがあるからEnter押さないとだけど最初の1文字が入る。 面倒臭かったからステータスは数字に直さず文字そのまま使った。 : デフォルトの名無しさん [sage] 2018/10/20(土) 20:20:44.01:WvTfEY4N お題 2つの区間の共通部分を出力せよ [1,3] [2,4] => [2,3] (1,2) [1,2] => (1,2) [0,100) (5,+inf) => (5,100) (-inf,2] [1,+inf) => [1,2] [1,2) [2,3) => {} : デフォルトの名無しさん [sage] 2018/10/20(土) 21:46:37.40:O4sbTglp ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])" : デフォルトの名無しさん [] 2018/10/21(日) 04:42:48.87:sz/a4USN Kotlin ttp://https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw 初期状態は sleep にした。 wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。 入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。 : デフォルトの名無しさん [] 2018/10/21(日) 04:53:27.38:sz/a4USN Perl の1行プログラム perl -ne 'BEGIN{$s=0;%x=("sleep"=>0,"wake up"=>1);%r=(0=>"zzz...",1=>"hello")}print ">> $_";chomp;\ if(defined($x{$_})){$s=$x{$_}}elsif($_ eq "hi"){print"$r{$s}\n"}else{print "ERROR\n"}' 仕様はと同じ。 1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。 : デフォルトの名無しさん [sage] 2018/10/21(日) 09:26:11.61:3Rh2KUxU java ttp://https://ideone.com/fpKVdM : デフォルトの名無しさん [sage] 2018/10/21(日) 09:40:05.59:UVDgsDD7 GNU Smalltalk 入力は、数値ではなくメッセージで 状態推移は、クラスチェンジで(つまりインスタンス変数なし&条件分岐なし) …な感じで、他言語では思いつきにくい実装で遊んでみました Object subclass: Machine [ wakeUp [ ^self ] sleep [ ^self ] hi [ self subclassResponsibility ] state [ ^self class displayNl ] Other := nil. ] Machine class extend [ new [ ^WakeUp basicNew ] ] Machine subclass: WakeUp [ hi [ 'hello' displayNl ] ] Machine subclass: Sleep [ hi [ 'zzz...' displayNl ] ] Machine extend [ Other := Sleep basicNew ] WakeUp extend [ sleep [ ^self become: Other ] ] Sleep extend [ wakeUp [ ^self become: Other ] ] | machine | machine := Machine new. machine state. "=> WakeUp " machine hi. "=> hello " machine sleep; state. "=> Sleep " machine hi. "=> zzz... " machine wakeUp; state. "=> WakeUp " machine wakeUp; state. "=> WakeUp " machine sleep; state. "=> Sleep " machine sleep; state. "=> Sleep " ttp://https://ideone.com/vyCRfq : デフォルトの名無しさん [sage] 2018/10/21(日) 11:09:36.22:S2kctYlU PowerShell、初期状態は 'Sleep' function StateMachine { param([parameter(ValueFromPipeline=$true)][string]$Event) begin { $InSleep = $true } process { switch($Event){ 'hi'{ Write-Host "$(if($InSleep){'zzz...'}else{'hellow'})"} 'wake up'{$InSleep=$false} 'sleep'{$InSleep=$true} } } } 'hi','sleep','hi','wake up','hi' | StateMachine : デフォルトの名無しさん [] 2018/10/21(日) 18:51:44.61:7SU77e8C Python3 ttp://https://ideone.com/BBteSk infは対応してないので1億とか適当な大きい値で代用 : デフォルトの名無しさん [] 2018/10/21(日) 22:29:32.21:4ZLg1Jin Lua io.write(io.read("*a")) : デフォルトの名無しさん [] 2018/10/22(月) 01:45:31.26:mc31Kn/b これおかしくね? : デフォルトの名無しさん [sage] 2018/10/23(火) 19:00:32.44:eWhef4/P 返答遅れてすみません 数値はあってるようです 私の稚拙なコードでよければ参考までに Haskell ttp://https://www.ideone.com/9Z0xOX : デフォルトの名無しさん [sage] 2018/10/23(火) 21:37:05.53:HCMpmlk6 お題 Excel列番号の数字表記とアルファベット表記を相互変換せよ A => 1 AA => 27 ABC => ? 26 => Z 266379 => ? : デフォルトの名無しさん [sage] 2018/10/23(火) 22:19:55.60:kr01ah20 Part6の754ですでに通った道だった ttps://peace.5ch.net/test/read.cgi/tech/1418278634/754 "> ttps://peace.5ch.net/test/read.cgi/tech/1418278634/754 そしてその時の俺の回答はこれだ ttp://http://ideone.com/SM0HXt : デフォルトの名無しさん [sage] 2018/10/23(火) 22:19:56.82:UJUp/CV/ Ruby f=->n{n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+?Z}.delete ?@} g=->s{s.tr('A-Z','0-9a-p').to_i(26)+(26**s.length-1)/25} puts '%s => %s'%[$_.chop!,~/\d/?f[$_.to_i]:g[$_]]while gets # => A => 1 AA => 27 ABC => 731 26 => Z 266379 => ODAI : デフォルトの名無しさん [sage] 2018/10/23(火) 22:31:11.04:fVBjYNqz iか何かが無かったような? : デフォルトの名無しさん [] 2018/10/23(火) 23:51:06.93:H259Ae8g var trans = alpha => parseInt((parseInt(alpha, 36) - parseInt('9'.repeat(alpha.length), 36)).toString(36), 26) trans('A') //=> 1 trans('AA') //=> 27 trans('ABC') //=> 731 順変換だけやってみたけどすごい不安… Aがゼロ的な物なのか1的な物なのかこんがらがる… : デフォルトの名無しさん [sage] 2018/10/24(水) 00:17:51.17:n2SwZ/Io Aは0扱いでよい。 与えられた文字列を str にとして x = str[A-Zの26進数] に対して 求める数 f(x) f N\{0} -> N\{0} は f(x) = x + (26**g(x) - 1)/25 (g(x) := x == 0 ? 1 : [log_26(x)] + 1). f は全単射なので逆写像f^(-1)が存在するので f と f^(-1) が答え. : デフォルトの名無しさん [sage] 2018/10/24(水) 00:19:21.73:kOQJNkO6 マジカルインクリメント!マジカルインクリメントじゃないか!! : デフォルトの名無しさん [sage] 2018/10/25(木) 11:51:35.92:3ObU9lli Pharo/Squeak Smalltalk | fromExcelColm toExcelColm | fromExcelColm := [:str | str asByteArray reversed - 64 polynomialEval: 26]. toExcelColm := [:n | | nn digits | nn := n. digits := OrderedCollection new. [(nn := nn - 1) >= 0] whileTrue: [digits addFirst: nn \\ 26. nn := nn // 26]. (digits asByteArray + 65) asString ]. fromExcelColm value: 'A'. "=> 1 " fromExcelColm value: 'AA'. "=> 27 " fromExcelColm value: 'ABC'. "=> 731 " toExcelColm value: 26. "=> 'Z' " toExcelColm value: 266379. "=> 'ODAI' " fromExcelColm value: 'EXCEL'. "=> 2708874 " toExcelColm value: 2788185942068. "=> 'MICROSOFT' " : デフォルトの名無しさん [] 2018/10/25(木) 12:50:39.12:hw/Q19JU それ Z の時に失敗しない? 他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。 : デフォルトの名無しさん [sage] 2018/10/25(木) 16:24:37.58:aKbYC4uC python3 ttp://https://ideone.com/zOajDg ここにソースを書いたらブロックされたからideoneで : デフォルトの名無しさん [sage] 2018/10/25(木) 16:39:59.02:wLNEFoo1 >Aは0扱いでよい。 >与えられた文字列を str にとして x = str[A-Zの26進数] に対して それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな : デフォルトの名無しさん [] 2018/10/25(木) 16:46:00.18:9VVQwm/j やっぱり36進数[0-9a-z]使った横着は出来ないのか… : デフォルトの名無しさん [sage] 2018/10/25(木) 17:18:04.60:BFrEhhQu perlのbasecalcだとマジカルなことができる : デフォルトの名無しさん [sage] 2018/10/25(木) 17:29:09.19:/ssDOiD4 文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい : デフォルトの名無しさん [sage] 2018/10/25(木) 17:46:06.11:wLNEFoo1 デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ 以下J 26 #. _64 + a. i. 'ABC' ==> 731 26 #. _64 + a. i. 'ODAI' ==> 266379 エンコードはちょっと1行では説明しにくい : デフォルトの名無しさん [sage] 2018/10/25(木) 17:52:55.69:Toapoewp 27進だろ… : デフォルトの名無しさん [] 2018/10/25(木) 17:53:10.85:hw/Q19JU もう一捻り必要なんだよ。 考えてくと何れわかる。 : デフォルトの名無しさん [sage] 2018/10/25(木) 18:17:57.30:wLNEFoo1 下からn桁目の重み付けが 26^n で(1番下を0桁とする)、 各桁の数字が1〜26なんだよ これで0以外の数は表記できる AAA は 1*26*26 + 1 *26 + 1 ABC は 1*26*26 + 2 *26 + 3 YAZ は 25*26*26 + 1*26 + 26 : デフォルトの名無しさん [] 2018/10/25(木) 19:37:38.82:gO/HWAcm この問題を思い出した ttp://http://riverplus.net/codeiq/DigitalTaboo.pdf : デフォルトの名無しさん [sage] 2018/10/25(木) 20:05:21.59:na0fZQbz 全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。 ttp://http://www.cjh.com.cn/ の画面左まんなか辺りの 三峡水? 25日 19?00分 174.64 -(入) 15200(出) を自動で毎日夜21時に取得して ttps://egg.5ch.net/test/read.cgi/river/1507607675/ に自動で書き込む方法はありますでしょうか? 長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、 : デフォルトの名無しさん [sage] 2018/10/25(木) 20:16:07.42:na0fZQbz ttp://http://www.cjh.com.cn/ は ttp://http://nweb.cjh.com.cn/sssqold.html からでもOKです。 : デフォルトの名無しさん [sage] 2018/10/25(木) 20:33:47.72:TSZxWHJ/ sssqold.htmlのソース見たが読むほうは簡単そうだな 書き込む方はしらん : デフォルトの名無しさん [sage] 2018/10/25(木) 20:33:50.34:BSekExc/ スレタイ : デフォルトの名無しさん [sage] 2018/10/25(木) 23:54:56.07:Hzy8+5Se あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ : デフォルトの名無しさん [sage] 2018/10/25(木) 23:59:06.56:9OC64j5F 2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、 powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね スクリプトはこんな感じかね $html= Invoke-WebRequest -UseBasicParsing ttp://http://nweb.cjh.com.cn/sssqold.html $pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`"" if ($html.RawContent -match $pattern) { $time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3]) "三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4] } : デフォルトの名無しさん [sage] 2018/10/26(金) 01:56:21.09:zqmCYDLg 無駄に一行だな : デフォルトの名無しさん [sage] 2018/10/26(金) 03:39:31.47:c84xrxY5 (fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC")))) : デフォルトの名無しさん [sage] 2018/10/26(金) 19:50:36.71:/kG4owY9 お題 ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。 0013 0123 122. 013. 0123 => 4 9.9.9.9.9.9 .9.9.9.9.9. => 1 0123 3012 2301 1230 => 0 : デフォルトの名無しさん [sage] 2018/10/26(金) 20:45:47.09:yqPKU+uE おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!! : デフォルトの名無しさん [] 2018/10/26(金) 20:51:49.05:8JGFizba 2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな? : デフォルトの名無しさん [] 2018/10/29(月) 19:22:44.11:PHNS982/ Kotlin ttp://https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ 入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。 : デフォルトの名無しさん [sage] 2018/10/30(火) 17:20:53.74:xBpFVgTt python3 ttp://https://ideone.com/DIFmAW 最適もへったくれもないゴリ押しですわ… : デフォルトの名無しさん [sage] 2018/10/30(火) 21:09:38.22:RM3bKAov お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。 1行目: 現在のページ番号 2行目: 総ページ数 3行目: 表示するリンク数 例1 入力: 1 10 5 出力: [1] 2 3 4 5 例2 入力: 5 10 5 出力: 3 4 [5] 6 7 例3 入力: 10 10 5 出力: 6 7 8 9 [10] : デフォルトの名無しさん [sage] 2018/10/30(火) 22:21:08.83:Mk80lxDb perl $now = shift or die $! ; $all = shift or die $! ; $show = shift or die $! ; $x = 1 + int $show/2; $y = $all - $x + 1; if($now <= $x){ $start = 1; }elsif($y <= $now){ $start = $all - $show + 1; }else{ $start = $now - int $show/2; } $end = $start + $show - 1; print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end); : デフォルトの名無しさん [] 2018/10/30(火) 22:51:09.23:N8SwgYLQ Python3 current = int(input()) total = int(input()) n_links = int(input()) assert 1 <= current <= total and n_links <= total if current <= n_links//2: seq = range(1, n_links+1) elif current >= total-n_links//2: seq = range(total-n_links+1, total+1) else: left = current - n_links//2 right = current + n_links//2 + (0 if n_links%2 == 0 else 1) seq = range(left, right) seq = ["[{}]".format(s) if s == current else str(s) for s in seq] print(" ".join(seq)) : デフォルトの名無しさん [] 2018/10/30(火) 22:54:52.47:N8SwgYLQ うまく貼れなかった ttp://https://ideone.com/2ch1r3 : デフォルトの名無しさん [sage] 2018/11/02(金) 11:25:03.96:b7bQuZgR Squeak Smalltalk | fn | fn := [:pg :tot :wd | | start pages | start := pg - (wd // 2) min: tot - wd + 1 max: 1. pages := start to: start + wd - 1. (pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' ' ]. #((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri] "=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') " : デフォルトの名無しさん [sage] 2018/11/02(金) 23:41:59.56:8MYT0pgk 三峡水? 02日 23?00分 174.53 -(入)14700(出) : デフォルトの名無しさん [] 2018/11/03(土) 04:09:45.11:vg8hCxXN Kotlin ttp://https://paiza.io/projects/Zb6Ey6FbQYsGjsi5GBK9lQ 折角日本語使えるんだからたまには使わないとな。 : デフォルトの名無しさん [sage] 2018/11/03(土) 08:08:00.00:BMDI0yEn rust ttp://https://ideone.com/xaLIC6 rust ttp://https://ideone.com/UxomHc : デフォルトの名無しさん [sage] 2018/11/03(土) 23:34:36.36:BMDI0yEn c ttp://https://ideone.com/W9eW0R c ttp://https://ideone.com/pL0QmX : デフォルトの名無しさん [] 2018/11/04(日) 13:46:33.88:pidkuN2F Haskell main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)] put (x,y,z) = return (pager x y z) >>= print pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b] pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b] pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b] mklist a xs = [small a xs , jst a xs , big a xs] small a = filter (< a) big a = filter (> a) jst a = filter (== a) 結果 [[],[1],[2,3,4,5]] [[3,4],[5],[6,7]] [[6,7,8,9],[10],[]] [executed "pager.hs"] : デフォルトの名無しさん [] 2018/11/04(日) 13:47:27.44:pidkuN2F 結果が切れた。。。 改めて結果。 [[],[1],[2,3,4,5]] [[3,4],[5],[6,7]] [[6,7,8,9],[10],[]] [executed "pager.hs"] : デフォルトの名無しさん [sage] 2018/11/05(月) 17:57:48.99:GRwYYoWB お題 3つの自然数A,B,Cが与えられる。 初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。 含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。 : デフォルトの名無しさん [sage] 2018/11/05(月) 20:17:41.49:0wNeh4D8 python def fibo(a, b): _yield a _yield b _while True: __yield a + b __a, b = b, a+b def func(fb, n): _count = 1; _while True: __num = fb.next() __print "{} th term = {}".format(count, num) __if num >= n: ___if num == n: ____return count ___else: ____return False __count = count + 1 _return False a, b, c = 1, 1, 100 print func(fibo(a, b), c) : デフォルトの名無しさん [sage] 2018/11/05(月) 20:25:58.31:0wNeh4D8 同じもの ttps://ideone.com/Dff2U9 : デフォルトの名無しさん [sage] 2018/11/05(月) 21:15:45.04:b01o/g5T rust ttp://https://ideone.com/8R5UmH : デフォルトの名無しさん [sage] 2018/11/05(月) 23:33:04.48:6d8cBeMO Ruby require 'matrix' def hoge(a, b, c) rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]] (0..Float::INFINITY).each do |n| m = fm * im return m[1, 0] > c ? false : n if m[1, 0] >= c fm *= rm end end p hoge(0,1,88) #=> false p hoge(0,1,89) #=> 11 p hoge(0,1,90) #=> false : デフォルトの名無しさん [] 2018/11/06(火) 03:12:12.75:BD76rR44 Kotlin ttp://https://paiza.io/projects/aLPj37Gr548Ba0214az42Q : デフォルトの名無しさん [] 2018/11/06(火) 07:54:03.24:GFB90oOd C 初項の次第二項って書いてるのに、みんな何故0始まりなの。。。 #include <stdio.h> int fibin(int,int,int); int main(void) { for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i)); return 0; } int fibin(int fst,int snd,int num) { int i = 2,fib = fst; if(fst == num) return 1; if(snd == num) return 2; while(fib != num) { fib = fst; fib += snd; if(fib <= num) i++; else return -1; fst = snd; snd = fib; } return i; } : デフォルトの名無しさん [sage] 2018/11/06(火) 09:23:46.31:jl2IXbjS (A,B,C)が(0,0,0),(0,1,0),(0,1,1),(1,0,0),(1,0,1)の時はCが無限回、(1,1,1),(0,X,X),(X,0,X),(X,X,X)(2≦X)の時はCが2回出現することがあるが考慮した方が良いか? : デフォルトの名無しさん [] 2018/11/06(火) 10:48:03.28:VF9SVEaj A,Bによっては無限ループになり得ないか? : 219 [] 2018/11/06(火) 11:49:20.62:13CfGTjW そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。 : 219 [] 2018/11/06(火) 11:52:26.86:13CfGTjW した。見事にした。 足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。 今さら直す気は起きんが。 : デフォルトの名無しさん [] 2018/11/06(火) 11:52:29.61:GFB90oOd 今まで投稿されてるコード見る限りは最初に見つけた時点で停止。 自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。 : デフォルトの名無しさん [sage] 2018/11/06(火) 12:34:42.11:jAy4xbYh Squeak/Pharo Smalltalk | fibGen fn | fibGen := [:fst :snd | Generator on: [:g | | a b | a := fst. b := snd. g yield: a. [b := a+b. g yield: (a := b-a)] repeat ] ]. fn := [:A :B :C | | count fib last | count := 1. fib := fibGen value: A value: B. [(last := fib next) < C] whileTrue: [count := count + 1]. last = C ifTrue: [count] ifFalse: [false] ]. fn value: 1 value: 1 value: 89. "=> 11 " fn value: 1 value: 1 value: 90. "=> false " : デフォルトの名無しさん [] 2018/11/06(火) 14:46:16.34:GFB90oOd Haskell main = mapM_ (\x -> putStr (show x ++ ":") >> print (fibin 0 1 x)) [0..6] fibin 0 0 c | c /= 0 = Nothing fibin a b c = lookup c $ zip (take (10 + c) fib) [1..] where fib = a:b:(zipWith (+) fib (tail fib)) : デフォルトの名無しさん [sage] 2018/11/06(火) 18:51:28.38:2YnZy0Ze ruby ttp://https://ideone.com/Q6aVfo AとB足してゼロ問題に対しては fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}} : デフォルトの名無しさん [sage] 2018/11/06(火) 22:17:30.30:Nv8RqtnA お題 xy平面上の点がn+1個与えられる(各点のx座標は互いに異なる) 与えられた点をすべて通る関数 y=a[i]x^n+...+a[1]x+a[0] の係数a[i]を求めよ [入力] 点の個数(n+1) x[0] y[0] ... x[n] y[n] [出力] a[n] ... a[0] 2 0 1 1 3 => 2 1 (y=2x+1) 1 100 100 => 100 5 0 1 -1 5 2 2 4 -1 1 0 => -2/15 4/15 49/30 -83/30 1 : デフォルトの名無しさん [sage] 2018/11/06(火) 23:24:52.38:bpzsP6yI 【ラグランジュ補間】 Σ[i=1,n] )y[i]Π[k≠i](x-x[k])/ (x[i]-x[k]) この係数を計算するだけ。 こういう純数学的な処理は、お題としてはどうかな? 応用上、常に展開した係数を求めるのに意味がある とも限らんし、精度評価が重要だったりとか : デフォルトの名無しさん [] 2018/11/06(火) 23:43:20.04:iVEsbroy 線形代数は偉大 import numpy as np N = int(input()) x, y = [], [] for i in range(N): _x, _y = map(float, input().split()) x.append(_x) y.append(_y) x = np.array(x) y = np.array(y) px = np.array([x**k for k in range(N)]) a = np.dot(y, np.linalg.inv(px)) print(a[::-1]) : デフォルトの名無しさん [sage] 2018/11/06(火) 23:51:57.59:bpzsP6yI [1 x[0] x[0]^2...x[0]^n] [a[n]] =[y[0]] [1 x[1] x[1]^2... x[1]^n] [a[n-1]]=[y[1] [1 x[2] x[2]^2...x[2]^n] [a[n-2]]=[y[2]] ... [1 x[n] x[n]^2 .... x[n]^n] [a[0] ]=[y[n]] を解かせたというわけか... : デフォルトの名無しさん [sage] 2018/11/07(水) 00:03:06.07:q3WQuIHF また数学板から荒らしにきたのか : デフォルトの名無しさん [] 2018/11/07(水) 00:56:30.16:yYgCxC/p お題: 四則演算の文字列を受け取って計算結果を返す 1+2+3+4 => 10 4+5*6-2*3 => 28 5+12*(2+9/3)/((2+3)*5-7*3) => 20 : デフォルトの名無しさん [sage] 2018/11/07(水) 00:58:06.61:B66LtM9k Ruby s = ->a, b{a.zip(b).map{|i, j| i - j}} t = ->a, k{a.map{|i| i * k}} n = gets.to_i - 1 m = $<.read.split($/).map{|e| f[n, *e.split.map(&:to_r)]} (1..n+1).each do |r| (nonzero = m[r- 1..-1].find_index{|e| e[r].nonzero?} + r - 1) && next m[r - 1], m[nonzero] = m[nonzero], m[r - 1] m[r - 1] = t[m[r - 1], 1/m[r - 1][r]] [*[*(0..n)] - [r - 1]].each{|i| m[i] = s[m[i], t[m[r - 1], m[i][r]/m[r - 1][r]]]} end puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' ' 2 0 1 1 3 #=> 2 1 (y=2x+1) 3 1 1 1 1 5 4 2 1 8 9 3 1 #=> -1/2 11/2 -4 : デフォルトの名無しさん [sage] 2018/11/07(水) 01:00:36.71:B66LtM9k 訂正 尚複数解存在する時は最も次数の小さいものを出力 2 0 1 1 3 #=> 2 1 3 1 1 5 2 8 3 #=> -1/2 11/2 -4 : デフォルトの名無しさん [sage] 2018/11/07(水) 01:50:15.65:B66LtM9k ruby -nle'puts [$_,eval($_)]*" => "' 1+2+3+4 => 10 4+5*6-2*3 => 28 5+12*(2+9/3)/((2+3)*5-7*3) => 20 : デフォルトの名無しさん [sage] 2018/11/07(水) 02:11:40.28:B66LtM9k 訂正 s = ->a, b{a.zip(b).map{|i, j| i - j}} t = ->a, k{a.map{|i| i * k}} n = gets.to_i m = $<.read.split($/).map{|e| f[n + 1, *e.split.map(&:to_r)]} n.times do |r| (nonzero = m[r..-1].find_index{|e| e[r].nonzero?} + r) || next m[r], m[nonzero] = t[m[nonzero], 1/m[nonzero][r + 1]], m[r] [*[*(0..n + 1)] - [r]].each{|i| m[i] = s[m[i], t[m[r], m[i][r + 1]/m[r][r + 1]]]} end puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' ' : デフォルトの名無しさん [sage] 2018/11/07(水) 12:58:28.67:jk7t6Ngg Squeak Smalltalk | fn | fn := [:points | | xs ys fi gi | xs := points collect: #x. ys := points collect: #y. fi := [:x :i | ((1 to: xs size) copyWithout: i) inject: 1 into: [:prod :k | prod * (x - (xs at: k))]]. gi := [:i | (0 to: xs size - 1) collect: [:n | n = 0 ifTrue: [1] ifFalse: [ (Array streamContents: [:ss | (xs copyWithoutIndex: i) combinations: n atATimeDo: [:comb | ss nextPut: (comb negated reduce: #*)] ] ) sum ]] ]. (ys * ((1 to: xs size) collect: gi) / (xs collectWithIndex: fi)) sum ]. fn value: {0@1. 1@3}. "=> #(2 1) " fn value: {100@100}. "=> #(100) " fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} " : デフォルトの名無しさん [sage] 2018/11/07(水) 13:01:59.20:jk7t6Ngg Pharo Smalltalk w/PolyMath っぽく "Metacello new repository: 'github://PolyMathOrg/PolyMath:master/src'; baseline: 'PolyMath'; load" | fn | fn := [:points | | xs ys xp | xs := points collect: #x. ys := points collect: #y. xp := (PMMatrix rows: ((xs size - 1 to: 0 by: -1) collect: [:m | xs raisedTo: m])) transpose. (xp inverse * ys asPMVector) asArray ]. fn value: {0@1. 1@3}. "=> #(2 1) " fn value: {100@100}. "=> #(100) " fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} " : デフォルトの名無しさん [sage] 2018/11/07(水) 18:36:22.03:LRSzKna1 お題 Windows bitmap画像(.bmp)は通常、下から上に向かって画像が記録されているが、 高さに負の値を指定することで、上から下へ向かって画像を記録することができる。 これを利用してbmp画像の上下を反転せよ。 : デフォルトの名無しさん [sage] 2018/11/07(水) 18:45:22.44:oTVd6hn3 どこが問題なのw 仕様に沿った解決法言っちゃってるじゃんw : 219 [] 2018/11/07(水) 19:20:37.53:bimd4khF プログラムを作るのがお題だろう。 ここはプログラミングのお題スレなんだからこれでいいんだよ。 むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。 : デフォルトの名無しさん [sage] 2018/11/07(水) 19:56:07.71:5DjOPE5m Ruby in_fname = 'hoge.bmp' out_fname = 'hoge_ud.bmp' File.binwrite(out_fname, File.binread(in_fname).tap{|b| b[22, 4] = [-b[22, 4].unpack(?l).pop].pack(?l)) : デフォルトの名無しさん [] 2018/11/07(水) 20:06:47.46:umLQTzF1 あなたがそういう問題しか好きじゃないか解けないだけでしょ スレ民の総意みたいな言い方しないで : デフォルトの名無しさん [sage] 2018/11/07(水) 20:14:12.09:Lazgvcn1 紙とえんぴつで解ける数学問題みたいなやつがプログラミングのお題としてダメなのは同意なんだけどは例えば 画像の上下を反転せよ。入力はbmpとする。 とかのほうが良かったんじゃないかな。 愚直に配列いじる奴を尻目に仕様を利用して華麗に解くやつが現れる。 これがいいんじゃないか。 : 219 [] 2018/11/07(水) 21:05:56.46:bimd4khF スレ民の総意がどうであろうともこのスレはプログラミングのお題スレなんだからプログラミングのお題になってないのはスレチであることには代わりがない。 適切なスレに書くかまたはなければ新たにそれ用のスレを作って書けば良い。 それでもいいかも知れないが問題が簡略化されているために自分で仕様を調べるというプログラミングとは少し違う作業が発生するな。 更に仕様の盲点に気付くかというクイズ的な要素もある。 : デフォルトの名無しさん [sage] 2018/11/07(水) 21:15:41.59:wOCAlbJb まあ式を実装するだけの数学問題と大差ないお題にしてしまうような要素は不要だったな : デフォルトの名無しさん [] 2018/11/07(水) 21:15:43.65:h4FWJh3K じゃないけど、数学の問題は問題自体が分からないから手が出せない。 高卒でも分かるように噛み砕いて貰えれば書けるかもだが。 : デフォルトの名無しさん [] 2018/11/07(水) 21:17:30.61:h4FWJh3K そう考えると、プログラミングの能力って言語覚えるより問題を理解する能力だよな。。。 : デフォルトの名無しさん [sage] 2018/11/07(水) 22:05:04.79:DuFCNJWg 噛み砕くとこうだな ファイルの22バイトめから保存されている4バイト長の整数値の符号を反転せよ。 ただし数値は下位バイトから順に格納されており、負数は2の補数表現を用いるものとする。 : デフォルトの名無しさん [sage] 2018/11/07(水) 22:06:17.13:DuFCNJWg 出力は反転した数値以外は元のファイルと同じ内容のファイルとする も要るか : デフォルトの名無しさん [] 2018/11/07(水) 22:14:53.17:h4FWJh3K ごめん の方が分からないんだ。。。 : デフォルトの名無しさん [sage] 2018/11/07(水) 22:28:14.93:/kHK9X1+ それこそ数学の質問スレでやってくれない? : デフォルトの名無しさん [] 2018/11/08(木) 03:03:27.47:yQlGi5bN >ここはプログラミングのお題スレなんだからこれでいいんだよ。 >むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。 スレタイ『プログラマーは何を勉強すべきか?』 プログラマーは何を勉強すべきかということだが、最新のトレンドに適応した勉強が必要だ。 俺は今までこれだけ沢山勉強してきたという人も、実は最新のトレンドに適応していない可能性もある。 5、結論 以上の結果より導き出される京大英語で8割を超すための対策は、「ネイティブ英語とは何か」 を定義づけして学ぶことに尽きるだろう。 たとえば、「この料理はまずい」という英作文なら受験生に多いのが This dish tastes poor. しかし、これは評価されない。なぜなら、英語として正しくてもマナー違反。英検英語なら否定文にして、 This dish isn't good. これでマナーは改善された。 しかし、ネイティブなら I don't like this dish. と言うだろう。本当に不味い場合は、 Yuck! と叫ぶ。そういう違いだ。 問題は、 「受験英語の参考書や問題集で取り上げられている構文や表現が現実に使われている英語と違う」 という事実。それを指導している教師や講師も、外国生活がなく50年前の表現を気づかずに指導して いること。そのために、校内テストや模試で高得点や上位の順位をとっても落ちてしまうこと。 ttp://https://storys.jp/story/18159 : デフォルトの名無しさん [sage] 2018/11/08(木) 03:57:11.05:AySxWi85 「この料理はまずい」の時点でマナー違反なんだからそのまま訳すのが正しい 料理がまずいときの一言を答えさせたいならそう出題すればいいことだ そういう出題側の質とか意識してんのかなこいつ : デフォルトの名無しさん [sage] 2018/11/08(木) 04:48:49.11:QHwNiY6E 数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。 このスレでは、頭を使わず、単純な総当たり問題が好まれる その方が、プログラミング的な問題 : デフォルトの名無しさん [sage] 2018/11/08(木) 05:18:56.02:HOEn5tLb お題: 自然数Nと、N個の「半角の小文字アルファベットと数字からなる1文字以上の文字列」が標準入力から順次与えられます。 文字列をNatural Sort*して標準出力から順次出力してください。 追加問題: お題1を正規表現を使わず実装してください。 *: "a120"と"a13"が与えられた場合、"a13","a120"の順番にソートするようにする。 また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、 "0"と"a"のどちらが先に来るかについては自由とします。 : デフォルトの名無しさん [] 2018/11/08(木) 05:51:13.63:yQlGi5bN >数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。 >このスレでは、頭を使わず、単純な総当たり問題が好まれる ならば、「チンポがシコシコする」という日本語表現は、文法的に正しいのか? チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。 オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、 全体(俺)と部分(チンボ)が別々になっている場合とが考えられる。けれども「チンボ」はそれ自体 が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。 例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。 違うか? 「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ! : デフォルトの名無しさん [] 2018/11/08(木) 07:42:34.26:Tu3rCJEk まあそうなんだけど、数学スレでガンガンプログラミング言語で答え出してる奴がいて正直羨ましい。 : デフォルトの名無しさん [sage] 2018/11/08(木) 09:21:24.69:UCtqQ5sl なぜそのスレで頑張らないのか。 二軍でヒーローになろうと思ってここで数学の問題出してるの? : デフォルトの名無しさん [] 2018/11/08(木) 09:28:43.02:Tu3rCJEk ? 私は出題者じゃ無いよ。 : デフォルトの名無しさん [] 2018/11/08(木) 09:57:33.73:2oWgTmr1 >なぜそのスレで頑張らないのか。 >二軍でヒーローになろうと思ってここで数学の問題出してるの? 俺はただパソコンに向かって独り言ブツブツ言って、チンポがシコシコしてるだけだが? : デフォルトの名無しさん [sage] 2018/11/08(木) 09:57:41.43:llemawmF How do I do a natural sort on an array? ttps://www.perlmonks.org/?node_id=68185 これを実装すんの? : デフォルトの名無しさん [] 2018/11/08(木) 10:23:04.41:Cbg63GbQ 君が何を言いたいのかよくわからない。 : デフォルトの名無しさん [] 2018/11/08(木) 10:34:41.85:yQlGi5bN 『チンポ』についての生態学は、俺にもよくわからん。 : デフォルトの名無しさん [sage] 2018/11/08(木) 11:03:16.65:WO5MlDuJ Ruby puts$<.readlines.sort_by{|a|[a.scan(/\d+|\D+/).map{|e|e.to_i(36)},a.size]} : デフォルトの名無しさん [sage] 2018/11/08(木) 14:52:40.11:9PdT3eEJ >また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、 : デフォルトの名無しさん [sage] 2018/11/08(木) 15:03:35.30:5p9g1xrz 問題無い # stdin a130 a12 a001 a01 a1 1 # stdout 1 a1 a01 a001 a12 a130 : デフォルトの名無しさん [sage] 2018/11/08(木) 15:08:17.09:9PdT3eEJ a01b2 a1b0002 : デフォルトの名無しさん [sage] 2018/11/08(木) 15:11:12.86:5p9g1xrz うわー恥ずかしい 指摘ありがとう : デフォルトの名無しさん [sage] 2018/11/08(木) 15:11:38.15:rrpg0ZUw a001 a12 これ逆にならんとあかんのとちゃう? : デフォルトの名無しさん [sage] 2018/11/08(木) 15:14:27.12:tjdDhH3P python3 むりやり数式で解いてみた ttp://https://ideone.com/LQb0jT : デフォルトの名無しさん [sage] 2018/11/08(木) 15:33:18.20:quzojjRV ソートの問題、 連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな つまり a01a a1b a01b をソートすると a01a a1b a01b : デフォルトの名無しさん [] 2018/11/08(木) 16:29:56.18:Tu3rCJEk Haskell main = concat $ map qsort grop grop = map filterlen [1..(maximum $ map length input)] filterlen n = filter (\x -> n == length x) input qsort [] = [] qsort (x:xs) = small ++ [x] ++ big where small = qsort [a |a <- xs, a <= x] big = qsort [a | a <- xs, a > x] input = ["a130","a12","a001","a01","a1","1"] : デフォルトの名無しさん [] 2018/11/08(木) 16:31:19.84:Tu3rCJEk input = ["a130","a12","a001","a01","a1","1"] : デフォルトの名無しさん [sage] 2018/11/08(木) 18:41:10.95:e5hl87sZ >連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな 同じ数値のときじゃなくて全体が等しいときか : デフォルトの名無しさん [sage] 2018/11/08(木) 18:52:29.20:B0s1LWLV input = ["01m30s","1m45s","02m03s"] 結果 ["1m45s","01m30s","02m03s"] あんまりnatural じゃない感じ : デフォルトの名無しさん [sage] 2018/11/08(木) 19:15:05.42:85A5tG8V お題 M行N列の領域をジグザグスキャンするときの順序を求めよ 3 3 => 1 2 6 3 5 7 4 8 9 4 2 => 1 2 3 5 4 6 7 8 3 5 => 01 02 06 07 12 03 05 08 11 13 04 09 10 14 15 1 8 => 1 2 3 4 5 6 7 8 : デフォルトの名無しさん [sage] 2018/11/08(木) 22:07:15.82:k/fJXxDB ruby ttp://https://ideone.com/06bXQn : デフォルトの名無しさん [] 2018/11/08(木) 22:11:37.46:Tu3rCJEk そう? ナチュラルソートっての知らんけど、その結果見ても仕様通りと思うんだが。 : デフォルトの名無しさん [sage] 2018/11/08(木) 22:16:02.65:EeFetNer を訂正 Ruby puts$<.readlines.sort_by{|a|a.scan(/(\D*)(\d+)/).map{|i,j|[i,j.to_i,j.size]}} # stdin a01b2 a1b0002 a130 a12 a001 a1 1 # stdout 1 a1 a1b0002 a01b2 a001 a12 a130 : デフォルトの名無しさん [sage] 2018/11/08(木) 23:33:47.08:TLTEncZh 誰に何を文句言うわけでもないがナチュラルソートってのは一般に "01.25" < "1.5" "01m 25cm" < "1m 35cm" とか "Chapter 001 section 5" < "Chapter 1 section 6" となるような順序での整列 逆でもいいけど 問題の仕様はどうかしらんが単に用語の解説ね : デフォルトの名無しさん [sage] 2018/11/08(木) 23:49:40.65:I6IWEGdd 今回の問題の仕様とは微妙に違うから回答にはならないけど echo -e "01m30s\n1m45s\n02m03s" | sort -V 01m30s 1m45s 02m03s ナチュラルソートならこうなるべきだな : デフォルトの名無しさん [sage] 2018/11/09(金) 09:07:23.82:cVPfgm+I の仕様で Ruby args = [ '01.25', '1.5', '01m 25cm', '1m 35cm', 'Chapter 001 section 5', 'Chapter 1 section 6', '01m30s', '1m45s', '02m03s' ] nsort = lambda do |args| f = ->str{str.scan(/(?=.)(\D*)(\d+(\.\d+)?)/).flat_map{|a, b| b.empty? ? [a] : [a, b.to_r]}} g = ->str{str.scan(/\d+/).map(&:size)} args.sort do |str1, str2| comparison = f[str1] <=> f[str2] comparison.zero? ? g[str1] <=> g[str2] : comparison end end p nsort[args] #=>["01m30s", "1m45s", "01m 25cm", "1m 35cm", "01.25", "1.5", "02m03s", "Chapter 001 section 5", "Chapter 1 section 6"] : デフォルトの名無しさん [] 2018/11/09(金) 17:42:13.83:SNvr5Euv 『チンポ』については、自分でも良くわからない、何とも言えない不思議な生き物だ。 : デフォルトの名無しさん [sage] 2018/11/09(金) 18:36:42.14:B4AEy6G3 お題 1以上N以下の奇数を並べた数の桁数を求めよ 3 => 2 (13) 10 => 5 (13579) 9999 => 19445 (135...99979999) 123456789 => ? 31415926535897 => ? : デフォルトの名無しさん [] 2018/11/09(金) 18:45:16.11:DHGOZxva 桁数というか奇数が何個かって話やね。 わざわざ分かりにくい仕様とか、コミュ障かと。 : デフォルトの名無しさん [] 2018/11/09(金) 18:47:33.93:DHGOZxva ん、ああ。 10とか100とかになったら個数と桁数は違うか。 悪かった。 : デフォルトの名無しさん [sage] 2018/11/09(金) 19:31:42.41:myvceSEv お題 与えられた数を最小文字数で生成する。 : デフォルトの名無しさん [sage] 2018/11/09(金) 19:36:37.28:b84kY48J rust ttp://https://ideone.com/Wl46o3 : デフォルトの名無しさん [] 2018/11/09(金) 19:38:13.95:JsSTi+Gx 問題の意味がわからん。何か例を書いてくれ。 : デフォルトの名無しさん [sage] 2018/11/09(金) 19:45:38.08:OW/zGENl 意味のわからない日本語を解析する : デフォルトの名無しさん [sage] 2018/11/09(金) 19:46:38.02:A6qAb8kp 134217728 が与えられたら 8^9 を返すとかそういう話かね? : デフォルトの名無しさん [] 2018/11/09(金) 19:46:54.75:EUp1VEAA Haskell main = mapM_ print $ zip3 lst fosl fos oddstr [] = [] oddstr (x:xs) = show x:oddstr xs fo = map (\x-> filter (odd) [1..x]) lst foo f = map (f.concat.oddstr) fo fos = foo id fosl = foo length lst = [3,10,999,123456789,31415926535897] コードはすぐ出来たけど、計算が終わらないw 奇数が多すぎてバッファに残ってなさそうだから、ファイルにリダイレクトし直しかな。。。 : デフォルトの名無しさん [] 2018/11/09(金) 20:06:34.46:JsSTi+Gx スマホから直接一度も試さずに書くが、Kotlin だと理屈の上ではこれでできると思う。 nが最大値な。 println((1..n step 2).joinToString("").length) かといってこんなのメモリ食うだけ。 : デフォルトの名無しさん [sage] 2018/11/09(金) 20:38:18.97:Zs2FyImb Ruby args = [0, 1, 2, 3, 10, 9999, 123456789, 31415926535897] floor_log10 = -> n {r = 1; (0..n).find{ r *= 10; r > n}} kotae = ->n{ x = floor_log10[n + 1] ((9*x - 1)*10**x + 10)/18 + (n-10**x+1)/2 * (x + 1) + (n < 8 ? n & 1 : 0) } args.each{|e| puts '%d => %d' % [e, kotae[e]]} # => 0 => 0 1 => 1 2 => 1 3 => 2 10 => 5 9999 => 19445 123456789 => 500000000 31415926535897 => 214355930195731 : デフォルトの名無しさん [sage] 2018/11/09(金) 21:56:37.18:lMSYlD+9 なんで : デフォルトの名無しさん [sage] 2018/11/09(金) 21:58:02.15:lMSYlD+9 すまん。途中で誤爆した。 なんでこうなるの?? あと最後のn < 8 ? n & 1 : 0も数式で表わせる? : デフォルトの名無しさん [] 2018/11/09(金) 22:05:09.74:gJrymgLI Python3 print(len("".join(map(str, range(1, int(input())+1, 2))))) を実行したらフリーズしたので odd = range(1, int(input())+1, 2) keta = 0 for i in odd: keta += len(str(i)) print(keta) #============== 123456789 => 500000000 31415926535897 => 終わらん : デフォルトの名無しさん [] 2018/11/09(金) 22:09:18.25:EUp1VEAA 123456789の桁数は500000000ってのは分かった。 : デフォルトの名無しさん [sage] 2018/11/09(金) 22:23:23.31:PBoRuHnu 0からnまでの奇数を並べてできる数の桁数をf(n)とすると(n >= 0) p := [log10(n+1)] として n >= 10の時 f(n) = Σ[k は 0〜[(n-1)/2]]( (2k+1)の桁数 ) = 1*(0〜9までの奇数の数) + 2*(10〜99までの奇数の数) + ... + p*(10^(p-1)〜10^p-1までの奇数の数) + (p+1)*(10^p〜nまでの奇数の数) = 1*5 + Σ[k は 2〜p]45k*10^(k-2) + (p+1)*[(n - 10^p + 1)/2] = 45/100*Σ[k は 1〜p]k*10^k + 1/2 + (p+1)*[(n - 10^p + 1)/2] = ((9p - 1)10^p + 1)/18 + 1/2 + (p+1)*[(n - 10^p + 1)/2] = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] …… (*) n = 0, 2, 4, 8, 9 の時はちょうど (*) n = 1, 3, 5, 7 時は (*) + 1 なので f(n) = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] + (n < 8 ? n & 1 : 0) 末尾の項を無理やり数式にしたいなら [8/(n + 1)]((1 - (-1)^n)/2)(2^((5 - n)/2)([n/7] + 1)) とかにすればいいんじゃない意味ないけど : デフォルトの名無しさん [sage] 2018/11/09(金) 23:35:53.00:QKOvQ/Be Squeak/Pharo Smalltalk | fn | fn := [:N | | nDig | nDig := N log truncated. (1 to: nDig) inject: (1 to: N by: 2) size * (nDig + 1) into: [:tot :m | tot - ((10 raisedTo: m) / 2)] ]. #(3 10 9999 123456789 31415926535897) collect: fn "=> #(2 5 19445 500000000 214355930195731) " : デフォルトの名無しさん [sage] 2018/11/09(金) 23:56:11.30:EzT7HP1o 訂正 ((9p - 1)10^p + 10)/18 -> [((9p - 1)10^p + 10)/18] あと (n < 8 ? n & 1 : 0) は (1 - (-1)^n)/2*[3/([√n] + 1)] の方がより簡単か : デフォルトの名無しさん [] 2018/11/10(土) 01:35:04.59:PYYpj2JU Kotlin ttp://https://paiza.io/projects/KAd4jeHV7Q3ttrPaJCGFCw : デフォルトの名無しさん [sage] 2018/11/10(土) 04:32:40.14:dp2CGyZQ すごい😆 : デフォルトの名無しさん [] 2018/11/10(土) 04:35:26.34:PYYpj2JU Kotlin ttp://https://paiza.io/projects/sjgIQuhZ44UZcdFZ2CwncQ 色々考えたが結局クラス作ってそこに数字列と文字列で切り分けて入れておいて比較時にそこ見るようにした。 入力の仕様は拡張されていて、最初に数字だけがあった場合はその後に続く単語がその個数あるとみなして 入力を行うが、最初に数字がない場合は無制限に読む。出力は入力した単語とソート後の単語を出す。 : デフォルトの名無しさん [sage] 2018/11/10(土) 05:36:17.18:zQnB+SVr 提案 回答は言語別に別スレで 2スレ位になるかな? 評価価値基準で別れていくんじゃないかと ここではコメントのみになるのかな。 : デフォルトの名無しさん [sage] 2018/11/10(土) 05:52:45.45:5gG2FCqG スレ過疎りそうだし誰もわざわざ別スレに回答見に行かなそう : デフォルトの名無しさん [sage] 2018/11/10(土) 06:43:43.85:zQnB+SVr 乱立して過疎ってる特定言語専用スレの活性化に寄与することを願いたいしコード例が増えることはそれぞれメリットあるんじゃないかと。 ここと相互リンクは必ず貼る。他の言語と比較しない 他を貶さないを基本ルールに。 : デフォルトの名無しさん [sage] 2018/11/10(土) 07:08:49.40:mapNUhJU もとのスレにも迷惑かと : デフォルトの名無しさん [sage] 2018/11/10(土) 08:21:22.38:2tLivqWS >乱立して過疎ってる特定言語 具体的に何? 一番肝心のこと言ってないから説得力がまるで無い : デフォルトの名無しさん [sage] 2018/11/10(土) 09:22:59.55:dp2CGyZQ お題: A,B,Cの3人が1から5までの値が1つずつ書かれた5枚のカードを使ってインディアンポーカーを行う。 各々ランダムに1枚カードを引き、自分は値を見ず他の参加者に値が見えるように額にかざす。 この状態でA,B,Cの順に自分の値が今回引かれた3枚の中で最大(MAX)か,2番目に大きい(MID)か,最小(MIN)かを予想して答える。 AとBはパスしてもよいものとし、誰かが答えた時点で終了となる。 なお全員必ず正解するものとする。 各々の引いたカードの値を引数にとり、一回分のインディアンポーカーの結果を出力する関数indian_poker(a, b, c)を実装せよ。 期待動作例: indian_poker(3, 2, 1) // 「A is MAX」 indian_poker(5, 2, 4) // 「B is MIN」 indian_poker(4, 2, 3) // 「C is MID」 : デフォルトの名無しさん [sage] 2018/11/10(土) 09:43:13.06:9vqEahoA そのスレの流れを無視してよそのスレで出されたお題の答えだけ書かれても、そのスレの住人には邪魔なだけだと思う。 : デフォルトの名無しさん [] 2018/11/10(土) 09:56:28.53:X2YiMm/N こういう指示語ばかり使うやつはだいたい頭悪い : デフォルトの名無しさん [] 2018/11/10(土) 10:03:50.52:0iGN/oEh マ板で見かけた入社試験過去問か。 プログラマー脱落者として辞退します。 : デフォルトの名無しさん [sage] 2018/11/10(土) 10:10:03.22:zQnB+SVr 乱立して過疎ってる (特定言語専用(スレッド)) 形容詞句?の係りはこれな (こういうものの表しかたにも流儀が色々あって混在するとややこしい) : デフォルトの名無しさん [sage] 2018/11/10(土) 10:19:13.79:2tLivqWS 係り受けなんてどーでもいいよ 「特定言語」って具体的に何なんだ、って聞いてるだけじゃん 返答が『形容詞句?の係りはこれな』って人の話をわざと聞かない人間だろ かなりのサイコパスなんで『乱立して過疎ってるスレ』とやらに誘いこんでマウンティングしたいだけじゃねえの なぜなら、特定言語の具体的な名前を5時間経っても未だに出さない、 口を開いたかと思えば「係り受けはこうだから」 もう頭がおかしいだろこいつ : デフォルトの名無しさん [sage] 2018/11/10(土) 10:34:20.29:zQnB+SVr 一つの言語を話題の軸に置いたスレッドは幾らでもあるだろ?この板には。 過疎ってるのも伸びてるのも全部特定言語専用スレな : デフォルトの名無しさん [sage] 2018/11/10(土) 10:36:44.35:zQnB+SVr コマンドプロンプトとかSQLとかでワイルドカード使ったことないのかな? : デフォルトの名無しさん [sage] 2018/11/10(土) 11:08:46.45:1MT6N26R そもそもここが過疎だし、他スレなんかにここのコード書いても荒らしにしかならんので当然ながら反対 やりたい奴だけ勝手にやってろ : デフォルトの名無しさん [] 2018/11/10(土) 11:14:10.79:16GnFLu/ 一人が答えた時点で終了になるのに全員正解とは : デフォルトの名無しさん [sage] 2018/11/10(土) 11:20:45.22:zQnB+SVr 幾らなんでも既存スレ無許可で乗っ取るのはやめてほしい。 でも逆にそちらで希望された場合には別スレにしなくてもいいのでは?リンクさえあれば : デフォルトの名無しさん [sage] 2018/11/10(土) 11:31:50.87:T2pc5qWv そもそもの時点で日本語が怪しいですし : デフォルトの名無しさん [] 2018/11/10(土) 11:33:27.18:16GnFLu/ 答えた者が必ず正解するならAが常にあてずっぽうで正解できることになるな パスする意味も無い 言わんとすることは推測できるが、問題文としては明らかにおかしい 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要 : デフォルトの名無しさん [sage] 2018/11/10(土) 11:34:10.16:g5G2TnXq Java ttp://https://ideone.com/EUQiD6 これはひどいコードww : デフォルトの名無しさん [] 2018/11/10(土) 11:36:49.05:16GnFLu/ ごり押しで草 : デフォルトの名無しさん [] 2018/11/10(土) 11:44:08.17:16GnFLu/ Aは常に正解する Aは常に正しい 故にA is GOD : デフォルトの名無しさん [sage] 2018/11/10(土) 12:18:21.41:2tLivqWS は9月末あたりに話題になってた ttps://qiita.com/gorillab/items/fab2a6637f681221f687 ttps://qiita-image-store.s3.amazonaws.com/0/169376/80ea2cf1-37e7-60b0-3230-c7dc1d2d60cc.jpeg : デフォルトの名無しさん [] 2018/11/10(土) 12:38:22.96:16GnFLu/ 元ネタからして雑すぎて草 : デフォルトの名無しさん [sage] 2018/11/10(土) 12:44:49.01:gks79eHH 前スレ951のやつか : デフォルトの名無しさん [sage] 2018/11/10(土) 12:44:51.58:xqriZsUd Ruby def indian_poker(a, b, c) x = [Set[1, 2], Set[1, 5], Set[4, 5]] winner, winners_num = case when x.include?(Set[b, c]) then [?A, a] when a == 3 || (b == 3 && Set[a, b, c] != Set[2, 3, 4]) || x.include?(Set[a, c]) || Set[b, c] == Set[2, 4] then [?B, b] else [?C, c] end '%s is %s' % [winner, %w[MIN MID MAX].zip([a, b, c].sort).find{|e| e.last == winners_num}.first] end arr = [*(1..5)].permutation(3){|i| puts '%p -> %s' % [i, indian_poker(*i)]}; # => [1, 2, 3] -> C is MAX [1, 2, 4] -> B is MID [1, 2, 5] -> B is MID ... 以下と同じ : デフォルトの名無しさん [sage] 2018/11/10(土) 13:25:37.16:hLxIIZfE > 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要 流石にその程度は理解しようよ… : デフォルトの名無しさん [sage] 2018/11/10(土) 13:27:54.99:8cjk91S6 python3 ttp://https://ideone.com/jQau8U うーん… O(1)にできない : デフォルトの名無しさん [sage] 2018/11/10(土) 13:37:54.71:16GnFLu/ 書いてないことは何でもあり 論理パズルにするならちゃんとルールは全て掲示しないと駄目 : デフォルトの名無しさん [sage] 2018/11/10(土) 13:52:54.08:9b5VuL4P お題 n^n^nの下2桁を求めよ(^はべき乗、nは1以上の整数) 1 => 1 2 => 16 (2^2^2 = 2^4 = 16) 3 => 87 (3^3^3 = 3^27 = 7625597484987) 4 => 96 11 => 11 13 => 53 100 => 0 777 => ?? : デフォルトの名無しさん [sage] 2018/11/10(土) 14:00:49.74:hLxIIZfE はいはい w アスペかよ : デフォルトの名無しさん [] 2018/11/10(土) 15:46:45.95:16GnFLu/ 777の出力は77になればいいのかな? その入力でこうなるの面白いな : デフォルトの名無しさん [sage] 2018/11/10(土) 15:58:06.48:xqriZsUd 97じゃない? : デフォルトの名無しさん [] 2018/11/10(土) 16:06:41.30:16GnFLu/ すまんコード修正したら97になったわ はやとちりだった : デフォルトの名無しさん [sage] 2018/11/10(土) 16:28:23.31:31tiZVqm そういうのはそれよりマシなコードを出してから言わないと単なる口先番長にしか見えないぞw : デフォルトの名無しさん [sage] 2018/11/10(土) 17:09:13.33:xqriZsUd Ruby def powmod(n, e, m) case e when 0 then 1 when :even?.to_proc then powmod(n * n % m, e >> 1, m) else n * powmod(n, e - 1, m) % m end end def kotae(n, m) index, cycle = (1..m).each_with_object([1]) do |i, a| x = (a.last * n % m) ind = a.index(x) ind.nil? ? a.push(x) : (break([ind, i - ind])) end x = n.times.reduce(1){|r, i| r *= n; r < index ? r : break} y = x.nil? ? index + (powmod(n, n, cycle) - index) % cycle : x powmod(n, y, m) end [0, 1, 2, 3, 4, 5, 10, 11, 13, 100, 777].each{|i| puts '%d -> %06d' % [i, kotae(i, 10**6)]} # =>0 -> 000000 1 -> 000001 2 -> 000016 3 -> 484987 4 -> 084096 5 -> 203125 10 -> 000000 11 -> 906611 13 -> 549053 100 -> 000000 777 -> 977097 : デフォルトの名無しさん [sage] 2018/11/10(土) 17:30:26.21:g5G2TnXq 自分で書いて自分でひどいコードと言うとるんやがww : デフォルトの名無しさん [sage] 2018/11/10(土) 17:52:39.10:AvCW4uHY python def ans(num): _def calc(N): __n = (N ** 2) % 100 __p = [] __while n not in p: ___p.append(n) ___n = (n * N) % 100 __return p _loop = calc(num) _step = num**num % len(loop) _if len(loop) == 1: __print(loop[0]) _else: __print(loop[step-2]) for x in [0,1,2,3,4,5,10,11,13,777]: _ans(x) -> 0,1,16,87,96,25,0,11,53,97 : デフォルトの名無しさん [sage] 2018/11/10(土) 17:55:30.82:hLxIIZfE ああ、それはすまん 俺もパッと書けと言われたらこれしか思いつかんわ : デフォルトの名無しさん [sage] 2018/11/10(土) 19:50:00.93:nd1h6x9x わかった上で愚直にごり押しコード書いただけだよな 引数順列の列挙もドストレートで素敵w : デフォルトの名無しさん [sage] 2018/11/10(土) 20:50:56.73:G7iMNc/F Squeak/Pharo Smalltalk | numOfCards indianPoker | numOfCards := 5. indianPoker := [:args | | cards names infer | cards := (1 to: numOfCards) asArray. names := (Character alphabet asUppercase first: args size) asArray collect: #asSymbol. infer := nil. (infer := [:dealts :limit | | turn possibilities lastAns answers | turn := 0. answers := OrderedCollection new. possibilities := dealts collect: [:dealt | cards asSet removeAll: dealts; add: dealt; yourself]. lastAns := nil -> #?. [lastAns value = #? and: [(turn := turn + 1) < limit]] whileTrue: [ | myCards others | myCards := possibilities atWrap: turn. turn > 1 ifTrue: [ (myCards copyWithout: (dealts atWrap: turn)) do: [:pCard | (infer value: (dealts copy atWrap: turn put: pCard; yourself) value: turn) value ~= #? ifTrue: [myCards remove: pCard]]]. others := dealts copyWithoutIndex: turn - 1 \\ 3 + 1. lastAns := (names atWrap: turn) -> (true caseOf: { [others min > myCards max] -> [#MIN]. [others max < myCards min] -> [#MAX]. [others max > myCards max and: [others min < myCards min]] -> [#MID] } otherwise: [#?]) ]. lastAns]) value: args value: Float infinity ]. indianPoker value: #(3 2 1). " #A->#MAX " indianPoker value: #(5 2 4). " #B->#MIN " indianPoker value: #(4 2 3). " #C->#MID " : デフォルトの名無しさん [sage] 2018/11/11(日) 03:24:01.44:HtKIrWnT python3 ttp://https://ideone.com/2byzFd : デフォルトの名無しさん [] 2018/11/11(日) 10:02:52.73:ZG9KPLpE Rubyで。 ttp://https://ideone.com/PoaYk5 : デフォルトの名無しさん [sage] 2018/11/11(日) 12:53:19.00:ILkwXRqJ Squeak/Pharo Smalltalk | fn | fn := [:N | (Array new: 3 withAll: N) reduce: [:mex :n | mex \\ 100 = 0 ifTrue: [0] ifFalse: [n raisedTo: mex modulo: 100] ] ]. #(1 2 3 4 11 13 100 777) collect: fn "=> #(1 16 87 96 11 53 0 97) " : デフォルトの名無しさん [sage] 2018/11/11(日) 14:11:48.73:j7sl2u35 それだけでいけるのか すげー : デフォルトの名無しさん [sage] 2018/11/11(日) 14:19:03.18:SClia95W それでもJニキなら何とかしてくれる : デフォルトの名無しさん [sage] 2018/11/11(日) 14:25:13.88:j7sl2u35 よく読んだら素直に実装してるだけか : デフォルトの名無しさん [sage] 2018/11/11(日) 14:34:26.37:ILkwXRqJ ですね…^^; : デフォルトの名無しさん [sage] 2018/11/11(日) 16:24:01.50:xWJTm2Oc お題 n次のヒルベルト曲線を描画せよ n=1 ■□■ ■□■ ■■■ n=3 ■□■■■■■□■■■■■□■ ■□■□□□■□■□□□■□■ ■■■□■■■□■■■□■■■ □□□□■□□□□□■□□□□ ■■■□■■■□■■■□■■■ ■□■□□□■□■□□□■□■ ■□■■■■■□■■■■■□■ ■□□□□□□□□□□□□□■ ■■■□■■■■■■■□■■■ □□■□■□□□□□■□■□□ ■■■□■■■□■■■□■■■ ■□□□□□■□■□□□□□■ ■□■■■□■□■□■■■□■ ■□■□■□■□■□■□■□■ ■■■□■■■□■■■□■■■ : デフォルトの名無しさん [sage] 2018/11/11(日) 17:11:10.50:Gv5Fmm22 Perl5 use bignum (l=>GMP); for $i (1,2,3,4,11,13,100,777) { $j = $i % 100; $k = $j ** $j % 100; $p = $j ** $k % 100; printf "$i %02d\n", $p; } 実行例 $ time perl 12_338.pl 1 01 2 16 3 87 4 96 11 11 13 53 100 00 777 97 0.562 secs : デフォルトの名無しさん [sage] 2018/11/11(日) 17:52:24.96:tvDFPkAv Ruby def hilbert_curve(n) return [[1, 0, 1], [1, 0, 1], [1, 1, 1]] if n == 1 hc = hilbert_curve(n - 1) [ *hc.transpose.reverse.zip(hc.reverse.transpose).map{|a, b| [*a, 0, *b]}, [1, *Array.new(2**(n + 1) - 3, 0), 1], *hc.zip(hc).map.with_index{|(a, b), i| [*a, 1/(i + 1), *b]} ] end [1, 3].each{|e| puts "n = #{e}", hilbert_curve(e).map{|a| a.join.gsub(/\d/, ?0 => ?□, ?1 => ?■)}.join($/)} # => n = 1 ■□■ ■□■ ■■■ n = 3 ■□■■■■■□■■■■■□■ ■□■□□□■□■□□□■□■ ■■■□■■■□■■■□■■■ □□□□■□□□□□■□□□□ ■■■□■■■□■■■□■■■ ■□■□□□■□■□□□■□■ ■□■■■■■□■■■■■□■ ■□□□□□□□□□□□□□■ ■■■□■■■■■■■□■■■ □□■□■□□□□□■□■□□ ■■■□■■■□■■■□■■■ ■□□□□□■□■□□□□□■ ■□■■■□■□■□■■■□■ ■□■□■□■□■□■□■□■ ■■■□■■■□■■■□■■■ : デフォルトの名無しさん [] 2018/11/11(日) 22:01:36.28:B3f/927d Haskell 素直に書いた版。 何やってるかは分かりやすい。 main = mapM_ put $ zip list $ map f list put (x,y) = putStr (show x ++ ":") >> print y f x = (x ^ x ^ x) `mod` 100 list = [1,2,3,4,5,6,7,8] : デフォルトの名無しさん [] 2018/11/11(日) 22:10:56.11:B3f/927d Haskell Perlの人のパクリ版(めちゃ速い) main = mapM_ put $ zip list $ map f list put (x,y) = putStr (show x ++ ":") >> print y f x = p where j = x `mod` 100 k = j ^ j `mod` 100 p = j ^ k `mod` 100 list = [1,2,3,4,11,13,100,777] : デフォルトの名無しさん [sage] 2018/11/11(日) 22:20:34.69:xWJTm2Oc n=10のときどうなる? : デフォルトの名無しさん [sage] 2018/11/11(日) 23:54:52.39:VLVUrnJ+ 指数を100の剰余取ってるのってどういう根拠なの? : デフォルトの名無しさん [sage] 2018/11/11(日) 23:59:16.36:lebYcZ/K use bignum (l=>GMP); for $i (10) { $j = $i % 100; $k = $j ** $j % 100; $p = $j ** $k % 100; printf "$i %02d\n", $p; } $i = 10; print ($i**$i)**$i; 実行結果 $ perl 12_338_1.pl 10 01 10000000000 ダメですね合いませんね。 単に左辺を%100すると一般性はありませんでした。サーせん。 ちゃんと循環性を見るとか、別の解法が要りますね : デフォルトの名無しさん [sage] 2018/11/12(月) 00:02:23.31:EX0FpiMD ちなみに循環性を見るとこんな感じになってました use bignum (l=>GMP); use Tie::IxHash; use feature 'say'; for $i (0,1,2,3,4,5,10,11,13,777) { tie my %h,'Tie::IxHash'; $p = $i; for (1..100) { last if exists $h{$p} and $h{$p} > 10; $h{sprintf "%02d", $p % 100} = $_; $p = $p * $i % 100; } @a = keys %h; say "$i: ", scalar @a, ": @a", ": $p"; } 実行結果 1: 1: 01: 1 2: 21: 02 04 08 16 32 64 28 56 12 24 48 96 92 84 68 36 72 44 88 76 52: 48 3: 20: 03 09 27 81 43 29 87 61 83 49 47 41 23 69 07 21 63 89 67 01: 47 4: 10: 04 16 64 56 24 96 84 36 44 76: 16 5: 2: 05 25: 25 10: 2: 10 00: 0 11: 10: 11 21 31 41 51 61 71 81 91 01: 11 13: 20: 13 69 97 61 93 09 17 21 73 49 37 81 53 89 57 41 33 29 77 01: 37 777: 20: 77 29 33 41 57 89 53 81 37 49 73 21 17 09 93 61 97 69 13 01: 73 : デフォルトの名無しさん [sage] 2018/11/12(月) 00:03:57.97:EX0FpiMD × 単に左辺を%100 ○ 単に右辺(指数)を%100 : デフォルトの名無しさん [sage] 2018/11/12(月) 00:05:03.96:JEwLf6Zk それは0乗しちゃってるからじゃない? : デフォルトの名無しさん [sage] 2018/11/12(月) 00:10:02.50:EX0FpiMD 10については、そういわれてみればそうだね。 : デフォルトの名無しさん [] 2018/11/12(月) 00:11:06.48:D6ILV7Jx iが10で割り切れれば00って別で切り分ければ良いんじゃ無いかな。 : デフォルトの名無しさん [sage] 2018/11/12(月) 00:18:43.46:EX0FpiMD 10については、そいうやり方も考えられるけど 上記の循環の例の11,13,777は指数を%100しても解は合うが 他の数値も単に指数を%100して解が合うか、一般性は疑わしいので、 はちょっと勇み足だったかもしれないテヘペロ : デフォルトの名無しさん [sage] 2018/11/12(月) 00:19:14.52:JEwLf6Zk 0〜99までとりあえず循環部分の周期は全て20の約数になるみたいだけど 数学雑魚の俺には理屈がわからなかった とりあえず、ざっくり100の剰余取るだけだと循環開始より小さい指数になったときにおかしくなりそう : デフォルトの名無しさん [sage] 2018/11/12(月) 00:52:30.78:+qrAueUv 寧ろそれが成り立つ方がかなり特別なケースだぞ : デフォルトの名無しさん [] 2018/11/12(月) 02:34:45.23:MtlIUxHY 多分数学的には証明されていることだろうと思うが、x ^ 100 とか x ^ 200 とか x ^ 300 って、 下3桁の結果が同じになるようだな。どうしてかはわからんが。多分考えて行くとその内わかる んだろう。後の事は数学が得意な人に任せた。 : デフォルトの名無しさん [sage] 2018/11/12(月) 04:19:59.43:lDwndekZ x^22 - x^2 が常に100で割り切れるのが理由だと思う なので巡回群の長さは高々20までになる : デフォルトの名無しさん [sage] 2018/11/12(月) 04:44:54.48:lDwndekZ もう少し分かりやすく書くと x^20 - 1 と x^21 - x が 100で割り切れる保証はない(実際大部分は割り切れない)が x^22 - x^2 は絶対に100で割り切れる(合同式を用いれば証明は簡明)ので 一般に2以上の自然数 n に対して x^(n+20) - x^n ≡ 0 mod 100が成り立つ(xは整数) よって一般に指数部の20の剰余を取っても問題ないと言える : デフォルトの名無しさん [sage] 2018/11/12(月) 04:49:06.55:fKeD1dzA 任意の整数 10n + r (-4 <= r <= 5)に対して (10n + r)^100 = r^100 mod 1000 なので mod 1000 で 0^100 = 0 5^100 = 625^25 = 625 (±1)^100 = 1 (±2)^100 = 24^10 = 376 (±3)^100 = 243^5 = 1 (±4)^100 = 376^2 = 376 となって 0, 1, 376, 625 は2乗しても下3桁は変わらないから 任意の整数は100n乗しても下3桁は常に同じだね : デフォルトの名無しさん [sage] 2018/11/12(月) 09:11:34.15:WiNaWTIj 数学板でやれ。問題からしてクソだった。 : デフォルトの名無しさん [sage] 2018/11/12(月) 10:17:56.51:iaSpw+rm これ以上はスレ違いってなら同意だけど問題自体は別に良かっただろ : デフォルトの名無しさん [sage] 2018/11/12(月) 11:03:12.07:oQPj2WUY とりあえずの出題者は用意してあった解答を出そうか くそ問題かどうかはそれを見て判断する : デフォルトの名無しさん [sage] 2018/11/12(月) 11:11:40.60:iaSpw+rm 既に回答がたくさん出てるのにクソ問題も何もねえだろ : デフォルトの名無しさん [sage] 2018/11/12(月) 11:51:52.42:oQPj2WUY 回答の多さとクソさとの相関はないだろ 例えばQiitaでいいねが多ければクソじゃないということがないのと同じように そういうのはいいから出題者は早めに解答だしてくれ : デフォルトの名無しさん [sage] 2018/11/12(月) 12:01:03.54:iaSpw+rm ボクがわからないからクソとか草生えるわ なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ : デフォルトの名無しさん [] 2018/11/12(月) 12:07:32.95:iShTB70W 最近のQiitaのトレンド見てて いいねの数=内容の薄さ だと思うようになってきたわ : デフォルトの名無しさん [sage] 2018/11/12(月) 12:11:20.95:b6USGf7s 今回の問題はべき剰余の特殊な場合を求めるものだけど、工夫する余地もいくつかあり悪い問題ではないと思った。 というかなぜこれを悪い問題だと思ったんだ? : デフォルトの名無しさん [sage] 2018/11/12(月) 12:19:11.85:DYCuacpe 競技プログラミングなんかでよく見るタイプの問題なのにな。 : デフォルトの名無しさん [sage] 2018/11/12(月) 12:23:12.24:hXyGmgtP a↑↑b mod n を一般化してみたらテトレーション計算より 最初に使うφ(n)の計算のほうが重かった 10**nなら2**n * 5**nなので高速に計算できますけども : デフォルトの名無しさん [sage] 2018/11/12(月) 12:28:21.72:TKKxOWxM このスレは不特定言語スレだけど 高速性ならC/C++/Rast コンパクト性の追求ならSmallTalkとかRubyとか RADならJavaとかPythonとか定番固定化。 既にもうある程度少数特定言語スレになりつつあ る希ガス : デフォルトの名無しさん [sage] 2018/11/12(月) 12:28:55.23:TKKxOWxM RastじゃなくてRustやったなwww : デフォルトの名無しさん [sage] 2018/11/12(月) 12:49:28.80:7mLFygVa > なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ 数学の素養のあるっぽいやつのよくやりがちなダメな考え方だな そういう(逆)選民思想を持っているならこのスレで出題するのはやめてくれ そもそも良問と思うものをけなされるお前自身がたのしくないだろ? : デフォルトの名無しさん [sage] 2018/11/12(月) 12:56:08.79:1XBBjLKo いずれにせよ出題者がどこまで考えて出題したか(つまり良問か否か)はそいつ自らの解答を見れば一目瞭然だよ 論よりコード はよ出せ : デフォルトの名無しさん [sage] 2018/11/12(月) 13:24:01.86:WWnCJgTu 問題の良さって問題じゃなく解答で決まるものなのか? 問題だけで問題の良さが確定しないのは初めて知ったわ : デフォルトの名無しさん [sage] 2018/11/12(月) 13:26:44.24:DYCuacpe も一回言うけどこの問題はプログラミングのお題としてはよく見るような問題だぞ。 揚げ足取りというか難癖付けてる奴はおかしいだろ。 それこそスレチだから黙ってろよ。 : デフォルトの名無しさん [sage] 2018/11/12(月) 13:28:23.55:X+KqJ1/Z 解答で決まるなんて誰もいっとらんがな(数学の前にやることあるんじゃ?w) 解答を見れば「どこまで考えて出題したか」が一目瞭然ということ どこまで考えて出された問題かで良問か否かが決まる もとより様々な状況で「結果的に良問」ということは実際あるしそれは否定する気は無いが、蓋然性は低い : デフォルトの名無しさん [sage] 2018/11/12(月) 13:38:11.17:b6USGf7s この程度のことで選民思想がどうのとか言い出すのはおかしいと思うよ。 冪剰余の計算は面白いテーマだし。 逆に悪問だと言ってる人がその根拠を示すべきだと思うんだけど。 : デフォルトの名無しさん [sage] 2018/11/12(月) 13:57:27.23:9RzF2H48 「この程度(のレベル)」とか言ってる選民思想バリバリの奴が 自分は違うって体で何か主張したところでぜんぜん説得力ないんだがw ともあれ、回答が多い割に文句なしの正答が出てこないのがこのスレ的には異常事態だろ お題 and/or 出題者をクソだと疑う十分な根拠になりうる : デフォルトの名無しさん [sage] 2018/11/12(月) 14:13:38.48:b6USGf7s 英語の授業で"How are you?" "I'm fine. Thank you" って言ったら「ペダンチックだ。帰国子女ぶるな」といわれたくらいに衝撃的。 大体問題が理解できないのに「文句なしの正答」を見極められるというのはおかしくない? こっちからすればここに既にある回答の内のいくつか(とか)は「文句なしの正答」なんだけど。 問題が理解できないのに「文句なしの正答」を見極められるならそれらのどこが不十分なのか説明しなさい。 それができなければ数学ができる出来ない以前にただのモンスタークレーマーみたいな傲慢野郎だ。 : デフォルトの名無しさん [sage] 2018/11/12(月) 14:16:13.02:CqB5lm+V まーた頭おかしいのが暴れてんのか はNGぶっこむからIDころころ変えるな もしくはコテハンつけろよゴミが : デフォルトの名無しさん [] 2018/11/12(月) 14:24:13.52:D6ILV7Jx とか良い問題じゃ無い? 私は解けないが。 : デフォルトの名無しさん [sage] 2018/11/12(月) 16:17:37.15:9RzF2H48 いくつかってずいぶん曖昧だなw お前の文句なしってセンス疑うわw : デフォルトの名無しさん [sage] 2018/11/12(月) 16:22:54.34:CqB5lm+V に文句つけてみろよ無能ゴミクズが : デフォルトの名無しさん [sage] 2018/11/12(月) 16:27:56.77:9RzF2H48 あとお前ら(直近ではID:9RzF2H48とID:CqB5lm+V) 勝手にクソ問題断定のクレーマー扱いしとるが 出題者の用意していた解答次第では良問の可能性も(わずかだが)あるんだからな ほどほどにしとけよw : デフォルトの名無しさん [sage] 2018/11/12(月) 16:29:53.16:9RzF2H48 いかん自分を安価しちゃったよID:b6USGf7sな : デフォルトの名無しさん [sage] 2018/11/12(月) 16:33:57.40:DYCuacpe どうやら ID:9RzF2H48 は人を馬鹿にしたいだけみたいだな。 きちんと説明してもらってんのに言ってることがわけわからんし。 冪剰余の最適化なんて教科書にあってもいいくらいものすごくありふれたお題だっていうのに馬鹿らしい。 : デフォルトの名無しさん [sage] 2018/11/12(月) 16:37:03.80:CqB5lm+V 数学の話ししてるのにイライラして思わずクソ問題呼ばわりして引くに引けなくなったんだろ : デフォルトの名無しさん [sage] 2018/11/12(月) 16:43:20.29:b6USGf7s いやだからとかって例を挙げてるでしょ。ばかにしてる? それで結局悪問だという根拠は示せないんだよね? じゃあ悪いことしたんだからまだいるか知らないけど出題者に謝罪しようね。 君ははっきり言って不快だよ。 : デフォルトの名無しさん [sage] 2018/11/12(月) 16:46:44.76:9RzF2H48 本音がでたなw中立ぶるよりお前ららしいわ こんなん数学に入るかボケが つーかお前のためにID固定してやってんだからレスすんな : デフォルトの名無しさん [sage] 2018/11/12(月) 16:52:28.57:9RzF2H48 自分で回答も出せないやつが他人のコード気安く挙げてんじゃねーよ お前が考えて出したコードならいくらでもケチつけたるわw : デフォルトの名無しさん [sage] 2018/11/12(月) 16:55:43.17:CqB5lm+V 図星突かれて痛かったのか? バカを愚弄するのはホント楽しいわ てか「数学板でやれ。問題からしてクソだった」って言ってたくせにこんなの数学に入らないっておかしいだろ 数学に入らないなら数学板推すなよアホか 結果的に数学よりも遥かにスレ違いの話題でこの場を荒らして皆に迷惑かけてんのはお前だ お前はみんなの迷惑なの : デフォルトの名無しさん [sage] 2018/11/12(月) 17:00:57.95:b6USGf7s >ともあれ、回答が多い割に文句なしの正答が出てこない って言うからその反例として件のレスなのに、開き直ってお前がコード書けだなんて控えめに言って狂ってる。 相手が言ったことも読まないし自分が行ったことすら覚えていないんじゃあ対話不可能。 ただただ不快な存在。 : デフォルトの名無しさん [] 2018/11/12(月) 17:01:55.26:D6ILV7Jx は情報爆発でメモリ使いまくる処理をいかにメモリ使わずに処理できるかって意味じゃ悪く無いと思う。 私はプログラマーじゃ無いから思い付けなかったが、こう言うのはプログラマーの本領発揮する分野じゃないかな。 そして も解けない私。。。Orz GUIならネットに落ちてるけど、CUIってのが味噌だよね。 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:02:08.43:9RzF2H48 それは出題者のコードじゃないだろ? ほんとお前、日本語読解とか論理的思考とか大丈夫なの? : デフォルトの名無しさん [sage] 2018/11/12(月) 17:02:52.43:9RzF2H48 正直、ばかにはしているw : デフォルトの名無しさん [sage] 2018/11/12(月) 17:03:00.49:DYCuacpe ものすごくありふれたお題に文句付けてるんだからあきれてものも言えないってだけ。 別に中立ぶってなどいない。お前のことは見下してるが。 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:06:56.26:b6USGf7s >ともあれ、回答が多い割に文句なしの正答が出てこない と言ったのはそちらで、それに対してこっちがその反例として件のレスを挙げたのに本気で意味不明。 会話を破綻させに行っているのは君でしょ。自分が書いたことすら覚えていないのだから。 さすがに不愉快だ。 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:08:31.84:1o1kfQH0 馬鹿は相手がどの高さいるのかもわからずに人を馬鹿にする 頭が悪いので周囲が何を言ってるのか何一つ理解できない そして自尊心の塊 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:08:37.05:CqB5lm+V ここまできっちり論破されてるとキチガイ相手でも哀れになってくるな : デフォルトの名無しさん [sage] 2018/11/12(月) 17:13:08.29:9RzF2H48 お前は自分の「文句なし」に自信持ちすぎだろw あと「出題者の用意していた解答次第では良問の可能性も(わずかだが)ある」は無視ですかそうですか : デフォルトの名無しさん [sage] 2018/11/12(月) 17:15:33.59:9RzF2H48 だからお前は反応するなと何度言わせる?w : デフォルトの名無しさん [sage] 2018/11/12(月) 17:17:08.81:b6USGf7s 対話する意図がないと判断した。 もういい。疲れた。 控えめに言って、君はもう死んだ方が良いよ。 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:21:16.54:4IQEu5Ky 最近あっちこっちで暴れてる単芝君か 5chに居場所が無くてもリアル犯罪に走るなよな : デフォルトの名無しさん [] 2018/11/12(月) 17:21:58.58:D6ILV7Jx 良い加減にしろ! もうオマイらで の文句なしの正当とやらを出し合えや。 : デフォルトの名無しさん [sage] 2018/11/12(月) 17:23:23.00:eZ2UdI/8 ・数学の話ばかりしてうざい ←わかる ・作者は答え書いて ←わからなくもない ・答え書かないからクソ問題! ←は? : デフォルトの名無しさん [sage] 2018/11/12(月) 17:54:26.10:9RzF2H48 誤解があるので訂正しておくけど 出題者が「落とし穴」をちゃんと想定できていれば良問だしそれを確認せんがための「答え出せ」だよ でも、勘違いしたままたまたま答えが合ってしまう入出力例しか提示されていない and/or それを排除できる例を出せない時点でこの問題はそれなりにクソ問題だと思う 引っ掛けて貶めたり、選抜や順位を競うことを目的とした場所じゃないんだからここは : デフォルトの名無しさん [sage] 2018/11/12(月) 18:12:43.91:eZ2UdI/8 n^n^n % 100計算するのに落とし穴も何もないだろ フェルマーの小定理チックに指数部で剰余とるだなんて誰も想定できねえよ なんでキチガイは間違えたらそこから学ばずに問題の方(しかも真っ当)にケチ付けるんだか 運動会で転ぶと怪我をするからグラウンドの至る所にクッションを置いておけと言うモンペと同レベルのキチガイ : デフォルトの名無しさん [sage] 2018/11/12(月) 18:26:31.10:bzMEonQL なんで数学板でやらないのかね。 数学板ではザコだからプログラム板でマウント取りたいとか?ww : デフォルトの名無しさん [sage] 2018/11/12(月) 18:28:01.10:CqB5lm+V ID変えんなやキチガイ : デフォルトの名無しさん [sage] 2018/11/12(月) 18:32:41.33:9RzF2H48 住人かと思ってちょっと丁寧にレスしたらこれだよ ┐(´-`)┌ : デフォルトの名無しさん [sage] 2018/11/12(月) 18:34:56.16:9RzF2H48 変えてないし、そもそも俺だと思うならレスすんなよ… : デフォルトの名無しさん [sage] 2018/11/12(月) 18:55:17.39:eZ2UdI/8 お前以外誰もその問題にケチ付けてねえのに住人面すんな 素直に頭悪いが悪いのが悔しいですって言えよ : デフォルトの名無しさん [] 2018/11/12(月) 19:18:26.81:h68nq2of プログラミングできてもネットリテラシーは低いんだな : デフォルトの名無しさん [sage] 2018/11/12(月) 19:28:11.51:+FWS6rf7 ID:9RzF2H48 こいつ前からこの板荒らしまくってる粘着野郎だぞ 意思疎通は不可能だから無視しとけ : デフォルトの名無しさん [sage] 2018/11/12(月) 19:45:44.72:4WXaKeF0 お題 1900年から2018年までの、7月31日が土曜日である年を全て挙げよ : デフォルトの名無しさん [sage] 2018/11/12(月) 19:52:33.63:n3BneZmq なんで? : デフォルトの名無しさん [] 2018/11/12(月) 19:54:05.95:I5PkaEyl 自分で計算して求めるのを作るか、ライブラリを使ってしまうか、悩ましいところですな・・・ : 336 [sage] 2018/11/12(月) 19:58:23.85:rYIWpX0E 悪い意味で盛り上がってて苦笑するしかない C++ ttp://https://ideone.com/HUZiK8 Ruby読めないけどと大体同じ考え方なのかな : デフォルトの名無しさん [sage] 2018/11/12(月) 20:20:47.61:4WXaKeF0 お題 0から99までの整数を2進数で表したとき、1が奇数個あるものを全て挙げよ : デフォルトの名無しさん [sage] 2018/11/12(月) 20:23:17.93:zzbIEe7z bash + date for i in {1900..2018}; do if [ $(date --date=07/31/$i +%w) -eq 6 ];then echo "$i "; fi; done : デフォルトの名無しさん [sage] 2018/11/12(月) 20:27:55.24:q04ZIund Ruby 日付ライブラリ使うのもつまらないので冗談で (1900..2018).select{|y| (y%100*5/4 - y/2000) % 7 == 4} # => [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010] : デフォルトの名無しさん [sage] 2018/11/12(月) 20:31:45.80:q04ZIund Ruby p (0..99).select{|i| i.digits(2).count(1).odd?}; # => [1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59,61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98] : デフォルトの名無しさん [sage] 2018/11/12(月) 20:36:43.90:MOsxqjp/ J 分けて計算 years=:1900 + i. 119 saturdays =: 6= weekday years(,"0 1) 7 31 saturdays # years 出力 1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010 1行で (#~ 6&=@weekday@(,&7 31)"0) 1900+i.119 出力は同じ : デフォルトの名無しさん [sage] 2018/11/12(月) 20:55:43.70:MOsxqjp/ J (#~ 2&|@+/@(#.^:_1"0)) i.100 出力 1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98 : デフォルトの名無しさん [sage] 2018/11/12(月) 21:30:19.73:WG+vGwsG Perl5 use feature say; $,=','; say = grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99; 実行 $ perl 12_434.pl 1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98 : デフォルトの名無しさん [sage] 2018/11/12(月) 21:32:31.70:WG+vGwsG ゴメンよけいな=が入っていたので削除 Perl5 use feature say; $,=','; say grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99; 実行 $ perl 12_434.pl 1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98 : デフォルトの名無しさん [sage] 2018/11/12(月) 21:57:07.87:jh3oqSUb rust ttp://https://ideone.com/gTuww7 : デフォルトの名無しさん [sage] 2018/11/12(月) 22:18:19.15:kM9Cc8DJ PowerShell 1900..2018 | %{Get-Date "$_/07/31"} | ? -Property DayOfWeek -eq 6 | select Year : デフォルトの名無しさん [] 2018/11/12(月) 23:14:49.42:fOB5B0pj Common Lisp ttp://https://ideone.com/C9fVpq : デフォルトの名無しさん [sage] 2018/11/12(月) 23:55:59.63:jh3oqSUb c ttp://https://ideone.com/BvQRUR : デフォルトの名無しさん [sage] 2018/11/13(火) 00:02:22.82:5Ay5yU9p 乙 : デフォルトの名無しさん [sage] 2018/11/13(火) 00:27:29.87:7jyC4IO4 python import datetime [x for x in range(1900,2018) if datetime.datetime(x,7,31).weekday() == 5] -> [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010] ツェラーの公式を用いた別解 [x for x in range(1900,2018) if (x + int(x/4) - int(x/100) + int(x/400) + 1) % 7 == 6] [x for x in range(1,99) if format(x,"b").count("1") % 2] -> [1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98] : デフォルトの名無しさん [sage] 2018/11/13(火) 00:32:55.99:7jyC4IO4 [x for x in range(1900,2018) if (x + x//4 - x//100 + x//400 + 1) % 7 == 6] でええやんけ : デフォルトの名無しさん [] 2018/11/13(火) 00:43:41.95:bZ0HXQ7X Haskell main = print.tnum.filodd.zip list $ map bsum list tnum = map (\(x,_) -> x) filodd = filter (\(x,y) -> odd y) bsum = sum.blist blist 0 = [] blist n = (n `mod` 2):blist (n `div` 2) list = [0..99] 実行結果 [1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98] : デフォルトの名無しさん [sage] 2018/11/13(火) 00:55:13.44:5Ay5yU9p 乙乙 : デフォルトの名無しさん [sage] 2018/11/13(火) 01:00:17.03:wnw9zNxR 出力とかなさらないんですか? : デフォルトの名無しさん [sage] 2018/11/13(火) 01:11:01.02:qGbdPj8P Squeak/Pharo Smalltalk (1900 to: 2018) select: [:y | (Date year: y month: 7 day: 31) weekday = #Saturday] "=> #(1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010) " : デフォルトの名無しさん [sage] 2018/11/13(火) 01:23:34.12:qGbdPj8P Squeak/Pharo Smalltalk (0 to: 99) select: [:x | ((x radix: 2) occurrencesOf: $1) odd] "=> #(1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98) " : デフォルトの名無しさん [sage] 2018/11/13(火) 01:59:27.96:4/lVJDsB >>448をJavascriptに引き写してみた。 [...function*(){for(i=1900;i++<2018;)if((i+~~(i/4)-~~(i/100)+~~(i/400)+1)%7==6)yield i}()] [...function*(){for(i=0;i++<99;)if(i.toString(2).match(/1/g).length%2)yield i}()] 汚い… Pythonの内包表記は良いなぁ… : デフォルトの名無しさん [sage] 2018/11/13(火) 02:08:16.58:JCaIqwLF やってみた J z=: dyad define " 0 s=: ([+ (], (((_1:^+)*+)))) "0 0 >: |: (y,x)$((i.c)/:,(+:c)(#."0 1)|(i.y)s/(i.x))i.i.c=.x*y ) 3 z 3 1 2 6 3 5 7 4 8 9 4 z 2 1 2 3 5 4 6 7 8 3 z 5 1 2 6 7 12 3 5 8 11 13 4 9 10 14 15 1 z 8 1 2 3 4 5 6 8 7 : デフォルトの名無しさん [sage] 2018/11/13(火) 02:09:33.92:JCaIqwLF >1 z 8 >1 2 3 4 5 6 8 7 写し間違えました。実際には正しい結果になります。 : デフォルトの名無しさん [sage] 2018/11/13(火) 02:27:33.07:JCaIqwLF は各 (x,y) の項について 主キー x + y 副キー x + (-1)^(x+y) * (x+y) とするとジグザグ順に昇順のキーが得られるので そのキーでソートしたときの順位を表示、というやり方 : デフォルトの名無しさん [] 2018/11/13(火) 11:28:29.90:/6RlnNZj Perl5 ttp://https://paiza.io/projects/HxeBcbXHG1jRNRhrutaKqA 文字列にせずに全Bit足して求めた。 : デフォルトの名無しさん [] 2018/11/13(火) 12:04:16.15:/6RlnNZj C ttp://https://paiza.io/projects/Xq4YBZq4qJJLOZLsNTyWng ライブラリ使用。 コンパイラとライブラリの対応の問題だろうが、32bit環境ではできなかった。time_t型がlongか何かになっていて足りなかったからだろうと思う。 まともに動くかどうかは(またはコンパイルできるかどうかは)環境依存ということになる。 : デフォルトの名無しさん [sage] 2018/11/13(火) 14:23:32.25:TStmpOw3 Squeak Smalltalk を参考に (joinを直せばPharoも可) | fn | fn := [:M :N | | digits xs ys primaries secondaries sorted | digits := (M * N) log ceiling. xs := (1 to: M) collect: [:idx | (1 to: N) asArray]. ys := (1 to: M) collect: [:idx | Array new: N withAll: idx]. primaries := xs + ys. secondaries := primaries \\ 2 * 2 - 1 * xs. sorted := ((1 to: M) gather: [:y | (1 to: N) collect: [:x | x@y]]) sort: [:pt | (primaries at: pt y) at: pt x] ascending, [:pt | (secondaries at: pt y) at: pt x] descending. sorted doWithIndex: [:pt :idx | (xs at: pt y) at: pt x put: (idx printStringPadded: digits)]. (xs collect: [:row | row joinSeparatedBy: ' ']) asStringWithCr ]. fn value: 3 value: 3. "=> '1 2 6 3 5 7 4 8 9' " fn value: 4 value: 2. "=> '1 2 3 5 4 6 7 8' " fn value: 3 value: 5. "=> '01 02 06 07 12 03 05 08 11 13 04 09 10 14 15' " fn value: 1 value: 8. "=> '1 2 3 4 5 6 7 8' " : デフォルトの名無しさん [sage] 2018/11/13(火) 15:05:24.75:x0SFJuPP 副キーは x+y の偶奇に応じて上下や左右が反転してればいいわけだから 単に (-1)^(x+y)*x とか (-1)^(x+y)*y で十分か : デフォルトの名無しさん [sage] 2018/11/13(火) 16:16:43.59:GUmX5rsv Squeak/Pharo Smalltalk を参考に | fn | fn := [:N :exp :lastNDigs | | M series count nextVal initial cycle nextExp | M := 10 raisedTo: lastNDigs. series := OrderedCollection with: N \\ M. count := 0. [(series addIfNotPresent: (nextVal := series last * N \\ M); size) = (count := count + 1)] whileFalse. initial := series indexOf: nextVal. cycle := series size - initial + 1. nextExp := N. exp - 1 timesRepeat: [nextExp := (nextExp between: 1 and: series size) ifTrue: [series at: nextExp] ifFalse: [series at: nextExp - initial \\ cycle + initial]]. nextExp printStringPadded: lastNDigs ]. #(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 2)]. "=> {1->'01' . 2->'16' . 3->'87' . 4->'96' . 5->'25' . 10->'00' . 11->'11' . 13->'53' . 100->'00' . 777->'97'} " #(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 6)]. "=> {1->'000001' . 2->'000016' . 3->'484987' . 4->'084096' . 5->'203125' . 10->'000000' . 11->'906611' . 13->'549053' . 100->'000000' . 777->'977097'} " #(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 4 value: 3)]. "=> {1->'001' . 2->'536' . 3->'387' . 4->'896' . 5->'125' . 10->'000' . 11->'611' . 13->'053' . 100->'000' . 777->'097'} " : デフォルトの名無しさん [sage] 2018/11/13(火) 16:32:36.89:3gkxjay9 何かの行列足せば出来るんじゃね : デフォルトの名無しさん [sage] 2018/11/13(火) 17:15:46.99:GUmX5rsv Squeak Smalltalk ヒルベルトは組み込みなので… | fn | fn := [:n | | form m lines | form := Form extent: (m := 2 << n - 2) + 1 asPoint. (Pen newOnForm: form) place: 0@m; hilbert: n side: 2. lines := (m to: 0 by: -1) collect: [:y | (0 to: m) inject: '' into: [:acc :x | acc copyWith: ('□■' at: (form pixelValueAt: x@y) + 1)] ]. lines asStringWithCr ]. fn value: 1. "=> '■□■ ■□■ ■■■' " fn value: 3. "=> '■□■■■■■□■■■■■□■ ■□■□□□■□■□□□■□■ ■■■□■■■□■■■□■■■ □□□□■□□□□□■□□□□ ■■■□■■■□■■■□■■■ ■□■□□□■□■□□□■□■ ■□■■■■■□■■■■■□■ ■□□□□□□□□□□□□□■ ■■■□■■■■■■■□■■■ □□■□■□□□□□■□■□□ ■■■□■■■□■■■□■■■ ■□□□□□■□■□□□□□■ ■□■■■□■□■□■■■□■ ■□■□■□■□■□■□■□■ ■■■□■■■□■■■□■■■' " : デフォルトの名無しさん [] 2018/11/13(火) 18:58:02.16:6xZ1V9iJ Ruby とは別のアプローチで def zigzag(h, w) min, max = [h, w].minmax sum, multi = h + w, h * w f = -> n {n < min ? n + 1 : n >= max - 1 ? sum - n - 1 : min} diagonal = (sum - 1).times.with_object([*1..multi]).map{|i, ary| ary.shift(f[i]).tap{|a| i.odd? && a.reverse!}} len = Math.log10(multi).floor + 1 h.times.map{|i| diagonal[i, w].map(&:pop)}.map{|e| e.map{|i| "%0#{len}d" % i}.join(' ')}.join($/) end [[3, 3], [4, 2], [3, 5], [1, 8]].each{|e| puts "%d %d =>\n%s\n\n" % [*e, zigzag(*e)]} # => 3 3 => 1 2 6 3 5 7 4 8 9 4 2 => 1 2 3 5 4 6 7 8 3 5 => 01 02 06 07 12 03 05 08 11 13 04 09 10 14 15 1 8 => 1 2 3 4 5 6 7 8 : デフォルトの名無しさん [] 2018/11/13(火) 19:36:47.61:57oATazI Python3 ttp://https://ideone.com/N66H4z => 1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98 : デフォルトの名無しさん [sage] 2018/11/13(火) 21:13:13.10:VjbjD5Cz お題 直方体の体積を求めよ。三辺の長さはそれぞれ自然数+単位(mm,cm,m,km)の形式で与えられる。 答えは自然数+単位(mm^3,cm^3,m^3,km^3)の形式で、数値部分がなるべく小さくなるように単位を選択せよ。 2cm 3cm 4cm => 24cm^3 5mm 5mm 40mm => 1cm^3 3m 100000000km 3mm => 900000000m^3 : デフォルトの名無しさん [sage] 2018/11/13(火) 21:46:22.87:ZM1FA5dW Ruby def to_mili(num, unit) case unit when 'mm' then num when 'cm' then num * 10 when 'm' then num * 1000 when 'km' then num * 1000000 end end def volume(sides) v_mili = sides.scan(/(\d+)([a-z]+)/i).map{|side, unit| to_mili(side.to_i, unit)}.reduce(:*) [[10**18, 'km^3'], [10**9, 'm^3'], [10**3, 'cm^3'], [1, 'mm^3']].each{|coe, unit| return [v_mili / coe, unit] if v_mili % coe == 0} end ['2cm 3cm 4cm', '5mm 5mm 40mm', '3m 100000000km 3mm'].each{|sides| puts '%s => %d%s' % [sides, *volume(sides)]} # => 2cm 3cm 4cm => 24cm^3 5mm 5mm 40mm => 1cm^3 3m 100000000km 3mm => 900000000m^3 : デフォルトの名無しさん [] 2018/11/13(火) 22:46:25.57:jgdNCfY5 プログラミング無料で学んで就職できる? ttp://https://et-irodori.com/b/2202 : デフォルトの名無しさん [sage] 2018/11/13(火) 22:49:55.39:YD+aXj03 無料ではないな。 お前の将来の給料からスクールに金が行く。 : デフォルトの名無しさん [] 2018/11/14(水) 00:08:48.41:pC5Ut3Ig お題: 品物がN個あり,ぞれぞれ体積はa(1), ..., a(N)である。 すべての品物を複数のダンボール(容積C)に分けて詰めるとき,必要になるダンボールの最小数を求めよ。 例: C: 30 a: 8 5 10 6 4 5 8 5 9 6 9 => 3 C: 120 a: 33 61 58 41 50 21 60 64 => 4 C: 120 a: 33 61 58 41 50 21 60 64 23 45 67 78 89 => 7 : ◆QZaw55cn4c [sage] 2018/11/14(水) 00:21:42.53:1oDeoExT ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/54 rucursive に書く人が一人ぐらいいてもいいか、と : デフォルトの名無しさん [sage] 2018/11/14(水) 00:25:56.42:BDJVwe3s rucursiveならしょうがない : ◆QZaw55cn4c [sage] 2018/11/14(水) 00:58:44.50:1oDeoExT typo, "recursive" ええと、 に近いのは かもしれませんが、 は bit 数を具体的に求めきっていますか?それとも のように真理値まで短縮してリターンしてますか? haskell はよくわからないので… : デフォルトの名無しさん [sage] 2018/11/14(水) 01:04:38.44:xfEiy+CV 全探索したら、3つ目の例の答えが6になったんだが合ってる? [21 33 60] [23 89] [41 78] [45 64] [50 67] [58 61] : デフォルトの名無しさん [sage] 2018/11/14(水) 01:23:48.18:smxkN2Ql 5はありえないから合ってるね : デフォルトの名無しさん [] 2018/11/14(水) 05:43:59.41:BYIKTG47 J f=:3 : 0 y 100&|@^ y^y ) : デフォルトの名無しさん [sage] 2018/11/14(水) 06:20:37.22:W0CfAPru どのバージョンのJで100|777^777なんてできるんだよ… : デフォルトの名無しさん [sage] 2018/11/14(水) 06:24:21.52:W0CfAPru 書き方が嫌らしかった。 それ動かないんじゃないですかということ。 : デフォルトの名無しさん [] 2018/11/14(水) 06:38:51.58:BYIKTG47 v6で動いたけどな : デフォルトの名無しさん [] 2018/11/14(水) 07:48:55.58:XWwMTSMS むっちゃ愚直に10進数から2進数に変換してるだけです^^; ttp://http://www.it-license.com/cardinal_number/DecimalToBinary.html ただ、今回は1になってるビットが奇数かどうかだけなのでビット順は逆になっても構わないだろうと、 速い方でリストにしてます。 blist n = (n `mod` 2):blist (n `div` 2) だとビット順は逆さま。 blist n = (n `mod` 2) ++ blist (n `div` 2) とすると正しい順番ですが遅くなります。 あとは1と0だけのリストなので合計求めて sum.blist ―2進数に変換しながら1の合計を求める。 入力と関連付けて zip list 奇数だけをフィルタリングしてます。 filodd = filter (\(_,y) -> odd y) : デフォルトの名無しさん [] 2018/11/14(水) 07:53:25.46:BYIKTG47 の実行結果 f @>1 2 3 4 11 13 100 777x 1 16 87 96 11 53 0 97 : デフォルトの名無しさん [sage] 2018/11/14(水) 08:04:51.77:W0CfAPru 最後の y の前に x: つければどのバージョンでも動くな 100 のとき 0 にならないからダメだけど : デフォルトの名無しさん [sage] 2018/11/14(水) 08:08:08.67:W0CfAPru >100 のとき 0 にならないからダメだけど いやこっちは言いがかりだった。ちゃんと動く。 : ◆QZaw55cn4c [sage] 2018/11/14(水) 08:16:08.16:1oDeoExT 解説ありがとうございます。 >blist n = (n `mod` 2) : blist (n `div` 2) この : は (cond atom list) の : なんですね、なんとかわかるようになりました : ◆QZaw55cn4c [sage] 2018/11/14(水) 08:19:40.71:1oDeoExT ×(cond atom list) ○(cons atom list) : デフォルトの名無しさん [sage] 2018/11/14(水) 08:34:57.16:W0CfAPru 言いがかりだったというか いちゃもんを付けてごめんなさい 100|777x^777x^777x これはngで 777(100&|@^) 777x^777x これはok とか勉強になりました (累乗の剰余の特別扱いか?) : デフォルトの名無しさん [] 2018/11/14(水) 11:57:26.31:bryEJhFF Kotlin ttp://https://paiza.io/projects/PT0g18WlTHd6eyd_iXA5aQ : デフォルトの名無しさん [sage] 2018/11/14(水) 14:12:11.78:OQ399L2/ ナップサック問題はNP困難らしいけどは効率よく解けるのだろうか : デフォルトの名無しさん [] 2018/11/14(水) 14:13:39.09:bryEJhFF 順列と足し算の問題ではないのか? てか、今のところそれしか思い浮かばない。 : デフォルトの名無しさん [sage] 2018/11/14(水) 14:30:58.50:BDJVwe3s 現実は荷物が一日10万個くらいあるんだよなぁ : デフォルトの名無しさん [] 2018/11/14(水) 14:57:13.49:bryEJhFF 正にコンピュータ向けの仕事 : デフォルトの名無しさん [] 2018/11/14(水) 15:18:37.83:XWwMTSMS 実際は大量購入した方が安くなるから、よく出るサイズを大量購入して、それ以下の重量は全部よく出るサイズにした方が安上がりだったりする。 (だからアマゾンの箱は無駄にでかい) まあこれはプログラミング上の問題だが。 : デフォルトの名無しさん [sage] 2018/11/14(水) 16:08:49.28:T5a0sRYf 段ボール箱の容量の増減は割と簡単に出来る。 : デフォルトの名無しさん [sage] 2018/11/14(水) 18:30:10.19:whO97NBY octave ttp://https://ideone.com/8QGk1s : デフォルトの名無しさん [sage] 2018/11/14(水) 19:00:13.88:DmGPDAaP C ttp://https://ideone.com/ecAVVC : デフォルトの名無しさん [sage] 2018/11/14(水) 22:47:03.81:whO97NBY ruby ttp://https://ideone.com/OugAmn : デフォルトの名無しさん [sage] 2018/11/15(木) 00:59:29.19:Q7kJgHrD python 3 ttp://https://ideone.com/moV2rT ゴミ : デフォルトの名無しさん [] 2018/11/15(木) 02:07:53.71:lbhTVho0 Kotlin このアルゴリズムで良いのかいまいちわからん。 箱の中に入れられる最大の品物を詰め込み続け入れられなくなったら次の箱を用意して同じことを繰り返すという方法。 結果を見ると一応出来ているようではあるが、これでうまく行く理由がはっきりわからない。 ttp://https://paiza.io/projects/rWdvvAZRxR1Qhr8B6PaM2Q 入力は1行の先頭に容積、その後スペース区切りで品物の体積。 結果は箱の数とそれぞれの箱に詰め込んだ品物。 : デフォルトの名無しさん [sage] 2018/11/15(木) 05:46:40.53:uj0cmGI/ C: 7 a: 3 3 2 2 2 2 最適は[3,2,2]と[3,2,2]の2箱でないといけない : デフォルトの名無しさん [sage] 2018/11/15(木) 07:10:16.88:dYhTSjHD それだと 6, 5, 3, 2, 2, 2のとき[6, 3], [5, 2, 2] [2] になるが[6, 2, 2] [5, 2, 3]が最小 : デフォルトの名無しさん [sage] 2018/11/15(木) 07:14:44.92:dYhTSjHD C=10を書き忘れた上に既に同じ指摘が書かれてた : 499 [] 2018/11/15(木) 09:09:38.39:RDhHOc3n >>501 なるほど。じゃあダメだな。 : 497 [sage] 2018/11/15(木) 18:39:12.67:cWkAhR+7 ruby ttp://https://ideone.com/WmHR8h ・ほんのりリファクタ : 114 [] 2018/11/15(木) 23:46:11.08:lNkjj0jr Haskell 問題と同じ答えになったんだが、どうやら三番目は6個になるっぽい? じゃあダメか。。。 main = print $ map mapbox (slist list) slist xs = map (\(x,y) -> (x, qsort y)) xs mapbox (x,y) = (x,box 0 x [] y) box n _ [] [] = n box n _ ns [] = n + 1 box n c ns [x] | c >= sum (x:ns) = n + 1 box n c ns [x] | c < sum (x:ns) = n + 2 box n c ns (x:xs) | c == sum (x:ns) = box (n + 1) c [] xs box n c ns (x:xs) | c > sum (x:ns) = box n c (x:ns) xs box n c ns (x:xs) | c < sum (x:ns) && c > sum ((minimum xs):ns) = box n c ((last xs):ns) (x:(init xs)) box n c ns (x:xs) | c < sum (x:ns) && c < sum ((minimum xs):ns) = box (n + 1) c [] (x:xs) box n c ns (x:xs) | c < sum (x:ns) && c == sum ((minimum xs):ns) = box (n + 1) c [] (x:(init xs)) : 114 [] 2018/11/15(木) 23:46:25.95:lNkjj0jr qsort [] = [] qsort (x:xs) = large ++ [x] ++ small where small = qsort [a|a <- xs,a <= x] large = qsort [a|a <- xs,a > x] list = [(30,[8,5,10,6,4,5,8,5,9,6,9]), (120,[33,61,58,41,50,21,60,64]), (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] 出力 [(30,3),(120,4),(120,7)] : デフォルトの名無しさん [sage] 2018/11/15(木) 23:52:24.73:Q7kJgHrD python 3 def wall2(height, width): __maps = {x : [] for x in range(height)} __counts = {w: [x for x in range(height) for y in range(width) if x + y == w] for w in range(height + width)} __num = iter(range(1, 1 + height * width)) __for k,v in counts.items(): ____for vv in sorted(v, reverse= not k % 2):maps[vv].append(next(num)) __for v in range(height): ____print(" ".join(map(lambda x: "%0{}d".format(len(str(width * height))) % x, maps[v]))) __else: print() for x in [[3,3],[4,2],[3,5],[1,8]]: wall(*x) やまほどrange()を書かないといけない宿業 : 114 [] 2018/11/16(金) 08:32:20.01:00yShIqx 結果がはみ出てた。。。 [(30,3),(120,4),(120,7)] 大きい順に入れて、はみ出たら一番小さいのを入れてみる(入ったら入れて、はみ出たらアカウント)アルゴリズムにしたけど、 大きい順に入れて、はみ出たら入る最大の数字に出会うまで探索。探すものが無くなったらカウントってアルゴリズムに変えても結果は変わらず。 どうやって三番目が6個で済むんだろ。 出来た人、アルゴリズム教えて>< : デフォルトの名無しさん [sage] 2018/11/16(金) 10:37:27.50:7Qu0EE2P 渦巻きスキャンも短い ttp://http://ozy4dm.hateblo.jp/entry/2018/04/26/145518 : デフォルトの名無しさん [sage] 2018/11/16(金) 11:04:51.39:qaNu/as0 89 23| 67 45| 78 41| 60 21 33| 64 50| 61 58 全探索ではないけど 33 61 58 41 50 21 60 64 23 45 67 78 89 これを全ての順列作って前から順に120以内ぎりぎりのところで区切っていく ってやり方で出てくる このやり方もこれでは出来たけど最適解が必ず見つかるか分からない : 114 [] 2018/11/16(金) 11:42:51.07:00yShIqx ありがとう。 やってみたけど、こっちでは順列だと1個増えた。 (と言うか、自分もソートしてから渡してるので順列なんだよね。念のため小さい順にしたら増えた) うーん。。。 やってる事同じっぽいのに、なぜだ。。。 : 114 [] 2018/11/16(金) 11:55:02.54:00yShIqx 自分は最後の一個入れようとして、入りきらなかったら入る分一個、はみ出た分一個で2個カウントしてるんだけど、そこが1個とカウントしてるとかだったり。。。 そう言う勘違いであってほしいな。。。 box n c ns [] [x] | c < sum (x:ns) = n + 2 -- x+nsで入りきらないので、nsで一個、xで一個。 じゃないと私じゃお手上げ\(^o^)/ : デフォルトの名無しさん [sage] 2018/11/16(金) 11:57:38.57:qaNu/as0 入るとか入らないとかじゃなくてこの並びが出てきたら左から順に区切って行くだけだよ 89 23 67 45 78 41 60 21 33 64 50 61 58 : デフォルトの名無しさん [sage] 2018/11/16(金) 12:22:55.60:tOyusnlA 510のやり方で最小値は求まるのでコードが間違ってる : 114 [] 2018/11/16(金) 12:23:45.77:00yShIqx おおう。。。勘違い。 順列の意味勘違いしてた。 数学の順列か。分かった。 やってみる。 ありがとう。 : デフォルトの名無しさん [sage] 2018/11/16(金) 12:25:57.98:tOyusnlA 必ず見つかる 最小になるパターンの内各箱の中を逆順にソートした数列を考えてみると自明 : 114 [] 2018/11/16(金) 15:20:04.95:00yShIqx 多分これで出るはずだけど、家のPCが低スペックでメモリ不足で止まる。。。(ideoneでも止まる辺り、現実的じゃない) (小さいリストでは確かめて見たので、動いてるっぽい?) import Data.List main = print $ map (\(x,ys)->(x, bmin x ys)) list bmin x xs = minimum $ map (\lst -> box 0 x [] lst) $ permutations xs box c x [] [] = c box c x ns [] = c + 1 box c x ns (y:ys) | x < sum (y:ns) = box (c + 1) x [] (y:ys) box c x ns (y:ys) | x >= sum (y:ns) = box c x (y:ns) ys list = [(30,[8,5,10,6,4,5,8,5,9,6,9]), (120,[33,61,58,41,50,21,60,64]), (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] せっかく さんに順列と言うヒント貰っておいて活かしきれてない。。。ごめん。 : 114 [] 2018/11/16(金) 15:22:31.31:00yShIqx さんに折角、順列って言うヒント貰っておいて活かせなかった。 ごめん。 : デフォルトの名無しさん [sage] 2018/11/16(金) 15:27:37.42:7Qu0EE2P 箱に入れた量で大小関係を付けると6個で36通り : デフォルトの名無しさん [sage] 2018/11/16(金) 15:40:46.44:i0pW9pnK ttp://https://ideone.com/gsuOUp 力技、順列力技ゆえN<=20程度しか求められない。 TSPのやつの変形(2^n*n)、 冗長な計算してるのだろうが、実装できない ついでに、min(乱択(5000回),貪欲解*2) 回答も書いてみた。 最初のと比較をしてみると、3000テストで42個、間違えた。 (ideone上は100テストで2つ間違っている) ※N,Cが小さければ、 この程度で、そのくらい当たりやすい問題なのだろう。 (逆に間違いを探すのが大変) 余談 これは『ビンパッキング問題』そのもの でかいNに対しては、ググればもっといい近似値の求め方がある。 : デフォルトの名無しさん [sage] 2018/11/16(金) 17:13:07.29:36ZZe95D ビンパッキングって焼きなまし法(近傍が分からない)のとビームサーチ、どっちが効率良いだろうか : デフォルトの名無しさん [sage] 2018/11/16(金) 17:37:36.91:t5p43h9A お題:nの階乗の末尾の連続した0の個数を求める。(過去スレから) : デフォルトの名無しさん [sage] 2018/11/16(金) 17:46:29.02:TvsPH/qp Ruby f = ->n{s = 0; while 0 < n /= 5; s += n; end; s} [0, 1, 2, 3, 4, 5, 10, 100, 1000000, 10000000000000000].each{|e| puts '%d => %d' % [e, f[e]]} # => 0 => 0 1 => 0 2 => 0 3 => 0 4 => 0 5 => 1 10 => 2 100 => 24 1000000 => 249998 10000000000000000 => 2499999999999996 : デフォルトの名無しさん [sage] 2018/11/16(金) 19:19:00.00:KTZidSV2 お題 N段の三角形ピラミッドの一筆書きを構成せよ 例えば、2段の三角形ピラミッドは以下のような図形である △ △ △ 頂点の番号は上から順番に 1 2 3 4 5 6 …… と与えられる。 (入出力例) N=1 => 3 2 1 3 N=2 => 1 2 4 5 2 3 5 6 3 1 => 1 3 5 6 3 2 5 4 2 1 (解は複数あるが、そのうちの一つを出力すればよい) : デフォルトの名無しさん [sage] 2018/11/16(金) 20:05:31.22:JjlNk60X Ruby def hitofude(n) return [1] if n == 0 x, y = n*(n + 1)/2, (n + 1)*(n + 2)/2 [ y, *hitofude(n - 1), *(1...n).flat_map{|i| [y - i, x - i]}, *(x + 1..y), ] end [2, 3, 4].each{|i| p hitofude(i)} # => [6, 3, 1, 2, 3, 5, 2, 4, 5, 6] [10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10] [15, 10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10, 14, 9, 13, 8, 12, 7, 11, 12, 13, 14, 15] : デフォルトの名無しさん [sage] 2018/11/16(金) 21:39:18.95:0oMzWKAu C ttp://https://ideone.com/i2ui3M : デフォルトの名無しさん [] 2018/11/17(土) 09:45:00.71:u+BaxmkL やった。 順列使わないで三番目が6個になった! Haskell main = mapM_ print $ map mapbox (slist list) slist xs = map (\(x,y) -> (x, qsort y)) xs mapbox (x,y) = (x,length (box x [] [] y)) box _ [] [] [] = [[]] box _ ns [] [] = [ns] box c ns ys [x] | c >= sum (x:ns) = box c (x:ns) [] (reverse ys) box c ns ys [x] | c < sum (x:ns) = [ns] ++ box c [] [] (reverse (x:ys)) box c ns ys (x:xs) | c >= sum (x:ns) = box c (x:ns) ys xs box c ns ys (x:xs) | c < sum (x:ns) && c >= sum ((last xs):ns) = box c ns (x:ys) xs box c ns ys (x:xs) | c < sum (x:ns) && c < sum ((last xs):ns) = [ns] ++ box c [] [] (reverse ys ++ (x:xs)) qsort [] = [] qsort (x:xs) = large ++ [x] ++ small where small = qsort [a|a <- xs,a <= x] large = qsort [a|a <- xs,a > x] list = [(30,[8,5,10,6,4,5,8,5,9,6,9]), (120,[33,61,58,41,50,21,60,64]), (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] : デフォルトの名無しさん [] 2018/11/17(土) 09:45:32.76:u+BaxmkL qsort (x:xs) = large ++ [x] ++ small where small = qsort [a|a <- xs,a <= x] large = qsort [a|a <- xs,a > x] list = [(30,[8,5,10,6,4,5,8,5,9,6,9]), (120,[33,61,58,41,50,21,60,64]), (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] : デフォルトの名無しさん [] 2018/11/17(土) 09:46:31.74:u+BaxmkL (120,[33,61,58,41,50,21,60,64,23,45,67,78,89])] : ◆QZaw55cn4c [sage] 2018/11/17(土) 11:31:38.44:ByrEztlA やっと理解しました…すべての xor 演算を利用しているわけではないのですね… : デフォルトの名無しさん [] 2018/11/17(土) 11:41:54.02:u+BaxmkL Haskell main = mapM_ print $ zip list $ map zlen list zlen x = (length.(filter (== '0')).show.product) [1..x] list = [0,1,2,3,4,5,10,100,1000,10000] Out (0,0) (1,0) (2,0) (3,0) (4,0) (5,1) (10,2) (100,30) (1000,472) (10000,5803) : デフォルトの名無しさん [sage] 2018/11/17(土) 12:12:32.80:PHz1iip2 よーわからんが末尾じゃなくてすべての0を数えてない? : デフォルトの名無しさん [] 2018/11/17(土) 12:27:52.98:z9owpr8+ ぺちぷ <?php function solve(int $n):int{ $a=0; for($i=5;$i<=$n;$i*=5)$a+=intdiv($n,$i); return $a; } foreach([1,5,10,1e2,1e6,1e16] as $i)printf("%d -> %d\n",$i,solve($i)); ?> 1 -> 0 5 -> 1 10 -> 2 100 -> 24 1000000 -> 249998 10000000000000000 -> 2499999999999996 : デフォルトの名無しさん [] 2018/11/17(土) 12:46:05.88:u+BaxmkL コリャうっかりw zlen 差替え。 zlen x = (length.(takeWhile (== '0')).reverse.show.product) [1..x] : デフォルトの名無しさん [] 2018/11/17(土) 12:48:16.01:u+BaxmkL 実行結果 (0,0) (1,0) (2,0) (3,0) (4,0) (5,1) (10,2) (100,24) (1000,249) (10000,2499) : デフォルトの名無しさん [sage] 2018/11/17(土) 15:08:29.22:thhERN1M Perl5 その1:単純にloop for $i (0,1,2,3,4,5,10,100,1000,10000,1000000) { ($s, $n) = ($i, 0); while ($s) { $s = int $s / 5; $n += $s; } print "$i $n\n"; } Perl5 その2: lambdaのtail recursion use feature current_sub; for $i (0,1,2,3,4,5,10,100,1000,10000,1000000) { $n = sub {my $j = shift; $j ? do {my $s = int $j / 5; $s + __SUB__->($s)} : 0; }->($i); print "$i $n\n"; } いずれも実行結果は $ perl 12_522.pl 0 0 1 0 2 0 3 0 4 0 5 1 10 2 100 24 1000 249 10000 2499 1000000 249998 = i/5のreductionよりもエレガントな解法をしばらく考えていたけど一旦断念して投稿します : デフォルトの名無しさん [] 2018/11/17(土) 17:48:20.07:corCuJCM お題 月(01から12)、日(01から31)、時(00から59)、分(00から59)、秒(00から59)の10桁の日付データで 全部の桁が異なる場合を全て求める。だ : デフォルトの名無しさん [] 2018/11/17(土) 17:53:02.90:corCuJCM すいません。最後の文字はゴミです無視してください : デフォルトの名無しさん [sage] 2018/11/17(土) 18:44:23.27:eb0sqdRj 時って00から23じゃないの? : デフォルトの名無しさん [] 2018/11/17(土) 19:03:48.66:corCuJCM その通りです。すいません。 時(00から23)に訂正します。 : デフォルトの名無しさん [sage] 2018/11/17(土) 19:42:56.43:qglse9qW Ruby date = (3..9).flat_map do |mo| [*1..2].permutation.flat_map do |dd, dh| ([*3..5] - [mo]).permutation(2).flat_map do |dm, ds| ([*3..9] - [mo, dm, ds]).permutation.map do |d, h, m, s| [0, mo, dd, d, dh, h, dm, m, ds, s] if dh == 1 || h < 4 end end end end.compact p date.size # => 768 puts date.map(&:join) # => 0326174859 0326174958 0326184759 0326184957 0326194758 0326194857 0327164859 0327164958 0327184659 0327184956 ... 略 : デフォルトの名無しさん [sage] 2018/11/17(土) 20:18:24.56:e9k3MEr9 東西ローマ帝国勃興期か 胸が熱くなるな : デフォルトの名無しさん [] 2018/11/17(土) 20:30:15.26:z9owpr8+ ルジャンドルの定理がエレガントでは無いと申すか : デフォルトの名無しさん [] 2018/11/17(土) 20:54:52.23:u+BaxmkL Haskell main = ((mapM_ putStrLn).only.(zip (ccheck date10))) date10 n2 n | n < 10 = '0':show n n2 n = show n only = (map (\(_, d) -> d)).filter (\(x,_) -> x == False) ccheck = map ((elem False).count) count xs = map (\c -> ((<2).length.(filter (== c))) xs) "1234567890" date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec] | month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]] パターン数字や最初付近が合ってるかはRubyの人()ので確認したので多分合ってる。 : デフォルトの名無しさん [] 2018/11/17(土) 20:56:09.09:u+BaxmkL ccheck = map ((elem False).count) count xs = map (\c -> ((<2).length.(filter (== c))) xs) "1234567890" date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec] | month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]] の人ので答え合わせしたので、多分合ってる。 : デフォルトの名無しさん [] 2018/11/17(土) 20:57:39.57:u+BaxmkL date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec] | month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]] の結果で答え合わせ済み。 : デフォルトの名無しさん [] 2018/11/17(土) 20:58:20.76:u+BaxmkL の結果で答え合わせ済み。 : デフォルトの名無しさん [sage] 2018/11/17(土) 21:15:29.25:qglse9qW の全結果 過不足がないことは確認済み ttp://https://ideone.com/sNgmqP : デフォルトの名無しさん [sage] 2018/11/17(土) 22:37:13.60:BeWwS75G Perl5 sub f {grep{!/(.)\1/} map{sprintf "%02d", $_} @_} sub g {map{$_=>1} split'', shift} for $M (1..10,12) { ($S) = f($M); $D = $M == 2 ? 28 : ($M =~ /(4|6|9)/ ? 30 : 31); for $d (f 1..$D) { %t = g "$S$d"; next if 4 != keys %t; for $h (f 1..23) { %t = g "$S$d$h"; next if 6 != keys %t; for $m (f 0..59) { %t = map{$_=>1} split'', "$S$d$h$m"; next if 8 != keys %t; for $s (f 0..59) { %t = map{$_=>1} split'', "$S$d$h$m$s"; next if 10 != keys %t; print "$S$d$h$m$s\n"; } } } } } 実行結果 $ perl 12_537.pl 0326174859 0326174958 0326175849 ... 中略 0928175436 0928175634 0928175643 計768個 : デフォルトの名無しさん [] 2018/11/17(土) 23:10:25.25:u+BaxmkL 03/26 17:48:59 みたいに書式化してるんだけど、RubyもPerlも数字だけなのな。。。 その方が速いのは分かるけど。 : デフォルトの名無しさん [sage] 2018/11/17(土) 23:53:27.88:BeWwS75G 数学的にルジャンドルの定理と同じ原理に帰結する解法であっても もっとエレガントなコードアーキテクチャ、たとえば桁の三角形の5と10を 再帰的に渡り歩いてshiftしながら足しこんでいくようなすごくシンプルで、 もっと短いコード実現を探してたという意味です。 つか5とか10とか100とか通過するたびに0が一桁二桁増えることに パターンがあるのに気がついてうまく使おうとしたけど、 それがルジャンドルの定理のひとつだとは知りゃせんでした。 : デフォルトの名無しさん [sage] 2018/11/18(日) 00:08:39.78:2kF9kdFV 25 125が出てこない辺り理屈わかってなさそう : デフォルトの名無しさん [sage] 2018/11/18(日) 00:17:41.21:XHHQeobW 5は*5ね 50+は… : デフォルトの名無しさん [] 2018/11/18(日) 05:42:08.97:HhgIFMcS 分かっちゃ居たけど、聞いたこともない定理が出る辺り高卒にはエレガントな回答は無理ぽ。。。 : デフォルトの名無しさん [sage] 2018/11/18(日) 10:00:29.21:5NL96rQC codeIQで類似の問題を解いた当時は知らなかったけど、 普通に行き着いたけどな : デフォルトの名無しさん [sage] 2018/11/18(日) 10:39:30.27:Q5hV0WNe ruby ttp://https://ideone.com/dCnEfd : デフォルトの名無しさん [] 2018/11/18(日) 11:15:29.83:HhgIFMcS せっかくルジャンドルの定理を知ったので作り直してみた。 Haskell main = ((mapM_ print).(zip list).(map (zlen 0 1))) list zlen ans x n | 5 ^ x > n = ans zlen ans x n = zlen (n `div` (5 ^ x) + ans) (x + 1) n list = [0,1,2,3,4,5,10,100,1000,10000,12000,100000000] : デフォルトの名無しさん [sage] 2018/11/18(日) 13:05:15.26:oKOqkAfz お題:同調圧力 要素0,1からなる3次以上の正方行列がある。 縦、横、対角線に0が1個だと1に変化する。この変化が繰り返される。 最後にすべての要素が1になる最小数の1の数と初期配置を求めよ。 : デフォルトの名無しさん [sage] 2018/11/18(日) 13:38:56.07:XHHQeobW 定理名を知らなくても考えれば見出せるよ : デフォルトの名無しさん [sage] 2018/11/18(日) 14:07:39.31:/U8hetN/ ttp://examist.jp/mathematics/math-a/integer/kaijyou-soinsu/ ttps://www.youtube.com/watch?v=pWV0mlibNGQ 高校数学の範囲内だろ 「高卒」なる言い訳が通用するほど高校数学は甘くない : デフォルトの名無しさん [sage] 2018/11/18(日) 14:25:30.20:qNfVdQsW まあ入試でよく見る問題だよね : デフォルトの名無しさん [] 2018/11/18(日) 14:54:31.18:HhgIFMcS そうだね。 高卒だからは言い訳だ。 そう言うのを思いつけない頭の悪さでプログラマーに成れなかった。 それだけだな。 : デフォルトの名無しさん [sage] 2018/11/18(日) 15:01:13.02:XHHQeobW 短時間で車輪を思い付く/付かないはある意味、向き/不向きでもある そういうひらめきタイプじゃなくてもちゃんと食べているプログラマーはいっぱいいるぞ : デフォルトの名無しさん [] 2018/11/18(日) 16:24:57.02:HhgIFMcS ありがとう。 でももう、プログラマー目指す年齢じゃないから^^; iPadのHaskell(Raskell)で力付くでも12000!までは解ける辺り、 効率悪くてもとりあえず動く物を作れるようになったのは良い時代になったと思う。 : ◆QZaw55cn4c [sage] 2018/11/18(日) 19:54:03.12:KS5/UdBT その動画、素因数の5を数えればよい、と言い切っちゃっているが、2は数えなくてもいいのか?あるいは 2 を数えなくてもいい理由を述べていないよね それに、どうして素因数分解は必ずひととおりになるのですか?二通りになるかもしれないのでは? : デフォルトの名無しさん [sage] 2018/11/18(日) 19:58:30.97:/tSlZOJ0 そうだね おまけに足し算がアーベル群を成していないかもしれないから和と自然数の定義から確認しないと駄目だね : デフォルトの名無しさん [sage] 2018/11/18(日) 21:11:02.75:cU5Dmtcu 今、((2n-1)2^m, n5^m)をペアで考えるよ そうすると、1≦n, mで常に(2n-1)2^m≦n2^(m+1)≦n4^m≦n5^mになる で、ということはx!の中にある5の倍数が含まれるなら、対応した2の倍数もまた含まれていて素因数の個数が同じ なので素因数は5だけ数えれば良い 素因数分解が一通りなのは自明なので定義からやり直せ : デフォルトの名無しさん [sage] 2018/11/18(日) 21:18:15.05:HyP7YfXU 2以上のnに対しn!=(2^p)*(5^q)*N(Nと2と5は互いに素)とする非負整数p,q,Nがただ一組存在して p>qであることはほとんど自明だが証明しろと言われると… : デフォルトの名無しさん [] 2018/11/18(日) 21:24:02.32:HhgIFMcS ttp://https://mathtrain.jp/legendretheorem 末尾の 0の数は,10で何回割り切れるか,すなわち 2で割れる回数と 5で割れる回数の少ない方である。 (直感的に考えて 5 で割れる回数のほうが少ないので 5で割れる回数だけ考えればよいが練習のため,) : デフォルトの名無しさん [sage] 2018/11/18(日) 21:50:28.21:tNgGKwOg 普通に自明 : ◆QZaw55cn4c [sage] 2018/11/18(日) 21:56:44.59:KS5/UdBT >素因数分解が一通りなのは自明 自明ではないと思います…「素数の定義は 1 と自身以外の約数を持たない」であって「素数の積が一通り」ではないですから >そうすると、1≦n, mで常に(2n-1)2^m≦5^mになる OKです >で、ということはx!の中にある5の倍数が含まれるなら、対応した2の倍数もまた含まれていて素因数の個数が同じ ここは飛躍しているのでは? n・5^m →(2n-1)・2^m と対応づけるとき n・5^m の形の数が決して (2n-1)・2^m の形にならないのであれば一対一の対応がとれますが、n・5^m の形であってかつ (2n-1)・2^m の形である整数が存在する場合は一対一の対応にならない 厳密に一対一の対応にならないのなら、因数 2 の個数と因数 5 の個数の大小についてなにもいえないのでは? : ◆QZaw55cn4c [sage] 2018/11/18(日) 21:58:55.74:KS5/UdBT >直感的に考えて 5 で割れる回数のほうが少ないので あくまでも「直感的に」ですよね 厳密にそういえますか? : デフォルトの名無しさん [sage] 2018/11/18(日) 21:59:59.80:tNgGKwOg ルジャンドルの定理を考えれば普通に自明 : デフォルトの名無しさん [] 2018/11/18(日) 22:33:22.36:ryC6c2pW 証明はされているしググれば出てくる 内容についてはこのスレの趣旨的にここで深く論じる事ではないと思う : デフォルトの名無しさん [sage] 2018/11/18(日) 22:34:24.44:I7k3lQnf ◆QZaw55cn4c は荒らしなのでスルーでお願いします : デフォルトの名無しさん [sage] 2018/11/18(日) 22:42:22.16:qz83zcM7 お題 UTF-8のバイト列が与えられるので、Unicodeのコードポイントを求めよ 6F 64 61 69 => U+006F U+0064 U+0061 U+0069 E3 81 8A E9 A1 8C => U+304A U+984C C2 A9 F0 9F 8D 94 E9 A6 99 41 => U+00A9 U+1F354 U+9999 U+0041 : デフォルトの名無しさん [sage] 2018/11/18(日) 23:39:58.87:N6zzFXD1 ◆QZaw55cn4c は、このスレでも荒らしてるのか。 : ◆QZaw55cn4c [sage] 2018/11/18(日) 23:51:49.66:KS5/UdBT >内容についてはこのスレの趣旨的にここで深く論じる事ではない 一理あるとは思います : デフォルトの名無しさん [sage] 2018/11/18(日) 23:58:08.89:N6zzFXD1 何かと思ったら、自然数の素因数分解の一意性に文句を付けているのかよ。 : デフォルトの名無しさん [sage] 2018/11/19(月) 00:12:50.43:En0/bEno n・5^m=(2n-1)・2^mなら、nは2の累乗かつ2n-1は5の累乗(2と5は互いに素なので) でも、2n-1が5の累乗だとするとn=3,13,63,313…と奇数なので(f(1)=3, f(x)=f(x-1)+2・5^(x-1)で導出)nが2の累乗であることに矛盾する 素因数分解が一意なのはwikipediaにでも載ってる というか自分である程度考えてよ……粗探ししてないでさ : デフォルトの名無しさん [sage] 2018/11/19(月) 00:15:20.48:DnlmRpTS Java ttp://https://ideone.com/uuHw3q : ◆QZaw55cn4c [sage] 2018/11/19(月) 00:25:31.38:MufxDZB0 > n・5^m=(2n-1)・2^m そう置くのではなく a・5^b = (2c-1)・2^d と置くべきなのでは? たとえば m = 1 のとき n の小さいものから順に 1・5 → 1・2 2・5 → 3・2 3・5 → 5・2…@ ここ@で 5・2 はすでに数え上げているので、一対一対応になっていないと思います 一対一対応にならない以上、 の推論は飛躍しているのではないでしょうか 繰り返しますが 「n・5^m の形であってかつ (2n-1)・2^m の形である整数が存在する場合は一対一の対応にならない 厳密に一対一の対応にならないのなら、因数 2 の個数と因数 5 の個数の大小についてなにもいえないのでは?」 です : デフォルトの名無しさん [sage] 2018/11/19(月) 00:36:52.56:En0/bEno ん、あれ確かにおかしいな 即レスはミスの源だな、再検討してくる : デフォルトの名無しさん [sage] 2018/11/19(月) 01:06:40.64:4D1JIT10 大変勉強になりました。 const getCP = s => [...new TextDecoder('utf-8').decode(Uint8Array.from(s.split` `.map(x => parseInt(x, 16))))].map(u => 'U+' + u.codePointAt().toString(16).toUpperCase().padStart(4, 0)).join` ` getCP('6F 64 61 69') => "U+006F U+0064 U+0061 U+0069" getCP('E3 81 8A E9 A1 8C') => "U+304A U+984C" getCP('C2 A9 F0 9F 8D 94 E9 A6 99 41') => "U+00A9 U+1F354 U+9999 U+0041" : デフォルトの名無しさん [sage] 2018/11/19(月) 01:10:37.57:rdQ6rffg n/2>=n/5 n/2^2>=n/5^2 以下略 5の方が多くなることはないわな : デフォルトの名無しさん [sage] 2018/11/19(月) 01:11:16.13:4D1JIT10 あっ、はJavascript(整形にpadStart使ったのでES2017)です。 : デフォルトの名無しさん [] 2018/11/19(月) 03:32:52.09:hjbRrJKx Perl5 変換は Perl 任せ。 ttp://https://paiza.io/projects/bErYwPOrGUtJk52KIHj-yw : デフォルトの名無しさん [] 2018/11/19(月) 10:25:48.15:X6/A5UND 問題と言うより、単純な興味なんだけど。 Cでこんなコード書いて (Hello World!!が横に流れ続けて下でマークがクルクル回る) ttp://https://ideone.com/ZaZSaa それをHaskellで書いてみたのね。 ttp://https://ideone.com/ui16nc ハイブリッドな言語増えて来たので、他の言語だとどう書くのかなって。 出来れば破壊的なのと、関数型っぽく非破壊的なのと見てみたい。 (ミュータブル版とイミュータブル版) : デフォルトの名無しさん [sage] 2018/11/19(月) 10:29:45.48:/4Aoxd3M 何をするのか網ちょい詳しく : デフォルトの名無しさん [] 2018/11/19(月) 11:00:22.26:X6/A5UND 精一杯考えて説明したつもりなので、Cのコードコンパイルして実際にコマンドで動かしてもらえれば。 それと同じ動きになるコードを書いて欲しいと言うことです。 (出来れば初期化以外の変数代入有りと無しで) : デフォルトの名無しさん [sage] 2018/11/19(月) 23:48:36.76:S7M28HrM rust ttp://https://ideone.com/Nr1HC5 ruby ttp://https://ideone.com/KFF0F8 : デフォルトの名無しさん [sage] 2018/11/20(火) 00:53:04.42:yKairBEQ python 3 for x in ["6F 64 61 69","E3 81 8A E9 A1 8C","C2 A9 F0 9F 8D 94 E9 A6 99 41"]: __print(" ".join(['U+{:04X}'.format(ord(y)) for y in bytes.fromhex(x).decode("utf-8")])) -> U+006F U+0064 U+0061 U+0069 U+304A U+984C U+00A9 U+1F354 U+9999 U+0041 : デフォルトの名無しさん [sage] 2018/11/20(火) 01:11:13.89:avg9qTbR utf-8がデフォルトだから引数要らないよ : 587 [] 2018/11/20(火) 02:29:27.79:lQrB+xRm C 全て自分で変換 ttp://https://paiza.io/projects/zZQoCluzBMnRmfSixWQAiA : デフォルトの名無しさん [sage] 2018/11/20(火) 02:34:35.37:yKairBEQ python 3 ttp://https://ideone.com/b6Gxn3 : デフォルトの名無しさん [sage] 2018/11/20(火) 11:19:51.35:XC6mINx9 Ruby 仕様をそのまま。ただし冗長性のチェックだけはしていない def divide_prefix(byte) raise 'invalid byte' if byte & 0xF8 == 0xF8 prefix_len = (1..8).find{|i| (byte >> 8 - i) & 1 == 0} prefix = (1 << prefix_len - 1) - 1 << 1 {prefix: prefix, body: byte - (prefix << 8 - prefix_len)} end def utf8_codepoints(bytes) ary = bytes.map{|e| divide_prefix(e)} leading_bytes = ary.select{|dc| dc[:prefix] != 0x02} leading_bytes.map do |lb| utf8_char = ary.shift(lb[:prefix] == 0 ? 1 : lb[:prefix].bit_length - 1) raise 'invalid sequence' if utf8_char[1..-1]&.any?{|dc| dc[:prefix] != 0x02} utf8_char.reverse_each.with_index.map{|dc, i| dc[:body] << 6 * i}.sum end end [ '6F 64 61 69', 'E3 81 8A E9 A1 8C', 'C2 A9 F0 9F 8D 94 E9 A6 99 41' ].each{|str| puts utf8_codepoints(str.split.map(&:hex)).map{|e| 'U+%04X' % e}.join(' ')} # => U+006F U+0064 U+0061 U+0069 U+304A U+984C U+00A9 U+1F354 U+9999 U+0041 : デフォルトの名無しさん [] 2018/11/20(火) 13:23:53.49:FaN+D89v Ruby ターミナル上で10秒間 <marquee>Hello, world</marquee> & 棒がぐるぐる的な感じ duration = 10 wait = 0.1 str = 'Hello, World!' len = str.size bar = %w[- / | \\ ] clear_lines = -> n {puts "\e[#{n}\e[#{n}A"} # 非破壊的 str2 = 'Hello, World!' * 2 (duration / wait).round.times{|i|puts str2[i % len, len], bar[i % 4]; sleep(wait); clear_lines[2]} # 破壊的 hello_ary = 'Hello, World!'.split('') (duration / wait).round.times{puts hello_ary.rotate!.join, bar.rotate!.first; sleep(wait); clear_lines[2]} : デフォルトの名無しさん [sage] 2018/11/20(火) 13:50:30.38:+huVy/La 訂正 duration = 10 wait = 0.1 str = 'Hello, World!' bar = %w[- / | \\ ] clear_lines = -> n {puts "\e[#{n}\e[#{n}A"} # 破壊的 str_ary = str.split('') bar_ary = [*bar] (1..duration / wait).each{puts str_ary.rotate!.join, bar_ary.rotate!.first; sleep(wait); clear_lines[2]} # 非破壊的 str2 = str * 2 (1..duration / wait).each{|i|puts str2[i % sitr.size, str.size], bar[i % 4]; sleep(wait); clear_lines[2]} : デフォルトの名無しさん [] 2018/11/20(火) 23:12:15.60:Vm2a6rBd 世界一気持ち良いフェラチオのアルゴリズムを作れ : デフォルトの名無しさん [sage] 2018/11/21(水) 05:38:04.65:yscr9wE/ Ruby で実行すると、Timeout になりました! # 10桁の文字列で、重複した文字が無いものは、いくつあるか? month = ("01".."12").to_a day = ("01".."31").to_a hour = ("00".."23").to_a min = sec = ("00".."59").to_a # uniq! は変化が無ければ、nil p month.product( day, hour, min, sec ) .reject { | mon, d, h, min, s | ( mon + d + h + min + s ).chars.uniq! } .length : デフォルトの名無しさん [sage] 2018/11/21(水) 08:13:38.75:KQDfl3zy .reject { | mon, d, h, min, s | ( mon + d + h + min + s ).chars.uniq! }が無駄過ぎ .reject(&:uniq!)で良い。それでも良いコードではない あとこれだと2月31日とかが含まれてしまう可能性考慮してないよね(実際には含まれないが) : デフォルトの名無しさん [sage] 2018/11/21(水) 13:17:27.94:r/9FyEhs をちょっと変更。月を分ける必要がなかった date = [1, 2].permutation.flat_map do |dd, dh| [*3..5].permutation(2).flat_map do |dm, ds| ([*3..9] - [dm, ds]).permutation.map do |mo, d, h, m, s| [0, mo, dd, d, dh, h, dm, m, ds, s] if dh == 1 || h == 3 end end end.compact.sort : デフォルトの名無しさん [] 2018/11/21(水) 13:59:24.73:89fYavxU 月日時分秒で文字列で並べる前に11月とか11日とか22日とか必ず各桁が同じ値になるやつ最初から省けば無駄がなくなって少し速くならんか? : デフォルトの名無しさん [] 2018/11/21(水) 17:57:29.48:89fYavxU Kotlin ttp://https://paiza.io/projects/0NqpaSgw6xT_U6SsNmDepA 色々試した結果、やはり最初に必要な文字列全て作ってしまうのが一番速かった。 : デフォルトの名無しさん [sage] 2018/11/21(水) 19:06:42.18:7Tiab2M6 文字列を正規表現で判定するのは遅いんじゃね? : デフォルトの名無しさん [sage] 2018/11/21(水) 19:31:36.89:fvygYhm9 12*31*60*60*60=80,352,000通りの桁が異なるか判定より、10桁並び替え10!=3,628,800通りが日付になってるか判定の方が速そう : デフォルトの名無しさん [sage] 2018/11/21(水) 19:43:32.60:fvygYhm9 計算ミスった、12*31*24*60*60=32,140,800か お詫びにコード、C++ ttp://https://ideone.com/8iQ9OX : デフォルトの名無しさん [sage] 2018/11/21(水) 19:50:15.56:XrCNlm4w 最初の4桁は高々365パターンしかないからその各組について残り6桁720通り検討すれば262,800通りで済む : デフォルトの名無しさん [sage] 2018/11/21(水) 19:55:14.22:XrCNlm4w ちなみに最初の4桁で数字に重複がないのは130通りしかないからここできちんと処理すれば93,600通りで済む : デフォルトの名無しさん [sage] 2018/11/21(水) 20:17:28.45:Pa+SHuBo 普通にやれば768通りで済む 時間が 0x/1d 23:Mm:Ss なら {M, S} = {4, 5} で残りは4つの数字の任意の順でOK 2 * 4! 通り 時間が 0X/2d 1h:Mm:Ss なら M, S は異なる{3, 4, 5}の元で残りは5つの数字の任意の順でOK 3P2 * 5! 通り 全部で (2 + 3P2 * 5) * 4! = 768 通り : デフォルトの名無しさん [] 2018/11/21(水) 20:32:17.09:89fYavxU そうかも。 やっぱただの二重ループで調べるのが一番速いかな? 最初はSetに一文字づつ入れて同じのが既にあったらっていう判定してたんだけどね、正規表現なら一発で判定できると気づいてそちらにした。 まあでも正規表現だから中で複雑な動きになってるかも知れないな。 : デフォルトの名無しさん [] 2018/11/21(水) 20:41:48.33:89fYavxU 良く考えたら各桁が数字しかないから10ビットのビットフラグ立てるかBoolenArrayで10要素あれば重複調べられるな。後で変えよう。 : デフォルトの名無しさん [sage] 2018/11/21(水) 21:02:48.05:fvygYhm9 お題 以下の操作を好きなだけ行う時、0をXにするまでに必要な最小コストを求めよ ・コスト1で値を1増減させる ・コストn+Yで値をn倍する XとYは与えられ、0以上の整数であることが保証される nは自然数の範囲で任意に決めて良い 例(X, Y) 1 3 20 2 63 2 出力 3 11 17 : デフォルトの名無しさん [sage] 2018/11/21(水) 21:03:37.61:Gj+ctZjI お題 N個の正整数を並べ替えたあと結合してできる整数の最小値を求めよ 3 2 1 => 123 1 2 21 => 1212 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 => 10111121314151623456789 : デフォルトの名無しさん [sage] 2018/11/21(水) 21:13:22.72:fcujQIsM 一年って365日?372日? : デフォルトの名無しさん [sage] 2018/11/21(水) 21:47:53.81:DBPerFhf Perl5 use feature say; for (<DATA>) { s/\s*//g; $z = tr/0//; @a = grep{$_} sort split ''; $a = shift @a; say join '',($a, (0)x$z, @a); } __DATA__ 3 2 1 1 2 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 execution $ perl 12_614.pl 123 1122 10111111112233445566789 : デフォルトの名無しさん [sage] 2018/11/21(水) 21:49:54.93:DBPerFhf 間違ってる。ゴメン却下 : デフォルトの名無しさん [sage] 2018/11/21(水) 22:06:23.31:DBPerFhf Perl5 use List::Util max; use feature say; for (<DATA>) { @a = split; $n = max map{length} @a; say $n; $b = join '', sort map{$_.'a'x($n-length)} @a; $b =~ s/a//g; say $b; } __DATA__ 3 2 1 1 2 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 実行 $ perl 12_614.pl 123 1212 10111213141516123456789 : デフォルトの名無しさん [sage] 2018/11/21(水) 22:08:43.18:DBPerFhf 途中の say $n; は不要なdebug write、 削除して下記と差し替え use List::Util max; use feature say; for (<DATA>) { @a = split; $n = max map{length} @a; $b = join '', sort map{$_.'a'x($n-length)} @a; $b =~ s/a//g; say $b; } __DATA__ 3 2 1 1 2 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 : デフォルトの名無しさん [sage] 2018/11/21(水) 22:22:35.53:fvygYhm9 Java ttp://https://ideone.com/NWI4DM : デフォルトの名無しさん [sage] 2018/11/21(水) 22:30:22.51:7Tiab2M6 Java ttp://https://ideone.com/g0xX7G 1 3は3じゃなくて1でいいんよね? : デフォルトの名無しさん [sage] 2018/11/21(水) 22:30:46.05:luckbEjf c ttp://https://ideone.com/cyu360 : デフォルトの名無しさん [sage] 2018/11/21(水) 22:32:28.49:XrCNlm4w python3 def keyMaker(x): __x = [int(y) for y in x] __x.append(x[-1]+0.1) __return x for y in ["3 2 1","1 2 21", "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16"]: print(int("".join(sorted(y.split(),key=lambda x: keyMaker(x))))) -> 123 1212 10111121314151623456789 0.1足さないと "10 11 101 100"で間違えるな : デフォルトの名無しさん [sage] 2018/11/21(水) 22:39:54.74:Pa+SHuBo 101 10 と 10 101 で結果が異なる ttp://https://ideone.com/crTQpT : デフォルトの名無しさん [sage] 2018/11/21(水) 22:54:14.65:7Tiab2M6 Java ttp://https://ideone.com/Ievsls : デフォルトの名無しさん [sage] 2018/11/21(水) 22:55:54.34:7Tiab2M6 あ、問題読み間違えてるわ コスト1で1増やすんじゃなくて1増減出来るのね… : デフォルトの名無しさん [sage] 2018/11/21(水) 23:11:59.00:DBPerFhf Perl5 use feature say; say sort{"$a$b"<=>"$b$a"} split for <DATA>; __DATA__ 3 2 1 1 2 21 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 実行 $ perl 12_614.pl 123 1212 10111121314151623456789 : デフォルトの名無しさん [] 2018/11/21(水) 23:12:22.88:jrFgFGaV お題:分数を小数に直したときの循環部分の周期を求める 割り切れる場合は0とする 例: 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => ? 99998360006603 / 9999901 => ? : デフォルトの名無しさん [sage] 2018/11/21(水) 23:20:10.22:7Tiab2M6 Java (の修正) ttp://https://ideone.com/Wmb9ZO : デフォルトの名無しさん [] 2018/11/21(水) 23:21:24.98:jrFgFGaV 123412345/999999999 => 9 もの例に追加 : デフォルトの名無しさん [sage] 2018/11/21(水) 23:30:03.05:fvygYhm9 あ、ごめん1 3は1だね 3 1と書き間違えた : デフォルトの名無しさん [sage] 2018/11/21(水) 23:35:51.69:7Tiab2M6 Java ttp://https://ideone.com/DX4VYY : デフォルトの名無しさん [sage] 2018/11/21(水) 23:40:44.97:7Tiab2M6 循環部の周期じゃなくて、小数点以下の循環部の終わる位置を調べてる気がしてきた…修正が必要ですw : デフォルトの名無しさん [sage] 2018/11/21(水) 23:56:52.64:DBPerFhf Perl5 for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my $n; do { $x = 10 * $x % $y; $n++ } while $x != $m; print "$X/$y => ", ($x ? $n : $x), "\n"; } __DATA__ 1 3 10 2 988027 983 919 870473 1223 1476221 99998360006603 9999901 123412345 999999999 実行 $ perl 12_628.pl 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => 122816 99998360006603/9999901 => 1999980 123412345/999999999 => 9 : デフォルトの名無しさん [sage] 2018/11/22(木) 00:02:55.27:YC9N9M8Q そういわれるとも自信がなくなってきたので念のため修正 Perl5 for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my ($n, %h); $h{$x} = 1; do { $x = 10 * $x % $y; $n++ } until $h{$x}; print "$X/$y => ", ($x ? $n : $x), "\n"; } __DATA__ 1 3 10 2 988027 983 919 870473 1223 1476221 99998360006603 9999901 123412345 999999999 実行 $ perl 12_628.pl 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => 122816 99998360006603/9999901 => 1999980 123412345/999999999 => 9 : デフォルトの名無しさん [sage] 2018/11/22(木) 00:08:36.27:iFlHYuR3 1234/555 => 3 だと4になる だと無限ループって怖くね? : デフォルトの名無しさん [sage] 2018/11/22(木) 00:10:07.02:YC9N9M8Q サンプルデータでは問題ないが 場合によっては無限ループの恐れアルかも : デフォルトの名無しさん [sage] 2018/11/22(木) 00:11:14.76:YC9N9M8Q は無限ループの恐れなし : デフォルトの名無しさん [sage] 2018/11/22(木) 00:13:47.95:iFlHYuR3 ideoneに食わせたらTime limit exceededになる・・・なんでや ttp://https://ideone.com/2b6wUH : デフォルトの名無しさん [sage] 2018/11/22(木) 00:16:08.77:YC9N9M8Q いや変なところから巡回し始める数値があれば も無限ループ 以下修正版。しかし少し進んでからようやく巡回し始める数値ってあるんだろうか… for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my ($n, %h); $h{$x} = 1; while(1) { $x = 10 * $x % $y; $n++; last if $h{$x}; $h{$x} = 1; } print "$X/$y => ", ($x ? $n : $x), "\n"; } __DATA__ 1 3 10 2 988027 983 919 870473 1223 1476221 99998360006603 9999901 123412345 999999999 : デフォルトの名無しさん [sage] 2018/11/22(木) 00:19:18.30:YC9N9M8Q しらんがなサイトのtimeout秒設定とちゃいますか いま使っているPC(CPU Core U1300 1.06Gz)では 一番遅いのソースで $ time perl 12_628.pl 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => 122816 99998360006603/9999901 => 1999980 123412345/999999999 => 9 12.312 secs : 自分は出題者じゃなくて632です [sage] 2018/11/22(木) 00:20:17.51:iFlHYuR3 ideoneに食わせたら1234/555動いたがと同じで4になってる ttp://https://ideone.com/eojdE5 1234/555 = 2.2[234]234234... で3よな? : デフォルトの名無しさん [sage] 2018/11/22(木) 00:26:34.37:YC9N9M8Q うちのPCだと for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my ($n, %h); $h{$x} = 1; while(1) { $x = 10 * $x % $y; $n++; last if $h{$x}; $h{$x} = 1; } print "$X/$y => ", ($x ? $n : $x), "\n"; } __DATA__ 1234 55 実行 $ time perl 12_628.pl 1234/55 => 3 0.281 secs Perlは5.20.3 32 bit, integerは64bit のもの。 5.16.3 32 bit, integer が32bitでも 1234/55 は => 3 になるよ : デフォルトの名無しさん [sage] 2018/11/22(木) 00:29:14.36:iFlHYuR3 5が1個足りてませんぜw 1234/55=22.4[36]3636... => 2 : デフォルトの名無しさん [sage] 2018/11/22(木) 00:33:49.88:YC9N9M8Q for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my ($n, %h); $h{$x} = 1; while(1) { $x = 10 * $x % $y; $n++; last if $h{$x}; $h{$x} = 1; } print "$X/$y => ", ($x ? $n : $x), "\n"; } __DATA__ 1234 555 Perl 5.20.3 32 bit, integer 64bit $ perl.exe 12_628.pl 1234/555 => 4 0.266 secs Perl 5.16.3 32 bit, integer 32bit $ perl 12_628.pl 1234/555 => 4 : デフォルトの名無しさん [sage] 2018/11/22(木) 00:37:35.25:iFlHYuR3 じゃから、 1234/555 = 2.2[234]234234... だから答えは3にならんとあかんじゃろ : デフォルトの名無しさん [sage] 2018/11/22(木) 00:37:56.28:YC9N9M8Q bug に気がついた。循環する範囲だけの長さを求めていない : ◆QZaw55cn4c [sage] 2018/11/22(木) 00:44:22.07:r9/Xo7jY 私もよーく考えました、 の推論で正しいと思い直しました。 「数字と数字を対応させる」のではなく「数字の中の因数5 と別の数字の中の因数 2 とを対応させる」んですね,週末になったらちゃんと書きます ごめんなさい… : デフォルトの名無しさん [sage] 2018/11/22(木) 00:47:46.57:YC9N9M8Q Perl5 for (<DATA>) { ($X, $y) = split; $x = $m = $X % $y; my ($n, %h); $h{$x} = $n++; while(1) { $x = 10 * $x % $y; last if $h{$x}; $h{$x} = $n++; } print "$X/$y => ", ($x ? $n-$h{$x} : $x), "\n"; } __DATA__ 1 3 10 2 988027 983 919 870473 1223 1476221 99998360006603 9999901 123412345 999999999 1234 555 実行 $ perl 12_628.pl 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => 122816 99998360006603/9999901 => 1999980 123412345/999999999 => 9 1234/555 => 3 : 604 [] 2018/11/22(木) 02:49:00.32:zC+py8mV Kotlin ttp://https://paiza.io/projects/TlIXUiQhX1uJMvGlxSRnHA の改造版 重複調査はビットフラグ使ってやるようにした。 出力は番号を振って出すようにした。 : デフォルトの名無しさん [] 2018/11/22(木) 03:19:07.41:zC+py8mV 問題の意味がわからない。 : デフォルトの名無しさん [sage] 2018/11/22(木) 04:04:02.81:dySjvlSp Ruby f = -> d { [2, 5].each{|e| d /= e while d % e == 0} return 0 if d == 1 r = 1; (1..d).find{|i| 1 == r = 10 * r % d} } %w[ 1/3 10/2 988027/983 919/870473 1223/1476221 99998360006603/9999901 123412345/999999999 1234/555 ].each{|e| n, d = e.split(?/).map(&:to_i); puts '%d/%d => %d' % [n, d, f[d / d.gcd(n)]]} # => 1/3 => 1 10/2 => 0 988027/983 => 982 919/870473 => 54288 1223/1476221 => 122816 99998360006603/9999901 => 1999980 123412345/999999999 => 9 1234/555 => 3 : デフォルトの名無しさん [sage] 2018/11/22(木) 15:33:08.34:yB1Us7SO 17941970723/5711177472= 3. 14155370 [ 07847337299484291004011020163934418881248871826338 51095286012502326945724442022732505973857434350098 中略 81545008587679202836020711912487386979243218306349 2795623634229099298422222099702245 ](周期=1584) であってる? : デフォルトの名無しさん [sage] 2018/11/22(木) 15:43:48.55:lSIebnj9 あってる : デフォルトの名無しさん [sage] 2018/11/22(木) 15:54:06.63:yB1Us7SO 1009 : デフォルトの名無しさん [] 2018/11/22(木) 23:20:25.14:8KGvhG/L ttp://https://ideone.com/hY41ni : デフォルトの名無しさん [sage] 2018/11/23(金) 19:09:31.91:VH48PKdk Ruby 再帰 def cost(x, y) return [0] if x == 0 table = cost(x - 1, y) table << table.flat_map.with_index{|e, i| i == 0 ? [x] : [x / i, -(-x / i)].uniq.map{|v| e + v + y + (i * v - x).abs} }.min end [[1,3], [3, 1], [20, 2], [63, 2]].each{|e| puts 'X = %d, Y = %d => %d' % [*e, cost(*e).last]} # => (X, Y) = (1, 3) => 1 (X, Y) = (3, 1) => 3 (X, Y) = (20, 2) => 11 (X, Y) = (63, 2) => 17 : デフォルトの名無しさん [sage] 2018/11/23(金) 19:12:10.98:K3SLU2ZA f = ->str{str.split.sort{|a, b| a + b <=> b + a}.join} ['3 2 1', '1 2 21', '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'].each{|e| puts '%s => %s' % [e, f[e]]} # => 3 2 1 => 123 1 2 21 => 1212 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 => 10111121314151623456789 : デフォルトの名無しさん [sage] 2018/11/23(金) 19:34:32.58:oncB24e2 お題: 入力をHTMLのリストに変換しなさい。 入力: * aaa * bbb * ccc * aaa * bbb * ccc 出力: <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> : デフォルトの名無しさん [sage] 2018/11/23(金) 19:51:58.05:ZGD1vCd6 お題 非負整数の10進数表記を"マイナス10進数"表記に変換せよ 321 => 481 (400 - 80 + 1) 910 => 19090 (10000 - 9000 + 000 - 90 + 0) 909 => 909 0 => 0 11111 => 29291 123456789 => 284664829 : デフォルトの名無しさん [sage] 2018/11/23(金) 20:55:58.69:5iW/esUy ttp://https://ideone.com/SHKftF ・行頭と行末は適当に削除しちゃってる : デフォルトの名無しさん [sage] 2018/11/23(金) 21:05:33.15:Hqw3cjct Ruby puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).join('</li><l> 入力: * aaa * bbb * ccc * aaa * bbb * ccc 出力: <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> : デフォルトの名無しさん [sage] 2018/11/23(金) 21:07:03.88:Hqw3cjct 途切れたので訂正 puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).('</li><li>')}.join("</ul>\n<ul>") : デフォルトの名無しさん [sage] 2018/11/23(金) 21:10:53.54:Hqw3cjct 連投ごめん 訂正 puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).join('</li><li>')}.join("</ul>\n<ul>") : デフォルトの名無しさん [sage] 2018/11/23(金) 22:18:17.60:Hqw3cjct Ruby f = -> n {return n if n < 10;a, b = n.divmod(100); c, d = b.divmod(10); 100 * f[a - (-c / 10)] + 10 * (-c % 10) + d} [321, 910, 909, 0, 11111, 123456789].each{|e| puts '%d => %d' % [e, f[e]]} # => 321 => 481 910 => 19090 909 => 909 0 => 0 11111 => 29291 123456789 => 284664829 : デフォルトの名無しさん [sage] 2018/11/23(金) 23:32:40.54:RKSYf6WR Perl5 for (split /\n\n/, <<EOL) * aaa * bbb * ccc * aaa * bbb * ccc EOL { @a = map{"<li>$_</li>"} /\* (\w+)/g; print "<ul>", @a, "</ul>\n"; } 実行結果 $ perl 12_659.pl <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> : デフォルトの名無しさん [sage] 2018/11/24(土) 00:04:24.01:IB4DmzOp * 以降にスペース文字が含まれていても、もれなく扱うなら @a = map{"<li>$_</li>"} /\* (\w+)/g; ↓ @a = map{"<li>$_</li>"} /\* ([^\n]+)/g; : デフォルトの名無しさん [] 2018/11/24(土) 02:05:34.99:Q9o1GKtC 問題の意味がわからない。 : デフォルトの名無しさん [sage] 2018/11/24(土) 02:34:23.79:noZFD3Jl 俺も分からなかったんで調べたら例えば4桁のn進数 A3 A2 A1 A0 の場合 A0 * n^0 + A1 * n^1 + A2 * n^2 + A3 * n^3 となるわけだけど、単純にこのnが-10ならマイナス10進数ということらしい : デフォルトの名無しさん [] 2018/11/24(土) 02:35:47.10:Q9o1GKtC Kotlin ttp://https://paiza.io/projects/San6JOBupEDa6gEL9f6L5Q 拡張関数使ってみました。 : デフォルトの名無しさん [] 2018/11/24(土) 02:43:21.86:Q9o1GKtC なるほど。そういうことか。ありがとう。 : デフォルトの名無しさん [] 2018/11/24(土) 03:26:26.65:Q9o1GKtC Perl5 ttp://https://paiza.io/projects/AJSUVyggQJnm7GnS8_ZC1g : デフォルトの名無しさん [sage] 2018/11/24(土) 03:43:39.38:Q9o1GKtC Kotlin ttp://https://paiza.io/projects/DwesufgOG64B8-KN_ErG5w C ttp://https://paiza.io/projects/HwczmyQnaji1IgHICqHrIg 最初 Kotlin で作って確認した後で paiza.io にコピペして実行したら 99998360006603 / 9999901 が タイムアウトしてしまい、じゃあ C で作るか(ついでに tsearch() 使ってみるか)と思ってやってみたが 相変わらず同じ計算でタイムアウトした。 まあしかしそれ以外の計算はなんとかなったので両方公開しとく。 アルゴリズムは割った余りを10倍するのを繰り返して同じ余りが出たらそこで循環と判定するというやつ。 : デフォルトの名無しさん [sage] 2018/11/24(土) 04:00:55.96:7YEvwBu9 javascript ` * aaa * bbb * ccc * aaa * bbb * ccc `.split`\n\n`.map(ol => `<ol><li>${ol.match(/(?<=\* ).*/g).join`</li><li>`}</li></ol>`).join`\n` 出力: <ol><li>aaa</li><li>bbb</li><li>ccc</li></ol> <ol><li>aaa</li><li>bbb</li><li>ccc</li></ol> // 本物のdocument fragment作っちゃう版 var fragment = ` * aaa * bbb * ccc * aaa * bbb * ccc `.trim().split`\n\n`.map(ol => ol .match(/(?<=\* ).*/g) .reduce((acc, li) => (acc.appendChild(document.createElement`li`).innerHTML = li, acc), document.createElement`ol`)) .reduce((acc, ol) => (acc.appendChild(ol), acc), document.createDocumentFragment()) document.querySelector('div#target').appendChild(fragment)など任意のエレメントにそのままappend可能。 : デフォルトの名無しさん [sage] 2018/11/24(土) 05:34:48.85:Dcky2N9A ttp://https://pastebin.com/6HttXyVt : デフォルトの名無しさん [] 2018/11/24(土) 05:38:41.45:Q9o1GKtC C (その2) ttp://https://paiza.io/projects/21K5fAVsJlYtob_H0rZ9LA よく考えたら出来た。 循環になっている桁の最初の余りを取っておいて次に出るまでカウントすれば良いだけで余りを全て保存しておく必要ないんだな。 : デフォルトの名無しさん [sage] 2018/11/24(土) 05:41:18.30:Dcky2N9A の言語は JavaScript( Windows Scripting Host用 )ね : デフォルトの名無しさん [sage] 2018/11/24(土) 08:20:40.93:01jBobXF Ruby で作った。ただし、最終行に改行を追加した text = <<"EOT" * aaa * bbb * xxx * yyy EOT buf = ""; result = "" text.each_line do |line| # 1行ずつ処理する line.chomp! # 末尾の改行を削除する case when line.empty? # 空文字列 result += "<ul>" + buf + "</ul>" + "\n" # ul で囲む buf = "" when line.start_with?( "* " ) buf += "<li>" + line.slice!( 2..-1 ) + "</li>" # "* " 以後の部分を取り出す else raise end end puts result : デフォルトの名無しさん [] 2018/11/24(土) 11:05:11.18:1C+vWWG1 2人以上(1ユーザーに対し、1PC以上)のジャンケンゲームを作れ。 ・勝ちグループにユーザーが居れば勝ちとする。 ・グー=g、チョキ=v、パー=wとする。 ・グー、チョキ、パー以外が入力されたら、あいこ扱い。 ・全員の手もその都度表示。 例 Rock, Paper, Scissors! ―じゃんけんぽん(またはあいこでしょ)の英語版 (Rock = g/G, Paper = w/W, Scissors = v/V) g [("You",'g'),("PC1",'v'),("PC2",'g')] You Win!! : デフォルトの名無しさん [sage] 2018/11/24(土) 12:06:59.71:X5g7u0K6 def janken(hand, opp_number) hands = opp_number.times.map{%w[g v w].sample}.unshift(hand) p hands.map.with_index{|h, i| [i == 0 ? 'You' : "PC#{i}", h]} return 'Draw' if hands.uniq.size != 2 hands = hands.uniq.join.sum == 0xDE ? %w[w g] : hands.uniq.sort ['You Win!', 'You Lose!'][hands.index(hand)] end puts janken(?g, 1) # => [["You", "g"], ["PC1", "v"]] You Win! puts janken(?v, 2) # => [["You", "v"], ["PC1", "v"]] Draw puts janken(?w, 3) # => [["You", "w"], ["PC1", "g"], ["PC2", "v"]] Draw puts janken(?g, 4) # => [["You", "g"], ["PC1", "g"], ["PC2", "g"], ["PC3", "v"], ["PC4", "v"]] You Win! : デフォルトの名無しさん [sage] 2018/11/24(土) 12:08:52.78:X5g7u0K6 Ruby コピペミス puts janken(?v, 2) -> puts janken(?v, 1) puts janken(?w, 3) -> puts janken(?w, 2) : デフォルトの名無しさん [sage] 2018/11/24(土) 12:14:16.56:X5g7u0K6 「・グー、チョキ、パー以外が入力されたら、あいこ扱い」を見落としていたので return 'Draw' if hands.uniq.size != 2 を return 'Draw' if hands.uniq.size != 2 || %w[g, v, w].none?(hand) に修正 puts janken('グーチョキパー', 5) # => [["You", "グーチョキパー"], ["PC1", "g"], ["PC2", "w"], ["PC3", "v"], ["PC4", "g"], ["PC5", " v"]] Draw : デフォルトの名無しさん [] 2018/11/24(土) 12:16:11.70:1C+vWWG1 あ、あいこはあいこと表示して終わっちゃうのね。。。 あいこの時はまたジャンケンし直しにして欲しい。 条件に入れればよかったかなぁ。。。 : デフォルトの名無しさん [sage] 2018/11/24(土) 12:26:57.03:hG+y0dS8 > ・グー=g、チョキ=v、パー=wとする。 グー=g、チョキ=c、パー=pか グー=m、チョキ=v、パー=wか どっちかに統一してほしい。 グー=g、チョキ=v、パー=wだとgが表音イニシャル、v, wが象形と統一性がない。 気になってご飯が喉を通らなくてプログラミングどころじゃない… : デフォルトの名無しさん [] 2018/11/24(土) 13:02:40.59:1C+vWWG1 gも象形のつもりだったんだが。。。 : デフォルトの名無しさん [] 2018/11/24(土) 14:02:53.32:S/Hnk7Kr Ruby def input(message, cond); begin; puts message; end while cond.call; end def janken hand_type = %w[g v w] input('Input the number of opponents.', proc{gets.to_i < 1}) opp_number, hand, hands = $_.to_i loop do input('Input your hand.', proc{gets; false}) hand = hand_type.index($_.chomp!) hands = opp_number.times.map{rand(3)}.unshift(hand) p hands.map.with_index{|h, i| i == 0 ? ['You', $_] : ["PC#{i}", hand_type[h]]} hand && hands.uniq.size == 2 ? break : puts('Draw') end puts %w[You\ Win! You\ Lose.][3 * hand / hands.uniq.sum / 2] end janken # => Input the number of opponents. 1 Input your hand. choki [["You", "choki"], ["PC1", "g"]] Draw Input your hand. w [["You", "w"], ["PC1", "v"]] You Lose. : デフォルトの名無しさん [sage] 2018/11/24(土) 14:57:54.21:Q9o1GKtC まずは瞑想でもして心を落ち着けると良い。 : 679 [] 2018/11/24(土) 15:20:34.57:1C+vWWG1 一応、自分自身でも投稿。 予想通り分岐使わないバージョン出て来た。 自分も挑戦してみようかな。 Haskell(リストに勝ち負け確定パターン(含まれてるかでグループパターン割り出し)があるか判別して、先頭要素(必ずユーザー)がパターンと同じか判定) ttp://https://ideone.com/9EmrYI Cとか死ねたし。(全体の勝ちグループ(各手をカウントしてグループパターン割り出し)の手を確定後、勝ちグループと同じ手に対応した文字を入力していたか判定) ttp://https://ideone.com/AmfTOy (能力不足の自分はあえてでは無いが)あえて条件分岐バージョンにすると言語や個人の個性出そう。 (CとHaskellでグループ分けや自分が勝ちグループ側かの判定が違うアルゴリズムになった) その場合、アルゴリズムの説明付きだと面白そう。 : デフォルトの名無しさん [] 2018/11/24(土) 16:39:00.82:ZWAqZgZk Python3 ttp://https://ideone.com/PcHoga : デフォルトの名無しさん [sage] 2018/11/24(土) 16:56:21.89:S/Hnk7Kr グーチョキパー以外をプレイヤーが出したときおかしな挙動しない? : デフォルトの名無しさん [] 2018/11/24(土) 17:14:41.52:ZWAqZgZk あいこの判定を手の種類数だけでしてたせいだな 修正した ttp://https://ideone.com/3XBPBb : デフォルトの名無しさん [] 2018/11/24(土) 22:52:47.96:5TC6Hle/ お題 順列を求めるのにシャッフルでデータをたくさん用意して 重複データを取り除くことで求めている人がいた 順列の数の何倍位のデータを用意すればいいか調べる : デフォルトの名無しさん [sage] 2018/11/24(土) 23:20:30.16:Vcpm1NYO 許容誤差と確率の問題じゃん : デフォルトの名無しさん [sage] 2018/11/24(土) 23:23:27.73:7YEvwBu9 二度と来なくていい : デフォルトの名無しさん [sage] 2018/11/24(土) 23:37:47.52:Wfpvwubu PowerShell function Janken { $hands = @($args[0]) + (1..$args[1] | %{ Get-Random "g","v","w" }) ("[" + ($hands | % {"{0}`",'$_')" -f $(if ($i++ -eq 0) {"(`"You"} else {",(`"PC" + ($i-1)}) }) + "]") $groups = @($hands | Group-Object) $win = @{ "g" = "v"; "v" = "w"; "w" = "g" }[$args[0]] if ($groups.Count -ne 2 -or $win -eq $null) { return "Draw" } if (($groups | ? {$_.Name -eq $win}).Count -gt 0) { return "You Win!!" } return "You Lose!!" } PowerShell > Janken g 1 [("You",'g') ,("PC1",'v')] You Win!! PowerShell > Janken v 2 [("You",'v') ,("PC1",'v') ,("PC2",'g')] You Lose!! PowerShell > Janken w 3 [("You",'w') ,("PC1",'v') ,("PC2",'g') ,("PC3",'w')] Draw PowerShell > Janken a 1 [("You",'a') ,("PC1",'g')] Draw : 679 [] 2018/11/25(日) 01:57:22.20:ae+bi37x : デフォルトの名無しさん [sage] 2018/11/25(日) 06:18:56.85:k7/W79Is Kotlin ttp://https://paiza.io/projects/3zt5CUPdhrTFhXx2z7ayvw 入力は1行単位で最初の手が自分、スペース区切りでPCの手になる。 グー、チョキ、パーと元の文字列の対応は以下に対応。 グー: "g", "G", "グー", "ぐー" チョキ: "v", "V", "c", "C", "チョキ", "ちょき" パー: "w", "W", "p", "P", "パー", "ぱー" 勝敗の判定は「勝」、「負」、「相子」で出る。 : 679 [] 2018/11/25(日) 07:47:50.59:ae+bi37x ジャンケンゲームの肝?ってPCはランダムな値を使う所だと思うんですが・・・ あと、私が勝手にアイコといえばジャンケンやり直しって勝手に思い込んでて仕様に盛り込まなかったのがダメなんですが、 アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いしたいです。 さんも、アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いします。 : デフォルトの名無しさん [sage] 2018/11/25(日) 11:54:57.77:qcobBjeQ お題 標準運指( ttp://http://taipingu.net/kotu02.html) によるタイピングを考える。 英小文字からなる文字列Sが与えられるので、Sを入力するのにかかる時間を求めなさい。 各文字の入力にかかる時間は以下の通りとする。 ・1文字目 ・ホームポジションから動かない -> 4 ・ホームポジションから動く -> 5 ・2文字目以降 ・1つ前の文字と反対の手の指 -> 1 ・1つ前の文字と同じ手の違う指 -> 2 ・1つ前の文字と同じ手の同じ指 -> 3 (例) aiueo => 9 (4+1+2+1+1) odai => 9 pppp => 14 asdfjkl => 15 fjdksla => 10 : デフォルトの名無しさん [sage] 2018/11/25(日) 12:38:51.26:YCGD2W4D Ruby h = -> c {'qaz'[c] ? 1 : 'wsx'[c] ? 2 : 'edc'[c] ? 3 : 'rfvtgb'[c] ? 4 : 'yhnujm'[c] ? -4 : 'ik'[c] ? -3 : 'ol'[c] ? -2 : 'p'[c] ? -1 : raise('invalid key')} f = -> str{(str[/\A[adfghjkls]/] ? 4 : 5) + str.each_char.map{|c| h[c]}.each_cons(2).map{|a, b| a * b < 0 ? 1 : a != b ? 2 : 3}.sum} %w[aiueo odai pppp asdfjkl fjdksla].each{|s| puts '%s => %d' % [s, f[s]]} # => aiueo => 9 odai => 9 pppp => 14 asdfjkl => 15 fjdksla => 10 : デフォルトの名無しさん [] 2018/11/25(日) 13:38:17.14:k7/W79Is そういうインタラクティブなやつか。 じゃあまた暇があったら作ろう。 : デフォルトの名無しさん [] 2018/11/25(日) 16:23:23.79:rkqtyTFb お題:Brainfuckのインタプリタを実装せよ 仕様 ttp://https://ja.wikipedia.org/wiki/Brainfuck >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++. ⇒ Hello World! ++++++++[>++++++++<-]>++.<++++++[>++++++++<-]>.<----[>++++<-]>-.++++++++.+++++.--------.+++++++++++++++.<----[>++++<-]>--.++++++++. ⇒ ? : デフォルトの名無しさん [sage] 2018/11/25(日) 16:52:01.92:1Q36MCdG Ruby やっつけ def parse_bra(code) Hash.new.tap{|h| while i = (code.index(/\[[^\[\]]*\]/)) h[i] = i + $&.size - 1; h[h[i]] = i; code = code.sub($&, ' ' * $&.size) end end end def step(stat) case stat[:code][stat[:pos]] when ?> then stat[:mar] = stat[:mar] == 9999 ? 0 : stat[:mar] + 1 when ?< then stat[:mar] = stat[:mar] == 0 ? 9999 : stat[:mar] - 1 when ?+ then stat[:mem][stat[:mar]] = stat[:mem][stat[:mar]] == 255 ? 0 : stat[:mem][stat[:mar]] + 1 when ?- then stat[:mem][stat[:mar]] = stat[:mem][stat[:mar]] == 0 ? 255 : stat[:mem][stat[:mar]] - 1 when ?. then putc stat[:mem][stat[:mar]] when ?, then stat[:mem][stat[:mar]] = $stdin.getc&.ord.to_i when ?[ then stat[:pos] = stat[:bra][stat[:pos]] if stat[:mem][stat[:mar]] == 0 when ?] then stat[:pos] = stat[:bra][stat[:pos]] if stat[:mem][stat[:mar]] != 0 end end def bf(code) stat = {pos: 0, mar: 0, code: code, mem: Array.new(10000, 0), bra: parse_bra(code)} (step(stat); stat[:pos] += 1) while stat[:pos] < code.size end bf('>+++++++++[<++++++++>-]/ 中略 /++++[<++++>-]<+.[-]++++++++++.') # => Hello World! bf('++++++++[>++++++++<-]>+/ 中略 /++++.<----[>++++<-]>--.++++++++.') # => Brainfuck : デフォルトの名無しさん [sage] 2018/11/25(日) 19:29:25.63:Iiz4BNf0 C 昔書いたやつ ttp://https://ideone.com/r8gfF0 mandelbrotがideoneで2.9s : デフォルトの名無しさん [sage] 2018/11/25(日) 21:08:13.52:FiKNHiMA ideoneのbrainfuckより速いじゃないかw ttp://https://ideone.com/E28MuB : デフォルトの名無しさん [sage] 2018/11/25(日) 21:09:21.48:F5E3KDnq 笑った : デフォルトの名無しさん [sage] 2018/11/25(日) 23:28:07.03:DgoPPid/ Perl5 普通のloop版 use feature qw{current_sub say}; for (qw{321 910 909 0 11111 123456789}) { $a = $_; $s = 1; @d= (); do { $d = int $a / 10*$s; $m = $a % (10*$s); unshift @d, $m*$s; $s *= -1; $a = ($a - $m)/10; } while $a; say "$_ $d => ", @d; } Perl5 無名関数の末尾再帰版 use feature qw{say}; for (qw{321 910 909 0 11111 123456789}) { $s = 1; say "$_ $d => ", sub { $a = shift; $d = int $a / 10*$s; $m = $a % (10*$s); my $ms = $m*$s; $s *= -1; $a = ($a - $m)/10; (($a ? __SUB__->($a) : ()), $ms); }->($_); } : デフォルトの名無しさん [sage] 2018/11/25(日) 23:30:57.42:DgoPPid/ ゴメン、普通のloop版の say "$_ $d => ", @d; は不要なdebug writeも出力するので say "$_ => ", @d; に訂正 結果はいずれも $ perl 12_660.pl 321 => 481 910 => 19090 909 => 909 0 => 0 11111 => 29291 123456789 => 284664829 : デフォルトの名無しさん [sage] 2018/11/25(日) 23:34:40.02:DgoPPid/ 再々投ゴメン 無名関数の末尾再帰版 × use feature qw{say}; ↓ ○ use feature qw{current_sub say}; : 697 [] 2018/11/26(月) 02:29:30.61:jdmxn8AZ >>698 HTML + JavaScript ttp://https://codepen.io/anon/pen/OaERvj 即実行できた方がいいかなと思ってブラウザで動く JavaScript にしてみた。 PC側は10台まで台数入力する。 表示は「グー」、「チョキ」、「パー」になっている。 判定は方法ほ Kotlin のやつとほとんど同じ。 但し勝敗や相子に関係なく再挑戦ボタンが出る。 : デフォルトの名無しさん [sage] 2018/11/28(水) 01:28:37.70:he8qnrZH c ttp://https://ideone.com/AfZmCz : 711 [sage] 2018/11/28(水) 23:15:07.63:he8qnrZH c ttp://https://ideone.com/Plh1vx ・mandelbrotが4.24s ・セル配列をコンパクト化 ・一部のforとswitchをgotoで置き換え ・データポインタの範囲チェックは廃止 ・']'のとき無条件に'['へ戻ってたのを廃止 : デフォルトの名無しさん [] 2018/11/28(水) 23:53:16.47:fj/EN88U これで。以前からやろうとしてできてない。AI簡単そうだが。 3x3盤タイルゲーム for Windows ver2.00 14/7/5 更新 対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <入門版> 4x4盤タイルゲーム for Windows ver2.00 14/7/5 更新 対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <本格版> ttp://http://www2u.biglobe.ne.jp/~shunbook/omocha/index.htm : デフォルトの名無しさん [sage] 2018/11/29(木) 11:20:14.11:jwCbT4Qs 盤の状態は4×4のやつで3^16=43046721通りだから後退解析で全状態の最善手が簡単に解ける : デフォルトの名無しさん [sage] 2018/11/29(木) 19:56:01.31:Hd6SZyXm その "&&label" って初めてみたんだけどgcc拡張なんだな : デフォルトの名無しさん [sage] 2018/11/29(木) 20:53:52.25:lIzTCHsu これか。こんなのあったとは知らなかった。 ttp://http://nnabeyang.hatenablog.com/entry/2012/12/05/160312 しかしあまり利用する必要なさそうな予感。 : 711 [sage] 2018/11/29(木) 23:18:59.74:dyCCyrAH c ttp://https://ideone.com/ddpLYQ ・ mandelbrotが4.24s→3.42s ・いくつかの単純なループを自前の命令に置き換え まさかこれ使う日が来るとはね( ^ω^) : デフォルトの名無しさん [sage] 2018/11/30(金) 16:33:00.37:M3yAddAk さすがC言語 奥が深いな : デフォルトの名無しさん [sage] 2018/11/30(金) 18:55:20.12:eqr4XxJg 儲かるお題を書いてください。 : デフォルトの名無しさん [] 2018/11/30(金) 19:56:50.93:vThfWoZE お題: C言語のコメント/*〜*/, //〜 を除去するプログラムを実装せよ : 711 [sage] 2018/11/30(金) 22:52:06.95:j+r1UJtS ttp://https://ideone.com/d0oDj0 ・ mandelbrotが4.24s→3.42s→3.24s ・ループの置き換えを若干増やす ・初期8命令を6命令へ、なんとなく整理 : デフォルトの名無しさん [] 2018/11/30(金) 22:53:31.37:cIO0a97u 命令すんなカス : デフォルトの名無しさん [sage] 2018/11/30(金) 23:05:45.19:iwzbC/nf ここまで最適化するとはすごいな 今VCに移植してやってみてる VCはラベルのアドレスは取れないのでcase文内で処理してる でも文字がダラダラと表示されるのが嫌なので、putchar()の所を 一度バッファに溜めておいて最後にputs()で一気に出力するようにした : ◆QZaw55cn4c [sage] 2018/11/30(金) 23:09:14.20:MkfLpznc やったことがある気がしたのですが、もうすっかり忘れてしまいました… : デフォルトの名無しさん [sage] 2018/11/30(金) 23:09:48.33:iwzbC/nf のを移植するとこうなる 他のも同様だと思う Random1.h というのは自前のストップウォッチクラスを使うためだけなので、 std::chronoを使って適当に自作すれば良い ttp://https://ideone.com/Vf0qIj : デフォルトの名無しさん [sage] 2018/11/30(金) 23:16:05.51:TjeK6E2T お題: 入力にこのスレのhtmlが与えられるので数字だけ,区切りで出力しなさい。 出力例 2018,11,30,... : デフォルトの名無しさん [sage] 2018/11/30(金) 23:54:45.63:8gAcKqbf どれだけの数字の種類に対応するのかで個性が出るな : デフォルトの名無しさん [] 2018/12/01(土) 00:17:45.63:XKE5KJf3 誰もお前になんか言ってねーよ 自意識過剰なんじゃボケカス : デフォルトの名無しさん [] 2018/12/01(土) 01:26:07.16:3EVAE812 Perl ttp://https://paiza.io/projects/Q_MF7JmVJMMjF1aqffgfaw Perl だと簡単だ。 但し /* /* */ */ みたいな二重のやつには対応していない。最初の /* から次に出た */ を削除して */ が残る。 (この辺は本物のCプリプロセッサでも同じかな?) : デフォルトの名無しさん [sage] 2018/12/01(土) 01:45:09.70:YAQo6Dqr Ruby require 'open-uri' thread = ' ttps://mevius.5ch.net/test/read.cgi/tech/1538096947' puts open(thread).read.scan(/>([^<]+)/).flat_map{|(s)| s.scan(/\d+/)}.join(?,) # => 12,12,729,314,1,100,50,1,2018,09,28,10,09,07,13,1,2,1,10,# 略 : デフォルトの名無しさん [sage] 2018/12/01(土) 01:53:10.02:k1RHlnBk "/* hoge */" => "" : ◆QZaw55cn4c [sage] 2018/12/01(土) 02:29:20.81:J8cQMvWo >(この辺は本物のCプリプロセッサでも同じかな?) そうですね。 ttp://https://ideone.com/3TJq7U : デフォルトの名無しさん [] 2018/12/01(土) 03:00:24.20:3EVAE812 あー。文字列リテラルについては何も考えてなかった。 明日考えよう。 やはりそうでしたか。わざわざどうも。 : デフォルトの名無しさん [] 2018/12/01(土) 03:09:09.09:3EVAE812 今閃いたので修正した。(URLは同じ) : デフォルトの名無しさん [] 2018/12/01(土) 03:22:24.06:Zs5zJNI/ Ruby src = $<.read i = 0 loop do break if i >= src.size case src[i] when ?" then i += src[i..-1][/(?:".*[^\\]|")(?:\\\\)*"/].size when ?' then i += src[i..-1][/(?:'.*[^\\]|')(?:\\\\)*'/].size when ?/ then src.sub!(/(?<=.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, ''); i += 1 else i += 1 end end -*- input -*- hoge(); // fuga hoge('"'); // fuga "); hoge("// \"fuga\"\\"); hoge("/* fuga */"); /* fuga fuga /* "fuga" // */; hoge -*- output -*- hoge(); hoge('"'); hoge("// "fuga"\\"); hoge("/* fuga */"); ; hoge : デフォルトの名無しさん [] 2018/12/01(土) 03:24:23.46:3EVAE812 Cでも作った。 ttp://https://paiza.io/projects/2RgQrlBLrzJe9MQp9weQmQ これは1文字づつ読んでモード切り替えて出力したりしなかったりする方式。 文字列リテラルにも対応。 : デフォルトの名無しさん [sage] 2018/12/01(土) 03:40:27.80:mIATMgqT '"', /* hoge */, "fuga" => '"', /* hoge */, "fuga" : デフォルトの名無しさん [sage] 2018/12/01(土) 03:45:42.76:mIATMgqT "// hoge" => " : デフォルトの名無しさん [sage] 2018/12/01(土) 04:05:45.76:3EVAE812 >>738 あ、それか。それは明日考えよう。 : デフォルトの名無しさん [sage] 2018/12/01(土) 04:06:53.29:3EVAE812 C言語の方もシングルクォート考慮してないから似たようなものだな。 : デフォルトの名無しさん [] 2018/12/01(土) 05:34:42.40:qLkjgui5 訂正 src = $<.read i = 0 loop do break if i >= src.size case src[i] when ?" then i += src[i..-1][/\A"(?:.*?[^\\])?(?:\\\\)*"/].size; next when ?' then i += src[i..-1][/\A'(?:.*?[^\\])?(?:\\\\)*'/].size; next when ?/ then src.sub!(/(?<=\A.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, '') end i += 1 end puts src -*- input -*- hoge(); // fuga hoge('"'); // fuga "); hoge("// \"fuga\"\\", /* fuga */ *"fuga"); hoge("/* fuga */"); /* fuga fuga /* "fuga" // */; hoge -*- output -*- hoge(); hoge('"'); hoge("// \"fuga\"\\", *"fuga"); hoge("/* fuga */"); ; hoge : デフォルトの名無しさん [] 2018/12/01(土) 07:52:53.53:U3mK8vlP 誰も俺に言われてると思ってねーよ 自意識過剰なんじゃボケカス : デフォルトの名無しさん [] 2018/12/01(土) 11:03:33.46:XKE5KJf3 生きづらそう : デフォルトの名無しさん [sage] 2018/12/01(土) 11:10:29.72:50ygxsN0 PCRE(Perl)の正規表現なら再帰マッチ(&R)や(&1)使いなせぇ 参考サイトはイロイロあるし : デフォルトの名無しさん [sage] 2018/12/01(土) 11:16:56.49:50ygxsN0 ゴメン再帰マッチは(?R)や(?1)だた 時間あればnest対応版書いてみたいけど 多分ないや… こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける : デフォルトの名無しさん [] 2018/12/01(土) 12:39:50.92:U3mK8vlP おまえやわw いちいち素っ頓狂なレスすんなカスw : デフォルトの名無しさん [sage] 2018/12/01(土) 12:41:56.31:1eGLRG7/ いつもの単芝君やないか この板に粘着して荒らしまわってる奴やで 意思疎通は不可能なのでNGするなりスルーするなりしてくれ : デフォルトの名無しさん [] 2018/12/01(土) 15:19:58.00:3EVAE812 の改造終了(URLは同じ) 長い呪文になってしまった。 >>745 なるほど。その内暇な時にでも考えよう。 : デフォルトの名無しさん [] 2018/12/01(土) 17:02:07.43:3EVAE812 も改造終了(URLは同じ)。 : デフォルトの名無しさん [sage scに誤爆した] 2018/12/01(土) 17:34:49.88:XO3Kyvz4 F# ttp://https://ideone.com/IUPK21 mandelbrotが2.86s ttp://https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした : デフォルトの名無しさん [] 2018/12/01(土) 17:37:04.95:XO3Kyvz4 はインタプリタでないので無視してください : デフォルトの名無しさん [sage] 2018/12/02(日) 00:35:34.00:twRH93OM Kotlin ttp://https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA 1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。 : 711 [sage] 2018/12/02(日) 16:02:26.97:aFBnTuDv c ttp://https://ideone.com/6sLfPH ・ mandelbrotが4.24s→3.42s→3.24s→2.13s ・G: while (*dp) dp += ip->d; ip++; goto TOP; を追加 caseで分岐するほうが移植性あっていいよね( ^ω^) : デフォルトの名無しさん [sage] 2018/12/02(日) 16:29:28.37:hHHhmr7T Python「・・・」 : デフォルトの名無しさん [sage] 2018/12/03(月) 22:04:03.50:cV13JBu4 [お題] 整数A,B(1<=A<B<=50万)と P(1<=P<=10)が順に与えられる。 A以上B以下の10進数の整数から異なる2つの整数を選ぶ。 その2つの整数を表現するのに使われている(各桁の)数字の種類が ちょうどP種類である選び方は何通りできるか。 ※ 先頭ゼロ詰禁止、実行時間一問1.5秒以内(ideone等で) 1) 8 11 2 --> 4 2) 10 1000 5 --> 207480 3) 44 44444 4 --> 33808313 4) 56785 113452 1 --> ? 5) 102345 480713 6 --> ? 6) 1 500000 7 --> 47440713600 例題1) の補足 "8 11 2" のとき {8,9,10,11}から2整数を選ぶ。NCR(4,2)=6通りあるなかから (8,9)(8,11)(9,11)(10,11) の4通りが答え。[]内を使用数字とすると、 例として、(8,11)は[8,1]の2種類, (10,11)は[1,0]の2種類からなる。 対象外は (8,10)は[8,1,0] (9,10)は[9,1,0]で ともに2種類ではない。 ※解き方をパックて単純化した問題。 : デフォルトの名無しさん [sage] 2018/12/03(月) 23:49:23.73:CrTNh3lq 数え上げ系のお題はつまんない : デフォルトの名無しさん [sage] 2018/12/04(火) 10:39:39.35:ZczbahAK パズルソルバーは制約・論理プログラミングが最適だね。 : デフォルトの名無しさん [] 2018/12/04(火) 13:11:47.75:vhrUEqnQ 正規表現だけで書いてみた regexp = /((?:([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/))*)(("|').*?(?<!\\)(?:\\\\)*\4)?/m puts <<~EOT.gsub(regexp, '\2\3') hoge(); // fuga hoge('"'); // fuga "); hoge("// \\"fuga\\"\\\\", /* fuga */ *"fuga"); hoge("/* fuga */"); /* fuga fuga /* "fuga" // */; hoge EOT # => hoge(); hoge('"'); hoge("// \"fuga\"\\", *"fuga"); hoge("/* fuga */"); ; hoge : デフォルトの名無しさん [sage] 2018/12/04(火) 13:34:55.49:fo8RIf+e 無駄な括弧があったので修正 regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m puts src.gsub(regexp, '\1\2') : デフォルトの名無しさん [sage] 2018/12/04(火) 17:02:17.81:N7rAE58b ttp://https://ideone.com/3hct3R caseに書いちゃうと遅くなるな : デフォルトの名無しさん [sage] 2018/12/04(火) 17:20:50.80:tkE9zz4k お題: テキストが入力されるのでそれがお題であれば1,お題でなければ0を出力せよ : デフォルトの名無しさん [] 2018/12/04(火) 17:37:59.07:HMynH27O #!/bin/sh if grep お題 >/dev/null 2>&1 then echo 1 else echo 0 fi : デフォルトの名無しさん [sage] 2018/12/04(火) 17:43:36.31:evmq38l5 お題 C/C++言語のソースをHTMLに変換 ・色分け(外部スタイルシートで色分け以外にも サイズや種類など色々と細かく指定可能)表示 ・コメント・クォート・マクロ定義部分・マクロ等に対応 ・ローカル変数・グローバル変数・static関数・非static関数 ライブラリ変数/関数/マクロ(ヘッダ記載)・ ローカル型・グローバル型名の区別 入力:コマンドラインからファイル名(.c/.cpp) 出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を 新規作成 : デフォルトの名無しさん [sage] 2018/12/04(火) 17:47:43.27:evmq38l5 あと、コードブロックや式の括弧のネストレベルに応じて 背景色を変えてほしい(要望) コマンドラインからタブ=4,8とか指定できるようにもして欲しい : デフォルトの名無しさん [sage] 2018/12/04(火) 17:58:45.10:0EeyK9d3 ruby -ne'p~/\Aお題\Z/?1:0' : デフォルトの名無しさん [] 2018/12/04(火) 18:05:08.94:HMynH27O 1. 好きなIDEのエディタで画面に表示。 2. PrtSc キーを押す。 3. ペイントを起動してペースト。 4. PNGファイルとして保存。 5. メモ帳を起動。 6. HTML を書き、imgで先の画像を表示するようにする。 7. 拡張子をhtmlにして保存。 8. ブラウザで表示。 9. 終了。 : デフォルトの名無しさん [sage] 2018/12/04(火) 18:14:10.74:evmq38l5 型に応じて変数の色分け(スタイル変更)に対応できたら最高 忘れてたけど予約語の色分けは当然 ソースコードの構文エラー箇所以降は単色赤文字で表示 : デフォルトの名無しさん [sage] 2018/12/04(火) 19:05:35.22:Ntdpy5BB PowerShell [int]("お題" -eq $(Read-Host)) : デフォルトの名無しさん [sage] 2018/12/05(水) 04:19:34.99:fABNAu0P Java ttp://https://ideone.com/a1wOZ4 : デフォルトの名無しさん [] 2018/12/05(水) 19:36:38.80:W3jESzak お題:ビュフォンの針をシミュレートして円周率の近似値を求めよ : デフォルトの名無しさん [] 2018/12/05(水) 20:02:35.88:W3jESzak 自分でやってみた Python3 ttp://https://ideone.com/A2FnPP 1000万本投げた場合 3.14219665312 : デフォルトの名無しさん [sage] 2018/12/05(水) 23:06:27.91:dgv/Vo0c angleを計算するのに思いっきりπの値使ってるだろうし..www : デフォルトの名無しさん [sage] 2018/12/05(水) 23:30:47.41:oCZO3Dfm wikipediaは日本語版だけその問題に言及して疑似コードも載ってるのな : ◆QZaw55cn4c [sage] 2018/12/05(水) 23:30:56.16:qUBA/FDJ そんなツッコミは初めてみました、うまいですね… : デフォルトの名無しさん [] 2018/12/05(水) 23:42:52.79:W3jESzak 書いてて思ったけどめんどくさくなってそれ以上考えなかった : デフォルトの名無しさん [sage] 2018/12/06(木) 01:36:29.15:Yn5Hc93r Squeak/Pharo Smalltalk | length N rand needle nCrossed | length := 10000. N := 1e7. rand := Random new. needle := LineMorph from: length / -2 @ 0 to: length / 2 @ 0 color: Color black width: 1. nCrossed := 0. N timesRepeat: [ | crossed | needle rotationDegrees: 90 * rand next; center: 0 @ (length * rand next). crossed := length negated @ 0 to: length @ 0 intersects: needle firstVertex to: needle lastVertex. crossed ifTrue: [nCrossed := nCrossed + 1] ]. N / nCrossed asFloat "=> 3.142226273599298 " : デフォルトの名無しさん [sage] 2018/12/06(木) 01:57:54.87:CjS0UpEg こういうプログラム面手するのつらいだろうな : デフォルトの名無しさん [sage] 2018/12/06(木) 02:09:23.51:7UXgAx11 Ruby # length = 2; gap = 2 buffon_s = -> n {n.fdiv((1..n).count{rand < sin(rand(1e10))})} p buffon_s[10**6] # => 3.1421245789553063 : 755 [sage] 2018/12/06(木) 20:58:20.17:fqSvUjwD 需要はほぼなかったみたいだが、出題者コメントを 答えだすのに必要なものだけに前処理で集計。今回必要なのは 0-9数字使用の有無だけなので2^10に集約・集計できる( 50万→1024) この数になればあとは、二重ループで集計をすればいい。 後半は集約にビットを使えば、popcountを使って簡潔に書けるパターン。 想定解(python by pypy) ttp://https://ideone.com/bujm1x 回答者さんとほぼ同じ。 あえて相違点は、pythonのpopcount相当が意外と重かったので、 前処理でテーブル化している。(高速に出れば、いらないはず?) ※制約の50万と1.5秒は、素の(標準だけの)pythonに合わせている。 (このコードも素のpythonだと、例題6)だけで0.8秒くらい) : デフォルトの名無しさん [sage] 2018/12/06(木) 21:56:29.19:QyI+7EvW from collections import Counter でもうちょっと楽できる : デフォルトの名無しさん [sage] 2018/12/07(金) 15:14:44.93:wiJMm9Hc 蛇足的改良?してみた(一応C++だが殆どC) ttp://https://pastebin.com/dRM2yC3e : デフォルトの名無しさん [] 2018/12/07(金) 22:19:34.17:x8xNXHP3 お題 1,3,4,6,7,9,10,12,… のように1から始まり奇数, 奇数,偶数,偶数, 奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか : デフォルトの名無しさん [sage] 2018/12/07(金) 22:30:34.68:avhY9emJ floor(2019 * 1.5) : デフォルトの名無しさん [sage] 2018/12/07(金) 22:32:31.84:avhY9emJ 結果書いてなかった 3028 : デフォルトの名無しさん [sage] 2018/12/07(金) 22:35:02.23:avhY9emJ 計算量的に整数の乗算とシフト演算だけの n * 3 >> 1 のほうが良いか : デフォルトの名無しさん [sage] 2018/12/07(金) 22:38:48.18:xSpw6JJG Ruby f = -> n {a, b = n.divmod(4); 6 * a + 2 * b + 3 / (b + 2)} p f[2019] # => 3030 : デフォルトの名無しさん [sage] 2018/12/07(金) 22:47:23.26:avhY9emJ 1が0番目で計算してね? ttp://https://ideone.com/8B4VVN : デフォルトの名無しさん [sage] 2018/12/07(金) 22:48:51.29:xSpw6JJG あー本当だ しかも n * 3 >> 1 でよかったんだね : デフォルトの名無しさん [] 2018/12/08(土) 03:40:55.13:xmV4OmOO Kotlin ttp://https://paiza.io/projects/IrRQGqJSJL8lVYGlBueZDw : デフォルトの名無しさん [sage] 2018/12/08(土) 08:09:08.92:JIGsOpwq 第n項=3n/2+(-1)^n/4-1/4 : デフォルトの名無しさん [sage] 2018/12/08(土) 09:20:01.90:vpfNpx82 プログラミング初心者なんですがJavaを覚えるのに良い課題下さい 言語の本は一冊読みました : デフォルトの名無しさん [] 2018/12/08(土) 09:29:35.75:5PBkTMHJ Winならtypeコマンド(LinuxとかUnix系だとcat)と同じ機能を自作してみるとか、行番号も表示するようにするとかから始めては? : デフォルトの名無しさん [] 2018/12/08(土) 09:53:44.58:Mku3deOK f=:+/@$&1 2 f 2019 3028 : デフォルトの名無しさん [] 2018/12/08(土) 09:59:51.42:Mku3deOK 言語はJ : 781 [sage] 2018/12/08(土) 12:53:06.37:JIGsOpwq 整数計算オーバーフローが発生していたのを修正 ttp://https://pastebin.com/FAzjRJn5 : デフォルトの名無しさん [] 2018/12/08(土) 15:30:02.59:dsjig1JQ お題:N×Nの盤面に石を置いていく。 どの4つの石も同一円周上に乗らないようにする場合、最大何個配置できるか? ただし、一直線上に並ぶ配置は半径∞の円周上と考える。 N=3 => 5 N=4 => 7 5 => 9 6 => 11 9 => 18 : デフォルトの名無しさん [] 2018/12/08(土) 17:29:13.00:xmV4OmOO 問題の意味がわからない。図とか描いてくれ。 : デフォルトの名無しさん [sage] 2018/12/08(土) 17:33:47.41:kCA+QhwE 石の大きさはゼロで格子点とでも考えればいいのかな : デフォルトの名無しさん [sage] 2018/12/08(土) 17:36:28.60:m52vxjN5 ああ共円か 有名なゲームだな : デフォルトの名無しさん [] 2018/12/08(土) 19:05:02.19:xmV4OmOO 共円でググってようやっとわかった。 : デフォルトの名無しさん [sage] 2018/12/08(土) 19:37:58.42:xPmIyiBg テトリス : デフォルトの名無しさん [sage] 2018/12/10(月) 02:09:47.01:3g7m60y1 1は0番目じゃなくて1番目だよね。念のため確認 : デフォルトの名無しさん [] 2018/12/12(水) 02:35:41.59:84v7sPOJ お題 2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ : デフォルトの名無しさん [sage] 2018/12/12(水) 07:13:05.92:SVnAXs6w どのような多角形をなすかの 仮定で方法も違ってくるだろうけど、 一般的な場合を視野に入れる限り 複数の数学ライブラリを組み合わせて 扱うソリューションパッケージ的なものに なりそうでお題としてはなんだかなって感じ : デフォルトの名無しさん [sage] 2018/12/12(水) 08:10:30.84:3f3X1OW4 多角形の定義がひどい。 重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい) 重なってはいけないけど辺は突き抜けても良いのかとか。 描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。 : デフォルトの名無しさん [sage] 2018/12/12(水) 08:27:43.91:3f3X1OW4 多角形を三角形に分割して、 (x1,y1)→(x2,y2)のベクトルと (x2,y2)→(x3,y3)のベクトルと (x3,y3)→(x1,y1)のベクトルを それぞれ、 (x2,y2)→(x,y) (x3,y3)→(x,y) (x1,y1)→(x,y) と外積をとって、正負が一致したらその点は多角形内部にある。 重ならないなら三角形に分割、は、 1,2,3、2,3,4、3,4,5…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。 : デフォルトの名無しさん [sage] 2018/12/12(水) 09:01:00.07:J4hfK+qs また数学か。数学板が嫌なら紙とえんぴつでやってろ : デフォルトの名無しさん [sage] 2018/12/12(水) 09:21:43.03:YlPyc4+b ポリゴンで塗り潰してその色になれば真 : デフォルトの名無しさん [sage] 2018/12/12(水) 11:12:59.34:3f3X1OW4 数学になるの? 俺CAD関連と3DCG関連でこういうの書くけどな。 コード書こうと思って出題者に問うたつもりだけど。。 証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。 ってかどうして数学?っぼい問題が嫌われるの? 脳筋コードが良いってこと? : デフォルトの名無しさん [sage] 2018/12/12(水) 11:17:02.00:rSdIoMBA Ruby 与えられるのは凸多角形のみとし、頂点は反時計・時計回りのいずれかで与えられるものとする def diff(a, b); a.zip(b).map{|i, j| i - j}; end def in_triangle?(p, a, b, c) ap, ab, ac = [p, b, c].map{|v| diff(v, a)} det = ab[0] * ac[1] - ab[1] * ac[0] s = (ac[1] * ap[0] - ac[0] * ap[1]) / det t = -(ab[1] * ap[0] - ab[0] * ap[1]) / det [s, t].all?{|e| (0..1).include?(e)} && s + t <= 1 end def in_con_polygon?(p, *vers) vers[1..-1].each_cons(2).any?{|v1, v2| in_triangle?(p, vers[0], v1, v2)} end # 原点を左下の頂点とする長さ1の正方形の内部に(0.5, 0.5)は含まれるか p in_con_polygon?([0.5, 0.5], [0, 0], [1, 0], [1, 1], [0, 1]) # => true p in_con_polygon?([1.76, 1.75], [0, 0], [3, 0], [2, 1.5], [1, 2.5], [0, 3]) # => false : デフォルトの名無しさん [sage] 2018/12/12(水) 11:40:32.38:rSdIoMBA 問題を勘違いしてたので一部修正 凸多角形でなくてもOK 順番も結ぶ順でOK ただしの星型の内部は多角形には含まれないとする def in_con_polygon?(p, *vers) vers[1..-1].each_cons(2).count{|v1, v2| in_triangle?(p, vers[0], v1, v2)}.odd? end : デフォルトの名無しさん [sage] 2018/12/12(水) 11:56:39.21:3f3X1OW4 ベクトル係数の解法も綺麗だな。式も少ないし素晴らしいと思う。 : デフォルトの名無しさん [sage] 2018/12/12(水) 12:12:03.42:SeAXRl2+ Java ttp://https://ideone.com/xJBcjx わかんねーので言語任せw non_zero: の星型の内部も多角形に含まれる even_odd: の星型の内部は多角形に含まれない : デフォルトの名無しさん [sage] 2018/12/12(水) 12:14:30.79:ygJIxGmd このスレには解答者側に数学ができない人がいて、そういう人が文句を言ってる かく言う俺も数学できないが文句は言わない : デフォルトの名無しさん [sage] 2018/12/12(水) 14:03:01.24:FdJbiO2G 数学の問題集から拾ってきただけみたいな雑な出題が叩かれてるんじゃなかったのか 問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど : デフォルトの名無しさん [sage] 2018/12/12(水) 14:49:36.03:GETLERsG 純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、という問題だったら、わざわざプログラム板でやる面白味はないなあと思う。 数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。 個人的な感想です。 : デフォルトの名無しさん [] 2018/12/12(水) 15:01:41.06:LIx8RHBs 集合論的なのをリスト使うのと配列使うのだったら違いもあるだろうけど、 そういう問題出ないね。 A∪B := {x | x ∈ A ∨ x ∈ B} はHaskellだと仮にx が{1,2,3,4,5,6,7,8,9,10}の要素で、Aが{3,4,5,6}、Bが{5,6,7,8}なら setX = [1..10] setA = [3..6] setB = [5..8] [x | x <- setX, x `elem` setA || x `elem` setB] (Haskellは変数名の初めに大文字使えない) これがCで配列縛りだとreallocでも使いながらなんじゃろか。。。 : ◆QZaw55cn4c [sage] 2018/12/12(水) 20:48:43.83:5ElL+qNp >純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、 それは甘い、大甘だと私の経験は私の心に語ってくれています : ◆QZaw55cn4c [sage] 2018/12/12(水) 20:49:58.51:5ElL+qNp そういう問題はある種の順序関係を仮定してインプリメントしたいところです : デフォルトの名無しさん [sage] 2018/12/12(水) 23:47:12.93:V5rMC+dN Smalltalk | X A B | X := 1 to: 10. A := 3 to: 6. B := 5 to: 8. X select: [:x | (A includes: x) or: [B includes: x]] ttp://https://ideone.com/XSlcVz : デフォルトの名無しさん [sage] 2018/12/13(木) 00:26:45.67:ilwXN+sT Squeak/Pharo Smalltalk | X A B | X := 1 to: 10. A := 3 to: 6. B := 5 to: 8. X intersection: (A union: B) "=> #(3 4 5 6 7 8) " : デフォルトの名無しさん [sage] 2018/12/13(木) 01:00:05.58:vQDTFPB2 Ruby x, a, b = [*1..10], [*3..6], [*5..8] p x & (a | b) # => [3, 4, 5, 6, 7, 8] : デフォルトの名無しさん [sage] 2018/12/13(木) 09:40:48.46:wBrOfppZ c ttp://https://ideone.com/YkmUdB c++ ttp://https://ideone.com/WXXvlU : デフォルトの名無しさん [sage] 2018/12/15(土) 18:26:25.25:RxHR1YVb お題:標準入力から読み取った行を出力せよ ただし42を読んだ場合は出力せずに終了する ttp://https://ideone.com/vdWddB : デフォルトの名無しさん [sage] 2018/12/15(土) 18:51:24.63:Hf86DN+J ruby -pe'~/^42$/&&exit' : デフォルトの名無しさん [] 2018/12/15(土) 20:46:54.11:Du8iBFv1 Common Lisp ttp://https://ideone.com/QQzEQh read-lineの第三引数にnil以外を使ったの初めてだ : デフォルトの名無しさん [sage] 2018/12/15(土) 23:34:07.15:2jxK776v bash ttp://https://paiza.io/projects/gIZdCMpBEoNvFnnjVvGGtA : デフォルトの名無しさん [sage] 2018/12/15(土) 23:59:19.52:QTag+jm2 PowerShell while (($var = (Read-Host)) -ne 42) { $var } : デフォルトの名無しさん [sage] 2018/12/16(日) 03:36:20.47:X+FaDx+z python 3 ttp://https://ideone.com/it2Axq : デフォルトの名無しさん [sage] 2018/12/16(日) 13:54:15.20:ob8ozoeg [お題] 来年と素数 今年も残りわずか、来年は2019年で平成31年。 1)"2019"の省略形の"19"について。 素数の和で19を作る、すべての素数配列を列挙せよ(できれば辞書順で)。 同じ素数を何個使ってもよいが、同じ素数同士は区別しない。 ・例えば対象が"11"だと以下の6つ {2, 2, 2, 2, 3} {2, 2, 2, 5} {2, 2, 7} {2, 3, 3, 3} {3, 3, 5} {11} 以下 2)3)4)は種類計のみ答える(明細は多いので略)。 2)来年の初まりは平成31年で、"31"について。 素数の和で31を作る、その種類はいくつか。条件は1)と同様。 3)素数の和で2019を作る、その種類はいくつか。条件は1)と同様。 4)2019と31を続けた数 201931(=2019*100+31)について。 素数の和で201931を作る、その種類はいくつか。 但し、使用していい素数は31以下の素数かつ、 同じ素数は最大2019個までしか使えない。同じ素数は区別しない。 ※ 3)4)は64bit整数を超えるので、下10桁だけの回答も可。 : ◆QZaw55cn4c [sage] 2018/12/16(日) 14:12:11.90:IjCemHtZ 年忘れ課題の時期になったんですね… : デフォルトの名無しさん [sage] 2018/12/16(日) 19:04:23.02:P931WLXH Java ttp://https://ideone.com/LgkDWF あってんのかなー : 830 [sage] 2018/12/16(日) 19:54:33.15:GrZg6kve 2)の31からして自分のと違う。 自分のでは111だった。 javaのやついじって、112個の明細を出してみたら、[2,2,27] があった。 27は素数じゃないよね。いじり方が悪い? : デフォルトの名無しさん [sage] 2018/12/16(日) 19:56:19.00:pjubjjb0 自分も31は111だったわ : デフォルトの名無しさん [sage] 2018/12/16(日) 20:37:34.86:VvrWecHB Ruby 1)は省略 require 'prime' def fuge(n, cand = Prime.to_a(n), h = {}, succ = 0) c0 = cand[0] return h[[n, c0]] if h[[n, c0]] return 0 if n == 0 || !c0 || n < c0 return 1 if n == c0 x = succ == 2019 ? 0 : fuge(n - c0, cand, h, succ + 1) h[[n, c0]] = fuge(n, cand[1..-1], h) + x end p fuge(19) # => 23 p fuge(31) # => 111 p fuge(2019) # => 576202207044176168646563 p fuge(201931, Prime.to_a(31)) # => 4021686887140718864271667825968903 : デフォルトの名無しさん [sage] 2018/12/16(日) 20:50:18.98:P931WLXH まじだ・・・修正した 犯人は118行目だ!orz : 830 [sage] 2018/12/17(月) 20:45:38.05:4p2KDXiR 836 当方の回答と一致しました。 4) 201931 だけ異なる(自分のがあっているとは限らないが……)。 ※再帰の動きがよくわからない : 830 [sage] 2018/12/20(木) 20:26:37.78:W0v1JICZ python ttp://https://ideone.com/OFR7bn 間が空いたので、出題者コメント 1)問題文説明用に書いてみて、問題にもできると思った。 2)3)は"オイラー 31 DP"でググってください。 違いはコインの額面が素数に変わったくらいと、おおきさ。 なかには一つ一つ数えて、本問の2)しか溶けない回答があるので見分けて。 4)については、ソース上三種類書いて考察しています。 ("201931"という変な数値は、3重ループ解を落とすのが目的だった) : デフォルトの名無しさん [sage] 2018/12/21(金) 08:20:43.27:hMEdBbLv お題: 真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群 : デフォルトの名無しさん [sage] 2018/12/21(金) 08:38:52.94:choQhZIj 遅延時間とかファンアウトとかは考慮不要ってことでいいのかな : デフォルトの名無しさん [] 2018/12/22(土) 11:29:36.65:7UfbjIEE 参考にどうぞ ttp://https://eng.kice.tokyo/logic/logic_ex3/ : ◆QZaw55cn4c [sage] 2018/12/22(土) 16:28:53.58:vmp1HvU+ 昔カルノー図がかける範囲(3入力?4入力くらいだったかな?)で簡約化ツールを作ったことがあります 当時は書き捨て上等、でやっていたのですが、今は困ってしまっています、当時のプログラム記述能力は当時は今後もずっと保存されるものと当時は考えていたのですが、それは完全な誤りでした… : デフォルトの名無しさん [sage] 2018/12/23(日) 16:48:28.85:V9Fp8lZV 俺全然わかってない人なんだけど、 そのURLの一番下の、入力部分のNOTゲートを無視しない場合、 9個のNANDゲートで構成できるって書いてあるけど、 NOTゲートの部分を2個減らして7個で作るとかはあかんのん? : デフォルトの名無しさん [sage] 2018/12/23(日) 16:56:13.54:jMuRFGAa 半導体製造のコストがある NANDゲートは作り易い、というか造りが簡素で単純 NOTゲートも作り易い なので厳密には製造コストも考えないといけない : デフォルトの名無しさん [sage] 2018/12/23(日) 17:29:24.88:gPP7+XoH ホントだ、AとCのNOTを一つずつ減らせるね というかこれが最小になる保証もないよね : デフォルトの名無しさん [sage] 2018/12/23(日) 18:34:59.46:m1FIlPHW カルノー図からの簡略結果が最終形ではない。 最終形は Z=~ABC+A~C+~BC : デフォルトの名無しさん [sage] 2018/12/23(日) 21:11:36.62:9AXglOVX それA=0, B=0, C=0の結果から間違ってるんだが : デフォルトの名無しさん [sage] 2018/12/23(日) 23:39:28.74:DR7zt9Cz うむ 最終形は Z=~ABC+A~C+~B~C ですね 2入力NAND回路は Step 9, Solution 1 0 : -1, -1: 0, 0, 0, 0, 1, 1, 1, 1 1 : -1, -1: 0, 0, 1, 1, 0, 0, 1, 1 2 : -1, -1: 0, 1, 0, 1, 0, 1, 0, 1 3 : 0, 0: 1, 1, 1, 1, 0, 0, 0, 0 4 : 3, 1: 1, 1, 0, 0, 1, 1, 1, 1 5 : 4, 2: 1, 0, 1, 1, 1, 0, 1, 0 6 : 5, 2: 1, 1, 1, 0, 1, 1, 1, 1 7 : 5, 4: 0, 1, 1, 1, 0, 1, 0, 1 8 : 7, 6: 1, 0, 0, 1, 1, 0, 1, 0 ともう一つでした。 : デフォルトの名無しさん [sage] 2018/12/24(月) 08:22:13.10:bL5ZoHRn > Z=~ABC+A~C+~B~C それA=0, B=1, C=0の結果が違うぞ : デフォルトの名無しさん [sage] 2018/12/24(月) 11:32:09.70:7aEQUcJ6 ~ABC → C=0なので0 A~C → A=0なので0 ~B~C → B=1なので0 結果0であってるんじゃないのん? : デフォルトの名無しさん [sage] 2018/12/24(月) 13:42:11.05:bL5ZoHRn すまん、合ってるわ ちょっとボケてたな : デフォルトの名無しさん [sage] 2018/12/26(水) 16:33:56.35:GYS6kcBm wxMaximaでお絵描きした。 /* [wxMaxima: input start ] */ load (graphs)$ gg() := draw_graph( net, show_weight=true, vertex_size=3, show_id=true, show_vertices=[0,1,2,8], show_vertex_type=filled_square, head_length=0.2, head_angle=5, edge_color="dark-green", text_color=blue ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Solution[1]:[[[ 0, 3],2],[[ 3, 4],1],[[ 1, 4],1], [[ 4, 5],1],[[ 2, 5],1],[[ 5, 6],1],[[ 2, 6],1], [[ 5, 7],1],[[ 4, 7],1],[[ 7, 8],1],[[ 6, 8],1]]$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ aa:1$ for g:aa thru 1 do ( net : create_graph(9,Solution[g],directed=true), print("Solution",aa,Solution[g]),aa:aa+1, gg()); /* [wxMaxima: input end ] */ : デフォルトの名無しさん [sage] 2019/01/06(日) 20:37:20.68:uX30aAuK エモい歌うまバーチャルユーチューバー ttp://https://script.google.com/macros/s/AKfycbxuAt1ejx43_zMRfK7Xplwgwn7cXDQAdZTJkDdLrVCLo8SIdhI/exec 今、見られている話題のVtuberを知りたいなら、ハルカス式Vtuberランキングを見ましょう 【ハルカス式Vtuberランキング】※毎週・毎月自動更新 ttp://https://script.google.com/macros/s/AKfycbzZO93mJcZ5M_dPmIZOzuVQNr4mcGwQQdiT7GiLld_1Uews7uE/exec 年末年始の一週間12/27〜01/02までのハルカス式Vtuberランキング ttp://https://docs.google.com/spreadsheets/d/1jdVQ2r5yTrAykMRF1nuX6_5DXpK0167D4JcVCQZTJdM/edit#gid=157464142 年末の一ヶ月12/1〜12/31までのハルカス式Vtuberランキング ttp://https://docs.google.com/spreadsheets/d/1Yc6HD_h4lfurme9b3T0ZXBf2-iBpFSmMGg-1bdgSe0E/edit#gid=1971024984 第4回バーチャルYouTuber人気投票募集中(全304名、2018年11月23日〜) あなたの好きなVtuberは?5問(配信内容、トーク、歌うま、ゲーム実況、キャラデザ) ttp://https://script.google.com/macros/s/AKfycbwSwNBm8qYD4_kZN2uJLeqRIP8Mwpbo3YDTUEpaSMU02BDAR3jh/exec ・Googleフォームは標準仕様では不正投票が可能な為、改造して対策を行いました。 ・2018/11/23時点でチャンネル登録数10,000人以上のuserlocalに登録されたVtuberを対象としています。 ・一つのチャンネルでVtuberが複数人いる場合は、それぞれ分けています。 ・このフォームに投票するにはグーグルアカウントでログインする必要はありません。 ・並び順は前回の得票数の高い順と新人は登録者数の多い順に並んでいます。 ・今回も1,000人の方が投票するまで継続します。 なお投票結果はスプレッドシートにリアルタイムで表示されるようにしました。 また【概要】と【詳細】でシートを分けております。 ttp://https://docs.google.com/spreadsheets/d/1udB81Vnia9CoIgPaan3a5XFeaCfcnBXkRoPTuxvRpAc/ grげrげ : デフォルトの名無しさん [] 2019/01/18(金) 22:48:43.15:sD1souQd あげ : デフォルトの名無しさん [] 2019/01/19(土) 05:22:33.88:M8Q3zGyy 過疎ってるので別スレのこれをお題にする。 なお、クラスではなく関数でもサブルーチンでも良い。 ttps://mevius.5ch.net/test/read.cgi/tech/1544839627/332 332 デフォルトの名無しさん (ワッチョイ f11f-t+p0) sage 2019/01/18(金) 22:57:58.37 ID:1ZiD/8V00 文字列から数字をtmpWとtmpHに抜き出すクラスを作りたいのですがどうしたらいいですか? 演算子記号は+−もある、数字の桁数は不明で小数点もあり、数字が入るときは小文字一字始まり、引数はw or hで抜き出す戻り値を示す。 対象文字 @w900×HH AWW×h1000 BWW×HH Cw900/h100 結果 引数がwなら左 hなら右 @tmpW=900 tmpH=WW AtmpW=WW tmpH=1000 BtmpW=WW tmpH=WW CtmpW=900 tmpH=1000 : デフォルトの名無しさん [sage] 2019/01/19(土) 08:17:19.40:9NMu+pMT お題スレじゃなくて、あなたの宿題無料でやりますよになってる : デフォルトの名無しさん [] 2019/01/19(土) 09:54:02.71:9IabhBF0 Ruby f = -> str {str.scan(/([A-Z]{2}|[a-z])((?:\d+\.)?\d+)?/).each_with_object({}){|(m, num), h| h["tmp#{m[0].upcase}"] = !num ? ' ' : num.match?(/\./) ? num.to_f : num.to_i}} %w[ w900×HH WW×h1000 WW×HH w900/h100 w3.14/h2.72 ].each{|e| h = f[e]; puts "#{e} -> " + h.map{|v| '%s = %p' % v}.join(', ')} # => w900×HH -> tmpW = 900, tmpH = " " WW×h1000 -> tmpW = " ", tmpH = 1000 WW×HH -> tmpW = " ", tmpH = " " w900/h100 -> tmpW = 900, tmpH = 100 w3.14/h2.72 -> tmpW = 3.14, tmpH = 2.72 : デフォルトの名無しさん [sage] 2019/01/19(土) 12:58:12.91:XYN5JTgF > CtmpW=900 tmpH=1000 : デフォルトの名無しさん [] 2019/01/19(土) 15:20:58.20:M8Q3zGyy お題をやるかどうかは自由だし使う言語も自由なのでここは宿題向きスレではない。それに宿題用のスレは別にある。 : デフォルトの名無しさん [] 2019/01/20(日) 17:00:10.01:XepLmY3z お題 チェス盤をかく □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ : デフォルトの名無しさん [sage] 2019/01/20(日) 17:28:18.15:bv4HmLR/ for i in range(4): print("□■□■□■□■") print("■□■□■□■□") : デフォルトの名無しさん [sage] 2019/01/20(日) 18:45:01.40:vla32kuj console.log(` □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ `); : デフォルトの名無しさん [sage] 2019/01/20(日) 19:21:05.18:QLQt0ffh 85kg 170cmの俺がJavascriptで回答。 [85, 170] .map(d => [...d.toString(2).padStart(8,0)] .map(b => +b ? '□' : '■') .join`` + '\n') .join`` .repeat(4) : デフォルトの名無しさん [sage] 2019/01/20(日) 19:39:43.28:CUY2SNg1 Ruby puts 72.times.map{|i| i % 9 / 8 * 10 + 15 / (i % 9 + 8) * (i & 1 ^ 9633)}.pack('U*') # => □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ : デフォルトの名無しさん [sage] 2019/01/20(日) 19:45:27.08:z2xvgkTe お前ら天才だな 普段何やってんの : デフォルトの名無しさん [sage] 2019/01/20(日) 19:58:44.02:vla32kuj ヒマ人どもの公開オナニーに騙されるな。 ベンチ取ってみれば分かるけど よりのほうが処理速度も速く、CPU、メモリ消費も勝ってる。 : デフォルトの名無しさん [sage] 2019/01/20(日) 22:22:45.08:n75q6Hj+ 解法や工夫は色々あっていい : デフォルトの名無しさん [sage] 2019/01/20(日) 23:40:01.19:3oCDYmJz 可読性も最強だしなw : デフォルトの名無しさん [] 2019/01/21(月) 00:16:11.01:evkqklOK 前々からつくろうとしていまだ決定版ができてないのがある。 コマンド fileA fileBで、重複行を除いて連結と、 A-Bで重複行を除くやつ。入力が数百Mだときつい。 : デフォルトの名無しさん [] 2019/01/21(月) 00:20:48.31:q5TMCwho きついのは口臭だけにしとけよ : デフォルトの名無しさん [sage] 2019/01/21(月) 04:33:49.89:ZCrWhalc Linux とかでよく使われるシェル(bash とか)ならこんな感じだろうな。 ( uniq fileA ; uniq fileB ) > fileC シェルスクリプトにするならこんな内容のファイルを作ってそれの実行パーミッション立てておくだけ。 #!/bin/sh uniq $1 uniq $2 ようするに uniq コマンド使ってるだけ。 Windows でも似たようなものはあるかも知れないが WSL 入れて Ubuntu とか動かしちゃった方が何も考えずに Linux 風にできるので楽かも知れない。 /mnt/c/ にCドライブマウントされてるからファイルのやり取りを考える必要もない。 改行が LF なのとデフォルトのエンコーディングが UTF-8 なのは考慮する必要があるが。 : デフォルトの名無しさん [] 2019/01/21(月) 07:09:30.84:evkqklOK そんな機能あったっけ、と確認したみたけど意図する動作しない、連続しない重複も対象 Linuxコマンド集 【 uniq 】 ソート済みのファイルから重複した行を削除する ファイルで重複している行を削除する。ただし,ファイルはソートしてある必要がある ttp://https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230918/ 連続していない離れた重複行も削除したければ、sortコマンドコマンドで予めソートする必要がある。その代わり順番は保存されない。 ttp://https://hydrocul.github.io/wiki/commands/uniq.html : デフォルトの名無しさん [sage] 2019/01/21(月) 08:10:55.04:rd0KMO5T 要するにAの末尾とBの先頭で一致するとこだけを削除したいってこと? : デフォルトの名無しさん [] 2019/01/21(月) 08:19:59.40:evkqklOK 2つあって。 一つは連結した単一ファイルで、後方にある重複行を取り除く。 もう一つはBに存在する行を取り除いたAの重複行を取り除く。 それぞれuniq拡張(A+B) 、uniq拡張(A-B)のような。 : デフォルトの名無しさん [] 2019/01/21(月) 09:47:36.96:evkqklOK スクリプトやめてC++でやってみたら ロードと書き込みの速度とほぼ同程度でできるようだ。 : デフォルトの名無しさん [] 2019/01/21(月) 11:56:42.83:ub5sAEWO J }:("1) 8 9 $ '_#' _#_#_#_# #_#_#_#_ _#_#_#_# #_#_#_#_ _#_#_#_# #_#_#_#_ _#_#_#_# #_#_#_#_ : デフォルトの名無しさん [sage] 2019/01/21(月) 13:07:07.09:jV3tC4jb JってUnicode使えないの? : デフォルトの名無しさん [] 2019/01/21(月) 13:14:23.06:ub5sAEWO 使えるんだけど私の方が勉強不足で。 : デフォルトの名無しさん [] 2019/01/21(月) 14:03:05.80:chW+Guj1 Perl ttp://https://paiza.io/projects/06iuVCc-HeWgTb7j2TrTMQ : デフォルトの名無しさん [sage] 2019/01/21(月) 14:14:22.79:P73TaUU+ A-Bの部分は grep -x -v -f B A でできるけど順序を保存したuniqはコマンドだけではできないのかな : デフォルトの名無しさん [] 2019/01/21(月) 18:14:39.49:chW+Guj1 そういうコマンドを別途作るか、全部作っちゃうかかな。 : デフォルトの名無しさん [sage] 2019/01/21(月) 21:03:38.83:mEBdwP2z Ruby なら、ハッシュで重複行を排除できる。 ARGF は、a.txt b.txt (ARGV)を連結した、仮想ファイル ruby script.rb a.txt b.txt 以下は、script.rb の内容 hash = { } ARGF.each_line { |line| hash[ line ] = true } # true には、特に意味がない puts hash.keys -- a.txt あ a あ b -- b.txt x あ a ん -- 出力 あ a b x ん : デフォルトの名無しさん [] 2019/01/21(月) 21:49:42.62:QH90tNLy 速度出るのできた。CRCと文字列長のハッシュしかみてなく重複らしいのはduplicate.txtへ。 標準出力 deldup.exe fileA fileB ・・・ はマージして重複削除 deldup.exe /D fileA fileB ・・・ はA -B -・・・の重複削除 ttp://https://ideone.com/ABJNAy : デフォルトの名無しさん [sage] 2019/01/21(月) 22:56:33.96:uToUSKRf octave ttp://https://ideone.com/KyX1rR : デフォルトの名無しさん [sage] 2019/01/21(月) 23:04:52.30:PFiT+1XJ Javaはunsignedの概念がない : デフォルトの名無しさん [sage] 2019/01/22(火) 02:53:38.24:t1xtxA/a 後方にある重複業削除なら awk で連想配列(要するにハッシュ)使ってこんな風にすればできるな。 awk '{if(!n[$0]){n[$0]=1;print}}' fileA fileB ただし全行をメモリ上に置くことになるのでファイルがでかいとまともに動かない環境があるかも。 超大きいファイルの場合は行ごとに MD5 や SHA1 等のハッシュ値計算してそれだけ保管しておいて比較した方が良いかもね。 : デフォルトの名無しさん [] 2019/01/22(火) 10:22:28.48:f5q/almD Lua for i=1,72 do if i%9==0 then print("") else io.write(({"■","□"})[i%2+1]) end end : デフォルトの名無しさん [sage] 2019/01/22(火) 11:22:34.61:ez/DcBYq 普通に行ごとにソートして重複を除去すればいいだけやん : デフォルトの名無しさん [sage] 2019/01/22(火) 12:39:35.18:bOf9tfZi javascript [...function*(){for(var i=0;i<64;i++)yield (i&7)==7?'\n':'■□'[i&8?i%2:+!(i%2)]}()].join`` : デフォルトの名無しさん [] 2019/01/22(火) 12:48:37.38:J1mDHp9Y 順序変えなくないんだって。 : デフォルトの名無しさん [] 2019/01/22(火) 18:32:37.01:f5q/almD Ruby puts (["□■"*4,"■□"*4]*4) : デフォルトの名無しさん [sage] 2019/01/22(火) 18:48:04.82:bOf9tfZi J分からない人向け解説キボンヌ : デフォルトの名無しさん [sage] 2019/01/22(火) 22:15:16.89:4TOwjU0o javascript ['□■', '■□'].map(s => s.repeat(4) + '\n').join``.repeat(4) : デフォルトの名無しさん [] 2019/01/24(木) 21:04:14.42:HE3o+0uB Lua print (((("_#"):rep(36)):gsub("(........).","%1\n"))) : デフォルトの名無しさん [sage] 2019/01/24(木) 22:20:43.56:HLNzgCZV javascript Array(72).fill().map((v, i)=>i%9?'■□'[i%2]:'\n').join`` はボード横幅が7になってる間違いでしたごめんなさい。 : デフォルトの名無しさん [] 2019/01/25(金) 20:09:30.47:s1700d1K お題 n個からr個選ぶ組み合わせの個数を求める : デフォルトの名無しさん [sage] 2019/01/25(金) 22:06:56.43:7NAKvkXa 数学の問題が叩かれるのはここのアホどもには難しいからなんだ! 決してスレ違いだからじゃないんだ! だから高校1年の教科書の定義引き写すだけの簡単な問題なら叩かれないんだ! : デフォルトの名無しさん [sage] 2019/01/25(金) 22:30:26.19:oIz/D2lY 教科書捨てたから定義ググりました。 const p = (n, r) => (n < 2 || r < 1) ? 1 : n * p(n - 1, r - 1); const c = (n, r) => p(n, r) / p(r); c(1200, 100); //=> 1.2734481790871909e+148 chromeでBigInt実装されてるのでせっかくだからと思ってpを const p = (n, r) => (n < 2n || r < 1n) ? 1n : n * p(n - 1n, r - 1n); に改良しようとしたらエラーでる… なんでか分かる方いたら教えてください。 : デフォルトの名無しさん [sage] 2019/01/26(土) 03:39:53.55:mo79YSSI Ruby c = -> (n, k, m = []) { m[n] = [1] unless m[n] k = n - k if n < k * 2 return m[n][k] if m[n][k] m[n][k] = c[n - 1, k - 1, m] + c[n - 1, k, m] } p c[5, 2] # => 10 p c[100, 50] # => 100891344545564193334812497256 undefined - 1n でエラーが起きているので const c = (n, r) => p(n, r) / p(r, r); : デフォルトの名無しさん [] 2019/01/26(土) 03:52:04.18:NFcmjJe3 効率はともかく、関数プログラミングって本でこれ見た時は感動したな。(言語は数学とSMLを合わせた仮想言語だったが) Haskell c n 0 = 1 c n m |n == m = 1 c n m = c (n - 1) m + c (n - 1) (m - 1) 実行結果 5 `c` 3 >10 : デフォルトの名無しさん [] 2019/01/26(土) 04:12:24.35:NFcmjJe3 高校の教科書版 Haskell c' n r = product [1..n] `div` (product [1..(n - r)] * product [1..r]) 解説 n C r = n P r / r! = n! / ((n - r) ! * r!) (n P r = n ! / (n - r)!に分解) : デフォルトの名無しさん [sage] 2019/01/26(土) 04:32:41.56:Ve68vOks ありがとう! 恥ずかしい… : デフォルトの名無しさん [sage] 2019/01/26(土) 05:11:41.67:iYrqGgfh C++ inline uint64_t gcd(uint64_t a, uint64_t b) { uint64_t r; while ((r = a % b) != 0) { a = b; b = r; } return b; } uint64_t binomial(uint64_t n, uint64_t m) { if (n < m) return 0; m = (m > n / 2) ? n - m : m; uint64_t result = 1; for (uint64_t i = 1; i <= m; i++, n--) { uint64_t d = gcd(result, i); result /= d; result *= n / (i / d); } return result; } : デフォルトの名無しさん [] 2019/01/26(土) 10:34:54.19:ls0y1m5K Lua function cc(n,r) local a = 1 for i = 1, r do a=a*(n-i+1)/i end return a end print(cc(20,10)) 184756.0 : デフォルトの名無しさん [sage] 2019/01/26(土) 11:22:21.12:tq46h9Ux お題 複数の線分が平面上で重なりがあるかないかしらべる。 : デフォルトの名無しさん [sage] 2019/01/26(土) 12:02:35.05:Owe/QLUY @Mathematica Table[If[EvenQ[i + j], 0, 1], {i, 8}, {j, 8}] // ArrayPlot[#, Mesh -> True] & : デフォルトの名無しさん [] 2019/01/26(土) 13:54:20.56:+oP10x+/ 適当に連立方程式とくだけじゃなかったです? 数学出来ないんですけど。 : デフォルトの名無しさん [] 2019/01/26(土) 14:10:31.09:t2YAFdPa 人狼AI と 人狼ゲーム : デフォルトの名無しさん [sage] 2019/01/26(土) 14:39:24.25:YRte2Dpq Perl5 print ((qw{□■}x4, "\n", qw{■□}x4, "\n")x4); 実行結果 $ perl 12_860.pl □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ : デフォルトの名無しさん [sage] 2019/01/26(土) 15:04:32.49:vn81VQ6e Pharo Smalltalk String cr join: ((1 to: 4) collect: [:i | {'□■' repeat: 4 . '■□' repeat: 4} ]) flattened 実行結果 □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ : デフォルトの名無しさん [sage] 2019/01/26(土) 17:16:36.10:5cGQ6lSj お題: マークダウン記法の見出しをHTMLに変換しなさい : デフォルトの名無しさん [] 2019/01/26(土) 18:50:28.91:OZN9QunV rfo-basic For i=1 To 44 m$=m$+Chr$((9622+Mod(i,2))*(Mod(i,9)<>0)+10) Next Print m$ End プロは奇をてらわない。 bai 砂坊主 : デフォルトの名無しさん [sage] 2019/01/26(土) 21:39:22.15:Ve68vOks byでは? : デフォルトの名無しさん [sage] 2019/01/26(土) 21:56:29.11:lXnCadeF レス古事記に構うなよ : デフォルトの名無しさん [sage] 2019/01/27(日) 00:46:03.01:EZ97VlcS @Mathematica セルオートマトン(ルール32)を使って、、 CellularAutomaton[32, {0, 1, 0, 1, 0, 1, 0, 1}, 8] // ArrayPlot[#, Mesh -> True] & : デフォルトの名無しさん [sage] 2019/01/27(日) 01:01:04.00:u288xi28 python3 [print("".join("■" if (x+y) % 2 else "□" for y in range(8))) for x in range(8)] : デフォルトの名無しさん [sage] 2019/01/27(日) 04:52:31.63:rwuNPA7J C for (int r = 0; r < 8; r++) { for (int c = 0; c < 8; c++) { printf((r + c) % 2 ? "■" : "□"); } printf("\n"); } : デフォルトの名無しさん [sage] 2019/01/27(日) 06:36:29.52:rwuNPA7J C double abac = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax); double abad = (bx - ax) * (dy - ay) - (by - ay) * (dx - ax); double cdca = (dx - cx) * (ay - cy) - (dy - cy) * (ax - cx); double cdcb = (dx - cx) * (by - cy) - (dy - cy) * (bx - cx); return (abac * abad < 0 && cdca * cdcb < 0); : デフォルトの名無しさん [sage] 2019/01/27(日) 06:44:59.11:mVMeZ4rl 直線じゃなくて線分だぞ : デフォルトの名無しさん [sage] 2019/01/27(日) 06:46:02.03:z0hosMYm javascript(es2018 regexネームドグループのため) const atxMatcher = line => line.trim().match(/^(?<directive>\S*)[ \t]+(?<contents>.*)/) const atxRules = [{ name: 'HnTag', regex: /^#{1,6}/, process: (hnDirective, hnContents) => { const hnEl = document.createElement('h'+ hnDirective.length) hnEl.textContent = hnContents return hnEl.outerHTML } }] const makeHtml = line => { const atxMatch = atxMatcher(line) if (!atxMatch) return line const {directive, contents} = atxMatch.groups let tag for (const rule of atxRules) { const directiveMatch = directive.match(rule.regex) if (directiveMatch) { tag = rule.process(directiveMatch[0], contents) break } } return tag ? tag : line } `# aaa ##\tbbb ###### \t ccc ################ ddd `.trim().split`\n`.map(makeHtml).join`` 結果: <h1>aaa</h1><h2>bbb</h2><h6>ccc</h6><h6>ddd</h6> : デフォルトの名無しさん [sage] 2019/01/27(日) 08:20:11.42:rwuNPA7J 線分ですよ : デフォルトの名無しさん [sage] 2019/01/27(日) 11:17:31.03:/cT7Kgd3 > return (abac * abad < 0 && cdca * cdcb < 0); return (abac * abad <= 0 && cdca * cdcb <= 0); 端点も含まんとあかんのとちゃう? : デフォルトの名無しさん [sage] 2019/01/27(日) 12:22:09.16:rwuNPA7J 重なりの定義によるかも 接しているのは重なりなしとしました : デフォルトの名無しさん [sage] 2019/01/27(日) 12:42:45.94:rwuNPA7J と思ったけど=ありのが正解でした : デフォルトの名無しさん [] 2019/01/27(日) 13:15:46.24:4tSdie01 お題 半径が整数の3つの円ある。 どの円も他の2つの円に外接している。 3つの円の中心点を結んでできる 三角形がピタゴラスの三角形に なる場合の3つの円の半径を 100未満についてすべて求める。 例えば3つの円の半径が1,2,3の時 辺の長さが3,4,5のピタゴラスの 三角形ができる。 : デフォルトの名無しさん [sage] 2019/01/27(日) 13:54:53.07:wgzaqL4l C++ ttp://https://ideone.com/TvwEx3 : デフォルトの名無しさん [sage] 2019/01/27(日) 14:02:09.42:/cT7Kgd3 Java ttp://https://ideone.com/vHvOJu : デフォルトの名無しさん [sage] 2019/01/27(日) 14:08:22.33:u288xi28 python3 ttp://https://ideone.com/PPyoFC : デフォルトの名無しさん [sage] 2019/01/27(日) 14:21:11.01:/cT7Kgd3 しまった…半径100未満なのに100まで調べてるw > r(20, 30, 100) = p(50, 120, 130) が余分やww Java 修正しました ttp://https://ideone.com/BkN6Ls : デフォルトの名無しさん [sage] 2019/01/27(日) 17:44:27.67:rwuNPA7J =の追加で要件をクリアしたと思ってましたが、対象が線分から直線に変わってました 端点については、以下のコードの呼び出しが4つ必要になります int abap = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x); if (abap == 0 && (p.x >= min(a.x, b.x) && p.x <= max(a.x, b.x)) && (p.y >= min(a.y, b.y) && p.y <= max(a.y, b.y))) { return 1; } return 0; : デフォルトの名無しさん [sage] 2019/01/27(日) 18:36:00.36:rE8NR22a Ruby 2.5.0 def kotae(max) (1..max).each_with_object([]) do |ra, ary| x, y = max - ra, 2 * ra**2 1.step(Integer.sqrt(x), 2) do |n| next if x * n**2 < y rx = ra + n**2 m, r = (ra + rx).divmod(n) ry = ra * m / n next if m.even? || r != 0 || m.gcd(n) != 1 pcpy = [ra, rx, ry].sort ary.push(*(1..max / pcpy[2]).map{|i| pcpy.map{|e| e * i}}) end end end pys = kotae(100 - 1) p pys.size # => 82 p pys # => [[1, 2, 3], [2, 3, 10], [2, 4, 6], # 中略 # [33, 66, 99], [35, 84, 85], [36, 84, 90]] : デフォルトの名無しさん [sage] 2019/01/27(日) 18:48:49.63:z0hosMYm javascript ttp://https://ideone.com/S1PkhD : デフォルトの名無しさん [sage] 2019/01/27(日) 21:02:27.16:u288xi28 python3 ax+by=c (d<x<e) px+qy=r (s<x<t) とする import numpy as np co = np.array([[a,b],[p,q]]) in = np.array([c,r]) ans = np.linalg.solve(co,in) print(d<ans[0]<e and s<ans[0]<t) 本当は直線が平行なときも調べないといけないが略 : デフォルトの名無しさん [sage] 2019/01/28(月) 02:42:20.01:Ht+H3Zdt こちらで検証したパターンです line ab = {{0, 0}, {100, 0}}; line cd1 = {{0, 0}, {100, 0}}; // 重なりあり line cd2 = {{1, 0}, {100, 0}}; // 重なりあり line cd3 = {{0, 0}, {99, 0}}; // 重なりあり line cd4 = {{-1, 0}, {100, 0}}; // 重なりあり line cd5 = {{0, 0}, {101, 0}}; // 重なりあり line cd6 = {{-1, 0}, {99, 0}}; // 重なりあり line cd7 = {{1, 0}, {101, 0}}; // 重なりあり line cd8 = {{-100, 0}, {0, 0}}; // 重なりあり line cd9 = {{100, 0}, {200, 0}}; // 重なりあり line cd10 = {{-100, 0}, {-1, 0}}; // 重なりなし line cd11 = {{101, 0}, {200, 0}}; // 重なりなし line cd12 = {{0, -100}, {0, -1}}; // 重なりなし line cd13 = {{0, -100}, {0, 0}}; // 重なりあり line cd14 = {{0, -100}, {0, 1}}; // 重なりあり : デフォルトの名無しさん [sage] 2019/01/28(月) 19:06:17.59:ZiBPaW1B 2直線を (x,y)=(x1,y1)+t(x2*x1,y2*y1) (x,y)=(x3,y3)+s(x4*x3,y4*y3) としたときt、sが0以上1以下の条件で解を持つことであろう。 : デフォルトの名無しさん [] 2019/01/28(月) 20:30:57.09:BBM43iQf の改良版。 product [(n - (r - 1))..n]はそのままn P rにもなる。 p n r = product [(n - (r - 1))..n] Haskell c'' n r = product [(n - (r - 1))..n] `div` product [1..r] Python def fact(n): a = 1 i = 1 while i <= n: a *= i i += 1 return a def p(n,r): a = 1 i = n - (r - 1) while i <= n: a *= i i += 1 return a def c(n,r): return (p(n,r) // fact(r)) : デフォルトの名無しさん [sage] 2019/01/30(水) 16:02:43.18:WqNbA033 お題 古のスタートレックゲームを作る : デフォルトの名無しさん [] 2019/01/30(水) 16:19:17.11:gOIe9eSU そのゲームがどんなものだったのか詳細が書いてある所はある? 昔々 Apple ][ でテキストのやつを人がやってる所は見たことあるのだが細かいルールがどんなんだったか忘れた。 確かワープして移動してってクリンゴンが撃ってくるとかクリンゴンに向けて撃つだとかそんなのを繰り返すんだよな? : デフォルトの名無しさん [] 2019/01/30(水) 19:13:41.13:32wJF+eS RFOーBASIC TEXT.INPUT S$,"","チェス番を入力してください。" PRINT S$ END : デフォルトの名無しさん [sage] 2019/01/30(水) 21:23:13.66:zHXVmep5 この辺りを参考にすればいいかと ttp://https://ja.m.wikipedia.org/wiki/ スタートレック_(マイコンゲーム)
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。