2ch勢いランキング アーカイブ

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


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

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

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

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

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

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

プログラミングのお題スレ Part11
ttps://mevius.5ch.net/test/read.cgi/tech/1524570314/
デフォルトの名無しさん [sage] 2018/09/28(金) 10:41:53.02:Trt/L8Tp
console.log('>>%d乙', 1);
デフォルトの名無しさん [sage] 2018/09/28(金) 10:55:48.49:Xb8eTiN0
3つの値の最小値を調べるには2回比較をしなくてはならないことを証明せよ
デフォルトの名無しさん [] 2018/09/28(金) 12:28:47.83:6mi1IA73
やだ
デフォルトの名無しさん [] 2018/09/28(金) 13:55:38.90:jm6QTuW3

3つの値のうちの最小値が分かった時の情報量はlog3
1回の比較によって得られる情報量はlog2
2回の比較で2log2=log4
log2<log3<log4なので最低2回の比較をしなければ最小値を知る事はできない
デフォルトの名無しさん [sage] 2018/09/28(金) 14:20:38.29:25C/+Q0q

回数の定義による
ハードウェアでパラにやれば1回だと言い張ることもできるし
デフォルトの名無しさん [] 2018/09/28(金) 14:26:10.16:6mi1IA73
ここは数学のお題を解くスレではなくプログラミングのお題スレなので証明せよというお題ならば証明をするプログラムを作れという意味になる。
決して人間が頭で考えて証明してはならない。
デフォルトの名無しさん [] 2018/09/28(金) 14:46:03.56:jm6QTuW3
3つの数単体同士の比較だけじゃなくて、a+bとcとかa^cとb+cとか無限に考えられるから有限時間で証明するのは無理では?
デフォルトの名無しさん [sage] 2018/09/28(金) 21:22:39.80:CwsEryp/
ID:jm6QTuW3
デフォルトの名無しさん [sage] 2018/09/28(金) 22:47:33.75:21310r5m
[a, b, c].min
デフォルトの名無しさん [sage] 2018/09/28(金) 23:21:12.89:I0zPpFv8

値と言ってるのにどこから数式が出てくるんだろう…
デフォルトの名無しさん [sage] 2018/09/28(金) 23:31:28.87:Trt/L8Tp
例えばR^3の関数f(x, y, z)で
xが最小の時負、xが最小でなくyが最小の時0、xかyが最小でなくzが最小の時正
になるC^∞級の関数は存在するのでこの関数を使えば比較は1回で済む
デフォルトの名無しさん [] 2018/09/29(土) 00:17:28.49:mZMDBHA7

例えばどんな関数?
デフォルトの名無しさん [sage] 2018/09/29(土) 01:00:25.54:SXeyKQEb
比較って値そのものの大小の比較ってとだろ
デフォルトの名無しさん [] 2018/09/29(土) 01:06:03.17:IuTgmxg/
比較というのは差をみつけることだからな
ココでの差は引き算の差の意味ではない、当然

数字を引き算して差を求めることもできる、当然
デフォルトの名無しさん [sage] 2018/09/29(土) 01:15:28.45:SXeyKQEb
が言ってる比較って値そのものの差による比較ってことだろ

ってことな
わかった?
デフォルトの名無しさん [] 2018/10/01(月) 20:03:33.29:IziOBEHB
お題:f(n)::={nを連続するいくつかの正整数の和として表す表し方の総数}とおく
例えば、15=7+8=4+5+6=1+2+3+4+5よりf(15)=4である
上限Nが与えられたとき、n<=Nでf(n)が奇数となるようなnをすべて足し合わせた値を求めよ

10 -> 24
100 -> 665
1000 -> 18006
10000 -> 571940
100000 -> 18010994
1000000 -> 569929080
10000000 -> 18001029437
100000000 -> 569128815672
1000000000 -> 17994029079715
デフォルトの名無しさん [sage] 2018/10/01(月) 20:21:00.27:XiA3uZUZ
> nを連続するいくつかの正整数の和として表す表し方の総数

15は7+8と4+5+6と1+2+3+4+5の3通りの表し方があって
その総数f(15)が4ってどういうこと?
デフォルトの名無しさん [sage] 2018/10/01(月) 20:26:01.73:8OIwu5Mv

自身も含まれるんじゃない?
デフォルトの名無しさん [sage] 2018/10/01(月) 21:52:20.39:RJeKuxhD
Java
ttp://https://ideone.com/FqcPpb
適当に作ったが考え方を変えないとideone時間が足りない
デフォルトの名無しさん [sage] 2018/10/01(月) 22:05:00.23:88z5+fOs

>連続するいくつかの正整数の和として表す表し方の総数

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

ttps://www.eikoh-seminar.com/echtas/blog/2015/10/post-224.html
>1以外の奇数の約数を何個持っているか
デフォルトの名無しさん [sage] 2018/10/01(月) 23:56:46.25:RJeKuxhD
Java
ttp://https://ideone.com/z2q0Sj

の考え方を導入してみた
デフォルトの名無しさん [sage] 2018/10/02(火) 20:12:32.93:3l+a4b56
Java
ttp://https://ideone.com/m7oieG
BitSetなんて使わず普通に再帰使ったほうが早かった…
デフォルトの名無しさん [sage] 2018/10/04(木) 17:48:26.02:WD/5XFit
10月の学校に着いた時間と帰った時間を平日分全部出力する(土日のみ休みで平日は必ず学校がある)
A君は神経質なので秒まで着いた時間と帰った時間をメモする
時間は任意とする。
入力例
2018/10/01 09:25:00
2018/10/01 17:30:00
出力例
入力例と同じフォーマットの形式の日付時間が平日分全て出力された後に、
今度は別のフォーマットで平日分全て出力される
出力例
2018/10/01 09:25:00
2018/10/01 17:30:00
2018/10/02 09:26:00
2018/10/02 17:24:00
:
:
:
平日のみ全部出力
:
:
別フォーマット出力例
20181001 092500
20181001 173000
デフォルトの名無しさん [sage] 2018/10/04(木) 18:15:15.90:rW/Q6M2G
やはり10/1と10/8は平日だった
デフォルトの名無しさん [sage] 2018/10/04(木) 18:17:14.17:THaWokSR
日本語でおk
デフォルトの名無しさん [sage] 2018/10/04(木) 18:18:57.90:GgsL2+/f
勤怠記録を整形したいです と正直に言えば話が早いのに
デフォルトの名無しさん [sage] 2018/10/04(木) 19:56:11.98:WD/5XFit

そうなんですけど、VBAで会社にソースはあるんですけど、他の言語でも見たいんです
デフォルトの名無しさん [sage] 2018/10/04(木) 21:05:04.35:THaWokSR
平日って設定要る?
文字列 "YYYY/MM/DD HH:MM:SS" をいろんなフォーマットに変換するだけの問題じゃ駄目?
なんで一旦 echo するの?
責めてるんじゃなくて単純な疑問ね
デフォルトの名無しさん [sage] 2018/10/04(木) 22:21:43.46:pTnAHI9j
C++
#include <cstdio>
#include <vector>
#include <tuple>

using namespace std;

int zeller(int y, int m, int d) {
if (m < 3) {
y--;
m += 12;
}
return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d ) % 7;
}

int main() {
vector<tuple<int, int, int, int, int, int>> v;
for (int y, m, d, h, i, s; scanf("%d/%d/%d %d:%d:%d", &y, &m, &d, &h, &i, &s) == 6; ) {
if (int w = zeller(y, m, d); 1 <= w && w <= 5) {
v.emplace_back(y, m, d, h, i, s);
}
}
for (auto [y, m, d, h, i, s] : v) {
printf("%d/%02d/%02d %02d:%02d:%02d\n", y, m, d, h, i, s);
}
for (auto [y, m, d, h, i, s] : v) {
printf("%d%02d%02d %02d%02d%02d\n", y, m, d, h, i, s);
}
}
デフォルトの名無しさん [sage] 2018/10/04(木) 22:45:58.84:yblvOSiR

平日って設定の理由としては、問題を少し複雑にしたかったから、あえて入れてみた
まあその制限が問題を難しくしてるのかって話もあるけど
文字列を色々なフォーマットにするでもいいけど、日本語でおkとか入力例とか出力例が自分でも適当過ぎた気がするので、また今度の機会に‥


C++は好きな言語だ
今度の連休で遊ばせてもらいます
デフォルトの名無しさん [] 2018/10/04(木) 22:49:59.54:9/syaOEb
そう言えば寝てたら未来へ行っちゃうってのは、Islandにちょっと似てる。
デフォルトの名無しさん [] 2018/10/04(木) 22:50:28.48:9/syaOEb
ごめん。誤爆。
デフォルトの名無しさん [] 2018/10/05(金) 00:59:15.29:x9IT1j0q

kotlin
ttp://https://paiza.io/projects/exHqCjTWt7PPhZheEMwucw
ほとんど何も考えずただ入力して出力しているだけ。
デフォルトの名無しさん [sage] 2018/10/05(金) 07:17:46.24:wqnG0hHC
春分の日と秋分の日はその前の年に気象庁だかどっかから指定される休日だから任意の時刻に対して平日判定を行うのは不可能
デフォルトの名無しさん [sage] 2018/10/05(金) 08:06:04.84:f0hsTKrn
まず問題文をよく読めって学校で教わらなかったのか?
デフォルトの名無しさん [sage] 2018/10/05(金) 09:07:05.89:wqnG0hHC
ああ10月限定かすまんな
それでも無駄な情報が多くて何をさせたい問題なのかやっぱりわからんわ
デフォルトの名無しさん [] 2018/10/05(金) 09:48:23.51:ExR6m3Ew
お題
1から連続する自然数の並びで
最初の a個の総和と
それに続くb個の総和が
等しくなるものを
好きなだけ求めるち
デフォルトの名無しさん [sage] 2018/10/05(金) 10:50:56.93:wqnG0hHC

(0..10**8).each{|i|n=2*i*(i+1)+1;x=Integer.sqrt(n);puts'a=%d, b=%d'%[a=(x-1)/2,i-a]if x**2==n}
#=>a=0, b=0
a=2, b=1
a=14, b=6
a=84, b=35
a=492, b=204
a=2870, b=1189
a=16730, b=6930
a=97512, b=40391
a=568344, b=235416
a=3312554, b=1372105
a=19306982, b=7997214
デフォルトの名無しさん [sage] 2018/10/05(金) 14:58:28.47:mgzjyvv8

koltin全く知らないけど、あとで読んでみます!
デフォルトの名無しさん [sage] 2018/10/05(金) 20:22:47.58:3qR/q5rp

C++
ttp://https://ideone.com/PLj4M9

Wolfram先生によると一般項があるらしい
ttp://http://www.wolframalpha.com/input/?i=2a(a%2B1)%3D(a%2Bb)(a%2Bb%2B1)+and+a%3E%3D0+and+b%3E%3D0
デフォルトの名無しさん [sage] 2018/10/06(土) 10:59:33.32:MgCaJaM3
半角スペース区切りで数字が入力されるのでソートして出力しなさい
いろんなアルゴリズムでやってみよう

-*- input -*-
3 1 4 1 5 9 2 6 53 58 97 93 2 38 46 26

-*- output -*-
1 1 2 2 3 4 5 6 9 26 38 46 53 58 93 97

例) Ruby
ボゴソート
ary = gets.split.map(&:to_i)
nil while ary.shuffle!.each_cons(2).any?{|a, b| a > b}
puts ary * ' '

バブルソート
ary = gets.split.map(&:to_i)
(ary.size - 1).times do
  ary.each_cons(2).with_index{|(a, b), i| ary[i, 2] = b, a if a > b}
end
puts ary * ' '
デフォルトの名無しさん [] 2018/10/06(土) 13:39:49.65:J8Y2BFN6
perl -ne '@d=split;print join(" ",sort {$a <=> $b} @d)."\n"'

無念無想のままたった今打った。1回も試していない。
デフォルトの名無しさん [sage] 2018/10/06(土) 21:20:29.96:evMRo/Iv
何かと思えば円周率か
要約気付いた
デフォルトの名無しさん [sage] 2018/10/06(土) 22:11:52.69:xFDNl+om
GNU Smalltalk スリープソート

ttp://https://ideone.com/BseQtg
デフォルトの名無しさん [sage] 2018/10/06(土) 22:49:39.54:MgCaJaM3

なんだこれw 4ch発祥かぁ。面白いね
デフォルトの名無しさん [sage] 2018/10/07(日) 00:58:45.52:KvcjzmFM

A君は平日以外学校に行かんのだろ?
なら曜日なんぞ気にせず入力された登下校時刻を単に変換するだけになるような
デフォルトの名無しさん [sage] 2018/10/07(日) 07:50:57.08:VJ+UDRYt
アスペか?アスペにはこのスレはたぶん無理

↑これの読解もままならないだろうが(苦笑
デフォルトの名無しさん [sage] 2018/10/07(日) 13:41:58.37:9vVPTzNb

そうだね
さらに 10/01だけの入力から 10/02が出力されるところも謎だ
デフォルトの名無しさん [] 2018/10/07(日) 18:04:09.18:t8TfnMHv
お題
現在の時刻をスウォッチ・インターネットタイムで表示する

@042
デフォルトの名無しさん [sage] 2018/10/07(日) 19:17:11.77:MD9q6Ezo
Ruby UTC基準で
d=24*60*60;$><<'@%f'%((Time.now.to_f%d)*1e3/d)
#=> @426.818338
デフォルトの名無しさん [sage] 2018/10/07(日) 21:21:58.39:T4GR84FI
ビール標準時が基準点でないものはスウォッチ・インターネットタイムではない
デフォルトの名無しさん [sage] 2018/10/07(日) 21:30:25.37:MD9q6Ezo

d=24*60*60;$><<'@%f'%(((Time.now.to_f-60*60)%d)*1e3/d)
デフォルトの名無しさん [] 2018/10/08(月) 02:11:26.03:tKqgyITq
perl -e '$s=86400;$n=1000*((time()+3600)%$s)/$s;printf "@%d\n",$n'

今実行するとこう出る。

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

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

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

プログラムの結果が正しくなるように修正し、
このサイトのどこに誤記があるかその箇所を指摘しなさい
デフォルトの名無しさん [] 2018/10/08(月) 16:19:35.99:SHTmPUE+
訂正

(正)逆にJDから日時(UTC基準)を求めるプログラムも作りなさい
(誤)逆に日時(UTC基準)から時刻を求めるプログラムを作りなさい
デフォルトの名無しさん [sage] 2018/10/08(月) 20:56:19.15:P7JfEPgv
Ruby
ttp://https://ideone.com/SKS4yj
デフォルトの名無しさん [sage] 2018/10/08(月) 22:00:20.72:c9HgNpeF

(365.25*dy).to_i とかは 1461*dy/4 にしないとまずい
デフォルトの名無しさん [sage] 2018/10/08(月) 22:51:07.00:P7JfEPgv

365.25 は 101101101.01(2) だから誤差の心配は無いよね?

(1..3000).each{|n| p n if (365.25*n).to_i != 1461*n/4 }
とかやってみて
デフォルトの名無しさん [sage] 2018/10/08(月) 23:14:43.42:c9HgNpeF

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

ruby って IEEE 754 に準拠してないの?
信じ難いなそれ
使い物にならないじゃん
デフォルトの名無しさん [sage] 2018/10/09(火) 00:09:36.06:lL60bjnv
IEEE754関係ないやろ
Cのdoubleも環境依存やで
デフォルトの名無しさん [sage] 2018/10/09(火) 02:53:53.02:z616RbAo
いや関係なかったら困るだろ
バグってんだか仕様だかわからなくなるぞ
デフォルトの名無しさん [sage] 2018/10/09(火) 07:49:23.39:G0ViTg21
関係ないってそういう意味ではないのでは?
の指摘することとIEEE 754は関係ないってだけで。
例えば32bitか64bitでdouble型の精度が違うなんて別に珍しいことではないと思うんですけど。
デフォルトの名無しさん [sage] 2018/10/09(火) 19:02:39.94:jSAcVkU7
> 32bitか64bitでdouble型の

ん? 32bitのdoubleなんてありえるの?
IEEE 754以外で倍制度を決めてる何かがあるの?
デフォルトの名無しさん [sage] 2018/10/09(火) 21:21:14.72:7Krlta4j

たかだか30行程度のループも再帰もない一本道なので具体的に示してもらえるとありがたいです。
この種のプログラムは地デジの日付情報が MJDで ARIBの規格書にも載っていて、
ごく一般的に使われているので、もし問題があるようならばなんとかしたいですよね。

>( (c-122.1)/365.25 ).to_i
浮動小数点で JD が扱える精度+αくらいならこれは問題ないと思いますが。
c は整数ですし、分母の 365.25もすでに説明しましたね。
グレゴリオ暦6239年で JD が 4000000辺りで分子が 365.25の倍数前後は
4000217.1/365.25 と 4000218.1/365.25 だから仮数部が 19bitほどあればいいわけですね。
# こんな定数のままだとコンパイラが最適化してしまいますけどね

組み込み用途などによっては考慮すべきかもしれないけれど、
最初のお題( )ってそういう意図があったのでしょうか?
>このサイトに書いてあるとおりに作るとプログラムの結果は正しくならない
これは特定の環境に限られたものを指していたのかな?
デフォルトの名無しさん [sage] 2018/10/09(火) 21:40:48.90:BHyo+myF
精度的に問題ないって理解してれば良いのでは
よく理解してない人が小数点使う必要ない場面で使って事故って何も分かりませんみたいな事あるし
コンシューマゲームなんかだとシビアなんで、癖みたいにしておかないとハマってしまうけど
デフォルトの名無しさん [] 2018/10/09(火) 22:33:03.53:uKgwXIAC
はココからが本当の本題

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

Bは普通にやったら結構めんどい課題と考えられる
力技でやるなら暇人以外にはオススメしない(力技でやらないほうがいいと一応警告しておいたからな)
コードの一部を出力するコードをサクッと作るぐらいの力量がなければ
きっとサクッとはできないしサクッと結果の評価もできないと考えられる
デフォルトの名無しさん [] 2018/10/09(火) 22:35:06.29:uKgwXIAC
訂正
(正)
(誤)
デフォルトの名無しさん [] 2018/10/09(火) 22:56:04.77:uKgwXIAC
ttp://https://ideone.com/fF1kvl
Bで使えるデータは用意しておいた
気が向いたヤツはチャレンジしなさい
デフォルトの名無しさん [sage] 2018/10/09(火) 23:20:13.38:UrO6v+ga
はサマータイムスレで暴論吐いてた奴じゃない?
デフォルトの名無しさん [sage] 2018/10/10(水) 00:03:10.45:uHP11E7s
C言語スレとかのいろいろな所に出没してる半角先生だ
どこでも相手にされなくなったから出題しに来た
デフォルトの名無しさん [sage] 2018/10/10(水) 09:42:44.92:hOT3iUsl
サマータイムスレでの暴論って何なんだろう?

まさかのサマータイム賛成なんて奴だったら許せんな。
デフォルトの名無しさん [] 2018/10/10(水) 16:39:18.23:slDdF7J+
お題
倍精度実数で整数部分が正確に表現できる最大値を求める
デフォルトの名無しさん [sage] 2018/10/10(水) 17:03:11.31:8BTNYbZT
浮動小数点実数型と言えど最大要素に近い
部分は、整数×2^整数という形の整数也
デフォルトの名無しさん [sage] 2018/10/10(水) 17:03:47.89:8BTNYbZT
整数×2^自然数
だた
デフォルトの名無しさん [sage] 2018/10/10(水) 17:41:41.04:8BTNYbZT
(2^m-1)×2^n
という形
デフォルトの名無しさん [sage] 2018/10/10(水) 18:05:44.00:TfVezTBt
区間を求めるなら仮数部だけで収まる最大値だけど、
とある数の整数部が正しく表現されているだけなら仮数部も込みで double の最大値が答え

それを std::numeric_limits<double>max() や DBL_MAX を使わずに計算せよ、ということか
デフォルトの名無しさん [sage] 2018/10/10(水) 19:38:40.27:TfVezTBt
を2分探索で計算で出すコード書いてて ideone のコンパイラのバグ見つけた気がする

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

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

通常 JDは UTCを元にするので閏秒は考慮しないと思いますよ、
天文計算などする場合は必要に応じて UT1とかに変換しているのじゃないかと?
デフォルトの名無しさん [sage] 2018/10/10(水) 22:22:14.63:TfVezTBt

なるほど。
オーバフローが未定義動作だとすると符号付整数の最大値を求めるのは難しそうだな。
デフォルトの名無しさん [] 2018/10/11(木) 00:30:47.35:p15CvoFg
ものすごい頭悪いこといってるわ。。。

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

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

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

そもそもオレの課題ではそんなことを問題になんかしてないからな
課題どおりにやればいい
デフォルトの名無しさん [] 2018/10/11(木) 00:34:27.93:p15CvoFg
低学歴知恵遅れが知ったぶりしてハジかく典型的な例といっていい
低学歴知恵遅れはいちいち自分が低学歴知恵遅れですと自白するからな
デフォルトの名無しさん [] 2018/10/11(木) 01:18:58.62:ZbBeURnP
おまえまたくっさいくっさい自演しとんのか
デフォルトの名無しさん [sage] 2018/10/11(木) 12:46:49.51:ZOnVTpMr
誰からも相手にされなくなったか
デフォルトの名無しさん [sage] 2018/10/11(木) 13:22:48.89:yY2EC70D
相手にされなくなったんで問題だせば自動的に相手にされると思い込んでいる
その辺りが半角先生の思考の限界
デフォルトの名無しさん [] 2018/10/11(木) 14:46:25.14:MYvNBgY5
ここが適切なのかわかりませんが、知恵を頂けたら幸いです。
当方CGクリエーターで、プログラミングの知識は殆どありません。
そこで質問なのですが、
Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、
Bのワールド位置を維持して、BをAのローカル座標位置へ移動させるには
どのような行列式になるでしょうか?
ネットで座標変換とか色々調べてみましたが、子のワールド位置を維持した状態で
親に該当するローカル座標へ移動させる方法がわかりませんでした。

本来の目的としては、
CGアニメーションソフトのコンストレイント機能にペアレントがありますが、
それを行列式(ノード)で行いたいのです。
(コンストレインのペアレントとは、
時間軸上の任意の位置で親子関係の接続や解除を行うことが出来る機能です。
その接続/解除時には、子は現在のワールド位置を維持します。
デフォルトの名無しさん [sage] 2018/10/11(木) 15:04:14.07:3Bdkvxy9
スレ違い

「3d 行列」で検索!
デフォルトの名無しさん [sage] 2018/10/11(木) 15:26:21.10:ZOnVTpMr

スレのルールに則れば誰か答えてくれるかもね
デフォルトの名無しさん [sage] 2018/10/11(木) 16:45:05.30:NcfxmDj4

>Aのオブジェクトの座標値が(-1,-2,-3)として、Bのオブジェクトの座標値が(1,2,3)の場合、

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

>天文でつかわれるユリウス日なんかはアホがいうとおり固定
逆です、天文計算で使うような時間は UT(世界時)を基準にしています。
それは天体の運動方程式を解くために基準の時刻からの正確な時間が必要だからです。
デフォルトの名無しさん [] 2018/10/11(木) 23:02:27.87:p15CvoFg
ttp://https://warwick.ac.uk/fac/sci/physics/research/astro/people/steeghs/mpags-as2/mpags_techniques_2012_1b.pdf

・International Atomic Time (TAI)
 - SI second defined by frequency of hyperfine transition of cesium133
 - Measured and counted with international network of atomic clocks

・Co-ordinated Universal Time (UTC)
 - Our civil time (in winter)
 - Based on SI second, with 86400s/day
 - Kept synchronised with UT1 since 1972 by addition of leap seconds
 - Leap seconds not added to TAI, so TAI-UTC is not constant
 - Currently (Nov 2012) TAI - UTC = 35s
 - Use of leap secs currently under discussion (inconvenient for astro)

・Co-ordinated Universal Time (UTC)
 - Currently (Nov 2012) TAI - UTC = 35s

・Calendar is independent of time system, so state both, e.g.
 - 2011 November 11 11:00:00.0 UTC
 - 2011 November 11 11:00:34.0 TAI
 - JD 2455876.958333 UTC
 - JD 2455876.958727 TAI

コレでオレの課題ができないなら
人間やめたほうがいい
デフォルトの名無しさん [] 2018/10/12(金) 01:38:38.44:xbwLlD7o

倍精度って、これでいいの?
ttp://https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
とすると -2^53 〜 2^53 になるわけでプログラムを作る必要性がないわけだが。

それとも仮数部が何ビットか分からない倍精度実数のビット数を求めるプログラムを作れってこと?
デフォルトの名無しさん [sage] 2018/10/12(金) 02:02:42.62:ZYTXH3K/
プログラミングのお題
「10以下の素数の和を求めよ」

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

これはおかしいだろう
デフォルトの名無しさん [sage] 2018/10/12(金) 02:23:49.18:I/tzu8NI
ruby
n = 10
Prime.reduce(0){|s, i|break(s) if i > n; s + i}
デフォルトの名無しさん [] 2018/10/12(金) 02:35:54.36:xbwLlD7o
え?じゃ、こんな感じ?

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

動かすとこう出るが。

53, 9007199254740992
デフォルトの名無しさん [sage] 2018/10/12(金) 06:06:04.48:j3qUjmca
Pharo/Squeak Smalltalk

(Integer primesUpTo: 10) sum
デフォルトの名無しさん [sage] 2018/10/12(金) 07:40:50.69:GdhRssFx

ruby -rPrime 'p Prime.first(10).sum'
#=> 17
デフォルトの名無しさん [sage] 2018/10/12(金) 09:39:43.72:1UpgDbu2
first(10)って普通は最初の10個を列挙するもんだがrubyは違うのか…
名前重要ってわりにセンスないな
デフォルトの名無しさん [sage] 2018/10/12(金) 10:33:46.63:oIm8hJ6E
じゃあちなみにこの関数名は何ならいいんだ?
お前の考えを言ってみろよ
センスを判定してやるよ
デフォルトの名無しさん [sage] 2018/10/12(金) 10:49:03.90:6UbBSJp3
first(10)が10までってセンスは普通におかしいだろ
つーかrubyも最初の10個返すんだが…?
デフォルトの名無しさん [sage] 2018/10/12(金) 13:22:40.26:+EEi3z6C
誰も動作を疑わずに書かれたものを脳死で信じるいい例だな、 のは17にはならん
デフォルトの名無しさん [sage] 2018/10/12(金) 13:50:43.62:oIm8hJ6E
ruby/ruby: The Ruby Programming Language
ttps://github.com/ruby/ruby

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

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

ンなモン、脳死で信じるしかねーだろ
デフォルトの名無しさん [sage] 2018/10/12(金) 13:54:46.58:VST6PShP
最近JavaとかC++とか少ないな
Javaは例の騒動があるから仕方ないとしてCとかC++はないんか
デフォルトの名無しさん [] 2018/10/12(金) 16:36:53.91:OhxorjMK

はC++だね。
デフォルトの名無しさん [sage] 2018/10/12(金) 18:59:19.35:eR+rcBR9
ruby
require 'prime'
p Prime.take_while {|i| i < 10}.inject(:+)
デフォルトの名無しさん [sage] 2018/10/12(金) 20:05:50.75:oyAlSwuR

例の騒動って何
デフォルトの名無しさん [sage] 2018/10/12(金) 20:13:31.37:jorGy8Se

gcc8.1だと

char
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 0
(!(n > d && is_usual_num(n))) 1
(!(n > d && is_usual_num(n))) 0
break
calculated = -128
numeric_limits = 127
128
127

となるね
デフォルトの名無しさん [sage] 2018/10/12(金) 21:22:44.25:+EEi3z6C
ORACLEがお金取りますよってやつじゃない?
デフォルトの名無しさん [sage] 2018/10/12(金) 21:27:58.87:+EEi3z6C
なぜか言語自体のコード読む読まないの話になってるけど、これくらいのコードなら動かせばすぐにfirstが何してるか分かるじゃん、って思っただけだわ
デフォルトの名無しさん [sage] 2018/10/13(土) 10:05:11.14:m4emGyLz
お題
方程式 1/n = 1/x + 1/y (ただし、n,x,yは正整数でx≦y)について考える
例えばn=4のとき、1/4 = 1/5 + 1/20 = 1/6 + 1/12 = 1/8 + 1/8 より解の個数は3である
上限Mが与えられたとき、上の方程式の解の個数がMを超える最小のnの値を求めよ

2 -> 4
5 -> 12
10 -> 24
100 -> 1260
1000 -> 180180
10000 -> 116396280
250000000000 -> ?
デフォルトの名無しさん [sage] 2018/10/13(土) 11:29:08.44:4qDoRB+X
つまんない
デフォルトの名無しさん [sage] 2018/10/13(土) 11:32:11.63:QkDteBzw

n = 2の時
1/4 + 1/4 = 1/2
1/3 + 1/6 = 1/2
だけだから結果は2だよ
n=4の時より大きくなることはあり得ないし
デフォルトの名無しさん [sage] 2018/10/13(土) 11:52:27.26:QkDteBzw
ごめん。は勘違い無視して
デフォルトの名無しさん [sage] 2018/10/13(土) 17:46:23.51:QtssFnIu
Java
ttp://https://ideone.com/Y57fPl
デフォルトの名無しさん [sage] 2018/10/15(月) 17:32:39.82:lmCCx0VP
回答一人で出題者からの返事がないとあってるかどうかわからないから困る
デフォルトの名無しさん [] 2018/10/17(水) 11:31:35.00:UkGf74ne
お題
[0,1]の一様乱数をN個発生させ、小さい順に並べてa(1), ..., a(N)とする
同様にもうN個作って小さい順にb(1), ..., b(N)とする

同じ順位同士で(a(1), b(1)), ..., (a(N), b(N)) とペアを作った時、a>bとなるペアの個数は0〜N個になるが、その分布は?
またa, bを一様分布以外の分布から取ってくるとどうなる?
デフォルトの名無しさん [sage] 2018/10/17(水) 12:32:44.20:DKH+Jm9W

それはプログラミングで解くお題なのか?
デフォルトの名無しさん [] 2018/10/17(水) 13:07:54.93:OYXuI76a

シミュレーションしてみるのも面白いかなと
デフォルトの名無しさん [] 2018/10/17(水) 13:50:50.88:8efdFbKL
趣味で
デフォルトの名無しさん [sage] 2018/10/17(水) 14:07:56.22:4awkQadJ
これはひどい
デフォルトの名無しさん [sage] 2018/10/17(水) 15:35:45.15:5mPHIqhK
プログラミングで解くということに挑戦することから逃げるプログラマー
デフォルトの名無しさん [] 2018/10/17(水) 15:55:41.32:mC+TJhph
数学に逃げちゃ駄目だ。
デフォルトの名無しさん [sage] 2018/10/17(水) 17:12:22.62:DXXGfTNm
乱数全部同じパターンを引いてもその結果のみから分布を論じてかまわないというならそれでもいいがな
デフォルトの名無しさん [sage] 2018/10/17(水) 17:34:51.31:slnS35LM
ちょっとやってみた
J で

NB. monadic sort operator
sort=: /:~

NB. monadic operator returns count of a_n > b_n
NB. where a and b is sorted y-length array of rand(1000)
do1=: verb define
a =. sort ?y$1000
b =. sort ?y$1000
+/ (a>b)
)

NB. dyad operator returns count of number x in array y
count=: dyad define
+/ (x = y)
)

続く
デフォルトの名無しさん [sage] 2018/10/17(水) 17:35:05.08:IG2KKzqQ
Squeak/Pharo Smalltalkでシミュレーションのみ
擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller)

| N M random bag |
N := 10.
M := 1e6.
random := Random new.
bag := Bag new.
M timesRepeat: [
| pairs count |
pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}].
count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair].
bag add: count
].
bag sortedElements

"Squeak =>{
0->981.
1->9873.
2->44008.
3->117136.
4->205258.
5->246203.
6->204286.
7->117345.
8->44247.
9->9702.
10->961} "
デフォルトの名無しさん [sage] 2018/10/17(水) 17:38:20.84:cKcilnbV
Squeak/Pharo Smalltalkでシミュレーションのみ
擬似乱数発生器は Squeak の場合 Mersenne Twister(Pharo なら Park-Miller)

| N M random bag |
N := 10.
M := 1e6.
random := Random new.
bag := Bag new.
M timesRepeat: [
| pairs count |
pairs := (random next: N) with: (random next: N) collect: [:a :b | {a. b}].
count := pairs count: [:pair | [:a :b | a > b] valueWithArguments: pair].
bag add: count
].
bag sortedElements

