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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 00:02:57.84 ID:MQWrKSb7.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/

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

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

581 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 08:22:49.31 ID:WTZHV9SY.net]
政府公認のスカトロサークルだって!?じゅるり

582 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 02:33:11.33 ID:FeY8iOM4.net]
高度IT人材、富士通は最大年収3500万円へ

AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ

【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材

来年度から副業解禁 人材多様化へ―大同生命次期社長

第一生命HD、副業解禁 約1万5000人対象

第一生命HD、副業解禁 1万5000人対象―大手生保初

IHI、国内8000人の副業解禁 重厚長大企業も転機

IHI、社外兼業を解禁 社内副業もルール化

583 名前:デフォルトの名無しさん [2022/05/05(木) 16:49:02.33 ID:SGcHNlDo.net]
>>554
C言語

https://paiza.io/projects/xS5GP9DAU6KzhDsM6x7M6g

strtok_r() を strtok_r2() の名前にして自分で実装した。
strsep() も paiza.io のCのライブラリには何故かなかったので strsep2() にして自分で実装した。

584 名前:デフォルトの名無しさん mailto:sage [2022/05/11(水) 08:28:38.45 ID:zQqHPRjb.net]
思い付きでお題考えてみた
検証してないんだけどどう?

お題: ランダムな部屋を移動する最短距離を求める

行列がある
任意の横幅Wと高さHで表現される部屋がランダムに1 <= N <= 5個生成される
この部屋を部屋内の座標からランダムに選択した別の部屋の部屋内の座標まで通路を作る
通路の要素は斜めには生成されず横と縦に生成される
通路はランダムに1つの部屋から0 <= R <= 3生成される

各部屋を各通路で繋げ任意の部屋Aと任意の部屋Bを選択する
このときAからBまでの最短経路を求めよ

585 名前:デフォルトの名無しさん mailto:sage [2022/05/11(水) 10:03:08.65 ID:u3pPN9f9.net]
ランダムの部分いる?

586 名前:デフォルトの名無しさん mailto:sage [2022/05/11(水) 19:40:13.01 ID:RtJ1FIjP.net]
日本語がよくわからんから数式で書いてくれ

587 名前:デフォルトの名無しさん mailto:sage [2022/05/11(水) 19:57:58.11 ID:dPHs0KwZ.net]
数式だと答えになりそうだから図で書いてくれ

588 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 17:53:19 ID:UVEhLnaE.net]
さらに、閑古鳥をよびよせるか

[お題] 多倍

589 名前:キでは無理!?
整数 S, T が与えられる。(1 <= S <= T <= 400万)
S以上T以下の(連続する)整数の最小公倍数(LCM)をもとめる
答えは, 1000000007(10億7)の余りで出力

1) 6 8 --> 168
6,7,8 の最小公倍数、LCM(6, 7)= 42 --> LCM(42, 8)= 168
2) 10 30 --> 89546497
剰余前は、2329089562800
3) 2567890 3456789 --> ?
4) 1 4000000 --> ?
[]
[ここ壊れてます]



590 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:03:46.76 ID:f4mJcXLG.net]
>>562

Haskell

https://ideone.com/dPbmse

591 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 21:16:43.90 ID:bqW40Z5X.net]
√T以下の素数列挙
各数を素因数分解して各素数の指数の最大を求める
10億7の剰余で上の乗算を行う

592 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 22:51:31.74 ID:vGEyxbeO.net]
>>562 C
https://ideone.com/IWOE9a

593 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 19:19:40.97 ID:nM/DB7wD.net]
>>562
https://ideone.com/O9PQbN

想定解としては、(他の人同様)
 求める最小公倍数を素因数分解した形に作るイメージ
 400万以下の"素数及び素数べき乗"は、高々28.3万件。
 S以上T以下で、素数べき乗が割り切れるかどうかチェックしている。
 (方法は T/素数べき乗 > (S-1)/素数べき乗 ならあると, O(1)判定)
 ボトルネックは素数を求める部分なので、手抜きしている。

余談)
・4)を多倍長で計算すると173万桁だった(一分程度ででた)
・10^9+7 ではなく、下9桁を出力だと、4)は 0になる(5^9が範囲にあるから)

594 名前:デフォルトの名無しさん mailto:sage [2022/07/01(金) 10:06:17.68 ID:GRk1+wVC.net]
age

