X



プログラミングのお題スレ Part13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/02/03(日) 11:21:53.20ID:72eosYJ+
プログラミングのお題スレです。

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

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

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

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

※前スレ
https://mevius.2ch.net/test/read.cgi/tech/1538096947/
0002デフォルトの名無しさん
垢版 |
2019/02/03(日) 11:24:10.97ID:72eosYJ+
お題1: 現在地の緯度、経度を出せ
緯度:、、、、
経度:、、、、
お題2: 東京都新宿区西新宿2丁目8-1 の緯度、経度を出せ
緯度:、、、
経度:、、、
お題3: お題2で求めた緯度経度から住所を出せ
郵便番号:、、、
住所:東京都、、、、
0003デフォルトの名無しさん
垢版 |
2019/02/03(日) 11:36:46.42ID:72eosYJ+
>>2 python (pythonista)
#お題1
import location
location.start_updates() # GPSデータ更新を開始
gps=location.get_location() # GPSデータを取得する
location.stop_updates()# GPSデータ更新を終了
print('お題1')
print('緯度:'+str(gps['latitude']))
print('経度:'+str(gps['longitude']))
#お題2
address_dict = {'Street': '西新宿2丁目8-1'}
gc = location.geocode(address_dict)[0]
print('お題2')
print('緯度:'+str(gc['latitude']))
print('経度:'+str(gc['longitude']))
#お題3
adr = location.reverse_geocode(gc)[0]
#print(adr)
print('お題3')
print('郵便番号:'+str(adr['ZIP']))
print('住所:'+str(adr['State'])+str(adr['City'])
+str(adr['Street']))
#結果
お題1
緯度:35.7----略
経度:139.6---略
お題2
緯度:35.689504
経度:139.6916833
お題3
郵便番号:160-0023
住所:東京都新宿区西新宿2丁目8番1号
0004デフォルトの名無しさん
垢版 |
2019/02/03(日) 13:16:33.45ID:jFMT64Yy
平方数の判定は、たとえばmod 10だと、
1と4と5と6と9に限るってのを利用すると、違う場合は判定が速いんだろ。
mod n で複数やる。

1=1^2
4=2^2
9=3^2
6=4^2
5=5^2
6=6^2
9=7^2
4=8^2
1=9^2
0005デフォルトの名無しさん
垢版 |
2019/02/03(日) 17:42:03.97ID:oUppVF8S
>>1
0006デフォルトの名無しさん
垢版 |
2019/02/03(日) 18:09:22.12ID:I0qputsI
>>4
平方根求められる関数と、少数を整数にする関数があれ
0007デフォルトの名無しさん
垢版 |
2019/02/03(日) 18:10:24.69ID:I0qputsI
途中で送っちゃった。。。

あれば簡単。

def isSqr(x):
if sqrt(x) - int(sqrt(x)) == 0:
return True
else:
return False

def sqrt(x):
return (x ** 0.5)
0009デフォルトの名無しさん
垢版 |
2019/02/03(日) 20:21:31.21ID:jFMT64Yy
たとえば1000桁のを1000回、判定するとかsqrtでは時間かかるやつの高速化だろ
0010デフォルトの名無しさん
垢版 |
2019/02/03(日) 20:45:32.58ID:I0qputsI
>>8
なにが「ならば」か分からんけど。。。

引く必要なかったし、ifの中身をそのまま返せば良かった。

def isSqr(x):
return (sqrt(x) == int(sqrt(x)))
0011デフォルトの名無しさん
垢版 |
2019/02/03(日) 21:02:27.70ID:Hf9VDUPT
>>9 だったらそういう問題の出し方にしないと。

例えば、1から1億までの間の数字で平方根数は何個あるか。 かかった時間と、PC 環境を示せ

また、処理できる最大に近い数字を示せ。

とかかな。
0013デフォルトの名無しさん
垢版 |
2019/02/03(日) 21:40:28.27ID:v4AFDwkt
浮動小数経由する実装だと整数部が53bit超えると判定出来ない(つまり64bit整数以上だと不適切)
だから自前で浮動小数を経由せずに平方根の整数部分を求めることを考えるわけだけどナイーブにやると計算量が線型になるから二分探索やNewton(-Raphson)法で計算量減らすことを考えるわけだ
0014デフォルトの名無しさん
垢版 |
2019/02/03(日) 22:02:19.65ID:I0qputsI
>>13

>>7で64ビット以上の数も判定出来てるけど。。。
(0が偶数ならTrue、奇数ならFalse)
小数点以下が0か(n.0かn.41421356みたいな形か)どうか見てるだけだし。
この辺はsqrt関数の性能に依存するだろうけど。

n = 100000000000000000000
m = 10000000000000000000

print(isSqr(n))
print(isSqr(m))

出力

True
False
0019デフォルトの名無しさん
垢版 |
2019/02/03(日) 23:57:14.35ID:Hf9VDUPT
>>13 それもわかる。 だったら解き方の最初にこういう目的で解いたとか書かないとね。
だから、解ける最大数値も書いたら良いと書いたんだが。

ちなみに、>>1 の1億までの数字は、iPhoneで28秒だった。

>>15 False になるよ。iphone のpythonista

また、言われたようにバイナリサーチ法や、巨大数のバイナリー検索も試してみたが、単純検索よりずっと時間がかかった。 ま、これは言語にもよると思うから何とも言えないが。 スクリプト系はステップ数が短い方が効率は良さそうだな。

>>18 だからさ、どこまでやるか条件を出せよ。 そしてサンプルを示してみたら? 実行時間も入れて。

プログラムと言うのは、使う現場で目的が違うんだから目的がわからなければ良い悪いなんて言えないだろ。
0021デフォルトの名無しさん
垢版 |
2019/02/04(月) 01:42:54.31ID:8qZo3rbs
アホ過ぎて話になんねー
線型探索と二分探索のどっちが速いかが言語によるとか頭腐ってんのか

線型探索: ttps://ideone.com/De3SOQ
二分探索: ttps://ideone.com/v9Twjx
0022デフォルトの名無しさん
垢版 |
2019/02/04(月) 06:56:02.27ID:eX/1kX5o
>>19
寝てる間にフォローありがとう。


>>15
こっちはiPhoneのモバイルC内蔵のPythonだが、trueなった。
Haskellは63ビットだからかもう少し早い段階でなる。
ただ、>>19 の言う通り実用上問題無いのでは。
(階乗と違って入力より巨大な数が帰るわけじゃないし、Cとかだと十分実用かと)

64ビットまでの数では効率的なバージョンと、それ以上の数も対応するバージョンという感じではどうか。

sqrtも、n乗根は似た作りになるし。

# n√x
def sqrtn(n,x):
return (x ** (1/n))
0023デフォルトの名無しさん
垢版 |
2019/02/04(月) 07:03:50.35ID:eX/1kX5o
どちらかと言うと**演算子(Cで言うpower関数)の実装に興味あるな。
0024デフォルトの名無しさん
垢版 |
2019/02/04(月) 07:23:18.46ID:958Z8DnZ
CRC 16bit 左送り 初期値 0x0000 生成多項式0x11021
テーブル使用せず演算でなるべくスマートに
0026デフォルトの名無しさん
垢版 |
2019/02/04(月) 10:14:05.68ID:AyF9PYpz
平方数 64ビット以上の巨大数
pythonista iPhone XS Max

def chk2(v1,v2):
 c = 0
 for i in range(v1, v2+1):
  if i == (i**0.5) **2: c += 1
 return c

v = 100000000000000000000
r = 10000000
v1= v-r
v2= v+r

start_time=time.clock()
c = chk2(v1,v2)
end_time=time.clock()
print('#結果',end_time-start_time,'秒','count=',c)
print('#範囲 ',v1,v2)

#結果 5.777779999999893 秒 count= 525
#範囲 99999999999990000000 100000000000010000000
0027デフォルトの名無しさん
垢版 |
2019/02/04(月) 10:28:47.91ID:AyF9PYpz
>>26 同じ条件でバイナリサーチをやってみると若干だけ早かったが、誤差の範囲

#結果 5.770102000000406 秒 count= 525
#範囲 99999999999990000000 100000000000010000000
0028デフォルトの名無しさん
垢版 |
2019/02/04(月) 11:40:45.86ID:GcH+yasd
>>26-27
99,999,999,999,990,000,000~100,000,000,000,010,000,000の範囲には10,000,000,000しかないんだからcount=525ってのは演算誤差が出てるってことだよな?

99,999,999,980,000,000,001 (9,999,999,999^2)
100,000,000,020,000,000,001 (10,000,000,001^2)
0030デフォルトの名無しさん
垢版 |
2019/02/04(月) 14:12:20.36ID:NdPuZxEw
>>28 言われてみればフロートまでカウントするのはおかしいから判定を変えた。

 for i in range(v1, v2+1):
  if (i**0.5).is_integer(): c += 1
 return c

Core i3 3.2GHz Windows10 python3.7
#結果 8.15625 秒 count= 49151
#範囲 99999999999990000000 100000000000010000000

iPhoneの方が倍くらい早いかな。
#結果 4.180858 秒 count= 49151

Core i7のマシンもあるが大して期待できなさそうだな。

検算の意味で、1から1000までをカウントして31だったから正しいだろう。
なお、Python3の整数int型に最大値はない(上限なし)からどんな数でも扱える。
0033デフォルトの名無しさん
垢版 |
2019/02/04(月) 14:55:46.83ID:GcH+yasd
>>30
これ(count=49151)って99999999999999975424から100000000000000024575 (64bit浮動小数点数の16進表記で0x4415AF1D78B58C3Fから0x4415AF1D78B58C41)の平方根が、
10000000000 (64bit浮動小数点数の16進表記で0x4202A05F20000000)になって全部Trueになってるってことだろ
0034デフォルトの名無しさん
垢版 |
2019/02/04(月) 15:39:51.36ID:8qZo3rbs
99,999,999,980,000,000,001 = 999,999,999^2
100,000,000,000,000,000,000 = 10,000,000,000^2
100,000,000,020,000,000,001 = 10,000,000,001^2
なんだから[99'999'999'999'990'000'000, 100'000'000'000'010'000'000]の区間に入る平方数はただ一つ100,000,000,000,000,000,000しかない

「32bit符号なし整数にしか対応してません」っつうなら分かるがまともに判定出来てないのに「判定出来てる」主張する無能
やれ前提書けだの環境書けだの時間書けだのクソみてぇな御託並べる前に自分の頭の悪さを自覚しろ
0035デフォルトの名無しさん
垢版 |
2019/02/04(月) 18:19:40.08ID:TMO26aZK
>>34 申し訳ない。 2〜3日前にpython をiPhoneに入れて使い始めてただただ練習のためにお題を使わせてもらってた。
整数と、浮動小数の最大値にまで頭が回らなかった。
今日初めてWindowsにpythonを入れた状態で本当に気が回らなかった。
本当に申し訳ない。

バイナリサーチの方は1個と出るが、時間が膨大にかかる。
0036デフォルトの名無しさん
垢版 |
2019/02/04(月) 20:37:21.99ID:WZY4HG/d
自然数の割り算関数mydivと余り関数mymodを作れ。
0039デフォルトの名無しさん
垢版 |
2019/02/04(月) 21:00:40.83ID:mK0I6q3a
modをみる
nが平方数なら、n=x^2 だが、n=x^2 (mod m)でもある
逆にmod で平方数でなければ、元々も平方数ではない

mod 3だと0 1 は平方数だが、2はちがう。3i + 2 は平方数にはならない
0040デフォルトの名無しさん
垢版 |
2019/02/04(月) 22:02:57.78ID:eX/1kX5o
>>38
元は小学生にプログラミングを通じて、割り算への理解を深めてもらえないかと考えたんで、単純に演算子を置き換えて欲しくないかも。。。
0041デフォルトの名無しさん
垢版 |
2019/02/05(火) 10:18:54.39ID:ij/1zyvC
小学生の時テストで0点をもらった間違った割り算の
やり方をプログラムにしてみた。
--Lua
function myDivMod(a, b)
local r = 0
while a > 0 do
a = a - b
r = r + 1
end
return r, -a
end
print(myDivMod(10,3))
実行結果
4 2
0042デフォルトの名無しさん
垢版 |
2019/02/05(火) 12:28:40.98ID:aE6b0ZPr
>>35 結局 整数のsqrt を作って、範囲の中に納まる最小最大の整数のsqrt を取り出し、その差(+1)がその範囲の中にある平方数の個数と言う作りにした。
ポイントとなった整数のsqrt が秀逸だったのでここに書いておく。 どんなに巨大な数字でも数回のシフト操作だけで終わるから極端にスピードが速い。
ソースは、gist.github.com/bnlucas/5879594

# integer square root
def isqrt_2(n):
 if n < 0:
  raise ValueError('Square root is not defined for negative numbers.')
 x = int(n)
 if x == 0:
  return 0
 a, b = divmod(x.bit_length(), 2)
#divmod(a, b)は(a // b, a % b)のタプルを返す。
#平方数は半分のビット数以下だからそれを最大値で計算開始
 n = 2 ** (a + b)
 while True:
  y = (n + x // n) >> 1 #1bit右にシフト
  if y >= n:
   return n
  n = y

-----------------
#結果 0.0 秒 count= 1000000000
#範囲   999999999000000000000000000000000000 1000000001000000000000000000000000000
#入力bit_length()=120 入力bit_length()=120
平方数範囲 999999999500000000 1000000000499999999
上の二乗  999999999000000000250000000000000000 1000000000999999998249999999000000001
0043デフォルトの名無しさん
垢版 |
2019/02/05(火) 12:33:09.36ID:NCwCR2JI
>>41
おしいなw
0045デフォルトの名無しさん
垢版 |
2019/02/05(火) 18:45:08.63ID:63VtM8MC
>>42 の isqrt_2 を使ったパフォーマンステスト。
次のようなのを継ぎ足してテストした。 例によってインデント部は全角空白に変換してるから、逆変換しないと動かない。

def isSqrt(n):
 return n == isqrt_2(n)**2

v0 = 12345678901234567890
v = v0**2 # 整数平方される対象の数値
loopc = 100000 # をこの回数繰り返す。

isqr=0
start =time.process_time()
for i in range(loopc): isqr=isqrt_2(v)
end =time.process_time()

print('#整数平方(v)の結果',end-start,'秒')
print(' 繰返し数の回数',loopc),print(),print('#v0   ',v0)
print('#v=v0**2=',v),
print('#isqrt(v)',isqr)
print('#上の**2',isqr**2)
print('対象数vのビット数',v.bit_length(),'bit')
print('vが平方数かどうかの判定',isSqrt(v))
-----
#整数平方(v)の結果 0.22398700000002236 秒
繰返し数の回数 100000

#v0    12345678901234567890
#v=v0**2= 152415787532388367501905199875019052100
#isqrt(v) 12345678901234567890
#上の**2 152415787532388367501905199875019052100
対象数vのビット数 127 bit
vが平方数かどうかの判定 True
0047デフォルトの名無しさん
垢版 |
2019/02/06(水) 16:53:02.43ID:XOfzhWu4
Wikipediaに Integer square root
https://en.wikipedia.org/wiki/Integer_square_root
があり、その中の 2.1 Using bitwise operations
の二つを試してみたが、
最初のrecursive call を使った方が 1.65秒
次の方が 2.05秒

早いことは早いが、>>42 >>45 のビットシフト法の方がかなり早い。
0.22秒
gmpのisqrt は早そうだが Pythonistaでは使えないので試していない。
0050デフォルトの名無しさん
垢版 |
2019/02/09(土) 06:52:32.52ID:y7fm8J5o
なんでも放題にすればいい

お題
平方数は 256で割るとあまりの
パターンが44種類になるという。
この44種類を求める。
0051デフォルトの名無しさん
垢版 |
2019/02/09(土) 08:05:29.21ID:y7fm8J5o
放題は、お題の間違い
0055デフォルトの名無しさん
垢版 |
2019/02/09(土) 14:20:17.67ID:BaccQTUO
お題:ハノイの塔の最少手数は一種類しかないのか
0056デフォルトの名無しさん
垢版 |
2019/02/09(土) 14:22:34.94ID:VrkeVQvn
>>50 その44種(mod256)の中に x%256 が一致するか
python

mod256=sorted({(i**2)%256 for i in range(256)})
x=123*123
print(x%256 in mod256)
# True

これでmod の話が理解できた。 要は完全な平方数じゃないのは平方根の計算をしないと言う話ね。
0057デフォルトの名無しさん
垢版 |
2019/02/09(土) 15:28:05.40ID:1XyVHoA8
>>50 Perl5

%a = map{$_=>1} map{$_*$_%256} 0..256;
@a = keys %a;
print "@a\n";


実行結果
~ $ perl 13_50.pl | wc -w
44
$ perl 13_50.pl
137 89 161 57 1 4 100 17 36 49 121 64 68 144 201 177 65 185 16 9 193 169 129
105 196 132 25 73 249 209 33 233 225 97 41 81 241 164 145 228 217 0 153 113
0059デフォルトの名無しさん
垢版 |
2019/02/09(土) 18:17:43.26ID:HLblHrgV
>>49 有難う。
python だが、
# 256, 9, 5, 7, 13, 17 97
のmodであらかじめカットしたら、5倍くらい早くなった。

因みに >>50 のお題で
mod256=sorted({(i**2)%256 for i in range(256)})

modn = lambda n:set((i**2)%n for i in range(n))
mod256 = modn(256)

では下のsetを使った方が3割くらいスピードが速かった。
0060デフォルトの名無しさん
垢版 |
2019/02/09(土) 18:57:59.38ID:luPnpF49
>>59
# 256, 9, 5, 7, 13, 17 97
なんて順番ははおかしいんじゃねと思って、
大きい順にカットしたら、更に2割以上早くなった。
0061デフォルトの名無しさん
垢版 |
2019/02/10(日) 06:54:30.87ID:qszHu1wC
>>50 J
64個の平方数を調べれば44種類のパターンはそろうようだ。
/:~ ~. 256| *: i. 64
0062デフォルトの名無しさん
垢版 |
2019/02/10(日) 12:16:48.56ID:8pY6FeJB
お題
ある数 n とする。
下位から24bit区切りの数を足し合わせてからmod 2^24-1 した数が、元の数nのmod 2^24-1 と一致することを確認しなさい。
0063デフォルトの名無しさん
垢版 |
2019/02/10(日) 12:27:09.74ID:Mq5me4ef
>>62

任意の n に対してある自然数 N, 自然数列{a_k} が存在して
n = Σ_{k = 0}^{N} a_k * 2^(24 * k) と書けるので mod 2^24 - 1 として
n = Σ_{k = 0}^{N} a_k * 1^k
= Σ_{k = 0}^{N} a_k ■
0064デフォルトの名無しさん
垢版 |
2019/02/10(日) 14:27:03.54ID:H2rtpzeI
>>59,60
256はmodじゃなくて&255を取る
確率的には大きい順じゃなくて9,97,17,13,7,5が良いのでは?
9,97,17,13,7,5でmodを取る場合、大きい数からそのままmodを取るのではなく2^48-1でmodを取った数値に対してmod
これで速度どうなる?
0069デフォルトの名無しさん
垢版 |
2019/02/10(日) 15:12:41.36ID:95x0uvij
>>62 python

# n%(2**24-1) を求める
def mod224get(n):
 bn=(n.bit_length()+7)//8 #byte長
 bb=n.to_bytes(bn,'little')
 s= sum([int.from_bytes(bb[i:i+3],'little')
  for i in range(0,bn,3) ]) #24bit毎の合計
 return s%(2**24-1)

v0=12345678901234567890
#v0=0
n=v0**2
loop = 100000
print('テスト範囲は ',n,'〜',n+loop-1,'loop回数=',loop)
start =time.process_time()
for i in range(n,n+loop):
 if mod224get(n) != n%(2**24-1) :print('間違い見っけ',n)
end =time.process_time()
print('全問正解 かかった時間は、',end-start,'秒')
#
―― 結果
テスト範囲は 152415787532388367501905199875019052100 〜 152415787532388367501905199875019152099 loop回数= 100000
全問正解 かかった時間は、 0.2963889999999765 秒
0070デフォルトの名無しさん
垢版 |
2019/02/10(日) 16:02:45.96ID:8pY6FeJB
>>64 アドバイスありがとう。 それは思ったんだけど、現代の言語がそんなところで手抜きはしていないだろうと信じてテストしていなかった。

今、&255 に変えてテストしてみたけど、スピードの差はなかった。 そう言う発想は昔は非常に重要だったけど、今は言語の中で吸収してるみたいだね。

その下のアドバイスに対しては、何故ご自分では試されないのですか?

あまりやるつもりはないのは、mod 2**24-1 と言うのが理解できていないからです。 これで早くなるのなら色々試してみたいんですが、このリストを作るだけでもかなりの時間がかかりめげてます。
0071デフォルトの名無しさん
垢版 |
2019/02/10(日) 16:33:26.08ID:H2rtpzeI
>>70
剰余の順番に関しては確率がこんなんだからやで
3 / 5 = 0.600000
4 / 7 = 0.571429
4 / 9 = 0.444444
7 / 13 = 0.538462
9 / 17 = 0.529412
49 / 97 = 0.505155

テーブルは9, 97, 17, 13, 7, 5の物で良いんやで?
多倍長整数の剰余より32bit整数/64bit整数の剰余のほうが計算量が少ないから、
(32bitの場合) 2^24-1で剰余を取ったものに対して9, 17, 13, 7, 5の剰余で平方数かどうかを調べる
(64bitの場合) 2^48-1で剰余を取ったものに対して9, 97, 17, 13, 7, 5の剰余で平方数かどうかを調べる

なしてこんなことができるかってーと、
2^24-1(=16777215)の因数に5, 7, 9, 13, 17が、2^48-1(=281474976710655)の因数に5, 7, 9, 13, 17, 97含まれているからやで
0072デフォルトの名無しさん
垢版 |
2019/02/10(日) 16:55:58.44ID:8pY6FeJB
>>71 あまり深入りするつもりはないけど、mod 2**24-1 でチェックしたら、
mod 9, 97, 17, 13, 7, 5 でチェックする必要はないと言う事?

ま、数学を解いてるつもりは全くなく、プログラムの練習だからいかに沢山の人が素晴らしいプログラムを見せてくれるかにしか興味はない。
プログラムを書かない人は自分にとってはなんの意味もない。
0073デフォルトの名無しさん
垢版 |
2019/02/10(日) 17:11:01.79ID:H2rtpzeI
>>72
ちゃうねん
mod 2**24-1をした数値に対してmod 9, 17, 13, 7, 5 でチェックするねん
もしくはmod 2**48-1をした数値に対してmod 9, 97, 17, 13, 7, 5 でチェックするねん
0074デフォルトの名無しさん
垢版 |
2019/02/10(日) 19:32:43.48ID:/XsfFvRM
>> 73
2重に剰余を取るのはGMPみたく多倍長なら意味があるけど, 32/64bit固定長ならあまり意味はない
複数回剰余を確認する必要があるから多倍長から固定長(32/64bit)にしていて, 更に因数を使えば剰余を求めるための除算の代わりに乗算が使えるから因数の多い2^24 - 1や2^48 - 1を採用してる
0075デフォルトの名無しさん
垢版 |
2019/02/11(月) 00:35:41.13ID:8Hdd2FlG
>>62
ガウス少年が見出したように
Σ1,2,…,n-2,n-1=n *(n +1) /2
なので、
n の mod 2^24-1

Σ1,2,…,n-2,n-1 =n *(n +1) /2 の mod 2^24-1
が等しいのは自明だと思うけど、
そういう、ちょっとした数学を使わず
Σ1,2,…,n-2,n-1
をloopで和を算出し mod 2^24-1 して比較する
n の mod 2^24-1 と比較する
プログラムを作れという題なんだろうか…
0076デフォルトの名無しさん
垢版 |
2019/02/11(月) 00:37:45.16ID:8Hdd2FlG
>>75
「比較する」を二度書いちゃった、訂正

Σ1,2,…,n-2,n-1
の和をloopで算出し mod 2^24-1 して
n の mod 2^24-1 と比較する
0077デフォルトの名無しさん
垢版 |
2019/02/11(月) 00:57:54.78ID:HnU/OI7o
>>75 お題をよく読んだら? 24bit = 3バイト毎に取り出してその合計に対して 2**24-1 をしなさいと言う問題だよ。

数学なんて関係ない。 ただ出されたお題をプログラムで解いてくれ。
0081デフォルトの名無しさん
垢版 |
2019/02/11(月) 01:42:54.29ID:8Hdd2FlG
>>62 Perl5

use bignum (l=>GMP);
use feature say;

sub sum24 {
my $v = $_[0];
if ($v > 0) {
my $d = int($v / 2**24);
my $m = $v % 2**24; # $v - $d * $f6;
$m + sum24($d);
} else {
0;
}
}

$n = 12345678901234567890;
say $n % (2**24 -1);
say sum24($n) % (2**24 -1);


実行結果
~ $ perl 13_62.pl
13189905
13189905
0085デフォルトの名無しさん
垢版 |
2019/02/11(月) 02:15:34.48ID:HnU/OI7o
>>83 自明もへったくれもない。 プログラムが正しいかどうかの確認だよ。
プログラムも書かないで能書きだけ垂れてもなんの足しにもならない。 ここはプログラムのお題スレだよ。

>>62 のお題は前スレのGMP の整数平方根の説明の文章の中から取り出したもの。
つまり、ここまでできると、次は n**2%(2**24-1) のリストを作れと言うお題になるんだろうけど、時間がかかりすぎるからお題にするのはやめた。
このリストができないと実際の平方数の高速チェックが出来ないじゃん。
0087デフォルトの名無しさん
垢版 |
2019/02/11(月) 02:31:44.77ID:HnU/OI7o
しかしここまで複雑な処理をして本当に早くなるのかどうか疑問だけどな。 mod 2**24-1 って結構時間がかかりそうな気がする。
0088デフォルトの名無しさん
垢版 |
2019/02/11(月) 02:35:42.19ID:ucqIUq+7
>>85
一番能書き垂れてんのお前だろ
クソみたいな御託並べる前に自分のことを考えろっつったろうが

GMPが一体どこで
> n**2%(2**24-1) のリスト
なんか使ってんだ?91で割った場合のテーブルでさえ12byte必要だってのにどうやってそんな巨大なテーブル用意するんだ?
GMPの中身なんか数学の成果の塊だぞ?お前が数学したくないだか出来ないだか知らんがアルゴリズム考えるようなスレでクソみたいなこと喋ってんじゃねぇよ
お前はコードを書いても価値がない
0089デフォルトの名無しさん
垢版 |
2019/02/11(月) 02:35:55.83ID:8Hdd2FlG
単なるbitmaskで済まない様な場合
あるいは除算して剰余を求めるなら
さんざ研究されていると思うから自力で1から考える前に
先人の業績を知れってことだろ
アバヨ ノシ
0090デフォルトの名無しさん
垢版 |
2019/02/11(月) 02:36:00.30ID:IhaR3BEX
お題:ポーカーダイス

通常のサイコロを5個振って出た目をポーカーの役になぞってそれぞれの出現確率を求める。
役は、5カード、4カード、ストレート、フルハウス、3カード、2ペア、1ペア、ブタ(ノーペア)
例えば出た目が 1,1,3,1,4 ならスリーカード。2,5,4,6,3 ならストレート。
5カードは6/(6^5)、4カードは(5*5*6)/(6^5)というように数学的に
求めても難しくはないのですが、ここはプログラミングのスレなので
全通り力技でチェックして求めてみてください。

解答例:C言語 https://ideone.com/4X62Am
0095デフォルトの名無しさん
垢版 |
2019/02/11(月) 08:16:46.17ID:b3B7Bg4u
python3
https://ideone.com/k6Ea4j

最後の出力部分はpython 3.6以降だと
for k,v in hand.items(): print("{} :\n {} / 7776 ({} %)".format(k,v, round(100*v/7776,2)))
でいけるけど実行環境が3.5なのでやむなく
0096デフォルトの名無しさん
垢版 |
2019/02/11(月) 16:44:30.42ID:xTuBWJbc
なんか数学でもできる力技お題増えてきたな
もっとプログラミングじゃないとできないような良いお題無いんだろうか
0098デフォルトの名無しさん
垢版 |
2019/02/11(月) 17:28:00.80ID:6aFdKLEP
確率の問題でも特定の疑似乱数と種を使った偏りを求めるとかは数学では難しい
0099さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/11(月) 17:37:44.75ID:adj8EvAq
お題: 日本語文字とカッコ { } とスラッシュ(/)で構成された入力文字列Sが与えられる。{ }で囲まれ、かつ
スラッシュで区切られた部分文字列について、それぞれ場合分けを行って、複数の文字列のリストに展開して改行区切りで出力せよ。
カッコの対応が間違っている場合はERRORを出力せよ。

(例1) {ひまわり/あさがお}は{植物/花}です。
(出力結果)
ひまわりは植物です。
あさがおは植物です。
ひまわりは花です。
あさがおは花です。
0105さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/11(月) 19:32:34.31ID:BEdrdhIs
(1)の答え(※ソート済み)
あいうけこ
あいうけこ
あえけこ
あえけこ
おかけこ
おかけこ
おきけこ
おきけこ
くけこ
くけこ
くけこ
くけこ
0106さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/11(月) 19:33:13.25ID:BEdrdhIs
(2)の答え(※ソート済み)
さしせそたつと
さしせそちつと
さしせそてと
さしせそてと
さすせそたつと
さすせそちつと
さすせそてと
さすせそてと
0107デフォルトの名無しさん
垢版 |
2019/02/11(月) 19:36:37.18ID:MkFOBvt9
これでいいのか?

> (1) {あ{いう/え}/お{か/き}/く}け{こ}
あ いう け こ
あ え け こ
お か け こ
お き け こ
く け こ

> (2) さ{し/す}せそ{{た/ち}つ/て}と
さ し せそ た つ と
さ す せそ た つ と
さ し せそ ち つ と
さ す せそ ち つ と
さ し せそ て と
さ す せそ て と
0113デフォルトの名無しさん
垢版 |
2019/02/11(月) 20:48:49.82ID:uHNor3GB
お題:Aが真であるならばBが真である ことをプログラムしなさい。
0115デフォルトの名無しさん
垢版 |
2019/02/12(火) 00:09:52.31ID:VqanzRzk
バカなのか?AとBに因果関係があるわけじゃないし、この世の全てがプログラム言語でマッピングできるわけじゃない、数学徒は帰れ
0121デフォルトの名無しさん
垢版 |
2019/02/12(火) 02:52:28.28ID:jwrsqhME
{あ{いう/え}/お{か/き}/く}けこ
 あいうけこ
 あえけこ
 おかけこ
 おきけこ
 くけこ

さ{し/す}せそ{{た/ち}つ/て}と
 さしせそたつと
 さしせそちつと
 さしせそてと
 さすせそたつと
 さすせそちつと
 さすせそてと
0122デフォルトの名無しさん
垢版 |
2019/02/12(火) 07:13:30.28ID:WW36R8Qd
>>113
> Bが真である
をどう解釈するかによる
文字通りの解釈なら
If A Then Assert(B)
かな
Bを真にすると解釈するなら>>117が正解かな
>>116>>119はAが偽の時にBを偽にしちゃうので誤りやね
0126デフォルトの名無しさん
垢版 |
2019/02/12(火) 10:38:38.54ID:/lUdPPCt
Aが偽の時はエラー吐かなきゃいけないとかBを偽にしてはいけない
とかいうのは勝手な拡大解釈でしかない
0129デフォルトの名無しさん
垢版 |
2019/02/12(火) 11:18:15.32ID:eC1lEXzI
>>128
> AならばBでAが偽ならばそれは真だっつーの

えっ、どういうことなの?
それは
AならばB
のとき
AでないならばB
ということ?
BはAに関わらず真ということ?

> AならばBでAが偽ならばそれは真だっつーの

の意味がよくわからん…
0130デフォルトの名無しさん
垢版 |
2019/02/12(火) 11:29:33.12ID:dUnMTtNo
>>129
論理としては A => B (AならばB)は対偶論理 ¬B => ¬A (BでないならばAでない)を成り立たせるために通常 ¬A∨B (AでないかまたはBである) で定義される
つまり A => B という論理式は A が偽であれば B の真偽に依らず真になる

だから何だという話ではある
0133デフォルトの名無しさん
垢版 |
2019/02/12(火) 11:43:29.03ID:puzbyhsI
「AならばB」
と言う命題は
「Aが真でBが真である
Aが偽であればBは真である」という命題の
上の文の3行目のはじめの部分をプログラムしろということだぞ
0135デフォルトの名無しさん
垢版 |
2019/02/12(火) 12:10:48.64ID:2r3VUiS2
A: 自然数 : 1,2,3,・・・・・
B: 整数  : ・・・・・ , -2,-1,0,1,2,3,・・・・・

AならばBである
AでなければBでもない
BでなければAでもない
0137デフォルトの名無しさん
垢版 |
2019/02/12(火) 12:12:39.52ID:2r3VUiS2
>>135 間違い
A: 自然数 : 1,2,3,・・・・・
B: 整数  : ・・・・・ , -2,-1,0,1,2,3,・・・・・

AならばBである
Aでなければ不定
BでなければAでもない
0138デフォルトの名無しさん
垢版 |
2019/02/12(火) 12:31:09.58ID:eC1lEXzI
>>130
ありがとうこれは分かりやすい。
高校出てないけど義務教育は真面目にやったんだがなぁ…こんなのあったっけ?
0142さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/12(火) 12:47:20.67ID:cy1s3mXO
>>136
よくできました。

お題: ひらがなで与えられた五段活用動詞の五段活用を表示しなさい。
明らかに五段活用動詞でない場合は、ERRORと表示しなさい。
0143デフォルトの名無しさん
垢版 |
2019/02/12(火) 13:39:39.30ID:dUnMTtNo
>>138
義務教育ではやらない
というか高校数学でも明示的に教えはしない(証明ではしばしば暗に使う)
そして大学の数学科では何をおいてもまず最初に学ぶ
0146デフォルトの名無しさん
垢版 |
2019/02/12(火) 16:12:20.21ID:MCXQbCzx
>>145
必要な感じがするのであれば高認受けて高卒と同等にでもなりなさい。昔の大検と違ってそれだけでも高卒扱いになる。
その後大学行くかどうかはご自由に。金と時間があまりないなら通信制ってのもあるよ。
この頃はネットの大学もあるな。よく知らんけど。

まあしかし既に社会人になって何十年も稼いできてしまった人の場合はもはやどうでも良い話かな。
0147デフォルトの名無しさん
垢版 |
2019/02/12(火) 17:14:44.20ID:AqcDbyue
>>138 理解したいと思った気持ちが大事。深入りの必要はない。

プログラムの世界というのは、客のニーズを知らなくてもなんでも解決しないといけないから、その時々で勉強するしかない。 実践の世界。
素地がある方が理解は早いとは思うが、気にすることは無い。

その時に必要なものを勉強すれば(理解できれば)良い。 全ての学問を習得するなんて不可能なんだから、学問なんてあまり気にしない方が良い。

ただ、論理的な思考訓練はやった方が良いとは思うが、大学でできるとは思わない方が良い。 ひたすらプログラムを続けた方が思考訓練になると思うぞ。
0148デフォルトの名無しさん
垢版 |
2019/02/12(火) 17:34:27.64ID:AqcDbyue
>>113 しかしさ、この日本語は日本語として成り立っていないんじゃないの?
日本語としても論理学としても
日本語の曖昧さを残したまま、お題にする方がおかしい。

これを自分の顧客に提示して見なさい。 バカじゃないのと言われるよ。 理解力がないと思われるだろうな。
0150デフォルトの名無しさん
垢版 |
2019/02/12(火) 19:11:01.53ID:Rw1aIHZT
>>132
その2つの意味後違うって言うならそうなるセマンティクスを提示してみせろや
「普通は」同等に扱うだろ
0152デフォルトの名無しさん
垢版 |
2019/02/12(火) 19:59:08.96ID:mxj4fC0D
チコ 「A->Bの意味も知らずにボーっとコードかいているんじゃねよ!」
0153デフォルトの名無しさん
垢版 |
2019/02/12(火) 21:33:58.92ID:4uAoJeXz
>>99 Ruby
def hoge(str)
  return str if str.match?(/\A[^{}\/]*\z/)
  raise 'ERROR' if str.match?(/\A[^{]*}|{[^}]*\z/)
  a, *b = str.scan(/(?<={|\A)[^{}]*(?=}|\z)/).map{|s| s.empty? ? [''] : s.split(?/)}
  s = str.gsub(/(?:{|\A)[^{}]*(?:}|\z)/, '%s')
  a.product(*b).flat_map{|e| hoge(s % e)}.uniq.sort
end

%w[
  {あ{いう/え}/お{か/き}/く}け{こ}
  さ{し/す}せそ{{た/ち}つ/て}と]
].each{|s| puts hoge(s), $/}
# =>
あいうけこ
あえけこ
おかけこ
おきけこ
くけこ

