[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:31 / Filesize : 264 KB / Number-of Response : 1042
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2020/03/13(金) 01:42:47.06 ID:0rEhys36.net]
プログラミングのお題スレです。

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

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

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

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

※前スレ
プログラミングのお題スレ Part16
https://mevius.5ch.net/test/read.cgi/tech/1573948822/

52 名前:デフォルトの名無しさん mailto:sage [2020/03/23(月) 00:59:16 ID:ryqQXgQk.net]
>>48
さすスモ

53 名前:デフォルトの名無しさん [2020/03/27(金) 23:49:15 ID:7AzyN3tE.net]
お題:安価をレス番リストに変換せよ

例:
"1" -> [1]
"1-3" -> [1,2,3]
"1,3" -> [1,3]
"1,3-5" -> [1,3,4,5]

54 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 00:46:37 ID:xGS8Imsw.net]
>>52 Ruby
def anka(str)
nums=[]
str.split(“,”)

55 名前:.each do |s|
x,y=s.split(“-“)
if y
nums+=(x.to_i .. y.to_i).to_a
else
nums<<x.to_i
end
end
return nums
end

anka(“1,3-5”)
#=> [1,3,4,5]
[]
[ここ壊れてます]

56 名前:デフォルトの名無しさん [2020/03/28(土) 01:05:52 ID:ngUeRIaE.net]
お題:>>52

例:
>>52に追加で
"1,1" -> [1]
"1-3,2" -> [1,2,3]
"1-4,2-3" -> [1,2,3,4]
"1-4,3-5" -> [1,2,3,4,5]

57 名前:デフォルトの名無しさん [2020/03/28(土) 01:08:29 ID:ngUeRIaE.net]
やっぱやめた。
よく考えたら>>53のコードに重複削除追加するだけだった

58 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 09:55:13 ID:YBto5Ud7.net]
>>52 Ruby

%w[1 1-3 1,3 1,3-5].each{|e| p eval "[#{e.gsub(/(\d+)-/, '*\1..')}]"}

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

59 名前:◆QZaw55cn4c mailto:sage [2020/03/28(土) 10:17:31 ID:WJROMx30.net]
>>52 >>54
既出
= mevius.2ch.net/test/read.cgi/tech/1514772904/34,41,83,84
https://mevius.5ch.net/test/read.cgi/tech/1434079972/64

60 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 11:14:59 ID:VFdWLa/U.net]
>>52 Perl5

$"=',';
for $a (<DATA>) {
 $a =~ s/-/.../;
 @s = eval $a;
 print "[@s]\n";
}
__DATA__
1
1-3
1,3
1,3-5


実行結果
~ $ perl 17_53_ancres.pl
[1]
[1,2,3]
[1,3]
[1,3,4,5]



61 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 11:21:13.18 ID:VFdWLa/U.net]
>>58 Perl5 ちょっと修正

$"=',';
for $a (<DATA>) {
 $a =~ s/-/.../g;
 @s = sort{$a<=>$b} eval $a;
 print "[@s]\n";
}
__DATA__
1
1-3
1,3
1,8-10,3-5

実行
~ $ perl 17_53_ancres.pl
[1]
[1,2,3]
[1,3]
[1,3,4,5,8,9,10]

62 名前:デフォルトの名無しさん [2020/03/28(土) 18:22:26.71 ID:ssy5u0i6.net]
>>52
Java
https://paiza.io/projects/9WPvdN2nn77fXNzmk5qhQQ

63 名前:デフォルトの名無しさん [2020/03/28(土) 18:24:03.79 ID:ssy5u0i6.net]
お題:レス番リストを安価に変換せよ

例:
[1] -> "1"
[1,2,3] -> "1-3"
[1,3] -> "1,3"
[1,3,4,5] -> "1,3-5"

64 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 19:38:54.96 ID:RLgHfGbj.net]
前者は2ch browserで使えるけど後者はそうじゃないね