595 名前:デフォルトの名無しさん mailto:sage [2022/07/01(金) 15:47:14 ID:GJ0Vg4bO.net]
お題: 循環リストを検出するプログラムを書け

596 名前:デフォルトの名無しさん mailto:sage [2022/07/01(金) 19:58:00.80 ID:il671KyI.net]
循環リスト
の定義を書いてください

597 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 02:10:30.75 ID:1mXsd8mZ.net]
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID

598 名前:デフォルトの名無しさん [2022/07/02(土) 04:54:46.54 ID:5fwFwNtd.net]
>>570
Kotlin

自分ではほとんど何も考えていない脱力感溢れるプログラム

https://paiza.io/projects/EK5QmNc2f4MgmmMLM3FcrQ

599 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 05:51:46.20 ID:y+j5RBoo.net]
>>570 Ruby

f = -> s {
case s
when /\A(?:0|[1-9]\d*)\z|\A(?:[1-9]\d{0,2})(?:,\d{3})*\z/
:INT
when /\A(?:0?|[1-9]\d*)\.\d+\z/
:FLOAT
else
:INVALID
end
}

%w[123 1,234 1.23 a123 12abc 1.23.435 .142857 1. 0 01 1,234,567 1234,567].each{|s|
puts '%s -> %s' % [s, f[s]]
}

# =>

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID



600 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 05:58:59.35 ID:At3W7bIA.net]
>>570
こう言うのは仕様をちゃんと提示してよ
123.
123.0
12,34
はどうなればいいのか

601 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 08:08:58.00 ID:syeRaQWQ.net]
そんな文句みたいな言い方するほどか?
他の問題に比べたらケースちゃんと提示してる方だし
そういうのは想定してないってなんとなくわかるだろ
競プロならちゃんと定義必要だろうけど

602 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 08:09:44.82 ID:syeRaQWQ.net]
123.0は確かに気になるけど

603 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 09:41:42.13 ID:At3W7bIA.net]
>>574
> そういうのは想定してないってなんとなくわかるだろ
お題なんだから想定しろよ
でないとそのケースはそうじゃなくて

604 名前:こうすべきとか言う奴が出てきて荒れる元だし []
[ここ壊れてます]

605 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 09:58:04.16 ID:dKfad4Z0.net]
はい!

606 名前:デフォルトの名無しさん [2022/07/02(土) 09:58:41.88 ID:COZLaCzb.net]
123.0はfloatだろ常考

607 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 12:04:36.48 ID:oDFjP9XJ.net]
黙って実装して自分なりの仕様を提示するテストケースを追加して提出した>>572の勝利

608 名前:ハノン mailto:sage [2022/07/02(土) 14:55:56.14 ID:w21fdpYM.net]
>>579
激しく同意

609 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 15:40:39.43 ID:ZFJdClOp.net]
>>579
クールだよな



610 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 16:54:51.10 ID:RqXE55Ja.net]
>>570
こういうアホがソフト仕様を書くと悲惨

611 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 17:49:49.50 ID:Vxz6zO/I.net]
久々に出題者現れたかと思ったらフルボッコでかわいそう

612 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 18:03:20.65 ID:+K04BJMF.net]
もっと気楽にやれよ
普段ゴミみたいな案件で意を汲み取れず怒られ理不尽な思いしてる底辺コーダーが叩き行為で鬱憤晴らししたいんだろうけどさw
仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
その議論を「荒れる」と捉えるのは違うでしょ

613 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 20:54:40.02 ID:1mXsd8mZ.net]
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
version 1.0.1

123 -> INT
1,234 -> INT
1.23 -> FLOAT
a123 -> INVALID
12abc -> INVALID
1.23.435 -> INVALID
.142857 -> FLOAT
1. -> INVALID
0 -> INT
01 -> INVALID
1,234,567 -> INT
1234,567 -> INVALID
123.0 -> FLOAT

614 名前:デフォルトの名無しさん mailto:sage [2022/07/02(土) 23:37:34.43 ID:12WH0HiU.net]
>>568
https://ideone.com/WdXv5B

615 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 06:43:46.91 ID:/5k6Ls0P.net]
.142857がOKで1.がNG
なんか違和感
どの言語の流儀?

具体例だけに頼らないで
定義っぽく書けない?

