プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part18
https://mevius.5ch.net/test/read.cgi/tech/1594702426/
探検
プログラミングのお題スレ Part19
■ このスレッドは過去ログ倉庫に格納されています
2020/11/30(月) 00:04:05.21ID:TF2Czp0y
103デフォルトの名無しさん
2020/12/18(金) 11:06:13.73ID:lt1DqoeP お題
値のペアが複数入力されます
1列目の値でソートしてユニーク化し、2列目の値を出力してください
1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもののみを出力してください
入力
c,e
b,c
c,f
b,d
a,b
c,g
出力
a,b
b,c
c,e
値のペアが複数入力されます
1列目の値でソートしてユニーク化し、2列目の値を出力してください
1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもののみを出力してください
入力
c,e
b,c
c,f
b,d
a,b
c,g
出力
a,b
b,c
c,e
104デフォルトの名無しさん
2020/12/18(金) 11:48:54.35ID:2oY35fJZ > 1列目の値が同じ時、2列目の値はソート後のインデックスが最も小さいもの〜
と書かれてるがそのソート方法は
> 1列目の値でソート
としか書かれてない
これでは例えば
c,e
c,f
は出現順なのか、はたまた2列目の値も使って昇/降順にするのかわからない
と書かれてるがそのソート方法は
> 1列目の値でソート
としか書かれてない
これでは例えば
c,e
c,f
は出現順なのか、はたまた2列目の値も使って昇/降順にするのかわからない
105デフォルトの名無しさん
2020/12/18(金) 11:55:17.73ID:f5tAtt/1 >>103
haskell 入力パーサなし
import Data.List
pairs = [
('c','e'),
('b','c'),
('c','f'),
('b','d'),
('a','b'),
('c','g')
]
f = id
. map head
. groupBy (\x y -> ( fst x ) == ( fst y ) )
. sort
main = mapM_ print $ f pairs
haskell 入力パーサなし
import Data.List
pairs = [
('c','e'),
('b','c'),
('c','f'),
('b','d'),
('a','b'),
('c','g')
]
f = id
. map head
. groupBy (\x y -> ( fst x ) == ( fst y ) )
. sort
main = mapM_ print $ f pairs
106デフォルトの名無しさん
2020/12/18(金) 12:09:30.98ID:lt1DqoeP >>104
逆にどっちだと思います?
逆にどっちだと思います?
107デフォルトの名無しさん
2020/12/18(金) 12:52:01.21ID:1RoKReGQ 出現順という言葉が使われていないから、出現順ではない。
2列目もソートすべき
ソートの仕方は書いていないので、文字列でよい
2列目もソートすべき
ソートの仕方は書いていないので、文字列でよい
108デフォルトの名無しさん
2020/12/18(金) 13:31:08.12ID:agZtfXny 勝手に決めるな
109デフォルトの名無しさん
2020/12/18(金) 14:23:00.18ID:A9pQAhpY >>103
C++
入力を競プロぽく改変
https://ideone.com/CUTjOy
#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int N;
cin >> N;
map<string, set<string>> xs;
for(int i=0; i<N; i++){
string k, v;
cin >> k >> v;
xs[k].insert(v);
}
for_each(xs.begin(), xs.end(), [xs](auto& it){
cout << it.first << "," << *(xs.at(it.first).begin()) << endl;
});
return 0;
}
C++
入力を競プロぽく改変
https://ideone.com/CUTjOy
#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int N;
cin >> N;
map<string, set<string>> xs;
for(int i=0; i<N; i++){
string k, v;
cin >> k >> v;
xs[k].insert(v);
}
for_each(xs.begin(), xs.end(), [xs](auto& it){
cout << it.first << "," << *(xs.at(it.first).begin()) << endl;
});
return 0;
}
110デフォルトの名無しさん
2020/12/18(金) 16:16:25.17ID:P9OguxeC >>103
# # cat input
c,e
b,c
c,f
b,d
a,b
c,g
# # cat input | sort | perl -F"," -lane 'print unless $LAST eq $F[0]; $LAST = $F[0]'
a,b
b,c
c,e
# # cat input
c,e
b,c
c,f
b,d
a,b
c,g
# # cat input | sort | perl -F"," -lane 'print unless $LAST eq $F[0]; $LAST = $F[0]'
a,b
b,c
c,e
111デフォルトの名無しさん
2020/12/18(金) 18:24:57.63ID:udnU9JLz >>103 bat
@(for %%a in ("c,e" "b,c" "c,f" "b,d" "a,b" "c,g") do @echo %%~a)|(cmd /v:on /s /c "for /f "tokens=1,2 delims=," %%b in ('sort') do @(if not "%%b"=="!s!" set "s=%%b" &echo %%b,%%c)")&pause
@(for %%a in ("c,e" "b,c" "c,f" "b,d" "a,b" "c,g") do @echo %%~a)|(cmd /v:on /s /c "for /f "tokens=1,2 delims=," %%b in ('sort') do @(if not "%%b"=="!s!" set "s=%%b" &echo %%b,%%c)")&pause
112デフォルトの名無しさん
2020/12/18(金) 19:01:11.88ID:Dh0d5aQR お題: ランダムに生成されるバイナリツリーがある
ツリーのルートから見て最も左にあるノードと最も右にあるノードの位置を出力せよ
位置はツリーのルートが原点とする
x座標は原点から左に進むとマイナスになり、右に進むとプラスになる
y座標は原点から下に進むとプラスになるものとする
生成されるツリーは原点から下に向かって伸びていくものとする
生成されるツリーの最大の高さは8とする
出力例は↓のようになる
l = -3, 4
r = 5, 7
ツリーのルートから見て最も左にあるノードと最も右にあるノードの位置を出力せよ
位置はツリーのルートが原点とする
x座標は原点から左に進むとマイナスになり、右に進むとプラスになる
y座標は原点から下に進むとプラスになるものとする
生成されるツリーは原点から下に向かって伸びていくものとする
生成されるツリーの最大の高さは8とする
出力例は↓のようになる
l = -3, 4
r = 5, 7
113デフォルトの名無しさん
2020/12/18(金) 21:17:47.26ID:lt1DqoeP114デフォルトの名無しさん
2020/12/18(金) 22:39:29.15ID:Dh0d5aQR >>113
そういう感じ
そういう感じ
115デフォルトの名無しさん
2020/12/18(金) 22:55:15.81ID:Dh0d5aQR >>113
あとツリーの最大の横幅は原点から左右に8ずつで
あとツリーの最大の横幅は原点から左右に8ずつで
116デフォルトの名無しさん
2020/12/19(土) 09:08:43.96ID:Hvq3yNww >>103 J
a =: /:~ ',' & cutopen @ >cutopen stdin ''
f =: >@{. , ','&,@>@{:
smoutput f"1 a #~ ~: {. "1 a
a =: /:~ ',' & cutopen @ >cutopen stdin ''
f =: >@{. , ','&,@>@{:
smoutput f"1 a #~ ~: {. "1 a
117デフォルトの名無しさん
2020/12/19(土) 09:49:26.96ID:x1EY5aRu Jニキひさびさ
1189
2020/12/19(土) 14:32:22.06ID:gCQF7SSG >>103 Perl5
@a = qw{c,e b,c c,f b,d a,b c,g};
$h{(/(\w)/)[0]} //= $_ for @a;
print "$_\n" for map{$h{$_}} sort keys %h;
実行結果
~ $ perl 19_103.pl
a,b
b,c
c,e
@a = qw{c,e b,c c,f b,d a,b c,g};
$h{(/(\w)/)[0]} //= $_ for @a;
print "$_\n" for map{$h{$_}} sort keys %h;
実行結果
~ $ perl 19_103.pl
a,b
b,c
c,e
119デフォルトの名無しさん
2020/12/19(土) 18:39:10.13ID:gcxM+qzh120デフォルトの名無しさん
2020/12/19(土) 20:00:26.12ID:gcxM+qzh12189
2020/12/20(日) 03:24:48.64ID:zjFPqMXn >>89
https://ideone.com/lQvahn
投稿があった、O(√)以外の方法もあるみたいなので、両方を載せておこう。
他方は、O(N)解法の最後の方の同じ数をまとめて計算するやり方。
O(√)解法より確実に計算量が多い。
https://ideone.com/lQvahn
投稿があった、O(√)以外の方法もあるみたいなので、両方を載せておこう。
他方は、O(N)解法の最後の方の同じ数をまとめて計算するやり方。
O(√)解法より確実に計算量が多い。
122デフォルトの名無しさん
2020/12/20(日) 14:30:37.82ID:ocWFq0h7 >>98
Kotlin 及び Kotlin script
target_char の場合
fun wrap(text: String, target_char: Char, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_char.toString(), "$tag_left$target_char$tag_right")
target_str の場合
fun wrap(text: String, target_str: String, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_str, "$tag_left$target_str$tag_right")
要するに Java の String クラスの replace() 使ってるので、肝心な部分は何も考えてない。
tag_left, tag_right はデフォルト値として '<', '>' を指定しているので呼び出す側で指定しなければこれになる。
もう少しだけ Kotlin らしくするとしたら拡張関数にするぐらいかな。
fun String.wrap(target_str: String, tag_left: Char = '<', tag_right: Char = '>') = replace(target_str, "$tag_left$target_str$tag_right")
これで String クラスのメソッドになるので "abcabc".wrap("bc") が "a<bc>a<bc>" を返すようになる。
Kotlin 及び Kotlin script
target_char の場合
fun wrap(text: String, target_char: Char, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_char.toString(), "$tag_left$target_char$tag_right")
target_str の場合
fun wrap(text: String, target_str: String, tag_left: Char = '<', tag_right: Char = '>') = text.replace(target_str, "$tag_left$target_str$tag_right")
要するに Java の String クラスの replace() 使ってるので、肝心な部分は何も考えてない。
tag_left, tag_right はデフォルト値として '<', '>' を指定しているので呼び出す側で指定しなければこれになる。
もう少しだけ Kotlin らしくするとしたら拡張関数にするぐらいかな。
fun String.wrap(target_str: String, tag_left: Char = '<', tag_right: Char = '>') = replace(target_str, "$tag_left$target_str$tag_right")
これで String クラスのメソッドになるので "abcabc".wrap("bc") が "a<bc>a<bc>" を返すようになる。
123デフォルトの名無しさん
2020/12/20(日) 17:39:53.62ID:ocWFq0h7124デフォルトの名無しさん
2020/12/20(日) 18:33:53.02ID:1LcS4Wc6 >>98 JavaScript
const wrap = (text, target_str, tag_left='<', tag_right='>') => text.replace(RegExp(target_str, 'g'), tag_left + target_str + tag_right);
const wrap = (text, target_str, tag_left='<', tag_right='>') => text.replace(RegExp(target_str, 'g'), tag_left + target_str + tag_right);
125デフォルトの名無しさん
2020/12/21(月) 19:30:10.34ID:Mnipwtco126デフォルトの名無しさん
2020/12/23(水) 21:01:46.74ID:IGuwyxwv [お題] 和が2021の倍数
2021000以下の素数を昇順に並べた数列がある。
[2, 3, 5, ..., 2020979, 2020999] 項目数:150399
この数列より 空でない連続する部分列を P とする。
(全てのPの選び方はNCR(150399+1, 2) = 約113億通りある)
Pの和が2021の倍数となるのは何通りあるか。
[8081,8087] [3361, 3371, 3373] [2011, 2017, 2027, 2029] 等が該当するP
※無駄に素数を乱数代わりに使った、一発正解問題
※実行時間は素数生成を含めて、3秒以内
2021000以下の素数を昇順に並べた数列がある。
[2, 3, 5, ..., 2020979, 2020999] 項目数:150399
この数列より 空でない連続する部分列を P とする。
(全てのPの選び方はNCR(150399+1, 2) = 約113億通りある)
Pの和が2021の倍数となるのは何通りあるか。
[8081,8087] [3361, 3371, 3373] [2011, 2017, 2027, 2029] 等が該当するP
※無駄に素数を乱数代わりに使った、一発正解問題
※実行時間は素数生成を含めて、3秒以内
127デフォルトの名無しさん
2020/12/23(水) 23:02:15.25ID:PQyv7tz0128デフォルトの名無しさん
2020/12/23(水) 23:12:10.85ID:zWDUqRJW129デフォルトの名無しさん
2020/12/26(土) 03:16:19.16ID:4qx7gBot130デフォルトの名無しさん
2020/12/28(月) 03:25:00.14ID:S5vNYbFH131デフォルトの名無しさん
2020/12/29(火) 19:09:26.95ID:v9CXwjD7 >>103
Kotlin script
pair.csv にその入力を入れておいてから実行する。
以下は kotlinc コマンドで REPL にして直接入力して実行した時のコピー
>>> java.io.File("pair.csv").bufferedReader().lineSequence().map { it.split(',') }.sortedBy { it[0] }.fold(mutableListOf<List<String>>()) { a, c -> if (a.size == 0 || a[a.lastIndex][0] != c[0]) a.add(c); a }.forEach { println(it) }
[a, b]
[b, c]
[c, e]
>>>
2列目については考慮していないので sortBy が中でやっているソートのアルゴリズムが変われば変わるかも知れない。
Kotlin script
pair.csv にその入力を入れておいてから実行する。
以下は kotlinc コマンドで REPL にして直接入力して実行した時のコピー
>>> java.io.File("pair.csv").bufferedReader().lineSequence().map { it.split(',') }.sortedBy { it[0] }.fold(mutableListOf<List<String>>()) { a, c -> if (a.size == 0 || a[a.lastIndex][0] != c[0]) a.add(c); a }.forEach { println(it) }
[a, b]
[b, c]
[c, e]
>>>
2列目については考慮していないので sortBy が中でやっているソートのアルゴリズムが変われば変わるかも知れない。
132デフォルトの名無しさん
2020/12/29(火) 19:20:00.18ID:v9CXwjD7 a[a.lastIndex][0] の部分は a.last().first() と書いても同じだった。
この方が a.lastIndex 呼ばない分だけ無駄が少ないかも知れない。
(でもコンパイラが中で適当に最適化して同じになるかも知れないのでどうでも良いかな?)
この方が a.lastIndex 呼ばない分だけ無駄が少ないかも知れない。
(でもコンパイラが中で適当に最適化して同じになるかも知れないのでどうでも良いかな?)
133蟻人間 ◆T6xkBnTXz7B0
2020/12/29(火) 19:38:06.80ID:akpvTOL3 お題: 半径dの円にぴったり内接する正n角形を描画せよ。
134デフォルトの名無しさん
2020/12/29(火) 20:28:59.04ID:0LWFOCUq ぴったり内接とは?
ぴったりじゃない内接を教えてください
ぴったりじゃない内接を教えてください
135デフォルトの名無しさん
2020/12/29(火) 20:34:46.26ID:bi9fPEgs ぴったり内接ってなんだよって言おうとしたらすでに言われててくっそワロタ
136デフォルトの名無しさん
2020/12/29(火) 20:53:58.41ID:2gsaGKLd 量子化誤差を最小化した演算を求めているのでは?
我々は実数を扱えないので。
我々は実数を扱えないので。
137デフォルトの名無しさん
2020/12/29(火) 21:00:08.04ID:2gsaGKLd n角形をなす線分が円の外側に飛び出さないよう注意を与えているのかもしれない。
実数を扱えない以上、注意する必要が有る。
ということを示唆するのかも。
実数を扱えない以上、注意する必要が有る。
ということを示唆するのかも。
138デフォルトの名無しさん
2020/12/29(火) 21:24:43.03ID:0mXsQANw >>133
processing
void setup(){
size(400, 400);
float d=200;
float r=d/2;
int n=7;
PVector c = new PVector(width/2, height/2);
ArrayList<PVector> p = new ArrayList<PVector>();
for(int i=0; i<n+1; i++){
float theta = (TWO_PI*i)/n;
PVector t = new PVector(r*cos(theta),r*sin(theta));
t.add(c);
p.add(new PVector(t.x, t.y));
}
ellipse(c.x, c.y, d, d);
for(int i=0, j=1; i<n+1; i++, j++, j%=n){
line(p.get(i).x, p.get(i).y, p.get(j).x, p.get(j).y);
}
}
processing
void setup(){
size(400, 400);
float d=200;
float r=d/2;
int n=7;
PVector c = new PVector(width/2, height/2);
ArrayList<PVector> p = new ArrayList<PVector>();
for(int i=0; i<n+1; i++){
float theta = (TWO_PI*i)/n;
PVector t = new PVector(r*cos(theta),r*sin(theta));
t.add(c);
p.add(new PVector(t.x, t.y));
}
ellipse(c.x, c.y, d, d);
for(int i=0, j=1; i<n+1; i++, j++, j%=n){
line(p.get(i).x, p.get(i).y, p.get(j).x, p.get(j).y);
}
}
139デフォルトの名無しさん
2020/12/29(火) 21:27:39.14ID:0mXsQANw140デフォルトの名無しさん
2020/12/30(水) 13:44:24.04ID:tmlECeYE [お題] MarkdownのParagraph/BlockQuoteをパースしHTMLを生成してください
入出力例(1)
paragraph
> block quoted paragraph
↑入力 / ↓出力
<p>paragraph</p>
<blockquote>
<p>block quoted paragraph</p>
</blockquote>
入出力例(2)
> hoge
> > nested piyo1
> > nested piyo2
> fuga
↑入力 / ↓出力
<blockquote>
<p>hoge</p>
<blockquote>
<p>nested piyo1</p>
<p>nested piyo2</p>
</blockquote>
<p>fuga</p>
</blockquote>
入出力例(1)
paragraph
> block quoted paragraph
↑入力 / ↓出力
<p>paragraph</p>
<blockquote>
<p>block quoted paragraph</p>
</blockquote>
入出力例(2)
> hoge
> > nested piyo1
> > nested piyo2
> fuga
↑入力 / ↓出力
<blockquote>
<p>hoge</p>
<blockquote>
<p>nested piyo1</p>
<p>nested piyo2</p>
</blockquote>
<p>fuga</p>
</blockquote>
141デフォルトの名無しさん
2020/12/30(水) 17:24:14.94ID:yfdsF4Me quote に入れるのは"> "の繰り返しのみで桶?
142デフォルトの名無しさん
2020/12/30(水) 20:26:27.99ID:nFum3l+K143デフォルトの名無しさん
2020/12/30(水) 21:20:22.80ID:YQYWYr/5 お題
文字列を数値文字参照に変換してください
入力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
出力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
文字列を数値文字参照に変換してください
入力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
出力: 𝚙𝚛𝚘𝚐𝚛𝚊𝚖𝚖𝚒𝚗𝚐 𝚌𝚑𝚊𝚕𝚕𝚎𝚗𝚐𝚎𝚜
144デフォルトの名無しさん
2020/12/30(水) 21:32:08.73ID:EIqnK2Zk 呪いか?
145デフォルトの名無しさん
2020/12/30(水) 21:48:07.53ID:YQYWYr/5146デフォルトの名無しさん
2020/12/30(水) 21:49:19.71ID:p/cFtMuj147デフォルトの名無しさん
2020/12/30(水) 21:58:00.23ID:p/cFtMuj148デフォルトの名無しさん
2020/12/30(水) 22:36:28.16ID:p/cFtMuj >>146は不正なUnicode文字列の入力を考慮していませんでした
高位サロゲートが低位サロゲートを伴わず単独で現れていると、その直後の文字が抜け落ちます
つまり
"<\ud83c>" → "<�>" ではなく
"<\ud83c>" → "<�" になってしまう
修正版: https://ideone.com/bz8cMe
高位サロゲートが低位サロゲートを伴わず単独で現れていると、その直後の文字が抜け落ちます
つまり
"<\ud83c>" → "<�>" ではなく
"<\ud83c>" → "<�" になってしまう
修正版: https://ideone.com/bz8cMe
149デフォルトの名無しさん
2020/12/31(木) 01:13:45.28ID:pjMyqahK すごいどうでもいいことなんだけど、
ArrayListってどういうデータ構造なの?
ArrayなのそれともListなの?
おじさんわからないよ。。
ArrayListってどういうデータ構造なの?
ArrayなのそれともListなの?
おじさんわからないよ。。
150デフォルトの名無しさん
2020/12/31(木) 12:16:39.07ID:RvVxXqDc >>149
お題
array listを実装してください
次の要項を満たしてください
・add, removeができること
・サイズが可変であること
・序数で要素にアクセスできること
・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
お題
array listを実装してください
次の要項を満たしてください
・add, removeができること
・サイズが可変であること
・序数で要素にアクセスできること
・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
151デフォルトの名無しさん
2020/12/31(木) 15:29:53.91ID:wqjSMEXG >>150
add, remove は任意箇所の挿入と一要素削除で桶?
add, remove は任意箇所の挿入と一要素削除で桶?
152デフォルトの名無しさん
2020/12/31(木) 19:05:54.91ID:aMBMdmtQ153デフォルトの名無しさん
2020/12/31(木) 21:07:25.40ID:pjMyqahK >>150
それがArrayListの要件? ありがとう
それがArrayListの要件? ありがとう
154デフォルトの名無しさん
2020/12/31(木) 21:26:18.83ID:RvVxXqDc >>153
実装して
実装して
155デフォルトの名無しさん
2021/01/01(金) 13:09:20.23ID:8TPOGttB156デフォルトの名無しさん
2021/01/01(金) 13:38:10.37ID:8TPOGttB157デフォルトの名無しさん
2021/01/01(金) 14:38:54.78ID:8TPOGttB158デフォルトの名無しさん
2021/01/02(土) 03:34:41.82ID:1MFl5wrQ159デフォルトの名無しさん
2021/01/02(土) 15:11:50.57ID:gpIsEKdn >>150
この問題の要件は
>・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
だけでいいのかな?
コレだけでいいならデータの更新時に常に深さが±1の二分木に納直せば必ず参照の計算量はO(log(n))になるし、毎回ソートして格納し直せば参照の(indexによる)計算量はO(1)になる希ガス
データの更新時の制限は全くないでいいのかな?
この問題の要件は
>・要素へのアクセスの計算量はO(1)もしくはO(log n)であること
だけでいいのかな?
コレだけでいいならデータの更新時に常に深さが±1の二分木に納直せば必ず参照の計算量はO(log(n))になるし、毎回ソートして格納し直せば参照の(indexによる)計算量はO(1)になる希ガス
データの更新時の制限は全くないでいいのかな?
160デフォルトの名無しさん
2021/01/02(土) 21:54:03.91ID:YfZD//vW メモリが安くなったとはいえ
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので
161蟻人間 ◆T6xkBnTXz7B0
2021/01/04(月) 22:40:39.15ID:RRkyDjZk お題: 四方に広がる無限のサイズの方眼紙があって、1マス1マスに一個のアラビア数字を一度だけ記入できる。
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)
162蟻人間 ◆T6xkBnTXz7B0
2021/01/04(月) 22:51:58.92ID:RRkyDjZk 補記。
マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。
また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。
マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。
また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。
163デフォルトの名無しさん
2021/01/05(火) 22:28:39.68ID:JVpboZJX お題: ランダムな数列を生成せよ
数列の長さは4 <= len <= 20とし、これもランダムとする
数列の長さは4 <= len <= 20とし、これもランダムとする
164デフォルトの名無しさん
2021/01/05(火) 22:36:13.47ID:3bhht3A2165デフォルトの名無しさん
2021/01/06(水) 10:45:40.05ID:0+tWp1dI >>163 js
const rand = (a, b) => Math.floor(Math.random() * (b - a + 1)) + a
const range = (n) => [...Array(n).keys()]
range(rand(4, 20)).map(Math.random)
const rand = (a, b) => Math.floor(Math.random() * (b - a + 1)) + a
const range = (n) => [...Array(n).keys()]
range(rand(4, 20)).map(Math.random)
166デフォルトの名無しさん
2021/01/06(水) 10:46:52.82ID:0+tWp1dI ruby 3 はどのくらい変わったの
167デフォルトの名無しさん
2021/01/06(水) 14:12:34.77ID:0ypUbOKE >>163
Kotlin または Kotlin script
以下は kotlinc コマンドで REPL で実行した時のコピー。
(先頭の >>> はプロンプト)
>>> (1..(4..20).random()).map { kotlin.random.Random.nextInt() }
res0: kotlin.collections.List<kotlin.Int> = [1712097059, 2034192723, -1232228362, 634194098, 1788814029, -1878195330, -2043751487, 933285281, 1116738696, -934057871, -1657983454, -1761832713, -1836302098, -902578867, -1306790359, 1824207694, 386095401, -389307033, 380242891, -2028767653]
>>>
実行結果は何処にも出力しようとしてしていないが REPL なので自動で出力されている。
Kotlin または Kotlin script
以下は kotlinc コマンドで REPL で実行した時のコピー。
(先頭の >>> はプロンプト)
>>> (1..(4..20).random()).map { kotlin.random.Random.nextInt() }
res0: kotlin.collections.List<kotlin.Int> = [1712097059, 2034192723, -1232228362, 634194098, 1788814029, -1878195330, -2043751487, 933285281, 1116738696, -934057871, -1657983454, -1761832713, -1836302098, -902578867, -1306790359, 1824207694, 386095401, -389307033, 380242891, -2028767653]
>>>
実行結果は何処にも出力しようとしてしていないが REPL なので自動で出力されている。
168デフォルトの名無しさん
2021/01/06(水) 19:38:44.63ID:ySlgJWsk >>163 Ruby
# こんな意味だと解釈した
puts ( '%020b' % rand(1<<20) )[ 0, 4+rand(17) ] # ( 2進) '0000'-'00000000000000000000'..'1111'-'11111111111111111111'
puts ( '%020d' % rand(1e20) )[ 0, 4+rand(17) ] # (10進) '0000'-'00000000000000000000'..'9999'-'99999999999999999999'
# こんな意味だと解釈した
puts ( '%020b' % rand(1<<20) )[ 0, 4+rand(17) ] # ( 2進) '0000'-'00000000000000000000'..'1111'-'11111111111111111111'
puts ( '%020d' % rand(1e20) )[ 0, 4+rand(17) ] # (10進) '0000'-'00000000000000000000'..'9999'-'99999999999999999999'
169デフォルトの名無しさん
2021/01/06(水) 23:58:46.35ID:N14y+/j1 お題
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください
入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください
入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
170デフォルトの名無しさん
2021/01/07(木) 00:11:25.06ID:bv7Qweso 意味不明な途中省く
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk
171デフォルトの名無しさん
2021/01/07(木) 00:20:29.22ID:iqGL0Mlk 省いちゃダメなの!
172デフォルトの名無しさん
2021/01/07(木) 00:29:54.66ID:Vd9hikpg >>169
Haskell
import Data.List
consecutiveAlph a z = tail $ inits $ [ a .. z ]
main = mapM_ putStrLn $ consecutiveAlph 'a' 'k'
----
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
Haskell
import Data.List
consecutiveAlph a z = tail $ inits $ [ a .. z ]
main = mapM_ putStrLn $ consecutiveAlph 'a' 'k'
----
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
173(u_・y)
2021/01/07(木) 00:56:12.00ID:oTn3YI8v174デフォルトの名無しさん
2021/01/07(木) 02:01:24.63ID:GGtjVNVk >>169 Common Lisp
https://ideone.com/yWJWQf
参考:
CLHS: Section 13.1.6 Ordering of Characters
http://www.lispworks.com/documentation/HyperSpec/Body/13_af.htm
https://ideone.com/yWJWQf
参考:
CLHS: Section 13.1.6 Ordering of Characters
http://www.lispworks.com/documentation/HyperSpec/Body/13_af.htm
1759
2021/01/07(木) 02:13:26.61ID:t9BUPUyy >>169 Perl5
@a = split',', <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
実行結果
~ $ echo 'a,k' | perl 19_169_a,k.pl
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
@a = split',', <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
実行結果
~ $ echo 'a,k' | perl 19_169_a,k.pl
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
1769
2021/01/07(木) 02:17:47.93ID:t9BUPUyy つか、これでよかったわ
@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
177デフォルトの名無しさん
2021/01/07(木) 11:50:26.21ID:oTn3YI8v お題
オセロのようなルールでひっくり返しを行う処理を実装せよ
変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒
入力:01202113112120
出力:01202222222120
オセロのようなルールでひっくり返しを行う処理を実装せよ
変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒
入力:01202113112120
出力:01202222222120
178デフォルトの名無しさん
2021/01/07(木) 11:52:33.15ID:oTn3YI8v ちょい訂正
3 = 今のターンで置いた白だった
3 = 今のターンで置いた白だった
179デフォルトの名無しさん
2021/01/07(木) 12:05:34.54ID:TYHzopEy180デフォルトの名無しさん
2021/01/07(木) 12:06:14.88ID:TYHzopEy あ、1=3=黒なのね
失礼しました
失礼しました
181デフォルトの名無しさん
2021/01/07(木) 12:32:35.52ID:TYHzopEy >>177
haskell
twosTurn x = let
( pre, ( '3' : post ) ) = span (/='3') x
revOne y = let
( pre02 , post02 ) = span ( == '1' ) $ y ++ "0"
twos = zipWith const ( repeat '2' ) pre02
in if ( head post02) == '0'
then y
else take ( length y ) ( twos ++ post02 )
revOne' = reverse . revOne . reverse
in ( revOne' pre ) ++ "2" ++ ( revOne post )
sample = "01202113112120"
main = print $ twosTurn sample
haskell
twosTurn x = let
( pre, ( '3' : post ) ) = span (/='3') x
revOne y = let
( pre02 , post02 ) = span ( == '1' ) $ y ++ "0"
twos = zipWith const ( repeat '2' ) pre02
in if ( head post02) == '0'
then y
else take ( length y ) ( twos ++ post02 )
revOne' = reverse . revOne . reverse
in ( revOne' pre ) ++ "2" ++ ( revOne post )
sample = "01202113112120"
main = print $ twosTurn sample
182デフォルトの名無しさん
2021/01/07(木) 12:50:45.25ID:sEmeEMut >>177 Ruby
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }
183182
2021/01/07(木) 13:05:54.80ID:sEmeEMut >>182 は間違いでした
board = '01202113112120'
puts board
puts board.sub( /2(1*)3/ ){ "2#{'2'* ($1.size)}3" }.sub( /3(1*)2/ ){ "3#{'2'* ($1.size)}2" }.tr( '3', '2' )
board = '01202113112120'
puts board
puts board.sub( /2(1*)3/ ){ "2#{'2'* ($1.size)}3" }.sub( /3(1*)2/ ){ "3#{'2'* ($1.size)}2" }.tr( '3', '2' )
184デフォルトの名無しさん
2021/01/07(木) 20:21:05.95ID:n2K5l1bF 仕様を出来るだけ簡潔にしたかったんだろうけどやり過ぎてモヤる
下位から
第1bit 駒有無
第2 駒種別
第3 now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now
と置いてnowの結果を出力の方が良くね
下位から
第1bit 駒有無
第2 駒種別
第3 now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now
と置いてnowの結果を出力の方が良くね
185デフォルトの名無しさん
2021/01/07(木) 21:58:01.92ID:pRSWPdMl この問題の本命は、オセロを作るっていうお題にしたつもりじゃないからw
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な
186デフォルトの名無しさん
2021/01/08(金) 02:42:54.86ID:pELUdJTO >>184
お前がそういうお題を新たに出せば良い。
お前がそういうお題を新たに出せば良い。
187デフォルトの名無しさん
2021/01/08(金) 07:57:49.81ID:AIrixKby >>184 Ruby
board = [0b000,0b011,0b001,0b000,0b001,0b011,0b011,0b101,0b011,0b011,0b001,0b011,0b001,0b000].pack('C*')
if board["\x05"]
board = board.sub( /\01(\03*)\x05/ ){ "\01#{"\01"* ($1.size)}\x05" }.sub( /\x05(\x03*)\x01/ ){ "\x05#{"\x01"* ($1.size)}\x01" }.tr( "\x05", "\x01" )
else
board = board.sub( /\03(\01*)\x07/ ){ "\03#{"\03"* ($1.size)}\x07" }.sub( /\x07(\x01*)\x03/ ){ "\x07#{"\x03"* ($1.size)}\x03" }.tr( "\x07", "\x03" )
end
puts board.unpack('C*').map{|b| '0b%03b' % b.ord }.join(',')
#=>0b000,0b011,0b001,0b000,0b001,0b001,0b001,0b001,0b001,0b001,0b001,0b011,0b001,0b000
board = [0b000,0b011,0b001,0b000,0b001,0b011,0b011,0b101,0b011,0b011,0b001,0b011,0b001,0b000].pack('C*')
if board["\x05"]
board = board.sub( /\01(\03*)\x05/ ){ "\01#{"\01"* ($1.size)}\x05" }.sub( /\x05(\x03*)\x01/ ){ "\x05#{"\x01"* ($1.size)}\x01" }.tr( "\x05", "\x01" )
else
board = board.sub( /\03(\01*)\x07/ ){ "\03#{"\03"* ($1.size)}\x07" }.sub( /\x07(\x01*)\x03/ ){ "\x07#{"\x03"* ($1.size)}\x03" }.tr( "\x07", "\x03" )
end
puts board.unpack('C*').map{|b| '0b%03b' % b.ord }.join(',')
#=>0b000,0b011,0b001,0b000,0b001,0b001,0b001,0b001,0b001,0b001,0b001,0b011,0b001,0b000
188デフォルトの名無しさん
2021/01/08(金) 21:29:33.72ID:Uhe1x+T1189デフォルトの名無しさん
2021/01/09(土) 02:47:05.51ID:yzrxyAxR190デフォルトの名無しさん
2021/01/09(土) 03:00:30.54ID:yzrxyAxR >>169
Perl5
コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)
perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'
Perl5
コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)
perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'
191デフォルトの名無しさん
2021/01/09(土) 03:18:08.87ID:yzrxyAxR192デフォルトの名無しさん
2021/01/09(土) 08:04:43.95ID:7SSQ0Zys193デフォルトの名無しさん
2021/01/09(土) 20:59:35.76ID:71nzX3jh194デフォルトの名無しさん
2021/01/09(土) 21:04:47.77ID:71nzX3jh195デフォルトの名無しさん
2021/01/09(土) 21:40:06.97ID:71nzX3jh196デフォルトの名無しさん
2021/01/09(土) 23:28:46.26ID:MPKG4kVI お題
N個の時系列データが与えられる。i番目のデータはa_iである
i=1〜Nについて、以下の条件を満たすx_iを出力せよ
x_i : 直近c個でa_iが最大となるようなcのうち、最大のもの
[入力]
N
a_1 a_2 ... a_N
[出力]
x_1 x_2 ... x_N
(例1)
5
3 1 2 6 6
=> 1 1 2 4 5
3 = max(3)
1 = max(1) //今までの中で最小
2 = max(1, 2) //直近2個で最大
6 = max(3, 1, 2, 6) //直近4個で最大 (直近3個でも最大だが、cの値として最大のものを選ぶ)
6 = max(3, 1, 2, 6, 6) //直近5個で最大(最大タイ)
(例2)
3
100 10 1
=> 1 1 1
N個の時系列データが与えられる。i番目のデータはa_iである
i=1〜Nについて、以下の条件を満たすx_iを出力せよ
x_i : 直近c個でa_iが最大となるようなcのうち、最大のもの
[入力]
N
a_1 a_2 ... a_N
[出力]
x_1 x_2 ... x_N
(例1)
5
3 1 2 6 6
=> 1 1 2 4 5
3 = max(3)
1 = max(1) //今までの中で最小
2 = max(1, 2) //直近2個で最大
6 = max(3, 1, 2, 6) //直近4個で最大 (直近3個でも最大だが、cの値として最大のものを選ぶ)
6 = max(3, 1, 2, 6, 6) //直近5個で最大(最大タイ)
(例2)
3
100 10 1
=> 1 1 1
197デフォルトの名無しさん
2021/01/10(日) 03:36:08.11ID:lRaYSXSv198デフォルトの名無しさん
2021/01/10(日) 05:17:09.34ID:5hwhwjPe >>169 bat
@echo off &setlocal
set ALL=abcdefghijklmnopqrstuvwxyz
call :RANGE a,k
pause &exit /b
:RANGE
setlocal enabledelayedexpansion
if "%1" GTR "%2" echo ERROR: Invalid argument&exit /b
set STR=!ALL:*%1=%1!
if not "%2"=="z" call set STR=%%STR:!ALL:*%2=!=%%
:LENGTH
set /a n+=1
if not "!STR:~0,-%n%!"=="" goto :LENGTH
for /L %%n in (1,1,%n%) do echo !STR:~0,%%n!
@echo off &setlocal
set ALL=abcdefghijklmnopqrstuvwxyz
call :RANGE a,k
pause &exit /b
:RANGE
setlocal enabledelayedexpansion
if "%1" GTR "%2" echo ERROR: Invalid argument&exit /b
set STR=!ALL:*%1=%1!
if not "%2"=="z" call set STR=%%STR:!ALL:*%2=!=%%
:LENGTH
set /a n+=1
if not "!STR:~0,-%n%!"=="" goto :LENGTH
for /L %%n in (1,1,%n%) do echo !STR:~0,%%n!
199デフォルトの名無しさん
2021/01/10(日) 09:32:44.37ID:aiEZ01BF >>196
完全に全く意味がわからないお題を久々に見た
完全に全く意味がわからないお題を久々に見た
200デフォルトの名無しさん
2021/01/10(日) 09:35:06.95ID:aiEZ01BF あ、イヤわかった最小はタイポか
201デフォルトの名無しさん
2021/01/10(日) 09:41:46.50ID:nmvnbhWr202デフォルトの名無しさん
2021/01/10(日) 09:45:08.12ID:aiEZ01BF >>196
haskell
import Data.List
c = id
. map length
. map (\x -> takeWhile ( <= ( last x ) ) . reverse $ x)
. tail
. inits
main = do
print $ c [ 3, 1, 2, 6, 6 ]
----
[1,1,2,4,5]
haskell
import Data.List
c = id
. map length
. map (\x -> takeWhile ( <= ( last x ) ) . reverse $ x)
. tail
. inits
main = do
print $ c [ 3, 1, 2, 6, 6 ]
----
[1,1,2,4,5]
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【コメ】卸売業者「簡単に安売りできない」 「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 [Hitzeschleier★]
- 中国から訓練の連絡あったが、区域など具体的な内容知らされず=小泉防衛相 [♪♪♪★]
- 空自機レーダー照射、音声データ公開 中国 ★4 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★2 [少考さん★]
- 【速報】 米国政府、中国が日本の自衛隊にレーダーを照射を批判、同事案で中国を批判するのは初めて [お断り★]
- 高市早苗総理「金利上昇よりも日本の成長が大事」 [Hitzeschleier★]
- 【高市速報】小泉進次郎「事前に中国軍から飛行訓練を開始すると連絡があったのは事実」 [931948549]
- 【正論】高市さん「『企業献金について与野党で協議する』という答弁は石破個人のものであり、もはや無効」特定野党を完全論破 [519511584]
- 【悲報】高市早苗政権に文春砲が連発! [115996789]
- 【正論】高市さん「長期金利が上がり続けていくことよりも、日本が成長していく方が大事」 [519511584]
- 貧乳←かわいい 短小←こいつ
- 【悲報】たけガイ、「中卒」という言葉を覚えてしまう🏡