65 名前:デフォルトの名無しさん [2020/03/28(土) 23:41:39 ID:X4tW2giy.net]
まーたやらな言い訳かー
やる気ねーなw

66 名前:デフォルトの名無しさん [2020/03/29(日) 10:50:09 ID:ACisvDeP.net]
>>61 js

let レス番リスト=[1,3,4,5];
let 先頭レス番=レス番リスト[0];
let 安価="";
for(let イ=0;イ<レス番リスト.length-1;イ++){
if(レス番リスト[イ]+1!=レス番リスト[イ+1]){
安価+=レス番リスト[イ]==先頭レス番?先頭レス番+",":先頭レス番+"-"+レス番リスト[イ]+",";
先頭レス番=レス番リスト[イ+1];
}
}
安価+=レス番リスト[レス番リスト.length-1]==先頭レス番?先頭レス番:先頭レス番+"-"+レス番リスト[レス番リスト.length-1];
console.log(安価);

=>1,3-5

67 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 14:05:00.00 ID:kU1QBoxf.net]
>>61 Perl5 (もう少しスマートな書き方はあるかもしれないが…)

for (qw{[1] [2,3] [1,2,3] [1,3] [1,3,4,5]}) {
 @a = /(\d+)/g;
 %h = map{$_ => $_} @a;
 @b = map{$h{$_}//','} 1..1000;
 $"=','; $b = "@b";
 $b =~ s/^,*(.+?),*$/$1/;
 @c = split /,,+/, $b;
 @d = map{[eval]} @c;
 @e = map{@$_ > 2 ? "$$_[0]-$$_[-1]" : "@$_"} @d;
 print "@e\n";
}


実行結果
~ $ perl 17_61_resanc.pl
1
2,3
1-3
1,3
1,3-5

68 名前:デフォルトの名無しさん [2020/03/29(日) 18:03:50 ID:5iH4CTSz.net]
なにやってるのか全くわからんw

69 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 18:46:57.43 ID:CipzEZQ7.net]
@a = /(\d+)/g; … 文字列から数値だけを抽出しリスト変数@aに格納、たとえば文字列が"[1,3,4,5]" の場合@aは(1, 3, 4, 5)

%h = map{$_ => $_} @a; … 変数@aのリスト例えば(1, 3, 4, 5)を入力として値対値ハッシュ {1=>1, 3=>3, 4=>4, 5=>5}を作り変数%hとする