"Squeak =>{
0->981.
1->9873.
2->44008.
3->117136.
4->205258.
5->246203.
6->204286.
7->117345.
8->44247.
9->9702.
10->961} "
デフォルトの名無しさん [sage] 2018/10/17(水) 17:40:58.97:wdgUzBYj
あ、誤連投&Jのにきスマン
デフォルトの名無しさん [sage] 2018/10/17(水) 17:41:12.83:slnS35LM
続き
NB. 長さ100の配列で100000回試行
r =: (do1 "0) 100000$100

NB. r を表示
r
=> 43 77 58 31 23 36 59 26 85 15 73 72 4 34 0 26 22 26 85 70 95 2 64 46 22 84 22 86 78 39 51 34 92 94 68 98 47 38 68 92 48 43 19 97 80 18 13 65 76 79 17 88 19 39 72 74 16 54 32 11 99 3 80 32 94 25 87 91 ...

NB. 0...100 の各数値の出現数
(i. 101) (count "0 1) r
=> 109 107 118 94 104 93 98 100 76 87 97 102 93 98 101 94 94 90 112 107 92 103 109 97 112 89 113 118 97 108 96 81 86 103 87 102 107 101 95 90 96 102 96 87 100 88 108 115 97 119 129 104 94 100 104 101 114...

NB. グラフ化
plot (i. 101) (count "0 1) r
ttps://i.imgur.com/QSKqVC6.jpg

一様分布っぽい
デフォルトの名無しさん [sage] 2018/10/17(水) 17:43:54.06:slnS35LM
だいぶ結果が違っててわろすw
ソート忘れてないか?
デフォルトの名無しさん [sage] 2018/10/17(水) 17:47:40.41:slnS35LM
理屈で考えると乱数がどんな分布でも a、b の分布が同じならコレの結果は常に同じ分布か
デフォルトの名無しさん [sage] 2018/10/17(水) 19:01:16.05:wdgUzBYj
なんか書き込めん…



たしかに^^;

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

で同じ分布になった
デフォルトの名無しさん [] 2018/10/17(水) 22:28:10.42:9jVKFKz5
ハローワールドの次にやる問題ってなんだろう
デフォルトの名無しさん [] 2018/10/17(水) 22:28:34.01:Ny9Q/0jK
ハローワークへ行きなさい
デフォルトの名無しさん [sage] 2018/10/17(水) 22:47:23.45:ysrRFDeq

echoかfizz buzzでもやれば
◆QZaw55cn4c [sage] 2018/10/17(水) 23:45:01.56:DyWl92+N

>echo
デフォルトの名無しさん [] 2018/10/18(木) 09:27:49.01:xtVP5nmJ

echoコマンドの実装ってことじゃない?
\0xxx や \n も解釈するようなの作ると初心者には結構勉強になるかも。
デフォルトの名無しさん [sage] 2018/10/18(木) 19:47:17.70:3zhbamE0
136本人が出てきて答えなさい
デフォルトの名無しさん [sage] 2018/10/18(木) 22:31:25.80:qi6SRLg2
ハローワールドの次ぐらいだとすごろくとかじゃない
デフォルトの名無しさん [] 2018/10/19(金) 16:49:17.22:F1UCQFsO
お題
標準入力から入力したデータをそのまま標準出力人出力する
デフォルトの名無しさん [] 2018/10/19(金) 17:05:33.84:veK9KPY5
ttp://http://3dnchu.com/archives/tree-it/
このようなソフトはvisual studioで作るんですか?
なんの言語がいいか教えてください
デフォルトの名無しさん [] 2018/10/19(金) 17:15:05.14:gPrGaWTX

cat
デフォルトの名無しさん [sage] 2018/10/19(金) 18:18:43.95:rCjk/mnI
Brainfuck
,[.,]
デフォルトの名無しさん [sage] 2018/10/19(金) 18:19:25.68:rCjk/mnI
安価ミス ->
デフォルトの名無しさん [sage] 2018/10/19(金) 20:16:34.44:qai0UNii
お題
マルチバイト文字だけ文字化けさせて出力
デフォルトの名無しさん [] 2018/10/19(金) 20:39:51.48:5dseSh/K
Python
ttp://https://ideone.com/sT2p2O
デフォルトの名無しさん [sage] 2018/10/20(土) 03:08:59.15:gD7ZVb6v
iso-8859-2を入力したら文字化けしたりUTF-7を入力したら文字化けしなかったりするのは美しくないから文字コードを指定させないといかん
デフォルトの名無しさん [] 2018/10/20(土) 05:27:36.15:qwv4GmvH

Kotlin
ttp://https://paiza.io/projects/jg9Pa-PO2UCwSLFPL3draw

入力はデフォルトのエンコーディングで Java のライブラリ内部で Unicode に自動変換させ、出力は UTF-8 になると想定して作られている。
つまり元の Unicode で \x0080 以上は UTF-8 だと全てマルチバイトになるので化けるようにしてある。
化け方は2通りでサロゲートペアの文字は % になりその他は * になる。
デフォルトの名無しさん [] 2018/10/20(土) 17:10:58.56:hxCjYBWY
Io
File standardInput contents print
デフォルトの名無しさん [sage] 2018/10/20(土) 17:46:57.83:cv2X893a
お題: 超簡単なステートマシン
以下の3つのデータがランダムに入力される。
1: hi
2: wake up
3: sleep
1が入力された場合、状態がwake upであれば「hello」、状態がsleepであれば「zzz...」と出力せよ。
2が入力されたら状態をwake upに、3が入力されたら状態をsleepに移行せよ。
デフォルトの名無しさん [] 2018/10/20(土) 18:05:02.67:Nttc2RvP

つまり、hi以外で2、3に該当しない奴も無視で良いの?(hiは無視で良いんだよね)

データは勝手に標準入力にするけど。
(リダイレクトでファイルからに出来るし)
デフォルトの名無しさん [] 2018/10/20(土) 18:08:05.20:Nttc2RvP
あれ、違うぞ?
hiが入力された時、「かつ」wake upだったら”hello”出力か。
んでsleepなら”zzz...”ね。
それ以外無視と。
了解。
デフォルトの名無しさん [] 2018/10/20(土) 18:12:34.08:Nttc2RvP
てか、1ー3の数字だけで良いわ。
状態の意味はわかったけど、状態の文字は要らんね。
デフォルトの名無しさん [sage] 2018/10/20(土) 18:16:14.29:xvv7H8Vz
それ以外をどう考慮すべきかは書かれてないから、
ここは「3つのデータがランダムに入力される」を信じたフリをして手抜きをするのが吉

そんなことよりステートマシンなら初期状態は与えろよw
デフォルトの名無しさん [] 2018/10/20(土) 18:28:45.80:AUqXYm6F

python3


state = "sleep"

while True:
x = input("> ")
if x == "hi":
print("zzz..." if state == "sleep" else "hello")
elif x == "wake up":
state = "wake up"
elif x == "sleep":
state = "sleep"
else:
print("invalid input.")
デフォルトの名無しさん [] 2018/10/20(土) 18:42:18.95:Nttc2RvP
#include <stdio.h>
#include <conio.h>

int main(void)
{
char c,state = 0;

while(1)
{
c = getchar();
switch(c)
{
case '1':
if(state == '2')
{
printf("hello");
}
else if(state == '3')
{
printf("zzz...");
}
break;
デフォルトの名無しさん [] 2018/10/20(土) 18:43:23.41:Nttc2RvP
case '2':
state = '2';
break;
case '3':
state = '3';
break;
default:
break;
デフォルトの名無しさん [] 2018/10/20(土) 18:43:31.11:Nttc2RvP
}
}
return 0;
}

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

面倒臭かったからステータスは数字に直さず文字そのまま使った。
デフォルトの名無しさん [sage] 2018/10/20(土) 20:20:44.01:WvTfEY4N
お題
2つの区間の共通部分を出力せよ

[1,3] [2,4] => [2,3]
(1,2) [1,2] => (1,2)
[0,100) (5,+inf) => (5,100)
(-inf,2] [1,+inf) => [1,2]
[1,2) [2,3) => {}
デフォルトの名無しさん [sage] 2018/10/20(土) 21:46:37.40:O4sbTglp

ruby -nle"$_!=?1?($t=-$_.to_i):(puts %w[zzz... hello _][$t])"
デフォルトの名無しさん [] 2018/10/21(日) 04:42:48.87:sz/a4USN

Kotlin
ttp://https://paiza.io/projects/RpML2-t6V1kplmMq_f0usw

初期状態は sleep にした。
wake up と sleep 以外の入力に対しては ERROR を出力して状態は変化させないようにした。
入力が何だったか分かるようにするために行頭に >> を付けて入力文字列を出すようにした。
デフォルトの名無しさん [] 2018/10/21(日) 04:53:27.38:sz/a4USN

Perl の1行プログラム

perl -ne 'BEGIN{$s=0;%x=("sleep"=>0,"wake up"=>1);%r=(0=>"zzz...",1=>"hello")}print ">> $_";chomp;\
if(defined($x{$_})){$s=$x{$_}}elsif($_ eq "hi"){print"$r{$s}\n"}else{print "ERROR\n"}'

仕様はと同じ。
1行が長くなったので1行目の行末に \ を入れて2行に分けて書いてある。
デフォルトの名無しさん [sage] 2018/10/21(日) 09:26:11.61:3Rh2KUxU
java
ttp://https://ideone.com/fpKVdM
デフォルトの名無しさん [sage] 2018/10/21(日) 09:40:05.59:UVDgsDD7
GNU Smalltalk
入力は、数値ではなくメッセージで
状態推移は、クラスチェンジで(つまりインスタンス変数なし&条件分岐なし)
…な感じで、他言語では思いつきにくい実装で遊んでみました

Object subclass: Machine [
wakeUp [ ^self ]
sleep [ ^self ]
hi [ self subclassResponsibility ]
state [ ^self class displayNl ]
Other := nil.
]
Machine class extend [ new [ ^WakeUp basicNew ] ]
Machine subclass: WakeUp [ hi [ 'hello' displayNl ] ]
Machine subclass: Sleep [ hi [ 'zzz...' displayNl ] ]
Machine extend [ Other := Sleep basicNew ]
WakeUp extend [ sleep [ ^self become: Other ] ]
Sleep extend [ wakeUp [ ^self become: Other ] ]

| machine |
machine := Machine new.
machine state. "=> WakeUp "
machine hi. "=> hello "
machine sleep; state. "=> Sleep "
machine hi. "=> zzz... "
machine wakeUp; state. "=> WakeUp "
machine wakeUp; state. "=> WakeUp "
machine sleep; state. "=> Sleep "
machine sleep; state. "=> Sleep "

ttp://https://ideone.com/vyCRfq
デフォルトの名無しさん [sage] 2018/10/21(日) 11:09:36.22:S2kctYlU

PowerShell、初期状態は 'Sleep'

function StateMachine {
 param([parameter(ValueFromPipeline=$true)][string]$Event)
 begin { $InSleep = $true }
 process {
  switch($Event){
  'hi'{ Write-Host "$(if($InSleep){'zzz...'}else{'hellow'})"}
  'wake up'{$InSleep=$false}
  'sleep'{$InSleep=$true}
  }
 }
}
'hi','sleep','hi','wake up','hi' | StateMachine
デフォルトの名無しさん [] 2018/10/21(日) 18:51:44.61:7SU77e8C

Python3
ttp://https://ideone.com/BBteSk
infは対応してないので1億とか適当な大きい値で代用
デフォルトの名無しさん [] 2018/10/21(日) 22:29:32.21:4ZLg1Jin
Lua
io.write(io.read("*a"))
デフォルトの名無しさん [] 2018/10/22(月) 01:45:31.26:mc31Kn/b

これおかしくね?
デフォルトの名無しさん [sage] 2018/10/23(火) 19:00:32.44:eWhef4/P

返答遅れてすみません
数値はあってるようです
私の稚拙なコードでよければ参考までに

Haskell
ttp://https://www.ideone.com/9Z0xOX
デフォルトの名無しさん [sage] 2018/10/23(火) 21:37:05.53:HCMpmlk6
お題
Excel列番号の数字表記とアルファベット表記を相互変換せよ

A => 1
AA => 27
ABC => ?
26 => Z
266379 => ?
デフォルトの名無しさん [sage] 2018/10/23(火) 22:19:55.60:kr01ah20

Part6の754ですでに通った道だった
ttps://peace.5ch.net/test/read.cgi/tech/1418278634/754">ttps://peace.5ch.net/test/read.cgi/tech/1418278634/754

そしてその時の俺の回答はこれだ
ttp://http://ideone.com/SM0HXt
デフォルトの名無しさん [sage] 2018/10/23(火) 22:19:56.82:UJUp/CV/
Ruby
f=->n{n.to_s(26).tr('0-9a-p',r='@-Y').sub(/(.)@/){$1.tr('A-Z',r)+?Z}.delete ?@}
g=->s{s.tr('A-Z','0-9a-p').to_i(26)+(26**s.length-1)/25}
puts '%s => %s'%[$_.chop!,~/\d/?f[$_.to_i]:g[$_]]while gets
# =>
A => 1
AA => 27
ABC => 731
26 => Z
266379 => ODAI
デフォルトの名無しさん [sage] 2018/10/23(火) 22:31:11.04:fVBjYNqz
iか何かが無かったような?
デフォルトの名無しさん [] 2018/10/23(火) 23:51:06.93:H259Ae8g
var trans = alpha => parseInt((parseInt(alpha, 36) - parseInt('9'.repeat(alpha.length), 36)).toString(36), 26)

trans('A')
//=> 1
trans('AA')
//=> 27
trans('ABC')
//=> 731

順変換だけやってみたけどすごい不安…
Aがゼロ的な物なのか1的な物なのかこんがらがる…
デフォルトの名無しさん [sage] 2018/10/24(水) 00:17:51.17:n2SwZ/Io

Aは0扱いでよい。
与えられた文字列を str にとして x = str[A-Zの26進数] に対して
求める数 f(x) f N\{0} -> N\{0} は
f(x) = x + (26**g(x) - 1)/25
(g(x) := x == 0 ? 1 : [log_26(x)] + 1).
f は全単射なので逆写像f^(-1)が存在するので
f と f^(-1) が答え.
デフォルトの名無しさん [sage] 2018/10/24(水) 00:19:21.73:kOQJNkO6
マジカルインクリメント!マジカルインクリメントじゃないか!!
デフォルトの名無しさん [sage] 2018/10/25(木) 11:51:35.92:3ObU9lli
Pharo/Squeak Smalltalk

| fromExcelColm toExcelColm |

fromExcelColm := [:str | str asByteArray reversed - 64 polynomialEval: 26].

toExcelColm := [:n |
| nn digits |
nn := n.
digits := OrderedCollection new.
[(nn := nn - 1) >= 0] whileTrue: [digits addFirst: nn \\ 26. nn := nn // 26].
(digits asByteArray + 65) asString
].

fromExcelColm value: 'A'. "=> 1 "
fromExcelColm value: 'AA'. "=> 27 "
fromExcelColm value: 'ABC'. "=> 731 "
toExcelColm value: 26. "=> 'Z' "
toExcelColm value: 266379. "=> 'ODAI' "
fromExcelColm value: 'EXCEL'. "=> 2708874 "
toExcelColm value: 2788185942068. "=> 'MICROSOFT' "
デフォルトの名無しさん [] 2018/10/25(木) 12:50:39.12:hw/Q19JU

それ Z の時に失敗しない?

他の言語でやってみて失敗したので足したり引いたりする数を色々ひねったらうまく行ったけどね。
デフォルトの名無しさん [sage] 2018/10/25(木) 16:24:37.58:aKbYC4uC
python3
ttp://https://ideone.com/zOajDg
ここにソースを書いたらブロックされたからideoneで
デフォルトの名無しさん [sage] 2018/10/25(木) 16:39:59.02:wLNEFoo1

>Aは0扱いでよい。
>与えられた文字列を str にとして x = str[A-Zの26進数] に対して

それだと "A" も "AAAAAA" も x = 0 になるから g がダメだな
デフォルトの名無しさん [] 2018/10/25(木) 16:46:00.18:9VVQwm/j
やっぱり36進数[0-9a-z]使った横着は出来ないのか…
デフォルトの名無しさん [sage] 2018/10/25(木) 17:18:04.60:BFrEhhQu
perlのbasecalcだとマジカルなことができる
デフォルトの名無しさん [sage] 2018/10/25(木) 17:29:09.19:/ssDOiD4

文字列にするときは適当な10*n[26進数]を足してやればよいからやはり基本は26進数でよい
デフォルトの名無しさん [sage] 2018/10/25(木) 17:46:06.11:wLNEFoo1
デコードは A-Z を 1 から 26 とする 0 を持たない変則 26 進数として数値化すりゃあいいんだよ
以下J

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

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

エンコードはちょっと1行では説明しにくい
デフォルトの名無しさん [sage] 2018/10/25(木) 17:52:55.69:Toapoewp
27進だろ…
デフォルトの名無しさん [] 2018/10/25(木) 17:53:10.85:hw/Q19JU

もう一捻り必要なんだよ。
考えてくと何れわかる。
デフォルトの名無しさん [sage] 2018/10/25(木) 18:17:57.30:wLNEFoo1

下からn桁目の重み付けが 26^n で(1番下を0桁とする)、
各桁の数字が1〜26なんだよ
これで0以外の数は表記できる

AAA は 1*26*26 + 1 *26 + 1
ABC は 1*26*26 + 2 *26 + 3
YAZ は 25*26*26 + 1*26 + 26
デフォルトの名無しさん [] 2018/10/25(木) 19:37:38.82:gO/HWAcm

この問題を思い出した
ttp://http://riverplus.net/codeiq/DigitalTaboo.pdf
デフォルトの名無しさん [sage] 2018/10/25(木) 20:05:21.59:na0fZQbz
全くの素人質問で申し訳ありませんが、お知恵拝借したくお願いします。

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

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

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

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

に自動で書き込む方法はありますでしょうか?
長年誰かが手写しでしたが、死屍累々でございます、、、、なのです、、
デフォルトの名無しさん [sage] 2018/10/25(木) 20:16:07.42:na0fZQbz


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



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

からでもOKです。
デフォルトの名無しさん [sage] 2018/10/25(木) 20:33:47.72:TSZxWHJ/
sssqold.htmlのソース見たが読むほうは簡単そうだな
書き込む方はしらん
デフォルトの名無しさん [sage] 2018/10/25(木) 20:33:50.34:BSekExc/
スレタイ
デフォルトの名無しさん [sage] 2018/10/25(木) 23:54:56.07:Hzy8+5Se
あらしのおもちゃになるソースを公開するのはさすがにちょっとなあ
デフォルトの名無しさん [sage] 2018/10/25(木) 23:59:06.56:9OC64j5F

2chのcgiは仕様変更ちょいちょいあって追いかけるの面倒だから書き込みは自動保守ツールとか任せるとして、
powershellのスクリプトをタスクスケジューラで動かして出力をテキストファイルにリダイレクトして自動保守ツールに食わせりゃいいんじゃね
スクリプトはこんな感じかね

$html= Invoke-WebRequest -UseBasicParsing ttp://http://nweb.cjh.com.cn/sssqold.html
$pattern = "`"oq`":`"(\d*)`",`"q`":`"(\d*)`"[^}]+`"三峡水库`",`"tm`":(\d+),[^}]+`"z`":`"([0-9\.]+)`""
if ($html.RawContent -match $pattern) {
$time = (Get-Date "1970/1/1 0:0:0 GMT").AddMilliseconds($Matches[3])
"三峡水库 {2:dd}日 {3}m {1}(入) {0}(出)"-f $Matches[1],$Matches[2],$time,$Matches[4]
}
デフォルトの名無しさん [sage] 2018/10/26(金) 01:56:21.09:zqmCYDLg
無駄に一行だな
デフォルトの名無しさん [sage] 2018/10/26(金) 03:39:31.47:c84xrxY5

(fold + 0 (map-with-index (lambda (i c) (* (- (char->integer c) #x40) (expt 26 i))) (reverse (string->list "ABC"))))
デフォルトの名無しさん [sage] 2018/10/26(金) 19:50:36.71:/kG4owY9
お題
ぷよぷよの連鎖数を求めよ。0-9がぷよ、.が空きマスを表す。

0013
0123
122.
013.
0123
=> 4

9.9.9.9.9.9
.9.9.9.9.9.
=> 1

0123
3012
2301
1230
=> 0
デフォルトの名無しさん [sage] 2018/10/26(金) 20:45:47.09:yqPKU+uE

おお、素晴らしいアドレスありがとうございます。後は何とか頑張ってみます!!
デフォルトの名無しさん [] 2018/10/26(金) 20:51:49.05:8JGFizba

2番目のパターンは実際のゲームではあり得ないものだとは思うが、とにかく何もない所があれば落ちてそれから何連鎖するかを求めればいいのかな?
デフォルトの名無しさん [] 2018/10/29(月) 19:22:44.11:PHNS982/

Kotlin
ttp://https://paiza.io/projects/1ZkMBpYcAWRTjh1ic8RIIQ

入力が A-Z なら数値に変換(小文字も可)、数字だけの文字列はいわゆるA1の形式に変換。それ以外は入力異常でエラー。
デフォルトの名無しさん [sage] 2018/10/30(火) 17:20:53.74:xBpFVgTt
python3
ttp://https://ideone.com/DIFmAW
最適もへったくれもないゴリ押しですわ…
デフォルトの名無しさん [sage] 2018/10/30(火) 21:09:38.22:RM3bKAov
お題: ページャーを実装してください。標準入力から以下のデータが与えられます。不正な入力にはいい感じに対応してください。

 1行目: 現在のページ番号
 2行目: 総ページ数
 3行目: 表示するリンク数

例1
入力:
1
10
5
出力:
[1] 2 3 4 5

例2
入力:
5
10
5
出力:
3 4 [5] 6 7

例3
入力:
10
10
5
出力:
6 7 8 9 [10]
デフォルトの名無しさん [sage] 2018/10/30(火) 22:21:08.83:Mk80lxDb
perl

$now = shift or die $! ;
$all = shift or die $! ;
$show = shift or die $! ;

$x = 1 + int $show/2;
$y = $all - $x + 1;

if($now <= $x){
$start = 1;
}elsif($y <= $now){
$start = $all - $show + 1;
}else{
$start = $now - int $show/2;
}

$end = $start + $show - 1;
print join " ", map{ $_ == $now ? "[$_]" : "$_" }($start..$end);
デフォルトの名無しさん [] 2018/10/30(火) 22:51:09.23:N8SwgYLQ

Python3

current = int(input())
total = int(input())
n_links = int(input())

assert 1 <= current <= total and n_links <= total

if current <= n_links//2:
seq = range(1, n_links+1)
elif current >= total-n_links//2:
seq = range(total-n_links+1, total+1)
else:
left = current - n_links//2
right = current + n_links//2 + (0 if n_links%2 == 0 else 1)
seq = range(left, right)

seq = ["[{}]".format(s) if s == current else str(s) for s in seq]
print(" ".join(seq))
デフォルトの名無しさん [] 2018/10/30(火) 22:54:52.47:N8SwgYLQ
うまく貼れなかった
ttp://https://ideone.com/2ch1r3
デフォルトの名無しさん [sage] 2018/11/02(金) 11:25:03.96:b7bQuZgR
Squeak Smalltalk

| fn |

fn := [:pg :tot :wd |
| start pages |
start := pg - (wd // 2) min: tot - wd + 1 max: 1.
pages := start to: start + wd - 1.
(pages collect: [:x | (x = pg ifTrue: ['[{1}]'] ifFalse: ['{1}']) format: {x}]) joinSeparatedBy: ' '
].

#((1 10 5) (5 10 5) (10 10 5)) collect: [:tri | fn valueWithArguments: tri]

"=> #('[1] 2 3 4 5' '3 4 [5] 6 7' '6 7 8 9 [10]') "
デフォルトの名無しさん [sage] 2018/11/02(金) 23:41:59.56:8MYT0pgk
三峡水? 02日 23?00分 174.53 -(入)14700(出)
デフォルトの名無しさん [] 2018/11/03(土) 04:09:45.11:vg8hCxXN

Kotlin
ttp://https://paiza.io/projects/Zb6Ey6FbQYsGjsi5GBK9lQ

折角日本語使えるんだからたまには使わないとな。
デフォルトの名無しさん [sage] 2018/11/03(土) 08:08:00.00:BMDI0yEn
rust
ttp://https://ideone.com/xaLIC6

rust
ttp://https://ideone.com/UxomHc
デフォルトの名無しさん [sage] 2018/11/03(土) 23:34:36.36:BMDI0yEn
c
ttp://https://ideone.com/W9eW0R

c
ttp://https://ideone.com/pL0QmX
デフォルトの名無しさん [] 2018/11/04(日) 13:46:33.88:pidkuN2F

Haskell

main = mapM_ put [(1,10,5),(5,10,5),(10,10,5)]

put (x,y,z) = return (pager x y z) >>= print

pager a b c | a <= (c `div` 2) = mklist a $ take c [1..b]
pager a b c | a > (b - c `div` 2) = mklist a $ drop (b - c) [1..b]
pager a b c = mklist a $ take c $ drop (a - c `div` 2 -1) [1..b]

mklist a xs = [small a xs , jst a xs , big a xs]

small a = filter (< a)

big a = filter (> a)

jst a = filter (== a)

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

[executed "pager.hs"]
デフォルトの名無しさん [] 2018/11/04(日) 13:47:27.44:pidkuN2F
結果が切れた。。。
改めて結果。

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

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

def fibo(a, b):
_yield a
_yield b
_while True:
__yield a + b
__a, b = b, a+b

def func(fb, n):
_count = 1;
_while True:
__num = fb.next()
__print "{} th term = {}".format(count, num)
__if num >= n:
___if num == n:
____return count
___else:
____return False
__count = count + 1
_return False


a, b, c = 1, 1, 100
print func(fibo(a, b), c)
デフォルトの名無しさん [sage] 2018/11/05(月) 20:25:58.31:0wNeh4D8
同じもの
ttps://ideone.com/Dff2U9
デフォルトの名無しさん [sage] 2018/11/05(月) 21:15:45.04:b01o/g5T
rust
ttp://https://ideone.com/8R5UmH
デフォルトの名無しさん [sage] 2018/11/05(月) 23:33:04.48:6d8cBeMO
Ruby
require 'matrix'
def hoge(a, b, c)
rm, fm, im = Matrix[[1, 1], [1, 0]], Matrix[[1, 0], [0, 1]], Matrix[[b], [a]]
(0..Float::INFINITY).each do |n|
m = fm * im
return m[1, 0] > c ? false : n if m[1, 0] >= c
fm *= rm
end
end

p hoge(0,1,88) #=> false
p hoge(0,1,89) #=> 11
p hoge(0,1,90) #=> false
デフォルトの名無しさん [] 2018/11/06(火) 03:12:12.75:BD76rR44

Kotlin
ttp://https://paiza.io/projects/aLPj37Gr548Ba0214az42Q
デフォルトの名無しさん [] 2018/11/06(火) 07:54:03.24:GFB90oOd
C

初項の次第二項って書いてるのに、みんな何故0始まりなの。。。

#include <stdio.h>

int fibin(int,int,int);

int main(void)
{
for(int i = 0;i < 6;i++) printf("%d:%d\n",i,fibin(1,1,i));
return 0;
}

int fibin(int fst,int snd,int num)
{
int i = 2,fib = fst;

if(fst == num) return 1;
if(snd == num) return 2;

while(fib != num)
{
fib = fst;
fib += snd;
if(fib <= num) i++;
else return -1;
fst = snd;
snd = fib;
}
return i;
}
デフォルトの名無しさん [sage] 2018/11/06(火) 09:23:46.31:jl2IXbjS
(A,B,C)が(0,0,0),(0,1,0),(0,1,1),(1,0,0),(1,0,1)の時はCが無限回、(1,1,1),(0,X,X),(X,0,X),(X,X,X)(2≦X)の時はCが2回出現することがあるが考慮した方が良いか?
デフォルトの名無しさん [] 2018/11/06(火) 10:48:03.28:VF9SVEaj
A,Bによっては無限ループになり得ないか?
219 [] 2018/11/06(火) 11:49:20.62:13CfGTjW
そういやa,bが0,0だと足しても0だからcも0じゃないと無限ループするかな。
219 [] 2018/11/06(火) 11:52:26.86:13CfGTjW
した。見事にした。
足してゼロなら特別扱いして終わらせる処理がないとダメだったということだな。
今さら直す気は起きんが。
デフォルトの名無しさん [] 2018/11/06(火) 11:52:29.61:GFB90oOd

今まで投稿されてるコード見る限りは最初に見つけた時点で停止。


自然数って指示だから止まるはずだけど、関数の引数側でunsigned指定して(Javaとかだとuint)おいた方が良いかもね。
デフォルトの名無しさん [sage] 2018/11/06(火) 12:34:42.11:jAy4xbYh
Squeak/Pharo Smalltalk

| fibGen fn |

fibGen := [:fst :snd |
Generator on: [:g |
| a b |
a := fst. b := snd.
g yield: a. [b := a+b. g yield: (a := b-a)] repeat
]
].

fn := [:A :B :C |
| count fib last |
count := 1. fib := fibGen value: A value: B.
[(last := fib next) < C] whileTrue: [count := count + 1].
last = C ifTrue: [count] ifFalse: [false]
].

fn value: 1 value: 1 value: 89. "=> 11 "
fn value: 1 value: 1 value: 90. "=> false "
デフォルトの名無しさん [] 2018/11/06(火) 14:46:16.34:GFB90oOd
Haskell

main = mapM_
(\x -> putStr (show x ++ ":") >> print (fibin 0 1 x))
[0..6]

fibin 0 0 c | c /= 0 = Nothing
fibin a b c = lookup c $
zip (take (10 + c) fib) [1..]
where fib = a:b:(zipWith (+) fib (tail fib))
デフォルトの名無しさん [sage] 2018/11/06(火) 18:51:28.38:2YnZy0Ze
ruby
ttp://https://ideone.com/Q6aVfo

AとB足してゼロ問題に対しては
fib = ->a, b {Enumerator.new {|y| loop {y << a; a, b = b, a + b; break if b == 0}}}
デフォルトの名無しさん [sage] 2018/11/06(火) 22:17:30.30:Nv8RqtnA
お題
xy平面上の点がn+1個与えられる(各点のx座標は互いに異なる)
与えられた点をすべて通る関数 y=a[i]x^n+...+a[1]x+a[0] の係数a[i]を求めよ

[入力]
点の個数(n+1)
x[0] y[0]
...
x[n] y[n]

[出力]
a[n] ... a[0]

2
0 1
1 3
=> 2 1 (y=2x+1)


1
100 100
=> 100

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

こういう純数学的な処理は、お題としてはどうかな?
応用上、常に展開した係数を求めるのに意味がある
とも限らんし、精度評価が重要だったりとか
デフォルトの名無しさん [] 2018/11/06(火) 23:43:20.04:iVEsbroy

線形代数は偉大

import numpy as np
N = int(input())
x, y = [], []
for i in range(N):
_x, _y = map(float, input().split())
x.append(_x)
y.append(_y)

x = np.array(x)
y = np.array(y)
px = np.array([x**k for k in range(N)])

a = np.dot(y, np.linalg.inv(px))
print(a[::-1])
デフォルトの名無しさん [sage] 2018/11/06(火) 23:51:57.59:bpzsP6yI
[1 x[0] x[0]^2...x[0]^n] [a[n]] =[y[0]]
[1 x[1] x[1]^2... x[1]^n] [a[n-1]]=[y[1]
[1 x[2] x[2]^2...x[2]^n] [a[n-2]]=[y[2]]
...
[1 x[n] x[n]^2 .... x[n]^n] [a[0] ]=[y[n]]

を解かせたというわけか...
デフォルトの名無しさん [sage] 2018/11/07(水) 00:03:06.07:q3WQuIHF
また数学板から荒らしにきたのか
デフォルトの名無しさん [] 2018/11/07(水) 00:56:30.16:yYgCxC/p
お題: 四則演算の文字列を受け取って計算結果を返す
1+2+3+4
=> 10

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

5+12*(2+9/3)/((2+3)*5-7*3)
=> 20
デフォルトの名無しさん [sage] 2018/11/07(水) 00:58:06.61:B66LtM9k
Ruby
s = ->a, b{a.zip(b).map{|i, j| i - j}}
t = ->a, k{a.map{|i| i * k}}
n = gets.to_i - 1
m = $<.read.split($/).map{|e| f[n, *e.split.map(&:to_r)]}
(1..n+1).each do |r|
(nonzero = m[r- 1..-1].find_index{|e| e[r].nonzero?} + r - 1) && next
m[r - 1], m[nonzero] = m[nonzero], m[r - 1]
m[r - 1] = t[m[r - 1], 1/m[r - 1][r]]
[*[*(0..n)] - [r - 1]].each{|i| m[i] = s[m[i], t[m[r - 1], m[i][r]/m[r - 1][r]]]}
end
puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '

2
0 1
1 3
#=> 2 1 (y=2x+1)

3
1 1 1 1
5 4 2 1
8 9 3 1
#=> -1/2 11/2 -4
デフォルトの名無しさん [sage] 2018/11/07(水) 01:00:36.71:B66LtM9k
 訂正 尚複数解存在する時は最も次数の小さいものを出力
2
0 1
1 3
#=> 2 1

3
1 1
5 2
8 3
#=> -1/2 11/2 -4
デフォルトの名無しさん [sage] 2018/11/07(水) 01:50:15.65:B66LtM9k

ruby -nle'puts [$_,eval($_)]*" => "'

1+2+3+4 => 10
4+5*6-2*3 => 28
5+12*(2+9/3)/((2+3)*5-7*3) => 20
デフォルトの名無しさん [sage] 2018/11/07(水) 02:11:40.28:B66LtM9k
訂正
s = ->a, b{a.zip(b).map{|i, j| i - j}}
t = ->a, k{a.map{|i| i * k}}
n = gets.to_i
m = $<.read.split($/).map{|e| f[n + 1, *e.split.map(&:to_r)]}
n.times do |r|
  (nonzero = m[r..-1].find_index{|e| e[r].nonzero?} + r) || next
  m[r], m[nonzero] = t[m[nonzero], 1/m[nonzero][r + 1]], m[r]
  [*[*(0..n + 1)] - [r]].each{|i| m[i] = s[m[i], t[m[r], m[i][r + 1]/m[r][r + 1]]]}
end
puts m.transpose[0].map{|i| i.denominator == 1 ? i.to_i : i} * ' '
デフォルトの名無しさん [sage] 2018/11/07(水) 12:58:28.67:jk7t6Ngg
Squeak Smalltalk

| fn |

fn := [:points |
| xs ys fi gi |
xs := points collect: #x.
ys := points collect: #y.
fi := [:x :i | ((1 to: xs size) copyWithout: i) inject: 1 into: [:prod :k | prod * (x - (xs at: k))]].
gi := [:i |
(0 to: xs size - 1) collect: [:n | n = 0 ifTrue: [1] ifFalse: [
(Array streamContents: [:ss |
(xs copyWithoutIndex: i) combinations: n atATimeDo: [:comb |
ss nextPut: (comb negated reduce: #*)]
]
) sum
]]
].
(ys * ((1 to: xs size) collect: gi) / (xs collectWithIndex: fi)) sum
].

fn value: {0@1. 1@3}. "=> #(2 1) "
fn value: {100@100}. "=> #(100) "
fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "
デフォルトの名無しさん [sage] 2018/11/07(水) 13:01:59.20:jk7t6Ngg
Pharo Smalltalk w/PolyMath っぽく

"Metacello new
repository: 'github://PolyMathOrg/PolyMath:master/src';
baseline: 'PolyMath';
load"

| fn |

fn := [:points |
| xs ys xp |
xs := points collect: #x.
ys := points collect: #y.
xp := (PMMatrix rows: ((xs size - 1 to: 0 by: -1) collect: [:m | xs raisedTo: m])) transpose.
(xp inverse * ys asPMVector) asArray
].

fn value: {0@1. 1@3}. "=> #(2 1) "
fn value: {100@100}. "=> #(100) "
fn value: {0@1. -1@5. 2@2. 4@ -1. 1@0}. "=> {(-2/15) . (4/15) . (49/30) . (-83/30) . 1} "
デフォルトの名無しさん [sage] 2018/11/07(水) 18:36:22.03:LRSzKna1
お題
Windows bitmap画像(.bmp)は通常、下から上に向かって画像が記録されているが、
高さに負の値を指定することで、上から下へ向かって画像を記録することができる。
これを利用してbmp画像の上下を反転せよ。
デフォルトの名無しさん [sage] 2018/11/07(水) 18:45:22.44:oTVd6hn3
どこが問題なのw
仕様に沿った解決法言っちゃってるじゃんw
219 [] 2018/11/07(水) 19:20:37.53:bimd4khF

プログラムを作るのがお題だろう。
ここはプログラミングのお題スレなんだからこれでいいんだよ。
むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。
デフォルトの名無しさん [sage] 2018/11/07(水) 19:56:07.71:5DjOPE5m
Ruby
in_fname = 'hoge.bmp'
out_fname = 'hoge_ud.bmp'

File.binwrite(out_fname, File.binread(in_fname).tap{|b| b[22, 4] = [-b[22, 4].unpack(?l).pop].pack(?l))
デフォルトの名無しさん [] 2018/11/07(水) 20:06:47.46:umLQTzF1

あなたがそういう問題しか好きじゃないか解けないだけでしょ
スレ民の総意みたいな言い方しないで
デフォルトの名無しさん [sage] 2018/11/07(水) 20:14:12.09:Lazgvcn1

紙とえんぴつで解ける数学問題みたいなやつがプログラミングのお題としてダメなのは同意なんだけどは例えば
画像の上下を反転せよ。入力はbmpとする。
とかのほうが良かったんじゃないかな。
愚直に配列いじる奴を尻目に仕様を利用して華麗に解くやつが現れる。
これがいいんじゃないか。
219 [] 2018/11/07(水) 21:05:56.46:bimd4khF

スレ民の総意がどうであろうともこのスレはプログラミングのお題スレなんだからプログラミングのお題になってないのはスレチであることには代わりがない。
適切なスレに書くかまたはなければ新たにそれ用のスレを作って書けば良い。


それでもいいかも知れないが問題が簡略化されているために自分で仕様を調べるというプログラミングとは少し違う作業が発生するな。
更に仕様の盲点に気付くかというクイズ的な要素もある。
デフォルトの名無しさん [sage] 2018/11/07(水) 21:15:41.59:wOCAlbJb
まあ式を実装するだけの数学問題と大差ないお題にしてしまうような要素は不要だったな
デフォルトの名無しさん [] 2018/11/07(水) 21:15:43.65:h4FWJh3K

じゃないけど、数学の問題は問題自体が分からないから手が出せない。
高卒でも分かるように噛み砕いて貰えれば書けるかもだが。
デフォルトの名無しさん [] 2018/11/07(水) 21:17:30.61:h4FWJh3K
そう考えると、プログラミングの能力って言語覚えるより問題を理解する能力だよな。。。
デフォルトの名無しさん [sage] 2018/11/07(水) 22:05:04.79:DuFCNJWg
噛み砕くとこうだな
ファイルの22バイトめから保存されている4バイト長の整数値の符号を反転せよ。
ただし数値は下位バイトから順に格納されており、負数は2の補数表現を用いるものとする。
デフォルトの名無しさん [sage] 2018/11/07(水) 22:06:17.13:DuFCNJWg
出力は反転した数値以外は元のファイルと同じ内容のファイルとする

も要るか
デフォルトの名無しさん [] 2018/11/07(水) 22:14:53.17:h4FWJh3K

ごめん
の方が分からないんだ。。。
デフォルトの名無しさん [sage] 2018/11/07(水) 22:28:14.93:/kHK9X1+
それこそ数学の質問スレでやってくれない?
デフォルトの名無しさん [] 2018/11/08(木) 03:03:27.47:yQlGi5bN

>ここはプログラミングのお題スレなんだからこれでいいんだよ。
>むしろ人がある程度プログラムの仕様を考えなければならないような数学問題みたいなやつがダメなお題。

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

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

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

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

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

*:
"a120"と"a13"が与えられた場合、"a13","a120"の順番にソートするようにする。
また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、
"0"と"a"のどちらが先に来るかについては自由とします。
デフォルトの名無しさん [] 2018/11/08(木) 05:51:13.63:yQlGi5bN

>数学のように、頭の中で正しいかどうかを、証明するような問題は、面倒くさい。
>このスレでは、頭を使わず、単純な総当たり問題が好まれる

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

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

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

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
デフォルトの名無しさん [] 2018/11/08(木) 07:42:34.26:Tu3rCJEk

まあそうなんだけど、数学スレでガンガンプログラミング言語で答え出してる奴がいて正直羨ましい。
デフォルトの名無しさん [sage] 2018/11/08(木) 09:21:24.69:UCtqQ5sl
なぜそのスレで頑張らないのか。
二軍でヒーローになろうと思ってここで数学の問題出してるの?
デフォルトの名無しさん [] 2018/11/08(木) 09:28:43.02:Tu3rCJEk

私は出題者じゃ無いよ。
デフォルトの名無しさん [] 2018/11/08(木) 09:57:33.73:2oWgTmr1

>なぜそのスレで頑張らないのか。
>二軍でヒーローになろうと思ってここで数学の問題出してるの?

俺はただパソコンに向かって独り言ブツブツ言って、チンポがシコシコしてるだけだが?
デフォルトの名無しさん [sage] 2018/11/08(木) 09:57:41.43:llemawmF

How do I do a natural sort on an array?
ttps://www.perlmonks.org/?node_id=68185

これを実装すんの?
デフォルトの名無しさん [] 2018/11/08(木) 10:23:04.41:Cbg63GbQ

君が何を言いたいのかよくわからない。
デフォルトの名無しさん [] 2018/11/08(木) 10:34:41.85:yQlGi5bN

『チンポ』についての生態学は、俺にもよくわからん。
デフォルトの名無しさん [sage] 2018/11/08(木) 11:03:16.65:WO5MlDuJ
Ruby
puts$<.readlines.sort_by{|a|[a.scan(/\d+|\D+/).map{|e|e.to_i(36)},a.size]}
デフォルトの名無しさん [sage] 2018/11/08(木) 14:52:40.11:9PdT3eEJ


>また、今回は"a01"と"a1"が与えられた場合、連続する数字が少ない方を先にする、すなわち"a1","a01"の順になるようにするものとし、
デフォルトの名無しさん [sage] 2018/11/08(木) 15:03:35.30:5p9g1xrz

問題無い
# stdin
a130
a12
a001
a01
a1
1

# stdout
1
a1
a01
a001
a12
a130
デフォルトの名無しさん [sage] 2018/11/08(木) 15:08:17.09:9PdT3eEJ

a01b2
a1b0002
デフォルトの名無しさん [sage] 2018/11/08(木) 15:11:12.86:5p9g1xrz

うわー恥ずかしい
指摘ありがとう
デフォルトの名無しさん [sage] 2018/11/08(木) 15:11:38.15:rrpg0ZUw

a001
a12
これ逆にならんとあかんのとちゃう?
デフォルトの名無しさん [sage] 2018/11/08(木) 15:14:27.12:tjdDhH3P
python3
むりやり数式で解いてみた
ttp://https://ideone.com/LQb0jT
デフォルトの名無しさん [sage] 2018/11/08(木) 15:33:18.20:quzojjRV
ソートの問題、
連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな

つまり
a01a
a1b
a01b
をソートすると
a01a
a1b
a01b
デフォルトの名無しさん [] 2018/11/08(木) 16:29:56.18:Tu3rCJEk

Haskell

main = concat $ map qsort grop

grop = map filterlen [1..(maximum $ map length input)]

filterlen n = filter (\x -> n == length x) input

qsort [] = []
qsort (x:xs) = small ++ [x] ++ big
where small = qsort [a |a <- xs, a <= x]
big = qsort [a | a <- xs, a > x]

input = ["a130","a12","a001","a01","a1","1"]
デフォルトの名無しさん [] 2018/11/08(木) 16:31:19.84:Tu3rCJEk
input = ["a130","a12","a001","a01","a1","1"]
デフォルトの名無しさん [sage] 2018/11/08(木) 18:41:10.95:e5hl87sZ

>連続する数字はその連を数値として比較しつつ同じ数値のときは桁数少を前としているわけだよな

同じ数値のときじゃなくて全体が等しいときか
デフォルトの名無しさん [sage] 2018/11/08(木) 18:52:29.20:B0s1LWLV

input = ["01m30s","1m45s","02m03s"]

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

あんまりnatural じゃない感じ
デフォルトの名無しさん [sage] 2018/11/08(木) 19:15:05.42:85A5tG8V
お題
M行N列の領域をジグザグスキャンするときの順序を求めよ

3 3
=>
1 2 6
3 5 7
4 8 9

4 2
=>
1 2
3 5
4 6
7 8

3 5
=>
01 02 06 07 12
03 05 08 11 13
04 09 10 14 15

1 8
=>
1 2 3 4 5 6 7 8
デフォルトの名無しさん [sage] 2018/11/08(木) 22:07:15.82:k/fJXxDB
ruby
ttp://https://ideone.com/06bXQn
デフォルトの名無しさん [] 2018/11/08(木) 22:11:37.46:Tu3rCJEk

そう?
ナチュラルソートっての知らんけど、その結果見ても仕様通りと思うんだが。
デフォルトの名無しさん [sage] 2018/11/08(木) 22:16:02.65:EeFetNer
を訂正 Ruby
puts$<.readlines.sort_by{|a|a.scan(/(\D*)(\d+)/).map{|i,j|[i,j.to_i,j.size]}}

# stdin
a01b2
a1b0002
a130
a12
a001
a1
1

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

問題の仕様はどうかしらんが単に用語の解説ね
デフォルトの名無しさん [sage] 2018/11/08(木) 23:49:40.65:I6IWEGdd
今回の問題の仕様とは微妙に違うから回答にはならないけど

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

ナチュラルソートならこうなるべきだな
デフォルトの名無しさん [sage] 2018/11/09(金) 09:07:23.82:cVPfgm+I
の仕様で Ruby

args = [
  '01.25', '1.5', '01m 25cm', '1m 35cm',
  'Chapter 001 section 5', 'Chapter 1 section 6',
  '01m30s', '1m45s', '02m03s'
]

nsort = lambda do |args|
  f = ->str{str.scan(/(?=.)(\D*)(\d+(\.\d+)?)/).flat_map{|a, b| b.empty? ? [a] : [a, b.to_r]}}
  g = ->str{str.scan(/\d+/).map(&:size)}
  args.sort do |str1, str2|
    comparison = f[str1] <=> f[str2]
    comparison.zero? ? g[str1] <=> g[str2] : comparison
  end
end

p nsort[args]
#=>["01m30s",
"1m45s",
"01m 25cm",
"1m 35cm",
"01.25",
"1.5",
"02m03s",
"Chapter 001 section 5",
"Chapter 1 section 6"]
デフォルトの名無しさん [] 2018/11/09(金) 17:42:13.83:SNvr5Euv

『チンポ』については、自分でも良くわからない、何とも言えない不思議な生き物だ。
デフォルトの名無しさん [sage] 2018/11/09(金) 18:36:42.14:B4AEy6G3
お題
1以上N以下の奇数を並べた数の桁数を求めよ

3
=> 2 (13)

10
=> 5 (13579)

9999
=> 19445 (135...99979999)

123456789
=> ?

31415926535897
=> ?
デフォルトの名無しさん [] 2018/11/09(金) 18:45:16.11:DHGOZxva

桁数というか奇数が何個かって話やね。
わざわざ分かりにくい仕様とか、コミュ障かと。
デフォルトの名無しさん [] 2018/11/09(金) 18:47:33.93:DHGOZxva
ん、ああ。
10とか100とかになったら個数と桁数は違うか。
悪かった。
デフォルトの名無しさん [sage] 2018/11/09(金) 19:31:42.41:myvceSEv
お題
与えられた数を最小文字数で生成する。
デフォルトの名無しさん [sage] 2018/11/09(金) 19:36:37.28:b84kY48J
rust
ttp://https://ideone.com/Wl46o3
デフォルトの名無しさん [] 2018/11/09(金) 19:38:13.95:JsSTi+Gx

問題の意味がわからん。何か例を書いてくれ。
デフォルトの名無しさん [sage] 2018/11/09(金) 19:45:38.08:OW/zGENl
意味のわからない日本語を解析する
デフォルトの名無しさん [sage] 2018/11/09(金) 19:46:38.02:A6qAb8kp
134217728 が与えられたら 8^9 を返すとかそういう話かね?
デフォルトの名無しさん [] 2018/11/09(金) 19:46:54.75:EUp1VEAA

Haskell

main = mapM_ print $ zip3 lst fosl fos

oddstr [] = []
oddstr (x:xs) = show x:oddstr xs

fo = map (\x-> filter (odd) [1..x]) lst

foo f = map (f.concat.oddstr) fo

fos = foo id

fosl = foo length

lst = [3,10,999,123456789,31415926535897]

コードはすぐ出来たけど、計算が終わらないw
奇数が多すぎてバッファに残ってなさそうだから、ファイルにリダイレクトし直しかな。。。
デフォルトの名無しさん [] 2018/11/09(金) 20:06:34.46:JsSTi+Gx

スマホから直接一度も試さずに書くが、Kotlin だと理屈の上ではこれでできると思う。
nが最大値な。

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

かといってこんなのメモリ食うだけ。
デフォルトの名無しさん [sage] 2018/11/09(金) 20:38:18.97:Zs2FyImb
Ruby

args = [0, 1, 2, 3, 10, 9999, 123456789, 31415926535897]

floor_log10 = -> n {r = 1; (0..n).find{ r *= 10; r > n}}
kotae = ->n{
x = floor_log10[n + 1]
((9*x - 1)*10**x + 10)/18 + (n-10**x+1)/2 * (x + 1) + (n < 8 ? n & 1 : 0)
}
args.each{|e| puts '%d => %d' % [e, kotae[e]]}
# =>
0 => 0
1 => 1
2 => 1
3 => 2
10 => 5
9999 => 19445
123456789 => 500000000
31415926535897 => 214355930195731
デフォルトの名無しさん [sage] 2018/11/09(金) 21:56:37.18:lMSYlD+9

なんで
デフォルトの名無しさん [sage] 2018/11/09(金) 21:58:02.15:lMSYlD+9
すまん。途中で誤爆した。

なんでこうなるの??
あと最後のn < 8 ? n & 1 : 0も数式で表わせる?
デフォルトの名無しさん [] 2018/11/09(金) 22:05:09.74:gJrymgLI

Python3

print(len("".join(map(str, range(1, int(input())+1, 2)))))

を実行したらフリーズしたので

odd = range(1, int(input())+1, 2)
keta = 0
for i in odd:
keta += len(str(i))
print(keta)
#==============
123456789
=> 500000000
31415926535897
=> 終わらん
デフォルトの名無しさん [] 2018/11/09(金) 22:09:18.25:EUp1VEAA

123456789の桁数は500000000ってのは分かった。
デフォルトの名無しさん [sage] 2018/11/09(金) 22:23:23.31:PBoRuHnu

0からnまでの奇数を並べてできる数の桁数をf(n)とすると(n >= 0)
p := [log10(n+1)] として n >= 10の時
f(n) = Σ[k は 0〜[(n-1)/2]]( (2k+1)の桁数 )
  = 1*(0〜9までの奇数の数) + 2*(10〜99までの奇数の数) + ...
+ p*(10^(p-1)〜10^p-1までの奇数の数) + (p+1)*(10^p〜nまでの奇数の数)
  = 1*5 + Σ[k は 2〜p]45k*10^(k-2) + (p+1)*[(n - 10^p + 1)/2]
  = 45/100*Σ[k は 1〜p]k*10^k + 1/2 + (p+1)*[(n - 10^p + 1)/2]
  = ((9p - 1)10^p + 1)/18 + 1/2 + (p+1)*[(n - 10^p + 1)/2]
  = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] …… (*)
n = 0, 2, 4, 8, 9 の時はちょうど (*)
n = 1, 3, 5, 7 時は (*) + 1 なので
f(n) = ((9p - 1)10^p + 10)/18 + (p+1)*[(n - 10^p + 1)/2] + (n < 8 ? n & 1 : 0)
末尾の項を無理やり数式にしたいなら
[8/(n + 1)]((1 - (-1)^n)/2)(2^((5 - n)/2)([n/7] + 1))
とかにすればいいんじゃない意味ないけど
デフォルトの名無しさん [sage] 2018/11/09(金) 23:35:53.00:QKOvQ/Be
Squeak/Pharo Smalltalk

| fn |

fn := [:N |
| nDig |
nDig := N log truncated.
(1 to: nDig)
inject: (1 to: N by: 2) size * (nDig + 1)
into: [:tot :m | tot - ((10 raisedTo: m) / 2)]
].

#(3 10 9999 123456789 31415926535897) collect: fn

"=> #(2 5 19445 500000000 214355930195731) "
デフォルトの名無しさん [sage] 2018/11/09(金) 23:56:11.30:EzT7HP1o

訂正
((9p - 1)10^p + 10)/18 -> [((9p - 1)10^p + 10)/18]
あと (n < 8 ? n & 1 : 0) は (1 - (-1)^n)/2*[3/([√n] + 1)] の方がより簡単か
デフォルトの名無しさん [] 2018/11/10(土) 01:35:04.59:PYYpj2JU

Kotlin
ttp://https://paiza.io/projects/KAd4jeHV7Q3ttrPaJCGFCw
デフォルトの名無しさん [sage] 2018/11/10(土) 04:32:40.14:dp2CGyZQ

すごい😆
デフォルトの名無しさん [] 2018/11/10(土) 04:35:26.34:PYYpj2JU

Kotlin
ttp://https://paiza.io/projects/sjgIQuhZ44UZcdFZ2CwncQ

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

入力の仕様は拡張されていて、最初に数字だけがあった場合はその後に続く単語がその個数あるとみなして
入力を行うが、最初に数字がない場合は無制限に読む。出力は入力した単語とソート後の単語を出す。
デフォルトの名無しさん [sage] 2018/11/10(土) 05:36:17.18:zQnB+SVr
提案
回答は言語別に別スレで

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

ここではコメントのみになるのかな。
デフォルトの名無しさん [sage] 2018/11/10(土) 05:52:45.45:5gG2FCqG
スレ過疎りそうだし誰もわざわざ別スレに回答見に行かなそう
デフォルトの名無しさん [sage] 2018/11/10(土) 06:43:43.85:zQnB+SVr
乱立して過疎ってる特定言語専用スレの活性化に寄与することを願いたいしコード例が増えることはそれぞれメリットあるんじゃないかと。
ここと相互リンクは必ず貼る。他の言語と比較しない
他を貶さないを基本ルールに。
デフォルトの名無しさん [sage] 2018/11/10(土) 07:08:49.40:mapNUhJU
もとのスレにも迷惑かと
デフォルトの名無しさん [sage] 2018/11/10(土) 08:21:22.38:2tLivqWS
>乱立して過疎ってる特定言語

具体的に何?
一番肝心のこと言ってないから説得力がまるで無い
デフォルトの名無しさん [sage] 2018/11/10(土) 09:22:59.55:dp2CGyZQ
お題:
A,B,Cの3人が1から5までの値が1つずつ書かれた5枚のカードを使ってインディアンポーカーを行う。
各々ランダムに1枚カードを引き、自分は値を見ず他の参加者に値が見えるように額にかざす。
この状態でA,B,Cの順に自分の値が今回引かれた3枚の中で最大(MAX)か,2番目に大きい(MID)か,最小(MIN)かを予想して答える。
AとBはパスしてもよいものとし、誰かが答えた時点で終了となる。
なお全員必ず正解するものとする。
各々の引いたカードの値を引数にとり、一回分のインディアンポーカーの結果を出力する関数indian_poker(a, b, c)を実装せよ。

期待動作例:
indian_poker(3, 2, 1) // 「A is MAX」
indian_poker(5, 2, 4) // 「B is MIN」
indian_poker(4, 2, 3) // 「C is MID」
デフォルトの名無しさん [sage] 2018/11/10(土) 09:43:13.06:9vqEahoA
そのスレの流れを無視してよそのスレで出されたお題の答えだけ書かれても、そのスレの住人には邪魔なだけだと思う。
デフォルトの名無しさん [] 2018/11/10(土) 09:56:28.53:X2YiMm/N
こういう指示語ばかり使うやつはだいたい頭悪い
デフォルトの名無しさん [] 2018/11/10(土) 10:03:50.52:0iGN/oEh

マ板で見かけた入社試験過去問か。
プログラマー脱落者として辞退します。
デフォルトの名無しさん [sage] 2018/11/10(土) 10:10:03.22:zQnB+SVr
乱立して過疎ってる (特定言語専用(スレッド))
形容詞句?の係りはこれな

(こういうものの表しかたにも流儀が色々あって混在するとややこしい)
デフォルトの名無しさん [sage] 2018/11/10(土) 10:19:13.79:2tLivqWS
係り受けなんてどーでもいいよ
「特定言語」って具体的に何なんだ、って聞いてるだけじゃん
返答が『形容詞句?の係りはこれな』って人の話をわざと聞かない人間だろ
かなりのサイコパスなんで『乱立して過疎ってるスレ』とやらに誘いこんでマウンティングしたいだけじゃねえの
なぜなら、特定言語の具体的な名前を5時間経っても未だに出さない、
口を開いたかと思えば「係り受けはこうだから」
もう頭がおかしいだろこいつ
デフォルトの名無しさん [sage] 2018/11/10(土) 10:34:20.29:zQnB+SVr
一つの言語を話題の軸に置いたスレッドは幾らでもあるだろ?この板には。
過疎ってるのも伸びてるのも全部特定言語専用スレな
デフォルトの名無しさん [sage] 2018/11/10(土) 10:36:44.35:zQnB+SVr
コマンドプロンプトとかSQLとかでワイルドカード使ったことないのかな?
デフォルトの名無しさん [sage] 2018/11/10(土) 11:08:46.45:1MT6N26R
そもそもここが過疎だし、他スレなんかにここのコード書いても荒らしにしかならんので当然ながら反対
やりたい奴だけ勝手にやってろ
デフォルトの名無しさん [] 2018/11/10(土) 11:14:10.79:16GnFLu/

一人が答えた時点で終了になるのに全員正解とは
デフォルトの名無しさん [sage] 2018/11/10(土) 11:20:45.22:zQnB+SVr
幾らなんでも既存スレ無許可で乗っ取るのはやめてほしい。
でも逆にそちらで希望された場合には別スレにしなくてもいいのでは?リンクさえあれば
デフォルトの名無しさん [sage] 2018/11/10(土) 11:31:50.87:T2pc5qWv
そもそもの時点で日本語が怪しいですし
デフォルトの名無しさん [] 2018/11/10(土) 11:33:27.18:16GnFLu/

答えた者が必ず正解するならAが常にあてずっぽうで正解できることになるな
パスする意味も無い

言わんとすることは推測できるが、問題文としては明らかにおかしい
各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要
デフォルトの名無しさん [sage] 2018/11/10(土) 11:34:10.16:g5G2TnXq
Java
ttp://https://ideone.com/EUQiD6
これはひどいコードww
デフォルトの名無しさん [] 2018/11/10(土) 11:36:49.05:16GnFLu/

ごり押しで草
デフォルトの名無しさん [] 2018/11/10(土) 11:44:08.17:16GnFLu/
Aは常に正解する
Aは常に正しい
故にA is GOD
デフォルトの名無しさん [sage] 2018/11/10(土) 12:18:21.41:2tLivqWS
は9月末あたりに話題になってた
ttps://qiita.com/gorillab/items/fab2a6637f681221f687
ttps://qiita-image-store.s3.amazonaws.com/0/169376/80ea2cf1-37e7-60b0-3230-c7dc1d2d60cc.jpeg
デフォルトの名無しさん [] 2018/11/10(土) 12:38:22.96:16GnFLu/

元ネタからして雑すぎて草
デフォルトの名無しさん [sage] 2018/11/10(土) 12:44:49.01:gks79eHH
前スレ951のやつか
デフォルトの名無しさん [sage] 2018/11/10(土) 12:44:51.58:xqriZsUd
Ruby

def indian_poker(a, b, c)
  x = [Set[1, 2], Set[1, 5], Set[4, 5]]
  winner, winners_num = case
    when x.include?(Set[b, c]) then [?A, a]
    when a == 3 || (b == 3 && Set[a, b, c] != Set[2, 3, 4]) || x.include?(Set[a, c]) ||
      Set[b, c] == Set[2, 4] then [?B, b]
  else [?C, c]
  end
  '%s is %s' % [winner, %w[MIN MID MAX].zip([a, b, c].sort).find{|e| e.last == winners_num}.first]
end

arr = [*(1..5)].permutation(3){|i| puts '%p -> %s' % [i, indian_poker(*i)]};
# =>
[1, 2, 3] -> C is MAX
[1, 2, 4] -> B is MID
[1, 2, 5] -> B is MID
...
以下と同じ
デフォルトの名無しさん [sage] 2018/11/10(土) 13:25:37.16:hLxIIZfE

> 各自、論理的に正解が絞りきれた場合のみ解答し、そうで無ければ必ずパスするものとする。又、その論理に誤りはないものとする。みたいな条件が必要
流石にその程度は理解しようよ…
デフォルトの名無しさん [sage] 2018/11/10(土) 13:27:54.99:8cjk91S6
python3
ttp://https://ideone.com/jQau8U
うーん… O(1)にできない
デフォルトの名無しさん [sage] 2018/11/10(土) 13:37:54.71:16GnFLu/

書いてないことは何でもあり

論理パズルにするならちゃんとルールは全て掲示しないと駄目
デフォルトの名無しさん [sage] 2018/11/10(土) 13:52:54.08:9b5VuL4P
お題
n^n^nの下2桁を求めよ(^はべき乗、nは1以上の整数)

1 => 1
2 => 16 (2^2^2 = 2^4 = 16)
3 => 87 (3^3^3 = 3^27 = 7625597484987)
4 => 96
11 => 11
13 => 53
100 => 0
777 => ??
デフォルトの名無しさん [sage] 2018/11/10(土) 14:00:49.74:hLxIIZfE

はいはい w
アスペかよ
デフォルトの名無しさん [] 2018/11/10(土) 15:46:45.95:16GnFLu/

777の出力は77になればいいのかな?
その入力でこうなるの面白いな
デフォルトの名無しさん [sage] 2018/11/10(土) 15:58:06.48:xqriZsUd

97じゃない?
デフォルトの名無しさん [] 2018/11/10(土) 16:06:41.30:16GnFLu/

すまんコード修正したら97になったわ
はやとちりだった
デフォルトの名無しさん [sage] 2018/11/10(土) 16:28:23.31:31tiZVqm

そういうのはそれよりマシなコードを出してから言わないと単なる口先番長にしか見えないぞw
デフォルトの名無しさん [sage] 2018/11/10(土) 17:09:13.33:xqriZsUd
Ruby
def powmod(n, e, m)
  case e
  when 0 then 1
  when :even?.to_proc then powmod(n * n % m, e >> 1, m)
  else n * powmod(n, e - 1, m) % m
  end
end

def kotae(n, m)
  index, cycle = (1..m).each_with_object([1]) do |i, a|
    x = (a.last * n % m)
    ind = a.index(x)
    ind.nil? ? a.push(x) : (break([ind, i - ind]))
  end
  x = n.times.reduce(1){|r, i| r *= n; r < index ? r : break}
  y = x.nil? ? index + (powmod(n, n, cycle) - index) % cycle : x
  powmod(n, y, m)
end

[0, 1, 2, 3, 4, 5, 10, 11, 13, 100, 777].each{|i| puts '%d -> %06d' % [i, kotae(i, 10**6)]}
# =>0 -> 000000
1 -> 000001
2 -> 000016
3 -> 484987
4 -> 084096
5 -> 203125
10 -> 000000
11 -> 906611
13 -> 549053
100 -> 000000
777 -> 977097
デフォルトの名無しさん [sage] 2018/11/10(土) 17:30:26.21:g5G2TnXq

自分で書いて自分でひどいコードと言うとるんやがww
デフォルトの名無しさん [sage] 2018/11/10(土) 17:52:39.10:AvCW4uHY
python

def ans(num):
_def calc(N):
__n = (N ** 2) % 100
__p = []
__while n not in p:
___p.append(n)
___n = (n * N) % 100
__return p

_loop = calc(num)
_step = num**num % len(loop)
_if len(loop) == 1:
__print(loop[0])
_else:
__print(loop[step-2])

for x in [0,1,2,3,4,5,10,11,13,777]:
_ans(x)

-> 0,1,16,87,96,25,0,11,53,97
デフォルトの名無しさん [sage] 2018/11/10(土) 17:55:30.82:hLxIIZfE

ああ、それはすまん
俺もパッと書けと言われたらこれしか思いつかんわ
デフォルトの名無しさん [sage] 2018/11/10(土) 19:50:00.93:nd1h6x9x

わかった上で愚直にごり押しコード書いただけだよな
引数順列の列挙もドストレートで素敵w
デフォルトの名無しさん [sage] 2018/11/10(土) 20:50:56.73:G7iMNc/F
Squeak/Pharo Smalltalk

| numOfCards indianPoker |
numOfCards := 5.
indianPoker := [:args |
| cards names infer |
cards := (1 to: numOfCards) asArray.
names := (Character alphabet asUppercase first: args size) asArray collect: #asSymbol.
infer := nil. (infer := [:dealts :limit |
| turn possibilities lastAns answers |
turn := 0. answers := OrderedCollection new.
possibilities := dealts collect: [:dealt | cards asSet removeAll: dealts; add: dealt; yourself].
lastAns := nil -> #?.
[lastAns value = #? and: [(turn := turn + 1) < limit]] whileTrue: [
| myCards others |
myCards := possibilities atWrap: turn.
turn > 1 ifTrue: [
(myCards copyWithout: (dealts atWrap: turn)) do: [:pCard |
(infer value: (dealts copy atWrap: turn put: pCard; yourself) value: turn) value ~= #?
ifTrue: [myCards remove: pCard]]].
others := dealts copyWithoutIndex: turn - 1 \\ 3 + 1.
lastAns := (names atWrap: turn) -> (true caseOf: {
[others min > myCards max] -> [#MIN].
[others max < myCards min] -> [#MAX].
[others max > myCards max and: [others min < myCards min]] -> [#MID]
} otherwise: [#?])
]. lastAns]) value: args value: Float infinity
].

indianPoker value: #(3 2 1). " #A->#MAX "
indianPoker value: #(5 2 4). " #B->#MIN "
indianPoker value: #(4 2 3). " #C->#MID "
デフォルトの名無しさん [sage] 2018/11/11(日) 03:24:01.44:HtKIrWnT
python3
ttp://https://ideone.com/2byzFd
デフォルトの名無しさん [] 2018/11/11(日) 10:02:52.73:ZG9KPLpE

Rubyで。
ttp://https://ideone.com/PoaYk5
デフォルトの名無しさん [sage] 2018/11/11(日) 12:53:19.00:ILkwXRqJ
Squeak/Pharo Smalltalk

| fn |
fn := [:N |
(Array new: 3 withAll: N) reduce: [:mex :n |
mex \\ 100 = 0 ifTrue: [0] ifFalse: [n raisedTo: mex modulo: 100]
]
].

#(1 2 3 4 11 13 100 777) collect: fn

"=> #(1 16 87 96 11 53 0 97) "
デフォルトの名無しさん [sage] 2018/11/11(日) 14:11:48.73:j7sl2u35

それだけでいけるのか
すげー
デフォルトの名無しさん [sage] 2018/11/11(日) 14:19:03.18:SClia95W
それでもJニキなら何とかしてくれる
デフォルトの名無しさん [sage] 2018/11/11(日) 14:25:13.88:j7sl2u35
よく読んだら素直に実装してるだけか
デフォルトの名無しさん [sage] 2018/11/11(日) 14:34:26.37:ILkwXRqJ

ですね…^^;
デフォルトの名無しさん [sage] 2018/11/11(日) 16:24:01.50:xWJTm2Oc
お題
n次のヒルベルト曲線を描画せよ

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

n=3
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■
デフォルトの名無しさん [sage] 2018/11/11(日) 17:11:10.50:Gv5Fmm22
Perl5

use bignum (l=>GMP);
for $i (1,2,3,4,11,13,100,777) {
$j = $i % 100;
$k = $j ** $j % 100;
$p = $j ** $k % 100;
printf "$i %02d\n", $p;
}

実行例
$ time perl 12_338.pl
1 01
2 16
3 87
4 96
11 11
13 53
100 00
777 97

0.562 secs
デフォルトの名無しさん [sage] 2018/11/11(日) 17:52:24.96:tvDFPkAv
Ruby
def hilbert_curve(n)
  return [[1, 0, 1], [1, 0, 1], [1, 1, 1]] if n == 1
  hc = hilbert_curve(n - 1)
  [
    *hc.transpose.reverse.zip(hc.reverse.transpose).map{|a, b| [*a, 0, *b]},
    [1, *Array.new(2**(n + 1) - 3, 0), 1],
    *hc.zip(hc).map.with_index{|(a, b), i| [*a, 1/(i + 1), *b]}
  ]
end

[1, 3].each{|e| puts "n = #{e}", hilbert_curve(e).map{|a| a.join.gsub(/\d/, ?0 => ?□, ?1 => ?■)}.join($/)}
# => n = 1
■□■
■□■
■■■
n = 3
■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■
デフォルトの名無しさん [] 2018/11/11(日) 22:01:36.28:B3f/927d

Haskell
素直に書いた版。
何やってるかは分かりやすい。

main = mapM_ put $ zip list $ map f list

put (x,y) = putStr (show x ++ ":") >> print y

f x = (x ^ x ^ x) `mod` 100

list = [1,2,3,4,5,6,7,8]
デフォルトの名無しさん [] 2018/11/11(日) 22:10:56.11:B3f/927d
Haskell
Perlの人のパクリ版(めちゃ速い)

main = mapM_ put $ zip list $ map f list

put (x,y) = putStr (show x ++ ":") >> print y

f x = p
where j = x `mod` 100
k = j ^ j `mod` 100
p = j ^ k `mod` 100

list = [1,2,3,4,11,13,100,777]
デフォルトの名無しさん [sage] 2018/11/11(日) 22:20:34.69:xWJTm2Oc

n=10のときどうなる?
デフォルトの名無しさん [sage] 2018/11/11(日) 23:54:52.39:VLVUrnJ+
指数を100の剰余取ってるのってどういう根拠なの?
デフォルトの名無しさん [sage] 2018/11/11(日) 23:59:16.36:lebYcZ/K

use bignum (l=>GMP);
for $i (10) {
$j = $i % 100;
$k = $j ** $j % 100;
$p = $j ** $k % 100;
printf "$i %02d\n", $p;
}

$i = 10;
print ($i**$i)**$i;

実行結果
$ perl 12_338_1.pl
10 01
10000000000

ダメですね合いませんね。
単に左辺を%100すると一般性はありませんでした。サーせん。
ちゃんと循環性を見るとか、別の解法が要りますね
デフォルトの名無しさん [sage] 2018/11/12(月) 00:02:23.31:EX0FpiMD
ちなみに循環性を見るとこんな感じになってました
use bignum (l=>GMP);
use Tie::IxHash;
use feature 'say';
for $i (0,1,2,3,4,5,10,11,13,777) {
tie my %h,'Tie::IxHash';
$p = $i;
for (1..100) {
last if exists $h{$p} and $h{$p} > 10;
$h{sprintf "%02d", $p % 100} = $_;
$p = $p * $i % 100;
}
@a = keys %h;
say "$i: ", scalar @a, ": @a", ": $p";
}

実行結果
1: 1: 01: 1
2: 21: 02 04 08 16 32 64 28 56 12 24 48 96 92 84 68 36 72 44 88 76 52: 48
3: 20: 03 09 27 81 43 29 87 61 83 49 47 41 23 69 07 21 63 89 67 01: 47
4: 10: 04 16 64 56 24 96 84 36 44 76: 16
5: 2: 05 25: 25
10: 2: 10 00: 0
11: 10: 11 21 31 41 51 61 71 81 91 01: 11
13: 20: 13 69 97 61 93 09 17 21 73 49 37 81 53 89 57 41 33 29 77 01: 37
777: 20: 77 29 33 41 57 89 53 81 37 49 73 21 17 09 93 61 97 69 13 01: 73
デフォルトの名無しさん [sage] 2018/11/12(月) 00:03:57.97:EX0FpiMD

× 単に左辺を%100
○ 単に右辺(指数)を%100
デフォルトの名無しさん [sage] 2018/11/12(月) 00:05:03.96:JEwLf6Zk

それは0乗しちゃってるからじゃない?
デフォルトの名無しさん [sage] 2018/11/12(月) 00:10:02.50:EX0FpiMD

10については、そういわれてみればそうだね。
デフォルトの名無しさん [] 2018/11/12(月) 00:11:06.48:D6ILV7Jx

iが10で割り切れれば00って別で切り分ければ良いんじゃ無いかな。
デフォルトの名無しさん [sage] 2018/11/12(月) 00:18:43.46:EX0FpiMD

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

0〜99までとりあえず循環部分の周期は全て20の約数になるみたいだけど
数学雑魚の俺には理屈がわからなかった

とりあえず、ざっくり100の剰余取るだけだと循環開始より小さい指数になったときにおかしくなりそう
デフォルトの名無しさん [sage] 2018/11/12(月) 00:52:30.78:+qrAueUv

寧ろそれが成り立つ方がかなり特別なケースだぞ
デフォルトの名無しさん [] 2018/11/12(月) 02:34:45.23:MtlIUxHY
多分数学的には証明されていることだろうと思うが、x ^ 100 とか x ^ 200 とか x ^ 300 って、
下3桁の結果が同じになるようだな。どうしてかはわからんが。多分考えて行くとその内わかる
んだろう。後の事は数学が得意な人に任せた。
デフォルトの名無しさん [sage] 2018/11/12(月) 04:19:59.43:lDwndekZ
x^22 - x^2
が常に100で割り切れるのが理由だと思う
なので巡回群の長さは高々20までになる
デフォルトの名無しさん [sage] 2018/11/12(月) 04:44:54.48:lDwndekZ
もう少し分かりやすく書くと x^20 - 1 と x^21 - x が
100で割り切れる保証はない(実際大部分は割り切れない)が
x^22 - x^2 は絶対に100で割り切れる(合同式を用いれば証明は簡明)ので
一般に2以上の自然数 n に対して x^(n+20) - x^n ≡ 0 mod 100が成り立つ(xは整数)

よって一般に指数部の20の剰余を取っても問題ないと言える
デフォルトの名無しさん [sage] 2018/11/12(月) 04:49:06.55:fKeD1dzA

任意の整数 10n + r (-4 <= r <= 5)に対して
(10n + r)^100 = r^100 mod 1000 なので mod 1000 で
0^100 = 0
5^100 = 625^25 = 625
(±1)^100 = 1
(±2)^100 = 24^10 = 376
(±3)^100 = 243^5 = 1
(±4)^100 = 376^2 = 376
となって 0, 1, 376, 625 は2乗しても下3桁は変わらないから
任意の整数は100n乗しても下3桁は常に同じだね
デフォルトの名無しさん [sage] 2018/11/12(月) 09:11:34.15:WiNaWTIj
数学板でやれ。問題からしてクソだった。
デフォルトの名無しさん [sage] 2018/11/12(月) 10:17:56.51:iaSpw+rm
これ以上はスレ違いってなら同意だけど問題自体は別に良かっただろ
デフォルトの名無しさん [sage] 2018/11/12(月) 11:03:12.07:oQPj2WUY
とりあえずの出題者は用意してあった解答を出そうか
くそ問題かどうかはそれを見て判断する
デフォルトの名無しさん [sage] 2018/11/12(月) 11:11:40.60:iaSpw+rm
既に回答がたくさん出てるのにクソ問題も何もねえだろ
デフォルトの名無しさん [sage] 2018/11/12(月) 11:51:52.42:oQPj2WUY
回答の多さとクソさとの相関はないだろ
例えばQiitaでいいねが多ければクソじゃないということがないのと同じように

そういうのはいいから出題者は早めに解答だしてくれ
デフォルトの名無しさん [sage] 2018/11/12(月) 12:01:03.54:iaSpw+rm
ボクがわからないからクソとか草生えるわ
なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ
デフォルトの名無しさん [] 2018/11/12(月) 12:07:32.95:iShTB70W

最近のQiitaのトレンド見てて いいねの数=内容の薄さ だと思うようになってきたわ
デフォルトの名無しさん [sage] 2018/11/12(月) 12:11:20.95:b6USGf7s
今回の問題はべき剰余の特殊な場合を求めるものだけど、工夫する余地もいくつかあり悪い問題ではないと思った。
というかなぜこれを悪い問題だと思ったんだ?
デフォルトの名無しさん [sage] 2018/11/12(月) 12:19:11.85:DYCuacpe
競技プログラミングなんかでよく見るタイプの問題なのにな。
デフォルトの名無しさん [sage] 2018/11/12(月) 12:23:12.24:hXyGmgtP
a↑↑b mod n を一般化してみたらテトレーション計算より
最初に使うφ(n)の計算のほうが重かった
10**nなら2**n * 5**nなので高速に計算できますけども
デフォルトの名無しさん [sage] 2018/11/12(月) 12:28:21.72:TKKxOWxM
このスレは不特定言語スレだけど
高速性ならC/C++/Rast
コンパクト性の追求ならSmallTalkとかRubyとか
RADならJavaとかPythonとか定番固定化。
既にもうある程度少数特定言語スレになりつつあ
る希ガス
デフォルトの名無しさん [sage] 2018/11/12(月) 12:28:55.23:TKKxOWxM
RastじゃなくてRustやったなwww
デフォルトの名無しさん [sage] 2018/11/12(月) 12:49:28.80:7mLFygVa

> なんでお前の救い難い知的レベルに合わせてやらなければならいんだよ

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

そもそも良問と思うものをけなされるお前自身がたのしくないだろ?
デフォルトの名無しさん [sage] 2018/11/12(月) 12:56:08.79:1XBBjLKo
いずれにせよ出題者がどこまで考えて出題したか(つまり良問か否か)はそいつ自らの解答を見れば一目瞭然だよ
論よりコード
はよ出せ
デフォルトの名無しさん [sage] 2018/11/12(月) 13:24:01.86:WWnCJgTu
問題の良さって問題じゃなく解答で決まるものなのか?
問題だけで問題の良さが確定しないのは初めて知ったわ
デフォルトの名無しさん [sage] 2018/11/12(月) 13:26:44.24:DYCuacpe
も一回言うけどこの問題はプログラミングのお題としてはよく見るような問題だぞ。
揚げ足取りというか難癖付けてる奴はおかしいだろ。
それこそスレチだから黙ってろよ。
デフォルトの名無しさん [sage] 2018/11/12(月) 13:28:23.55:X+KqJ1/Z

解答で決まるなんて誰もいっとらんがな(数学の前にやることあるんじゃ?w)
解答を見れば「どこまで考えて出題したか」が一目瞭然ということ
どこまで考えて出された問題かで良問か否かが決まる

もとより様々な状況で「結果的に良問」ということは実際あるしそれは否定する気は無いが、蓋然性は低い
デフォルトの名無しさん [sage] 2018/11/12(月) 13:38:11.17:b6USGf7s
この程度のことで選民思想がどうのとか言い出すのはおかしいと思うよ。
冪剰余の計算は面白いテーマだし。
逆に悪問だと言ってる人がその根拠を示すべきだと思うんだけど。
デフォルトの名無しさん [sage] 2018/11/12(月) 13:57:27.23:9RzF2H48

「この程度(のレベル)」とか言ってる選民思想バリバリの奴が
自分は違うって体で何か主張したところでぜんぜん説得力ないんだがw

ともあれ、回答が多い割に文句なしの正答が出てこないのがこのスレ的には異常事態だろ
お題 and/or 出題者をクソだと疑う十分な根拠になりうる
デフォルトの名無しさん [sage] 2018/11/12(月) 14:13:38.48:b6USGf7s

英語の授業で"How are you?" "I'm fine. Thank you" って言ったら「ペダンチックだ。帰国子女ぶるな」といわれたくらいに衝撃的。
大体問題が理解できないのに「文句なしの正答」を見極められるというのはおかしくない?
こっちからすればここに既にある回答の内のいくつか(とか)は「文句なしの正答」なんだけど。
問題が理解できないのに「文句なしの正答」を見極められるならそれらのどこが不十分なのか説明しなさい。
それができなければ数学ができる出来ない以前にただのモンスタークレーマーみたいな傲慢野郎だ。
デフォルトの名無しさん [sage] 2018/11/12(月) 14:16:13.02:CqB5lm+V
まーた頭おかしいのが暴れてんのか
はNGぶっこむからIDころころ変えるな
もしくはコテハンつけろよゴミが
デフォルトの名無しさん [] 2018/11/12(月) 14:24:13.52:D6ILV7Jx
とか良い問題じゃ無い?
私は解けないが。
デフォルトの名無しさん [sage] 2018/11/12(月) 16:17:37.15:9RzF2H48

いくつかってずいぶん曖昧だなw
お前の文句なしってセンス疑うわw
デフォルトの名無しさん [sage] 2018/11/12(月) 16:22:54.34:CqB5lm+V

に文句つけてみろよ無能ゴミクズが
デフォルトの名無しさん [sage] 2018/11/12(月) 16:27:56.77:9RzF2H48
あとお前ら(直近ではID:9RzF2H48とID:CqB5lm+V)
勝手にクソ問題断定のクレーマー扱いしとるが
出題者の用意していた解答次第では良問の可能性も(わずかだが)あるんだからな
ほどほどにしとけよw
デフォルトの名無しさん [sage] 2018/11/12(月) 16:29:53.16:9RzF2H48
いかん自分を安価しちゃったよID:b6USGf7sな
デフォルトの名無しさん [sage] 2018/11/12(月) 16:33:57.40:DYCuacpe
どうやら ID:9RzF2H48 は人を馬鹿にしたいだけみたいだな。
きちんと説明してもらってんのに言ってることがわけわからんし。
冪剰余の最適化なんて教科書にあってもいいくらいものすごくありふれたお題だっていうのに馬鹿らしい。
デフォルトの名無しさん [sage] 2018/11/12(月) 16:37:03.80:CqB5lm+V
数学の話ししてるのにイライラして思わずクソ問題呼ばわりして引くに引けなくなったんだろ
デフォルトの名無しさん [sage] 2018/11/12(月) 16:43:20.29:b6USGf7s

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

本音がでたなw中立ぶるよりお前ららしいわ


こんなん数学に入るかボケが
つーかお前のためにID固定してやってんだからレスすんな
デフォルトの名無しさん [sage] 2018/11/12(月) 16:52:28.57:9RzF2H48

自分で回答も出せないやつが他人のコード気安く挙げてんじゃねーよ
お前が考えて出したコードならいくらでもケチつけたるわw
デフォルトの名無しさん [sage] 2018/11/12(月) 16:55:43.17:CqB5lm+V

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

>ともあれ、回答が多い割に文句なしの正答が出てこない
って言うからその反例として件のレスなのに、開き直ってお前がコード書けだなんて控えめに言って狂ってる。
相手が言ったことも読まないし自分が行ったことすら覚えていないんじゃあ対話不可能。
ただただ不快な存在。
デフォルトの名無しさん [] 2018/11/12(月) 17:01:55.26:D6ILV7Jx
は情報爆発でメモリ使いまくる処理をいかにメモリ使わずに処理できるかって意味じゃ悪く無いと思う。
私はプログラマーじゃ無いから思い付けなかったが、こう言うのはプログラマーの本領発揮する分野じゃないかな。

そして も解けない私。。。Orz
GUIならネットに落ちてるけど、CUIってのが味噌だよね。
デフォルトの名無しさん [sage] 2018/11/12(月) 17:02:08.43:9RzF2H48

それは出題者のコードじゃないだろ?
ほんとお前、日本語読解とか論理的思考とか大丈夫なの?
デフォルトの名無しさん [sage] 2018/11/12(月) 17:02:52.43:9RzF2H48
正直、ばかにはしているw
デフォルトの名無しさん [sage] 2018/11/12(月) 17:03:00.49:DYCuacpe

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

>ともあれ、回答が多い割に文句なしの正答が出てこない
と言ったのはそちらで、それに対してこっちがその反例として件のレスを挙げたのに本気で意味不明。
会話を破綻させに行っているのは君でしょ。自分が書いたことすら覚えていないのだから。
さすがに不愉快だ。
デフォルトの名無しさん [sage] 2018/11/12(月) 17:08:31.84:1o1kfQH0
馬鹿は相手がどの高さいるのかもわからずに人を馬鹿にする
頭が悪いので周囲が何を言ってるのか何一つ理解できない
そして自尊心の塊
デフォルトの名無しさん [sage] 2018/11/12(月) 17:08:37.05:CqB5lm+V
ここまできっちり論破されてるとキチガイ相手でも哀れになってくるな
デフォルトの名無しさん [sage] 2018/11/12(月) 17:13:08.29:9RzF2H48

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

だからお前は反応するなと何度言わせる?w
デフォルトの名無しさん [sage] 2018/11/12(月) 17:17:08.81:b6USGf7s

対話する意図がないと判断した。
もういい。疲れた。
控えめに言って、君はもう死んだ方が良いよ。
デフォルトの名無しさん [sage] 2018/11/12(月) 17:21:16.54:4IQEu5Ky
最近あっちこっちで暴れてる単芝君か
5chに居場所が無くてもリアル犯罪に走るなよな
デフォルトの名無しさん [] 2018/11/12(月) 17:21:58.58:D6ILV7Jx
良い加減にしろ!
もうオマイらで の文句なしの正当とやらを出し合えや。
デフォルトの名無しさん [sage] 2018/11/12(月) 17:23:23.00:eZ2UdI/8
・数学の話ばかりしてうざい ←わかる
・作者は答え書いて ←わからなくもない
・答え書かないからクソ問題! ←は?
デフォルトの名無しさん [sage] 2018/11/12(月) 17:54:26.10:9RzF2H48

誤解があるので訂正しておくけど
出題者が「落とし穴」をちゃんと想定できていれば良問だしそれを確認せんがための「答え出せ」だよ

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

引っ掛けて貶めたり、選抜や順位を競うことを目的とした場所じゃないんだからここは
デフォルトの名無しさん [sage] 2018/11/12(月) 18:12:43.91:eZ2UdI/8
n^n^n % 100計算するのに落とし穴も何もないだろ
フェルマーの小定理チックに指数部で剰余とるだなんて誰も想定できねえよ
なんでキチガイは間違えたらそこから学ばずに問題の方(しかも真っ当)にケチ付けるんだか
運動会で転ぶと怪我をするからグラウンドの至る所にクッションを置いておけと言うモンペと同レベルのキチガイ
デフォルトの名無しさん [sage] 2018/11/12(月) 18:26:31.10:bzMEonQL
なんで数学板でやらないのかね。
数学板ではザコだからプログラム板でマウント取りたいとか?ww
デフォルトの名無しさん [sage] 2018/11/12(月) 18:28:01.10:CqB5lm+V

ID変えんなやキチガイ
デフォルトの名無しさん [sage] 2018/11/12(月) 18:32:41.33:9RzF2H48

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

変えてないし、そもそも俺だと思うならレスすんなよ…
デフォルトの名無しさん [sage] 2018/11/12(月) 18:55:17.39:eZ2UdI/8

お前以外誰もその問題にケチ付けてねえのに住人面すんな
素直に頭悪いが悪いのが悔しいですって言えよ
デフォルトの名無しさん [] 2018/11/12(月) 19:18:26.81:h68nq2of
プログラミングできてもネットリテラシーは低いんだな
デフォルトの名無しさん [sage] 2018/11/12(月) 19:28:11.51:+FWS6rf7
ID:9RzF2H48
こいつ前からこの板荒らしまくってる粘着野郎だぞ
意思疎通は不可能だから無視しとけ
デフォルトの名無しさん [sage] 2018/11/12(月) 19:45:44.72:4WXaKeF0
お題
1900年から2018年までの、7月31日が土曜日である年を全て挙げよ
デフォルトの名無しさん [sage] 2018/11/12(月) 19:52:33.63:n3BneZmq
なんで?
デフォルトの名無しさん [] 2018/11/12(月) 19:54:05.95:I5PkaEyl
自分で計算して求めるのを作るか、ライブラリを使ってしまうか、悩ましいところですな・・・
336 [sage] 2018/11/12(月) 19:58:23.85:rYIWpX0E
悪い意味で盛り上がってて苦笑するしかない

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

Ruby読めないけどと大体同じ考え方なのかな
デフォルトの名無しさん [sage] 2018/11/12(月) 20:20:47.61:4WXaKeF0
お題
0から99までの整数を2進数で表したとき、1が奇数個あるものを全て挙げよ
デフォルトの名無しさん [sage] 2018/11/12(月) 20:23:17.93:zzbIEe7z
bash + date
for i in {1900..2018}; do if [ $(date --date=07/31/$i +%w) -eq 6 ];then echo "$i "; fi; done
デフォルトの名無しさん [sage] 2018/11/12(月) 20:27:55.24:q04ZIund
Ruby 日付ライブラリ使うのもつまらないので冗談で

(1900..2018).select{|y| (y%100*5/4 - y/2000) % 7 == 4}
# => [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010]
デフォルトの名無しさん [sage] 2018/11/12(月) 20:31:45.80:q04ZIund
Ruby
p (0..99).select{|i| i.digits(2).count(1).odd?};
# => [1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32,
35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59,61, 62, 64, 67,
69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98]
デフォルトの名無しさん [sage] 2018/11/12(月) 20:36:43.90:MOsxqjp/

J
分けて計算
years=:1900 + i. 119
saturdays =: 6= weekday years(,"0 1) 7 31
saturdays # years
出力
1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010

1行で
(#~ 6&=@weekday@(,&7 31)"0) 1900+i.119
出力は同じ
デフォルトの名無しさん [sage] 2018/11/12(月) 20:55:43.70:MOsxqjp/

J

(#~ 2&|@+/@(#.^:_1"0)) i.100
出力
1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98
デフォルトの名無しさん [sage] 2018/11/12(月) 21:30:19.73:WG+vGwsG
Perl5
use feature say;
$,=',';
say = grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99;

実行
$ perl 12_434.pl
1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98
デフォルトの名無しさん [sage] 2018/11/12(月) 21:32:31.70:WG+vGwsG
ゴメンよけいな=が入っていたので削除

Perl5
use feature say;
$,=',';
say grep{1&sprintf("%b", $_) =~ tr/1/1/} 0..99;

実行
$ perl 12_434.pl
1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98
デフォルトの名無しさん [sage] 2018/11/12(月) 21:57:07.87:jh3oqSUb
rust
ttp://https://ideone.com/gTuww7
デフォルトの名無しさん [sage] 2018/11/12(月) 22:18:19.15:kM9Cc8DJ
PowerShell
1900..2018 | %{Get-Date "$_/07/31"} | ? -Property DayOfWeek -eq 6 | select Year
デフォルトの名無しさん [] 2018/11/12(月) 23:14:49.42:fOB5B0pj
Common Lisp
ttp://https://ideone.com/C9fVpq
デフォルトの名無しさん [sage] 2018/11/12(月) 23:55:59.63:jh3oqSUb
c
ttp://https://ideone.com/BvQRUR
デフォルトの名無しさん [sage] 2018/11/13(火) 00:02:22.82:5Ay5yU9p
デフォルトの名無しさん [sage] 2018/11/13(火) 00:27:29.87:7jyC4IO4
python


import datetime
[x for x in range(1900,2018) if datetime.datetime(x,7,31).weekday() == 5]
-> [1909, 1915, 1920, 1926, 1937, 1943, 1948, 1954, 1965, 1971, 1976, 1982, 1993, 1999, 2004, 2010]
ツェラーの公式を用いた別解
[x for x in range(1900,2018) if (x + int(x/4) - int(x/100) + int(x/400) + 1) % 7 == 6]


[x for x in range(1,99) if format(x,"b").count("1") % 2]
->
[1, 2, 4, 7, 8, 11, 13, 14, 16, 19, 21, 22, 25, 26, 28,
31, 32, 35, 37, 38, 41, 42, 44, 47, 49, 50, 52, 55, 56, 59,
61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, 82, 84, 87, 88, 91, 93, 94, 97, 98]
デフォルトの名無しさん [sage] 2018/11/13(火) 00:32:55.99:7jyC4IO4
[x for x in range(1900,2018) if (x + x//4 - x//100 + x//400 + 1) % 7 == 6]
でええやんけ
デフォルトの名無しさん [] 2018/11/13(火) 00:43:41.95:bZ0HXQ7X

Haskell

main = print.tnum.filodd.zip list $ map bsum list

tnum = map (\(x,_) -> x)

filodd = filter (\(x,y) -> odd y)

bsum = sum.blist

blist 0 = []
blist n = (n `mod` 2):blist (n `div` 2)

list = [0..99]

実行結果
[1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98]
デフォルトの名無しさん [sage] 2018/11/13(火) 00:55:13.44:5Ay5yU9p
乙乙
デフォルトの名無しさん [sage] 2018/11/13(火) 01:00:17.03:wnw9zNxR
出力とかなさらないんですか?
デフォルトの名無しさん [sage] 2018/11/13(火) 01:11:01.02:qGbdPj8P
Squeak/Pharo Smalltalk

(1900 to: 2018) select: [:y | (Date year: y month: 7 day: 31) weekday = #Saturday]

"=> #(1909 1915 1920 1926 1937 1943 1948 1954 1965 1971 1976 1982 1993 1999 2004 2010) "
デフォルトの名無しさん [sage] 2018/11/13(火) 01:23:34.12:qGbdPj8P
Squeak/Pharo Smalltalk

(0 to: 99) select: [:x | ((x radix: 2) occurrencesOf: $1) odd]

"=> #(1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50
52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98) "
デフォルトの名無しさん [sage] 2018/11/13(火) 01:59:27.96:4/lVJDsB
>>448をJavascriptに引き写してみた。


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


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

汚い…
Pythonの内包表記は良いなぁ…
デフォルトの名無しさん [sage] 2018/11/13(火) 02:08:16.58:JCaIqwLF
やってみた
J

z=: dyad define " 0
s=: ([+ (], (((_1:^+)*+)))) "0 0
>: |: (y,x)$((i.c)/:,(+:c)(#."0 1)|(i.y)s/(i.x))i.i.c=.x*y
)

3 z 3
1 2 6
3 5 7
4 8 9

4 z 2
1 2
3 5
4 6
7 8

3 z 5
1 2 6 7 12
3 5 8 11 13
4 9 10 14 15

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

>1 z 8
>1 2 3 4 5 6 8 7

写し間違えました。実際には正しい結果になります。
デフォルトの名無しさん [sage] 2018/11/13(火) 02:27:33.07:JCaIqwLF
は各 (x,y) の項について
主キー x + y
副キー x + (-1)^(x+y) * (x+y)
とするとジグザグ順に昇順のキーが得られるので
そのキーでソートしたときの順位を表示、というやり方
デフォルトの名無しさん [] 2018/11/13(火) 11:28:29.90:/6RlnNZj

Perl5
ttp://https://paiza.io/projects/HxeBcbXHG1jRNRhrutaKqA
文字列にせずに全Bit足して求めた。
デフォルトの名無しさん [] 2018/11/13(火) 12:04:16.15:/6RlnNZj

C
ttp://https://paiza.io/projects/Xq4YBZq4qJJLOZLsNTyWng

ライブラリ使用。
コンパイラとライブラリの対応の問題だろうが、32bit環境ではできなかった。time_t型がlongか何かになっていて足りなかったからだろうと思う。
まともに動くかどうかは(またはコンパイルできるかどうかは)環境依存ということになる。
デフォルトの名無しさん [sage] 2018/11/13(火) 14:23:32.25:TStmpOw3
Squeak Smalltalk を参考に (joinを直せばPharoも可)

| fn |
fn := [:M :N |
| digits xs ys primaries secondaries sorted |
digits := (M * N) log ceiling.
xs := (1 to: M) collect: [:idx | (1 to: N) asArray].
ys := (1 to: M) collect: [:idx | Array new: N withAll: idx].
primaries := xs + ys.
secondaries := primaries \\ 2 * 2 - 1 * xs.
sorted := ((1 to: M) gather: [:y | (1 to: N) collect: [:x | x@y]]) sort:
[:pt | (primaries at: pt y) at: pt x] ascending, [:pt | (secondaries at: pt y) at: pt x] descending.
sorted doWithIndex: [:pt :idx | (xs at: pt y) at: pt x put: (idx printStringPadded: digits)].
(xs collect: [:row | row joinSeparatedBy: ' ']) asStringWithCr
].

fn value: 3 value: 3. "=>
'1 2 6
3 5 7
4 8 9' "
fn value: 4 value: 2. "=>
'1 2
3 5
4 6
7 8' "
fn value: 3 value: 5. "=>
'01 02 06 07 12
03 05 08 11 13
04 09 10 14 15' "
fn value: 1 value: 8. "=>
'1 2 3 4 5 6 7 8' "
デフォルトの名無しさん [sage] 2018/11/13(火) 15:05:24.75:x0SFJuPP

副キーは x+y の偶奇に応じて上下や左右が反転してればいいわけだから
単に (-1)^(x+y)*x とか (-1)^(x+y)*y で十分か
デフォルトの名無しさん [sage] 2018/11/13(火) 16:16:43.59:GUmX5rsv
Squeak/Pharo Smalltalk を参考に

| fn |

fn := [:N :exp :lastNDigs |
| M series count nextVal initial cycle nextExp |
M := 10 raisedTo: lastNDigs.
series := OrderedCollection with: N \\ M.
count := 0.
[(series addIfNotPresent: (nextVal := series last * N \\ M); size) = (count := count + 1)] whileFalse.
initial := series indexOf: nextVal.
cycle := series size - initial + 1.
nextExp := N.
exp - 1 timesRepeat: [nextExp := (nextExp between: 1 and: series size)
ifTrue: [series at: nextExp]
ifFalse: [series at: nextExp - initial \\ cycle + initial]].
nextExp printStringPadded: lastNDigs
].

#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 2)].
"=> {1->'01' . 2->'16' . 3->'87' . 4->'96' . 5->'25' .
10->'00' . 11->'11' . 13->'53' . 100->'00' . 777->'97'} "

#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 3 value: 6)].
"=> {1->'000001' . 2->'000016' . 3->'484987' . 4->'084096' . 5->'203125' .
10->'000000' . 11->'906611' . 13->'549053' . 100->'000000' . 777->'977097'} "

#(1 2 3 4 5 10 11 13 100 777) collect: [:N | N -> (fn value: N value: 4 value: 3)].
"=> {1->'001' . 2->'536' . 3->'387' . 4->'896' . 5->'125' .
10->'000' . 11->'611' . 13->'053' . 100->'000' . 777->'097'} "
デフォルトの名無しさん [sage] 2018/11/13(火) 16:32:36.89:3gkxjay9

何かの行列足せば出来るんじゃね
デフォルトの名無しさん [sage] 2018/11/13(火) 17:15:46.99:GUmX5rsv
Squeak Smalltalk ヒルベルトは組み込みなので…

| fn |
fn := [:n |
| form m lines |
form := Form extent: (m := 2 << n - 2) + 1 asPoint.
(Pen newOnForm: form) place: 0@m; hilbert: n side: 2.
lines := (m to: 0 by: -1) collect: [:y |
(0 to: m) inject: '' into: [:acc :x | acc copyWith: ('□■' at: (form pixelValueAt: x@y) + 1)]
].
lines asStringWithCr
].
fn value: 1. "=>
'■□■
■□■
■■■' "
fn value: 3. "=>
'■□■■■■■□■■■■■□■
■□■□□□■□■□□□■□■
■■■□■■■□■■■□■■■
□□□□■□□□□□■□□□□
■■■□■■■□■■■□■■■
■□■□□□■□■□□□■□■
■□■■■■■□■■■■■□■
■□□□□□□□□□□□□□■
■■■□■■■■■■■□■■■
□□■□■□□□□□■□■□□
■■■□■■■□■■■□■■■
■□□□□□■□■□□□□□■
■□■■■□■□■□■■■□■
■□■□■□■□■□■□■□■
■■■□■■■□■■■□■■■' "
デフォルトの名無しさん [] 2018/11/13(火) 18:58:02.16:6xZ1V9iJ
Ruby とは別のアプローチで

def zigzag(h, w)
  min, max = [h, w].minmax
  sum, multi = h + w, h * w
  f = -> n {n < min ? n + 1 : n >= max - 1 ? sum - n - 1 : min}
  diagonal = (sum - 1).times.with_object([*1..multi]).map{|i, ary| ary.shift(f[i]).tap{|a| i.odd? && a.reverse!}}
  len = Math.log10(multi).floor + 1
  h.times.map{|i| diagonal[i, w].map(&:pop)}.map{|e| e.map{|i| "%0#{len}d" % i}.join(' ')}.join($/)
end

[[3, 3], [4, 2], [3, 5], [1, 8]].each{|e| puts "%d %d =>\n%s\n\n" % [*e, zigzag(*e)]}
# =>
3 3 =>
1 2 6
3 5 7
4 8 9

4 2 =>
1 2
3 5
4 6
7 8

3 5 =>
01 02 06 07 12
03 05 08 11 13
04 09 10 14 15

1 8 =>
1 2 3 4 5 6 7 8
デフォルトの名無しさん [] 2018/11/13(火) 19:36:47.61:57oATazI

Python3
ttp://https://ideone.com/N66H4z

=> 1 2 4 7 8 11 13 14 16 19 21 22 25 26 28 31 32 35 37 38 41 42 44 47 49 50 52 55 56 59 61 62 64 67 69 70 73 74 76 79 81 82 84 87 88 91 93 94 97 98
デフォルトの名無しさん [sage] 2018/11/13(火) 21:13:13.10:VjbjD5Cz
お題
直方体の体積を求めよ。三辺の長さはそれぞれ自然数+単位(mm,cm,m,km)の形式で与えられる。
答えは自然数+単位(mm^3,cm^3,m^3,km^3)の形式で、数値部分がなるべく小さくなるように単位を選択せよ。

2cm 3cm 4cm
=> 24cm^3

5mm 5mm 40mm
=> 1cm^3

3m 100000000km 3mm
=> 900000000m^3
デフォルトの名無しさん [sage] 2018/11/13(火) 21:46:22.87:ZM1FA5dW
Ruby
def to_mili(num, unit)
  case unit
  when 'mm' then num
  when 'cm' then num * 10
  when 'm' then num * 1000
  when 'km' then num * 1000000
  end
end

def volume(sides)
  v_mili = sides.scan(/(\d+)([a-z]+)/i).map{|side, unit| to_mili(side.to_i, unit)}.reduce(:*)
  [[10**18, 'km^3'], [10**9, 'm^3'], [10**3, 'cm^3'], [1, 'mm^3']].each{|coe, unit| return [v_mili / coe, unit] if v_mili % coe == 0}
end

['2cm 3cm 4cm', '5mm 5mm 40mm', '3m 100000000km 3mm'].each{|sides| puts '%s => %d%s' % [sides, *volume(sides)]}
# =>
2cm 3cm 4cm => 24cm^3
5mm 5mm 40mm => 1cm^3
3m 100000000km 3mm => 900000000m^3
デフォルトの名無しさん [] 2018/11/13(火) 22:46:25.57:jgdNCfY5
プログラミング無料で学んで就職できる?
ttp://https://et-irodori.com/b/2202
デフォルトの名無しさん [sage] 2018/11/13(火) 22:49:55.39:YD+aXj03
無料ではないな。
お前の将来の給料からスクールに金が行く。
デフォルトの名無しさん [] 2018/11/14(水) 00:08:48.41:pC5Ut3Ig
お題: 品物がN個あり,ぞれぞれ体積はa(1), ..., a(N)である。
すべての品物を複数のダンボール(容積C)に分けて詰めるとき,必要になるダンボールの最小数を求めよ。

例:
C: 30
a: 8 5 10 6 4 5 8 5 9 6 9
=> 3

C: 120
a: 33 61 58 41 50 21 60 64
=> 4

C: 120
a: 33 61 58 41 50 21 60 64 23 45 67 78 89
=> 7
◆QZaw55cn4c [sage] 2018/11/14(水) 00:21:42.53:1oDeoExT

ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/54
rucursive に書く人が一人ぐらいいてもいいか、と
デフォルトの名無しさん [sage] 2018/11/14(水) 00:25:56.42:BDJVwe3s
rucursiveならしょうがない
◆QZaw55cn4c [sage] 2018/11/14(水) 00:58:44.50:1oDeoExT

typo, "recursive"
ええと、 に近いのは かもしれませんが、 は bit 数を具体的に求めきっていますか?それとも のように真理値まで短縮してリターンしてますか?
haskell はよくわからないので…
デフォルトの名無しさん [sage] 2018/11/14(水) 01:04:38.44:xfEiy+CV

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

5はありえないから合ってるね
デフォルトの名無しさん [] 2018/11/14(水) 05:43:59.41:BYIKTG47
J
f=:3 : 0
y 100&|@^ y^y
)
デフォルトの名無しさん [sage] 2018/11/14(水) 06:20:37.22:W0CfAPru

どのバージョンのJで100|777^777なんてできるんだよ…
デフォルトの名無しさん [sage] 2018/11/14(水) 06:24:21.52:W0CfAPru
書き方が嫌らしかった。
それ動かないんじゃないですかということ。
デフォルトの名無しさん [] 2018/11/14(水) 06:38:51.58:BYIKTG47

v6で動いたけどな
デフォルトの名無しさん [] 2018/11/14(水) 07:48:55.58:XWwMTSMS

むっちゃ愚直に10進数から2進数に変換してるだけです^^;
ttp://http://www.it-license.com/cardinal_number/DecimalToBinary.html

ただ、今回は1になってるビットが奇数かどうかだけなのでビット順は逆になっても構わないだろうと、
速い方でリストにしてます。

blist n = (n `mod` 2):blist (n `div` 2)

だとビット順は逆さま。

blist n = (n `mod` 2) ++ blist (n `div` 2)

とすると正しい順番ですが遅くなります。

あとは1と0だけのリストなので合計求めて

sum.blist ―2進数に変換しながら1の合計を求める。

入力と関連付けて

zip list

奇数だけをフィルタリングしてます。

filodd = filter (\(_,y) -> odd y)
デフォルトの名無しさん [] 2018/11/14(水) 07:53:25.46:BYIKTG47
の実行結果

f @>1 2 3 4 11 13 100 777x
1 16 87 96 11 53 0 97
デフォルトの名無しさん [sage] 2018/11/14(水) 08:04:51.77:W0CfAPru

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

>100 のとき 0 にならないからダメだけど

いやこっちは言いがかりだった。ちゃんと動く。
◆QZaw55cn4c [sage] 2018/11/14(水) 08:16:08.16:1oDeoExT

解説ありがとうございます。
>blist n = (n `mod` 2) : blist (n `div` 2)
この : は (cond atom list) の : なんですね、なんとかわかるようになりました
◆QZaw55cn4c [sage] 2018/11/14(水) 08:19:40.71:1oDeoExT

×(cond atom list)
○(cons atom list)
デフォルトの名無しさん [sage] 2018/11/14(水) 08:34:57.16:W0CfAPru
言いがかりだったというか
いちゃもんを付けてごめんなさい

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

とか勉強になりました (累乗の剰余の特別扱いか?)
デフォルトの名無しさん [] 2018/11/14(水) 11:57:26.31:bryEJhFF

Kotlin
ttp://https://paiza.io/projects/PT0g18WlTHd6eyd_iXA5aQ
デフォルトの名無しさん [sage] 2018/11/14(水) 14:12:11.78:OQ399L2/
ナップサック問題はNP困難らしいけどは効率よく解けるのだろうか
デフォルトの名無しさん [] 2018/11/14(水) 14:13:39.09:bryEJhFF

順列と足し算の問題ではないのか?
てか、今のところそれしか思い浮かばない。
デフォルトの名無しさん [sage] 2018/11/14(水) 14:30:58.50:BDJVwe3s
現実は荷物が一日10万個くらいあるんだよなぁ
デフォルトの名無しさん [] 2018/11/14(水) 14:57:13.49:bryEJhFF
正にコンピュータ向けの仕事
デフォルトの名無しさん [] 2018/11/14(水) 15:18:37.83:XWwMTSMS
実際は大量購入した方が安くなるから、よく出るサイズを大量購入して、それ以下の重量は全部よく出るサイズにした方が安上がりだったりする。
(だからアマゾンの箱は無駄にでかい)

まあこれはプログラミング上の問題だが。
デフォルトの名無しさん [sage] 2018/11/14(水) 16:08:49.28:T5a0sRYf

段ボール箱の容量の増減は割と簡単に出来る。
デフォルトの名無しさん [sage] 2018/11/14(水) 18:30:10.19:whO97NBY
octave
ttp://https://ideone.com/8QGk1s
デフォルトの名無しさん [sage] 2018/11/14(水) 19:00:13.88:DmGPDAaP
C
ttp://https://ideone.com/ecAVVC
デフォルトの名無しさん [sage] 2018/11/14(水) 22:47:03.81:whO97NBY
ruby
ttp://https://ideone.com/OugAmn
デフォルトの名無しさん [sage] 2018/11/15(木) 00:59:29.19:Q7kJgHrD

python 3
ttp://https://ideone.com/moV2rT
ゴミ
デフォルトの名無しさん [] 2018/11/15(木) 02:07:53.71:lbhTVho0

Kotlin

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

ttp://https://paiza.io/projects/rWdvvAZRxR1Qhr8B6PaM2Q

入力は1行の先頭に容積、その後スペース区切りで品物の体積。
結果は箱の数とそれぞれの箱に詰め込んだ品物。
デフォルトの名無しさん [sage] 2018/11/15(木) 05:46:40.53:uj0cmGI/

C: 7
a: 3 3 2 2 2 2
最適は[3,2,2]と[3,2,2]の2箱でないといけない
デフォルトの名無しさん [sage] 2018/11/15(木) 07:10:16.88:dYhTSjHD

それだと 6, 5, 3, 2, 2, 2のとき[6, 3], [5, 2, 2] [2] になるが[6, 2, 2] [5, 2, 3]が最小
デフォルトの名無しさん [sage] 2018/11/15(木) 07:14:44.92:dYhTSjHD

C=10を書き忘れた上に既に同じ指摘が書かれてた
499 [] 2018/11/15(木) 09:09:38.39:RDhHOc3n
>>501
なるほど。じゃあダメだな。
497 [sage] 2018/11/15(木) 18:39:12.67:cWkAhR+7
ruby
ttp://https://ideone.com/WmHR8h
・ほんのりリファクタ
114 [] 2018/11/15(木) 23:46:11.08:lNkjj0jr

Haskell

問題と同じ答えになったんだが、どうやら三番目は6個になるっぽい?
じゃあダメか。。。

main = print $ map mapbox (slist list)

slist xs = map (\(x,y) -> (x, qsort y)) xs

mapbox (x,y) = (x,box 0 x [] y)

box n _ [] [] = n
box n _ ns [] = n + 1
box n c ns [x] | c >= sum (x:ns) = n + 1
box n c ns [x] | c < sum (x:ns) = n + 2
box n c ns (x:xs) | c == sum (x:ns) = box (n + 1) c [] xs
box n c ns (x:xs) | c > sum (x:ns) = box n c (x:ns) xs
box n c ns (x:xs) | c < sum (x:ns) && c > sum ((minimum xs):ns) =
box n c ((last xs):ns) (x:(init xs))
box n c ns (x:xs) | c < sum (x:ns) && c < sum ((minimum xs):ns) =
box (n + 1) c [] (x:xs)
box n c ns (x:xs) | c < sum (x:ns) && c == sum ((minimum xs):ns) =
box (n + 1) c [] (x:(init xs))
114 [] 2018/11/15(木) 23:46:25.95:lNkjj0jr
qsort [] = []
qsort (x:xs) = large ++ [x] ++ small
where
small = qsort [a|a <- xs,a <= x]
large = qsort [a|a <- xs,a > x]

list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]

出力

[(30,3),(120,4),(120,7)]
デフォルトの名無しさん [sage] 2018/11/15(木) 23:52:24.73:Q7kJgHrD

python 3

def wall2(height, width):
__maps = {x : [] for x in range(height)}
__counts = {w: [x for x in range(height) for y in range(width) if x + y == w] for w in range(height + width)}
__num = iter(range(1, 1 + height * width))
__for k,v in counts.items():
____for vv in sorted(v, reverse= not k % 2):maps[vv].append(next(num))
__for v in range(height):
____print(" ".join(map(lambda x: "%0{}d".format(len(str(width * height))) % x, maps[v])))
__else: print()

for x in [[3,3],[4,2],[3,5],[1,8]]: wall(*x)

やまほどrange()を書かないといけない宿業
114 [] 2018/11/16(金) 08:32:20.01:00yShIqx

結果がはみ出てた。。。

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

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

渦巻きスキャンも短い
ttp://http://ozy4dm.hateblo.jp/entry/2018/04/26/145518
デフォルトの名無しさん [sage] 2018/11/16(金) 11:04:51.39:qaNu/as0

89 23| 67 45| 78 41| 60 21 33| 64 50| 61 58

全探索ではないけど
33 61 58 41 50 21 60 64 23 45 67 78 89
これを全ての順列作って前から順に120以内ぎりぎりのところで区切っていく
ってやり方で出てくる

このやり方もこれでは出来たけど最適解が必ず見つかるか分からない
114 [] 2018/11/16(金) 11:42:51.07:00yShIqx

ありがとう。

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

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

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

じゃないと私じゃお手上げ\(^o^)/
デフォルトの名無しさん [sage] 2018/11/16(金) 11:57:38.57:qaNu/as0
入るとか入らないとかじゃなくてこの並びが出てきたら左から順に区切って行くだけだよ
89 23 67 45 78 41 60 21 33 64 50 61 58
デフォルトの名無しさん [sage] 2018/11/16(金) 12:22:55.60:tOyusnlA

510のやり方で最小値は求まるのでコードが間違ってる
114 [] 2018/11/16(金) 12:23:45.77:00yShIqx
おおう。。。勘違い。
順列の意味勘違いしてた。
数学の順列か。分かった。
やってみる。
ありがとう。
デフォルトの名無しさん [sage] 2018/11/16(金) 12:25:57.98:tOyusnlA

必ず見つかる
最小になるパターンの内各箱の中を逆順にソートした数列を考えてみると自明
114 [] 2018/11/16(金) 15:20:04.95:00yShIqx
多分これで出るはずだけど、家のPCが低スペックでメモリ不足で止まる。。。(ideoneでも止まる辺り、現実的じゃない)
(小さいリストでは確かめて見たので、動いてるっぽい?)

import Data.List

main = print $ map (\(x,ys)->(x, bmin x ys)) list

bmin x xs = minimum $ map (\lst -> box 0 x [] lst)
$ permutations xs

box c x [] [] = c
box c x ns [] = c + 1
box c x ns (y:ys) | x < sum (y:ns) = box (c + 1) x [] (y:ys)
box c x ns (y:ys) | x >= sum (y:ns) = box c x (y:ns) ys

list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]

せっかく さんに順列と言うヒント貰っておいて活かしきれてない。。。ごめん。
114 [] 2018/11/16(金) 15:22:31.31:00yShIqx
さんに折角、順列って言うヒント貰っておいて活かせなかった。
ごめん。
デフォルトの名無しさん [sage] 2018/11/16(金) 15:27:37.42:7Qu0EE2P
箱に入れた量で大小関係を付けると6個で36通り
デフォルトの名無しさん [sage] 2018/11/16(金) 15:40:46.44:i0pW9pnK

ttp://https://ideone.com/gsuOUp

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

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

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

余談
これは『ビンパッキング問題』そのもの
でかいNに対しては、ググればもっといい近似値の求め方がある。
デフォルトの名無しさん [sage] 2018/11/16(金) 17:13:07.29:36ZZe95D
ビンパッキングって焼きなまし法(近傍が分からない)のとビームサーチ、どっちが効率良いだろうか
デフォルトの名無しさん [sage] 2018/11/16(金) 17:37:36.91:t5p43h9A
お題:nの階乗の末尾の連続した0の個数を求める。(過去スレから)
デフォルトの名無しさん [sage] 2018/11/16(金) 17:46:29.02:TvsPH/qp
Ruby
f = ->n{s = 0; while 0 < n /= 5; s += n; end; s}

[0, 1, 2, 3, 4, 5, 10, 100, 1000000,
10000000000000000].each{|e| puts '%d => %d' % [e, f[e]]}
# =>
0 => 0
1 => 0
2 => 0
3 => 0
4 => 0
5 => 1
10 => 2
100 => 24
1000000 => 249998
10000000000000000 => 2499999999999996
デフォルトの名無しさん [sage] 2018/11/16(金) 19:19:00.00:KTZidSV2
お題
N段の三角形ピラミッドの一筆書きを構成せよ

例えば、2段の三角形ピラミッドは以下のような図形である
 △
△ △

頂点の番号は上から順番に
1
2 3
4 5 6
……
と与えられる。

(入出力例)
N=1
=> 3 2 1 3

N=2
=> 1 2 4 5 2 3 5 6 3 1
=> 1 3 5 6 3 2 5 4 2 1 (解は複数あるが、そのうちの一つを出力すればよい)
デフォルトの名無しさん [sage] 2018/11/16(金) 20:05:31.22:JjlNk60X
Ruby
def hitofude(n)
  return [1] if n == 0
  x, y = n*(n + 1)/2, (n + 1)*(n + 2)/2
  [
    y,
    *hitofude(n - 1),
    *(1...n).flat_map{|i| [y - i, x - i]},
    *(x + 1..y),
  ]
end

[2, 3, 4].each{|i| p hitofude(i)}
# =>
[6, 3, 1, 2, 3, 5, 2, 4, 5, 6]
[10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10]
[15, 10, 6, 3, 1, 2, 3, 5, 2, 4, 5, 6, 9, 5, 8, 4, 7, 8, 9, 10, 14, 9, 13, 8, 12, 7, 11, 12, 13, 14, 15]
デフォルトの名無しさん [sage] 2018/11/16(金) 21:39:18.95:0oMzWKAu
C
ttp://https://ideone.com/i2ui3M
デフォルトの名無しさん [] 2018/11/17(土) 09:45:00.71:u+BaxmkL

やった。
順列使わないで三番目が6個になった!

Haskell

main = mapM_ print $ map mapbox (slist list)

slist xs = map (\(x,y) -> (x, qsort y)) xs

mapbox (x,y) = (x,length (box x [] [] y))

box _ [] [] [] = [[]]
box _ ns [] [] = [ns]
box c ns ys [x] | c >= sum (x:ns) = box c (x:ns) [] (reverse ys)
box c ns ys [x] | c < sum (x:ns) = [ns] ++ box c [] [] (reverse (x:ys))
box c ns ys (x:xs) | c >= sum (x:ns) = box c (x:ns) ys xs
box c ns ys (x:xs) | c < sum (x:ns) && c >= sum ((last xs):ns) = box c ns (x:ys) xs
box c ns ys (x:xs) | c < sum (x:ns) && c < sum ((last xs):ns) = [ns] ++ box c [] [] (reverse ys ++ (x:xs))


qsort [] = []
qsort (x:xs) = large ++ [x] ++ small
where
small = qsort [a|a <- xs,a <= x]
large = qsort [a|a <- xs,a > x]

list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]
デフォルトの名無しさん [] 2018/11/17(土) 09:45:32.76:u+BaxmkL
qsort (x:xs) = large ++ [x] ++ small
where
small = qsort [a|a <- xs,a <= x]
large = qsort [a|a <- xs,a > x]

list = [(30,[8,5,10,6,4,5,8,5,9,6,9]),
(120,[33,61,58,41,50,21,60,64]),
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]
デフォルトの名無しさん [] 2018/11/17(土) 09:46:31.74:u+BaxmkL
(120,[33,61,58,41,50,21,60,64,23,45,67,78,89])]
◆QZaw55cn4c [sage] 2018/11/17(土) 11:31:38.44:ByrEztlA

やっと理解しました…すべての xor 演算を利用しているわけではないのですね…
デフォルトの名無しさん [] 2018/11/17(土) 11:41:54.02:u+BaxmkL

Haskell

main = mapM_ print $ zip list $ map zlen list

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

list = [0,1,2,3,4,5,10,100,1000,10000]

Out

(0,0)
(1,0)
(2,0)
(3,0)
(4,0)
(5,1)
(10,2)
(100,30)
(1000,472)
(10000,5803)
デフォルトの名無しさん [sage] 2018/11/17(土) 12:12:32.80:PHz1iip2

よーわからんが末尾じゃなくてすべての0を数えてない?
デフォルトの名無しさん [] 2018/11/17(土) 12:27:52.98:z9owpr8+
ぺちぷ
<?php
function solve(int $n):int{
$a=0;
for($i=5;$i<=$n;$i*=5)$a+=intdiv($n,$i);
return $a;
}

foreach([1,5,10,1e2,1e6,1e16] as $i)printf("%d -> %d\n",$i,solve($i));
?>

1 -> 0
5 -> 1
10 -> 2
100 -> 24
1000000 -> 249998
10000000000000000 -> 2499999999999996
デフォルトの名無しさん [] 2018/11/17(土) 12:46:05.88:u+BaxmkL

コリャうっかりw

zlen 差替え。

zlen x = (length.(takeWhile (== '0')).reverse.show.product) [1..x]
デフォルトの名無しさん [] 2018/11/17(土) 12:48:16.01:u+BaxmkL
実行結果

(0,0)
(1,0)
(2,0)
(3,0)
(4,0)
(5,1)
(10,2)
(100,24)
(1000,249)
(10000,2499)
デフォルトの名無しさん [sage] 2018/11/17(土) 15:08:29.22:thhERN1M
Perl5 その1:単純にloop
for $i (0,1,2,3,4,5,10,100,1000,10000,1000000) {
($s, $n) = ($i, 0);
while ($s) {
$s = int $s / 5;
$n += $s;
}
print "$i $n\n";
}
Perl5 その2: lambdaのtail recursion
use feature current_sub;
for $i (0,1,2,3,4,5,10,100,1000,10000,1000000) {
$n = sub {my $j = shift;
$j ? do {my $s = int $j / 5;
$s + __SUB__->($s)} : 0;
}->($i);
print "$i $n\n";
}
いずれも実行結果は
$ perl 12_522.pl
0 0
1 0
2 0
3 0
4 0
5 1
10 2
100 24
1000 249
10000 2499
1000000 249998
= i/5のreductionよりもエレガントな解法をしばらく考えていたけど一旦断念して投稿します
デフォルトの名無しさん [] 2018/11/17(土) 17:48:20.07:corCuJCM
お題
月(01から12)、日(01から31)、時(00から59)、分(00から59)、秒(00から59)の10桁の日付データで
全部の桁が異なる場合を全て求める。だ
デフォルトの名無しさん [] 2018/11/17(土) 17:53:02.90:corCuJCM
すいません。最後の文字はゴミです無視してください
デフォルトの名無しさん [sage] 2018/11/17(土) 18:44:23.27:eb0sqdRj

時って00から23じゃないの?
デフォルトの名無しさん [] 2018/11/17(土) 19:03:48.66:corCuJCM

その通りです。すいません。
時(00から23)に訂正します。
デフォルトの名無しさん [sage] 2018/11/17(土) 19:42:56.43:qglse9qW
Ruby
date = (3..9).flat_map do |mo|
  [*1..2].permutation.flat_map do |dd, dh|
    ([*3..5] - [mo]).permutation(2).flat_map do |dm, ds|
      ([*3..9] - [mo, dm, ds]).permutation.map do |d, h, m, s|
        [0, mo, dd, d, dh, h, dm, m, ds, s] if dh == 1 || h < 4
      end
    end
  end
end.compact

p date.size
# => 768
puts date.map(&:join)
# => 0326174859
0326174958
0326184759
0326184957
0326194758
0326194857
0327164859
0327164958
0327184659
0327184956
... 略
デフォルトの名無しさん [sage] 2018/11/17(土) 20:18:24.56:e9k3MEr9
東西ローマ帝国勃興期か
胸が熱くなるな
デフォルトの名無しさん [] 2018/11/17(土) 20:30:15.26:z9owpr8+

ルジャンドルの定理がエレガントでは無いと申すか
デフォルトの名無しさん [] 2018/11/17(土) 20:54:52.23:u+BaxmkL

Haskell

main = ((mapM_ putStrLn).only.(zip (ccheck date10))) date10

n2 n | n < 10 = '0':show n
n2 n = show n

only = (map (\(_, d) -> d)).filter (\(x,_) -> x == False)

ccheck = map ((elem False).count)

count xs = map (\c -> ((<2).length.(filter (== c))) xs) "1234567890"


date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec]
| month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]]

パターン数字や最初付近が合ってるかはRubyの人()ので確認したので多分合ってる。
デフォルトの名無しさん [] 2018/11/17(土) 20:56:09.09:u+BaxmkL
ccheck = map ((elem False).count)

count xs = map (\c -> ((<2).length.(filter (== c))) xs) "1234567890"


date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec]
| month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]]


の人ので答え合わせしたので、多分合ってる。
デフォルトの名無しさん [] 2018/11/17(土) 20:57:39.57:u+BaxmkL
date10 = [concat [n2 month, "/", n2 day, " ", n2 hour, ":", n2 minut, ":", n2 sec]
| month <- [0..12], day <- [0..31], hour <- [0..24], minut <- [0..60], sec <- [0..60]]


の結果で答え合わせ済み。
デフォルトの名無しさん [] 2018/11/17(土) 20:58:20.76:u+BaxmkL
の結果で答え合わせ済み。
デフォルトの名無しさん [sage] 2018/11/17(土) 21:15:29.25:qglse9qW
の全結果
過不足がないことは確認済み
ttp://https://ideone.com/sNgmqP
デフォルトの名無しさん [sage] 2018/11/17(土) 22:37:13.60:BeWwS75G
Perl5
sub f {grep{!/(.)\1/} map{sprintf "%02d", $_} @_}
sub g {map{$_=>1} split'', shift}
for $M (1..10,12) {
($S) = f($M);
$D = $M == 2 ? 28 : ($M =~ /(4|6|9)/ ? 30 : 31);
for $d (f 1..$D) {
%t = g "$S$d";
next if 4 != keys %t;
for $h (f 1..23) {
%t = g "$S$d$h";
next if 6 != keys %t;
for $m (f 0..59) {
%t = map{$_=>1} split'', "$S$d$h$m";
next if 8 != keys %t;
for $s (f 0..59) {
%t = map{$_=>1} split'', "$S$d$h$m$s";
next if 10 != keys %t;
print "$S$d$h$m$s\n";
} } } } }

実行結果
$ perl 12_537.pl
0326174859
0326174958
0326175849
... 中略
0928175436
0928175634
0928175643
計768個
デフォルトの名無しさん [] 2018/11/17(土) 23:10:25.25:u+BaxmkL


03/26 17:48:59

みたいに書式化してるんだけど、RubyもPerlも数字だけなのな。。。
その方が速いのは分かるけど。
デフォルトの名無しさん [sage] 2018/11/17(土) 23:53:27.88:BeWwS75G

数学的にルジャンドルの定理と同じ原理に帰結する解法であっても
もっとエレガントなコードアーキテクチャ、たとえば桁の三角形の5と10を
再帰的に渡り歩いてshiftしながら足しこんでいくようなすごくシンプルで、
もっと短いコード実現を探してたという意味です。

つか5とか10とか100とか通過するたびに0が一桁二桁増えることに
パターンがあるのに気がついてうまく使おうとしたけど、
それがルジャンドルの定理のひとつだとは知りゃせんでした。
デフォルトの名無しさん [sage] 2018/11/18(日) 00:08:39.78:2kF9kdFV
25 125が出てこない辺り理屈わかってなさそう
デフォルトの名無しさん [sage] 2018/11/18(日) 00:17:41.21:XHHQeobW

5は*5ね
50+は…
デフォルトの名無しさん [] 2018/11/18(日) 05:42:08.97:HhgIFMcS
分かっちゃ居たけど、聞いたこともない定理が出る辺り高卒にはエレガントな回答は無理ぽ。。。
デフォルトの名無しさん [sage] 2018/11/18(日) 10:00:29.21:5NL96rQC

codeIQで類似の問題を解いた当時は知らなかったけど、
普通に行き着いたけどな
デフォルトの名無しさん [sage] 2018/11/18(日) 10:39:30.27:Q5hV0WNe
ruby
ttp://https://ideone.com/dCnEfd
デフォルトの名無しさん [] 2018/11/18(日) 11:15:29.83:HhgIFMcS

せっかくルジャンドルの定理を知ったので作り直してみた。
Haskell

main = ((mapM_ print).(zip list).(map (zlen 0 1))) list

zlen ans x n | 5 ^ x > n = ans
zlen ans x n = zlen (n `div` (5 ^ x) + ans) (x + 1) n

list = [0,1,2,3,4,5,10,100,1000,10000,12000,100000000]
デフォルトの名無しさん [sage] 2018/11/18(日) 13:05:15.26:oKOqkAfz
お題:同調圧力

要素0,1からなる3次以上の正方行列がある。
縦、横、対角線に0が1個だと1に変化する。この変化が繰り返される。
最後にすべての要素が1になる最小数の1の数と初期配置を求めよ。
デフォルトの名無しさん [sage] 2018/11/18(日) 13:38:56.07:XHHQeobW

定理名を知らなくても考えれば見出せるよ
デフォルトの名無しさん [sage] 2018/11/18(日) 14:07:39.31:/U8hetN/

ttp://examist.jp/mathematics/math-a/integer/kaijyou-soinsu/
ttps://www.youtube.com/watch?v=pWV0mlibNGQ

高校数学の範囲内だろ
「高卒」なる言い訳が通用するほど高校数学は甘くない
デフォルトの名無しさん [sage] 2018/11/18(日) 14:25:30.20:qNfVdQsW
まあ入試でよく見る問題だよね
デフォルトの名無しさん [] 2018/11/18(日) 14:54:31.18:HhgIFMcS




そうだね。
高卒だからは言い訳だ。
そう言うのを思いつけない頭の悪さでプログラマーに成れなかった。
それだけだな。
デフォルトの名無しさん [sage] 2018/11/18(日) 15:01:13.02:XHHQeobW

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

ありがとう。
でももう、プログラマー目指す年齢じゃないから^^;

iPadのHaskell(Raskell)で力付くでも12000!までは解ける辺り、
効率悪くてもとりあえず動く物を作れるようになったのは良い時代になったと思う。
◆QZaw55cn4c [sage] 2018/11/18(日) 19:54:03.12:KS5/UdBT

その動画、素因数の5を数えればよい、と言い切っちゃっているが、2は数えなくてもいいのか?あるいは 2 を数えなくてもいい理由を述べていないよね
それに、どうして素因数分解は必ずひととおりになるのですか?二通りになるかもしれないのでは?
デフォルトの名無しさん [sage] 2018/11/18(日) 19:58:30.97:/tSlZOJ0
そうだね
おまけに足し算がアーベル群を成していないかもしれないから和と自然数の定義から確認しないと駄目だね
デフォルトの名無しさん [sage] 2018/11/18(日) 21:11:02.75:cU5Dmtcu
今、((2n-1)2^m, n5^m)をペアで考えるよ
そうすると、1≦n, mで常に(2n-1)2^m≦n2^(m+1)≦n4^m≦n5^mになる
で、ということはx!の中にある5の倍数が含まれるなら、対応した2の倍数もまた含まれていて素因数の個数が同じ
なので素因数は5だけ数えれば良い
素因数分解が一通りなのは自明なので定義からやり直せ
デフォルトの名無しさん [sage] 2018/11/18(日) 21:18:15.05:HyP7YfXU
2以上のnに対しn!=(2^p)*(5^q)*N(Nと2と5は互いに素)とする非負整数p,q,Nがただ一組存在して
p>qであることはほとんど自明だが証明しろと言われると…
デフォルトの名無しさん [] 2018/11/18(日) 21:24:02.32:HhgIFMcS


ttp://https://mathtrain.jp/legendretheorem

末尾の 0の数は,10で何回割り切れるか,すなわち 2で割れる回数と 5で割れる回数の少ない方である。
(直感的に考えて 5 で割れる回数のほうが少ないので 5で割れる回数だけ考えればよいが練習のため,)
デフォルトの名無しさん [sage] 2018/11/18(日) 21:50:28.21:tNgGKwOg
普通に自明
◆QZaw55cn4c [sage] 2018/11/18(日) 21:56:44.59:KS5/UdBT

>素因数分解が一通りなのは自明
自明ではないと思います…「素数の定義は 1 と自身以外の約数を持たない」であって「素数の積が一通り」ではないですから

>そうすると、1≦n, mで常に(2n-1)2^m≦5^mになる
OKです

>で、ということはx!の中にある5の倍数が含まれるなら、対応した2の倍数もまた含まれていて素因数の個数が同じ
ここは飛躍しているのでは?
n・5^m →(2n-1)・2^m
と対応づけるとき n・5^m の形の数が決して (2n-1)・2^m の形にならないのであれば一対一の対応がとれますが、n・5^m の形であってかつ (2n-1)・2^m の形である整数が存在する場合は一対一の対応にならない
厳密に一対一の対応にならないのなら、因数 2 の個数と因数 5 の個数の大小についてなにもいえないのでは?
◆QZaw55cn4c [sage] 2018/11/18(日) 21:58:55.74:KS5/UdBT

>直感的に考えて 5 で割れる回数のほうが少ないので
あくまでも「直感的に」ですよね
厳密にそういえますか?
デフォルトの名無しさん [sage] 2018/11/18(日) 21:59:59.80:tNgGKwOg
ルジャンドルの定理を考えれば普通に自明
デフォルトの名無しさん [] 2018/11/18(日) 22:33:22.36:ryC6c2pW

証明はされているしググれば出てくる
内容についてはこのスレの趣旨的にここで深く論じる事ではないと思う
デフォルトの名無しさん [sage] 2018/11/18(日) 22:34:24.44:I7k3lQnf
◆QZaw55cn4c は荒らしなのでスルーでお願いします
デフォルトの名無しさん [sage] 2018/11/18(日) 22:42:22.16:qz83zcM7
お題
UTF-8のバイト列が与えられるので、Unicodeのコードポイントを求めよ

6F 64 61 69
=> U+006F U+0064 U+0061 U+0069

E3 81 8A E9 A1 8C
=> U+304A U+984C

C2 A9 F0 9F 8D 94 E9 A6 99 41
=> U+00A9 U+1F354 U+9999 U+0041
デフォルトの名無しさん [sage] 2018/11/18(日) 23:39:58.87:N6zzFXD1
◆QZaw55cn4c は、このスレでも荒らしてるのか。
◆QZaw55cn4c [sage] 2018/11/18(日) 23:51:49.66:KS5/UdBT

>内容についてはこのスレの趣旨的にここで深く論じる事ではない
一理あるとは思います
デフォルトの名無しさん [sage] 2018/11/18(日) 23:58:08.89:N6zzFXD1
何かと思ったら、自然数の素因数分解の一意性に文句を付けているのかよ。
デフォルトの名無しさん [sage] 2018/11/19(月) 00:12:50.43:En0/bEno
n・5^m=(2n-1)・2^mなら、nは2の累乗かつ2n-1は5の累乗(2と5は互いに素なので)
でも、2n-1が5の累乗だとするとn=3,13,63,313…と奇数なので(f(1)=3, f(x)=f(x-1)+2・5^(x-1)で導出)nが2の累乗であることに矛盾する
素因数分解が一意なのはwikipediaにでも載ってる
というか自分である程度考えてよ……粗探ししてないでさ
デフォルトの名無しさん [sage] 2018/11/19(月) 00:15:20.48:DnlmRpTS
Java
ttp://https://ideone.com/uuHw3q
◆QZaw55cn4c [sage] 2018/11/19(月) 00:25:31.38:MufxDZB0

> n・5^m=(2n-1)・2^m
そう置くのではなく
a・5^b = (2c-1)・2^d
と置くべきなのでは?

たとえば m = 1 のとき n の小さいものから順に
1・5 → 1・2
2・5 → 3・2
3・5 → 5・2…@
ここ@で 5・2 はすでに数え上げているので、一対一対応になっていないと思います
一対一対応にならない以上、 の推論は飛躍しているのではないでしょうか
繰り返しますが


「n・5^m の形であってかつ (2n-1)・2^m の形である整数が存在する場合は一対一の対応にならない
厳密に一対一の対応にならないのなら、因数 2 の個数と因数 5 の個数の大小についてなにもいえないのでは?」
です
デフォルトの名無しさん [sage] 2018/11/19(月) 00:36:52.56:En0/bEno
ん、あれ確かにおかしいな
即レスはミスの源だな、再検討してくる
デフォルトの名無しさん [sage] 2018/11/19(月) 01:06:40.64:4D1JIT10

大変勉強になりました。

const getCP = s => [...new TextDecoder('utf-8').decode(Uint8Array.from(s.split` `.map(x => parseInt(x, 16))))].map(u => 'U+' + u.codePointAt().toString(16).toUpperCase().padStart(4, 0)).join` `

getCP('6F 64 61 69')
=> "U+006F U+0064 U+0061 U+0069"
getCP('E3 81 8A E9 A1 8C')
=> "U+304A U+984C"
getCP('C2 A9 F0 9F 8D 94 E9 A6 99 41')
=> "U+00A9 U+1F354 U+9999 U+0041"
デフォルトの名無しさん [sage] 2018/11/19(月) 01:10:37.57:rdQ6rffg
n/2>=n/5
n/2^2>=n/5^2
以下略

5の方が多くなることはないわな
デフォルトの名無しさん [sage] 2018/11/19(月) 01:11:16.13:4D1JIT10
あっ、はJavascript(整形にpadStart使ったのでES2017)です。
デフォルトの名無しさん [] 2018/11/19(月) 03:32:52.09:hjbRrJKx

Perl5
変換は Perl 任せ。
ttp://https://paiza.io/projects/bErYwPOrGUtJk52KIHj-yw
デフォルトの名無しさん [] 2018/11/19(月) 10:25:48.15:X6/A5UND
問題と言うより、単純な興味なんだけど。
Cでこんなコード書いて
(Hello World!!が横に流れ続けて下でマークがクルクル回る)

ttp://https://ideone.com/ZaZSaa

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

ttp://https://ideone.com/ui16nc

ハイブリッドな言語増えて来たので、他の言語だとどう書くのかなって。
出来れば破壊的なのと、関数型っぽく非破壊的なのと見てみたい。
(ミュータブル版とイミュータブル版)
デフォルトの名無しさん [sage] 2018/11/19(月) 10:29:45.48:/4Aoxd3M

何をするのか網ちょい詳しく
デフォルトの名無しさん [] 2018/11/19(月) 11:00:22.26:X6/A5UND

精一杯考えて説明したつもりなので、Cのコードコンパイルして実際にコマンドで動かしてもらえれば。

それと同じ動きになるコードを書いて欲しいと言うことです。
(出来れば初期化以外の変数代入有りと無しで)
デフォルトの名無しさん [sage] 2018/11/19(月) 23:48:36.76:S7M28HrM
rust
ttp://https://ideone.com/Nr1HC5

ruby
ttp://https://ideone.com/KFF0F8
デフォルトの名無しさん [sage] 2018/11/20(火) 00:53:04.42:yKairBEQ

python 3
for x in ["6F 64 61 69","E3 81 8A E9 A1 8C","C2 A9 F0 9F 8D 94 E9 A6 99 41"]:
__print(" ".join(['U+{:04X}'.format(ord(y)) for y in bytes.fromhex(x).decode("utf-8")]))
->
U+006F U+0064 U+0061 U+0069
U+304A U+984C
U+00A9 U+1F354 U+9999 U+0041
デフォルトの名無しさん [sage] 2018/11/20(火) 01:11:13.89:avg9qTbR

utf-8がデフォルトだから引数要らないよ
587 [] 2018/11/20(火) 02:29:27.79:lQrB+xRm

C
全て自分で変換
ttp://https://paiza.io/projects/zZQoCluzBMnRmfSixWQAiA
デフォルトの名無しさん [sage] 2018/11/20(火) 02:34:35.37:yKairBEQ

python 3
ttp://https://ideone.com/b6Gxn3
デフォルトの名無しさん [sage] 2018/11/20(火) 11:19:51.35:XC6mINx9
Ruby 仕様をそのまま。ただし冗長性のチェックだけはしていない

def divide_prefix(byte)
  raise 'invalid byte' if byte & 0xF8 == 0xF8
  prefix_len = (1..8).find{|i| (byte >> 8 - i) & 1 == 0}
  prefix = (1 << prefix_len - 1) - 1 << 1
  {prefix: prefix, body: byte - (prefix << 8 - prefix_len)}
end

def utf8_codepoints(bytes)
  ary = bytes.map{|e| divide_prefix(e)}
  leading_bytes = ary.select{|dc| dc[:prefix] != 0x02}
  leading_bytes.map do |lb|
    utf8_char = ary.shift(lb[:prefix] == 0 ? 1 : lb[:prefix].bit_length - 1)
    raise 'invalid sequence' if utf8_char[1..-1]&.any?{|dc| dc[:prefix] != 0x02}
    utf8_char.reverse_each.with_index.map{|dc, i| dc[:body] << 6 * i}.sum
  end
end

[
  '6F 64 61 69',
  'E3 81 8A E9 A1 8C',
  'C2 A9 F0 9F 8D 94 E9 A6 99 41'
].each{|str| puts utf8_codepoints(str.split.map(&:hex)).map{|e| 'U+%04X' % e}.join(' ')}
# =>
U+006F U+0064 U+0061 U+0069
U+304A U+984C
U+00A9 U+1F354 U+9999 U+0041
デフォルトの名無しさん [] 2018/11/20(火) 13:23:53.49:FaN+D89v
Ruby ターミナル上で10秒間 <marquee>Hello, world</marquee> & 棒がぐるぐる的な感じ

duration = 10
wait = 0.1
str = 'Hello, World!'
len = str.size
bar = %w[- / | \\ ]
clear_lines = -> n {puts "\e[#{n}\e[#{n}A"}

# 非破壊的
str2 = 'Hello, World!' * 2
(duration / wait).round.times{|i|puts str2[i % len, len], bar[i % 4]; sleep(wait); clear_lines[2]}

# 破壊的
hello_ary = 'Hello, World!'.split('')
(duration / wait).round.times{puts hello_ary.rotate!.join, bar.rotate!.first; sleep(wait); clear_lines[2]}
デフォルトの名無しさん [sage] 2018/11/20(火) 13:50:30.38:+huVy/La
訂正

duration = 10
wait = 0.1
str = 'Hello, World!'
bar = %w[- / | \\ ]
clear_lines = -> n {puts "\e[#{n}\e[#{n}A"}

# 破壊的
str_ary = str.split('')
bar_ary = [*bar]
(1..duration / wait).each{puts str_ary.rotate!.join, bar_ary.rotate!.first; sleep(wait); clear_lines[2]}

# 非破壊的
str2 = str * 2
(1..duration / wait).each{|i|puts str2[i % sitr.size, str.size], bar[i % 4]; sleep(wait); clear_lines[2]}
デフォルトの名無しさん [] 2018/11/20(火) 23:12:15.60:Vm2a6rBd
世界一気持ち良いフェラチオのアルゴリズムを作れ
デフォルトの名無しさん [sage] 2018/11/21(水) 05:38:04.65:yscr9wE/

Ruby で実行すると、Timeout になりました!

# 10桁の文字列で、重複した文字が無いものは、いくつあるか?

month = ("01".."12").to_a
day = ("01".."31").to_a
hour = ("00".."23").to_a
min = sec = ("00".."59").to_a

# uniq! は変化が無ければ、nil
p month.product( day, hour, min, sec )
.reject { | mon, d, h, min, s | ( mon + d + h + min + s ).chars.uniq! }
.length
デフォルトの名無しさん [sage] 2018/11/21(水) 08:13:38.75:KQDfl3zy

.reject { | mon, d, h, min, s | ( mon + d + h + min + s ).chars.uniq! }が無駄過ぎ
.reject(&:uniq!)で良い。それでも良いコードではない
あとこれだと2月31日とかが含まれてしまう可能性考慮してないよね(実際には含まれないが)
デフォルトの名無しさん [sage] 2018/11/21(水) 13:17:27.94:r/9FyEhs
をちょっと変更。月を分ける必要がなかった
date = [1, 2].permutation.flat_map do |dd, dh|
  [*3..5].permutation(2).flat_map do |dm, ds|
    ([*3..9] - [dm, ds]).permutation.map do |mo, d, h, m, s|
      [0, mo, dd, d, dh, h, dm, m, ds, s] if dh == 1 || h == 3
    end
  end
end.compact.sort
デフォルトの名無しさん [] 2018/11/21(水) 13:59:24.73:89fYavxU
月日時分秒で文字列で並べる前に11月とか11日とか22日とか必ず各桁が同じ値になるやつ最初から省けば無駄がなくなって少し速くならんか?
デフォルトの名無しさん [] 2018/11/21(水) 17:57:29.48:89fYavxU

Kotlin
ttp://https://paiza.io/projects/0NqpaSgw6xT_U6SsNmDepA

色々試した結果、やはり最初に必要な文字列全て作ってしまうのが一番速かった。
デフォルトの名無しさん [sage] 2018/11/21(水) 19:06:42.18:7Tiab2M6
文字列を正規表現で判定するのは遅いんじゃね?
デフォルトの名無しさん [sage] 2018/11/21(水) 19:31:36.89:fvygYhm9
12*31*60*60*60=80,352,000通りの桁が異なるか判定より、10桁並び替え10!=3,628,800通りが日付になってるか判定の方が速そう
デフォルトの名無しさん [sage] 2018/11/21(水) 19:43:32.60:fvygYhm9

計算ミスった、12*31*24*60*60=32,140,800か
お詫びにコード、C++
ttp://https://ideone.com/8iQ9OX
デフォルトの名無しさん [sage] 2018/11/21(水) 19:50:15.56:XrCNlm4w
最初の4桁は高々365パターンしかないからその各組について残り6桁720通り検討すれば262,800通りで済む
デフォルトの名無しさん [sage] 2018/11/21(水) 19:55:14.22:XrCNlm4w
ちなみに最初の4桁で数字に重複がないのは130通りしかないからここできちんと処理すれば93,600通りで済む
デフォルトの名無しさん [sage] 2018/11/21(水) 20:17:28.45:Pa+SHuBo
普通にやれば768通りで済む
時間が 0x/1d 23:Mm:Ss なら
{M, S} = {4, 5} で残りは4つの数字の任意の順でOK
2 * 4! 通り

時間が 0X/2d 1h:Mm:Ss なら
M, S は異なる{3, 4, 5}の元で残りは5つの数字の任意の順でOK
3P2 * 5! 通り

全部で (2 + 3P2 * 5) * 4! = 768 通り
デフォルトの名無しさん [] 2018/11/21(水) 20:32:17.09:89fYavxU

そうかも。
やっぱただの二重ループで調べるのが一番速いかな?

最初はSetに一文字づつ入れて同じのが既にあったらっていう判定してたんだけどね、正規表現なら一発で判定できると気づいてそちらにした。
まあでも正規表現だから中で複雑な動きになってるかも知れないな。
デフォルトの名無しさん [] 2018/11/21(水) 20:41:48.33:89fYavxU
良く考えたら各桁が数字しかないから10ビットのビットフラグ立てるかBoolenArrayで10要素あれば重複調べられるな。後で変えよう。
デフォルトの名無しさん [sage] 2018/11/21(水) 21:02:48.05:fvygYhm9
お題
以下の操作を好きなだけ行う時、0をXにするまでに必要な最小コストを求めよ
・コスト1で値を1増減させる
・コストn+Yで値をn倍する
XとYは与えられ、0以上の整数であることが保証される
nは自然数の範囲で任意に決めて良い
例(X, Y)
1 3
20 2
63 2
出力
3
11
17
デフォルトの名無しさん [sage] 2018/11/21(水) 21:03:37.61:Gj+ctZjI
お題
N個の正整数を並べ替えたあと結合してできる整数の最小値を求めよ

3 2 1
=> 123

1 2 21
=> 1212

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
=> 10111121314151623456789
デフォルトの名無しさん [sage] 2018/11/21(水) 21:13:22.72:fcujQIsM

一年って365日?372日?
デフォルトの名無しさん [sage] 2018/11/21(水) 21:47:53.81:DBPerFhf
 Perl5
use feature say;
for (<DATA>) {
s/\s*//g;
$z = tr/0//;
@a = grep{$_} sort split '';
$a = shift @a;
say join '',($a, (0)x$z, @a);
}
__DATA__
3 2 1
1 2 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

execution
$ perl 12_614.pl
123
1122
10111111112233445566789
デフォルトの名無しさん [sage] 2018/11/21(水) 21:49:54.93:DBPerFhf

間違ってる。ゴメン却下
デフォルトの名無しさん [sage] 2018/11/21(水) 22:06:23.31:DBPerFhf
Perl5
use List::Util max;
use feature say;
for (<DATA>) {
@a = split;
$n = max map{length} @a;
say $n;
$b = join '', sort map{$_.'a'x($n-length)} @a;
$b =~ s/a//g;
say $b;
}
__DATA__
3 2 1
1 2 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

実行
$ perl 12_614.pl
123
1212
10111213141516123456789
デフォルトの名無しさん [sage] 2018/11/21(水) 22:08:43.18:DBPerFhf

途中の
say $n;
は不要なdebug write、
削除して下記と差し替え

use List::Util max;
use feature say;
for (<DATA>) {
@a = split;
$n = max map{length} @a;
$b = join '', sort map{$_.'a'x($n-length)} @a;
$b =~ s/a//g;
say $b;
}
__DATA__
3 2 1
1 2 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
デフォルトの名無しさん [sage] 2018/11/21(水) 22:22:35.53:fvygYhm9
Java
ttp://https://ideone.com/NWI4DM
デフォルトの名無しさん [sage] 2018/11/21(水) 22:30:22.51:7Tiab2M6
Java
ttp://https://ideone.com/g0xX7G

1 3は3じゃなくて1でいいんよね?
デフォルトの名無しさん [sage] 2018/11/21(水) 22:30:46.05:luckbEjf
c
ttp://https://ideone.com/cyu360
デフォルトの名無しさん [sage] 2018/11/21(水) 22:32:28.49:XrCNlm4w

python3

def keyMaker(x):
__x = [int(y) for y in x]
__x.append(x[-1]+0.1)
__return x

for y in ["3 2 1","1 2 21", "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16"]: print(int("".join(sorted(y.split(),key=lambda x: keyMaker(x)))))
->
123
1212
10111121314151623456789

0.1足さないと "10 11 101 100"で間違えるな
デフォルトの名無しさん [sage] 2018/11/21(水) 22:39:54.74:Pa+SHuBo

101 10 と 10 101 で結果が異なる
ttp://https://ideone.com/crTQpT
デフォルトの名無しさん [sage] 2018/11/21(水) 22:54:14.65:7Tiab2M6
Java
ttp://https://ideone.com/Ievsls
デフォルトの名無しさん [sage] 2018/11/21(水) 22:55:54.34:7Tiab2M6
あ、問題読み間違えてるわ
コスト1で1増やすんじゃなくて1増減出来るのね…
デフォルトの名無しさん [sage] 2018/11/21(水) 23:11:59.00:DBPerFhf
Perl5
use feature say;
say sort{"$a$b"<=>"$b$a"} split for <DATA>;
__DATA__
3 2 1
1 2 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16


実行
$ perl 12_614.pl
123
1212
10111121314151623456789
デフォルトの名無しさん [] 2018/11/21(水) 23:12:22.88:jrFgFGaV
お題:分数を小数に直したときの循環部分の周期を求める
割り切れる場合は0とする
例:
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => ?
99998360006603 / 9999901 => ?
デフォルトの名無しさん [sage] 2018/11/21(水) 23:20:10.22:7Tiab2M6
Java (の修正)
ttp://https://ideone.com/Wmb9ZO
デフォルトの名無しさん [] 2018/11/21(水) 23:21:24.98:jrFgFGaV
123412345/999999999 => 9
の例に追加
デフォルトの名無しさん [sage] 2018/11/21(水) 23:30:03.05:fvygYhm9

あ、ごめん1 3は1だね
3 1と書き間違えた
デフォルトの名無しさん [sage] 2018/11/21(水) 23:35:51.69:7Tiab2M6
Java
ttp://https://ideone.com/DX4VYY
デフォルトの名無しさん [sage] 2018/11/21(水) 23:40:44.97:7Tiab2M6

循環部の周期じゃなくて、小数点以下の循環部の終わる位置を調べてる気がしてきた…修正が必要ですw
デフォルトの名無しさん [sage] 2018/11/21(水) 23:56:52.64:DBPerFhf
Perl5
for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my $n;
do {
$x = 10 * $x % $y;
$n++
} while $x != $m;
print "$X/$y => ", ($x ? $n : $x), "\n";
}
__DATA__
1 3
10 2
988027 983
919 870473
1223 1476221
99998360006603 9999901
123412345 999999999

実行
$ perl 12_628.pl
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
99998360006603/9999901 => 1999980
123412345/999999999 => 9
デフォルトの名無しさん [sage] 2018/11/22(木) 00:02:55.27:YC9N9M8Q

そういわれるとも自信がなくなってきたので念のため修正
Perl5
for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my ($n, %h);
$h{$x} = 1;
do {
$x = 10 * $x % $y;
$n++
} until $h{$x};
print "$X/$y => ", ($x ? $n : $x), "\n";
}
__DATA__
1 3
10 2
988027 983
919 870473
1223 1476221
99998360006603 9999901
123412345 999999999

実行
$ perl 12_628.pl
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
99998360006603/9999901 => 1999980
123412345/999999999 => 9
デフォルトの名無しさん [sage] 2018/11/22(木) 00:08:36.27:iFlHYuR3
1234/555 => 3

だと4になる
だと無限ループって怖くね?
デフォルトの名無しさん [sage] 2018/11/22(木) 00:10:07.02:YC9N9M8Q

サンプルデータでは問題ないが
場合によっては無限ループの恐れアルかも
デフォルトの名無しさん [sage] 2018/11/22(木) 00:11:14.76:YC9N9M8Q
は無限ループの恐れなし
デフォルトの名無しさん [sage] 2018/11/22(木) 00:13:47.95:iFlHYuR3

ideoneに食わせたらTime limit exceededになる・・・なんでや
ttp://https://ideone.com/2b6wUH
デフォルトの名無しさん [sage] 2018/11/22(木) 00:16:08.77:YC9N9M8Q
いや変なところから巡回し始める数値があれば も無限ループ
以下修正版。しかし少し進んでからようやく巡回し始める数値ってあるんだろうか…
for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my ($n, %h);
$h{$x} = 1;
while(1) {
$x = 10 * $x % $y;
$n++;
last if $h{$x};
$h{$x} = 1;
}
print "$X/$y => ", ($x ? $n : $x), "\n";
}
__DATA__
1 3
10 2
988027 983
919 870473
1223 1476221
99998360006603 9999901
123412345 999999999
デフォルトの名無しさん [sage] 2018/11/22(木) 00:19:18.30:YC9N9M8Q

しらんがなサイトのtimeout秒設定とちゃいますか
いま使っているPC(CPU Core U1300 1.06Gz)では
一番遅いのソースで

$ time perl 12_628.pl
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
99998360006603/9999901 => 1999980
123412345/999999999 => 9

12.312 secs
自分は出題者じゃなくて632です [sage] 2018/11/22(木) 00:20:17.51:iFlHYuR3

ideoneに食わせたら1234/555動いたがと同じで4になってる
ttp://https://ideone.com/eojdE5

1234/555 = 2.2[234]234234... で3よな?
デフォルトの名無しさん [sage] 2018/11/22(木) 00:26:34.37:YC9N9M8Q
うちのPCだと
for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my ($n, %h);
$h{$x} = 1;
while(1) {
$x = 10 * $x % $y;
$n++;
last if $h{$x};
$h{$x} = 1;
}
print "$X/$y => ", ($x ? $n : $x), "\n";
}
__DATA__
1234 55

実行
$ time perl 12_628.pl
1234/55 => 3
0.281 secs

Perlは5.20.3 32 bit, integerは64bit のもの。
5.16.3 32 bit, integer が32bitでも
1234/55 は => 3
になるよ
デフォルトの名無しさん [sage] 2018/11/22(木) 00:29:14.36:iFlHYuR3

5が1個足りてませんぜw
1234/55=22.4[36]3636... => 2
デフォルトの名無しさん [sage] 2018/11/22(木) 00:33:49.88:YC9N9M8Q

for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my ($n, %h);
$h{$x} = 1;
while(1) {
$x = 10 * $x % $y;
$n++;
last if $h{$x};
$h{$x} = 1;
}
print "$X/$y => ", ($x ? $n : $x), "\n";
}
__DATA__
1234 555


Perl 5.20.3 32 bit, integer 64bit
$ perl.exe 12_628.pl
1234/555 => 4
0.266 secs

Perl 5.16.3 32 bit, integer 32bit
$ perl 12_628.pl
1234/555 => 4
デフォルトの名無しさん [sage] 2018/11/22(木) 00:37:35.25:iFlHYuR3

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

bug に気がついた。循環する範囲だけの長さを求めていない
◆QZaw55cn4c [sage] 2018/11/22(木) 00:44:22.07:r9/Xo7jY

私もよーく考えました、 の推論で正しいと思い直しました。
「数字と数字を対応させる」のではなく「数字の中の因数5 と別の数字の中の因数 2 とを対応させる」んですね,週末になったらちゃんと書きます

ごめんなさい…
デフォルトの名無しさん [sage] 2018/11/22(木) 00:47:46.57:YC9N9M8Q
Perl5
for (<DATA>) {
($X, $y) = split;
$x = $m = $X % $y;
my ($n, %h);
$h{$x} = $n++;
while(1) {
$x = 10 * $x % $y;
last if $h{$x};
$h{$x} = $n++;
}
print "$X/$y => ", ($x ? $n-$h{$x} : $x), "\n";
}
__DATA__
1 3
10 2
988027 983
919 870473
1223 1476221
99998360006603 9999901
123412345 999999999
1234 555
実行
$ perl 12_628.pl
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
99998360006603/9999901 => 1999980
123412345/999999999 => 9
1234/555 => 3
604 [] 2018/11/22(木) 02:49:00.32:zC+py8mV

Kotlin
ttp://https://paiza.io/projects/TlIXUiQhX1uJMvGlxSRnHA

の改造版

重複調査はビットフラグ使ってやるようにした。
出力は番号を振って出すようにした。
デフォルトの名無しさん [] 2018/11/22(木) 03:19:07.41:zC+py8mV

問題の意味がわからない。
デフォルトの名無しさん [sage] 2018/11/22(木) 04:04:02.81:dySjvlSp
Ruby

f = -> d {
  [2, 5].each{|e| d /= e while d % e == 0}
  return 0 if d == 1
  r = 1; (1..d).find{|i| 1 == r = 10 * r % d}
}

%w[
  1/3 10/2 988027/983 919/870473 1223/1476221 99998360006603/9999901 123412345/999999999 1234/555
].each{|e| n, d = e.split(?/).map(&:to_i); puts '%d/%d => %d' % [n, d, f[d / d.gcd(n)]]}
# =>
1/3 => 1
10/2 => 0
988027/983 => 982
919/870473 => 54288
1223/1476221 => 122816
99998360006603/9999901 => 1999980
123412345/999999999 => 9
1234/555 => 3
デフォルトの名無しさん [sage] 2018/11/22(木) 15:33:08.34:yB1Us7SO
17941970723/5711177472=
3.
14155370
[
07847337299484291004011020163934418881248871826338
51095286012502326945724442022732505973857434350098
中略
81545008587679202836020711912487386979243218306349
2795623634229099298422222099702245
](周期=1584)
であってる?
デフォルトの名無しさん [sage] 2018/11/22(木) 15:43:48.55:lSIebnj9

あってる
デフォルトの名無しさん [sage] 2018/11/22(木) 15:54:06.63:yB1Us7SO

1009
デフォルトの名無しさん [] 2018/11/22(木) 23:20:25.14:8KGvhG/L

ttp://https://ideone.com/hY41ni
デフォルトの名無しさん [sage] 2018/11/23(金) 19:09:31.91:VH48PKdk
Ruby 再帰
def cost(x, y)
return [0] if x == 0
table = cost(x - 1, y)
table << table.flat_map.with_index{|e, i|
i == 0 ? [x] : [x / i, -(-x / i)].uniq.map{|v| e + v + y + (i * v - x).abs}
}.min
end

[[1,3], [3, 1], [20, 2], [63, 2]].each{|e| puts 'X = %d, Y = %d => %d' % [*e, cost(*e).last]}
# =>
(X, Y) = (1, 3) => 1
(X, Y) = (3, 1) => 3
(X, Y) = (20, 2) => 11
(X, Y) = (63, 2) => 17
デフォルトの名無しさん [sage] 2018/11/23(金) 19:12:10.98:K3SLU2ZA

f = ->str{str.split.sort{|a, b| a + b <=> b + a}.join}

['3 2 1', '1 2 21', '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'].each{|e| puts '%s => %s' % [e, f[e]]}
# =>
3 2 1 => 123
1 2 21 => 1212
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 => 10111121314151623456789
デフォルトの名無しさん [sage] 2018/11/23(金) 19:34:32.58:oncB24e2
お題: 入力をHTMLのリストに変換しなさい。

入力:
* aaa
* bbb
* ccc

* aaa
* bbb
* ccc

出力:
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
デフォルトの名無しさん [sage] 2018/11/23(金) 19:51:58.05:ZGD1vCd6
お題
非負整数の10進数表記を"マイナス10進数"表記に変換せよ

321 => 481 (400 - 80 + 1)
910 => 19090 (10000 - 9000 + 000 - 90 + 0)
909 => 909
0 => 0
11111 => 29291
123456789 => 284664829
デフォルトの名無しさん [sage] 2018/11/23(金) 20:55:58.69:5iW/esUy

ttp://https://ideone.com/SHKftF
・行頭と行末は適当に削除しちゃってる
デフォルトの名無しさん [sage] 2018/11/23(金) 21:05:33.15:Hqw3cjct
Ruby
puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).join('</li><l>

入力:
* aaa
* bbb
* ccc

* aaa
* bbb
* ccc

出力:
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
デフォルトの名無しさん [sage] 2018/11/23(金) 21:07:03.88:Hqw3cjct
途切れたので訂正
puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).('</li><li>')}.join("</ul>\n<ul>")
デフォルトの名無しさん [sage] 2018/11/23(金) 21:10:53.54:Hqw3cjct
連投ごめん 訂正
puts '<ul>%s</ul>' % $<.read.split("\n\n").map{|s| s.scan(/(?<=^\* ).*/).join('</li><li>')}.join("</ul>\n<ul>")
デフォルトの名無しさん [sage] 2018/11/23(金) 22:18:17.60:Hqw3cjct
Ruby

f = -> n {return n if n < 10;a, b = n.divmod(100); c, d = b.divmod(10); 100 * f[a - (-c / 10)] + 10 * (-c % 10) + d}

[321, 910, 909, 0, 11111, 123456789].each{|e| puts '%d => %d' % [e, f[e]]}
# =>
321 => 481
910 => 19090
909 => 909
0 => 0
11111 => 29291
123456789 => 284664829
デフォルトの名無しさん [sage] 2018/11/23(金) 23:32:40.54:RKSYf6WR
Perl5
for (split /\n\n/, <<EOL)
* aaa
* bbb
* ccc

* aaa
* bbb
* ccc
EOL
{ @a = map{"<li>$_</li>"} /\* (\w+)/g;
print "<ul>", @a, "</ul>\n";
}

実行結果
$ perl 12_659.pl
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
デフォルトの名無しさん [sage] 2018/11/24(土) 00:04:24.01:IB4DmzOp

* 以降にスペース文字が含まれていても、もれなく扱うなら
@a = map{"<li>$_</li>"} /\* (\w+)/g;

@a = map{"<li>$_</li>"} /\* ([^\n]+)/g;
デフォルトの名無しさん [] 2018/11/24(土) 02:05:34.99:Q9o1GKtC

問題の意味がわからない。
デフォルトの名無しさん [sage] 2018/11/24(土) 02:34:23.79:noZFD3Jl

俺も分からなかったんで調べたら例えば4桁のn進数 A3 A2 A1 A0 の場合
A0 * n^0 + A1 * n^1 + A2 * n^2 + A3 * n^3
となるわけだけど、単純にこのnが-10ならマイナス10進数ということらしい
デフォルトの名無しさん [] 2018/11/24(土) 02:35:47.10:Q9o1GKtC

Kotlin
ttp://https://paiza.io/projects/San6JOBupEDa6gEL9f6L5Q
拡張関数使ってみました。
デフォルトの名無しさん [] 2018/11/24(土) 02:43:21.86:Q9o1GKtC

なるほど。そういうことか。ありがとう。
デフォルトの名無しさん [] 2018/11/24(土) 03:26:26.65:Q9o1GKtC

Perl5
ttp://https://paiza.io/projects/AJSUVyggQJnm7GnS8_ZC1g
デフォルトの名無しさん [sage] 2018/11/24(土) 03:43:39.38:Q9o1GKtC

Kotlin
ttp://https://paiza.io/projects/DwesufgOG64B8-KN_ErG5w
C
ttp://https://paiza.io/projects/HwczmyQnaji1IgHICqHrIg

最初 Kotlin で作って確認した後で paiza.io にコピペして実行したら 99998360006603 / 9999901 が
タイムアウトしてしまい、じゃあ C で作るか(ついでに tsearch() 使ってみるか)と思ってやってみたが
相変わらず同じ計算でタイムアウトした。

まあしかしそれ以外の計算はなんとかなったので両方公開しとく。

アルゴリズムは割った余りを10倍するのを繰り返して同じ余りが出たらそこで循環と判定するというやつ。
デフォルトの名無しさん [sage] 2018/11/24(土) 04:00:55.96:7YEvwBu9
javascript
`
* aaa
* bbb
* ccc

* aaa
* bbb
* ccc
`.split`\n\n`.map(ol => `<ol><li>${ol.match(/(?<=\* ).*/g).join`</li><li>`}</li></ol>`).join`\n`
出力:
<ol><li>aaa</li><li>bbb</li><li>ccc</li></ol>
<ol><li>aaa</li><li>bbb</li><li>ccc</li></ol>

// 本物のdocument fragment作っちゃう版
var fragment = `
* aaa
* bbb
* ccc

* aaa
* bbb
* ccc
`.trim().split`\n\n`.map(ol => ol
.match(/(?<=\* ).*/g)
.reduce((acc, li) => (acc.appendChild(document.createElement`li`).innerHTML = li, acc), document.createElement`ol`))
.reduce((acc, ol) => (acc.appendChild(ol), acc), document.createDocumentFragment())

document.querySelector('div#target').appendChild(fragment)など任意のエレメントにそのままappend可能。
デフォルトの名無しさん [sage] 2018/11/24(土) 05:34:48.85:Dcky2N9A

ttp://https://pastebin.com/6HttXyVt
デフォルトの名無しさん [] 2018/11/24(土) 05:38:41.45:Q9o1GKtC

C (その2)
ttp://https://paiza.io/projects/21K5fAVsJlYtob_H0rZ9LA

よく考えたら出来た。
循環になっている桁の最初の余りを取っておいて次に出るまでカウントすれば良いだけで余りを全て保存しておく必要ないんだな。
デフォルトの名無しさん [sage] 2018/11/24(土) 05:41:18.30:Dcky2N9A
の言語は
JavaScript( Windows Scripting Host用 )ね
デフォルトの名無しさん [sage] 2018/11/24(土) 08:20:40.93:01jBobXF

Ruby で作った。ただし、最終行に改行を追加した

text = <<"EOT"
* aaa
* bbb

* xxx
* yyy

EOT

buf = ""; result = ""

text.each_line do |line| # 1行ずつ処理する
line.chomp! # 末尾の改行を削除する

case
when line.empty? # 空文字列
result += "<ul>" + buf + "</ul>" + "\n" # ul で囲む
buf = ""
when line.start_with?( "* " )
buf += "<li>" + line.slice!( 2..-1 ) + "</li>" # "* " 以後の部分を取り出す
else
raise
end
end

puts result
デフォルトの名無しさん [] 2018/11/24(土) 11:05:11.18:1C+vWWG1
2人以上(1ユーザーに対し、1PC以上)のジャンケンゲームを作れ。
・勝ちグループにユーザーが居れば勝ちとする。
・グー=g、チョキ=v、パー=wとする。
・グー、チョキ、パー以外が入力されたら、あいこ扱い。
・全員の手もその都度表示。


Rock, Paper, Scissors! ―じゃんけんぽん(またはあいこでしょ)の英語版
(Rock = g/G, Paper = w/W, Scissors = v/V)
g
[("You",'g'),("PC1",'v'),("PC2",'g')]
You Win!!
デフォルトの名無しさん [sage] 2018/11/24(土) 12:06:59.71:X5g7u0K6

def janken(hand, opp_number)
  hands = opp_number.times.map{%w[g v w].sample}.unshift(hand)
  p hands.map.with_index{|h, i| [i == 0 ? 'You' : "PC#{i}", h]}
  return 'Draw' if hands.uniq.size != 2
  hands = hands.uniq.join.sum == 0xDE ? %w[w g] : hands.uniq.sort
  ['You Win!', 'You Lose!'][hands.index(hand)]
end

puts janken(?g, 1)
# => [["You", "g"], ["PC1", "v"]]
You Win!

puts janken(?v, 2)
# => [["You", "v"], ["PC1", "v"]]
Draw

puts janken(?w, 3)
# => [["You", "w"], ["PC1", "g"], ["PC2", "v"]]
Draw

puts janken(?g, 4)
# => [["You", "g"], ["PC1", "g"], ["PC2", "g"], ["PC3", "v"], ["PC4", "v"]]
You Win!
デフォルトの名無しさん [sage] 2018/11/24(土) 12:08:52.78:X5g7u0K6
Ruby コピペミス
puts janken(?v, 2) -> puts janken(?v, 1)
puts janken(?w, 3) -> puts janken(?w, 2)
デフォルトの名無しさん [sage] 2018/11/24(土) 12:14:16.56:X5g7u0K6

「・グー、チョキ、パー以外が入力されたら、あいこ扱い」を見落としていたので
return 'Draw' if hands.uniq.size != 2

return 'Draw' if hands.uniq.size != 2 || %w[g, v, w].none?(hand)
に修正

puts janken('グーチョキパー', 5)
# => [["You", "グーチョキパー"], ["PC1", "g"], ["PC2", "w"], ["PC3", "v"], ["PC4", "g"], ["PC5", "
v"]]
Draw
デフォルトの名無しさん [] 2018/11/24(土) 12:16:11.70:1C+vWWG1

あ、あいこはあいこと表示して終わっちゃうのね。。。
あいこの時はまたジャンケンし直しにして欲しい。
条件に入れればよかったかなぁ。。。
デフォルトの名無しさん [sage] 2018/11/24(土) 12:26:57.03:hG+y0dS8

> ・グー=g、チョキ=v、パー=wとする。

グー=g、チョキ=c、パー=pか
グー=m、チョキ=v、パー=wか
どっちかに統一してほしい。
グー=g、チョキ=v、パー=wだとgが表音イニシャル、v, wが象形と統一性がない。
気になってご飯が喉を通らなくてプログラミングどころじゃない…
デフォルトの名無しさん [] 2018/11/24(土) 13:02:40.59:1C+vWWG1
gも象形のつもりだったんだが。。。
デフォルトの名無しさん [] 2018/11/24(土) 14:02:53.32:S/Hnk7Kr
Ruby

def input(message, cond); begin; puts message; end while cond.call; end

def janken
  hand_type = %w[g v w]
  input('Input the number of opponents.', proc{gets.to_i < 1})
  opp_number, hand, hands = $_.to_i
  loop do
    input('Input your hand.', proc{gets; false})
    hand = hand_type.index($_.chomp!)
    hands = opp_number.times.map{rand(3)}.unshift(hand)
    p hands.map.with_index{|h, i| i == 0 ? ['You', $_] : ["PC#{i}", hand_type[h]]}
    hand && hands.uniq.size == 2 ? break : puts('Draw')
  end
  puts %w[You\ Win! You\ Lose.][3 * hand / hands.uniq.sum / 2]
end

janken
# => Input the number of opponents.
1
Input your hand.
choki
[["You", "choki"], ["PC1", "g"]]
Draw
Input your hand.
w
[["You", "w"], ["PC1", "v"]]
You Lose.
デフォルトの名無しさん [sage] 2018/11/24(土) 14:57:54.21:Q9o1GKtC

まずは瞑想でもして心を落ち着けると良い。
679 [] 2018/11/24(土) 15:20:34.57:1C+vWWG1

一応、自分自身でも投稿。
予想通り分岐使わないバージョン出て来た。
自分も挑戦してみようかな。

Haskell(リストに勝ち負け確定パターン(含まれてるかでグループパターン割り出し)があるか判別して、先頭要素(必ずユーザー)がパターンと同じか判定)
ttp://https://ideone.com/9EmrYI

Cとか死ねたし。(全体の勝ちグループ(各手をカウントしてグループパターン割り出し)の手を確定後、勝ちグループと同じ手に対応した文字を入力していたか判定)
ttp://https://ideone.com/AmfTOy

(能力不足の自分はあえてでは無いが)あえて条件分岐バージョンにすると言語や個人の個性出そう。
(CとHaskellでグループ分けや自分が勝ちグループ側かの判定が違うアルゴリズムになった)
その場合、アルゴリズムの説明付きだと面白そう。
デフォルトの名無しさん [] 2018/11/24(土) 16:39:00.82:ZWAqZgZk

Python3
ttp://https://ideone.com/PcHoga
デフォルトの名無しさん [sage] 2018/11/24(土) 16:56:21.89:S/Hnk7Kr

グーチョキパー以外をプレイヤーが出したときおかしな挙動しない?
デフォルトの名無しさん [] 2018/11/24(土) 17:14:41.52:ZWAqZgZk

あいこの判定を手の種類数だけでしてたせいだな
修正した
ttp://https://ideone.com/3XBPBb
デフォルトの名無しさん [] 2018/11/24(土) 22:52:47.96:5TC6Hle/
お題
順列を求めるのにシャッフルでデータをたくさん用意して
重複データを取り除くことで求めている人がいた
順列の数の何倍位のデータを用意すればいいか調べる
デフォルトの名無しさん [sage] 2018/11/24(土) 23:20:30.16:Vcpm1NYO
許容誤差と確率の問題じゃん
デフォルトの名無しさん [sage] 2018/11/24(土) 23:23:27.73:7YEvwBu9

二度と来なくていい
デフォルトの名無しさん [sage] 2018/11/24(土) 23:37:47.52:Wfpvwubu
PowerShell
function Janken {
  $hands = @($args[0]) + (1..$args[1] | %{ Get-Random "g","v","w" })
  ("[" + ($hands | % {"{0}`",'$_')" -f $(if ($i++ -eq 0) {"(`"You"} else {",(`"PC" + ($i-1)}) }) + "]")
  $groups = @($hands | Group-Object)
  $win = @{ "g" = "v"; "v" = "w"; "w" = "g" }[$args[0]]
  if ($groups.Count -ne 2 -or $win -eq $null) { return "Draw" }
  if (($groups | ? {$_.Name -eq $win}).Count -gt 0) { return "You Win!!" }
  return "You Lose!!"
}


