[過去ログ] プログラミングのお題スレ Part13 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
653(11): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/13(水)23:29 ID:KwyST1w4(1)調 AAS
お題: ピリオド区切りの二つのバージョン番号を比較し、大小関係を判定した結果を-1, 0, 1のいずれとして返せ。
0.1.2 > 0.0: 1
1.2.3 < 1.3: -1
0.0.0 == 0.0: 0
654: 2019/03/14(木)00:08 ID:TPG8S2ma(1/2)調 AAS
>>653
手抜きHaskell
main = mapM_ pc $ [("0.1.2", "0.0"), ("1.2.3", "1.3"), ("0.0.0", "0.0")]
where pc = print.uncurry mycompare
mycompare "0.0.0" "0.0" = 0
mycompare "0.0" "0.0.0" = 0
mycompare xs ys |xs `compare` ys == EQ = 0
|xs `compare` ys == GT = 1
|xs `compare` ys == LT = -1
655: 2019/03/14(木)01:08 ID:vRIsxo2e(1/2)調 AAS
>>601 Perl5
$s = '>>>>>vvvvv<<<<^^^^';
($i, $y) = (0, 0);
for (split'',$s) {
$i++ if />/;
$i-- if /</;
$j++ if /v/;
$j-- if /\^/;
push @t, [$i, $j, $_];
}
use List::Util qw{min max};
($i, $j) = (min(map{$$_[0]} @t), min(map{$$_[1]} @t));
$$_[0] -= $i, $$_[1] -= $j for @t;
($i, $j) = (max(map{$$_[0]} @t), max(map{$$_[1]} @t));
push @m, [('*')x($i + 1)] for 0..$j;
$m[$$_[1]][$$_[0]] = $$_[2] for @t;
use feature say;
say @$_ for @m;
実行結果
~ $ perl 13_601.pl
>>>>>
^***v
^***v
^***v
^***v
<<<<v
656: 2019/03/14(木)01:16 ID:vRIsxo2e(2/2)調 AAS
>>638 Perl5
$r = qr/[^][=]/;
while (<DATA>) {
chomp;
$s = $1 if /\[($r+)\]/;
print "$s:$1:$2\n" if /($r+)=($r+)/;
}
__DATA__
[sec1]
key1=val1
[sec2]
key2=val2
実行結果
~ $ perl 13_638.pl
sec1:key1:val1
sec2:key2:val2
657(1): 2019/03/14(木)06:43 ID:3EvgP48J(1/2)調 AAS
>>653
0.0.1 > 0.0 でいいのか?
658: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)07:26 ID:1+g2CCuw(1/7)調 AAS
>>657
ない桁はゼロと見なす。
659(1): 2019/03/14(木)10:42 ID:YiVNNcx0(1/5)調 AAS
>>653 javascript
const vComp = (a, b) => {
const [semA, semB] = [a, b].map(v => {
const {major, minor = 0, patch = 0} = /(?<major>\d+)(\.(?<minor>\d+)(\.(?<patch>\d+))?)?/.exec(v).groups;
return {major, minor, patch};
});
const majorComp = semA.major - semB.major;
if (majorComp) return Math.sign(majorComp);
const minorComp = semA.minor - semB.minor;
if (minorComp) return Math.sign(minorComp);
const patchComp = semA.patch - semB.patch;
return Math.sign(patchComp);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
結果:
1
-1
0
(おまけ)ソート:
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
結果:
["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
660(2): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)10:59 ID:PwP2txgq(1)調 AAS
>>653
大小関係の定義をまじめに考えましょう。
>>659
JavaScriptならsplit使えるはず。桁数の制限は要らない。
661: 2019/03/14(木)11:23 ID:YiVNNcx0(2/5)調 AAS
ごめん勝手にsemverかと思い込んでた
662: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)11:35 ID:1+g2CCuw(2/7)調 AAS
LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。
一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。
まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。
663: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)11:47 ID:1+g2CCuw(3/7)調 AAS
一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。
664: 2019/03/14(木)13:52 ID:uKED8jms(1)調 AAS
>>653
Perl
https://paiza.io/projects/puAYVRuDktPCBh_Xdd2vbQ
665: 2019/03/14(木)15:56 ID:TPG8S2ma(2/2)調 AAS
>>547
Haskell
内包表記の方が何をやってるか分かり易いと気付いて書き換えた。
import Data.Char
main = (mapM_ print.filename) ["aB.txt","Ab.txt","xx","cd","cD","CD","ab.txt"]
filename [] = []
filename (xs:xss)| length a > 1 = a:filename b
where
a = func (==)
b = func (/=)
func f = [xs' | xs' <- (xs:xss), map toLower xs `f` map toLower xs']
filename (_:xss) = filename xss
666(4): 2019/03/14(木)18:00 ID:38t26SL0(1/2)調 AAS
お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ
667(3): 2019/03/14(木)18:07 ID:YPV07ntD(1/3)調 AAS
>>653 # Python
def cmp(v0,v1):
if v0==v1: return 0
else: return 1 if (v0 > v1) else -1
print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.3','1.3')
)
# 1 1 0 -1
668: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)18:11 ID:1+g2CCuw(4/7)調 AAS
>>667
バージョン番号の各整数の数字は2個以上になることがある。'10.0'と'9.1'を比較せよ。
669: 2019/03/14(木)18:14 ID:YPV07ntD(2/3)調 AAS
>>667
print( cmp('1.1.0', '1.1') )
# 1
670(2): 2019/03/14(木)18:32 ID:YPV07ntD(3/3)調 AAS
>>667 訂正 Python
def cmp(v0,v1):
v0 = list( map(int , v0.split('.') ) )
v1 = list( map(int , v1.split('.') ) )
if v0==v1: return 0
else: return 1 if (v0 > v1) else -1
print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('1.1.0', '1.1') ,
cmp('10.0','9.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.3','1.3') ,
cmp('1.1', '1.1.0') ,
)
# 1 1 1 1 0 -1 -1
671(1): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)18:44 ID:1+g2CCuw(5/7)調 AAS
>>670
残念だが不正解。比較できる桁がなければゼロと見なす、すなわち、2.0.0は2に等しいと見なす決まりがある。
672: 2019/03/14(木)18:50 ID:dvZ8z+Z0(1/2)調 AAS
>>653 octave
https://ideone.com/xh4Cj4
673(6): 2019/03/14(木)18:58 ID:dvZ8z+Z0(2/2)調 AAS
お題:フィボナッチ数列を最初の10個表示せよ
ruby
https://ideone.com/ewyP50
perl6
https://ideone.com/O3tVZj
674: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)18:59 ID:1+g2CCuw(6/7)調 AAS
ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。
検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。
インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。
675(3): 2019/03/14(木)18:59 ID:38t26SL0(2/2)調 AAS
お題: 3つの数の最小値を1回の分岐で決めろ!
676: 2019/03/14(木)19:55 ID:YiVNNcx0(3/5)調 AAS
>>660 javascript
const vComp = (a, b) => {
const verA = a.split`.`;
const verB = b.split`.`;
const shorter = verA.length - verB.length < 0 ? verA : verB;
const cmps = shorter.map((v, i) => Math.sign(verA[i] - verB[i]));
return cmps.reduce((acc, v, i) => Math.sign(acc + v * 2 ** (shorter.length - i)), 0);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
結果:
1
-1
0
(おまけ)ソート:
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
結果:
["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
677: 2019/03/14(木)19:59 ID:YiVNNcx0(4/5)調 AAS
あっ間違えた
家帰ってから直す
678(1): 2019/03/14(木)20:14 ID:vvVzV1YI(1/3)調 AAS
>>671 どこにそんな決まりがあるの?
普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。
総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。
679: 2019/03/14(木)20:14 ID:ko69m/9G(1)調 AAS
見つけた
RPM::VersionSort - RPM version sorting algorithm, in perl XS - metacpan.org
https://metacpan.org/pod/RPM::VersionSort
680: 2019/03/14(木)20:16 ID:vvVzV1YI(2/3)調 AAS
とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。
同じと思う方がおかしい。
681(4): 2019/03/14(木)20:16 ID:0tbf1s3D(1)調 AAS
お題:“木”という漢字を使って以下のようなフラクタル図形を描け
n=0
木
n=1
-木
木木
n=2
---木
--木木
-木--木
木木木木
n=3
-------木
------木木
-----木--木
----木木木木
---木------木
--木木----木木
-木--木--木--木
木木木木木木木木
※ハイフンはスペースだと思ってください
682(1): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)20:26 ID:1+g2CCuw(7/7)調 AAS
>>678
Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。
683(2): 2019/03/14(木)20:45 ID:vvVzV1YI(3/3)調 AAS
>>682 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。
684: 2019/03/14(木)20:52 ID:YiVNNcx0(5/5)調 AAS
>>660 の修正
const vComp = (a, b) => {
let verA = a.split `.`;
let verB = b.split `.`;
const len = Math.max(verA.length, verB.length);
verA = [...verA, ...'0'.repeat(len - verA.length)];
verB = [...verB, ...'0'.repeat(len - verB.length)];
const cmps = verA.map((v, i) => Math.sign(verA[i] - verB[i]));
return Math.sign(cmps.reduce((acc, v, i) => acc + v * 2 ** (len - i)), 0);
};
console.log(vComp('0.1.2', '0.0'));
console.log(vComp('1.2.3', '1.3'));
console.log(vComp('0.0.0', '0.0'));
console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp));
//いいかげん結果省略
685: 2019/03/14(木)22:10 ID:8oAE3RnG(1)調 AAS
>>683
例に0.0.0と0.0が等しいって書いてあるんだが
686: 2019/03/14(木)23:16 ID:3EvgP48J(2/2)調 AAS
>>683
> いちいち誰かのいちゃもんに付き合ってる暇はない。
ならスルーしろよ
お前の頓珍漢な解釈なんて要らんし
687: 2019/03/14(木)23:41 ID:nI5lwjDU(1)調 AAS
>>653 Squeak Smalltalk
| fn |
fn := [:strs | (strs collect: [:str | (str subStrings: '.') polynomialEval: 1/1e4]) reduce: #<=>].
fn value: #('0.1.2' '0.0'). "=> 1 "
fn value: #('1.2.3' '1.3'). "=> -1 "
fn value: #('0.0.0' '0.0'). "=> 0 "
688(1): 2019/03/15(金)00:00 ID:27sSd34q(1/2)調 AAS
>>653 Perl5
use feature current_sub;
@is = (['0.1.2', '0.0'], ['1.2.3', '1.3'], ['0.0.0', '0.0']);
for (@is) {
($l, $r) = @$_;
@l = split'\.', $l;
@r = split'\.', $r;
$z = sub {
my $a = shift @l;
my $b = shift @r;
if (defined $a or defined $b) {
$a //= 0;
$b //= 0;
$a <=> $b or __SUB__->()
} else {
0
}
}->();
%d = (-1 => ' <', 0 => '==', 1 => '> ');
print "$l $d{$z} $r : $z\n";
}
実行結果
~ $ perl 13_653.pl
0.1.2 > 0.0 : 1
1.2.3 < 1.3 : -1
0.0.0 == 0.0 : 0
689: 2019/03/15(金)00:10 ID:27sSd34q(2/2)調 AAS
>>673 Perl5
@f = (0, 1);
push @f, $f[-2] + $f[-1] while @f < 10;
print "@f\n";
実行結果
~ $ perl 13_673_fib10.pl
0 1 1 2 3 5 8 13 21 34
Prel6、いいな…
690: ◆QZaw55cn4c 2019/03/15(金)00:29 ID:LCz/5Veu(1)調 AAS
>>675
>1回の分岐で決めろ!
https://ideone.com/15k0PN
は題意を満たしていますか?
691: 2019/03/15(金)00:45 ID:GUP5tEyB(1)調 AAS
2回分岐してるように見えるが
692: 2019/03/15(金)00:50 ID:ltf0XXfV(1/2)調 AAS
>>666 I
行単位で昇順にソートする場合
exit
"hello world" println
文字単位のソートの場合は難しそう。
693: 2019/03/15(金)00:52 ID:J+j6Qj2a(1)調 AAS
>>675 Java
https://ideone.com/dAlKtw
0回じゃお題満たしてないからだめです?
694: 2019/03/15(金)01:15 ID:T0clmjRI(1)調 AAS
>>673 Squeak Smalltalk
| fibGen |
fibGen := [:a :b | Generator on: [:g | [g yield: a. b := a + b. a := b - a] repeat]].
(fibGen value: 0 value: 1) next: 10.
"=> an OrderedCollection(0 1 1 2 3 5 8 13 21 34) "
695: 2019/03/15(金)01:34 ID:4EriVrie(1)調 AAS
>>681 Squeak Smalltalk
| sp fn |
sp := $-. "sp := Character space."
fn := [:n |
| tree |
tree := [:lines :count |
(lines collectWithIndex: [:line :idx |
line, (String new: idx - 1 * 2 withAll: sp), line
]), lines
].
(((1 to: n) inject: #('木') into: tree) collectWithIndex: [:line :idx |
(String new: idx - 1 withAll: sp), line
]) reversed asStringWithCr
].
fn value: 0. "=>
'木' "
fn value: 1. "=>
'-木
木木' "
fn value: 2. "=>
'---木
--木木
-木--木
木木木木' "
696(1): 2019/03/15(金)01:51 ID:Fj/79Ht+(1)調 AAS
>>673 javascript
const take = n => function*(iterable) {
const iterator = iterable[Symbol.iterator]();
for (let i = 0; i < n; i++) {
const {value, done} = iterator.next();
if (done) break;
yield value;
}
};
const fibo = function*() {
const memo = [0n, 1n];
const fib = n => n in memo ? memo[n] : memo[n] = fib(n - 2) + fib(n - 1);
for(let i = 0; ; i++) yield fib(i);
}();
console.log([...take(10)(fibo)]);
結果:
[0n, 1n, 1n, 2n, 3n, 5n, 8n, 13n, 21n, 34n]
697: 2019/03/15(金)08:40 ID:VdqhZ9XO(1)調 AAS
>>673 Common Lisp
https://ideone.com/fbbBbx
698: 2019/03/15(金)10:29 ID:4uXCwYPV(1/2)調 AAS
>>696
よく考えたら配列で出力する必要もなかった
console.log(...take(10)(fibo));
結果:
0 1 1 2 3 5 8 13 21 34
699: 2019/03/15(金)10:50 ID:ltf0XXfV(2/2)調 AAS
>>666 Lua
a=ture
a=a or print("hello world")
700: 2019/03/15(金)10:54 ID:EVqxIhVf(1)調 AAS
>>673
Haskell
main = (print.take 10) fibs
where fibs = 0:1:zipWith (+) fibs (tail fibs)
701: 2019/03/15(金)11:30 ID:gesJPCRi(1)調 AAS
>>670 訂正 Python
def ver (v):
s = list( map(int , v.split('.') ) )
for _ in s:
if s[-1] == 0 :s.pop(-1)
return s
def cmp(v0,v1):
v0 = ver(v0)
v1 = ver(v1)
if v0==v1: return 0
else: return 1 if (v0 > v1) else -1
print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') ,
cmp('10.0','9.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.0.0','1.2.0') ,
cmp('1.2.3','1.3')
)
# 1 1 1 0 0 -1
702(1): 2019/03/15(金)12:06 ID:phFelL6J(1/2)調 AAS
>>666
「ソートすると」ではなく「ソートしてからその出力を実行またはコンパイルして実行すると」なのでは?
703: 2019/03/15(金)13:00 ID:1zMWa3GW(1/2)調 AAS
>>702
せやで
704: 2019/03/15(金)13:38 ID:CRw2aIHX(1)調 AAS
そーっとしておこう
705: 2019/03/15(金)15:16 ID:1zMWa3GW(2/2)調 AAS
お題: プログラムのコードの文字を縦読みしたコードが実行可能なコード
706(4): 2019/03/15(金)17:37 ID:g4S7Lu9n(1)調 AAS
お題
2桁16進数化したものをつなげた形でIPアドレスが与えられる。(例:192.168.0.1 -> C0A80001)
与えられたIPアドレスからホスト名を逆引きせよ。
例
08080808 -> google-public-dns-a.google.com
9da6e21a -> www.cnn.com
707(2): 2019/03/15(金)18:51 ID:phFelL6J(2/2)調 AAS
>>706
Perl5
https://paiza.io/projects/pgmsypvAWHlJ0UwFis4OFg?language=perl
708: 673 2019/03/15(金)19:08 ID:3zDqFokC(1)調 AAS
>>673 java
https://ideone.com/vNVR4y
>>673 c
https://ideone.com/P6eqTd
709: 2019/03/15(金)19:13 ID:4uXCwYPV(2/2)調 AAS
>>706 node
const reverse = hexIP => require('dns').reverse(hexIP
.split(/^(..)(..)(..)(..)$/g)
.map(xx => parseInt(xx, 16) || '')
.join('.').replace(/^\.|\.$/g, ''),
(err, hostnames) => {
console.log(hostnames);
});
console.log(reverse('08080808')); //=> [ 'google-public-dns-a.google.com' ]
console.log(reverse('9da6e21a')); //=> [ 'www.cnn.com' ]
710: 2019/03/16(土)01:04 ID:moiau3OK(1)調 AAS
>>688 もっと簡潔に書けるんだった…
>>653 Perl5
use feature current_sub;
@is = (['0.1.2', '0.0'], ['1.2.3', '1.3'], ['0.0.0', '0.0']);
for (@is) {
($l, $r) = @$_;
@l = split'\.', $l;
@r = split'\.', $r;
$z = sub {
my $a = shift @l;
my $b = shift @r;
(defined $a or defined $b) ? ($a <=> $b or __SUB__->()) : 0
}->();
%d = qw{-1 < 0 == 1 >};
print "$l $d{$z} $r : $z\n";
}
実行結果
~ $ perl 13_653.pl
0.1.2 > 0.0 : 1
1.2.3 < 1.3 : -1
0.0.0 == 0.0 : 0
711: 2019/03/16(土)02:33 ID:ksQagb59(1)調 AAS
>>653
Kotlin
https://paiza.io/projects/Uidg2dU-H0l3liAmw1scwQ
712: 2019/03/16(土)06:51 ID:x9tnPyz1(1)調 AAS
>>666
Haskell
空文字は出力しないと動かないから許して。(動く場合はmain =でパターンマッチして出力文埋め込むだけだけど)
ソートした自身の書き込み先、実行先は自身じゃ無いといけないとは書いてない。
import System.Process
main = putStr "" >> readFile "runmyself.hs" >>= \f -> writeFile "runmyself2.hs" ((replace.unlines.qsort.lines) f) >> callCommand "runghc runmyself2.hs"
replace [] = []
replace (p:u:t:s:t2:r:x:y:z:xs) | (p:u:t:s:t2:r:x:y:z:[]) == "putStr \"\"" = "putStrLn \"Hello World\"" ++ replace xs
replace (a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:xs) |
(a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:[]) == ">> callCommand \"runghc runmyself2.hs\"" = "" ++ replace xs
replace (x:xs) = x:replace xs
qsort [] = []
qsort (x:xs) = qsort [s| s <- xs, s <= x] ++ [x] ++ qsort [l| l <- xs, l > x]
713: 2019/03/16(土)14:50 ID:0dLFyPZP(1/3)調 AAS
>>681 Perl5
use feature say;
$n = 0;
@t = ('木');
say "n=$n\n$t[0]";
for $n (1..2) {
$l = '-' x 2**($n-1);
@u = map{$l . $_ . $l} @t;
@w = map{$t[$_].$t[$_]} 0..$#t;
@t = (@u, @w);
say "n=$n";
say for @t;
}
実行例
~ $ perl 13_681.pl
n=0
木
n=1
-木-
木木
n=2
---木---
--木木--
-木--木-
木木木木
注) 正直者には、-はスペースに見えます。
714: 2019/03/16(土)16:51 ID:EVMD7h0V(1/3)調 AAS
お題: プログラム言語をなにも知らない人にもプログラムの意味が理解できるコメント無しのhello worldを出力するコプログラム
715: 2019/03/16(土)17:11 ID:0dLFyPZP(2/3)調 AAS
わかりません><
716(1): 2019/03/16(土)17:16 ID:EVMD7h0V(2/3)調 AAS
お題: 文字列に丁度いい具合にグリッチを入れて超かっこいい文字列を作るプログラム
717(1): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/16(土)17:18 ID:PQISp+Pa(1)調 AAS
グリッチは広辞苑には載っていません。説明して下さい。
718: 2019/03/16(土)17:21 ID:EVMD7h0V(3/3)調 AAS
>>717
いやです
719: 2019/03/16(土)17:36 ID:0dLFyPZP(3/3)調 AAS
>>716 perl5
http://perl-users.jp/articles/advent-calendar/2011/acme/6
720: 2019/03/16(土)20:05 ID:INaBYg0f(1)調 AAS
グリッチってアレでしょ?
あの、整いました!ってやつ。
最近みないな。
https://glitch.com
721: 707 2019/03/17(日)01:26 ID:5dC2feuc(1/3)調 AAS
>>706
Kotlin
https://paiza.io/projects/PHrLKrBMqZYA6AC9bUWDcg
何故か 9da6e21a の方はホスト名になってくれず IP アドレスの文字列になる。
722: 707 2019/03/17(日)02:33 ID:5dC2feuc(2/3)調 AAS
>>706
C
https://paiza.io/projects/ZW4sJq_ea_wQQxe_vOlGjQ
gethostbyname() や gethostbyaddr() ではなく getnameinfo() 使ってみました。
723(5): 2019/03/17(日)06:18 ID:k04EM+xl(1/4)調 AAS
2桁までの足し算の筆算を表示せよ。
例:
29
+15
----
14
3
----
44
29
+ 5
----
14
2
----
34
724: 2019/03/17(日)06:20 ID:5dC2feuc(3/3)調 AAS
>>681
Kotlin
https://paiza.io/projects/wzAUkDgm-BUe9ENI4NFDYw
725(1): 2019/03/17(日)07:23 ID:1ggb6IGK(1)調 AAS
お題
実数a,b (0<a<b)が与えられたとき、平面座標(a,b),(0,0),(a,-b)の3点を通る円の半径を求める。
726: 2019/03/17(日)07:27 ID:vfP8HMqf(1)調 AAS
余弦定理と正弦定理1回ずつ使うだけだな
727(1): 2019/03/17(日)07:31 ID:OwOB9RAr(1)調 AAS
数学で解けてもコードに落とせない人っているよね
728: 2019/03/17(日)08:41 ID:k04EM+xl(2/4)調 AAS
>>727
居るけど、そういう人って機械自体が苦手な人。
機械と数学に強くてコードに落とせない人には会ったことがない。
機械には強いけど数学苦手だからコードに落とせないって人は(自分含め)沢山いるが。
729: 2019/03/17(日)12:19 ID:gm8A83sV(1)調 AAS
自転車修理屋さんが機械に強いけどコードなんて、かけなさそう
730(1): 2019/03/17(日)12:38 ID:TUY5K+QC(1/2)調 AAS
>>723 Perl5
for (<DATA>) {
($l, $o, $r) = split;
@l = $l =~ /(\d?)(\d)/;
@r = $r =~ /(\d?)(\d)/;
$a1 = $l[0] + $r[0];
$a0 = $l[1] + $r[1];
@a1 = $a1 =~ /(\d?)(\d)/;
@a0 = $a0 =~ /(\d?)(\d)/;
$a = 10*$a1 + $a0;
$" = '';
print <<"EOF";
@l
$o@r
---
@a1
@a0
---
$a
EOF
}
__DATA__
29 + 15
29 + 5
731(1): 2019/03/17(日)12:40 ID:TUY5K+QC(2/2)調 AAS
>>730 の実行結果
~ $ perl 13_723.pl
29
+15
---
3
14
---
44
29
+5
---
2
14
---
34
せっかくのスペース調整が詰まっちゃって残念なのでアンカーでポップアップして見てね
>>731
732: 2019/03/17(日)12:41 ID:PfKDQB+U(1)調 AAS
>>725 C++
https://ideone.com/Mvx9Mp
733: 2019/03/17(日)13:19 ID:k04EM+xl(3/4)調 AAS
>>723
掛け算に対応したり、1桁どうしの計算用フォーマット作ったりしてたら規模がでかくなった(・ω・`)
1
* 2
-----
2
10
* 0
-----
0
Haskell
https://ideone.com/SCzGKq
734: 2019/03/17(日)13:39 ID:yIqzgq0g(1)調 AAS
>>681 Common Lisp
https://ideone.com/Mutq4v
735(1): 2019/03/17(日)18:42 ID:7j/Zhhp5(1)調 AAS
>>723 ネタ回答: WolframAlpha API / node
// index.js
const {get} = require('http');
const appid = '<<YOUR WolframAlpha APP ID>>';
process.stdin.on('data', data => {
get(`http://api.wolframalpha.com/v2/query?appid=${appid}&input=${encodeURIComponent(data.toString().trim())}&podstate=Result__Step-by-step+solution&format=image&output=json`, res => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => {body += chunk;});
res.on('end', () => {
get(JSON.parse(body).queryresult.pods.filter(({title}) => title === 'Results')[0].subpods.filter(({title}) => title === 'Possible intermediate steps')[0].img.src, res => {
res.on('data', data => {process.stdout.write(data)});
});
});
});
});
$ echo 29+15 | node . > ./test1.gif
https://i.imgur.com/QxolfNz.gif
$ echo 29+5 | node . > ./test2.gif
https://i.imgur.com/D0r3sSg.gif
$ echo 29*15 | node . > ./test3.gif
https://i.imgur.com/imvQO5g.gif
試しに一桁×一桁やってみたらなんだか微妙な計算過程に…
$ echo 5*5 | node . > ./test.gif
https://i.imgur.com/8z3kZPf.gif
あと割り算はAPIからでは計算過程のURL取れなかった
736: 2019/03/17(日)19:54 ID:k04EM+xl(4/4)調 AAS
>>735
こうやって足し算の筆算とは言え、人間の思考過程をプログラムで再現してみると小学生から結構複雑な処理してるんだなと思う。
もっと人間の処理に近づけるなら文字列として認識して、1桁目を数字に変換して〜みたいになるんだろうけど。
737(1): 2019/03/17(日)22:48 ID:t+AGMGYK(1)調 AAS
>>494
(CSVはコンマ区切りの値だよ)
738(1): [age] 2019/03/17(日)23:32 ID:wEirTeMQ(1/2)調 AAS
>>737
カンマを逆から読むとマンコですよ
739: [age] 2019/03/17(日)23:33 ID:wEirTeMQ(2/2)調 AAS
致命的なミスを犯しました
740: 2019/03/17(日)23:35 ID:QL30OvU4(1)調 AAS
許さないからな
741: 2019/03/18(月)00:38 ID:9+FFV4Nx(1)調 AAS
>>494 >>496 Perl5
use feature say;
@data = <DATA>;
chomp @data;
@tags = split' ', shift @data;
%idx = map{$_ => $n++} @tags;
@sum = 0 x $n;
for (@data) {
@fs = split' ';
for (0..$n-1) {
$v = $fs[$_];
if ($v =~ /^(\d+\.\d*|\d*\.\d+|\d+)$/) {
$sum[$_] += $v;
} else {
warn "変なデータが紛れ込んでいます_ノ乙(、ン、)_`$v'\n";
}
}
}
for (@tags) {
say "$_ の合計 = ", $sum[$idx{$_}];
}
__DATA__
カラム1 カラム2 カラム3 カラム4
1,0 2.0 3.0 4.0
2.1 3.1 4.1 5.1
~ $ perl 13_494.pl
変なデータが紛れ込んでいます_ノ乙(、ン、)_`1,0'
カラム1 の合計 = 2.1
カラム2 の合計 = 5.1
カラム3 の合計 = 7.1
カラム4 の合計 = 9.1
742: 2019/03/18(月)01:13 ID:4b49AUHf(1)調 AAS
>>738
マンコ・カパックは、インカ神話によるクスコ王国の初代国王である。
743: 2019/03/21(木)03:20 ID:ZuEvTwkR(1/2)調 AAS
>>723
Kotlin
https://paiza.io/projects/IQdiv40t3eXnM8CEXzF2Og
744: 2019/03/21(木)05:20 ID:ZuEvTwkR(2/2)調 AAS
>>675
Kotlin
https://paiza.io/projects/SlCrKgxVJRghtvESdUMR_A
リストの中の最小値をループして探し出しように作っただけなんだけど、こんなんで良いのか?
(MutableListなのでsort()しちゃうという手抜きワザもあったがそれだと表面上分岐が一つもない状態になるので止めた)。
745: 2019/03/21(木)11:30 ID:4Lv8Ku6J(1/2)調 AAS
>>494 Squeak Smalltalk。コンマを分割と見なしそれぞれについての和を出力させてみた
| fn |
fn := [:columnName |
FileStream oldFileNamed: 'data.txt' do: [:file |
| index sum |
index := (file nextLine subStrings: ' ') indexOf: columnName.
sum := 0.
[file atEnd] whileFalse: [
| next |
next := ((file nextLine subStrings: ' ') at: index) subStrings: ','.
sum := sum + (next size = 1 ifTrue: [next anyOne] ifFalse: [next])].
sum
]
].
fn value: 'カラム3'. "=> 7.1 "
fn value: 'カラム1'. "=> #(3.1 2.1) "
746(7): 2019/03/21(木)13:37 ID:p+hkSRzH(1)調 AAS
お題
長方形の盤で左上から上下左右に一マスずつ移動して全てのマスを
辿る。
移動の順番を表した数字を向きと終点を表す文字(↑↓←→★、
上下左右終、UDLRG、^V<>Gなど)に変換する。
入力
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11
出力
↓→→↓
→↑↓←
↓←→↓
★↑←←
747(1): 2019/03/21(木)14:37 ID:Krn8F3T2(1)調 AAS
>>746 Perl5
@a = map{[split]} <DATA>;
for $y (0..$#a) {
$h{$a[$y][$_]} = [$y,$_,''] for 0..$#a;
}
@s = keys %h;
%r = qw{-1,0 ↑ 1,0 ↓ 0,-1 ← 0,1 →};
for $i (1..@s) {
if ($i == @s) {
$d = '★'
} else {
$y = $h{$i+1}->[0] - $h{$i}->[0];
$x = $h{$i+1}->[1] - $h{$i}->[1];
$d = $r{"$y,$x"}
}
$h{$i}->[2] = $d;
}
($y, $x, $d) = @$_, $a[$y][$x] = $d for values %h;
use feature say;
say "@$_" for @a;
__DATA__
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11
実行結果
~ $ perl 13_746.pl
↓ → → ↓
→ ↑ ↓ ←
↓ ← → ↓
★ ↑ ← ←
748: 2019/03/21(木)22:33 ID:4Lv8Ku6J(2/2)調 AAS
>>723 Squeak Smalltalk
| fn |
fn := [:int1 :int2 |
| strings width digits interms ans max line |
strings := {int1. int2} collect: #asString.
width := (strings detectMax: #size) size.
digits := strings collect: [:str |
(str forceTo: width paddingStartWith: $0) reversed asArray collect: #asString].
interms := (digits reduce: #+) collectWithIndex: [:interm :idx |
interm, (String new: idx-1 withAll: Character space)].
ans := interms polynomialEval: '10'.
strings atLast: 1 put: '+ ', strings last.
max := ((strings, {ans}) collect: #size) max.
line := String new: max withAll: $-.
(strings, {line}, interms, {line. ans} collect: [:str |
(str forceTo: max paddingStartWith: Character space) withoutTrailingBlanks
]) asStringWithCr
].
fn value: 987 value: 65. "=>
' 987
+ 65
----
12
14
9
----
1052' "
749(1): 2019/03/22(金)05:04 ID:NMDgNTgg(1)調 AAS
>>746
Kotlin
https://paiza.io/projects/kKx0DA0gpsZ6He2ZxKSF_A
750: 2019/03/22(金)12:12 ID:bmKj2SZK(1)調 AAS
>>746 Squeak Smalltalk
| fn |
fn := [:str |
| map range sign goal position next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
sign := (0 asPoint fourNeighbors with: #(→ ↓ ← ↑) collect: #->) as: Dictionary.
goal := #★.
position := 1@1. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
(map at: position y) at: position x put: (sign at: found - position ifAbsent: goal).
position := found. next := next + 1.
].
(map collect: #join) asStringWithCr
].
fn value: '1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11'
"=>
'↓→→↓
→↑↓←
↓←→↓
★↑←←' "
751: 2019/03/22(金)20:50 ID:KB/r9SyN(1)調 AAS
>>746 octave
https://ideone.com/BacNm6
752: 2019/03/22(金)21:14 ID:97922Y7I(1)調 AAS
まだ見にくいなあ。線を繋いで矢印を入れることはできないかな。
上下前次1-新書関写板覧索設栞歴
あと 250 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.036s