さしせそたつと
さしせそちつと
さしせそてと
さすせそたつと
さすせそちつと
さすせそてと
0154 ◆QZaw55cn4c
垢版 |
2019/02/12(火) 22:11:55.07ID:afakhEje
>>133
>「Aが真でBが真である
>Aが偽であればBは真である」

完璧に間違っていますね…Aが偽であってBが偽であってもいいのです
あなた、もう馬鹿としかいいようがないですね、論理学の教科書が読めなかったの?いや、日本語が読めなかったの?
生きていること自体が罪悪といわずして何といえばいいのか…

死ね
0156デフォルトの名無しさん
垢版 |
2019/02/13(水) 05:57:47.09ID:ttYQgqMy
お題
print(a)
のように変数の宣言や代入なしで
使用するとどうなろか
0158デフォルトの名無しさん
垢版 |
2019/02/13(水) 07:39:48.48ID:aN9MpGEF
EXCELシート名が1文字のシートが数シートある。これをwindows10でVB6を使いデータベースで読み取ってみせよ。
0160デフォルトの名無しさん
垢版 |
2019/02/13(水) 08:38:42.75ID:ds2YQTN5
>>155
AならばBと
Aが真ならばBが真
が同じならば
AならばBと
Aが偽ならばBが真
と同じ
AならばBと
Aが偽ならばBが偽と
同じ
ということになるぞ?
これは同じじゃないから君の言ってることは
間違ってるということだな
0162デフォルトの名無しさん
垢版 |
2019/02/13(水) 09:12:06.89ID:B8qJWD6e
>>160
糞コテの肩は持ちたくないがなんだこのくっそみたいな日本語は

「AならばB」と「Aが真ならばBが真」が同値ならば
「AならばB」と「Aが偽ならばBが真」と「Aが偽ならばBが偽」が同値
って言いたいのか?

同値になるわけねえだろ
ABの真偽は4パターンしかねえんだから、いくらお前が無能でも全4パターンくらい考えてからレスしろよ

大体、任意の命題Pに対して「P」と「Pは真である」が同値にならないケースってなんだよ
馬鹿も休み休み言えよホント
0164デフォルトの名無しさん
垢版 |
2019/02/13(水) 11:23:09.04ID:B8qJWD6e
「よく考えたらやっぱり同じだな」だけでは何と何が同じだと思ったのかわからない
悪びれた様子もなく前後の文脈からも推論不可
とてもまともとは思えない
0166デフォルトの名無しさん
垢版 |
2019/02/13(水) 11:36:53.06ID:ttYQgqMy
>>156 Lua
print(a)
実行結果
nil
0167デフォルトの名無しさん
垢版 |
2019/02/13(水) 11:59:11.28ID:kZE3tAhm
言語とか使えるライブラリとか制限しないと
意味が無くなっている希ガス
言語指定した場合でも特定の文法を使っては
ならないとか制限加えると面白いものが
出来るような,,,
0170デフォルトの名無しさん
垢版 |
2019/02/13(水) 13:30:26.24ID:0cDEleYh
>>167 制限なんかしなくてよいよ。 ライブラリが嫌いならあまりライブラリが使えそうにないお題を出せばよいだけだし。
例えば正規表現ライブラリなんて装備されていない言語は殆どないだろうし、標準装備している言語とそうでない言語で不公平になるし。
使えるものはすべて駆使して解けばよいだろ。
0171デフォルトの名無しさん
垢版 |
2019/02/13(水) 15:40:07.94ID:0cDEleYh
>>113 python
if A: B=A

結果
Aが True の時 B(結果)= True
Aが False の時 B(結果)= None (変わらず)
Aが False の時 B(結果)= False (変わらず)
Aが False の時 B(結果)= True (変わらず)
0172デフォルトの名無しさん
垢版 |
2019/02/13(水) 18:13:27.57ID:ttYQgqMy
>>113 Lua
functio naraba(A, B)
if A == B then
return true
else
return B
end
end
0175デフォルトの名無しさん
垢版 |
2019/02/13(水) 19:13:38.60ID:ayAZ2qec
>>156
C言語のようなコンパイルする言語だとだいたいはコンパイル時にエラーになって実行不能だろうなあ(そうでない言語もあるかも知れないが)。
更に print がない言語もある。少なくともCの標準的なライブラリにはない。printf()やputs()のようなものはある。
なので変数宣言すればコンパイルは通るが今度はリンクで関数が見つからなくてエラーになりこれまた実行不能。

まあでも言語や環境で起こることは違って来るので答えは沢山出てくるかも知れない。(またはほとんど相手にされないかだ)。
0176デフォルトの名無しさん
垢版 |
2019/02/13(水) 21:01:39.06ID:7GscGWa9
お題
長方形のサイズが指定された時、その長方形に敷きつめられるパターン全て列挙
回転もおkかは好きに定めていい
例: 2 3
#

###

#
#

###
###
0178デフォルトの名無しさん
垢版 |
2019/02/14(木) 00:46:56.24ID:QGThOkDI
>>176 なんか図が良くわからないな。

2 x 3 なら、そのパーツは, / は空きだとすると


*//
***

/**
――-
*//
*//

/**
/**
―――
*//
**/

