2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

プログラミングのお題スレ Part12

1 :デフォルトの名無しさん:2018/09/28(金) 10:09:07.13 ID:phwOkayR.net
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

前スレ
プログラミングのお題スレ Part10
https://mevius.5ch.net/test/read.cgi/tech/1514772904/

プログラミングのお題スレ Part11
https://mevius.5ch.net/test/read.cgi/tech/1524570314/

2 :デフォルトの名無しさん:2018/09/28(金) 10:41:53.02 ID:Trt/L8Tp.net
console.log('>>%d乙', 1);

3 :デフォルトの名無しさん:2018/09/28(金) 10:55:48.49 ID:Xb8eTiN0.net
3つの値の最小値を調べるには2回比較をしなくてはならないことを証明せよ

4 :デフォルトの名無しさん:2018/09/28(金) 12:28:47.83 ID:6mi1IA73.net
やだ

5 :デフォルトの名無しさん:2018/09/28(金) 13:55:38.90 ID:jm6QTuW3.net
>>3
3つの値のうちの最小値が分かった時の情報量はlog3
1回の比較によって得られる情報量はlog2
2回の比較で2log2=log4
log2<log3<log4なので最低2回の比較をしなければ最小値を知る事はできない

6 :デフォルトの名無しさん:2018/09/28(金) 14:20:38.29 ID:25C/+Q0q.net
>>3
回数の定義による
ハードウェアでパラにやれば1回だと言い張ることもできるし

7 :デフォルトの名無しさん:2018/09/28(金) 14:26:10.16 ID:6mi1IA73.net
ここは数学のお題を解くスレではなくプログラミングのお題スレなので証明せよというお題ならば証明をするプログラムを作れという意味になる。
決して人間が頭で考えて証明してはならない。

8 :デフォルトの名無しさん:2018/09/28(金) 14:46:03.56 ID:jm6QTuW3.net
3つの数単体同士の比較だけじゃなくて、a+bとcとかa^cとb+cとか無限に考えられるから有限時間で証明するのは無理では?

9 :デフォルトの名無しさん:2018/09/28(金) 21:22:39.80 ID:CwsEryp/.net
ID:jm6QTuW3

10 :デフォルトの名無しさん:2018/09/28(金) 22:47:33.75 ID:21310r5m.net
[a, b, c].min

11 :デフォルトの名無しさん:2018/09/28(金) 23:21:12.89 ID:I0zPpFv8.net
>>8
値と言ってるのにどこから数式が出てくるんだろう…

12 :デフォルトの名無しさん:2018/09/28(金) 23:31:28.87 ID:Trt/L8Tp.net
例えばR^3の関数f(x, y, z)で
xが最小の時負、xが最小でなくyが最小の時0、xかyが最小でなくzが最小の時正
になるC^∞級の関数は存在するのでこの関数を使えば比較は1回で済む

13 :デフォルトの名無しさん:2018/09/29(土) 00:17:28.49 ID:mZMDBHA7.net
>>12
例えばどんな関数?

14 :デフォルトの名無しさん:2018/09/29(土) 01:00:25.54 ID:SXeyKQEb.net
比較って値そのものの大小の比較ってとだろ

15 :デフォルトの名無しさん:2018/09/29(土) 01:06:03.17 ID:IuTgmxg/.net
比較というのは差をみつけることだからな
ココでの差は引き算の差の意味ではない、当然

数字を引き算して差を求めることもできる、当然

16 :デフォルトの名無しさん:2018/09/29(土) 01:15:28.45 ID:SXeyKQEb.net
>>3が言ってる比較って値そのものの差による比較ってことだろ

ってことな
わかった?

17 :デフォルトの名無しさん:2018/10/01(月) 20:03:33.29 ID:IziOBEHB.net
お題: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

18 :デフォルトの名無しさん:2018/10/01(月) 20:21:00.27 ID:XiA3uZUZ.net
> nを連続するいくつかの正整数の和として表す表し方の総数

15は7+8と4+5+6と1+2+3+4+5の3通りの表し方があって
その総数f(15)が4ってどういうこと?

19 :デフォルトの名無しさん:2018/10/01(月) 20:26:01.73 ID:8OIwu5Mv.net
>>18
自身も含まれるんじゃない?

20 :デフォルトの名無しさん:2018/10/01(月) 21:52:20.39 ID:RJeKuxhD.net
>>17 Java
https://ideone.com/FqcPpb
適当に作ったが考え方を変えないとideone時間が足りない

21 :デフォルトの名無しさん:2018/10/01(月) 22:05:00.23 ID:88z5+fOs.net
>>17
>連続するいくつかの正整数の和として表す表し方の総数

http://izumi-math.jp/sanae/MathTopic/renzokuwa/renzokuwa.htm
>1以外の奇数の約数と同じだけある

ttps://www.eikoh-seminar.com/echtas/blog/2015/10/post-224.html
>1以外の奇数の約数を何個持っているか

22 :デフォルトの名無しさん:2018/10/01(月) 23:56:46.25 ID:RJeKuxhD.net
>>17 Java
https://ideone.com/z2q0Sj

>>21の考え方を導入してみた

23 :デフォルトの名無しさん:2018/10/02(火) 20:12:32.93 ID:3l+a4b56.net
>>17 Java
https://ideone.com/m7oieG
BitSetなんて使わず普通に再帰使ったほうが早かった…

24 :デフォルトの名無しさん:2018/10/04(木) 17:48:26.02 ID:WD/5XFit.net
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

25 :デフォルトの名無しさん:2018/10/04(木) 18:15:15.90 ID:rW/Q6M2G.net
やはり10/1と10/8は平日だった

26 :デフォルトの名無しさん:2018/10/04(木) 18:17:14.17 ID:THaWokSR.net
日本語でおk

27 :デフォルトの名無しさん:2018/10/04(木) 18:18:57.90 ID:GgsL2+/f.net
勤怠記録を整形したいです と正直に言えば話が早いのに

28 :デフォルトの名無しさん:2018/10/04(木) 19:56:11.98 ID:WD/5XFit.net
>>27
そうなんですけど、VBAで会社にソースはあるんですけど、他の言語でも見たいんです

29 :デフォルトの名無しさん:2018/10/04(木) 21:21:03.44 ID:lLtqL4D1g
>>24
Python3
https://paiza.io/projects/c8Zd2-RCTSMuQiRIweXGYg

30 :デフォルトの名無しさん:2018/10/04(木) 21:05:04.35 ID:THaWokSR.net
平日って設定要る?
文字列 "YYYY/MM/DD HH:MM:SS" をいろんなフォーマットに変換するだけの問題じゃ駄目?
なんで一旦 echo するの?
責めてるんじゃなくて単純な疑問ね

31 :デフォルトの名無しさん:2018/10/04(木) 22:21:43.46 ID:pTnAHI9j.net
>>24 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);
}
}

32 :デフォルトの名無しさん:2018/10/04(木) 22:45:58.84 ID:yblvOSiR.net
>>30
平日って設定の理由としては、問題を少し複雑にしたかったから、あえて入れてみた
まあその制限が問題を難しくしてるのかって話もあるけど
文字列を色々なフォーマットにするでもいいけど、日本語でおkとか入力例とか出力例が自分でも適当過ぎた気がするので、また今度の機会に‥

>>31
C++は好きな言語だ
今度の連休で遊ばせてもらいます

33 :デフォルトの名無しさん:2018/10/04(木) 22:49:59.54 ID:9/syaOEb.net
そう言えば寝てたら未来へ行っちゃうってのは、Islandにちょっと似てる。

34 :デフォルトの名無しさん:2018/10/04(木) 22:50:28.48 ID:9/syaOEb.net
ごめん。誤爆。

35 :デフォルトの名無しさん:2018/10/05(金) 00:59:15.29 ID:x9IT1j0q.net
>>24
kotlin
https://paiza.io/projects/exHqCjTWt7PPhZheEMwucw
ほとんど何も考えずただ入力して出力しているだけ。

36 :デフォルトの名無しさん:2018/10/05(金) 07:17:46.24 ID:wqnG0hHC.net
春分の日と秋分の日はその前の年に気象庁だかどっかから指定される休日だから任意の時刻に対して平日判定を行うのは不可能

37 :デフォルトの名無しさん:2018/10/05(金) 08:06:04.84 ID:f0hsTKrn.net
まず問題文をよく読めって学校で教わらなかったのか?

38 :デフォルトの名無しさん:2018/10/05(金) 09:07:05.89 ID:wqnG0hHC.net
ああ10月限定かすまんな
それでも無駄な情報が多くて何をさせたい問題なのかやっぱりわからんわ

39 :デフォルトの名無しさん:2018/10/05(金) 09:48:23.51 ID:ExR6m3Ew.net
お題
1から連続する自然数の並びで
最初の a個の総和と
それに続くb個の総和が
等しくなるものを
好きなだけ求めるち

40 :デフォルトの名無しさん:2018/10/05(金) 10:50:56.93 ID:wqnG0hHC.net
>>39
(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

41 :デフォルトの名無しさん:2018/10/05(金) 14:58:28.47 ID:mgzjyvv8.net
>>35
koltin全く知らないけど、あとで読んでみます!

42 :デフォルトの名無しさん:2018/10/05(金) 20:22:47.58 ID:3qR/q5rp.net
>>39
C++
https://ideone.com/PLj4M9

Wolfram先生によると一般項があるらしい
http://www.wolframalpha.com/input/?i=2a(a%2B1)%3D(a%2Bb)(a%2Bb%2B1)+and+a%3E%3D0+and+b%3E%3D0

43 :デフォルトの名無しさん:2018/10/06(土) 10:59:33.32 ID:MgCaJaM3.net
半角スペース区切りで数字が入力されるのでソートして出力しなさい
いろんなアルゴリズムでやってみよう

-*- 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 * ' '

44 :デフォルトの名無しさん:2018/10/06(土) 13:39:49.65 ID:J8Y2BFN6.net
perl -ne '@d=split;print join(" ",sort {$a <=> $b} @d)."\n"'

無念無想のままたった今打った。1回も試していない。

45 :デフォルトの名無しさん:2018/10/06(土) 21:20:29.96 ID:evMRo/Iv.net
何かと思えば円周率か
要約気付いた

46 :デフォルトの名無しさん:2018/10/06(土) 22:11:52.69 ID:xFDNl+om.net
>>43 GNU Smalltalk スリープソート

https://ideone.com/BseQtg

47 :デフォルトの名無しさん:2018/10/06(土) 22:49:39.54 ID:MgCaJaM3.net
>>46
なんだこれw 4ch発祥かぁ。面白いね

48 :デフォルトの名無しさん:2018/10/07(日) 00:58:45.52 ID:KvcjzmFM.net
>>24
A君は平日以外学校に行かんのだろ?
なら曜日なんぞ気にせず入力された登下校時刻を単に変換するだけになるような

49 :デフォルトの名無しさん:2018/10/07(日) 07:50:57.08 ID:VJ+UDRYt.net
アスペか?アスペにはこのスレはたぶん無理

↑これの読解もままならないだろうが(苦笑

50 :デフォルトの名無しさん:2018/10/07(日) 13:41:58.37 ID:9vVPTzNb.net
>>48
そうだね
さらに 10/01だけの入力から 10/02が出力されるところも謎だ

51 :デフォルトの名無しさん:2018/10/07(日) 18:04:09.18 ID:t8TfnMHv.net
お題
現在の時刻をスウォッチ・インターネットタイムで表示する

@042

52 :デフォルトの名無しさん:2018/10/07(日) 19:17:11.77 ID:MD9q6Ezo.net
>>51 Ruby UTC基準で
d=24*60*60;$><<'@%f'%((Time.now.to_f%d)*1e3/d)
#=> @426.818338

53 :デフォルトの名無しさん:2018/10/07(日) 21:21:58.39 ID:T4GR84FI.net
ビール標準時が基準点でないものはスウォッチ・インターネットタイムではない

54 :デフォルトの名無しさん:2018/10/07(日) 21:30:25.37 ID:MD9q6Ezo.net
>>53
d=24*60*60;$><<'@%f'%(((Time.now.to_f-60*60)%d)*1e3/d)

55 :デフォルトの名無しさん:2018/10/08(月) 02:11:26.03 ID:tKqgyITq.net
perl -e '$s=86400;$n=1000*((time()+3600)%$s)/$s;printf "@%d\n",$n'

今実行するとこう出る。

@757

56 :デフォルトの名無しさん:2018/10/08(月) 16:16:40.26 ID:SHTmPUE+.net
https://exoplanetarchive.ipac.caltech.edu/docs/transit_algorithms.html

まずこのサイトを読んで日時(UTC基準)からJDを求めるプログラムを作りなさい
逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい

このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない

プログラムの結果が正しくなるように修正し、
このサイトのどこに誤記があるかその箇所を指摘しなさい

57 :デフォルトの名無しさん:2018/10/08(月) 16:19:35.99 ID:SHTmPUE+.net
>>56訂正

(正)逆にJDから日時(UTC基準)を求めるプログラムも作りなさい
(誤)逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい

58 :デフォルトの名無しさん:2018/10/08(月) 20:56:19.15 ID:P7JfEPgv.net
>>56 Ruby
https://ideone.com/SKS4yj

59 :デフォルトの名無しさん:2018/10/08(月) 22:00:20.72 ID:c9HgNpeF.net
>>58
(365.25*dy).to_i とかは 1461*dy/4 にしないとまずい

60 :デフォルトの名無しさん:2018/10/08(月) 22:51:07.00 ID:P7JfEPgv.net
>>59
365.25 は 101101101.01(2) だから誤差の心配は無いよね?

(1..3000).each{|n| p n if (365.25*n).to_i != 1461*n/4 }
とかやってみて

61 :デフォルトの名無しさん:2018/10/08(月) 23:14:43.42 ID:c9HgNpeF.net
>>60
それは良いとしても ( (c-122.1)/365.25 ).to_i の類の表現が他の個所にも複数あり
この内のどれかが
p (5.151/1.717).to_i #=> 2
のようにならないとはコードをみただけでは明確ではなく
剰えrubyのFloat classの精度は実装依存であるためこの様な処理はすべきではない

62 :デフォルトの名無しさん:2018/10/08(月) 23:58:05.73 ID:5rk01rQ6.net

ruby って IEEE 754 に準拠してないの?
信じ難いなそれ
使い物にならないじゃん

63 :デフォルトの名無しさん:2018/10/09(火) 00:09:36.06 ID:lL60bjnv.net
IEEE754関係ないやろ
Cのdoubleも環境依存やで

64 :デフォルトの名無しさん:2018/10/09(火) 02:53:53.02 ID:z616RbAo.net
いや関係なかったら困るだろ
バグってんだか仕様だかわからなくなるぞ

65 :デフォルトの名無しさん:2018/10/09(火) 07:49:23.39 ID:G0ViTg21.net
関係ないってそういう意味ではないのでは?
>>62の指摘することとIEEE 754は関係ないってだけで。
例えば32bitか64bitでdouble型の精度が違うなんて別に珍しいことではないと思うんですけど。

66 :デフォルトの名無しさん:2018/10/09(火) 19:02:39.94 ID:jSAcVkU7.net
> 32bitか64bitでdouble型の

ん? 32bitのdoubleなんてありえるの?
IEEE 754以外で倍制度を決めてる何かがあるの?

67 :デフォルトの名無しさん:2018/10/09(火) 21:21:14.72 ID:7Krlta4j.net
>>61
たかだか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ほどあればいいわけですね。
# こんな定数のままだとコンパイラが最適化してしまいますけどね

組み込み用途などによっては考慮すべきかもしれないけれど、
最初のお題(>>56 )ってそういう意図があったのでしょうか?
>このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない
これは特定の環境に限られたものを指していたのかな?

68 :デフォルトの名無しさん:2018/10/09(火) 21:40:48.90 ID:BHyo+myF.net
精度的に問題ないって理解してれば良いのでは
よく理解してない人が小数点使う必要ない場面で使って事故って何も分かりませんみたいな事あるし
コンシューマゲームなんかだとシビアなんで、癖みたいにしておかないとハマってしまうけど

69 :デフォルトの名無しさん:2018/10/09(火) 22:33:03.53 ID:uKgwXIAC.net
>>56はココからが本当の本題

@ >>59のコードでの誤記の指摘は概ね正解 ただ>>59のコードの修正だけでは紀元前に対応していない 紀元前が対応するように修正しなさい
A @のプログラムの通日を整数の通ナノ秒にして、ナノ秒までの時刻を正確に相互変換できるようにしなさい
B Aにうるう秒をいれて正確に相互変換できるようにしなさい(制約で問題が発生する場合、問題が発生する時刻を書きなさい)
  参考URL:http://maia.usno.navy.mil/ser7/tai-utc.dat

Bは普通にやったら結構めんどい課題と考えられる
力技でやるなら暇人以外にはオススメしない(力技でやらないほうがいいと一応警告しておいたからな)
コードの一部を出力するコードをサクッと作るぐらいの力量がなければ
きっとサクッとはできないしサクッと結果の評価もできないと考えられる

70 :デフォルトの名無しさん:2018/10/09(火) 22:35:06.29 ID:uKgwXIAC.net
訂正
(正)>>58
(誤)>>59

71 :デフォルトの名無しさん:2018/10/09(火) 22:56:04.77 ID:uKgwXIAC.net
https://ideone.com/fF1kvl
Bで使えるデータは用意しておいた
気が向いたヤツはチャレンジしなさい

72 :デフォルトの名無しさん:2018/10/09(火) 23:20:13.38 ID:UrO6v+ga.net
>>69-71 はサマータイムスレで暴論吐いてた奴じゃない?

73 :デフォルトの名無しさん:2018/10/10(水) 00:03:10.45 ID:uHP11E7s.net
C言語スレとかのいろいろな所に出没してる半角先生だ
どこでも相手にされなくなったから出題しに来た

74 :デフォルトの名無しさん:2018/10/10(水) 09:42:44.92 ID:hOT3iUsl.net
サマータイムスレでの暴論って何なんだろう?

まさかのサマータイム賛成なんて奴だったら許せんな。

75 :デフォルトの名無しさん:2018/10/10(水) 16:39:18.23 ID:slDdF7J+.net
お題
倍精度実数で整数部分が正確に表現できる最大値を求める

76 :デフォルトの名無しさん:2018/10/10(水) 17:03:11.31 ID:8BTNYbZT.net
浮動小数点実数型と言えど最大要素に近い
部分は、整数×2^整数という形の整数也

77 :デフォルトの名無しさん:2018/10/10(水) 17:03:47.89 ID:8BTNYbZT.net
整数×2^自然数
だた

78 :デフォルトの名無しさん:2018/10/10(水) 17:41:41.04 ID:8BTNYbZT.net
(2^m-1)×2^n
という形

79 :デフォルトの名無しさん:2018/10/10(水) 18:05:44.00 ID:TfVezTBt.net
区間を求めるなら仮数部だけで収まる最大値だけど、
とある数の整数部が正しく表現されているだけなら仮数部も込みで double の最大値が答え

それを std::numeric_limits<double>max() や DBL_MAX を使わずに計算せよ、ということか

80 :デフォルトの名無しさん:2018/10/10(水) 19:38:40.27 ID:TfVezTBt.net
>>75を2分探索で計算で出すコード書いてて ideone のコンパイラのバグ見つけた気がする

https://ideone.com/D3ip5M
if 文の条件式の値が1なのに実行されない
find_max<char> とか int32_t で起きる

何か間違ってるかな

81 :デフォルトの名無しさん:2018/10/10(水) 20:37:17.47 ID:GOApHyvI.net
符号付き整数オーバーフロー(未定義動作)のせいで
変な最適化でもかかってるんじゃね?

82 :デフォルトの名無しさん:2018/10/10(水) 21:07:51.69 ID:3iBo9D9z.net
>>69
通常 JDは UTCを元にするので閏秒は考慮しないと思いますよ、
天文計算などする場合は必要に応じて UT1とかに変換しているのじゃないかと?

83 :デフォルトの名無しさん:2018/10/10(水) 22:22:14.63 ID:TfVezTBt.net
>>81
なるほど。
オーバフローが未定義動作だとすると符号付整数の最大値を求めるのは難しそうだな。

84 :デフォルトの名無しさん:2018/10/11(木) 00:30:47.35 ID:p15CvoFg.net
ものすごい頭悪いこといってるわ。。。

  UTCは う る う 秒 入 れ た 時 刻 のことだぞ

マジでなんでこんな頭悪いの

天文でつかわれるユリウス日なんかはアホがいうとおり固定
1光年も固定でもないとヤバイからな
1光年は光が1ユリウス年(365.25日)進む距離になる

そもそもオレの課題ではそんなことを問題になんかしてないからな
課題どおりにやればいい

85 :デフォルトの名無しさん:2018/10/11(木) 00:34:27.93 ID:p15CvoFg.net
低学歴知恵遅れが知ったぶりしてハジかく典型的な例といっていい
低学歴知恵遅れはいちいち自分が低学歴知恵遅れですと自白するからな

86 :デフォルトの名無しさん:2018/10/11(木) 01:18:58.62 ID:ZbBeURnP.net
おまえまたくっさいくっさい自演しとんのか

87 :デフォルトの名無しさん:2018/10/11(木) 12:46:49.51 ID:ZOnVTpMr.net
誰からも相手にされなくなったか

88 :デフォルトの名無しさん:2018/10/11(木) 13:22:48.89 ID:yY2EC70D.net
相手にされなくなったんで問題だせば自動的に相手にされると思い込んでいる
その辺りが半角先生の思考の限界

89 :デフォルトの名無しさん:2018/10/11(木) 14:46:25.14 ID:MYvNBgY5.net
ここが適切なのかわかりませんが、知恵を頂けたら幸いです。
当方CGクリエーターで、プログラミングの知識は殆どありません。
そこで質問なのですが、
Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、
Bのワールド位置を維持して、BをAのローカル座標位置へ移動させるには
どのような行列式になるでしょうか?
ネットで座標変換とか色々調べてみましたが、子のワールド位置を維持した状態で
親に該当するローカル座標へ移動させる方法がわかりませんでした。

本来の目的としては、
CGアニメーションソフトのコンストレイント機能にペアレントがありますが、
それを行列式(ノード)で行いたいのです。
(コンストレインのペアレントとは、
時間軸上の任意の位置で親子関係の接続や解除を行うことが出来る機能です。
その接続/解除時には、子は現在のワールド位置を維持します。

90 :デフォルトの名無しさん:2018/10/11(木) 15:04:14.07 ID:3Bdkvxy9.net
スレ違い

「3d 行列」で検索!

91 :デフォルトの名無しさん:2018/10/11(木) 15:26:21.10 ID:ZOnVTpMr.net
>>89
スレのルールに則れば誰か答えてくれるかもね

92 :デフォルトの名無しさん:2018/10/11(木) 16:45:05.30 ID:NcfxmDj4.net
>>89
>Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、

(1,2,3) を (-1,-2,-3) からの相対値で表すということなら
(1,2,3) 引くことの (-1,-2,-3) イコール (2,4,6)

93 :デフォルトの名無しさん:2018/10/11(木) 21:49:13.39 ID:anEb94RG.net
>>69 >B Aにうるう秒をいれて正確に相互変換できるようにしなさい
>>84 >UTCは う る う 秒 入 れ た 時 刻 のことだぞ
うるう秒を入れるでなく、外すが正解ですね。すでに UTCには閏秒が入っていますから。
UTC(協定世界時)は TAI(国際原子時)を元に閏秒で補正して UT1(世界時)に合わせています。
7:00:00(UTC)の一日先の時間が24h+-1sec(閏秒)でも時刻は7:00:00(UTC)となるわけです。
よって JDに24hを足すと翌日になり JD/24h%7で曜日が分かります。
未来の日付も計算可能ですが、閏秒を入れないTAI(国際原子時)では地球の自転次第で変化します。

>天文でつかわれるユリウス日なんかはアホがいうとおり固定
逆です、天文計算で使うような時間は UT(世界時)を基準にしています。
それは天体の運動方程式を解くために基準の時刻からの正確な時間が必要だからです。

94 :デフォルトの名無しさん:2018/10/11(木) 23:02:27.87 ID:p15CvoFg.net
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

コレでオレの課題ができないなら
人間やめたほうがいい

95 :デフォルトの名無しさん:2018/10/12(金) 01:38:38.44 ID:xbwLlD7o.net
>>75
倍精度って、これでいいの?
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 になるわけでプログラムを作る必要性がないわけだが。

それとも仮数部が何ビットか分からない倍精度実数のビット数を求めるプログラムを作れってこと?

96 :デフォルトの名無しさん:2018/10/12(金) 02:02:42.62 ID:ZYTXH3K/.net
プログラミングのお題
「10以下の素数の和を求めよ」

答え
「17。コード書くまでもないんだがこれでいいのか?」

これはおかしいだろう

97 :デフォルトの名無しさん:2018/10/12(金) 02:23:49.18 ID:I/tzu8NI.net
>>96 ruby
n = 10
Prime.reduce(0){|s, i|break(s) if i > n; s + i}

98 :デフォルトの名無しさん:2018/10/12(金) 02:35:54.36 ID:xbwLlD7o.net
え?じゃ、こんな感じ?

perl -e 'for($n=1;(2**$n)!=(2**$n+1);$n++){} printf "%d, %.0f\n", $n, 2 ** $n;'

動かすとこう出るが。

53, 9007199254740992

99 :デフォルトの名無しさん:2018/10/12(金) 06:06:04.48 ID:j3qUjmca.net
>>96 Pharo/Squeak Smalltalk

(Integer primesUpTo: 10) sum

100 :デフォルトの名無しさん:2018/10/12(金) 07:40:50.69 ID:GdhRssFx.net
>>96
ruby -rPrime 'p Prime.first(10).sum'
#=> 17

101 :デフォルトの名無しさん:2018/10/12(金) 09:39:43.72 ID:1UpgDbu2.net
first(10)って普通は最初の10個を列挙するもんだがrubyは違うのか…
名前重要ってわりにセンスないな

102 :デフォルトの名無しさん:2018/10/12(金) 10:33:46.63 ID:oIm8hJ6E.net
じゃあちなみにこの関数名は何ならいいんだ?
お前の考えを言ってみろよ
センスを判定してやるよ

103 :デフォルトの名無しさん:2018/10/12(金) 10:49:03.90 ID:6UbBSJp3.net
first(10)が10までってセンスは普通におかしいだろ
つーかrubyも最初の10個返すんだが…?

104 :デフォルトの名無しさん:2018/10/12(金) 13:22:40.26 ID:+EEi3z6C.net
誰も動作を疑わずに書かれたものを脳死で信じるいい例だな、 >>100 のは17にはならん

105 :デフォルトの名無しさん:2018/10/12(金) 13:50:43.62 ID:oIm8hJ6E.net
ruby/ruby: The Ruby Programming Language
ttps://github.com/ruby/ruby

そりゃそうだろ
スクリプト言語のソースコードは公開されてて誰でも読めるが
大抵のユーザーは書かれたものを脳死で信じるしかないだろ

それともお前は使うスクリプト言語のソースコードは全部精査してるのか?
コンパイラのソースコードまで熟読してるのか?

ンなモン、脳死で信じるしかねーだろ

106 :デフォルトの名無しさん:2018/10/12(金) 13:54:46.58 ID:VST6PShP.net
最近JavaとかC++とか少ないな
Javaは例の騒動があるから仕方ないとしてCとかC++はないんか

107 :デフォルトの名無しさん:2018/10/12(金) 16:36:53.91 ID:OhxorjMK.net
>>106
>>80はC++だね。

108 :デフォルトの名無しさん:2018/10/12(金) 18:59:19.35 ID:eR+rcBR9.net
>>96 ruby
require 'prime'
p Prime.take_while {|i| i < 10}.inject(:+)

109 :デフォルトの名無しさん:2018/10/12(金) 20:05:50.75 ID:oyAlSwuR.net
>>106
例の騒動って何

110 :デフォルトの名無しさん:2018/10/12(金) 20:13:31.37 ID:jorGy8Se.net
>>80
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

となるね

111 :デフォルトの名無しさん:2018/10/12(金) 21:22:44.25 ID:+EEi3z6C.net
ORACLEがお金取りますよってやつじゃない?

112 :デフォルトの名無しさん:2018/10/12(金) 21:27:58.87 ID:+EEi3z6C.net
なぜか言語自体のコード読む読まないの話になってるけど、これくらいのコードなら動かせばすぐにfirstが何してるか分かるじゃん、って思っただけだわ

113 :デフォルトの名無しさん:2018/10/13(土) 10:05:11.14 ID:m4emGyLz.net
お題
方程式 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 -> ?

114 :デフォルトの名無しさん:2018/10/13(土) 11:29:08.44 ID:4qDoRB+X.net
つまんない

115 :デフォルトの名無しさん:2018/10/13(土) 11:32:11.63 ID:QkDteBzw.net
>>113
n = 2の時
1/4 + 1/4 = 1/2
1/3 + 1/6 = 1/2
だけだから結果は2だよ
n=4の時より大きくなることはあり得ないし

116 :デフォルトの名無しさん:2018/10/13(土) 11:52:27.26 ID:QkDteBzw.net
ごめん。>>115は勘違い無視して

117 :デフォルトの名無しさん:2018/10/13(土) 17:46:23.51 ID:QtssFnIu.net
>>113 Java
https://ideone.com/Y57fPl

118 :デフォルトの名無しさん:2018/10/15(月) 17:32:39.82 ID:lmCCx0VP.net
回答一人で出題者からの返事がないとあってるかどうかわからないから困る

119 :デフォルトの名無しさん:2018/10/17(水) 11:31:35.00 ID:UkGf74ne.net
お題
[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を一様分布以外の分布から取ってくるとどうなる?

120 :デフォルトの名無しさん:2018/10/17(水) 12:32:44.20 ID:DKH+Jm9W.net
>>119
それはプログラミングで解くお題なのか?

121 :デフォルトの名無しさん:2018/10/17(水) 13:07:54.93 ID:OYXuI76a.net
>>120
シミュレーションしてみるのも面白いかなと

122 :デフォルトの名無しさん:2018/10/17(水) 13:50:50.88 ID:8efdFbKL.net
趣味で

123 :デフォルトの名無しさん:2018/10/17(水) 14:07:56.22 ID:4awkQadJ.net
これはひどい

124 :デフォルトの名無しさん:2018/10/17(水) 15:35:45.15 ID:5mPHIqhK.net
プログラミングで解くということに挑戦することから逃げるプログラマー

125 :デフォルトの名無しさん:2018/10/17(水) 15:55:41.32 ID:mC+TJhph.net
数学に逃げちゃ駄目だ。

126 :デフォルトの名無しさん:2018/10/17(水) 17:12:22.62 ID:DXXGfTNm.net
乱数全部同じパターンを引いてもその結果のみから分布を論じてかまわないというならそれでもいいがな

127 :デフォルトの名無しさん:2018/10/17(水) 17:34:51.31 ID:slnS35LM.net
ちょっとやってみた
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)
)

続く

128 :デフォルトの名無しさん:2018/10/17(水) 17:35:05.08 ID:IG2KKzqQ.net
>>119 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} "

129 :デフォルトの名無しさん:2018/10/17(水) 17:38:20.84 ID:cKcilnbV.net
>>119 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} "

