プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part20
https://mevius.5ch.net/test/read.cgi/tech/1624028577/
探検
プログラミングのお題スレ Part21
■ このスレッドは過去ログ倉庫に格納されています
2022/11/13(日) 19:00:36.84ID:ZCYlhUwL
643638
2023/05/06(土) 00:28:50.96ID:vZgCL7uL >>642 Perl5
use utf8;
binmode STDOUT => "utf8";
use feature qw{:5.16 signatures say};
say for sub($a, @b) {
if (@b) {
my @s = __SUB__->(@b);
(map{"$a・$_"} @s), (map{"$a$_"} @s);
} else { $a }
}->(split'', 'いろはにほ');
※インデントは全角スペースに置換してあります。
perl5の__SUB__は、5.16以降で使用可能な「現在の関数(この場合無名関数)のリファレンス」
実行結果
~ $ perl 21_642_いろはにほ.pl
い・ろ・は・に・ほ
い・ろ・は・にほ
い・ろ・はに・ほ
い・ろ・はにほ
い・ろは・に・ほ
い・ろは・にほ
い・ろはに・ほ
い・ろはにほ
いろ・は・に・ほ
いろ・は・にほ
いろ・はに・ほ
いろ・はにほ
いろは・に・ほ
いろは・にほ
いろはに・ほ
いろはにほ
use utf8;
binmode STDOUT => "utf8";
use feature qw{:5.16 signatures say};
say for sub($a, @b) {
if (@b) {
my @s = __SUB__->(@b);
(map{"$a・$_"} @s), (map{"$a$_"} @s);
} else { $a }
}->(split'', 'いろはにほ');
※インデントは全角スペースに置換してあります。
perl5の__SUB__は、5.16以降で使用可能な「現在の関数(この場合無名関数)のリファレンス」
実行結果
~ $ perl 21_642_いろはにほ.pl
い・ろ・は・に・ほ
い・ろ・は・にほ
い・ろ・はに・ほ
い・ろ・はにほ
い・ろは・に・ほ
い・ろは・にほ
い・ろはに・ほ
い・ろはにほ
いろ・は・に・ほ
いろ・は・にほ
いろ・はに・ほ
いろ・はにほ
いろは・に・ほ
いろは・にほ
いろはに・ほ
いろはにほ
644デフォルトの名無しさん
2023/05/06(土) 03:38:46.54ID:FFZq2N9u645デフォルトの名無しさん
2023/05/06(土) 10:49:16.05ID:5AOK1X8m >>642
PowerShell 3以上 (文字列は32文字以下とする)
$s = "いろはにほ"
$n = $s.length - 1
foreach ($i in 0..((1 -shl $n) - 1)) {
(0..$n |% {$s[$_], "・"[!($i -band (1 -shl $_))]}) -join ""
}
[実行結果]
いろはにほ
い・ろはにほ
いろ・はにほ
い・ろ・はにほ
いろは・にほ
い・ろは・にほ
いろ・は・にほ
い・ろ・は・にほ
いろはに・ほ
い・ろはに・ほ
いろ・はに・ほ
い・ろ・はに・ほ
いろは・に・ほ
い・ろは・に・ほ
いろ・は・に・ほ
い・ろ・は・に・ほ
PowerShell 3以上 (文字列は32文字以下とする)
$s = "いろはにほ"
$n = $s.length - 1
foreach ($i in 0..((1 -shl $n) - 1)) {
(0..$n |% {$s[$_], "・"[!($i -band (1 -shl $_))]}) -join ""
}
[実行結果]
いろはにほ
い・ろはにほ
いろ・はにほ
い・ろ・はにほ
いろは・にほ
い・ろは・にほ
いろ・は・にほ
い・ろ・は・にほ
いろはに・ほ
い・ろはに・ほ
いろ・はに・ほ
い・ろ・はに・ほ
いろは・に・ほ
い・ろは・に・ほ
いろ・は・に・ほ
い・ろ・は・に・ほ
646デフォルトの名無しさん
2023/05/07(日) 06:28:33.03ID:FtrFphzu647デフォルトの名無しさん
2023/05/07(日) 17:24:01.83ID:UIWGws2E648デフォルトの名無しさん
2023/05/12(金) 00:04:09.01ID:i1xOndM3 お題
次のように定義される関数f(x,y)を実装せよ。
x==0のとき:f(0,y):=y+1
y==0のとき:f(x,0):=f(x-1,1)
それ以外のとき:f(x,y):=f(x-1,f(x,y-1))
また以下の値を計算せよ。
f(1,1)
f(2,3)
f(3,4)
f(4,1)
f(4,2)
次のように定義される関数f(x,y)を実装せよ。
x==0のとき:f(0,y):=y+1
y==0のとき:f(x,0):=f(x-1,1)
それ以外のとき:f(x,y):=f(x-1,f(x,y-1))
また以下の値を計算せよ。
f(1,1)
f(2,3)
f(3,4)
f(4,1)
f(4,2)
649デフォルトの名無しさん
2023/05/12(金) 00:10:00.43ID:roSWG4E/ 罠かな
650デフォルトの名無しさん
2023/05/12(金) 17:49:03.47ID:x+yBqAtm アッカーマン関数?
651デフォルトの名無しさん
2023/05/12(金) 17:59:41.22ID:x+yBqAtm 世の中にはもっとずっと急激に増加する関数があるんだよね
増加が速過ぎて、宇宙中のリソースを使ってもコンピューター言語では記述不可能
増加が速過ぎて、宇宙中のリソースを使ってもコンピューター言語では記述不可能
652デフォルトの名無しさん
2023/05/12(金) 18:17:41.52ID:S6WSdC9T >>648
メモ化してもf(4, 2)でスタックオーバーフローしたわ
メモ化してもf(4, 2)でスタックオーバーフローしたわ
653デフォルトの名無しさん
2023/05/12(金) 20:14:17.32ID:YXrNhaWW yはループでやれよ
654デフォルトの名無しさん
2023/05/12(金) 20:24:24.18ID:Or0Z5F6h PowerShell 3以上 (x, yは0以上の整数とする)
function hyper($n, $a, $b)
{
if ($n -eq 0) {return $b + 1}
if ($n -eq 1) {return $a + $b}
if ($n -eq 2) {return $a * $b}
if ($n -eq 3) {return [BigInt]::pow($a, $b)}
$c = 1
1..[Int]$b |% {$c = hyper ($n - 1) $a $c}
$c
}
function f($x, $y)
{
(hyper $x 2 ($y + 3)) - 3
}
((1,1),(2,3),(3,4),(4,1),(4,2)) |% {"f($($_[0]), $($_[1])) = $(f $_[0] $_[1])"}
[実行結果]
f(1, 1) = 3
f(2, 3) = 9
f(3, 4) = 125
f(4, 1) = 65533
f(4, 2) = 2003529930…(19709桁省略)…5719156733
function hyper($n, $a, $b)
{
if ($n -eq 0) {return $b + 1}
if ($n -eq 1) {return $a + $b}
if ($n -eq 2) {return $a * $b}
if ($n -eq 3) {return [BigInt]::pow($a, $b)}
$c = 1
1..[Int]$b |% {$c = hyper ($n - 1) $a $c}
$c
}
function f($x, $y)
{
(hyper $x 2 ($y + 3)) - 3
}
((1,1),(2,3),(3,4),(4,1),(4,2)) |% {"f($($_[0]), $($_[1])) = $(f $_[0] $_[1])"}
[実行結果]
f(1, 1) = 3
f(2, 3) = 9
f(3, 4) = 125
f(4, 1) = 65533
f(4, 2) = 2003529930…(19709桁省略)…5719156733
655デフォルトの名無しさん
2023/05/13(土) 14:43:52.11ID:gMiTxPxz 計算できるのすご
656デフォルトの名無しさん
2023/05/13(土) 18:02:29.70ID:Zeyov0xO 流石にネタでしょ
657蟻人間 ◆T6xkBnTXz7B0
2023/05/13(土) 19:33:04.83ID:V001hfax お題: 地球によく似た星earth2では小さなインターネットmininetが整備されている。mininet上の端末はIPv2という2バイトのアドレスでアクセスできる。
IPv2の各バイトの範囲が最小値と最大値のペアとして与えられる。与えられた範囲内のIPv2に対して対応する2個の引数の関数fを呼び出すブルートフォースを順番に実行せよ(シングルスレッド)。関数fは実引数の内容を順番に表示するものとする。
例)
data = {{1, 3}, {3, 4}}
→ f(1, 3), f(1, 4), f(2, 3), f(2, 4), f(3, 3), f(3, 4).
※フィクションです。
IPv2の各バイトの範囲が最小値と最大値のペアとして与えられる。与えられた範囲内のIPv2に対して対応する2個の引数の関数fを呼び出すブルートフォースを順番に実行せよ(シングルスレッド)。関数fは実引数の内容を順番に表示するものとする。
例)
data = {{1, 3}, {3, 4}}
→ f(1, 3), f(1, 4), f(2, 3), f(2, 4), f(3, 3), f(3, 4).
※フィクションです。
658デフォルトの名無しさん
2023/05/14(日) 01:48:51.69ID:AS0t3f9C お題:割り算を逆数の掛け算で近似する
単に逆数を掛けるだけだと簡単過ぎるので、例えば、
x/60 = x*(1/64 + (1/60 - 1/64)) = x*(1/64 + 1/960) = x*(1/64) + x*(1/960)
の様に、
a)2の整数べき乗と、
b)残り(除数の逆数-a)
に分割する事を考える(∵2の整数べき乗との乗算は誤差が発生しない)。
ゼロより大きい除数が与えられた時、これをa, bに分割せよ。
分割は、除算の計算精度が最も高いものにすること。
単に逆数を掛けるだけだと簡単過ぎるので、例えば、
x/60 = x*(1/64 + (1/60 - 1/64)) = x*(1/64 + 1/960) = x*(1/64) + x*(1/960)
の様に、
a)2の整数べき乗と、
b)残り(除数の逆数-a)
に分割する事を考える(∵2の整数べき乗との乗算は誤差が発生しない)。
ゼロより大きい除数が与えられた時、これをa, bに分割せよ。
分割は、除算の計算精度が最も高いものにすること。
659デフォルトの名無しさん
2023/05/14(日) 03:59:03.17ID:nPGo3rg2660デフォルトの名無しさん
2023/05/14(日) 10:23:02.41ID:+GvRlsVe 要するに2進展開の小数部の最初のゼロでない桁決定するの?
661デフォルトの名無しさん
2023/05/14(日) 10:41:00.83ID:+GvRlsVe662蟻人間 ◆T6xkBnTXz7B0
2023/05/14(日) 13:13:59.00ID:3wB1r/Tt お題: 縦3マス、横3マスの○×ゲーム(まるばつげーむ)について、ゲームが完了したときの盤面のパターンを重複なく出力し、何通りのパターンがあるかを計算せよ。
663デフォルトの名無しさん
2023/05/14(日) 14:04:22.95ID:MJtG7egZ 対称性は無視?
665デフォルトの名無しさん
2023/05/14(日) 14:44:40.86ID:/Abs1b1C >>658
PowerShell 3以上
function bceil([UInt]$n)
{
if (!$n) {return 0}
$m, $n = [UInt]1, ($n - 1)
while ($n) {$m, $n = ($m -shl 1), ($n -shr 1)}
$m
}
function GCD([UInt]$a, [UInt]$b)
{
while ($b) {$a, $b = $b, ($a % $b)}
$a
}
2..20 + 40, 60 |% {
if (($a = bceil $_) -eq $_) {return "x/$_ = x*(1/$a)"}
$d= GCD $a $_
$b, $c = (($a - $_) / $d), ($a / $d * $_)
"x/$_ = x*(1/$a) + x*($b/$c)"
}
PowerShell 3以上
function bceil([UInt]$n)
{
if (!$n) {return 0}
$m, $n = [UInt]1, ($n - 1)
while ($n) {$m, $n = ($m -shl 1), ($n -shr 1)}
$m
}
function GCD([UInt]$a, [UInt]$b)
{
while ($b) {$a, $b = $b, ($a % $b)}
$a
}
2..20 + 40, 60 |% {
if (($a = bceil $_) -eq $_) {return "x/$_ = x*(1/$a)"}
$d= GCD $a $_
$b, $c = (($a - $_) / $d), ($a / $d * $_)
"x/$_ = x*(1/$a) + x*($b/$c)"
}
666デフォルトの名無しさん
2023/05/14(日) 14:44:57.54ID:/Abs1b1C [実行結果]
x/2 = x*(1/2)
x/3 = x*(1/4) + x*(1/12)
x/4 = x*(1/4)
x/5 = x*(1/8) + x*(3/40)
x/6 = x*(1/8) + x*(1/24)
x/7 = x*(1/8) + x*(1/56)
x/8 = x*(1/8)
x/9 = x*(1/16) + x*(7/144)
x/10 = x*(1/16) + x*(3/80)
x/11 = x*(1/16) + x*(5/176)
x/12 = x*(1/16) + x*(1/48)
x/13 = x*(1/16) + x*(3/208)
x/14 = x*(1/16) + x*(1/112)
x/15 = x*(1/16) + x*(1/240)
x/16 = x*(1/16)
x/17 = x*(1/32) + x*(15/544)
x/18 = x*(1/32) + x*(7/288)
x/19 = x*(1/32) + x*(13/608)
x/20 = x*(1/32) + x*(3/160)
x/40 = x*(1/64) + x*(3/320)
x/60 = x*(1/64) + x*(1/960)
x/2 = x*(1/2)
x/3 = x*(1/4) + x*(1/12)
x/4 = x*(1/4)
x/5 = x*(1/8) + x*(3/40)
x/6 = x*(1/8) + x*(1/24)
x/7 = x*(1/8) + x*(1/56)
x/8 = x*(1/8)
x/9 = x*(1/16) + x*(7/144)
x/10 = x*(1/16) + x*(3/80)
x/11 = x*(1/16) + x*(5/176)
x/12 = x*(1/16) + x*(1/48)
x/13 = x*(1/16) + x*(3/208)
x/14 = x*(1/16) + x*(1/112)
x/15 = x*(1/16) + x*(1/240)
x/16 = x*(1/16)
x/17 = x*(1/32) + x*(15/544)
x/18 = x*(1/32) + x*(7/288)
x/19 = x*(1/32) + x*(13/608)
x/20 = x*(1/32) + x*(3/160)
x/40 = x*(1/64) + x*(3/320)
x/60 = x*(1/64) + x*(1/960)
667デフォルトの名無しさん
2023/05/15(月) 20:46:01.76ID:XJWsSZ0R668デフォルトの名無しさん
2023/05/15(月) 20:54:26.02ID:2dY5adZo669デフォルトの名無しさん
2023/05/15(月) 21:03:02.31ID:2dY5adZo670デフォルトの名無しさん
2023/05/15(月) 21:10:44.54ID:2dY5adZo >>667の情報を見て思ったが、日本では先攻が〇、英語版では先攻が×。
その時点でパターンが変わる。
その時点でパターンが変わる。
671658
2023/05/15(月) 22:33:44.26ID:02zVVK0g >>660
除数が2の整べき乗よりちょっと大きい場合は、引き算にした方が精度が出たりします。
tps://sagecell.sagemath.org/?z=eJx9j8FqwkAQQO-B_MOClyyahlmN8eLHSGlQ6DZL2A9wEw-KJ-uhlF7FioUIvbT0YD9mCMlnOIlGb8LusPN23uxsGEeSSSVHeswmUkWxpqxDO7QtqR5U_PQ4BDFgLUYR0zWmKabz4vuY_23RfJa7eZG9oXnHZGlbeggemQ4EvBI8CDB5vePZloonL9rRVTmaNZosn27QfJX_KzSzYrcsFwc6UGe4tO4K3g6fo5F2wK-B3-vx5jWq6Yo2XRAkRzTj9Ll7cepcBIKUmwN9FzyCttVixcdvfjiW-03-k2GSNP-jta1nvY4MHUbB1dzT_ApFBcUZngDsTonA&lang=python&interacts=eJyLjgUAARUAuQ==
除数が2の整べき乗よりちょっと大きい場合は、引き算にした方が精度が出たりします。
tps://sagecell.sagemath.org/?z=eJx9j8FqwkAQQO-B_MOClyyahlmN8eLHSGlQ6DZL2A9wEw-KJ-uhlF7FioUIvbT0YD9mCMlnOIlGb8LusPN23uxsGEeSSSVHeswmUkWxpqxDO7QtqR5U_PQ4BDFgLUYR0zWmKabz4vuY_23RfJa7eZG9oXnHZGlbeggemQ4EvBI8CDB5vePZloonL9rRVTmaNZosn27QfJX_KzSzYrcsFwc6UGe4tO4K3g6fo5F2wK-B3-vx5jWq6Yo2XRAkRzTj9Ll7cepcBIKUmwN9FzyCttVixcdvfjiW-03-k2GSNP-jta1nvY4MHUbB1dzT_ApFBcUZngDsTonA&lang=python&interacts=eJyLjgUAARUAuQ==
672658
2023/05/15(月) 22:37:15.73ID:02zVVK0g すぐ消えるかも知れない方のリンク(中身は同じ)
tps://sagecell.sagemath.org/?q=tkqhls
tps://sagecell.sagemath.org/?q=tkqhls
674デフォルトの名無しさん
2023/05/16(火) 09:51:49.00ID:UhzGXTUG >>673
こんな結果が出ましたが、この検証の仕方は合っていますか?
shortlink
https://sagecell.sagemath.org/?q=lftfab
permalink
https://sagecell.sagemath.org/?z=eJyFUs1OwkAQvpPwDg1c2AA2u_3BC89iiJFIYqUh-wBuMQTFixpjjCYcIIBiwHiRGMSHGQu9-QrOtlvUJmLSTme_mW929_tabdQdzXGdCt_Xao5bb3BcFfCtplOOu-U29nbLlG1rWQ0jNC-h2YRme_W88F8HIIbBqL2aXIO4Aa-TTrmN2iHPZf7tzJB0Kp3iZarjPjlaInK8TkvgXWzgxvO5bAdxCWLiH_VBjIP3cxDHq1EnOJligpOpGm0wkq8e1Cs8R60QsEyTxLthj8HyWEAQOSw-jk2KihOuWYkh5ZtD7SLVEUSK8YOimi2b5KPUNCxGkjTLxqqsSAGy2up25k8XwUPff5mA58Ua4TMI77q-slHQMBQ50TlZg0yCLAFSCdIYXHviVHb3a4d7kaRl20yIHO88VLq2W8urJ4zBsIemRCda3j36b1gdx76cfcxOMYLogegiC0Tnc979w8Sx3-2AJ4LFHDwcMlz274LRXP4J3DZ3aDnUUVfCl4jC2W881DnKN9iCPONvXuRQtAg92mSSElVOlLrKb0JveUhVSloh76VK9HcpA-IeRAvVypAv4NdijA==&lang=python&interacts=eJyLjgUAARUAuQ==
こんな結果が出ましたが、この検証の仕方は合っていますか?
shortlink
https://sagecell.sagemath.org/?q=lftfab
permalink
https://sagecell.sagemath.org/?z=eJyFUs1OwkAQvpPwDg1c2AA2u_3BC89iiJFIYqUh-wBuMQTFixpjjCYcIIBiwHiRGMSHGQu9-QrOtlvUJmLSTme_mW929_tabdQdzXGdCt_Xao5bb3BcFfCtplOOu-U29nbLlG1rWQ0jNC-h2YRme_W88F8HIIbBqL2aXIO4Aa-TTrmN2iHPZf7tzJB0Kp3iZarjPjlaInK8TkvgXWzgxvO5bAdxCWLiH_VBjIP3cxDHq1EnOJligpOpGm0wkq8e1Cs8R60QsEyTxLthj8HyWEAQOSw-jk2KihOuWYkh5ZtD7SLVEUSK8YOimi2b5KPUNCxGkjTLxqqsSAGy2up25k8XwUPff5mA58Ua4TMI77q-slHQMBQ50TlZg0yCLAFSCdIYXHviVHb3a4d7kaRl20yIHO88VLq2W8urJ4zBsIemRCda3j36b1gdx76cfcxOMYLogegiC0Tnc979w8Sx3-2AJ4LFHDwcMlz274LRXP4J3DZ3aDnUUVfCl4jC2W881DnKN9iCPONvXuRQtAg92mSSElVOlLrKb0JveUhVSloh76VK9HcpA-IeRAvVypAv4NdijA==&lang=python&interacts=eJyLjgUAARUAuQ==
675デフォルトの名無しさん
2023/05/16(火) 09:59:14.32ID:vUVUSyDD 元のお題に「分ける」とあるのてマイナスなしなんじゃないの?
676デフォルトの名無しさん
2023/05/16(火) 15:16:43.16ID:U8LQq92Y 回分かどうか判定するプログラムを書きなさい。回分とは逆から読んでも同じ文である。
例 step on no pets
使用言語 C
例 step on no pets
使用言語 C
677デフォルトの名無しさん
2023/05/16(火) 18:13:35.98ID:VkBoSdxq 回文ね
678デフォルトの名無しさん
2023/05/16(火) 18:38:20.59ID:U8LQq92Y >>676 補足
入力した文が回分かどうか判定するプログラムを書きなさい。
入力した文が回分かどうか判定するプログラムを書きなさい。
679デフォルトの名無しさん
2023/05/16(火) 20:23:20.23ID:KcC4zCx1 >>676,678
これ後から絵文字やらクラスタやらどんどん補足していくパターン
これ後から絵文字やらクラスタやらどんどん補足していくパターン
680デフォルトの名無しさん
2023/05/17(水) 02:03:28.90ID:g3box4pX >>678
これなんの補足をしたつもりだったんだ…?
これなんの補足をしたつもりだったんだ…?
681デフォルトの名無しさん
2023/05/17(水) 10:28:21.37ID:oO1E5hvY682667
2023/05/17(水) 23:14:17.75ID:UOReU/gF >>662
最終盤面が何通りか理論的に求めてみた。○を先手とし、最終盤面での○と×の個数をそれぞれa, bとすると、(a, b) = (3, 2), (3, 3), (4, 3), (4, 4), (5, 4) の5種類に場合分けされる。
(1) (a, b) = (3, 2) のとき
・○は縦・横・斜めの8本のどれかに並べて置くので8通り
・×は残り6マスのどれかに置くので ₆C₂ = 15通り
・以上より、盤面数は 8 × 15 = 120通り
(2) (a, b) = (3, 3) のとき
・○は縦・横・斜めの8本のどれかに並べて置くので8通り
・×は残り6マスのどれかに置くので ₆C₃ = 20通りだが、○が縦/横に並ぶ場合は、×が縦/横の残り2本のどちらかに並ぶ2通りを除外する
・以上より、盤面数は 8 × 20 − 6 × 2 = 148通り
(3) (a, b) = (4, 3) のとき
・○は3個を縦・横・斜めの8本のどれかに並べ、1個を残り6マスのどれかに置くので、8 × 6 = 48通り
・×は残り5マスのどれかに置くので ₅C₃ = 10通りだが、○が縦/横に並ぶ場合は、×が縦/横の残り1本に並ぶ1通りを除外する
・以上より、盤面数は 48 × 10 − 6 × 6 × 1 = 444通り
(4) (a, b) = (4, 4) のとき
・×は3個を縦・横・斜めの8本のどれかに並べ、1個を残り6マスのどれかに置くので、8 × 6 = 48通り
・○は残り5マスのどれかに置くので ₅C₄ = 5通りだが、○が縦/横に並ぶ場合は、×3個が縦/横の残り1本に並び1個が残り2マスのどちらかに並ぶ2通りを除外する
・以上より、盤面数は 48 × 5 − 6 × 6 × 2 = 168通り
(5) (a, b) = (5, 4) のとき
・×は9マスのどれかに置くので ₉C₄ = 126通りだが、3個を縦・横・斜めの8本のどれかに並べ1個を残り6マスのどれかに置く 8 × 6 = 48通りを除外する
・○は残り5マスに置くので1通り
・以上より、盤面数は (126 − 48) × 1 = 78通り
最終盤面が何通りか理論的に求めてみた。○を先手とし、最終盤面での○と×の個数をそれぞれa, bとすると、(a, b) = (3, 2), (3, 3), (4, 3), (4, 4), (5, 4) の5種類に場合分けされる。
(1) (a, b) = (3, 2) のとき
・○は縦・横・斜めの8本のどれかに並べて置くので8通り
・×は残り6マスのどれかに置くので ₆C₂ = 15通り
・以上より、盤面数は 8 × 15 = 120通り
(2) (a, b) = (3, 3) のとき
・○は縦・横・斜めの8本のどれかに並べて置くので8通り
・×は残り6マスのどれかに置くので ₆C₃ = 20通りだが、○が縦/横に並ぶ場合は、×が縦/横の残り2本のどちらかに並ぶ2通りを除外する
・以上より、盤面数は 8 × 20 − 6 × 2 = 148通り
(3) (a, b) = (4, 3) のとき
・○は3個を縦・横・斜めの8本のどれかに並べ、1個を残り6マスのどれかに置くので、8 × 6 = 48通り
・×は残り5マスのどれかに置くので ₅C₃ = 10通りだが、○が縦/横に並ぶ場合は、×が縦/横の残り1本に並ぶ1通りを除外する
・以上より、盤面数は 48 × 10 − 6 × 6 × 1 = 444通り
(4) (a, b) = (4, 4) のとき
・×は3個を縦・横・斜めの8本のどれかに並べ、1個を残り6マスのどれかに置くので、8 × 6 = 48通り
・○は残り5マスのどれかに置くので ₅C₄ = 5通りだが、○が縦/横に並ぶ場合は、×3個が縦/横の残り1本に並び1個が残り2マスのどちらかに並ぶ2通りを除外する
・以上より、盤面数は 48 × 5 − 6 × 6 × 2 = 168通り
(5) (a, b) = (5, 4) のとき
・×は9マスのどれかに置くので ₉C₄ = 126通りだが、3個を縦・横・斜めの8本のどれかに並べ1個を残り6マスのどれかに置く 8 × 6 = 48通りを除外する
・○は残り5マスに置くので1通り
・以上より、盤面数は (126 − 48) × 1 = 78通り
683667
2023/05/17(水) 23:14:48.75ID:UOReU/gF684デフォルトの名無しさん
2023/05/18(木) 14:03:59.67ID:ftT7G5Yt >> 676 の回答例を載せときます
#include <stdio.h>
#include <string.h>
void kaibun_judge(char *str);
int main(void)
{
char ss[80];
printf("文字列を入力してください ");
gets(ss);
kaibun_judge(ss);
}
void kaibun_judge(char *str)
{
char *p, *q, dmy[strlen(str)];
p = str;
q = dmy;
for (int i = strlen(str)-1;i >= 0;i--) {
dmy[i] = *p++;
}
if (strcmp(str, dmy) == 0) printf("回文です\n");
else printf("回分ではありません\n");
}
#include <stdio.h>
#include <string.h>
void kaibun_judge(char *str);
int main(void)
{
char ss[80];
printf("文字列を入力してください ");
gets(ss);
kaibun_judge(ss);
}
void kaibun_judge(char *str)
{
char *p, *q, dmy[strlen(str)];
p = str;
q = dmy;
for (int i = strlen(str)-1;i >= 0;i--) {
dmy[i] = *p++;
}
if (strcmp(str, dmy) == 0) printf("回文です\n");
else printf("回分ではありません\n");
}
685667
2023/05/18(木) 21:14:06.06ID:z24aX2ni686デフォルトの名無しさん
2023/05/20(土) 00:00:46.48ID:q76PMxZe >>684
よくあるバグ入でかつ分かりやすい速度向上の余地を持つ良い例だ
よくあるバグ入でかつ分かりやすい速度向上の余地を持つ良い例だ
687デフォルトの名無しさん
2023/05/20(土) 05:48:17.89ID:Hm5OPlrQ >>684
そのプログラムは char 一つで1文字を表す文字コード以外ではまともに動かない。
80文字以上の入力でバッファーオーバーランする。
dmy[] 配列の最後の次のメモリに \0 以外のゴミが入っていたら strcmp() が想定した通りに動かない。
そのプログラムは char 一つで1文字を表す文字コード以外ではまともに動かない。
80文字以上の入力でバッファーオーバーランする。
dmy[] 配列の最後の次のメモリに \0 以外のゴミが入っていたら strcmp() が想定した通りに動かない。
688デフォルトの名無しさん
2023/05/20(土) 05:50:36.82ID:Hm5OPlrQ C使い慣れてないなら他の文字列が楽々使えてメモリ管理についてほとんど考えなくても良い言語使って作った方が良いのではないか?
689デフォルトの名無しさん
2023/05/20(土) 06:06:53.76ID:Hm5OPlrQ >>662
Kotlin
馬鹿正直に○×と交互に打ちながら途中で縦横斜め何れかで3つ揃ったらそこで終了という感じで全パターンやらせたら
255168 パターンになったのだが、これで合っているのか謎だ。対象になるパターンを抜くとすると4で割って 63792 になる。
それと出力が多すぎて恐らくどのサイトでも実行されると結果がまともに出ない。
paiza.io にソース置いておくが実行するとパターン 1651 の途中で Timeout して中途半端に終わっている。
https://paiza.io/projects/2eV3pNvLM7kdKO0gYfHc-w
Kotlin
馬鹿正直に○×と交互に打ちながら途中で縦横斜め何れかで3つ揃ったらそこで終了という感じで全パターンやらせたら
255168 パターンになったのだが、これで合っているのか謎だ。対象になるパターンを抜くとすると4で割って 63792 になる。
それと出力が多すぎて恐らくどのサイトでも実行されると結果がまともに出ない。
paiza.io にソース置いておくが実行するとパターン 1651 の途中で Timeout して中途半端に終わっている。
https://paiza.io/projects/2eV3pNvLM7kdKO0gYfHc-w
690デフォルトの名無しさん
2023/05/20(土) 06:14:37.20ID:Hm5OPlrQ よく見たら >>676 は使用言語がCだけになってたんだな。
じゃあC使うのは仕方がないが、Cだと色々と気を付けなければならないことが多いので要注意だ。
じゃあC使うのは仕方がないが、Cだと色々と気を付けなければならないことが多いので要注意だ。
691デフォルトの名無しさん
2023/05/20(土) 17:36:52.34ID:Hm5OPlrQ >>676
C
Locale 考慮して wchar_t 使って書いた。日本語読ませても処理できる。
但しやってることは文字列の順序入れ替えて比較しているだけなので>>684と考え方は同じ。
(書きながら一々メモリ確保して逆順に並べなくても出来ると気付いたがそれは後で公開する)。
入力元が Unicode になっていた場合は濁点半濁点の合成文字みたいなのもあって MacOS でやった時とその他 OS で違ってしまうかも知れないが、その辺は考慮されていない。
https://paiza.io/projects/YXLsX3FqAsVF6DVDxye7bA
C
Locale 考慮して wchar_t 使って書いた。日本語読ませても処理できる。
但しやってることは文字列の順序入れ替えて比較しているだけなので>>684と考え方は同じ。
(書きながら一々メモリ確保して逆順に並べなくても出来ると気付いたがそれは後で公開する)。
入力元が Unicode になっていた場合は濁点半濁点の合成文字みたいなのもあって MacOS でやった時とその他 OS で違ってしまうかも知れないが、その辺は考慮されていない。
https://paiza.io/projects/YXLsX3FqAsVF6DVDxye7bA
692デフォルトの名無しさん
2023/05/20(土) 17:50:35.91ID:Hm5OPlrQ693692
2023/05/20(土) 18:08:07.96ID:Hm5OPlrQ694デフォルトの名無しさん
2023/05/21(日) 09:10:07.45ID:Gjp34WdD >>684 gets()のかわりにfgets()を使うと改行を含んでしまうので\0で埋めてやらないといけない。
695デフォルトの名無しさん
2023/05/21(日) 11:15:13.97ID:3B+ePEeq 文字列がらみはもはやライブラリ使わないと無理やろ
ユニコードのコーディングルールはもう複雑すぎて素人が自作で作ってもまずうまくいかない
この手のルールは数学的にこうなってるはずだ、こうなってないとおかしいとかいうロジックが何一つ通用しない、単なる取り決めるなのでただひたすら覚えるしかないけど、もはや色んな言語全部取り込むために魑魅魍魎の世界
ユニコードのコーディングルールはもう複雑すぎて素人が自作で作ってもまずうまくいかない
この手のルールは数学的にこうなってるはずだ、こうなってないとおかしいとかいうロジックが何一つ通用しない、単なる取り決めるなのでただひたすら覚えるしかないけど、もはや色んな言語全部取り込むために魑魅魍魎の世界
696デフォルトの名無しさん
2023/05/22(月) 00:54:31.79ID:q509JHBH >>676
U+10000以上の文字、異体字セレクタ、結合文字に対応したプログラムはPowerShellでは
簡単に書ける。ただし、IDS(漢字構成記述文字列)には対応していない。
tps://tio.run/##XZJPS8MwGMbv/RQxVGjRFnvxMPA4hjdhw8sYoxvZVumS2WQqzoKtf5kHD8KGG4i3zcNQbx7ULxM63E3wA8ykm1sxl6bv8@T3Pm/TBjlEHq0h151OK01cZg7BgDLPQweaSnWlpQCxVAa2AITxPp9xScl2nWNbes0s8xxc3cYVUkilMojl0BFLu6iOMEvjZh15NiOeRIGTVdCKQWoRrAmkP0crvqL8a21tJpobe8TBQKV5wzJNQ6Wmi3CV1QrxOeIhu1wDwg6ECTYQo0BgMBEk1IDrAE5GPR4Mv9qvP4/nAQ9ueNj7fnr74MFg9pCFhToUbqiDWeMN07Ti1PGbXBrUxp2X6P1Wl2Rt3B3Eez2vFgsLUzyjUwHailoUqNlEIr8PkEvRX8HalKXFIRhdnI07V9GoG113U0KCS2lyepmUGEzkifoPQhPD8OCZByEP2zz45EGfh3cyYkK@lzEpMMpoXzCWcefX6svPqe5kd8XvIC4iZ5dcNJ3@Ag
これはOutputの下の方に表示されているようにLinuxでの実行結果だが、Windowsと同様に
動作しOSに依存しない。CではOSに依存しないで書くのは難しそう。
(旧式)はUTF-16のワードを逆順に並べただけなので、U+10000以上のU+29E3D、異体字
セレクタ使用のU+82B1 U+E0101、結合文字のU+304B U+309Aが含まれる2番目の例では
正しく判定できていないが、(新式)はできている。異体字は対応しているフォント(例えば
Windowsの標準フォントでは游ゴシック)でないと正しく表示されない。
U+10000以上の文字、異体字セレクタ、結合文字に対応したプログラムはPowerShellでは
簡単に書ける。ただし、IDS(漢字構成記述文字列)には対応していない。
tps://tio.run/##XZJPS8MwGMbv/RQxVGjRFnvxMPA4hjdhw8sYoxvZVumS2WQqzoKtf5kHD8KGG4i3zcNQbx7ULxM63E3wA8ykm1sxl6bv8@T3Pm/TBjlEHq0h151OK01cZg7BgDLPQweaSnWlpQCxVAa2AITxPp9xScl2nWNbes0s8xxc3cYVUkilMojl0BFLu6iOMEvjZh15NiOeRIGTVdCKQWoRrAmkP0crvqL8a21tJpobe8TBQKV5wzJNQ6Wmi3CV1QrxOeIhu1wDwg6ECTYQo0BgMBEk1IDrAE5GPR4Mv9qvP4/nAQ9ueNj7fnr74MFg9pCFhToUbqiDWeMN07Ti1PGbXBrUxp2X6P1Wl2Rt3B3Eez2vFgsLUzyjUwHailoUqNlEIr8PkEvRX8HalKXFIRhdnI07V9GoG113U0KCS2lyepmUGEzkifoPQhPD8OCZByEP2zz45EGfh3cyYkK@lzEpMMpoXzCWcefX6svPqe5kd8XvIC4iZ5dcNJ3@Ag
これはOutputの下の方に表示されているようにLinuxでの実行結果だが、Windowsと同様に
動作しOSに依存しない。CではOSに依存しないで書くのは難しそう。
(旧式)はUTF-16のワードを逆順に並べただけなので、U+10000以上のU+29E3D、異体字
セレクタ使用のU+82B1 U+E0101、結合文字のU+304B U+309Aが含まれる2番目の例では
正しく判定できていないが、(新式)はできている。異体字は対応しているフォント(例えば
Windowsの標準フォントでは游ゴシック)でないと正しく表示されない。
697デフォルトの名無しさん
2023/05/22(月) 17:00:26.90ID:2yIFfgEr >>696 ワイド文字対応だけでもすごいのにそこまでやるとは
698デフォルトの名無しさん
2023/05/23(火) 00:39:57.91ID:ZoS6XFHl >>696をIDS(漢字構成記述文字列)対応にした。ビャンビャン麵のビャンという漢字の
IDSを正しく表示できるのは、源ノ等幅、源ノ明朝、源ノゴシックのバージョン1.xxxと
Visual Studio Code, Edgeなどの組み合わせに限られる。正しく表示されるとこうなる。
://i.imgur.com/TEDafUA.png
バージョン2.xxxxではビャンという漢字に単独のコードU+30EDEが割り当てられたので、
IDSでは表示できなくなった。
function strrev($s)
{
$m = 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2
$p = $q = ""
$n = 0
[Globalization.StringInfo]::GetTextElementEnumerator($s) |% {
if (0x2FF0..0x2FFB -contains $_[0]) {
if (!$n) {$n = 1}
$n += $m[$_[0] - 0x2FF0]
}
$p += $_
if (!$n -or !--$n) {$p, $q = "", ($p + $q)}
}
$p + $q
}
foreach ($s in "⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心", "⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麺⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心") {
$t = strrev $s
"元文字列: $s"
"逆文字列: $t"
("回文ではありません。", "回文です。")[$s -ceq $t]
""
}
IDSを正しく表示できるのは、源ノ等幅、源ノ明朝、源ノゴシックのバージョン1.xxxと
Visual Studio Code, Edgeなどの組み合わせに限られる。正しく表示されるとこうなる。
://i.imgur.com/TEDafUA.png
バージョン2.xxxxではビャンという漢字に単独のコードU+30EDEが割り当てられたので、
IDSでは表示できなくなった。
function strrev($s)
{
$m = 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2
$p = $q = ""
$n = 0
[Globalization.StringInfo]::GetTextElementEnumerator($s) |% {
if (0x2FF0..0x2FFB -contains $_[0]) {
if (!$n) {$n = 1}
$n += $m[$_[0] - 0x2FF0]
}
$p += $_
if (!$n -or !--$n) {$p, $q = "", ($p + $q)}
}
$p + $q
}
foreach ($s in "⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心", "⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麺⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心") {
$t = strrev $s
"元文字列: $s"
"逆文字列: $t"
("回文ではありません。", "回文です。")[$s -ceq $t]
""
}
699デフォルトの名無しさん
2023/05/23(火) 00:40:48.32ID:ZoS6XFHl [実行結果]
元文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
逆文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
回文です。
元文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麺⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
逆文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麺で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
回文ではありません。
元文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
逆文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
回文です。
元文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麵で麺⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
逆文字列: ⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心麺で麵⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心⿺辶⿳穴⿰月⿰⿲⿱幺長⿱言馬⿱幺長刂心
回文ではありません。
700デフォルトの名無しさん
2023/05/23(火) 06:35:45.73ID:EACw1bPQ 文字列はカオスだわ
https://jp.emeditor.com/forums/topic/mac%E3%81%A7%E5%85%A5%E5%8A%9B%E3%81%95%E3%82%8C%E3%81%9F%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E6%96%87%E5%AD%97%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E6%AC%B2/
>>698
これは対応が難しい?
https://tio.run/##pVPBattAEL3rKzZCBZtYwnYhB0MvhST0VkjoxZigmHWsIq8UadOGpgbLcpzWJZik0NAE7B4KTgihLbnkUvdb3EWl6cWGfoA7u4ol1fTWZdGO5r15M5od2dZz7LhVbJrTaWWHlKlhEeRSx8HPUoqblvYkBEuh6AGSZWEXV01rUzeNFzrnamvUMcjWI1KxSoXCKqbreJcum7iGCV0mOzXs6NRyuBR6eQ/tCSFlAy2CZP1OWqpL0lzqfDJ3DULyGb7vi53/5w65NpffjotVCNjZ/69bKPBlVFAqu5tfWclqmjgfIrVsEaobxIUPK2ZL6QR7FrGgEHCLYnL1v1DwLULJtaKIRSoKxUsRKabDx3HqhjSnjFTLQQuqGuawM7MGZFCKh8BrOhSpz3rEfbzr823PLSX6rj61DIIUt6jmNE1VXM3EZItWS@K6LAfr5SokcBGQZBtTF4EMsUAJ25Bavr06Zd75z86X3x9aHvPesObp5OLmK/MG4cEdEXoObB7E/NfM70RP7hoPW@NhbzzcnzM4NukPjib97rfvjcNJ/@giNgeROTjmJicH3Y/M7zL/mjU/M/8SjVrHo3Zv1L78ddOIbASIwK@BCxFy8jbF8N4NKDQm8svBvv/j3UFwdRK8OikAIsfQbaOdhGgMpeTgrAcYdIR5n5jXZM0O84bMO2PNt6LgGH4vp4vQarWMt0EjHg6YcrgN5fHaE/iJ4R7X9U0TT6d/AA
https://jp.emeditor.com/forums/topic/mac%E3%81%A7%E5%85%A5%E5%8A%9B%E3%81%95%E3%82%8C%E3%81%9F%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%AB%E6%96%87%E5%AD%97%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E6%AC%B2/
>>698
これは対応が難しい?
https://tio.run/##pVPBattAEL3rKzZCBZtYwnYhB0MvhST0VkjoxZigmHWsIq8UadOGpgbLcpzWJZik0NAE7B4KTgihLbnkUvdb3EWl6cWGfoA7u4ol1fTWZdGO5r15M5od2dZz7LhVbJrTaWWHlKlhEeRSx8HPUoqblvYkBEuh6AGSZWEXV01rUzeNFzrnamvUMcjWI1KxSoXCKqbreJcum7iGCV0mOzXs6NRyuBR6eQ/tCSFlAy2CZP1OWqpL0lzqfDJ3DULyGb7vi53/5w65NpffjotVCNjZ/69bKPBlVFAqu5tfWclqmjgfIrVsEaobxIUPK2ZL6QR7FrGgEHCLYnL1v1DwLULJtaKIRSoKxUsRKabDx3HqhjSnjFTLQQuqGuawM7MGZFCKh8BrOhSpz3rEfbzr823PLSX6rj61DIIUt6jmNE1VXM3EZItWS@K6LAfr5SokcBGQZBtTF4EMsUAJ25Bavr06Zd75z86X3x9aHvPesObp5OLmK/MG4cEdEXoObB7E/NfM70RP7hoPW@NhbzzcnzM4NukPjib97rfvjcNJ/@giNgeROTjmJicH3Y/M7zL/mjU/M/8SjVrHo3Zv1L78ddOIbASIwK@BCxFy8jbF8N4NKDQm8svBvv/j3UFwdRK8OikAIsfQbaOdhGgMpeTgrAcYdIR5n5jXZM0O84bMO2PNt6LgGH4vp4vQarWMt0EjHg6YcrgN5fHaE/iJ4R7X9U0TT6d/AA
701デフォルトの名無しさん
2023/05/23(火) 21:04:58.28ID:eJRVljs1 >>700
こっちのPowerShellでやれば全部OK
https://github.com/PowerShell/PowerShell
Name Value
---- -----
PSVersion 7.3.4
PSEdition Core
.NET 7凄すぎ
こっちのPowerShellでやれば全部OK
https://github.com/PowerShell/PowerShell
Name Value
---- -----
PSVersion 7.3.4
PSEdition Core
.NET 7凄すぎ
702デフォルトの名無しさん
2023/05/27(土) 01:36:20.91ID:Qu0xLKn7 お題:現在の日時の文字列が与えられるのでその文字列の先頭から秒数分を切り出して出力せよ
703デフォルトの名無しさん
2023/05/27(土) 02:11:47.73ID:hhb34/XN >>702
それって秒の部分だけが残れば良いってこと? たとえば 2023/05/27 02:03:45 なら最後の 45 だけになれば良いの?
もしそうなら sed 使ってこうすればできるな。
sed 's/^.*://'
YYYY/MM/DD hh:mm:ss 形式ではなく秒が最後に出て来ない形式だったとしても最後のコロンの直後の数字が秒で、
その秒の数字文字列の後に数字でない文字が必ず来るのだとすれば (例えば Sat May 27 02:05:47 JST 2023 の
ような形式だとすれば)こうすれば良い。
sed 's/^.*://;s/[^0-9].*$//'
それって秒の部分だけが残れば良いってこと? たとえば 2023/05/27 02:03:45 なら最後の 45 だけになれば良いの?
もしそうなら sed 使ってこうすればできるな。
sed 's/^.*://'
YYYY/MM/DD hh:mm:ss 形式ではなく秒が最後に出て来ない形式だったとしても最後のコロンの直後の数字が秒で、
その秒の数字文字列の後に数字でない文字が必ず来るのだとすれば (例えば Sat May 27 02:05:47 JST 2023 の
ような形式だとすれば)こうすれば良い。
sed 's/^.*://;s/[^0-9].*$//'
704デフォルトの名無しさん
2023/05/27(土) 02:42:42.27ID:omxAdlqt サンプルケース書いてくれ
705デフォルトの名無しさん
2023/05/28(日) 09:45:16.03ID:wyI6c4Ev お題 ナイトツアー
5×5の狭いチェスボードのどこかにナイトのコマを置きそこからナイトの可能な動きでコマを動かします
ただし同じマスは2回通れません
このとき全マス25マスを全て通る手順の数を数え上げて下さい
しかし実際全部数えるのは流石に無駄なので対称性を利用して
♯{A1→B3}×8
+ ♯{A3→B5}×8 + ♯{A3→C4}×8
+ ♯{B2→C4}×8
+ ♯{C3→D5}×8
はよいとします
例
♯{A1→B3} = 152
--ナイトの動き--
桂馬の動きと同じ、水平方向の移動量+垂直方向の移動量 = 3となる移動(もちろん盤の中)
5×5の狭いチェスボードのどこかにナイトのコマを置きそこからナイトの可能な動きでコマを動かします
ただし同じマスは2回通れません
このとき全マス25マスを全て通る手順の数を数え上げて下さい
しかし実際全部数えるのは流石に無駄なので対称性を利用して
♯{A1→B3}×8
+ ♯{A3→B5}×8 + ♯{A3→C4}×8
+ ♯{B2→C4}×8
+ ♯{C3→D5}×8
はよいとします
例
♯{A1→B3} = 152
--ナイトの動き--
桂馬の動きと同じ、水平方向の移動量+垂直方向の移動量 = 3となる移動(もちろん盤の中)
706デフォルトの名無しさん
2023/05/28(日) 11:22:07.87ID:p5Vu/cFc707デフォルトの名無しさん
2023/05/28(日) 23:12:57.01ID:eCmMTKII >>705
対称性を考慮するのは面倒なので全部数え上げる。Rで書いたら5秒以内に到底終わらなかったので、
ideone.com/y5Dwy7
C++に移植した。盤面表示はideoneでは途中で切れてしまうので非表示にした(関数moveの
コメント部分をコメントでなくせば表示される)。
ideone.com/6Muw9F
対称性を考慮すれば、手順数は1728 / 8 = 216通りになる。
対称性を考慮するのは面倒なので全部数え上げる。Rで書いたら5秒以内に到底終わらなかったので、
ideone.com/y5Dwy7
C++に移植した。盤面表示はideoneでは途中で切れてしまうので非表示にした(関数moveの
コメント部分をコメントでなくせば表示される)。
ideone.com/6Muw9F
対称性を考慮すれば、手順数は1728 / 8 = 216通りになる。
708蟻人間 ◆T6xkBnTXz7B0
2023/05/29(月) 01:40:51.78ID:1XcMS6f+ お題: 水の流れる複数のタンクにおいて水の流れをシミュレーションしたいので、以下に定義する入力文字列でタンクと
水の流れなどを記述する。入力文字列は次のような形式の行の並びとする。
「(タンクの名前), (タンクの底面積[m^2]), (タンクの底からの排水口までの高さ[m]), (次のタンクの名前)」
各行は各タンクの情報とその次のタンクを表す。入力文字列の最初の行は最初に水が入るタンクに対応する。最初のタンクには外部から水が0.5[m^3/min]の速度で入る。タンクの形状は円錐か四角錐とし、底面は平面状とする。
各タンクには排水口が付いているかも知れない。排水口があるのならそれはタンクの底より高く、タンクの側面に付いている。
排水口は次のタンクにつながっている。次のタンクはその前のタンクより低い位置にある。各タンクにおいて排水口に水が届いていないときは水は排水されない。
タンクとタンクの間の長さと水の落差にかかる時間は無視して構わない。次のタンクがN/Aならそのタンクに排水口と排水先はない。
シミュレーション開始後、1分ごとに各タンクに何[m^3]の水が入っているかを出力せよ。タンクCが満タンなら終了せよ。
(入力)
A, 3, 0.5, B
B, 2, 0.7, C
C, 1, 0.4, N/A
水の流れなどを記述する。入力文字列は次のような形式の行の並びとする。
「(タンクの名前), (タンクの底面積[m^2]), (タンクの底からの排水口までの高さ[m]), (次のタンクの名前)」
各行は各タンクの情報とその次のタンクを表す。入力文字列の最初の行は最初に水が入るタンクに対応する。最初のタンクには外部から水が0.5[m^3/min]の速度で入る。タンクの形状は円錐か四角錐とし、底面は平面状とする。
各タンクには排水口が付いているかも知れない。排水口があるのならそれはタンクの底より高く、タンクの側面に付いている。
排水口は次のタンクにつながっている。次のタンクはその前のタンクより低い位置にある。各タンクにおいて排水口に水が届いていないときは水は排水されない。
タンクとタンクの間の長さと水の落差にかかる時間は無視して構わない。次のタンクがN/Aならそのタンクに排水口と排水先はない。
シミュレーション開始後、1分ごとに各タンクに何[m^3]の水が入っているかを出力せよ。タンクCが満タンなら終了せよ。
(入力)
A, 3, 0.5, B
B, 2, 0.7, C
C, 1, 0.4, N/A
709デフォルトの名無しさん
2023/05/29(月) 01:46:57.43ID:F8hmnix6 >>705
Kotlin
馬鹿正直に再帰で全パターンやっているだけ。
途中経過は出力しない。既に置かれたマスは1bitで記録されるようにして 5 * 5 = 25 bit で Int (32bit) に収まるのでそれを利用している。
恐らく Boolean の配列を使って書くとそこまで最適化されなさそうなのでこうした。
https://paiza.io/projects/O4Ejxs76h64GSeXYCVs2mg
結果は同じ 1728 になったので多分これで合っていると思う。
Kotlin
馬鹿正直に再帰で全パターンやっているだけ。
途中経過は出力しない。既に置かれたマスは1bitで記録されるようにして 5 * 5 = 25 bit で Int (32bit) に収まるのでそれを利用している。
恐らく Boolean の配列を使って書くとそこまで最適化されなさそうなのでこうした。
https://paiza.io/projects/O4Ejxs76h64GSeXYCVs2mg
結果は同じ 1728 になったので多分これで合っていると思う。
710デフォルトの名無しさん
2023/05/29(月) 23:38:05.56ID:5zRv7Ftx711蟻人間 ◆T6xkBnTXz7B0
2023/05/30(火) 20:06:49.36ID:hYJIMfxv お題: x-y平面上に摩擦のないすべり台がある。重力加速度を9.8[m/s^2]とし、重力はy軸とは逆向きに作用している。
この滑り台は動かないように固定されている。横位置x>=0[m]についてf(x)がすべり台の面の高さ[m]を表す。
体重35kgの子どもがx=0の場所から滑り台を滑り始めた。次の場合の5秒後の子どもの位置ベクトルと速度ベクトルを求めよ。空気抵抗は無視する。
(i) f(x)=10-sqrt(x)。
(ii) f(x)=10-sqrt(sqrt(x))。
※ xの平方根をsqrt(x)とする。
この滑り台は動かないように固定されている。横位置x>=0[m]についてf(x)がすべり台の面の高さ[m]を表す。
体重35kgの子どもがx=0の場所から滑り台を滑り始めた。次の場合の5秒後の子どもの位置ベクトルと速度ベクトルを求めよ。空気抵抗は無視する。
(i) f(x)=10-sqrt(x)。
(ii) f(x)=10-sqrt(sqrt(x))。
※ xの平方根をsqrt(x)とする。
712デフォルトの名無しさん
2023/06/01(木) 09:25:39.43ID:dfYyQvOG お題
アルファベットが入力されます
> [A, A, B, B, B, C, C, D, D, D, E]
出力上限が入力されます
> 7
出力上限以内のアルファベットを出力してください
> [A, A, B, B, B, C, C]
ただし、出力上限で切った場合に同じアルファベットが分割される場合は出力上限を超えて
同じアルファベットが続く限り出力してください
アルファベット: [A, A, B, B, B]
出力上限: 3
出力: [A, A, B, B, B]
アルファベットが入力されます
> [A, A, B, B, B, C, C, D, D, D, E]
出力上限が入力されます
> 7
出力上限以内のアルファベットを出力してください
> [A, A, B, B, B, C, C]
ただし、出力上限で切った場合に同じアルファベットが分割される場合は出力上限を超えて
同じアルファベットが続く限り出力してください
アルファベット: [A, A, B, B, B]
出力上限: 3
出力: [A, A, B, B, B]
713デフォルトの名無しさん
2023/06/01(木) 21:49:43.70ID:+6RwHPfX714デフォルトの名無しさん
2023/06/01(木) 22:06:54.62ID:+6RwHPfX お題:矩形に整形された全角文字のテキストが与えられる。左上から時計回りに
渦巻き状に読んだ文字列を、元の矩形と同文字数で桁数がより多く最も近い矩形に
左上から時計回りに渦巻き状に並べて出力せよ。
[例]
プログラ → プログラミン
題スレミ レス題おのグ
おのグン
[問題]
メロスは激怒した。必ず、かの邪智暴虐の王を除かなけ
ては、人一倍に敏感であった。きょう未明メロスは村れ
し、内気な妹と二人暮しだ。この妹は、村の或る律をば
対の嫁の衣裳やら祝宴の御馳走やらを買いに、は気出な
に六花ロスには竹馬の友があった。セリヌンテるな発ら
悪十、メてみるつもりなのだ。久しく逢わなィば一しぬ
邪。え。ねスは、まちの様子を怪しく思っかウる牧、と
もいゆた訪ロのは当りまえだが、けれどたっス市人野決
ど無れいらメい全体が、やけに寂しいも。たでにをを意
れもそ歩かに暗市不安になって来た。、ひのあや、越し
け房、られちの、ん衆をつかまえ。のなっだるっ近えた
。女はぶこうちくだい若たっ逢で路んんそか。て々山。
た。スら、るま無んだ、もスロメなきだりら今来、越メ
来いロぶをい、はでりかばいせの夜、かし、はた花えロ
て無メを友ててち落も日に既うも。るいて訪此の婿、ス
しも。路のい歩。るあでみし楽がのく行てねのだと十に
暮母る大そ。るいてしを工石、で市のスクラシ。し里は
で、あの都らかれそ、め集い買を々品のそ、ず先ては政
んもでのなか近間も式婚結。たいてっなに事るえ迎な治
遊父はにスロメ。た来てっやに市のスクラシの此たれが
と羊、き吹を笛。るあで人牧の村、はスロメ。ぬらかわ
渦巻き状に読んだ文字列を、元の矩形と同文字数で桁数がより多く最も近い矩形に
左上から時計回りに渦巻き状に並べて出力せよ。
[例]
プログラ → プログラミン
題スレミ レス題おのグ
おのグン
[問題]
メロスは激怒した。必ず、かの邪智暴虐の王を除かなけ
ては、人一倍に敏感であった。きょう未明メロスは村れ
し、内気な妹と二人暮しだ。この妹は、村の或る律をば
対の嫁の衣裳やら祝宴の御馳走やらを買いに、は気出な
に六花ロスには竹馬の友があった。セリヌンテるな発ら
悪十、メてみるつもりなのだ。久しく逢わなィば一しぬ
邪。え。ねスは、まちの様子を怪しく思っかウる牧、と
もいゆた訪ロのは当りまえだが、けれどたっス市人野決
ど無れいらメい全体が、やけに寂しいも。たでにをを意
れもそ歩かに暗市不安になって来た。、ひのあや、越し
け房、られちの、ん衆をつかまえ。のなっだるっ近えた
。女はぶこうちくだい若たっ逢で路んんそか。て々山。
た。スら、るま無んだ、もスロメなきだりら今来、越メ
来いロぶをい、はでりかばいせの夜、かし、はた花えロ
て無メを友ててち落も日に既うも。るいて訪此の婿、ス
しも。路のい歩。るあでみし楽がのく行てねのだと十に
暮母る大そ。るいてしを工石、で市のスクラシ。し里は
で、あの都らかれそ、め集い買を々品のそ、ず先ては政
んもでのなか近間も式婚結。たいてっなに事るえ迎な治
遊父はにスロメ。た来てっやに市のスクラシの此たれが
と羊、き吹を笛。るあで人牧の村、はスロメ。ぬらかわ
715デフォルトの名無しさん
2023/06/02(金) 00:02:20.01ID:IXZreQh9716デフォルトの名無しさん
2023/06/02(金) 00:10:19.23ID:AyhrxfDx717デフォルトの名無しさん
2023/06/03(土) 18:04:48.61ID:lPLamTYg718蟻人間 ◆T6xkBnTXz7B0
2023/06/04(日) 14:05:22.78ID:Sin8uq0I お題: 郵便切手の問題。
切り離されていない、一列に並んだn枚の切手を考える。
一枚の切手の上に全ての切手を折り込む時、
左端の切手を表向きで一番上に折り込む方法は何通りか計算せよ。
切り離されていない、一列に並んだn枚の切手を考える。
一枚の切手の上に全ての切手を折り込む時、
左端の切手を表向きで一番上に折り込む方法は何通りか計算せよ。
719638
2023/06/04(日) 19:16:56.02ID:pcjKLYRK720638
2023/06/04(日) 20:52:10.72ID:pcjKLYRK >>712 Perl5
use feature qw{signatures say};
sub f($n, $c, @s) {
if (1 < $n) {
$c, f($n - 1, @s);
} elsif (1 == $n) {
$c, f(0, $c, @s);
} else {
$c, f(0, $c, splice @s, 1) if $c eq $s[0];
}
}
say f 7, qw[A A B B B C C D D D E];
say f 3, qw[A A B B B];
※見易くするためインデントは全角スペースに置換してあります。
実行結果
$ perl 21_712.pl
AABBBCC
AABBB
use feature qw{signatures say};
sub f($n, $c, @s) {
if (1 < $n) {
$c, f($n - 1, @s);
} elsif (1 == $n) {
$c, f(0, $c, @s);
} else {
$c, f(0, $c, splice @s, 1) if $c eq $s[0];
}
}
say f 7, qw[A A B B B C C D D D E];
say f 3, qw[A A B B B];
※見易くするためインデントは全角スペースに置換してあります。
実行結果
$ perl 21_712.pl
AABBBCC
AABBB
721638
2023/06/04(日) 23:24:30.12ID:pcjKLYRK >>712 Perl5、もっと簡潔なやり方あるんだった…orz
use feature qw{signatures say};
sub f($n, $s) {
my $r = '^.{' . ($n - 1) . '}(.)\1*';
$s =~ /$r/;
$&;
}
say f 7, 'AABBBCCDDDE';
say f 3, 'AABBB';
実行結果
$ perl 21_712_rex.pl
AABBBCC
AABBB
use feature qw{signatures say};
sub f($n, $s) {
my $r = '^.{' . ($n - 1) . '}(.)\1*';
$s =~ /$r/;
$&;
}
say f 7, 'AABBBCCDDDE';
say f 3, 'AABBB';
実行結果
$ perl 21_712_rex.pl
AABBBCC
AABBB
722デフォルトの名無しさん
2023/06/05(月) 17:20:26.45ID:41NWmDDP お題 逆順に
文字列が与えられます
使われている文字のリストを作って並べその“反対の”文字を対応させます
例えば登場文字列が
HELLO WORLD
なら出てくる文字をコード順に並べると
" DEHLORW"
であるので
E → O, L →H, ' '→W
となります(空白、句読点等一切区別せず一文字と考えます)
この対応で入力された文字列を変換してください
例
HELLO WORLD →
LOHHEW EDHR
⑨⑫⑦②⑤⑭⑰⑳㉔①⑩⑬㉒⑲④⑮⑪⑧㉓⑥③⑯㉑⑱ →
⑯⑬⑱㉓⑳⑪⑧⑤①㉔⑮⑫③⑥㉑⑩⑭⑰②⑲㉒⑨④⑦
文字列が与えられます
使われている文字のリストを作って並べその“反対の”文字を対応させます
例えば登場文字列が
HELLO WORLD
なら出てくる文字をコード順に並べると
" DEHLORW"
であるので
E → O, L →H, ' '→W
となります(空白、句読点等一切区別せず一文字と考えます)
この対応で入力された文字列を変換してください
例
HELLO WORLD →
LOHHEW EDHR
⑨⑫⑦②⑤⑭⑰⑳㉔①⑩⑬㉒⑲④⑮⑪⑧㉓⑥③⑯㉑⑱ →
⑯⑬⑱㉓⑳⑪⑧⑤①㉔⑮⑫③⑥㉑⑩⑭⑰②⑲㉒⑨④⑦
723デフォルトの名無しさん
2023/06/05(月) 19:56:23.90ID:8ZOWtKfv724638
2023/06/05(月) 20:41:22.90ID:4V5NjjYa >>720 もっとすんなり書けるんだった… orz
$c, f(0, $c, splice @s, 1) if $c eq $s[0];
↓
$c, f(0, @s) if $c eq $s[0];
関数全体のコードとしてはこうなる:
sub f($n, $c, @s) {
if (1 < $n) {
$c, f($n - 1, @s);
} elsif (1 == $n) {
$c, f(0, $c, @s);
} else {
$c, f(0, @s) if $c eq $s[0];
}
}
すっきりした形になりました
$c, f(0, $c, splice @s, 1) if $c eq $s[0];
↓
$c, f(0, @s) if $c eq $s[0];
関数全体のコードとしてはこうなる:
sub f($n, $c, @s) {
if (1 < $n) {
$c, f($n - 1, @s);
} elsif (1 == $n) {
$c, f(0, $c, @s);
} else {
$c, f(0, @s) if $c eq $s[0];
}
}
すっきりした形になりました
725638
2023/06/05(月) 21:31:53.30ID:4V5NjjYa >>722 Perl5
use feature qw{signatures say};
use utf8; binmode STDOUT => 'utf8';
use Encode 'encode';
sub f($s) {
@s = split '', $s;
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
%o = map{$h{$c[$_]} => $h{$i[$_]}} 0..$#c;
say map{$o{$_}} @s;
}
f 'HELLO WORLD';
f '⑨⑫⑦②⑤⑭⑰⑳?①⑩⑬?⑲④⑮⑪⑧?⑥③⑯?⑱';
※見易くするためインデントは全角スペースに置換してあります。
実行結果:
$ perl 21_722.pl
LOHHEW EDHR
⑯⑬⑱?⑳⑪⑧⑤①?⑮⑫③⑥?⑩⑭⑰②⑲?⑨④⑦
use feature qw{signatures say};
use utf8; binmode STDOUT => 'utf8';
use Encode 'encode';
sub f($s) {
@s = split '', $s;
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
%o = map{$h{$c[$_]} => $h{$i[$_]}} 0..$#c;
say map{$o{$_}} @s;
}
f 'HELLO WORLD';
f '⑨⑫⑦②⑤⑭⑰⑳?①⑩⑬?⑲④⑮⑪⑧?⑥③⑯?⑱';
※見易くするためインデントは全角スペースに置換してあります。
実行結果:
$ perl 21_722.pl
LOHHEW EDHR
⑯⑬⑱?⑳⑪⑧⑤①?⑮⑫③⑥?⑩⑭⑰②⑲?⑨④⑦
726638
2023/06/05(月) 21:35:18.29ID:4V5NjjYa >>722 Perl5 スマソ、ビューワーから書き込んだら丸数字の一部が文字化けしたのでブラウザから再書き込み
use feature qw{signatures say};
use utf8; binmode STDOUT => 'utf8';
use Encode 'encode';
sub f($s) {
@s = split '', $s;
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
%o = map{$h{$c[$_]} => $h{$i[$_]}} 0..$#c;
say map{$o{$_}} @s;
}
f 'HELLO WORLD';
f 'HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q';
実行結果
$ perl 21_722.pl
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
use feature qw{signatures say};
use utf8; binmode STDOUT => 'utf8';
use Encode 'encode';
sub f($s) {
@s = split '', $s;
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
%o = map{$h{$c[$_]} => $h{$i[$_]}} 0..$#c;
say map{$o{$_}} @s;
}
f 'HELLO WORLD';
f 'HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q';
実行結果
$ perl 21_722.pl
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
727デフォルトの名無しさん
2023/06/05(月) 22:09:27.65ID:hSG7KPux >>722
PowerShell 4以上 (U+10000以上の文字、結合文字、異体字セレクタに対応)
foreach ($s in "HELLO WORLD", "HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q", "魚と花󠄁か゚𩸽") {
$c = [Globalization.StringInfo]::GetTextElementEnumerator($s) | sort | unique
$h = @{}
0..($c.length - 1) |% {$h[$c[$_]] = $c[-$_ - 1]}
-join $h[[Globalization.StringInfo]::GetTextElementEnumerator($s)]
}
[実行結果]
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
と魚花󠄁𩸽か゚
PowerShell 4以上 (U+10000以上の文字、結合文字、異体字セレクタに対応)
foreach ($s in "HELLO WORLD", "HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q", "魚と花󠄁か゚𩸽") {
$c = [Globalization.StringInfo]::GetTextElementEnumerator($s) | sort | unique
$h = @{}
0..($c.length - 1) |% {$h[$c[$_]] = $c[-$_ - 1]}
-join $h[[Globalization.StringInfo]::GetTextElementEnumerator($s)]
}
[実行結果]
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
と魚花󠄁𩸽か゚
728638
2023/06/06(火) 01:24:29.34ID:gRU+jG8g >>726 しくった
utf-8文字を可変長16進数にunpackして辞書的順番でsortするので、例題では意図した通りの結果を得られたが、
半角と全角などutf-8でバイト数の異なる文字が混在する文字列の場合には、順番が違ってくるだろうな…
utf-8文字を可変長16進数にunpackして辞書的順番でsortするので、例題では意図した通りの結果を得られたが、
半角と全角などutf-8でバイト数の異なる文字が混在する文字列の場合には、順番が違ってくるだろうな…
729638
2023/06/06(火) 02:40:16.03ID:gRU+jG8g >>726 Perlで文字の数値コードを返すord()関数は半角文字の場合にASCIIコードを返すが、
全角Unicode文字ではコードポイントを返す、ということなので、素直にそれを使い、
文字列としてっではなく数値としてsortし
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
↓を
%h = map{ord($_) => $_} @s;
@i = reverse @c = sort{$a <=> $b} keys %h;
と修正するのがよさげ。連投スマソ
全角Unicode文字ではコードポイントを返す、ということなので、素直にそれを使い、
文字列としてっではなく数値としてsortし
%h = map{unpack('H*', encode('utf-8', $_)) => $_} @s;
@i = reverse @c = sort keys %h;
↓を
%h = map{ord($_) => $_} @s;
@i = reverse @c = sort{$a <=> $b} keys %h;
と修正するのがよさげ。連投スマソ
730デフォルトの名無しさん
2023/06/06(火) 20:31:50.40ID:hMwocYm9 >>714 octave
https://ideone.com/MXrAYt
m2c = @(m, r, c) mat2cell(m, repelem(r, size(m, 1) / r), repelem(c, size(m, 2) / c));
s2c = @(s) m2c(s, 1, 3);
function v = e2v(e, v)
if nargin < 2
v = e2v(e, []);
elseif ~isempty(e)
v = e2v(rot90(e(2:end, :)), [v e(1, :)]);
end
end
function ind = eddyind(varargin)
if nargin == 2
ind = e2v(reshape(1:times(varargin{1:2}), varargin{1:2}));
elseif nargin == 1
ind = eddyind(size(varargin{1}, 1), size(varargin{1}, 2));
end
end
s = 省略
c = s2c(s);
n = numel(c);
m = find(rem(n, 1:n) == 0 & size(c, 2) < 1:n)(1);
d = cell(n / m, m);
d(eddyind(d)) = c(eddyind(c));
disp(cell2mat(d));
https://ideone.com/MXrAYt
m2c = @(m, r, c) mat2cell(m, repelem(r, size(m, 1) / r), repelem(c, size(m, 2) / c));
s2c = @(s) m2c(s, 1, 3);
function v = e2v(e, v)
if nargin < 2
v = e2v(e, []);
elseif ~isempty(e)
v = e2v(rot90(e(2:end, :)), [v e(1, :)]);
end
end
function ind = eddyind(varargin)
if nargin == 2
ind = e2v(reshape(1:times(varargin{1:2}), varargin{1:2}));
elseif nargin == 1
ind = eddyind(size(varargin{1}, 1), size(varargin{1}, 2));
end
end
s = 省略
c = s2c(s);
n = numel(c);
m = find(rem(n, 1:n) == 0 & size(c, 2) < 1:n)(1);
d = cell(n / m, m);
d(eddyind(d)) = c(eddyind(c));
disp(cell2mat(d));
731デフォルトの名無しさん
2023/06/06(火) 21:42:34.58ID:hMwocYm9 >>722 ruby
https://ideone.com/yqb6sd
f = ->(s) {s.chars.uniq.sort.join.tap{|u| break s.tr(u, u.reverse)}}
p f.('HELLO WORLD')
p f.('HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q')
#p f.('HELLO WORLD-') # trのパターンになっちゃう文字があるとダメ
https://ideone.com/yqb6sd
f = ->(s) {s.chars.uniq.sort.join.tap{|u| break s.tr(u, u.reverse)}}
p f.('HELLO WORLD')
p f.('HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q')
#p f.('HELLO WORLD-') # trのパターンになっちゃう文字があるとダメ
732デフォルトの名無しさん
2023/06/06(火) 22:14:45.84ID:x5qPYUnP >>722
>>727では大・小・全角・半角文字が区別されないのを修正した。PowerShell 2でも正しく動作するようになった。
foreach ($s in "HELLO WORLD", "HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q", "魚と花󠄁か゚𩸽", "HeLLO WoRLD") {
$c = [Globalization.StringInfo]::GetTextElementEnumerator($s) | sort -unique {[int[]][char[]]$_}
$h = New-Object Collections.Hashtable
0..($c.length - 1) |% {$h[$c[$_]] = $c[-$_ - 1]}
-join $h[[Globalization.StringInfo]::GetTextElementEnumerator($s)]
}
[実行結果]
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
と魚花󠄁𩸽か゚
oLeeRW HODL
>>727では大・小・全角・半角文字が区別されないのを修正した。PowerShell 2でも正しく動作するようになった。
foreach ($s in "HELLO WORLD", "HKFADMPS㉔@IL㉒RCNJG㉓EBO㉑Q", "魚と花󠄁か゚𩸽", "HeLLO WoRLD") {
$c = [Globalization.StringInfo]::GetTextElementEnumerator($s) | sort -unique {[int[]][char[]]$_}
$h = New-Object Collections.Hashtable
0..($c.length - 1) |% {$h[$c[$_]] = $c[-$_ - 1]}
-join $h[[Globalization.StringInfo]::GetTextElementEnumerator($s)]
}
[実行結果]
LOHHEW EDHR
OLQ㉓SJGD@㉔NKBE㉑IMPAR㉒HCF
と魚花󠄁𩸽か゚
oLeeRW HODL
733デフォルトの名無しさん
2023/06/07(水) 23:16:05.89ID:ijTNramp お題
A,B,Cがランダムにいくつか入力されます
隣り合う文字が異なるときそれらは同じグループです
A,B → [A,B]
隣り合う文字が同じ時それらは異なるグループです
A,A → [A],[A]
A,B,A,A,A,B → [A,B,A],[A],[A,B]
もっとも長いグループを出力してください
入力
B,A,B,C,B,B,B,A,C,C,A,B,A,A,C,A,B,C,C,C,B,C,A,B,C,A,A,A,C,B
出力
[C,B,C,A,B,C,A]
A,B,Cがランダムにいくつか入力されます
隣り合う文字が異なるときそれらは同じグループです
A,B → [A,B]
隣り合う文字が同じ時それらは異なるグループです
A,A → [A],[A]
A,B,A,A,A,B → [A,B,A],[A],[A,B]
もっとも長いグループを出力してください
入力
B,A,B,C,B,B,B,A,C,C,A,B,A,A,C,A,B,C,C,C,B,C,A,B,C,A,A,A,C,B
出力
[C,B,C,A,B,C,A]
734638
2023/06/08(木) 01:33:27.84ID:GaLhBmy3 >>733 Perl5
use feature qw{:5.16 signatures say};
@a = ([]);
sub ($c, @s) {
push @{$a[-1]}, $c;
push @a, [] if $c eq $s[0];
__SUB__->(@s) if @s;
}->(qw{B A B C B B B A C C A B A A C A B C C C B C A B C A A A C B});
$c = (sort{@$a <=> @$b} @a)[-1];
$" = ','; say "[@$c]";
※見易くするためインデントを全角スペースに置換してあります。
実行結果
$ perl 21_733.pl
[C,B,C,A,B,C,A]
use feature qw{:5.16 signatures say};
@a = ([]);
sub ($c, @s) {
push @{$a[-1]}, $c;
push @a, [] if $c eq $s[0];
__SUB__->(@s) if @s;
}->(qw{B A B C B B B A C C A B A A C A B C C C B C A B C A A A C B});
$c = (sort{@$a <=> @$b} @a)[-1];
$" = ','; say "[@$c]";
※見易くするためインデントを全角スペースに置換してあります。
実行結果
$ perl 21_733.pl
[C,B,C,A,B,C,A]
735デフォルトの名無しさん
2023/06/08(木) 10:35:46.63ID:s2HJPh3y736デフォルトの名無しさん
2023/06/08(木) 21:24:06.92ID:B/+C/EDE >>733
PowerShell
$s = "B,A,B,C,B,B,B,A,C,C,A,B,A,A,C,A,B,C,C,C,B,C,A,B,C,A,A,A,C,B"
@($s -replace "(.),(?=\1)", "`$1/" -split "/" | group length | sort -descending {[int]$_.name})[0] |% {$_.group}
[実行結果]
C,B,C,A,B,C,A
PowerShell
$s = "B,A,B,C,B,B,B,A,C,C,A,B,A,A,C,A,B,C,C,C,B,C,A,B,C,A,A,A,C,B"
@($s -replace "(.),(?=\1)", "`$1/" -split "/" | group length | sort -descending {[int]$_.name})[0] |% {$_.group}
[実行結果]
C,B,C,A,B,C,A
737デフォルトの名無しさん
2023/06/08(木) 22:05:38.22ID:QLsHzH3O >>733 ocaml
https://ideone.com/jfFx3Y
open List
let (<<) f g x = f (g x)
let flip f x y = f y x
let f =
let aux x = function
[] :: ys -> [x] :: ys
| (z :: _) as y :: ys -> if x = z
then [x] :: y :: ys
else (x :: y) :: ys
in rev << hd << rev << map snd << sort compare << map (fun x -> (length x, x)) << fold_left (flip aux) [[]]
let g = print_newline << iter print_char << f
let () = g ['B';'A';'B';'C';'B';'B';'B';'A';'C';'C';'A';'B';'A';'A';'C';'A';'B';'C';'C';'C';'B';'C';'A';'B';'C';'A';'A';'A';'C';'B']
>>733 ruby
f = ->(a) {a.each_with_object([[]]) {|x, acc| acc[-1][-1] != x ? acc[-1] << x : acc << [x]}.sort_by(&:size)[-1]}
p f.(%w(B A B C B B B A C C A B A A C A B C C C B C A B C A A A C B))
https://ideone.com/jfFx3Y
open List
let (<<) f g x = f (g x)
let flip f x y = f y x
let f =
let aux x = function
[] :: ys -> [x] :: ys
| (z :: _) as y :: ys -> if x = z
then [x] :: y :: ys
else (x :: y) :: ys
in rev << hd << rev << map snd << sort compare << map (fun x -> (length x, x)) << fold_left (flip aux) [[]]
let g = print_newline << iter print_char << f
let () = g ['B';'A';'B';'C';'B';'B';'B';'A';'C';'C';'A';'B';'A';'A';'C';'A';'B';'C';'C';'C';'B';'C';'A';'B';'C';'A';'A';'A';'C';'B']
>>733 ruby
f = ->(a) {a.each_with_object([[]]) {|x, acc| acc[-1][-1] != x ? acc[-1] << x : acc << [x]}.sort_by(&:size)[-1]}
p f.(%w(B A B C B B B A C C A B A A C A B C C C B C A B C A A A C B))
738デフォルトの名無しさん
2023/06/08(木) 22:14:54.10ID:B/+C/EDE お題:1234567以下の素数 a, b, c で a + b + c = 1234567 かつ a ≤ b ≤ c を満たす組み合わせは何通りあるか計算せよ。
739デフォルトの名無しさん
2023/06/09(金) 04:35:40.14ID:Xuj67sW5740デフォルトの名無しさん
2023/06/09(金) 08:47:59.66ID:bdlzeFWV 実質力技しかないやろな
割ったあまりとかで多少減らせる程度にしかならない
割ったあまりとかで多少減らせる程度にしかならない
741デフォルトの名無しさん
2023/06/09(金) 08:55:35.77ID:bdlzeFWV 入力nに対してn以下の素数はn オーダーある
最初に素数list upするのにn オーダー、そこから足してnを見つけるのはどうやってもn²オーダーよりは早くできそうにない
最初に素数list upするのにn オーダー、そこから足してnを見つけるのはどうやってもn²オーダーよりは早くできそうにない
742デフォルトの名無しさん
2023/06/09(金) 20:08:26.01ID:7Vf79qrZ >>738 c
https://ideone.com/Dbl6mc
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void sieve_of_eratosthenes(int n, int **isprime, int **primes_beg, int **primes_end) {
int i, m, j, nbytes = (1 + n) * sizeof **isprime, *map = malloc(nbytes), *beg = malloc(nbytes), *end;
for (i = 2; i <= n; i++) map[i] = 1;
for (i = 2, m = sqrt(n); i <= m; i++)
if (map[i]) for (j = i * i; j <= n; j += i) map[j] = 0;
for (i = 2, end = beg; i <= n; i++) if (map[i]) *end++ = i;
*isprime = map, *primes_beg = beg, *primes_end = end;
}
int main() {
int n = 1234567, *isprime, *primes_beg, *primes_end;
sieve_of_eratosthenes(n, &isprime, &primes_beg, &primes_end);
int *a, *b, c, count = 0;
for (a = primes_beg; a < primes_end && *a <= n / 3; a++)
for (b = a; b < primes_end && *b <= (c = n - *a - *b); b++)
if (isprime[c]) count++;
printf("count = %d\n", count);
return 0;
}
https://ideone.com/Dbl6mc
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
void sieve_of_eratosthenes(int n, int **isprime, int **primes_beg, int **primes_end) {
int i, m, j, nbytes = (1 + n) * sizeof **isprime, *map = malloc(nbytes), *beg = malloc(nbytes), *end;
for (i = 2; i <= n; i++) map[i] = 1;
for (i = 2, m = sqrt(n); i <= m; i++)
if (map[i]) for (j = i * i; j <= n; j += i) map[j] = 0;
for (i = 2, end = beg; i <= n; i++) if (map[i]) *end++ = i;
*isprime = map, *primes_beg = beg, *primes_end = end;
}
int main() {
int n = 1234567, *isprime, *primes_beg, *primes_end;
sieve_of_eratosthenes(n, &isprime, &primes_beg, &primes_end);
int *a, *b, c, count = 0;
for (a = primes_beg; a < primes_end && *a <= n / 3; a++)
for (b = a; b < primes_end && *b <= (c = n - *a - *b); b++)
if (isprime[c]) count++;
printf("count = %d\n", count);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 今日はチートデイなのでパスタサラダ食べました
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 5時だから窓から5回ちんこ出した
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- リュウジ、ファミマコラボが不評だったから反論で緊急の動画回しててワロタァ