/**
//*
――
***
***
――-
みたいな感じかな。パーツの回転を許す許さないは自由という事。
3 x 3 の時は斜めのパーツも許すんだろうね。
*//
/*/
//*
これが一つのパーツ?
0179デフォルトの名無しさん
垢版 |
2019/02/14(木) 00:50:00.40ID:QGThOkDI
>>178 斜めのパーツは現実的には作れないし、組み合わせが膨大になるから、許さない方が良いのかも。
縦、横に繋がっていないパーツは除外かな。
0180デフォルトの名無しさん
垢版 |
2019/02/14(木) 01:06:21.81ID:QGThOkDI
これはかなり難しいお題になるんじゃないの。
パーツを少なくするためには、穴開きパーツも許さない方が良さそうだし。

パーツは、空白は 0 基本図形は 1として表した方が良いのかな。 2 x 3 なら

100
110

011
001
とか
0182一尾圭吾
垢版 |
2019/02/14(木) 02:36:27.51ID:ODX5iexG
プログラミング超初心者です
自動で2ちゃんにコピペを書き込むようになりたいんですがそれってかなりレベル高いスキルですかね?
0183一尾圭吾
垢版 |
2019/02/14(木) 02:39:09.40ID:ODX5iexG
>>10うわぁww眉毛剃っとるwwwwww
流石やな....ヤクザやんw
0185デフォルトの名無しさん
垢版 |
2019/02/14(木) 06:52:51.05ID:J1vF692V
論理プログラムのスレはありませんか?
0186デフォルトの名無しさん
垢版 |
2019/02/14(木) 08:13:17.60ID:anuIpNjB
>>176
回転なしなら縦の長さの因数と横の長さの因数それぞれの組み合わせの四角を列挙すればええんよな?
回転ありだとどうすればええんじゃろ
0187デフォルトの名無しさん
垢版 |
2019/02/14(木) 08:52:55.94ID:QGThOkDI
>>176 必要なパーツの種類と個数を出せば良いんだろう。
回転させて使おうがどうしようが自由。
0188デフォルトの名無しさん
垢版 |
2019/02/14(木) 09:41:08.57ID:9tQDIG7c
>>178
パターン全てって書いてあるから単に 2^ドット数 だと思ってたんだが、人間が見た時に何らかの意味がありそうなパターンって事なの?
しかし何に意味がありそうと感じるかは主観の問題だからここでのお題としては適切ではないよね。
0190デフォルトの名無しさん
垢版 |
2019/02/14(木) 11:47:38.28ID:E3VWek4W
>>156 R
cat(a)

Error in cat(a) : object 'a' not found
Execution halted
0191デフォルトの名無しさん
垢版 |
2019/02/14(木) 11:52:48.67ID:rq9LAi9f
パーツの対称性を見るくらいしかなさそうだけどなぁ

90度回転で不変ならパーツ自体が正方形の場合しか充填し得ないし180度回転で不変なら長方形しかない
問題は対称性なしの場合で, 回転で得られる4通りの図形の組み合わせで少なくとも適当な長方形が作れる必要がある。
0192デフォルトの名無しさん
垢版 |
2019/02/14(木) 12:23:18.44ID:4UGy3YJR
出題者です、同じ1種類のパーツのみで敷き詰めるのを意図してた
回転なしは因数でおk、有りは一応解法は浮かんだが証明詰めきれなかったので好きに定めて良いって書いた
0193デフォルトの名無しさん
垢版 |
2019/02/14(木) 12:26:41.67ID:9tQDIG7c
>>189
じゃあどう解釈すれば良いのか?
0194デフォルトの名無しさん
垢版 |
2019/02/14(木) 12:30:54.48ID:9tQDIG7c
>>192
相変わらず問題がよくわからんよ。
0195デフォルトの名無しさん
垢版 |
2019/02/14(木) 12:50:46.70ID:QGThOkDI
>>192 2x3 の時は、1種類のパーツのみで埋めるとすると

111
111
の時は 111 x2個
1,1,1
1,1,1
の時は 1,1(2段) x3個

11,1
1,11
の時は 110,100(2段) 2個とするのか
11 が 2個と 1 が2個 は2種類のパーツだからダメ?
0196デフォルトの名無しさん
垢版 |
2019/02/14(木) 13:04:00.12ID:QGThOkDI
>>195 90度回転を認めると、11が、3個で良いね。

回転なしなら、111 2個と 1が6個
1
1
2段のパーツが3個
の3種類が解?
0199デフォルトの名無しさん
垢版 |
2019/02/14(木) 13:56:13.92ID:iDdALKjs
abcd
badc

abab
cdcd

aaba
babb

abbb
aaab

同じパターンで埋めるのって色々できそうだけどこういうの全部いいの?
0200デフォルトの名無しさん
垢版 |
2019/02/14(木) 18:55:26.99ID:PxTMiczy
>>199 それ何種類も使ってるじゃん。
最低何れかの縦横が連続していないとダメだろ。 パズソーのピースじゃないの?
先ずは2x3で1種類のパーツのみで探せという問題の回答を決めてほしい。
0201デフォルトの名無しさん
垢版 |
2019/02/14(木) 19:04:40.56ID:iDdALKjs
いや全部一種類だよ
マスがくっついてないだけで
連続してるとは書かれてなかったし
0202デフォルトの名無しさん
垢版 |
2019/02/14(木) 19:56:54.06ID:IkVUbwNW
お題を正しく理解できてない模様 >>176をもう1度確認
1つ目の#は6個、2つ目の###は2個、
3つ目の#    4つ目の###
   #は3個、    ###は1個で2行3列が全て埋まります
0206デフォルトの名無しさん
垢版 |
2019/02/14(木) 21:20:53.44ID:IkVUbwNW
>>204

1つ目の #   は6個で2行3列が全て埋まります

###
###


2つ目の ### は2個で2行3列が全て埋まります

###
###


3つ目の #
     #   は3個で2行3列が全て埋まります

###
###


4つ目の ###
     ### は1個で2行3列が全て埋まります

###
###
0209デフォルトの名無しさん
垢版 |
2019/02/15(金) 02:40:42.39ID:YMyZWZCa
90度回転ありなら
#     #   #     #
 # と #  と  # と # 
で敷きつめられる(=全て埋まる)という意味だろうけど
>>179に抵触するので、これは無しでしょ
0210デフォルトの名無しさん
垢版 |
2019/02/15(金) 06:13:53.42ID:hXoOelh0
>>208
回転を許すっつってんだろ氏ねよ糞無能が
@_
_@
を90度回転させたら
_@
@_
だろうが
市ね糞野郎
0211デフォルトの名無しさん
垢版 |
2019/02/15(金) 08:54:29.71ID:nnYj1Xkq
>>209 ようやくわかった。
a_
_a
_b
b_
などと並んでるものは、全て同じパーツとみなすという意味か。

>>176 のお題をよく見ると、2 x 3 の正解の回答が書かれてる。 斜めは許していないからダメだろ。
また、回転も許していない。
回転を許すなら

■ ■
というパーツも入るがそれは除外されてるから、回転も無しだ。
0212デフォルトの名無しさん
垢版 |
2019/02/15(金) 10:38:13.03ID:NxGjA/1R
>>199のような飛び飛びのパターンまで含めると5x5くらいのサイズなら解けそうでも
10x10くらいの大きさになるとほぼ解けなくなるか?
0213デフォルトの名無しさん
垢版 |
2019/02/15(金) 11:04:50.72ID:bh7l703i
...
d0<-a
a->b
b->c
c->d
c'<-d
b'<-c'
a<-b'
d->a2
d<-a2
a2->b2
....
に対して
任意の英数字から初めて右向きの矢印をnこ進んだ英数字を一瞬で割り出す簡単な計算方法を教えろ
左向きの矢印のときも答えろ
ここで英数字には好きな整数の値を対応させろ
0215デフォルトの名無しさん
垢版 |
2019/02/15(金) 11:21:16.25ID:bh7l703i
新問題
...
g0<-a
a->b
b->c
c->d
c'<-d
b'<-c'
a<-b'
d->e
e->f
f->g
f'<-g
e'<-f'
g->a1
g<-a1
a1->b1
....
に対して
任意の英数字から初めて右向きの矢印をnこ進んだ英数字を一瞬で割り出す簡単な計算方法を教えろ
左向きの矢印のときも教えろ
ここで英数字には好きな整数の値を対応させろ
0218デフォルトの名無しさん
垢版 |
2019/02/15(金) 11:55:27.68ID:bh7l703i
自己解決しました
この問題には答えなくていいです
>>217
これからは英語で書くので許して下さい
0221デフォルトの名無しさん
垢版 |
2019/02/15(金) 12:43:47.27ID:JRF4Gyvi
わけのわからん問題が続くなあ・・・
0223デフォルトの名無しさん
垢版 |
2019/02/16(土) 02:08:44.97ID:3MiMTZ5E
しかしこの問題は回転を考えないと、曲がったパーツは不可能だね。
かなり単純化される。
0224デフォルトの名無しさん
垢版 |
2019/02/16(土) 02:11:07.89ID:vjYPWj7f
なんかスレが新しくなってから湧いてきたPythonのクソみたいなコード連投してる日本語がめちゃくちゃのやつうざい
0226デフォルトの名無しさん
垢版 |
2019/02/16(土) 02:35:08.75ID:zutWNq0P
2行3列で回転無しなら以下の4つが答え

#

###

#
#

###
###

回転ありなら更に以下の2つも

##
#

#
##
0228デフォルトの名無しさん
垢版 |
2019/02/16(土) 09:56:41.50ID:3oducOde
煽りではなく本当に発達障害またはそれに準ずる知的ボーダーを疑うレベルで頭悪いな
0231デフォルトの名無しさん
垢版 |
2019/02/16(土) 15:04:36.49ID:PD6v+6Vh
>>230 Perl5
use feature qw{current_sub say};

sub bblsort {
for (0..@_) {
sub {
if (@_ >= 2) {
__SUB__->(@_[1..$#_]);
($_[1], $_[0]) = ($_[0], $_[1])
if $_[0] > $_[1]
}
}->(@_[$_..$#_]);
}
}

use List::Util shuffle;
@a = shuffle 1..20;
say "1) @a";
bblsort @a;
say "2) @a";

実行結果
~ $ perl 13_230_bblsort.pl
1) 13 6 18 7 15 1 11 8 20 16 14 4 9 10 12 17 2 19 5 3
2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0232デフォルトの名無しさん
垢版 |
2019/02/16(土) 16:42:44.41ID:hxDCwUVz
お題:数値Xを4つの方法で整数に丸めよ
(1) 0に向かう
(2) 0から遠ざかる
(3) 正の無限大に向かう
(4) 負の無限大に向かう


X = 0.5
=> 0 1 1 0

X = -1.1
=> -1 -2 -1 -2

X = 3
=> 3 3 3 3
0233デフォルトの名無しさん
垢版 |
2019/02/16(土) 16:47:26.55ID:akVlWGeE
ふたたび、円の内部の整数点を求めるやつ。個数ごとその最小半径を求める。
41個、47個とかが難し目だった気が。
0236デフォルトの名無しさん
垢版 |
2019/02/16(土) 17:27:32.65ID:PD6v+6Vh
>>232 組み込み使っていいんだよね? (面倒になるけど、使わなくても書けるけどサ…)
Perl5

use POSIX qw(floor ceil);
for (0.5, -1.1, 3) {
@a = ("$_ => ",
sprintf('%d', $_), #int($_),
($_ > 0 ? ceil($_) : ceil($_-1)),
ceil($_),
floor($_)
);
print "@a\n";
}


実行結果
~ $ perl 13_232_round.pl
0.5 => 0 1 1 0
-1.1 => -1 -2 -1 -2
3 => 3 3 3 3
0237デフォルトの名無しさん
垢版 |
2019/02/16(土) 17:33:21.11ID:PfkkbXxw
>>230 Ruby
def bs(ary)
  ary.tap do |a|
    (a.size**2).times do
      (a.size - 1).times do |i|
        a[i + 1], a[i] = a[i, 2] if a[i] > a[i + 1]
      end
    end
  end
end
p bs([3, 1, 4, 15, 92]) # => [1, 3, 4, 15, 92]

>>232
sgn = -> n {n <=> 0}
r4 = -> n {n.floor}
r3 = -> n {-r4[-n]}
r2 = -> n {sgn[n] * r3[n.abs]}
r1 = -> n {sgn[n] * r4[n.abs]}

[0.5, -1.1, 3].each{|i| puts 'x = %p => %p %p %p %p' % [i, r1[i], r2[i], r3[i], r4[i]]}
# =>
x = 0.5 => 0 1 1 0
x = -1.1 => -1 -2 -1 -2
x = 3 => 3 3 3 3
0238デフォルトの名無しさん
垢版 |
2019/02/16(土) 17:34:37.44ID:PD6v+6Vh
>>236 これだと
入力が0のとき
>(2) 0から遠ざかる
が-1になっちゃう。

($_ > 0 ? ceil($_) : ceil($_-1)),

↓を

($_ >= 0 ? ceil($_) : ceil($_-1)),

とすべきでしょうね。スマソ
0239デフォルトの名無しさん
垢版 |
2019/02/16(土) 18:34:59.76ID:akVlWGeE
>>234
円周上が正解
0240デフォルトの名無しさん
垢版 |
2019/02/16(土) 22:05:48.79ID:lcFO2eao
>>262 J
f =: (**<.@|),(**>.@|),<.,>.
f 0.5
0 1 1 0

f _1.1
_1 _2 _1 _2

f 3
3 3 3 3
0242デフォルトの名無しさん
垢版 |
2019/02/16(土) 22:38:05.19ID:lcFO2eao
>>240
間違えました
262ではなく>>232でした
0244 ◆QZaw55cn4c
垢版 |
2019/02/17(日) 00:20:40.59ID:TOi2tzGo
>>232 をやろうとおもって、IEEE754 の float/double を直接触る方法を探しているのですが、なにかいい方法はないでしょうか…
0248デフォルトの名無しさん
垢版 |
2019/02/17(日) 08:30:18.08ID:SfPzlMrR
>>233
これ


「Nに対し平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」

例)
x^2 + y^2 = 1の整数点は4つだが、最小半径ではない。
(x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。
0249デフォルトの名無しさん
垢版 |
2019/02/17(日) 09:09:13.01ID:SfPzlMrR
>>248
網羅的は、きりがなく一つの予想をたてた。
一つ半径を求めたら、次のような操作で半径を縮めたものと、真の最小半径が一致する予想。

半径rの整数点がNだとして。 rを整数比で縮小して中心をずらす。

たとえば上の例だと、r=1で、r → 2/4 r で、
(2x -1)^2 + (2y -1)^2 = 2r
両辺4倍して中心ずらした式
0250デフォルトの名無しさん
垢版 |
2019/02/17(日) 14:03:58.61ID:SfPzlMrR
整数比かけるので有理数半径ならすべて作り出せるから当たり前か
無駄なく高速に半径縮められる手法が大事か
0251デフォルトの名無しさん
垢版 |
2019/02/17(日) 14:06:36.33ID:SfPzlMrR
あと半径は間違いで、半径でなく右辺、半径^2 だった
0252デフォルトの名無しさん
垢版 |
2019/02/17(日) 19:56:30.00ID:qArvPplr
お題
パンケーキソートを実装する
0253デフォルトの名無しさん
垢版 |
2019/02/18(月) 22:45:57.31ID:Gp2d+oGP
>>252 Perl5 (効率の良いアルゴリズムではないけれど、まずは…)

use List::Util shuffle;

@a = shuffle 1..20;
print "shuffled) @a\n";

sub flip {
($m, $n) = @_;
@a[0..$m] = reverse @a[0..$m];
@a[0..$n] = reverse @a[0..$n];
}

for $i (reverse 1..$#a) {
 $k = undef;
 for (0..$i) {
  $k = $_ if (!defined($k) or $a[$k] < $a[$_])
 }
 flip($k, $i) if $k < $i;
}

print "sorted ) @a\n";


実行例
~ $ perl 13_252_clumsy_pancake_sort.pl
shuffled) 18 6 2 13 16 1 12 15 10 4 17 20 9 7 19 14 5 11 3 8
sorted ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0254デフォルトの名無しさん
垢版 |
2019/02/19(火) 22:19:54.18ID:sIqHxZ1N
; Common Lisp

(defun flip (seq n)
 (concatenate (type-of seq) (nreverse (subseq seq 0 (1+ n))) (subseq seq (1+ n))))

(defun pancake-sort (seq predicate)
 (loop for s = seq
   then (if j (flip (flip (flip (flip s (1- j)) (1- i)) i) j) s)
   for i from 1 to (1- (length seq))
   for j = (position (elt s i) s :end i :test predicate)
   finally (return s)))
0255デフォルトの名無しさん
垢版 |
2019/02/19(火) 22:25:14.24ID:flzwRht/
お題:1から8までのカードを混ぜ、2枚そこから引いた時1枚目*10+2枚目が素数になる確率を求める。
ただし、
1. 小数第3位で四捨五入した後に回答すること。
2. 数学的な証明は禁止。
3. 各カードは9-その数字の数だけ存在する。 (例:1ならば8枚存在する)
4. 各カードが出る確率はまだ引かれていないカードの枚数に比例する。
0257デフォルトの名無しさん
垢版 |
2019/02/20(水) 00:55:56.83ID:SyQ4jkRO
>>255 Perl5
$R = 0.0;
@s = map{($_) x (9-$_)} 1..8; #say "@s";
$t = @s; #say $t;
for (qw{11 13 17 23 31 37 41 43 47 53 61 67 71 73 83}) {
 @o = split'';
 my %h;
 $h{$_}++ for @s;
 my $r = $h{$o[0]}-- / $t;
 $r *= $h{$o[1]}-- / ($t - 1);
 $R += $r;
}
printf "%3.2f\n", $R;

実行結果
~ $ perl 13_255.pl
0.31
0258さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/20(水) 00:58:27.33ID:5PEVWiZL
お題: URLで場所を指定された、インターネット上のテキストファイルをダウンロードするプログラム。
0259デフォルトの名無しさん
垢版 |
2019/02/20(水) 01:16:40.92ID:SyQ4jkRO
>>258 Perl5
require LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)');
use HTTP::Cookies;
$ua->cookie_jar(HTTP::Cookies->new(file => 'lwp-cookies.txt', autosave => 1));
$url = 'http://ftp.iij.ad.jp/pub/linux/centos/7.6.1810/isos/x86_64/0_README.txt';
$file = './0_README.txt';
$res = $ua->mirror($url, $file);
print $res->status_line, "\n";

実行例
~ $ perl 13_258.pl
200 OK


(※こういうのは、別に今急に考えたわけじゃなく、日常的に作って使っているのですぐ投稿できました)
0264デフォルトの名無しさん
垢版 |
2019/02/20(水) 02:51:47.69ID:qYIek1dL
>>255
;; Common Lisp

(let ((prime (list 2)))
 (defun primep (n)
  (loop for i from (1+ (car prime)) upto n
      unless (find-if (lambda (j) (zerop (mod i j))) prime :from-end t)
      do (push i prime))
  (find n prime)))

(defun nearest (i j)
 (/ (floor (+ (* i (expt 10 j)) 0.5)) (expt 10 j)))

(loop with cards = (loop for i from 1 to 8 nconc (make-list (- 9 i) :initial-element i))
    and n = 0 and p = 0
    for one in cards
    do (loop for two in (remove one cards :count 1)
         do (incf n)
         if (primep (+ (* 10 one) two)) do (incf p))
    finally (format t "~,3F~%" (nearest (* (/ p n)) 3)))
0267デフォルトの名無しさん
垢版 |
2019/02/20(水) 03:43:59.14ID:J4bEIWoi
>>265
できるかなあ?どういう制限しているかにもよるぞ。
0268デフォルトの名無しさん
垢版 |
2019/02/20(水) 05:32:07.81ID:B2QSVSiS
PowerShell にも、curl, wget ある

get-alias (gal)

curl -> Invoke-WebRequest
wget -> Invoke-WebRequest

と言うことは、Ruby からも、そのコマンドを呼べる
0269268
垢版 |
2019/02/20(水) 09:30:07.43ID:B2QSVSiS
なんと、コマンドプロンプトで、
where curl と入力すると、
C:\Windows\System32\curl.exe

PowerShell の、curl, wget は、Invoke-WebRequest のエイリアスだけど、
curl.exe は、本物のcurl !
0271デフォルトの名無しさん
垢版 |
2019/02/20(水) 09:52:59.12ID:PF1BNO4k
>>258 >>265 なんだ下心があったのか。

pythonista stash は以下のコマンドが使える。

help(StaSh) v0.7.1
alias, cat, cd, clear, cowsay, cp, crypt, curl, cut, dropbox_setup, du, easy_config, echo, edit, exit, fg, find, ftpserver, gci, gh, git, grep, head, httpserver,
jobs, kill, latte, ls, mail, man, mc, md5sum, mkdir, monkeylord, more, mount, mv, openin, pbcopy,
pbpaste, ping, Usage, pip, printenv, printhex, ptinstaller, pwd, py-tree, python, python3, quicklook, rm, rmdir, scp, selfupdate, sha1sum, sha256sum,
sort, source, sqlite, ssh, ssh-keygen, stashconf, tail, tar, telnet, totd, touch, umount, uniq, unzip, version,
wc, webviewer, wget, whatis, which, wol, xargs, zip

ftpserver や、httpserverは簡易的なサーバーになる。
ssh やscp 、tar zip などは使い道多そう。
webviewer てpython の下でブラウザが立ち上がってるみたいなんだがどんな使い道があるんだろう?

なお、標準python用のシェルは、xonsh と言うのがあるらしい。 xonsh では、標準的なshellコマンドと並行してpython スクリプトも実行できるから強力。
stash ではそれはできない。
0272268
垢版 |
2019/02/20(水) 10:31:11.68ID:B2QSVSiS
WSH はわからないけど、Ruby では、

require 'nokogiri'

html = `curl http://www.example.com/`
# curl は書き込めないので、全角に変換した

doc = Nokogiri::HTML( html )

elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain
0274デフォルトの名無しさん
垢版 |
2019/02/20(水) 13:03:16.05ID:agArr1lp
>>269
なんかね。UNIX系OSで昔からよく使われてたコマンドを移植したようで、tarとか他にも色々あったと思った。
0280デフォルトの名無しさん
垢版 |
2019/02/21(木) 19:06:17.90ID:TUYpSwcQ
>>279 JavaScript
const arr = ['apple', 'banana', 'orange', 'mango'];
const last = ' and ' + arr.pop();
console.log(arr.join`, ` + last);
//=> apple, banana, orange and mango
0282デフォルトの名無しさん
垢版 |
2019/02/21(木) 19:27:21.23ID:2zdYL4u2
>>279
Haskell

main = putStrLn.concat.concat $ [map addCanma (init lst),["and,"],[last lst]]

addCanma s = s ++ ","

lst = ["apple","banana","orange","mango"]



output:
apple,banana,orange,and,mango
0283デフォルトの名無しさん
垢版 |
2019/02/21(木) 19:31:58.30ID:lqQG1Hmj
題意は
list = ["red","green","black","white"]
print(", ".join(list[:-1]),"and",list[-1])
# red, green, black and white
だろ
0285デフォルトの名無しさん
垢版 |
2019/02/21(木) 19:51:21.05ID:2zdYL4u2
>>283
あ、そうか。
不恰好だけどこれで一応対応。

(putStrLn.concat.concat) [init $ map addCanma $ init lst,[last $ init lst],[" and "],[last lst]]

スマートな解答も考えてみるよ。
0287デフォルトの名無しさん
垢版 |
2019/02/21(木) 20:20:50.88ID:2zdYL4u2
スマートかは兎も角、一応マシな形に。
空リストや要素数1にも対応。

Haskell

main = putStrLn $ last2 lst

last2::[String] -> String
last2 [] = []
last2 [x] = x
last2 [x,y] = concat [x," and ", y]
last2 (x:xs) = x ++ "," ++ last2 xs

lst = map show [0..5]


output:
0,1,2,3,4 and 5
0288デフォルトの名無しさん
垢版 |
2019/02/21(木) 20:59:38.40ID:lqQG1Hmj
>>286
list = [str(x) for x in range(1,5)]
とか
map(lambda x : str(x), list)
でもおk

要素数が1個以下の場合はifで分離するだけなので略
0289デフォルトの名無しさん
垢版 |
2019/02/21(木) 21:09:47.73ID:y3+CYNZ6
>>279 Common Lisp
(format t "~{~@{~A~^~#,1^, ~}~^ and ~A~}~%" (list 1 2 3 4))
https://ideone.com/6DcwO9
0290デフォルトの名無しさん
垢版 |
2019/02/21(木) 21:21:18.07ID:lqQG1Hmj
intとstrが混在してる場合でも大丈夫で入力数が1以下ならそのまま返すワンライナー

python
print("".join(reversed(" ,".join(reversed([str(x) for x in list])).replace(",","dna ",1))))

JS+正規表現
console.log(list.join(", ").replace(/(.*),(.*?)+/,"$1 and $2"))

冷静に考えるとこの正規表現を使い回せばどの言語でもワンライナーなのでは
0291さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/21(木) 21:21:18.26ID:PQQkN+7n
ラティス、再び。

お題: >>99 の場合分けのラティス構造を使って、複数の入力文字列について、共通部分をまとめ、1つの文字列に凝縮せよ。

(例)
ああい
ああ
あう
→あ{{あ{い/}}/う}
0292デフォルトの名無しさん
垢版 |
2019/02/21(木) 21:30:40.21ID:lqQG1Hmj
よく考えたらreversedなんか使わんでも
print((" ,".join([str(x) for x in list][::-1]).replace(",","dna ",1))[::-1])
でいけるか。join削減できるし
0293さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/21(木) 21:32:52.15ID:3Jj6vI7v
出力文字列の長さは最短でなければならない。
場合分けの順序は問わないが、場合分けの項目について、ソートすることが望ましい。
0297デフォルトの名無しさん
垢版 |
2019/02/21(木) 22:55:49.76ID:2zdYL4u2
>>279
>>292

Haskellでもワンライナー出来たけど、読みやすいとは思えない。(横長だし)
発想としては(要素数2以上なら)最後以外の要素(文字列)の頭に','追加して、全部結合して(大きな文字列にして)最後に頭の','を省く。

main = putStrLn.tail.concat $ if length lst < 2 then lst else [(concat.(map (\x -> ',':x)).init) lst," and ",last lst]

lst = map show [0..5]

個人的に >>287 の方が発想も読みやすさも好みの書き方。
(読み難くなるなら関数分ける派)

pythonのはワンライナーでも比較的読みやすくて、ちょっと羨ましい。
0298デフォルトの名無しさん
垢版 |
2019/02/21(木) 22:59:16.06ID:2zdYL4u2
>>297
弄ってるうちに要素一以下だとバグ出てた。

正しいコードはこっち。

putStrLn.concat $ if length lst < 2 then lst else [(tail.concat.(map (\x -> ',':x)).init) lst," and ",last lst]
0299デフォルトの名無しさん
垢版 |
2019/02/21(木) 23:36:37.11ID:un6uIa3F
>>282 Perl5

sub f {
 my $a = shift;
 @_ ? (@_ > 1 ? "$a, " : "$a and ").f(@_) : $a
}

use feature say;

say f(qw[red green black white]);
say f(qw[apple banana]);
say f(qw[one]);


実行結果
~ $ perl 13_279_and.pl
red, green, black and white
apple and banana
one
0301デフォルトの名無しさん
垢版 |
2019/02/22(金) 00:07:27.55ID:wSgiM5bY
>>299
アンカー間違えた >>279 宛だった…orz


>>279 もう一丁 Perl5

sub g {
 my $z = ' and '.pop @_ if @_ > 1;
 join(', ', @_).$z;
}

use feature say;
say g(qw[red green black white]);
say g(qw[apple banana]);
say g(qw[one]);

実行結果
~ $ perl 13_279_and_2.pl
red, green, black and white
apple and banana
one
0305デフォルトの名無しさん
垢版 |
2019/02/22(金) 06:09:02.19ID:HhIJRo4K
>>279
Smalltalk (Pharo 7)

#('apple' 'banana' 'orange' 'mango') asCommaStringAnd
==> 'apple, banana, orange and mango'

#('apple' 'banana') asCommaStringAnd
==> 'apple and banana'

#('apple') asCommaStringAnd
==> 'apple'
0306デフォルトの名無しさん
垢版 |
2019/02/22(金) 06:36:03.41ID:S1fPIClY
>>279 python

def f(lst): return ('空だ' if not lst else
','.join([str(x) for x in lst[:-1]])
+ (' and ' if len(lst)>1 else'')
+ str(lst[-1])
)


print(f( [ 1,'二',3,4,'五'] )) # 1,二,3,4 and 五
print(f( [1,'二'] )) # 1 and 二
print(f( [1] )) # 1
print(f([])) # 空だ
0307305
垢版 |
2019/02/22(金) 07:07:04.28ID:HhIJRo4K
しまった既出だったorz
0308デフォルトの名無しさん
垢版 |
2019/02/22(金) 07:58:55.12ID:6TNKk8ap
>>279 Ruby

f = -> a {a[0..-2].join(', ').sub(/.\K\z/, ' and ') << a[-1].to_s}

(-1..3).each{|r| puts f[[*0..r]]} # =>

0
0 and 1
0, 1 and 2
0, 1, 2 and 3
0316デフォルトの名無しさん
垢版 |
2019/02/22(金) 21:42:16.23ID:THqrb0iU
お題:
長方形のフィールドが与えられる。フィールド上では上下左右に移動することができる。
各マスの数字はそのマスに入るためのコストを表す。
SからGに向かうときの最小コストを求めよ。(SとGのコストは0とする)

S5111
1115G
=> 6

S1111
98642
G1111
=> 9

13457689768914512071934123457
G4578901258901212890361125312
37890423076834712378998725463
16890102569615902061456259893
34582934765923812893461515232
57896123896741378915691551697
89013897456123457162501835479
21389046013845610034623405686
8902346203948612341356362342S
=> ?
0322デフォルトの名無しさん
垢版 |
2019/02/23(土) 00:27:48.65ID:khwKgkQE
>>313 python
#階乗1
import math
print('階乗1',math.factorial(21))

#階乗2
def f(n): return f(n - 1)*n if n > 1 else n
print('階乗2',f(21))

#階乗3
print('階乗3',(lambda x:f(21))( globals().update({"f": lambda n: n*f(n - 1) if n > 2 else n })))
0323デフォルトの名無しさん
垢版 |
2019/02/23(土) 01:14:20.46ID:9pS68leH
>>279
Kotlin script
最後のカンマを正規表現の文字列置換で and にしただけ。

println(listOf("abc", "def", "xyz").joinToString(", ").replace(",([^,]*)$".toRegex(), " and$1"))

出力

abc, def and xyz
0324デフォルトの名無しさん
垢版 |
2019/02/23(土) 01:19:01.99ID:CTQXI+x5
lispって組み込みで素数かどうか判定するやつ提供されてるのか、、、面白い!
0325デフォルトの名無しさん
垢版 |
2019/02/23(土) 02:10:15.51ID:9pS68leH
>>313
bc

n = 2; for (i = 3; i <= 21; i++) n*=i; n

出力
51090942171709440000
0327デフォルトの名無しさん
垢版 |
2019/02/23(土) 03:32:49.90ID:R2s6jSV3
bcのってjsでもそのまま動くんだな。どっちもc由来文法だからか…
for(i=s=1;i<22;)s*=i++;s
0328デフォルトの名無しさん
垢版 |
2019/02/23(土) 04:30:09.37ID:R2s6jSV3
>>326
恥ずかしながらdcコマンド知らなかった…いいねこれ。
~$ echo "$(seq -s' ' 1 21)$(printf '* %.0s' {1..20})p" | dc
51090942171709440000
0329デフォルトの名無しさん
垢版 |
2019/02/23(土) 08:05:10.28ID:xK8/Ze+A
>>313 Maxima
print(21!);
0331デフォルトの名無しさん
垢版 |
2019/02/23(土) 08:45:55.53ID:DQY5g4De
>>316
これは、本格的だな

ダイクストラ・A* みたいな、順位キュー(priority queue)を使わないと、いけないかも
0335デフォルトの名無しさん
垢版 |
2019/02/23(土) 12:44:52.28ID:W0y17tlk
python3
標準ライブラリ内の数学関数の例
import math
print(math.factorial(21))
そうじゃない例
from functools import reduce
print(reduce(lambda x,y:x*y,range(1,22)))

ちょっと高度化したお題
素数階乗n#を実装せよ
ただし素数階乗とは与えられた整数n以下のすべての素数の積である

1#=1
3#=4#=6
5#=30
0336デフォルトの名無しさん
垢版 |
2019/02/23(土) 13:22:30.58ID:R2s6jSV3
例がちょっと意味分からない
1#=1
1以下の素数の積なのに1?
3#=4#=6
何これ?
5#=30
これだけ分かる
0339デフォルトの名無しさん
垢版 |
2019/02/23(土) 13:34:54.53ID:vMXU7Bcc
>>337
掛けるもののがないときは1として扱うのが普通だよ
0!とかΠの項数が0の時とか

ただこの出題者はそのへん理解してないだろうから解く気がしない
0342デフォルトの名無しさん
垢版 |
2019/02/23(土) 13:53:12.99ID:W0y17tlk
というか数学でも0!=1!=1と定義されているのが普通だと思うし
高校でも大学でもそうじゃない問題を見たことがないのだが
0344デフォルトの名無しさん
垢版 |
2019/02/23(土) 14:28:11.89ID:DQY5g4De
単位元(初期値)だろ。
足し算は0、掛け算は1 が、単位元

Ruby で、
( 1..21 ).inject( 1, :* )

1 が初期値で、:* で掛け算メソッドを渡している
0345デフォルトの名無しさん
垢版 |
2019/02/23(土) 15:02:20.95ID:R2s6jSV3
>>342
> ただし素数階乗とは与えられた整数n以下のすべての素数の積である

と書いてあるので、

「与えられた整数n」が1
のとき、
「与えられた整数n以下のすべての素数の積」
は、
「1以下のすべての素数の積」
となり、
1以下に素数はないのになんで例で答がが1になってるんだろう、と思った次第です。
お騒がせしました。
0346デフォルトの名無しさん
垢版 |
2019/02/23(土) 15:15:16.07ID:R2s6jSV3
できた
JavaScript
const prodPrimes = n => {
const primes = [1];
for (let m = n; m > 1; m--) {
let prime = 0;
for (let i = 2; i <= m - 1; i++) {
if (m % i === 0) prime = i;
}
primes.push(prime || m);
}
return [...new Set(primes)].reduce((acc, p) => acc * p);
}
console.log(prodPrimes(1)); //=> 1
console.log(prodPrimes(3)); //=> 6
console.log(prodPrimes(4)); //=> 6
console.log(prodPrimes(5)); //=> 30

今夜はPythonで>>316に挑戦したい
0347デフォルトの名無しさん
垢版 |
2019/02/23(土) 15:45:56.58ID:xK8/Ze+A
>>335 J
f =: 3 : 0
*/ 1 , I. 1 p: i. >:y
)

f@> 1 3 4 5 21
1 6 6 30 9699690
0349デフォルトの名無しさん
垢版 |
2019/02/23(土) 16:01:13.49ID:BD+5EZ0V
>>313 Common Lisp
(defun ! (n)
  (apply #'* (loop for i from 1 upto n collect i)))

CL-USER> (! 21)
51090942171709440000
CL-USER> (! 0)
1
CL-USER>
0354デフォルトの名無しさん
垢版 |
2019/02/23(土) 20:22:19.99ID:ejRNWGjN
>>316
python(pypy) https://ideone.com/DV1w4s

本線: キュー使用したダイクストラ (+ 経路復元)。

サンプル程度なら、ワーシャルフロイド(頂点^3)でも回る、と同方も追加。
さすがにpythonには少々きつく、pypyに逃げた。
0355デフォルトの名無しさん
垢版 |
2019/02/24(日) 00:49:59.19ID:ROsmA06r
>>354 pypy に逃げたという話は、その方がかなりスピードが早いからという事? どの位のスピード差になるんだろう?
0356デフォルトの名無しさん
垢版 |
2019/02/24(日) 01:37:12.40ID:jRfp9b62
>>313
Kotlin script

println("%.0f".format((2..21).map { it.toDouble() }.reduce { n1, n2 -> n1 * n2 }))
0358さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/24(日) 05:55:10.72ID:xnYazQgz
お題: 3分タイマーを作れ。3分間待って、音を鳴らすか、画面に「BEEP!」と表示せよ。ただし、CPU時間を無駄に消費してはならない。
0360さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/24(日) 06:27:08.15ID:xnYazQgz
お題: 玉入れ競争のシミュレーションを作れ。1チームに玉50個で園児3人。2チームある。園児それぞれが10秒に玉1個投げる。
一回投げると、3秒後に1/2の確率で玉が入る。イベントのたびに「チーム#1の園児#1が玉を投げました」「チーム#2の園児#1の玉が入りました」などと表示する。
0364デフォルトの名無しさん
垢版 |
2019/02/24(日) 08:59:23.56ID:k3GW1oFG
お題
与えられた文字列を縦に表示する

入力
hello

出力
h
e
l
l
o
0369デフォルトの名無しさん
垢版 |
2019/02/24(日) 10:51:12.60ID:5XYYe3Vz
>>346
Pythonじゃ緩すぎだろw
Brainfu*kとかJで挑戦したいと言わないと
世のマゾヒスト達からマサカリ投げられるぞw
0370デフォルトの名無しさん
垢版 |
2019/02/24(日) 11:01:40.94ID:gbE7FXAb
>>359 Perl5

use List::Util shuffle;
@a = shuffle 1..5;
print "shuffled) @a\n";

use threads;

use threads::shared;
my @b: shared;

sub f {
&nbsp;&nbsp;my $n = shift;
&nbsp;&nbsp;sleep $n;
&nbsp;&nbsp;push @b, $n;
}

push @thr, threads->create(\&f, $_) for @a;
$_->join() for @thr;

print "sorted ) @b\n";

実行結果
~ $ perl 13_359.pl
shuffled) 5 3 1 2 4
sorted ) 1 2 3 4 5
0371デフォルトの名無しさん
垢版 |
2019/02/24(日) 11:04:08.38ID:gbE7FXAb
>>370 しまった、&nbsp;がそのまま表示されている…orz 全角スペースに置換して修正
>>359 Perl5

use List::Util shuffle;
@a = shuffle 1..5;
print "shuffled) @a\n";

use threads;

use threads::shared;
my @b: shared;

sub f {
 my $n = shift;
 sleep $n;
 push @b, $n;
}

push @thr, threads->create(\&f, $_) for @a;
$_->join() for @thr;

print "sorted ) @b\n";

実行結果
~ $ perl 13_359.pl
shuffled) 5 3 1 2 4
sorted ) 1 2 3 4 5
0374デフォルトの名無しさん
垢版 |
2019/02/24(日) 14:37:33.43ID:ke/CY5a3
>>351
いや、21 factorialをSmalltalk-76で実際に計算したものですよ!
動画にしたほうがよかったですか?^^;
0375デフォルトの名無しさん
垢版 |
2019/02/24(日) 15:44:30.88ID:R6DRM9b9
>>335 Squeak Smalltalk (このコードは Pharo では動かない)

| fn |
fn := [:n | (Integer primesUpTo: n + n isPrime asBit) inject: 1 into: #*].
#(1 3 4 5) collect: fn. "=> #(1 6 6 30) "
0376デフォルトの名無しさん
垢版 |
2019/02/24(日) 15:56:11.32ID:R6DRM9b9
>>364 Squeak Smalltalk (同じく Pharo とは互換性がないコードで)

'hello' joinSeparatedBy: Character cr.

"= 'h
e
l
l
o' "
0377デフォルトの名無しさん
垢版 |
2019/02/24(日) 16:12:06.37ID:ke/CY5a3
>>359 Pharo/Squeak Smalltalk

| sleepsort |
sleepsort := [:arr |
| queue |
queue := SharedQueue new.
arr do: [:x | [(x * 2) milliSeconds asDelay wait. queue nextPut: x] fork].
(1 to: arr size) inject: #() into: [:acc :idx | acc, {queue next}]
].

sleepsort value: #(2 1 5 10 7 8 3 6 4 9)

"=> #(1 2 3 4 5 6 7 8 9 10) "
0378デフォルトの名無しさん
垢版 |
2019/02/24(日) 17:18:42.39ID:+6ZRRI/z
>>358 puthonista ( iPhone )

# iPhoneのシステムサウンドを使ってアラームを出す。
import sound,time

alarm = '/System/Library/Audio/UISounds/alarm.caf'
time.sleep(3*60)
id = sound.play_effect(alarm)
0380デフォルトの名無しさん
垢版 |
2019/02/24(日) 19:37:23.57ID:Wf3q+Rvy
>>359 Bash

#!/usr/bin/bash

N=5

IFS=$'\n'
a=(`seq $N | shuf | sed -e 's/\([0-9]\+\)/(sleep \1; echo \1 >> result)/'`)
IFS="$'\n'$'\t' "

[ -f ./result ] && rm ./result
for s in "${a[@]}"; do
 echo "$s"
 sh -c "${s}" &
done

wait
cat ./result


~ $ sh 13_359.sh
(sleep 2; echo 2 >> result)
(sleep 5; echo 5 >> result)
(sleep 4; echo 4 >> result)
(sleep 1; echo 1 >> result)
(sleep 3; echo 3 >> result)
1
2
3
4
5
0381デフォルトの名無しさん
垢版 |
2019/02/25(月) 02:16:17.34ID:VuzBCyor
>>364
Kotlin script

while (readLine()?.map { it }?.joinToString("\n")?.let { println(it); it } != null);
0382デフォルトの名無しさん
垢版 |
2019/02/25(月) 02:42:58.27ID:VuzBCyor
>>358
sh

sleep 180 ; echo 'BEEP!'
0384さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/02/25(月) 02:47:19.11ID:qxzw13Bf
お題: スリープと複数のスレッドを使って素数を10個求めよ。1つのスレッドは素数倍数のループを意味する。
0386デフォルトの名無しさん
垢版 |
2019/02/25(月) 09:19:02.25ID:KMrhrKmq
意味がわからん
0389デフォルトの名無しさん
垢版 |
2019/02/25(月) 11:25:48.34ID:4jlXoier
スリープタイマに番号付けてON/OFF出来ればエラトステネスの篩で素数が出来る。
0390デフォルトの名無しさん
垢版 |
2019/02/25(月) 17:25:13.53ID:KMrhrKmq
わかんないからちょっとやってみて
0391デフォルトの名無しさん
垢版 |
2019/02/25(月) 18:50:50.58ID:IURODyYm
>>364 J
smoutput@>'hello'
0392デフォルトの名無しさん
垢版 |
2019/02/25(月) 19:00:24.37ID:mboQc3Dn
>>364 JavaScript
[...'hello'].forEach(c=>console.log(c))
または
for(let c of 'hello')console.log(c)
または
console.log([...'hello'].join`\n`)
0393デフォルトの名無しさん
垢版 |
2019/02/26(火) 01:01:25.98ID:ZoqutRDZ
>>364 Ruby
puts "Hello".split("")
0395デフォルトの名無しさん
垢版 |
2019/02/26(火) 02:51:12.85ID:lsok3PaS
>>394
Linux等、UNIX系OSの場合コマンドラインから以下を入力するだけで GNU/Linux 等と出てくるが、
どうしてもプログラムにしたいのならシェルスクリプトの中でこれだけ実行するようにしておけばよい。

uname -o
0396デフォルトの名無しさん
垢版 |
2019/02/26(火) 02:53:03.78ID:lsok3PaS
>>394
Windows のコマンドプロンプトの場合はこれ。ただしバージョンも一緒に出てくる。

ver

これもどうしてもプログラムにしたいならバッチファイルでこれだけ実行するようにしておけばよい。
0397デフォルトの名無しさん
垢版 |
2019/02/26(火) 07:52:39.56ID:xb9W0X9p
pythonista

import os,sys

print(os.uname() )
# posix.uname_result(sysname='Darwin', nodename='iPhoneXsMAX', release='18.2.0', version='Darwin Kernel Version 18.2.0: Wed Dec 19 20:28:53 PST 2018; root:xnu-4903.242.2~1/RELEASE_ARM64_T8020', machine='iPhone11,6')

print(os.uname()[0],os.uname()[4],sys.platform )
# Darwin iPhone11,6 ios

from distutils.util import get_platform

print(get_platform())
# darwin-18.2.0-iPhone11,6
0398デフォルトの名無しさん
垢版 |
2019/02/26(火) 08:17:26.80ID:N21l9DY8
>>394 J
osname =: 3 : 0
a =. 9 !: 12 y
if. a = 5 do. 'unix'
else. a = 6 do. 'windows'
else. do. 'other'
end.
)
0399デフォルトの名無しさん
垢版 |
2019/02/26(火) 10:23:47.93ID:E0EMtjG2
>>394
Perl5

