[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 05/07 12:57 / Filesize : 360 KB / Number-of Response : 1043
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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

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

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
codepad.org/
compileonline.com/
rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
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 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:41:53.02 ID:Trt/L8Tp.net]
console.log('>>%d乙', 1);

3 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 21:22:39.80 ID:CwsEryp/.net]
ID:jm6QTuW3

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



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

12 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2018/09/29(土) 01:00:25.54 ID:SXeyKQEb.net]
比較って値そのものの大小の比較ってとだろ

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

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

16 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2018/10/01(月) 20:26:01.73 ID:8OIwu5Mv.net]
>>18
自身も含まれるんじゃない?

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



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

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

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

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

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

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

24 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:15:15.90 ID:rW/Q6M2G.net]
やはり10/1と10/8は平日だった

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

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

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



31 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 07:17:46.24 ID:wqnG0hHC.net]
春分の日と秋分の日はその前の年に気

37 名前:ロ庁だかどっかから指定される休日だから任意の時刻に対して平日判定を行うのは不可能 []
[ここ壊れてます]

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

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

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



41 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

44 名前:デフォルトの名無しさん mailto:sage [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 * ' '

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

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

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

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

https://ideone.com/BseQtg

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

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

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

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



51 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 13:41:58.37 ID:9vVPTzNb.net]
>>48
そうだ

52 名前:
さらに 10/01だけの入力から 10/02が出力されるところも謎だ
[]
[ここ壊れてます]

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

@042

