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

レス数が1000を超えています。これ以上書き込みはできません。
2019/07/28(日) 19:39:57.54ID:832c/ukY
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part14
http://mevius.5ch.net/test/read.cgi/tech/1558168409/
2019/11/04(月) 10:51:39.60ID:FzGFhotx
>>917 perl
なんの捻りもない

use List::Util qw(sum);
print join",",(grep{sum(split//)==12}(1..100));
2019/11/04(月) 12:37:41.26ID:7wrIz40y
>>918
数列和?
いきなりオレオレ用語で語られても困るw
2019/11/04(月) 14:30:03.94ID:obVJwnOe
>>917
https://ideone.com/pWqVPQ
C++。割といつも通りという感じ。
2019/11/04(月) 19:33:38.63ID:xKwnPcPn
タイポ
数字和 >744 などにでてくるやつ
923デフォルトの名無しさん
垢版 |
2019/11/04(月) 19:35:11.53ID:6jo2x8my
>>917
PowerShellで単純に書けば

function f($a, $b, $s) {$a..$b |? {(iex ([char[]]"$_" -join "+")) -eq $s}}
f 1 100 12

だが、桁が増えると遅すぎるので、少し工夫すると、

$M = [Math]

function g($s, $n)
{
  if ($n -eq 1) {return $s}
  $d = $M::pow(10, $n - 1)
  for ($i = $M::max(0, $s - 9 * ($n - 1)); $i -le $M::min(9, $s); $i++) {
    g ($s - $i) ($n - 1) |% {$d * $i + $_}
  }
}

function f($a, $b, $s)
{
g $s ($M::ceiling($M::log10($b))) |? {$_ -ge $a -and $_ -le $b}
}

f 1 10000000 12
924デフォルトの名無しさん
垢版 |
2019/11/04(月) 19:36:29.94ID:6jo2x8my
7桁まではまあまあだが8桁以上だと遅いので、Cで書き換えると9桁でも瞬時に終わった。
(出力をファイルにリダイレクトした場合)。Visual Studioでは動作するが、
ideone.comでは変なコンパイラエラーが発生する。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void g(int a, int b, int s, int n, int t, int x)
{
  int d, i;

  if (n == 0) {
    if (t == s && x >= a && x <= b) printf("%d\n", x);
  } else {
    for (d = i = 1; i < n; i++) d *= 10;
    for (i = max(0, (s - t) - 9 * (n - 1)); i <= min(9, s - t); i++) {
      g(a, b, s, n - 1, t + i, d * i + x);
    }
  }
}

void f(int a, int b, int s)
{
  g(a, b, s, ceil(log10(b)), 0, 0);
}

int main(void)
{
  f(1, 1000000000, 12);
  return 0;
}
925デフォルトの名無しさん
垢版 |
2019/11/05(火) 01:53:14.53ID:gnRgB6kn
>>909
Kotlin
https://paiza.io/projects/P-_x81NFh0Pq-Fu6FgHHQg

肝心な部分は短いよな・・・
926デフォルトの名無しさん
垢版 |
2019/11/05(火) 20:14:32.31ID:e+hxAdfR
お題:グラフの最長距離探索プログラムを作りなさい。分からなければダイクストラの最短距離探索プログラムを改造して作りなさい。
2019/11/05(火) 20:40:24.45ID:3L71zPwH
>>926
全探索になるから辛い。
X以上になったら打ち切りとかできないし、枝がX個以上なら切るとかもできない。
2019/11/05(火) 21:02:19.16ID:3L71zPwH
枝じゃなかった。支点だった。
2019/11/05(火) 22:48:36.11ID:4YhU7TUN
>>917
Common Lisp
(defun f (m n s)
 (print (loop for i from m to n
        if (= s (loop for (j k) = (multiple-value-list (floor i 10)) then (multiple-value-list (floor j 10))
               sum k
               until (zerop j)))
        collect i)))

(f 1 100 12)
930デフォルトの名無しさん
垢版 |
2019/11/07(木) 19:42:24.48ID:wJeAdMrJ
>>917
Kotlin
https://paiza.io/projects/sCUo-pxCCvYRSj_y9LA9Qg

ひねりなし。
931デフォルトの名無しさん
垢版 |
2019/11/07(木) 22:47:28.91ID:Iq2Mem9/
>>924を読み返してみたら、1変数減らしてすっきりさせられることに気付いた。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void g(int a, int b, int r, int n, int x)
{
  int d, i;

  if (n == 0) {
    if (r == 0 && x >= a && x <= b) printf("%d\n", x);
  } else {
    d = pow(10, n - 1);
    for (i = max(0, r - 9 * (n - 1)); i <= min(9, r); i++) {
      g(a, b, r - i, n - 1, d * i + x);
    }
  }
}

void f(int a, int b, int s)
{
  g(a, b, s, ceil(log10(b)), 0);
}

int main(void)
{
  f(1, 1000000000, 12);
  return 0;
}
932デフォルトの名無しさん
垢版 |
2019/11/10(日) 21:37:46.78ID:OK7x/7YO
文字コードがシフトJISでもUnicodeでも3つ以上の連番となる文字列(最長一致)を、
コード範囲とともにすべて表示せよ。例えば、それらのうちの1つに関する表示は、

824F..8258
FF10..FF19
01234566789

となる。なお、シフトJISには機種依存文字を含んで構わない。
2019/11/10(日) 21:57:20.43ID:uvNl/eaa
>>932
何を以って同じ文字とみなすのか定義しろ
934デフォルトの名無しさん
垢版 |
2019/11/10(日) 22:09:53.56ID:OK7x/7YO
>>933
それも機種依存で構わない。規格上の厳密さにこだわる必要はない。
2019/11/10(日) 23:26:27.72ID:EkgZPBq1
>>932 Java
https://ideone.com/GLDM9a

これでいいのけ?
2019/11/11(月) 00:44:57.23ID:VmjibYtT
バイナリファイルの高速コンペア
2019/11/11(月) 18:33:43.09ID:KK646YuM
>>936
メモリに二つとも呼んでfor回す。意外は難しい気がする。
2019/11/11(月) 19:03:14.97ID:KK646YuM
>>917
https://ideone.com/eVgFHk
C++。一回解いたけど再考して配列一個潰した。
5秒で5000万位解けそう??
2019/11/11(月) 22:23:08.18ID:ySONYK72
>>936
単に一致不一致だけわかればいいのか?
とか
コンペアするファイルは2つだけなのか?
とか

単に2つのファイルの一致不一致を見るだけなら基本>>937の言う通りだと思う
940デフォルトの名無しさん
垢版 |
2019/11/11(月) 22:37:18.90ID:hxYpUSvR
>>935
正解。Windowsには機種依存文字

8754..875D
2160..2169
TUVWXYZ[\]

などもあるが、機種依存文字を含んでも構わないという出題だったので、
含まなくてもOK。
941デフォルトの名無しさん
垢版 |
2019/11/12(火) 05:31:26.51ID:oeG9wEYf
お題

スレ立てるまでもない質問はここで 152匹目
https://mevius.5ch.net/test/read.cgi/tech/1573214616/
の3番の問題を勝手に解く
2019/11/12(火) 12:11:13.05ID:BJKXTHw+
>>940 Java
https://ideone.com/611DD5

>>935からCharasetをShift-JISからx-SJIS_0213に変えただけ (Windowsだとx-MS932_0213のほう?)
Shift-JISだと古いやつなんやな
943デフォルトの名無しさん
垢版 |
2019/11/12(火) 21:37:48.42ID:+gLjUv3x
>>941
処理データ量が少なく計算効率を考慮しなくて良いなら、Rで簡潔に書ける。
https://ideone.com/cRvth9

効率が求められるなら、Cで二分探索の変形版だな。
https://ideone.com/FXQQjq
944デフォルトの名無しさん
垢版 |
2019/11/12(火) 22:38:04.89ID:SyoIDDRx
windowsのロングパス対応の重複ファイル検索するコードない?
2019/11/13(水) 04:07:44.81ID:eXHRJefh
>>941 Pharo/Squeak Smalltalk

| fn |

fn := [:m |
| table |
table := #(98 100 198 200 250 298).
table detectMin: [:x | (x - m) abs]
].

fn value: 50. "=> 98 "
fn value: 195. "=> 198 "
2019/11/13(水) 14:07:45.70ID:9sxFrKBI
>>941
https://ideone.com/wJ8lPk
C++。多分動いてるけど、境界線系のエラーハンドリングは適当。
2019/11/13(水) 15:30:27.12ID:EqcpRCSG
どう考えても線形探索の方が簡単で速い
1回だけなら
948デフォルトの名無しさん
垢版 |
2019/11/13(水) 18:24:57.67ID:utJBi2wY
>>941 Lua
function f(a, x)
local res = a[1]
for i = 2, #a do
if math.abs(res - x) > math.abs(a[i] - x) then
res = a[i]
end
end
return res
end
2019/11/13(水) 20:03:11.45ID:ESFhNQze
>>944
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
2019/11/13(水) 20:28:42.98ID:6mLuLK4e
>>941 octave
https://ideone.com/kbVTGp
951デフォルトの名無しさん
垢版 |
2019/11/13(水) 20:40:25.65ID:H1DP2m/6
>>944
>>1002
952デフォルトの名無しさん
垢版 |
2019/11/13(水) 20:48:13.08ID:CMaH4qd1
>>941
C++ならSTLのequal_rangeを使えば、二分探索のコードを自前で書かずに済む。
https://ideone.com/KJ134u

この例の条件でしか判定しないなら、5つの定数値との比較にするのが一番簡単で
速そうだな。
https://ideone.com/ef553N
2019/11/13(水) 21:39:03.09ID:Fqkv69gY
なんで順番に5回も比較してんの?
2019/11/13(水) 21:47:59.14ID:kE3A4AyF
10回比較するわけにはいかないからでしょ
2019/11/13(水) 21:53:11.46ID:RzCRvdkP
まずは199との比較では?
あとは範囲を絞ったテーブルとか

int全てをカバーするテーブルも
intが32bitな64bit環境なら一応は可能
2019/11/13(水) 22:09:59.79ID:SHPlbPC2
お題: 自動塗り絵。

白地に黒い線で図形が描かれているモノクロ画像が与えられる。
白い領域をそれぞれ適当な単色で塗りつぶせ。可能ならOpenCVを使ってもいい。
2019/11/13(水) 22:51:59.05ID:RzCRvdkP
ペイントブラシ + スクリプト
で出来そう
958デフォルトの名無しさん
垢版 |
2019/11/13(水) 23:03:48.70ID:CMaH4qd1
>>955
「一番速い」ではなく「一番簡単で速い」だからね。可読性とかバグの
混入しにくさとかも考えると、順番に5回比較するのが一番良いだろ。
特に https://mevius.2ch.net/test/read.cgi/tech/1573214616/3 への
回答としては、最も適している。
2019/11/13(水) 23:40:49.81ID:RzCRvdkP
一番速くもないし一番簡単でもない

一番「簡単で速い」?
簡単と速いは相反するので一番なんて無い
2019/11/13(水) 23:42:10.65ID:RzCRvdkP
凡人が安易に「一番」とか言わない方が良いよ
961デフォルトの名無しさん
垢版 |
2019/11/14(木) 01:06:49.29ID:4AhPUV/Y
俺が一番
962デフォルトの名無しさん
垢版 |
2019/11/14(木) 06:15:22.98ID:BnXMw1SX
>>941 Io
f:=method(a,x,
a map(v,list((v-x)abs,v))min last
)
d:=list(98,100,198,200,298)
f(d,120) println
実行結果
100
2019/11/14(木) 09:31:40.70ID:baSi3t2K
一番簡単で速いってなんだよ
一番簡単かつ一番速いなら一番速いって言えばいいだけだろ
ってC++の人かよ
2019/11/14(木) 12:32:18.21ID:WVE0j82D
一番に過剰反応してるみなさんwww
2019/11/14(木) 13:14:51.59ID:/NpdgKVA
一番とか最も適しているとか
頭が悪いやつが良く言うセリフ
2019/11/14(木) 13:27:39.39ID:isT1FYJS
それな
あと「頭悪いやつがよく言う」ってのも頭悪いやつよく言うセリフだわ
2019/11/14(木) 15:14:06.76ID:1CVvHcAw
>>941 python

https://ideone.com/g2dWOw
2019/11/14(木) 16:23:41.28ID:bZ2yXVXr
>>963
俺、よくmakehoge書いてる人だけど、その二分探査書いた人は別人。
偶に、俺じゃない人がC++書いてくことがある。
まぁ、俺も貢献度が高いかというと解らんけど。
969デフォルトの名無しさん
垢版 |
2019/11/14(木) 22:16:17.11ID:ya/1xYDt
>>963
「一番簡単で速い」は「一番簡単」かつ「速い」という意味だよ。
一番簡単なコードを書いてみて充分に速ければ、さらに手を加える必要はないってこと。
昨今はCPUが速いので、簡単なコードをささっと書いて終わりにできる場合が多いし、
Cを使うまでもなくRやPythonなどでも実用に耐える。処理条件が変わって速度に
不満が生じたときだけ、書き直せば良い。
2019/11/14(木) 22:21:25.20ID:KjmBL3+S
配列をキャッシュに乗せるだけで早くなる
配列にするだけで早くなる
971デフォルトの名無しさん
垢版 |
2019/11/14(木) 23:43:50.36ID:ya/1xYDt
>>970
>>941の最も近い値を求める処理(Aと呼ぶ)だけを複数回連続して行う場合はそうだが、
間に別の処理(Bと呼ぶ)がたくさん入る場合はキャッシュから外れるかも知れないし、
AよりもBの方で相対的にだいぶ長い時間がかかっているならば、Aを高速化する
意味はない。

Aを簡単に書き終え、Bを書き進めてプログラム全体を完成させ、各部分の実行時間を
デバッガで分析し、Aを高速化する必要があるか判定するのが効率的な開発方法。
必要なときだけAを書き直してみて、元のAと実行時間を比較し、顕著に速い場合だけ
採用する。あまり変わらない場合は元の簡単な方に戻す。
2019/11/15(金) 06:08:37.20ID:/dDy1LQy
>>969
なぜ
一番簡単
だと思ったのか
2019/11/15(金) 06:11:01.44ID:/dDy1LQy
中途半端に最適化するくらいなら
意味通りをそのまま記述した方が良いよ

トリッキーなマクロとか使わないで普通にループでいいし
974デフォルトの名無しさん
垢版 |
2019/11/15(金) 07:24:03.38ID:YlbiRAmO
>>941 J

f =: 4 : 0
{. x /: | x - y
)

a =: 98 100 198 200 250 298
a f 199
198
2019/11/15(金) 08:39:52.88ID:zGnI3whh
>>491 python
整数の範囲を 1000000000 にして、リストのサイズをその1/10の 100000000 にしてやった物

https://ideone.com/JL4ZtG
2019/11/15(金) 08:46:57.30ID:pd2oXw5y
お題はどれ?
2019/11/15(金) 10:34:11.71ID:zGnI3whh
>>975 は、>>941 のお題の間違い。
2019/11/15(金) 10:34:39.11ID:kGxI2dsU
>>972
もっと簡単なのがあると言うなら提示すりゃいいだけ
2019/11/15(金) 10:37:36.49ID:Dg2kwGpJ
そんなら一番簡単なんて言ったもん勝ちやんアホクサ
2019/11/15(金) 11:19:40.93ID:y6ix6SXf
>>979
どういうこと?
2019/11/15(金) 13:20:35.16ID:pd2oXw5y
発言者に証明責任がある
当たり前
2019/11/15(金) 13:22:00.36ID:pd2oXw5y
簡単じゃない部分は書いたけどね
2019/11/15(金) 13:25:38.61ID:pd2oXw5y
本当に一番簡単だと思ってるなら
非常に頭が弱い
というしかない
2019/11/15(金) 16:04:20.43ID:y6ix6SXf
証明責任が
985デフォルトの名無しさん
垢版 |
2019/11/15(金) 18:45:17.65ID:YlbiRAmO
>>941 Ruby

def f(a,x)
a.min_by{|v|(v-x).abs}
end
2019/11/15(金) 22:18:10.52ID:1XAUh39O
>>982
ひょっとして>>973か?
頓珍漢な指摘でドヤられても困るw
2019/11/16(土) 07:59:12.18ID:PKd8UO5d
お前ちょっとしつこいよ
二人ともどっか行ってくれ
2019/11/16(土) 09:38:56.12ID:R3eXoa4h
お題: 標準入力から読み取った文字列に対して変換候補の単語を表示するスクリプトを作れ
変換候補は https://www.cs.cmu.edu/~rgs/alice-table.html のテキストを元にし、英文のみの対応とする

例:
in < on
out > ['on', 'once', 'one', 'only']
in < we
out > ['well', 'went', 'were']
2019/11/16(土) 09:39:44.99ID:R3eXoa4h
>>988
URL訂正: https://www.cs.cmu.edu/~rgs/alice-I.html
99010-11
垢版 |
2019/11/16(土) 11:43:03.30ID:nyexrMnj
Mathematica
ビットテーブル使ったからいまいち

f[x_]:=Round[Exp[x*49/2^9]*10]+Mod[BitShiftRight[8518656,x],2]

f[Range[0,23]]
{10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91}
2019/11/16(土) 13:01:44.00ID:9Ne+J8hx
>>988-989 PowerShell
$Words = ([RegEx]"\w+").Matches((Invoke-WebRequest 'https://www.cs.cmu.edu/~rgs/alice-I.html').Content) | Select-Object -ExpandProperty 'Value' | Sort-Object -Unique
'on', 'we' | %{ "'$_' => ['$($Words -cmatch "^$_.*$" -join ''', ''')']" }
--
'on' => ['on', 'once', 'one', 'only']
'we' => ['well', 'went', 'were']
2019/11/16(土) 14:12:37.63ID:wI2tFyzM
そろそろ次スレ
993デフォルトの名無しさん
垢版 |
2019/11/16(土) 20:00:42.94ID:ycfnvugG
>>987
誤解がないように一応言っておくが、同一人物なのは943, 952, 958, 969, 971, 993だけで、
978や986は別人ね。
2019/11/16(土) 20:11:13.21ID:SjIOWxyj
どうでもいい
匿名掲示板
2019/11/16(土) 22:09:51.31ID:ByTTIV4m
>>988
@Mathematica

https://ideone.com/3Ad2Nv
2019/11/17(日) 09:01:36.94ID:xqEdXdr6
次スレ

プログラミングのお題スレ Part16
http://mevius.5ch.net/test/read.cgi/tech/1573948822/
997990
垢版 |
2019/11/17(日) 15:37:45.58ID:WMPUR+bY
BitGet使うんだった(Mathematicaに慣れてないのばればれ)
(* 49/2^9 = 0.095703125 *)
f[x_]:=Round[Exp[x*0.095703125]*10]+BitGet[8518656,x]

もう少し頑張っても16ビット以内にビットテーブルは縮小出来ず…。
(* 785/2^13 = 0.0958251953125 *)
f[x_]:=Round[Exp[x*0.0958251953125]*10]+BitGet[130048,x]
998デフォルトの名無しさん
垢版 |
2019/11/21(木) 12:06:42.30ID:p+kY48sO
>>941 julia
a=[98,100,198,200,250,298]
f(a,x)=a[argmin(map(abs ,a.-x))]
f(a,50)
2019/11/21(木) 17:12:54.10ID:x85mexbT
>>988-989 Squeak Smalltalk。関数で。

| contents words fn |
contents := (HTTPClient httpGet: 'https://www.cs.cmu.edu/~rgs/alice-I.html') contents.
words := (contents replaceAll: Character lf with: Character space; asTextFromHtml) asString subStrings: ' !"''()*,-.:;?`'.
words := words asSet asSortedArray.

fn := [:in | words select: [:word | word beginsWith: in]].
fn value: 'on'. "=> #('on' 'once' 'one' 'only') "
fn value: 'we'. "=> #('well' 'went' 'were') "

"for Pharo => http://ws.stfx.eu/DK48GF5ZH8SF "
2019/11/21(木) 20:01:07.49ID:KAM+noJg
はかい
こうせん
せんもんがっこう
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 116日 0時間 21分 10秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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