print "$^O\n";
0400デフォルトの名無しさん
垢版 |
2019/02/26(火) 15:46:59.25ID:N21l9DY8
>>364 Lua
io.write((io.read("*a"):gsub(".","%0\n")))
0402デフォルトの名無しさん
垢版 |
2019/02/26(火) 15:55:57.75ID:IBhh82RD
>>364
標準出力から与えられる場合
import sys
for x in sys.stdin.read() : print(x)

>>394と混合
import os
for x in os.getenv("OS"): print(x)
0403デフォルトの名無しさん
垢版 |
2019/02/26(火) 18:05:30.42ID:KX5s2hIr
>>384 Squeak/Pharo Smalltalk

| tick start primes sema sieveMaker processes ans |
tick := 1 second.
start := DateAndTime now.
primes := SharedQueue new.
sema := Semaphore new.
sieveMaker := [:x | [[(tick * x) asDelay wait. sema signal] repeat]].
processes := SharedQueue new.
tick asDelay wait.
processes nextPut: [
[ tick asDelay wait.
sema isSignaled ifFalse: [
| prime sieve |
prime := primes nextPut: (DateAndTime now - start / tick) asInteger.
sieve := sieveMaker value: prime.
processes nextPut: sieve fork
].
sema initSignals
] repeat
] fork.

ans := (1 to: 10) collect: [:idx | primes next].
1 to: processes size do: [:idx | processes next terminate].
ans "=> #(2 3 5 7 11 13 17 19 23 29) "
0404デフォルトの名無しさん
垢版 |
2019/02/26(火) 20:30:26.61ID:cNXsTeTJ
お題: (Aが真 または Bが真) ならば Cが真である。 であるをプログラムしなさい。
0405デフォルトの名無しさん
垢版 |
2019/02/26(火) 23:29:53.47ID:Tg4W+a2u
お題: 円の最大重複数を求めよ

例題 以下画像の場合、最大重複数は4です。
https://imgur.com/pbh3VSE.png
円の重複数え方は、2つの円が重なっていたら、重なっている数は2とします。
また、円の重複判定の際、2つの円が円周上の1点のみで重なる場合、それらの円は重なっていないとします。
(理由は重複している面積は0だから。)


以下、本題。
画像のようなNo.0からNo.99までの100個の円があります。
これの円の最大重複数を整数で答えなさい。
https://imgur.com/WiRHA1F.png

入力データ:
https://drive.google.com/open?id=1kl8bS3GOr8Ot2OMMACdCG0SJMpEKxLO3

入力データはx座標 y座標 r(半径)の順で記述されたリストで、すべて実数です。
与えられる入力データは
-800.0 ≦ x ≦ 800.0
-800.0 ≦ y ≦ 800.0
100.0 ≦ r ≦ 400.0
の条件を満たします。


画像は自作、多分正しい。
0406デフォルトの名無しさん
垢版 |
2019/02/27(水) 11:44:25.97ID:wHsSBDML
お題: 自分自身のコードのコメントと非コメントを入れ替えたコードを出力するプログラムの
コードが自分自身のコメントの非コメントを入れ替えたプログラムのコードに
なっているプログラム
0408デフォルトの名無しさん
垢版 |
2019/02/27(水) 16:44:46.91ID:1o6M4rID
>>406
サンプルプリーズ
0409デフォルトの名無しさん
垢版 |
2019/02/27(水) 19:23:18.85ID:1o0vhyUy
お題
整数N(N>=6)を相異なる3つの整数(0<a<b<c)の和で表すことを考える。
数列(a,b,c)として考えられるもののうち、辞書式順序で最小のものと最大のものを求めよ

N=6
=> (1,2,3)/(1,2,3)

N=100
=> (1,2,97)/(32,33,35)
0410デフォルトの名無しさん
垢版 |
2019/02/27(水) 19:25:22.96ID:sZAuINQ9
お題
英今文字からなる文字列が与えられる。
各文字の大文字、小文字の組み合わせをすべて求める。
"ab"の場合
ab
aB
Ab
AB
0414デフォルトの名無しさん
垢版 |
2019/02/27(水) 21:30:26.97ID:WT+xSYik
>>410 JavaScript
const acorn = s => {
for (let i=0; i < 2**s.length; i++) {
console.log([...s]
.reduce((acc, c, j) => acc+String.fromCharCode(c.charCodeAt() - 32 * i.toString(2).padStart(s.length, 0)[j]), '')
);
}
}
acorn('ab'); // の実行結果:
ab
aB
Ab
AB
acorn('ufo'); // の実行結果:
ufo
ufO
uFo
uFO
Ufo
UfO
UFo
UFO
0416デフォルトの名無しさん
垢版 |
2019/02/28(木) 06:17:40.15ID:9oEuhY5c
>>410 Ruby
s = "ufo"
a = []
s.each_char do |c| a.push([c, c.upcase]) end
b = a[0]
a[1..-1].each do |e| b = b.product(e) end
b.each do |e| puts(e.join) end
0417デフォルトの名無しさん
垢版 |
2019/02/28(木) 08:43:33.13ID:qFD89Rtd
>>410 Squeak Smalltalk(#perform: を二変数ブロックにすればPharoでも動く)

| fn |
fn := [:str |
| ans |
ans := OrderedCollection new.
#(asLowercase asUppercase) asDigitsToPower: str size do: [:comb |
ans add: (str with: comb collect: #perform:)
].
ans asArray
].

fn value: 'ab'. "=> #('ab' 'aB' 'Ab' 'AB') "
fn value: 'ufo'. "=> #('ufo' 'ufO' 'uFo' 'uFO' 'Ufo' 'UfO' 'UFo' 'UFO') "
0418デフォルトの名無しさん
垢版 |
2019/02/28(木) 09:14:29.16ID:vBJFBkkc
uppercaseメソッドのことスッカリ忘れてた>>414
const acorn = s => {
for (let i=0; i < 2 ** s.length; i++) {
console.log([...s]
.reduce((acc, c, j) => acc + (+i.toString(2).padStart(s.length, 0)[j] ? c.toUpperCase() : c), '')
);
}
}
0419デフォルトの名無しさん
垢版 |
2019/02/28(木) 10:31:36.11ID:PtOlEBM/
>>410 Ruby
def f(s)
a=s.chars.map{|c|[c,c.upcase]}
a.shift.product(*a).map(&:join)
end
p f("abc")

["abc", "abC", "aBc", "aBC", "Abc", "AbC", "ABc", "ABC"]
0420デフォルトの名無しさん
垢版 |
2019/02/28(木) 10:34:43.50ID:7nNuTdUM
簡単な問題にはものすごい勢いでこたえるのに、難しい問題には見てみぬふりをするのなwwww
難しい問題にはわかりませんだろ
0421デフォルトの名無しさん
垢版 |
2019/02/28(木) 13:46:39.00ID:oAFMMcaR
>>420
わからないとかやる気が起きないお題に対してわざわざわからないだのなんだのとみんなで書いてたらそういった書き込みでこのスレはすぐに一杯になるだろう。
そんなの無駄で邪魔だから一々書かんでスルーしてくれた方が良い。
0422デフォルトの名無しさん
垢版 |
2019/02/28(木) 14:39:02.28ID:7nNuTdUM
>>421
別の問題を答えるときに一緒にわかりませんと書けば1行消費するだけで済むだろ?
それも嫌なのか?
0423デフォルトの名無しさん
垢版 |
2019/02/28(木) 14:50:46.53ID:wVeu6yBT
>>422
で、もちろんお前自身はそれを実践しているんだよね?
全答しているなら別にいいんだけどさwww
0425デフォルトの名無しさん
垢版 |
2019/02/28(木) 15:25:18.89ID:oAFMMcaR
>>422
たまたまわからない問題が連続したらわかりませんしか書けないだろうが。
0426デフォルトの名無しさん
垢版 |
2019/02/28(木) 15:26:43.33ID:oAFMMcaR
>>424
全ての問題に答える義務は誰にもない。
0427デフォルトの名無しさん
垢版 |
2019/02/28(木) 15:35:33.99ID:7nNuTdUM
>>426
自分に都合の悪いことは無かったことにするのは良くない
現実と向き合って自分の非を認めるべき
0428デフォルトの名無しさん
垢版 |
2019/02/28(木) 16:05:54.17ID:K7dGf2QC
>>427 まだ誰も回答していない問題があるが、君はわかりませんと言っていないね。 まだ考え中かな?
0430デフォルトの名無しさん
垢版 |
2019/02/28(木) 17:35:56.73ID:swPpvqd8
小手先問題は得意
0433デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:46:34.61ID:oAFMMcaR
>>427
便所の落書きに時たま書かれる問題にうんこしながら答えを書くか書かないかで都合が良くなったり悪くなったりする者は居ない。
0434デフォルトの名無しさん
垢版 |
2019/02/28(木) 18:49:07.23ID:KtyAfxmO
しかし最近は便所の落書きは亡くなったに等しいな。
それにもかかわらず2chには便所の落書きが多い。
ここはまだましだけどな。
0436デフォルトの名無しさん
垢版 |
2019/02/28(木) 19:52:08.39ID:KtyAfxmO
うちの近くの公園にはまずないな。
十人くらいしか遊べない公園も、数千人も遊べる公園も同じ。
0437デフォルトの名無しさん
垢版 |
2019/02/28(木) 20:27:06.93ID:oAFMMcaR
ああいうのもブロークンウィンドウズ理論通りに汚くなればなるほど余計に汚くなって尚且つその地区の犯罪率も上昇しちゃうんだろうな。
0439デフォルトの名無しさん
垢版 |
2019/02/28(木) 20:59:59.90ID:KtyAfxmO
>>437 もちろんどんな公園にもバカな書き込みをする奴はいるだろう。 でも管理された公園では、次の日には修復されてるから書かれてたことにすら気づかなくて、誰も描かなくなる。

10年に1度くらいアホが便器を壊すなんて馬鹿なことをする事件もあるが、バカはどこにでもいるから仕方ない。
0441デフォルトの名無しさん
垢版 |
2019/02/28(木) 21:58:37.50ID:dSln4xk/
お題
四角形の羅列を、'#'と'.'を使った表現から罫線を使った表現に変換せよ

(例)等幅フォントで見てください
#

┌┬┐
├┼┤
└┴┘

#..###.####.
..#.....##.#
#.#....#.#.#
....#.#...#.
┌┬┐   ┌┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┐  
├┼┤   ├┼┼┼┼┼┤ ├┼┼┼┼┼┼┼┤  
└┴┘ ┌┬┼┴┴┴┴┴┘ └┴┼┼┼┼┼┴┼┬┐
    ├┼┤         ├┼┼┼┤ ├┼┤
┌┬┐ ├┼┤       ┌┬┼┴┼┼┤ ├┼┤
├┼┤ ├┼┤       ├┼┤ ├┼┤ ├┼┤
└┴┘ └┴┘ ┌┬┐ ┌┬┼┴┘ └┴┼┬┼┴┘
        ├┼┤ ├┼┤     ├┼┤  
        └┴┘ └┴┘     └┴┘  
0445デフォルトの名無しさん
垢版 |
2019/03/01(金) 14:53:48.06ID:ber2ILYj
>>444
それお題じゃない
0448デフォルトの名無しさん
垢版 |
2019/03/01(金) 18:00:52.30ID:nsJzseJ0
というか >>441 の問題が意味不明。 スクリーンショットで示してみなよ。 俺はやらんだろうけど。
0449デフォルトの名無しさん
垢版 |
2019/03/01(金) 18:05:43.92ID:nsJzseJ0
>>441 なんかプログラムの練習の前に、日本語のおさらいをした方が良い人間が見受けられるな。

プログラムはチームワークだから、他人に仕様が正確に伝えられなければその時点でそのプロジェクトは失敗。
理解しやすい言葉で混乱が起きない様に示すのが当たり前では?
それができない人はプログラムで問題を出しなさいよ。
0450デフォルトの名無しさん
垢版 |
2019/03/01(金) 18:35:43.56ID:ber2ILYj
え?>>441はわかるよ。俺がエスパーなだけ?w
0452デフォルトの名無しさん
垢版 |
2019/03/01(金) 19:02:55.70ID:KgoMIpD3
なぜ#1つで4つの4角形になるんた?
#を図形として見た場合一致しないと思うんだが
0453デフォルトの名無しさん
垢版 |
2019/03/01(金) 19:26:25.34ID:ber2ILYj
記号を罫線ので作った四角にしろってことでこの場合は#だったってだけでは?
なんだったら「田」から変換するようにすれば雰囲気がマッチして良いかも知れんな。気分の問題だが。
0455デフォルトの名無しさん
垢版 |
2019/03/02(土) 01:29:28.31ID:og4HVKiE
>>441 でたらめだろ。 #が田形3マスになるのは良いとして、ドットが何で3マスになったり、1マスになってるんだよ。

#..###.####.
..#.....##.#
#.#....#.#.#
....#.#...#.
123456789いろはにほ123456789へと
┌┬┐   ┌┬┬┬┬┬┐ ┌┬┬┬┬┬┬┬┐  
├┼┤   ├┼┼┼┼┼┤ ├┼┼┼┼┼┼┼┤  
└┴┘ ┌┬┼┴┴┴┴┴┘ └┴┼┼┼┼┼┴┼┬┐
    ├┼┤         ├┼┼┼┤ ├┼┤
┌┬┐ ├┼┤       ┌┬┼┴┼┼┤ ├┼┤
├┼┤ ├┼┤       ├┼┤ ├┼┤ ├┼┤
└┴┘ └┴┘ ┌┬┐ ┌┬┼┴┘ └┴┼┬┼┴┘
        ├┼┤ ├┼┤     ├┼┤  
        └┴┘ └┴┘     └┴┘  
0456デフォルトの名無しさん
垢版 |
2019/03/02(土) 01:35:36.81ID:og4HVKiE
>>455 ごめん、罫線だから、0.5ずれてたのか。 しかしわかりにくい問題だな。 
もしかして自分の仕事を人に押し付けようとしていないか? 
0458デフォルトの名無しさん
垢版 |
2019/03/02(土) 11:02:58.51ID:H6jPx1zC
専用ブラウザじゃ等副フォントなんて選べないのがあるのを知らないのか?
BB2Cでは、英字は等幅が選べても、漢字にはフォント設定すらない。

Jane Doe View も MSゴシックを選択しても等幅にならない。
読み手の設定を変えさせる問題なんて2chにはふさわしくない。
0459デフォルトの名無しさん
垢版 |
2019/03/02(土) 11:17:11.62ID:xuPe2CJ9
俺は等幅で見てくれってあったら、設定を変えるんじゃなくてメモ帳にコピペして見るけどなー
0460デフォルトの名無しさん
垢版 |
2019/03/02(土) 11:41:44.38ID:og4HVKiE
>>459 そうやって見たけど面倒くさい。 やるならどこかのサイトに張り付けるか画像で出題すべきだろ。
0462デフォルトの名無しさん
垢版 |
2019/03/02(土) 11:43:11.78ID:chZTsz9F
問題とかずに問題への文句ばかり垂れるってお前らにしては珍しいな
問題とけよクズども
0466デフォルトの名無しさん
垢版 |
2019/03/02(土) 12:11:05.29ID:JYk2NVzi
この広い日本のどこかに同じ時に同じレスに反応してしまった二人がいる。
プログラミングの世界は奥が深いな……
0469デフォルトの名無しさん
垢版 |
2019/03/02(土) 16:22:52.10ID:ZN4ZPl7z
>>457
なるほど

>>411 Common Lisp (>>457の移植)
https://ideone.com/OTuTMy

すごいなあ、こんなの全然思いつけない
文字を文字のままどうにかしようとしてぐちゃぐちゃになったのが>>454でした
0470デフォルトの名無しさん
垢版 |
2019/03/02(土) 16:25:46.70ID:ZN4ZPl7z
>>469
アンカミス
>>411>>441
0472デフォルトの名無しさん
垢版 |
2019/03/02(土) 20:23:12.84ID:bDAZjPpu
>>471
自分の好みじゃないと面白くないなんて小学生か。
黙ってスルーするか、自分が好みの問題だして盛り上げたらどうだ?
0473デフォルトの名無しさん
垢版 |
2019/03/03(日) 08:56:00.68ID:NMVimqZR
お題:2つの円が重なった時、重なった部分の面積を求めなさい。
0475デフォルトの名無しさん
垢版 |
2019/03/03(日) 17:19:17.78ID:e91Lt8pq
>>473
わかりません。
0479デフォルトの名無しさん
垢版 |
2019/03/03(日) 18:55:07.69ID:TjAANgsg
>>476
ttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1263968897

このサイトは具体的な座標と半径について手計算で解いた例だけど、
座標と半径を一般化して連立二次方程式を解いて交点を求め、
三角形と円弧の面積の差を求めれば重なり合う2円弧の面積が算出できる。
小さい円の中心が大きい円の内側にある場合は、
三角形と円弧の面積の差の求め方を逆にする。
小さい円が大きい円の完全に内側にある場合は、小さい円の面積とする。

x,y座標で式を立てるより、曲座標で表して三角関数使うほうが楽かもしれない。

これをプログラム化すれば良い、筈【だと思う。

以上。
0480デフォルトの名無しさん
垢版 |
2019/03/03(日) 19:21:30.98ID:yjYtaUkW
2つの中心を通る線をX軸としてX軸と交わる点の端っこを原点して円の交点と半径で
円一個ずつ積分して面積を出して合わせるしかないだろ。
0481デフォルトの名無しさん
垢版 |
2019/03/03(日) 19:28:30.68ID:r5nrErEk
半径と中心間の距離から円の交点間の距離(=弦)がわかるから
正弦定理とarcsinで中心角を求めればあとはただの掛け算と引き算だろ
0484デフォルトの名無しさん
垢版 |
2019/03/03(日) 20:23:33.79ID:8CruhG40
プログラム的には円同士の位置関係で場合分けして、あとは計算一発だから二次方程式をいやがる必要もなくない?
0485デフォルトの名無しさん
垢版 |
2019/03/03(日) 21:06:33.77ID:XGcp5yLx
>>473 C
ttps://ideone.com/trIqHx

画像も参照。
ttps://imgur.com/i2G9Ahd
0486デフォルトの名無しさん
垢版 |
2019/03/03(日) 22:28:24.90ID:XGcp5yLx
>>485
条件分岐が間違っていたので修正。おそらくあってると思う
https://ideone.com/DjZqEY
余弦定理を使う方法しか思いつかなかったから、それでやった
0488デフォルトの名無しさん
垢版 |
2019/03/04(月) 07:57:27.52ID:7HyVHUwF
お題:不等間隔で与えられる関数表から1次とか2次で補間をしなさい。
0494デフォルトの名無しさん
垢版 |
2019/03/04(月) 18:59:01.31ID:R4eMfGlu
お題 全角空白区切のCSV

カレントディレクトリにあるCSVファイルを読み込み、指定されたカラム名のデータの合計を求める。
1レコード目にはカラム名がある。
区切り記号は全角空白とする。 データの数字は全てASCII数字だとする。

CSVファイル内のデータ例

カラム1 カラム2 カラム3 カラム4
1,0 2.0 3.0 4.0
2.1 3.1 4.1 5.1
------データ例終わり

出題 カラム3 の合計を求めよ。
解答例 カラム3 = 7.1
0496デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:03:32.42ID:rdjSvZ2C
>>494 間違い

データに 1,0 という間違いがあるけど問題ないだろ。
ついでに、この状態でカラム1の様にデータフォーマットが違う場合には正しくデータエラーを報告せよ。
0497さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/04(月) 19:10:24.71ID:wk4fvbO+
日本やアメリカでは、ピリオドは文の終わりや小数点として使う。

カンマは文章途中の区切りや複数の項目の区切りに使う。
0499デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:12:28.56ID:TpCWsYE8
>>494
awk。-F オプションで指定しているのが全角スペースね。OSやシェルの違いによってはシングルクオーテーションではなくダブルクォーテーションにする必要がある。入力はファイル名指定するか標準入力から読ませる。

awk -F' ' 'BEGIN{getline}{n+=$3}END{print n}'
0500デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:15:20.56ID:TpCWsYE8
awkはデータフォーマットがおかしくても適当に0ってことにしちゃったりしてエラーにならんのでデータ異常まで調べたいなら他の言語使った方が良いだろうな。
0502デフォルトの名無しさん
垢版 |
2019/03/04(月) 19:22:30.38ID:TpCWsYE8
>>501
あー。じゃあ後で他の言語で作るか。
0506デフォルトの名無しさん
垢版 |
2019/03/05(火) 01:17:51.32ID:irQmeRjm
茨木 保健
貴老沢 風花
鬼塚 海鈴
鬼埜 可恋
儀賀沢 一愛
嫌沢 宮子
己問 彩姫
寺沢 七彩
寿川 瑞紀
樹木山 美咲
宗田 純
女ケ沢 美優
女ケ澤 飛鳥
女鹿沢 祐奈
0507デフォルトの名無しさん
垢版 |
2019/03/05(火) 03:28:01.02ID:CZi591h7
>>494
Ruby で

require 'csv'

# 全角空白区切りで、ヘッダー有り
options = { :headers => true, :col_sep => " " }

# CSV ファイルを、1行ずつ処理する
puts CSV.foreach( "input.csv", options )
.map{ |row| row[ 2 ].to_f }.inject( :+ )
0508デフォルトの名無しさん
垢版 |
2019/03/05(火) 07:59:44.57ID:0SMIqw+w
>>507 カラム名サーチが入っていないみたいだけど。
例えば ”カラム3” と言うカラム名が指定されたとして書いてみて。3列目と言うことじゃないからね。

カラム4 カラム2 カラム1 カラム3
かも知れない。
0509デフォルトの名無しさん
垢版 |
2019/03/05(火) 08:10:31.80ID:utDz1VTj
変な流れが続いていたから、バカっぽいお題をいくつか出した後に一見まともそうなお題のふりして宿題をやってもらおうという腹かと勘ぐってしまう。
0515デフォルトの名無しさん
垢版 |
2019/03/05(火) 12:09:12.75ID:KQ31R4yU
お題1: テトリスタイリング問題を解決しろ
ここでテトリスタイリング問とは任意の図形のアスキーアートを入力すると
全てのテトリスのブロックに隣接するブロックの種類が異なるようにタイリングしたアスキーアートを出力する
問題である

お題2: テトリスタイリングNブロックス問題を解決しろ
ここでこの問題は上の問題でブロックの種類の数Nを最小にする問題である

例:
入力:
****
****
****

出力:
1002
1002
1122
0518デフォルトの名無しさん
垢版 |
2019/03/05(火) 23:56:55.78ID:0SMIqw+w
>>515 ボクちゃんわかんない。
何で縦の列は1とか同じ種類が許されてるの? なんか上から下へとか言う動きを前提にしてるの?
0520デフォルトの名無しさん
垢版 |
2019/03/06(水) 08:04:05.66ID:bBth0ZZS
>>515 その出力例だと、タイルの種類は3種類じゃないの?
1と2を同じだとみなせば、同じ種類と隣接するからダメだろ?

>>516 だと完全に2種類だが。
0522デフォルトの名無しさん
垢版 |
2019/03/06(水) 11:44:29.70ID:cM1JcwP7
>>521
だからこそ出題例>>515は3種類のブロックを使ってるんだろ? 
2種類で出来ていないから問2に対しては不正解では?
0523デフォルトの名無しさん
垢版 |
2019/03/06(水) 11:58:00.89ID:OdnfdSEH
>>522
例がお題2とお題1両方の答えになっているなんてことはどこにも書いてないだろ
例を見ればだれでもどのお題の答えかわかるだろ
0524デフォルトの名無しさん
垢版 |
2019/03/06(水) 12:34:51.62ID:cM1JcwP7
>>523 誰でも解ると言うのは言い過ぎ。 何が正しいのかを示すのが例なんだし。
なんにせよお題の出し方が独断すぎるよ。
テトリスタイリングなんて知らない人にとっては説明不足だし
>>519 の説明があって初めて平面上の回転図形は同じとみなし、裏表の回転は許さないと解るけど。
それでも519のブロックは4個の組み合わせのブロックしかないが、どうして4個固定なのか? 最大辺の個数を単位とするのか?

この場合は5個固定?
***
***
***
***
***
0526516
垢版 |
2019/03/06(水) 12:54:30.31ID:lTLUMkgQ
>>523
分からなかった
0527デフォルトの名無しさん
垢版 |
2019/03/06(水) 12:57:33.38ID:FCOQEIBI
わかっても今のところ解く気は起きない
0529デフォルトの名無しさん
垢版 |
2019/03/06(水) 13:01:54.00ID:uLgh04dF
>>199>>441が理解できなかったってやつと同一人物なのは分かる
0530デフォルトの名無しさん
垢版 |
2019/03/06(水) 13:08:31.07ID:URj2ByGk
>>524
>どうして4個固定なのか? 

テトリスってゲームがあってそれに出てくるブロックが>>519

>>515
>全てのテトリスのブロック

https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%88%E3%83%AA%E3%82%B9
テトリス
>4つの正方形を組み合わせて作られた、片面型テトロミノ状のブロックピース
>(以下の7種、本作ではこれらを「テトリミノ」(Tetrimino)と呼ぶ)
>がフィールド上方からランダムに1種類ずつ落下してくる。
0532デフォルトの名無しさん
垢版 |
2019/03/06(水) 13:50:33.24ID:cM1JcwP7
>>530 片面テトリミノの基本は4個だけどこれを使う前提なら、3x5とか4の倍数の面積にならない図形は解けないよね。
聞いてるのは3x5はどうするのと言う話。
0535デフォルトの名無しさん
垢版 |
2019/03/06(水) 18:11:04.36ID:+4ROOaYr
問題の難しさと、問題の曖昧さは関係ないけどな。
難しい問題の条件が曖昧だと鼻から解く気になれない。
0536デフォルトの名無しさん
垢版 |
2019/03/06(水) 18:18:58.86ID:OdnfdSEH
考えればわかることまでいちいち書かないのは常識
それを曖昧とは言わない
0539デフォルトの名無しさん
垢版 |
2019/03/06(水) 19:57:47.15ID:2Etc0l5z
仕様書をやりとりしてみれば如何に他人に解らせることが難しいか理解できると思うけどな。 多分出題者は余り経験していないんだろう。

仕様をいい加減で進めても後で痛い目を見るのは自分。
(最初は完全でないのは当然、打ち合わせで抜けを詰めていけば良い話)
0540デフォルトの名無しさん
垢版 |
2019/03/06(水) 20:41:28.07ID:OdnfdSEH
>>538
テトリスがなにかなんて自分でググって調べればいいことだろ
そんなことまで面倒みれない
0541デフォルトの名無しさん
垢版 |
2019/03/06(水) 20:51:34.66ID:Xwbjxxrc
お題の面白さに共感しなければ趣味だから解かない。
0542デフォルトの名無しさん
垢版 |
2019/03/06(水) 21:21:50.81ID:FCOQEIBI
そういや安かったのでPS4用のテトリスを何気なく買って連日やってたら慣れてきちゃってレベル15の40ライン消しが楽にできるようになってしまったなあ。
今さらテトリスうまくなってどうすんだ俺w
0543デフォルトの名無しさん
垢版 |
2019/03/07(木) 03:21:20.86ID:QS9GxyX4
>>494
Kotlin
https://paiza.io/projects/w5ywqyfGfQpwllH68rmt5A

入力はカラム名の行が最初にあり、次の行からはデータが続き「# カラム名」の行で終わり、
そこで指定したカラム名の列の合計値が出力される。

エラーはデータが数値として解釈できない文字列、項目数がカラム名の数と一致しない行、
同一カラム名があった場合に出る。一度エラーになると # の行まで読み飛ばされる。
0544デフォルトの名無しさん
垢版 |
2019/03/07(木) 17:22:14.11ID:bbRk4M8e
お題
R言語にandmaginsとうう関数がある。
m行n列の行列を渡すと行ごとの合計と列ごとの合計を追加して
(m+1)行(n+1)列の行列を返す。
同様の関数をつくる。

1 2 3
4 5 6

1 2 3 6
4 5 6 15
5 7 9 21
となる
0546デフォルトの名無しさん
垢版 |
2019/03/07(木) 23:35:37.41ID:bSfNx8gZ
>>544 Squeak/Pharo Smalltalk

| fn |
fn := [:arr | arr, {arr sum} collect: [:row | row, {row sum}]].
fn value: #(
(1 2 3)
(4 5 6)
).

