プログラミングのお題スレ 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/09/06(日) 10:30:03.37ID:r+7yP+3C
>>465
>>466
これって二つとも総当たりで解いてる?
そうすると最悪3^(10^5)くらいの回数廻さないといけなくない?
475デフォルトの名無しさん
垢版 |
2020/09/06(日) 10:58:30.52ID:5MBR0P77
1京くらいのループで解けるなら実用性はかろうじてある
競技性は無い
2020/09/06(日) 11:04:38.70ID:OF7UMaiS
最悪でも2^n組みしかなくね
2020/09/06(日) 11:07:12.07ID:uXWEOXeO
>>465 はlast_time(10^5)回のループの中でCOL(10)回ループ入れてるし、10^6では?
2020/09/06(日) 11:29:22.40ID:r+7yP+3C
>>476
いや,総当たりなら,3^(10^5)。
時刻が1--10^5までの間に,
「留まる」「右/左に移動する」の計3通りを
互いに独立に(以前の行動に影響されずに)
行うから。

書いていて思ったけど,端に居るときは
行動可能性が2通りに減るけど,
それでも2^N通りでは済まない。
479253
垢版 |
2020/09/06(日) 12:24:42.87ID:cAaPNRIA
>>474

>>466>>380への回答なので
その計算量の推定議論には該当しません
2020/09/06(日) 12:31:12.27ID:OF7UMaiS
>>478
1人が満足することで1点得るとする
点数の最大値は入力されたnの数しかないからn点で
それぞれについて1点得るか得ないかの2^nしかない
あとはそれを実現できるか移動があるかどうかが焦点になる
なので全移動経路を総当りする必要性はない
2020/09/06(日) 13:12:26.24ID:GcXxHJb3
>>469 C++
#include <iostream>
int main(){
const int d = 4999;
int n = 1;
std::cout << "0b0.";
for( int i = 1; i <= 48; ++ i ){
n <<= 1;
if( n >= d ){
n -= d;
std::cout << '1';
} else {
std::cout << '0';
}
}
std::cout << std::endl;
return 0;
}
// STDOUT
0b0.000000000000110100011100000111010100101011010001
2020/09/06(日) 13:48:19.34ID:r+7yP+3C
>>480
I see! Thanks.
2020/09/06(日) 15:12:48.21ID:JPL9qi8o
>>480
2^nも必要ないよ
それぞれの時刻でホストが取れる状態はどのマスにいるかということだけ
だから時刻xマスの数が全状態数
2020/09/06(日) 15:20:10.24ID:JPL9qi8o
でその状態数の方が全経路数より圧倒的に少ないので
経路に沿ってではなくて状態について解いていく
485デフォルトの名無しさん
垢版 |
2020/09/06(日) 16:31:54.76ID:SNogxihD
>>469
Java
https://paiza.io/projects/h9FWf0PGwBt60EOR_U48YA
2020/09/06(日) 16:34:17.02ID:r+7yP+3C
>>483
ん?
ホストは隣合うマスにしか移動できないから,
単純にその場面での状態を考えるだけでは駄目なんでは?
2020/09/06(日) 16:57:26.53ID:JPL9qi8o
だから遡って計算していくときは隣り合うマスの結果しか参照しないよ
488デフォルトの名無しさん
垢版 |
2020/09/06(日) 17:01:50.06ID:SNogxihD
>>453
Java
https://paiza.io/projects/IpbujQ_C5ZYHEAYAbnRtzQ
2020/09/06(日) 17:02:55.61ID:JPL9qi8o
>>465のコードは多分バグがある気がする

51行目と57行目を
a = score[j-1] + bit_test(timeline + i, j);
a = score[j+1] + bit_test(timeline + i, j);
こう変えて
43行目を
for(i = last_time-1; i >= 0; i--){
こうするのが正しいと思う
490253
垢版 |
2020/09/06(日) 18:02:02.21ID:EhLQImvS
>>454 Perl5、人の訪問を待ち受け得るすべての場合を愚直に総当りで最大満足数を探す

$T = <DATA>;
use feature qw{signatures say}; no warnings 'experimental';
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p, $s) {
 if ($t++ < $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep/$p/, @{$p{$t}};
   $s += max(f($t, $p-1, $s), f($t, $p, $s), f($t, $p+1, $s))
  }
  return $s
 }
