X



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

0001デフォルトの名無しさん
垢版 |
2023/08/03(木) 13:52:13.20ID:/xW45k0z
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part21
https://mevius.5ch.net/test/read.cgi/tech/1668333636/
0335デフォルトの名無しさん
垢版 |
2024/04/18(木) 22:55:38.47ID:n9UdHBZN
総合すると有効桁じゃなくて精度が2桁良いし実装上は大差ないから改良版を使う、と言う方が自然では?
0336デフォルトの名無しさん
垢版 |
2024/05/01(水) 12:56:47.83ID:nIC3qyB/
スレ落ちそうなのであげ
0338デフォルトの名無しさん
垢版 |
2024/05/01(水) 22:59:10.72ID:4hNncNW1
何でこんなに過疎化しちゃったのか。前に頻繁に出題していた人がいなくなったのか。
0340デフォルトの名無しさん
垢版 |
2024/05/02(木) 16:59:52.63ID:DPVqLIsI
>>338
お題が出尽くしたってことはあるんじゃないか?
過去のお題拾ってきてそれを投稿すればいいぐらいまでスレが成熟してしまったのでは?
034217
垢版 |
2024/05/02(木) 18:44:04.16ID:LxBZq7I4
>>340
なるほど。それをやるか。
034317
垢版 |
2024/05/14(火) 05:34:03.62ID:ou5vbzLn
じゃあ10年前のこのお題(URLを書くとNGになるようなので書かない)。

プログラミングのお題スレ Part4
115 :デフォルトの名無しさん:2014/06/21(土) 18:36:45.72 ID:/fMJIWig.net

お題:文字列Aを1回以上繰り返した文字列Bが与えられたとき
文字列Aを求める。ただしAの候補が複数ある場合は最短のものとする。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> a
123412312341231234123123412312341231234123 -> 1234123
oxoxoxoxoxoxoxoxxoxoxoxoxoxoxoxoxx -> oxoxoxoxoxoxoxoxx
0346 警備員[Lv.18]
垢版 |
2024/05/23(木) 14:16:50.64ID:zV267ZMC
あれ?どんぐりの都合か?URL書いてあると書けなくなったような?
0347 警備員[Lv.18]
垢版 |
2024/05/23(木) 14:17:56.56ID:zV267ZMC
URLの先頭のhを抜いて書いてみよう。

>>343
Kotlin

こちらは普通に自作したやつ。
ttps://paiza.io/projects/OYy-A5rfKg7RqLzv-DKMIA

こちらは正規表現使ってとても小さくなったやつ。
ttps://paiza.io/projects/jgmtMRDhKfcjYfGAglEl3g
0348デフォルトの名無しさん
垢版 |
2024/06/01(土) 10:16:34.91ID:hzaQXY32
お題: コロン区切りの時分秒の時刻が与えられるので時分秒をそれぞれ掛け算した結果を表示せよ

例:
04:05:06
120
0349デフォルトの名無しさん
垢版 |
2024/06/01(土) 11:08:12.83ID:hzaQXY32
お題: バイト列が与えられる。先頭から解析した場合にバイトが1だったら次の4バイトを読み込んで整数として出力し、バイトが2だったら次のバイトを0が来るまで読み込んで文字列として出力せよ

入力
1 1 0 0 0 2 65 66 67 0 1 128 0 0 0

出力
1ABC128
0352 警備員[Lv.19]
垢版 |
2024/06/02(日) 04:45:03.04ID:yi3OE76t
>>348
Perl

bash のコマンドラインから入力して実行(ワンライナー)

$ perl -ne 'if(/(\d+):(\d+):(\d+)/){print $1*$2*$3,"\n"}else{print"入力エラー\n"}'
1:2:3
6
3:4:5
60
04:05:06
120
$
0354デフォルトの名無しさん
垢版 |
2024/06/03(月) 13:25:02.42ID:21u+58W3
>>348
Windows のPowershell 上で、Ruby の1-liner を使う

末尾の改行を削除して、: で分割して、
文字列を数値型に変換してから、全ての要素を掛ける。
%Q で、ダブルクォーテーションをエスケープする。つまり、split(":")

echo '01:2:09' | ruby -ne 'puts $_.chomp.split(%Q[:]).map(&:to_i).inject(:*)'

18
0356デフォルトの名無しさん
垢版 |
2024/06/07(金) 06:27:47.87ID:ZJzD8UbY
お題:引数sとnを取りシーザー暗号化を行う関数を作れ
sは平文、nはずらす文字数(負数可)、返り値は暗号化後の文字列
同様の関数で「Hello, World!」を暗号化し復号化せよ
0357デフォルトの名無しさん
垢版 |
2024/06/07(金) 09:04:03.36ID:tQi+9x5m
#! ruby