"=> #(
(1 2 3 6)
(4 5 6 15)
(5 7 9 21)
) "
0547デフォルトの名無しさん
垢版 |
2019/03/08(金) 00:35:43.62ID:N66/0TP0
大文字小文字だけが異なる、ファイル名を見つける

入力
aB.txt
Ab.txt
xx
cd
cD
CD

出力
aB.txt : Ab.txt
cd : cD : CD
0548デフォルトの名無しさん
垢版 |
2019/03/08(金) 04:41:32.92ID:JrzgN4oN
#!/bin/sh
infile="aB.txt Ab.txt xx cd cD CD"
for f in ${infile}; do
echo $f $(echo $f | tr [:lower:] [:upper:])
done | awk '
{ save[$2] = save[$2] " : " $1 }
END {
for (i in save) print save[i]
}' | sed 's/^ : //' | sort | awk 'NF > 1 {print}'
0549デフォルトの名無しさん
垢版 |
2019/03/08(金) 09:23:36.88ID:iTwHpxzE
>>547 Squeak Smalltalk

| fn |
fn := [:arr |
| groups |
groups := arr groupBy: #asLowercase having: [:group | group size > 1].
groups values collect: #asArray
].
fn value: #('aB.txt' 'Ab.txt' 'xx' 'cd' 'cD' 'CD').

"=> #(('cd' 'cD' 'CD') ('aB.txt' 'Ab.txt')) "
0550デフォルトの名無しさん
垢版 |
2019/03/08(金) 09:47:13.60ID:pv8HlopZ
>>547
それはWindowsとかでは試せないのでは?ディレクトリが違うならできるだろうけど。
(まあWindowsでもWSLでUbuntuとか動かせばできるが)
0551547
垢版 |
2019/03/08(金) 11:48:57.26ID:N66/0TP0
同一フォルダ内での、大文字小文字だけが異なるファイル名は、Windows では作れないけど、
Linux では作れてしまうので、それをチェックする目的です

Linuxでも、こういうファイル名は作らない方がよい
0554デフォルトの名無しさん
垢版 |
2019/03/08(金) 18:19:49.57ID:aY8HpC9F
イ`
0556デフォルトの名無しさん
垢版 |
2019/03/08(金) 18:49:56.10ID:qP6cz7Aj
>>555 それは言語によるんじゃないの? 論理的にはあり得ない。
一般的には、0がFalse でそれ以外がTrueと言うだけでは?
0559デフォルトの名無しさん
垢版 |
2019/03/08(金) 19:17:05.52ID:ru9qZk5w
お題:
N人の人物がある部屋に出入りしています。
i番目の人は時刻a[i]に入室し、時刻b[i]に退室します。(1 <= a[i] < b[i])

すべての人は入退室時に以下の通り行動します。
・入室時に、照明がOFFならば照明をONにする。
・退室時に、室内に自分以外に誰もいなければ照明をOFFにする。

最初は照明がOFFになっていて室内には誰もいません。
複数の人物が同時に入退室することはないものとします。

照明がONになっている時間の合計を求めなさい。

a={1,3,5}
b={2,4,6}
=> 3

a={1,2}
b={5,6}
=> 5

a={100,1,2}
b={105,3,4}
=> 8
0565デフォルトの名無しさん
垢版 |
2019/03/09(土) 08:53:56.42ID:irV15TzB
>>410 J
f =: 3 : 0
 > , { ;/(,. toupper) y
)
0566562
垢版 |
2019/03/09(土) 09:29:27.51ID:8CAUa/TL
>>559 ruby
すこーしすっきり
f = ->a, b {a.zip(b).map {|c| (c.first...c.last).to_a}.inject(:|).size}

f = ->a, b {a.zip(b).map {|c, d| [*c...d]}.inject(:|).size}
0567547
垢版 |
2019/03/09(土) 10:58:09.02ID:GVs3bbIF
>>564
たった2行とは、素晴らしい!
JavaScript(JS)とか、関数型プログラミングだね

f(&:upcase), f(&:chomp)
関数型でも、こういうように呼ぶ関数名が明確にわかる点では、Ruby はJS をしのぐ!

漏れが以下で作ったけど、手続き型の処理で、10行以上も掛かったw
情けない

Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/234
0570デフォルトの名無しさん
垢版 |
2019/03/09(土) 19:25:50.03ID:hBO8FWAE
>>544
Haskell

main = mapM_ print $ newxss ++ [zipWith (+) (newxss!!0) (newxss!!1)]

xss = [[1,2,3],[4,5,6]]

newxss = map (\xs -> xs ++ [sum xs]) xss
0571デフォルトの名無しさん
垢版 |
2019/03/09(土) 19:49:27.50ID:R3sqYFdd
お題:文字列と数値nが与えられるのでn番目の文字とそれ以外の文字を上下にスライドさせて表示する

入力
abc 2

出力
*b*
a*c
0573デフォルトの名無しさん
垢版 |
2019/03/09(土) 19:58:57.39ID:hBO8FWAE
>>544,570

任意の数の行列だったか。。。
修正

main = mapM_ print $ newxss ++ [lastxs]

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

newxss = map (\xs -> xs ++ [sum xs]) xss

lastxs = map sum $ retsu newxss

retsu ([]:xs) = []
retsu xss = map head xss:retsu (map tail xss)
0574デフォルトの名無しさん
垢版 |
2019/03/09(土) 20:10:49.99ID:0OOZ8KrR
>>557
オーバーフローは数学ですらないだろ。こっちは数学。


宇宙を支えていたのは、驚異のたし算だった
私がこのたし算を知ったのは20歳のころでした。その衝撃は、私の運命を変えるまでの威力を持っていました。
私の大学は2年生で所属学科を決めるシステムになっており、私はアインシュタインに憧れて物理学科に進もうとしていました。
その私が出会ったのがラマヌジャン(1887-1920)です。彼が描いた2つの絵を見た瞬間、私の中で何かが変わりました。
http://jbpress.ismedia.jp/mwimgs/4/b/400/img_4b7f33022b840f792a0324a10b89a24d369437.jpg
http://jbpress.ismedia.jp/articles/-/46939
0576デフォルトの名無しさん
垢版 |
2019/03/09(土) 20:25:11.72ID:hBO8FWAE
>>364

Haskell

main = mapM_ (\c -> putStrLn $ c:[]) "hello"
0577デフォルトの名無しさん
垢版 |
2019/03/09(土) 20:38:18.94ID:1xJckQ5D
>>544
kotlin
https://paiza.io/projects/cL6xIQA--yDFZ1pjndvzAw

Double型でやったら出力に小数点以下が付加されたが値として間違ってるわけではないのでそのままにする。
0578デフォルトの名無しさん
垢版 |
2019/03/10(日) 01:41:18.58ID:5A3UW8N7
>>544 Python

import numpy as np
# 何行何列でも良い
ar =[
[1,2,3,4],
[4,5,6,7],
[7,8,9,10]
]

#縦に足して行を追加
r=np.vstack((ar,np.sum(ar,axis=0)))

#横に足して列を追加
ans=np.hstack((r,np.sum(r,axis=1).reshape((-1,1))))
print('ans=\n',ans)
'''
ans=
[[ 1 2 3 4 10]
[ 4 5 6 7 22]
[ 7 8 9 10 34]
[12 15 18 21 66]]
'''
0580デフォルトの名無しさん
垢版 |
2019/03/10(日) 11:57:40.70ID:e6SI07pl
>>571 J
f =: 4 : 0
|: ((,. -.) (<:x) = i. # y ) {"1 '*' ,. y
)

2 f 'abc'
*b*
a*c
0581デフォルトの名無しさん
垢版 |
2019/03/10(日) 13:31:21.17ID:vqbsu7fW
>>571

Haskell

main = do
putStrLn $ seclet "abc" (==) 2
putStrLn $ seclet "abc" (/=) 2

seclet lst func num = seclet' lst func 1 num
where
seclet' [] _ _ _ = []
seclet' (x:xs) f n a | f n a = x: seclet' xs f (n + 1) a
seclet' (_:xs) f n a = '*': seclet' xs f (n + 1) a
0582デフォルトの名無しさん
垢版 |
2019/03/10(日) 13:56:33.99ID:vqbsu7fW
>>571
>>581

引数の順序入れ替えてmapM_ 使って、main部分を一行にまとめた。

main = mapM_ (putStrLn.seclet "abc" 2) [(==),(/=)]

seclet lst num func = seclet' lst 1 num func
where
seclet' [] _ _ _ = []
seclet' (x:xs) n a f | f n a = x: seclet' xs (n + 1) a f
seclet' (_:xs) n a f = '*': seclet' xs (n + 1) a f
0583デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:19:36.82ID:lsf+n+kn
>>571 Perl5

($s, $n)= qw{abc 2};
@s = split'',$s;
@t = qw{*} x @s;
$n--;
($s[$n], $t[$n]) = ($t[$n], $s[$n]);
print @t, "\n", @s, "\n";

実行結果
~ $ perl 13_571.pl
*b*
a*c
0584デフォルトの名無しさん
垢版 |
2019/03/10(日) 17:47:53.28ID:lsf+n+kn
>>544 Perl5

@a = ([1, 2, 3,],
    [4, 5, 6]);
use List::Util sum;
push @$_, sum(@$_) for @a;
for $i (0..$#{$a[0]}) {
 push @b, sum(map{$a[$_][$i]} 0..$#a)
}
print "@$_\n" for @a;
print "@b\n";


実行結果
~ $ perl 13_544.pl
1 2 3 6
4 5 6 15
5 7 9 21
0591567
垢版 |
2019/03/10(日) 22:01:14.30ID:bEzyp4mc
>>588
余談だが、Ruby のString#lines の所を見たら、chomp: true で改行も削除できる!
Rubyは、色々と便利なものを作っている

p ary = <<"EOT".lines( chomp: true ) # 配列
a
b
EOT

#=> ["a", "b"]
0594デフォルトの名無しさん
垢版 |
2019/03/10(日) 22:19:48.10ID:KcIurEvX
ごめん間違えた
>>571です
0596デフォルトの名無しさん
垢版 |
2019/03/11(月) 00:57:47.40ID:HrDBQthw
>>571 Squeak/Pharo Smalltalk。nを複数指定可で

| fn |
fn := [:str :ns |
| ans |
ans := (String new: str size withAll: $*), String cr, str.
ns do: [:n | ans swap: n with: n + str size + 1].
ans
].

fn value: 'abc' value: #(2). "=>
'*b*
a*c' "

fn value: 'abcdef' value: #(2 3 5). "=>
'*bc*e*
a**d*f' "
0600デフォルトの名無しさん
垢版 |
2019/03/11(月) 09:18:51.69ID:D2PSGRy3
>>571 Python

def split3(s,p=1) :
 r0= s[:p]+'*'+s[p+1:]
 r1= '*'*p + s[p] + '*'*(len(s)-(p+1))
 return r0+'\n'+r1

print(split3('abcd',2))
print(split3('abc',0))

'''結果
ab*d
**c*
*bc
a**
'''
0601デフォルトの名無しさん
垢版 |
2019/03/11(月) 10:48:42.57ID:u4Ymakq9
お題: 下の例のような入力から例の出力のアスキーアートを出力する。それ以外は自由
例:
入力: >>>>>vvvvv<<<<^^^^
出力:
>>>>>
^****v
^****v
^****v
^****v
<<<<v
0603デフォルトの名無しさん
垢版 |
2019/03/11(月) 11:35:10.21ID:AGCERQh7
>>571 Io
f := method(s,n,
"*" repeated(s size)atPut(n - 1, s at(n - 1)) println
s asMutable atPut(n - 1, 42)println
)
f("abc",2)
実行結果
*b*
a*c
0604デフォルトの名無しさん
垢版 |
2019/03/11(月) 11:45:13.16ID:+cahZmCl
>>601
それ3番目と4番目は必ず1番目と2番目の長さ-1になってるの?
0606デフォルトの名無しさん
垢版 |
2019/03/11(月) 13:45:52.04ID:+cahZmCl
>>605
仕様をきっちり決めないと解釈の違いから沢山の違った回答が出てくる可能性があるのだが、それで良いと。
0607デフォルトの名無しさん
垢版 |
2019/03/11(月) 15:42:22.28ID:7+lrfCi1
>>604
そもそも4方向にいくらかずつ進んで四角形で終わりという形とは限らないのでは?
ランダムに方向や距離を生成して既に通った道も上書きするような入力を許容すると考えたっていいはず。
0611デフォルトの名無しさん
垢版 |
2019/03/11(月) 16:25:40.59ID:+cahZmCl
>>607
なるほど。しかしそれならばその事を書いておいて欲しかったな。

>>609
何を作れば良いのかよくわからないから質問しているだけなのだが。それが君にとって何か不都合なのか?
0612デフォルトの名無しさん
垢版 |
2019/03/11(月) 16:58:12.79ID:PGatxMde
>>601
出力おかしくねぇ?最初と最後の行は5列だけど
間の行ぜんぶ6列になってるぞ?

出力:
>>>>>
^****v
^****v
^****v
^****v
<<<<v

こうじゃね?
>>>>>
^***v
^***v
^***v
^***v
<<<<v
0613デフォルトの名無しさん
垢版 |
2019/03/11(月) 17:14:58.23ID:+cahZmCl
ま、いいや。よくわかんない問題は放っておこう。
0614デフォルトの名無しさん
垢版 |
2019/03/11(月) 19:21:39.70ID:PGatxMde
>>601 javascript
長くなっちった
https://ideone.com/vzncKq

入力: <<<<^^^^>>>>>vv<<<<<<<<<<<vvv>>>^^^^^^^>>>>>>>>>>vvvvvv
出力:
***^>>>>>>>>>>
***^*********v
***^**^>>>>>*v
***^**^****v*v
<<<^<<<<<<<v*v
v**^**^******v
v**^**<<<<***v
v>>>**********
0615デフォルトの名無しさん
垢版 |
2019/03/11(月) 19:36:33.05ID:/Vx80pKW
お題
m×nマスのチェス盤を考える。
1つのナイトが最も左上のマスにあり、そこから任意の回数動かすことができる。
ナイトが訪れることのできるマスの個数を求めよ。

m=1, n=1
=> 1

m=3, n=3
=> 8 (真ん中のマスを訪れることができない)

m=4, n=4
=> 16
0616デフォルトの名無しさん
垢版 |
2019/03/11(月) 19:36:35.88ID:DXpwYxNa
>>614 説明がないと何をどうやってるのかわけわからん。
先ずは入力と出力をどう解釈して作ったのか?
形にも一貫性があるとは思えないけど。

しかしこんなのがどんどん出てきたら、煩わしいだけ。
0618デフォルトの名無しさん
垢版 |
2019/03/11(月) 20:07:58.88ID:5vEtkzIB
出題通り以外の回答はやめてほしいな。
それ以外の回答をする場合は、解説文も日本語で書いてくれよ。

不慣れなプログラムもあることだろうし、長いプログラムなんて見る気にもならないし、プログラムを見ればわかるというのは無し。
0619デフォルトの名無しさん
垢版 |
2019/03/11(月) 21:26:59.93ID:ALw/TkKR
>>618
ソースの中身まではちゃんと確認してないけど、ちゃんと出題通りにできてると思う。
出題の"入力例"通りではないが、複雑な入力パターンに対して正しく動いてそうと思える実行例だと思うぞ。
0623デフォルトの名無しさん
垢版 |
2019/03/11(月) 23:02:42.18ID:GdRfR4uu
以下の整形式の.ini ファイルから、すべての値を取得して、
「セクション名 : キー名 : 値」で表示する

[sec1]
key1=val1

[sec2]
key2=val2
0625デフォルトの名無しさん
垢版 |
2019/03/12(火) 00:26:56.22ID:XpXqAgCh
>>623 Perl5

while (<DATA>) {
 $s = $1 if /\[(\w+)\]/;
 print "$s:$k:$v\n"
  if ($k, $v) = /(\w+)=(\w+)/;
}
__DATA__
[sec1]
key1=val1

[sec2]
key2=val2



実行結果
~ $ perl 13_623.pl
sec1:key1:val1
sec2:key2:val2
0626デフォルトの名無しさん
垢版 |
2019/03/12(火) 00:37:42.27ID:XpXqAgCh
>>625 も少し簡潔に書けるんだった…

while (<DATA>) {
 $s = $1 if /\[(\w+)\]/;
 print "$s:$1:$2\n" if /(\w+)=(\w+)/;
}
__DATA__
[sec1]
key1=val1

[sec2]
key2=val2
0627デフォルトの名無しさん
垢版 |
2019/03/12(火) 01:38:34.08ID:nghHbW0D
>>623 javascript(es2018 named capture groups)
`
[sec1]
key1=val1