0
}
say f(0, 1, 0);
__DATA__
5
5 4
2 3
3 2
3 4
4 4

~ $ perl 18_454_N_vztr.pl
4
2020/09/06(日) 18:12:25.67ID:OF7UMaiS
>>454
python
https://ideone.com/5qz7G8
満足させる人数の多い順から実現可能か探索する
既に不可能だと分かっている移動が含まれる場合は直ちに打ち切る
2020/09/06(日) 18:13:41.84ID:65q5IvB9
>>490
perl読めないから間違ってたらごめんだが、
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
の入力で20を返してくる。(答えは5)
493253
垢版 |
2020/09/06(日) 18:20:26.24ID:EhLQImvS
>>492
はい、バグってました。投稿してから気がついた
時間あったら直します
494253
垢版 |
2020/09/06(日) 19:04:52.54ID:EhLQImvS
>>490 Perl5、>>489 のBug Fix、同じ所を何度も通るので漸化式かメモ化使って動的計画法で解けるようにできるかもしれない

use feature qw{signatures say}; no warnings 'experimental';
$T = <DATA>; chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p) {
 my $s = 0;
 if ($t <= $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep{$_ eq $p} @{$p{$t}};
   $t++;
   $s += max(f($t, $p-1), f($t, $p), f($t, $p+1));
  }
 }
 $s
}
say f(0, 1);
__DATA__
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
495253
垢版 |
2020/09/06(日) 19:13:46.76ID:EhLQImvS
>>494 誤記スマソ
× >>489 のBug Fix
>>490 のBug Fix
496465
垢版 |
2020/09/06(日) 20:59:44.84ID:I1QXsub5
>>489
ご指摘の通りバグってたので再投稿します。
https://ideone.com/VxDLwz

やりたかったことは>>456が言っていることと全く同じです。
イメージとしてはhttps://imgur.com/j0azhSf.jpg (※お題を考えたい人は閲覧注意)
>>465のコードは大抵の場合なぜかうまくいくコードのようです。
497253
垢版 |
2020/09/06(日) 21:09:12.93ID:loE/lDca
>>454 Perl5、>>494 を動的計画法で解くように改良(但し再帰呼び出しを使っているので10^5など規模が大きい問題を解くなら下から上に計算してくる単純ループに書き換えた方が良い)

no warnings 'experimental';
use feature qw{signatures say};
$T = <>;
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<>;
use List::Util 'max';
sub f($t, $i) {
 my $s = 0;
 if (0 < $i and $i < 11) {
  return $m[$t][$i] if defined $m[$t][$i];
  $s++ if grep{$_ == $i} @{$p{$t}};
  $s += max(f($t+1, $i-1), f($t+1, $i), f($t+1, $i+1))
   if $t < $T;
  $m[$t][$i] = $s;
 }
 $s
}
say f(0, 1);
498253
垢版 |
2020/09/06(日) 21:11:43.16ID:loE/lDca
>>497 の実行結果

~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | perl 18_454_N_vztr_DP_rec.pl
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | perl 18_454_N_vztr_DP_rec.pl
5
499253
垢版 |
2020/09/07(月) 00:59:21.14ID:5qB4CD7g
>>469 Perl5、小数点以下48桁で「丸め」

use bignum(p=>-48);
print 1/4999, "\n";


実行結果
$ perl 18_468_1_4999-48p.pl
0.000200040008001600320064012802560512102420484097
500453
垢版 |
2020/09/07(月) 18:47:15.23ID:IF51aHwX
>>453
Elixir

