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

■ このスレッドは過去ログ倉庫に格納されています
2020/07/14(火) 13:53:46.47ID:jW5p6F/e
プログラミングのお題スレです。

【出題と回答例】
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/

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

※前スレ
プログラミングのお題スレ Part17
https://mevius.5ch.net/test/read.cgi/tech/1584031367/
2020/08/16(日) 19:59:26.75ID:WQRWSQYc
>>326
任意の区間に対してどのように順序を定義して全順序集合を構成するのか考えてから言えよクソ雑魚が
2020/08/16(日) 20:01:44.11ID:5GlLVozn
そもそも 2 と [2, 2] が同じだと思ってる時点でやばいよ
ペアノ系で 0 = 1 って言ってるようなもんだぞ
2020/08/16(日) 20:08:52.13ID:GwA/W8AI
>>327
任意の[x, y]についてx<=yと仮定する。

[a, b] + [c, d] == [a+c, b+d].
[a, b] - [c, d] == [a-d, b-c].
[a, b] * [c, d] == [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] == [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].
2020/08/16(日) 20:11:24.43ID:WQRWSQYc
>>329
順序の定義しろっつってんだろクソが
「(1, [2, 3))」かつ「対の最初の要素は対の最後の要素以下とする」って言ってるってことは
[1, 1] <= [2, 3) なんだろ?
任意の区間の間で矛盾なく順序を定義しろや
2020/08/16(日) 20:24:24.91ID:GwA/W8AI
>>330
すみません。カッコの入れ子はややこしいので止めます、、、

というのは簡単だが、あえて考える。

b<=cならば、間違いなく[a, b] <= [c, d]は真。
d<aならば、[a, b] <= [c, d]は偽。
それ以外は[a, b] <= [c, d]の論理値は不定とし、実行時エラーを発生させる。
2020/08/16(日) 20:32:34.77ID:WQRWSQYc
>>331
完全律すら成り立たない順序ってなんだよ
「カッコの入れ子はややこしい」とかそういうレベルじゃねえんだよ

だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
お前群論なめてんのか
2020/08/16(日) 20:34:23.06ID:1lLvvYB6
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね
2020/08/16(日) 20:50:12.97ID:5EzRC1Sr
>>331
死ねカス
2020/08/16(日) 20:54:18.06ID:GwA/W8AI
>>332

> だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど

[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。
2020/08/16(日) 20:57:11.13ID:rY4w2Ca/
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ
2020/08/16(日) 21:13:43.55ID:WQRWSQYc
where 0 < a < b
0 = 0 * [0, 1]
= ([a, b] + [-a, -b]) * [0, 1]
= [a, b] * [0, 1] + [-a, -b] * [0, 1]
= [0, b] + [-b, 0]
= [-b, b]
!= [0, 0] = 0

矛盾
死ね
消えろ
2020/08/16(日) 21:16:32.00ID:GwA/W8AI
>>337
0 < a < bのときは、[-a, -b]は定義されない。
2020/08/16(日) 21:29:26.85ID:WQRWSQYc
>>338
順序の定義が矛盾してるんだから[-a, -b]は定義可能であっても良い
本当頭わりいな
2020/08/16(日) 21:34:29.96ID:1lLvvYB6
[0, 1]*[0, 1] = [0, 1]
<=> [0, 1]*([0, 1] - 1) = 0
<=> [0, 1]*[-1, 0] = 0
<=> [-1, 0] = 0
流石にひどいって
2020/08/16(日) 21:48:28.85ID:GwA/W8AI
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則
2020/08/16(日) 22:04:28.19ID:GwA/W8AI
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。

すみません、取り下げます。
2020/08/16(日) 22:08:12.76ID:WQRWSQYc
>>342
それ以前の問題だっつーのアホ
任意の数 a, b に対して容易に a = b が成立するクソ
2020/08/16(日) 22:16:18.77ID:UYHP6Cr3
問題を解くスキル<<<<<解ける問題を作るスキル
だったりするかも
345デフォルトの名無しさん
垢版 |
2020/08/16(日) 22:26:48.34ID:Nztll5gc
>>308
Java
https://paiza.io/projects/mS3LllUfo8J5zcCeI_m8qQ
2020/08/16(日) 22:46:06.78ID:GwA/W8AI
やり直し。

お題: 区間と演算子によって構成される計算式が入力として与えられる。下記に従って浮動小数点数の区間に対する二項演算(+、-、*、/)を実現し、計算後の区間を出力しなさい。入力される区間は閉区間のみとする。

閉区間は角カッコで囲まれた浮動小数点数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。すなわち[a, b]という式があればa<=bでなければならない。

式が正当でないか、ゼロ除算があれば、実行時エラーを発生させること。

演算の定義:
[a, b] + [c, d] := [a+c, b+d].
[a, b] - [c, d] := [a-d, b-c].
[a, b] * [c, d] := [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] := [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].

例)
[1, 3] + [2, 2] → [3, 5].
[2, 8] - [1, 2] → [0, 7].
[-3, 2] * [1, 3] → [-9, 6].
2020/08/16(日) 22:58:27.46ID:bYLilpPQ
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない

かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが
2020/08/16(日) 23:34:04.85ID:kJzMyvlv
>>308 C
https://ideone.com/wbwxg3
349253
垢版 |
2020/08/16(日) 23:50:47.82ID:G5r8RAij
>>308 Perl5

use Data::Dump 'dump';
sub fn {
 my ($le, $pv, @ri) = @_;
 defined $pv ? map {[$pv, @$_]} fn([], @$le, @ri) : ([])
  ,
 @ri ? fn([@$le, $pv], @ri) : ()
}
$N = 3;
@a = 1..$N;
print dump(fn [], @a);


実行結果
$ perl 18_308_N_permutation.pl
([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1])
350デフォルトの名無しさん
垢版 |
2020/08/17(月) 01:49:55.07ID:Nup7rIuH
前の書き方だとやる気が出ないみたいなので再掲

お題 任意文字列を含む有効なビットコインアドレスを生成するにはどうすればいいか

ビットコインアドレスの形式は
[プレフィックス 1バイト] [本体データ 160ビット] [チェックサム 4バイト]
をbase58(58進数)で表現したもの

プレフィックスは0x00とする
チェックサムはプレフィックス+本体データをsha256に二回かけた後の先頭4バイト

詳細
https://www.tottemoyasashiibitcoin.net/entry/2018/02/04/165300

例:
1BitCoinDescriptionAddressadTvGDH
1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC

これはどっちも有効なビットコインアドレスになってる
https://chainflyer.bitflyer.com/Address/1BitCoinDescriptionAddressadTvGDH
https://chainflyer.bitflyer.jp/Address/1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC
2020/08/17(月) 06:10:10.64ID:sRZ0bbBO
>>346
消えろカス
2020/08/17(月) 08:34:59.13ID:4e6PsksO
>>351
お前うざいよ
2020/08/17(月) 09:10:13.06ID:CGaaR/Ic
どうすればいいか?ってのがよくわからない
2020/08/17(月) 09:11:51.56ID:CGaaR/Ic
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
355デフォルトの名無しさん
垢版 |
2020/08/17(月) 11:17:26.81ID:2KNIyB/f
ブルートフォースアタックしか思い浮かばない。
356デフォルトの名無しさん
垢版 |
2020/08/17(月) 18:12:59.56ID:Nup7rIuH
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
357デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:37:06.53ID:4e6PsksO
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
2020/08/17(月) 19:45:01.16ID:Nup7rIuH0
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
2020/08/17(月) 22:43:06.44ID:sRZ0bbBO
>>352
お前がうぜえよ死ね
360デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:47:24.50ID:4e6PsksO
>>359
お前が死ね
2020/08/17(月) 22:50:53.21ID:3fwftKf8
よし俺がしぬよ
2020/08/17(月) 22:53:16.60ID:UMcd904E
夏だなあ
363デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:56:52.65ID:4e6PsksO
>>361
じゃあ俺が死ぬよ
2020/08/17(月) 22:57:17.04ID:3fwftKf8
お題: 『死』を表現せよ
2020/08/17(月) 22:57:32.35ID:3fwftKf8
>>363
どうぞうどうぞ
2020/08/17(月) 22:58:07.77ID:sRZ0bbBO
>>363
じゃあ死ねよ
367デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:20.89ID:4e6PsksO
>>366
全然おもんないやんけ
もう一回チャンスをやろう
368デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:35.92ID:4e6PsksO
じゃあ俺が死ぬよ
369デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:59.92ID:4e6PsksO
くるよくるよ
370デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:06:13.27ID:4e6PsksO
ドキドキ
371デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:35.54ID:4e6PsksO
逃げたか
372デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:58.23ID:4e6PsksO
笑いから逃げるな
2020/08/18(火) 00:15:03.77ID:/+dAg+CW
お題: 二人の煽り耐性から「死ね」と言い合うプログラム