[sec2]
key2=val2
`.replace(/\[(?<section>.+)\]\n(?<key>.+)=(?<value>.+)\n/g, '$<section>:$<key>:$<value>').trim();
結果:
sec1:key1:val1
sec2:key2:val2
0628デフォルトの名無しさん
垢版 |
2019/03/12(火) 05:56:44.85ID:KPetEW8/
>>547

Haskell

import Data.Char

main = (mapM_ print.filename) ["a","aB.txt","Ab.txt","xx","aBc.txt","cd","cD","CD","ab.txt","z"]

filename [] = []
filename (xs:xss)| length a > 1 = a:filename b
where
a = func (==)
b = func (/=)
func f = filter (f (map toUpper xs).map toUpper) (xs:xss)
filename (_:xss) = filename xss
0629デフォルトの名無しさん
垢版 |
2019/03/12(火) 17:03:25.03ID:+VdOvnK/
>>615

0 <= m,n <=10億 と仮定して

int64_t cal(int m, int n){
  if( m>n ) swap(m, n);
  if( m<=1 ) return m;
  if( m==2 ) return (n + 1) / 2;
  if( n==3 && m==3) return 8;
  return (int64_t)n * m;
}
0630デフォルトの名無しさん
垢版 |
2019/03/12(火) 18:21:10.69ID:MLSq27aG
>>623 Io
f := method(s,
s split("\n\n")map(splitNoEmpties("[","]","\n",=")join(":"))
)
0631デフォルトの名無しさん
垢版 |
2019/03/12(火) 18:30:10.82ID:M/w6PjEF
>>619
出題通りなのかどうかがわからんのだが。どう解釈したら出題通りとなるのか?
0632デフォルトの名無しさん
垢版 |
2019/03/12(火) 19:26:28.38ID:mUEXbKn8
お題
数列a[i]を考える。
a[0] = p
a[i+1] = q * a[i] + r

[入力]
p q r n
(p,q,r,nは整数)
(0≦p,q,r≦99)
(0≦n≦10^10)

[出力]
a[n] mod 13 を求めよ

1 2 0 8
=> 9 (2^8 mod 13)

1 0 99 0
=> 1

1 2 3 2
=> 0 (a[0]=1, a[1]=2*1+3=5, a[2]=2*5+3=13)

1 3 5 10000000000
=> ?
0634デフォルトの名無しさん
垢版 |
2019/03/12(火) 21:03:21.90ID:KPetEW8/
>>619

>>547に対して、ナチュラルソートされて無くても(普通のソートでも正しい答えが得られるとは限らない)正しい答えを出せるとか、出題者の意図を踏まえながら、意図を超えた範囲もカバーするのはいいんじゃ無いか?
意図を無視するのは論外だが。
0635デフォルトの名無しさん
垢版 |
2019/03/12(火) 21:07:56.58ID:KPetEW8/
>>632
マシンパワーがあれば式を入れればいいだけってのはね。。。
解くのに頭使う。解いてみたら案外簡単(アルゴリズムが浮かぶのがキモ)。あえて難しくて最適化の道がある。とかが望ましい。

いあ、無茶振りだろうから、どれか2つ満たせればおkだが。
0636デフォルトの名無しさん
垢版 |
2019/03/12(火) 21:12:06.00ID:KPetEW8/
例えば[[1,2,3],[4,5,6],[7,8,9]]みたいな任意のn*nなリスト(または配列)を非破壊的に作れ。とか。
0638623
垢版 |
2019/03/12(火) 22:49:08.83ID:oX4bYoPv
>>623
お題を修正

[ ] = の3つは、特別な記号です。
それらを含まない行は、無視して

[sec1]
key1=val1

[sec2]
key2=val2
x=y

>>627
セクション名・キー名・値は、特定の文字列ではありません!
特別な記号以外の、任意の文字列です
0639デフォルトの名無しさん
垢版 |
2019/03/12(火) 23:03:23.82ID:oX4bYoPv
お題

現行規格のISBN (ISBN-13) のcheck digit は、JANコードと同じく、
「モジュラス10 ウェイト3・1(モジュラス10 ウェイト3)」という計算法にて算出される

一番右側の? の所のcheck digitを除いて、数字以外は無視して、
一番左側の桁から順に、1、3、1、3…を掛けて、それらの和を取る。
和を10で割って出た余りを、10から引く。
ただし、10で割って出た余りの下1桁が0の場合は、check digitを0とする

ISBN 978-4-10-109205-?

9×1 + 7×3 + 8×1 + 4×3 + 1×1 + 0×3 + 1×1 + 0×3 + 9×1 + 2×3 + 0×1 + 5×3
= 9 + 21 + 8 + 12 + 1 + 0 + 1 + 0 + 9 + 6 + 0 + 15 = 82
82 ÷ 10 = 8 あまり 2
10 - 2 = 8

幾つかのISBN-13 で、計算してみて!
0642デフォルトの名無しさん
垢版 |
2019/03/12(火) 23:42:34.93ID:2FAQzMGK
>>632 C
https://ideone.com/m3vejt

エクセルとかで実際に数列を計算してみると、長さ12(剰余の数-1)以下の周期になるっぽいのでそれで求められる。
普通に計算するとq * a[i] + r はどんどん大きくなるけど、
毎回 (q * a[i] + r) mod 13としても、計算に影響はないようなので、オーバーフローもせずに計算できる。
だたし、数学的に正しいか保証しかねるが。
0644デフォルトの名無しさん
垢版 |
2019/03/13(水) 00:29:04.16ID:Eq+ygVqk
>>643

確かに、
コメントアウト(bf2)するときに誤ってしまったようだ、
("if(n==0)" だったのだが、いらないなぁ)
どっちにしろ、0や1のテストは、やってない
0645デフォルトの名無しさん
垢版 |
2019/03/13(水) 00:51:17.73ID:vPzmbHWs
>>637
だめ。
そこが関数型言語と手続き型言語の考え方の大きな違いだし。
皮肉にも?それ作った時、入門書の関数より考え方の違いが分かった。
0646デフォルトの名無しさん
垢版 |
2019/03/13(水) 00:54:41.38ID:bUFEpZHr
>>638
> セクション名・キー名・値は、特定の文字列ではありません!
> 特別な記号以外の、任意の文字列です

えぇ…

入力:
[あああ]
いいい=ううう

[えええ]
おおお=かかか

出力:
あああ:いいい:ううう
えええ:おおお:かかか

少なくとも任意の文字列には対応してるじゃん。不当指摘だ!
0647デフォルトの名無しさん
垢版 |
2019/03/13(水) 01:18:15.16ID:FktqEJYT
>>645 javascript
const seqSqArr = n => Array.from({length: n}).map((v, i) => Array.from({length: n}, (v, j) => n * i + j + 1));
console.log(seqSqArr(3));
//=> [[1,2,3],[4,5,6],[7,8,9]]
console.log(seqSqArr(7));
//=> [[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21],[22,23,24,25,26,27,28],[29,30,31,32,33,34,35],[36,37,38,39,40,41,42],[43,44,45,46,47,48,49]]
0648623
垢版 |
2019/03/13(水) 02:39:20.04ID:ZImJqTUY
>>646
スマン。漏れの間違い!

key, val などの特定の文字列を置換しているのかと、勘違いしていた
0649デフォルトの名無しさん
垢版 |
2019/03/13(水) 05:11:02.02ID:36vLAC/n
>>639 J
f =: 3 : 0
10 | 10 - 10 | +/ (12 $ 1 3) * "."0 }: y -. '-'
)
f '978-4-10-109205-8'
8

f '978-4873115870'
0
0650デフォルトの名無しさん
垢版 |
2019/03/13(水) 06:35:32.94ID:vPzmbHWs
>>636,637,645,647

Haskell

main = ps 3 >> putStrLn "" >> ps 7
where ps = print.seqSqList

seqSqList n = (take n.iterate (map (+ n))) [1..n]

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

[[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21],[22,23,24,25,26,27,28],[29,30,31,32,33,34,35],[36,37,38,39,40,41,42],[43,44,45,46,47,48,49]]
0652デフォルトの名無しさん
垢版 |
2019/03/13(水) 22:22:09.99ID:H95Q/dPG
こうかな?
;; Common Lisp

(defun seq-sq-list (n)
      (labels ((sub (i r)
           (if (zerop i)
             r
             (sub (1- i) (if (zerop (mod i n))
                     (cons (list i) r)
                     (cons (cons i (car r)) (cdr r)))))))
       (sub (* n n) nil)))
0653さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/13(水) 23:29:50.59ID:KwyST1w4
お題: ピリオド区切りの二つのバージョン番号を比較し、大小関係を判定した結果を-1, 0, 1のいずれとして返せ。

0.1.2 > 0.0: 1
1.2.3 < 1.3: -1
0.0.0 == 0.0: 0
0654デフォルトの名無しさん
垢版 |
2019/03/14(木) 00:08:08.19ID:TPG8S2ma
>>653
手抜きHaskell

main = mapM_ pc $ [("0.1.2", "0.0"), ("1.2.3", "1.3"), ("0.0.0", "0.0")]
where pc = print.uncurry mycompare

mycompare "0.0.0" "0.0" = 0
mycompare "0.0" "0.0.0" = 0
mycompare xs ys |xs `compare` ys == EQ = 0
|xs `compare` ys == GT = 1
|xs `compare` ys == LT = -1
0655デフォルトの名無しさん
垢版 |
2019/03/14(木) 01:08:57.36ID:vRIsxo2e
>>601 Perl5

$s = '>>>>>vvvvv<<<<^^^^';
($i, $y) = (0, 0);
for (split'',$s) {
 $i++ if />/;
 $i-- if /</;
 $j++ if /v/;
 $j-- if /\^/;
 push @t, [$i, $j, $_];
}
use List::Util qw{min max};
($i, $j) = (min(map{$$_[0]} @t), min(map{$$_[1]} @t));
$$_[0] -= $i, $$_[1] -= $j for @t;
($i, $j) = (max(map{$$_[0]} @t), max(map{$$_[1]} @t));
push @m, [('*')x($i + 1)] for 0..$j;
$m[$$_[1]][$$_[0]] = $$_[2] for @t;
use feature say;
say @$_ for @m;


実行結果
~ $ perl 13_601.pl
>>>>>
^***v
^***v
^***v
^***v
<<<<v
0656デフォルトの名無しさん
垢版 |
2019/03/14(木) 01:16:23.50ID:vRIsxo2e
>>638 Perl5

$r = qr/[^][=]/;
while (<DATA>) {
 chomp;
 $s = $1 if /\[($r+)\]/;
 print "$s:$1:$2\n" if /($r+)=($r+)/;
}
__DATA__
[sec1]
key1=val1

[sec2]
key2=val2


実行結果
~ $ perl 13_638.pl
sec1:key1:val1
sec2:key2:val2
0659デフォルトの名無しさん
垢版 |
2019/03/14(木) 10:42:18.54ID:YiVNNcx0
>>653 javascript
const vComp = (a, b) => {
const [semA, semB] = [a, b].map(v => {
const {major, minor = 0, patch = 0} = /(?<major>\d+)(\.(?<minor>\d+)(\.(?<patch>\d+))?)?/.exec(v).groups;
return {major, minor, patch};
});
const majorComp = semA.major - semB.major;
if (majorComp) return Math.sign(majorComp);
const minorComp = semA.minor - semB.minor;
if (minorComp) return Math.sign(minorComp);
const patchComp = semA.patch - semB.patch;
return Math.sign(patchComp);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
結果:
1
-1
0

(おまけ)ソート:
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
結果:
["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
0662さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/14(木) 11:35:04.68ID:1+g2CCuw
LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。
一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。
まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。
0663さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/14(木) 11:47:43.06ID:1+g2CCuw
一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。
0665デフォルトの名無しさん
垢版 |
2019/03/14(木) 15:56:35.04ID:TPG8S2ma
>>547

Haskell
内包表記の方が何をやってるか分かり易いと気付いて書き換えた。

import Data.Char

main = (mapM_ print.filename) ["aB.txt","Ab.txt","xx","cd","cD","CD","ab.txt"]

filename [] = []
filename (xs:xss)| length a > 1 = a:filename b
where
a = func (==)
b = func (/=)
func f = [xs' | xs' <- (xs:xss), map toLower xs `f` map toLower xs']
filename (_:xss) = filename xss
0666デフォルトの名無しさん
垢版 |
2019/03/14(木) 18:00:35.68ID:38t26SL0
お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ
0667デフォルトの名無しさん
垢版 |
2019/03/14(木) 18:07:12.84ID:YPV07ntD
>>653 # Python

def cmp(v0,v1):
 if v0==v1: return 0
 else: return 1 if (v0 > v1) else -1

print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.3','1.3')
)

# 1 1 0 -1
0670デフォルトの名無しさん
垢版 |
2019/03/14(木) 18:32:38.72ID:YPV07ntD
>>667 訂正 Python

def cmp(v0,v1):
 v0 = list( map(int , v0.split('.') ) )
 v1 = list( map(int , v1.split('.') ) )
 if v0==v1: return 0
 else: return 1 if (v0 > v1) else -1

print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('1.1.0', '1.1') ,
cmp('10.0','9.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.3','1.3') ,
cmp('1.1', '1.1.0') ,
)

# 1 1 1 1 0 -1 -1
0674さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/14(木) 18:59:00.09ID:1+g2CCuw
ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。
検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。
インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。
0676デフォルトの名無しさん
垢版 |
2019/03/14(木) 19:55:29.27ID:YiVNNcx0
>>660 javascript
const vComp = (a, b) => {
const verA = a.split`.`;
const verB = b.split`.`;
const shorter = verA.length - verB.length < 0 ? verA : verB;
const cmps = shorter.map((v, i) => Math.sign(verA[i] - verB[i]));
return cmps.reduce((acc, v, i) => Math.sign(acc + v * 2 ** (shorter.length - i)), 0);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
結果:
1
-1
0

(おまけ)ソート:
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
結果:
["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
0678デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:14:25.92ID:vvVzV1YI
>>671 どこにそんな決まりがあるの?

普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。
総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。
0680デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:16:24.45ID:vvVzV1YI
とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。
同じと思う方がおかしい。
0681デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:16:49.16ID:0tbf1s3D
お題:“木”という漢字を使って以下のようなフラクタル図形を描け

n=0


n=1
-木
木木

n=2
---木
--木木
-木--木
木木木木

n=3
-------木
------木木
-----木--木
----木木木木
---木------木
--木木----木木
-木--木--木--木
木木木木木木木木

※ハイフンはスペースだと思ってください
0682さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/14(木) 20:26:23.57ID:1+g2CCuw
>>678
Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。
0683デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:45:22.76ID:vvVzV1YI
>>682 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。
0684デフォルトの名無しさん
垢版 |
2019/03/14(木) 20:52:19.11ID:YiVNNcx0
>>660 の修正
const vComp = (a, b) => {
let verA = a.split `.`;
let verB = b.split `.`;
const len = Math.max(verA.length, verB.length);
verA = [...verA, ...'0'.repeat(len - verA.length)];
verB = [...verB, ...'0'.repeat(len - verB.length)];
const cmps = verA.map((v, i) => Math.sign(verA[i] - verB[i]));
return Math.sign(cmps.reduce((acc, v, i) => acc + v * 2 ** (len - i)), 0);
};

console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
//いいかげん結果省略
0686デフォルトの名無しさん
垢版 |
2019/03/14(木) 23:16:14.88ID:3EvgP48J
>>683
> いちいち誰かのいちゃもんに付き合ってる暇はない。
ならスルーしろよ
お前の頓珍漢な解釈なんて要らんし
0687デフォルトの名無しさん
垢版 |
2019/03/14(木) 23:41:35.78ID:nI5lwjDU
>>653 Squeak Smalltalk

| fn |
fn := [:strs | (strs collect: [:str | (str subStrings: '.') polynomialEval: 1/1e4]) reduce: #<=>].
fn value: #('0.1.2' '0.0'). "=> 1 "
fn value: #('1.2.3' '1.3'). "=> -1 "
fn value: #('0.0.0' '0.0'). "=> 0 "
0688デフォルトの名無しさん
垢版 |
2019/03/15(金) 00:00:24.31ID:27sSd34q
>>653 Perl5

use feature current_sub;
@is = (['0.1.2', '0.0'], ['1.2.3', '1.3'], ['0.0.0', '0.0']);
for (@is) {
 ($l, $r) = @$_;
 @l = split'\.', $l;
 @r = split'\.', $r;
 $z = sub {
  my $a = shift @l;
  my $b = shift @r;
  if (defined $a or defined $b) {
   $a //= 0;
   $b //= 0;
   $a <=> $b or __SUB__->()
  } else {
   0
  }
 }->();
 %d = (-1 => ' <', 0 => '==', 1 => '> ');
 print "$l $d{$z} $r : $z\n";
}

実行結果
~ $ perl 13_653.pl
0.1.2 > 0.0 : 1
1.2.3 < 1.3 : -1
0.0.0 == 0.0 : 0
0689デフォルトの名無しさん
垢版 |
2019/03/15(金) 00:10:49.43ID:27sSd34q
>>673 Perl5

@f = (0, 1);
push @f, $f[-2] + $f[-1] while @f < 10;
print "@f\n";

実行結果
~ $ perl 13_673_fib10.pl
0 1 1 2 3 5 8 13 21 34


Prel6、いいな…
0692デフォルトの名無しさん
垢版 |
2019/03/15(金) 00:50:01.20ID:ltf0XXfV
>>666 I
行単位で昇順にソートする場合

exit
"hello world" println

文字単位のソートの場合は難しそう。
0694デフォルトの名無しさん
垢版 |
2019/03/15(金) 01:15:34.20ID:T0clmjRI
>>673 Squeak Smalltalk

| fibGen |
fibGen := [:a :b | Generator on: [:g | [g yield: a. b := a + b. a := b - a] repeat]].
(fibGen value: 0 value: 1) next: 10.

"=> an OrderedCollection(0 1 1 2 3 5 8 13 21 34) "
0695デフォルトの名無しさん
垢版 |
2019/03/15(金) 01:34:55.02ID:4EriVrie
>>681 Squeak Smalltalk

| sp fn |
sp := $-. "sp := Character space."
fn := [:n |
| tree |
tree := [:lines :count |
(lines collectWithIndex: [:line :idx |
line, (String new: idx - 1 * 2 withAll: sp), line
]), lines
].
(((1 to: n) inject: #('木') into: tree) collectWithIndex: [:line :idx |
(String new: idx - 1 withAll: sp), line
]) reversed asStringWithCr
].

fn value: 0. "=>
'木' "

fn value: 1. "=>
'-木
木木' "

fn value: 2. "=>
'---木
--木木
-木--木
木木木木' "
0696デフォルトの名無しさん
垢版 |
2019/03/15(金) 01:51:53.98ID:Fj/79Ht+
>>673 javascript
const take = n => function*(iterable) {
const iterator = iterable[Symbol.iterator]();
for (let i = 0; i < n; i++) {
const {value, done} = iterator.next();
if (done) break;
yield value;
}
};
const fibo = function*() {
const memo = [0n, 1n];
const fib = n => n in memo ? memo[n] : memo[n] = fib(n - 2) + fib(n - 1);
for(let i = 0; ; i++) yield fib(i);
}();

console.log([...take(10)(fibo)]);
結果:
[0n, 1n, 1n, 2n, 3n, 5n, 8n, 13n, 21n, 34n]
0698デフォルトの名無しさん
垢版 |
2019/03/15(金) 10:29:40.47ID:4uXCwYPV
>>696
よく考えたら配列で出力する必要もなかった
console.log(...take(10)(fibo));
結果:
0 1 1 2 3 5 8 13 21 34
0699デフォルトの名無しさん
垢版 |
2019/03/15(金) 10:50:31.62ID:ltf0XXfV
>>666 Lua

a=ture
a=a or print("hello world")
0700デフォルトの名無しさん
垢版 |
2019/03/15(金) 10:54:07.06ID:EVqxIhVf
>>673

Haskell

main = (print.take 10) fibs
where fibs = 0:1:zipWith (+) fibs (tail fibs)
0701デフォルトの名無しさん
垢版 |
2019/03/15(金) 11:30:37.72ID:gesJPCRi
>>670 訂正 Python

def ver (v):
 s = list( map(int , v.split('.') ) )
 for _ in s:
  if s[-1] == 0 :s.pop(-1)
 return s

def cmp(v0,v1):
 v0 = ver(v0)
 v1 = ver(v1)
 if v0==v1: return 0
 else: return 1 if (v0 > v1) else -1

print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('10.0','9.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.0.0','1.2.0') ,
cmp('1.2.3','1.3')
)

# 1 1 1 0 0 -1
0702デフォルトの名無しさん
垢版 |
2019/03/15(金) 12:06:15.98ID:phFelL6J
>>666
「ソートすると」ではなく「ソートしてからその出力を実行またはコンパイルして実行すると」なのでは?
0706デフォルトの名無しさん
垢版 |
2019/03/15(金) 17:37:30.24ID:g4S7Lu9n
お題
2桁16進数化したものをつなげた形でIPアドレスが与えられる。(例:192.168.0.1 -> C0A80001)
与えられたIPアドレスからホスト名を逆引きせよ。


08080808 -> google-public-dns-a.google.com
9da6e21a -> www.cnn.com
0709デフォルトの名無しさん
垢版 |
2019/03/15(金) 19:13:09.78ID:4uXCwYPV
>>706 node
const reverse = hexIP => require('dns').reverse(hexIP
.split(/^(..)(..)(..)(..)$/g)
.map(xx => parseInt(xx, 16) || '')
.join('.').replace(/^\.|\.$/g, ''),
(err, hostnames) => {
console.log(hostnames);
});
console.log(reverse('08080808')); //=> [ 'google-public-dns-a.google.com' ]
console.log(reverse('9da6e21a')); //=> [ 'www.cnn.com' ]
0710デフォルトの名無しさん
垢版 |
2019/03/16(土) 01:04:28.66ID:moiau3OK
>>688 もっと簡潔に書けるんだった…

>>653 Perl5

use feature current_sub;
@is = (['0.1.2', '0.0'], ['1.2.3', '1.3'], ['0.0.0', '0.0']);
for (@is) {
 ($l, $r) = @$_;
 @l = split'\.', $l;
 @r = split'\.', $r;
 $z = sub {
  my $a = shift @l;
  my $b = shift @r;
  (defined $a or defined $b) ? ($a <=> $b or __SUB__->()) : 0
 }->();
 %d = qw{-1 < 0 == 1 >};
 print "$l $d{$z} $r : $z\n";
}

実行結果
~ $ perl 13_653.pl
0.1.2 > 0.0 : 1
1.2.3 < 1.3 : -1
0.0.0 == 0.0 : 0
0712デフォルトの名無しさん
垢版 |
2019/03/16(土) 06:51:03.68ID:x9tnPyz1
>>666

Haskell
空文字は出力しないと動かないから許して。(動く場合はmain =でパターンマッチして出力文埋め込むだけだけど)
ソートした自身の書き込み先、実行先は自身じゃ無いといけないとは書いてない。

import System.Process

main = putStr "" >> readFile "runmyself.hs" >>= \f -> writeFile "runmyself2.hs" ((replace.unlines.qsort.lines) f) >> callCommand "runghc runmyself2.hs"

replace [] = []
replace (p:u:t:s:t2:r:x:y:z:xs) | (p:u:t:s:t2:r:x:y:z:[]) == "putStr \"\"" = "putStrLn \"Hello World\"" ++ replace xs
replace (a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:xs) |
(a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:[]) == ">> callCommand \"runghc runmyself2.hs\"" = "" ++ replace xs
replace (x:xs) = x:replace xs

qsort [] = []
qsort (x:xs) = qsort [s| s <- xs, s <= x] ++ [x] ++ qsort [l| l <- xs, l > x]
0713デフォルトの名無しさん
垢版 |
2019/03/16(土) 14:50:17.74ID:0dLFyPZP
>>681 Perl5

use feature say;
$n = 0;
@t = ('木');
say "n=$n\n$t[0]";
for $n (1..2) {
 $l = '-' x 2**($n-1);
 @u = map{$l . $_ . $l} @t;
 @w = map{$t[$_].$t[$_]} 0..$#t;
 @t = (@u, @w);
 say "n=$n";
 say for @t;
}

実行例
~ $ perl 13_681.pl
n=0

n=1
-木-
木木
n=2
---木---
--木木--
-木--木-
木木木木

注) 正直者には、-はスペースに見えます。
0714デフォルトの名無しさん
垢版 |
2019/03/16(土) 16:51:50.43ID:EVMD7h0V
お題: プログラム言語をなにも知らない人にもプログラムの意味が理解できるコメント無しのhello worldを出力するコプログラム
0716デフォルトの名無しさん
垢版 |
2019/03/16(土) 17:16:48.87ID:EVMD7h0V
お題: 文字列に丁度いい具合にグリッチを入れて超かっこいい文字列を作るプログラム
0723デフォルトの名無しさん
垢版 |
2019/03/17(日) 06:18:59.33ID:k04EM+xl
2桁までの足し算の筆算を表示せよ。

例:
29
+15
----
14
3
----
44

29
+ 5
----
14
2
----
34
0725デフォルトの名無しさん
垢版 |
2019/03/17(日) 07:23:54.75ID:1ggb6IGK
お題
実数a,b (0<a<b)が与えられたとき、平面座標(a,b),(0,0),(a,-b)の3点を通る円の半径を求める。
0728デフォルトの名無しさん
垢版 |
2019/03/17(日) 08:41:45.83ID:k04EM+xl
>>727
居るけど、そういう人って機械自体が苦手な人。
機械と数学に強くてコードに落とせない人には会ったことがない。

機械には強いけど数学苦手だからコードに落とせないって人は(自分含め)沢山いるが。
0730デフォルトの名無しさん
垢版 |
2019/03/17(日) 12:38:59.54ID:TUY5K+QC
>>723 Perl5

for (<DATA>) {
 ($l, $o, $r) = split;
 @l = $l =~ /(\d?)(\d)/;
 @r = $r =~ /(\d?)(\d)/;
 $a1 = $l[0] + $r[0];
 $a0 = $l[1] + $r[1];
 @a1 = $a1 =~ /(\d?)(\d)/;
 @a0 = $a0 =~ /(\d?)(\d)/;
 $a = 10*$a1 + $a0;
 $" = '';
 print <<"EOF";
@l
$o@r
---
@a1
@a0
---
$a

EOF
}
__DATA__
29 + 15
29 + 5
0731デフォルトの名無しさん
垢版 |
2019/03/17(日) 12:40:50.32ID:TUY5K+QC
>>730 の実行結果

~ $ perl 13_723.pl
29
+15
---
3
14
---
44

29
+5
---
2
14
---
34

せっかくのスペース調整が詰まっちゃって残念なのでアンカーでポップアップして見てね
>>731
0733デフォルトの名無しさん
垢版 |
2019/03/17(日) 13:19:09.72ID:k04EM+xl
>>723
掛け算に対応したり、1桁どうしの計算用フォーマット作ったりしてたら規模がでかくなった(・ω・`)

1
* 2
-----
2

10
* 0
-----
0

Haskell

https://ideone.com/SCzGKq
0735デフォルトの名無しさん
垢版 |
2019/03/17(日) 18:42:43.38ID:7j/Zhhp5
>>723 ネタ回答: WolframAlpha API / node
// index.js
const {get} = require('http');
const appid = '<<YOUR WolframAlpha APP ID>>';
process.stdin.on('data', data => {
get(`http://api.wolframalpha.com/v2/query?appid=${appid}&input=${encodeURIComponent(data.toString().trim())}&podstate=Result__Step-by-step+solution&format=image&output=json`, res => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => {body += chunk;});
res.on('end', () => {
get(JSON.parse(body).queryresult.pods.filter(({title}) => title === 'Results')[0].subpods.filter(({title}) => title === 'Possible intermediate steps')[0].img.src, res => {
res.on('data', data => {process.stdout.write(data)});
});
});
});
});
$ echo 29+15 | node . > ./test1.gif
https://i.imgur.com/QxolfNz.gif
$ echo 29+5 | node . > ./test2.gif
https://i.imgur.com/D0r3sSg.gif
$ echo 29*15 | node . > ./test3.gif
https://i.imgur.com/imvQO5g.gif

試しに一桁×一桁やってみたらなんだか微妙な計算過程に…
$ echo 5*5 | node . > ./test.gif
https://i.imgur.com/8z3kZPf.gif

あと割り算はAPIからでは計算過程のURL取れなかった
0736デフォルトの名無しさん
垢版 |
2019/03/17(日) 19:54:31.54ID:k04EM+xl
>>735
こうやって足し算の筆算とは言え、人間の思考過程をプログラムで再現してみると小学生から結構複雑な処理してるんだなと思う。
もっと人間の処理に近づけるなら文字列として認識して、1桁目を数字に変換して〜みたいになるんだろうけど。
0741デフォルトの名無しさん
垢版 |
2019/03/18(月) 00:38:16.94ID:9+FFV4Nx
>>494 >>496 Perl5
use feature say;
@data = <DATA>;
chomp @data;
@tags = split' ', shift @data;
%idx = map{$_ => $n++} @tags;
@sum = 0 x $n;
for (@data) {
 @fs = split' ';
 for (0..$n-1) {
  $v = $fs[$_];
  if ($v =~ /^(\d+\.\d*|\d*\.\d+|\d+)$/) {
   $sum[$_] += $v;
  } else {
   warn "変なデータが紛れ込んでいます_ノ乙(、ン、)_`$v'\n";
  }
 }
}
for (@tags) {
 say "$_ の合計 = ", $sum[$idx{$_}];
}
__DATA__
カラム1 カラム2 カラム3 カラム4
1,0 2.0 3.0 4.0
2.1 3.1 4.1 5.1