----
[整数部]、[整数部].[小数部]、.[小数部] のいずれかの形
[整数部] : 0123456789の列1文字以上、もしくはこれを3桁ずつ,で区切った形
2桁以上の場合は先頭は0ではない
[小数部] : 0123456789の列1文字以上
....

こんな感じ

616 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 07:10:28.62 ID:3/zKVKew.net]
0.DDD を .DDD と表記するのは欧米では情報系に限らず日常よく見られること
CSSもperlも昔のrubyも対応してたんじゃなかったかな

617 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 09:01:07.02 ID:udoKn6Zg.net]
1. がNGなのは?
どこの流儀?

618 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 09:17:25.30 ID:aLgpTdvv.net]
>>584
> 仕様の隙間をどうするかをこういったところで一般共通認識得るのは有意義
だからその一般認識がないから揉めるって話
既に違和感と言い出す奴とか欧米ガーとか流儀ガーとか言い出してるだろ
エディタの宗教戦争と同じで正解なんてないんだからお題を作った奴が決めないと収拾つかんよ

619 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 09:24:18.29 ID:3/zKVKew.net]
>>590
1から10まで教えてもらえないとなんもできないのかよ
エディタ宗教戦争を例に出してるけどあんなのにガチに捉えてるバカはお前くらいだ



620 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 09:34:46.48 ID:/kuq8Z/3.net]
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする

INT: digit+

621 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 09:37:29.23 ID:/kuq8Z/3.net]
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.2

int: digits
float: digits ('.' digits)?
digits: digit+
digit: [0-9]+

622 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 10:08:31.69 ID:JHbRyeE7.net]
>>591
ガチに捉えるもなにも今でもやってるだろw

623 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 10:15:42.92 ID:JHbRyeE7.net]
>>593
カンマとかはなくなってるけど、仕様変更ですか?
あと
digits: [0-9]+
にしてdigitをやめるか
digit: [0-9]
にした方がいいかと思いますよ

624 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 12:27:53.93 ID:/kuq8Z/3.net]
>>595

お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.3

int: comma_

625 名前:digit
float: comma_digit '.' digit* | '.' digit*
comma_digit: digit_123 { ( ','? digit_3 ) }*
digit_3: digit digit digit
digit_123: digit digit? digit?
digit: [0-9]

どや?完璧だろこのBNF
これで文句ないな
[]
[ここ壊れてます]

626 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 12:41:01.89 ID:E32cFzvb.net]
>>596
"1."、"01"、"1234,567" が INVALID になりませんし "." だけでも FLOAT になるのはどうかと思いますが...

627 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 12:54:46.68 ID:/kuq8Z/3.net]
>>597
お題: 文字列が整数だったらINT, 実数だったらFLOATと出力するプログラムを作れ
変換できない場合はINVALIDと出力せよ
BNFは↓とする
version 1.0.4

int: comma_digit
float: comma_digit '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ( ','? digit_3 ) }*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

どや?

628 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 14:30:14.53 ID:+vJDgzA0.net]
勉強になる

629 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 15:35:40.90 ID:VBJi0e3g.net]
>>598
指摘された箇所すら直せないとかどう見ても向いてないからやめたら?
> "1234,567" が INVALID になりませんし



630 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 15:38:27.96 ID:7UQlj4nA.net]
ハズレ上司感

631 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 15:41:49.46 ID:yV0MWMu9.net]
>>570 ocaml
https://ideone.com/j9z2um

632 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 16:15:01.49 ID:/kuq8Z/3.net]
>>600
めんどくせ~な~
お前やれよ

633 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 16:24:52.83 ID:/kuq8Z/3.net]
>>600
version 1.0.5

int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: digit_19 digit_09*
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

ていうか1234,567にはならんはずだぞ

634 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 16:30:18.21 ID:/kuq8Z/3.net]
>>600
version 1.0.6

int: comma_digit | normal_digit
float: ( comma_digit | normal_digit ) '.' digit_09+ | '.' digit_09+
comma_digit: digit_123 { ',' digit_3 }*
normal_digit: ( digit_19 digit_09+ ) | digit_09
digit_3: digit_09 digit_09 digit_09
digit_123: digit_19 digit_09? digit_09?
digit_19: [1-9]
digit_09: [0-9]

おら!完璧だろ!