130 :デフォルトの名無しさん:2018/10/17(水) 17:40:58.97 ID:wdgUzBYj.net
あ、誤連投&Jのにきスマン

131 :デフォルトの名無しさん:2018/10/17(水) 17:41:12.83 ID:slnS35LM.net
続き
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
https://i.imgur.com/QSKqVC6.jpg

一様分布っぽい

132 :デフォルトの名無しさん:2018/10/17(水) 17:43:54.06 ID:slnS35LM.net
だいぶ結果が違っててわろすw
>>128ソート忘れてないか?

133 :デフォルトの名無しさん:2018/10/17(水) 17:47:40.41 ID:slnS35LM.net
理屈で考えると乱数がどんな分布でも a、b の分布が同じならコレの結果は常に同じ分布か

134 :デフォルトの名無しさん:2018/10/17(水) 19:01:16.05 ID:wdgUzBYj.net
なんか書き込めん…

>>132

たしかに^^;

pairs := (random next: N) sort with: (random next: N) sort collect: [:a :b | {a. b}].

で同じ分布になった

135 :デフォルトの名無しさん:2018/10/17(水) 22:28:10.42 ID:9jVKFKz5.net
ハローワールドの次にやる問題ってなんだろう

136 :デフォルトの名無しさん:2018/10/17(水) 22:28:34.01 ID:Ny9Q/0jK.net
ハローワークへ行きなさい

137 :デフォルトの名無しさん:2018/10/17(水) 22:47:23.45 ID:ysrRFDeq.net
>>135
echoかfizz buzzでもやれば

138 : :2018/10/17(水) 23:45:01.56 ID:DyWl92+N.net
>>137
>echo


139 :デフォルトの名無しさん:2018/10/18(木) 09:27:49.01 ID:xtVP5nmJ.net
>>138
echoコマンドの実装ってことじゃない?
\0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。

140 :デフォルトの名無しさん:2018/10/18(木) 19:47:17.70 ID:3zhbamE0.net
136本人が出てきて答えなさい

141 :デフォルトの名無しさん:2018/10/18(木) 22:31:25.80 ID:qi6SRLg2.net
ハローワールドの次ぐらいだとすごろくとかじゃない

142 :デフォルトの名無しさん:2018/10/19(金) 16:49:17.22 ID:F1UCQFsO.net
お題
標準入力から入力したデータをそのまま標準出力人出力する

143 :デフォルトの名無しさん:2018/10/19(金) 17:05:33.84 ID:veK9KPY5.net
http://3dnchu.com/archives/tree-it/
このようなソフトはvisual studioで作るんですか?
なんの言語がいいか教えてください

144 :デフォルトの名無しさん:2018/10/19(金) 17:15:05.14 ID:gPrGaWTX.net
>>142
cat

145 :デフォルトの名無しさん:2018/10/19(金) 18:18:43.95 ID:rCjk/mnI.net
>>144 Brainfuck
,[.,]

146 :デフォルトの名無しさん:2018/10/19(金) 18:19:25.68 ID:rCjk/mnI.net
安価ミス >>144 -> >>142

147 :デフォルトの名無しさん:2018/10/19(金) 20:16:34.44 ID:qai0UNii.net
お題
マルチバイト文字だけ文字化けさせて出力

148 :デフォルトの名無しさん:2018/10/19(金) 20:39:51.48 ID:5dseSh/K.net
>>147 Python
https://ideone.com/sT2p2O

149 :デフォルトの名無しさん:2018/10/20(土) 03:08:59.15 ID:gD7ZVb6v.net
iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん

150 :デフォルトの名無しさん:2018/10/20(土) 05:27:36.15 ID:qwv4GmvH.net
>>147
Kotlin
https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw

入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。
つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。
化け方は2通りでサロゲートペアの文字は % になりその他は * になる。

151 :デフォルトの名無しさん:2018/10/20(土) 17:10:58.56 ID:hxCjYBWY.net
>>142 Io
File standardInput contents print

152 :デフォルトの名無しさん:2018/10/20(土) 17:46:57.83 ID:cv2X893a.net
お題: 超簡単なステートマシン
以下の3つのデータがランダムに入力される。
1: hi
2: wake up
3: sleep
1が入力された場合、状態がwake upであれば「hello」、状態がsleepであれば「zzz...」と出力せよ。
2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。

153 :デフォルトの名無しさん:2018/10/20(土) 18:05:02.67 ID:Nttc2RvP.net
>>152
つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね)

データは勝手に標準入力にするけど。
(リダイレクトでファイルからに出来るし)

154 :デフォルトの名無しさん:2018/10/20(土) 18:08:05.20 ID:Nttc2RvP.net
あれ、違うぞ?
hiが入力された時、「かつ」wake upだったら”hello”出力か。
んでsleepなら”zzz...”ね。
それ以外無視と。
了解。

155 :デフォルトの名無しさん:2018/10/20(土) 18:12:34.08 ID:Nttc2RvP.net
てか、1ー3の数字だけで良いわ。
状態の意味はわかったけど、状態の文字は要らんね。

156 :デフォルトの名無しさん:2018/10/20(土) 18:16:14.29 ID:xvv7H8Vz.net
それ以外をどう考慮すべきかは書かれてないから、
ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉

そんなことよりステートマシンなら初期状態は与えろよw

157 :デフォルトの名無しさん:2018/10/20(土) 18:28:45.80 ID:AUqXYm6F.net
>>152
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.")

158 :デフォルトの名無しさん:2018/10/20(土) 18:42:18.95 ID:Nttc2RvP.net
#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;

159 :デフォルトの名無しさん:2018/10/20(土) 18:43:23.41 ID:Nttc2RvP.net
case '2':
state = '2';
break;
case '3':
state = '3';
break;
default:
break;

160 :デフォルトの名無しさん:2018/10/20(土) 18:43:31.11 ID:Nttc2RvP.net
}
}
return 0;
}

バッファ 無い方がいいのかと思ってバッファ無し版。(押したら即時入力)
conio.hは環境依存だけど、どうせWinだろ。
stdio.hのgetcだったら、バッファがあるからEnter押さないとだけど最初の1文字が入る。

面倒臭かったからステータスは数字に直さず文字そのまま使った。

161 :デフォルトの名無しさん:2018/10/20(土) 20:20:44.01 ID:WvTfEY4N.net
お題
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) => {}

162 :デフォルトの名無しさん:2018/10/20(土) 21:46:37.40 ID:O4sbTglp.net
>>152
ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])"

163 :デフォルトの名無しさん:2018/10/21(日) 04:42:48.87 ID:sz/a4USN.net
>>152
Kotlin
https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw

初期状態は sleep にした。
wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。

164 :デフォルトの名無しさん:2018/10/21(日) 04:53:27.38 ID:sz/a4USN.net
>>152
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"}'

仕様は>>163と同じ。
1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。

165 :デフォルトの名無しさん:2018/10/21(日) 09:26:11.61 ID:3Rh2KUxU.net
>>152 java
https://ideone.com/fpKVdM

166 :デフォルトの名無しさん:2018/10/21(日) 09:40:05.59 ID:UVDgsDD7.net
>>152 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 "

https://ideone.com/vyCRfq

167 :デフォルトの名無しさん:2018/10/21(日) 11:09:36.22 ID:S2kctYlU.net
>>152
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

168 :デフォルトの名無しさん:2018/10/21(日) 18:51:44.61 ID:7SU77e8C.net
>>161
Python3
https://ideone.com/BBteSk
infは対応してないので1億とか適当な大きい値で代用

169 :デフォルトの名無しさん:2018/10/21(日) 22:29:32.21 ID:4ZLg1Jin.net
>>142 Lua
io.write(io.read("*a"))

170 :デフォルトの名無しさん:2018/10/22(月) 01:45:31.26 ID:mc31Kn/b.net
>>2
これおかしくね?

171 :デフォルトの名無しさん:2018/10/23(火) 19:00:32.44 ID:eWhef4/P.net
>>117-118
返答遅れてすみません
数値はあってるようです
私の稚拙なコードでよければ参考までに

Haskell
https://www.ideone.com/9Z0xOX

172 :デフォルトの名無しさん:2018/10/23(火) 21:37:05.53 ID:HCMpmlk6.net
お題
Excel列番号の数字表記とアルファベット表記を相互変換せよ

A => 1
AA => 27
ABC => ?
26 => Z
266379 => ?

173 :デフォルトの名無しさん:2018/10/23(火) 22:19:55.60 ID:kr01ah20.net
>>172
Part6の754ですでに通った道だった
https://peace.5ch.net/test/read.cgi/tech/1418278634/754

そしてその時の俺の回答はこれだ
http://ideone.com/SM0HXt

174 :デフォルトの名無しさん:2018/10/23(火) 22:19:56.82 ID:UJUp/CV/.net
>>172 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

175 :デフォルトの名無しさん:2018/10/23(火) 22:31:11.04 ID:fVBjYNqz.net
iか何かが無かったような?

176 :デフォルトの名無しさん:2018/10/23(火) 23:51:06.93 ID:H259Ae8g.net
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的な物なのかこんがらがる…

177 :デフォルトの名無しさん:2018/10/24(水) 00:17:51.17 ID:n2SwZ/Io.net
>>176
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) が答え.

178 :デフォルトの名無しさん:2018/10/24(水) 00:19:21.73 ID:kOQJNkO6.net
マジカルインクリメント!マジカルインクリメントじゃないか!!

179 :デフォルトの名無しさん:2018/10/25(木) 11:51:35.92 ID:3ObU9lli.net
>>172 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' "

180 :デフォルトの名無しさん:2018/10/25(木) 12:50:39.12 ID:hw/Q19JU.net
>>176
それ Z の時に失敗しない?

他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。

181 :デフォルトの名無しさん:2018/10/25(木) 16:24:37.58 ID:aKbYC4uC.net
>>172 python3
https://ideone.com/zOajDg
ここにソースを書いたらブロックされたからideoneで

182 :デフォルトの名無しさん:2018/10/25(木) 16:39:59.02 ID:wLNEFoo1.net
>>177
>Aは0扱いでよい。
>与えられた文字列を str にとして x = str[A-Zの26進数] に対して

それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな

183 :デフォルトの名無しさん:2018/10/25(木) 16:46:00.18 ID:9VVQwm/j.net
やっぱり36進数[0-9a-z]使った横着は出来ないのか…

184 :デフォルトの名無しさん:2018/10/25(木) 17:18:04.60 ID:BFrEhhQu.net
perlのbasecalcだとマジカルなことができる

185 :デフォルトの名無しさん:2018/10/25(木) 17:29:09.19 ID:/ssDOiD4.net
>>182
文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい

186 :デフォルトの名無しさん:2018/10/25(木) 17:46:06.11 ID:wLNEFoo1.net
デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ
以下J

26 #. _64 + a. i. 'ABC'
==> 731

26 #. _64 + a. i. 'ODAI'
==> 266379

エンコードはちょっと1行では説明しにくい

187 :デフォルトの名無しさん:2018/10/25(木) 17:52:55.69 ID:Toapoewp.net
27進だろ…

188 :デフォルトの名無しさん:2018/10/25(木) 17:53:10.85 ID:hw/Q19JU.net
>>183
もう一捻り必要なんだよ。
考えてくと何れわかる。

189 :デフォルトの名無しさん:2018/10/25(木) 18:17:57.30 ID:wLNEFoo1.net
>>187
下から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

190 :デフォルトの名無しさん:2018/10/25(木) 19:37:38.82 ID:gO/HWAcm.net
>>172
この問題を思い出した
http://riverplus.net/codeiq/DigitalTaboo.pdf

191 :デフォルトの名無しさん:2018/10/25(木) 20:05:21.59 ID:na0fZQbz.net
全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。

http://www.cjh.com.cn/
の画面左まんなか辺りの

三峡水? 25日 19?00分 174.64 -(入) 15200(出)

を自動で毎日夜21時に取得して

https://egg.5ch.net/test/read.cgi/river/1507607675/

に自動で書き込む方法はありますでしょうか?
長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、

192 :デフォルトの名無しさん:2018/10/25(木) 20:16:07.42 ID:na0fZQbz.net
>>191

http://www.cjh.com.cn/



http://nweb.cjh.com.cn/sssqold.html

からでもOKです。

193 :デフォルトの名無しさん:2018/10/25(木) 20:33:47.72 ID:TSZxWHJ/.net
sssqold.htmlのソース見たが読むほうは簡単そうだな
書き込む方はしらん

194 :デフォルトの名無しさん:2018/10/25(木) 20:33:50.34 ID:BSekExc/.net
スレタイ

195 :デフォルトの名無しさん:2018/10/25(木) 23:54:56.07 ID:Hzy8+5Se.net
あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ

196 :デフォルトの名無しさん:2018/10/25(木) 23:59:06.56 ID:9OC64j5F.net
>>191
2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、
powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね
スクリプトはこんな感じかね

$html= Invoke-WebRequest -UseBasicParsing 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]
}

197 :デフォルトの名無しさん:2018/10/26(金) 01:56:21.09 ID:zqmCYDLg.net
無駄に一行だな

198 :デフォルトの名無しさん:2018/10/26(金) 03:39:31.47 ID:c84xrxY5.net
>>172
(fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))

199 :デフォルトの名無しさん:2018/10/26(金) 19:50:36.71 ID:/kG4owY9.net
お題
ぷよぷよの連鎖数を求めよ。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

200 :デフォルトの名無しさん:2018/10/26(金) 20:45:47.09 ID:yqPKU+uE.net
>>196
おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!

201 :デフォルトの名無しさん:2018/10/26(金) 20:51:49.05 ID:8JGFizba.net
>>199
2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?

202 :デフォルトの名無しさん:2018/10/29(月) 19:22:44.11 ID:PHNS982/.net
>>172
Kotlin
https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ

入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。

203 :デフォルトの名無しさん:2018/10/30(火) 17:20:53.74 ID:xBpFVgTt.net
>>199 python3
https://ideone.com/DIFmAW
最適もへったくれもないゴリ押しですわ…

204 :デフォルトの名無しさん:2018/10/30(火) 21:09:38.22 ID:RM3bKAov.net
お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。

 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]

205 :デフォルトの名無しさん:2018/10/30(火) 22:21:08.83 ID:Mk80lxDb.net
>>204 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);

206 :デフォルトの名無しさん:2018/10/30(火) 22:51:09.23 ID:N8SwgYLQ.net
>>204
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))

207 :デフォルトの名無しさん:2018/10/30(火) 22:54:52.47 ID:N8SwgYLQ.net
うまく貼れなかった
https://ideone.com/2ch1r3

208 :デフォルトの名無しさん:2018/11/02(金) 11:25:03.96 ID:b7bQuZgR.net
>>204 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]') "

209 :デフォルトの名無しさん:2018/11/02(金) 23:41:59.56 ID:8MYT0pgk.net
三峡水? 02日 23?00分 174.53 -(入)14700(出)

210 :デフォルトの名無しさん:2018/11/03(土) 04:09:45.11 ID:vg8hCxXN.net
>>204
Kotlin
https://paiza.io/projects/Zb6Ey6FbQYsGjsi5GBK9lQ

折角日本語使えるんだからたまには使わないとな。

211 :デフォルトの名無しさん:2018/11/03(土) 08:08:00.00 ID:BMDI0yEn.net
>>172 rust
https://ideone.com/xaLIC6

>>204 rust
https://ideone.com/UxomHc

212 :デフォルトの名無しさん:2018/11/03(土) 23:34:36.36 ID:BMDI0yEn.net
>>172 c
https://ideone.com/W9eW0R

>>204 c
https://ideone.com/pL0QmX

213 :デフォルトの名無しさん:2018/11/04(日) 13:46:33.88 ID:pidkuN2F.net
>>204
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"]

214 :デフォルトの名無しさん:2018/11/04(日) 13:47:27.44 ID:pidkuN2F.net
結果が切れた。。。
改めて結果。

[[],[1],[2,3,4,5]]
[[3,4],[5],[6,7]]
[[6,7,8,9],[10],[]]

[executed "pager.hs"]

215 :デフォルトの名無しさん:2018/11/05(月) 17:57:48.99 ID:GRwYYoWB.net
お題
3つの自然数A,B,Cが与えられる。
初項A、第二項Bであるフィボナッチ数列に対してCがその数列に含まれるかを判定せよ。
含まれる場合は第何項であるかを返し、含まれない場合は偽を返すものとする。

216 :デフォルトの名無しさん:2018/11/05(月) 20:17:41.49 ID:0wNeh4D8.net
>>215 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)

217 :デフォルトの名無しさん:2018/11/05(月) 20:25:58.31 ID:0wNeh4D8.net
同じもの
ttps://ideone.com/Dff2U9

218 :デフォルトの名無しさん:2018/11/05(月) 21:15:45.04 ID:b01o/g5T.net
>>215 rust
https://ideone.com/8R5UmH

219 :デフォルトの名無しさん:2018/11/05(月) 23:33:04.48 ID:6d8cBeMO.net
>>215 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

220 :デフォルトの名無しさん:2018/11/06(火) 03:12:12.75 ID:BD76rR44.net
>>215
Kotlin
https://paiza.io/projects/aLPj37Gr548Ba0214az42Q

221 :デフォルトの名無しさん:2018/11/06(火) 07:54:03.24 ID:GFB90oOd.net
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;
}

222 :デフォルトの名無しさん:2018/11/06(火) 09:23:46.31 ID:jl2IXbjS.net
(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回出現することがあるが考慮した方が良いか?

223 :デフォルトの名無しさん:2018/11/06(火) 10:48:03.28 ID:VF9SVEaj.net
A,Bによっては無限ループになり得ないか?

224 :219:2018/11/06(火) 11:49:20.62 ID:13CfGTjW.net
そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。

225 :219:2018/11/06(火) 11:52:26.86 ID:13CfGTjW.net
した。見事にした。
足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。
今さら直す気は起きんが。

226 :デフォルトの名無しさん:2018/11/06(火) 11:52:29.61 ID:GFB90oOd.net
>>222
今まで投稿されてるコード見る限りは最初に見つけた時点で停止。

>>223
自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。

227 :デフォルトの名無しさん:2018/11/06(火) 12:34:42.11 ID:jAy4xbYh.net
>>215 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 "

228 :デフォルトの名無しさん:2018/11/06(火) 14:46:16.34 ID:GFB90oOd.net
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))

229 :デフォルトの名無しさん:2018/11/06(火) 18:51:28.38 ID:2YnZy0Ze.net
>>215 ruby
https://ideone.com/Q6aVfo

AとB足してゼロ問題に対しては
fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}}

230 :デフォルトの名無しさん:2018/11/06(火) 22:17:30.30 ID:Nv8RqtnA.net
お題
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

231 :デフォルトの名無しさん:2018/11/06(火) 23:24:52.38 ID:bpzsP6yI.net
【ラグランジュ補間】
Σ[i=1,n] )y[i]Π[k≠i](x-x[k])/ (x[i]-x[k])
この係数を計算するだけ。

こういう純数学的な処理は、お題としてはどうかな?
応用上、常に展開した係数を求めるのに意味がある
とも限らんし、精度評価が重要だったりとか

232 :デフォルトの名無しさん:2018/11/06(火) 23:43:20.04 ID:iVEsbroy.net
>>230
線形代数は偉大

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])

233 :デフォルトの名無しさん:2018/11/06(火) 23:51:57.59 ID:bpzsP6yI.net
[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]]

を解かせたというわけか...

234 :デフォルトの名無しさん:2018/11/07(水) 00:03:06.07 ID:q3WQuIHF.net
また数学板から荒らしにきたのか

235 :デフォルトの名無しさん:2018/11/07(水) 00:56:30.16 ID:yYgCxC/p.net
お題: 四則演算の文字列を受け取って計算結果を返す
1+2+3+4
=> 10

4+5*6-2*3
=> 28

5+12*(2+9/3)/((2+3)*5-7*3)
=> 20

236 :デフォルトの名無しさん:2018/11/07(水) 00:58:06.61 ID:B66LtM9k.net
>>230 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

237 :デフォルトの名無しさん:2018/11/07(水) 01:00:36.71 ID:B66LtM9k.net
>>236 訂正 尚複数解存在する時は最も次数の小さいものを出力
2
0 1
1 3
#=> 2 1

3
1 1
5 2
8 3
#=> -1/2 11/2 -4

238 :デフォルトの名無しさん:2018/11/07(水) 01:50:15.65 ID:B66LtM9k.net
>>235
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

239 :デフォルトの名無しさん:2018/11/07(水) 02:11:40.28 ID:B66LtM9k.net
>>236 訂正
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} * ' '

240 :デフォルトの名無しさん:2018/11/07(水) 12:58:28.67 ID:jk7t6Ngg.net
>>230 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} "

241 :デフォルトの名無しさん:2018/11/07(水) 13:01:59.20 ID:jk7t6Ngg.net
>>230 Pharo Smalltalk w/PolyMath >>232っぽく

"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} "

242 :デフォルトの名無しさん:2018/11/07(水) 18:36:22.03 ID:LRSzKna1.net
お題
Windows bitmap画像(.bmp)は通常、下から上に向かって画像が記録されているが、
高さに負の値を指定することで、上から下へ向かって画像を記録することができる。
これを利用してbmp画像の上下を反転せよ。

243 :デフォルトの名無しさん:2018/11/07(水) 18:45:22.44 ID:oTVd6hn3.net
どこが問題なのw
仕様に沿った解決法言っちゃってるじゃんw

244 :219:2018/11/07(水) 19:20:37.53 ID:bimd4khF.net
>>243
プログラムを作るのがお題だろう。
ここはプログラミングのお題スレなんだからこれでいいんだよ。
むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。

245 :デフォルトの名無しさん:2018/11/07(水) 20:13:22.48 ID:Uevtgk2mh
社会貢献のための生成とはどうあるべきかについて考えればいいじゃないか。
それを無くしては単なる社会主義的生産物として生きていく日々だよ。

246 :デフォルトの名無しさん:2018/11/07(水) 20:23:12.93 ID:Uevtgk2mh
それとも社会貢献はプログラミングのお題じゃないってか?
頭良すぎるだろ。

247 :デフォルトの名無しさん:2018/11/07(水) 20:24:13.29 ID:Uevtgk2mh
俺にも下品さの師匠を教えてくれよ。
お前らみたいに豊かになりてーわ笑。

248 :デフォルトの名無しさん:2018/11/07(水) 19:56:07.71 ID:5DjOPE5m.net
>>242 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))

249 :デフォルトの名無しさん:2018/11/07(水) 20:06:47.46 ID:umLQTzF1.net
>>244
あなたがそういう問題しか好きじゃないか解けないだけでしょ
スレ民の総意みたいな言い方しないで

250 :デフォルトの名無しさん:2018/11/07(水) 20:14:12.09 ID:Lazgvcn1.net
>>244
紙とえんぴつで解ける数学問題みたいなやつがプログラミングのお題としてダメなのは同意なんだけど>>242は例えば
画像の上下を反転せよ。入力はbmpとする。
とかのほうが良かったんじゃないかな。
愚直に配列いじる奴を尻目に仕様を利用して華麗に解くやつが現れる。
これがいいんじゃないか。

251 :219:2018/11/07(水) 21:05:56.46 ID:bimd4khF.net
>>249
スレ民の総意がどうであろうともこのスレはプログラミングのお題スレなんだからプログラミングのお題になってないのはスレチであることには代わりがない。
適切なスレに書くかまたはなければ新たにそれ用のスレを作って書けば良い。

>>250
それでもいいかも知れないが問題が簡略化されているために自分で仕様を調べるというプログラミングとは少し違う作業が発生するな。
更に仕様の盲点に気付くかというクイズ的な要素もある。

252 :デフォルトの名無しさん:2018/11/07(水) 21:15:41.59 ID:wOCAlbJb.net
まあ式を実装するだけの数学問題と大差ないお題にしてしまうような要素は不要だったな

253 :デフォルトの名無しさん:2018/11/07(水) 21:15:43.65 ID:h4FWJh3K.net
>>249
>>248 じゃないけど、数学の問題は問題自体が分からないから手が出せない。
高卒でも分かるように噛み砕いて貰えれば書けるかもだが。

254 :デフォルトの名無しさん:2018/11/07(水) 21:17:30.61 ID:h4FWJh3K.net
そう考えると、プログラミングの能力って言語覚えるより問題を理解する能力だよな。。。

255 :デフォルトの名無しさん:2018/11/07(水) 22:05:04.79 ID:DuFCNJWg.net
噛み砕くとこうだな
ファイルの22バイトめから保存されている4バイト長の整数値の符号を反転せよ。
ただし数値は下位バイトから順に格納されており、負数は2の補数表現を用いるものとする。

256 :デフォルトの名無しさん:2018/11/07(水) 22:06:17.13 ID:DuFCNJWg.net
出力は反転した数値以外は元のファイルと同じ内容のファイルとする

も要るか

257 :デフォルトの名無しさん:2018/11/07(水) 22:14:53.17 ID:h4FWJh3K.net
>>255
ごめん
>>230-231 の方が分からないんだ。。。

258 :デフォルトの名無しさん:2018/11/07(水) 22:28:14.93 ID:/kHK9X1+.net
それこそ数学の質問スレでやってくれない?

259 :デフォルトの名無しさん:2018/11/08(木) 03:03:27.47 ID:yQlGi5bN.net
>>244
>ここはプログラミングのお題スレなんだからこれでいいんだよ。
>むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。

スレタイ『プログラマーは何を勉強すべきか?』

プログラマーは何を勉強すべきかということだが、最新のトレンドに適応した勉強が必要だ。
俺は今までこれだけ沢山勉強してきたという人も、実は最新のトレンドに適応していない可能性もある。

5、結論
  以上の結果より導き出される京大英語で8割を超すための対策は、「ネイティブ英語とは何か」
を定義づけして学ぶことに尽きるだろう。
  たとえば、「この料理はまずい」という英作文なら受験生に多いのが
 This dish tastes poor.
しかし、これは評価されない。なぜなら、英語として正しくてもマナー違反。英検英語なら否定文にして、
This dish isn't good. これでマナーは改善された。
  しかし、ネイティブなら I don't like this dish. と言うだろう。本当に不味い場合は、
Yuck! と叫ぶ。そういう違いだ。
 問題は、
「受験英語の参考書や問題集で取り上げられている構文や表現が現実に使われている英語と違う」
  という事実。それを指導している教師や講師も、外国生活がなく50年前の表現を気づかずに指導して
いること。そのために、校内テストや模試で高得点や上位の順位をとっても落ちてしまうこと。
https://storys.jp/story/18159

260 :デフォルトの名無しさん:2018/11/08(木) 03:57:11.05 ID:AySxWi85.net
「この料理はまずい」の時点でマナー違反なんだからそのまま訳すのが正しい
料理がまずいときの一言を答えさせたいならそう出題すればいいことだ

そういう出題側の質とか意識してんのかなこいつ

261 :デフォルトの名無しさん:2018/11/08(木) 04:48:49.11 ID:QHwNiY6E.net
数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。
このスレでは、頭を使わず、単純な総当たり問題が好まれる

その方が、プログラミング的な問題

262 :デフォルトの名無しさん:2018/11/08(木) 05:18:56.02 ID:HOEn5tLb.net
お題:
自然数Nと、N個の「半角の小文字アルファベットと数字からなる1文字以上の文字列」が標準入力から順次与えられます。
文字列をNatural Sort*して標準出力から順次出力してください。
追加問題:
お題1を正規表現を使わず実装してください。

*:
"a120"と"a13"が与えられた場合、"a13","a120"の順番にソートするようにする。
また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、
"0"と"a"のどちらが先に来るかについては自由とします。

263 :デフォルトの名無しさん:2018/11/08(木) 05:51:13.63 ID:yQlGi5bN.net
>>261
>数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。
>このスレでは、頭を使わず、単純な総当たり問題が好まれる

ならば、「チンポがシコシコする」という日本語表現は、文法的に正しいのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンボ)が別々になっている場合とが考えられる。けれども「チンボ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!

264 :デフォルトの名無しさん:2018/11/08(木) 07:42:34.26 ID:Tu3rCJEk.net
>>261
まあそうなんだけど、数学スレでガンガンプログラミング言語で答え出してる奴がいて正直羨ましい。

265 :デフォルトの名無しさん:2018/11/08(木) 09:21:24.69 ID:UCtqQ5sl.net
なぜそのスレで頑張らないのか。
二軍でヒーローになろうと思ってここで数学の問題出してるの?

266 :デフォルトの名無しさん:2018/11/08(木) 09:28:43.02 ID:Tu3rCJEk.net

私は出題者じゃ無いよ。

267 :デフォルトの名無しさん:2018/11/08(木) 09:57:33.73 ID:2oWgTmr1.net
>>265
>なぜそのスレで頑張らないのか。
>二軍でヒーローになろうと思ってここで数学の問題出してるの?

俺はただパソコンに向かって独り言ブツブツ言って、チンポがシコシコしてるだけだが?

268 :デフォルトの名無しさん:2018/11/08(木) 09:57:41.43 ID:llemawmF.net
>>262
How do I do a natural sort on an array?
ttps://www.perlmonks.org/?node_id=68185

これを実装すんの?

269 :デフォルトの名無しさん:2018/11/08(木) 10:23:04.41 ID:Cbg63GbQ.net
>>263
君が何を言いたいのかよくわからない。

270 :デフォルトの名無しさん:2018/11/08(木) 10:34:41.85 ID:yQlGi5bN.net
>>269
『チンポ』についての生態学は、俺にもよくわからん。

271 :デフォルトの名無しさん:2018/11/08(木) 11:03:16.65 ID:WO5MlDuJ.net
>>262 Ruby
puts$<.readlines.sort_by{|a|[a.scan(/\d+|\D+/).map{|e|e.to_i(36)},a.size]}

272 :デフォルトの名無しさん:2018/11/08(木) 14:52:40.11 ID:9PdT3eEJ.net
>>271
>>262
>また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、

273 :デフォルトの名無しさん:2018/11/08(木) 15:03:35.30 ID:5p9g1xrz.net
>>272
問題無い
# stdin
a130
a12
a001
a01
a1
1

# stdout
1
a1
a01
a001
a12
a130

274 :デフォルトの名無しさん:2018/11/08(木) 15:08:17.09 ID:9PdT3eEJ.net
>>273
a01b2
a1b0002

275 :デフォルトの名無しさん:2018/11/08(木) 15:11:12.86 ID:5p9g1xrz.net
>>274
うわー恥ずかしい
指摘ありがとう

276 :デフォルトの名無しさん:2018/11/08(木) 15:11:38.15 ID:rrpg0ZUw.net
>>273
a001
a12
これ逆にならんとあかんのとちゃう?

277 :デフォルトの名無しさん:2018/11/08(木) 15:14:27.12 ID:tjdDhH3P.net
>>215 python3
むりやり数式で解いてみた
https://ideone.com/LQb0jT

278 :デフォルトの名無しさん:2018/11/08(木) 15:33:18.20 ID:quzojjRV.net
ソートの問題、
連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな

つまり
a01a
a1b
a01b
をソートすると
a01a
a1b
a01b

279 :デフォルトの名無しさん:2018/11/08(木) 16:29:56.18 ID:Tu3rCJEk.net
>>262
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"]

280 :デフォルトの名無しさん:2018/11/08(木) 16:31:19.84 ID:Tu3rCJEk.net
input = ["a130","a12","a001","a01","a1","1"]

281 :デフォルトの名無しさん:2018/11/08(木) 18:41:10.95 ID:e5hl87sZ.net
>>278
>連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな

同じ数値のときじゃなくて全体が等しいときか

282 :デフォルトの名無しさん:2018/11/08(木) 18:52:29.20 ID:B0s1LWLV.net
>>279
input = ["01m30s","1m45s","02m03s"]

結果
["1m45s","01m30s","02m03s"]

あんまりnatural じゃない感じ

283 :デフォルトの名無しさん:2018/11/08(木) 19:15:05.42 ID:85A5tG8V.net
お題
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

284 :デフォルトの名無しさん:2018/11/08(木) 22:07:15.82 ID:k/fJXxDB.net
>>235 ruby
https://ideone.com/06bXQn

285 :デフォルトの名無しさん:2018/11/08(木) 22:11:37.46 ID:Tu3rCJEk.net
>>282
そう?
ナチュラルソートっての知らんけど、その結果見ても仕様通りと思うんだが。

286 :デフォルトの名無しさん:2018/11/08(木) 22:16:02.65 ID:EeFetNer.net
>>271を訂正 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

287 :デフォルトの名無しさん:2018/11/08(木) 23:33:47.08 ID:TLTEncZh.net
誰に何を文句言うわけでもないがナチュラルソートってのは一般に
"01.25" < "1.5"
"01m 25cm" < "1m 35cm" とか
"Chapter 001 section 5" < "Chapter 1 section 6"
となるような順序での整列
逆でもいいけど

問題の仕様はどうかしらんが単に用語の解説ね

288 :デフォルトの名無しさん:2018/11/08(木) 23:49:40.65 ID:I6IWEGdd.net
今回の問題の仕様とは微妙に違うから回答にはならないけど

echo -e "01m30s\n1m45s\n02m03s" | sort -V
01m30s
1m45s
02m03s

ナチュラルソートならこうなるべきだな

289 :デフォルトの名無しさん:2018/11/09(金) 09:07:23.82 ID:cVPfgm+I.net
>>287-288の仕様で 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"]

290 :デフォルトの名無しさん:2018/11/09(金) 17:42:13.83 ID:SNvr5Euv.net
>>269
『チンポ』については、自分でも良くわからない、何とも言えない不思議な生き物だ。

291 :デフォルトの名無しさん:2018/11/09(金) 18:36:42.14 ID:B4AEy6G3.net
お題
1以上N以下の奇数を並べた数の桁数を求めよ

3
=> 2 (13)

10
=> 5 (13579)

9999
=> 19445 (135...99979999)

123456789
=> ?

31415926535897
=> ?

292 :デフォルトの名無しさん:2018/11/09(金) 18:45:16.11 ID:DHGOZxva.net
>>291
桁数というか奇数が何個かって話やね。
わざわざ分かりにくい仕様とか、コミュ障かと。

293 :デフォルトの名無しさん:2018/11/09(金) 18:47:33.93 ID:DHGOZxva.net
ん、ああ。
10とか100とかになったら個数と桁数は違うか。
悪かった。

294 :デフォルトの名無しさん:2018/11/09(金) 19:31:42.41 ID:myvceSEv.net
お題
与えられた数を最小文字数で生成する。

295 :デフォルトの名無しさん:2018/11/09(金) 19:36:37.28 ID:b84kY48J.net
>>291 rust
https://ideone.com/Wl46o3

296 :デフォルトの名無しさん:2018/11/09(金) 19:38:13.95 ID:JsSTi+Gx.net
>>294
問題の意味がわからん。何か例を書いてくれ。

297 :デフォルトの名無しさん:2018/11/09(金) 19:45:38.08 ID:OW/zGENl.net
意味のわからない日本語を解析する

298 :デフォルトの名無しさん:2018/11/09(金) 19:46:38.02 ID:A6qAb8kp.net
134217728 が与えられたら 8^9 を返すとかそういう話かね?

299 :デフォルトの名無しさん:2018/11/09(金) 19:46:54.75 ID:EUp1VEAA.net
>>291
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
奇数が多すぎてバッファに残ってなさそうだから、ファイルにリダイレクトし直しかな。。。

300 :デフォルトの名無しさん:2018/11/09(金) 20:06:34.46 ID:JsSTi+Gx.net
>>291
スマホから直接一度も試さずに書くが、Kotlin だと理屈の上ではこれでできると思う。
nが最大値な。

println((1..n step 2).joinToString("").length)

かといってこんなのメモリ食うだけ。

301 :デフォルトの名無しさん:2018/11/09(金) 20:38:18.97 ID:Zs2FyImb.net
>>291 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

302 :デフォルトの名無しさん:2018/11/09(金) 21:56:37.18 ID:lMSYlD+9.net
>>301
なんで

303 :デフォルトの名無しさん:2018/11/09(金) 21:58:02.15 ID:lMSYlD+9.net
すまん。途中で誤爆した。
>>301
なんでこうなるの??
あと最後のn < 8 ? n & 1 : 0も数式で表わせる?

304 :デフォルトの名無しさん:2018/11/09(金) 22:05:09.74 ID:gJrymgLI.net
>>291
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
=> 終わらん

305 :デフォルトの名無しさん:2018/11/09(金) 22:09:18.25 ID:EUp1VEAA.net
>>299
123456789の桁数は500000000ってのは分かった。

306 :デフォルトの名無しさん:2018/11/09(金) 22:23:23.31 ID:PBoRuHnu.net
>>303
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))
とかにすればいいんじゃない意味ないけど

307 :デフォルトの名無しさん:2018/11/09(金) 23:35:53.00 ID:QKOvQ/Be.net
>>291 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) "

308 :デフォルトの名無しさん:2018/11/09(金) 23:56:11.30 ID:EzT7HP1o.net
>>306
訂正
((9p - 1)10^p + 10)/18 -> [((9p - 1)10^p + 10)/18]
あと (n < 8 ? n & 1 : 0) は (1 - (-1)^n)/2*[3/([√n] + 1)] の方がより簡単か

309 :デフォルトの名無しさん:2018/11/10(土) 01:35:04.59 ID:PYYpj2JU.net
>>291
Kotlin
https://paiza.io/projects/KAd4jeHV7Q3ttrPaJCGFCw

310 :デフォルトの名無しさん:2018/11/10(土) 04:32:40.14 ID:dp2CGyZQ.net
>>309
すごい😆

311 :デフォルトの名無しさん:2018/11/10(土) 04:35:26.34 ID:PYYpj2JU.net
>>262
Kotlin
https://paiza.io/projects/sjgIQuhZ44UZcdFZ2CwncQ

色々考えたが結局クラス作ってそこに数字列と文字列で切り分けて入れておいて比較時にそこ見るようにした。

入力の仕様は拡張されていて、最初に数字だけがあった場合はその後に続く単語がその個数あるとみなして
入力を行うが、最初に数字がない場合は無制限に読む。出力は入力した単語とソート後の単語を出す。

312 :デフォルトの名無しさん:2018/11/10(土) 05:36:17.18 ID:zQnB+SVr.net
提案
回答は言語別に別スレで

2スレ位になるかな?
評価価値基準で別れていくんじゃないかと

ここではコメントのみになるのかな。

313 :デフォルトの名無しさん:2018/11/10(土) 05:52:45.45 ID:5gG2FCqG.net
スレ過疎りそうだし誰もわざわざ別スレに回答見に行かなそう

314 :デフォルトの名無しさん:2018/11/10(土) 06:43:43.85 ID:zQnB+SVr.net
乱立して過疎ってる特定言語専用スレの活性化に寄与することを願いたいしコード例が増えることはそれぞれメリットあるんじゃないかと。
ここと相互リンクは必ず貼る。他の言語と比較しない
他を貶さないを基本ルールに。

315 :デフォルトの名無しさん:2018/11/10(土) 07:08:49.40 ID:mapNUhJU.net
もとのスレにも迷惑かと

316 :デフォルトの名無しさん:2018/11/10(土) 08:21:22.38 ID:2tLivqWS.net
>乱立して過疎ってる特定言語

具体的に何?
一番肝心のこと言ってないから説得力がまるで無い

317 :デフォルトの名無しさん:2018/11/10(土) 09:22:59.55 ID:dp2CGyZQ.net
お題:
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」

318 :デフォルトの名無しさん:2018/11/10(土) 09:43:13.06 ID:9vqEahoA.net
そのスレの流れを無視してよそのスレで出されたお題の答えだけ書かれても、そのスレの住人には邪魔なだけだと思う。

319 :デフォルトの名無しさん:2018/11/10(土) 09:56:28.53 ID:X2YiMm/N.net
こういう指示語ばかり使うやつはだいたい頭悪い

320 :デフォルトの名無しさん:2018/11/10(土) 10:03:50.52 ID:0iGN/oEh.net
>>317
マ板で見かけた入社試験過去問か。
プログラマー脱落者として辞退します。

321 :デフォルトの名無しさん:2018/11/10(土) 10:10:03.22 ID:zQnB+SVr.net
乱立して過疎ってる (特定言語専用(スレッド))
形容詞句?の係りはこれな

(こういうものの表しかたにも流儀が色々あって混在するとややこしい)

322 :デフォルトの名無しさん:2018/11/10(土) 10:19:13.79 ID:2tLivqWS.net
係り受けなんてどーでもいいよ
「特定言語」って具体的に何なんだ、って聞いてるだけじゃん
返答が『形容詞句?の係りはこれな』って人の話をわざと聞かない人間だろ
かなりのサイコパスなんで『乱立して過疎ってるスレ』とやらに誘いこんでマウンティングしたいだけじゃねえの
なぜなら、特定言語の具体的な名前を5時間経っても未だに出さない、
口を開いたかと思えば「係り受けはこうだから」
もう頭がおかしいだろこいつ

323 :デフォルトの名無しさん:2018/11/10(土) 10:34:20.29 ID:zQnB+SVr.net
一つの言語を話題の軸に置いたスレッドは幾らでもあるだろ?この板には。
過疎ってるのも伸びてるのも全部特定言語専用スレな

324 :デフォルトの名無しさん:2018/11/10(土) 10:36:44.35 ID:zQnB+SVr.net
コマンドプロンプトとかSQLとかでワイルドカード使ったことないのかな?

325 :デフォルトの名無しさん:2018/11/10(土) 11:08:46.45 ID:1MT6N26R.net
そもそもここが過疎だし、他スレなんかにここのコード書いても荒らしにしかならんので当然ながら反対
やりたい奴だけ勝手にやってろ

326 :デフォルトの名無しさん:2018/11/10(土) 11:14:10.79 ID:16GnFLu/.net
>>317
一人が答えた時点で終了になるのに全員正解とは

327 :デフォルトの名無しさん:2018/11/10(土) 11:20:45.22 ID:zQnB+SVr.net
幾らなんでも既存スレ無許可で乗っ取るのはやめてほしい。
でも逆にそちらで希望された場合には別スレにしなくてもいいのでは?リンクさえあれば

328 :デフォルトの名無しさん:2018/11/10(土) 11:31:50.87 ID:T2pc5qWv.net
そもそも>>312の時点で日本語が怪しいですし

329 :デフォルトの名無しさん:2018/11/10(土) 11:33:27.18 ID:16GnFLu/.net
>>317
答えた者が必ず正解するならAが常にあてずっぽうで正解できることになるな
パスする意味も無い

言わんとすることは推測できるが、問題文としては明らかにおかしい
各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要

330 :デフォルトの名無しさん:2018/11/10(土) 11:34:10.16 ID:g5G2TnXq.net
>>317 Java
https://ideone.com/EUQiD6
これはひどいコードww

331 :デフォルトの名無しさん:2018/11/10(土) 11:36:49.05 ID:16GnFLu/.net
>>330
ごり押しで草

332 :デフォルトの名無しさん:2018/11/10(土) 11:44:08.17 ID:16GnFLu/.net
Aは常に正解する
Aは常に正しい
故にA is GOD

333 :デフォルトの名無しさん:2018/11/10(土) 12:18:21.41 ID:2tLivqWS.net
>>317は9月末あたりに話題になってた
ttps://qiita.com/gorillab/items/fab2a6637f681221f687
ttps://qiita-image-store.s3.amazonaws.com/0/169376/80ea2cf1-37e7-60b0-3230-c7dc1d2d60cc.jpeg

334 :デフォルトの名無しさん:2018/11/10(土) 12:38:22.96 ID:16GnFLu/.net
>>333
元ネタからして雑すぎて草

335 :デフォルトの名無しさん:2018/11/10(土) 12:44:49.01 ID:gks79eHH.net
前スレ951のやつか

336 :デフォルトの名無しさん:2018/11/10(土) 12:44:51.58 ID:xqriZsUd.net
>>317 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
...
以下>>330と同じ

337 :デフォルトの名無しさん:2018/11/10(土) 13:25:37.16 ID:hLxIIZfE.net
>>329
> 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要
流石にその程度は理解しようよ…

338 :デフォルトの名無しさん:2018/11/10(土) 13:27:54.99 ID:8cjk91S6.net
>>291 python3
https://ideone.com/jQau8U
うーん… O(1)にできない

339 :デフォルトの名無しさん:2018/11/10(土) 13:37:54.71 ID:16GnFLu/.net
>>337
書いてないことは何でもあり

論理パズルにするならちゃんとルールは全て掲示しないと駄目

340 :デフォルトの名無しさん:2018/11/10(土) 13:52:54.08 ID:9b5VuL4P.net
お題
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 => ??

341 :デフォルトの名無しさん:2018/11/10(土) 14:00:49.74 ID:hLxIIZfE.net
>>339
はいはい w
アスペかよ

342 :デフォルトの名無しさん:2018/11/10(土) 15:46:45.95 ID:16GnFLu/.net
>>340
777の出力は77になればいいのかな?
その入力でこうなるの面白いな

343 :デフォルトの名無しさん:2018/11/10(土) 15:58:06.48 ID:xqriZsUd.net
>>342
97じゃない?

344 :デフォルトの名無しさん:2018/11/10(土) 16:06:41.30 ID:16GnFLu/.net
>>343
すまんコード修正したら97になったわ
はやとちりだった

345 :デフォルトの名無しさん:2018/11/10(土) 16:28:23.31 ID:31tiZVqm.net
>>330-331
そういうのはそれよりマシなコードを出してから言わないと単なる口先番長にしか見えないぞw

346 :デフォルトの名無しさん:2018/11/10(土) 17:09:13.33 ID:xqriZsUd.net
>>340 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

347 :デフォルトの名無しさん:2018/11/10(土) 17:30:26.21 ID:g5G2TnXq.net
>>345
自分で書いて自分でひどいコードと言うとるんやがww

348 :デフォルトの名無しさん:2018/11/10(土) 17:52:39.10 ID:AvCW4uHY.net
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

349 :デフォルトの名無しさん:2018/11/10(土) 17:55:30.82 ID:hLxIIZfE.net
>>347
ああ、それはすまん
俺もパッと書けと言われたらこれしか思いつかんわ

350 :デフォルトの名無しさん:2018/11/10(土) 19:50:00.93 ID:nd1h6x9x.net
>>347
わかった上で愚直にごり押しコード書いただけだよな
引数順列の列挙もドストレートで素敵w

351 :デフォルトの名無しさん:2018/11/10(土) 20:50:56.73 ID:G7iMNc/F.net
>>317 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 "

352 :デフォルトの名無しさん:2018/11/11(日) 03:24:01.44 ID:HtKIrWnT.net
>>340 python3
https://ideone.com/2byzFd

353 :デフォルトの名無しさん:2018/11/11(日) 10:02:52.73 ID:ZG9KPLpE.net
>>340
Rubyで。
https://ideone.com/PoaYk5

354 :デフォルトの名無しさん:2018/11/11(日) 12:53:19.00 ID:ILkwXRqJ.net
>>340 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) "

355 :デフォルトの名無しさん:2018/11/11(日) 14:11:48.73 ID:j7sl2u35.net
>>354
それだけでいけるのか
すげー

356 :デフォルトの名無しさん:2018/11/11(日) 14:19:03.18 ID:SClia95W.net
それでもJニキなら何とかしてくれる

357 :デフォルトの名無しさん:2018/11/11(日) 14:25:13.88 ID:j7sl2u35.net
よく読んだら素直に実装してるだけか

358 :デフォルトの名無しさん:2018/11/11(日) 14:34:26.37 ID:ILkwXRqJ.net
>>357
ですね…^^;

359 :デフォルトの名無しさん:2018/11/11(日) 16:24:01.50 ID:xWJTm2Oc.net
お題
n次のヒルベルト曲線を描画せよ

n=1
■□■
■□■
■■■

n=3
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■

360 :デフォルトの名無しさん:2018/11/11(日) 17:11:10.50 ID:Gv5Fmm22.net
>>340 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

361 :デフォルトの名無しさん:2018/11/11(日) 17:52:24.96 ID:tvDFPkAv.net
>>359 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
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■

362 :デフォルトの名無しさん:2018/11/11(日) 22:01:36.28 ID:B3f/927d.net
>>340
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]

363 :デフォルトの名無しさん:2018/11/11(日) 22:10:56.11 ID:B3f/927d.net
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]

364 :デフォルトの名無しさん:2018/11/11(日) 22:20:34.69 ID:xWJTm2Oc.net
>>360
n=10のときどうなる?

365 :デフォルトの名無しさん:2018/11/11(日) 23:54:52.39 ID:VLVUrnJ+.net
指数を100の剰余取ってるのってどういう根拠なの?

366 :デフォルトの名無しさん:2018/11/11(日) 23:59:16.36 ID:lebYcZ/K.net
>>364
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すると一般性はありませんでした。サーせん。
ちゃんと循環性を見るとか、別の解法が要りますね

367 :デフォルトの名無しさん:2018/11/12(月) 00:02:23.31 ID:EX0FpiMD.net
ちなみに循環性を見るとこんな感じになってました
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

368 :デフォルトの名無しさん:2018/11/12(月) 00:03:57.97 ID:EX0FpiMD.net
>>366
× 単に左辺を%100
○ 単に右辺(指数)を%100

369 :デフォルトの名無しさん:2018/11/12(月) 00:05:03.96 ID:JEwLf6Zk.net
>>366
それは0乗しちゃってるからじゃない?

370 :デフォルトの名無しさん:2018/11/12(月) 00:10:02.50 ID:EX0FpiMD.net
>>369
10については、そういわれてみればそうだね。

371 :デフォルトの名無しさん:2018/11/12(月) 00:11:06.48 ID:D6ILV7Jx.net
>>366
iが10で割り切れれば00って別で切り分ければ良いんじゃ無いかな。

372 :デフォルトの名無しさん:2018/11/12(月) 00:18:43.46 ID:EX0FpiMD.net
>>371
10については、そいうやり方も考えられるけど
上記の循環の例の11,13,777は指数を%100しても解は合うが
他の数値も単に指数を%100して解が合うか、一般性は疑わしいので、
>>360はちょっと勇み足だったかもしれないテヘペロ

373 :デフォルトの名無しさん:2018/11/12(月) 00:19:14.52 ID:JEwLf6Zk.net
>>367
0〜99までとりあえず循環部分の周期は全て20の約数になるみたいだけど
数学雑魚の俺には理屈がわからなかった

とりあえず、ざっくり100の剰余取るだけだと循環開始より小さい指数になったときにおかしくなりそう

374 :デフォルトの名無しさん:2018/11/12(月) 00:52:30.78 ID:+qrAueUv.net
>>372
寧ろそれが成り立つ方がかなり特別なケースだぞ

375 :デフォルトの名無しさん:2018/11/12(月) 02:34:45.23 ID:MtlIUxHY.net
多分数学的には証明されていることだろうと思うが、x ^ 100 とか x ^ 200 とか x ^ 300 って、
下3桁の結果が同じになるようだな。どうしてかはわからんが。多分考えて行くとその内わかる
んだろう。後の事は数学が得意な人に任せた。

376 :デフォルトの名無しさん:2018/11/12(月) 04:19:59.43 ID:lDwndekZ.net
x^22 - x^2
が常に100で割り切れるのが理由だと思う
なので巡回群の長さは高々20までになる

377 :デフォルトの名無しさん:2018/11/12(月) 04:44:54.48 ID:lDwndekZ.net
もう少し分かりやすく書くと x^20 - 1 と x^21 - x が
100で割り切れる保証はない(実際大部分は割り切れない)が
x^22 - x^2 は絶対に100で割り切れる(合同式を用いれば証明は簡明)ので
一般に2以上の自然数 n に対して x^(n+20) - x^n ≡ 0 mod 100が成り立つ(xは整数)

よって一般に指数部の20の剰余を取っても問題ないと言える

378 :デフォルトの名無しさん:2018/11/12(月) 04:49:06.55 ID:fKeD1dzA.net
>>375
任意の整数 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桁は常に同じだね

379 :デフォルトの名無しさん:2018/11/12(月) 09:11:34.15 ID:WiNaWTIj.net
数学板でやれ。問題からしてクソだった。

380 :デフォルトの名無しさん:2018/11/12(月) 10:17:56.51 ID:iaSpw+rm.net
これ以上はスレ違いってなら同意だけど問題自体は別に良かっただろ

381 :デフォルトの名無しさん:2018/11/12(月) 11:03:12.07 ID:oQPj2WUY.net
とりあえず>>340の出題者は用意してあった解答を出そうか
くそ問題かどうかはそれを見て判断する

382 :デフォルトの名無しさん:2018/11/12(月) 11:11:40.60 ID:iaSpw+rm.net
既に回答がたくさん出てるのにクソ問題も何もねえだろ

383 :デフォルトの名無しさん:2018/11/12(月) 11:51:52.42 ID:oQPj2WUY.net
回答の多さとクソさとの相関はないだろ
例えばQiitaでいいねが多ければクソじゃないということがないのと同じように

そういうのはいいから出題者は早めに解答だしてくれ

384 :デフォルトの名無しさん:2018/11/12(月) 12:01:03.54 ID:iaSpw+rm.net
ボクがわからないからクソとか草生えるわ
なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ

385 :デフォルトの名無しさん:2018/11/12(月) 12:07:32.95 ID:iShTB70W.net
>>383
最近のQiitaのトレンド見てて いいねの数=内容の薄さ だと思うようになってきたわ

386 :デフォルトの名無しさん:2018/11/12(月) 12:11:20.95 ID:b6USGf7s.net
今回の問題はべき剰余の特殊な場合を求めるものだけど、工夫する余地もいくつかあり悪い問題ではないと思った。
というかなぜこれを悪い問題だと思ったんだ?

387 :デフォルトの名無しさん:2018/11/12(月) 12:19:11.85 ID:DYCuacpe.net
競技プログラミングなんかでよく見るタイプの問題なのにな。

388 :デフォルトの名無しさん:2018/11/12(月) 12:23:12.24 ID:hXyGmgtP.net
a↑↑b mod n を一般化してみたらテトレーション計算より
最初に使うφ(n)の計算のほうが重かった
10**nなら2**n * 5**nなので高速に計算できますけども

389 :デフォルトの名無しさん:2018/11/12(月) 12:28:21.72 ID:TKKxOWxM.net
このスレは不特定言語スレだけど
高速性ならC/C++/Rast
コンパクト性の追求ならSmallTalkとかRubyとか
RADならJavaとかPythonとか定番固定化。
既にもうある程度少数特定言語スレになりつつあ
る希ガス

390 :デフォルトの名無しさん:2018/11/12(月) 12:28:55.23 ID:TKKxOWxM.net
RastじゃなくてRustやったなwww

391 :デフォルトの名無しさん:2018/11/12(月) 12:49:28.80 ID:7mLFygVa.net
>>384
> なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ

数学の素養のあるっぽいやつのよくやりがちなダメな考え方だな
そういう(逆)選民思想を持っているならこのスレで出題するのはやめてくれ

そもそも良問と思うものをけなされるお前自身がたのしくないだろ?

392 :デフォルトの名無しさん:2018/11/12(月) 12:56:08.79 ID:1XBBjLKo.net
いずれにせよ出題者がどこまで考えて出題したか(つまり良問か否か)はそいつ自らの解答を見れば一目瞭然だよ
論よりコード
はよ出せ

393 :デフォルトの名無しさん:2018/11/12(月) 13:24:01.86 ID:WWnCJgTu.net
問題の良さって問題じゃなく解答で決まるものなのか?
問題だけで問題の良さが確定しないのは初めて知ったわ

394 :デフォルトの名無しさん:2018/11/12(月) 13:26:44.24 ID:DYCuacpe.net
も一回言うけどこの問題はプログラミングのお題としてはよく見るような問題だぞ。
揚げ足取りというか難癖付けてる奴はおかしいだろ。
それこそスレチだから黙ってろよ。

395 :デフォルトの名無しさん:2018/11/12(月) 13:28:23.55 ID:X+KqJ1/Z.net
>>393
解答で決まるなんて誰もいっとらんがな(数学の前にやることあるんじゃ?w)
解答を見れば「どこまで考えて出題したか」が一目瞭然ということ
どこまで考えて出された問題かで良問か否かが決まる

もとより様々な状況で「結果的に良問」ということは実際あるしそれは否定する気は無いが、蓋然性は低い

396 :デフォルトの名無しさん:2018/11/12(月) 13:38:11.17 ID:b6USGf7s.net
この程度のことで選民思想がどうのとか言い出すのはおかしいと思うよ。
冪剰余の計算は面白いテーマだし。
逆に悪問だと言ってる人がその根拠を示すべきだと思うんだけど。

397 :デフォルトの名無しさん:2018/11/12(月) 13:57:27.23 ID:9RzF2H48.net
>>396
「この程度(のレベル)」とか言ってる選民思想バリバリの奴が
自分は違うって体で何か主張したところでぜんぜん説得力ないんだがw

ともあれ、回答が多い割に文句なしの正答が出てこないのがこのスレ的には異常事態だろ
お題 and/or 出題者をクソだと疑う十分な根拠になりうる

398 :デフォルトの名無しさん:2018/11/12(月) 14:13:38.48 ID:b6USGf7s.net
>>397
英語の授業で"How are you?" "I'm fine. Thank you" って言ったら「ペダンチックだ。帰国子女ぶるな」といわれたくらいに衝撃的。
大体問題が理解できないのに「文句なしの正答」を見極められるというのはおかしくない?
こっちからすればここに既にある回答の内のいくつか(>>352とか)は「文句なしの正答」なんだけど。
問題が理解できないのに「文句なしの正答」を見極められるならそれらのどこが不十分なのか説明しなさい。
それができなければ数学ができる出来ない以前にただのモンスタークレーマーみたいな傲慢野郎だ。

399 :デフォルトの名無しさん:2018/11/12(月) 14:16:13.02 ID:CqB5lm+V.net
まーた頭おかしいのが暴れてんのか
>>397はNGぶっこむからIDころころ変えるな
もしくはコテハンつけろよゴミが

400 :デフォルトの名無しさん:2018/11/12(月) 14:24:13.52 ID:D6ILV7Jx.net
>>359とか良い問題じゃ無い?
私は解けないが。

401 :デフォルトの名無しさん:2018/11/12(月) 16:17:37.15 ID:9RzF2H48.net
>>398
いくつかってずいぶん曖昧だなw
お前の文句なしってセンス疑うわw

402 :デフォルトの名無しさん:2018/11/12(月) 16:22:54.34 ID:CqB5lm+V.net
>>401
>>352に文句つけてみろよ無能ゴミクズが

403 :デフォルトの名無しさん:2018/11/12(月) 16:27:56.77 ID:9RzF2H48.net
あとお前ら(直近ではID:9RzF2H48とID:CqB5lm+V)
勝手にクソ問題断定のクレーマー扱いしとるが
出題者の用意していた解答次第では良問の可能性も(わずかだが)あるんだからな
ほどほどにしとけよw

404 :デフォルトの名無しさん:2018/11/12(月) 16:29:53.16 ID:9RzF2H48.net
いかん自分を安価しちゃったよID:b6USGf7sな

405 :デフォルトの名無しさん:2018/11/12(月) 16:33:57.40 ID:DYCuacpe.net
どうやら ID:9RzF2H48 は人を馬鹿にしたいだけみたいだな。
きちんと説明してもらってんのに言ってることがわけわからんし。
冪剰余の最適化なんて教科書にあってもいいくらいものすごくありふれたお題だっていうのに馬鹿らしい。

406 :デフォルトの名無しさん:2018/11/12(月) 16:37:03.80 ID:CqB5lm+V.net
数学の話ししてるのにイライラして思わずクソ問題呼ばわりして引くに引けなくなったんだろ

407 :デフォルトの名無しさん:2018/11/12(月) 16:43:20.29 ID:b6USGf7s.net
>>401
いやだから>>352とかって例を挙げてるでしょ。ばかにしてる?
それで結局悪問だという根拠は示せないんだよね?
じゃあ悪いことしたんだからまだいるか知らないけど出題者に謝罪しようね。
君ははっきり言って不快だよ。

408 :デフォルトの名無しさん:2018/11/12(月) 16:46:44.76 ID:9RzF2H48.net
>>405
本音がでたなw中立ぶるよりお前ららしいわ

>>406
こんなん数学に入るかボケが
つーかお前のためにID固定してやってんだからレスすんな

409 :デフォルトの名無しさん:2018/11/12(月) 16:52:28.57 ID:9RzF2H48.net
>>407
自分で回答も出せないやつが他人のコード気安く挙げてんじゃねーよ
お前が考えて出したコードならいくらでもケチつけたるわw

410 :デフォルトの名無しさん:2018/11/12(月) 16:55:43.17 ID:CqB5lm+V.net
>>408
図星突かれて痛かったのか?
バカを愚弄するのはホント楽しいわ
てか「数学板でやれ。問題からしてクソだった」って言ってたくせにこんなの数学に入らないっておかしいだろ
数学に入らないなら数学板推すなよアホか
結果的に数学よりも遥かにスレ違いの話題でこの場を荒らして皆に迷惑かけてんのはお前だ
お前はみんなの迷惑なの

411 :デフォルトの名無しさん:2018/11/12(月) 17:00:57.95 ID:b6USGf7s.net
>>409
>ともあれ、回答が多い割に文句なしの正答が出てこない
って言うからその反例として件のレスなのに、開き直ってお前がコード書けだなんて控えめに言って狂ってる。
相手が言ったことも読まないし自分が行ったことすら覚えていないんじゃあ対話不可能。
ただただ不快な存在。

412 :デフォルトの名無しさん:2018/11/12(月) 17:01:55.26 ID:D6ILV7Jx.net
>>340 は情報爆発でメモリ使いまくる処理をいかにメモリ使わずに処理できるかって意味じゃ悪く無いと思う。
私はプログラマーじゃ無いから思い付けなかったが、こう言うのはプログラマーの本領発揮する分野じゃないかな。

そして >>359 も解けない私。。。Orz
GUIならネットに落ちてるけど、CUIってのが味噌だよね。

413 :デフォルトの名無しさん:2018/11/12(月) 17:02:08.43 ID:9RzF2H48.net
>>407
それは出題者のコードじゃないだろ?
ほんとお前、日本語読解とか論理的思考とか大丈夫なの?

414 :デフォルトの名無しさん:2018/11/12(月) 17:02:52.43 ID:9RzF2H48.net
正直、ばかにはしているw

415 :デフォルトの名無しさん:2018/11/12(月) 17:03:00.49 ID:DYCuacpe.net
>>408
ものすごくありふれたお題に文句付けてるんだからあきれてものも言えないってだけ。
別に中立ぶってなどいない。お前のことは見下してるが。

416 :デフォルトの名無しさん:2018/11/12(月) 17:06:56.26 ID:b6USGf7s.net
>>413
>ともあれ、回答が多い割に文句なしの正答が出てこない
と言ったのはそちらで、それに対してこっちがその反例として件のレスを挙げたのに本気で意味不明。
会話を破綻させに行っているのは君でしょ。自分が書いたことすら覚えていないのだから。
さすがに不愉快だ。

417 :デフォルトの名無しさん:2018/11/12(月) 17:08:31.84 ID:1o1kfQH0.net
馬鹿は相手がどの高さいるのかもわからずに人を馬鹿にする
頭が悪いので周囲が何を言ってるのか何一つ理解できない
そして自尊心の塊

418 :デフォルトの名無しさん:2018/11/12(月) 17:08:37.05 ID:CqB5lm+V.net
ここまできっちり論破されてるとキチガイ相手でも哀れになってくるな

419 :デフォルトの名無しさん:2018/11/12(月) 17:13:08.29 ID:9RzF2H48.net
>>416
お前は自分の「文句なし」に自信持ちすぎだろw
あと「出題者の用意していた解答次第では良問の可能性も(わずかだが)ある」は無視ですかそうですか

420 :デフォルトの名無しさん:2018/11/12(月) 17:15:33.59 ID:9RzF2H48.net
>>418
だからお前は反応するなと何度言わせる?w

421 :デフォルトの名無しさん:2018/11/12(月) 17:17:08.81 ID:b6USGf7s.net
>>419
対話する意図がないと判断した。
もういい。疲れた。
控えめに言って、君はもう死んだ方が良いよ。

422 :デフォルトの名無しさん:2018/11/12(月) 17:21:16.54 ID:4IQEu5Ky.net
最近あっちこっちで暴れてる単芝君か
5chに居場所が無くてもリアル犯罪に走るなよな

423 :デフォルトの名無しさん:2018/11/12(月) 17:21:58.58 ID:D6ILV7Jx.net
良い加減にしろ!
もうオマイらで >>340 の文句なしの正当とやらを出し合えや。

424 :デフォルトの名無しさん:2018/11/12(月) 17:23:23.00 ID:eZ2UdI/8.net
・数学の話ばかりしてうざい ←わかる
・作者は答え書いて ←わからなくもない
・答え書かないからクソ問題! ←は?

425 :デフォルトの名無しさん:2018/11/12(月) 17:54:26.10 ID:9RzF2H48.net
>>424
誤解があるので訂正しておくけど
出題者が「落とし穴」をちゃんと想定できていれば良問だしそれを確認せんがための「答え出せ」だよ

でも、勘違いしたままたまたま答えが合ってしまう入出力例しか提示されていない
and/or それを排除できる例を出せない時点でこの問題はそれなりにクソ問題だと思う

引っ掛けて貶めたり、選抜や順位を競うことを目的とした場所じゃないんだからここは

426 :デフォルトの名無しさん:2018/11/12(月) 18:12:43.91 ID:eZ2UdI/8.net
n^n^n % 100計算するのに落とし穴も何もないだろ
フェルマーの小定理チックに指数部で剰余とるだなんて誰も想定できねえよ
なんでキチガイは間違えたらそこから学ばずに問題の方(しかも真っ当)にケチ付けるんだか
運動会で転ぶと怪我をするからグラウンドの至る所にクッションを置いておけと言うモンペと同レベルのキチガイ

427 :デフォルトの名無しさん:2018/11/12(月) 18:26:31.10 ID:bzMEonQL.net
なんで数学板でやらないのかね。
数学板ではザコだからプログラム板でマウント取りたいとか?ww

428 :デフォルトの名無しさん:2018/11/12(月) 18:28:01.10 ID:CqB5lm+V.net
>>427
ID変えんなやキチガイ