@b = map{$h{$_}//','} 1..1000; … 1〜1000までの数値に対しハッシュ%hを参照し値があればその値、無ければ','文字のリストを生成して変数@bに格納、上記{1=>1, 3=>3, 4=>4, 5=>5}の場合はこんな感じ
#  1 2 3 4 5 6 7 8 9 … 1000
@b: 1 , 3 4 5 , , , , … ,

$"=','; $b = "@b"; … 上記リスト@bを元に要素を区切り文字','で繋いだ文字列を作り変数$bに設定
上記@b: 1 , 3 4 5 , , , … ,
の場合 $b = "1,,,3,4,5,,,,,,,…,,"
2や6以降は無いので,となっている

$b =~ s/^,*(.+?),*$/$1/; … 文字列$bの先頭と末尾に','があれば除去
例 $b = "1,,,3,4,5,,,,,,,…,," ⇒ "1,,,3,4,5"

@c = split /,,+/, $b; … $bを正規表現/,,+/を区切りとして分割したリストを@cに格納
例 $b = "1,,,3,4,5" ⇒ @c = ("1", "3,4,5")

@d = map{[eval]} @c; … リスト@cの文字列をそれぞれevalして数値リストのreferenceの配列を@dに設定
例 @c = ("1", "3,4,5") ⇒ @d = ([1], [3, 4, 5])

@e = map{@$_ > 2 ? "$$_[0]-$$_[-1]" : "@$_"} @d;
@dの夫々の数値リストに対し、要素が1だったらその数値自体を文字列に、2個だったら数値を','で連結した文字列に、
3個以上だったら"最初の数値-最後の数値"という文字列に変換
例 @d = ([1], [3, 4, 5]) ⇒ @e = ("1", "3-5")

print "@e\n";
@e の文字列リストを','で繋いで印字(上の方で区切り文字$"は=','に設定済)
例 @e = ("1", "3-5") ⇒ 1,3-5

@dと@eを作るところがもう少しエレガントにできればよかったけれど

70 名前:デフォルトの名無しさん [2020/03/29(日) 19:07:03 ID:5iH4CTSz.net]
なるほど、そうやって並んだ部分でグループ化するのか



71 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 22:44:25.79 ID:xSpiMCgD.net]
>>65 Perl5 少しスマートに書けた(文字列マッチンク処理゙主体になっちまったけれど…)

$"=',';
for (qw{[1] [2,3] [1,2,3] [1,3] [1,3,4,5]}) {
 @a = /(\d+)/g;
 %h = map{$_ => $_} @a;
 @b = map{$h{$_}//' '} 1..20;
 $b = "@b";
 @c = $b =~ /(\d(?:,\d)*)/g;
 s/(,\d+)+,/-/ for @c;
 print "@c\n";
}

実行
~ $ perl 17_61_resanc_0330.pl
1
2,3
1-3
1,3
1,3-5

72 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 22:45:46.57 ID:q7KIsR+X.net]
>>69 テスト時のcodeが残ってた…orz
× @b = map{$h{$_}//' '} 1..20;
○ @b = map{$h{$_}//' '} 1..1000;

73 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 23:56:04.38 ID:9DwI/QO9.net]
>>59
めったに使えない evalが入てて楽しい

74 名前:デフォルトの名無しさん [2020/04/03(金) 19:14:26.56 ID:tv+k2Xei.net]
お題

文字列の先頭から続く、0 は、8進数と解釈されるため、バグります!
なので、それらを除去して、10進数と解釈できる文字列にして下さい。
以下は、すべて文字列です

090 → 90
0080 → 80

123 → 123

0 → 0
000 → 0

"" → ""

75 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 19:53:54.22 ID:MoLJYTUl.net]
>>72 マルチポスト&スレチ
https://mevius.5ch.net/test/read.cgi/tech/1578068134/

76 名前:72 mailto:sage [2020/04/03(金) 20:02:16.50 ID:tv+k2Xei.net]
向こうのスレから移動したので、このスレで続けて下さい!

77 名前:デフォルトの名無しさん [2020/04/03(金) 20:06:07.16 ID:etO49JcP.net]
粘着者湧いてるじゃん

78 名前:デフォルトの名無しさん [2020/04/03(金) 20:13:05 ID:D8CnMwXH.net]
>>72
js

result=input==""?"":Number(input)

79 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 20:17:14 ID:Ea8es11U.net]
>>72
perl5
https://pastebin.com/msNvZtWg

80 名前:デフォルトの名無しさん [2020/04/03(金) 20:17:36 ID:D8CnMwXH.net]
すまん、よく読んでなかったわ



81 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 00:40:59 ID:oi+wB/l2.net]
>>72 Perl5

for $a (qw{090 0080 123 0 000}) {
 ($b = $a) =~ s/^0*([\d])/$1/;
 print "$a → $b\n"
}

実行結果
~ $ perl 17_72_0dec.pl
090 → 90
0080 → 80


82 名前:123 → 123
0 → 0
000 → 0
[]
[ここ壊れてます]

83 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 00:43:04 ID:7bsK3hPl.net]
>>79 いや、([\d])は(\d)で十分だた…

for $a (qw{090 0080 123 0 000}) {
 ($b = $a) =~ s/^0*(\d)/$1/;
 print "$a → $b\n"
}

84 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 01:02:31.09 ID:PfYZfNM0.net]
>>80
r オプションつかうと括弧省ける
$b = $a =~ s/^0*(\d)/$1/r;

85 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 01:49:49 ID:jL2VaRwC.net]
>>81
そっか、今度から置換代入にはr使ってみる。