635 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 17:25:11.12 ID:bGSSCSEx.net]
>>604
> ていうか1234,567にはならんはずだぞ
しれっと変えといてさすがにそれは恥ずかしいな
>>598> comma_digit: digit_123 { ( ','? digit_3 ) }*
>> 604 > comma_digit: digit_123 { ',' digit_3 }*

>>605
まあ、よしとしてやろう

636 名前:デフォルトの名無しさん mailto:sage [2022/07/03(日) 20:20:25.60 ID:H80x+Ni5.net]
問題を解かずに出題の形式美に必死になるなんて、このスレ的にどうなのよ?

637 名前:蟻人間 mailto:sage [2022/07/03(日) 21:46:41.57 ID:wwKaul6r.net]
char buf[64];
fgets(buf, 64, stdin);
char *endptr;
strtol(buf, &endptr, 10);
if (*endptr == 0) {
puts("INT");
return;
}
strtod(buf, &endptr);
if (*endptr == 0) {
puts("FLOAT");
return;
}
puts("INVALID");

638 名前:デフォルトの名無しさん mailto:sage [2022/07/04(月) 22:09:22.65 ID:hLP3lYAM.net]
>>570 dart
https://ideone.com/hT8xrN

639 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 20:02:47.21 ID:N6PR1KyM.net]
お題
非負整数xが16進数表記で与えられる。xのビットu~lの範囲を逆順にした値を出力せよ。

[入力]
x u l

[例]
0x80 7 0
=> 0x1 (8bit全体をreverse)

0xABCD 11 4
=> 0xA3DD (真ん中8bitをreverse, 0xBC=0b10111100 -> 0b00111101=0x3D)

0x2 99 1
=> 0x8000000000000000000000000 (2の99乗)



640 名前:デフォルトの名無しさん mailto:sage [2022/07/08(金) 22:06:04.39 ID:ju1TxHLl.net]
>>610 Ruby

f = -> (*a) {_, e, s = a.map(&:to_i); '0x%X' % a[0].hex.digits(2).concat(Array.new(e, 0)).tap{_1[s..e] = _1[s..e].reverse}.reverse.reduce{|s, i| 2 * s + i}}

['0x80 7 0', '0xABCD 11 4', '0x2 99 1'].each{puts '%s -> %s' % [_1, f[*_1.split]]}

# =>
0x80 7 0 -> 0x1
0xABCD 11 4 -> 0xA3DD
0x2 99 1 -> 0x8000000000000000000000000

641 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 09:28:21.31 ID:72Wr/ML/.net]
>>610 octave
https://ideone.com/4MacE3

642 名前:デフォルトの名無しさん [2022/07/09(土) 21:45:11.70 ID:A5P06KhI.net]
>>610
Kotlin
https://paiza.io/projects/hUR6DylxGsrJBWKI-gmaKg

BigInteger 使ったので、ビット数がかなり多くても大丈夫。

643 名前:デフォルトの名無しさん [2022/07/24(日) 20:03:09.74 ID:RqwYi ]
[ここ壊れてます]

644 名前:vmm.net mailto: あげ []
[ここ壊れてます]

645 名前:デフォルトの名無しさん [2022/07/26(火) 20:19:27.06 ID:wEdk200U.net]
お題:数字をミラーリングせよ

入力 < 123
出力 > 123321

reverse系メソッドを使わなかったら加点とする

646 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 20:33:23.78 ID:gSFNKY8C.net]
>>615 Ruby
$><<(a=gets.scan /./)*'';$><<$a while$a=a.pop

-*- input -*-
123

-*- output -*-
123321

647 名前:デフォルトの名無しさん [2022/07/26(火) 22:30:32.74 ID:LilaKoZu.net]
>>615
Java

static String mirror(String src) {
 var dest = new char[src.length() * 2];
 var a = src.toCharArray();
 for (var i = 0; i < a.length; i++) {
  dest[i] = a[i];
  dest[dest.length - 1 - i] = a[i];
 }
 return new String(dest);
}

648 名前:アリ人間 mailto:sage [2022/07/26(火) 22:36:21.87 ID:SFGiBpCo.net]
>>615
派生お題: 文字列処理を使わずに与えられた整数を回文にせよ。

649 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 23:38:05.85 ID:ceC8PDvA.net]
>>615 octave
https://ideone.com/Aa9KII
f = @(a) a([1:end end:-1:1]);
f('123')



