20/08/05 16:44:00.29 73CDpa/5.net
ふむ。コイン切れの対処もし易いな。
201:蟻人間 ◆T6xkBnTXz7B0
20/08/05 17:59:02 TWR5sasY.net
お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。
ダミーのfeedは、次のようなプログラムとする:
- 現在日時と「えさをやりました。」を出力する。
202:蟻人間
20/08/05 18:08:26.66 UZ8wPONY.net
>>197 C++/Win32
#include <windows.h>
int main(void) {
for (;;) {
Sleep(60 * 60 * 1000);
ShellExecuteA(NULL, NULL, "feed.exe", NULL, NULL, SW_SHOWNORMAL);
}
}
// feed.cpp
#include <windows.h>
#include <stdio.h>
int main(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%04d.%02d.%02d %02d:%02d:%02d えさをやりました。\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
203:デフォルトの名無しさん
20/08/05 19:40:23.44 VitQNdTl.net
は、はやい・・・
204:デフォルトの名無しさん
20/08/05 20:19:52.45 wv4r4oF2.net
>>197 Ruby (Windows)
# feed_ignition.rb
loop do
system( 'start "" feed.rb' )
sleep 60*60
end
# feed.rb
puts "#{Time.new.strftime('%Y/%m/%d %T')} えさをやりました。"
sleep 3 # 表示確認用
205:デフォルトの名無しさん
20/08/05 23:41:13.11 prJIGLTT.net
>>197
Linux 等の UNIX系OS だったら普通なら crond が動いているので crontab 設定すると楽だ。
(Windows の場合はタスクの設定で似たような事ができる)。
例えばこのようにすると毎時0分に feed コマンドが実行される。
0 * * * * feed
ただ問題はこのままだと標準出力がリダイレクトされていないのでその出力がcrondからメールで送られて来る事になる。
(見たい場合は mail コマンドを使って見る)。
コマンドラインから直接やるとしたら watch コマンドというのもある。これは実行するたびに出力が変化する
ようなコマンドを定期的に動かしてその出力を画面上に表示するためのコマンドだが毎回出力が同じでも
あるいは何も出力しなかったとしても問題はない。1時間ごとに動かすならこうなる。
watch -n 3600 feed
もっと単純にシェルでループさせて実現する方法もある。(これだとようやっとプログラムっぽい見た目になる)
sh -c 'while : ; do feed ; sleep 3600 ; done'
feed コマンドについてはシェルスクリプトなら例えばこうしておけば良い。
#!/bin/sh
echo 'えさをやりました。'
206:デフォルトの名無しさん
20/08/05 23:51:48.40 prJIGLTT.net
>>201はfeedで現在の日付を出すのを忘れた。
日付付けるなら例えばこうする。
#!/bin/sh
echo `date` 'えさをやりました。'
date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。
#!/bin/sh
date '+%F %T えさをやりました。'
207:デフォルトの名無しさん
20/08/06 14:26:19.33 HoaabIeAf
>>138 Rust
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let mut vec : Vec<u8> = Vec::new();
for _ in 1..20 {
vec.push(rng.gen::<u8>());
}
let result: Vec<u8> = vec.iter().filter(|&x| x % 2u8 == 0u8).cloned().collect();
for v in result {
println!("{}", v);
}
}
208:デフォルトの名無しさん
20/08/06 16:22:14.55 HoaabIeAf
>>138 C++
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
auto vec = std::vector<int>{};
for (int i = 0; i < 20; ++i) {
vec.push_back(rand() % 10 + 1);
}
auto result = std::vector<int>{};
std::copy_if(vec.begin(), vec.end(), std::back_inserter(result),
[](int v) { return v % 2 == 0; });
for (auto v : result) {
std::cout << v << std::endl;
}
}
209:蟻人間
20/08/06 18:50:53.87 mzjhTFla.net
お題: 現実世界でコイにえさをやるプログラム。
できるのか?
210:デフォルトの名無しさん
20/08/06 19:02:17 nx4HEXSE.net
>>205
始めからPLCのプログラム限定って書け>>197
211:デフォルトの名無しさん
20/08/06 19:06:41 cHZDAcP7.net
>>205
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。
ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。
212:蟻人間
20/08/06 19:21:15.27 mzjhTFla.net
ハードウェアだとソフトウェア制御できない。成長を細かく制御したい。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。
213:デフォルトの名無しさん
20/08/06 19:23:23.77 nx4HEXSE.net
>>208
ピ・タ・ゴ・ラ・スイッチ
214:デフォルトの名無しさん
20/08/06 19:37:26 /QKQvkvR.net
なぜ何度ツッコまれてもスレタイからずれようとするんですか?
学習できないんですか?
215:蟻人間 ◆T6xkBnTXz7B0
20/08/06 19:46:21 mzjhTFla.net
>>210
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会
216:デフォルトの名無しさん
20/08/06 19:58:03 AWtnj9QL.net
CDトレイを開閉するソフトを作りそれで餌やり器のボタンを押せ
217:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:01:30 mzjhTFla.net
>>212
正解。次のお題お願いします。
218:デフォルトの名無しさん
20/08/06 20:18:11.34 nx4HEXSE.net
【お題】正解にたどり着くようにアシストした得点を算出するプログラムを作れ
スケールは1点以上100点未満とする
219:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:28:14 mzjhTFla.net
>>214
それは人間しかできないんで内科医?
220:デフォルトの名無しさん
20/08/06 20:37:37 sjF+gr/I.net
クソコテ死ねよマジで
221:デフォルトの名無しさん
20/08/06 20:53:50 O/aURmUk.net
>>208
その手の目的には Raspberry Pi がおすすめです
最近流行っているから多くのノウハウが容易に見つかりますよ
222:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:07:24 mzjhTFla.net
>>217
ありがとうございます。使えそうなハードでかなりお買い得ですね。
三菱やパナソニックは、、、破壊的イノベーションができない連中か。。。
223:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:16:15 mzjhTFla.net
IchigoJamというのもあるみたい。
224:デフォルトの名無しさん
20/08/06 21:29:05.63 8sSWlLgK.net
スレチ
◆QZaw55cn4c はうせろ
225:
20/08/06 22:26:16.70 L4WiFaHt.net
>>220
突然、どうしたのですか?
226:デフォルトの名無しさん
20/08/06 22:38:17.00 8sSWlLgK.net
>>221
呼んでねえよハゲ消えろ
227:蟻人間
20/08/06 23:02:55.51 mzjhTFla.net
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。
(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
228:デフォルトの名無しさん
20/08/07 00:08:41.77 TzYKRTqH.net
よく、ラズパイコンテストでやってる
水槽の中の金魚に、エサをやる装置とか
229:デフォルトの名無しさん
20/08/07 11:29:33 uQ4nbdFf.net
債務が多い
230:デフォルトの名無しさん
20/08/07 12:51:36 lb7vo/Jy.net
お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください
入力: D a B c d c C A E c e B b
出力: (a A) (B B b) (c c C c) (D d) (E e)
231:デフォルトの名無しさん
20/08/07 13:43:57.69 uQ4nbdFf.net
>>226 js
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = {}
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return Object.values(groups).sort((g1, g2) => charVal(g1[0]) - charVal(g2[0])).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
232:デフォルトの名無しさん
20/08/07 13:48:23.69 uQ4nbdFf.net
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = []
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return groups.filter(Boolean).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
sort いらなかった
233:デフォルトの名無しさん
20/08/07 14:51:48.30 5vmbSLbR.net
>>226 Ruby
# その 1
def igrouping( str )
gList = {}
str.split.each{|ch|
k = ch.downcase
gList[ k ] ||= []
gList[ k ] << ch
}
gList.keys.sort.map{|k| '(' + gList[ k ].join(' ') + ')' }.join(' ')
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
234:デフォルトの名無しさん
20/08/07 14:52:06.69 5vmbSLbR.net
>>226 Ruby
# その 2
def igrouping( str )
i = 0
'(' + str.split.sort_by{|x| [ x.downcase, i += 1 ] }.join(' ').gsub( /(\w) (?!\1)/i ){"#{$1}) (#{$2}"} + ')'
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
235:デフォルトの名無しさん
20/08/07 16:23:53.54 uQ4nbdFf.net
<<=って演算子ほしいな
236:デフォルトの名無しさん
20/08/07 19:28:59 P4+Ga4Bm.net
>>226 Ruby
$><<gets.split.group_by{|c| c.ord % 32}.sort.map{|a| "(#{a.last.join ' '})"}.join(' ')
# => (a A) (B B b) (c c C c) (D d) (E e)
237:デフォルトの名無しさん
20/08/08 00:04:29 b55CcwAR.net
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い
Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式
そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
238:デフォルトの名無しさん
20/08/08 00:46:24.94 R/FWJxxqi
>>226 C++
URLリンク(wandbox.org)
C++で無理やりメソッドチェーンしてみた
239:デフォルトの名無しさん
20/08/08 07:24:36.17 u/td9dv4.net
lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど
240:デフォルトの名無しさん
20/08/08 07:26:45.92 u/td9dv4.net
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
241:デフォルトの名無しさん
20/08/08 09:18:46 b55CcwAR.net
>>226
Elixir
input_str = "D a B c d c C A E c e B b"
list = input_str
|> String.split # 文字列を空白で分割して、配列化する
|> Enum.group_by( &String.downcase/1 ) # 小文字へ変換して、グループ化する
|> Map.values # 値を取り出す
|> Enum.map( fn list -> Enum.join( list, " " ) end ) # 各要素を空白でつなげて、1つの文字列にする
|> Enum.map( fn str -> "(" <> str <> ")" end ) # 文字列を、( ) で囲む
# IO.inspect list
Enum.join( list, " " ) # 各要素を空白でつなげて、1つの文字列にする
|> IO.puts
242:デフォルトの名無しさん
20/08/08 14:04:33 JvTsLjL+.net
>>226
Python3
URLリンク(ideone.com)
全然短くならなかったんだけど皆どういう脳みそしてるの
243:デフォルトの名無しさん
20/08/08 14:58:00 gFRxrH0y.net
>>226
perl
$input = "D a B c d c C A E c e B b";
map{push @{$h{uc $_}}, $_}(split / /, $input);
print map{map{"(".(join" ", @$_).")"}$h{$_}} sort{uc $a cmp uc $b} keys %h;
>>238
オブ脳ならぬラムダ脳なんだろうなぁ
同値でグループ化、代表元でソート、出力、これを関数でやってる
それかワンライナーへの偏執的な愛
244:デフォルトの名無しさん
20/08/08 15:53:05 xsg1wzC9.net
>>226 Ruby
gets.split.group_by(&:upcase).sort.map{|_,v|$><<"(#{v*' '}) "}
245:デフォルトの名無しさん
20/08/08 16:11:32.49 yUCBpeXj.net
>>238
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
URLリンク(ideone.com)
246:デフォルトの名無しさん
20/08/08 17:07:51.92 HH2BebFt.net
>>238
Pythonだとどうしても短くはならないな。
URLリンク(ideone.com)
groupbyのところは、defaultdictで書く方法もあるけど大差なし。
247:デフォルトの名無しさん
20/08/08 21:09:30.55 JvTsLjL+.net
>>239
Rubyの人もワンライナーだな
Rubyってショートコーディングに向いてるのかな?
>>241,238
なるほど
248:デフォルトの名無しさん
20/08/08 21:20:24 bf+w2Xl6.net
code golfなら基本はperlで、次点がRubyじゃないですかね
249:デフォルトの名無しさん
20/08/08 21:56:24 JvTsLjL+.net
>>244
そういうものなのね
250:231
20/08/08 22:49:25 b55CcwAR.net
関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから
Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる
str = "a b c"
# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )
str
|> String.split
|> IO.inspect
出力は、どちらも
["a", "b", "c"]
251:231
20/08/08 22:54:29 b55CcwAR.net
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ
Python の内包表記みたいなのは、可読性が悪い
252:デフォルトの名無しさん
20/08/08 23:09:35.53 n6UBlQy6.net
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
253:デフォルトの名無しさん
20/08/08 23:14:07.63 ifN2bgU4.net
>>185
Java
URLリンク(paiza.io)
254:デフォルトの名無しさん
20/08/08 23:32:15 ifN2bgU4.net
>>226
Java
URLリンク(paiza.io)
255:デフォルトの名無しさん
20/08/09 00:15:33.89 cPfQFxYQ8
Ruby上達したら便利そう
理想的なスクリプト言語だな
256:デフォルトの名無しさん
20/08/09 00:17:54.90 /K790vfJ.net
javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな
257:デフォルトの名無しさん
20/08/09 00:24:15.31 cPfQFxYQ8
これとかすげえ
URLリンク(www.youtube.com)
258:デフォルトの名無しさん
20/08/09 00:41:46.15 uywZ9h5A.net
>>185
Python3
URLリンク(ideone.com)
259:デフォルトの名無しさん
20/08/09 02:47:46 Mt0Kh35r.net
>>226
c#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var input = "D a B c d c C A E c e B b";
foreach (var itm in input.Split(" ").GroupBy(p => p.ToUpper()).OrderBy(p => p.Key))
{
Console.Write("(" + string.Join(" ", itm) + ") ");
}
260: } }
261:デフォルトの名無しさん
20/08/09 04:58:28 bQgrv4ZF.net
>>226
Kotlin
URLリンク(paiza.io)
262:デフォルトの名無しさん
20/08/09 16:07:42 HZ7sqguG.net
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる
2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください
入力: abcde deabc
出力: true
入力: abcde cdeba
出力: false
263:デフォルトの名無しさん
20/08/09 16:42:31.20 /K790vfJ.net
>>257 js
const isRotateStr = (a, b) => (a + a).indexOf(b) != -1
console.log(isRotateStr("abcde", "deabc"))
// true
console.log(isRotateStr("abcde", "cdeba"))
// false
264:デフォルトの名無しさん
20/08/09 16:56:20.10 DzMx1xPb.net
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
265:デフォルトの名無しさん
20/08/09 16:59:23.64 Uo9rXbdx.net
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
266:253
20/08/09 19:01:45.47 UiQUiAYf.net
>>226 Perl5
push(@{$h{uc$_}}, $_) for qw{D a B c d c C A E c e B b};
print map{"(@{$h{$_}}) "} sort keys %h;
実行結果
~ $ perl 18_221_NCS_sort_grp.pl
(a A) (B B b) (c c C c) (D d) (E e)
267:253
20/08/09 19:17:23 A1LNtpwx.net
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
say "出力 ", "$a$a" =~ /$b/ ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
268:デフォルトの名無しさん
20/08/09 20:09:27.60 sb6ynJ/q.net
Jニキも披露してくれよ
269:デフォルトの名無しさん
20/08/09 22:00:05.82 BOQzPYI8.net
>>226 octave
URLリンク(ideone.com)
>>257 octave
URLリンク(ideone.com)
270:253
20/08/09 22:27:07 iNMqPGBy.net
>>261 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = "$a$a" =~ /^(.*)($b)(.*)$/;
say "出力 ", (@a and "$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
入力 aaaaa aaa
出力 false
271:デフォルトの名無しさん
20/08/09 22:40:05 /K790vfJ.net
octave文法好みだけど結構古い言語なんだな
272:253
20/08/09 23:21:31.30 dFp53gtH.net
>>226 Python3
s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
u = c.upper()
if u in d: d[u] += ' ' + c
else: d[u] = c
ks = sorted(d.keys())
print(' '.join(map(lambda x: '(%s)' % d[x], ks)))
実行結果
~ $ py 18_221_NCS_sort_grp.py
(a A) (B B b) (c c C c) (D d) (E e)
273:デフォルトの名無しさん
20/08/09 23:56:04.43 DzMx1xPb.net
Perlだとこの程度でも正規表現使わないといかんのか?
274:253
20/08/10 00:02:07 5Aj+dIHX.net
>>267 を少し簡略化
>>226 Python3
s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
u = c.upper()
d[u] = d[u]+' '+c if u in d else c
print(' '.join(map(lambda x: '(%s)' % d[x], sorted(d.keys()) )))
275:253
20/08/10 00:03:02 5Aj+dIHX.net
>>268
substrとかでも書ける
276:253
20/08/10 01:07:06.98 mTkq56mc.net
>>268
>>265は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = split "$b", "$a$a", 3;
say "出力 ", ("$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
…でもsplitも実は正規表現で分離する機能を持つので、起きていることは実は>>265と一緒なんだよね
277:253
20/08/10 01:18:32.03 mTkq56mc.net
>>271 ゴメン、$a[2]$a[0]はbug、訂正
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
say "入力 $a $b";
@a = split $b, "$a$a", 3;
say "出力 ", ("$a[1]$a[0]") eq $b ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
278:253
20/08/10 01:58:56.02 5YDTUTIu.net
>>272 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;
279:
20/08/10 02:53:12.35 JYoLJZbs.net
>>257 C
スレリンク(tech板:68番)
280:デフォルトの名無しさん
20/08/10 05:44:26 SKFyjjt9.net
お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください
入力: URLリンク(github.com)
出力: "Hello World!"
281:デフォルトの名無しさん
20/08/10 08:49:19.32 SwBLGnEH.net
>>275 Ruby
require 'open-uri'
str = open('URLリンク(raw.githubusercontent.com)').read
M = 256
i = p = s = 0
h = Hash.new(0)
m = [0] * M
while i < str.length
case str[i]
when ?+ then m[p] += 1
when ?- then m[p] -= 1
when ?[ then h[s += 1] = i
when ?] then m[p].zero? ? s -= 1 : i = h[s]
when ?> then p += 1
when ?< then p -= 1
when ?. then $><<m[p].chr
when ?, then m[p] += $<.getc.ord
end
i += 1
end
# => Hello World!
282:デフォルトの名無しさん
20/08/10 08:49:26.47 OSJh6/O/.net
>>275 Ruby
URLリンク(ideone.com)
283:デフォルトの名無しさん
20/08/10 17:10:10.24 Z7zFlWuQ.net
>>257
Kotlin
簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。
URLリンク(paiza.io)
284:デフォルトの名無しさん
20/08/10 17:10:16.38 SKFyjjt9.net
>>275 C++
URLリンク(ideone.com)
285:デフォルトの名無しさん
20/08/10 18:01:14 Z7zFlWuQ.net
>>275
Kotlin
とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。
URLリンク(paiza.io)
こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)
$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
286:デフォルトの名無しさん
20/08/10 18:43:36.36 TsKVv45J.net
>>257
Python3
URLリンク(ideone.com)
287:デフォルトの名無しさん
20/08/10 21:10:04.86 EfqLUS40.net
>>257 Python3
def f(a, b): return len(a) == len(b) and a in b + b
288:デフォルトの名無しさん
20/08/10 22:32:27 tDeKMBiv.net
>>257 c
URLリンク(ideone.com)
289:デフォルトの名無しさん
20/08/10 23:41:40.77 SKFyjjt9.net
>>257 C++
URLリンク(ideone.com)
290:デフォルトの名無しさん
20/08/10 23:46:58.70 lJp+wmfa.net
bfってループの入れ子できたっけ?
291:デフォルトの名無しさん
20/08/10 23:47:11.22 SwBLGnEH.net
>>285
できる
292:272
20/08/11 01:47:49 RwCZynCZ.net
>>275
Kotlin
これはインタープリタ版。
URLリンク(paiza.io)
293:デフォルトの名無しさん
20/08/11 01:50:50.24 RwCZynCZ.net
>>285
知らんけど >>287 は出来るように作った。
>>280 のやつはコンバータだが Kotlin が出来るので出来る。(というか出来ないように作る方が面倒かな?)
294:デフォルトの名無しさん
20/08/11 07:40:40.35 RSsrE9PW.net
>>257
>>281をリファクタリング
URLリンク(ideone.com)
295:デフォルトの名無しさん
20/08/11 14:40:27.33 psN1NwFJ.net
こんなに暑いと座禅プログラムで涼みたい。
296:デフォルトの名無しさん
20/08/12 10:55:20.81 WiVroiaz.net
警策を上から振り下ろす動作の機械を作り、そこにマイコンを接続。更に行ったり
来たりするルンバのようなものの上にそれを乗せ、そこにもマイコンを接続。
そのマイコンのコントロールプログラムを作成。
297:デフォルトの名無しさん
20/08/12 11:07:50.98 WiVroiaz.net
既にこんなの作ってる人が居た。
座禅で動いたら棒で叩かれるやつを全自動化する
URLリンク(dailyportalz.jp)
298:デフォルトの名無しさん
20/08/12 16:50:07.72 xjprAYba.net
令和のコペルニクス
URLリンク(youtu.be)
299:デフォルトの名無しさん
20/08/12 19:58:36.03 j5y8ZKQl.net
お題
Brainfuckのの'+','-','.'の 3つの命令のみで
特定の文字列を表示するBrainfucの
ソースコードを生成するプログラム。
300:デフォルトの名無しさん
20/08/12 20:07:13.01 kGuev0jH.net
>>294 Ruby
puts "Hello, World!\n".codepoints.unshift(0).each_cons(2).map{|a, b| '%s.' % ((b > a ? ?+ : ?-) * (b - a).abs)}*''
# =>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.+++++++..+++.[略]
301:デフォルトの名無しさん
20/08/12 23:55:21 WiVroiaz.net
差分出すっていうと ADPCM の圧縮を思い出すな。
302:デフォルトの名無しさん
20/08/13 01:08:54.66 TUx4JMNp.net
>>294
Perl5
プログラムの構造は >>295 と同じだがワンライナー。
行単位で標準入力から入力して標準出力に出力する。入力の最後の改行は削除している。行ごとに直前の文字は0にリセットしている。
見易くするために '.' の後には改行を出力している。
以下は Linux のシェルのコマンドラインで実行して abc と Hello, world. を入力した時のコピペ。
$ perl -ne 'BEGIN{$o=0}chomp;for(split //){$c=ord($_);print((($o < $c ? "+" : "-") x abs($o - $c)) . ".\n");$o=$c}$o=0'
abc
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+.
+.
Hello, world.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
--------.
+++.
------.
--------.
------------------------------------------------------.
$
303:デフォルトの名無しさん
20/08/13 01:49:54 CZu90IWX.net
>>294 Ruby
"Hello World!\n".codepoints.inject(''){|r,c| r << '+' * c + '.[-]' }
304:デフォルトの名無しさん
20/08/13 03:32:09 CZu90IWX.net
>>294 Ruby
"Hello World!\n".codepoints.map{|c| '+' * c + '.' }.join( '[-]' )
305:デフォルトの名無しさん
20/08/13 05:51:07.18 CZu90IWX.net
>>294
>>298,299 は出題条件の「'+','-','.'の 3つの命令のみ」を忘れてましたご免なさい
306:デフォルトの名無しさん
20/08/13 06:48:39.25 9ZM4Lmsz.net
>>294 Ruby
gets.each_char{|c|d=$.-$.=c.ord;$><<(d<0? ?+*-d:?-*d)+?.}
307:デフォルトの名無しさん
20/08/13 12:37:03.85 8zEuDtsy.net
なるほどbrainfuckでは[-]で現在指してるメモリの値を0クリアできるのか
308:デフォルトの名無しさん
20/08/14 01:20:11 CuxcYYZ5.net
お題:変数a, b, cを32ビット符号付き整数の最大値で初期化、または代入せよ。
octave
URLリンク(ideone.com)
ada95
URLリンク(ideone.com)
309:デフォルトの名無しさん
20/08/14 03:17:07 cCFmHkiX.net
>>303 Ruby
# 初期化だけ
a = b = c = 2**31 - 1
# 初期化して表示
p *(a,b,c = [2**31-1] * 3) #=> 2147483647\n2147483647\n2147483647\n
310:デフォルトの名無しさん
20/08/14 07:01:38 cCFmHkiX.net
>>303 Ruby
お題とずれるけど INT32_MAX, INT32_MIN を普通の演算以外で作ってみた
# 定数 0,1 から INT32_MAX, INT32_MIN
[~0].pack('l').unpack('L').first >> 1 #=> 2147483647
[~0].pack('l').unpack('N').first >> 1 #=> -2147483648
# 定数 1 から INT32_MAX, INT32_MIN
[~1].pack('l<').unpack('b*').pack('B*').unpack('l>').first #=> 2147483647
[1].pack('l<').unpack('b*').pack('B*').unpack('l>').first #=> -2147483648
311:デフォルトの名無しさん
20/08/14 08:01:01.07 sgFs/qSh.net
>>303 JavaScript
a=b=c=-1>>>1
312:デフォルトの名無しさん
20/08/14 08:17:19.00 jifd8sPx.net
>>303 C++
int32_t max = 1 << 31;
int32_t min = ~max;
313:デフォルトの名無しさん
20/08/14 08:18:37.41 jifd8sPx.net
あ maxとminが逆だった
314:デフォルトの名無しさん
20/08/14 08:20:39.60 jifd8sPx.net
しかもお題と関係ない スマソ
315:デフォルトの名無しさん
20/08/14 08:21:04.21 hpI++Bi7.net
>>303 Python では整数に制限がないからnumpyで、
import numpy as np
a=b=c=np.iinfo(np.int32).max
316:デフォルトの名無しさん
20/08/14 08:38:19 jifd8sPx.net
>>303 C++(訂正)
#include <iostream>
#include <tuple>
int main() {
int32_t max = ~(1 << 31);
const auto [a, b, c] = [&]() { return std::tie(max, max, max); }();
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
}
317:デフォルトの名無しさん
20/08/14 09:05:58 jifd8sPx.net
const auto [a, b, c] = std::tie(max, max, max);
これだけでよかったorz
318:デフォルトの名無しさん
20/08/14 14:02:54 9qHjnK+i.net
お題:任意文字列を含むビットコインアドレスを生成するスクリプト
BitCoinDescriptionAddress
↓
1BitCoinDescriptionAddressadTvGDH
319:デフォルトの名無しさん
20/08/15 16:58:24 gFfdk9Ij.net
>>303
Kotlin 及び Kotlin script
普通にただ Int.MAX_VALUE を代入するだけだとつまらないので List 使ってまとめて代入。
val (a, b, c) = listOf(Int.MAX_VALUE, Int.MAX_VALUE, Int.MAX_VALUE)
この形式は実際には a に List のインスタンスの component1() メソッドを実行して結果を代入、
b に component2() の結果を代入、c に component3() の結果を代入という具合に componentN()
のメソッドを呼び出しているだけだ。(コンパイラが自動でそういう風にしてくれる。但し定数の代入
だったら最終的にはうまい事最適化してくれてただの値の代入になっているんじゃないかと思う)。
それで、List インターフェースには component5() までしかないのでそのままだと 5 個の変数にしか
代入できない。しかし自分で下記のように component6() という拡張関数を作れば 6 個目の変数への
代入ができるようになる。
fun <T> List<T>.component6() = get(5)
val (a, b, c, d, e, f) = listOf(Int.MAX_VALUE, Int.MAX_VALUE, Int.MAX_VALUE, 1, 2, 3)
これで f には 3 が代入される。
まあしかしこのような形式でまとめて複数の変数を初期化をするのは変数が多くなればなるほど
見辛くなってどれがどれに代入されるか分かり辛くなるのであまりお勧めする気は起きない。
320:295
20/08/15 17:28:56 nnj+MvqH.net
>>303 octave
URLリンク(ideone.com)
単に[a, b, c] = deal(intmax)でよかった
321:デフォルトの名無しさん
20/08/15 17:57:15 uqmyrozg.net
お題
長さNの順列を全列挙してください
入力: N
出力: N!行の1からNの整数を用いた順列
例
入力: 3
出力:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
322:デフォルトの名無しさん
20/08/15 18:04:12.38 WnA8LB9O.net
>>316 Ruby
[*1..gets.to_i].permutation{|a| puts a*' '}
323:デフォルトの名無しさん
20/08/15 18:07:06.59 nnj+MvqH.net
>>316 octave
URLリンク(ideone.com)
f = @(n) perms(1:n);
f(3)
324:デフォルトの名無しさん
20/08/15 19:24:16.43 4GsEJ4Sf.net
お題
HTMLドキュメントをwebブラウアザ上に表示するプログラムを作りなさい。
内容は、html、head、meta、title、body、h1 を含み、
UTF-8で表示するものとする、
Hello World!
325:デフォルトの名無しさん
20/08/15 20:07:59.51 nR02Shr3.net
お題: 整数の0,1を真偽値のfalse,trueに変換しなさい
326:デフォルトの名無しさん
20/08/15 20:22:45.39 BUqVCKAW.net
>>319 Ruby
require 'webrick'
BrowserPath = 'C:/Program Files/Mozilla Firefox/firefox.exe'
srv = WEBrick::HTTPServer.new( {BindAddress: '127.0.0.1', Port: 55080} )
trap("INT"){ srv.shutdown }
srv.mount_proc('/') do |req, res|
html = <<_EOT_
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title></head>
<body>
<h1>Hello World!</h1>#{Time.now.strftime('%y/%m/%d %T')}<br></body></html>
_EOT_
res.body = html.encode( Encoding::UTF_8 )
res['Content-Type'] = 'text/html'
end
Thread.new { sleep 1; system( %Q{"#{BrowserPath}" URLリンク(127.0.0.1:55080) ) }
srv.start
327:デフォルトの名無しさん
20/08/15 20:34:31.85 BUqVCKAW.net
>>320 Ruby
def i2b( x )
if x.is_a?( Integer )
return false if x == 0
return true if x == 1
end
x
end
[ 'foo', 7, 1, 1.0, [], true, false, 0, {} ].each{|x|
puts "%5p : %5p" % [x, i2b( x )]
}
# =>
"foo" : "foo"
7 : 7
1 : true
1.0 : 1.0
[] : []
true : true
false : false
0 : false
0 : false
{} : {}
328:314
20/08/15 20:37:12.09 BUqVCKAW.net
>>322
0 : false
が一行余分に付いてしまった
329:デフォルトの名無しさん
20/08/15 20:49:55 WnA8LB9O.net
>>320 Ruby
n.nonzero?
330:デフォルトの名無しさん
20/08/15 20:59:34.51 nnj+MvqH.net
>>320 ocaml
URLリンク(ideone.com)
let f = function 0 -> false | 1 -> true
let () = Printf.printf "%B %B" (f 0) (f 1)
>>320 c++
URLリンク(ideone.com)
#include <iostream>
#include <iomanip>
int main() {
331:std::cout << std::boolalpha << 0 << !!0 << 1 << !!1 << std::endl; return 0; }
332:デフォルトの名無しさん
20/08/15 21:22:21.80 v9cGseLQ.net
>>320
0, 1以外の時の挙動が書いてない
単体テストできねーだろ、やり直し!
333:デフォルトの名無しさん
20/08/15 23:19:07 gFfdk9Ij.net
>>320
Kotlin 及び Kotlin Script
まず、こういう拡張関数を定義しておく。
fun Int.toBoolean() = this != 0
この後は Int 型のインスタンスに対して .toBoolean() で 0 なら false, 0 以外なら true が返る。
例
0.toBoolean() は false になる。
1.toBoolean() は true になる。
x.toBoolean() は x の型が Int で 0 なら false, 0 以外なら true になる。x がその他の型だとコンパイルエラー。
334:デフォルトの名無しさん
20/08/16 02:10:15.75 aQEvXwVj.net
>>316 C
URLリンク(ideone.com)
335:デフォルトの名無しさん
20/08/16 10:54:19.77 DGzsHTxH.net
Python
>>320
bool(n)
>>316
from itertools import permutations
N = 3
print([x for x in permutations(range(1, N+1))])
336:デフォルトの名無しさん
20/08/16 11:17:36 x8ZjthFZ.net
>>316 C++
URLリンク(ideone.com)
337:デフォルトの名無しさん
20/08/16 19:28:34.07 Stgr85a5.net
>>316
Kotlin
URLリンク(paiza.io)
なんとなく以前作ったような気もするがまた作った。
338:蟻人間 ◆T6xkBnTXz7B0
20/08/16 19:41:54 GwA/W8AI.net
お題: 浮動小数点数の区間演算の加減乗除(+、-、*、/)を実現しなさい。開区間は丸カッコを、閉区間は角カッコを使う。
区間はカッコで囲まれた数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。
例)
[1, 3) + 2 → [3, 5).
[2, 8] - [1, 2] → [0, 7].
(-3, 2] * (1, [2, 3)) → (-9, 6).
339:デフォルトの名無しさん
20/08/16 19:47:13.56 WQRWSQYc.net
>>332
ほんとクソだなお前
なんで数と区間が何の説明もなく比較可能な状態になってんだよ
教養レベルの位相と集合の知識身に付けてから出直せハゲ
340:蟻人間
20/08/16 19:54:55.84 GwA/W8AI.net
>>333
入力の計算式において単一の数は同等の閉区間と見なすことにする。
2 → [2, 2].
341:デフォルトの名無しさん
20/08/16 19:59:26.75 WQRWSQYc.net
>>334
任意の区間に対してどのように順序を定義して全順序集合を構成するのか考えてから言えよクソ雑魚が
342:デフォルトの名無しさん
20/08/16 20:01:44.11 5GlLVozn.net
そもそも 2 と [2, 2] が同じだと思ってる時点でやばいよ
ペアノ系で 0 = 1 って言ってるようなもんだぞ
343:蟻人間 ◆T6xkBnTXz7B0
20/08/16 20:08:52 GwA/W8AI.net
>>335
任意の[x, y]についてx<=yと仮定する。
[a, b] + [c, d] == [a+c, b+d].
[a, b] - [c, d] == [a-d, b-c].
[a, b] * [c, d] == [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] == [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].
344:デフォルトの名無しさん
20/08/16 20:11:24.43 WQRWSQYc.net
>>337
順序の定義しろっつってんだろクソが
「(1, [2, 3))」かつ「対の最初の要素は対の最後の要素以下とする」って言ってるってことは
[1, 1] <= [2, 3) なんだろ?
任意の区間の間で矛盾なく順序を定義しろや
345:蟻人間
20/08/16 20:24:24.91 GwA/W8AI.net
>>338
すみません。カッコの入れ子はややこしいので止めます、、、
というのは簡単だが、あえて考える。
b<=cならば、間違いなく[a, b] <= [c, d]は真。
d<aならば、[a, b] <= [c, d]は�
346:U。 それ以外は[a, b] <= [c, d]の論理値は不定とし、実行時エラーを発生させる。
347:デフォルトの名無しさん
20/08/16 20:32:34 WQRWSQYc.net
>>339
完全律すら成り立たない順序ってなんだよ
「カッコの入れ子はややこしい」とかそういうレベルじゃねえんだよ
だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
お前群論なめてんのか
348:デフォルトの名無しさん
20/08/16 20:34:23 1lLvvYB6.net
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね
349:デフォルトの名無しさん
20/08/16 20:50:12.97 5EzRC1Sr.net
>>339
死ねカス
350:蟻人間
20/08/16 20:54:18.06 GwA/W8AI.net
>>340
> だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。
351:デフォルトの名無しさん
20/08/16 20:57:11.13 rY4w2Ca/.net
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ
352:デフォルトの名無しさん
20/08/16 21:13:43.55 WQRWSQYc.net
where 0 < a < b
0 = 0 * [0, 1]
= ([a, b] + [-a, -b]) * [0, 1]
= [a, b] * [0, 1] + [-a, -b] * [0, 1]
= [0, b] + [-b, 0]
= [-b, b]
!= [0, 0] = 0
矛盾
死ね
消えろ
353:蟻人間
20/08/16 21:16:32.00 GwA/W8AI.net
>>345
0 < a < bのときは、[-a, -b]は定義されない。
354:デフォルトの名無しさん
20/08/16 21:29:26.85 WQRWSQYc.net
>>346
順序の定義が矛盾してるんだから[-a, -b]は定義可能であっても良い
本当頭わりいな
355:デフォルトの名無しさん
20/08/16 21:34:29.96 1lLvvYB6.net
[0, 1]*[0, 1] = [0, 1]
<=> [0, 1]*([0, 1] - 1) = 0
<=> [0, 1]*[-1, 0] = 0
<=> [-1, 0] = 0
流石にひどいって
356:蟻人間
20/08/16 21:48:28.85 GwA/W8AI.net
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則
357:蟻人間
20/08/16 22:04:28.19 GwA/W8AI.net
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。
すみません、取り下げます。
358:デフォルトの名無しさん
20/08/16 22:08:12.76 WQRWSQYc.net
>>350
それ以前の問題だっつーのアホ
任意の数 a, b に対して容易に a = b が成立するクソ
359:デフォルトの名無しさん
20/08/16 22:16:18.77 UYHP6Cr3.net
問題を解くスキル<<<<<解ける問題を作るスキル
だったりするかも
360:デフォルトの名無しさん
20/08/16 22:26:48.34 Nztll5gc.net
>>316
Java
URLリンク(paiza.io)
361:蟻人間 ◆T6xkBnTXz7B0
20/08/16 22:46:06 GwA/W8AI.net
やり直し。
お題: 区間と演算子によって構成される計算式が入力として与えられる。下記に従って浮動小数点数の区間に対する二項演算(+、-、*、/)を実現し、計算後の区間を出力しなさい。入力される区間は閉区間のみとする。
閉区間は角カッコで囲まれた浮動小数点数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。すなわち[a, b]という式があればa<=bでなければならない。
式が正当でないか、ゼロ除算があれば、実行時エラーを発生させること。
演算の定義:
[a, b] + [c, d] := [a+c, b+d].
[a, b] - [c, d] := [a-d, b-c].
[a, b] * [c, d] := [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] := [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].
例)
[1, 3] + [2, 2] → [3, 5].
[2, 8] - [1, 2] → [0, 7].
[-3, 2] * [1, 3] → [-9, 6].
362:デフォルトの名無しさん
20/08/16 22:58:27.46 bYLilpPQ.net
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない
かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが
363:
20/08/16 23:34:04.85 kJzMyvlv.net
>>316 C
URLリンク(ideone.com)
364:253
20/08/16 23:50:47.82 G5r8RAij.net
>>316 Perl5
use Data::Dump 'dump';
sub fn {
my ($le, $pv, @ri) = @_;
defined $pv ? map {[$pv, @$_]} fn([], @$le, @ri) : ([])
,
@ri ? fn([@$le, $pv], @ri) : ()
}
$N = 3;
@a = 1..$N;
print dump(fn [], @a);
実行結果
$ perl 18_308_N_permutation.pl
([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1])
365:デフォルトの名無しさん
20/08/17 01:49:55.07 Nup7rIuH.net
前の書き方だとやる気が出ないみたいなので再掲
お題 任意文字列を含む有効なビットコインアドレスを生成するにはどうすればいいか
ビットコインアドレスの形式は
[プレフィックス 1バイト] [本体データ 160ビット] [チェックサム 4バイト]
をbase58(58進数)で表現したもの
プレフィックスは0x00とする
チェックサムはプレフィックス+本体データをsha256に二回かけた後の先頭4バイト
詳細
URLリンク(www.tottemoyasashiibitcoin.net)
例:
1BitCoinDescriptionAddressadTvGDH
1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC
これはどっちも有効なビットコインアドレスになってる
URLリンク(chainflyer.bitflyer.com)
URLリンク(chainflyer.bitflyer.jp)
366:デフォルトの名無しさん
20/08/17 06:10:10.64 sRZ0bbBO.net
>>354
消えろカス
367:デフォルトの名無しさん
20/08/17 08:34:59.13 4e6PsksO.net
>>359
お前うざいよ
368:デフォルトの名無しさん
20/08/17 09:10:13 CGaaR/Ic.net
どうすればいいか?ってのがよくわからない
369:デフォルトの名無しさん
20/08/17 09:11:51.56 CGaaR/Ic.net
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
370:デフォルトの名無しさん
20/08/17 11:17:26.81 2KNIyB/f.net
ブルートフォースアタックしか思い浮かばない。
371:デフォルトの名無しさん
20/08/17 18:12:59.56 Nup7rIuH.net
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
372:デフォルトの名無しさん
20/08/17 19:37:06.53 4e6PsksO.net
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
373:デフォルトの名無しさん
20/08/17 19:45:01.16 Nup7rIuH0.net
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
374:デフォルトの名無しさん
20/08/17 22:43:06.44 sRZ0bbBO.net
>>360
お前がうぜえよ死ね
375:デフォルトの名無しさん
20/08/17 22:47:24.50 4e6PsksO.net
>>367
お前が死ね
376:デフォルトの名無しさん
20/08/17 22:50:53.21 3fwftKf8.net
よし俺がしぬよ
377:デフォルトの名無しさん
20/08/17 22:53:16.60 UMcd904E.net
夏だなあ
378:デフォルトの名無しさん
20/08/17 22:56:52 4e6PsksO.net
>>369
じゃあ俺が死ぬよ
379:デフォルトの名無しさん
20/08/17 22:57:17 3fwftKf8.net
お題: 『死』を表現せよ
380:デフォルトの名無しさん
20/08/17 22:57:32 3fwftKf8.net
>>371
どうぞうどうぞ
381:デフォルトの名無しさん
20/08/17 22:58:07 sRZ0bbBO.net
>>371
じゃあ死ねよ
382:デフォルトの名無しさん
20/08/17 23:05:20 4e6PsksO.net
>>374
全然おもんないやんけ
もう一回チャンスをやろう
383:デフォルトの名無しさん
20/08/17 23:05:35 4e6PsksO.net
じゃあ俺が死ぬよ
384:デフォルトの名無しさん
20/08/17 23:05:59 4e6PsksO.net
くるよくるよ
385:デフォルトの名無しさん
20/08/17 23:06:13 4e6PsksO.net
ドキドキ
386:デフォルトの名無しさん
20/08/17 23:39:35 4e6PsksO.net
逃げたか
387:デフォルトの名無しさん
20/08/17 23:39:58 4e6PsksO.net
笑いから逃げるな
388:デフォルトの名無しさん
20/08/18 00:15:03.77 /+dAg+CW.net
お題: 二人の煽り耐性から「死ね」と言い合うプログラム
煽り耐性 0.1~1
死ねと言い返す確率 (1-煽り耐性) * 100%
最初に死ねと言うのはA
入力 {Aの煽り耐性} {Bの煽り耐性}
例
> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
389:デフォルトの名無しさん
20/08/18 01:25:39.14 IZwRntbA.net
if (>>381{A}%3 ==0.1&&0.8<<373{B}) print "オモロー" & "アキラ" *100% ;
390:デフォルトの名無しさん
20/08/18 01:35:33.42 Vl5MoMXT0.net
>>358 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"
URLリンク(chainflyer.bitflyer.jp)
BASE58とSHA256のライブラリ
URLリンク(cdn.jsdelivr.net)
URLリンク(cdn.jsdelivr.net)
391:デフォルトの名無しさん
20/08/19 16:18:46 ltFkDVN7.net
>>372
#!/bin/sh
rm $0
392:デフォルトの名無しさん
20/08/19 18:40:23.70 d4bqPFA7.net
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
393:デフォルトの名無しさん
20/08/19 18:45:07.34 OrygHj4v.net
略して示唆トン。
394:デフォルトの名無しさん
20/08/20 11:35:09.25 nWR09WFB.net
>>257
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]
395:デフォルトの名無しさん
20/08/23 18:52:15.52 kIX3/Jw/.net
お題:
縦H、横Wの迷路が与えられます。
スタートからゴールに至る道順の個数を求めてください。
迷路は通路から通路へ、上下左右の4方向へのみ移動できます。
ただし、一度通った通路を引き返すような道順は無効です。
また、スタートとゴールは通路です。
1行目に迷路の高さと幅を表す整数H、Wが与えられます。
2行目からH行にわたって、迷路を表す長さWの文字列が与えられます。
文字列は 'S' 'G' '.' '#' の文字のみからなり、それぞれスタート、ゴール、通路、壁です。
例1:
入力:
5 5
S....
##.#.
...#.
##.#.
....G
出力:
2
例2:
入力:
5 5
S....
##.#.
...#.
...#.
....G
出力:
12
396:デフォルトの名無しさん
20/08/24 04:30:51.55 qrCNAVcy.net
>>388 C++
URLリンク(ideone.com)
397:デフォルトの名無しさん
20/08/24 11:49:18.16 2DIU31aQ.net
>>388 C++
URLリンク(wandbox.org)
398:蟻人間
20/08/29 20:44:46.53 GYyhmMZY.net
お題: ロシアンルーレット。
リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
399:デフォルトの名無しさん
20/08/29 21:04:26.78 KxRf/0sH.net
>>391
仕様がわからない
400:蟻人間 ◆T6xkBnTXz7B0
20/08/29 21:07:51 GYyhmMZY.net
ロシアンルーレット
URLリンク(ja.m.wikipedia.org)
回転式拳銃(リボルバー)
URLリンク(ja.m.wikipedia.org)
401:蟻人間
20/08/29 21:24:48.99 GYyhmMZY.net
>>391-392 こんな感じか?
最初にリボルバーを回します。
(弾丸の位置を設定)
こめかみor天井?(K/t) K
1回目: 不発
もう一度リボルバーを回しますか? (Y/n) Y
(弾丸を回転)
こめかみor天井?(K/t) K
2回目: 不発
もう一度リボルバーを回しますか? (Y/n) n
こめかみor天井?(K/t) K
3回目: バーン!
あなたの負けです。
402:蟻人間 ◆T6xkBnTXz7B0
20/08/29 22:00:32 GYyhmMZY.net
えっ、拳銃見たことないの?
403:デフォルトの名無しさん
20/08/29 22:14:20.91 bYj4gZFd.net
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
404:デフォルトの名無しさん
20/08/29 22:51:06 yG/yQHuO.net
jsインタラクティブ入力に弱い
405:デフォルトの名無しさん
20/08/29 23:12:55 yG/yQHuO.net
>>391
URLリンク(repl.it)
// 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
}
406:デフォルトの名無しさん
20/08/29 23:34:19.24 2f/XylsB.net
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される
var a = 1
a // 1 と表示される
407:デフォルトの名無しさん
20/08/29 23:41:03.13 yG/yQHuO.net
swift playgroundとかjestのinlineSnapshotみたいな感じか
使うときがあるか微妙
408:デフォルトの名無しさん
20/08/30 01:02:17.18 xjthqQ7x.net
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください
例
入力: 1
出力: [1]
入力: 3
出力: [1, 2, 2, 3, 3, 3]
409:デフォルトの名無しさん
20/08/30 01:33:41.99 xjthqQ7x.net
お題
配列をソートする関数を受け取って安定ソートか否かを判定する
プログラムを作成してください
410:デフォルトの名無しさん
20/08/30 06:49:46 a0VCHWdX.net
お題: splitを実装せよ(ただし組み込みやライブラリのsplitは使ってはならない)
例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
411:デフォルトの名無しさん
20/08/30 08:02:58.80 Ui9A3dkW.net
>>401 J
f =: #~ @: >: @ i.
412:デフォルトの名無しさん
20/08/30 09:40:37.84 rD3R6mry.net
>>401 Ruby
(0..3).each{|n| p (1..n).reduce([]){|s, a| s + [a] * a}}
# =>
[]
[1]
[1, 2, 2]
[1, 2, 2, 3, 3, 3]
>>403 Ruby
p 'abc:def:ghi'.scan(/[^:]+/) # => ["abc", "def", "ghi"]
413:デフォルトの名無しさん
20/08/30 09:41:22.98 ka/TVb/i.net
>>401 octave
URLリンク(ideone.com)
f = @(n) repelem(1:n, 1:n);
f(3)
414:デフォルトの名無しさん
20/08/30 09:43:25.32 pWMgwPJi.net
>>403
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))
}
415:デフォルトの名無しさん
20/08/30 17:51:57.01 9TpSDH8X.net
>>403 octave
f = @(s, d) arrayfun(@(b, e) {s(b:e)}, [1 find(s == d) + 1], [find(s == d) - 1 numel(s)]);
f('abc:def:ghi', ':')
416:400
20/08/30 18:29:58 9TpSDH8X.net
一応url
URLリンク(ideone.com)
417:デフォルトの名無しさん
20/08/30 18:55:27.84 uG01djUi.net
>>403 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' ]
ずるいしダブルクォート対応できてないけど思いつき
418:デフォルトの名無しさん
20/08/30 19:52:13.41 KMqOjvFr.net
>>403 Ruby
# セパレーターの仕様が文字か文字列か分からなかったので文字列にした
def split( str, sep )
res = []
(str + sep).scan( /(.*?)#{Regexp.escape(sep)}/ ){ res << $1 }
res
end
split('abc:def:ghi', ':') #=> ["abc", "def", "ghi"]
419:デフォルトの名無しさん
20/08/30 19:55:11.73 OKCM85cL.net
>> 393 C++
URLリンク(ideone.com)
>> 394 C++
URLリンク(ideone.com)
合ってるか分からない
(とりあえずバブルソートが安定だからそれと比較した)
>> 395 C++
URLリンク(ideone.com)
420:デフォルトの名無しさん
20/08/30 23:05:46 HaB2mhSL.net
>>401 C++
URLリンク(wandbox.org)
コンパイル時にできる
421:デフォルトの名無しさん
20/08/30 23:23:11.11 OKCM85cL.net
operator[]がconstexprなのはC++17以降らしいね
422:デフォルトの名無しさん
20/08/31 00:36:58 Sr2UUXBk.net
宇宙創生から現在まで【宇宙の歴史?(過去編)】
URLリンク(www.youtube.com)
期待値が無限大な賭け(サンクトペテルブルクのパラドックス)
URLリンク(www.youtube.com)
もしも生徒が全員予備校講師だったら
URLリンク(www.youtube.com)
eが超越数であることの証明
URLリンク(www.youtube.com)
【受験生へ】勉強のモチベーションをあげる3つの方法
URLリンク(www.youtube.com)
線を描くだけ!万能視覚的かけ算【インド式計算】
URLリンク(www.youtube.com)
全受験生が理解するべき!偏差値とは何か
URLリンク(www.youtube.com)
楽しいことを増やそう!科学の眼鏡を�
423:ゥけた1日とは【ヨビノリたくみ特別公演】 https://www.youtube.com/watch?v=u5al7kwy64k 数学の魅力とは?中田敦彦と人気教育系YouTuberヨビノリたくみ先生が初コラボ https://www.youtube.com/watch?v=qxiAyyotAM0
424:デフォルトの名無しさん
20/08/31 08:12:50.04 o+KAewBM.net
>>401 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
425:デフォルトの名無しさん
20/08/31 09:50:22 3l02ZOhc.net
>>404
何やってんのか分かんねぇ…
426:デフォルトの名無しさん
20/08/31 12:53:04.32 DeTlQxvW.net
f#(@:m:@ )顔文字にしか見えん
427:デフォルトの名無しさん
20/08/31 13:15:43 0jcGZySh.net
\(._. \)
428:蟻人間 ◆T6xkBnTXz7B0
20/08/31 13:37:09 tSOV4fJk.net
お題: 覆面算パズルをランダムに自動生成せよ。
単語は大文字のアルファベットのみとする。
各単語は自然数を表している。
単語の各文字は数字を表している。
各単語の先頭はゼロではない。
同じ文字は同じ数字が入る。文字が違えば、数字も違う。
各単語は、3文字以上6文字以下とする。
答えは一つでなければいけない。
今回は、簡単な足し算のみとする。
例)
SEND+MORE=MONEY.
BASE+BALL=GAMES.
単語リスト:URLリンク(gist.github.com)
429:蟻人間 ◆T6xkBnTXz7B0
20/08/31 13:41:36 tSOV4fJk.net
お題:覆面算パズルを解くプログラム。
例)
SEND+MORE=MONEY
→9567+1085=10652.
BASE+BALL=GAMES
→7483+7455=14938.
430:デフォルトの名無しさん
20/08/31 14:49:18.65 7ZWcUsrI.net
>>401
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]
431:蟻人間
20/08/31 16:10:16.99 lWn/zYPT.net
>>421, >>420の順に解いてね。
ヒント要る?
432:蟻人間
20/08/31 16:12:08.02 lWn/zYPT.net
ヒント: 各文字を変数とした連立方程式。
433:蟻人間
20/08/31 16:24:48.19 lWn/zYPT.net
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
434:デフォルトの名無しさん
20/08/31 18:26:24.52 qQr3mFGF.net
間違えてなければO(10!)のはずだから充分多いのでは
435:デフォルトの名無しさん
20/08/31 18:26:56.47 qQr3mFGF.net
ごめん10!はめちゃくちゃ小さかった
436:デフォルトの名無しさん
20/08/31 18:43:24.02 hr5jjNmH.net
この手の問題は総当りしたほうが速いことすらある
437:デフォルトの名無しさん
20/08/31 19:18:49 J48xi6fS.net
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
438:デフォルトの名無しさん
20/08/31 19:23:55 fdwPQ6pV.net
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
URLリンク(sunasunax.hatenablog.com)
439:デフォルトの名無しさん
20/08/31 21:02:28 Sr2UUXBk.net
デキる人ほどフリーランス化する?★働き方改革
URLリンク(www.youtube.com)
年収890万円以下は社会のお荷物★騙される労働者
URLリンク(www.youtube.com)
騙されたくなかったら勉強しろ★他人のルールは損をする
URLリンク(www.youtube.com)
底辺の99%は一生底辺★10年後が見えない同僚たち
URLリンク(www.youtube.com)
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
URLリンク(www.youtube.com)
サラリーマン思考では儲からない理由
URLリンク(www.youtube.com)
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
URLリンク(www.youtube.com)
「で、年収は?」と聞くバカとは合わない社長業
URLリンク(www.youtube.com)
440:253
20/08/31 21:47:00.41 Mm8nXRhv.net
>>401 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
441:253
20/08/31 21:54:06.64 pmRcaHIk.net
>>401 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
442:デフォルトの名無しさん
20/08/31 23:33:38 0jcGZySh.net
>>401
Kotlin
URLリンク(paiza.io)
443:デフォルトの名無しさん
20/09/01 00:01:02 1mY8ta+4.net
>>401
C
URLリンク(paiza.io)
444:デフォルトの名無しさん
20/09/01 00:18:24 vTrOzHSW.net
>>401
python
lambda x: [int(i) for i in "".join(f"{y}"*y for y in range(1,x+1))]
445:デフォルトの名無しさん
20/09/01 14:16:37.60 3qKfeSqF.net
全く知らない構文の言語でカンでいじっても構文エラーも止められずに
動かない機械ガチャガチャしてるだけ感すごいよな
446:蟻人間
20/09/01 18:47:08.83 4meeAMMW.net
お題: テキストファイル「input.txt」の中の" dot "を"."に置換し、さらに" at "を"@"に置換したときに、RFCに従ったメールアドレスになる部分文字列を抽出し、そのメールアドレスのリストを改行区切りで出力せよ。
447:デフォルトの名無しさん
20/09/01 18:47:54.44 Y09tsFBY.net
>>401 Ruby
def f(n)
(1..n*(n+1)/2).map{|x| ((x*2)**0.5+0.5).to_i}
end
448:デフォルトの名無しさん
20/09/01 18:48:39.88 PZXbhIm5.net
>>438
テスト用のinput.txtちょーだい!
449:蟻人間
20/09/01 18:54:57.84 4meeAMMW.net
>>440
「これはテキトーなテキストデータである。
例えば
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
まあ、いろいろあるっしょ。」
450:デフォルトの名無しさん
20/09/01 18:57:45.00 PZXbhIm5.net
>>441
あざーす!
451:デフォルトの名無しさん
20/09/01 19:10:04.73 y/wdSyKD.net
>>438
Mail::RFC822::Address: regexp-based address validatio
URLリンク(www.ex-parrot.com)
452:蟻人間
20/09/01 20:18:24.49 4meeAMMW.net
ヒント: 文字列置換と正規表現
453:デフォルトの名無しさん
20/09/01 22:43:25 PZXbhIm5.net
>>438
Java
URLリンク(paiza.io)
454:デフォルトの名無しさん
20/09/01 22:55:31.34 PZXbhIm5.net
>>401
Java
URLリンク(paiza.io)
455:253
20/09/02 00:54:35.54 GpxOT2yi.net
>>401 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]
456:デフォルトの名無しさん
20/09/02 23:08:34.85 KTyhBksd.net
>>402
Java
URLリンク(paiza.io)
457:デフォルトの名無しさん
20/09/02 23:31:10.43 KTyhBksd.net
>>403
Java
URLリンク(paiza.io)
458:デフォルトの名無しさん
20/09/03 16:10:13.26 dE9fk8zR.net
>>403 Ruby
def f(s,d)
eval("['"+s.gsub(d,"','")+"']")
end
p f("1 2 3 4"," ")
実行結果
["1", "2", "3", "4"]
459:蟻人間
20/09/03 19:41:51.27 0EoV326K.net
お題: バイナリファイルを読み込んで各バイトの各ビットについて、上位ビットから順に、ゼロをシフトJISの半角カナの「タ」に、いち(1)を同じくの「ヒ」に変換する変換器。
460:蟻人間 ◆T6xkBnTXz7B0
20/09/03 19:46:20 0EoV326K.net
>>451
追記。逆変換器も作って動作することを確認せよ。
461:デフォルトの名無しさん
20/09/03 21:11:58.06 97aiR77+.net
>>451 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
462:デフォルトの名無しさん
20/09/03 23:01:51.02 ZdR77D/Z.net
>>450
f("'", ?,)
# =>SyntaxError: (eval):1: unterminated string meets end of file
[''']
^
(eval):1: syntax error, unexpected end-of-input, expecting ']'
463:253
20/09/04 00:01:38 7q8p4uRD.net
>>451 Perl5
print map{qw(ヒ タ)[$_]} map{split '', sprintf '%08b', ord} split'','Hello word';
実行結果
~ $ perl 18_443_タヒ.pl
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒ
464:デフォルトの名無しさん
20/09/04 00:03:39 0wfgbo8M.net
>>452
Java
URLリンク(paiza.io)
465:253
20/09/04 00:04:27 gbrpP/bR.net
>>455
>>452 逆変換機もか…忘れてた
まいいや
466:デフォルトの名無しさん
20/09/04 14:52:11.79 Wl7qFIBb.net
>>451
Elixir。CP932 が無いので、途中までしか出来ません!
# 8桁・2進数・0埋め
_ = 'abc'
|> Enum.map( fn char -> :io.format( "~8.2.0B", [ char ] ) end )
# 01100001_01100010_01100011
467:デフォルトの名無しさん
20/09/04 23:27:10.30 1jfeDIRi.net
>>451
POSIX sh
変換 (URLリンク(paiza.io))
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
逆変換 (URLリンク(paiza.io))
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
468:253
20/09/04 23:39:14.02 tinAGSqp.net
>>452 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
469:デフォルトの名無しさん
20/09/05 15:41:23.97 dAk5cbFF.net
お題
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
URLリンク(seiai.ed.jp)
470:デフォルトの名無しさん
20/09/05 15:42:06.74 gCThzAly.net
お題:
左から右へ、1から10までの番号が付いたマスが順番に隙間なく並んでいます。
今日、訪問者N人があなたに会いにやってきます。各訪問者i(1≦i≦N)は時刻TiにマスPiを訪れます。
ここで、あなたが時刻TiにマスPiに居たのならば「訪問者iは満足した」とします。
最大で何人の訪問者を満足させられるか求めてください。
制約:
最初、時刻は0とする。
あなたは最初、マス1にいる。
あなたは隣り合うマスへの移動手段しか持たない。
1マス移動した場合にも、移動せずに現在マスに留まった場合にも時間1を消費する。
Ti == Tj で Pi == Pj ならば i == j
1≦N ≦10^5
1≦Ti≦10^5
1≦Pi≦10
入力:
N
T1 P1
T2 P2
...
TN PN
出力:
(最大で何人を満足させられるか)
例1:
入力:
5
5 4
2 3
3 2
3 4
4 4
出力:
4
471:デフォルトの名無しさん
20/09/05 15:55:10.03 gCThzAly.net
前回のお題はC++の方からしか回答を頂けなかったので、他の言語の方も考えていただけると嬉しいです
472:デフォルトの名無しさん
20/09/05 17:01:13.99 4vfoT7Xn.net
Tが10^5のそれぞれのマスにいたときの点数を求める(客がいた場合1、いなかったら0)
Tが10^5-1のときのマスの点数を求める(そこに客がいたなら1、いなかったら0
更にそこから次の時間に移動可能なマスの最大の点数のものを加える)
Tが1までくり返す
これで良さそうな気がするけど書くのがめんどくさい
473:デフォルトの名無しさん
20/09/05 17:35:24.39 s0GYNWbk.net
>>461
「この文字列の文字数を求める」んじゃないの?
バイト数だったらUTF-8だろうがSJISだろうが関係なく,
バイトの個数を数えればいいだけになってしまうが……。
474:デフォルトの名無しさん
20/09/05 18:43:21.60 EHHCviTW.net
文字コードまわりの難しさにぶつかったことないから何が何やら
475:
476:デフォルトの名無しさん
20/09/05 19:37:20.09 PsWvtVS4.net
>>461 Ruby
文字数とバイト数を適当に出力
require "cgi"
require "cgi"
str = CGI.unescapeHTML( "あaθ💀xΩ死🄫" )
sbs = str.bytes
i = n = 0
while i < sbs.size
case sbs[i] >> 4
when 0..7; i += 1
when 8..11; warn "Error"
when 12,13; i += 2
when 14; i += 3
when 15
case sbs[i] & 0xF
when 0..7; i += 4
when 8..11; i += 5
when 12,13; i += 6
else warn "Error"
end
end
n += 1
end
puts "#{n} chars\n#{str.size} chars"
puts "#{str.force_encoding( Encoding::BINARY ).size} bytes\n#{sbs.size} bytes"
puts str.bytes.map{|x| '%02X' % x }.join(' ')
#=>
8 chars
8 chars
20 bytes
20 bytes
E3 81 82 61 CE B8 F0 9F 92 80 78 CE A9 E6 AD BB F0 9F 84 AB
477:デフォルトの名無しさん
20/09/05 19:47:45.16 EHHCviTW.net
普通に処理系がchar配列にしたときサイズを入れてくれるからそれでわかっちゃうw
478:453
20/09/05 21:41:42 dAk5cbFF.net
書いてある条件だけで、求めて下さい!
他の方法では、簡単すぎるので
479:デフォルトの名無しさん
20/09/05 21:46:41 qef5ttAc.net
それだったら宿題スレで頼みなよ
480:デフォルトの名無しさん
20/09/05 22:24:40.63 s0GYNWbk.net
>>469
もう一度訊くけど,
ほんとに「バイト数」を求めたいの?
だったら
$ echo ' あaθ💀xΩ死🄫 ' | wc -c
これで一瞬だけど。
文字数なら,UTF-8を扱える言語で数えるか,
POSIX shでやるなら……面倒だな……。
URLリンク(gist.github.com)
こういうの使えばいいかな。
なお,wc -mはPOSIXでは必ずしも
UTF-8文字列を扱えるとは既定されていないので今回の目的には適さない。
481:デフォルトの名無しさん
20/09/05 22:25:44.48 s0GYNWbk.net
>>462
これ結構難しい。
まず普通に算法を考える段階で行き詰まってるw
頭悪いな〜
482:デフォルトの名無しさん
20/09/05 22:49:41.81 BjVkDMA6.net
>>462 C
URLリンク(ideone.com)
483:253
20/09/06 00:11:00 Lo+HJN6n.net
>>388 Perl5
($H, $W) = split' ',<DATA>; @a = map{[split/\s*/]} <DATA>;
for $h (0..$H-1) { for $w (0..$W-1) {
$c = $a[$h][$w];
$S = "$h,$w" if $c eq 'S'; $G = "$h,$w" if $c eq 'G';
if ($c ne '#') {
$e{($h-1).",$w $h,$w"}++ if $h and $a[$h-1][$w] =~ /[.SG]/;
$e{"$h,".($w-1)." $h,$w"}++ if $w and $a[$h][$w-1] =~ /[.SG]/;
}}}
use feature qw{current_sub say}; no warnings 'experimental';
sub {
my $p = @_[-1];
for my $q (map{s/ *$p *//; $_} grep{/$p/} keys %e) {
if ($q eq $G) { $h{"@{[@_, $q]}"}++ }
else { __SUB__->(@_, $q) unless grep{/$q/} @_ }
}
}->($S);
say scalar keys %h;
__DATA__
5 5
S....
##.#.
...#.
...#.
....G
実行結果
~ $ perl 18_380_maze_paths.pl
12