PowerShell > Janken g 1
[("You",'g') ,("PC1",'v')]
You Win!!

PowerShell > Janken v 2
[("You",'v') ,("PC1",'v') ,("PC2",'g')]
You Lose!!

PowerShell > Janken w 3
[("You",'w') ,("PC1",'v') ,("PC2",'g') ,("PC3",'w')]
Draw

PowerShell > Janken a 1
[("You",'a') ,("PC1",'g')]
Draw
679 [] 2018/11/25(日) 01:57:22.20:ae+bi37x


デフォルトの名無しさん [sage] 2018/11/25(日) 06:18:56.85:k7/W79Is

Kotlin
ttp://https://paiza.io/projects/3zt5CUPdhrTFhXx2z7ayvw

入力は1行単位で最初の手が自分、スペース区切りでPCの手になる。
グー、チョキ、パーと元の文字列の対応は以下に対応。

グー: "g", "G", "グー", "ぐー"
チョキ: "v", "V", "c", "C", "チョキ", "ちょき"
パー: "w", "W", "p", "P", "パー", "ぱー"

勝敗の判定は「勝」、「負」、「相子」で出る。
679 [] 2018/11/25(日) 07:47:50.59:ae+bi37x

ジャンケンゲームの肝?ってPCはランダムな値を使う所だと思うんですが・・・
あと、私が勝手にアイコといえばジャンケンやり直しって勝手に思い込んでて仕様に盛り込まなかったのがダメなんですが、
アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いしたいです。