650 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 23:41:29.56 ID:DU0tXUgh.net]
魔法の計算式とか無いん?

651 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 00:03:13.42 ID:MKIa5t3g.net]
俺も考えてみたけど調べても回分数のシグマ使わない一般式は無いみたいだな

652 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 00:09:31.00 ID:C/59UMec.net]
>>615 JavaScript
const mirror = (n, c, ...args) => c === null ? (answer => 0 <= n && answer <= Number.MAX_SAFE_INTEGER ? answer : RangeError(`${n} is invalid.`))(args.reduce((s, d) => s * 10 + d, n)) : c == undefined ? mirror(Number.parseInt(n), Number.parseInt(n), ...args) : mirror(n, c < 10 ? null : Math.floor(c / 10), ...args, c % 10);

// test
for (const [n] of [[-1, 'x'], [0, 'o'], [1, 'o'], [12345678, 'o'], [123456789, 'x'], [123.456, 'o (123321)']]) {
const answer = mirror(n);
console[answer instanceof RangeError ? 'error' : 'log'](answer);
}

653 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 01:46:36.04 ID:7bF+Pf0F.net]
octave綺麗

654 名前:96 mailto:sage [2022/08/02(火) 01:11:31.65 ID:6KqVNIq0.net]
>>615 Perl5

use feature qw{say signatures}; no warnings 'experimental';

sub f($i, @a) { $i and @a ? (f(@a), $i) : $i }

@a = split'',123;
say @a, f(@a);



実行結果
~ $ perl 20_615_mirror.pl
123321

655 名前:96 mailto:sage [2022/08/02(火) 01:20:34.60 ID:6KqVNIq0.net]
>>615 Perl5 (リスト処理版)