も少し書き換えたら、こうなった

for (qw{090 0080 123 0 000}) {
/^0*(\d+)/;
print "$_ → $1\n"
}

~ $ perl 17_72_0dec.pl
090 → 90
0080 → 80
123 → 123
0 → 0
000 → 0

86 名前:72 [2020/04/04(土) 12:46:11.12 ID:1ehA2Rbs.net]
>>72
Ruby で

def delete_successive_zero( str )
return "" if str == ""

str.to_i.to_s # 10進数
end

ary = %w(090 0080 123 0 000)
ary.push ""

p ary.map { |str| delete_successive_zero( str ) }

出力
[ "90", "80", "123", "0", "0", "" ]

87 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 13:37:45 ID:tmNSQTrZ.net]
>>52 Dart

void main() {
  final List<String> anchors = ["1", "1-3", "1,3", "1,3-5"];
  anchors.forEach((anchor) => print("$anchor => ${toNums(anchor)}"));
}

List<int> toNums(str) {
  final List<int> result = [];
  str.split(",").forEach((param){
    if(param.contains("-")) {
      result.addAll(hoge(param));
    } else {
      result.add(int.parse(param));
    }
  });
  return result;
}

List<int> hoge(str) {
  final List<int> result = [];
  final range = str.split("-");
  for(var i = int.parse(range[0]);i <= int.parse(range[1]); i++) result.add(i);
  return result;
}

// =>
1 => [1]
1-3 => [1, 2, 3]
1,3 => [1, 3]
1,3-5 => [1, 3, 4, 5]

88 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 13:48:29 ID:qnbQjwAi.net]
>>72 Python

def strip(s):
  s = s.lstrip('0')
  if not len(s):
    return '0'
  return s

89 名前:デフォルトの名無しさん [2020/04/04(土) 14:34:09.15 ID:VszBH+2q.net]
>>72
Java
https://paiza.io/projects/40ARFB6Tj0__7hbt0GT4Jg

90 名前:デフォルトの名無しさん [2020/04/04(土) 23:52:04.74 ID:sokSr0we.net]
>>85
""が0になりませんか



91 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 01:07:14.83 ID:14D27qM5.net]
>>72
>>85修正
https://ideone.com/rm7jwt

92 名前:デフォルトの名無しさん [2020/04/05(日) 05:36:36.03 ID:sZO7YFrq.net]
>>72
Perl5

ある意味手抜きなプログラムである。

https://paiza.io/projects/rlLxhWyuXx9FG7oVB7Kutw

オマケ機能としてマイナスの時に -00009 みたいなやつも -9 になるようにした。
更に、整数の数でない場合(文字列の場合)はダブルクォーテーションで括って出すようにした。

93 名前:デフォルトの名無しさん [2020/04/05(日) 05:42:34.94 ID:sZO7YFrq.net]
>>72
Kotlin
https://paiza.io/projects/5CLwMbqJUtLbrE6nD5oZOA

>>89よりも更にもっと手抜きである。びっくりするほど何もやってない。仕様は同じ。

94 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 06:46:49.40 ID:14D27qM5.net]
あ〜マイナス値は考慮してなかったな〜

95 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 06:56:54 ID:RExqiO2w.net]
教えて君の質問に馬鹿正直に答えてやるなよ

96 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 07:43:19 ID:14D27qM5.net]
>>72 Python
https://ideone.com/Q5vth7

PerlとKotlinの人のに比べると長くなってしまったのが心残り

97 名前:デフォルトの名無しさん [2020/04/05(日) 12:55:09.83 ID:SfC0ZJYK.net]
粘着君の意に反して回答わっさわっさ来ててワロタ

98 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 12:56:43.55 ID:yw9/uuhJ.net]
粘着君ってなんやねん
スレチだって言われてんだろ

99 名前:デフォルトの名無しさん [2020/04/05(日) 13:01:09.81 ID:SfC0ZJYK.net]
えw それ言ってるのが粘着君じゃないの?w
どの辺がスレチなのか知らんけど君の意見なんか誰も同調しないかのように回答わさわさなのを見てどんな気持ち???w