さんも、アイコと(アイコ扱いの)不正入力はジャンケンやり直しの形でお願いします。
デフォルトの名無しさん [sage] 2018/11/25(日) 11:54:57.77:qcobBjeQ
お題
標準運指(ttp://http://taipingu.net/kotu02.html)によるタイピングを考える。
英小文字からなる文字列Sが与えられるので、Sを入力するのにかかる時間を求めなさい。
各文字の入力にかかる時間は以下の通りとする。
・1文字目
 ・ホームポジションから動かない -> 4
 ・ホームポジションから動く -> 5
・2文字目以降
 ・1つ前の文字と反対の手の指 -> 1
 ・1つ前の文字と同じ手の違う指 -> 2
 ・1つ前の文字と同じ手の同じ指 -> 3

(例)
aiueo => 9 (4+1+2+1+1)
odai => 9
pppp => 14
asdfjkl => 15
fjdksla => 10
デフォルトの名無しさん [sage] 2018/11/25(日) 12:38:51.26:YCGD2W4D
Ruby
h = -> c {'qaz'[c] ? 1 : 'wsx'[c] ? 2 : 'edc'[c] ? 3 : 'rfvtgb'[c] ? 4 : 'yhnujm'[c] ? -4 : 'ik'[c] ? -3 : 'ol'[c] ? -2 : 'p'[c] ? -1 : raise('invalid key')}
f = -> str{(str[/\A[adfghjkls]/] ? 4 : 5) + str.each_char.map{|c| h[c]}.each_cons(2).map{|a, b| a * b < 0 ? 1 : a != b ? 2 : 3}.sum}

%w[aiueo odai pppp asdfjkl fjdksla].each{|s| puts '%s => %d' % [s, f[s]]}
# => aiueo => 9
odai => 9
pppp => 14
asdfjkl => 15
fjdksla => 10
デフォルトの名無しさん [] 2018/11/25(日) 13:38:17.14:k7/W79Is

そういうインタラクティブなやつか。
じゃあまた暇があったら作ろう。
デフォルトの名無しさん [] 2018/11/25(日) 16:23:23.79:rkqtyTFb
お題:Brainfuckのインタプリタを実装せよ
仕様 ttp://https://ja.wikipedia.org/wiki/Brainfuck

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
⇒ Hello World!

++++++++[>++++++++<-]>++.<++++++[>++++++++<-]>.<----[>++++<-]>-.++++++++.+++++.--------.+++++++++++++++.<----[>++++<-]>--.++++++++.
⇒ ?
デフォルトの名無しさん [sage] 2018/11/25(日) 16:52:01.92:1Q36MCdG
Ruby やっつけ
def parse_bra(code)
  Hash.new.tap{|h|
    while i = (code.index(/\[[^\[\]]*\]/))
      h[i] = i + $&.size - 1; h[h[i]] = i; code = code.sub($&, ' ' * $&.size)
    end
  end
end

def step(stat)
  case stat[:code][stat[:pos]]
  when ?> then stat[:mar] = stat[:mar] == 9999 ? 0 : stat[:mar] + 1
  when ?< then stat[:mar] = stat[:mar] == 0 ? 9999 : stat[:mar] - 1
  when ?+ then stat[:mem][stat[:mar]] = stat[:mem][stat[:mar]] == 255 ? 0 : stat[:mem][stat[:mar]] + 1
  when ?- then stat[:mem][stat[:mar]] = stat[:mem][stat[:mar]] == 0 ? 255 : stat[:mem][stat[:mar]] - 1
  when ?. then putc stat[:mem][stat[:mar]]
  when ?, then stat[:mem][stat[:mar]] = $stdin.getc&.ord.to_i
  when ?[ then stat[:pos] = stat[:bra][stat[:pos]] if stat[:mem][stat[:mar]] == 0
  when ?] then stat[:pos] = stat[:bra][stat[:pos]] if stat[:mem][stat[:mar]] != 0
  end
end

def bf(code)
  stat = {pos: 0, mar: 0, code: code, mem: Array.new(10000, 0), bra: parse_bra(code)}
  (step(stat); stat[:pos] += 1) while stat[:pos] < code.size
end

bf('>+++++++++[<++++++++>-]/ 中略 /++++[<++++>-]<+.[-]++++++++++.')
# => Hello World!

bf('++++++++[>++++++++<-]>+/ 中略 /++++.<----[>++++<-]>--.++++++++.')
# => Brainfuck
デフォルトの名無しさん [sage] 2018/11/25(日) 19:29:25.63:Iiz4BNf0
C
昔書いたやつ
ttp://https://ideone.com/r8gfF0

mandelbrotがideoneで2.9s
デフォルトの名無しさん [sage] 2018/11/25(日) 21:08:13.52:FiKNHiMA

ideoneのbrainfuckより速いじゃないかw
ttp://https://ideone.com/E28MuB
デフォルトの名無しさん [sage] 2018/11/25(日) 21:09:21.48:F5E3KDnq

笑った
デフォルトの名無しさん [sage] 2018/11/25(日) 23:28:07.03:DgoPPid/
 Perl5 普通のloop版
use feature qw{current_sub say};
for (qw{321 910 909 0 11111 123456789}) {
$a = $_;
$s = 1;
@d= ();
do {
$d = int $a / 10*$s;
$m = $a % (10*$s);
unshift @d, $m*$s;
$s *= -1;
$a = ($a - $m)/10;
} while $a;
say "$_ $d => ", @d;
}

 Perl5 無名関数の末尾再帰版
use feature qw{say};
for (qw{321 910 909 0 11111 123456789}) {
$s = 1;
say "$_ $d => ", sub {
$a = shift;
$d = int $a / 10*$s;
$m = $a % (10*$s);
my $ms = $m*$s;
$s *= -1;
$a = ($a - $m)/10;
(($a ? __SUB__->($a) : ()), $ms);
}->($_);
}
デフォルトの名無しさん [sage] 2018/11/25(日) 23:30:57.42:DgoPPid/

ゴメン、普通のloop版の
say "$_ $d => ", @d;
は不要なdebug writeも出力するので
say "$_ => ", @d;
に訂正

結果はいずれも
$ perl 12_660.pl
321 => 481
910 => 19090
909 => 909
0 => 0
11111 => 29291
123456789 => 284664829
デフォルトの名無しさん [sage] 2018/11/25(日) 23:34:40.02:DgoPPid/

再々投ゴメン
無名関数の末尾再帰版
× use feature qw{say};

○ use feature qw{current_sub say};
697 [] 2018/11/26(月) 02:29:30.61:jdmxn8AZ
>>698
HTML + JavaScript
ttp://https://codepen.io/anon/pen/OaERvj
即実行できた方がいいかなと思ってブラウザで動く JavaScript にしてみた。
PC側は10台まで台数入力する。
表示は「グー」、「チョキ」、「パー」になっている。
判定は方法ほ Kotlin のやつとほとんど同じ。

但し勝敗や相子に関係なく再挑戦ボタンが出る。
デフォルトの名無しさん [sage] 2018/11/28(水) 01:28:37.70:he8qnrZH
c
ttp://https://ideone.com/AfZmCz
711 [sage] 2018/11/28(水) 23:15:07.63:he8qnrZH
c
ttp://https://ideone.com/Plh1vx
・mandelbrotが4.24s
・セル配列をコンパクト化
・一部のforとswitchをgotoで置き換え
・データポインタの範囲チェックは廃止
・']'のとき無条件に'['へ戻ってたのを廃止
デフォルトの名無しさん [] 2018/11/28(水) 23:53:16.47:fj/EN88U
これで。以前からやろうとしてできてない。AI簡単そうだが。


3x3盤タイルゲーム for Windows ver2.00 14/7/5 更新
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <入門版>


4x4盤タイルゲーム for Windows ver2.00 14/7/5 更新
対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」 <本格版>

ttp://http://www2u.biglobe.ne.jp/~shunbook/omocha/index.htm
デフォルトの名無しさん [sage] 2018/11/29(木) 11:20:14.11:jwCbT4Qs
盤の状態は4×4のやつで3^16=43046721通りだから後退解析で全状態の最善手が簡単に解ける
デフォルトの名無しさん [sage] 2018/11/29(木) 19:56:01.31:Hd6SZyXm

その "&&label" って初めてみたんだけどgcc拡張なんだな
デフォルトの名無しさん [sage] 2018/11/29(木) 20:53:52.25:lIzTCHsu

これか。こんなのあったとは知らなかった。
ttp://http://nnabeyang.hatenablog.com/entry/2012/12/05/160312
しかしあまり利用する必要なさそうな予感。
711 [sage] 2018/11/29(木) 23:18:59.74:dyCCyrAH
c
ttp://https://ideone.com/ddpLYQ
・ mandelbrotが4.24s→3.42s
・いくつかの単純なループを自前の命令に置き換え


まさかこれ使う日が来るとはね( ^ω^)
デフォルトの名無しさん [sage] 2018/11/30(金) 16:33:00.37:M3yAddAk
さすがC言語
奥が深いな
デフォルトの名無しさん [sage] 2018/11/30(金) 18:55:20.12:eqr4XxJg
儲かるお題を書いてください。
デフォルトの名無しさん [] 2018/11/30(金) 19:56:50.93:vThfWoZE
お題: C言語のコメント/*〜*/, //〜 を除去するプログラムを実装せよ
711 [sage] 2018/11/30(金) 22:52:06.95:j+r1UJtS

ttp://https://ideone.com/d0oDj0
・ mandelbrotが4.24s→3.42s→3.24s
・ループの置き換えを若干増やす
・初期8命令を6命令へ、なんとなく整理
デフォルトの名無しさん [] 2018/11/30(金) 22:53:31.37:cIO0a97u

命令すんなカス
デフォルトの名無しさん [sage] 2018/11/30(金) 23:05:45.19:iwzbC/nf

ここまで最適化するとはすごいな
今VCに移植してやってみてる
VCはラベルのアドレスは取れないのでcase文内で処理してる
でも文字がダラダラと表示されるのが嫌なので、putchar()の所を
一度バッファに溜めておいて最後にputs()で一気に出力するようにした
◆QZaw55cn4c [sage] 2018/11/30(金) 23:09:14.20:MkfLpznc

やったことがある気がしたのですが、もうすっかり忘れてしまいました…
デフォルトの名無しさん [sage] 2018/11/30(金) 23:09:48.33:iwzbC/nf
のを移植するとこうなる
他のも同様だと思う
Random1.h というのは自前のストップウォッチクラスを使うためだけなので、
std::chronoを使って適当に自作すれば良い

ttp://https://ideone.com/Vf0qIj
デフォルトの名無しさん [sage] 2018/11/30(金) 23:16:05.51:TjeK6E2T
お題: 入力にこのスレのhtmlが与えられるので数字だけ,区切りで出力しなさい。

出力例
2018,11,30,...
デフォルトの名無しさん [sage] 2018/11/30(金) 23:54:45.63:8gAcKqbf
どれだけの数字の種類に対応するのかで個性が出るな
デフォルトの名無しさん [] 2018/12/01(土) 00:17:45.63:XKE5KJf3

誰もお前になんか言ってねーよ
自意識過剰なんじゃボケカス
デフォルトの名無しさん [] 2018/12/01(土) 01:26:07.16:3EVAE812

Perl
ttp://https://paiza.io/projects/Q_MF7JmVJMMjF1aqffgfaw

Perl だと簡単だ。

但し /* /* */ */ みたいな二重のやつには対応していない。最初の /* から次に出た */ を削除して */ が残る。
(この辺は本物のCプリプロセッサでも同じかな?)
デフォルトの名無しさん [sage] 2018/12/01(土) 01:45:09.70:YAQo6Dqr
Ruby

require 'open-uri'
thread = 'ttps://mevius.5ch.net/test/read.cgi/tech/1538096947'
puts open(thread).read.scan(/>([^<]+)/).flat_map{|(s)| s.scan(/\d+/)}.join(?,)
# =>
12,12,729,314,1,100,50,1,2018,09,28,10,09,07,13,1,2,1,10,# 略
デフォルトの名無しさん [sage] 2018/12/01(土) 01:53:10.02:k1RHlnBk

"/* hoge */" => ""
◆QZaw55cn4c [sage] 2018/12/01(土) 02:29:20.81:J8cQMvWo

>(この辺は本物のCプリプロセッサでも同じかな?)
そうですね。ttp://https://ideone.com/3TJq7U
デフォルトの名無しさん [] 2018/12/01(土) 03:00:24.20:3EVAE812

あー。文字列リテラルについては何も考えてなかった。
明日考えよう。


やはりそうでしたか。わざわざどうも。
デフォルトの名無しさん [] 2018/12/01(土) 03:09:09.09:3EVAE812

今閃いたので修正した。(URLは同じ)
デフォルトの名無しさん [] 2018/12/01(土) 03:22:24.06:Zs5zJNI/
Ruby
src = $<.read
i = 0
loop do
  break if i >= src.size
  case src[i]
  when ?" then i += src[i..-1][/(?:".*[^\\]|")(?:\\\\)*"/].size
  when ?' then i += src[i..-1][/(?:'.*[^\\]|')(?:\\\\)*'/].size
  when ?/ then src.sub!(/(?<=.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, ''); i += 1
  else i += 1
  end
end

-*- input -*-
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \"fuga\"\\");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge

-*- output -*-
hoge();
hoge('"');
hoge("// "fuga"\\");
hoge("/* fuga */"); ; hoge
デフォルトの名無しさん [] 2018/12/01(土) 03:24:23.46:3EVAE812

Cでも作った。
ttp://https://paiza.io/projects/2RgQrlBLrzJe9MQp9weQmQ

これは1文字づつ読んでモード切り替えて出力したりしなかったりする方式。
文字列リテラルにも対応。
デフォルトの名無しさん [sage] 2018/12/01(土) 03:40:27.80:mIATMgqT

'"', /* hoge */, "fuga" => '"', /* hoge */, "fuga"
デフォルトの名無しさん [sage] 2018/12/01(土) 03:45:42.76:mIATMgqT

"// hoge" => "
デフォルトの名無しさん [sage] 2018/12/01(土) 04:05:45.76:3EVAE812
>>738
あ、それか。それは明日考えよう。
デフォルトの名無しさん [sage] 2018/12/01(土) 04:06:53.29:3EVAE812
C言語の方もシングルクォート考慮してないから似たようなものだな。
デフォルトの名無しさん [] 2018/12/01(土) 05:34:42.40:qLkjgui5
訂正
src = $<.read
i = 0
loop do
  break if i >= src.size
  case src[i]
  when ?" then i += src[i..-1][/\A"(?:.*?[^\\])?(?:\\\\)*"/].size; next
  when ?' then i += src[i..-1][/\A'(?:.*?[^\\])?(?:\\\\)*'/].size; next
  when ?/ then src.sub!(/(?<=\A.{#{i}})(?:\/\/[^\n]*|\/\*.*?\*\/)/m, '')
  end
  i += 1
end
puts src

-*- input -*-
hoge(); // fuga
hoge('"'); // fuga ");
hoge("// \"fuga\"\\", /* fuga */ *"fuga");
hoge("/* fuga */"); /* fuga
fuga /* "fuga" // */; hoge

-*- output -*-
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
デフォルトの名無しさん [] 2018/12/01(土) 07:52:53.53:U3mK8vlP

誰も俺に言われてると思ってねーよ
自意識過剰なんじゃボケカス
デフォルトの名無しさん [] 2018/12/01(土) 11:03:33.46:XKE5KJf3

生きづらそう
デフォルトの名無しさん [sage] 2018/12/01(土) 11:10:29.72:50ygxsN0

PCRE(Perl)の正規表現なら再帰マッチ(&R)や(&1)使いなせぇ
参考サイトはイロイロあるし
デフォルトの名無しさん [sage] 2018/12/01(土) 11:16:56.49:50ygxsN0

ゴメン再帰マッチは(?R)や(?1)だた
時間あればnest対応版書いてみたいけど
多分ないや…

こういうのは再帰降下パーサParse::RecDescentやPerl6のRule使うと楽に書ける
デフォルトの名無しさん [] 2018/12/01(土) 12:39:50.92:U3mK8vlP

おまえやわw
いちいち素っ頓狂なレスすんなカスw
デフォルトの名無しさん [sage] 2018/12/01(土) 12:41:56.31:1eGLRG7/
いつもの単芝君やないか
この板に粘着して荒らしまわってる奴やで
意思疎通は不可能なのでNGするなりスルーするなりしてくれ
デフォルトの名無しさん [] 2018/12/01(土) 15:19:58.00:3EVAE812
の改造終了(URLは同じ)
長い呪文になってしまった。

>>745
なるほど。その内暇な時にでも考えよう。
デフォルトの名無しさん [] 2018/12/01(土) 17:02:07.43:3EVAE812
も改造終了(URLは同じ)。
デフォルトの名無しさん [sage scに誤爆した] 2018/12/01(土) 17:34:49.88:XO3Kyvz4
F#
ttp://https://ideone.com/IUPK21
mandelbrotが2.86s
ttp://https://postd.cc/adventures-in-jit-compilation-part-1-an-interpreter/ を参考にした
デフォルトの名無しさん [] 2018/12/01(土) 17:37:04.95:XO3Kyvz4
はインタプリタでないので無視してください
デフォルトの名無しさん [sage] 2018/12/02(日) 00:35:34.00:twRH93OM

Kotlin
ttp://https://paiza.io/projects/MBp2uVW-Y0Kj2sRaZom3pA

1行1プログラムだが行が長くなると見辛いので行末に \ があったら次の行と連結している事にした。
711 [sage] 2018/12/02(日) 16:02:26.97:aFBnTuDv
c
ttp://https://ideone.com/6sLfPH
・ mandelbrotが4.24s→3.42s→3.24s→2.13s
・G: while (*dp) dp += ip->d; ip++; goto TOP; を追加


caseで分岐するほうが移植性あっていいよね( ^ω^)
デフォルトの名無しさん [sage] 2018/12/02(日) 16:29:28.37:hHHhmr7T
Python「・・・」
デフォルトの名無しさん [sage] 2018/12/03(月) 22:04:03.50:cV13JBu4
[お題]
整数A,B(1<=A<B<=50万)と P(1<=P<=10)が順に与えられる。
A以上B以下の10進数の整数から異なる2つの整数を選ぶ。
その2つの整数を表現するのに使われている(各桁の)数字の種類が
ちょうどP種類である選び方は何通りできるか。

※ 先頭ゼロ詰禁止、実行時間一問1.5秒以内(ideone等で)

1) 8 11 2 --> 4
2) 10 1000 5 --> 207480
3) 44 44444 4 --> 33808313
4) 56785 113452 1 --> ?
5) 102345 480713 6 --> ?
6) 1 500000 7 --> 47440713600

 例題1) の補足 "8 11 2" のとき
  {8,9,10,11}から2整数を選ぶ。NCR(4,2)=6通りあるなかから
  (8,9)(8,11)(9,11)(10,11) の4通りが答え。[]内を使用数字とすると、
  例として、(8,11)は[8,1]の2種類, (10,11)は[1,0]の2種類からなる。
  対象外は (8,10)は[8,1,0] (9,10)は[9,1,0]で ともに2種類ではない。

 ※解き方をパックて単純化した問題。