煽り耐性 0.1〜1
死ねと言い返す確率 (1-煽り耐性) * 100%
最初に死ねと言うのはA
入力 {Aの煽り耐性} {Bの煽り耐性}

> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
2020/08/18(火) 01:25:39.14ID:IZwRntbA
if (>>373{A}%3 ==0.1&&0.8<<373{B}) print "オモロー" & "アキラ" *100% ;
2020/08/18(火) 01:35:33.42ID:Vl5MoMXT0
>>350 js

const input = "programmingodaisure"

let tmp_str = input;
let tmp_hex = new Uint8Array();

do {
tmp_str += "X";
tmp_hex = [0x00, ...Base58.decode(tmp_str)];
} while (tmp_hex.length < 25)

const prefix_and_data = tmp_hex.slice(0, -4);

const doubleSha256 = sha256.digest(sha256.digest(prefix_and_data))
const checkSum = doubleSha256.slice(0, 4);

const result_hex = new Uint8Array([...prefix_and_data, ...checkSum]);
const result_str = Base58.encode(result_hex);

console.log(result_str);

→ "1programmingodaisureXXXXXXXZHx9sj"

https://chainflyer.bitflyer.jp/Address/1programmingodaisureXXXXXXXZHx9sj

BASE58とSHA256のライブラリ
https://cdn.jsdelivr.net/npm/base-58@0.0.1/Base58.min.js
https://cdn.jsdelivr.net/npm/js-sha256@0.9.0/src/sha256.min.js
376デフォルトの名無しさん
垢版 |
2020/08/19(水) 16:18:46.79ID:ltFkDVN7
>>364

#!/bin/sh
rm $0
2020/08/19(水) 18:40:23.70ID:d4bqPFA7
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
378デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:45:07.34ID:OrygHj4v
略して示唆トン。
2020/08/20(木) 11:35:09.25ID:nWR09WFB
>>249
Elixir

# 蓄積変数 set は、すべての文字列の集合。abcde, bcdea などの5つ。
# word は、1文字ずらした文字列

src_word = 'abcde'

%{ set: set } = Enum.reduce_while( 1..length( src_word ), %{ set: MapSet.new, word: src_word }, fn _count, acc ->

[ head | tail ] = acc.word
next_word = tail ++ [ head ] # 1文字ずらす
acc = %{ acc | word: next_word }

if MapSet.member?( acc.set, next_word ) do
{ :halt, acc } # 既に存在すれば、break
else
acc = %{ acc | set: MapSet.put( acc.set, next_word ) }
{ :cont, acc } # ループを続ける
end
end )

# IO.inspect set

# 文字列が、集合の中に含まれているか?
[ 'deabc', 'cdeba' ]
|> Enum.map( fn str -> MapSet.member?( set, str ) end )
|> IO.inspect # [true, false]
2020/08/23(日) 18:52:15.52ID:kIX3/Jw/
お題:
縦H、横Wの迷路が与えられます。
スタートからゴールに至る道順の個数を求めてください。

迷路は通路から通路へ、上下左右の4方向へのみ移動できます。
ただし、一度通った通路を引き返すような道順は無効です。
また、スタートとゴールは通路です。

1行目に迷路の高さと幅を表す整数H、Wが与えられます。
2行目からH行にわたって、迷路を表す長さWの文字列が与えられます。
文字列は 'S' 'G' '.' '#' の文字のみからなり、それぞれスタート、ゴール、通路、壁です。

例1:
入力:
5 5
S....
##.#.
...#.
##.#.
....G
出力:
2
例2:
入力:
5 5
S....
##.#.
...#.
...#.
....G
出力:
12
381デフォルトの名無しさん
垢版 |
2020/08/24(月) 04:30:51.55ID:qrCNAVcy
>>380 C++
https://ideone.com/Omaaxj
2020/08/24(月) 11:49:18.16ID:2DIU31aQ
>>380 C++
https://wandbox.org/permlink/H36ha1xPEFeE4KXQ
2020/08/29(土) 20:44:46.53ID:GYyhmMZY
お題: ロシアンルーレット。

リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
384デフォルトの名無しさん
垢版 |
2020/08/29(土) 21:04:26.78ID:KxRf/0sH
>>383
仕様がわからない
2020/08/29(土) 21:07:51.24ID:GYyhmMZY
ロシアンルーレット
https://ja.m.wikipedia.org/wiki/%E3%83%AD%E3%82%B7%E3%82%A2%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AC%E3%83%83%E3%83%88

回転式拳銃(リボルバー)
https://ja.m.wikipedia.org/wiki/%E5%9B%9E%E8%BB%A2%E5%BC%8F%E6%8B%B3%E9%8A%83
2020/08/29(土) 21:24:48.99ID:GYyhmMZY
>>383-384 こんな感じか?

最初にリボルバーを回します。
(弾丸の位置を設定)
こめかみor天井?(K/t) K
1回目: 不発
もう一度リボルバーを回しますか? (Y/n) Y
(弾丸を回転)
こめかみor天井?(K/t) K
2回目: 不発
もう一度リボルバーを回しますか? (Y/n) n
こめかみor天井?(K/t) K
3回目: バーン!
あなたの負けです。
2020/08/29(土) 22:00:32.12ID:GYyhmMZY
えっ、拳銃見たことないの?
2020/08/29(土) 22:14:20.91ID:bYj4gZFd
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
2020/08/29(土) 22:51:06.10ID:yG/yQHuO
jsインタラクティブ入力に弱い
390デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:12:55.70ID:yG/yQHuO
>>383

https://repl.it/@vip0/bullet#index.js

// 0-5
const rand6 = () => Math.floor(Math.random() * 6);

const gun = (() => {
let pos = 0;
const shuffle = () => (pos = rand6());
shuffle();
const shut = () => pos-- === -1
return { shuffle, pos, shut }
})()

// mock 1/2 rand
const readDoShuffleAsync = () => {
const y = Math.random() >= 0.5
console.log(y ? "y" : "n")
return y
}

let i = 1;
while (true) {
console.log("リボルバーを回しますか?");
if (readDoShuffleAsync()) gun.shuffle()
const bomb = gun.shut();
console.log(`${i}回目: ${bomb ? "バーン!" : "不発"}`);
i++;
if (bomb) break
}
2020/08/29(土) 23:34:19.24ID:2f/XylsB
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される

var a = 1
a // 1 と表示される
2020/08/29(土) 23:41:03.13ID:yG/yQHuO
swift playgroundとかjestのinlineSnapshotみたいな感じか
使うときがあるか微妙
393デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:02:17.18ID:xjthqQ7x
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください


入力: 1
出力: [1]

入力: 3
出力: [1, 2, 2, 3, 3, 3]
394デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:33:41.99ID:xjthqQ7x
お題
配列をソートする関数を受け取って安定ソートか否かを判定する
プログラムを作成してください
2020/08/30(日) 06:49:46.06ID:a0VCHWdX
お題: splitを実装せよ(ただし組み込みやライブラリのsplitは使ってはならない)

例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
396デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:02:58.80ID:Ui9A3dkW
>>393 J
f =: #~ @: >: @ i.
2020/08/30(日) 09:40:37.84ID:rD3R6mry
>>393 Ruby

(0..3).each{|n| p (1..n).reduce([]){|s, a| s + [a] * a}}

# =>
[]
[1]
[1, 2, 2]
[1, 2, 2, 3, 3, 3]


>>395 Ruby

p 'abc:def:ghi'.scan(/[^:]+/) # => ["abc", "def", "ghi"]
2020/08/30(日) 09:41:22.98ID:ka/TVb/i
>>393 octave
https://ideone.com/wQ0EMk
f = @(n) repelem(1:n, 1:n);
f(3)
2020/08/30(日) 09:43:25.32ID:pWMgwPJi
>>395
JS