429 :デフォルトの名無しさん:2018/11/12(月) 18:32:41.33 ID:9RzF2H48.net
>>426
住人かと思ってちょっと丁寧にレスしたらこれだよ ┐(´-`)┌

430 :デフォルトの名無しさん:2018/11/12(月) 18:34:56.16 ID:9RzF2H48.net
>>428
変えてないし、そもそも俺だと思うならレスすんなよ…

431 :デフォルトの名無しさん:2018/11/12(月) 18:55:17.39 ID:eZ2UdI/8.net
>>429
お前以外誰もその問題にケチ付けてねえのに住人面すんな
素直に頭悪いが悪いのが悔しいですって言えよ

432 :デフォルトの名無しさん:2018/11/12(月) 19:18:26.81 ID:h68nq2of.net
プログラミングできてもネットリテラシーは低いんだな

433 :デフォルトの名無しさん:2018/11/12(月) 19:28:11.51 ID:+FWS6rf7.net
ID:9RzF2H48
こいつ前からこの板荒らしまくってる粘着野郎だぞ
意思疎通は不可能だから無視しとけ

434 :デフォルトの名無しさん:2018/11/12(月) 19:45:44.72 ID:4WXaKeF0.net
お題
1900年から2018年までの、7月31日が土曜日である年を全て挙げよ

435 :デフォルトの名無しさん:2018/11/12(月) 19:52:33.63 ID:n3BneZmq.net
なんで?

436 :デフォルトの名無しさん:2018/11/12(月) 19:54:05.95 ID:I5PkaEyl.net
自分で計算して求めるのを作るか、ライブラリを使ってしまうか、悩ましいところですな・・・

437 :336:2018/11/12(月) 19:58:23.85 ID:rYIWpX0E.net
悪い意味で盛り上がってて苦笑するしかない

C++
https://ideone.com/HUZiK8

Ruby読めないけど>>346と大体同じ考え方なのかな

438 :デフォルトの名無しさん:2018/11/12(月) 20:20:47.61 ID:4WXaKeF0.net
お題
0から99までの整数を2進数で表したとき、1が奇数個あるものを全て挙げよ

439 :デフォルトの名無しさん:2018/11/12(月) 20:23:17.93 ID:zzbIEe7z.net
>>434 bash + date
for i in {1900..2018}; do if [ $(date --date=07/31/$i +%w) -eq 6 ];then echo "$i "; fi; done

440 :デフォルトの名無しさん:2018/11/12(月) 20:27:55.24 ID:q04ZIund.net
>>434 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]

441 :デフォルトの名無しさん:2018/11/12(月) 20:31:45.80 ID:q04ZIund.net
>>438 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]

442 :デフォルトの名無しさん:2018/11/12(月) 20:36:43.90 ID:MOsxqjp/.net
>>434
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
出力は同じ

443 :デフォルトの名無しさん:2018/11/12(月) 20:55:43.70 ID:MOsxqjp/.net
>>438
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

444 :デフォルトの名無しさん:2018/11/12(月) 21:30:19.73 ID:WG+vGwsG.net
>>438 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

445 :デフォルトの名無しさん:2018/11/12(月) 21:32:31.70 ID:WG+vGwsG.net
>>444 ゴメンよけいな=が入っていたので削除

>>438 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

446 :デフォルトの名無しさん:2018/11/12(月) 21:57:07.87 ID:jh3oqSUb.net
>>438 rust
https://ideone.com/gTuww7

447 :デフォルトの名無しさん:2018/11/12(月) 22:18:19.15 ID:kM9Cc8DJ.net
>>434 PowerShell
1900..2018 | %{Get-Date "$_/07/31"} | ? -Property DayOfWeek -eq 6 | select Year

448 :デフォルトの名無しさん:2018/11/12(月) 23:14:49.42 ID:fOB5B0pj.net
>>283 Common Lisp
https://ideone.com/C9fVpq

449 :デフォルトの名無しさん:2018/11/12(月) 23:55:59.63 ID:jh3oqSUb.net
>>235 c
https://ideone.com/BvQRUR

450 :デフォルトの名無しさん:2018/11/13(火) 00:02:22.82 ID:5Ay5yU9p.net


451 :デフォルトの名無しさん:2018/11/13(火) 00:27:29.87 ID:7jyC4IO4.net
python

>>434
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]

>>438
[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]

452 :デフォルトの名無しさん:2018/11/13(火) 00:32:55.99 ID:7jyC4IO4.net
[x for x in range(1900,2018) if (x + x//4 - x//100 + x//400 + 1) % 7 == 6]
でええやんけ

453 :デフォルトの名無しさん:2018/11/13(火) 00:43:41.95 ID:bZ0HXQ7X.net
>>438
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]

454 :デフォルトの名無しさん:2018/11/13(火) 00:55:13.44 ID:5Ay5yU9p.net
乙乙

455 :デフォルトの名無しさん:2018/11/13(火) 01:00:17.03 ID:wnw9zNxR.net
出力とかなさらないんですか?

456 :デフォルトの名無しさん:2018/11/13(火) 01:11:01.02 ID:qGbdPj8P.net
>>434 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) "

457 :デフォルトの名無しさん:2018/11/13(火) 01:23:34.12 ID:qGbdPj8P.net
>>438 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) "

458 :デフォルトの名無しさん:2018/11/13(火) 01:59:27.96 ID:4/lVJDsB.net
>>451>>452をJavascriptに引き写してみた。

>>434
[...function*(){for(i=1900;i++<2018;)if((i+~~(i/4)-~~(i/100)+~~(i/400)+1)%7==6)yield i}()]

>>438
[...function*(){for(i=0;i++<99;)if(i.toString(2).match(/1/g).length%2)yield i}()]

汚い…
Pythonの内包表記は良いなぁ…

459 :デフォルトの名無しさん:2018/11/13(火) 02:08:16.58 ID:JCaIqwLF.net
>>283やってみた
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

460 :デフォルトの名無しさん:2018/11/13(火) 02:09:33.92 ID:JCaIqwLF.net
>>459
>1 z 8
>1 2 3 4 5 6 8 7

写し間違えました。実際には正しい結果になります。

461 :デフォルトの名無しさん:2018/11/13(火) 02:27:33.07 ID:JCaIqwLF.net
>>459は各 (x,y) の項について
主キー x + y
副キー x + (-1)^(x+y) * (x+y)
とするとジグザグ順に昇順のキーが得られるので
そのキーでソートしたときの順位を表示、というやり方

462 :デフォルトの名無しさん:2018/11/13(火) 11:28:29.90 ID:/6RlnNZj.net
>>438
Perl5
https://paiza.io/projects/HxeBcbXHG1jRNRhrutaKqA
文字列にせずに全Bit足して求めた。

463 :デフォルトの名無しさん:2018/11/13(火) 12:04:16.15 ID:/6RlnNZj.net
>>434
C
https://paiza.io/projects/Xq4YBZq4qJJLOZLsNTyWng

ライブラリ使用。
コンパイラとライブラリの対応の問題だろうが、32bit環境ではできなかった。time_t型がlongか何かになっていて足りなかったからだろうと思う。
まともに動くかどうかは(またはコンパイルできるかどうかは)環境依存ということになる。

464 :デフォルトの名無しさん:2018/11/13(火) 14:23:32.25 ID:TStmpOw3.net
>>283 Squeak Smalltalk >>461 を参考に (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' "

465 :デフォルトの名無しさん:2018/11/13(火) 15:05:24.75 ID:x0SFJuPP.net
>>461
副キーは x+y の偶奇に応じて上下や左右が反転してればいいわけだから
単に (-1)^(x+y)*x とか (-1)^(x+y)*y で十分か

466 :デフォルトの名無しさん:2018/11/13(火) 16:16:43.59 ID:GUmX5rsv.net
>>340 Squeak/Pharo Smalltalk >>346 を参考に

| 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'} "

467 :デフォルトの名無しさん:2018/11/13(火) 16:32:36.89 ID:3gkxjay9.net
>>283
何かの行列足せば出来るんじゃね

468 :デフォルトの名無しさん:2018/11/13(火) 17:15:46.99 ID:GUmX5rsv.net
>>359 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. "=>
'■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■' "

469 :デフォルトの名無しさん:2018/11/13(火) 18:58:02.16 ID:6xZ1V9iJ.net
>>283 Ruby >>461とは別のアプローチで

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

470 :デフォルトの名無しさん:2018/11/13(火) 19:36:47.61 ID:57oATazI.net
>>438
Python3
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

471 :デフォルトの名無しさん:2018/11/13(火) 21:13:13.10 ID:VjbjD5Cz.net
お題
直方体の体積を求めよ。三辺の長さはそれぞれ自然数+単位(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

472 :デフォルトの名無しさん:2018/11/13(火) 21:46:22.87 ID:ZM1FA5dW.net
>>471 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

473 :デフォルトの名無しさん:2018/11/13(火) 22:46:25.57 ID:jgdNCfY5.net
プログラミング無料で学んで就職できる?
https://et-irodori.com/b/2202

474 :デフォルトの名無しさん:2018/11/13(火) 22:49:55.39 ID:YD+aXj03.net
無料ではないな。
お前の将来の給料からスクールに金が行く。

475 :デフォルトの名無しさん:2018/11/14(水) 00:08:48.41 ID:pC5Ut3Ig.net
お題: 品物が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

476 : :2018/11/14(水) 00:21:42.53 ID:1oDeoExT.net
>>438
https://mevius.5ch.net/test/read.cgi/tech/1434079972/54
rucursive に書く人が一人ぐらいいてもいいか、と

477 :デフォルトの名無しさん:2018/11/14(水) 00:25:56.42 ID:BDJVwe3s.net
rucursiveならしょうがない

478 : :2018/11/14(水) 00:58:44.50 ID:1oDeoExT.net
>>477
typo, "recursive"
ええと、>>476 に近いのは >>453 かもしれませんが、>>453 は bit 数を具体的に求めきっていますか?それとも >>476 のように真理値まで短縮してリターンしてますか?
haskell はよくわからないので…

479 :デフォルトの名無しさん:2018/11/14(水) 01:04:38.44 ID:xfEiy+CV.net
>>475
全探索したら、3つ目の例の答えが6になったんだが合ってる?
[21 33 60] [23 89] [41 78] [45 64] [50 67] [58 61]

480 :デフォルトの名無しさん:2018/11/14(水) 01:23:48.18 ID:smxkN2Ql.net
>>479
5はありえないから合ってるね

481 :デフォルトの名無しさん:2018/11/14(水) 05:43:59.41 ID:BYIKTG47.net
>>340 J
f=:3 : 0
y 100&|@^ y^y
)

482 :デフォルトの名無しさん:2018/11/14(水) 06:20:37.22 ID:W0CfAPru.net
>>481
どのバージョンのJで100|777^777なんてできるんだよ…

483 :デフォルトの名無しさん:2018/11/14(水) 06:24:21.52 ID:W0CfAPru.net
書き方が嫌らしかった。
それ動かないんじゃないですかということ。

484 :デフォルトの名無しさん:2018/11/14(水) 06:38:51.58 ID:BYIKTG47.net
>>482
v6で動いたけどな

485 :デフォルトの名無しさん:2018/11/14(水) 07:48:55.58 ID:XWwMTSMS.net
>>478
むっちゃ愚直に10進数から2進数に変換してるだけです^^;
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)

486 :デフォルトの名無しさん:2018/11/14(水) 07:53:25.46 ID:BYIKTG47.net
>>481の実行結果

f @>1 2 3 4 11 13 100 777x
1 16 87 96 11 53 0 97

487 :デフォルトの名無しさん:2018/11/14(水) 08:04:51.77 ID:W0CfAPru.net
>>481
最後の y の前に x: つければどのバージョンでも動くな
100 のとき 0 にならないからダメだけど

488 :デフォルトの名無しさん:2018/11/14(水) 08:08:08.67 ID:W0CfAPru.net
>>487
>100 のとき 0 にならないからダメだけど

いやこっちは言いがかりだった。ちゃんと動く。

489 : :2018/11/14(水) 08:16:08.16 ID:1oDeoExT.net
>>485
解説ありがとうございます。
>blist n = (n `mod` 2) : blist (n `div` 2)
この : は (cond atom list) の : なんですね、なんとかわかるようになりました

490 : :2018/11/14(水) 08:19:40.71 ID:1oDeoExT.net
>>489
×(cond atom list)
○(cons atom list)

491 :デフォルトの名無しさん:2018/11/14(水) 08:34:57.16 ID:W0CfAPru.net
言いがかりだったというか
いちゃもんを付けてごめんなさい

100|777x^777x^777x これはngで
777(100&|@^) 777x^777x これはok

とか勉強になりました (累乗の剰余の特別扱いか?)

492 :デフォルトの名無しさん:2018/11/14(水) 11:57:26.31 ID:bryEJhFF.net
>>283
Kotlin
https://paiza.io/projects/PT0g18WlTHd6eyd_iXA5aQ

493 :デフォルトの名無しさん:2018/11/14(水) 14:12:11.78 ID:OQ399L2/.net
ナップサック問題はNP困難らしいけど>>475は効率よく解けるのだろうか

494 :デフォルトの名無しさん:2018/11/14(水) 14:13:39.09 ID:bryEJhFF.net
>>493
順列と足し算の問題ではないのか?
てか、今のところそれしか思い浮かばない。

495 :デフォルトの名無しさん:2018/11/14(水) 14:30:58.50 ID:BDJVwe3s.net
現実は荷物が一日10万個くらいあるんだよなぁ

496 :デフォルトの名無しさん:2018/11/14(水) 14:57:13.49 ID:bryEJhFF.net
正にコンピュータ向けの仕事

497 :デフォルトの名無しさん:2018/11/14(水) 15:18:37.83 ID:XWwMTSMS.net
実際は大量購入した方が安くなるから、よく出るサイズを大量購入して、それ以下の重量は全部よく出るサイズにした方が安上がりだったりする。
(だからアマゾンの箱は無駄にでかい)

まあこれはプログラミング上の問題だが。

498 :デフォルトの名無しさん:2018/11/14(水) 16:08:49.28 ID:T5a0sRYf.net
>>475
段ボール箱の容量の増減は割と簡単に出来る。

499 :デフォルトの名無しさん:2018/11/14(水) 18:30:10.19 ID:whO97NBY.net
>>283 octave
https://ideone.com/8QGk1s

500 :デフォルトの名無しさん:2018/11/14(水) 19:00:13.88 ID:DmGPDAaP.net
>>438 C
https://ideone.com/ecAVVC

501 :デフォルトの名無しさん:2018/11/14(水) 22:47:03.81 ID:whO97NBY.net
>>283 ruby
https://ideone.com/OugAmn

502 :デフォルトの名無しさん:2018/11/15(木) 00:59:29.19 ID:Q7kJgHrD.net
>>283
python 3
https://ideone.com/moV2rT
ゴミ

503 :デフォルトの名無しさん:2018/11/15(木) 02:07:53.71 ID:lbhTVho0.net
>>475
Kotlin

このアルゴリズムで良いのかいまいちわからん。
箱の中に入れられる最大の品物を詰め込み続け入れられなくなったら次の箱を用意して同じことを繰り返すという方法。
結果を見ると一応出来ているようではあるが、これでうまく行く理由がはっきりわからない。

https://paiza.io/projects/rWdvvAZRxR1Qhr8B6PaM2Q

入力は1行の先頭に容積、その後スペース区切りで品物の体積。
結果は箱の数とそれぞれの箱に詰め込んだ品物。

504 :デフォルトの名無しさん:2018/11/15(木) 05:46:40.53 ID:uj0cmGI/.net
>>503
C: 7
a: 3 3 2 2 2 2
最適は[3,2,2]と[3,2,2]の2箱でないといけない

505 :デフォルトの名無しさん:2018/11/15(木) 07:10:16.88 ID:dYhTSjHD.net
>>503
それだと 6, 5, 3, 2, 2, 2のとき[6, 3], [5, 2, 2] [2] になるが[6, 2, 2] [5, 2, 3]が最小

506 :デフォルトの名無しさん:2018/11/15(木) 07:14:44.92 ID:dYhTSjHD.net
>>505
C=10を書き忘れた上に既に同じ指摘が書かれてた

507 :499:2018/11/15(木) 09:09:38.39 ID:RDhHOc3n.net
>>504>>505>>506
なるほど。じゃあダメだな。

508 :497:2018/11/15(木) 18:39:12.67 ID:cWkAhR+7.net
>>283 ruby
https://ideone.com/WmHR8h
・ほんのりリファクタ

509 :114:2018/11/15(木) 23:46:11.08 ID:lNkjj0jr.net
>>475
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))

510 :114:2018/11/15(木) 23:46:25.95 ID:lNkjj0jr.net
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)]

511 :デフォルトの名無しさん:2018/11/15(木) 23:52:24.73 ID:Q7kJgHrD.net
>>283
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()を書かないといけない宿業

512 :114:2018/11/16(金) 08:32:20.01 ID:00yShIqx.net
>>510
結果がはみ出てた。。。

[(30,3),(120,4),(120,7)]

大きい順に入れて、はみ出たら一番小さいのを入れてみる(入ったら入れて、はみ出たらアカウント)アルゴリズムにしたけど、
大きい順に入れて、はみ出たら入る最大の数字に出会うまで探索。探すものが無くなったらカウントってアルゴリズムに変えても結果は変わらず。
どうやって三番目が6個で済むんだろ。
出来た人、アルゴリズム教えて><

513 :デフォルトの名無しさん:2018/11/16(金) 10:37:27.50 ID:7Qu0EE2P.net
>>508
渦巻きスキャンも短い
http://ozy4dm.hateblo.jp/entry/2018/04/26/145518

514 :デフォルトの名無しさん:2018/11/16(金) 11:04:51.39 ID:qaNu/as0.net
>>512
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以内ぎりぎりのところで区切っていく
ってやり方で出てくる

このやり方もこれでは出来たけど最適解が必ず見つかるか分からない

515 :114:2018/11/16(金) 11:42:51.07 ID:00yShIqx.net
>>514
ありがとう。

やってみたけど、こっちでは順列だと1個増えた。
(と言うか、自分もソートしてから渡してるので順列なんだよね。念のため小さい順にしたら増えた)

うーん。。。
やってる事同じっぽいのに、なぜだ。。。

516 :114:2018/11/16(金) 11:55:02.54 ID:00yShIqx.net
自分は最後の一個入れようとして、入りきらなかったら入る分一個、はみ出た分一個で2個カウントしてるんだけど、そこが1個とカウントしてるとかだったり。。。
そう言う勘違いであってほしいな。。。

box n c ns [] [x] | c < sum (x:ns) = n + 2 -- x+nsで入りきらないので、nsで一個、xで一個。

じゃないと私じゃお手上げ\(^o^)/

517 :デフォルトの名無しさん:2018/11/16(金) 11:57:38.57 ID:qaNu/as0.net
入るとか入らないとかじゃなくてこの並びが出てきたら左から順に区切って行くだけだよ
89 23 67 45 78 41 60 21 33 64 50 61 58

518 :デフォルトの名無しさん:2018/11/16(金) 12:22:55.60 ID:tOyusnlA.net
>>515
510のやり方で最小値は求まるのでコードが間違ってる

519 :114:2018/11/16(金) 12:23:45.77 ID:00yShIqx.net
おおう。。。勘違い。
順列の意味勘違いしてた。
数学の順列か。分かった。
やってみる。
ありがとう。

520 :デフォルトの名無しさん:2018/11/16(金) 12:25:57.98 ID:tOyusnlA.net
>>514
必ず見つかる
最小になるパターンの内各箱の中を逆順にソートした数列を考えてみると自明

521 :114:2018/11/16(金) 15:20:04.95 ID:00yShIqx.net
多分これで出るはずだけど、家の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])]

せっかく >>514 さんに順列と言うヒント貰っておいて活かしきれてない。。。ごめん。

522 :114:2018/11/16(金) 15:22:31.31 ID:00yShIqx.net
>>514 さんに折角、順列って言うヒント貰っておいて活かせなかった。
ごめん。

523 :デフォルトの名無しさん:2018/11/16(金) 15:27:37.42 ID:7Qu0EE2P.net
箱に入れた量で大小関係を付けると6個で36通り

524 :デフォルトの名無しさん:2018/11/16(金) 15:40:46.44 ID:i0pW9pnK.net
>>475
https://ideone.com/gsuOUp

力技、順列力技ゆえN<=20程度しか求められない。
TSPのやつの変形(2^n*n)、
冗長な計算してるのだろうが、実装できない

ついでに、min(乱択(5000回),貪欲解*2) 回答も書いてみた。
最初のと比較をしてみると、3000テストで42個、間違えた。
(ideone上は100テストで2つ間違っている)

※N,Cが小さければ、
この程度で、そのくらい当たりやすい問題なのだろう。
(逆に間違いを探すのが大変)

余談
これは『ビンパッキング問題』そのもの
でかいNに対しては、ググればもっといい近似値の求め方がある。

525 :デフォルトの名無しさん:2018/11/16(金) 17:13:07.29 ID:36ZZe95D.net
ビンパッキングって焼きなまし法(近傍が分からない)のとビームサーチ、どっちが効率良いだろうか

526 :デフォルトの名無しさん:2018/11/16(金) 17:37:36.91 ID:t5p43h9A.net
お題:nの階乗の末尾の連続した0の個数を求める。(過去スレから)

527 :デフォルトの名無しさん:2018/11/16(金) 17:46:29.02 ID:TvsPH/qp.net
>>526 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

528 :デフォルトの名無しさん:2018/11/16(金) 19:19:00.00 ID:KTZidSV2.net
お題
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 (解は複数あるが、そのうちの一つを出力すればよい)

529 :デフォルトの名無しさん:2018/11/16(金) 20:05:31.22 ID:JjlNk60X.net
>>528 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]

530 :デフォルトの名無しさん:2018/11/16(金) 21:39:18.95 ID:0oMzWKAu.net
>>528 C
https://ideone.com/i2ui3M

531 :デフォルトの名無しさん:2018/11/17(土) 09:45:00.71 ID:u+BaxmkL.net
>>475
やった。
順列使わないで三番目が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])]

532 :デフォルトの名無しさん:2018/11/17(土) 09:45:32.76 ID:u+BaxmkL.net
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])]

533 :デフォルトの名無しさん:2018/11/17(土) 09:46:31.74 ID:u+BaxmkL.net
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]

534 : :2018/11/17(土) 11:31:38.44 ID:ByrEztlA.net
>>500
やっと理解しました…すべての xor 演算を利用しているわけではないのですね…

535 :デフォルトの名無しさん:2018/11/17(土) 11:41:54.02 ID:u+BaxmkL.net
>>526
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)

536 :デフォルトの名無しさん:2018/11/17(土) 12:12:32.80 ID:PHz1iip2.net
>>535
よーわからんが末尾じゃなくてすべての0を数えてない?

537 :デフォルトの名無しさん:2018/11/17(土) 12:27:52.98 ID:z9owpr8+.net
>>526 ぺちぷ
<?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

538 :デフォルトの名無しさん:2018/11/17(土) 12:46:05.88 ID:u+BaxmkL.net
>>536
コリャうっかりw

zlen 差替え。

zlen x = (length.(takeWhile (== '0')).reverse.show.product) [1..x]

539 :デフォルトの名無しさん:2018/11/17(土) 12:48:16.01 ID:u+BaxmkL.net
実行結果

(0,0)
(1,0)
(2,0)
(3,0)
(4,0)
(5,1)
(10,2)
(100,24)
(1000,249)
(10000,2499)

540 :デフォルトの名無しさん:2018/11/17(土) 15:08:29.22 ID:thhERN1M.net
>>526 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";
}
>>526 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よりもエレガントな解法をしばらく考えていたけど一旦断念して投稿します

541 :デフォルトの名無しさん:2018/11/17(土) 17:48:20.07 ID:corCuJCM.net
お題
月(01から12)、日(01から31)、時(00から59)、分(00から59)、秒(00から59)の10桁の日付データで
全部の桁が異なる場合を全て求める。だ

542 :デフォルトの名無しさん:2018/11/17(土) 17:53:02.90 ID:corCuJCM.net
すいません。最後の文字はゴミです無視してください

543 :デフォルトの名無しさん:2018/11/17(土) 18:44:23.27 ID:eb0sqdRj.net
>>541
時って00から23じゃないの?

544 :デフォルトの名無しさん:2018/11/17(土) 19:03:48.66 ID:corCuJCM.net
>>543
その通りです。すいません。
時(00から23)に訂正します。

545 :デフォルトの名無しさん:2018/11/17(土) 19:42:56.43 ID:qglse9qW.net
>>541 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
... 略

546 :デフォルトの名無しさん:2018/11/17(土) 20:18:24.56 ID:e9k3MEr9.net
東西ローマ帝国勃興期か
胸が熱くなるな

547 :デフォルトの名無しさん:2018/11/17(土) 20:30:15.26 ID:z9owpr8+.net
>>540
ルジャンドルの定理がエレガントでは無いと申すか

548 :デフォルトの名無しさん:2018/11/17(土) 20:54:52.23 ID:u+BaxmkL.net
>>541
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の人(>>545)ので確認したので多分合ってる。

549 :デフォルトの名無しさん:2018/11/17(土) 20:56:09.09 ID:u+BaxmkL.net
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]]


>>545 の人ので答え合わせしたので、多分合ってる。

550 :デフォルトの名無しさん:2018/11/17(土) 20:57:39.57 ID:u+BaxmkL.net
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]]


>>545 の結果で答え合わせ済み。

551 :デフォルトの名無しさん:2018/11/17(土) 20:58:20.76 ID:u+BaxmkL.net
>>545 の結果で答え合わせ済み。

552 :デフォルトの名無しさん:2018/11/17(土) 21:15:29.25 ID:qglse9qW.net
>>545の全結果
過不足がないことは確認済み
https://ideone.com/sNgmqP

553 :デフォルトの名無しさん:2018/11/17(土) 22:37:13.60 ID:BeWwS75G.net
>>541 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個

554 :デフォルトの名無しさん:2018/11/17(土) 23:10:25.25 ID:u+BaxmkL.net
>>548

03/26 17:48:59

みたいに書式化してるんだけど、RubyもPerlも数字だけなのな。。。
その方が速いのは分かるけど。

555 :デフォルトの名無しさん:2018/11/17(土) 23:53:27.88 ID:BeWwS75G.net
>>547
数学的にルジャンドルの定理と同じ原理に帰結する解法であっても
もっとエレガントなコードアーキテクチャ、たとえば桁の三角形の5と10を
再帰的に渡り歩いてshiftしながら足しこんでいくようなすごくシンプルで、
もっと短いコード実現を探してたという意味です。

つか5とか10とか100とか通過するたびに0が一桁二桁増えることに
パターンがあるのに気がついてうまく使おうとしたけど、
それがルジャンドルの定理のひとつだとは知りゃせんでした。

556 :デフォルトの名無しさん:2018/11/18(日) 00:08:39.78 ID:2kF9kdFV.net
25 125が出てこない辺り理屈わかってなさそう

557 :デフォルトの名無しさん:2018/11/18(日) 00:17:41.21 ID:XHHQeobW.net
>>555
5は*5ね
50+は…

558 :デフォルトの名無しさん:2018/11/18(日) 05:42:08.97 ID:HhgIFMcS.net
分かっちゃ居たけど、聞いたこともない定理が出る辺り高卒にはエレガントな回答は無理ぽ。。。

559 :デフォルトの名無しさん:2018/11/18(日) 10:00:29.21 ID:5NL96rQC.net
>>558
codeIQで類似の問題を解いた当時は知らなかったけど、
普通に行き着いたけどな

560 :デフォルトの名無しさん:2018/11/18(日) 10:39:30.27 ID:Q5hV0WNe.net
>>541 ruby
https://ideone.com/dCnEfd

561 :デフォルトの名無しさん:2018/11/18(日) 11:15:29.83 ID:HhgIFMcS.net
>>526
せっかくルジャンドルの定理を知ったので作り直してみた。
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]

562 :デフォルトの名無しさん:2018/11/18(日) 13:05:15.26 ID:oKOqkAfz.net
お題:同調圧力

要素0,1からなる3次以上の正方行列がある。
縦、横、対角線に0が1個だと1に変化する。この変化が繰り返される。
最後にすべての要素が1になる最小数の1の数と初期配置を求めよ。

563 :デフォルトの名無しさん:2018/11/18(日) 13:38:56.07 ID:XHHQeobW.net
>>558
定理名を知らなくても考えれば見出せるよ

564 :デフォルトの名無しさん:2018/11/18(日) 14:07:39.31 ID:/U8hetN/.net
>>558
ttp://examist.jp/mathematics/math-a/integer/kaijyou-soinsu/
ttps://www.youtube.com/watch?v=pWV0mlibNGQ

高校数学の範囲内だろ
「高卒」なる言い訳が通用するほど高校数学は甘くない

565 :デフォルトの名無しさん:2018/11/18(日) 14:25:30.20 ID:qNfVdQsW.net
まあ入試でよく見る問題だよね

566 :デフォルトの名無しさん:2018/11/18(日) 14:54:31.18 ID:HhgIFMcS.net
>>559

>>563-564

そうだね。
高卒だからは言い訳だ。
そう言うのを思いつけない頭の悪さでプログラマーに成れなかった。
それだけだな。

567 :デフォルトの名無しさん:2018/11/18(日) 15:01:13.02 ID:XHHQeobW.net
>>566
短時間で車輪を思い付く/付かないはある意味、向き/不向きでもある
そういうひらめきタイプじゃなくてもちゃんと食べているプログラマーはいっぱいいるぞ

568 :デフォルトの名無しさん:2018/11/18(日) 16:24:57.02 ID:HhgIFMcS.net
>>567
ありがとう。
でももう、プログラマー目指す年齢じゃないから^^;

iPadのHaskell(Raskell)で力付くでも12000!までは解ける辺り、
効率悪くてもとりあえず動く物を作れるようになったのは良い時代になったと思う。

569 : :2018/11/18(日) 19:54:03.12 ID:KS5/UdBT.net
>>564
その動画、素因数の5を数えればよい、と言い切っちゃっているが、2は数えなくてもいいのか?あるいは 2 を数えなくてもいい理由を述べていないよね
それに、どうして素因数分解は必ずひととおりになるのですか?二通りになるかもしれないのでは?

570 :デフォルトの名無しさん:2018/11/18(日) 19:58:30.97 ID:/tSlZOJ0.net
そうだね
おまけに足し算がアーベル群を成していないかもしれないから和と自然数の定義から確認しないと駄目だね

571 :デフォルトの名無しさん:2018/11/18(日) 21:11:02.75 ID:cU5Dmtcu.net
今、((2n-1)2^m, n5^m)をペアで考えるよ
そうすると、1≦n, mで常に(2n-1)2^m≦n2^(m+1)≦n4^m≦n5^mになる
で、ということはx!の中にある5の倍数が含まれるなら、対応した2の倍数もまた含まれていて素因数の個数が同じ
なので素因数は5だけ数えれば良い
素因数分解が一通りなのは自明なので定義からやり直せ

572 :デフォルトの名無しさん:2018/11/18(日) 21:18:15.05 ID:HyP7YfXU.net
2以上のnに対しn!=(2^p)*(5^q)*N(Nと2と5は互いに素)とする非負整数p,q,Nがただ一組存在して
p>qであることはほとんど自明だが証明しろと言われると…

573 :デフォルトの名無しさん:2018/11/18(日) 21:24:02.32 ID:HhgIFMcS.net
>>569

https://mathtrain.jp/legendretheorem

末尾の 0の数は,10で何回割り切れるか,すなわち 2で割れる回数と 5で割れる回数の少ない方である。
(直感的に考えて 5 で割れる回数のほうが少ないので 5で割れる回数だけ考えればよいが練習のため,)

574 :デフォルトの名無しさん:2018/11/18(日) 21:50:28.21 ID:tNgGKwOg.net
普通に自明

575 : :2018/11/18(日) 21:56:44.59 ID:KS5/UdBT.net
>>571
>素因数分解が一通りなのは自明
自明ではないと思います…「素数の定義は 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 の個数の大小についてなにもいえないのでは?

576 : :2018/11/18(日) 21:58:55.74 ID:KS5/UdBT.net
>>573
>直感的に考えて 5 で割れる回数のほうが少ないので
あくまでも「直感的に」ですよね
厳密にそういえますか?

577 :デフォルトの名無しさん:2018/11/18(日) 21:59:59.80 ID:tNgGKwOg.net
ルジャンドルの定理を考えれば普通に自明

578 :デフォルトの名無しさん:2018/11/18(日) 22:33:22.36 ID:ryC6c2pW.net
>>569
証明はされているしググれば出てくる
内容についてはこのスレの趣旨的にここで深く論じる事ではないと思う

579 :デフォルトの名無しさん:2018/11/18(日) 22:34:24.44 ID:I7k3lQnf.net
◆QZaw55cn4c は荒らしなのでスルーでお願いします

580 :デフォルトの名無しさん:2018/11/18(日) 22:42:22.16 ID:qz83zcM7.net
お題
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

581 :デフォルトの名無しさん:2018/11/18(日) 23:39:58.87 ID:N6zzFXD1.net
◆QZaw55cn4c は、このスレでも荒らしてるのか。

582 : :2018/11/18(日) 23:51:49.66 ID:KS5/UdBT.net
>>578
>内容についてはこのスレの趣旨的にここで深く論じる事ではない
一理あるとは思います

583 :デフォルトの名無しさん:2018/11/18(日) 23:58:08.89 ID:N6zzFXD1.net
何かと思ったら、自然数の素因数分解の一意性に文句を付けているのかよ。

584 :デフォルトの名無しさん:2018/11/19(月) 00:12:50.43 ID:En0/bEno.net
>>575 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にでも載ってる
というか自分である程度考えてよ……粗探ししてないでさ

585 :デフォルトの名無しさん:2018/11/19(月) 00:15:20.48 ID:DnlmRpTS.net
>>580 Java
https://ideone.com/uuHw3q

586 : :2018/11/19(月) 00:25:31.38 ID:MufxDZB0.net
>>584
> 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 はすでに数え上げているので、一対一対応になっていないと思います
一対一対応にならない以上、>>575 の推論は飛躍しているのではないでしょうか
繰り返しますが

>>575
「n・5^m の形であってかつ (2n-1)・2^m の形である整数が存在する場合は一対一の対応にならない
厳密に一対一の対応にならないのなら、因数 2 の個数と因数 5 の個数の大小についてなにもいえないのでは?」
です

587 :デフォルトの名無しさん:2018/11/19(月) 00:36:52.56 ID:En0/bEno.net
ん、あれ確かにおかしいな
即レスはミスの源だな、再検討してくる

588 :デフォルトの名無しさん:2018/11/19(月) 01:06:40.64 ID:4D1JIT10.net
>>580
大変勉強になりました。

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"

589 :デフォルトの名無しさん:2018/11/19(月) 01:10:37.57 ID:rdQ6rffg.net
n/2>=n/5
n/2^2>=n/5^2
以下略

5の方が多くなることはないわな

590 :デフォルトの名無しさん:2018/11/19(月) 01:11:16.13 ID:4D1JIT10.net
あっ、>>588はJavascript(整形にpadStart使ったのでES2017)です。

591 :デフォルトの名無しさん:2018/11/19(月) 03:32:52.09 ID:hjbRrJKx.net
>>580
Perl5
変換は Perl 任せ。
https://paiza.io/projects/bErYwPOrGUtJk52KIHj-yw

592 :デフォルトの名無しさん:2018/11/19(月) 10:25:48.15 ID:X6/A5UND.net
問題と言うより、単純な興味なんだけど。
Cでこんなコード書いて
(Hello World!!が横に流れ続けて下でマークがクルクル回る)

https://ideone.com/ZaZSaa

それをHaskellで書いてみたのね。

https://ideone.com/ui16nc

ハイブリッドな言語増えて来たので、他の言語だとどう書くのかなって。
出来れば破壊的なのと、関数型っぽく非破壊的なのと見てみたい。
(ミュータブル版とイミュータブル版)

593 :デフォルトの名無しさん:2018/11/19(月) 10:29:45.48 ID:/4Aoxd3M.net
>>592
何をするのか網ちょい詳しく

594 :デフォルトの名無しさん:2018/11/19(月) 11:00:22.26 ID:X6/A5UND.net
>>593
精一杯考えて説明したつもりなので、Cのコードコンパイルして実際にコマンドで動かしてもらえれば。

それと同じ動きになるコードを書いて欲しいと言うことです。
(出来れば初期化以外の変数代入有りと無しで)

595 :デフォルトの名無しさん:2018/11/19(月) 23:48:36.76 ID:S7M28HrM.net
>>580 rust
https://ideone.com/Nr1HC5

>>580 ruby
https://ideone.com/KFF0F8

596 :デフォルトの名無しさん:2018/11/20(火) 00:53:04.42 ID:yKairBEQ.net
>>580
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

597 :デフォルトの名無しさん:2018/11/20(火) 01:11:13.89 ID:avg9qTbR.net
>>588
utf-8がデフォルトだから引数要らないよ

598 :587:2018/11/20(火) 02:29:27.79 ID:lQrB+xRm.net
>>580
C
全て自分で変換
https://paiza.io/projects/zZQoCluzBMnRmfSixWQAiA

599 :デフォルトの名無しさん:2018/11/20(火) 02:34:35.37 ID:yKairBEQ.net
>>541
python 3
https://ideone.com/b6Gxn3

600 :デフォルトの名無しさん:2018/11/20(火) 11:19:51.35 ID:XC6mINx9.net
>>580 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

601 :デフォルトの名無しさん:2018/11/20(火) 13:23:53.49 ID:FaN+D89v.net
>>592 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]}

602 :デフォルトの名無しさん:2018/11/20(火) 13:50:30.38 ID:+huVy/La.net
訂正

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]}

603 :デフォルトの名無しさん:2018/11/20(火) 23:12:15.60 ID:Vm2a6rBd.net
世界一気持ち良いフェラチオのアルゴリズムを作れ

604 :デフォルトの名無しさん:2018/11/21(水) 05:38:04.65 ID:yscr9wE/.net
>>541
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

605 :デフォルトの名無しさん:2018/11/21(水) 08:13:38.75 ID:KQDfl3zy.net
>>604
.reject { | mon, d, h, min, s | ( mon + d + h + min + s ).chars.uniq! }が無駄過ぎ
.reject(&:uniq!)で良い。それでも良いコードではない
あとこれだと2月31日とかが含まれてしまう可能性考慮してないよね(実際には含まれないが)

606 :デフォルトの名無しさん:2018/11/21(水) 13:17:27.94 ID:r/9FyEhs.net
>>545 をちょっと変更。月を分ける必要がなかった
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

607 :デフォルトの名無しさん:2018/11/21(水) 13:59:24.73 ID:89fYavxU.net
月日時分秒で文字列で並べる前に11月とか11日とか22日とか必ず各桁が同じ値になるやつ最初から省けば無駄がなくなって少し速くならんか?

608 :デフォルトの名無しさん:2018/11/21(水) 17:57:29.48 ID:89fYavxU.net
>>541
Kotlin
https://paiza.io/projects/0NqpaSgw6xT_U6SsNmDepA

色々試した結果、やはり最初に必要な文字列全て作ってしまうのが一番速かった。

609 :デフォルトの名無しさん:2018/11/21(水) 19:06:42.18 ID:7Tiab2M6.net
文字列を正規表現で判定するのは遅いんじゃね?

610 :デフォルトの名無しさん:2018/11/21(水) 19:31:36.89 ID:fvygYhm9.net
12*31*60*60*60=80,352,000通りの桁が異なるか判定より、10桁並び替え10!=3,628,800通りが日付になってるか判定の方が速そう

611 :デフォルトの名無しさん:2018/11/21(水) 19:43:32.60 ID:fvygYhm9.net
>>610
計算ミスった、12*31*24*60*60=32,140,800か
お詫びにコード、C++
https://ideone.com/8iQ9OX

612 :デフォルトの名無しさん:2018/11/21(水) 19:50:15.56 ID:XrCNlm4w.net
最初の4桁は高々365パターンしかないからその各組について残り6桁720通り検討すれば262,800通りで済む

613 :デフォルトの名無しさん:2018/11/21(水) 19:55:14.22 ID:XrCNlm4w.net
ちなみに最初の4桁で数字に重複がないのは130通りしかないからここできちんと処理すれば93,600通りで済む

614 :デフォルトの名無しさん:2018/11/21(水) 20:17:28.45 ID:Pa+SHuBo.net
普通にやれば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 通り

615 :デフォルトの名無しさん:2018/11/21(水) 20:32:17.09 ID:89fYavxU.net
>>609
そうかも。
やっぱただの二重ループで調べるのが一番速いかな?

最初はSetに一文字づつ入れて同じのが既にあったらっていう判定してたんだけどね、正規表現なら一発で判定できると気づいてそちらにした。
まあでも正規表現だから中で複雑な動きになってるかも知れないな。

616 :デフォルトの名無しさん:2018/11/21(水) 20:41:48.33 ID:89fYavxU.net
良く考えたら各桁が数字しかないから10ビットのビットフラグ立てるかBoolenArrayで10要素あれば重複調べられるな。後で変えよう。

617 :デフォルトの名無しさん:2018/11/21(水) 21:02:48.05 ID:fvygYhm9.net
お題
以下の操作を好きなだけ行う時、0をXにするまでに必要な最小コストを求めよ
・コスト1で値を1増減させる
・コストn+Yで値をn倍する
XとYは与えられ、0以上の整数であることが保証される
nは自然数の範囲で任意に決めて良い
例(X, Y)
1 3
20 2
63 2
出力
3
11
17

618 :デフォルトの名無しさん:2018/11/21(水) 21:03:37.61 ID:Gj+ctZjI.net
お題
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

619 :デフォルトの名無しさん:2018/11/21(水) 21:13:22.72 ID:fcujQIsM.net
>>541
一年って365日?372日?

620 :デフォルトの名無しさん:2018/11/21(水) 21:47:53.81 ID:DBPerFhf.net
>>618 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

621 :デフォルトの名無しさん:2018/11/21(水) 21:49:54.93 ID:DBPerFhf.net
>>620
間違ってる。ゴメン却下

622 :デフォルトの名無しさん:2018/11/21(水) 22:06:23.31 ID:DBPerFhf.net
>>620 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

623 :デフォルトの名無しさん:2018/11/21(水) 22:08:43.18 ID:DBPerFhf.net
>>622
途中の
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

624 :デフォルトの名無しさん:2018/11/21(水) 22:22:35.53 ID:fvygYhm9.net
>>618 Java
https://ideone.com/NWI4DM

625 :デフォルトの名無しさん:2018/11/21(水) 22:30:22.51 ID:7Tiab2M6.net
>>617 Java
https://ideone.com/g0xX7G

1 3は3じゃなくて1でいいんよね?

626 :デフォルトの名無しさん:2018/11/21(水) 22:30:46.05 ID:luckbEjf.net
>>541 c
https://ideone.com/cyu360

627 :デフォルトの名無しさん:2018/11/21(水) 22:32:28.49 ID:XrCNlm4w.net
>>618
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"で間違えるな

628 :デフォルトの名無しさん:2018/11/21(水) 22:39:54.74 ID:Pa+SHuBo.net
>>624
101 10 と 10 101 で結果が異なる
https://ideone.com/crTQpT

629 :デフォルトの名無しさん:2018/11/21(水) 22:54:14.65 ID:7Tiab2M6.net
>>618 Java
https://ideone.com/Ievsls

630 :デフォルトの名無しさん:2018/11/21(水) 22:55:54.34 ID:7Tiab2M6.net
あ、>>625問題読み間違えてるわ
コスト1で1増やすんじゃなくて1増減出来るのね…

631 :デフォルトの名無しさん:2018/11/21(水) 23:11:59.00 ID:DBPerFhf.net
>>618 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

632 :デフォルトの名無しさん:2018/11/21(水) 23:12:22.88 ID:jrFgFGaV.net
お題:分数を小数に直したときの循環部分の周期を求める
割り切れる場合は0とする
例:
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => ?
99998360006603 / 9999901 => ?

633 :デフォルトの名無しさん:2018/11/21(水) 23:20:10.22 ID:7Tiab2M6.net
>>617 Java (>>625の修正)
https://ideone.com/Wmb9ZO

634 :デフォルトの名無しさん:2018/11/21(水) 23:21:24.98 ID:jrFgFGaV.net
123412345/999999999 => 9
>>632の例に追加

635 :デフォルトの名無しさん:2018/11/21(水) 23:30:03.05 ID:fvygYhm9.net
>>625
あ、ごめん1 3は1だね
3 1と書き間違えた

636 :デフォルトの名無しさん:2018/11/21(水) 23:35:51.69 ID:7Tiab2M6.net
>>632 Java
https://ideone.com/DX4VYY

637 :デフォルトの名無しさん:2018/11/21(水) 23:40:44.97 ID:7Tiab2M6.net
>>636
循環部の周期じゃなくて、小数点以下の循環部の終わる位置を調べてる気がしてきた…修正が必要ですw

638 :デフォルトの名無しさん:2018/11/21(水) 23:56:52.64 ID:DBPerFhf.net
>>632 >>634 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

639 :デフォルトの名無しさん:2018/11/22(木) 00:02:55.27 ID:YC9N9M8Q.net
>>637
そういわれると>>638も自信がなくなってきたので念のため修正
>>632 >>634 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

640 :デフォルトの名無しさん:2018/11/22(木) 00:08:36.27 ID:iFlHYuR3.net
1234/555 => 3

>>636だと4になる
>>638だと無限ループって怖くね?

641 :デフォルトの名無しさん:2018/11/22(木) 00:10:07.02 ID:YC9N9M8Q.net
>>640
サンプルデータでは問題ないが
場合によっては無限ループの恐れアルかも

642 :デフォルトの名無しさん:2018/11/22(木) 00:11:14.76 ID:YC9N9M8Q.net
>>639 は無限ループの恐れなし

643 :デフォルトの名無しさん:2018/11/22(木) 00:13:47.95 ID:iFlHYuR3.net
>>642
ideoneに食わせたらTime limit exceededになる・・・なんでや
https://ideone.com/2b6wUH

644 :デフォルトの名無しさん:2018/11/22(木) 00:16:08.77 ID:YC9N9M8Q.net
>>642 いや変なところから巡回し始める数値があれば>>639 も無限ループ
以下修正版。しかし少し進んでからようやく巡回し始める数値ってあるんだろうか…
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

645 :デフォルトの名無しさん:2018/11/22(木) 00:19:18.30 ID:YC9N9M8Q.net
>>643
しらんがなサイトのtimeout秒設定とちゃいますか
いま使っているPC(CPU Core U1300 1.06Gz)では
一番遅い>>644のソースで

$ 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

646 :自分は出題者じゃなくて632です:2018/11/22(木) 00:20:17.51 ID:iFlHYuR3.net
>>644
ideoneに食わせたら1234/555動いたが>>636と同じで4になってる
https://ideone.com/eojdE5

1234/555 = 2.2[234]234234... で3よな?

647 :デフォルトの名無しさん:2018/11/22(木) 00:26:34.37 ID:YC9N9M8Q.net
>>646 うちの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
になるよ

648 :デフォルトの名無しさん:2018/11/22(木) 00:29:14.36 ID:iFlHYuR3.net
>>647
5が1個足りてませんぜw
1234/55=22.4[36]3636... => 2

649 :デフォルトの名無しさん:2018/11/22(木) 00:33:49.88 ID:YC9N9M8Q.net
>>648
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

650 :デフォルトの名無しさん:2018/11/22(木) 00:37:35.25 ID:iFlHYuR3.net
>>649
じゃから、
1234/555 = 2.2[234]234234... だから答えは3にならんとあかんじゃろ

651 :デフォルトの名無しさん:2018/11/22(木) 00:37:56.28 ID:YC9N9M8Q.net
>>649
bug に気がついた。循環する範囲だけの長さを求めていない

652 : :2018/11/22(木) 00:44:22.07 ID:r9/Xo7jY.net
>>587
私もよーく考えました、>>571 の推論で正しいと思い直しました。
「数字と数字を対応させる」のではなく「数字の中の因数5 と別の数字の中の因数 2 とを対応させる」んですね,週末になったらちゃんと書きます

ごめんなさい…

653 :デフォルトの名無しさん:2018/11/22(木) 00:47:46.57 ID:YC9N9M8Q.net
>>632 >>634 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

654 :604:2018/11/22(木) 02:49:00.32 ID:zC+py8mV.net
>>541
Kotlin
https://paiza.io/projects/TlIXUiQhX1uJMvGlxSRnHA

>>608の改造版

重複調査はビットフラグ使ってやるようにした。
出力は番号を振って出すようにした。

655 :デフォルトの名無しさん:2018/11/22(木) 03:19:07.41 ID:zC+py8mV.net
>>617
問題の意味がわからない。

656 :デフォルトの名無しさん:2018/11/22(木) 04:04:02.81 ID:dySjvlSp.net
>>632 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

657 :デフォルトの名無しさん:2018/11/22(木) 15:33:08.34 ID:yB1Us7SO.net
17941970723/5711177472=
3.
14155370
[
07847337299484291004011020163934418881248871826338
51095286012502326945724442022732505973857434350098
中略
81545008587679202836020711912487386979243218306349
2795623634229099298422222099702245
](周期=1584)
であってる?

658 :デフォルトの名無しさん:2018/11/22(木) 15:43:48.55 ID:lSIebnj9.net
>>657
あってる

659 :デフォルトの名無しさん:2018/11/22(木) 15:54:06.63 ID:yB1Us7SO.net
>>658
1009

660 :デフォルトの名無しさん:2018/11/22(木) 23:20:25.14 ID:8KGvhG/L.net
>>632
https://ideone.com/hY41ni

661 :デフォルトの名無しさん:2018/11/23(金) 19:09:31.91 ID:VH48PKdk.net
>>617 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

662 :デフォルトの名無しさん:2018/11/23(金) 19:12:10.98 ID:K3SLU2ZA.net
>>618
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

663 :デフォルトの名無しさん:2018/11/23(金) 19:34:32.58 ID:oncB24e2.net
お題: 入力を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>

664 :デフォルトの名無しさん:2018/11/23(金) 19:51:58.05 ID:ZGD1vCd6.net
お題
非負整数の10進数表記を"マイナス10進数"表記に変換せよ

321 => 481 (400 - 80 + 1)
910 => 19090 (10000 - 9000 + 000 - 90 + 0)
909 => 909
0 => 0
11111 => 29291
123456789 => 284664829

665 :デフォルトの名無しさん:2018/11/23(金) 20:55:58.69 ID:5iW/esUy.net
>>663
https://ideone.com/SHKftF
・行頭と行末は適当に削除しちゃってる

666 :デフォルトの名無しさん:2018/11/23(金) 21:05:33.15 ID:Hqw3cjct.net
>>663 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>

667 :デフォルトの名無しさん:2018/11/23(金) 21:07:03.88 ID:Hqw3cjct.net
>>666 途切れたので訂正
puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).('</li><li>')}.join("</ul>\n<ul>")

668 :デフォルトの名無しさん:2018/11/23(金) 21:10:53.54 ID:Hqw3cjct.net
>>667 連投ごめん 訂正
puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).join('</li><li>')}.join("</ul>\n<ul>")

669 :デフォルトの名無しさん:2018/11/23(金) 22:18:17.60 ID:Hqw3cjct.net
>>664 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

670 :デフォルトの名無しさん:2018/11/23(金) 23:32:40.54 ID:RKSYf6WR.net
>>663 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>

671 :デフォルトの名無しさん:2018/11/24(土) 00:04:24.01 ID:IB4DmzOp.net
>>670
* 以降にスペース文字が含まれていても、もれなく扱うなら
@a = map{"<li>$_</li>"} /\* (\w+)/g;

@a = map{"<li>$_</li>"} /\* ([^\n]+)/g;

672 :デフォルトの名無しさん:2018/11/24(土) 02:05:34.99 ID:Q9o1GKtC.net
>>664
問題の意味がわからない。

673 :デフォルトの名無しさん:2018/11/24(土) 02:34:23.79 ID:noZFD3Jl.net
>>672
俺も分からなかったんで調べたら例えば4桁のn進数 A3 A2 A1 A0 の場合
A0 * n^0 + A1 * n^1 + A2 * n^2 + A3 * n^3
となるわけだけど、単純にこのnが-10ならマイナス10進数ということらしい

674 :デフォルトの名無しさん:2018/11/24(土) 02:35:47.10 ID:Q9o1GKtC.net
>>663
Kotlin
https://paiza.io/projects/San6JOBupEDa6gEL9f6L5Q
拡張関数使ってみました。

675 :デフォルトの名無しさん:2018/11/24(土) 02:43:21.86 ID:Q9o1GKtC.net
>>673
なるほど。そういうことか。ありがとう。

676 :デフォルトの名無しさん:2018/11/24(土) 03:26:26.65 ID:Q9o1GKtC.net
>>664
Perl5
https://paiza.io/projects/AJSUVyggQJnm7GnS8_ZC1g

677 :デフォルトの名無しさん:2018/11/24(土) 03:43:39.38 ID:Q9o1GKtC.net
>>632
Kotlin
https://paiza.io/projects/DwesufgOG64B8-KN_ErG5w
C
https://paiza.io/projects/HwczmyQnaji1IgHICqHrIg

最初 Kotlin で作って確認した後で paiza.io にコピペして実行したら 99998360006603 / 9999901 が
タイムアウトしてしまい、じゃあ C で作るか(ついでに tsearch() 使ってみるか)と思ってやってみたが
相変わらず同じ計算でタイムアウトした。

まあしかしそれ以外の計算はなんとかなったので両方公開しとく。

アルゴリズムは割った余りを10倍するのを繰り返して同じ余りが出たらそこで循環と判定するというやつ。

678 :デフォルトの名無しさん:2018/11/24(土) 04:00:55.96 ID:7YEvwBu9.net
>>663 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可能。

679 :デフォルトの名無しさん:2018/11/24(土) 05:34:48.85 ID:Dcky2N9A.net
>>664
https://pastebin.com/6HttXyVt

680 :デフォルトの名無しさん:2018/11/24(土) 05:38:41.45 ID:Q9o1GKtC.net
>>632
C (その2)
https://paiza.io/projects/21K5fAVsJlYtob_H0rZ9LA

よく考えたら出来た。
循環になっている桁の最初の余りを取っておいて次に出るまでカウントすれば良いだけで余りを全て保存しておく必要ないんだな。

681 :デフォルトの名無しさん:2018/11/24(土) 05:41:18.30 ID:Dcky2N9A.net
>>679の言語は
JavaScript( Windows Scripting Host用 )ね

682 :デフォルトの名無しさん:2018/11/24(土) 08:20:40.93 ID:01jBobXF.net
>>663
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

683 :デフォルトの名無しさん:2018/11/24(土) 11:05:11.18 ID:1C+vWWG1.net
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!!

684 :デフォルトの名無しさん:2018/11/24(土) 12:06:59.71 ID:X5g7u0K6.net
>>683
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!

685 :デフォルトの名無しさん:2018/11/24(土) 12:08:52.78 ID:X5g7u0K6.net
>>684 Ruby コピペミス
puts janken(?v, 2) -> puts janken(?v, 1)
puts janken(?w, 3) -> puts janken(?w, 2)

686 :デフォルトの名無しさん:2018/11/24(土) 12:14:16.56 ID:X5g7u0K6.net
>>684
「・グー、チョキ、パー以外が入力されたら、あいこ扱い」を見落としていたので
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

687 :デフォルトの名無しさん:2018/11/24(土) 12:16:11.70 ID:1C+vWWG1.net
>>684
あ、あいこはあいこと表示して終わっちゃうのね。。。
あいこの時はまたジャンケンし直しにして欲しい。
条件に入れればよかったかなぁ。。。

688 :デフォルトの名無しさん:2018/11/24(土) 12:26:57.03 ID:hG+y0dS8.net
>>683
> ・グー=g、チョキ=v、パー=wとする。

グー=g、チョキ=c、パー=pか
グー=m、チョキ=v、パー=wか
どっちかに統一してほしい。
グー=g、チョキ=v、パー=wだとgが表音イニシャル、v, wが象形と統一性がない。
気になってご飯が喉を通らなくてプログラミングどころじゃない…

689 :デフォルトの名無しさん:2018/11/24(土) 13:02:40.59 ID:1C+vWWG1.net
gも象形のつもりだったんだが。。。

690 :デフォルトの名無しさん:2018/11/24(土) 14:02:53.32 ID:S/Hnk7Kr.net
>>687 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.

691 :デフォルトの名無しさん:2018/11/24(土) 14:57:54.21 ID:Q9o1GKtC.net
>>688
まずは瞑想でもして心を落ち着けると良い。

692 :679:2018/11/24(土) 15:20:34.57 ID:1C+vWWG1.net
>>683
一応、自分自身でも投稿。
予想通り分岐使わないバージョン出て来た。
自分も挑戦してみようかな。

Haskell(リストに勝ち負け確定パターン(含まれてるかでグループパターン割り出し)があるか判別して、先頭要素(必ずユーザー)がパターンと同じか判定)
https://ideone.com/9EmrYI

Cとか死ねたし。(全体の勝ちグループ(各手をカウントしてグループパターン割り出し)の手を確定後、勝ちグループと同じ手に対応した文字を入力していたか判定)
https://ideone.com/AmfTOy

(能力不足の自分はあえてでは無いが)あえて条件分岐バージョンにすると言語や個人の個性出そう。
(CとHaskellでグループ分けや自分が勝ちグループ側かの判定が違うアルゴリズムになった)
その場合、アルゴリズムの説明付きだと面白そう。

693 :デフォルトの名無しさん:2018/11/24(土) 16:39:00.82 ID:ZWAqZgZk.net
>>683
Python3
https://ideone.com/PcHoga

694 :デフォルトの名無しさん:2018/11/24(土) 16:56:21.89 ID:S/Hnk7Kr.net
>>693
グーチョキパー以外をプレイヤーが出したときおかしな挙動しない?

695 :デフォルトの名無しさん:2018/11/24(土) 17:14:41.52 ID:ZWAqZgZk.net
>>694
あいこの判定を手の種類数だけでしてたせいだな
修正した
https://ideone.com/3XBPBb

696 :デフォルトの名無しさん:2018/11/24(土) 22:52:47.96 ID:5TC6Hle/.net
お題
順列を求めるのにシャッフルでデータをたくさん用意して
重複データを取り除くことで求めている人がいた
順列の数の何倍位のデータを用意すればいいか調べる

697 :デフォルトの名無しさん:2018/11/24(土) 23:20:30.16 ID:Vcpm1NYO.net
許容誤差と確率の問題じゃん

698 :デフォルトの名無しさん:2018/11/24(土) 23:23:27.73 ID:7YEvwBu9.net
>>696
二度と来なくていい

699 :デフォルトの名無しさん:2018/11/24(土) 23:37:47.52 ID:Wfpvwubu.net
>>683 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

700 :679:2018/11/25(日) 01:57:22.20 ID:ae+bi37x.net
>>699

>>687

701 :デフォルトの名無しさん:2018/11/25(日) 06:18:56.85 ID:k7/W79Is.net
>>683
Kotlin
https://paiza.io/projects/3zt5CUPdhrTFhXx2z7ayvw

入力は1行単位で最初の手が自分、スペース区切りでPCの手になる。
グー、チョキ、パーと元の文字列の対応は以下に対応。

グー: "g", "G", "グー", "ぐー"
チョキ: "v", "V", "c", "C", "チョキ", "ちょき"
パー: "w", "W", "p", "P", "パー", "ぱー"

勝敗の判定は「勝」、「負」、「相子」で出る。

702 :679:2018/11/25(日) 07:47:50.59 ID:ae+bi37x.net
>>701
ジャンケンゲームの肝?ってPCはランダムな値を使う所だと思うんですが・・・
あと、私が勝手にアイコといえばジャンケンやり直しって勝手に思い込んでて仕様に盛り込まなかったのがダメなんですが、
アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いしたいです。

>>699 さんも、アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いします。

703 :デフォルトの名無しさん:2018/11/25(日) 11:54:57.77 ID:qcobBjeQ.net
お題
標準運指(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

704 :デフォルトの名無しさん:2018/11/25(日) 12:38:51.26 ID:YCGD2W4D.net
>>703 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

705 :デフォルトの名無しさん:2018/11/25(日) 13:38:17.14 ID:k7/W79Is.net
>>702
そういうインタラクティブなやつか。
じゃあまた暇があったら作ろう。

706 :デフォルトの名無しさん:2018/11/25(日) 16:23:23.79 ID:rkqtyTFb.net
お題:Brainfuckのインタプリタを実装せよ
仕様 https://ja.wikipedia.org/wiki/Brainfuck

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
⇒ Hello World!

++++++++[>++++++++<-]>++.<++++++[>++++++++<-]>.<----[>++++<-]>-.++++++++.+++++.--------.+++++++++++++++.<----[>++++<-]>--.++++++++.
⇒ ?

707 :デフォルトの名無しさん:2018/11/25(日) 16:52:01.92 ID:1Q36MCdG.net
>>706 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

708 :デフォルトの名無しさん:2018/11/25(日) 19:29:25.63 ID:Iiz4BNf0.net
>>706 C
昔書いたやつ
https://ideone.com/r8gfF0

mandelbrotがideoneで2.9s

709 :デフォルトの名無しさん:2018/11/25(日) 21:08:13.52 ID:FiKNHiMA.net
>>708
ideoneのbrainfuckより速いじゃないかw
https://ideone.com/E28MuB

710 :デフォルトの名無しさん:2018/11/25(日) 21:09:21.48 ID:F5E3KDnq.net
>>709
笑った

711 :デフォルトの名無しさん:2018/11/25(日) 23:28:07.03 ID:DgoPPid/.net
>>664 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;
}

>>664 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);
}->($_);
}

712 :デフォルトの名無しさん:2018/11/25(日) 23:30:57.42 ID:DgoPPid/.net
>>711
ゴメン、普通のloop版の
say "$_ $d => ", @d;
は不要なdebug writeも出力するので
say "$_ => ", @d;
に訂正

結果はいずれも
$ perl 12_660.pl
321 => 481
910 => 19090
909 => 909
0 => 0
11111 => 29291
123456789 => 284664829

713 :デフォルトの名無しさん:2018/11/25(日) 23:34:40.02 ID:DgoPPid/.net
>>711
再々投ゴメン
無名関数の末尾再帰版
× use feature qw{say};

○ use feature qw{current_sub say};

714 :697:2018/11/26(月) 02:29:30.61 ID:jdmxn8AZ.net
>>683>>702
HTML + JavaScript
https://codepen.io/anon/pen/OaERvj
即実行できた方がいいかなと思ってブラウザで動く JavaScript にしてみた。
PC側は10台まで台数入力する。
表示は「グー」、「チョキ」、「パー」になっている。
判定は方法ほ Kotlin のやつとほとんど同じ。

但し勝敗や相子に関係なく再挑戦ボタンが出る。

715 :デフォルトの名無しさん:2018/11/28(水) 01:28:37.70 ID:he8qnrZH.net
>>706 c
https://ideone.com/AfZmCz

716 :711:2018/11/28(水) 23:15:07.63 ID:he8qnrZH.net
>>706 c
https://ideone.com/Plh1vx
・mandelbrotが4.24s
・セル配列をコンパクト化
・一部のforとswitchをgotoで置き換え
・データポインタの範囲チェックは廃止
・']'のとき無条件に'['へ戻ってたのを廃止

717 :デフォルトの名無しさん:2018/11/28(水) 23:53:16.47 ID:fj/EN88U.net
これで。以前からやろうとしてできてない。AI簡単そうだが。


3x3盤タイルゲーム for Windows ver2.00 14/7/5 更新
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <入門版>


4x4盤タイルゲーム for Windows ver2.00 14/7/5 更新
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <本格版>

http://www2u.biglobe.ne.jp/~shunbook/omocha/index.htm

718 :デフォルトの名無しさん:2018/11/29(木) 11:20:14.11 ID:jwCbT4Qs.net
盤の状態は4×4のやつで3^16=43046721通りだから後退解析で全状態の最善手が簡単に解ける

719 :デフォルトの名無しさん:2018/11/29(木) 19:56:01.31 ID:Hd6SZyXm.net
>>716
その "&&label" って初めてみたんだけどgcc拡張なんだな

720 :デフォルトの名無しさん:2018/11/29(木) 20:53:52.25 ID:lIzTCHsu.net
>>719
これか。こんなのあったとは知らなかった。
http://nnabeyang.hatenablog.com/entry/2012/12/05/160312
しかしあまり利用する必要なさそうな予感。

721 :711:2018/11/29(木) 23:18:59.74 ID:dyCCyrAH.net
>>706 c
https://ideone.com/ddpLYQ
・ mandelbrotが4.24s→3.42s
・いくつかの単純なループを自前の命令に置き換え

>>719-720
まさかこれ使う日が来るとはね( ^ω^)

722 :デフォルトの名無しさん:2018/11/30(金) 16:33:00.37 ID:M3yAddAk.net
さすがC言語
奥が深いな

723 :デフォルトの名無しさん:2018/11/30(金) 18:55:20.12 ID:eqr4XxJg.net
儲かるお題を書いてください。

724 :デフォルトの名無しさん:2018/11/30(金) 19:56:50.93 ID:vThfWoZE.net
お題: C言語のコメント/*〜*/, //〜 を除去するプログラムを実装せよ

725 :711:2018/11/30(金) 22:52:06.95 ID:j+r1UJtS.net
>>706
https://ideone.com/d0oDj0
・ mandelbrotが4.24s→3.42s→3.24s
・ループの置き換えを若干増やす
・初期8命令を6命令へ、なんとなく整理

726 :デフォルトの名無しさん:2018/11/30(金) 22:53:31.37 ID:cIO0a97u.net
>>724
命令すんなカス

727 :デフォルトの名無しさん:2018/11/30(金) 23:05:45.19 ID:iwzbC/nf.net
>>725
ここまで最適化するとはすごいな
今VCに移植してやってみてる
VCはラベルのアドレスは取れないのでcase文内で処理してる
でも文字がダラダラと表示されるのが嫌なので、putchar()の所を
一度バッファに溜めておいて最後にputs()で一気に出力するようにした

728 : :2018/11/30(金) 23:09:14.20 ID:MkfLpznc.net
>>724
やったことがある気がしたのですが、もうすっかり忘れてしまいました…

729 :デフォルトの名無しさん:2018/11/30(金) 23:09:48.33 ID:iwzbC/nf.net
>>716のを移植するとこうなる
他のも同様だと思う
Random1.h というのは自前のストップウォッチクラスを使うためだけなので、
std::chronoを使って適当に自作すれば良い

https://ideone.com/Vf0qIj

730 :デフォルトの名無しさん:2018/11/30(金) 23:16:05.51 ID:TjeK6E2T.net
お題: 入力にこのスレのhtmlが与えられるので数字だけ,区切りで出力しなさい。

出力例
2018,11,30,...

731 :デフォルトの名無しさん:2018/11/30(金) 23:54:45.63 ID:8gAcKqbf.net
どれだけの数字の種類に対応するのかで個性が出るな

732 :デフォルトの名無しさん:2018/12/01(土) 00:17:45.63 ID:XKE5KJf3.net
>>726
誰もお前になんか言ってねーよ
自意識過剰なんじゃボケカス

733 :デフォルトの名無しさん:2018/12/01(土) 01:26:07.16 ID:3EVAE812.net
>>724
Perl
https://paiza.io/projects/Q_MF7JmVJMMjF1aqffgfaw

Perl だと簡単だ。

但し /* /* */ */ みたいな二重のやつには対応していない。最初の /* から次に出た */ を削除して */ が残る。
(この辺は本物のCプリプロセッサでも同じかな?)

734 :デフォルトの名無しさん:2018/12/01(土) 01:45:09.70 ID:YAQo6Dqr.net
>>730 Ruby

require 'open-uri'
thread = 'https://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,# 略

735 :デフォルトの名無しさん:2018/12/01(土) 01:53:10.02 ID:k1RHlnBk.net
>>733
"/* hoge */" => ""

736 : :2018/12/01(土) 02:29:20.81 ID:J8cQMvWo.net
>>733
>(この辺は本物のCプリプロセッサでも同じかな?)
そうですね。https://ideone.com/3TJq7U

737 :デフォルトの名無しさん:2018/12/01(土) 03:00:24.20 ID:3EVAE812.net
>>735
あー。文字列リテラルについては何も考えてなかった。
明日考えよう。

>>736
やはりそうでしたか。わざわざどうも。

738 :デフォルトの名無しさん:2018/12/01(土) 03:09:09.09 ID:3EVAE812.net
>>735
今閃いたので修正した。(URLは同じ)

739 :デフォルトの名無しさん:2018/12/01(土) 03:22:24.06 ID:Zs5zJNI/.net
>>724 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

740 :デフォルトの名無しさん:2018/12/01(土) 03:24:23.46 ID:3EVAE812.net
>>724
Cでも作った。
https://paiza.io/projects/2RgQrlBLrzJe9MQp9weQmQ

これは1文字づつ読んでモード切り替えて出力したりしなかったりする方式。
文字列リテラルにも対応。

741 :デフォルトの名無しさん:2018/12/01(土) 03:40:27.80 ID:mIATMgqT.net
>>738
'"', /* hoge */, "fuga" => '"', /* hoge */, "fuga"

742 :デフォルトの名無しさん:2018/12/01(土) 03:45:42.76 ID:mIATMgqT.net
>>738
"// hoge" => "

743 :デフォルトの名無しさん:2018/12/01(土) 04:05:45.76 ID:3EVAE812.net
>>741>>742
あ、それか。それは明日考えよう。

744 :デフォルトの名無しさん:2018/12/01(土) 04:06:53.29 ID:3EVAE812.net
C言語の方もシングルクォート考慮してないから似たようなものだな。

745 :デフォルトの名無しさん:2018/12/01(土) 05:34:42.40 ID:qLkjgui5.net
>>739 訂正
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

746 :デフォルトの名無しさん:2018/12/01(土) 07:52:53.53 ID:U3mK8vlP.net
>>732
誰も俺に言われてると思ってねーよ
自意識過剰なんじゃボケカス

747 :デフォルトの名無しさん:2018/12/01(土) 11:03:33.46 ID:XKE5KJf3.net
>>746
生きづらそう

748 :デフォルトの名無しさん:2018/12/01(土) 11:10:29.72 ID:50ygxsN0.net
>>733
PCRE(Perl)の正規表現なら再帰マッチ(&R)や(&1)使いなせぇ
参考サイトはイロイロあるし

749 :デフォルトの名無しさん:2018/12/01(土) 11:16:56.49 ID:50ygxsN0.net
>>748
ゴメン再帰マッチは(?R)や(?1)だた
時間あればnest対応版書いてみたいけど
多分ないや…

こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける

750 :デフォルトの名無しさん:2018/12/01(土) 12:39:50.92 ID:U3mK8vlP.net
>>747
おまえやわw
いちいち素っ頓狂なレスすんなカスw

751 :デフォルトの名無しさん:2018/12/01(土) 12:41:56.31 ID:1eGLRG7/.net
いつもの単芝君やないか
この板に粘着して荒らしまわってる奴やで
意思疎通は不可能なのでNGするなりスルーするなりしてくれ

752 :デフォルトの名無しさん:2018/12/01(土) 15:19:58.00 ID:3EVAE812.net
>>733の改造終了(URLは同じ)
長い呪文になってしまった。

>>748>>749
なるほど。その内暇な時にでも考えよう。

753 :デフォルトの名無しさん:2018/12/01(土) 17:02:07.43 ID:3EVAE812.net
>>740も改造終了(URLは同じ)。

754 :デフォルトの名無しさん:2018/12/01(土) 17:25:35.20 ID:cOhty352A
>>706 F#
https://ideone.com/IUPK21
mandelbrotが2.9s
https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした

755 :デフォルトの名無しさん:2018/12/01(土) 17:34:49.88 ID:XO3Kyvz4.net
>>710 F#
https://ideone.com/IUPK21
mandelbrotが2.86s
https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした

756 :デフォルトの名無しさん:2018/12/01(土) 17:37:04.95 ID:XO3Kyvz4.net
>>755 はインタプリタでないので無視してください

757 :デフォルトの名無しさん:2018/12/02(日) 00:35:34.00 ID:twRH93OM.net
>>706
Kotlin
https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA

1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。

758 :711:2018/12/02(日) 16:02:26.97 ID:aFBnTuDv.net
>>706 c
https://ideone.com/6sLfPH
・ mandelbrotが4.24s→3.42s→3.24s→2.13s
・G: while (*dp) dp += ip->d; ip++; goto TOP; を追加

>>727
caseで分岐するほうが移植性あっていいよね( ^ω^)

759 :デフォルトの名無しさん:2018/12/02(日) 16:29:28.37 ID:hHHhmr7T.net
Python「・・・」

760 :デフォルトの名無しさん:2018/12/03(月) 22:04:03.50 ID:cV13JBu4.net
[お題]
整数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種類ではない。

 ※解き方をパックて単純化した問題。

761 :デフォルトの名無しさん:2018/12/03(月) 23:49:23.73 ID:CrTNh3lq.net
数え上げ系のお題はつまんない

762 :デフォルトの名無しさん:2018/12/04(火) 10:39:39.35 ID:ZczbahAK.net
パズルソルバーは制約・論理プログラミングが最適だね。

763 :デフォルトの名無しさん:2018/12/04(火) 13:11:47.75 ID:vhrUEqnQ.net
>>724 正規表現だけで書いてみた

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

764 :デフォルトの名無しさん:2018/12/04(火) 13:34:55.49 ID:fo8RIf+e.net
>>763 無駄な括弧があったので修正

regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m

puts src.gsub(regexp, '\1\2')

765 :デフォルトの名無しさん:2018/12/04(火) 17:02:17.81 ID:N7rAE58b.net
>>758
https://ideone.com/3hct3R

caseに書いちゃうと遅くなるな

766 :デフォルトの名無しさん:2018/12/04(火) 17:20:50.80 ID:tkE9zz4k.net
お題: テキストが入力されるのでそれがお題であれば1,お題でなければ0を出力せよ

767 :デフォルトの名無しさん:2018/12/04(火) 17:37:59.07 ID:HMynH27O.net
>>766

#!/bin/sh

if grep お題 >/dev/null 2>&1
then
 echo 1
else
 echo 0
fi

768 :デフォルトの名無しさん:2018/12/04(火) 17:43:36.31 ID:evmq38l5.net
お題

C/C++言語のソースをHTMLに変換

・色分け(外部スタイルシートで色分け以外にも
サイズや種類など色々と細かく指定可能)表示
・コメント・クォート・マクロ定義部分・マクロ等に対応
・ローカル変数・グローバル変数・static関数・非static関数
ライブラリ変数/関数/マクロ(ヘッダ記載)・
ローカル型・グローバル型名の区別

入力:コマンドラインからファイル名(.c/.cpp)
出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を
新規作成

769 :デフォルトの名無しさん:2018/12/04(火) 17:47:43.27 ID:evmq38l5.net
あと、コードブロックや式の括弧のネストレベルに応じて
背景色を変えてほしい(要望)
コマンドラインからタブ=4,8とか指定できるようにもして欲しい

770 :デフォルトの名無しさん:2018/12/04(火) 17:58:45.10 ID:0EeyK9d3.net
>>766
ruby -ne'p~/\Aお題\Z/?1:0'

771 :デフォルトの名無しさん:2018/12/04(火) 18:05:08.94 ID:HMynH27O.net
1. 好きなIDEのエディタで画面に表示。
2. PrtSc キーを押す。
3. ペイントを起動してペースト。
4. PNGファイルとして保存。
5. メモ帳を起動。
6. HTML を書き、imgで先の画像を表示するようにする。
7. 拡張子をhtmlにして保存。
8. ブラウザで表示。
9. 終了。

772 :デフォルトの名無しさん:2018/12/04(火) 18:14:10.74 ID:evmq38l5.net
型に応じて変数の色分け(スタイル変更)に対応できたら最高
忘れてたけど予約語の色分けは当然
ソースコードの構文エラー箇所以降は単色赤文字で表示

773 :デフォルトの名無しさん:2018/12/04(火) 19:05:35.22 ID:Ntdpy5BB.net
>>766 PowerShell
[int]("お題" -eq $(Read-Host))

774 :デフォルトの名無しさん:2018/12/05(水) 04:19:34.99 ID:fABNAu0P.net
>>760 Java
https://ideone.com/a1wOZ4

775 :デフォルトの名無しさん:2018/12/05(水) 19:36:38.80 ID:W3jESzak.net
お題:ビュフォンの針をシミュレートして円周率の近似値を求めよ

776 :デフォルトの名無しさん:2018/12/05(水) 20:02:35.88 ID:W3jESzak.net
自分でやってみた
Python3
https://ideone.com/A2FnPP
1000万本投げた場合
3.14219665312

777 :デフォルトの名無しさん:2018/12/05(水) 23:06:27.91 ID:dgv/Vo0c.net
angleを計算するのに思いっきりπの値使ってるだろうし..www

778 :デフォルトの名無しさん:2018/12/05(水) 23:30:47.41 ID:oCZO3Dfm.net
wikipediaは日本語版だけその問題に言及して疑似コードも載ってるのな

779 : :2018/12/05(水) 23:30:56.16 ID:qUBA/FDJ.net
>>777
そんなツッコミは初めてみました、うまいですね…

780 :デフォルトの名無しさん:2018/12/05(水) 23:42:52.79 ID:W3jESzak.net
>>777
書いてて思ったけどめんどくさくなってそれ以上考えなかった

781 :デフォルトの名無しさん:2018/12/06(木) 01:36:29.15 ID:Yn5Hc93r.net
>>775 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 "

782 :デフォルトの名無しさん:2018/12/06(木) 01:57:54.87 ID:CjS0UpEg.net
こういうプログラム面手するのつらいだろうな

783 :デフォルトの名無しさん:2018/12/06(木) 02:09:23.51 ID:7UXgAx11.net
>>776 Ruby
# length = 2; gap = 2
buffon_s = -> n {n.fdiv((1..n).count{rand < sin(rand(1e10))})}
p buffon_s[10**6]
# => 3.1421245789553063

784 :755:2018/12/06(木) 20:58:20.17 ID:fqSvUjwD.net
>>760
需要はほぼなかったみたいだが、出題者コメントを

 答えだすのに必要なものだけに前処理で集計。今回必要なのは
 0-9数字使用の有無だけなので2^10に集約・集計できる( 50万→1024)
 この数になればあとは、二重ループで集計をすればいい。
 後半は集約にビットを使えば、popcountを使って簡潔に書けるパターン。

 想定解(python by pypy) https://ideone.com/bujm1x

 回答者さんとほぼ同じ。
 あえて相違点は、pythonのpopcount相当が意外と重かったので、
 前処理でテーブル化している。(高速に出れば、いらないはず?)


 ※制約の50万と1.5秒は、素の(標準だけの)pythonに合わせている。
  (このコードも素のpythonだと、例題6)だけで0.8秒くらい)

785 :デフォルトの名無しさん:2018/12/06(木) 21:56:29.19 ID:QyI+7EvW.net
>>784
from collections import Counter
でもうちょっと楽できる

786 :デフォルトの名無しさん:2018/12/07(金) 15:14:44.93 ID:wiJMm9Hc.net
>>784
蛇足的改良?してみた(一応C++だが殆どC)
https://pastebin.com/dRM2yC3e

787 :デフォルトの名無しさん:2018/12/07(金) 22:19:34.17 ID:x8xNXHP3.net
お題
1,3,4,6,7,9,10,12,…
のように1から始まり奇数, 奇数,偶数,偶数,
奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか

788 :デフォルトの名無しさん:2018/12/07(金) 22:30:34.68 ID:avhY9emJ.net
floor(2019 * 1.5)

789 :デフォルトの名無しさん:2018/12/07(金) 22:32:31.84 ID:avhY9emJ.net
結果書いてなかった
3028

790 :デフォルトの名無しさん:2018/12/07(金) 22:35:02.23 ID:avhY9emJ.net
計算量的に整数の乗算とシフト演算だけの n * 3 >> 1 のほうが良いか

791 :デフォルトの名無しさん:2018/12/07(金) 22:38:48.18 ID:xSpw6JJG.net
>>787 Ruby
f = -> n {a, b = n.divmod(4); 6 * a + 2 * b + 3 / (b + 2)}
p f[2019]
# => 3030

792 :デフォルトの名無しさん:2018/12/07(金) 22:47:23.26 ID:avhY9emJ.net
>>791
1が0番目で計算してね?
https://ideone.com/8B4VVN

793 :デフォルトの名無しさん:2018/12/07(金) 22:48:51.29 ID:xSpw6JJG.net
>>792
あー本当だ
しかも n * 3 >> 1 でよかったんだね

794 :デフォルトの名無しさん:2018/12/08(土) 03:40:55.13 ID:xmV4OmOO.net
>>787
Kotlin
https://paiza.io/projects/IrRQGqJSJL8lVYGlBueZDw

795 :デフォルトの名無しさん:2018/12/08(土) 08:09:08.92 ID:JIGsOpwq.net
第n項=3n/2+(-1)^n/4-1/4

796 :デフォルトの名無しさん:2018/12/08(土) 09:20:01.90 ID:vpfNpx82.net
プログラミング初心者なんですがJavaを覚えるのに良い課題下さい
言語の本は一冊読みました

797 :デフォルトの名無しさん:2018/12/08(土) 09:29:35.75 ID:5PBkTMHJ.net
Winならtypeコマンド(LinuxとかUnix系だとcat)と同じ機能を自作してみるとか、行番号も表示するようにするとかから始めては?

798 :デフォルトの名無しさん:2018/12/08(土) 09:53:44.58 ID:Mku3deOK.net
>>787
f=:+/@$&1 2

f 2019
3028

799 :デフォルトの名無しさん:2018/12/08(土) 09:59:51.42 ID:Mku3deOK.net
>>798
言語はJ

800 :781:2018/12/08(土) 12:53:06.37 ID:JIGsOpwq.net
整数計算オーバーフローが発生していたのを修正
https://pastebin.com/FAzjRJn5

801 :デフォルトの名無しさん:2018/12/08(土) 15:30:02.59 ID:dsjig1JQ.net
お題:N×Nの盤面に石を置いていく。
どの4つの石も同一円周上に乗らないようにする場合、最大何個配置できるか?
ただし、一直線上に並ぶ配置は半径∞の円周上と考える。

N=3 => 5
N=4 => 7
5 => 9
6 => 11
9 => 18

802 :デフォルトの名無しさん:2018/12/08(土) 17:29:13.00 ID:xmV4OmOO.net
>>801
問題の意味がわからない。図とか描いてくれ。

803 :デフォルトの名無しさん:2018/12/08(土) 17:33:47.41 ID:kCA+QhwE.net
>>801
石の大きさはゼロで格子点とでも考えればいいのかな

804 :デフォルトの名無しさん:2018/12/08(土) 17:36:28.60 ID:m52vxjN5.net
ああ共円か
有名なゲームだな

805 :デフォルトの名無しさん:2018/12/08(土) 19:05:02.19 ID:xmV4OmOO.net
共円でググってようやっとわかった。

806 :デフォルトの名無しさん:2018/12/08(土) 19:37:58.42 ID:xPmIyiBg.net
>>796
テトリス

807 :デフォルトの名無しさん:2018/12/10(月) 02:09:47.01 ID:3g7m60y1.net
>>787
1は0番目じゃなくて1番目だよね。念のため確認

808 :デフォルトの名無しさん:2018/12/12(水) 02:35:41.59 ID:84v7sPOJ.net
お題
2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ

809 :デフォルトの名無しさん:2018/12/12(水) 07:13:05.92 ID:SVnAXs6w.net
どのような多角形をなすかの
仮定で方法も違ってくるだろうけど、
一般的な場合を視野に入れる限り
複数の数学ライブラリを組み合わせて
扱うソリューションパッケージ的なものに
なりそうでお題としてはなんだかなって感じ

810 :デフォルトの名無しさん:2018/12/12(水) 08:10:30.84 ID:3f3X1OW4.net
>>808
多角形の定義がひどい。
重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい)
重なってはいけないけど辺は突き抜けても良いのかとか。
描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。
http://o.8ch.net/1cbk7.png

811 :デフォルトの名無しさん:2018/12/12(水) 08:27:43.91 ID:3f3X1OW4.net
多角形を三角形に分割して、
(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…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。

812 :デフォルトの名無しさん:2018/12/12(水) 09:01:00.07 ID:J4hfK+qs.net
また数学か。数学板が嫌なら紙とえんぴつでやってろ

813 :デフォルトの名無しさん:2018/12/12(水) 09:21:43.03 ID:YlPyc4+b.net
ポリゴンで塗り潰してその色になれば真

814 :デフォルトの名無しさん:2018/12/12(水) 11:12:59.34 ID:3f3X1OW4.net
数学になるの?
俺CAD関連と3DCG関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。

ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?

815 :デフォルトの名無しさん:2018/12/12(水) 11:17:02.00 ID:rSdIoMBA.net
>>808 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

816 :デフォルトの名無しさん:2018/12/12(水) 11:40:32.38 ID:rSdIoMBA.net
問題を勘違いしてたので一部修正
凸多角形でなくてもOK 順番も結ぶ順でOK
ただし>>810の星型の内部は多角形には含まれないとする

def in_con_polygon?(p, *vers)
  vers[1..-1].each_cons(2).count{|v1, v2| in_triangle?(p, vers[0], v1, v2)}.odd?
end

817 :デフォルトの名無しさん:2018/12/12(水) 11:56:39.21 ID:3f3X1OW4.net
ベクトル係数の解法も綺麗だな。式も少ないし素晴らしいと思う。

818 :デフォルトの名無しさん:2018/12/12(水) 12:12:03.42 ID:SeAXRl2+.net
>>808 Java
https://ideone.com/xJBcjx
わかんねーので言語任せw

non_zero: >>810の星型の内部も多角形に含まれる
even_odd: >>810の星型の内部は多角形に含まれない

819 :デフォルトの名無しさん:2018/12/12(水) 12:14:30.79 ID:ygJIxGmd.net
>>814
このスレには解答者側に数学ができない人がいて、そういう人が文句を言ってる
かく言う俺も数学できないが文句は言わない

820 :デフォルトの名無しさん:2018/12/12(水) 14:03:01.24 ID:FdJbiO2G.net
数学の問題集から拾ってきただけみたいな雑な出題が叩かれてるんじゃなかったのか
問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど

821 :デフォルトの名無しさん:2018/12/12(水) 14:49:36.03 ID:GETLERsG.net
純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、という問題だったら、わざわざプログラム板でやる面白味はないなあと思う。
数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。
個人的な感想です。

822 :デフォルトの名無しさん:2018/12/12(水) 15:01:41.06 ID:LIx8RHBs.net
集合論的なのをリスト使うのと配列使うのだったら違いもあるだろうけど、
そういう問題出ないね。

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でも使いながらなんじゃろか。。。

823 : :2018/12/12(水) 20:48:43.83 ID:5ElL+qNp.net
>>821
>純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、
それは甘い、大甘だと私の経験は私の心に語ってくれています

824 : :2018/12/12(水) 20:49:58.51 ID:5ElL+qNp.net
>>822
そういう問題はある種の順序関係を仮定してインプリメントしたいところです

825 :デフォルトの名無しさん:2018/12/12(水) 23:47:12.93 ID:V5rMC+dN.net
>>822 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]]

https://ideone.com/XSlcVz

826 :デフォルトの名無しさん:2018/12/13(木) 00:26:45.67 ID:ilwXN+sT.net
>>822 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) "

827 :デフォルトの名無しさん:2018/12/13(木) 01:00:05.58 ID:vQDTFPB2.net
>>822 Ruby

x, a, b = [*1..10], [*3..6], [*5..8]
p x & (a | b)
# => [3, 4, 5, 6, 7, 8]

828 :デフォルトの名無しさん:2018/12/13(木) 09:40:48.46 ID:wBrOfppZ.net
>>822
c
https://ideone.com/YkmUdB

c++
https://ideone.com/WXXvlU

829 :デフォルトの名無しさん:2018/12/15(土) 18:26:25.25 ID:RxHR1YVb.net
お題:標準入力から読み取った行を出力せよ
ただし42を読んだ場合は出力せずに終了する
https://ideone.com/vdWddB

830 :デフォルトの名無しさん:2018/12/15(土) 18:51:24.63 ID:Hf86DN+J.net
>>829
ruby -pe'~/^42$/&&exit'

831 :デフォルトの名無しさん:2018/12/15(土) 20:46:54.11 ID:Du8iBFv1.net
>>829 Common Lisp
https://ideone.com/QQzEQh

read-lineの第三引数にnil以外を使ったの初めてだ

832 :デフォルトの名無しさん:2018/12/15(土) 23:34:07.15 ID:2jxK776v.net
>>829
bash
https://paiza.io/projects/gIZdCMpBEoNvFnnjVvGGtA

833 :デフォルトの名無しさん:2018/12/15(土) 23:59:19.52 ID:QTag+jm2.net
>>829 PowerShell
while (($var = (Read-Host)) -ne 42) { $var }

834 :デフォルトの名無しさん:2018/12/16(日) 03:36:20.47 ID:X+FaDx+z.net
>>829
python 3
https://ideone.com/it2Axq

835 :デフォルトの名無しさん:2018/12/16(日) 13:54:15.20 ID:ob8ozoeg.net
[お題] 来年と素数
今年も残りわずか、来年は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桁だけの回答も可。

836 : :2018/12/16(日) 14:12:11.90 ID:IjCemHtZ.net
>>835
年忘れ課題の時期になったんですね…

837 :デフォルトの名無しさん:2018/12/16(日) 19:04:23.02 ID:P931WLXH.net
>>835 Java
https://ideone.com/LgkDWF
あってんのかなー

838 :830:2018/12/16(日) 19:54:33.15 ID:GrZg6kve.net
>>837

2)の31からして自分のと違う。
自分のでは111だった。

javaのやついじって、112個の明細を出してみたら、[2,2,27] があった。
27は素数じゃないよね。いじり方が悪い?

839 :デフォルトの名無しさん:2018/12/16(日) 19:56:19.00 ID:pjubjjb0.net
>>838
自分も31は111だったわ

840 :デフォルトの名無しさん:2018/12/16(日) 20:37:34.86 ID:VvrWecHB.net
>>835 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

841 :デフォルトの名無しさん:2018/12/16(日) 20:50:18.98 ID:P931WLXH.net
>>838
まじだ・・・修正した
犯人は118行目だ!orz

842 :830:2018/12/17(月) 20:45:38.05 ID:4p2KDXiR.net
>>837 836
 当方の回答と一致しました。

>>840
4) 201931 だけ異なる(自分のがあっているとは限らないが……)。
※再帰の動きがよくわからない

843 :830:2018/12/20(木) 20:26:37.78 ID:W0v1JICZ.net
>>835 python https://ideone.com/OFR7bn

 間が空いたので、出題者コメント

 1)問題文説明用に書いてみて、問題にもできると思った。

 2)3)は"オイラー 31 DP"でググってください。
 違いはコインの額面が素数に変わったくらいと、おおきさ。
 なかには一つ一つ数えて、本問の2)しか溶けない回答があるので見分けて。

 4)については、ソース上三種類書いて考察しています。
  ("201931"という変な数値は、3重ループ解を落とすのが目的だった)

844 :デフォルトの名無しさん:2018/12/21(金) 08:20:43.27 ID:hMEdBbLv.net
お題:
真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群

845 :デフォルトの名無しさん:2018/12/21(金) 08:38:52.94 ID:choQhZIj.net
遅延時間とかファンアウトとかは考慮不要ってことでいいのかな

846 :デフォルトの名無しさん:2018/12/22(土) 11:29:36.65 ID:7UfbjIEE.net
参考にどうぞ
https://eng.kice.tokyo/logic/logic_ex3/

847 : :2018/12/22(土) 16:28:53.58 ID:vmp1HvU+.net
>>846
昔カルノー図がかける範囲(3入力?4入力くらいだったかな?)で簡約化ツールを作ったことがあります
当時は書き捨て上等、でやっていたのですが、今は困ってしまっています、当時のプログラム記述能力は当時は今後もずっと保存されるものと当時は考えていたのですが、それは完全な誤りでした…

848 :デフォルトの名無しさん:2018/12/23(日) 16:48:28.85 ID:V9Fp8lZV.net
>>846
俺全然わかってない人なんだけど、
そのURLの一番下の、入力部分のNOTゲートを無視しない場合、
9個のNANDゲートで構成できるって書いてあるけど、
NOTゲートの部分を2個減らして7個で作るとかはあかんのん?

849 :デフォルトの名無しさん:2018/12/23(日) 16:56:13.54 ID:jMuRFGAa.net
半導体製造のコストがある
NANDゲートは作り易い、というか造りが簡素で単純
NOTゲートも作り易い

なので厳密には製造コストも考えないといけない

850 :デフォルトの名無しさん:2018/12/23(日) 17:29:24.88 ID:gPP7+XoH.net
>>848
ホントだ、AとCのNOTを一つずつ減らせるね
というかこれが最小になる保証もないよね

851 :デフォルトの名無しさん:2018/12/23(日) 18:34:59.46 ID:m1FIlPHW.net
>>846
カルノー図からの簡略結果が最終形ではない。
最終形は
Z=~ABC+A~C+~BC

852 :デフォルトの名無しさん:2018/12/23(日) 21:11:36.62 ID:9AXglOVX.net
>>851
それA=0, B=0, C=0の結果から間違ってるんだが

853 :デフォルトの名無しさん:2018/12/23(日) 23:39:28.74 ID:DR7zt9Cz.net
>>852
うむ

最終形は
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

ともう一つでした。

854 :デフォルトの名無しさん:2018/12/24(月) 08:22:13.10 ID:bL5ZoHRn.net
>>853
> Z=~ABC+A~C+~B~C
それA=0, B=1, C=0の結果が違うぞ

855 :デフォルトの名無しさん:2018/12/24(月) 11:32:09.70 ID:7aEQUcJ6.net
>>854
~ABC → C=0なので0
A~C → A=0なので0
~B~C → B=1なので0
結果0であってるんじゃないのん?

856 :デフォルトの名無しさん:2018/12/24(月) 13:42:11.05 ID:bL5ZoHRn.net
>>855
すまん、合ってるわ
ちょっとボケてたな

857 :デフォルトの名無しさん:2018/12/26(水) 16:33:56.35 ID:GYS6kcBm.net
>>853
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 ] */

858 :デフォルトの名無しさん:2019/01/06(日) 20:37:20.68 ID:uX30aAuK.net
エモい歌うまバーチャルユーチューバー
https://script.google.com/macros/s/AKfycbxuAt1ejx43_zMRfK7Xplwgwn7cXDQAdZTJkDdLrVCLo8SIdhI/exec

今、見られている話題のVtuberを知りたいなら、ハルカス式Vtuberランキングを見ましょう
【ハルカス式Vtuberランキング】※毎週・毎月自動更新
https://script.google.com/macros/s/AKfycbzZO93mJcZ5M_dPmIZOzuVQNr4mcGwQQdiT7GiLld_1Uews7uE/exec

年末年始の一週間12/27〜01/02までのハルカス式Vtuberランキング
https://docs.google.com/spreadsheets/d/1jdVQ2r5yTrAykMRF1nuX6_5DXpK0167D4JcVCQZTJdM/edit#gid=157464142

年末の一ヶ月12/1〜12/31までのハルカス式Vtuberランキング
https://docs.google.com/spreadsheets/d/1Yc6HD_h4lfurme9b3T0ZXBf2-iBpFSmMGg-1bdgSe0E/edit#gid=1971024984

第4回バーチャルYouTuber人気投票募集中(全304名、2018年11月23日〜)

あなたの好きなVtuberは?5問(配信内容、トーク、歌うま、ゲーム実況、キャラデザ)
https://script.google.com/macros/s/AKfycbwSwNBm8qYD4_kZN2uJLeqRIP8Mwpbo3YDTUEpaSMU02BDAR3jh/exec

・Googleフォームは標準仕様では不正投票が可能な為、改造して対策を行いました。
・2018/11/23時点でチャンネル登録数10,000人以上のuserlocalに登録されたVtuberを対象としています。
・一つのチャンネルでVtuberが複数人いる場合は、それぞれ分けています。
・このフォームに投票するにはグーグルアカウントでログインする必要はありません。
・並び順は前回の得票数の高い順と新人は登録者数の多い順に並んでいます。
・今回も1,000人の方が投票するまで継続します。

なお投票結果はスプレッドシートにリアルタイムで表示されるようにしました。
また【概要】と【詳細】でシートを分けております。
https://docs.google.com/spreadsheets/d/1udB81Vnia9CoIgPaan3a5XFeaCfcnBXkRoPTuxvRpAc/

grげrげ

859 :デフォルトの名無しさん:2019/01/18(金) 22:48:43.15 ID:sD1souQd.net
あげ

860 :デフォルトの名無しさん:2019/01/19(土) 05:22:33.88 ID:M8Q3zGyy.net
過疎ってるので別スレのこれをお題にする。
なお、クラスではなく関数でもサブルーチンでも良い。

https://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

861 :デフォルトの名無しさん:2019/01/19(土) 08:17:19.40 ID:9NMu+pMT.net
お題スレじゃなくて、あなたの宿題無料でやりますよになってる

862 :デフォルトの名無しさん:2019/01/19(土) 09:54:02.71 ID:9IabhBF0.net
>>860 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

863 :デフォルトの名無しさん:2019/01/19(土) 12:58:12.91 ID:XYN5JTgF.net
> CtmpW=900 tmpH=1000

864 :デフォルトの名無しさん:2019/01/19(土) 15:20:58.20 ID:M8Q3zGyy.net
>>861
お題をやるかどうかは自由だし使う言語も自由なのでここは宿題向きスレではない。それに宿題用のスレは別にある。

865 :デフォルトの名無しさん:2019/01/20(日) 17:00:10.01 ID:XepLmY3z.net
お題
チェス盤をかく

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

866 :デフォルトの名無しさん:2019/01/20(日) 17:28:18.15 ID:bv4HmLR/.net
for i in range(4):
print("□■□■□■□■")
print("■□■□■□■□")

867 :デフォルトの名無しさん:2019/01/20(日) 18:45:01.40 ID:vla32kuj.net
console.log(`
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
`);

868 :デフォルトの名無しさん:2019/01/20(日) 19:21:05.18 ID:QLQt0ffh.net
>>865
85kg 170cmの俺がJavascriptで回答。
[85, 170]
.map(d => [...d.toString(2).padStart(8,0)]
.map(b => +b ? '□' : '■')
.join`` + '\n')
.join``
.repeat(4)

869 :デフォルトの名無しさん:2019/01/20(日) 19:39:43.28 ID:CUY2SNg1.net
>>865 Ruby

puts 72.times.map{|i| i % 9 / 8 * 10 + 15 / (i % 9 + 8) * (i & 1 ^ 9633)}.pack('U*')
# =>
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

870 :デフォルトの名無しさん:2019/01/20(日) 19:45:27.08 ID:z2xvgkTe.net
>>868
>>869
お前ら天才だな
普段何やってんの

871 :デフォルトの名無しさん:2019/01/20(日) 19:58:44.02 ID:vla32kuj.net
>>870
ヒマ人どもの公開オナニーに騙されるな。
ベンチ取ってみれば分かるけど
>>868より>>867のほうが処理速度も速く、CPU、メモリ消費も勝ってる。

872 :デフォルトの名無しさん:2019/01/20(日) 22:22:45.08 ID:n75q6Hj+.net
解法や工夫は色々あっていい

873 :デフォルトの名無しさん:2019/01/20(日) 23:40:01.19 ID:3oCDYmJz.net
>>871
可読性も最強だしなw

874 :デフォルトの名無しさん:2019/01/21(月) 00:16:11.01 ID:evkqklOK.net
前々からつくろうとしていまだ決定版ができてないのがある。
コマンド fileA fileBで、重複行を除いて連結と、
A-Bで重複行を除くやつ。入力が数百Mだときつい。

875 :デフォルトの名無しさん:2019/01/21(月) 00:20:48.31 ID:q5TMCwho.net
きついのは口臭だけにしとけよ

876 :デフォルトの名無しさん:2019/01/21(月) 04:33:49.89 ID:ZCrWhalc.net
>>874
Linux とかでよく使われるシェル(bash とか)ならこんな感じだろうな。

( uniq fileA ; uniq fileB ) > fileC

シェルスクリプトにするならこんな内容のファイルを作ってそれの実行パーミッション立てておくだけ。

#!/bin/sh
uniq $1
uniq $2

ようするに uniq コマンド使ってるだけ。

Windows でも似たようなものはあるかも知れないが WSL 入れて Ubuntu とか動かしちゃった方が何も考えずに Linux 風にできるので楽かも知れない。
/mnt/c/ にCドライブマウントされてるからファイルのやり取りを考える必要もない。
改行が LF なのとデフォルトのエンコーディングが UTF-8 なのは考慮する必要があるが。

877 :デフォルトの名無しさん:2019/01/21(月) 07:09:30.84 ID:evkqklOK.net
そんな機能あったっけ、と確認したみたけど意図する動作しない、連続しない重複も対象



Linuxコマンド集 【 uniq 】 ソート済みのファイルから重複した行を削除する
ファイルで重複している行を削除する。ただし,ファイルはソートしてある必要がある
https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230918/


連続していない離れた重複行も削除したければ、sortコマンドコマンドで予めソートする必要がある。その代わり順番は保存されない。
https://hydrocul.github.io/wiki/commands/uniq.html

878 :デフォルトの名無しさん:2019/01/21(月) 08:10:55.04 ID:rd0KMO5T.net
要するにAの末尾とBの先頭で一致するとこだけを削除したいってこと?

879 :デフォルトの名無しさん:2019/01/21(月) 08:19:59.40 ID:evkqklOK.net
2つあって。
一つは連結した単一ファイルで、後方にある重複行を取り除く。
もう一つはBに存在する行を取り除いたAの重複行を取り除く。
それぞれuniq拡張(A+B) 、uniq拡張(A-B)のような。

880 :デフォルトの名無しさん:2019/01/21(月) 09:47:36.96 ID:evkqklOK.net
スクリプトやめてC++でやってみたら
ロードと書き込みの速度とほぼ同程度でできるようだ。

881 :デフォルトの名無しさん:2019/01/21(月) 11:56:42.83 ID:ub5sAEWO.net
>>865 J
}:("1) 8 9 $ '_#'

_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_

882 :デフォルトの名無しさん:2019/01/21(月) 13:07:07.09 ID:jV3tC4jb.net
JってUnicode使えないの?

883 :デフォルトの名無しさん:2019/01/21(月) 13:14:23.06 ID:ub5sAEWO.net
使えるんだけど私の方が勉強不足で。

884 :デフォルトの名無しさん:2019/01/21(月) 14:03:05.80 ID:chW+Guj1.net
>>865
Perl
https://paiza.io/projects/06iuVCc-HeWgTb7j2TrTMQ

885 :デフォルトの名無しさん:2019/01/21(月) 14:14:22.79 ID:P73TaUU+.net
>>879
A-Bの部分は
grep -x -v -f B A
でできるけど順序を保存したuniqはコマンドだけではできないのかな

886 :デフォルトの名無しさん:2019/01/21(月) 18:14:39.49 ID:chW+Guj1.net
そういうコマンドを別途作るか、全部作っちゃうかかな。

887 :デフォルトの名無しさん:2019/01/21(月) 21:03:38.83 ID:mEBdwP2z.net
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


888 :デフォルトの名無しさん:2019/01/21(月) 21:49:42.62 ID:QH90tNLy.net
速度出るのできた。CRCと文字列長のハッシュしかみてなく重複らしいのはduplicate.txtへ。


標準出力
deldup.exe fileA fileB ・・・ はマージして重複削除
deldup.exe /D fileA fileB ・・・ はA -B -・・・の重複削除
https://ideone.com/ABJNAy

889 :デフォルトの名無しさん:2019/01/21(月) 22:56:33.96 ID:uToUSKRf.net
>>865 octave
https://ideone.com/KyX1rR

890 :デフォルトの名無しさん:2019/01/21(月) 23:04:52.30 ID:PFiT+1XJ.net
>>226
Javaはunsignedの概念がない

891 :デフォルトの名無しさん:2019/01/22(火) 02:53:38.24 ID:t1xtxA/a.net
>>879
後方にある重複業削除なら awk で連想配列(要するにハッシュ)使ってこんな風にすればできるな。

awk '{if(!n[$0]){n[$0]=1;print}}' fileA fileB

ただし全行をメモリ上に置くことになるのでファイルがでかいとまともに動かない環境があるかも。

超大きいファイルの場合は行ごとに MD5 や SHA1 等のハッシュ値計算してそれだけ保管しておいて比較した方が良いかもね。

892 :デフォルトの名無しさん:2019/01/22(火) 10:22:28.48 ID:f5q/almD.net
>>865 Lua
for i=1,72 do
if i%9==0 then
print("")
else
io.write(({"■","□"})[i%2+1])
end
end

893 :デフォルトの名無しさん:2019/01/22(火) 11:22:34.61 ID:ez/DcBYq.net
普通に行ごとにソートして重複を除去すればいいだけやん

894 :デフォルトの名無しさん:2019/01/22(火) 12:39:35.18 ID:bOf9tfZi.net
>>865 javascript
[...function*(){for(var i=0;i<64;i++)yield (i&7)==7?'\n':'■□'[i&8?i%2:+!(i%2)]}()].join``

895 :デフォルトの名無しさん:2019/01/22(火) 12:48:37.38 ID:J1mDHp9Y.net
>>893
順序変えなくないんだって。

896 :デフォルトの名無しさん:2019/01/22(火) 18:32:37.01 ID:f5q/almD.net
>>865 Ruby

puts (["□■"*4,"■□"*4]*4)

897 :デフォルトの名無しさん:2019/01/22(火) 18:48:04.82 ID:bOf9tfZi.net
>>881
J分からない人向け解説キボンヌ

898 :デフォルトの名無しさん:2019/01/22(火) 22:15:16.89 ID:4TOwjU0o.net
>>865 javascript
['□■', '■□'].map(s => s.repeat(4) + '\n').join``.repeat(4)

899 :デフォルトの名無しさん:2019/01/24(木) 21:04:14.42 ID:HE3o+0uB.net
>>865 Lua
print (((("_#"):rep(36)):gsub("(........).","%1\n")))

900 :デフォルトの名無しさん:2019/01/24(木) 22:20:43.56 ID:HLNzgCZV.net
>>865 javascript
Array(72).fill().map((v, i)=>i%9?'■□'[i%2]:'\n').join``

>>894はボード横幅が7になってる間違いでしたごめんなさい。

901 :デフォルトの名無しさん:2019/01/25(金) 20:09:30.47 ID:s1700d1K.net
お題
n個からr個選ぶ組み合わせの個数を求める

902 :デフォルトの名無しさん:2019/01/25(金) 22:06:56.43 ID:7NAKvkXa.net
数学の問題が叩かれるのはここのアホどもには難しいからなんだ!
決してスレ違いだからじゃないんだ!
だから高校1年の教科書の定義引き写すだけの簡単な問題なら叩かれないんだ!

903 :デフォルトの名無しさん:2019/01/25(金) 22:30:26.19 ID:oIz/D2lY.net
教科書捨てたから定義ググりました。
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);
に改良しようとしたらエラーでる…
なんでか分かる方いたら教えてください。

904 :デフォルトの名無しさん:2019/01/26(土) 03:39:53.55 ID:mo79YSSI.net
>>901 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

>>903
undefined - 1n でエラーが起きているので
const c = (n, r) => p(n, r) / p(r, r);

905 :デフォルトの名無しさん:2019/01/26(土) 03:52:04.18 ID:NFcmjJe3.net
>>901
効率はともかく、関数プログラミングって本でこれ見た時は感動したな。(言語は数学と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

906 :デフォルトの名無しさん:2019/01/26(土) 04:12:24.35 ID:NFcmjJe3.net
高校の教科書版

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)!に分解)

907 :デフォルトの名無しさん:2019/01/26(土) 04:32:41.56 ID:Ve68vOks.net
>>904
ありがとう!
恥ずかしい…

908 :デフォルトの名無しさん:2019/01/26(土) 05:11:41.67 ID:iYrqGgfh.net
>>901 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;
}

909 :デフォルトの名無しさん:2019/01/26(土) 10:34:54.19 ID:ls0y1m5K.net
>>901 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

910 :デフォルトの名無しさん:2019/01/26(土) 11:22:21.12 ID:tq46h9Ux.net
お題
複数の線分が平面上で重なりがあるかないかしらべる。

911 :デフォルトの名無しさん:2019/01/26(土) 12:02:35.05 ID:Owe/QLUY.net
>>865
@Mathematica

Table[If[EvenQ[i + j], 0, 1], {i, 8}, {j, 8}] //
 ArrayPlot[#, Mesh -> True] &

912 :デフォルトの名無しさん:2019/01/26(土) 13:54:20.56 ID:+oP10x+/.net
>>910
適当に連立方程式とくだけじゃなかったです?
数学出来ないんですけど。

913 :デフォルトの名無しさん:2019/01/26(土) 14:10:31.09 ID:t2YAFdPa.net
人狼AI と 人狼ゲーム

914 :デフォルトの名無しさん:2019/01/26(土) 14:39:24.25 ID:YRte2Dpq.net
>>865 Perl5
print ((qw{□■}x4, "\n", qw{■□}x4, "\n")x4);

実行結果
$ perl 12_860.pl
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

915 :デフォルトの名無しさん:2019/01/26(土) 15:04:32.49 ID:vn81VQ6e.net
>>865
Pharo Smalltalk
String cr join: ((1 to: 4) collect: [:i | {'□■' repeat: 4 . '■□' repeat: 4} ]) flattened
実行結果

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

916 :デフォルトの名無しさん:2019/01/26(土) 17:16:36.10 ID:5cGQ6lSj.net
お題: マークダウン記法の見出しをHTMLに変換しなさい

917 :デフォルトの名無しさん:2019/01/26(土) 18:50:28.91 ID:OZN9QunV.net
>>865
rfo-basic

For i=1 To 44
m$=m$+Chr$((9622+Mod(i,2))*(Mod(i,9)<>0)+10)
Next
Print m$

End

プロは奇をてらわない。
bai 砂坊主

918 :デフォルトの名無しさん:2019/01/26(土) 21:39:22.15 ID:Ve68vOks.net
byでは?

919 :デフォルトの名無しさん:2019/01/26(土) 21:56:29.11 ID:lXnCadeF.net
レス古事記に構うなよ

920 :デフォルトの名無しさん:2019/01/27(日) 00:46:03.01 ID:EZ97VlcS.net
>>865
@Mathematica

セルオートマトン(ルール32)を使って、、

CellularAutomaton[32, {0, 1, 0, 1, 0, 1, 0, 1}, 8] //
 ArrayPlot[#, Mesh -> True] &

921 :デフォルトの名無しさん:2019/01/27(日) 01:01:04.00 ID:u288xi28.net
>>865
python3
[print("".join("■" if (x+y) % 2 else "□" for y in range(8))) for x in range(8)]

922 :デフォルトの名無しさん:2019/01/27(日) 04:52:31.63 ID:rwuNPA7J.net
>>865 C
for (int r = 0; r < 8; r++) {
  for (int c = 0; c < 8; c++) {
    printf((r + c) % 2 ? "■" : "□");
  }
  printf("\n");
}

923 :デフォルトの名無しさん:2019/01/27(日) 06:36:29.52 ID:rwuNPA7J.net
>>910 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);

924 :デフォルトの名無しさん:2019/01/27(日) 06:44:59.11 ID:mVMeZ4rl.net
>>923
直線じゃなくて線分だぞ

925 :デフォルトの名無しさん:2019/01/27(日) 06:46:02.03 ID:z0hosMYm.net
>>916 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>

926 :デフォルトの名無しさん:2019/01/27(日) 08:20:11.42 ID:rwuNPA7J.net
>>924
線分ですよ

927 :デフォルトの名無しさん:2019/01/27(日) 11:17:31.03 ID:/cT7Kgd3.net
>>923
> return (abac * abad < 0 && cdca * cdcb < 0);
return (abac * abad <= 0 && cdca * cdcb <= 0);
端点も含まんとあかんのとちゃう?

928 :デフォルトの名無しさん:2019/01/27(日) 12:22:09.16 ID:rwuNPA7J.net
重なりの定義によるかも
接しているのは重なりなしとしました

929 :デフォルトの名無しさん:2019/01/27(日) 12:42:45.94 ID:rwuNPA7J.net
と思ったけど=ありのが正解でした

930 :デフォルトの名無しさん:2019/01/27(日) 13:15:46.24 ID:4tSdie01.net
お題
半径が整数の3つの円ある。
どの円も他の2つの円に外接している。
3つの円の中心点を結んでできる
三角形がピタゴラスの三角形に
なる場合の3つの円の半径を
100未満についてすべて求める。
例えば3つの円の半径が1,2,3の時
辺の長さが3,4,5のピタゴラスの
三角形ができる。

931 :デフォルトの名無しさん:2019/01/27(日) 13:54:53.07 ID:wgzaqL4l.net
>>930 C++
https://ideone.com/TvwEx3

932 :デフォルトの名無しさん:2019/01/27(日) 14:02:09.42 ID:/cT7Kgd3.net
>>930 Java
https://ideone.com/vHvOJu

933 :デフォルトの名無しさん:2019/01/27(日) 14:08:22.33 ID:u288xi28.net
>>930
python3
https://ideone.com/PPyoFC

934 :デフォルトの名無しさん:2019/01/27(日) 14:21:11.01 ID:/cT7Kgd3.net
>>932
しまった…半径100未満なのに100まで調べてるw
> r(20, 30, 100) = p(50, 120, 130)
が余分やww

>>930 Java 修正しました
https://ideone.com/BkN6Ls

935 :デフォルトの名無しさん:2019/01/27(日) 17:44:27.67 ID:rwuNPA7J.net
>>927
=の追加で要件をクリアしたと思ってましたが、対象が線分から直線に変わってました
端点については、以下のコードの呼び出しが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;

936 :デフォルトの名無しさん:2019/01/27(日) 18:36:00.36 ID:rE8NR22a.net
>>930 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]]

937 :デフォルトの名無しさん:2019/01/27(日) 18:48:49.63 ID:z0hosMYm.net
>>930 javascript
https://ideone.com/S1PkhD

938 :デフォルトの名無しさん:2019/01/27(日) 21:02:27.16 ID:u288xi28.net
>>910
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)

本当は直線が平行なときも調べないといけないが略

939 :デフォルトの名無しさん:2019/01/28(月) 02:42:20.01 ID:Ht+H3Zdt.net
こちらで検証したパターンです
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}};    // 重なりあり

940 :デフォルトの名無しさん:2019/01/28(月) 19:06:17.59 ID:ZiBPaW1B.net
>>910
2直線を
(x,y)=(x1,y1)+t(x2*x1,y2*y1)
(x,y)=(x3,y3)+s(x4*x3,y4*y3)
としたときt、sが0以上1以下の条件で解を持つことであろう。

941 :デフォルトの名無しさん:2019/01/28(月) 20:30:57.09 ID:BBM43iQf.net
>>901
>>906の改良版。
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))

942 :デフォルトの名無しさん:2019/01/30(水) 16:02:43.18 ID:WqNbA033.net
お題
古のスタートレックゲームを作る

943 :デフォルトの名無しさん:2019/01/30(水) 16:19:17.11 ID:gOIe9eSU.net
>>942
そのゲームがどんなものだったのか詳細が書いてある所はある?
昔々 Apple ][ でテキストのやつを人がやってる所は見たことあるのだが細かいルールがどんなんだったか忘れた。
確かワープして移動してってクリンゴンが撃ってくるとかクリンゴンに向けて撃つだとかそんなのを繰り返すんだよな?

944 :デフォルトの名無しさん:2019/01/30(水) 19:13:41.13 ID:32wJF+eS.net
>>865
RFOーBASIC

TEXT.INPUT S$,"","チェス番を入力してください。"
PRINT S$
END

945 :デフォルトの名無しさん:2019/01/30(水) 21:23:13.66 ID:zHXVmep5.net
>>943
この辺りを参考にすればいいかと
https://ja.m.wikipedia.org/wiki/スタートレック_(マイコンゲーム)

946 :デフォルトの名無しさん:2019/01/31(木) 17:40:00.64 ID:uIyAv6WO.net
>>865 Lua
print("░")
横から見た

947 :デフォルトの名無しさん:2019/01/31(木) 17:57:03.10 ID:6YZEfuaO.net
>>941 python の場合、これじゃいかんのか? まだ全くpythonを知らん人間だが。

scipy.special.comb(n, k, exact = False)

python はライブラリを使ってなんぼでしょ。 生の言語で比較するのは時代遅れ。 なんで膨大な処理が必要なAI でpython が主流になったか。

948 :デフォルトの名無しさん:2019/01/31(木) 18:21:11.67 ID:JEItRzDd.net
ライブラリを紹介するスレじゃないんだが。
mathjs
math.combinations(7, 5)

こういうの延々と続けるの?
バカじゃないのwww

949 :デフォルトの名無しさん:2019/01/31(木) 18:41:17.06 ID:6YZEfuaO.net
>>948 別に構わんだろ。 そもそも言語なんてやりたいことを解決するのに便利かどうかだけの話なんだから。

そういう意味では、普通のことをやるにはどの言語でも大差はない。

FORTRAN なんて大昔の言語だがいまだに科学技術計算で使われ続けてきているのは、言語仕様ではなく高速なライブラリが整ってるからに他ならない。

なんでAI や科学技術計算にスクリプト言語のpython がもてはやされてるのかもう一度考えてみる必要があるのでは?

950 :デフォルトの名無しさん:2019/01/31(木) 18:50:20.38 ID:6YZEfuaO.net
いくら言語が優れていても、ある特定の環境だけでしか実用性がない言語と言うのは、別環境用のライブラリが整っていないからに他ならない。

例えばSwift これは、Mac環境下ではObjective-C の全てが使えるが、
言語的にはWindows などでコンパイルできても、ライブラリがないから実用として使うにはまだ程遠い。
API が整っていることが重要。

python がもてはやされてるのは、ライブラリが整ってるからだろ。 言語の良さがどうかなんてあまり関係ない。
ま、個人的な好き嫌いが出てくるのは仕方ないが、実用性があるかどうかはまた別の問題。

951 :デフォルトの名無しさん:2019/01/31(木) 18:58:10.77 ID:6YZEfuaO.net
そもそも、言語なんてアセンブラの時代からマクロで自分好みの文をかけるようになってたんだから、今更何を議論してるのかという気もする。

標準化された文法というのは評価はするが、それはどっちかと言うと頭でっかちな学者が考えること。
現場はいかにバグが少なく早く問題を解決できるかにかかってる。 つまり総合環境だろ。

952 :デフォルトの名無しさん:2019/01/31(木) 18:59:37.75 ID:aRQ4w2UO.net
溜まってたものを一気に語ったな

953 :デフォルトの名無しさん:2019/01/31(木) 19:46:27.30 ID:REgWEVPY.net
うむ。これからの時代はファミリーBASICだな。

954 :デフォルトの名無しさん:2019/01/31(木) 19:59:18.32 ID:6YZEfuaO.net
>>953 最初の頃のBASICは、10数個位しか命令は無かった。
ま、電卓がわりみたいなものでは有るが、基本的なプログラミング言語としては成り立ってた。

955 :デフォルトの名無しさん:2019/01/31(木) 20:11:31.45 ID:4JULsXj7.net
>>947
たまたま、ライブラリで解決出来る問題だからってマウント取られてもね。。。
それに、C/C++みたいに多倍長整数サポートしてない言語と、サポートしてる言語でのアルゴリズムの違いや、
式変形して引き算を足し算に変えられる所は変えた方が速度出るとか、色々勉強にはなってるよ。
>>941の例じゃ(n - (r - 1))を(n - r + 1)にした方が速い。
(Haskellでは速いだけでなく、2の補数表現を(元の数値と別に)生成してるらしく、メモリ効率も上がる)

956 :デフォルトの名無しさん:2019/01/31(木) 21:19:24.42 ID:Te48fFDx.net
>(n - (r - 1))を(n - r + 1)にした方が速い。

>>955 あのさ、そんなのはコンパイラの最適化次第だろ。 勿論ど素人のプログラマじゃ無ければそれなりの工夫はするはずだが、そんな事は些細な事。 くだらんことを言うな。 むしろそんなコンパイラがクソ。 言語なんてのは言語道断。

957 :デフォルトの名無しさん:2019/01/31(木) 22:25:01.31 ID:xJsSt9Re.net
Python では、機械学習などの周辺ライブラリ一式が揃っているから、使われる

Ruby では、ベクトル演算のNArray があって、
処理速度はOctave にも匹敵するけど、一式揃っていない

北大の湊教授が作った、ZDD はあるけど

958 :デフォルトの名無しさん:2019/01/31(木) 22:46:32.84 ID:2IY59Hh/.net
scipy/scipy/special/cephes at master ・ scipy/scipy
ttps://github.com/scipy/scipy/tree/master/scipy/special/cephes

この辺り見てみるとフォートランとCがそのまま使われてる

scipy/_comb.pyx at master ・ scipy/scipy
ttps://github.com/scipy/scipy/blob/master/scipy/special/_comb.pyx

このあたりをそのまま書ければいい

959 :デフォルトの名無しさん:2019/02/01(金) 04:58:43.05 ID:IMBPiIxm.net
お題
平方数かどうか判定する

960 :デフォルトの名無しさん:2019/02/01(金) 10:08:25.26 ID:VdCPb4pG.net
C++

#include <iostream>
#include <limits>

template <typename T>
bool is_safely_multiplicable(T a, T b) {
if (b == 0) return true;
return a <= (std::numeric_limits<T>::max() / b);
}

uint64_t sqrt_int(uint64_t x) {
if (x == 0) return 0;
uint64_t a = 1, b = x, c;
while (b - a > 1) {
c = (b - a) / 2 + a;
if (is_safely_multiplicable(c, c) && x >= c * c) a = c;
else b = c;
}
return a;
}

bool is_square_number(uint64_t x) {
uint64_t rt_x = sqrt_int(x);
return rt_x * rt_x == x;
}

961 :デフォルトの名無しさん:2019/02/01(金) 18:32:58.66 ID:iYm26gLc.net
>>959
Haskell

isSqr a = isSqr' a [n * n | n <- [0..a]]
where
isSqr' x (l:_) |(x == l) = True
isSqr' x (l:_) |(x < l) = False
isSqr' x (_:ls) = isSqr' x ls

962 :デフォルトの名無しさん:2019/02/01(金) 20:32:42.61 ID:iYm26gLc.net
Python

def isSqr(x):
n = 0
a = 0
while x <= a:
if x == a:
return True
n += 1
a = n * n
return False

リスト内包表記だとすぐ落ちた。。。
Haskellより持たない。。。

963 :デフォルトの名無しさん:2019/02/01(金) 21:10:55.66 ID:qFuZrTt3.net
これはいかに巨大数を高速判定するかだろ

964 :デフォルトの名無しさん:2019/02/01(金) 21:19:45.40 ID:qFuZrTt3.net
目星はこれを荒く使えばつきそう


逆数と平方根を求める高次収束アルゴリズム
http://www.finetune.co.jp/~lyuka/technote/fract/sqrt.html

高速根号計算
http://takashiijiri.com/study/miscs/fastsqrt.html

965 :デフォルトの名無しさん:2019/02/01(金) 22:13:46.18 ID:kNvVsHFY.net
https://code.i-harness.com/ja-jp/q/4829b

966 :デフォルトの名無しさん:2019/02/01(金) 23:10:20.49 ID:iYm26gLc.net
>>963
m = ?
n = m * m

m=10の時nの1/10で、m=100だとnの1/100

探すべきmが高速で小さくなって行く。
大きな数になる程、0<=mなループの始まり求めるの無理ゲー。。。

967 :デフォルトの名無しさん:2019/02/01(金) 23:12:44.04 ID:VdCPb4pG.net
ttps://ideone.com/xr1vcE

Newton-Raphson法ほど速くはないがせめてO(log(N))くらいで実装せにゃお題として出てくる意味がなかろう

968 :デフォルトの名無しさん:2019/02/02(土) 00:09:40.70 ID:/6KX0oFw.net
>>959 Lua
function isSquare(n)
local a = 0
local i = 1
while a < n do
a = a + i
i = i + 2
end
return a == n
end
print(isSquare(100000))
print(isSquare(10000))

969 :デフォルトの名無しさん:2019/02/02(土) 03:47:32.54 ID:i2SNxKFt.net
いっそsqrt 関数実装。
頭悪いんで数学的じゃない。
256以上入れるとフリーズするけど、その範囲なら精度抜群。
精度を1つ落とすと(range(15)の値を1つ減らすと)2桁くらい大きな数を入れてもフリーズしなくなる。

def sqrt(x):
i = 1
if x == 0:
return 0
while x >= (i * i):
if x / i == i:
return i
i += 1
i -= 1
a = 0.1
for j in range(15):
while x >= (i * i):
i += a
i -= a
a *= 0.1
return (i - a)

970 :デフォルトの名無しさん:2019/02/02(土) 09:51:18.58 ID:/6KX0oFw.net
>>959 J
f =: = *: @ <. @ %:

971 :デフォルトの名無しさん:2019/02/02(土) 13:18:27.64 ID:CwD+xRo8.net
平方数かどうかを高速に判定する方法 - hnwの日記
https://hnw.hatenablog.com/entry/20140503


GNU MPのmpz_perfect_square_p関数の実装
GNU MPのソースコードを確認してみたところ、次のような処理だとわかります。

引数nのmod 256を計算し、平方数ではない数を判定する
平方数のmod 256は44種類の値しか出現しないので、入力の82.8%は平方数でないと判定できる
同様に入力nのmod 9, 5, 7, 13, 17(64-bitシステムではmod 97も)を計算し、平方数ではない数を判定する
これにより入力の99.25%(64-bitシステムでは99.62%)について平方数でないと判定できる
最後に、平方根を計算して平方数かどうか確認する

平方数ではない数の多くを事前にふるい落とし、判定できなかった数だけ真面目に平方根を求める、という方針だとわかります。

もちろん、GNU MPの場合のmod pの選び方は多倍長整数演算ならではだと言えます。
mod 256はサイズNにかかわらずO(1)で計算できるので、最初に行うことで全体の高速化に貢献できます。

また、2ステップ目の計算も2^24-1 = 9 * 5 * 7 * 13 * 17 * ...であることを利用し、多倍長整数であっても比較的高速に計算できるような実装になっています。
10進整数でmod 9を求める場合に全部の桁を足し合わせてからmod 9しても同じ結果になるのと同様、
下位から24bit区切りの数を足し合わせてからmod 2^24-1を計算することで、元の数のmod 2^24-1が計算できるのです。

972 :デフォルトの名無しさん:2019/02/02(土) 13:43:47.68 ID:OgiywF+Q.net
>>949
えぇ…

973 :デフォルトの名無しさん:2019/02/02(土) 16:31:05.91 ID:9W2pTWu+.net
>>972 その心は?

974 :デフォルトの名無しさん:2019/02/02(土) 16:42:03.23 ID:OgiywF+Q.net
>>970
えぇ…

の間違い。

975 :デフォルトの名無しさん:2019/02/02(土) 17:31:46.69 ID:rEiZ26fd.net
本質的に高度な数学的知識が要求され
る問題は板違いかと

言語によっては、問題にジャストフィット
するライブラリが標準で添付されているとか
ライブラリ管理コミュニティを通じて
容易に入手できるとかあるかもしれないが
その場合は紹介程度に。

言語処理系の言語処理の為の機能提供
である場合を除いて多くは本質的に多言
語に対応しており〜言語用のライブラリと
いう表現は兎も角〜言語のライブラリと表
現すると曖昧で誤解を招きやすい表現
として嫌われる場合もありえることに注意。
(別言語で記述される場合もある)

976 :デフォルトの名無しさん:2019/02/02(土) 17:36:46.77 ID:XgXX/tZQ.net
なんしたのきゅうに

977 :デフォルトの名無しさん:2019/02/02(土) 17:57:26.00 ID:rEiZ26fd.net
セルフホスティング対応な言語でライブラリを
自前で構成しているもので、他言語に移植されて
いない独自の機能を持つものもあるかもしれない
し、もっと極端に言えば独自性の高いライブラリに
最適化された言語を自前で作ってそれで記述され
ているものもあるかもしれないけど一般的には入手
は容易ではないかも

978 :デフォルトの名無しさん:2019/02/02(土) 19:52:10.51 ID:hDNgHqpo.net
じゃあさ、各々複数行の
a.txt と、b.txtを並べて表示して。

979 :デフォルトの名無しさん:2019/02/02(土) 23:25:24.42 ID:g8xy/J6N.net
辺に沿って動くとき、AからBまでの最短経路はいくつあるか
         ┏┳┳┳┓B
         ┣╋╋╋┫
      ┏┳╋╋╋╋┫
┏┳┳┳╋╋╋╋╋┻┛
┣╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋┛
┗┻┻┻┻┻┻┛
A

980 :デフォルトの名無しさん:2019/02/03(日) 00:45:38.22 ID:UGH880J+.net
おねえさんがロボットになるやつかw

981 :デフォルトの名無しさん:2019/02/03(日) 00:55:19.58 ID:UTpNqxd4.net
中学受験の算数の問題に経路を数える問題があるよな
つまり小学生でも手計算で解ける

982 :デフォルトの名無しさん:2019/02/03(日) 00:57:22.00 ID:72eosYJ+.net
>>975 アホちゃうの?
プログラムというのは、問題解決のための言語であって、問題が解決できなければどんなに美しい言語でも存在価値はない。
最速で美しく問題解決にたどり着ける言語が一番。 言語そのものの美しさなんて二の次。

英語でも日本語でも何でも良い。 利用できるものは何でも利用すれば良い。 好き嫌い言ってる奴はアホ。
どんなに綺麗な国の言葉でも高等教育が自国語でできない国がほとんど、それは利用できる教材が自国語で書いたものがないから。
日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。

983 :デフォルトの名無しさん:2019/02/03(日) 01:53:34.29 ID:wxxHWwaf.net
別に高度な数学が必要になることは構わないけど、数学だけで話が閉じちゃうような問題はつまらないとは思う。数学的に解を求める解法自体が主題で、コーディングはただその解法を(日本語、英語などの自然言語と同様に)とあるプログラミング言語で記述しただけのような。
もちろん数学に価値がないといっているのではなく、話のウェイトとしてプログラムである部分がほぼないのなら、その話、ここじゃなくてもいいじゃんと思うよ。

984 :デフォルトの名無しさん:2019/02/03(日) 04:02:35.76 ID:JyP+XfGy.net
つまらない問題だと思ったら無視すればいいだけじゃないかな
その問題に対して回答する人がいるなら、回答者(と出題者)にとっては
つまらない問題ではないってことなんだろうし

985 :デフォルトの名無しさん:2019/02/03(日) 04:46:34.72 ID:1lu6X4vo.net
>>982
OS記述の言語は言語じゃないのか?
コンパイラなどの言語処理系記述の言語
も言語じゃないってわけだな
問題解決手段の一つではあるかもしれないが
通信系ソフトウェアの存在はどう説明?

既存の資産を維持しより効率的に活用する研究が
新しいプログラミング言語が次々と生成されてくる原
動力じゃないかと

986 :デフォルトの名無しさん:2019/02/03(日) 05:08:39.33 ID:l3Qt7IvN.net
>>982
>日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。

ダウト。ノーベル賞を受賞した研究者はみんな英語で論文書いている。
あと、今の日本語での教育教材の蓄積があるのは、大雑把に言って、
ここ10年でノーベル賞受賞した面々の世代の研究者や技術者が書いた。
もちろん彼らは英語の文献を読み、勉強し、日本語の文献を書いた。
だから、英語の文献なんて要らないみたいな話はアホ。
ソファでポテチ食いながら「ジャガイモなんて買えばいいんだから、育ててる奴はアホ」と言ってるようなもの。

987 :981:2019/02/03(日) 05:15:20.75 ID:l3Qt7IvN.net
プログラミング言語も一緒。
Cは泥臭い実用言語で、その前にはAlgolなど「綺麗な」言語が下敷きとしてあった。
Cは現在でも多くの問題を解決するための道具として活用されているが、
現在では使われていないAlgolなどの「綺麗な」言語なしにCは生まれなかった。

988 :デフォルトの名無しさん:2019/02/03(日) 05:39:02.55 ID:1lu6X4vo.net
個々の言語の歴史観の講釈はスレ違い

確かに問題解決の道具であることが
中心かもしれないが、扱ってきた問
題の種類によって文法やライブラリ・
その取り扱い方に差異が生じている
が、同じ問題を別言語で「解く」と
優劣の違いがわかって面白いかもし
れない。
が、あんまし長くやってると不毛な
言語比較論、文化比較論になったり
して色々ヤバいからそろそろ一旦
お開きにしたら?
続きはそれぞれの言語別スレッドで
ということで

989 :デフォルトの名無しさん:2019/02/03(日) 07:04:30.87 ID:LaZtKDWq.net
お題:プログラムの実行時刻が午前なら「おはようございます、ご主人様!」、午後なら「お疲れ様です、ご主人様!」と表示させる

990 :デフォルトの名無しさん:2019/02/03(日) 07:48:34.73 ID:AEg+fU/i.net
>>989 C
time_t now = time(NULL);
struct tm *p = localtime(&now);
if (p->tm_hour * 60 + p->tm_min < 12 * 60) {
  printf("おはようございます、ご主人様!\n");
} else if (p->tm_hour * 60 + p->tm_min > 12 * 60) {
  printf("お疲れ様です、ご主人様!\n");
}

991 :デフォルトの名無しさん:2019/02/03(日) 08:56:17.85 ID:l3Qt7IvN.net
>>989
Pharo Smalltalk

Smalltalk ui inform: (Time now meridianAbbreviation = 'AM' ifTrue: [ 'おはようございます、ご主人様!' ] ifFalse: [ 'お疲れ様です、ご主人様!' ])

992 :デフォルトの名無しさん:2019/02/03(日) 09:19:47.58 ID:72eosYJ+.net
python

from datetime import datetime
if datetime.now().hour < 12:
print('おはようございますご主人様')
else:
print('お疲れ様です、ご主人様')

993 :デフォルトの名無しさん:2019/02/03(日) 09:23:27.86 ID:1lu6X4vo.net
午前12時=00:00
午後12時=12:00
23:59の後は00:00

午前12時=12:00
午後12時=24:00
24:00の後は00:01

994 :デフォルトの名無しさん:2019/02/03(日) 09:40:26.58 ID:cfde/ig7.net
>>865 Common Lisp
https://pastebin.com/TLD3d9R1

実行結果
https://i.imgur.com/6Dne4jz.png

995 :デフォルトの名無しさん:2019/02/03(日) 09:58:12.21 ID:I0qputsI.net
>>969 のHaskell版。
負の数の場合の処理、負の数含め、絶対値が256以上だった場合エラー吐く様に処理を追加。
※Haskellは整数と少数を明確に分ける為、渡す数に小数点が無いとエラーになる。

mysqrt x = mysqrt' x 0
where
mysqrt' x m |x < 0 = - mysqrt (abs x)
mysqrt' x m |x == m * m = m
mysqrt' x m |x < m * m = fsqrt x (m - 1) 0.1 15
mysqrt' x m = mysqrt' x (m + 1)

fsqrt _ a _ 0 = a
fsqrt v _ _ _ | v > 256 = error "\"fsqr\":out of range 0..256"
fsqrt v a f n | v <= a * a = fsqrt v (a - f) (f * 0.1) (n - 1)
fsqrt v a f n = fsqrt v (a + f) f n

使用例

main = print (mysqrt x) >> print (mysqrt x * mysqrt x)

結果

1.41421356237309
2.0

996 :デフォルトの名無しさん:2019/02/03(日) 10:00:13.11 ID:I0qputsI.net
fsqrt v _ _ _ | v > 256 = error "\"fsqr\":out of range 0..256"
fsqrt v a f n | v <= a * a = fsqrt v (a - f) (f * 0.1) (n - 1)
fsqrt v a f n = fsqrt v (a + f) f n

997 :デフォルトの名無しさん:2019/02/03(日) 10:13:31.71 ID:xEPkQ4sk.net
この改行長文おじさんはどこからきたの。笑

998 : :2019/02/03(日) 10:31:38.09 ID:t4xt++Qj.net
>>982
>日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。
最近はそうでもないようですよ…ペーパーは英語だし、教科書=テキストレベルでも英語でしか発刊されない状況といいます
haskell をやろうとして圏論の教科書を探しましたが、欧米の本の和訳ばかりで日本人が書いた圏論の教科書はありませんでした

999 :デフォルトの名無しさん:2019/02/03(日) 10:35:41.62 ID:/jO+7TC8.net
誰か次スレ頼む

1000 :デフォルトの名無しさん:2019/02/03(日) 11:07:15.54 ID:72eosYJ+.net
お題1: 現在地の緯度、経度を出せ
緯度:、、、、
経度:、、、、
お題2: 東京都新宿区西新宿2丁目8-1 の緯度、経度を出せ
緯度:、、、
経度:、、、
お題3: お題2で求めた緯度経度から住所を出せ
郵便番号:、、、
住所:東京都、、、、

1001 :デフォルトの名無しさん:2019/02/03(日) 11:22:46.76 ID:72eosYJ+.net
立てたよ
プログラミングのお題スレ Part13
https://mevius.2ch.net/test/read.cgi/tech/1549160513/

1002 :デフォルトの名無しさん:2019/02/03(日) 11:23:36.56 ID:72eosYJ+.net
>>1000 は、次スレに移動させるね。

1003 :デフォルトの名無しさん:2019/02/03(日) 17:37:12.27 ID:csrqlAvs.net
うめ

1004 :デフォルトの名無しさん:2019/02/03(日) 17:37:50.59 ID:oUppVF8S.net
>>969
今までの苦労は一体。。。

数学的な平方根の近似値は√x = x ^ (1/2)だった。。。

Haskell だとこんだけ。

mysqrt x = x ** 0.5

1005 :デフォルトの名無しさん:2019/02/03(日) 17:38:30.96 ID:csrqlAvs.net
次スレ

プログラミングのお題スレ Part13
https://mevius.2ch.net/test/read.cgi/tech/1549160513/

1006 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1006
361 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★