デフォルトの名無しさん [sage] 2018/12/03(月) 23:49:23.73:CrTNh3lq
数え上げ系のお題はつまんない
デフォルトの名無しさん [sage] 2018/12/04(火) 10:39:39.35:ZczbahAK
パズルソルバーは制約・論理プログラミングが最適だね。
デフォルトの名無しさん [] 2018/12/04(火) 13:11:47.75:vhrUEqnQ
正規表現だけで書いてみた

regexp = /((?:([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/))*)(("|').*?(?<!\\)(?:\\\\)*\4)?/m

puts <<~EOT.gsub(regexp, '\2\3')
  hoge(); // fuga
  hoge('"'); // fuga ");
  hoge("// \\"fuga\\"\\\\", /* fuga */ *"fuga");
  hoge("/* fuga */"); /* fuga
  fuga /* "fuga" // */; hoge
EOT
# =>
hoge();
hoge('"');
hoge("// \"fuga\"\\", *"fuga");
hoge("/* fuga */"); ; hoge
デフォルトの名無しさん [sage] 2018/12/04(火) 13:34:55.49:fo8RIf+e
無駄な括弧があったので修正

regexp = /([^"']*?)(?:\/\/[^\n]*|\/\*.*?\*\/)?(("|').*?(?<!\\)(?:\\\\)*\3)?/m

puts src.gsub(regexp, '\1\2')
デフォルトの名無しさん [sage] 2018/12/04(火) 17:02:17.81:N7rAE58b

ttp://https://ideone.com/3hct3R

caseに書いちゃうと遅くなるな
デフォルトの名無しさん [sage] 2018/12/04(火) 17:20:50.80:tkE9zz4k
お題: テキストが入力されるのでそれがお題であれば1,お題でなければ0を出力せよ
デフォルトの名無しさん [] 2018/12/04(火) 17:37:59.07:HMynH27O


#!/bin/sh

if grep お題 >/dev/null 2>&1
then
 echo 1
else
 echo 0
fi
デフォルトの名無しさん [sage] 2018/12/04(火) 17:43:36.31:evmq38l5
お題

C/C++言語のソースをHTMLに変換

・色分け(外部スタイルシートで色分け以外にも
サイズや種類など色々と細かく指定可能)表示
・コメント・クォート・マクロ定義部分・マクロ等に対応
・ローカル変数・グローバル変数・static関数・非static関数
ライブラリ変数/関数/マクロ(ヘッダ記載)・
ローカル型・グローバル型名の区別

入力:コマンドラインからファイル名(.c/.cpp)
出力:出力htm(l)ファイルとそれが参照するスタイルシート(.css)を
新規作成
デフォルトの名無しさん [sage] 2018/12/04(火) 17:47:43.27:evmq38l5
あと、コードブロックや式の括弧のネストレベルに応じて
背景色を変えてほしい(要望)
コマンドラインからタブ=4,8とか指定できるようにもして欲しい
デフォルトの名無しさん [sage] 2018/12/04(火) 17:58:45.10:0EeyK9d3

ruby -ne'p~/\Aお題\Z/?1:0'
デフォルトの名無しさん [] 2018/12/04(火) 18:05:08.94:HMynH27O
1. 好きなIDEのエディタで画面に表示。
2. PrtSc キーを押す。
3. ペイントを起動してペースト。
4. PNGファイルとして保存。
5. メモ帳を起動。
6. HTML を書き、imgで先の画像を表示するようにする。
7. 拡張子をhtmlにして保存。
8. ブラウザで表示。
9. 終了。
デフォルトの名無しさん [sage] 2018/12/04(火) 18:14:10.74:evmq38l5
型に応じて変数の色分け(スタイル変更)に対応できたら最高
忘れてたけど予約語の色分けは当然
ソースコードの構文エラー箇所以降は単色赤文字で表示
デフォルトの名無しさん [sage] 2018/12/04(火) 19:05:35.22:Ntdpy5BB
PowerShell
[int]("お題" -eq $(Read-Host))
デフォルトの名無しさん [sage] 2018/12/05(水) 04:19:34.99:fABNAu0P
Java
ttp://https://ideone.com/a1wOZ4
デフォルトの名無しさん [] 2018/12/05(水) 19:36:38.80:W3jESzak
お題:ビュフォンの針をシミュレートして円周率の近似値を求めよ
デフォルトの名無しさん [] 2018/12/05(水) 20:02:35.88:W3jESzak
自分でやってみた
Python3
ttp://https://ideone.com/A2FnPP
1000万本投げた場合
3.14219665312
デフォルトの名無しさん [sage] 2018/12/05(水) 23:06:27.91:dgv/Vo0c
angleを計算するのに思いっきりπの値使ってるだろうし..www
デフォルトの名無しさん [sage] 2018/12/05(水) 23:30:47.41:oCZO3Dfm
wikipediaは日本語版だけその問題に言及して疑似コードも載ってるのな
◆QZaw55cn4c [sage] 2018/12/05(水) 23:30:56.16:qUBA/FDJ

そんなツッコミは初めてみました、うまいですね…
デフォルトの名無しさん [] 2018/12/05(水) 23:42:52.79:W3jESzak

書いてて思ったけどめんどくさくなってそれ以上考えなかった
デフォルトの名無しさん [sage] 2018/12/06(木) 01:36:29.15:Yn5Hc93r
Squeak/Pharo Smalltalk

| length N rand needle nCrossed |
length := 10000.
N := 1e7.
rand := Random new.
needle := LineMorph from: length / -2 @ 0 to: length / 2 @ 0 color: Color black width: 1.
nCrossed := 0.
N timesRepeat: [
| crossed |
needle rotationDegrees: 90 * rand next; center: 0 @ (length * rand next).
crossed := length negated @ 0 to: length @ 0 intersects: needle firstVertex to: needle lastVertex.
crossed ifTrue: [nCrossed := nCrossed + 1]
].
N / nCrossed asFloat "=> 3.142226273599298 "
デフォルトの名無しさん [sage] 2018/12/06(木) 01:57:54.87:CjS0UpEg
こういうプログラム面手するのつらいだろうな
デフォルトの名無しさん [sage] 2018/12/06(木) 02:09:23.51:7UXgAx11
Ruby
# length = 2; gap = 2
buffon_s = -> n {n.fdiv((1..n).count{rand < sin(rand(1e10))})}
p buffon_s[10**6]
# => 3.1421245789553063
755 [sage] 2018/12/06(木) 20:58:20.17:fqSvUjwD

需要はほぼなかったみたいだが、出題者コメントを

 答えだすのに必要なものだけに前処理で集計。今回必要なのは
 0-9数字使用の有無だけなので2^10に集約・集計できる( 50万→1024)
 この数になればあとは、二重ループで集計をすればいい。
 後半は集約にビットを使えば、popcountを使って簡潔に書けるパターン。

 想定解(python by pypy) ttp://https://ideone.com/bujm1x

 回答者さんとほぼ同じ。
 あえて相違点は、pythonのpopcount相当が意外と重かったので、
 前処理でテーブル化している。(高速に出れば、いらないはず?)


 ※制約の50万と1.5秒は、素の(標準だけの)pythonに合わせている。
  (このコードも素のpythonだと、例題6)だけで0.8秒くらい)
デフォルトの名無しさん [sage] 2018/12/06(木) 21:56:29.19:QyI+7EvW

from collections import Counter
でもうちょっと楽できる
デフォルトの名無しさん [sage] 2018/12/07(金) 15:14:44.93:wiJMm9Hc

蛇足的改良?してみた(一応C++だが殆どC)
ttp://https://pastebin.com/dRM2yC3e
デフォルトの名無しさん [] 2018/12/07(金) 22:19:34.17:x8xNXHP3
お題
1,3,4,6,7,9,10,12,…
のように1から始まり奇数, 奇数,偶数,偶数,
奇数,奇数,偶数,偶数…と続く場合2019番目はいくつになるか
デフォルトの名無しさん [sage] 2018/12/07(金) 22:30:34.68:avhY9emJ
floor(2019 * 1.5)
デフォルトの名無しさん [sage] 2018/12/07(金) 22:32:31.84:avhY9emJ
結果書いてなかった
3028
デフォルトの名無しさん [sage] 2018/12/07(金) 22:35:02.23:avhY9emJ
計算量的に整数の乗算とシフト演算だけの n * 3 >> 1 のほうが良いか
デフォルトの名無しさん [sage] 2018/12/07(金) 22:38:48.18:xSpw6JJG
Ruby
f = -> n {a, b = n.divmod(4); 6 * a + 2 * b + 3 / (b + 2)}
p f[2019]
# => 3030
デフォルトの名無しさん [sage] 2018/12/07(金) 22:47:23.26:avhY9emJ

1が0番目で計算してね?
ttp://https://ideone.com/8B4VVN
デフォルトの名無しさん [sage] 2018/12/07(金) 22:48:51.29:xSpw6JJG

あー本当だ
しかも n * 3 >> 1 でよかったんだね
デフォルトの名無しさん [] 2018/12/08(土) 03:40:55.13:xmV4OmOO

Kotlin
ttp://https://paiza.io/projects/IrRQGqJSJL8lVYGlBueZDw
デフォルトの名無しさん [sage] 2018/12/08(土) 08:09:08.92:JIGsOpwq
第n項=3n/2+(-1)^n/4-1/4
デフォルトの名無しさん [sage] 2018/12/08(土) 09:20:01.90:vpfNpx82
プログラミング初心者なんですがJavaを覚えるのに良い課題下さい
言語の本は一冊読みました
デフォルトの名無しさん [] 2018/12/08(土) 09:29:35.75:5PBkTMHJ
Winならtypeコマンド(LinuxとかUnix系だとcat)と同じ機能を自作してみるとか、行番号も表示するようにするとかから始めては?
デフォルトの名無しさん [] 2018/12/08(土) 09:53:44.58:Mku3deOK

f=:+/@$&1 2

f 2019
3028
デフォルトの名無しさん [] 2018/12/08(土) 09:59:51.42:Mku3deOK

言語はJ
781 [sage] 2018/12/08(土) 12:53:06.37:JIGsOpwq
整数計算オーバーフローが発生していたのを修正
ttp://https://pastebin.com/FAzjRJn5
デフォルトの名無しさん [] 2018/12/08(土) 15:30:02.59:dsjig1JQ
お題:N×Nの盤面に石を置いていく。
どの4つの石も同一円周上に乗らないようにする場合、最大何個配置できるか?
ただし、一直線上に並ぶ配置は半径∞の円周上と考える。

N=3 => 5
N=4 => 7
5 => 9
6 => 11
9 => 18
デフォルトの名無しさん [] 2018/12/08(土) 17:29:13.00:xmV4OmOO

問題の意味がわからない。図とか描いてくれ。
デフォルトの名無しさん [sage] 2018/12/08(土) 17:33:47.41:kCA+QhwE

石の大きさはゼロで格子点とでも考えればいいのかな
デフォルトの名無しさん [sage] 2018/12/08(土) 17:36:28.60:m52vxjN5
ああ共円か
有名なゲームだな
デフォルトの名無しさん [] 2018/12/08(土) 19:05:02.19:xmV4OmOO
共円でググってようやっとわかった。
デフォルトの名無しさん [sage] 2018/12/08(土) 19:37:58.42:xPmIyiBg

テトリス
デフォルトの名無しさん [sage] 2018/12/10(月) 02:09:47.01:3g7m60y1

1は0番目じゃなくて1番目だよね。念のため確認
デフォルトの名無しさん [] 2018/12/12(水) 02:35:41.59:84v7sPOJ
お題
2次元平面上で点(x,y)が点列(X1,Y1), (X2,Y2), ..., (Xn,Yn), (X1,Y1)を順に結んでできる多角形の内部にあるかどうか判定せよ
デフォルトの名無しさん [sage] 2018/12/12(水) 07:13:05.92:SVnAXs6w
どのような多角形をなすかの
仮定で方法も違ってくるだろうけど、
一般的な場合を視野に入れる限り
複数の数学ライブラリを組み合わせて
扱うソリューションパッケージ的なものに
なりそうでお題としてはなんだかなって感じ
デフォルトの名無しさん [sage] 2018/12/12(水) 08:10:30.84:3f3X1OW4

多角形の定義がひどい。
重なる事はあるのか、と、重なったときに内部はどうするのかとか。(抜けるのはめんどくさい)
重なってはいけないけど辺は突き抜けても良いのかとか。
描いた絵みたいな状態を許すかどうかでけっこう判定が変わる。
デフォルトの名無しさん [sage] 2018/12/12(水) 08:27:43.91:3f3X1OW4
多角形を三角形に分割して、
(x1,y1)→(x2,y2)のベクトルと
(x2,y2)→(x3,y3)のベクトルと
(x3,y3)→(x1,y1)のベクトルを
それぞれ、
(x2,y2)→(x,y)
(x3,y3)→(x,y)
(x1,y1)→(x,y)
と外積をとって、正負が一致したらその点は多角形内部にある。
重ならないなら三角形に分割、は、
1,2,3、2,3,4、3,4,5…と使う頂点をスライドさせていくだけで良いんじゃないかな?どっかで裏返るかな。
デフォルトの名無しさん [sage] 2018/12/12(水) 09:01:00.07:J4hfK+qs
また数学か。数学板が嫌なら紙とえんぴつでやってろ
デフォルトの名無しさん [sage] 2018/12/12(水) 09:21:43.03:YlPyc4+b
ポリゴンで塗り潰してその色になれば真
デフォルトの名無しさん [sage] 2018/12/12(水) 11:12:59.34:3f3X1OW4
数学になるの?
俺CAD関連と3DCG関連でこういうの書くけどな。
コード書こうと思って出題者に問うたつもりだけど。。
証明出来てないコード書いても無意味なんだから先にロジック書いたつもり。

ってかどうして数学?っぼい問題が嫌われるの?
脳筋コードが良いってこと?
デフォルトの名無しさん [sage] 2018/12/12(水) 11:17:02.00:rSdIoMBA
Ruby 与えられるのは凸多角形のみとし、頂点は反時計・時計回りのいずれかで与えられるものとする

def diff(a, b); a.zip(b).map{|i, j| i - j}; end
def in_triangle?(p, a, b, c)
  ap, ab, ac = [p, b, c].map{|v| diff(v, a)}
  det = ab[0] * ac[1] - ab[1] * ac[0]
  s = (ac[1] * ap[0] - ac[0] * ap[1]) / det
  t = -(ab[1] * ap[0] - ab[0] * ap[1]) / det
  [s, t].all?{|e| (0..1).include?(e)} && s + t <= 1
end
def in_con_polygon?(p, *vers)
  vers[1..-1].each_cons(2).any?{|v1, v2| in_triangle?(p, vers[0], v1, v2)}
end

# 原点を左下の頂点とする長さ1の正方形の内部に(0.5, 0.5)は含まれるか
p in_con_polygon?([0.5, 0.5], [0, 0], [1, 0], [1, 1], [0, 1])
# => true
p in_con_polygon?([1.76, 1.75], [0, 0], [3, 0], [2, 1.5], [1, 2.5], [0, 3])
# => false
デフォルトの名無しさん [sage] 2018/12/12(水) 11:40:32.38:rSdIoMBA
問題を勘違いしてたので一部修正
凸多角形でなくてもOK 順番も結ぶ順でOK
ただしの星型の内部は多角形には含まれないとする

def in_con_polygon?(p, *vers)
  vers[1..-1].each_cons(2).count{|v1, v2| in_triangle?(p, vers[0], v1, v2)}.odd?
end
デフォルトの名無しさん [sage] 2018/12/12(水) 11:56:39.21:3f3X1OW4
ベクトル係数の解法も綺麗だな。式も少ないし素晴らしいと思う。
デフォルトの名無しさん [sage] 2018/12/12(水) 12:12:03.42:SeAXRl2+
Java
ttp://https://ideone.com/xJBcjx
わかんねーので言語任せw

non_zero: の星型の内部も多角形に含まれる
even_odd: の星型の内部は多角形に含まれない
デフォルトの名無しさん [sage] 2018/12/12(水) 12:14:30.79:ygJIxGmd

このスレには解答者側に数学ができない人がいて、そういう人が文句を言ってる
かく言う俺も数学できないが文句は言わない
デフォルトの名無しさん [sage] 2018/12/12(水) 14:03:01.24:FdJbiO2G
数学の問題集から拾ってきただけみたいな雑な出題が叩かれてるんじゃなかったのか
問題文自体に不備があってそこを詰めるのが主になってしまうパターンもあるけど
デフォルトの名無しさん [sage] 2018/12/12(水) 14:49:36.03:GETLERsG
純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、という問題だったら、わざわざプログラム板でやる面白味はないなあと思う。
数学的に解いても、その後コードに起こす際にプログラミング固有の工夫とか言語による違いが見られるような物だと興味深い。
個人的な感想です。
デフォルトの名無しさん [] 2018/12/12(水) 15:01:41.06:LIx8RHBs
集合論的なのをリスト使うのと配列使うのだったら違いもあるだろうけど、
そういう問題出ないね。

A∪B := {x | x ∈ A ∨ x ∈ B}

はHaskellだと仮にx が{1,2,3,4,5,6,7,8,9,10}の要素で、Aが{3,4,5,6}、Bが{5,6,7,8}なら

setX = [1..10]
setA = [3..6]
setB = [5..8]

[x | x <- setX, x `elem` setA || x `elem` setB]
(Haskellは変数名の初めに大文字使えない)

これがCで配列縛りだとreallocでも使いながらなんじゃろか。。。
◆QZaw55cn4c [sage] 2018/12/12(水) 20:48:43.83:5ElL+qNp

>純粋に数学だけで解けて解法の式を作ったら、あとはコードにベタ書きしてただ解を出力するだけ、
それは甘い、大甘だと私の経験は私の心に語ってくれています
◆QZaw55cn4c [sage] 2018/12/12(水) 20:49:58.51:5ElL+qNp

そういう問題はある種の順序関係を仮定してインプリメントしたいところです
デフォルトの名無しさん [sage] 2018/12/12(水) 23:47:12.93:V5rMC+dN
Smalltalk

| X A B |

X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.

X select: [:x | (A includes: x) or: [B includes: x]]

ttp://https://ideone.com/XSlcVz
デフォルトの名無しさん [sage] 2018/12/13(木) 00:26:45.67:ilwXN+sT
Squeak/Pharo Smalltalk

| X A B |

X := 1 to: 10.
A := 3 to: 6.
B := 5 to: 8.

X intersection: (A union: B) "=> #(3 4 5 6 7 8) "
デフォルトの名無しさん [sage] 2018/12/13(木) 01:00:05.58:vQDTFPB2
Ruby

x, a, b = [*1..10], [*3..6], [*5..8]
p x & (a | b)
# => [3, 4, 5, 6, 7, 8]
デフォルトの名無しさん [sage] 2018/12/13(木) 09:40:48.46:wBrOfppZ

c
ttp://https://ideone.com/YkmUdB

c++
ttp://https://ideone.com/WXXvlU
デフォルトの名無しさん [sage] 2018/12/15(土) 18:26:25.25:RxHR1YVb
お題:標準入力から読み取った行を出力せよ
ただし42を読んだ場合は出力せずに終了する
ttp://https://ideone.com/vdWddB
デフォルトの名無しさん [sage] 2018/12/15(土) 18:51:24.63:Hf86DN+J

ruby -pe'~/^42$/&&exit'
デフォルトの名無しさん [] 2018/12/15(土) 20:46:54.11:Du8iBFv1
Common Lisp
ttp://https://ideone.com/QQzEQh

read-lineの第三引数にnil以外を使ったの初めてだ
デフォルトの名無しさん [sage] 2018/12/15(土) 23:34:07.15:2jxK776v

bash
ttp://https://paiza.io/projects/gIZdCMpBEoNvFnnjVvGGtA
デフォルトの名無しさん [sage] 2018/12/15(土) 23:59:19.52:QTag+jm2
PowerShell
while (($var = (Read-Host)) -ne 42) { $var }
デフォルトの名無しさん [sage] 2018/12/16(日) 03:36:20.47:X+FaDx+z

python 3
ttp://https://ideone.com/it2Axq
デフォルトの名無しさん [sage] 2018/12/16(日) 13:54:15.20:ob8ozoeg
[お題] 来年と素数
今年も残りわずか、来年は2019年で平成31年。

1)"2019"の省略形の"19"について。
 素数の和で19を作る、すべての素数配列を列挙せよ(できれば辞書順で)。
 同じ素数を何個使ってもよいが、同じ素数同士は区別しない。
 ・例えば対象が"11"だと以下の6つ
 {2, 2, 2, 2, 3}
 {2, 2, 2, 5}
 {2, 2, 7}
 {2, 3, 3, 3}
 {3, 3, 5}
 {11}


 以下 2)3)4)は種類計のみ答える(明細は多いので略)。