100 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 13:06:14.44 ID:yw9/uuhJ.net]
あほくさ



101 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 13:06:52.23 ID:liJZihU7.net]
>>72 GNU Smalltalk

| fn |
fn := [:str | str isEmpty ifTrue: [str] ifFalse: [str asNumber]].

(#('090' '0080' '123' '0' '000' '') collect: fn) display.

=> (90 80 123 0 0 '' )

https://ideone.com/x8y6JM

102 名前:デフォルトの名無しさん [2020/04/05(日) 13:07:50.11 ID:SfC0ZJYK.net]
わざわざ他スレから出張してまで粘着するも自分の思い通りにならず涙目敗北草不可避w

103 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 13:08:52.29 ID:5b4pXRMu.net]
ID:SfC0ZJYKは有名な荒しだよ
スルーしな

104 名前:デフォルトの名無しさん [2020/04/05(日) 13:10:52.18 ID:SfC0ZJYK.net]
そのように言っている自分自身の策略書き込みがスルーされているという悲劇ww

105 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 13:13:48.87 ID:QyCQlkmw.net]
共有NG入ってて草
>>72が自力で解けない時点で脳みそに障害あるだろコイツ

106 名前:デフォルトの名無しさん [2020/04/05(日) 13:15:17.06 ID:SfC0ZJYK.net]
ブツブツと負け惜しみを垂れ流しているその姿はまさに哀愁満点 w

107 名前:デフォルトの名無しさん mailto:sage [2020/04/07(火) 16:39:18 ID:WiIyPE7p.net]
>>72
部分解なら lisp で
(loop for i in (list 090 0080 123 0 000 ) do (format t "~d~%" i))
90
80
123
0
0

108 名前:デフォルトの名無しさん mailto:sage [2020/04/07(火) 19:00:27.59 ID:i9ABTPYd.net]
であればもうこれで十分って感じがしてきた^^;

>>72 GNU Smalltalk

#(090 0080 123 0 000 '') display.

=> (90 80 123 0 0 '' )

https://ideone.com/e0kdys

109 名前:デフォルトの名無しさん [2020/04/08(水) 07:58:45 ID:5CDGaVzP.net]
お題: レスの被アンカー数をレスごとにカウントし、降順に整列して出力せよ
入力は1レス1行で入力され、1行のフォーマットは「レス番:レス内容」でコロンで区切ってある
レスの入力がすべて終わった段階でレスごとに被アンカー数を計算し、「レス番:カウント数」のフォーマットで出力せよ

入力と出力例: https://ideone.com/XOytlP

110 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 16:25:56 ID:gvYQZ6Pp.net]
こんな感じで作ったな
select_word_and_anchor.pl
https://ideone.com/bpypjv

cat ~/.w3m/keymap
# vim: set nowrap
keymap a EXEC_SHELL "w3m -cols 200 $( echo $W3M_URL| sed 's/[-l][0-9]\+//' ) | /home/web/extract_body_of_2ch.sh | /home/bin/select_word_and_anchor.pl|less"



111 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 16:30:02 ID:gvYQZ6Pp.net]
動作はこんな感じ 例にあるような常用2chアンカー機能する
https://i.imgur.com/Bw5tlnl.png

112 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 23:06:09 ID:jh8IMM/7.net]
>>106 Perl5

for (<>) {
 ($r, @a) = /([-\d]+)/g;
 push @s, $r;
 for (@a) {
  @b = /(\d+)/g;
  $h{$_}++ for $b[0]..$b[-1]
 }
}
printf "%d: %d\n", $_, $h{$_}//0 for @s;

実行結果
https://ideone.com/UVvDtv

113 名前:デフォルトの名無しさん mailto:sage [2020/04/09(木) 00:05:07.49 ID:VEjEdiDF.net]
>>106 Perl5、ゴメン「降順に整列」が抜けてた…orz、やり直し