ary = for << byte <- "あaθ💀xΩ死🄫" >> do # 1バイトずつ、ループ
<< nibble::size( 4 ), _::size( 4 ) >> = << byte >> # 先頭の4ビット

case nibble do
n when n in 0..7 -> 1
n when n in 8..11 -> 0
n when n in 12..13 -> 2
14 -> 3
15 -> 4
end
end

res = Enum.reject( ary, fn n -> n == 0 end ) # 0 を削除する
IO.inspect res
# [3, 1, 2, 4, 1, 2, 3, 4]

IO.puts( length res ) # 8文字
IO.puts( Enum.sum res ) # 20バイト
501デフォルトの名無しさん
垢版 |
2020/09/08(火) 22:13:29.34ID:r41CjiKh
>>169
Java
https://paiza.io/projects/PnHRZftzs0HY5QfVuWDFxQ
502253
垢版 |
2020/09/08(火) 23:15:40.17ID:TMzoRSJV
>>454 go 動的計画法

package main
import ( "fmt" )
var m [][]int
func v(t int, p int) int {
 if 1 <= p && p <= 10 { return m[t][p] }; return 0 }
func max3(n1 int, n2 int, n3 int) int {
 n := n1; if n < n2 { n = n2 }; if n < n3 { n = n3 }; return n }
func main() {
 var n, t, p, i, T int
 fmt.Scan(&n)
 var a [][]int = make([][]int, n)
 for i=0; i<n; i++ {
  fmt.Scanf("%d %d", &t, &p)
  a[i] = []int{ t, p }
  if t > T { T = t }
 }
 m = make([][]int, T+1)
 for t=0; t<=T; t++ {
  m[t] = make([]int, 11)
  for p=1; p<=10; p++ { m[t][p] = 0 }
 }
 for i=0; i<n; i++ { m[a[i][0]][a[i][1]] = 1 }
 for t=T-1; 0<=t; t-- {
  for p=1; p<=10; p++ {
   m[t][p] += max3(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
  }
 }
 fmt.Println(m[0][1])
}
503253
垢版 |
2020/09/08(火) 23:16:27.70ID:TMzoRSJV
>>502 の実行結果

~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | go run 18_454_N_vztr_DP.go
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | go run 18_454_N_vztr_DP.go
5
504253
垢版 |
2020/09/09(水) 09:03:14.92ID:GqQ7+Mc6
>>454 Python3

n = int(input())
a = [list(map(int, input().split())) for i in range(n)]
T = max([a[i][0] for i in range(n)])
m = [[0] * 11 for t in range(T+1)]
for i in range(n):
   m[a[i][0]][a[i][1]] = 1
def v(t, p):
  return m[t][p] if 0 < p and p < 11 else 0
for t in reversed(range(T)):
  for p in range(1, 11):
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
print(m[0][1])


実行結果 (>>503 と同じテキストファイル 18_454_ex1.txt, 18_454_ex2.txt を入力に使用)
~ $ cat 18_454_ex1.txt | python 18_454_N_vztr_DP.py
4
~ $ cat 18_454_ex2.txt | python 18_454_N_vztr_DP.py
5
505253
垢版 |
2020/09/09(水) 09:34:15.87ID:GqQ7+Mc6
>>504
  for p in range(1, 11):
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))

  for p in range(1, 11):
    if t+1 < p: continue
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
とか書くと、右上三角の不要な計算を省けるが10^5などtが大きいと大勢に影響はないな…
506デフォルトの名無しさん
垢版 |
2020/09/10(木) 01:27:25.37ID:8z9ZctT6
>>350
Java
https://paiza.io/projects/o_tTbIG0iHXwP75rs5ayzQ
507453
垢版 |
2020/09/10(木) 16:14:51.93ID:ypm5ktrY
お題

>>453
のルールに基いて、以下の3つの10進数のバイト列を、先頭(1バイト目)からチェックしていく時、
最初にルール違反となるのは、何バイト目か