2)来年の初まりは平成31年で、"31"について。
 素数の和で31を作る、その種類はいくつか。条件は1)と同様。

3)素数の和で2019を作る、その種類はいくつか。条件は1)と同様。

4)2019と31を続けた数 201931(=2019*100+31)について。
 素数の和で201931を作る、その種類はいくつか。
 但し、使用していい素数は31以下の素数かつ、
 同じ素数は最大2019個までしか使えない。同じ素数は区別しない。

 ※ 3)4)は64bit整数を超えるので、下10桁だけの回答も可。
◆QZaw55cn4c [sage] 2018/12/16(日) 14:12:11.90:IjCemHtZ

年忘れ課題の時期になったんですね…
デフォルトの名無しさん [sage] 2018/12/16(日) 19:04:23.02:P931WLXH
Java
ttp://https://ideone.com/LgkDWF
あってんのかなー
830 [sage] 2018/12/16(日) 19:54:33.15:GrZg6kve


2)の31からして自分のと違う。
自分のでは111だった。

javaのやついじって、112個の明細を出してみたら、[2,2,27] があった。
27は素数じゃないよね。いじり方が悪い?
デフォルトの名無しさん [sage] 2018/12/16(日) 19:56:19.00:pjubjjb0

自分も31は111だったわ
デフォルトの名無しさん [sage] 2018/12/16(日) 20:37:34.86:VvrWecHB
Ruby 1)は省略