class String
def to_c(n)
if %r|^n|=~n
n=(n.sub(%r|^n|,"").to_i+26)%26
lb=("A".."Z").to_a.join
sb=("a".."z").to_a.join
la=lb[n..25]+lb[0..n-1]
sa=sb[n..25]+sb[0..n-1]
return self.tr(lb,la).tr(sb,sa)
else
return self
end
end
end

p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!"
p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!"
p "Hello,World!".to_c("s") #=>"Hello,World!"
p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!"
p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
0358デフォルトの名無しさん
垢版 |
2024/06/07(金) 09:04:13.66ID:tQi+9x5m
#! ruby

class String
def to_c(n)
if %r|^n|=~n
n=(n.sub(%r|^n|,"").to_i+26)%26
lb=("A".."Z").to_a.join
sb=("a".."z").to_a.join
la=lb[n..25]+lb[0..n-1]
sa=sb[n..25]+sb[0..n-1]
return self.tr(lb,la).tr(sb,sa)
else
return self
end
end
end

p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!"
p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!"
p "Hello,World!".to_c("s") #=>"Hello,World!"
p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!"
p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
0360デフォルトの名無しさん
垢版 |
2024/06/07(金) 23:24:01.54ID:KUK95Vnh
Haskell
範囲外の数値は平文字をそのまま返すこととした。

import Data.Char

cearsar n |(-26) <= n && n <= 26 = map (f n)
where
f x = chr.(+x).ord
cearsar _ = cearsar 0

sample:
ghci> cearsar 50 "Hello, World!"
"Hello, World!"
ghci> cearsar 3 "Hello, World!"
"Khoor/#Zruog$"
ghci> cearsar (-3) "Khoor/#Zruog$"
"Hello, World!"
0361デフォルトの名無しさん
垢版 |
2024/06/07(金) 23:28:58.71ID:KMptjexu
TA = [ * ?\x20 .. ?\x7E ]
TS = TA.join
def caesar( s, n ) s.tr( TS, TA.rotate( n ).join ) end

s = "Hello, World!"
p caesar( s, 0 ) #=> "Hello, World!"
p caesar( s, 1 ) #=> "Ifmmp-!Xpsme\""
p caesar( s, -1 ) #=> "Gdkkn+~Vnqkc "
p caesar( s, 20240607 ) #=> "Jgnnq.\"Yqtnf#"
p caesar( caesar( s, 20240607 ), -20240607 ) #=> "Hello, World!"
p caesar( 'HAL9000', 1 ) #=> "IBM:111"
03629
垢版 |
2024/06/11(火) 14:41:10.23ID:NjINqn/m
>>348 Perl5

($x = '04:05:06') =~ s/:/*/g;
print eval $x;
03639
垢版 |
2024/06/13(木) 14:34:57.00ID:XgNTPGgf
>>349
> 「バイトが1だったら次の4バイトを読み込んで整数として出力し、」
正直、意味がわからんかった

例で見ると
1 1 0 0 0 → 1
1 128 0 0 0 → 128
ということだが

1に続く4バイトを加算して出力するって意味だったのかいな
0365デフォルトの名無しさん
垢版 |
2024/06/13(木) 14:54:19.57ID:lNMgjwmg
>>363
出題者がエンディアンを知らなくて説明もなくリトル環境を前提にしてしまっている
エンディアンを知っている人たちは出題には書かれてないけど例よりリトル前提だと読み取ってこたえている
0366デフォルトの名無しさん
垢版 |
2024/06/13(木) 14:59:03.73ID:fAZ1qthZ
>>365
リトルエンディアンはビットが逆って事じゃ無いぞ

10 00なら
00 10だぞ
03689
垢版 |
2024/06/13(木) 17:03:39.85ID:XgNTPGgf
>>365
ああそういうことか「4バイトを読み込んで整数」と書いてあるのはそういう意味だったのか
ならわかるかも。
オレは4バイト一個一個が整数だと捉えて、それを「4バイトを読み込んで整数」とは何のこっちゃと?になってたわ
03699
垢版 |
2024/06/13(木) 17:07:01.55ID:XgNTPGgf
すまんね68系で育ったもんですぐ連想できなんだ
0370デフォルトの名無しさん
垢版 |
2024/06/14(金) 21:10:23.18ID:H7FTNa+g
>>367
例が間違えてるか説明が足りて無い

要は4バイトを読み込んでと説明してるが「一気に4バイト読み込む」とおかしくなる
1バイトずつ順に4バイトを読み込んでという説明なら例が腑に落ちる
0372 警備員[Lv.23]
垢版 |
2024/06/15(土) 16:15:42.96ID:h/vMPGM+
>>356
Kotlin

面倒なのでASCIIコード(0x20-0x7e)でしかシフトしないやつを作った。
まあでも Kotlin は Java 同様に内部でUnicodeで扱っているので平仮名とか漢字とか全然違う言語の文字とかも比較的楽に追加できると思う。

https://paiza.io/projects/5H9H1zSjDnVshGCf4JaQJg
レスを投稿する


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