let minSplit = (string, separator) => {
let array = [];
let splitter = (st, sp) => {
let pos = st.indexOf(sp);
if (pos == -1) {return [st,void(0)]} else {return [st.slice(0,pos),st.slice(pos+1)]}
}
while (true) {
if (string.length == 0) {array.push(string); break}
let temp = splitter(string, separator)
if (temp[1] == void(0)) {array.push(temp[0]); break}
else {array.push(temp[0]); string = temp[1]}
}
return array
}

let minSplit2 = (string, separator) => {
let reg = new RegExp(`[^(${separator})]+${separator}?`, "g");
return `${string} `.match(reg).map(x=>x.slice(0,-1))
}
2020/08/30(日) 17:51:57.01ID:9TpSDH8X
>>395 octave
f = @(s, d) arrayfun(@(b, e) {s(b:e)}, [1 find(s == d) + 1], [find(s == d) - 1 numel(s)]);
f('abc:def:ghi', ':')
401400
垢版 |
2020/08/30(日) 18:29:58.33ID:9TpSDH8X
一応url
https://ideone.com/Ni9DPI
402デフォルトの名無しさん
垢版 |
2020/08/30(日) 18:55:27.84ID:uG01djUi
>>395 js
const replaceAll = (s, from, to) => s.replace(new RegExp(from, "g"), to)
const split = (str, sep) => JSON.parse(`["${replaceAll(str, sep, '","')}"]`)

split('abc:def:ghi', ':')
// [ 'abc', 'def', 'ghi' ]
ずるいしダブルクォート対応できてないけど思いつき
2020/08/30(日) 19:52:13.41ID:KMqOjvFr
>>395 Ruby
# セパレーターの仕様が文字か文字列か分からなかったので文字列にした
def split( str, sep )
res = []
(str + sep).scan( /(.*?)#{Regexp.escape(sep)}/ ){ res << $1 }
res
end

split('abc:def:ghi', ':') #=> ["abc", "def", "ghi"]
404デフォルトの名無しさん
垢版 |
2020/08/30(日) 19:55:11.73ID:OKCM85cL
>> 393 C++
https://ideone.com/ztBnmn

>> 394 C++
https://ideone.com/8YhzWh
合ってるか分からない
(とりあえずバブルソートが安定だからそれと比較した)

>> 395 C++
https://ideone.com/lmYLkx
2020/08/30(日) 23:05:46.03ID:HaB2mhSL
>>393 C++
https://wandbox.org/permlink/LxzMc7UHa1lbhcX1

コンパイル時にできる
406デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:23:11.11ID:OKCM85cL
operator[]がconstexprなのはC++17以降らしいね
407デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:36:58.36ID:Sr2UUXBk
宇宙創生から現在まで【宇宙の歴史@(過去編)】
https://www.youtube.com/watch?v=1qUrdcRkRLc
期待値が無限大な賭け(サンクトペテルブルクのパラドックス)
https://www.youtube.com/watch?v=B__gzT-rQjw
もしも生徒が全員予備校講師だったら
https://www.youtube.com/watch?v=Lk
eが超越数であることの証明
https://www.youtube.com/watch?v=_DJfeP0cmI8
【受験生へ】勉強のモチベーションをあげる3つの方法
https://www.youtube.com/watch?v=4MAPBivBEhM
線を描くだけ!万能視覚的かけ算【インド式計算】
https://www.youtube.com/watch?v=Sj6Y43D76GA
全受験生が理解するべき!偏差値とは何か
https://www.youtube.com/watch?v=Xt7VN0xCbt8
楽しいことを増やそう!科学の眼鏡をかけた1日とは【ヨビノリたくみ特別公演】
https://www.youtube.com/watch?v=u5al7kwy64k
数学の魅力とは?中田敦彦と人気教育系YouTuberヨビノリたくみ先生が初コラボ
https://www.youtube.com/watch?v=qxiAyyotAM0
408デフォルトの名無しさん
垢版 |
2020/08/31(月) 08:12:50.04ID:o+KAewBM
>>393 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
2020/08/31(月) 09:50:22.54ID:3l02ZOhc
>>396
何やってんのか分かんねぇ…
2020/08/31(月) 12:53:04.32ID:DeTlQxvW
f#(@:m:@ )顔文字にしか見えん
411デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:15:43.55ID:0jcGZySh
\(._. \)
2020/08/31(月) 13:37:09.03ID:tSOV4fJk
お題: 覆面算パズルをランダムに自動生成せよ。

単語は大文字のアルファベットのみとする。
各単語は自然数を表している。
単語の各文字は数字を表している。
各単語の先頭はゼロではない。
同じ文字は同じ数字が入る。文字が違えば、数字も違う。
各単語は、3文字以上6文字以下とする。
答えは一つでなければいけない。
今回は、簡単な足し算のみとする。

例)
SEND+MORE=MONEY.
BASE+BALL=GAMES.