require 'prime'

def fuge(n, cand = Prime.to_a(n), h = {}, succ = 0)
c0 = cand[0]
return h[[n, c0]] if h[[n, c0]]
return 0 if n == 0 || !c0 || n < c0
return 1 if n == c0
x = succ == 2019 ? 0 : fuge(n - c0, cand, h, succ + 1)
h[[n, c0]] = fuge(n, cand[1..-1], h) + x
end

p fuge(19) # => 23
p fuge(31) # => 111
p fuge(2019) # => 576202207044176168646563
p fuge(201931, Prime.to_a(31)) # => 4021686887140718864271667825968903
デフォルトの名無しさん [sage] 2018/12/16(日) 20:50:18.98:P931WLXH

まじだ・・・修正した
犯人は118行目だ!orz
830 [sage] 2018/12/17(月) 20:45:38.05:4p2KDXiR
836
 当方の回答と一致しました。


4) 201931 だけ異なる(自分のがあっているとは限らないが……)。
※再帰の動きがよくわからない
830 [sage] 2018/12/20(木) 20:26:37.78:W0v1JICZ
 python ttp://https://ideone.com/OFR7bn

 間が空いたので、出題者コメント

 1)問題文説明用に書いてみて、問題にもできると思った。

 2)3)は"オイラー 31 DP"でググってください。
 違いはコインの額面が素数に変わったくらいと、おおきさ。
 なかには一つ一つ数えて、本問の2)しか溶けない回答があるので見分けて。

 4)については、ソース上三種類書いて考察しています。
  ("201931"という変な数値は、3重ループ解を落とすのが目的だった)
デフォルトの名無しさん [sage] 2018/12/21(金) 08:20:43.27:hMEdBbLv
お題:
真理値表から2入力NANDで最小ゲート数回路を作れ。実用上最も重要な問題群
デフォルトの名無しさん [sage] 2018/12/21(金) 08:38:52.94:choQhZIj
遅延時間とかファンアウトとかは考慮不要ってことでいいのかな
デフォルトの名無しさん [] 2018/12/22(土) 11:29:36.65:7UfbjIEE
参考にどうぞ
ttp://https://eng.kice.tokyo/logic/logic_ex3/
◆QZaw55cn4c [sage] 2018/12/22(土) 16:28:53.58:vmp1HvU+

昔カルノー図がかける範囲(3入力?4入力くらいだったかな?)で簡約化ツールを作ったことがあります
当時は書き捨て上等、でやっていたのですが、今は困ってしまっています、当時のプログラム記述能力は当時は今後もずっと保存されるものと当時は考えていたのですが、それは完全な誤りでした…
デフォルトの名無しさん [sage] 2018/12/23(日) 16:48:28.85:V9Fp8lZV

俺全然わかってない人なんだけど、
そのURLの一番下の、入力部分のNOTゲートを無視しない場合、
9個のNANDゲートで構成できるって書いてあるけど、
NOTゲートの部分を2個減らして7個で作るとかはあかんのん?
デフォルトの名無しさん [sage] 2018/12/23(日) 16:56:13.54:jMuRFGAa
半導体製造のコストがある
NANDゲートは作り易い、というか造りが簡素で単純
NOTゲートも作り易い

なので厳密には製造コストも考えないといけない
デフォルトの名無しさん [sage] 2018/12/23(日) 17:29:24.88:gPP7+XoH

ホントだ、AとCのNOTを一つずつ減らせるね
というかこれが最小になる保証もないよね
デフォルトの名無しさん [sage] 2018/12/23(日) 18:34:59.46:m1FIlPHW

カルノー図からの簡略結果が最終形ではない。
最終形は
Z=~ABC+A~C+~BC
デフォルトの名無しさん [sage] 2018/12/23(日) 21:11:36.62:9AXglOVX

それA=0, B=0, C=0の結果から間違ってるんだが
デフォルトの名無しさん [sage] 2018/12/23(日) 23:39:28.74:DR7zt9Cz

うむ

最終形は
Z=~ABC+A~C+~B~C
ですね

2入力NAND回路は
Step 9, Solution 1

0 : -1, -1: 0, 0, 0, 0, 1, 1, 1, 1

1 : -1, -1: 0, 0, 1, 1, 0, 0, 1, 1

2 : -1, -1: 0, 1, 0, 1, 0, 1, 0, 1

3 : 0, 0: 1, 1, 1, 1, 0, 0, 0, 0

4 : 3, 1: 1, 1, 0, 0, 1, 1, 1, 1

5 : 4, 2: 1, 0, 1, 1, 1, 0, 1, 0

6 : 5, 2: 1, 1, 1, 0, 1, 1, 1, 1

7 : 5, 4: 0, 1, 1, 1, 0, 1, 0, 1

8 : 7, 6: 1, 0, 0, 1, 1, 0, 1, 0

ともう一つでした。
デフォルトの名無しさん [sage] 2018/12/24(月) 08:22:13.10:bL5ZoHRn

> Z=~ABC+A~C+~B~C
それA=0, B=1, C=0の結果が違うぞ
デフォルトの名無しさん [sage] 2018/12/24(月) 11:32:09.70:7aEQUcJ6

~ABC → C=0なので0
A~C → A=0なので0
~B~C → B=1なので0
結果0であってるんじゃないのん?
デフォルトの名無しさん [sage] 2018/12/24(月) 13:42:11.05:bL5ZoHRn

すまん、合ってるわ
ちょっとボケてたな
デフォルトの名無しさん [sage] 2018/12/26(水) 16:33:56.35:GYS6kcBm

wxMaximaでお絵描きした。
/* [wxMaxima: input start ] */
load (graphs)$
gg() := draw_graph(
net,
show_weight=true,
vertex_size=3,
show_id=true,
show_vertices=[0,1,2,8],
show_vertex_type=filled_square,
head_length=0.2,
head_angle=5,
edge_color="dark-green",
text_color=blue
);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
Solution[1]:[[[ 0, 3],2],[[ 3, 4],1],[[ 1, 4],1],
[[ 4, 5],1],[[ 2, 5],1],[[ 5, 6],1],[[ 2, 6],1],
[[ 5, 7],1],[[ 4, 7],1],[[ 7, 8],1],[[ 6, 8],1]]$
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
aa:1$ for g:aa thru 1 do (
net : create_graph(9,Solution[g],directed=true),
print("Solution",aa,Solution[g]),aa:aa+1,
gg());
/* [wxMaxima: input end ] */
デフォルトの名無しさん [sage] 2019/01/06(日) 20:37:20.68:uX30aAuK
エモい歌うまバーチャルユーチューバー
ttp://https://script.google.com/macros/s/AKfycbxuAt1ejx43_zMRfK7Xplwgwn7cXDQAdZTJkDdLrVCLo8SIdhI/exec

今、見られている話題のVtuberを知りたいなら、ハルカス式Vtuberランキングを見ましょう
【ハルカス式Vtuberランキング】※毎週・毎月自動更新
ttp://https://script.google.com/macros/s/AKfycbzZO93mJcZ5M_dPmIZOzuVQNr4mcGwQQdiT7GiLld_1Uews7uE/exec

年末年始の一週間12/27〜01/02までのハルカス式Vtuberランキング
ttp://https://docs.google.com/spreadsheets/d/1jdVQ2r5yTrAykMRF1nuX6_5DXpK0167D4JcVCQZTJdM/edit#gid=157464142

年末の一ヶ月12/1〜12/31までのハルカス式Vtuberランキング
ttp://https://docs.google.com/spreadsheets/d/1Yc6HD_h4lfurme9b3T0ZXBf2-iBpFSmMGg-1bdgSe0E/edit#gid=1971024984

第4回バーチャルYouTuber人気投票募集中(全304名、2018年11月23日〜)

あなたの好きなVtuberは?5問(配信内容、トーク、歌うま、ゲーム実況、キャラデザ)
ttp://https://script.google.com/macros/s/AKfycbwSwNBm8qYD4_kZN2uJLeqRIP8Mwpbo3YDTUEpaSMU02BDAR3jh/exec

・Googleフォームは標準仕様では不正投票が可能な為、改造して対策を行いました。
・2018/11/23時点でチャンネル登録数10,000人以上のuserlocalに登録されたVtuberを対象としています。
・一つのチャンネルでVtuberが複数人いる場合は、それぞれ分けています。
・このフォームに投票するにはグーグルアカウントでログインする必要はありません。
・並び順は前回の得票数の高い順と新人は登録者数の多い順に並んでいます。
・今回も1,000人の方が投票するまで継続します。

なお投票結果はスプレッドシートにリアルタイムで表示されるようにしました。
また【概要】と【詳細】でシートを分けております。
ttp://https://docs.google.com/spreadsheets/d/1udB81Vnia9CoIgPaan3a5XFeaCfcnBXkRoPTuxvRpAc/

grげrげ
デフォルトの名無しさん [] 2019/01/18(金) 22:48:43.15:sD1souQd
あげ
デフォルトの名無しさん [] 2019/01/19(土) 05:22:33.88:M8Q3zGyy
過疎ってるので別スレのこれをお題にする。
なお、クラスではなく関数でもサブルーチンでも良い。

ttps://mevius.5ch.net/test/read.cgi/tech/1544839627/332

332 デフォルトの名無しさん (ワッチョイ f11f-t+p0) sage 2019/01/18(金) 22:57:58.37 ID:1ZiD/8V00
文字列から数字をtmpWとtmpHに抜き出すクラスを作りたいのですがどうしたらいいですか?
演算子記号は+−もある、数字の桁数は不明で小数点もあり、数字が入るときは小文字一字始まり、引数はw or hで抜き出す戻り値を示す。


対象文字
@w900×HH
AWW×h1000
BWW×HH
Cw900/h100
結果 引数がwなら左  hなら右
@tmpW=900 tmpH=WW
AtmpW=WW tmpH=1000
BtmpW=WW tmpH=WW
CtmpW=900 tmpH=1000
デフォルトの名無しさん [sage] 2019/01/19(土) 08:17:19.40:9NMu+pMT
お題スレじゃなくて、あなたの宿題無料でやりますよになってる
デフォルトの名無しさん [] 2019/01/19(土) 09:54:02.71:9IabhBF0
Ruby
f = -> str {str.scan(/([A-Z]{2}|[a-z])((?:\d+\.)?\d+)?/).each_with_object({}){|(m, num), h| h["tmp#{m[0].upcase}"] = !num ? ' ' : num.match?(/\./) ? num.to_f : num.to_i}}

%w[
  w900×HH WW×h1000 WW×HH w900/h100 w3.14/h2.72
].each{|e| h = f[e]; puts "#{e} -> " + h.map{|v| '%s = %p' % v}.join(', ')}
# =>
w900×HH -> tmpW = 900, tmpH = " "
WW×h1000 -> tmpW = " ", tmpH = 1000
WW×HH -> tmpW = " ", tmpH = " "
w900/h100 -> tmpW = 900, tmpH = 100
w3.14/h2.72 -> tmpW = 3.14, tmpH = 2.72
デフォルトの名無しさん [sage] 2019/01/19(土) 12:58:12.91:XYN5JTgF
> CtmpW=900 tmpH=1000
デフォルトの名無しさん [] 2019/01/19(土) 15:20:58.20:M8Q3zGyy

お題をやるかどうかは自由だし使う言語も自由なのでここは宿題向きスレではない。それに宿題用のスレは別にある。
デフォルトの名無しさん [] 2019/01/20(日) 17:00:10.01:XepLmY3z
お題
チェス盤をかく

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
デフォルトの名無しさん [sage] 2019/01/20(日) 17:28:18.15:bv4HmLR/
for i in range(4):
print("□■□■□■□■")
print("■□■□■□■□")
デフォルトの名無しさん [sage] 2019/01/20(日) 18:45:01.40:vla32kuj
console.log(`
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
`);
デフォルトの名無しさん [sage] 2019/01/20(日) 19:21:05.18:QLQt0ffh

85kg 170cmの俺がJavascriptで回答。
[85, 170]
.map(d => [...d.toString(2).padStart(8,0)]
.map(b => +b ? '□' : '■')
.join`` + '\n')
.join``
.repeat(4)
デフォルトの名無しさん [sage] 2019/01/20(日) 19:39:43.28:CUY2SNg1
Ruby

puts 72.times.map{|i| i % 9 / 8 * 10 + 15 / (i % 9 + 8) * (i & 1 ^ 9633)}.pack('U*')
# =>
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
デフォルトの名無しさん [sage] 2019/01/20(日) 19:45:27.08:z2xvgkTe


お前ら天才だな
普段何やってんの
デフォルトの名無しさん [sage] 2019/01/20(日) 19:58:44.02:vla32kuj

ヒマ人どもの公開オナニーに騙されるな。
ベンチ取ってみれば分かるけど
よりのほうが処理速度も速く、CPU、メモリ消費も勝ってる。
デフォルトの名無しさん [sage] 2019/01/20(日) 22:22:45.08:n75q6Hj+
解法や工夫は色々あっていい
デフォルトの名無しさん [sage] 2019/01/20(日) 23:40:01.19:3oCDYmJz

可読性も最強だしなw
デフォルトの名無しさん [] 2019/01/21(月) 00:16:11.01:evkqklOK
前々からつくろうとしていまだ決定版ができてないのがある。
コマンド fileA fileBで、重複行を除いて連結と、
A-Bで重複行を除くやつ。入力が数百Mだときつい。
デフォルトの名無しさん [] 2019/01/21(月) 00:20:48.31:q5TMCwho
きついのは口臭だけにしとけよ
デフォルトの名無しさん [sage] 2019/01/21(月) 04:33:49.89:ZCrWhalc

Linux とかでよく使われるシェル(bash とか)ならこんな感じだろうな。

( uniq fileA ; uniq fileB ) > fileC

シェルスクリプトにするならこんな内容のファイルを作ってそれの実行パーミッション立てておくだけ。

#!/bin/sh
uniq $1
uniq $2

ようするに uniq コマンド使ってるだけ。

Windows でも似たようなものはあるかも知れないが WSL 入れて Ubuntu とか動かしちゃった方が何も考えずに Linux 風にできるので楽かも知れない。
/mnt/c/ にCドライブマウントされてるからファイルのやり取りを考える必要もない。
改行が LF なのとデフォルトのエンコーディングが UTF-8 なのは考慮する必要があるが。
デフォルトの名無しさん [] 2019/01/21(月) 07:09:30.84:evkqklOK
そんな機能あったっけ、と確認したみたけど意図する動作しない、連続しない重複も対象



Linuxコマンド集 【 uniq 】 ソート済みのファイルから重複した行を削除する
ファイルで重複している行を削除する。ただし,ファイルはソートしてある必要がある
ttp://https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230918/


連続していない離れた重複行も削除したければ、sortコマンドコマンドで予めソートする必要がある。その代わり順番は保存されない。
ttp://https://hydrocul.github.io/wiki/commands/uniq.html
デフォルトの名無しさん [sage] 2019/01/21(月) 08:10:55.04:rd0KMO5T
要するにAの末尾とBの先頭で一致するとこだけを削除したいってこと?
デフォルトの名無しさん [] 2019/01/21(月) 08:19:59.40:evkqklOK
2つあって。
一つは連結した単一ファイルで、後方にある重複行を取り除く。
もう一つはBに存在する行を取り除いたAの重複行を取り除く。
それぞれuniq拡張(A+B) 、uniq拡張(A-B)のような。
デフォルトの名無しさん [] 2019/01/21(月) 09:47:36.96:evkqklOK
スクリプトやめてC++でやってみたら
ロードと書き込みの速度とほぼ同程度でできるようだ。
デフォルトの名無しさん [] 2019/01/21(月) 11:56:42.83:ub5sAEWO
J
}:("1) 8 9 $ '_#'

_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
#_#_#_#_
デフォルトの名無しさん [sage] 2019/01/21(月) 13:07:07.09:jV3tC4jb
JってUnicode使えないの?
デフォルトの名無しさん [] 2019/01/21(月) 13:14:23.06:ub5sAEWO
使えるんだけど私の方が勉強不足で。
デフォルトの名無しさん [] 2019/01/21(月) 14:03:05.80:chW+Guj1

Perl
ttp://https://paiza.io/projects/06iuVCc-HeWgTb7j2TrTMQ
デフォルトの名無しさん [sage] 2019/01/21(月) 14:14:22.79:P73TaUU+

A-Bの部分は
grep -x -v -f B A
でできるけど順序を保存したuniqはコマンドだけではできないのかな
デフォルトの名無しさん [] 2019/01/21(月) 18:14:39.49:chW+Guj1
そういうコマンドを別途作るか、全部作っちゃうかかな。
デフォルトの名無しさん [sage] 2019/01/21(月) 21:03:38.83:mEBdwP2z
Ruby なら、ハッシュで重複行を排除できる。
ARGF は、a.txt b.txt (ARGV)を連結した、仮想ファイル

ruby script.rb a.txt b.txt

以下は、script.rb の内容

hash = { }

ARGF.each_line { |line| hash[ line ] = true } # true には、特に意味がない

puts hash.keys

-- a.txt

a

b

-- b.txt
x

a


-- 出力

a
b
x
デフォルトの名無しさん [] 2019/01/21(月) 21:49:42.62:QH90tNLy
速度出るのできた。CRCと文字列長のハッシュしかみてなく重複らしいのはduplicate.txtへ。


標準出力
deldup.exe fileA fileB ・・・ はマージして重複削除
deldup.exe /D fileA fileB ・・・ はA -B -・・・の重複削除
ttp://https://ideone.com/ABJNAy
デフォルトの名無しさん [sage] 2019/01/21(月) 22:56:33.96:uToUSKRf
octave
ttp://https://ideone.com/KyX1rR
デフォルトの名無しさん [sage] 2019/01/21(月) 23:04:52.30:PFiT+1XJ

Javaはunsignedの概念がない
デフォルトの名無しさん [sage] 2019/01/22(火) 02:53:38.24:t1xtxA/a

後方にある重複業削除なら awk で連想配列(要するにハッシュ)使ってこんな風にすればできるな。

awk '{if(!n[$0]){n[$0]=1;print}}' fileA fileB

ただし全行をメモリ上に置くことになるのでファイルがでかいとまともに動かない環境があるかも。

超大きいファイルの場合は行ごとに MD5 や SHA1 等のハッシュ値計算してそれだけ保管しておいて比較した方が良いかもね。
デフォルトの名無しさん [] 2019/01/22(火) 10:22:28.48:f5q/almD
Lua
for i=1,72 do
if i%9==0 then
print("")
else
io.write(({"■","□"})[i%2+1])
end
end
デフォルトの名無しさん [sage] 2019/01/22(火) 11:22:34.61:ez/DcBYq
普通に行ごとにソートして重複を除去すればいいだけやん
デフォルトの名無しさん [sage] 2019/01/22(火) 12:39:35.18:bOf9tfZi
javascript
[...function*(){for(var i=0;i<64;i++)yield (i&7)==7?'\n':'■□'[i&8?i%2:+!(i%2)]}()].join``
デフォルトの名無しさん [] 2019/01/22(火) 12:48:37.38:J1mDHp9Y

順序変えなくないんだって。
デフォルトの名無しさん [] 2019/01/22(火) 18:32:37.01:f5q/almD
Ruby

puts (["□■"*4,"■□"*4]*4)
デフォルトの名無しさん [sage] 2019/01/22(火) 18:48:04.82:bOf9tfZi

J分からない人向け解説キボンヌ
デフォルトの名無しさん [sage] 2019/01/22(火) 22:15:16.89:4TOwjU0o
javascript
['□■', '■□'].map(s => s.repeat(4) + '\n').join``.repeat(4)
デフォルトの名無しさん [] 2019/01/24(木) 21:04:14.42:HE3o+0uB
Lua
print (((("_#"):rep(36)):gsub("(........).","%1\n")))
デフォルトの名無しさん [sage] 2019/01/24(木) 22:20:43.56:HLNzgCZV
javascript
Array(72).fill().map((v, i)=>i%9?'■□'[i%2]:'\n').join``

はボード横幅が7になってる間違いでしたごめんなさい。
デフォルトの名無しさん [] 2019/01/25(金) 20:09:30.47:s1700d1K
お題
n個からr個選ぶ組み合わせの個数を求める
デフォルトの名無しさん [sage] 2019/01/25(金) 22:06:56.43:7NAKvkXa
数学の問題が叩かれるのはここのアホどもには難しいからなんだ!
決してスレ違いだからじゃないんだ!
だから高校1年の教科書の定義引き写すだけの簡単な問題なら叩かれないんだ!
デフォルトの名無しさん [sage] 2019/01/25(金) 22:30:26.19:oIz/D2lY
教科書捨てたから定義ググりました。
const p = (n, r) => (n < 2 || r < 1) ? 1 : n * p(n - 1, r - 1);
const c = (n, r) => p(n, r) / p(r);
c(1200, 100);
//=> 1.2734481790871909e+148

chromeでBigInt実装されてるのでせっかくだからと思ってpを
const p = (n, r) => (n < 2n || r < 1n) ? 1n : n * p(n - 1n, r - 1n);
に改良しようとしたらエラーでる…
なんでか分かる方いたら教えてください。
デフォルトの名無しさん [sage] 2019/01/26(土) 03:39:53.55:mo79YSSI
Ruby

c = -> (n, k, m = []) {
  m[n] = [1] unless m[n]
  k = n - k if n < k * 2
  return m[n][k] if m[n][k]
  m[n][k] = c[n - 1, k - 1, m] + c[n - 1, k, m]
}

p c[5, 2] # => 10
p c[100, 50] # => 100891344545564193334812497256


undefined - 1n でエラーが起きているので
const c = (n, r) => p(n, r) / p(r, r);
デフォルトの名無しさん [] 2019/01/26(土) 03:52:04.18:NFcmjJe3

効率はともかく、関数プログラミングって本でこれ見た時は感動したな。(言語は数学とSMLを合わせた仮想言語だったが)

Haskell

c n 0 = 1
c n m |n == m = 1
c n m = c (n - 1) m + c (n - 1) (m - 1)

実行結果
5 `c` 3
>10
デフォルトの名無しさん [] 2019/01/26(土) 04:12:24.35:NFcmjJe3
高校の教科書版

Haskell

c' n r = product [1..n] `div` (product [1..(n - r)] * product [1..r])

解説
n C r
= n P r / r!
= n! / ((n - r) ! * r!) (n P r = n ! / (n - r)!に分解)
デフォルトの名無しさん [sage] 2019/01/26(土) 04:32:41.56:Ve68vOks

ありがとう!
恥ずかしい…
デフォルトの名無しさん [sage] 2019/01/26(土) 05:11:41.67:iYrqGgfh
C++
inline uint64_t gcd(uint64_t a, uint64_t b) {
uint64_t r;
while ((r = a % b) != 0) {
a = b; b = r;
}
return b;
}

uint64_t binomial(uint64_t n, uint64_t m) {
if (n < m)
return 0;
m = (m > n / 2) ? n - m : m;
uint64_t result = 1;
for (uint64_t i = 1; i <= m; i++, n--) {
uint64_t d = gcd(result, i);
result /= d;
result *= n / (i / d);
}
return result;
}
デフォルトの名無しさん [] 2019/01/26(土) 10:34:54.19:ls0y1m5K
Lua
function cc(n,r)
local a = 1
for i = 1, r do
a=a*(n-i+1)/i
end
return a
end
print(cc(20,10))

184756.0
デフォルトの名無しさん [sage] 2019/01/26(土) 11:22:21.12:tq46h9Ux
お題
複数の線分が平面上で重なりがあるかないかしらべる。
デフォルトの名無しさん [sage] 2019/01/26(土) 12:02:35.05:Owe/QLUY

@Mathematica

Table[If[EvenQ[i + j], 0, 1], {i, 8}, {j, 8}] //
 ArrayPlot[#, Mesh -> True] &
デフォルトの名無しさん [] 2019/01/26(土) 13:54:20.56:+oP10x+/

適当に連立方程式とくだけじゃなかったです?
数学出来ないんですけど。
デフォルトの名無しさん [] 2019/01/26(土) 14:10:31.09:t2YAFdPa
人狼AI と 人狼ゲーム
デフォルトの名無しさん [sage] 2019/01/26(土) 14:39:24.25:YRte2Dpq
Perl5
print ((qw{□■}x4, "\n", qw{■□}x4, "\n")x4);

実行結果
$ perl 12_860.pl
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
デフォルトの名無しさん [sage] 2019/01/26(土) 15:04:32.49:vn81VQ6e

Pharo Smalltalk
String cr join: ((1 to: 4) collect: [:i | {'□■' repeat: 4 . '■□' repeat: 4} ]) flattened
実行結果

□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
□■□■□■□■
■□■□■□■□
デフォルトの名無しさん [sage] 2019/01/26(土) 17:16:36.10:5cGQ6lSj
お題: マークダウン記法の見出しをHTMLに変換しなさい
デフォルトの名無しさん [] 2019/01/26(土) 18:50:28.91:OZN9QunV

rfo-basic

For i=1 To 44
m$=m$+Chr$((9622+Mod(i,2))*(Mod(i,9)<>0)+10)
Next
Print m$

End

プロは奇をてらわない。
bai 砂坊主
デフォルトの名無しさん [sage] 2019/01/26(土) 21:39:22.15:Ve68vOks
byでは?
デフォルトの名無しさん [sage] 2019/01/26(土) 21:56:29.11:lXnCadeF
レス古事記に構うなよ
デフォルトの名無しさん [sage] 2019/01/27(日) 00:46:03.01:EZ97VlcS

@Mathematica

セルオートマトン(ルール32)を使って、、

CellularAutomaton[32, {0, 1, 0, 1, 0, 1, 0, 1}, 8] //
 ArrayPlot[#, Mesh -> True] &
デフォルトの名無しさん [sage] 2019/01/27(日) 01:01:04.00:u288xi28

python3
[print("".join("■" if (x+y) % 2 else "□" for y in range(8))) for x in range(8)]
デフォルトの名無しさん [sage] 2019/01/27(日) 04:52:31.63:rwuNPA7J
C
for (int r = 0; r < 8; r++) {
  for (int c = 0; c < 8; c++) {
    printf((r + c) % 2 ? "■" : "□");
  }
  printf("\n");
}
デフォルトの名無しさん [sage] 2019/01/27(日) 06:36:29.52:rwuNPA7J
C
double abac = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);
double abad = (bx - ax) * (dy - ay) - (by - ay) * (dx - ax);
double cdca = (dx - cx) * (ay - cy) - (dy - cy) * (ax - cx);
double cdcb = (dx - cx) * (by - cy) - (dy - cy) * (bx - cx);
return (abac * abad < 0 && cdca * cdcb < 0);
デフォルトの名無しさん [sage] 2019/01/27(日) 06:44:59.11:mVMeZ4rl

直線じゃなくて線分だぞ
デフォルトの名無しさん [sage] 2019/01/27(日) 06:46:02.03:z0hosMYm
javascript(es2018 regexネームドグループのため)
const atxMatcher = line => line.trim().match(/^(?<directive>\S*)[ \t]+(?<contents>.*)/)
const atxRules = [{
name: 'HnTag',
regex: /^#{1,6}/,
process: (hnDirective, hnContents) => {
const hnEl = document.createElement('h'+ hnDirective.length)
hnEl.textContent = hnContents
return hnEl.outerHTML
}
}]
const makeHtml = line => {
const atxMatch = atxMatcher(line)
if (!atxMatch) return line
const {directive, contents} = atxMatch.groups
let tag
for (const rule of atxRules) {
const directiveMatch = directive.match(rule.regex)
if (directiveMatch) {
tag = rule.process(directiveMatch[0], contents)
break
}
}
return tag ? tag : line
}
`# aaa
##\tbbb
###### \t ccc
################ ddd
`.trim().split`\n`.map(makeHtml).join``
結果:
<h1>aaa</h1><h2>bbb</h2><h6>ccc</h6><h6>ddd</h6>
デフォルトの名無しさん [sage] 2019/01/27(日) 08:20:11.42:rwuNPA7J

線分ですよ
デフォルトの名無しさん [sage] 2019/01/27(日) 11:17:31.03:/cT7Kgd3

> return (abac * abad < 0 && cdca * cdcb < 0);
return (abac * abad <= 0 && cdca * cdcb <= 0);
端点も含まんとあかんのとちゃう?
デフォルトの名無しさん [sage] 2019/01/27(日) 12:22:09.16:rwuNPA7J
重なりの定義によるかも
接しているのは重なりなしとしました
デフォルトの名無しさん [sage] 2019/01/27(日) 12:42:45.94:rwuNPA7J
と思ったけど=ありのが正解でした
デフォルトの名無しさん [] 2019/01/27(日) 13:15:46.24:4tSdie01
お題
半径が整数の3つの円ある。
どの円も他の2つの円に外接している。
3つの円の中心点を結んでできる
三角形がピタゴラスの三角形に
なる場合の3つの円の半径を
100未満についてすべて求める。
例えば3つの円の半径が1,2,3の時
辺の長さが3,4,5のピタゴラスの
三角形ができる。
デフォルトの名無しさん [sage] 2019/01/27(日) 13:54:53.07:wgzaqL4l
C++
ttp://https://ideone.com/TvwEx3
デフォルトの名無しさん [sage] 2019/01/27(日) 14:02:09.42:/cT7Kgd3
Java
ttp://https://ideone.com/vHvOJu
デフォルトの名無しさん [sage] 2019/01/27(日) 14:08:22.33:u288xi28

python3
ttp://https://ideone.com/PPyoFC
デフォルトの名無しさん [sage] 2019/01/27(日) 14:21:11.01:/cT7Kgd3

しまった…半径100未満なのに100まで調べてるw
> r(20, 30, 100) = p(50, 120, 130)
が余分やww

Java 修正しました
ttp://https://ideone.com/BkN6Ls
デフォルトの名無しさん [sage] 2019/01/27(日) 17:44:27.67:rwuNPA7J

=の追加で要件をクリアしたと思ってましたが、対象が線分から直線に変わってました
端点については、以下のコードの呼び出しが4つ必要になります

int abap = (b.x - a.x) * (p.y - a.y) - (b.y - a.y) * (p.x - a.x);
if (abap == 0 &&
    (p.x >= min(a.x, b.x) && p.x <= max(a.x, b.x)) &&
    (p.y >= min(a.y, b.y) && p.y <= max(a.y, b.y))) {
  return 1;
}
return 0;
デフォルトの名無しさん [sage] 2019/01/27(日) 18:36:00.36:rE8NR22a
Ruby 2.5.0

def kotae(max)
  (1..max).each_with_object([]) do |ra, ary|
    x, y = max - ra, 2 * ra**2
    1.step(Integer.sqrt(x), 2) do |n|
      next if x * n**2 < y
      rx = ra + n**2
      m, r = (ra + rx).divmod(n)
      ry = ra * m / n
      next if m.even? || r != 0 || m.gcd(n) != 1
      pcpy = [ra, rx, ry].sort
      ary.push(*(1..max / pcpy[2]).map{|i| pcpy.map{|e| e * i}})
    end
  end
end

pys = kotae(100 - 1)
p pys.size # => 82
p pys # => [[1, 2, 3],
 [2, 3, 10],
 [2, 4, 6],
 # 中略 #
 [33, 66, 99],
 [35, 84, 85],
 [36, 84, 90]]
デフォルトの名無しさん [sage] 2019/01/27(日) 18:48:49.63:z0hosMYm
javascript
ttp://https://ideone.com/S1PkhD
デフォルトの名無しさん [sage] 2019/01/27(日) 21:02:27.16:u288xi28

python3
ax+by=c (d<x<e)
px+qy=r (s<x<t)
とする

import numpy as np
co = np.array([[a,b],[p,q]])
in = np.array([c,r])
ans = np.linalg.solve(co,in)
print(d<ans[0]<e and s<ans[0]<t)

本当は直線が平行なときも調べないといけないが略
デフォルトの名無しさん [sage] 2019/01/28(月) 02:42:20.01:Ht+H3Zdt
こちらで検証したパターンです
line ab = {{0, 0}, {100, 0}};
line cd1 = {{0, 0}, {100, 0}};    // 重なりあり
line cd2 = {{1, 0}, {100, 0}};    // 重なりあり
line cd3 = {{0, 0}, {99, 0}};    // 重なりあり
line cd4 = {{-1, 0}, {100, 0}};    // 重なりあり
line cd5 = {{0, 0}, {101, 0}};    // 重なりあり
line cd6 = {{-1, 0}, {99, 0}};    // 重なりあり
line cd7 = {{1, 0}, {101, 0}};    // 重なりあり
line cd8 = {{-100, 0}, {0, 0}};    // 重なりあり
line cd9 = {{100, 0}, {200, 0}};    // 重なりあり
line cd10 = {{-100, 0}, {-1, 0}};    // 重なりなし
line cd11 = {{101, 0}, {200, 0}};    // 重なりなし
line cd12 = {{0, -100}, {0, -1}};    // 重なりなし
line cd13 = {{0, -100}, {0, 0}};    // 重なりあり
line cd14 = {{0, -100}, {0, 1}};    // 重なりあり
デフォルトの名無しさん [sage] 2019/01/28(月) 19:06:17.59:ZiBPaW1B

2直線を
(x,y)=(x1,y1)+t(x2*x1,y2*y1)
(x,y)=(x3,y3)+s(x4*x3,y4*y3)
としたときt、sが0以上1以下の条件で解を持つことであろう。
デフォルトの名無しさん [] 2019/01/28(月) 20:30:57.09:BBM43iQf

の改良版。
product [(n - (r - 1))..n]はそのままn P rにもなる。

p n r = product [(n - (r - 1))..n]

Haskell

c'' n r = product [(n - (r - 1))..n] `div` product [1..r]

Python

def fact(n):
a = 1
i = 1
while i <= n:
a *= i
i += 1
return a

def p(n,r):
a = 1
i = n - (r - 1)
while i <= n:
a *= i
i += 1
return a

def c(n,r):
return (p(n,r) // fact(r))
デフォルトの名無しさん [sage] 2019/01/30(水) 16:02:43.18:WqNbA033
お題
古のスタートレックゲームを作る
デフォルトの名無しさん [] 2019/01/30(水) 16:19:17.11:gOIe9eSU

そのゲームがどんなものだったのか詳細が書いてある所はある?
昔々 Apple ][ でテキストのやつを人がやってる所は見たことあるのだが細かいルールがどんなんだったか忘れた。
確かワープして移動してってクリンゴンが撃ってくるとかクリンゴンに向けて撃つだとかそんなのを繰り返すんだよな?
デフォルトの名無しさん [] 2019/01/30(水) 19:13:41.13:32wJF+eS

RFOーBASIC

TEXT.INPUT S$,"","チェス番を入力してください。"
PRINT S$
END
デフォルトの名無しさん [sage] 2019/01/30(水) 21:23:13.66:zHXVmep5

この辺りを参考にすればいいかと
ttp://https://ja.m.wikipedia.org/wiki/スタートレック_(マイコンゲーム)

勢い5万以上のスレをメールでお知らせするサービス、実施中!!
憧れボディをGETしたい!その夢、ボニックで!

新着レスの表示

2ch勢いランキング アーカイブ プログラム板ランキング

凡例:

レス番

100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている

名前

名無しさん (青) → sage のレス
名無しさん (緑) → age のレス

ID

ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID

このページは2ch勢いランキングが作成したアーカイブです。削除についてはこちら