@a = split '', 123;
print @a, map{@a[$#a - $_]} 0..$#a;


実行結果
~ $ perl 20_615_mirror_list.pl
123321

656 名前:デフォルトの名無しさん mailto:sage [2022/08/02(火) 22:22:16.97 ID:9ppQHDnA.net]
>>615 ocaml
https://ideone.com/FFhxw9
let f s =
let csc c s = Char.escaped c ^ s ^ Char.escaped c in
let rec aux t = function 0 -> t | n -> aux (csc s.[n - 1] t) (n - 1)
in aux "" @@ String.length s
let () = print_endline @@ f "123"

657 名前:デフォルトの名無しさん [2022/08/02(火) 23:32:00 ID:49BZsXJW.net]
>>615
Kotlin

https://paiza.io/projects/2Pe625DoTzToywf3zB2lvA

わざわざ Iterator を実装して実現。

658 名前:デフォルトの名無しさん mailto:sage [2022/08/03(水) 00:34:26.60 ID:xChmGTXr.net]
>>615 ocaml
https://ideone.com/6Y

659 名前:qGis
let f s = s ^ String.init (String.length s) (fun i -> s.[String.length s - 1 - i])
let () = print_endline @@ f "123"
[]
[ここ壊れてます]



660 名前:デフォルトの名無しさん [2022/08/05(金) 11:38:46.19 ID:1Af6TgAi.net]
>>615
おもしれーことやってんじゃん
じゃあperlの再帰する正規表現で行くかな
https://paiza.io/projects/dxhWJaJSrcZdAFpJKe9uvQ

661 名前:デフォルトの名無しさん [2022/08/05(金) 13:16:58.45 ID:6eafuacR.net]
gnuWin32を基本使っています。
で行のソートなのですが、各行の末尾から逆向きの文字でソートって出来ませんか
たとえば
aaaaCB
bbbBA
cccccDB
とかあったとき、これを
bbbBA
aaaaCB
cccccDB
としたいのです。
もし難しそうであれば、各行を反転、つまり
abcde

edcba
とする方法でもいいです。

662 名前:デフォルトの名無しさん [2022/08/05(金) 13:43:08.90 ID:Vk8oFh91.net]
>>630
Java
Arrays.sort(a, (left, right) -> {
 var l = left.length() - 1;
 var r = right.length() - 1;

 while (l > -1 && r > -1) {
  var c = Character.compare(left.charAt(l), right.charAt(r));

  if (c != 0) {
   return c;
  }

  l--;
  r--;
 }

 if (l > -1) {
  return 1;
 }

 if (r > -1) {
  return -1;
 }

 return 0;
});

663 名前:96 mailto:sage [2022/08/05(金) 19:36:20 ID:Rv34IsoP.net]
>>630 Perl5が使える環境であれば…

~ $ cat 20_630_isort.pl
chomp (@a = <>);
sub f {join '', reverse split'', $_[0]}
print "$_\n" for sort{f($a) cmp f($b)} @a;

~ $ cat input.txt
aaaaCB
bbbBA
cccccDB

~ $ perl 20_630_isort.pl < input.txt > output.txt

~ $ cat output.txt
bbbBA
aaaaCB
cccccDB

664 名前:デフォルトの名無しさん mailto:sage [2022/08/05(金) 20:52:38 ID:C4r7F682.net]
>>630 ruby
https://ideone.com/lQz0m2
f = ->(a) {a.sort_by &:reverse}
p f.(%w(aaaaCB bbbBA cccccDB))

>>630 octave
https://ideone.com/AUCxr3
function i = sorti(varargin), [~, i] = sort(varargin{:}); end
f = @(a) a(sorti(cellfun(@(s) {flip(s)}, a)));
f({'aaaaCB' 'bbbBA' 'cccccDB'})

665 名前:96 mailto:sage [2022/08/05(金) 22:43:00.57 ID:Rv34IsoP.net]
>>632
しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、
データの行数が多いと遅いな

666 名前:96 mailto:sage [2022/08/06(土) 00:54:37.07 ID:pYJx8bVL.net]
>>630 Perl5、計算量の抑制に配慮したバージョンと実行例

$ cat 20_630_isort2.pl
print $_->[0] for sort{$a->[1] cmp $b->[1]} map{[$_, scalar reverse $_]} <>;

$ cat input.txt
aaaaCB
bbbBA
cccccDB

$ perl 20_630_isort2.pl input.txt > output.txt

$ cat output.txt
bbbBA
aaaaCB
cccccDB

667 名前:96 mailto:sage [2022/08/06(土) 01:06:37.87 ID:pYJx8bVL.net]
>>635
これ各行の行末の改行まで含めてreverseしてsortキーとするので、
もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。
そのような万が一の場合に対してもrubstさも持たすならこうか

chomp(@a = <>);
print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;

668 名前:デフォルトの名無しさん [2022/08/06(土) 05:59:59.26 ID:UcInr7RU.net]
>>630
Kotlin
https://paiza.io/projects/bK5T2CQgxXwvVlcjKvw-dA

ただ処理を連結しただけだな。コマンドラインでパイプ使ったみたいな感じ。

669 名前:デフォルトの名無しさん [2022/08/06(土) 06:11:51.22 ID:UcInr7RU.net]
>>630
Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。
(入力文字列は input.txt に入ってい



670 名前:驍ニして)。

rev input.txt | sort | rev

Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。
[]
[ここ壊れてます]

671 名前:96 mailto:sage [2022/08/06(土) 08:20:40.77 ID:pYJx8bVL.net]
>>610 Perl5

use Bit::Vector;
$v = Bit::Vector->new(101);
for (<DATA>) {
 ($h, $s, $e) = /0x(\S+) (\S+) (\S+)/;
 $v->from_Hex("$h");
 $v->Interval_Reverse($e, $s);
 ($r) = $v->to_Hex() =~ /0+(\w+)/;
 print "$_ => 0x$r\n";
}
__DATA__
0x80 7 0
0xABCD 11 4
0x2 99 1

※インデントを見易くするため全角スペースに置換しています


実行結果

$ perl 20_610_rebitfld.pl
0x80 7 0
=> 0x1
0xABCD 11 4
=> 0xA3DD
0x2 99 1
=> 0x8000000000000000000000000

672 名前:デフォルトの名無しさん [2022/08/06(土) 10:15:53 ID:8a3zeEyr.net]
>>638
Linux環境ではrevというのがあるのですね
gnuWin32は全部揃ってないのですね。なんだかなあ
rev以外でもLinuxにあってgnuWin32にはないのがあるのかな
rev、自分で作ろうかな

673 名前:デフォルトの名無しさん mailto:sage [2022/08/06(土) 11:17:00.60 ID:y9e1BfKB.net]
>>630 ocaml
https://ideone.com/zdWLHX
let rev s = String.init (String.length s) (fun i -> s.[String.length s - 1 - i])
let (<<) f g x = f (g x)
let f = List.map (fun (r, s) -> s) << List.sort compare << List.map (fun s -> (rev s, s))
let () = List.iter print_endline @@ f ["aaaaCB"; "bbbBA"; "cccccDB"];

674 名前:96 mailto:sage [2022/08/06(土) 15:02:55.35 ID:ddLJv/Kp.net]
>>640
gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが…

util-linux-ng for Windows
gnuwin32.sourceforge.net/packages/util-linux-ng.htm

Util-Linux contains miscellaneous utilities:
col: filter reverse line feeds from input
colcrt: filter nroff output for CRT previewing
colrm: remove columns from a file
ddate: converts Gregorian dates to Discordian dates
getopt: parse command options (enhanced)
hexdump: ascii, decimal, hexadecimal, octal dump
line: read one line
rename: rename files
rev: reverse lines of a file or files ←
tailf: follow the growth of a log file
whereis: locate the binary, source, and manual page files for a command

作りたいというなら類似のsampleソースはゴマンと転がっとるし

C reverse string rev.c strrev - Google 検索
https://www.google.com/search?q=C+reverse+string+rev.c+strrev

C program to reverse a string | Programming Simplified
https://www.programmingsimplified.com/c-program-reverse-string

C_69 C Program to Reverse a String | with strrev() and without strrev() function - YouTube
https://www.youtube.com/watch?v=530jWnBMD2M

… 好きにしんしゃい

675 名前:96 mailto:sage [2022/08/06(土) 15:16:53.43 ID:ddLJv/Kp.net]
Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは

GitHub - util-linux/util-linux
https://github.com/util-linux/util-linux

かな。そのうち rev.c のソースは

util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub
https://github.com/util-linux/util-linux/blob/master/text-utils/rev.c

ちな util-linux パッケージは2006年に fork した

676 名前:ニき名前に -ng をつけて util-linux-ng になったが
2010年に util-linux に名前を戻している。
cf.)
util-linux - Wikipedia
https://en.wikipedia.org/wiki/Util-linux

ついつい、調べ物をしてしまった…orz
[]
[ここ壊れてます]

677 名前:デフォルトの名無しさん [2022/08/06(土) 17:24:05.41 ID:8a3zeEyr.net]
>>642
ありがとう。そんなとこにあったのか

678 名前:デフォルトの名無しさん [2022/08/07(日) 09:51:45.46 ID:UY2OKMya.net]
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHK

679 名前:デフォルトの名無しさん [2022/08/07(日) 09:52:47.25 ID:UY2OKMya.net]
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHKで自作で作ってみました
rev input.txt | sort | rev
で問題なく動きました



680 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 16:26:03 ID:BSSIjy3s.net]
>>645
環境変数 LANG の設定の問題とか?
こっちでは日本語での rev できたよ。
CentOS 7 で bash で LANG=ja_JP.UTF-8 の状態。そこに Windows から TeraTerm で ssh ログインして試したらできた。