~ $ perl 13_494.pl
変なデータが紛れ込んでいます_ノ乙(、ン、)_`1,0'
カラム1 の合計 = 2.1
カラム2 の合計 = 5.1
カラム3 の合計 = 7.1
カラム4 の合計 = 9.1
0742デフォルトの名無しさん
垢版 |
2019/03/18(月) 01:13:14.07ID:4b49AUHf
>>738
マンコ・カパックは、インカ神話によるクスコ王国の初代国王である。
0744デフォルトの名無しさん
垢版 |
2019/03/21(木) 05:20:06.50ID:ZuEvTwkR
>>675
Kotlin
https://paiza.io/projects/SlCrKgxVJRghtvESdUMR_A

リストの中の最小値をループして探し出しように作っただけなんだけど、こんなんで良いのか?
(MutableListなのでsort()しちゃうという手抜きワザもあったがそれだと表面上分岐が一つもない状態になるので止めた)。
0745デフォルトの名無しさん
垢版 |
2019/03/21(木) 11:30:55.91ID:4Lv8Ku6J
>>494 Squeak Smalltalk。コンマを分割と見なしそれぞれについての和を出力させてみた

| fn |
fn := [:columnName |
FileStream oldFileNamed: 'data.txt' do: [:file |
| index sum |
index := (file nextLine subStrings: ' ') indexOf: columnName.
sum := 0.
[file atEnd] whileFalse: [
| next |
next := ((file nextLine subStrings: ' ') at: index) subStrings: ','.
sum := sum + (next size = 1 ifTrue: [next anyOne] ifFalse: [next])].
sum
]
].

fn value: 'カラム3'. "=> 7.1 "
fn value: 'カラム1'. "=> #(3.1 2.1) "
0746デフォルトの名無しさん
垢版 |
2019/03/21(木) 13:37:55.15ID:p+hkSRzH
お題
長方形の盤で左上から上下左右に一マスずつ移動して全てのマスを
辿る。
移動の順番を表した数字を向きと終点を表す文字(↑↓←→★、
上下左右終、UDLRG、^V<>Gなど)に変換する。

入力
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11

出力
↓→→↓
→↑↓←
↓←→↓
★↑←←
0747デフォルトの名無しさん
垢版 |
2019/03/21(木) 14:37:03.32ID:Krn8F3T2
>>746 Perl5
@a = map{[split]} <DATA>;
for $y (0..$#a) {
 $h{$a[$y][$_]} = [$y,$_,''] for 0..$#a;
}
@s = keys %h;
%r = qw{-1,0 ↑ 1,0 ↓ 0,-1 ← 0,1 →};
for $i (1..@s) {
 if ($i == @s) {
  $d = '★'
 } else {
  $y = $h{$i+1}->[0] - $h{$i}->[0];
  $x = $h{$i+1}->[1] - $h{$i}->[1];
  $d = $r{"$y,$x"}
 }
 $h{$i}->[2] = $d;
}
($y, $x, $d) = @$_, $a[$y][$x] = $d for values %h;
use feature say;
say "@$_" for @a;
__DATA__
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11

実行結果
~ $ perl 13_746.pl
↓ → → ↓
→ ↑ ↓ ←
↓ ← → ↓
★ ↑ ← ←
0748デフォルトの名無しさん
垢版 |
2019/03/21(木) 22:33:42.92ID:4Lv8Ku6J
>>723 Squeak Smalltalk

| fn |
fn := [:int1 :int2 |
| strings width digits interms ans max line |
strings := {int1. int2} collect: #asString.
width := (strings detectMax: #size) size.
digits := strings collect: [:str |
(str forceTo: width paddingStartWith: $0) reversed asArray collect: #asString].
interms := (digits reduce: #+) collectWithIndex: [:interm :idx |
interm, (String new: idx-1 withAll: Character space)].
ans := interms polynomialEval: '10'.
strings atLast: 1 put: '+ ', strings last.
max := ((strings, {ans}) collect: #size) max.
line := String new: max withAll: $-.
(strings, {line}, interms, {line. ans} collect: [:str |
(str forceTo: max paddingStartWith: Character space) withoutTrailingBlanks
]) asStringWithCr
].

fn value: 987 value: 65. "=>
' 987
+ 65
----
12
14
9
----
1052' "
0750デフォルトの名無しさん
垢版 |
2019/03/22(金) 12:12:43.26ID:bmKj2SZK
>>746 Squeak Smalltalk

| fn |

fn := [:str |
| map range sign goal position next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
sign := (0 asPoint fourNeighbors with: #(→ ↓ ← ↑) collect: #->) as: Dictionary.
goal := #★.
position := 1@1. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
(map at: position y) at: position x put: (sign at: found - position ifAbsent: goal).
position := found. next := next + 1.
].
(map collect: #join) asStringWithCr
].

fn value: '1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11'

"=>
'↓→→↓
→↑↓←
↓←→↓
★↑←←' "
0752デフォルトの名無しさん
垢版 |
2019/03/22(金) 21:14:53.89ID:97922Y7I
まだ見にくいなあ。線を繋いで矢印を入れることはできないかな。
0753デフォルトの名無しさん
垢版 |
2019/03/22(金) 21:41:47.96ID:nZ/OoXFx
罫線
│┌─┐
└┘┌┘
┌┐└┐
★└─┘

直線部に矢印
│┌→┐
└┘┌┘
┌┐└┐
★└←┘

こんな感じ?
0755747
垢版 |
2019/03/22(金) 23:30:54.68ID:DMg7GUli
code、プリーズ
0757デフォルトの名無しさん
垢版 |
2019/03/23(土) 01:27:24.77ID:Bvojjkpo
罫線や矢印が半角で★が全角で表示されてしまうとずれるな。
ま、しょうがないか。
0759デフォルトの名無しさん
垢版 |
2019/03/23(土) 05:47:57.62ID:ZlGSstH0
>>754 Squeak Smalltalk

| fn |
fn := [:str |
| map range signs sign goal position from next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
goal := #★. signs := #(┌ ┌ ← → └ └ ┐ ┐ ↑ ↓ ┘ ┘) readStream.
sign := Dictionary new.
0 asPoint fourNeighbors combinations: 2 atATimeDo: [:combi |
sign at: combi copy put: signs next; at: combi reversed put: signs next].
position := 1@1. from := nil. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found delta |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
delta := found - position.
(map at: position y) at: position x put: (sign at: {from ifNil: [delta negated]. delta} ifAbsent: goal).
position := found. from := delta negated. next := next + 1].
(map collect: #join) asStringWithCr
].

fn value: '1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11' .
"=>
'↓┌→┐
└┘┌┘
┌┐└┐
★└←┘' "
0760デフォルトの名無しさん
垢版 |
2019/03/23(土) 06:18:42.67ID:ZlGSstH0
>>759 758の入力例を拝借

fn value: '1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9'.

"=>
'→→→→┐
┌→→┐↓
↑┌★↓↓
↑└←┘↓
└←←←┘' "

fn value: '1 4 5 8 9 12
2 3 6 7 10 11'.

"=>
'↓┌┐┌┐★
└┘└┘└┘' "

fn value: '1 4 5 6
2 3 8 7
16 14 9 10
15 13 12 11' .

"=> 繋げられるところまでで終点にする。
'↓┌→┐
└┘┌┘
16★└┐
15└←┘' "
0761デフォルトの名無しさん
垢版 |
2019/03/23(土) 22:17:53.61ID:4V4ijAbJ
S : Start
E : End
X : 行けない所

で、表す方がよいかも
0764デフォルトの名無しさん
垢版 |
2019/03/24(日) 01:17:54.50ID:TWBa+gHA
>>746 C
https://ideone.com/dQ2NRt
行けないところがある場合■で表示した
0765デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:31:32.22ID:Vlgf6sT0
お題 :次のようなジョブパラメータで表されるジョブ(製造工程)があります。全て完成するための最小時間とマシンスケジュールを求めてください。貧乏なので同じ番号のマシンは一台しかありません。{A, B}とあれば;Aマシン番号、B:所要時間

int job_param[JOBNUM][STP][2] = {
{{3, 10}, {4, 10}, {2, 12}, {0, 18}, {1, 4}},
{{1, 11}, {2, 6}, {3, 2}, {4, 8}, {0, 15}},
{{2, 10}, {4, 16}, {3, 2}, {1, 8}, {0, 14}},
{{2, 15}, {1, 12}, {0, 16}, {3, 6}, {4, 17}},
{{4, 14}, {0, 2}, {1, 15}, {2, 6}, {3, 10}}};
0766デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:50:50.08ID:ynFGlX0q
>>765
順序に対する制限とかは?
それとなんで5つに分かれているのか?
全部一塊で25個のマシン番号と所要時間のペアがある状態だと順序の関係で何かまずいのか?
0768デフォルトの名無しさん
垢版 |
2019/03/24(日) 14:40:55.72ID:ynFGlX0q
>>767
その辺の制限やルールが書かれていないからどうやれば良いのかが分からない、ということ。

順序も何もかも(マシン番号と所要時間も)入れ替えて構わないなら0〜4のマシン全体に所要時間を平均的に
詰め込むだけになると思うが、わざわざジョブとか分けてるんだからどうやらそうではなさそうだよな。
どうやら順序や入れ替えには制限があるように見える。しかしその制限が書かれていない。
0769デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:03:38.93ID:Ou399CfX
>>765
>>766
>>767
ジョブショップスケジューリング問題です。この問題はジョブや機械が増加すると調べなければならない組み合わせが爆発的に増加してしまうため、現実的な時間で最適解を求めることが難しいとされています(NP困難として知られています)。
マシンを配列順に使用することで1つの製品ができます。

私の実験では10分ぐらい待っても95で終わりませんでした。
0770デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:35:40.10ID:Ou399CfX
>>769
途中結果
Solution 4
COST_TIME: 95
0 : ( 3, 0, 10), ( 4, 15, 25), ( 2, 27, 39), ( 0, 46, 64), ( 1, 65, 69)
1 : ( 1, 0, 11), ( 2, 40, 46), ( 3, 54, 56), ( 4, 57, 65), ( 0, 80, 95)
2 : ( 2, 16, 26), ( 4, 27, 43), ( 3, 44, 46), ( 1, 47, 55), ( 0, 65, 79)
3 : ( 2, 0, 15), ( 1, 16, 28), ( 0, 29, 45), ( 3, 47, 53), ( 4, 66, 83)
4 : ( 4, 0, 14), ( 0, 15, 17), ( 1, 29, 44), ( 2, 47, 53), ( 3, 57, 67)

MACHIN Schedule
0 : (46, 64), (80, 95), (65, 79), (29, 45), (15, 17)
1 : (65, 69), ( 0, 11), (47, 55), (16, 28), (29, 44)
2 : (27, 39), (40, 46), (16, 26), ( 0, 15), (47, 53)
3 : ( 0, 10), (54, 56), (44, 46), (47, 53), (57, 67)
4 : (15, 25), (57, 65), (27, 43), (66, 83), ( 0, 14)
0771デフォルトの名無しさん
垢版 |
2019/03/24(日) 20:02:05.47ID:TWBa+gHA
>>770
ttps://imgur.com/upBqhWN.png
手動で調べたら90時間(単位は適当)まで縮んだ。最小時間か知らんが。
こういうのガントチャートっていうんだな
0772デフォルトの名無しさん
垢版 |
2019/03/24(日) 22:58:01.17ID:3fqiTHWE
ちなみに、

>>746
の問題で、行列の周りに、番兵を作って、処理した人はいる?

漏れは、いつもこの手の問題では、番兵で周りを囲む
0773デフォルトの名無しさん
垢版 |
2019/03/25(月) 12:18:06.31ID:7aW5s/71
……プログラミングやっててガントチャートしらないヤツもいるのか
勉強になった
0774デフォルトの名無しさん
垢版 |
2019/03/25(月) 12:23:06.98ID:T0osdeZX
名前知らなかっただけでは?
0775デフォルトの名無しさん
垢版 |
2019/03/25(月) 12:26:24.36ID:VWPF1Bqz
ロシア国防省「東アジアの地震の多い某国は数十年にわたり、地震を偽装した地下核実験を繰り返している」
https://rosie.5ch.net/test/read.cgi/liveplus/1550888671/l50
自衛隊の中に熊本人工地震を発生させた連中がいることは震源地が自衛隊駐屯地地下であることから自明。
http://open.mixi.jp/user/38378433/diary/1953066799
そればかりか、いま熊本の地下から出ている放射線量が「謎の赤丸急上昇中」だというのだ。
https://quasimoto2.exblog.jp/22729487/
今、自民党政権が、原発再稼働を進めている本当の理由は、核武装計画だけである。
経済的にとっくに破綻した原子力発電など、最初から眼中にないのだ。
東海アマブログentry-688.html
0776デフォルトの名無しさん
垢版 |
2019/03/25(月) 14:02:28.57ID:FL0Sj0Av
いちいちガントチャートなんて銘打たんしな
進捗管理するときには普通に使うもんだ
0777デフォルトの名無しさん
垢版 |
2019/03/25(月) 14:57:20.21ID:T0osdeZX
みんな名前知らないけど気づいたら作ってるようなものじゃないか?
0779デフォルトの名無しさん
垢版 |
2019/03/26(火) 00:12:39.41ID:xyG5xdoY
お題1: 整数値に対して K, M, G 等の単位を付けて人間に読みやすく文字列に変換して出力する。(ls -lh の時の容量の出力と同じで良い)。2^10 = K, 2^20 = M, 2^30 = G とする。
 小数点以下を何桁にするかはご自由に。但しあまりあり過ぎると人間には分かり辛いので1桁か2桁が望ましい。

お題2: お題1の逆変換。但し欠落した下位桁があったとしても考慮しなくて良い。

お題3: お題1, お題2 の10^3 = K, 10^6 = M, 10^9 = G 版。

回答のプログラムはまとめた形でも良い。例えばお題1を処理する関数のオプションとして0を与えると2^10単位、1を与えると10^3単位にするなど。
また、K, M, G よりも上の単位ができても良い。
0781デフォルトの名無しさん
垢版 |
2019/03/26(火) 03:42:21.20ID:xyG5xdoY
>>780
そうしたければそうしてもいいよ。
0782デフォルトの名無しさん
垢版 |
2019/03/26(火) 13:05:28.20ID:8ujFPLE9
お題1と3まとめてswitch-case文って
筋悪いですかねえ

あるいはお題1とお題2をまとめて、enum型でINVERSEとか作るとか、あるいは TRUE / FALSE で分岐とか
0787デフォルトの名無しさん
垢版 |
2019/03/28(木) 17:17:39.60ID:vvqhH31/
>>765
乱数使ったプログラム書いてみたけど動かした瞬間90まで行くけど
そこから何分待っても動かなさそう
0788デフォルトの名無しさん
垢版 |
2019/03/30(土) 20:23:23.36ID:ghZBhzgh
お題
表示画面におさまる最大の正三角形を描画する
0791デフォルトの名無しさん
垢版 |
2019/03/31(日) 13:16:21.13ID:m8dr8/PB
>>790
「たとえば表示画面が640x400なら、一辺が400の正三角形を描画する」ことではないのか
貴殿が想定する「最大の定義」とやらを示してもらえんかの?
0795デフォルトの名無しさん
垢版 |
2019/03/31(日) 19:30:51.59ID:KJRyWF55
コンソール画面なら、画面の横幅と縦幅を取得しなきゃならんから言語によってはめんどくさいだろうな
標準でcurses使える言語ってなにがあるかな
0797デフォルトの名無しさん
垢版 |
2019/04/01(月) 00:15:16.48ID:ucc1UNjR
リーマン幾何の多様体上で計算しとけ

なお、サラリーマンのリーンマン じゃないからな。
0799デフォルトの名無しさん
垢版 |
2019/04/01(月) 03:15:46.62ID:Mx+j7LaB
Windows環境だとdirectx叩くことになるのかな

VT100とかXとかは全く知らないけど DisplayWidth とか DisplayHeight とか使うのか
あるいは何らかのクラスのメンバー関数を呼ぶのか
0801デフォルトの名無しさん
垢版 |
2019/04/15(月) 22:24:58.61ID:pFhU6MbP
エスケープシーケンスで座標指定とか文字色変更って、今はできないんだっけ?
0803デフォルトの名無しさん
垢版 |
2019/04/16(火) 09:06:19.32ID:wCqxjGzR
>>801
文字を出す端末による。

WindowsだったとしてもWSLでUbuntu動かした時のbashの端末では使えてるので多分設定次第なんだろうな。
逆に言うと設定によっては意図した通りに動かない。
0804デフォルトの名無しさん
垢版 |
2019/04/16(火) 16:33:57.42ID:wCqxjGzR
お題
アミダくじの作成、表示、及び余力があれば実行

・縦線の本数と横線の最大本数は入力できるようにする。

・左右の縦線への横線だけでなく飛び越えて他の縦線へ移動する横線もオプションで作れるようにする。

・表示方法は罫線キャラクタを使っても良いがGUI等他の方法でも良い。

・実行時はアニメーションでも良いし、いきなり結果が出るだけでも良い。

・面倒なら作成して表示するだけで実行しなくても良い。
0806デフォルトの名無しさん
垢版 |
2019/04/16(火) 17:51:22.60ID:wCqxjGzR
・PC-8001で動作すること。

いや、動かんでもいい。
0813デフォルトの名無しさん
垢版 |
2019/04/18(木) 23:26:27.73ID:izaVyiw1
>>811 Squeak/Pharo Smalltalk

#(1 2 3) + #(4 5 6). "=> #(5 7 9) "
#((1 2 3) (4 5 6) (7 8 9)) sum. "=> #(12 15 18) "
#(1 2 3) * #(4 5 6) / #(7 8 9). "=> {(4/7) . (5/4) . 2} "
0816デフォルトの名無しさん
垢版 |
2019/04/19(金) 07:15:46.60ID:TxABBsFf
>>811
main = do
print $ zipWith (+) [1,2,3] [4,5,6]
print $ zipWith3 (\a b c -> a + b + c) [1,2,3] [4,5,6] [7,8,9]
print $ zipWith3 (\a b c -> a * b / c) [1,2,3] [4,5,6] [7,8,9]

Out:
[5,7,9]
[12,15,18]
[0.571428571428571,1.25,2.0]
0817デフォルトの名無しさん
垢版 |
2019/04/19(金) 08:40:44.50ID:TxABBsFf
>>813
Haskellでは%記号が分数を表すので、Data.Ratioをインポートして

import Data.Ratio

main = do
print $ zipWith (+) [1,2,3] [4,5,6]
print $ zipWith3 (\a b c -> a + b + c) [1,2,3] [4,5,6] [7,8,9]
print $ zipWith3 (\a b c -> a * b % c) [1,2,3] [4,5,6] [7,8,9]

Out:
[5,7,9]
[12,15,18]
[4 % 7,5 % 4,2 % 1]
0818デフォルトの名無しさん
垢版 |
2019/04/20(土) 12:21:00.80ID:R45IcBKG
お題:円の中心の座標と、円の半径の2乗が与えられる。
この円の円周上にある格子点の数を求めよ。

(X座標 Y座標 半径の2乗)
9/22 5/22 138125/242 => 7
7/38 5/38 785817263725/722 => 77
17/38 13/38 13603053979519731025/722 => 777
9/38 6/38 23959256988683736880737131790625/1444 => ?
12/38 7/38 23959256988683736880737131790625/1444 => ?
15/38 14/38 23959256988683736880737131790625/1444 => ?
0819デフォルトの名無しさん
垢版 |
2019/04/20(土) 18:57:22.37ID:4zW2+iPl
また数学か・・・
0823デフォルトの名無しさん
垢版 |
2019/04/21(日) 01:28:16.84ID:TAIIcaTj
プログラムでの解き方が思い付かないわ
円の方程式に整数代入して満たすかみればいいのか?
0824デフォルトの名無しさん
垢版 |
2019/04/21(日) 02:14:46.56ID:H/Se0iAi
解法を考えるのも回答能力のうちだからね
今の時代、参照・検索も当然 可だけれど
0826デフォルトの名無しさん
垢版 |
2019/04/21(日) 13:14:42.53ID:ay9waDdy
>>825

>>816 見てないの?
Haskellでは少数を返す割り算は「/」、整数を返す割り算は「`div`」と返す型で使い分ける。
「%」が返すのは分数型(Rational)
0828デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:43:26.25ID:NALZs80Z
お題: 日本語の文章の句読点を , や . に置き換える。
ただし、, や . の直後には半角のスペースを置き、さらに改行の手前や文末のスペースは削除すること。

例:
In < これは、日本語の文章です。ふひひ。
Out > これは, 日本語の文章です. ふひひ.
0831デフォルトの名無しさん
垢版 |
2019/04/24(水) 20:52:14.50ID:NALZs80Z
お題: 簡易なテーブルを綺麗に整形する
余力があればカラムの左揃え、右揃えをオプションで選択できるようにする(出力は中央揃え)

入力:
a|aaaaa|bb
ccc|ddd|ee

出力:

**a***|*aaaaa*|***bb*
------+-------+------
*ccc**|**ddd**|***ee*
0837デフォルトの名無しさん
垢版 |
2019/04/25(木) 04:26:28.66ID:D6NtakiX
>>831
入出力のエンコードは?
ASCII以外はあるのか?
0839デフォルトの名無しさん
垢版 |
2019/04/25(木) 07:44:22.82ID:XVamjpPA
>>834
いやバグってなかったわ
>>831
が正常
| の前後に*が一つ入るから
| の前後の*は入れても入れなくてもいいけど入れたほうが綺麗になるかもしれん
0842デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:39:16.14ID:J1W60oTI
何がキレイなのか定義出来ず言うことが主観でコロコロ変わる、マジで今の日本のサイコパス上司そのものだ
「オレの心情をさっしろ」みたいな屑がいいそうなこと
頭が悪いから定義が出来ないし自分の言ってることが支離滅裂になってる
曖昧な用語(綺麗)で押し通そうとする
コレ全部サイコパスの特徴
0846デフォルトの名無しさん
垢版 |
2019/04/25(木) 18:30:28.28ID:/IwwINNy
美しい半角カナ
0847デフォルトの名無しさん
垢版 |
2019/04/25(木) 18:35:37.23ID:/IwwINNy
>>845
変数に日本語が使えないとか書いてあるな。
Javaとか普通に使えるんだがな。
0848 ◆QZaw55cn4c
垢版 |
2019/04/25(木) 20:27:10.98ID:6xUIrXDu
>>844
倉橋由美子のが面白かったと思っています
0850デフォルトの名無しさん
垢版 |
2019/04/25(木) 22:33:30.90ID:X6smEgNz
>>847 そんな大昔の話をするなよ。 今はPython3 なんだから日本語も使えるよ。

なな = 7
print(なな)
# 7
0852デフォルトの名無しさん
垢版 |
2019/04/25(木) 23:39:11.26ID:D6NtakiX
>>851
あ、そうなの?
知らなかった。
0853デフォルトの名無しさん
垢版 |
2019/04/26(金) 18:55:29.49ID:YRtkzMZR
>>831
Kotlin
https://paiza.io/projects/RCbBPGrxaB1uoB-tj_1hJg
入力は1行目に 0, 1, 2 の何れかのオプションを指定する。
意味は 0=中央、1=左寄せ、2=右寄せ になっている。
2行目からは | 区切りで文字列を入れる。
空行またはファイルの終わりで表を出力する。
空行だった場合はまた次の表の最初のオプションから入れられる。
0854デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:49:06.87ID:RVSBatxL
>>853
ほとぼりが冷めたと思ってんのか屑?
お前が>>839だろ
ID変わったからっていい気になんなよ

ゴミみたいな出力のまさにゴミだ
全然綺麗じゃない
0855853
垢版 |
2019/04/27(土) 04:31:22.65ID:dVFnhFQW
>>854
違うよ。俺はもっと上の方であみだくじのお題を出したやつだよ。
自分でもプログラム作るには作ったけど表示するところまでだな。
しかしブラウザの実行環境で表示すると罫線の幅の問題でずれるので画像で出力しようかと思っている。
これな。
https://paiza.io/projects/2mINZHiEB6ciPWHEpkCJig
0856デフォルトの名無しさん
垢版 |
2019/04/27(土) 15:02:49.57ID:TtYrpMGa
お題:ジョブショップスケジューリングの問題です。
int job_param[JOBNUM][STP][2] = {

{{4, 342}, {1, 244}, {2, 351}, {3, 293}, {0, 342}}, // 1572

{{2, 306}, {4, 342}, {3, 386}, {1, 386}, {0, 413}}, // 1833

{{3, 168}, {0, 266}, {2, 182}, {1, 106}, {4, 368}}, // 1090

{{3, 368}, {2, 151}, {4, 284}, {0, 84}, {1, 164}}, // 1051

{{4, 240}, {1, 191}, {0, 351}, {3, 408}, {2, 275}}, // 1465

{{2, 342}, {3, 351}, {4, 191}, {0, 333}, {1, 426}}, // 1643

{{0, 93}, {1, 235}, {2, 422}, {3, 244}, {4, 151}}, // 1145

{{0, 75}, {4, 217}, {1, 111}, {3, 195}, {2, 435}}, // 1033

{{2, 173}, {4, 435}, {3, 186}, {1, 137}, {0, 53}}, // 984

{{1, 93}, {2, 231}, {4, 71}, {3, 115}, {0, 315}}}; // 825
0859デフォルトの名無しさん
垢版 |
2019/04/27(土) 17:28:59.65ID:PUfIYz8D
適当に詰めて行くプログラムで2928まではなった

h0 0-75 g0 75-168 c1 168-434 e2 434-785 j4 1002-1317 d3 1505-1589 f3 1696-2029 b4 2029-2442 a4 2442-2784 i4 2875-2928
j0 0-93 e1 240-431 h2 457-568 a1 799-1043 g1 1043-1278 c3 1385-1491 b3 1607-1993 d4 1993-2157 f4 2157-2583 i3 2738-2875
f0 0-342 j1 342-573 b0 573-879 i0 879-1052 d1 1052-1203 c2 1203-1385 a2 1385-1736 g2 1736-2158 e4 2158-2433 h4 2433-2868
c0 0-168 d0 168-536 f1 536-887 j3 887-1002 h3 1002-1197 b2 1221-1607 e3 1607-2015 a3 2015-2308 g3 2308-2552 i2 2552-2738
e0 0-240 h1 240-457 a0 457-799 j2 799-870 b1 879-1221 d2 1221-1505 f2 1505-1696 c4 1696-2064 i1 2064-2499 g4 2552-2703
0860デフォルトの名無しさん
垢版 |
2019/04/27(土) 17:44:35.53ID:PUfIYz8D
今2889になってたけどSegmentation faultで落ちてた
前回のやつでJOBNUMとかSTPとかをわざわざ直接5 5とか書いてて
今回どんなコードかもう忘れて片方を適当に10に直したからか元からバグがあったのか分からないけど
結果自体は間違ってなそうだと思うけど
0862デフォルトの名無しさん
垢版 |
2019/04/28(日) 08:12:15.68ID:3xnz0I0C
>>856
COST_TIME: 2932
0 : ( 4, 457, 799), ( 1, 800, 1044), ( 2, 1275, 1626), ( 3, 2017, 2310), ( 0, 2417, 2759)
1 : ( 2, 573, 879), ( 4, 880, 1222), ( 3, 1223, 1609), ( 1, 1610, 1996), ( 0, 2004, 2417)
2 : ( 3, 0, 168), ( 0, 784, 1050), ( 2, 1093, 1275), ( 1, 1279, 1385), ( 4, 2389, 2757)
3 : ( 3, 168, 536), ( 2, 942, 1093), ( 4, 1586, 1870), ( 0, 1920, 2004), ( 1, 2473, 2637)
4 : ( 4, 0, 240), ( 1, 241, 432), ( 0, 433, 784), ( 3, 1609, 2017), ( 2, 2221, 2496)
5 : ( 2, 0, 342), ( 3, 536, 887), ( 4, 1395, 1586), ( 0, 1587, 1920), ( 1, 2047, 2473)
6 : ( 0, 75, 168), ( 1, 1044, 1279), ( 2, 1799, 2221), ( 3, 2310, 2554), ( 4, 2757, 2908)
7 : ( 0, 0, 75), ( 4, 240, 457), ( 1, 458, 569), ( 3, 892, 1087), ( 2, 2496, 2931)
8 : ( 2, 1626, 1799), ( 4, 1954, 2389), ( 3, 2554, 2740), ( 1, 2741, 2878), ( 0, 2879, 2932)
9 : ( 1, 0, 93), ( 2, 342, 573), ( 4, 799, 870), ( 3, 1087, 1202), ( 0, 1203, 1518)

MACHINE Schedule
0 : ( 7, 0, 75), ( 6, 75, 168), ( 4, 433, 784), ( 2, 784, 1050), ( 9, 1203, 1518), ( 5, 1587, 1920), ( 3, 1920, 2004), ( 1, 2004, 2417), ( 0, 2417, 2759), ( 8, 2879, 2932)
1 : ( 9, 0, 93), ( 4, 241, 432), ( 7, 458, 569), ( 0, 800, 1044), ( 6, 1044, 1279), ( 2, 1279, 1385), ( 1, 1610, 1996), ( 5, 2047, 2473), ( 3, 2473, 2637), ( 8, 2741, 2878)
2 : ( 5, 0, 342), ( 9, 342, 573), ( 1, 573, 879), ( 3, 942, 1093), ( 2, 1093, 1275), ( 0, 1275, 1626), ( 8, 1626, 1799), ( 6, 1799, 2221), ( 4, 2221, 2496), ( 7, 2496, 2931)
3 : ( 2, 0, 168), ( 3, 168, 536), ( 5, 536, 887), ( 7, 892, 1087), ( 9, 1087, 1202), ( 1, 1223, 1609), ( 4, 1609, 2017), ( 0, 2017, 2310), ( 6, 2310, 2554), ( 8, 2554, 2740)
4 : ( 4, 0, 240), ( 7, 240, 457), ( 0, 457, 799), ( 9, 799, 870), ( 1, 880, 1222), ( 5, 1395, 1586), ( 3, 1586, 1870), ( 8, 1954, 2389), ( 2, 2389, 2757), ( 6, 2757, 2908)
0863デフォルトの名無しさん
垢版 |
2019/04/28(日) 19:46:09.95ID:4L316qYF
COST_TIME: 2868
0 : ( 4, 457, 799), ( 1, 800, 1044), ( 2, 1212, 1563), ( 3, 2017, 2310), ( 0, 2410, 2752)
1 : ( 2, 573, 879), ( 4, 880, 1222), ( 3, 1223, 1609), ( 1, 1610, 1996), ( 0, 1997, 2410)
2 : ( 3, 0, 168), ( 0, 169, 435), ( 2, 1030, 1212), ( 1, 1213, 1319), ( 4, 2326, 2694)
3 : ( 3, 168, 536), ( 2, 879, 1030), ( 4, 1523, 1807), ( 0, 1857, 1941), ( 1, 2703, 2867)
4 : ( 4, 0, 240), ( 1, 241, 432), ( 0, 435, 786), ( 3, 1609, 2017), ( 2, 2158, 2433)
5 : ( 2, 0, 342), ( 3, 536, 887), ( 4, 1332, 1523), ( 0, 1524, 1857), ( 1, 1996, 2422)
6 : ( 0, 75, 168), ( 1, 1319, 1554), ( 2, 1736, 2158), ( 3, 2310, 2554), ( 4, 2694, 2845)
7 : ( 0, 0, 75), ( 4, 240, 457), ( 1, 458, 569), ( 3, 887, 1082), ( 2, 2433, 2868)
8 : ( 2, 1563, 1736), ( 4, 1891, 2326), ( 3, 2379, 2565), ( 1, 2566, 2703), ( 0, 2752, 2805)
9 : ( 1, 0, 93), ( 2, 342, 573), ( 4, 799, 870), ( 3, 1082, 1197), ( 0, 1198, 1513)

MACHINE Schedule
0 : ( 7, 0, 75), ( 6, 75, 168), ( 2, 169, 435), ( 4, 435, 786), ( 9, 1198, 1513), ( 5, 1524, 1857), ( 3, 1857, 1941), ( 1, 1997, 2410), ( 0, 2410, 2752), ( 8, 2752, 2805)
1 : ( 9, 0, 93), ( 4, 241, 432), ( 7, 458, 569), ( 0, 800, 1044), ( 2, 1213, 1319), ( 6, 1319, 1554), ( 1, 1610, 1996), ( 5, 1996, 2422), ( 8, 2566, 2703), ( 3, 2703, 2867)
2 : ( 5, 0, 342), ( 9, 342, 573), ( 1, 573, 879), ( 3, 879, 1030), ( 2, 1030, 1212), ( 0, 1212, 1563), ( 8, 1563, 1736), ( 6, 1736, 2158), ( 4, 2158, 2433), ( 7, 2433, 2868)
3 : ( 2, 0, 168), ( 3, 168, 536), ( 5, 536, 887), ( 7, 887, 1082), ( 9, 1082, 1197), ( 1, 1223, 1609), ( 4, 1609, 2017), ( 0, 2017, 2310), ( 6, 2310, 2554), ( 8, 2379, 2565)
4 : ( 4, 0, 240), ( 7, 240, 457), ( 0, 457, 799), ( 9, 799, 870), ( 1, 880, 1222), ( 5, 1332, 1523), ( 3, 1523, 1807), ( 8, 1891, 2326), ( 2, 2326, 2694), ( 6, 2694, 2845)
0864デフォルトの名無しさん
垢版 |
2019/04/28(日) 23:28:25.99ID:l2GeSHcv
>>863
3 : ( 2, 0, 168), ( 3, 168, 536), ( 5, 536, 887), ( 7, 887, 1082), ( 9, 1082, 1197), ( 1, 1223, 1609), ( 4, 1609, 2017), ( 0, 2017 , 2310), ( 6, 2310, 2554), ( 8, 2379, 2565)

( 6, 2310, 2554), ( 8, 2379, 2565)
ここが重複してるから間違ってる
0865デフォルトの名無しさん
垢版 |
2019/04/29(月) 05:34:40.52ID:8r4CfxJG
>>864
ご指摘ありがとうございます。
0866デフォルトの名無しさん
垢版 |
2019/05/02(木) 08:14:38.07ID:y6AdJjmd
お題:ジョブショップスケジューリングの問題です。
int job_param[JOBNUM][STP][2] = {
{{4, 100}, {1, 100}, {2, 100}, {3, 100}, {0, 100}}, // 500
{{2, 100}, {4, 100}, {3, 100}, {1, 100}, {0, 100}}, // 500
{{3, 100}, {0, 100}, {2, 100}, {1, 100}, {4, 100}}, // 500
{{3, 100}, {2, 100}, {4, 100}, {0, 100}, {1, 100}}, // 500
{{4, 100}, {1, 100}, {0, 100}, {3, 100}, {2, 100}}, // 500
{{2, 100}, {3, 100}, {4, 100}, {0, 100}, {1, 100}}, // 500
{{0, 100}, {1, 100}, {2, 100}, {3, 100}, {4, 100}}, // 500
{{0, 100}, {4, 100}, {1, 100}, {3, 100}, {2, 100}}, // 500
{{2, 100}, {4, 100}, {3, 100}, {1, 100}, {0, 100}}, // 500
{{1, 100}, {2, 100}, {4, 100}, {3, 100}, {0, 100}}}; // 500
0869デフォルトの名無しさん
垢版 |
2019/05/02(木) 12:40:19.89ID:6TxNQP9X
死んで良し。こんな長たらしいのを貼るなんて迷惑。
どこかに貼ってリンクだけにしろ。
0870デフォルトの名無しさん
垢版 |
2019/05/03(金) 00:09:09.98ID:zqE/J/GT
>>831
C https://ideone.com/UPx6IS
もうどうでもいいかもしれんが、各列で幅調整ができるようにした
0871デフォルトの名無しさん
垢版 |
2019/05/07(火) 18:32:57.10ID:dWjIX09N
COST_TIME: 2903
0 : ( 4, 799, 1141), ( 1, 1141, 1385), ( 2, 1385, 1736), ( 3, 2023, 2316), ( 0, 2477, 2819)
1 : ( 2, 0, 306), ( 4, 457, 799), ( 3, 1114, 1500), ( 1, 1500, 1886), ( 0, 1980, 2393)
2 : ( 3, 368, 536), ( 0, 913, 1179), ( 2, 1203, 1385), ( 1, 1385, 1491), ( 4, 2122, 2490)
3 : ( 3, 0, 368), ( 2, 1052, 1203), ( 4, 1838, 2122), ( 0, 2393, 2477), ( 1, 2639, 2803)
4 : ( 4, 0, 240), ( 1, 240, 431), ( 0, 562, 913), ( 3, 1615, 2023), ( 2, 2593, 2868)
5 : ( 2, 306, 648), ( 3, 763, 1114), ( 4, 1141, 1332), ( 0, 1332, 1665), ( 1, 1886, 2312)
6 : ( 0, 75, 168), ( 1, 568, 803), ( 2, 1736, 2158), ( 3, 2508, 2752), ( 4, 2752, 2903)
7 : ( 0, 0, 75), ( 4, 240, 457), ( 1, 457, 568), ( 3, 568, 763), ( 2, 2158, 2593)
8 : ( 2, 879, 1052), ( 4, 1403, 1838), ( 3, 2316, 2502), ( 1, 2502, 2639), ( 0, 2819, 2872)
9 : ( 1, 0, 93), ( 2, 648, 879), ( 4, 1332, 1403), ( 3, 1500, 1615), ( 0, 1665, 1980)

MACHINE Schedule
0 : ( 7, 0, 75), ( 6, 75, 168), ( 4, 562, 913), ( 2, 913, 1179), ( 5, 1332, 1665), ( 9, 1665, 1980), ( 1, 1980, 2393), ( 3, 2393, 2477), ( 0, 2477, 2819), ( 8, 2819, 2872)
1 : ( 9, 0, 93), ( 4, 240, 431), ( 7, 457, 568), ( 6, 568, 803), ( 0, 1141, 1385), ( 2, 1385, 1491), ( 1, 1500, 1886), ( 5, 1886, 2312), ( 8, 2502, 2639), ( 3, 2639, 2803)
2 : ( 1, 0, 306), ( 5, 306, 648), ( 9, 648, 879), ( 8, 879, 1052), ( 3, 1052, 1203), ( 2, 1203, 1385), ( 0, 1385, 1736), ( 6, 1736, 2158), ( 7, 2158, 2593), ( 4, 2593, 2868)
3 : ( 3, 0, 368), ( 2, 368, 536), ( 7, 568, 763), ( 5, 763, 1114), ( 1, 1114, 1500), ( 9, 1500, 1615), ( 4, 1615, 2023), ( 0, 2023, 2316), ( 8, 2316, 2502), ( 6, 2508, 2752)
4 : ( 4, 0, 240), ( 7, 240, 457), ( 1, 457, 799), ( 0, 799, 1141), ( 5, 1141, 1332), ( 9, 1332, 1403), ( 8, 1403, 1838), ( 3, 1838, 2122), ( 2, 2122, 2490), ( 6, 2752, 2903)
0873デフォルトの名無しさん
垢版 |
2019/05/09(木) 08:23:28.37ID:iHKmUIWi
COST_TIME: 2868
0 : ( 4, 970, 1312), ( 1, 1312, 1556), ( 2, 1807, 2158), ( 3, 2177, 2470), ( 0, 2470, 2812)
1 : ( 2, 0, 306), ( 4, 557, 899), ( 3, 1197, 1583), ( 1, 1583, 1969), ( 0, 1969, 2382)
2 : ( 3, 0, 168), ( 0, 394, 660), ( 2, 1474, 1656), ( 1, 1969, 2075), ( 4, 2222, 2590)
3 : ( 3, 168, 536), ( 2, 1656, 1807), ( 4, 1938, 2222), ( 0, 2382, 2466), ( 1, 2696, 2860)
4 : ( 4, 292, 532), ( 1, 532, 723), ( 0, 723, 1074), ( 3, 1583, 1991), ( 2, 2158, 2433)
5 : ( 2, 306, 648), ( 3, 731, 1082), ( 4, 1312, 1503), ( 0, 1512, 1845), ( 1, 2133, 2559)
6 : ( 0, 75, 168), ( 1, 723, 958), ( 2, 1052, 1474), ( 3, 2470, 2714), ( 4, 2714, 2865)
7 : ( 0, 0, 75), ( 4, 75, 292), ( 1, 292, 403), ( 3, 536, 731), ( 2, 2433, 2868)
8 : ( 2, 879, 1052), ( 4, 1503, 1938), ( 3, 1991, 2177), ( 1, 2559, 2696), ( 0, 2812, 2865)
9 : ( 1, 0, 93), ( 2, 648, 879), ( 4, 899, 970), ( 3, 1082, 1197), ( 0, 1197, 1512)

MACHINE Schedule
0 : ( 7, 0, 75), ( 6, 75, 168), ( 2, 394, 660), ( 4, 723, 1074), ( 9, 1197, 1512), ( 5, 1512, 1845), ( 1, 1969, 2382), ( 3, 2382, 2466), ( 0, 2470, 2812), ( 8, 2812, 2865)
1 : ( 9, 0, 93), ( 7, 292, 403), ( 4, 532, 723), ( 6, 723, 958), ( 0, 1312, 1556), ( 1, 1583, 1969), ( 2, 1969, 2075), ( 5, 2133, 2559), ( 8, 2559, 2696), ( 3, 2696, 2860)
2 : ( 1, 0, 306), ( 5, 306, 648), ( 9, 648, 879), ( 8, 879, 1052), ( 6, 1052, 1474), ( 2, 1474, 1656), ( 3, 1656, 1807), ( 0, 1807, 2158), ( 4, 2158, 2433), ( 7, 2433, 2868)
3 : ( 2, 0, 168), ( 3, 168, 536), ( 7, 536, 731), ( 5, 731, 1082), ( 9, 1082, 1197), ( 1, 1197, 1583), ( 4, 1583, 1991), ( 8, 1991, 2177), ( 0, 2177, 2470), ( 6, 2470, 2714)
4 : ( 7, 75, 292), ( 4, 292, 532), ( 1, 557, 899), ( 9, 899, 970), ( 0, 970, 1312), ( 5, 1312, 1503), ( 8, 1503, 1938), ( 3, 1938, 2222), ( 2, 2222, 2590), ( 6, 2714, 2865)
0874デフォルトの名無しさん
垢版 |
2019/05/09(木) 09:37:18.89ID:pu1Iu6no
ここはプログラミングのお題スレであって結果と思われる出力を書き込むスレではない。
0875デフォルトの名無しさん
垢版 |
2019/05/09(木) 19:00:51.34ID:n0QdGvKz
コラッツ数列を作る関数chainを書け

コラッツ数列の定義

任意の自然数から開始する
数が 1ならば 、終了
数が偶数なら 、 2で割る
数が奇数なら 、 3倍して 1を足す
新しい値でこのアルゴリズムを繰り返す

使用例

>chain 10
[ 1 0 , 5 , 1 6 , 8 , 4 , 2 , 1 ]

>chain 1
[ 1 ]

>chain 30
[ 3 0 , 1 5 , 4 6 , 2 3 , 7 0 , 3 5 , 1 0 6 , 5 3 , 1 6 0 , 8 0 , 4 0 , 2 0 , 1 0 , 5 , 1 6 , 8 , 4 , 2 , 1 ]
0877さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/05/09(木) 22:20:55.24ID:sZO2t0w0
お題: 改行とスペースを含むASCII文字列が与えられる。
改行とスペース以外の各印字可能文字の位置を以下のように順番に出力せよ。

(入力)
a b c

d
(出力)
[a, 0, 0]
[b, 2, 0]
[c, 5, 0]
[d, 0, 2]
0878デフォルトの名無しさん
垢版 |
2019/05/10(金) 08:21:41.55ID:Z1uC1A15
>>875
python

def chain(n):
lst = []
if n < 1: raise ValueError("Please n > 0 number")
while n != 1:
lst.append(n)
if n % 2 == 0: n //= 2
else: n = n * 3 + 1
lst.append(1)
return lst

for i in [10,1,30,0]: print(chain(i))
0879デフォルトの名無しさん
垢版 |
2019/05/10(金) 08:24:53.49ID:Z1uC1A15
>>875
Haskell

main = mapM_ (print.chain) [10,1,30,0]

chain 1 = [1]
chain n | n < 1 = error "Please n > 0 number"
chain n | even n = n:chain (n `div` 2)
chain n = n:chain (n * 3 + 1)
0883デフォルトの名無しさん
垢版 |
2019/05/10(金) 12:30:05.58ID:k7gY5pMP
>>877
出力は、行列番号が0から始まるとして
文字,列番号、行番号 だと思うから c の列番号は間違ってるんじゃないの?
(入力)
a b c

d
(出力)
[a, 0, 0]
[b, 2, 0]
[c, 4, 0] << 5じゃなくて4だろ。
[d, 0, 2]
0884デフォルトの名無しさん
垢版 |
2019/05/10(金) 12:47:01.79ID:6xQjM2XG
>>876,880
この問題、入門書から抜粋したけど次に1ー100の間に長さ15以上は何個あるかとか出てるから、
Cだとリストから作らないといけないのは分かるが、リスト返す様にした方が仕様変更に強いと思う。
0886デフォルトの名無しさん
垢版 |
2019/05/10(金) 13:27:19.10ID:k7gY5pMP
>>877 python

st = '''a b c

d
'''
line = 0 ; col = 0
for c in st :
__if c == '\n' :
____line += 1
____col = 0
____continue
__if c != ' ' :
____print ('['+c, col,str(line)+']', sep=',')
__col += 1
0887デフォルトの名無しさん
垢版 |
2019/05/10(金) 13:40:11.78ID:k7gY5pMP
>>886 出力フォーマットが
['a', 0, 0]
['b', 2, 0]
['c', 4, 0]
['d', 0, 2]
でもよければ print文は簡単になる
print ([c, col,line])
0890デフォルトの名無しさん
垢版 |
2019/05/10(金) 15:43:29.85ID:aTy0NCJ4
>>875
与えられた数の3倍以上の個数を持つ系列を
を3個示せ。
0891デフォルトの名無しさん
垢版 |
2019/05/10(金) 17:50:33.37ID:58PV3kUA
>>875,884 Squeak Smalltalk

| chain |

chain := [:n |
Array streamContents: [:ss |
ss nextPut: n.
[n > 1] whileTrue: [ss nextPut: (n := n even ifTrue: [n / 2] ifFalse: [n * 3 + 1])]
]
].

chain value: 10. "=> #(10 5 16 8 4 2 1) "

(1 to: 100) count: [:n | (chain value: n) size >= 15] "=> 71 "
0892デフォルトの名無しさん
垢版 |
2019/05/10(金) 20:05:13.80ID:0Zlxa6bH
>>875
Perl のワンライナー。

perl -ne '$n=$_;chomp($n);@d=($n);while($n!=1){$n=$n&1?($n*3+1):($n/2);push(@d,$n)}print "[".join(", ", @d)."]\n"'

実行する場合はbash等のシェルから行う(シングルクォートの中がそのままperlに引き渡されさえすれば他のシェルでも良い)。

標準入力から1行1データで入力して結果を出力するようにした。
0893デフォルトの名無しさん
垢版 |
2019/05/10(金) 20:29:31.76ID:/+/am3CQ
>>890
27のとき112個
31のとき107個
10億くらいまで回したけど、これら以外なくね?

数列の初期値と長さは、初期値が小さいうちは同じくらいだが、初期値を大きくしても数列の長さはさほど伸びない。
ttps://imgur.com/wm0kCEQ
グラフはxが大きくなるほど飛ばす間隔も大きくしてあるからあまり正確ではない。
0896デフォルトの名無しさん
垢版 |
2019/05/11(土) 11:54:01.37ID:Ze1v8w/9
>>875 Perl5

sub chain {
 my $i = shift;
 $i == 1 ? $i : ($i, ($i & 1 ? chain(3*$i + 1) : chain($i / 2)))
}

for (qw{10 1 30}) {
 @a = chain $_;
 print "[@a]\n";
}


実行
~ $ perl 13_875_collatz.pl
[10 5 16 8 4 2 1]
[1]
[30 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1]
0897デフォルトの名無しさん
垢版 |
2019/05/11(土) 12:16:05.54ID:Ze1v8w/9
>>877 Perl5

@in = map{[split'']} map{split '\n'} <<EOF;
a b c

d
EOF
for $j (0..$#in) {
 for $i (0..$#{$in[$j]}) {
  $c = $in[$j][$i];
  print "[$c,$i,$j]\n" if $c =~ /\w/;
 }
}


実行
~ $ perl 13_877.pl
[a,0,0]
[b,2,0]
[c,4,0]
[d,0,2]
0898デフォルトの名無しさん
垢版 |
2019/05/11(土) 13:06:48.39ID:bKjSBhWB
>>875
Ruby で

module Collatz
def self.next_number( num )
if num.even? # 偶数
num / 2
else # 奇数
num * 3 + 1
end
end

def self.chain( num )
@@results = [ ]
tmp = num

while true
@@results.push tmp
break if tmp == 1

tmp = next_number( tmp )
end
@@results
end
end

[ 1, 27 ].each do | num |
p Collatz.chain( num )
end
0903デフォルトの名無しさん
垢版 |
2019/05/12(日) 06:46:28.87ID:R9TUiFuu
>>875
コラッツ樹で作れば出力を減らせる。
0905デフォルトの名無しさん
垢版 |
2019/05/14(火) 09:26:15.81ID:zeev4Evh
>>877
Ruby で

text = <<"EOT"
a b c

d
EOT

re = /[^ ]+/ # 空白以外

text.each_line.with_index do | line, idx | # 1行ずつ処理する
line.strip! # trim
# $~.begin は、マッチした先頭文字の位置
line.scan( re ) { puts "[" + [ $~.to_s, $~.begin(0), idx ].join( ", " ) + "]" }
end
0906デフォルトの名無しさん
垢版 |
2019/05/14(火) 10:07:03.30ID:rKVVoOG1
>>886 をスッキリ修正してみた
改行コード指定をやめ、for loop のカウンタを利用

>>877 の解

st = '''a b c

d
'''
for line,l in enumerate(st.splitlines()) :
 for col,c in enumerate(l):
  if c != ' ' : print('['+c, col,str(line)+']',sep=',')
0908デフォルトの名無しさん
垢版 |
2019/05/14(火) 23:52:44.04ID:AtHJrRxM
>>877 Squeak Smalltalk

| fn |

fn := [:str |
((str lines collectWithIndex: [:line :lIdx |
(line reject: #isSeparator) asArray
collect: [:chr | {chr. (line indexOf: chr) - 1. lIdx - 1}]]
) concatenation select: #notEmpty) asStringWithCr
].

fn value: 'a b c

d'

"=>
'#($a 0 0)
#($b 2 0)
#($c 4 0)
#($d 0 2)' "
0909デフォルトの名無しさん
垢版 |
2019/05/15(水) 01:06:44.65ID:tCUIeJeC
>>908 smalltalk って全く知らないけど、最後が出力のつもり?
だったらお題の出力フォーマットと似ても似つかないじゃん。
0911デフォルトの名無しさん
垢版 |
2019/05/15(水) 04:50:48.17ID:TsVBVaTo
>>877 Squeak/Pharo Smalltalk
出力はともかく同行に同文字があるとダメだった^^;ので>>908 差し替え

| fn |

fn := [:str |
((str lines collectWithIndex: [:line :lIdx |
(line asArray collectWithIndex: [:chr :cIdx | {chr. cIdx - 1. lIdx - 1}]
) reject: [:each | each first isSeparator]]
) concatenation
select: #notEmpty thenCollect: [:each | '[{1}, {2}, {3}]' format: each]) asStringWithCr
].

fn value: 'a b c

d'

"=>
[a, 0, 0]
[b, 2, 0]
[c, 4, 0]
[d, 0, 2] "
0912905
垢版 |
2019/05/15(水) 09:57:59.71ID:AfKgri37
>>907
re = /[^ ]+/
空白以外だから、上のようにしたけど、空白"類"以外なら、\S+ でよい

問題の意図がどちらなのか、よく分からない
0915デフォルトの名無しさん
垢版 |
2019/05/16(木) 03:57:55.40ID:6BLr95cC
>>914
具体的にはどの処理のどの部分を冗長に感じられたのでしょうか?
たとえばRubyの回答がどう冗長か(あるいはどう書けば良いか)教えてください!
0920デフォルトの名無しさん
垢版 |
2019/05/16(木) 20:28:13.91ID:3sIrlJF4
お題
整数の数列が与えられるので、各値の大小関係を変えないように値をなるべく小さくせよ
ただし1番小さい要素は1にすること
入力
-6 3 9 5 3 -7
出力
2 3 5 4 3 1
0922 ◆QZaw55cn4c
垢版 |
2019/05/16(木) 21:47:12.78ID:m1RdOLwU
>>920
>値をなるべく小さくせよ
絶対値を小さく、という意味ですか?
0923デフォルトの名無しさん
垢版 |
2019/05/16(木) 22:59:47.34ID:0eZXbfha
>>920 Pharo/Squeak Smalltalk

| fn |

fn := [:arr |
| sorted |
sorted := arr asSet sorted.
arr collect: [:x | sorted indexOf: x]
].

fn value: #(-6 3 9 5 3 -7). "=> #(2 3 5 4 3 1) "
0924913
垢版 |
2019/05/16(木) 23:00:52.84ID:02wuysYU
>>877 ocaml
https://ideone.com/waZZh7
・自分に正直になってrefとforループで書いた

>>914
じょ、助長…

>>916
外しと言うより、たんに不勉強
python書けないんよね(´・ω・`)
0925デフォルトの名無しさん
垢版 |
2019/05/16(木) 23:34:17.56ID:YXKZQo24
>>923 Perl5