for (<>) {
 ($r, @a) = /([-\d]+)/g;
 push @s, $r;
 for (@a) {
  @b = /(\d+)/g;
  $h{$_}++ for $b[0]..$b[-1]
 }
}
@t = sort{$h{$b} <=> $h{$a}} @s;
printf "$_: %d\n", $h{$_}//0 for @t;

実行結果
https://ideone.com/r4tBGc

114 名前:デフォルトの名無しさん mailto:sage [2020/04/09(Thu) 10:38:42 ID:Sx5ouxFp.net]
>>106
話題そらそうと粘着君が必死だねwww負け組だっさwww

115 名前:デフォルトの名無しさん [2020/04/09(木) 12:42:58.73 ID:5swiwcjH.net]


116 名前:デフォルトの名無しさん mailto:sage [2020/04/09(Thu) 15:48:38 ID:pqMoXxyo.net]
荒らしは必ず、2回書き込む。
「そうだよね」とか、同意するレスを付けて、人数が多いように見せる

くだすれPython(超初心者用) その47【Ruby禁止】

Ruby禁止とか、色々なスレのタイトルを勝手に変える

工学部というコテハンだろ。
ソースコードを書かないし、プログラマーじゃないから相手をしないように!

117 名前:デフォルトの名無しさん mailto:sage [2020/04/09(木) 16:48:05.84 ID:G208HopB.net]
>>113
そのスレは別のスレであり話題としてスレ違い。
そもそもそれらのスレでRuby禁止と付けられる原因を作っているお前が言うな。
お前こそコテハンをつけるか書き込みをやめるかしろよ。

118 名前:デフォルトの名無しさん mailto:sage [2020/04/09(Thu) 16:59:35 ID:EoH4bsm+.net]
>>113
悔しいんでしょwwそうゆう風にいつまでも負け惜しみ言ってなよwww

119 名前:デフォルトの名無しさん [2020/04/10(金) 15:52:58 ID:FxL3k9Tv.net]
>>110
コード短いね

120 名前:デフォルトの名無しさん mailto:sage [2020/04/10(金) 15:53:17 ID:FxL3k9Tv.net]
ageてしまった



121 名前:デフォルトの名無しさん [2020/04/10(金) 17:33:36 ID:gIxx/WN6.net]
気にすんな

122 名前:デフォルトの名無しさん [2020/04/10(金) 17:34:13 ID:GWaBtrPd.net]
age禁止ってまだやってんの?

123 名前:デフォルトの名無しさん mailto:age [2020/04/10(金) 17:42:36 ID:7f4O8kzL.net]
非常事態を宣言します

124 名前:デフォルトの名無しさん [2020/04/10(金) 20:50:54 ID:gIxx/WN6.net]
このスレは放っておくとすぐ過疎っちゃうんだからむしろもっともっと激しくテッテ的にage続けるべきだ。