単語リスト:https://gist.github.com/deekayen/4148741
2020/08/31(月) 13:41:36.35ID:tSOV4fJk
お題:覆面算パズルを解くプログラム。

例)
SEND+MORE=MONEY
→9567+1085=10652.

BASE+BALL=GAMES
→7483+7455=14938.
2020/08/31(月) 14:49:18.65ID:7ZWcUsrI
>>393
Elixir

# 再帰で、蓄積リスト・ary に、連結していく

defmodule MyList do
def add( num ), do: _add( num, [ ] )

defp _add( 0, ary ) do
ary
end

defp _add( num, ary ) when num > 0 do
_add( num - 1, List.duplicate( num, num ) ++ ary )
end
end

ary = MyList.add 3
IO.inspect ary #=> [1, 2, 2, 3, 3, 3]
2020/08/31(月) 16:10:16.99ID:lWn/zYPT
>>413, >>412の順に解いてね。

ヒント要る?
2020/08/31(月) 16:12:08.02ID:lWn/zYPT
ヒント: 各文字を変数とした連立方程式。
2020/08/31(月) 16:24:48.19ID:lWn/zYPT
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
2020/08/31(月) 18:26:24.52ID:qQr3mFGF
間違えてなければO(10!)のはずだから充分多いのでは
2020/08/31(月) 18:26:56.47ID:qQr3mFGF
ごめん10!はめちゃくちゃ小さかった
2020/08/31(月) 18:43:24.02ID:hr5jjNmH
この手の問題は総当りしたほうが速いことすらある
2020/08/31(月) 19:18:49.49ID:J48xi6fS
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
422デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:23:55.64ID:fdwPQ6pV
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
https://sunasunax.hatenablog.com
423デフォルトの名無しさん
垢版 |
2020/08/31(月) 21:02:28.99ID:Sr2UUXBk
デキる人ほどフリーランス化する?★働き方改革
https://www.youtube.com/watch?v=ALflcwYOJtQ
年収890万円以下は社会のお荷物★騙される労働者
https://www.youtube.com/watch?v=CAp-ZrJpF54
騙されたくなかったら勉強しろ★他人のルールは損をする
https://www.youtube.com/watch?v=s176O6qKuPw
底辺の99%は一生底辺★10年後が見えない同僚たち
https://www.youtube.com/watch?v=4Mfiwn2sPD8
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
https://www.youtube.com/watch?v=Fi7bILN4wes
サラリーマン思考では儲からない理由
https://www.youtube.com/watch?v=iW6oAo0q0ZI
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
https://www.youtube.com/watch?v=md0WPAsfarY
「で、年収は?」と聞くバカとは合わない社長業
https://www.youtube.com/watch?v=nEELEUhBLDk
424253
垢版 |
2020/08/31(月) 21:47:00.41ID:Mm8nXRhv
>>393 Perl5

use feature qw{signatures};
sub f($n) {
 $n ? (f($n-1), ($n) x $n) : ()
}
@a = f(3);
print "@a\n";


実行結果
~ $ perl 18_393_inc_ary.pl
The signatures feature is experimental at 18_393_inc_ary.pl line 2.
1 2 2 3 3 3
425253
垢版 |
2020/08/31(月) 21:54:06.64ID:pmRcaHIk
>>393 Perl5、単にmapで値個数要素のリストに展開

$n = 3;
@a = map{($_) x $_} 1..$n;
print "@a\n";


j実行結果
~ $ perl 18_393_inc_ary_map.pl
1 2 2 3 3 3
2020/08/31(月) 23:33:38.47ID:0jcGZySh
>>393
Kotlin
https://paiza.io/projects/A_eQfaut9aEoIRjfwbkN8Q
2020/09/01(火) 00:01:02.40ID:1mY8ta+4
>>393
C
https://paiza.io/projects/wwsivStn5Eq4vN7-XA5ShQ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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