129 130
120 169
240 159 146 206 184
508デフォルトの名無しさん
垢版 |
2020/09/10(木) 22:23:57.36ID:8z9ZctT6
>>507
Java
https://paiza.io/projects/CZXrL_xceE8JIzpnqc9uCA
2020/09/12(土) 21:24:36.97ID:2KEhs3KT
お題:自然数nが現れる九九の表の最小サイズを求めよ

octave
https://ideone.com/JyIBOD
510デフォルトの名無しさん
垢版 |
2020/09/13(日) 00:20:13.60ID:OR+CcCGz
>>509
Java
https://paiza.io/projects/brUcg8fsPPrD3ERaUkVOUA
511デフォルトの名無しさん
垢版 |
2020/09/13(日) 00:35:46.34ID:42xWDo9L
>>509
Kotlin
https://paiza.io/projects/SEi0xU2p5t0WDBvQdAUh3A

良いアルゴリズムが思いつかなかったのでほとんど力技。
2020/09/13(日) 22:12:25.49ID:p9JSm0uj
お題: 「ジャンケンすたじあむ オンライン」というソーシャルゲームのウェブサイト、もしくはソフトウェアパッケージを制作・運営せよ。

ジャンケンをしたい人が集まって、ひたすらジャンケンをして、勝ち数を競うというソーシャルゲーム。

ジャンケン試合は2人組になり、お互いに出す手を事前に申告し、両者が申告したところでシステムが自動で勝敗を判定する。
2020/09/13(日) 22:17:50.99ID:phcl8RYj
>>512
消えろ
514デフォルトの名無しさん
垢版 |
2020/09/13(日) 22:22:25.86ID:lu6eiMc4
動的計画法ってちゃんと勉強しないとなかなか思いつかないよな
2020/09/14(月) 12:06:08.48ID:u8/qg5cq
>>509
Haskell

f x = head [ d | d <- [(ceiling $ sqrt $ fromInteger x)..], mod x d == 0]
main = mapM_ print [(x,f x) | x<-[100..130]]
2020/09/14(月) 14:12:59.44ID:/Fwk/gkb
お題: 沖縄の名物「シークワーサー」のことが書かれた記事のUTF-8日本語テキストファイル「input.txt」がある。
しかし、記事の執筆に多数の編集者が関わったため、シークワーサーの表記がぶれていることが分かった(次のリンクを参照)。

https://ja.m.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AE%E3%83%BC%E3%82%B5%E3%83%BC

表記のぶれを「シークワーサー」に表記を統一したテキストファイル「output.txt」を出力せよ。
517デフォルトの名無しさん
垢版 |
2020/09/14(月) 17:05:19.85ID:xV8mpaUY
エンジニアが書いてるならシークワーサだな
間違いない
2020/09/14(月) 17:29:10.23ID:yesAwSRz
>>516 input.txtの中身:

「シークヮーサーは、別名シイークワシャーと呼ばれ、シークヮーサーの香りがするシークヮーシャーのような柑橘系の果物である。シィークアーサーはアーサー王とは関係がないと思われる。」
2020/09/14(月) 18:00:53.92ID:wBiJ2Dx0
"/シ(?:イ?ー|ィー?)ク[アワァヮ]ー?(?:サ|シャ)ー?/シークヮーサー/g"
2020/09/14(月) 20:32:57.79ID:/Fwk/gkb
お題: お使いのプログラム言語で、COBOLに負けない最強の通貨型を設計せよ。

任意の桁数の10進整数を扱えること。
任意の有効桁数の10進小数を扱えること(10進浮動小数点数)。
加減乗除、剰余、任意桁での切り捨て・切り上げ・四捨五入が可能。
10進数表記で入出力できること。
比較的高速に演算できること。
2020/09/14(月) 20:55:28.62ID:/Fwk/gkb
1÷3をどう扱うかという問題があるようだ。
522デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:04:18.95ID:I0h6BMX6
割り算するときに桁数していするだけっしょ
523デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:07:19.27ID:I0h6BMX6
蟻人間さんにお題:銀行丸めを整数型のみを使用して実装してください
2020/09/14(月) 21:08:24.84ID:SHGAz9ig
>>517
2020/09/14(月) 21:24:52.09ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
2020/09/14(月) 21:26:17.95ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
2020/09/14(月) 21:49:38.28ID:SHGAz9ig
分子や分母に分数が入ってきた場合
精度の面で面倒なことになるぞ
2020/09/14(月) 23:12:41.48ID:yesAwSRz
>>523