125 名前:デフォルトの名無しさん [2020/04/11(土) 00:56:36 ID:qHx8Q1G9.net]
>>110
for (´・ω・`) {
}

126 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 01:07:31 ID:Rbw4pROQ.net]
>>106 Python
https://ideone.com/BUavn0

127 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 01:11:10 ID:fnqXUaLM.net]
(><)

128 名前:デフォルトの名無しさん [2020/04/12(日) 00:40:37.82 ID:j0O/fDVx.net]
>>106
Java
https://paiza.io/projects/vxSOQ88rVG6rpipq_1HAxw

129 名前:デフォルトの名無しさん [2020/04/13(月) 23:30:53.99 ID:+Sqc38Tr.net]
>>106
Kotlin
https://paiza.io/projects/HAl3vl4Eq9slJCfOWogfBA

130 名前:デフォルトの名無しさん [2020/04/14(火) 00:06:26.40 ID:hs9mI5+o.net]
>>106
Kotlin
正規表現使わない版
https://paiza.io/projects/HN7v3_Noc9-TkctmYCk5xA
更に最初から SortedMap に入れるようにした。



131 名前:デフォルトの名無しさん [2020/04/14(火) 01:39:02.43 ID:hs9mI5+o.net]
>>106
C
https://paiza.io/projects/1bl_PaKjDj3WaMhCIZG0eQ

やっぱCで標準のライブラリしか使わないと長くなるな。

132 名前:デフォルトの名無しさん [2020/04/14(火) 01:44:11 ID:cZOfM+S5.net]
if(m[n]==null) m[n]=1
の部分と三項演算子の部分の後分は機能が被ってませんか?

133 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 12:04:01 ID:ZuF0W/s6.net]
>>61 Perl5、正規表現を使った文字列処理ではなく、数値のリストに対する処理として書いてみた

sub f {
 my @s;
 while (my $e = shift) { push @s, $e }
 @_ ? (@s ? (\@s, f(@_)) : f(@_)) : \@s;
}
sub g { @_ > 2 ? "$_[0]-$_[-1]" : @_ }
for ([1], [2,3], [1,2,3], [1,3], [1,3,4,5], [7,9]) {
 @a = ();
 @a[@$_] = @$_;
 @b = f @a;
 @c = map{g @$_} @b;
 $"=',';
 print "[@$_] -> '@c'\n";
}

実行結果
~ $ perl 17_61_resanc_0414fp.pl
[1] -> '1'
[2,3] -> '2,3'
[1,2,3] -> '1-3'
[1,3] -> '1,3'
[1,3,4,5] -> '1,3-5'
[7,9] -> '7,9'

134 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/04/14(火) 12:53:55 ID:QRiFiZHs.net]
お題: 整数の閉区間がいくつか与えられる。
それらの和集合を求め、それをいくつかの閉区間で出力せよ。
出力の閉区間の個数はなるべく少なくすること。

(

135 名前:例)
[1, 5], [2, 6], [-1, 10] ==> [-1, 10].
[2, 3], [3, 4], [7, 10] ==> [2, 4], [7, 10].
[]
[ここ壊れてます]

136 名前:デフォルトの名無しさん [2020/04/14(火) 14:56:59.99 ID:vknfd45S.net]
>>129
三項演算子ではない(Kotlinには三項演算子はない)。?: はエルビス演算子で、左側の式が null だったら右側の値を使うというやつ。nullでなければそのまま左側の値を使う。

で、その部分は先頭のレス番号のキーがまだ作られてなかったら0で初期化する部分だ。

m[n] = m[n] ?: 0

とも書けるが、これは何か無駄な感じがする。nullでなければ同じ値の代入になるので。だからifで必要な時だけの代入(初期化)にした。

137 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 15:14:57 ID:U0kTSrBw.net]
>>131 Perl5

sub f {
 my @s;
 while (defined (my $e = shift)) { push @s, $e }
 @_ ? (@s ? (\@s, f(@_)) : f(@_)) : \@s;
}
sub g { map{"[$$_[0],$$_[-1]]"} @_ }
for ([[1, 5], [2, 6], [-1, 10]],
   [[2, 3], [3, 4], [7, 10]]) {
 %h = map{$_ => $_} map{$$_[0]..$$_[1]} @$_;
 @k = sort{$a <=> $b} keys %h;
 @l = f map{$h{$_}} $k[0]..$k[-1];
 $"=',';
 @j = g @$_;
 @k = g @l;
 print "@j ==> @k\n";
}

実行結果
~ $ perl 17_131_intrange.pl
[1,5],[2,6],[-1,10] ==> [-1,10]
[2,3],[3,4],[7,10] ==> [2,4],[7,10]

138 名前:デフォルトの名無しさん [2020/04/14(火) 15:35:48 ID:cZOfM+S5.net]
>>132
なるほど。ありがとうございます。

139 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 17:17:14 ID:h96nPay3.net]
数式を標準入力から与えられる。
計算結果を出力しなさい。

条件
・数式の長さが1000を超える場合や、不正な数式についてはErrorと出力すること
・整数を出力しなさい
・小数点が出る場合は切り捨てた値を出力すること
・eval禁止
・数式に利用できる文字 0123456789+-*/()
・数式に半角スペースは含まれない

140 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 17:45:13.26 ID:SdOMVfQl.net]
>>135 数式のサンプルよろ



141 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 17:50:15.21 ID:OuRgqSbO.net]
100/2(3+4)
はいくつですか?

142 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 17:56:57 ID:7oi1O/kb.net]
>>137
*が省かれているからErrorとする
あるいは100/2*(2+3)とみなして250
じゃまいか

143 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/04/14(火) 19:35:28 ID:Ozse1OSh.net]
お題: CD/DVDドライブのトレイを開きなさい。

144 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 19:48:22 ID:rsqvGSlE.net]
>>135 Ruby

eval gets rescue $><<:Error

145 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 19:50:23 ID:rsqvGSlE.net]
typo

p eval$_ rescue$><<:Error while gets

146 名前:デフォルトの名無しさん [2020/04/14(火) 20:13:52.06 ID:AV9/Nsy0.net]
>>139
言語:日本語
実行:日本人

CD/DVDドライブのトレイを開きなさい。

147 名前: mailto:sage [2020/04/14(火) 20:35:51.72 ID:42R+WK0w.net]
>>142
言語:日本語
実行:日本語を理解する人

の方が正確ですね

148 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 22:24:45 ID:8w/NVh3l.net]
>>139 Python

import ctypes
ctypes.windll.WINMM.mciSendStringW(u"set cdaudio door open", None, 0, None)

149 名前:デフォルトの名無しさん [2020/04/15(水) 01:04:36.72 ID:RHvlA1sV.net]
三項演算子ないとかゴミだな

150 名前:デフォルトの名無しさん [2020/04/15(水) 12:23:24 ID:229B67vy.net]
>>131 js

let input = [[2, 3], [3, 4], [7, 10]];

let result = input.reduce((merged, range) => {
let under = range.map(n =>
merged.filter(mrange => mrange[0] <= n && n <= mrange[1])[0]||[]);

let extended = [under[0][0] || range[0], under[1][1] || range[1]];

let bored = merged.filter(mrange => !(extended[0] <= mrange[0] && mrange[1] <= extended[1]));

return [...bored, extended];
}, []);

console.log(result);



151 名前:デフォルトの名無しさん [2020/04/15(水) 12:57:38 ID:qoEmvMwd.net]
>>135 F#
https://ideone.com/7RMvKQ

152 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 15:02:35.67 ID:3oL83xUj.net]
>>145 Perl5、再帰降下parser generator使わせてもらいました

sub evalop {
 my (@list) = @{$_[0]};
 my $val = shift(@list)->();
 while (@list) {
  my ($op, $arg2) = splice @list, 0, 2;
  $op->($val,$arg2->());
 } $val }
use Parse::RecDescent;
$parse = new Parse::RecDescent(<<'EOG');
 formula: expr /\s*\Z/ {$item[1]->()} | <error>
 expr: <leftop:muldiv add_op muldiv> {sub {::evalop $item[1]}}
 add_op: '+' {sub {$_[0] += $_[1]}} | '-' {sub{ $_[0] -= $_[1]}}
 muldiv: <leftop:factor mult_op factor> {sub {::evalop $item[1]}}
 mult_op: '*' {sub {$_[0] *= $_[1]}} | '/' {sub {$_[0] /= $_[1]}}
 factor: number | '(' expr ')' {$item[2]}
 number: /\d+/ {sub {$item[1]}}
EOG
for (<DATA>) {
 chomp;
 $ret = defined ($iret = $parse->formula($_)) ? sprintf('%d', $iret) : 'Error';
 printf "$_ = %s\n", $ret;
}
__DATA__
1+2*((3-4*5)/6+7)*8-9
100/2(3+4)
100/2*(3+4)
*10
1/3*3






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef