X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0354デフォルトの名無しさん
垢版 |
2020/08/17(月) 09:11:51.56ID:CGaaR/Ic
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
0355デフォルトの名無しさん
垢版 |
2020/08/17(月) 11:17:26.81ID:2KNIyB/f
ブルートフォースアタックしか思い浮かばない。
0356デフォルトの名無しさん
垢版 |
2020/08/17(月) 18:12:59.56ID:Nup7rIuH
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
0357デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:37:06.53ID:4e6PsksO
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
0358デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:45:01.16ID:Nup7rIuH0
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
0360デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:47:24.50ID:4e6PsksO
>>359
お前が死ね
0363デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:56:52.65ID:4e6PsksO
>>361
じゃあ俺が死ぬよ
0367デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:20.89ID:4e6PsksO
>>366
全然おもんないやんけ
もう一回チャンスをやろう
0368デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:35.92ID:4e6PsksO
じゃあ俺が死ぬよ
0369デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:59.92ID:4e6PsksO
くるよくるよ
0370デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:06:13.27ID:4e6PsksO
ドキドキ
0371デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:35.54ID:4e6PsksO
逃げたか
0372デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:58.23ID:4e6PsksO
笑いから逃げるな
0373デフォルトの名無しさん
垢版 |
2020/08/18(火) 00:15:03.77ID:/+dAg+CW
お題: 二人の煽り耐性から「死ね」と言い合うプログラム

煽り耐性 0.1〜1
死ねと言い返す確率 (1-煽り耐性) * 100%
最初に死ねと言うのはA
入力 {Aの煽り耐性} {Bの煽り耐性}

> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
0375デフォルトの名無しさん
垢版 |
2020/08/18(火) 01:35:33.42ID:Vl5MoMXT0
>>350 js

const input = "programmingodaisure"

let tmp_str = input;
let tmp_hex = new Uint8Array();

do {
tmp_str += "X";
tmp_hex = [0x00, ...Base58.decode(tmp_str)];
} while (tmp_hex.length < 25)

const prefix_and_data = tmp_hex.slice(0, -4);

const doubleSha256 = sha256.digest(sha256.digest(prefix_and_data))
const checkSum = doubleSha256.slice(0, 4);

const result_hex = new Uint8Array([...prefix_and_data, ...checkSum]);
const result_str = Base58.encode(result_hex);

console.log(result_str);

→ "1programmingodaisureXXXXXXXZHx9sj"

https://chainflyer.bitflyer.jp/Address/1programmingodaisureXXXXXXXZHx9sj

BASE58とSHA256のライブラリ
https://cdn.jsdelivr.net/npm/base-58@0.0.1/Base58.min.js
https://cdn.jsdelivr.net/npm/js-sha256@0.9.0/src/sha256.min.js
0376デフォルトの名無しさん
垢版 |
2020/08/19(水) 16:18:46.79ID:ltFkDVN7
>>364

#!/bin/sh
rm $0
0377デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:40:23.70ID:d4bqPFA7
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
0378デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:45:07.34ID:OrygHj4v
略して示唆トン。
0379デフォルトの名無しさん
垢版 |
2020/08/20(木) 11:35:09.25ID:nWR09WFB
>>249
Elixir

# 蓄積変数 set は、すべての文字列の集合。abcde, bcdea などの5つ。
# word は、1文字ずらした文字列

src_word = 'abcde'

%{ set: set } = Enum.reduce_while( 1..length( src_word ), %{ set: MapSet.new, word: src_word }, fn _count, acc ->

[ head | tail ] = acc.word
next_word = tail ++ [ head ] # 1文字ずらす
acc = %{ acc | word: next_word }

if MapSet.member?( acc.set, next_word ) do
{ :halt, acc } # 既に存在すれば、break
else
acc = %{ acc | set: MapSet.put( acc.set, next_word ) }
{ :cont, acc } # ループを続ける
end
end )

# IO.inspect set

# 文字列が、集合の中に含まれているか?
[ 'deabc', 'cdeba' ]
|> Enum.map( fn str -> MapSet.member?( set, str ) end )
|> IO.inspect # [true, false]
0380デフォルトの名無しさん
垢版 |
2020/08/23(日) 18:52:15.52ID:kIX3/Jw/
お題:
縦H、横Wの迷路が与えられます。
スタートからゴールに至る道順の個数を求めてください。

迷路は通路から通路へ、上下左右の4方向へのみ移動できます。
ただし、一度通った通路を引き返すような道順は無効です。
また、スタートとゴールは通路です。

1行目に迷路の高さと幅を表す整数H、Wが与えられます。
2行目からH行にわたって、迷路を表す長さWの文字列が与えられます。
文字列は 'S' 'G' '.' '#' の文字のみからなり、それぞれスタート、ゴール、通路、壁です。

例1:
入力:
5 5
S....
##.#.
...#.
##.#.
....G
出力:
2
例2:
入力:
5 5
S....
##.#.
...#.
...#.
....G
出力:
12
0383蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/29(土) 20:44:46.53ID:GYyhmMZY
お題: ロシアンルーレット。

リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
0384デフォルトの名無しさん
垢版 |
2020/08/29(土) 21:04:26.78ID:KxRf/0sH
>>383
仕様がわからない
0386蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/29(土) 21:24:48.99ID:GYyhmMZY
>>383-384 こんな感じか?

最初にリボルバーを回します。
(弾丸の位置を設定)
こめかみor天井?(K/t) K
1回目: 不発
もう一度リボルバーを回しますか? (Y/n) Y
(弾丸を回転)
こめかみor天井?(K/t) K
2回目: 不発
もう一度リボルバーを回しますか? (Y/n) n
こめかみor天井?(K/t) K
3回目: バーン!
あなたの負けです。
0388デフォルトの名無しさん
垢版 |
2020/08/29(土) 22:14:20.91ID:bYj4gZFd
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
0390デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:12:55.70ID:yG/yQHuO
>>383

https://repl.it/@vip0/bullet#index.js

// 0-5
const rand6 = () => Math.floor(Math.random() * 6);

const gun = (() => {
let pos = 0;
const shuffle = () => (pos = rand6());
shuffle();
const shut = () => pos-- === -1
return { shuffle, pos, shut }
})()

// mock 1/2 rand
const readDoShuffleAsync = () => {
const y = Math.random() >= 0.5
console.log(y ? "y" : "n")
return y
}

let i = 1;
while (true) {
console.log("リボルバーを回しますか?");
if (readDoShuffleAsync()) gun.shuffle()
const bomb = gun.shut();
console.log(`${i}回目: ${bomb ? "バーン!" : "不発"}`);
i++;
if (bomb) break
}
0391デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:34:19.24ID:2f/XylsB
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される

var a = 1
a // 1 と表示される
0393デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:02:17.18ID:xjthqQ7x
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください


入力: 1
出力: [1]

入力: 3
出力: [1, 2, 2, 3, 3, 3]
0394デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:33:41.99ID:xjthqQ7x
お題
配列をソートする関数を受け取って安定ソートか否かを判定する
プログラムを作成してください
0395デフォルトの名無しさん
垢版 |
2020/08/30(日) 06:49:46.06ID:a0VCHWdX
お題: splitを実装せよ(ただし組み込みやライブラリのsplitは使ってはならない)

例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
0396デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:02:58.80ID:Ui9A3dkW
>>393 J
f =: #~ @: >: @ i.
0397デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:40:37.84ID:rD3R6mry
>>393 Ruby

(0..3).each{|n| p (1..n).reduce([]){|s, a| s + [a] * a}}

# =>
[]
[1]
[1, 2, 2]
[1, 2, 2, 3, 3, 3]


>>395 Ruby

p 'abc:def:ghi'.scan(/[^:]+/) # => ["abc", "def", "ghi"]
0399デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:43:25.32ID:pWMgwPJi
>>395
JS

let minSplit = (string, separator) => {
let array = [];
let splitter = (st, sp) => {
let pos = st.indexOf(sp);
if (pos == -1) {return [st,void(0)]} else {return [st.slice(0,pos),st.slice(pos+1)]}
}
while (true) {
if (string.length == 0) {array.push(string); break}
let temp = splitter(string, separator)
if (temp[1] == void(0)) {array.push(temp[0]); break}
else {array.push(temp[0]); string = temp[1]}
}
return array
}

let minSplit2 = (string, separator) => {
let reg = new RegExp(`[^(${separator})]+${separator}?`, "g");
return `${string} `.match(reg).map(x=>x.slice(0,-1))
}
0402デフォルトの名無しさん
垢版 |
2020/08/30(日) 18:55:27.84ID:uG01djUi
>>395 js
const replaceAll = (s, from, to) => s.replace(new RegExp(from, "g"), to)
const split = (str, sep) => JSON.parse(`["${replaceAll(str, sep, '","')}"]`)

split('abc:def:ghi', ':')
// [ 'abc', 'def', 'ghi' ]
ずるいしダブルクォート対応できてないけど思いつき
0403デフォルトの名無しさん
垢版 |
2020/08/30(日) 19:52:13.41ID:KMqOjvFr
>>395 Ruby
# セパレーターの仕様が文字か文字列か分からなかったので文字列にした
def split( str, sep )
res = []
(str + sep).scan( /(.*?)#{Regexp.escape(sep)}/ ){ res << $1 }
res
end

split('abc:def:ghi', ':') #=> ["abc", "def", "ghi"]
0406デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:23:11.11ID:OKCM85cL
operator[]がconstexprなのはC++17以降らしいね
0407デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:36:58.36ID:Sr2UUXBk
宇宙創生から現在まで【宇宙の歴史@(過去編)】
https://www.youtube.com/watch?v=1qUrdcRkRLc
期待値が無限大な賭け(サンクトペテルブルクのパラドックス)
https://www.youtube.com/watch?v=B__gzT-rQjw
もしも生徒が全員予備校講師だったら
https://www.youtube.com/watch?v=Lk
eが超越数であることの証明
https://www.youtube.com/watch?v=_DJfeP0cmI8
【受験生へ】勉強のモチベーションをあげる3つの方法
https://www.youtube.com/watch?v=4MAPBivBEhM
線を描くだけ!万能視覚的かけ算【インド式計算】
https://www.youtube.com/watch?v=Sj6Y43D76GA
全受験生が理解するべき!偏差値とは何か
https://www.youtube.com/watch?v=Xt7VN0xCbt8
楽しいことを増やそう!科学の眼鏡をかけた1日とは【ヨビノリたくみ特別公演】
https://www.youtube.com/watch?v=u5al7kwy64k
数学の魅力とは?中田敦彦と人気教育系YouTuberヨビノリたくみ先生が初コラボ
https://www.youtube.com/watch?v=qxiAyyotAM0
0408デフォルトの名無しさん
垢版 |
2020/08/31(月) 08:12:50.04ID:o+KAewBM
>>393 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
0411デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:15:43.55ID:0jcGZySh
\(._. \)
0412蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 13:37:09.03ID:tSOV4fJk
お題: 覆面算パズルをランダムに自動生成せよ。

単語は大文字のアルファベットのみとする。
各単語は自然数を表している。
単語の各文字は数字を表している。
各単語の先頭はゼロではない。
同じ文字は同じ数字が入る。文字が違えば、数字も違う。
各単語は、3文字以上6文字以下とする。
答えは一つでなければいけない。
今回は、簡単な足し算のみとする。

例)
SEND+MORE=MONEY.
BASE+BALL=GAMES.

単語リスト:https://gist.github.com/deekayen/4148741
0413蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 13:41:36.35ID:tSOV4fJk
お題:覆面算パズルを解くプログラム。

例)
SEND+MORE=MONEY
→9567+1085=10652.

BASE+BALL=GAMES
→7483+7455=14938.
0414デフォルトの名無しさん
垢版 |
2020/08/31(月) 14:49:18.65ID:7ZWcUsrI
>>393
Elixir

# 再帰で、蓄積リスト・ary に、連結していく

defmodule MyList do
def add( num ), do: _add( num, [ ] )

defp _add( 0, ary ) do
ary
end

defp _add( num, ary ) when num > 0 do
_add( num - 1, List.duplicate( num, num ) ++ ary )
end
end

ary = MyList.add 3
IO.inspect ary #=> [1, 2, 2, 3, 3, 3]
0417蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 16:24:48.19ID:lWn/zYPT
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
0421デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:18:49.49ID:J48xi6fS
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
0422デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:23:55.64ID:fdwPQ6pV
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
https://sunasunax.hatenablog.com
0423デフォルトの名無しさん
垢版 |
2020/08/31(月) 21:02:28.99ID:Sr2UUXBk
デキる人ほどフリーランス化する?★働き方改革
https://www.youtube.com/watch?v=ALflcwYOJtQ
年収890万円以下は社会のお荷物★騙される労働者
https://www.youtube.com/watch?v=CAp-ZrJpF54
騙されたくなかったら勉強しろ★他人のルールは損をする
https://www.youtube.com/watch?v=s176O6qKuPw
底辺の99%は一生底辺★10年後が見えない同僚たち
https://www.youtube.com/watch?v=4Mfiwn2sPD8
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
https://www.youtube.com/watch?v=Fi7bILN4wes
サラリーマン思考では儲からない理由
https://www.youtube.com/watch?v=iW6oAo0q0ZI
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
https://www.youtube.com/watch?v=md0WPAsfarY
「で、年収は?」と聞くバカとは合わない社長業
https://www.youtube.com/watch?v=nEELEUhBLDk
0424253
垢版 |
2020/08/31(月) 21:47:00.41ID:Mm8nXRhv
>>393 Perl5

use feature qw{signatures};
sub f($n) {
 $n ? (f($n-1), ($n) x $n) : ()
}
@a = f(3);
print "@a\n";


実行結果
~ $ perl 18_393_inc_ary.pl
The signatures feature is experimental at 18_393_inc_ary.pl line 2.
1 2 2 3 3 3
0425253
垢版 |
2020/08/31(月) 21:54:06.64ID:pmRcaHIk
>>393 Perl5、単にmapで値個数要素のリストに展開

$n = 3;
@a = map{($_) x $_} 1..$n;
print "@a\n";


j実行結果
~ $ perl 18_393_inc_ary_map.pl
1 2 2 3 3 3
0429デフォルトの名無しさん
垢版 |
2020/09/01(火) 14:16:37.60ID:3qKfeSqF
全く知らない構文の言語でカンでいじっても構文エラーも止められずに
動かない機械ガチャガチャしてるだけ感すごいよな
0430蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/01(火) 18:47:08.83ID:4meeAMMW
お題: テキストファイル「input.txt」の中の" dot "を"."に置換し、さらに" at "を"@"に置換したときに、RFCに従ったメールアドレスになる部分文字列を抽出し、そのメールアドレスのリストを改行区切りで出力せよ。
0431デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:47:54.44ID:Y09tsFBY
>>393 Ruby
def f(n)
(1..n*(n+1)/2).map{|x| ((x*2)**0.5+0.5).to_i}
end
0432デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:48:39.88ID:PZXbhIm5
>>430
テスト用のinput.txtちょーだい!
0433蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/01(火) 18:54:57.84ID:4meeAMMW
>>432
「これはテキトーなテキストデータである。
例えば
user at example dot com
とか
user at example dot co dot jp
とか
katayama dot hirofumi dot mz at example dot net
とかあるでしょ。
詐欺メールに引っ掛からないためには、URLのドメインを確認することが一番。
google.com
google.co.jp
まあ、いろいろあるっしょ。」
0434デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:57:45.00ID:PZXbhIm5
>>433
あざーす!
0439253
垢版 |
2020/09/02(水) 00:54:35.54ID:GpxOT2yi
>>393 Python3

(n, a) = (3, [])
for i in range(1, n+1):
  a.extend([i] * i)
print(a)


実行結果
~ $ python 18_393_incary.py
[1, 2, 2, 3, 3, 3]
0442デフォルトの名無しさん
垢版 |
2020/09/03(木) 16:10:13.26ID:dE9fk8zR
>>395 Ruby

def f(s,d)
eval("['"+s.gsub(d,"','")+"']")
end
p f("1 2 3 4"," ")

実行結果
["1", "2", "3", "4"]
0443蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/03(木) 19:41:51.27ID:0EoV326K
お題: バイナリファイルを読み込んで各バイトの各ビットについて、上位ビットから順に、ゼロをシフトJISの半角カナの「タ」に、いち(1)を同じくの「ヒ」に変換する変換器。
0445デフォルトの名無しさん
垢版 |
2020/09/03(木) 21:11:58.06ID:97aiR77+
>>443 Ruby
Fpath = 'test.bin'
File.open( Fpath, 'wb' ){|fh| fh.write "Hello word\n" }

Tbl10 = "\xC0\xCB".force_encoding(Encoding::BINARY)
tb = (0..255).to_a.map{|x| ('%08b' % x).tr( '10', Tbl10 ) }
buff = File.open( Fpath, 'rb' ).each_byte.map{|x| tb[x] }
puts buff.join().encode( Encoding::UTF_8, Encoding::CP932 )

print buff.map{|x| x.tr( Tbl10, '10' ).to_i(2).chr }.join

#=> ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
#=> Hello word
0446デフォルトの名無しさん
垢版 |
2020/09/03(木) 23:01:51.02ID:ZdR77D/Z
>>442

f("'", ?,)
# =>SyntaxError: (eval):1: unterminated string meets end of file
[''']
   ^
(eval):1: syntax error, unexpected end-of-input, expecting ']'
0447253
垢版 |
2020/09/04(金) 00:01:38.15ID:7q8p4uRD
>>443 Perl5

print map{qw(ヒ タ)[$_]} map{split '', sprintf '%08b', ord} split'','Hello word';

実行結果
~ $ perl 18_443_タヒ.pl
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒ
0449253
垢版 |
2020/09/04(金) 00:04:27.06ID:gbrpP/bR
>>447
>>444 逆変換機もか…忘れてた
まいいや
0450デフォルトの名無しさん
垢版 |
2020/09/04(金) 14:52:11.79ID:Wl7qFIBb
>>443
Elixir。CP932 が無いので、途中までしか出来ません!

# 8桁・2進数・0埋め

_ = 'abc'
|> Enum.map( fn char -> :io.format( "~8.2.0B", [ char ] ) end )

# 01100001_01100010_01100011
0451デフォルトの名無しさん
垢版 |
2020/09/04(金) 23:27:10.30ID:1jfeDIRi
>>443
POSIX sh

変換 (https://paiza.io/projects/Yk6wcUtik7BZZ0AHspdZFw?language=bash)
for _b in $(od -v -A n -t d1); do
printf '%b' \
"\\$(( $_b & 128 ? 300 : 313 ))" \
"\\$(( $_b & 64 ? 300 : 313 ))" \
"\\$(( $_b & 32 ? 300 : 313 ))" \
"\\$(( $_b & 16 ? 300 : 313 ))" \
"\\$(( $_b & 8 ? 300 : 313 ))" \
"\\$(( $_b & 4 ? 300 : 313 ))" \
"\\$(( $_b & 2 ? 300 : 313 ))" \
"\\$(( $_b & 1 ? 300 : 313 ))"
done

逆変換 (https://paiza.io/projects/AN6vfPgtdJODnYL9jW8MDQ?language=bash)
od -v -A n -t o1 |
fold -b -w 32 |
while read _b8 _b7 _b6 _b5 _b4 _b3 _b2 _b1; do
printf '%b' "\\$((
($_b8 == 300 ? 200 : 0) +
($_b7 == 300 ? 100 : 0) +
($_b6 == 300 ? 40 : 0) +
($_b5 == 300 ? 20 : 0) +
($_b4 == 300 ? 10 : 0) +
($_b3 == 300 ? 4 : 0) +
($_b2 == 300 ? 2 : 0) +
($_b1 == 300 ? 1 : 0) ))"
done
0452253
垢版 |
2020/09/04(金) 23:39:14.02ID:tinAGSqp
>>443>>444 Perl5、バイナリコード(ln)を含むデータをファイルから読み込み、変換》逆変換

undef $/; # slurp
$s = <>;

@b = map{qw(ヒ タ)[$_]} split'', unpack 'B*', $s;
print @b, "\n";

%h = qw(ヒ 0 タ 1);
$t = pack 'B*', join '', map{$h{$_}} @b;
print $t;



実行結果

$ od -xc Hello_world_ln.txt
0000000 6548 6c6c 206f 6f77 6c72 0a64
H e l l o w o r l d \n

$ cat Hello_world_ln.txt
Hello world

$ perl 18_443_444_ヒタ.pl < Hello_world_ln.txt
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒタタヒヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
Hello world
0453デフォルトの名無しさん
垢版 |
2020/09/05(土) 15:41:23.97ID:dAk5cbFF
お題

UTF-8 は以下のように、先頭ニブル・4ビットで、1〜4バイト文字を判別しています。
この法則を使って、この文字列のバイト数を求めよ

あaθ💀xΩ死🄫

1バイト文字: 0000〜0111: 0〜7

多バイト文字の2バイト目以降
1000〜1011: 8〜11(8〜B)

2バイト文字: 1100〜1101: 12〜13(C〜D)
3バイト文字: 1110: 14(E)
4バイト文字: 1111: 15(F)

Unicode
https://seiai.ed.jp/sys/text/csd/cf14/c14a070.html
■ このスレッドは過去ログ倉庫に格納されています

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