$ echo $LANG
ja_JP.UTF-8
$ ( echo 見城徹 ; echo 箕輪厚介 ; echo ガーシー ; echo 木原誠二官房副長官 ) | rev
徹城見
介厚輪箕
ーシーガ
官長副房官二誠原木
$

681 名前:デフォルトの名無しさん [2022/08/07(日) 18:30:22.20 ID:C65TbvUb.net]
お題
0~2がランダムに8個入力されます
8個の数字を:で結合して出力してください
0が連続する場合は連続する0を::に置換してください
0の連続を::に置換できるのは1回のみです
0の連続が複数存在する場合は長い方を置換してください
長さが同じ場合は先頭の方を置換してください
1個の0は置換してはいけません


0, 0, 0, 1, 2, 1, 2, 2 → ::1:2:1:2:2
2, 1, 2, 0, 0, 0, 1, 1 → 2:1:2::1:1
1, 1, 2, 2, 1, 0, 0, 0 → 1:1:2:2:1::
2, 0, 0, 2, 0, 0, 0, 2 → 2:0:0:2::2
1, 0, 0, 1, 2, 0, 0, 2 → 1::1:2:0:0:2
0, 1, 2, 0, 1, 1, 0, 2 → 0:1:2:0:1:1:0:2






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

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

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