54 名前:デフォルトの名無しさん mailto:sage [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

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

56 名前:デフォルトの名無しさん mailto:sage [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)

57 名前:デフォルトの名無しさん [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

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

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

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

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

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

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

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



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

62 名前:デフォルトの名無しさん mailto:sage [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 }
とかやってみて

63 名前:デフォルトの名無しさん mailto:sage [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の精度は実装依存であるためこの様な処理はすべきではない

64 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 23:58:05.73 ID:5rk01rQ6.net]

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

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

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

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

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

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

69 名前:デフォルトの名無しさん mailto:sage [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 )ってそういう意図があったのでしょうか?
>このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない
これは特定の環境に限られたものを指していたのかな?

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



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

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

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

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

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

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

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

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

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

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

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

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

80 名前:デフォルトの名無しさん mailto:sage [2018/10/10(水) 17:4 ]
[ここ壊れてます]



81 名前:1:41.04 ID:8BTNYbZT.net mailto: (2^m-1)×2^n
という形
[]
[ここ壊れてます]

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

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

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

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

何か間違ってるかな

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

「3d 行列」で検索!

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

95 名前:デフォルトの名無しさん mailto:sage [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)

96 名前:デフォルトの名無しさん mailto:sage [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(世界時)を基準にしています。
それは天体の運動方程式を解くために基準の時刻からの正確な時間が必要だからです。

97 名前:デフォルトの名無しさん [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

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

98 名前:デフォルトの名無しさん [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 になるわけでプログラムを作る必要性がないわけだが。

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

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

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

これはおかしいだろう

100 名前:デフォルトの名無しさん mailto:sage [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}



101 名前:デフォルトの名無しさん [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

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

(Integer primesUpTo: 10) sum

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

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

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

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

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

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

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

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

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

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

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



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

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

113 名前:デフォルトの名無しさん mailto:sage [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

となるね

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

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

116 名前:デフォルトの名無しさん mailto:sage [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 -> ?

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

118 名前:デフォルトの名無しさん mailto:sage [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の時より大きくなることはあり得ないし

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

120 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 17:46:23.51 ID:QtssFn ]
[ここ壊れてます]



121 名前:Iu.net mailto: >>113 Java
https://ideone.com/Y57fPl
[]
[ここ壊れてます]

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

123 名前:デフォルトの名無しさん [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を一様分布以外の分布から取ってくるとどうなる?

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

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

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

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

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

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

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



131 名前:デフォルトの名無しさん mailto:sage [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)
)

続く

132 名前:デフォルトの名無しさん mailto:sage [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} "

133 名前:デフォルトの名無しさん mailto:sage [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} "

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

135 名前:デフォルトの名無しさん mailto:sage [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

一様分布っぽい

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

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

138 名前:デフォルトの名無しさん mailto:sage [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}].

で同じ分布になった

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

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



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

142 名前: mailto:sage [2018/10/17(水) 23:45:01.56 ID:DyWl92+N.net]
>>137
>echo


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

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

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

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

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

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

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

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



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

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

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

154 名前:デフォルトの名無しさん [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通りでサロゲートペアの文字は % になりその他は * になる。

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

156 名前:デフォルトの名無しさん mailto:sage [2018/10/20(土) 17:46:57.83 ID:cv2X893a.net]
お題: 超簡単なステートマシン
以下の3つのデータがランダムに入力される。
1: hi
2: wake up
3: sleep
1が入力された場合、状態がwake up

157 名前:であれば「hello」、状態がsleepであれば「zzz...」と出力せよ。
2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。
[]
[ここ壊れてます]

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

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

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

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



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

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

162 名前:デフォルトの名無しさん [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.")

163 名前:デフォルトの名無しさん [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;

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

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

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

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

166 名前:デフォルトの名無しさん mailto:sage [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) => {}

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

168 名前:デフォルトの名無しさん [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 を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。

169 名前:デフォルトの名無しさん [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行に分けて書いてある。

170 名前:デフォルトの名無しさん mailto:sage [2018/10/21(日) 09:26:11.61 ID:3Rh2KUxU.net]
>>152 java
https://ideone.com/fp



171 名前:KVdM []
[ここ壊れてます]

172 名前:デフォルトの名無しさん mailto:sage [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

173 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

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

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

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

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

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

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

180 名前:デフォルトの名無しさん mailto:sage [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



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

182 名前:デフォルトの名無しさん [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的な物なのかこんがらがる…

183 名前:デフォルトの名無しさん mailto:sage [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) が答え.

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

185 名前:デフォルトの名無しさん mailto:sage [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' "

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

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

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

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

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

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

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



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

192 名前:デフォルトの名無しさん mailto:sage [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行では説明しにくい

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

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

195 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

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

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

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

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

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

www.cjh.com.cn/



nweb.cjh.com.cn/sssqold.html

からでもOKです。

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

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



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

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

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

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

204 名前:デフォルトの名無しさん mailto:sage [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"))))

205 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

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

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

210 名前:デフォルトの名無しさん mailto:sage [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]



211 名前:デフォルトの名無しさん mailto:sage [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);

212 名前:デフォルトの名無しさん [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))

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

214 名前:デフォルトの名無しさん mailto:sage [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]') "

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

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

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

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

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

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

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

219 名前:デフォルトの名無しさん [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"]

220 名前:デフォルトの名無しさん [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"]



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

222 名前:であるかを返し、含まれない場合は偽を返すものとする。 []
[ここ壊れてます]

223 名前:デフォルトの名無しさん mailto:sage [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)

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

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

226 名前:デフォルトの名無しさん mailto:sage [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

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

228 名前:デフォルトの名無しさん [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;
}

229 名前:デフォルトの名無しさん mailto:sage [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回出現することがあるが考慮した方が良いか?

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



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

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

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

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

234 名前:デフォルトの名無しさん mailto:sage [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 "

235 名前:デフォルトの名無しさん [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))

236 名前:デフォルトの名無しさん mailto:sage [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}}}

237 名前:デフォルトの名無しさん mailto:sage [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

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

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

239 名前:デフォルトの名無しさん [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])

240 名前:デフォルトの名無しさん mailto:sage [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]]

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



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

242 名前:デフォルトの名無しさん [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

243 名前:デフォルトの名無しさん mailto:sage [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

244 名前:デフォルトの名無しさん mailto:sage [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

245 名前:デフォルトの名無しさん mailto:sage [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

246 名前:デフォルトの名無しさん mailto:sage [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} * ' '

247 名前:デフォルトの名無しさん mailto:sage [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} "

248 名前:デフォルトの名無しさん mailto:sage [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} "

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

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



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

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

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

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

255 名前:デフォルトの名無しさん mailto:sage [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))

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

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

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

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

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

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



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

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

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

も要るか

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

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

266 名前:デフォルトの名無しさん [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

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

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

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

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

269 名前:デフォルトの名無しさん mailto:sage [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"のどちらが先に来るかについては自由とします。

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

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

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

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

違うか?

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



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

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

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

私は出題者じゃ無いよ。

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

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

275 名前:デフォルトの名無しさん mailto:sage [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

これを実装すんの?

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

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

278 名前:デフォルトの名無しさん mailto:sage [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]}

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

280 名前:デフォルトの名無しさん mailto:sage [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



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

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

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

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

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

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

286 名前:デフォルトの名無しさん [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"]

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

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

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

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

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

あんまりnatural じゃない感じ

290 名前:デフォルトの名無しさん mailto:sage [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



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

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

293 名前:デフォルトの名無しさん mailto:sage [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

294 名前:デフォルトの名無しさん mailto:sage [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"
となるような順序での整列
逆でもいいけど

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

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

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

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

296 名前:デフォルトの名無しさん mailto:sage [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"]

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

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

3
=> 2 (13)

10
=> 5 (13579)

9999
=> 19445 (135...99979999)

123456789
=> ?

31415926535897
=> ?

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

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



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

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

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

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

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

306 名前:デフォルトの名無しさん [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
奇数が多すぎてバッファに残ってなさそうだから、ファイルにリダイレクトし直しかな。。。

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

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

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

308 名前:デフォルトの名無しさん mailto:sage [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

309 名前: + 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
[]
[ここ壊れてます]

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



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

312 名前:デフォルトの名無しさん [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
=> 終わらん

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

314 名前:デフォルトの名無しさん mailto:sage [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))
とかにすればいいんじゃない意味ないけど

315 名前:デフォルトの名無しさん mailto:sage [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) "

316 名前:デフォルトの名無しさん mailto:sage [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)] の方がより簡単か

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

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

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

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

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

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

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

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



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

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

323 名前:デフォルトの名無しさん mailto:sage [2018/11/10(土) 07:08:4 ]
[ここ壊れてます]

324 名前:9.40 ID:mapNUhJU.net mailto: もとのスレにも迷惑かと []
[ここ壊れてます]

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

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

326 名前:デフォルトの名無しさん mailto:sage [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」

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

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

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

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

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



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

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

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

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

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

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

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

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

339 名前:意味も無い

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

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



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

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

343 名前:デフォルトの名無しさん mailto:sage [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

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

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

346 名前:デフォルトの名無しさん mailto:sage [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と同じ

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

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

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

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

350 名前:デフォルトの名無しさん mailto:sage [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 => ??



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

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

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

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

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

356 名前:デフォルトの名無しさん mailto:sage [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_wit

357 名前:h_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
[]
[ここ壊れてます]

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

359 名前:デフォルトの名無しさん mailto:sage [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

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



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

362 名前:デフォルトの名無しさん mailto:sage [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 "

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

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

365 名前:デフォルトの名無しさん mailto:sage [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

366 名前:100 777) collect: fn

"=> #(1 16 87 96 11 53 0 97) "
[]
[ここ壊れてます]

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

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

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

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



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

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

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

372 名前:デフォルトの名無しさん mailto:sage [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

373 名前:デフォルトの名無しさん mailto:sage [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
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■

374 名前:デフォルトの名無しさん [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]

375 名前:デフォルトの名無しさん [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]

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

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

378 名前:デフォルトの名無しさん mailto:sage [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すると一般性はありませんでした。サーせん。
ちゃんと循環性を見るとか、別の解法が要りますね

379 名前:デフォルトの名無しさん mailto:sage [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

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



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

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

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

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

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

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

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

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

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

389 名前:デフォルトの名無しさん mailto:sage [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の剰余を取っても問題ないと言える

390 名前:デフォルトの名無しさん mailto:sage [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桁は常に同じだね



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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

438 名前:デフォルトの名無しさん mailto:sage [2018/11/12(月) 18:12:43.91 ID:eZ2UdI/8.net]
n^n^n % 100計算するのに落とし穴も何もないだろ
フェルマーの小定理チックに指数部で剰余とるだなんて誰も想定できねえよ
なんでキチガイは間違えたらそこから学ばずに問題の方(しかも真っ当

439 名前:)にケチ付けるんだか
運動会で転ぶと怪我をするからグラウンドの至る所にクッションを置いておけと言うモンペと同レベルのキチガイ
[]
[ここ壊れてます]

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



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

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

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

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

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

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

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

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

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

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

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

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



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

452 名前:デフォルトの名無しさん mailto:sage [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

453 名前:デフォルトの名無しさん mailto:sage [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]

454 名前:デフォルトの名無しさん mailto:sage [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]

455 名前:デフォルトの名無しさん mailto:sage [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
出力は同じ

456 名前:デフォルトの名無しさん mailto:sage [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

457 名前:70 73 74 76 79 81 82 84 87 88 91 93 94 97 98 []
[ここ壊れてます]

458 名前:デフォルトの名無しさん mailto:sage [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

459 名前:デフォルトの名無しさん mailto:sage [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

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



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

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

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

464 名前:デフォルトの名無しさん mailto:sage [2018/11/13(火) 00:02:22.82 ID:5Ay5yU9p.net]


465 名前:デフォルトの名無しさん mailto:sage [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]

466 名前:デフォルトの名無しさん mailto:sage [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]
でええやんけ

467 名前:デフォルトの名無しさん [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]

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

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

470 名前:デフォルトの名無しさん mailto:sage [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) "



471 名前:デフォルトの名無しさん mailto:sage [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) "

472 名前:デフォルトの名無しさん mailto:sage [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の内包表記は良いなぁ…

473 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

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

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

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

478 名前:デフォルトの名無しさん mailto:sage [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' "

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

480 名前:デフォルトの名無しさん mailto:sage [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'} "



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

482 名前:デフォルトの名無しさん mailto:sage [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. "=>
'■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■' "

483 名前:デフォルトの名無しさん [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

484 名前:デフォルトの名無しさん [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

485 名前:デフォルトの名無しさん mailto:sage [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

486 名前:デフォルトの名無しさん mailto:sage [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

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

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

489 名前:デフォルトの名無しさん [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

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



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

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

493 名前:デフォルトの名無しさん mailto:sage [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]

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

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

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

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

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

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

500 名前:デフォルトの名無しさん [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



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

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

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

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

504 名前: mailto:sage [2018/11/14(水) 08:19:40.71 ID:1oDeoExT.net]
>>489
×(cond atom list)
○(cons atom list)

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

https://paiza.io/projects/rWdvvAZRxR1Qhr8B6PaM2Q

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

518 名前:デフォルトの名無しさん mailto:sage [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箱でないといけない

519 名前:デフォルトの名無しさん mailto:sage [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]が最小

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



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

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

523 名前: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))

524 名前: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)]

525 名前:デフォルトの名無しさん mailto:sage [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()を書かないといけない宿業

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

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

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

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

528 名前:デフォルトの名無しさん mailto:sage [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以内ぎりぎりのところで区切っていく
ってやり方で出てくる

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

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

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

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

530 名前: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^)/



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

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

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

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

535 名前: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,

536 名前: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 さんに順列と言うヒント貰っておいて活かしきれてない。。。ごめん。
[]
[ここ壊れてます]

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

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

539 名前:デフォルトの名無しさん mailto:sage [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に対しては、ググればもっといい近似値の求め方がある。

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



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

542 名前:デフォルトの名無しさん mailto:sage [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

543 名前:デフォルトの名無しさん mailto:sage [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 (解は複数あるが、そのうちの一つを出力すればよい)

544 名前:デフォルトの名無しさん mailto:sage [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]

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

546 名前:デフォルトの名無しさん [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])]

547 名前:デフォルトの名無しさん [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])]

548 名前:デフォルトの名無しさん [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])]

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

550 名前:デフォルトの名無しさん [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)



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

552 名前:デフォルトの名無しさん [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

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

zlen 差替え。

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

554 名前:デフォルトの名無しさん [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)

555 名前:デフォルトの名無しさん mailto:sage [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よりもエレガントな解法をしばらく考えていたけど一旦断念して投稿します

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

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

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

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

560 名前:デフォルトの名無しさん mailto:sage [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
... 略



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

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

563 名前:デフォルトの名無しさん [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)ので確認したので多分合ってる。

564 名前:デフォルトの名無しさん [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 の人ので答え合わせしたので、多分合ってる。

565 名前:デフォルトの名無しさん [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 の結果で答え合わせ済み。

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

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

568 名前:デフォルトの名無しさん mailto:sage [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個

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

03/26 17:48:59

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

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

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



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

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

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

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

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

576 名前:デフォルトの名無しさん [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]

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

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

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

579 名前:デフォルトの名無しさん mailto:sage [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

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

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



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

>>563-564

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

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

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

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

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

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

586 名前:デフォルトの名無しさん mailto:sage [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だけ数えれば良い

587 名前:
素因数分解が一通りなのは自明なので定義からやり直せ
[]
[ここ壊れてます]

588 名前:デフォルトの名無しさん mailto:sage [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であることはほとんど自明だが証明しろと言われると…

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

https://mathtrain.jp/legendretheorem

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

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



591 名前: mailto:sage [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 の個数の大小についてなにもいえないのでは?

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

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

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

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

596 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

600 名前:デフォルトの名無しさん mailto:sage [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にでも載ってる
というか自分である程度考えてよ……粗探ししてないでさ



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

602 名前: mailto:sage [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 はすでに数え上げているので、一対一対応になっていないと思います
一対一対応にな

603 名前:轤ネい以上、>>575 の推論は飛躍しているのではないでしょうか
繰り返しますが

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

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

605 名前:デフォルトの名無しさん mailto:sage [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"

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

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

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

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

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

https://ideone.com/ZaZSaa

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

https://ideone.com/ui16nc

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

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



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

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

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

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

613 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

617 名前:デフォルトの名無しさん mailto:sage [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

618 名前: << 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
[]
[ここ壊れてます]

619 名前:デフォルトの名無しさん [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]}

620 名前:デフォルトの名無しさん mailto:sage [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]}



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

622 名前:デフォルトの名無しさん mailto:sage [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

623 名前:デフォルトの名無しさん mailto:sage [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日とかが含まれてしまう可能性考慮してないよね(実際には含まれないが)

624 名前:デフォルトの名無しさん mailto:sage [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

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

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

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

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

628 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 19:31:36.89 ID:fvygYhm9.net]
12*31*6

629 名前:0*60*60=80,352,000通りの桁が異なるか判定より、10桁並び替え10!=3,628,800通りが日付になってるか判定の方が速そう []
[ここ壊れてます]

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



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

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

633 名前:デフォルトの名無しさん mailto:sage [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 通り

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

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

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

636 名前:デフォルトの名無しさん mailto:sage [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

637 名前:デフォルトの名無しさん mailto:sage [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

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

639 名前:デフォルトの名無しさん mailto:sage [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

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



641 名前:デフォルトの名無しさん mailto:sage [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

642 名前:デフォルトの名無しさん mailto:sage [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

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

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

1 3は3じゃなくて1でいいんよね?

645 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) ]
[ここ壊れてます]

646 名前:22:30:46.05 ID:luckbEjf.net mailto: >>541 c
https://ideone.com/cyu360
[]
[ここ壊れてます]

647 名前:デフォルトの名無しさん mailto:sage [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"で間違えるな

648 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 22:39:54.74 ID:Pa+SHuBo.net]
>>624
101 10 と 10 101 で結果が異なる
https://ideone.com/crTQpT

649 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 22:54:14.65 ID:7Tiab2M6.net]
>>618 Java
https://ideone.com/Ievsls

650 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 22:55:54.34 ID:7Tiab2M6.net]
あ、>>625問題読み間違えてるわ
コスト1で1増やすんじゃなくて1増減出来るのね…



651 名前:デフォルトの名無しさん mailto:sage [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

652 名前:デフォルトの名無しさん [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 => ?

653 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 23:20:10.22 ID:7Tiab2M6.net]
>>617 Java (>>625の修正)
https://ideone.com/Wmb9ZO

654 名前:デフォルトの名無しさん [2018/11/21(水) 23:21:24.98 ID:jrFgFGaV.net]
123412345/999999999 => 9
>>632の例に追加

655 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 23:30:03.05 ID:fvygYhm9.net]
>>625
あ、ごめん1 3は1だね
3 1と書き間違えた

656 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 23:35:51.69 ID:7Tiab2M6.net]
>>632 Java
https://ideone.com/DX4VYY

657 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 23:40:44.97 ID:7Tiab2M6.net]
>>636
循環部の周期じゃなくて、小数点以下の循環部の終わる位置を調べてる気がしてきた…修正が必要ですw

658 名前:デフォルトの名無しさん mailto:sage [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

659 名前:デフォルトの名無しさん mailto:sage [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

660 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:08:36.27 ID:iFlHYuR3.net]
1234/555 => 3

>>636だと4になる
>>638だと無限ループって怖くね?



661 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:10:07.02 ID:YC9N9M8Q.net]
>>640
サンプルデータでは問題ないが
場合によっては無限ループの恐れアルかも

662 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:11:14.76 ID:YC9N9M8Q.net]
>>639 は無限ループの恐れなし

663 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:13:47.95 ID:iFlHYuR3.net]
>>642
ideoneに食わせたらTime limit exceededになる・・・なんでや
https://ideone.com/2b6wUH

664 名前:デフォルトの名無しさん mailto:sage [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

665 名前:デフォルトの名無しさん mailto:sage [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

666 名前:自分は出題者じゃなくて632です mailto:sage [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よな?

667 名前:デフォルトの名無しさん mailto:sage [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
になるよ

668 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:29:14.36 ID:iFlHYuR3.net]
>>647
5が1個足りてませんぜw
1234/55=22.4[36]3636... => 2

669 名前:デフォルトの名無しさん mailto:sage [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

670 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:37:35.25 ID:iFlHYuR3.net]
>>649
じゃから、
1234/555 = 2.2[234]234234... だから答えは3にならんとあかんじゃろ



671 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 00:37:56.28 ID:YC9N9M8Q.net]
>>649
bug に気がついた。循環する範囲だけの長さを求めていない

672 名前: mailto:sage [2018/11/22(木) 00:44:22.07 ID:r9/Xo7jY.net]
>>587
私もよーく考えました、>>571 の推論で正しいと思い直しました。
「数字と数字を対応させる」のではなく「数字の中の因数5 と別の数字の中の因数 2 とを対応させる」んですね,週末になったらちゃんと書きます

ごめんなさい…

673 名前:デフォルトの名無しさん mailto:sage [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

674 名前:604 [2018/11/22(木) 02:49:00.32 ID:zC+py8mV.net]
>>541
Kotlin
https://paiza.io/projects/TlIXUiQhX1uJMvGlxSRnHA

>>608の改造版

重複調査はビットフラグ使ってやるようにした。
出力は番号を振って出すようにした。

675 名前:デフォルトの名無しさん [2018/11/22(木) 03:19:07.41 ID:zC+py8mV.net]
>>617
問題の意味がわからない。

676 名前:デフォルトの名無しさん mailto:sage [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

677 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 15:33:08.34 ID:yB1Us7SO.net]
17941970723/5711177472=
3.
14155370
[
07847337299484291004011020163934418881248871826338
51095286012502326945724442022732505973857434350098
中略
81545008587679202836020711912487386979243218306349
2795623634229099298422222099702245
](周期=1584)
であってる?

678 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 15:43:48.55 ID:lSIebnj9.net]
>>657
あってる

679 名前:デフォルトの名無しさん mailto:sage [2018/11/22(木) 15:54:06.63 ID:yB1Us7SO.net]
>>658
1009

680 名前:デフォルトの名無しさん [2018/11/22(木) 23:20:25.14 ID:8KGvhG/L.net]
>>632
https://ideone.com/hY41ni



681 名前:デフォルトの名無しさん mailto:sage [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], [

682 名前: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
[]
[ここ壊れてます]

683 名前:デフォルトの名無しさん mailto:sage [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

684 名前:デフォルトの名無しさん mailto:sage [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>

685 名前:デフォルトの名無しさん mailto:sage [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

686 名前:デフォルトの名無しさん mailto:sage [2018/11/23(金) 20:55:58.69 ID:5iW/esUy.net]
>>663
https://ideone.com/SHKftF
・行頭と行末は適当に削除しちゃってる

687 名前:デフォルトの名無しさん mailto:sage [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>

688 名前:デフォルトの名無しさん mailto:sage [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>")

689 名前:デフォルトの名無しさん mailto:sage [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>")

690 名前:デフォルトの名無しさん mailto:sage [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



691 名前:デフォルトの名無しさん mailto:sage [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>

692 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 00:04:24.01 ID:IB4DmzOp.net]
>>670
* 以降にスペース文字が含まれていても、もれなく扱うなら
@a = map{"<li>$_</li>"} /\* (\w+)/g;

@a = map{"<li>$_</li>"} /\* ([^\n]+)/g;

693 名前:デフォルトの名無しさん [2018/11/24(土) 02:05:34.99 ID:Q9o1GKtC.net]
>>664
問題の意味がわからない。

694 名前:デフォルトの名無しさん mailto:sage [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進数ということらしい

695 名前:デフォルトの名無しさん [2018/11/24(土) 02:35:47.10 ID:Q9o1GKtC.net]
>>663
Kotlin
https://paiza.io/projects/San6JOBupEDa6gEL9f6L5Q
拡張関数使ってみました。

696 名前:デフォルトの名無しさん [2018/11/24(土) 02:43:21.86 ID:Q9o1GKtC.net]
>>673
なるほど。そういうことか。ありがとう。

697 名前:デフォルトの名無しさん [2018/11/24(土) 03:26:26.65 ID:Q9o1GKtC.net]
>>664
Perl5
https://paiza.io/projects/AJSUVyggQJnm7GnS8_ZC1g

698 名前:デフォルトの名無しさん mailto:sage [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倍するのを繰り返して同じ余りが出たらそこで循環と判定するというやつ。

699 名前:デフォルトの名無しさん mailto:sage [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可能。

700 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 05:34:48.85 ID:Dcky2N9A.net]
>>664
https://pastebin.com/6HttXyVt



701 名前:デフォルトの名無しさん [2018/11/24(土) 05:38:41.45 ID:Q9o1GKtC.net]
>>632
C (その2)
https://paiza.io/projects/21K5fAVsJlYtob_H0rZ9LA

よく考えたら出来た。
循環になっている桁の最初の余りを取っておいて次に出るまでカウントすれば良いだけで余りを全て保存しておく必要ないんだな。

702 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 05:41:18.30 ID:Dcky2N9A.net]
>>679の言語は
JavaScript( Windows Scripting Host用 )ね

703 名前:デフォルトの名無しさん mailto:sage [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

704 名前:デフォルトの名無しさん [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!!

705 名前:デフォルトの名無しさん mailto:sage [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.

706 名前: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!
[]
[ここ壊れてます]

707 名前:デフォルトの名無しさん mailto:sage [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)

708 名前:デフォルトの名無しさん mailto:sage [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

709 名前:デフォルトの名無しさん [2018/11/24(土) 12:16:11.70 ID:1C+vWWG1.net]
>>684
あ、あいこはあいこと表示して終わっちゃうのね。。。
あいこの時はまたジャンケンし直しにして欲しい。
条件に入れればよかったかなぁ。。。

710 名前:デフォルトの名無しさん mailto:sage [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が象形と統一性がない。
気になってご飯が喉を通らなくてプログラミングどころじゃない…



711 名前:デフォルトの名無しさん [2018/11/24(土) 13:02:40.59 ID:1C+vWWG1.net]
gも象形のつもりだったんだが。。。

712 名前:デフォルトの名無しさん [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.

713 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 14:57:54.21 ID:Q9o1GKtC.net]
>>688
まずは瞑想でもして心を落ち着けると良い。

714 名前: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でグループ分けや自分が勝ちグループ側かの判定が違うアルゴリズムになった)
その場合、アルゴリズムの説明付きだと面白そう。

715 名前:デフォルトの名無しさん [2018/11/24(土) 16:39:00.82 ID:ZWAqZgZk.net]
>>683
Python3
https://ideone.com/PcHoga

716 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 16:56:21.89 ID:S/Hnk7Kr.net]
>>693
グーチョキパー以外をプレイヤーが出したときおかしな挙動しない?

717 名前:デフォルトの名無しさん [2018/11/24(土) 17:14:41.52 ID:ZWAqZgZk.net]
>>694
あいこの判定を手の種類数だけでしてたせいだな
修正した
https://ideone.com/3XBPBb

718 名前:デフォルトの名無しさん [2018/11/24(土) 22:52:47.96 ID:5TC6Hle/.net]
お題
順列を求めるのにシャッフルでデータをたくさん用意して
重複データを取り除くことで求めている人がいた
順列の数の何倍位のデータを用意すればいいか調べる

719 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 23:20:30.16 ID:Vcpm1NYO.net]
許容誤差と確率の問題じゃん

720 名前:デフォルトの名無しさん mailto:sage [2018/11/24(土) 23:23:27.73 ID:7YEvwBu9.net]
>>696
二度と来なくていい



721 名前:デフォルトの名無しさん mailto:sage [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

722 名前:679 [2018/11/25(日) 01:57:22.20 ID:ae+bi37x.net]
>>699

>>687

723 名前:デフォルトの名無しさん mailto:sage [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", "パー", "ぱー"

勝敗の判定は「勝」、「負」、「相子」で出る。

724 名前:679 [2018/11/25(日) 07:47:50.59 ID:ae+bi37x.net]
>>701
ジャンケンゲームの肝?ってPCはランダムな値を使う所だと思うんですが・・・
あと、私が勝手にアイコといえばジャンケンやり直しって勝手に思い込んでて仕様に盛り込まなかったのがダメなんですが、
アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いしたいです。

>>699 さんも、アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いします。

725 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 11:54:57.77 ID:qcobBjeQ.net]
お題
標準運指(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

726 名前:デフォルトの名無しさん mailto:sage [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

727 名前:デフォルトの名無しさん [2018/11/25(日) 13:38:17.14 ID:k7/W79Is.net]
>>702
そういうインタラクティブなやつか。
じゃあまた暇があったら作ろう。

728 名前:デフォルトの名無しさん [2018/11/25(日) 16:23:23.79 ID:rkqtyTFb.net]
お題:Brainfuckのインタプリタを実装せよ
仕様 https://ja.wikipedia.org/wiki/Brainfuck

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
⇒ Hello World!

++++++++[>++++++++<-]>++.<++++++[>++++++++<-]>.<----[>++++<-]>-.++++++++.+++++.--------.+++++++++++++++.<----[>++++<-]>--.++++++++.
⇒ ?

729 名前:デフォルトの名無しさん mailto:sage [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

730 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 19:29:25.63 ID:Iiz4BNf0.net]
>>706 C
昔書いたやつ
https://ideone.com/r8gfF0

mandelbrotがideoneで2.9s



731 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 21:08:13.52 ID:FiKNHiMA.net]
>>708
ideoneのbrainfuckより速いじゃないかw
https://ideone.com/E28MuB

732 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 21:09:21.48 ID:F5E3KDnq.net]
>>709
笑った

733 名前:デフォルトの名無しさん mailto:sage [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);
}->($_);
}

734 名前:デフォルトの名無しさん mailto:sage [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

735 名前:デフォルトの名無しさん mailto:sage [2018/11/25(日) 23:34:40.02 ID:DgoPPid/.net]
>>711
再々投ゴメン
無名関数の末尾再帰版
× use feature qw{say};

○ use feature qw{current_sub say};

736 名前:697 [2018/11/26(月) 02:29:30.61 ID:jdmxn8AZ.net]
>>683>>702
HTML + JavaScript
https://codepen.io/an

737 名前:on/pen/OaERvj
即実行できた方がいいかなと思ってブラウザで動く JavaScript にしてみた。
PC側は10台まで台数入力する。
表示は「グー」、「チョキ」、「パー」になっている。
判定は方法ほ Kotlin のやつとほとんど同じ。

但し勝敗や相子に関係なく再挑戦ボタンが出る。
[]
[ここ壊れてます]

738 名前:デフォルトの名無しさん mailto:sage [2018/11/28(水) 01:28:37.70 ID:he8qnrZH.net]
>>706 c
https://ideone.com/AfZmCz

739 名前:711 mailto:sage [2018/11/28(水) 23:15:07.63 ID:he8qnrZH.net]
>>706 c
https://ideone.com/Plh1vx
・mandelbrotが4.24s
・セル配列をコンパクト化
・一部のforとswitchをgotoで置き換え
・データポインタの範囲チェックは廃止
・']'のとき無条件に'['へ戻ってたのを廃止

740 名前:デフォルトの名無しさん [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 更新
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <本格版>

www2u.biglobe.ne.jp/~shunbook/omocha/index.htm



741 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 11:20:14.11 ID:jwCbT4Qs.net]
盤の状態は4×4のやつで3^16=43046721通りだから後退解析で全状態の最善手が簡単に解ける

742 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 19:56:01.31 ID:Hd6SZyXm.net]
>>716
その "&&label" って初めてみたんだけどgcc拡張なんだな

743 名前:デフォルトの名無しさん mailto:sage [2018/11/29(木) 20:53:52.25 ID:lIzTCHsu.net]
>>719
これか。こんなのあったとは知らなかった。
nnabeyang.hatenablog.com/entry/2012/12/05/160312
しかしあまり利用する必要なさそうな予感。

744 名前:711 mailto:sage [2018/11/29(木) 23:18:59.74 ID:dyCCyrAH.net]
>>706 c
https://ideone.com/ddpLYQ
・ mandelbrotが4.24s→3.42s
・いくつかの単純なループを自前の命令に置き換え

>>719-720
まさかこれ使う日が来るとはね( ^ω^)

745 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 16:33:00.37 ID:M3yAddAk.net]
さすがC言語
奥が深いな

746 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 18:55:20.12 ID:eqr4XxJg.net]
儲かるお題を書いてください。

747 名前:デフォルトの名無しさん [2018/11/30(金) 19:56:50.93 ID:vThfWoZE.net]
お題: C言語のコメント/*〜*/, //〜 を除去するプログラムを実装せよ

748 名前:711 mailto:sage [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命令へ、なんとなく整理

749 名前:デフォルトの名無しさん [2018/11/30(金) 22:53:31.37 ID:cIO0a97u.net]
>>724
命令すんなカス

750 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 23:05:45.19 ID:iwzbC/nf.net]
>>725
ここまで最適化するとはすごいな
今VCに移植してやってみてる
VCはラベルのアドレスは取れないのでcase文内で処理してる
でも文字がダラダラと表示されるのが嫌なので、putchar()の所を
一度バッファに溜めておいて最後にputs()で一気に出力するようにした



751 名前: mailto:sage [2018/11/30(金) 23:09:14.20 ID:MkfLpznc.net]
>>724
やったことがある気がしたのですが、もうすっか

752 名前:阮Yれてしまいました… []
[ここ壊れてます]

753 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 23:09:48.33 ID:iwzbC/nf.net]
>>716のを移植するとこうなる
他のも同様だと思う
Random1.h というのは自前のストップウォッチクラスを使うためだけなので、
std::chronoを使って適当に自作すれば良い

https://ideone.com/Vf0qIj

754 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 23:16:05.51 ID:TjeK6E2T.net]
お題: 入力にこのスレのhtmlが与えられるので数字だけ,区切りで出力しなさい。

出力例
2018,11,30,...

755 名前:デフォルトの名無しさん mailto:sage [2018/11/30(金) 23:54:45.63 ID:8gAcKqbf.net]
どれだけの数字の種類に対応するのかで個性が出るな

756 名前:デフォルトの名無しさん [2018/12/01(土) 00:17:45.63 ID:XKE5KJf3.net]
>>726
誰もお前になんか言ってねーよ
自意識過剰なんじゃボケカス

757 名前:デフォルトの名無しさん [2018/12/01(土) 01:26:07.16 ID:3EVAE812.net]
>>724
Perl
https://paiza.io/projects/Q_MF7JmVJMMjF1aqffgfaw

Perl だと簡単だ。

但し /* /* */ */ みたいな二重のやつには対応していない。最初の /* から次に出た */ を削除して */ が残る。
(この辺は本物のCプリプロセッサでも同じかな?)

758 名前:デフォルトの名無しさん mailto:sage [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,# 略

759 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 01:53:10.02 ID:k1RHlnBk.net]
>>733
"/* hoge */" => ""

760 名前: mailto:sage [2018/12/01(土) 02:29:20.81 ID:J8cQMvWo.net]
>>733
>(この辺は本物のCプリプロセッサでも同じかな?)
そうですね。https://ideone.com/3TJq7U



761 名前:デフォルトの名無しさん [2018/12/01(土) 03:00:24.20 ID:3EVAE812.net]
>>735
あー。文字列リテラルについては何も考えてなかった。
明日考えよう。

>>736
やはりそうでしたか。わざわざどうも。

762 名前:デフォルトの名無しさん [2018/12/01(土) 03:09:09.09 ID:3EVAE812.net]
>>735
今閃いたので修正した。(URLは同じ)

763 名前:デフォルトの名無しさん [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

764 名前:デフォルトの名無しさん [2018/12/01(土) 03:24:23.46 ID:3EVAE812.net]
>>724
Cでも作った。
https://paiza.io/projects/2RgQrlBLrzJe9MQp9weQmQ

これは1文字づつ読んでモード切り替えて出力したりしなかったりする方式。
文字列リテラルにも対応。

765 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 03:40:27.80 ID:mIATMgqT.net]
>>738
'"', /* hoge */, "fuga" => '"', /* hoge */, "fuga"

766 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 03:45:42.76 ID:mIATMgqT.net]
>>738
"// hoge" => "

767 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 04:05:45.76 ID:3EVAE812.net]
>>741>>742
あ、それか。それは明日考えよう。

768 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 04:06:53.29 ID:3EVAE812.net]
C言語の方もシングルクォート考慮してないから似たようなものだな。

769 名前:デフォルトの名無しさん [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

770 名前:デフォルトの名無しさん [2018/12/01(土) 07:52:53.53 ID:U3mK8vlP.net]
>>732
誰も俺に言われてると思ってねーよ
自意識過剰なんじゃボケカス



771 名前:デフォルトの名無しさん [2018/12/01(土) 11:03:33.46 ID:XKE5KJf3.net]
>>746
生きづらそう

772 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 11:10:29.72 ID:50ygxsN0.net]
>>733
PCRE(Perl)の正規表現なら再帰マッチ(&R)や(&1)使いなせぇ
参考サイトはイロイロあるし

773 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 11:16:56.49 ID:50ygxsN0.net]
>>748
ゴメン再帰マッチは(?R)や(?1)だた
時間あればnest対応版書いてみたいけど
多分ないや…

こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける

774 名前:デフォルトの名無しさん [2018/12/01(土) 12:39:50.92 ID:U3mK8vlP.net]
>>747
おまえやわw
いちいち素っ頓狂なレスすんなカスw

775 名前:デフォルトの名無しさん mailto:sage [2018/12/01(土) 12:41:56.31 ID:1eGLRG7/.net]
いつもの単芝君やないか
この板に粘着して荒らしまわってる奴やで
意思疎通は不可能なのでNGするなりスルーするなりしてくれ

776 名前:デフォルトの名無しさん [2018/12/01(土) 15:19:58.00 ID:3EVAE812.net]
>>733の改造終了(URLは同じ)
長い呪文になってしまった。

>>748>>749
なるほど。その内暇な時にでも考えよう。

777 名前:デフォルトの名無しさん [2018/12/01(土) 17:02:07.43 ID:3EVAE812.net]
>>740も改造終了(URLは同じ)。

778 名前:デフォルトの名無しさん mailto:sage [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/ を参考にした

779 名前:デフォルトの名無しさん mailto:sage scに誤爆した [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/ を参考にした

780 名前:デフォルトの名無しさん [2018/12/01(土) 17:37:04.95 ID:XO3Kyvz4.net]
>>755 はインタプリタでないので無視してください



781 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 00:35:34.00 ID:twRH93OM.net]
>>706
Kotlin
https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA

1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。

782 名前:711 mailto:sage [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で分岐するほうが移植性あっていいよね( ^ω^)

783 名前:デフォルトの名無しさん mailto:sage [2018/12/02(日) 16:29:28.37 ID:hHHhmr7T.net]
Python「・・・」

784 名前:デフォルトの名無しさん mailto:sage [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通りが答え。[]内

785 名前:を使用数字とすると、
  例として、(8,11)は[8,1]の2種類, (10,11)は[1,0]の2種類からなる。
  対象外は (8,10)は[8,1,0] (9,10)は[9,1,0]で ともに2種類ではない。

 ※解き方をパックて単純化した問題。
[]
[ここ壊れてます]

786 名前:デフォルトの名無しさん mailto:sage [2018/12/03(月) 23:49:23.73 ID:CrTNh3lq.net]
数え上げ系のお題はつまんない

787 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 10:39:39.35 ID:ZczbahAK.net]
パズルソルバーは制約・論理プログラミングが最適だね。

788 名前:デフォルトの名無しさん [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

789 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 13:34:55.49 ID:fo8RIf+e.net]
>>763 無駄な括弧があったので修正

regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m

puts src.gsub(regexp, '\1\2')

790 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 17:02:17.81 ID:N7rAE58b.net]
>>758
https://ideone.com/3hct3R

caseに書いちゃうと遅くなるな



791 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 17:20:50.80 ID:tkE9zz4k.net]
お題: テキストが入力されるのでそれがお題であれば1,お題でなければ0を出力せよ

792 名前:デフォルトの名無しさん [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

793 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 17:43:36.31 ID:evmq38l5.net]
お題

C/C++言語のソースをHTMLに変換

・色分け(外部スタイルシートで色分け以外にも
サイズや種類など色々と細かく指定可能)表示
・コメント・クォート・マクロ定義部分・マクロ等に対応
・ローカル変数・グローバル変数・static関数・非static関数
ライブラリ変数/関数/マクロ(ヘッダ記載)・
ローカル型・グローバル型名の区別

入力:コマンドラインからファイル名(.c/.cpp)
出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を
新規作成

794 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 17:47:43.27 ID:evmq38l5.net]
あと、コードブロックや式の括弧のネストレベルに応じて
背景色を変えてほしい(要望)
コマンドラインからタブ=4,8とか指定できるようにもして欲しい

795 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 17:58:45.10 ID:0EeyK9d3.net]
>>766
ruby -ne'p~/\Aお題\Z/?1:0'

796 名前:デフォルトの名無しさん [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. 終了。

797 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 18:14:10.74 ID:evmq38l5.net]
型に応じて変数の色分け(スタイル変更)に対応できたら最高
忘れてたけど予約語の色分けは当然
ソースコードの構文エラー箇所以降は単色赤文字で表示

798 名前:デフォルトの名無しさん mailto:sage [2018/12/04(火) 19:05:35.22 ID:Ntdpy5BB.net]
>>766 PowerShell
[int]("お題" -eq $(Read-Host))

799 名前:デフォルトの名無しさん mailto:sage [2018/12/05(水) 04:19:34.99 ID:fABNAu0P.net]
>>760 Java
https://ideone.com/a1wOZ4

800 名前:デフォルトの名無しさん [2018/12/05(水) 19:36:38.80 ID:W3jESzak.net]
お題:ビュフォンの針をシミュレートして円周率の近似値を求めよ



801 名前:デフォルトの名無しさん [2018/12/05(水) 20:02:35.88 ID:W3jESzak.net]
自分でやってみた
Python3
https://ideone.com/A2FnPP
1000万本投げた場合
3.14219665312

802 名前:デフォルトの名無しさん mailto:sage [2018/12/05(水) 23:06:27.91 ID:dgv/Vo0c.net]
angleを計算するのに思いっきりπの値使ってるだろうし..www

803 名前:デフォルトの名無しさん mailto:sage [2018/12/05(水) 23:30:47.41 ID:oCZO3Dfm.net]
wikipediaは日本語版だけその問題に言及して疑似コードも載ってるのな

804 名前: mailto:sage [2018/12/05(水) 23:30:56.16 ID:qUBA/FDJ.net]
>>777
そんなツッコミは初めてみました、うまいですね…

805 名前:デフォルトの名無しさん [2018/12/05(水) 23:42:52.79 ID:W3jESzak.net]
>>777
書いてて思ったけどめんどくさくなってそれ以上考えなかった

806 名前:デフォルトの名無しさん mailto:sage [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 "

807 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 01:57:54.87 ID:CjS0UpEg.net]
こういうプログラム面手するのつらいだろうな

808 名前:デフォルトの名無しさん mailto:sage [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

809 名前:755 mailto:sage [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秒くらい)

810 名前:デフォルトの名無しさん mailto:sage [2018/12/06(木) 21:56:29.19 ID:QyI+7EvW.net]
>>784
from collections import Counter
でもうちょっと楽できる



811 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 15:14:44.93 ID:wiJMm9Hc.net]
>>784
蛇足的改良?してみた(一応C++だが殆どC)
https://pastebin.com/dRM2yC3e

812 名前:デフォルトの名無しさん [2018/12/07(金) 22:19:34.17 ID:x8xNXHP3.net]
お題
1,3,4,6,7,9,10,12,…
のように1から始まり奇数, 奇数,偶数,偶数,
奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか

813 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 22:30: ]
[ここ壊れてます]

814 名前:34.68 ID:avhY9emJ.net mailto: floor(2019 * 1.5) []
[ここ壊れてます]

815 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 22:32:31.84 ID:avhY9emJ.net]
結果書いてなかった
3028

816 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 22:35:02.23 ID:avhY9emJ.net]
計算量的に整数の乗算とシフト演算だけの n * 3 >> 1 のほうが良いか

817 名前:デフォルトの名無しさん mailto:sage [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

818 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 22:47:23.26 ID:avhY9emJ.net]
>>791
1が0番目で計算してね?
https://ideone.com/8B4VVN

819 名前:デフォルトの名無しさん mailto:sage [2018/12/07(金) 22:48:51.29 ID:xSpw6JJG.net]
>>792
あー本当だ
しかも n * 3 >> 1 でよかったんだね

820 名前:デフォルトの名無しさん [2018/12/08(土) 03:40:55.13 ID:xmV4OmOO.net]
>>787
Kotlin
https://paiza.io/projects/IrRQGqJSJL8lVYGlBueZDw



821 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 08:09:08.92 ID:JIGsOpwq.net]
第n項=3n/2+(-1)^n/4-1/4

822 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 09:20:01.90 ID:vpfNpx82.net]
プログラミング初心者なんですがJavaを覚えるのに良い課題下さい
言語の本は一冊読みました

823 名前:デフォルトの名無しさん [2018/12/08(土) 09:29:35.75 ID:5PBkTMHJ.net]
Winならtypeコマンド(LinuxとかUnix系だとcat)と同じ機能を自作してみるとか、行番号も表示するようにするとかから始めては?

824 名前:デフォルトの名無しさん [2018/12/08(土) 09:53:44.58 ID:Mku3deOK.net]
>>787
f=:+/@$&1 2

f 2019
3028

825 名前:デフォルトの名無しさん [2018/12/08(土) 09:59:51.42 ID:Mku3deOK.net]
>>798
言語はJ

826 名前:781 mailto:sage [2018/12/08(土) 12:53:06.37 ID:JIGsOpwq.net]
整数計算オーバーフローが発生していたのを修正
https://pastebin.com/FAzjRJn5

827 名前:デフォルトの名無しさん [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

828 名前:デフォルトの名無しさん [2018/12/08(土) 17:29:13.00 ID:xmV4OmOO.net]
>>801
問題の意味がわからない。図とか描いてくれ。

829 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 17:33:47.41 ID:kCA+QhwE.net]
>>801
石の大きさはゼロで格子点とでも考えればいいのかな

830 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 17:36:28.60 ID:m52vxjN5.net]
ああ共円か
有名なゲームだな



831 名前:デフォルトの名無しさん [2018/12/08(土) 19:05:02.19 ID:xmV4OmOO.net]
共円でググってようやっとわかった。

832 名前:デフォルトの名無しさん mailto:sage [2018/12/08(土) 19:37:58.42 ID:xPmIyiBg.net]
>>796
テトリス

833 名前:デフォルトの名無しさん mailto:sage [2018/12/10(月) 02:09:47.01 ID:3g7m60y1.net]
>>787
1は0番目じゃなくて1番目だよね。念のため確認

834 名前:デフォルトの名無しさん [2018/12/12(水) 02:35:41.59 ID:84v7sPOJ.net]
お題
2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ

835 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 07:13:05.92 ID:SVnAXs6w.net]
どのような多角形をなすかの
仮定で方法も違ってくるだろうけど、
一般的な場合を視野に入れる限り
複数の数学ライブラリを組み合わせて
扱うソリューションパッケージ的なものに
なりそうでお題としてはなんだかなって感じ

836 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 08:10:30.84 ID:3f3X1OW4.net]
>>808
多角形の定義がひどい。
重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい)
重なってはいけないけど辺は突き抜けても良いのかとか。
描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。
o.8ch.net/1cbk7.png

837 名前:デフォルトの名無しさん mailto:sage [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…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。

838 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 09:01:00.07 ID:J4hfK+qs.net]
また数学か。数学板が嫌なら紙とえんぴつでやってろ

839 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 09:21:43.03 ID:YlPyc4+b.net]
ポリゴンで塗り潰してその色になれば真

840 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 11:12:59.34 ID:3f3X1OW4.net]
数学になるの?
俺CAD関連と3DCG関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。

ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?



841 名前:デフォルトの名無しさん mailto:sage [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

842 名前:デフォルトの名無しさん mailto:sage [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

843 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 11:56:39.21 ID:3f3X1OW4.net]
ベクトル係数の解法も綺麗だな。式も少ないし素晴らしいと思う。

844 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 12:12:03.42 ID:SeAXRl2+.net]
>>808 Java
https://ideone.com/xJBcjx
わかんねーので言語任せw

non_zero: >>810の星型の内部も多角形に含まれる
even_odd: >>810の星型の内部は多角形に含まれない

845 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 12:14:30.79 ID:ygJIxGmd.net]
>>814
このスレには解答者側に数学ができない人がいて、そういう人が文句を言ってる
かく言う俺も数学できないが文句は言わない

846 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 14:03:01.24 ID:FdJbiO2G.net]
数学の問題集から拾ってきただけみたいな雑な出題が叩かれてるんじゃなかったのか
問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど

847 名前:デフォルトの名無しさん mailto:sage [2018/12/12(水) 14:49:36.03 ID:GETLERsG.net]
純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、という

848 名前:問題だったら、わざわざプログラム板でやる面白味はないなあと思う。
数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。
個人的な感想です。
[]
[ここ壊れてます]

849 名前:デフォルトの名無しさん [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でも使いながらなんじゃろか。。。

850 名前: mailto:sage [2018/12/12(水) 20:48:43.83 ID:5ElL+qNp.net]
>>821
>純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、
それは甘い、大甘だと私の経験は私の心に語ってくれています



851 名前: mailto:sage [2018/12/12(水) 20:49:58.51 ID:5ElL+qNp.net]
>>822
そういう問題はある種の順序関係を仮定してインプリメントしたいところです

852 名前:デフォルトの名無しさん mailto:sage [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

853 名前:デフォルトの名無しさん mailto:sage [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) "

854 名前:デフォルトの名無しさん mailto:sage [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]

855 名前:デフォルトの名無しさん mailto:sage [2018/12/13(木) 09:40:48.46 ID:wBrOfppZ.net]
>>822
c
https://ideone.com/YkmUdB

c++
https://ideone.com/WXXvlU

856 名前:デフォルトの名無しさん mailto:sage [2018/12/15(土) 18:26:25.25 ID:RxHR1YVb.net]
お題:標準入力から読み取った行を出力せよ
ただし42を読んだ場合は出力せずに終了する
https://ideone.com/vdWddB

857 名前:デフォルトの名無しさん mailto:sage [2018/12/15(土) 18:51:24.63 ID:Hf86DN+J.net]
>>829
ruby -pe'~/^42$/&&exit'

858 名前:デフォルトの名無しさん [2018/12/15(土) 20:46:54.11 ID:Du8iBFv1.net]
>>829 Common Lisp
https://ideone.com/QQzEQh

read-lineの第三引数にnil以外を使ったの初めてだ

859 名前:デフォルトの名無しさん mailto:sage [2018/12/15(土) 23:34:07.15 ID:2jxK776v.net]
>>829
bash
https://paiza.io/projects/gIZdCMpBEoNvFnnjVvGGtA

860 名前:デフォルトの名無しさん mailto:sage [2018/12/15(土) 23:59:19.52 ID:QTag+jm2.net]
>>829 PowerShell
while (($var = (Read-Host)) -ne 42) { $var }



861 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 03:36:20.47 ID:X+FaDx+z.net]
>>829
python 3
https://ideone.com/it2Axq

862 名前:デフォルトの名無しさん mailto:sage [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桁だけの回答も可。

863 名前: mailto:sage [2018/12/16(日) 14:12:11.90 ID:IjCemHtZ.net]
>>835
年忘れ課題の時期になったんですね…

864 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 19:04:23.02 ID:P931WLXH.net]
>>835 Java
https://ideone.com/LgkDWF
あってんのかなー

865 名前:830 mailto:sage [2018/12/16(日) 19:54:33.15 ID:GrZg6kve.net]
>>837

2)の31からして自分のと違う。
自分のでは111だった。

javaのやついじって、112個の明細を出してみたら、[2,2,27] があった。
27は素数じゃないよね。いじり方が悪い?

866 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 19:56:19.00 ID:pjubjjb0.net]
>>838
自分も31は111だったわ

867 名前:デフォルトの名無しさん mailto:sage [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

868 名前:デフォルトの名無しさん mailto:sage [2018/12/16(日) 20:50:18.98 ID:P931WLXH.net]
>>838
まじだ・・・修正した
犯人は118行目だ!orz

869 名前:830 mailto:sage [2018/12/17(月) 20:45:38.05 ID:4p2KDXiR.net]
>>837 836
 当方の回答と一致しました。

>>840
4) 201931 だけ異なる(自分のがあっているとは限らないが……)。
※再帰の動きがよくわからない

870 名前:830 mailto:sage [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重ループ解を落とすのが目的だった)



871 名前:デフォルトの名無しさん mailto:sage [2018/12/21(金) 08:20:43.27 ID:hMEdBbLv.net]
お題:
真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群

872 名前:デフォルトの名無しさん mailto:sage [2018/12/21(金) 08:38:52.94 ID:choQhZIj.net]
遅延時間とかファンアウトとかは考慮不要ってことでいいのかな

873 名前:デフォルトの名無しさん [2018/12/22(土) 11:29:36.65 ID:7UfbjIEE.net]
参考にどうぞ
https://eng.kice.tokyo/logic/logic_ex3/

874 名前: mailto:sage [2018/12/22(土) 16:28:53.58 ID:vmp1HvU+.net]
>>846
昔カルノー図がかける範囲(3入力?4入力くらいだったかな?)で簡約化ツールを作ったことがあります
当時は書き捨て上等、でやっていたのですが、今は困ってしまっています、当時のプログラム記述能力は当時は今後もずっと保存されるものと当時は考えていたのですが、それは完全な誤りでした…

875 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:48:28.85 ID:V9Fp8lZV.net]
>>846
俺全然わかってない人なんだけど、
そのURLの一番下の、入力部分のNOTゲートを無視しない場合、
9個のNANDゲートで構成できるって書いてあるけど、
NOTゲートの部分を2個減らして7個で作るとかはあかんのん?

876 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 16:56:13.54 ID:jMuRFGAa.net]
半導体製造のコストがある
NANDゲートは作り易い、というか造りが簡素で単純
NOTゲートも作り易い

なので厳密には製造コストも考えないといけない

877 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 17:29:24.88 ID:gPP7+XoH.net]
>>848
ホントだ、AとCのNOTを一つずつ減らせるね
というかこれが最小になる保証もないよね

878 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 18:34:59.46 ID:m1FIlPHW.net]
>>846
カルノー図からの簡略結果が最終形ではない。
最終形は
Z=~ABC+A~C+~BC

879 名前:デフォルトの名無しさん mailto:sage [2018/12/23(日) 21:11:36.62 ID:9AXglOVX.net]
>>851
それA=0, B=0, C=0の結果から間違ってるんだが

880 名前:デフォルトの名無しさん mailto:sage [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

ともう一つでした。



881 名前:デフォルトの名無しさん mailto:sage [2018/12/24(月) 08:22:13.10 ID:bL5ZoHRn.net]
>>853
> Z=~ABC+A~C+~B~C
それA=0, B=1, C=0の結果が違うぞ

882 名前:デフォルトの名無しさん mailto:sage [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であってるんじゃないのん?

883 名前:デフォルトの名無しさん mailto:sage [2018/12/24(月) 13:42:11.05 ID:bL5ZoHRn.net]
>>855
すまん、合ってるわ
ちょっとボケてたな

884 名前:デフォルトの名無しさん mailto:sage [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 ] */

885 名前:デフォルトの名無しさん mailto:sage [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げ

886 名前:デフォルトの名無しさん [2019/01/18(金) 22:48:43.15 ID:sD1souQd.net]
あげ

887 名前:デフォルトの名無しさん [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

888 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 08:17:19.40 ID:9NMu+pMT.net]
お題スレじゃなくて、あなたの宿題無料でやりますよになってる

889 名前:デフォルトの名無しさん [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

890 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 12:58:12.91 ID:XYN5JTgF.net]
> CtmpW=900 tmpH=1000



891 名前:デフォルトの名無しさん [2019/01/19(土) 15:20:58.20 ID:M8Q3zGyy.net]
>>861
お題をやるかどうかは自由だし使う言語も自由なのでここは宿題向きスレではない。それに宿題用のスレは別にある。

892 名前:デフォルトの名無しさん [2019/01/20(日) 17:00:10.01 ID:XepLmY3z.net]
お題
チェス盤をかく

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

893 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 17:28:18.15 ID:bv4HmLR/.net]
for i in range(4):
print("□■□■□■□■")
print("■□■□■□■□")

894 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 18:45:01.40 ID:vla32kuj.net]
console.log(`
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
`);

895 名前:デフォルトの名無しさん mailto:sage [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)

896 名前:デフォルトの名無しさん mailto:sage [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*')
# =>
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

897 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 19:45:27.08 ID:z2xvgkTe.net]
>>868
>>869
お前ら天才だな
普段何やってんの

898 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 19:58:44.02 ID:vla32kuj.net]
>>870
ヒマ人どもの公開オナニーに騙されるな。
ベンチ取ってみれば分かるけど
>>868より>>867のほうが処理速度も速く、CPU、メモリ消費も勝ってる。

899 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:22:45.08 ID:n75q6Hj+.net]
解法や工夫は色々あっていい

900 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 23:40:01.19 ID:3oCDYmJz.net]
>>871
可読性も最強だしなw



901 名前:デフォルトの名無しさん [2019/01/21(月) 00:16:11.01 ID:evkqklOK.net]
前々からつくろうとしていまだ決定版ができてないのがある。
コマンド fileA fileBで、重複行を除いて連結と、
A-Bで重複行を除くやつ。入力が数百Mだときつい。

902 名前:デフォルトの名無しさん [2019/01/21(月) 00:20:48.31 ID:q5TMCwho.net]
きついのは口臭だけにしとけよ

903 名前:デフォルトの名無しさん mailto:sage [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 なのは考慮する必要があるが。

904 名前:デフォルトの名無しさん [2019/01/21(月) 07:09:30.84 ID:evkqklOK.net]
そんな機能あったっけ、と確認したみたけど意図する動作しない、連続しない重複も対象



Linuxコマンド集 【 uniq 】 ソート済みのファイルから重複した行を削除する
ファイルで重複している行を削除する。ただし,ファイルはソートしてある必要がある
https://tech.nikkeibp.co.j

905 名前:p/it/article/COLUMN/20060227/230918/


連続していない離れた重複行も削除したければ、sortコマンドコマンドで予めソートする必要がある。その代わり順番は保存されない。
https://hydrocul.github.io/wiki/commands/uniq.html
[]
[ここ壊れてます]

906 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:10:55.04 ID:rd0KMO5T.net]
要するにAの末尾とBの先頭で一致するとこだけを削除したいってこと?

907 名前:デフォルトの名無しさん [2019/01/21(月) 08:19:59.40 ID:evkqklOK.net]
2つあって。
一つは連結した単一ファイルで、後方にある重複行を取り除く。
もう一つはBに存在する行を取り除いたAの重複行を取り除く。
それぞれuniq拡張(A+B) 、uniq拡張(A-B)のような。

908 名前:デフォルトの名無しさん [2019/01/21(月) 09:47:36.96 ID:evkqklOK.net]
スクリプトやめてC++でやってみたら
ロードと書き込みの速度とほぼ同程度でできるようだ。

909 名前:デフォルトの名無しさん [2019/01/21(月) 11:56:42.83 ID:ub5sAEWO.net]
>>865 J
}:("1) 8 9 $ '_#'

_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_

910 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:07:07.09 ID:jV3tC4jb.net]
JってUnicode使えないの?



911 名前:デフォルトの名無しさん [2019/01/21(月) 13:14:23.06 ID:ub5sAEWO.net]
使えるんだけど私の方が勉強不足で。

912 名前:デフォルトの名無しさん [2019/01/21(月) 14:03:05.80 ID:chW+Guj1.net]
>>865
Perl
https://paiza.io/projects/06iuVCc-HeWgTb7j2TrTMQ

913 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 14:14:22.79 ID:P73TaUU+.net]
>>879
A-Bの部分は
grep -x -v -f B A
でできるけど順序を保存したuniqはコマンドだけではできないのかな

914 名前:デフォルトの名無しさん [2019/01/21(月) 18:14:39.49 ID:chW+Guj1.net]
そういうコマンドを別途作るか、全部作っちゃうかかな。

915 名前:デフォルトの名無しさん mailto:sage [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


916 名前:デフォルトの名無しさん [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

917 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 22:56:33.96 ID:uToUSKRf.net]
>>865 octave
https://ideone.com/KyX1rR

918 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 23:04:52.30 ID:PFiT+1XJ.net]
>>226
Javaはunsignedの概念がない

919 名前:デフォルトの名無しさん mailto:sage [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 等のハッシュ値計算してそれだけ保管しておいて比較した方が良いかもね。

920 名前:デフォルトの名無しさん [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



921 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 11:22:34.61 ID:ez/DcBYq.net]
普通に行ごとにソートして重複を除去すればいいだけやん

922 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 12:39:35.18 ID:bOf9t ]
[ここ壊れてます]

923 名前:fZi.net mailto: >>865 javascript
[...function*(){for(var i=0;i<64;i++)yield (i&7)==7?'\n':'■□'[i&8?i%2:+!(i%2)]}()].join``
[]
[ここ壊れてます]

924 名前:デフォルトの名無しさん [2019/01/22(火) 12:48:37.38 ID:J1mDHp9Y.net]
>>893
順序変えなくないんだって。

925 名前:デフォルトの名無しさん [2019/01/22(火) 18:32:37.01 ID:f5q/almD.net]
>>865 Ruby

puts (["□■"*4,"■□"*4]*4)

926 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 18:48:04.82 ID:bOf9tfZi.net]
>>881
J分からない人向け解説キボンヌ

927 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 22:15:16.89 ID:4TOwjU0o.net]
>>865 javascript
['□■', '■□'].map(s => s.repeat(4) + '\n').join``.repeat(4)

928 名前:デフォルトの名無しさん [2019/01/24(木) 21:04:14.42 ID:HE3o+0uB.net]
>>865 Lua
print (((("_#"):rep(36)):gsub("(........).","%1\n")))

929 名前:デフォルトの名無しさん mailto:sage [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になってる間違いでしたごめんなさい。

930 名前:デフォルトの名無しさん [2019/01/25(金) 20:09:30.47 ID:s1700d1K.net]
お題
n個からr個選ぶ組み合わせの個数を求める



931 名前:デフォルトの名無しさん mailto:sage [2019/01/25(金) 22:06:56.43 ID:7NAKvkXa.net]
数学の問題が叩かれるのはここのアホどもには難しいからなんだ!
決してスレ違いだからじゃないんだ!
だから高校1年の教科書の定義引き写すだけの簡単な問題なら叩かれないんだ!

932 名前:デフォルトの名無しさん mailto:sage [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);
に改良しようとしたらエラーでる…
なんでか分かる方いたら教えてください。

933 名前:デフォルトの名無しさん mailto:sage [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);

934 名前:デフォルトの名無しさん [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

935 名前:デフォルトの名無しさん [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)!に分解)

936 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 04:32:41.56 ID:Ve68vOks.net]
>>904
ありがとう!


937 名前:ずかしい… []
[ここ壊れてます]

938 名前:デフォルトの名無しさん mailto:sage [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;
}

939 名前:デフォルトの名無しさん [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

940 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 11:22:21.12 ID:tq46h9Ux.net]
お題
複数の線分が平面上で重なりがあるかないかしらべる。



941 名前:デフォルトの名無しさん mailto:sage [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] &

942 名前:デフォルトの名無しさん [2019/01/26(土) 13:54:20.56 ID:+oP10x+/.net]
>>910
適当に連立方程式とくだけじゃなかったです?
数学出来ないんですけど。

943 名前:デフォルトの名無しさん [2019/01/26(土) 14:10:31.09 ID:t2YAFdPa.net]
人狼AI と 人狼ゲーム

944 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 14:39:24.25 ID:YRte2Dpq.net]
>>865 Perl5
print ((qw{□■}x4, "\n", qw{■□}x4, "\n")x4);

実行結果
$ perl 12_860.pl
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

945 名前:デフォルトの名無しさん mailto:sage [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
実行結果

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□

946 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 17:16:36.10 ID:5cGQ6lSj.net]
お題: マークダウン記法の見出しをHTMLに変換しなさい

947 名前:デフォルトの名無しさん [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 砂坊主

948 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 21:39:22.15 ID:Ve68vOks.net]
byでは?

949 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 21:56:29.11 ID:lXnCadeF.net]
レス古事記に構うなよ

950 名前:デフォルトの名無しさん mailto:sage [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] &



951 名前:デフォルトの名無しさん mailto:sage [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)]

952 名前:デフォルトの名無しさん mailto:sage [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");
}

953 名前:デフォルトの名無しさん mailto:sage [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);

954 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 06:44:59.11 ID:mVMeZ4rl.net]
>>923
直線じゃなくて線分だぞ

955 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 06:46:02.03 ID:z0hosMYm.net]
>>916 javascript(es2018 regexネームドグル

956 名前:ープのため)
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>
[]
[ここ壊れてます]

957 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 08:20:11.42 ID:rwuNPA7J.net]
>>924
線分ですよ

958 名前:デフォルトの名無しさん mailto:sage [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);
端点も含まんとあかんのとちゃう?

959 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 12:22:09.16 ID:rwuNPA7J.net]
重なりの定義によるかも
接しているのは重なりなしとしました

960 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 12:42:45.94 ID:rwuNPA7J.net]
と思ったけど=ありのが正解でした



961 名前:デフォルトの名無しさん [2019/01/27(日) 13:15:46.24 ID:4tSdie01.net]
お題
半径が整数の3つの円ある。
どの円も他の2つの円に外接している。
3つの円の中心点を結んでできる
三角形がピタゴラスの三角形に
なる場合の3つの円の半径を
100未満についてすべて求める。
例えば3つの円の半径が1,2,3の時
辺の長さが3,4,5のピタゴラスの
三角形ができる。

962 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 13:54:53.07 ID:wgzaqL4l.net]
>>930 C++
https://ideone.com/TvwEx3

963 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 14:02:09.42 ID:/cT7Kgd3.net]
>>930 Java
https://ideone.com/vHvOJu

964 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 14:08:22.33 ID:u288xi28.net]
>>930
python3
https://ideone.com/PPyoFC

965 名前:デフォルトの名無しさん mailto:sage [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

966 名前:デフォルトの名無しさん mailto:sage [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;

967 名前:デフォルトの名無しさん mailto:sage [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],
 # 中

968 名前:略 #
 [33, 66, 99],
 [35, 84, 85],
 [36, 84, 90]]
[]
[ここ壊れてます]

969 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 18:48:49.63 ID:z0hosMYm.net]
>>930 javascript
https://ideone.com/S1PkhD

970 名前:デフォルトの名無しさん mailto:sage [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)

本当は直線が平行なときも調べないといけないが略



971 名前:デフォルトの名無しさん mailto:sage [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}};    // 重なりあり

972 名前:デフォルトの名無しさん mailto:sage [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以下の条件で解を持つことであろう。

973 名前:デフォルトの名無しさん [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))

974 名前:デフォルトの名無しさん mailto:sage [2019/01/30(水) 16:02:43.18 ID:WqNbA033.net]
お題
古のスタートレックゲームを作る

975 名前:デフォルトの名無しさん [2019/01/30(水) 16:19:17.11 ID:gOIe9eSU.net]
>>942
そのゲームがどんなものだったのか詳細が書いてある所はある?
昔々 Apple ][ でテキストのやつを人がやってる所は見たことあるのだが細かいルールがどんなんだったか忘れた。
確かワープして移動してってクリンゴンが撃ってくるとかクリンゴンに向けて撃つだとかそんなのを繰り返すんだよな?

976 名前:デフォルトの名無しさん [2019/01/30(水) 19:13:41.13 ID:32wJF+eS.net]
>>865
RFOーBASIC

TEXT.INPUT S$,"","チェス番を入力してください。"
PRINT S$
END

977 名前:デフォルトの名無しさん mailto:sage [2019/01/30(水) 21:23:13.66 ID:zHXVmep5.net]
>>943
この辺りを参考にすればいいかと
https://ja.m.wikipedia.org/wiki/スタートレック_(マイコンゲーム)

978 名前:デフォルトの名無しさん [2019/01/31(木) 17:40:00.64 ID:uIyAv6WO.net]
>>865 Lua
print("░")
横から見た

979 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 17:57:03.10 ID:6YZEfuaO.net]
>>941 python の場合、これじゃいかんのか? まだ全くpythonを知らん人間だが。

scipy.special.comb(n, k, exact = False)

python はライブラリを使ってなんぼでしょ。 生の言語で比較するのは時代遅れ。 なんで膨大な処理が必要なAI でpython が主流になったか。

980 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 18:21:11.67 ID:JEItRzDd.net]
ライブラリを紹介するスレじゃないんだが。
mathjs
math.combinations(7, 5)

こういうの延々と続けるの?
バカじゃないのwww



981 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 18:41:17.06 ID:6YZEfuaO.net]
>>948 別に構わんだろ。 そもそも言語なんてやりたいことを解決するのに便利かどうかだけの話なんだから。

そういう意味では、普通のことをやるにはどの言語でも大差はない。

FORTRAN なんて大昔の言語だがいまだに科学技術計算で使われ続けてきているのは、言語仕様ではなく高速なライブラリが整ってるからに他ならない。

なんでAI や科学技術計算にスクリプト言語のpython がもてはやされてるのかもう一度考えてみる必要があるのでは?

982 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 18:50:20.38 ID:6YZEfuaO.net]
いくら言語が優れていても、ある特定の環境だけでしか実用性がない言語と言うのは、別環境用のライブラリが整っていないからに他ならない。

例えばSwift これは、Mac環境下ではObjective-C の全てが使えるが、
言語的にはWindows などでコンパイルできても、ライブラリがないから実用として使うにはまだ程遠い。
API が整っていることが重要。

python がもてはやされてるのは、ライブラリが整ってるからだろ。 言語の良さがどうかなんてあまり関係ない。
ま、個人的な好き嫌いが出てくるのは仕方ないが、実用性があるかどうかはまた別の問題。

983 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 18:58:10.77 ID:6YZEfuaO.net]
そもそも、言語なんてアセンブラの時代からマクロで自分好みの文をかけるようになってたんだから、今更何を議論してるのかという気もする。

標準化された文法というのは評価はするが、それはどっちかと言うと頭でっかちな学者が考えること。
現場はいかにバグが少なく早く問題を解決できるかにかかってる。 つまり総合環境だろ。

984 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 18:59:37.75 ID:aRQ4w2UO.net]
溜まってたものを一気に語ったな

985 名前:デフォルトの名無しさん [2019/01/31(木) 19:46:27.30 ID:REgWEVPY.net]
うむ。これからの時代はファミリーBASICだな。

986 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 19:59:18.32 ID:6YZEfuaO.net]
>>953 最初の頃のBASICは、10数個位しか命令は無かった。
ま、電卓がわりみたいなものでは有るが、基本的なプログラミング言語としては成り立ってた。

987 名前:デフォルトの名無しさん [2019/01/31(木) 20:11:31.45 ID:4JULsXj7.net]
>>947
たまたま、ライブラリで解決出来る問題だからってマウント取られてもね。。。
それに、C/C++みたいに多倍長整数サポートしてない言語と、サポートしてる言語でのアルゴリズムの違いや、
式変形して引き算を足し算に変えられる所は変えた方が速度出るとか、色々勉強にはなってるよ。
>>941の例じゃ(n - (r - 1))を(n - r + 1)にした方が速い。
(Haskellでは速いだけでなく、2の補数表現を(元の数値と別に)生成してるらしく、メモリ効率も上がる)

988 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 21:19:24.42 ID:Te48fFDx.net]
>(n - (r - 1))を(n - r + 1)にした方が速い。

>>955 あのさ、そんなのはコンパイラの最適化次第だろ。 勿論ど素人のプログラマじゃ無ければそれなりの工夫はするはずだが、そんな事は些細な事。 くだらんことを言うな。 むしろそんなコンパイラがクソ。 言語なんてのは言語道断。

989 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 22:25:01.31 ID:xJsSt9Re.net]
Python では、機械学習などの周辺ライブラリ一式が揃っているから、使われる

Ruby では、ベクトル演算のNArray があって、
処理速度はOctave にも匹敵するけど、一式揃っていない

北大の湊教授が作った、ZDD はあるけど

990 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 22:46:32.84 ID:2IY59Hh/.net]
scipy/scipy/special/cephes at master ・ scipy/scipy



991 名前:
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

このあたりをそのまま書ければいい
[]
[ここ壊れてます]

992 名前:デフォルトの名無しさん [2019/02/01(金) 04:58:43.05 ID:IMBPiIxm.net]
お題
平方数かどうか判定する

993 名前:デフォルトの名無しさん mailto:sage [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;
}

994 名前:デフォルトの名無しさん [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

995 名前:デフォルトの名無しさん [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より持たない。。。

996 名前:デフォルトの名無しさん [2019/02/01(金) 21:10:55.66 ID:qFuZrTt3.net]
これはいかに巨大数を高速判定するかだろ

997 名前:デフォルトの名無しさん [2019/02/01(金) 21:19:45.40 ID:qFuZrTt3.net]
目星はこれを荒く使えばつきそう


逆数と平方根を求める高次収束アルゴリズム
www.finetune.co.jp/~lyuka/technote/fract/sqrt.html

高速根号計算
takashiijiri.com/study/miscs/fastsqrt.html

998 名前:デフォルトの名無しさん mailto:sage [2019/02/01(金) 22:13:46.18 ID:kNvVsHFY.net]
https://code.i-harness.com/ja-jp/q/4829b

999 名前:デフォルトの名無しさん [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なループの始まり求めるの無理ゲー。。。

1000 名前:デフォルトの名無しさん mailto:sage [2019/02/01(金) 23:12:44.04 ID:VdCPb4pG.net]
ttps://ideone.com/xr1vcE

Newton-Raphson法ほど速くはないがせめてO(log(N))くらいで実装せにゃお題として出てくる意味がなかろう



1001 名前:デフォルトの名無しさん [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))

1002 名前:デフォルトの名無しさん [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)

1003 名前:デフォルトの名無しさん [2019/02/02(土) 09:51:18.58 ID:/6KX0oFw.net]
>>959 J
f =: = *: @ <. @ %:

1004 名前:デフォルトの名無しさん [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が計算できるのです。

1005 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 13:43:47.68 ID:OgiywF+Q.net]
>>949
えぇ…

1006 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 16:31:05.91 ID:9W2pTWu+.net]
>>972 その心は?

1007 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 16:42:03.23 ID:OgiywF+Q.net]
>>970
えぇ…

の間違い。

1008 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 17:31:46.69 ID:rEiZ26fd.net]
本質的に高度な数学的知識が要求され
る問題は板違いかと

言語によっては、問題にジャストフィット
するライブラリが標準で添付されているとか
ライブラリ管理コミュニティを通じて
容易に入手できるとかあるかもしれないが
その場合は紹介程度に。

言語処理系の言語処理の為の機能提供
である場合を除いて多くは本質的に多言
語に対応しており〜言語用のライブラリと
いう表現は兎も角〜言語のライブラリと表
現すると曖昧で誤解を招きやすい表現
として嫌われる場合もありえることに注意。
(別言語で記述される場合もある)

1009 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 17:36:46.77 ID:XgXX/tZQ.net]
なんしたのきゅうに

1010 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 17:57:26.00 ID:rEiZ26fd.net]
セルフホスティング対応な言語でライブラリを
自前で構成しているもので、他言語に移植されて
いない独自の機能を持つものもあるかもしれない
し、もっと極端に言えば独自性の高いライブラリに
最適化された言語を自前で作ってそれで記述され
ているものもあるかもしれないけど一般的には入手
は容易ではないかも



1011 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 19:52:10.51 ID:hDNgHqpo.net]
じゃあさ、各々複数行の
a.txt と、b.txtを並べて表示して。

1012 名前:デフォルトの名無しさん [2019/02/02(土) 23:25:24.42 ID:g8xy/J6N.net]
辺に沿って動くとき、AからBまでの最短経路はいくつあるか
         ┏┳┳┳┓B
         ┣╋╋╋┫
      ┏┳╋╋╋╋┫
┏┳┳┳╋╋╋╋╋┻┛
┣╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋┫
┣╋╋╋╋╋╋╋┛
┗┻┻┻┻┻┻┛
A

1013 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 00:45:38.22 ID:UGH880J+.net]
おねえさんがロボットになるやつかw

1014 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 00:55:19.58 ID:UTpNqxd4.net]


1015 名前:学受験の算数の問題に経路を数える問題があるよな
つまり小学生でも手計算で解ける
[]
[ここ壊れてます]

1016 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 00:57:22.00 ID:72eosYJ+.net]
>>975 アホちゃうの?
プログラムというのは、問題解決のための言語であって、問題が解決できなければどんなに美しい言語でも存在価値はない。
最速で美しく問題解決にたどり着ける言語が一番。 言語そのものの美しさなんて二の次。

英語でも日本語でも何でも良い。 利用できるものは何でも利用すれば良い。 好き嫌い言ってる奴はアホ。
どんなに綺麗な国の言葉でも高等教育が自国語でできない国がほとんど、それは利用できる教材が自国語で書いたものがないから。
日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。

1017 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 01:53:34.29 ID:wxxHWwaf.net]
別に高度な数学が必要になることは構わないけど、数学だけで話が閉じちゃうような問題はつまらないとは思う。数学的に解を求める解法自体が主題で、コーディングはただその解法を(日本語、英語などの自然言語と同様に)とあるプログラミング言語で記述しただけのような。
もちろん数学に価値がないといっているのではなく、話のウェイトとしてプログラムである部分がほぼないのなら、その話、ここじゃなくてもいいじゃんと思うよ。

1018 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 04:02:35.76 ID:JyP+XfGy.net]
つまらない問題だと思ったら無視すればいいだけじゃないかな
その問題に対して回答する人がいるなら、回答者(と出題者)にとっては
つまらない問題ではないってことなんだろうし

1019 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 04:46:34.72 ID:1lu6X4vo.net]
>>982
OS記述の言語は言語じゃないのか?
コンパイラなどの言語処理系記述の言語
も言語じゃないってわけだな
問題解決手段の一つではあるかもしれないが
通信系ソフトウェアの存在はどう説明?

既存の資産を維持しより効率的に活用する研究が
新しいプログラミング言語が次々と生成されてくる原
動力じゃないかと

1020 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 05:08:39.33 ID:l3Qt7IvN.net]
>>982
>日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。

ダウト。ノーベル賞を受賞した研究者はみんな英語で論文書いている。
あと、今の日本語での教育教材の蓄積があるのは、大雑把に言って、
ここ10年でノーベル賞受賞した面々の世代の研究者や技術者が書いた。
もちろん彼らは英語の文献を読み、勉強し、日本語の文献を書いた。
だから、英語の文献なんて要らないみたいな話はアホ。
ソファでポテチ食いながら「ジャガイモなんて買えばいいんだから、育ててる奴はアホ」と言ってるようなもの。



1021 名前:981 mailto:sage [2019/02/03(日) 05:15:20.75 ID:l3Qt7IvN.net]
プログラミング言語も一緒。
Cは泥臭い実用言語で、その前にはAlgolなど「綺麗な」言語が下敷きとしてあった。
Cは現在でも多くの問題を解決するための道具として活用されているが、
現在では使われていないAlgolなどの「綺麗な」言語なしにCは生まれなかった。

1022 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 05:39:02.55 ID:1lu6X4vo.net]
個々の言語の歴史観の講釈はスレ違い

確かに問題解決の道具であることが
中心かもしれないが、扱ってきた問
題の種類によって文法やライブラリ・
その取り扱い方に差異が生じている
が、同じ問題を別言語で「解く」と
優劣の違いがわかって面白いかもし
れない。
が、あんまし長くやってると不毛な
言語比較論、文化比較論になったり
して色々ヤバいからそろそろ一旦
お開きにしたら?


1023 名前:きはそれぞれの言語別スレッドで
ということで
[]
[ここ壊れてます]

1024 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 07:04:30.87 ID:LaZtKDWq.net]
お題:プログラムの実行時刻が午前なら「おはようございます、ご主人様!」、午後なら「お疲れ様です、ご主人様!」と表示させる

1025 名前:デフォルトの名無しさん mailto:sage [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");
}

1026 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 08:56:17.85 ID:l3Qt7IvN.net]
>>989
Pharo Smalltalk

Smalltalk ui inform: (Time now meridianAbbreviation = 'AM' ifTrue: [ 'おはようございます、ご主人様!' ] ifFalse: [ 'お疲れ様です、ご主人様!' ])

1027 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 09:19:47.58 ID:72eosYJ+.net]
python

from datetime import datetime
if datetime.now().hour < 12:
print('おはようございますご主人様')
else:
print('お疲れ様です、ご主人様')

1028 名前:デフォルトの名無しさん mailto:sage [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

1029 名前:デフォルトの名無しさん [2019/02/03(日) 09:40:26.58 ID:cfde/ig7.net]
>>865 Common Lisp
https://pastebin.com/TLD3d9R1

実行結果
https://i.imgur.com/6Dne4jz.png

1030 名前:デフォルトの名無しさん [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



1031 名前:デフォルトの名無しさん [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

1032 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 10:13:31.71 ID:xEPkQ4sk.net]
この改行長文おじさんはどこからきたの。笑

1033 名前: mailto:sage [2019/02/03(日) 10:31:38.09 ID:t4xt++Qj.net]
>>982
>日本語だったら英語を知らなくてもノーベル賞が取れるだけの教材(ライブラリ)が揃ってる。
最近はそうでもないようですよ…ペーパーは英語だし、教科書=テキストレベルでも英語でしか発刊されない状況といいます
haskell をやろうとして圏論の教科書を探しましたが、欧米の本の和訳ばかりで日本人が書いた圏論の教科書はありませんでした

1034 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 10:35:41.62 ID:/jO+7TC8.net]
誰か次スレ頼む

1035 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 11:07:15.54 ID:72eosYJ+.net]
お題1: 現在地の緯度、経度を出せ
緯度:、、、、
経度:、、、、
お題2: 東京都新宿区西新宿2丁目8-1 の緯度、経度を出せ
緯度:、、、
経度:、、、
お題3: お題2で求めた緯度経度から住所を出せ
郵便番号:、、、
住所:東京都、、、、

1036 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 11:22:46.76 ID:72eosYJ+.net]
立てたよ
プログラミングのお題スレ Part13
https://mevius.2ch.net/test/read.cgi/tech/1549160513/

1037 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 11:23:36.56 ID:72eosYJ+.net]
>>1000 は、次スレに移動させるね。

1038 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 17:37:12.27 ID:csrqlAvs.net]
うめ

1039 名前:デフォルトの名無しさん [2019/02/03(日) 17:37:50.59 ID:oUppVF8S.net]
>>969
今までの苦労は一体。。。

数学的な平方根の近似値は√x = x ^ (1/2)だった。。。

Haskell だとこんだけ。

mysqrt x = x ** 0.5

1040 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 17:38:30.96 ID:csrqlAvs.net]
次スレ

プログラミングのお題スレ Part13
https://mevius.2ch.net/test/read.cgi/tech/1549160513/



1041 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 128日 7時間 29分 24秒

1042 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<360KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef