2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

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

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

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

358 :デフォルトの名無しさん:2024/06/07(金) 06:27:47.87 ID:ZJzD8UbY.net
お題:引数sとnを取りシーザー暗号化を行う関数を作れ
sは平文、nはずらす文字数(負数可)、返り値は暗号化後の文字列
同様の関数で「Hello, World!」を暗号化し復号化せよ

359 :デフォルトの名無しさん:2024/06/07(金) 09:04:03.36 ID:tQi+9x5m.net
#! 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!"

360 :デフォルトの名無しさん:2024/06/07(金) 09:04:13.66 ID:tQi+9x5m.net
#! 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!"

361 :デフォルトの名無しさん:2024/06/07(金) 21:13:26.78 ID:U/DqAKAj.net
>>358
R
https://ideone.com/Qj6B3w

362 :デフォルトの名無しさん:2024/06/07(金) 23:24:01.54 ID:KUK95Vnh.net
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!"

363 :デフォルトの名無しさん:2024/06/07(金) 23:28:58.71 ID:KMptjexu.net
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"

364 :9:2024/06/11(火) 14:41:10.23 ID:NjINqn/m.net
>>350 Perl5

($x = '04:05:06') =~ s/:/*/g;
print eval $x;

365 :9:2024/06/13(木) 14:34:57.00 ID:XgNTPGgf.net
>>351
> 「バイトが1だったら次の4バイトを読み込んで整数として出力し、」
正直、意味がわからんかった

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

1に続く4バイトを加算して出力するって意味だったのかいな

366 :デフォルトの名無しさん:2024/06/13(木) 14:48:43.48 ID:sldne70j.net
>>365
整数が4バイト型という脳内補完だった

367 :デフォルトの名無しさん:2024/06/13(木) 14:54:19.57 ID:lNMgjwmg.net
>>365
出題者がエンディアンを知らなくて説明もなくリトル環境を前提にしてしまっている
エンディアンを知っている人たちは出題には書かれてないけど例よりリトル前提だと読み取ってこたえている

368 :デフォルトの名無しさん:2024/06/13(木) 14:59:03.73 ID:fAZ1qthZ.net
>>367
リトルエンディアンはビットが逆って事じゃ無いぞ

10 00なら
00 10だぞ

369 :デフォルトの名無しさん:2024/06/13(木) 15:00:51.22 ID:lNMgjwmg.net
>>368
>>365を見てないのか?

370 :9:2024/06/13(木) 17:03:39.85 ID:XgNTPGgf.net
>>367
ああそういうことか「4バイトを読み込んで整数」と書いてあるのはそういう意味だったのか
ならわかるかも。
オレは4バイト一個一個が整数だと捉えて、それを「4バイトを読み込んで整数」とは何のこっちゃと?になってたわ

371 :9:2024/06/13(木) 17:07:01.55 ID:XgNTPGgf.net
すまんね68系で育ったもんですぐ連想できなんだ

372 :デフォルトの名無しさん:2024/06/14(金) 21:10:23.18 ID:H7FTNa+g.net
>>369
例が間違えてるか説明が足りて無い

要は4バイトを読み込んでと説明してるが「一気に4バイト読み込む」とおかしくなる
1バイトずつ順に4バイトを読み込んでという説明なら例が腑に落ちる

373 :デフォルトの名無しさん:2024/06/14(金) 21:15:46.04 ID:cNkcubsv.net
例を示しての出題だから

374 ::2024/06/15(土) 16:15:42.96 ID:h/vMPGM+.net
>>358
Kotlin

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

https://paiza.io/projects/5H9H1zSjDnVshGCf4JaQJg

375 :デフォルトの名無しさん:2024/06/19(水) 15:22:47.09 ID:xfTENZQh.net
>>350 awk
https://ideone.com/dMvvZG

376 :デフォルトの名無しさん:2024/06/20(木) 17:43:48.64 ID:0f6ktMCR.net
お題:迷路生成を様々な言語で

例:
C
https://ideone.com/a527mc

377 :デフォルトの名無しさん:2024/06/20(木) 20:17:47.11 ID:0f6ktMCR.net
https://paiza.io/projects/a6ZS3co-gsEV1tN57VUctA

378 :デフォルトの名無しさん:2024/06/21(金) 02:17:42.15 ID:wIxdZD1d.net
迷路。やっつけで汚い。乱数自前

C
https://paiza.io/projects/5vyyygrG7exduzqDa-jBAA

Rust
https://paiza.io/projects/g1UmjFWydgmjAEZAgqS5xw

379 :デフォルトの名無しさん:2024/06/21(金) 05:01:41.33 ID:wIxdZD1d.net
乱数改良

C
https://paiza.io/projects/UWRNkhfbdscMIwR0bTvqHA

Rust
https://paiza.io/projects/g1UmjFWydgmjAEZAgqS5xw

380 :デフォルトの名無しさん:2024/07/26(金) 09:46:37.73 ID:PcAUXe08.net
お題:配管サイズの「A呼称」「B呼称」の相互変換
tps://www.keyence.co.jp/ss/products/process/flowmeter/technique/size.jsp
などに掲載されている「A呼称」から「B呼称」への変換。及びその逆変換。
「A呼称」は整数値で(8とか)、「B呼称」は実数(0.125とか)または分母を8とする分数の分子(1とか)で表すものとする。
規格に存在しない場合(42Aとか)は考慮しなくてもよい。
表を引くだけなら簡単過ぎるので、ツェラーの公式の様な「技巧的」な解法を求む。

381 :デフォルトの名無しさん:2024/07/27(土) 06:14:08.30 ID:QMQQaL7S.net
REM 呼称変換.bat
chcp 65001

ruby -x "%~f0"
ruby tmp.rb
goto end

#~
#!ruby
#encoding: utf-8
Encoding.default_external='UTF-8'

require 'base64'

st=<<'EOS'
IyFydWJ5CiNlbmNvZGluZzogdXRmLTgKRW5jb2RpbmcuZGVmYXVsdF9leHRl
cm5hbD0nVVRGLTgnCgpjbGFzcyBPYmplY3QKICBkZWYgdG9fZmwKICAgIHJl
dHVybiBldmFsKHNlbGYuc3BsaXQoIisiKS5tYXB7fGV8CiAgICAgIGUuc3Bs
aXQoIi8iKS5tYXB7fGZ8IGYudG9fZi50b19zfS4KICAgICAgam9pbigiLyIp
fS5qb2luKCIrIikpCiAgZW5kCmVuZAoKY2xhc3MgTnVtZXJpYwogIEBAYT1b
Niw4LDEwLDE1LDIwLDI1LDMyLDQwLDUwLDY1LAogICAgICA4MCw5MCwxMDAs
MTI1LDE1MCwxNzUsMjAwLDIyNV0KICBAQGI9WyIxLzgiLCIxLzQiLCIzLzgi
LCIxLzIiLCIzLzQiLCIxIiwKICAgICAgIjErMS80IiwiMSsxLzIiLCIyIiwi
MisxLzIiLCIzIiwKICAgICAgIjMrMS8yIiwiNCIsIjUiLCI2IiwiNyIsIjgi
LCI5Il0KICBAQGM9QEBiLm1hcHt8ZXwgZS50b19mbH0KICBkZWYgYV90b19i
CiAgICBuPXNlbGYKICAgIGlmIG48MjUwCiAgICAgIGE9NgogICAgICBAQGEu
ZWFjaHt8ZXwgYT1lIGlmIGUvbjw9MS4wfQogICAgICBiPUBAYltAQGEuaW5k
ZXgoYSldCiAgICAgIGM9QEBjW0BAYS5pbmRleChhKV0KICAgICAgcmV0dXJu
ICIoYT0je2F9KSBiPSN7Yn09I3tjfSIKICAgIGVsc2UKICAgICAgYT0obi81
MCkudG9faSo1MAogICAgICBiPWEvMjUKICAgICAgcmV0dXJuICIoYT0je2F9

382 :デフォルトの名無しさん:2024/07/27(土) 06:15:03.76 ID:QMQQaL7S.net
KSBiPSN7Yn0iCiAgICBlbmQKICBlbmQKICBkZWYgYl90b19hCiAgICBuPXNl
bGYKICAgIGlmIG48MTAKICAgICAgYz0wLjEyNQogICAgICBAQGMuZWFjaHt8
ZXwgYz1lIGlmIGUvbjw9MS4wfQogICAgICBhPUBAYVtAQGMuaW5kZXgoYyld
CiAgICAgIGI9QEBiW0BAYy5pbmRleChjKV0KICAgICAgcmV0dXJuICIoYj0j
e2J9PSN7Y30pIGE9I3thfSIKICAgIGVsc2UKICAgICAgYj1uLnRvX2kKICAg
ICAgYT1iKjI1CiAgICAgIHJldHVybiAiKGI9I3tifSkgYT0je2F9IgogICAg
ZW5kCiAgZW5kCmVuZAoKd2hpbGUgMQogIGFyPVsi77yh5ZG856ew44GL44KJ
77yi5ZG856ewIiwi77yi5ZG856ew44GL44KJ77yh5ZG856ewIiwi57WC5LqG
Il0KICBtc2c9YXIubWFwLndpdGhfaW5kZXh7fGUsaXwiI3tpKzF9OiN7ZX0i
fS5qb2luKCJcbiIpKyJcbiIKICBwcmludCBtc2crImlucHV0IG51bWJlciA+
ICIKICBuPSRzdGRpbi5nZXRzLnRvX2kKICBicmVhayBpZiBuPT0zCiAgbmV4
dCBpZiBuPT0wCiAgd2hpbGUgMQogICAgcHJpbnQgIiN7YXJbbi0xXX06aW5w
dXQgdmFsdWUgPiAiCiAgICBtPSRzdGRpbi5nZXRzLmNob21wCiAgICBicmVh
ayBpZiBtPT0iIgogICAgbT1tLnRvX2ZsCiAgICBwdXRzIG0uYV90b19iIGlm
IG49PTEKICAgIHB1dHMgbS5iX3RvX2EgaWYgbj09MgogIGVuZAplbmQK
EOS

File.write("tmp.rb",Base64.decode64(st))
__END__
:end

383 :デフォルトの名無しさん:2024/07/30(火) 12:03:21.52 ID:zP/xDheD.net
お題
C言語のトライグラフ(可能ならダイグラフも)と普通のテキストとの相互変換。

ファイルまたは標準入力から読んで変換した結果を標準出力に出力する。
面倒なら文字列変換する関数とそれをテストするメイン関数のみでも良い。

384 : 警備員[Lv.8]:2024/08/03(土) 07:16:23.70 ID:HS6IEZQf.net
お題
Unicode 文字列を UTF-9 へ変換する。また UTF-9 を Unicode 文字列に変換する。
ただし1バイトが9bitではないコンピュータを使用する場合は9bit以上で扱いやすいbit数の変数(例えば 16bitの変数)を代用して下9bitのみを使用する等しても良い。
UTF-9 の仕様は RFC 4042 を見るか、または下記URLのページを参照。
https://www.wdic.org/w/WDIC/UTF-9%20%28RFC%29

385 : 警備員[Lv.9]:2024/08/03(土) 17:38:42.19 ID:HS6IEZQf.net
>>383
Kotlin

Digraph, Trigraph の変換と逆変換

https://paiza.io/projects/FPUStm3O4tZZMYi1Cw2ruw
https://paiza.io/projects/4vD2Ux8Jd6EzLIynkzTXtw

Map と正規表現使った簡単な変換なので他の言語で作っても大差ないと思う。

386 :デフォルトの名無しさん:2024/08/03(土) 20:58:23.65 ID:S2fEkJP0.net
お題
整数の格子がある(伝われ)
任意の2点間を線で結ぶ(座標成分は実数)
格子と交わるところで線を分割せよ
sssp://o.5ch.net/23qe8.png

387 :デフォルトの名無しさん:2024/08/03(土) 21:19:51.17 ID:VMb0ie+F.net
>>386
jwwの外部変形としてこんな感じで交点で分割させるの作ったことあるけどプログラミングスレののお題としては座標指定もなく漠然としすぎていていかがなものか。ちょっと伝わんなかった。

388 :デフォルトの名無しさん:2024/08/03(土) 21:36:58.95 ID:dM8NlTKR.net
ごめん、画像から察してほしい
遊びだから曖昧なところは適当で
https://i.imgur.com/YUKpLcI.png

389 :デフォルトの名無しさん:2024/08/03(土) 21:50:20.46 ID:VMb0ie+F.net
>>388
二直線の交点は連立方程式を解けば良くて行列を使えば簡単だけど、どういう回答が求められてるのかが分からず途方に暮れております

390 :デフォルトの名無しさん:2024/08/03(土) 22:08:55.42 ID:/AInVOhB.net
>>388
出直し

391 :デフォルトの名無しさん:2024/08/03(土) 22:28:33.50 ID:Dl6/uvrz.net
クイズと「プログラミングのお題」との決定的な違い
検証するための入力(問題)と出力(解答)例が明記されているかどうか

392 :デフォルトの名無しさん:2024/08/03(土) 22:29:35.16 ID:S2fEkJP0.net
テンプレに書いてなかったしいいやって思っちゃった
ここまで伝わらんもんなのか…

393 :デフォルトの名無しさん:2024/08/03(土) 22:35:56.24 ID:S2fEkJP0.net
具体例を計算するのはめんどくさいけど、例えばさっきの絵で言えば右上が始点で左下が終点なら始点側から順番に座標を出力するとかね

394 :デフォルトの名無しさん:2024/08/03(土) 22:41:57.69 ID:Dl6/uvrz.net
入力例とその時の出力例を
データとして数種類用意すればOK
例えば>>236とか>>345を参考

395 :デフォルトの名無しさん:2024/08/03(土) 22:42:49.82 ID:t4RpIT1N.net
>>392
そういうことは伝える努力をしてから言おうな

396 :デフォルトの名無しさん:2024/08/03(土) 22:44:30.36 ID:S2fEkJP0.net
めんどくさい
そこまでして出そうと思わんから興味ないならスルーで

397 :デフォルトの名無しさん:2024/08/03(土) 22:52:49.60 ID:/AInVOhB.net
この頭の悪さを見るに学校の課題か何かを丸投げしようとしてるのかな

398 :デフォルトの名無しさん:2024/08/03(土) 23:04:31.31 ID:Dl6/uvrz.net
入出力例があると仕様が定まってプログラミングのお題が成立する
入出力例がないと宿題を手伝わせようとしているだけの可能性も否定できないね

399 :デフォルトの名無しさん:2024/08/04(日) 00:49:43.30 ID:iskScWib.net
>>396
ドンマイ、出題の意図は分かった気がするので改めて出題
お題
10mm方眼用紙、左下原点、入力された任意の直線と方眼線との交点を求めよ
(例)始点(3.5,5.2)終点(6.3,8.1)

400 :デフォルトの名無しさん:2024/08/04(日) 04:51:29.74 ID:9TVMMXOl.net
>>386
nodejs
https://www.mycompiler.io/view/8GupmXA8eQS

401 :デフォルトの名無しさん:2024/08/09(金) 23:38:00.57 ID:PnKZlDGe.net
お題:与えられた線分を指定された長さLで分割せよ。ただし最後に余る分は長さLでなくてもよい。
線分([始点,終点])=[[0,0],[100,100]]
L=50

[[[0,0],[50,50]],[[50,50],[100,100]]]

402 ::2024/08/10(土) 04:24:35.61 ID:C1sXjWXk.net
>>401
その例おかしくない?それか問題がおかしいか。
長さがLということはx=yの線を分割する場合は座標はx, y 共にL/√2倍にならないか?

403 :デフォルトの名無しさん:2024/08/10(土) 08:05:08.91 ID:cX2Nc5cZ.net
ごめん、ミスった

404 :デフォルトの名無しさん:2024/08/10(土) 08:07:10.85 ID:cX2Nc5cZ.net
修正
線分([始点,終点])=[[0,0],[120,0]]
L=50

[[[0,0],[50,0]],[[50,0],[100,0]],[[100,0],[120,0]]]

405 :デフォルトの名無しさん:2024/08/10(土) 08:54:23.54 ID:DYGkQoQe.net
REM 座標計算.bat
chcp 65001
ruby -x "%~f0"
goto end
#~
#!ruby
#encoding: utf-8
Encoding.default_external='UTF-8'
require "matrix"
while 1
print "input start point > " #0,0
p1=$stdin.gets.split(",").map{|e| e.to_f}
print "input end point > " #120,0
p2=$stdin.gets.split(",").map{|e| e.to_f}
print "input length > " #50
l=$stdin.gets.to_f
exit if l<=0
p1[1]=0 unless p1[1]
p2[1]=0 unless p2[1]
v1=Vector.elements(p1)
v2=Vector.elements(p2)
m=(v2-v1).r
n=(m/l).to_i
a=(0..n).map{|e| l*e}
b=a.map{|e| v1+(v2-v1)*(e/(v2-v1).r)}.map{|e| e.to_a}
b<<p2
p b.uniq
end
__END__
:end

406 :デフォルトの名無しさん:2024/08/20(火) 15:28:18.45 ID:YrWgN0+y.net
お題:今日、または任意の日付から、もういくつ寝るとお正月かを求めよ。(昼寝は除く)

407 :デフォルトの名無しさん:2024/08/20(火) 18:03:45.73 ID:UEEknM+z.net
>>406 lisp
https://ideone.com/RhvMjC

173 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200