@a = qw{-6 3 9 5 3 -7};
$h{$_}=1 for @a;
%o = map{$_=>++$i} sort{$a<=>$b} keys %h;
@b = map{$o{$_}} @a;
print "@a => @b\n";

実行
~ $ perl 13_920.pl
-6 3 9 5 3 -7 => 2 3 5 4 3 1
0928デフォルトの名無しさん
垢版 |
2019/05/17(金) 00:26:31.35ID:SI3/qEwo
>>888 Pharo/Squeak Smalltalk

| fn |

fn := [:arr |
String streamContents: [:ss |
| cIdx lIdx |
cIdx := lIdx := 0.
arr do: [:spec |
spec third > lIdx ifTrue: [
ss nextPutAll: (String new: spec third - lIdx withAll: Character cr).
lIdx := spec third.
cIdx := 0
].
ss nextPutAll: (String new: spec second - cIdx withAll: Character space).
ss nextPutAll: spec first.
cIdx := spec second + 1.
]
]
].

fn value: #(
(a 0 0)
(b 2 0)
(c 4 0)
(d 0 2)).

"=>
a b c


d "
0932デフォルトの名無しさん
垢版 |
2019/05/17(金) 07:54:47.22ID:9a+COZnd
>>888
s = '''\
[a, 0, 0]
[b, 2, 0]
[c, 4, 0]
[d, 0, 2]
'''

from parse import * #pip install

col2 = 0 ; line2 = 0
for l in s.splitlines():
 col = col2 ; line = line2
 r=parse('[{},{},{}]',l)
 c= r[0]
 col2 = int(r[1]) ; line2 = int(r[2])
 {print() for _ in range(line2-line) }
 {print(' ',end='') for _ in range(col2-col)}
 print(c, end='')
 col2 += 1
print()

'''#出力
a b c

d
'''
0933デフォルトの名無しさん
垢版 |
2019/05/17(金) 08:32:11.25ID:9a+COZnd
>>932 parse に型指定追加
>>888 Python
s = '''\
[a, 0, 0]
[b, 2, 0]
[c, 4, 0]
[d, 0, 2]
'''

from parse import * #pip install

col2 = 0 ; line2 = 0
for l in s.splitlines():
 col = col2 ; line = line2
 (c,col2,line2) = parse('[{},{:d},{:d}]',l)
 {print() for _ in range(line2-line) }
 {print(' ',end='') for _ in range(col2-col)}
 print(c, end='')
 col2 += 1
print()

'''#出力
a b c

d
'''
0934デフォルトの名無しさん
垢版 |
2019/05/17(金) 12:14:50.20ID:8VLhbVxR
>>920
は、ランク付けの問題だろ

入力データ
-6 3 9 5 3 -7
出力・ランク
2 3 5 4 3 1

入力データの最も小さい数字を、ランク1 にして、
数字が大きくなるほど、ランクも大きくしていく

同値の場合は、同じランクにして、次のランクも間隔を空けない。
ランク3 が2つあっても、次は、ランク4

つまり、ランクが欠けることはない!
0936デフォルトの名無しさん
垢版 |
2019/05/17(金) 12:39:09.53ID:L8EHraRu
難しく書いてたけど結局これだけなのか
問題文をわざと複雑に見せかける現代文読解と同じ仕組みじゃないか
0937デフォルトの名無しさん
垢版 |
2019/05/17(金) 12:49:18.63ID:ut9H1r3U
プログラム作る前に気づいたので>>931のリンク先のブログラムのタイトルは密かに「順位」にしといたw
0940デフォルトの名無しさん
垢版 |
2019/05/17(金) 13:29:01.98ID:L8EHraRu
そうですね
難易度は主観ですね
なら短さ長さを比べるとこうなります

・各値の大小関係を変えないように値をなるべく小さくせよ
・ランク付けせよ

もしかしたらこれが要するにただのランク付けだと分かるまで何人が挑戦するかを試してみる社会調査だったのかもしれません
0941デフォルトの名無しさん
垢版 |
2019/05/17(金) 13:36:08.80ID:/5AjAxyT
>ランク付けだと分かるまで何人が挑戦するかを試してみる

まさにそうじゃないの?
0942デフォルトの名無しさん
垢版 |
2019/05/17(金) 13:44:50.72ID:mxL0YWmq
>>920 J
f =: >: @ (i.~ /:~ @ ~.)

f _6 3 9 5 3 _7
2 3 5 4 3 1
0948デフォルトの名無しさん
垢版 |
2019/05/17(金) 16:00:34.70ID:ut9H1r3U
>>947
(・)(・)

(・)(・)
0949デフォルトの名無しさん
垢版 |
2019/05/17(金) 16:18:22.99ID:X2USxdO3
お題:自然数を隙間なく自分自身以外の数に対応させよ。
0951デフォルトの名無しさん
垢版 |
2019/05/17(金) 17:04:52.99ID:ut9H1r3U
>>949
君が何を言っているのかわからない。
0953デフォルトの名無しさん
垢版 |
2019/05/17(金) 18:07:07.73ID:nEasvejW
偶数なら1引く
奇数なら1足すとかでいいんじゃないの
0954デフォルトの名無しさん
垢版 |
2019/05/17(金) 18:39:31.46ID:9GdSR9hc
>>953 良いんじゃないのじゃなくて、他の人が理解できる言葉に翻訳してよ。
これじゃ小学校の国語で平均点以下だろ。

日本語が不自由ならプログラム例を示せば良い。変な言語はダメだけど、C系の素直な言語なら万国共通
0957デフォルトの名無しさん
垢版 |
2019/05/17(金) 19:40:06.71ID:9GdSR9hc
>>955 あのさ、それで人に通じると思ってるの?
そんな仕様書を書いて誰がコーディングするんだよ。

日本語に翻訳して明後日出直してこい。

言語能力にかけてるやつは、自分の頭の中が周りの人からスケスケに見えてると言う妄想を持ってる。
狭い世界で通用しても社会では通用しない。
0958デフォルトの名無しさん
垢版 |
2019/05/17(金) 19:47:34.60ID:9GdSR9hc
ここまで何人もの人がわからんと言ってるのは、その仕様を出した人間の素質が失格という事だろ。

それを何で庇うんだ? 庇う理由を説明してみろよ。 ここがバカばかりと思うならバカに解るように説明しろよな。

バカにわからせなければ、PLは務まらないよ。
と言うか、仕事は一般人としてるのに何をトチ狂ってるんだ? かなり精神を疑うな。
0962 ◆QZaw55cn4c
垢版 |
2019/05/17(金) 20:21:17.94ID:e+Q6zZPk
>>956
単射でないとなると、n に対して n % 10 を対応付けるとかもありになりますね…

>>957
全射、単射、全単射とかは普通に使う単語ですよ、知らないのなら、これらの術語を含む数学の本…代数ですかね?解析ですかね?よくわからないや、を一冊読んでみるのがいいですね
0963デフォルトの名無しさん
垢版 |
2019/05/17(金) 20:46:06.10ID:Jb6joIEA
>>961
出題者に言えよ

>>962
%じゃ全射にも単射にもならんぞ
上で誰かが言ってた遇奇を入れ替えたりだとか
f(n) = n - 1, f(0) = 0以外の任意の値
とかなんでもありだね。つまらんけど
0965 ◆QZaw55cn4c
垢版 |
2019/05/17(金) 20:51:49.11ID:e+Q6zZPk
>>963
>%じゃ全射にも単射にもならんぞ
そうですね、じゃ、割り算の商の整数部分「/」とかはどうでしょう
0966デフォルトの名無しさん
垢版 |
2019/05/17(金) 21:06:32.38ID:ut9H1r3U
>>964
はい。
0968デフォルトの名無しさん
垢版 |
2019/05/17(金) 21:30:53.57ID:0M7uQZeH
920だが、ランク付けだと解が236531と解釈される可能性が有ったので避けた
もっと簡単な書き方があるはそう思う、座圧+1とかでも伝わるだろうし……
0969デフォルトの名無しさん
垢版 |
2019/05/17(金) 22:36:31.21ID:gcMK/Ofn
数値のリストを入力し、値の小さい順に1から順位を付けて、
順位のリストを出力する。同じ値は同じ順位とする
0972デフォルトの名無しさん
垢版 |
2019/05/17(金) 23:47:24.37ID:xYITnAAv
>>971
あくまで俺の推測だが
一例として、自分自身の数が3のとき自然数から3を除去して
(1) 1, 2, 3, 4, 5, 6, ...

(2) 1, 2, NULL, 4, 5, 6, ...
NULLになった部分をなくすために4以降を左へシフトする
(3) 1, 2, 4, 5, 6, 7, ...
こんな感じで(1)の入力を(3)のような出力にする関数じゃないか?

ただお題の条件としてはもっとゆるくて、入力はオーバーフローしない範囲の自然数、出力は「自分自身の数」を含まない自然数になれば何でもよくて、
定数関数でもハッシュ関数でもいいはず。
ただし、ある入力に対して必ず決まった値にならなければならず、同じ入力で呼び出すたびに出力が違うのはダメ。
0973デフォルトの名無しさん
垢版 |
2019/05/18(土) 00:15:42.42ID:w6U4ewGf
>>972 何をアホな事を言ってるんだ? そんなの小学生に数を数えなさいと言ってるのと等しいぞ。

それのどこがプログラミングのお題なんだ?
バカじゃないのか?
0978デフォルトの名無しさん
垢版 |
2019/05/18(土) 10:52:55.70ID:0WkfcTHM
>>971
1. すべての自然数nに対してf(n)≠n
2. 自然数m,nがm≠nを満たすときf(m)≠f(n)
を満たすような関数f(n)を作れってこと

例えば
1. 入力が1のとき出力は1以外
2. 入力が1のときと2のときで出力が同じになってはダメ
0981デフォルトの名無しさん
垢版 |
2019/05/18(土) 12:08:52.78ID:R97vL30T
難しすぎて全くわからん…
ハローワールド始めて間もない男にも分かる問題を出してくれぬか
優しく教えて欲しい
0982デフォルトの名無しさん
垢版 |
2019/05/18(土) 12:10:33.89ID:HBaY+7WM
>>949
これがあれば1Mbyteのファイルが2byteになっちゃうのか?
0983デフォルトの名無しさん
垢版 |
2019/05/18(土) 12:48:31.15ID:PrlqGkYa
>>978 これのどこがプログラムの問題なのかさっぱりわからん。 小学生の練習問題か?

例えば自然数が 1から4までとした場合、f(n) の出力配列は
f(1) 2,3,4
f(2) 1,3,4
f(3) 1,2,4
f(4) 1,2,3
と言う事だろ? どうしてこんな問題を出したかさっぱり分からん、何か勘違いしてる?
0985デフォルトの名無しさん
垢版 |
2019/05/18(土) 14:46:59.19ID:0WkfcTHM
>>979
「隙間なく」を満たすには全射である必要があるけど、今回は定義域と終域が等しいから単射なら自動的に全射になる
全射の条件より単射の条件のほうが説明が楽だから許してくれ

>>983
出題者じゃないから意図は分からんが、自然数を自身以外の自然数に変換するのが題意だからその例は間違っている
f(n)が返すのは自然数であってベクトル(配列)ではない
0986 ◆QZaw55cn4c
垢版 |
2019/05/18(土) 14:50:54.64ID:To+6m73X
>>980
>単射である必要はない。全射でさえあればよい

???

>>978
2. 自然数m,nがm≠nを満たすときf(m)≠f(n)

これって単射の定義そのものなのでは?
だから単射である必要があるのでは?

f が単射でない場合 f:a->z, f:b->z だった場合に a != b にもかかわらず f(a)=f(b) で 2 を満たさない
0988デフォルトの名無しさん
垢版 |
2019/05/18(土) 15:16:22.17ID:0WkfcTHM
>>985
追記
単射なら全射になるのは有限集合の場合だったわ

お詫びにお題
入力n(2≤n≤2^31-1)を素因数分解してそれを表示せよ
入力例)
28
2002
216653
出力例)
2^2*7
2*7*11*13
216653
0989デフォルトの名無しさん
垢版 |
2019/05/18(土) 15:45:24.30ID:kdcwh9zo
>>888 Perl5

@a=([a, 0, 0],
   [b, 2, 0],
   [c, 4, 0],
   [d, 0, 2]);
sub {$t[$_[2]][$_[1]] = $_[0]}->(@$_) for @a;
@b = map{[map{$_ // ' '} @$_]} map{[@$_]} @t;
undef $";
$s = join'', map{"@$_\n"} @b;
print $s;


実行
~ $ perl 13_888.pl
a b c

d
0992デフォルトの名無しさん
垢版 |
2019/05/18(土) 16:32:58.07ID:BaKYgAyw
>>990
任せた。
0997デフォルトの名無しさん
垢版 |
2019/05/18(土) 21:05:17.15ID:sChpoVCN
>>988 Pharo/Squeak Smalltalk

| fn |

fn := [:n |
| m bag |
m := n.
bag := Bag new.
Integer primesUpTo: n sqrt + 1 do: [:prime |
[m isDivisibleBy: prime] whileTrue: [m := m / (bag add: prime)]
].
m > 1 ifTrue: [bag add: m].
String streamContents: [:ss |
bag valuesAndCounts associations sort do: [:assoc |
ss nextPutAll: assoc key asString.
assoc value > 1 ifTrue: [ss nextPutAll: '^', assoc value asString]
] separatedBy: [ss nextPut: $*]
]
].

fn value: 28. "=> '2^2*7' "
fn value: 2002. "=> '2*7*11*13' "
fn value: 216653. "=> '216653' "
0998デフォルトの名無しさん
垢版 |
2019/05/18(土) 21:18:36.25ID:PrlqGkYa
>>987 何か落とし穴があるとしたら、巨大数かなと思い、自然数を増やしてみると、python( iOSのpythonista , ideon )では配列数は 10**7 までだった。

大きな連続数の配列なんて作るバカはいないだろうし、ますます問題の意図がわからん。

一応書いてみたが、lambda 1行のみ ,(def でも何でも良いが)
f978 = lambda x,n:[i for i in range(1,n+1) if i != x]
xが自分の数字、n は自然数の数

https://ideone.com/iMUZ96

呼び出しは、f978(3,10**6) の様に
出力の配列数が大きくなると全ての数のPrint はアホらしいので、
10以上は配列数だけを出してる( これも n-1 だからアホらしいのだが )

out(1,4)
out(2,4)
out(4,4)

out(10**2,10**7)

stdout
個数 n= 4 自数 x= 1 自数以外の数= 3
[2, 3, 4]
個数 n= 4 自数 x= 2 自数以外の数= 3
[1, 3, 4]
個数 n= 4 自数 x= 4 自数以外の数= 3
[1, 2, 3]
個数 n= 10000000 自数 x= 100 自数以外の数= 9999999
0999デフォルトの名無しさん
垢版 |
2019/05/18(土) 21:29:48.34ID:PrlqGkYa
問題をひねって、不連続のランダムの整数としてもほとんど変わらないだろ。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 104日 10時間 9分 43秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況