https://ideone.com/sRja3A
今日はここまで。
2020/09/14(月) 23:41:27.65ID:5nyvo7WN
>>528
一生ここまでにしろ
530デフォルトの名無しさん
垢版 |
2020/09/15(火) 00:21:13.43ID:2J2Mo0F/
>>516

sed -r 's/シ([イィ]ー?|ー)ク[アァワヮ]ー?(サ|シャ)ー/シークワーサー/g'

-r は拡張正規表現を使うオプション。
これで >>518 の文を変換するとこうなる。

「シークワーサーは、別名シークワーサーと呼ばれ、シークワーサーの香りがするシークワーサーのような柑橘系の果物である。シークワーサ ーはアーサー王とは関係がないと思われる。」
2020/09/15(火) 02:31:45.89ID:39uvi0pE
現実問題では、long double型で十分な精度が出るから、独自の浮動小数点数は必要なさそう。

残りは四捨五入とか銀行丸めなどの端数処理。
2020/09/15(火) 09:10:08.88ID:gc4PCUOV
工エエェェ(´д`)ェェエエ工
2020/09/15(火) 14:07:27.97ID:2J2Mo0F/
bc コマンド使えば良い。
他の言語から使いたい場合はライブラリをリンクするか、またはこっそり裏で fork(), exec() してパイプで繋いで計算させるw
2020/09/15(火) 21:40:23.58ID:9dtbuAF3
>>528
https://github.com/katahiromz/Currency
今日はここまで。足し算、引き算、掛け算を実装。
銀行丸めはもうちょっと待ってね。
2020/09/15(火) 21:59:54.94ID:ky+PawN1
>>534
誰も待ってないから一生滞ってろ
2020/09/15(火) 22:50:58.78ID:i370J0Ri
>>535
スレチ
2020/09/15(火) 22:54:46.37ID:i370J0Ri
>>535
とりあえずまあソースコードを読んで頂いてクレヨン。
2020/09/15(火) 22:56:56.50ID:ky+PawN1
ここはお前の日記帳じゃねぇっての
スレチはお前
2020/09/16(水) 10:06:16.52ID:eJDvfDFO
ぶぶ漬けどうぞと言われて、美味しくいただいてさらに食レポまで始めてるような状態かな
2020/09/16(水) 21:28:53.90ID:XXyygoNj
嫌味なことするなよ
2020/09/17(木) 00:07:22.39ID:jOQPl4C7
京都のおっかさんも口あんぐりやで
2020/09/17(木) 01:09:05.65ID:FJaokp+J
>>520 Python decimal でできるだろ。

https://docs.python.org/ja/3/library/decimal.html
543デフォルトの名無しさん
垢版 |
2020/09/17(木) 07:37:06.63ID:Lu9ZyyRf
お題: (複数行のバックグラウンド、座標テキスト、座標)から合成テキストを返す関数を作れ
座標テキストとバックグラウンドは同じサイズ(とりあえず横4縦3とする)

background
┏┓┏┓
┃┗┛┃
┗━━┛

座標テキスト
ab23
9014
8765

座標が
0なら
┏┓┏┓
┃*┛┃
┗━━┛
6なら
┏┓┏┓
┃┗┛┃
┗━*┛
11なら
┏*┏┓
┃┗┛┃
┗━━┛
あまり綺麗な実装が出来なかったから問題にした https://repl.it/@vip0/analogclock#index.js
2020/09/17(木) 08:03:03.74ID:dVFtUKnH
>>543 Ruby
def analogClockStr( h, bg, positions )
(clockStr = bg.dup)[ positions.index( h.to_s(16) ) ] = '*'
clockStr
end

background = '
┏┓┏┓
┃┗┛┃
┗━━┛
'.strip.freeze

positions = '
ab23
9014
8765
'.strip.freeze

puts analogClockStr( 0, background, positions )
puts analogClockStr( 6, background, positions )
puts analogClockStr( 11, background, positions )
2020/09/17(木) 08:08:23.20ID:Lu9ZyyRf
げっ確かに行ごとにreplace必要ないじゃん
何やってんだ俺
ありがとう
546デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:17:16.17ID:GTUBgTcD
>>543
問題の意味がわからない。
2020/09/17(木) 13:30:29.78ID:/h1W7gqa
>>543
くだらない質問スレか初心者質問スレ行け
2020/09/17(木) 13:34:08.96ID:Lu9ZyyRf
ほんとにどの問題よりもクソみたいな問題だと思っています
本当にすいませんでした
2020/09/17(木) 13:42:30.73ID:Lu9ZyyRf
ただ私は純粋にプログラミングが好きで
全く質問したかったわけじゃないのはわかってほしい
二次配列じゃないと処理できないものだと勘違いしていたのが甘いしシンプルにしすぎて問題が破綻してしまった
2020/09/17(木) 13:48:33.25ID:Lu9ZyyRf
純粋にここにいる人たちが解法として書くコードは好きだし
たまに驚くべき角度から解を出す人もいるしマイナーなアルゴリズムも知れて尊敬してる
今回もスマートなコードが見れるんじゃないかと純粋に期待して問題にしてみたんだ
スレも今流れ遅かったし
2020/09/17(木) 13:50:39.09ID:Lu9ZyyRf
しかしお前らは牙を向いた
純粋に問題作成初心者の心を無碍にして
鋭い刃のような言葉を投げつけてきた
お前らは今日から敵とみなす

あばよ😎✋絶望しな
2020/09/17(木) 19:40:19.09ID:+AujTTfU
>>551
奏ちゃん「自意識過剰なんじゃないですか?」
553デフォルトの名無しさん
垢版 |
2020/09/17(木) 22:33:12.99ID:H8Ldt8Jg
お題:文字列の末尾の数字をインクリメントしてください

入力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS
出力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
2020/09/17(木) 22:56:25.54ID:ockp6LF+
>>553 vim

?\d<CR><C-a>
2020/09/17(木) 23:01:20.65ID:ockp6LF+
>>553 Ruby

$><<gets.sub(/\d+(?=\D+$)/, &:succ)

# => IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoim
M3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOn
xhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfP
sQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuu
UBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
556デフォルトの名無しさん
垢版 |
2020/09/18(金) 01:44:05.02ID:hhldwLbP
>>553
Perl

コマンドラインで以下のように入力後に標準入力から文字列を読ませると標準出力に出力される。

perl -pe 's/(\d+)(\D+)$/($1+1).$2/ge'

あるいはファイルに内容を入れておいてそのファイルを指定する。
2020/09/18(金) 03:22:29.90ID:Pz26zoiQ
js
window.prompt().replace(/\d(?=\D+$)/,i=>i*1+1)
2020/09/18(金) 06:23:31.29ID:QICqPxzN
>>556
行末が数字のときに対応できない
perl -pe 's/(\d+)(\D*)$/($1+1).$2/e'
のほうがよくないかな
2020/09/18(金) 06:53:31.48ID:5l49iFOd
>>511
その場合の良いアルゴリズムって
「素因数分解を早く解くアルゴリズム」
よね。
それがもし思いついたらフィールズ賞ものではw
560デフォルトの名無しさん
垢版 |
2020/09/18(金) 21:10:31.47ID:JxxZTRpA
>>553
Java
https://paiza.io/projects/X0KHD9cQEH8LTka6nmDd_w
561デフォルトの名無しさん
垢版 |
2020/09/18(金) 21:36:05.11ID:JxxZTRpA
>>544
Java
https://paiza.io/projects/ka8qfAJFIag1eovg263vzg
2020/09/18(金) 21:54:28.27ID:WsEcPr9A
>>553
haskell

theStr = "B0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS"

f x = let
(a,b) = span (\x-> (x<'0') || (x>'9')) $ reverse x
c = show $ (+1) $ read $ return $ head b
in reverse $ a++c++(tail b)

main = do
print $ f theStr
563デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:21:52.09ID:hhldwLbP
>>558
そうだった。 + じゃなくて * だったな。
564253
垢版 |
2020/09/18(金) 23:34:45.95ID:/yEGF/vF
>>559
素因数分解まで行かない。
素でなくてもいいので因数のうちイチバン大きいもの。
なんかいい解法見つけられないか、考えているけどいまのところ見出せていない
565253
垢版 |
2020/09/18(金) 23:36:27.35ID:/yEGF/vF
いや、違うな…
因数のうちイチバン大きいものでは、ダメだわ
566デフォルトの名無しさん
垢版 |
2020/09/19(土) 00:05:40.30ID:HLFklpM8
>>553
C

https://paiza.io/projects/IEDhYc83EDXZuCbsxf_QUg

正規表現を使わずに行末から一文字づつ行頭に向かって検索してやっている。
2020/09/19(土) 00:59:21.89ID:HX0Lirqs
√n以上の最小の約数
2020/09/19(土) 12:14:05.54ID:iLwsU5Ay
初出題
数学板の問題より

5つのサイコロの1〜6の面がそれぞれ赤白黄青緑にそれぞれ

["byrbwg", "yrgwbb", "gbrwwy", "gyrbww", "gbrybw"]

と塗り分けられている
この状態では1-6を天地の軸として2〜5の側面にはそれぞれ

["yrbyb","rgrrr","bwwby","wbwwb"]

となっている
それぞれのサイコロを適当に回転させて全ての側面にrwybgがちょうど一回ずつとなるようにしたい
そのような回転の組み合わせは何通りか
本質的に同じものを重複して数えるのを避けるために最初のサイコロの回転は
・動かさない
・1→2,2→3,3→1,4→6,5→4,6→5
・1→3,2→1,3→2,4→5,5→6,6→4
の3つのうちどれかのみを許すとする
(出力)
["yrbgbw","gbybrw","bgwryw","bygwwr","bwrygb"]
["yrbgbw","gbybrw","wywrgb","rwgwyb","bgrywb"]
["rbywgb","gyrbbw","wwgyrb","ygbrww","brwgyb"]
["rbywgb","wybrbg","wwgyrb","wgrbwy","brwgyb"]
2020/09/19(土) 15:12:41.86ID:BWMKzapi
https://rio2016.5ch.net/test/read.cgi/math/1598637093/133-
わけわからん問題文にするなよ・・・
2020/09/19(土) 16:07:21.18ID:wSOXcncc
全然違って草
571デフォルトの名無しさん
垢版 |
2020/09/19(土) 16:29:35.90ID:HLFklpM8
>>568
君が何を言わんとしているのかが全くわからない。
572253
垢版 |
2020/09/19(土) 17:15:41.66ID:6KnxgpBj
>>509 Perl5、>>567にヒントを貰った通り√を使ってnaiveに書くと…

use POSIX 'ceil';
for $n (81, 87, 91) {
 $r = ceil sqrt $n;
 for ($r..$n) {
  $i = $_;
  last until $n % $_;
 }
 print "$n => $i\n"
}

実行結果
~ $ perl 18_509_99_naive.pl
81 => 9
87 => 29
91 => 13

計算量の少ないもう少しカッチョイイ方法を見出せればなぁ…
2020/09/19(土) 21:37:57.70ID:HX0Lirqs
>>568です
やはりちょっと伝わらないですね
>>568
は取り下げます
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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