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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/02/03(日) 11:21:53.20ID:72eosYJ+
プログラミングのお題スレです。

【出題と回答例】
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/

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

※前スレ
https://mevius.2ch.net/test/read.cgi/tech/1538096947/
2019/03/14(木) 11:23:19.67ID:YiVNNcx0
ごめん勝手にsemverかと思い込んでた
2019/03/14(木) 11:35:04.68ID:1+g2CCuw
LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。
一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。
まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。
2019/03/14(木) 11:47:43.06ID:1+g2CCuw
一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。
664デフォルトの名無しさん
垢版 |
2019/03/14(木) 13:52:35.97ID:uKED8jms
>>653
Perl
https://paiza.io/projects/puAYVRuDktPCBh_Xdd2vbQ
665デフォルトの名無しさん
垢版 |
2019/03/14(木) 15:56:35.04ID:TPG8S2ma
>>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
2019/03/14(木) 18:00:35.68ID:38t26SL0
お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ
2019/03/14(木) 18:07:12.84ID:YPV07ntD
>>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
2019/03/14(木) 18:11:49.83ID:1+g2CCuw
>>667
バージョン番号の各整数の数字は2個以上になることがある。'10.0'と'9.1'を比較せよ。
2019/03/14(木) 18:14:06.49ID:YPV07ntD
>>667
print( cmp('1.1.0', '1.1') )

# 1
2019/03/14(木) 18:32:38.72ID:YPV07ntD
>>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
2019/03/14(木) 18:44:00.25ID:1+g2CCuw
>>670
残念だが不正解。比較できる桁がなければゼロと見なす、すなわち、2.0.0は2に等しいと見なす決まりがある。
2019/03/14(木) 18:50:17.55ID:dvZ8z+Z0
>>653 octave
https://ideone.com/xh4Cj4
2019/03/14(木) 18:58:38.18ID:dvZ8z+Z0
お題:フィボナッチ数列を最初の10個表示せよ

ruby
https://ideone.com/ewyP50

perl6
https://ideone.com/O3tVZj
2019/03/14(木) 18:59:00.09ID:1+g2CCuw
ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。
検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。
インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。
2019/03/14(木) 18:59:16.90ID:38t26SL0
お題: 3つの数の最小値を1回の分岐で決めろ!
2019/03/14(木) 19:55:29.27ID:YiVNNcx0
>>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"]
2019/03/14(木) 19:59:51.70ID:YiVNNcx0
あっ間違えた
家帰ってから直す
2019/03/14(木) 20:14:25.92ID:vvVzV1YI
>>671 どこにそんな決まりがあるの?

普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。
総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。
2019/03/14(木) 20:14:59.41ID:ko69m/9G
見つけた

RPM::VersionSort - RPM version sorting algorithm, in perl XS - metacpan.org
https://metacpan.org/pod/RPM::VersionSort
2019/03/14(木) 20:16:24.45ID:vvVzV1YI
とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。
同じと思う方がおかしい。
2019/03/14(木) 20:16:49.16ID:0tbf1s3D
お題:“木”という漢字を使って以下のようなフラクタル図形を描け

n=0


n=1
-木
木木

n=2
---木
--木木
-木--木
木木木木

n=3
-------木
------木木
-----木--木
----木木木木
---木------木
--木木----木木
-木--木--木--木
木木木木木木木木

※ハイフンはスペースだと思ってください
2019/03/14(木) 20:26:23.57ID:1+g2CCuw
>>678
Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。
2019/03/14(木) 20:45:22.76ID:vvVzV1YI
>>682 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。
2019/03/14(木) 20:52:19.11ID:YiVNNcx0
>>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));
//いいかげん結果省略
2019/03/14(木) 22:10:39.99ID:8oAE3RnG
>>683
例に0.0.0と0.0が等しいって書いてあるんだが
2019/03/14(木) 23:16:14.88ID:3EvgP48J
>>683
> いちいち誰かのいちゃもんに付き合ってる暇はない。
ならスルーしろよ
お前の頓珍漢な解釈なんて要らんし
2019/03/14(木) 23:41:35.78ID:nI5lwjDU
>>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 "
2019/03/15(金) 00:00:24.31ID:27sSd34q
>>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
2019/03/15(金) 00:10:49.43ID:27sSd34q
>>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、いいな…
2019/03/15(金) 00:29:52.08ID:LCz/5Veu
>>675
>1回の分岐で決めろ!
https://ideone.com/15k0PN
は題意を満たしていますか?
2019/03/15(金) 00:45:04.99ID:GUP5tEyB
2回分岐してるように見えるが
692デフォルトの名無しさん
垢版 |
2019/03/15(金) 00:50:01.20ID:ltf0XXfV
>>666 I
行単位で昇順にソートする場合

exit
"hello world" println

文字単位のソートの場合は難しそう。
2019/03/15(金) 00:52:36.60ID:J+j6Qj2a
>>675 Java
https://ideone.com/dAlKtw
0回じゃお題満たしてないからだめです?
2019/03/15(金) 01:15:34.20ID:T0clmjRI
>>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) "
2019/03/15(金) 01:34:55.02ID:4EriVrie
>>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. "=>
'---木
--木木
-木--木
木木木木' "
2019/03/15(金) 01:51:53.98ID:Fj/79Ht+
>>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:18.32ID:VdqhZ9XO
>>673 Common Lisp
https://ideone.com/fbbBbx
2019/03/15(金) 10:29:40.47ID:4uXCwYPV
>>696
よく考えたら配列で出力する必要もなかった
console.log(...take(10)(fibo));
結果:
0 1 1 2 3 5 8 13 21 34
699デフォルトの名無しさん
垢版 |
2019/03/15(金) 10:50:31.62ID:ltf0XXfV
>>666 Lua

a=ture
a=a or print("hello world")
700デフォルトの名無しさん
垢版 |
2019/03/15(金) 10:54:07.06ID:EVqxIhVf
>>673

Haskell

main = (print.take 10) fibs
where fibs = 0:1:zipWith (+) fibs (tail fibs)
2019/03/15(金) 11:30:37.72ID:gesJPCRi
>>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デフォルトの名無しさん
垢版 |
2019/03/15(金) 12:06:15.98ID:phFelL6J
>>666
「ソートすると」ではなく「ソートしてからその出力を実行またはコンパイルして実行すると」なのでは?
2019/03/15(金) 13:00:31.13ID:1zMWa3GW
>>702
せやで
2019/03/15(金) 13:38:24.99ID:CRw2aIHX
そーっとしておこう
2019/03/15(金) 15:16:52.97ID:1zMWa3GW
お題: プログラムのコードの文字を縦読みしたコードが実行可能なコード
2019/03/15(金) 17:37:30.24ID:g4S7Lu9n
お題
2桁16進数化したものをつなげた形でIPアドレスが与えられる。(例:192.168.0.1 -> C0A80001)
与えられたIPアドレスからホスト名を逆引きせよ。


08080808 -> google-public-dns-a.google.com
9da6e21a -> www.cnn.com
707デフォルトの名無しさん
垢版 |
2019/03/15(金) 18:51:48.50ID:phFelL6J
>>706
Perl5
https://paiza.io/projects/pgmsypvAWHlJ0UwFis4OFg?language=perl
708673
垢版 |
2019/03/15(金) 19:08:00.81ID:3zDqFokC
>>673 java
https://ideone.com/vNVR4y

>>673 c
https://ideone.com/P6eqTd
2019/03/15(金) 19:13:09.78ID:4uXCwYPV
>>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' ]
2019/03/16(土) 01:04:28.66ID:moiau3OK
>>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:36.77ID:ksQagb59
>>653
Kotlin
https://paiza.io/projects/Uidg2dU-H0l3liAmw1scwQ
712デフォルトの名無しさん
垢版 |
2019/03/16(土) 06:51:03.68ID:x9tnPyz1
>>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]
2019/03/16(土) 14:50:17.74ID:0dLFyPZP
>>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
---木---
--木木--
-木--木-
木木木木

注) 正直者には、-はスペースに見えます。
2019/03/16(土) 16:51:50.43ID:EVMD7h0V
お題: プログラム言語をなにも知らない人にもプログラムの意味が理解できるコメント無しのhello worldを出力するコプログラム
2019/03/16(土) 17:11:38.87ID:0dLFyPZP
わかりません><
2019/03/16(土) 17:16:48.87ID:EVMD7h0V
お題: 文字列に丁度いい具合にグリッチを入れて超かっこいい文字列を作るプログラム
2019/03/16(土) 17:18:04.51ID:PQISp+Pa
グリッチは広辞苑には載っていません。説明して下さい。
2019/03/16(土) 17:21:14.90ID:EVMD7h0V
>>717
いやです
2019/03/16(土) 17:36:13.64ID:0dLFyPZP
>>716 perl5
http://perl-users.jp/articles/advent-calendar/2011/acme/6
2019/03/16(土) 20:05:38.53ID:INaBYg0f
グリッチってアレでしょ?
あの、整いました!ってやつ。
最近みないな。
https://glitch.com
721707
垢版 |
2019/03/17(日) 01:26:35.49ID:5dC2feuc
>>706
Kotlin
https://paiza.io/projects/PHrLKrBMqZYA6AC9bUWDcg

何故か 9da6e21a の方はホスト名になってくれず IP アドレスの文字列になる。
722707
垢版 |
2019/03/17(日) 02:33:00.06ID:5dC2feuc
>>706
C
https://paiza.io/projects/ZW4sJq_ea_wQQxe_vOlGjQ

gethostbyname() や gethostbyaddr() ではなく getnameinfo() 使ってみました。
723デフォルトの名無しさん
垢版 |
2019/03/17(日) 06:18:59.33ID:k04EM+xl
2桁までの足し算の筆算を表示せよ。

例:
29
+15
----
14
3
----
44

29
+ 5
----
14
2
----
34
724デフォルトの名無しさん
垢版 |
2019/03/17(日) 06:20:05.97ID:5dC2feuc
>>681
Kotlin
https://paiza.io/projects/wzAUkDgm-BUe9ENI4NFDYw
725デフォルトの名無しさん
垢版 |
2019/03/17(日) 07:23:54.75ID:1ggb6IGK
お題
実数a,b (0<a<b)が与えられたとき、平面座標(a,b),(0,0),(a,-b)の3点を通る円の半径を求める。
2019/03/17(日) 07:27:24.80ID:vfP8HMqf
余弦定理と正弦定理1回ずつ使うだけだな
2019/03/17(日) 07:31:01.10ID:OwOB9RAr
数学で解けてもコードに落とせない人っているよね
728デフォルトの名無しさん
垢版 |
2019/03/17(日) 08:41:45.83ID:k04EM+xl
>>727
居るけど、そういう人って機械自体が苦手な人。
機械と数学に強くてコードに落とせない人には会ったことがない。

機械には強いけど数学苦手だからコードに落とせないって人は(自分含め)沢山いるが。
2019/03/17(日) 12:19:22.82ID:gm8A83sV
自転車修理屋さんが機械に強いけどコードなんて、かけなさそう
2019/03/17(日) 12:38:59.54ID:TUY5K+QC
>>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
2019/03/17(日) 12:40:50.32ID:TUY5K+QC
>>730 の実行結果

~ $ perl 13_723.pl
29
+15
---
3
14
---
44

29
+5
---
2
14
---
34

せっかくのスペース調整が詰まっちゃって残念なのでアンカーでポップアップして見てね
>>731
2019/03/17(日) 12:41:06.87ID:PfKDQB+U
>>725 C++
https://ideone.com/Mvx9Mp
733デフォルトの名無しさん
垢版 |
2019/03/17(日) 13:19:09.72ID:k04EM+xl
>>723
掛け算に対応したり、1桁どうしの計算用フォーマット作ったりしてたら規模がでかくなった(・ω・`)

1
* 2
-----
2

10
* 0
-----
0

Haskell

https://ideone.com/SCzGKq
734デフォルトの名無しさん
垢版 |
2019/03/17(日) 13:39:28.89ID:yIqzgq0g
>>681 Common Lisp
https://ideone.com/Mutq4v
2019/03/17(日) 18:42:43.38ID:7j/Zhhp5
>>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:31.54ID:k04EM+xl
>>735
こうやって足し算の筆算とは言え、人間の思考過程をプログラムで再現してみると小学生から結構複雑な処理してるんだなと思う。
もっと人間の処理に近づけるなら文字列として認識して、1桁目を数字に変換して〜みたいになるんだろうけど。
2019/03/17(日) 22:48:25.97ID:t+AGMGYK
>>494
(CSVはコンマ区切りの値だよ)
2019/03/17(日) 23:32:46.95ID:wEirTeMQ
>>737
カンマを逆から読むとマンコですよ
2019/03/17(日) 23:33:11.60ID:wEirTeMQ
致命的なミスを犯しました
2019/03/17(日) 23:35:38.92ID:QL30OvU4
許さないからな
2019/03/18(月) 00:38:16.94ID:9+FFV4Nx
>>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:14.07ID:4b49AUHf
>>738
マンコ・カパックは、インカ神話によるクスコ王国の初代国王である。
743デフォルトの名無しさん
垢版 |
2019/03/21(木) 03:20:09.08ID:ZuEvTwkR
>>723
Kotlin
https://paiza.io/projects/IQdiv40t3eXnM8CEXzF2Og
744デフォルトの名無しさん
垢版 |
2019/03/21(木) 05:20:06.50ID:ZuEvTwkR
>>675
Kotlin
https://paiza.io/projects/SlCrKgxVJRghtvESdUMR_A

リストの中の最小値をループして探し出しように作っただけなんだけど、こんなんで良いのか?
(MutableListなのでsort()しちゃうという手抜きワザもあったがそれだと表面上分岐が一つもない状態になるので止めた)。
2019/03/21(木) 11:30:55.91ID:4Lv8Ku6J
>>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デフォルトの名無しさん
垢版 |
2019/03/21(木) 13:37:55.15ID:p+hkSRzH
お題
長方形の盤で左上から上下左右に一マスずつ移動して全てのマスを
辿る。
移動の順番を表した数字を向きと終点を表す文字(↑↓←→★、
上下左右終、UDLRG、^V<>Gなど)に変換する。

入力
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11

出力
↓→→↓
→↑↓←
↓←→↓
★↑←←
2019/03/21(木) 14:37:03.32ID:Krn8F3T2
>>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
↓ → → ↓
→ ↑ ↓ ←
↓ ← → ↓
★ ↑ ← ←
2019/03/21(木) 22:33:42.92ID:4Lv8Ku6J
>>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デフォルトの名無しさん
垢版 |
2019/03/22(金) 05:04:29.93ID:NMDgNTgg
>>746
Kotlin
https://paiza.io/projects/kKx0DA0gpsZ6He2ZxKSF_A
2019/03/22(金) 12:12:43.26ID:bmKj2SZK
>>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'

"=>
'↓→→↓
→↑↓←
↓←→↓
★↑←←' "
2019/03/22(金) 20:50:59.33ID:KB/r9SyN
>>746 octave
https://ideone.com/BacNm6
752デフォルトの名無しさん
垢版 |
2019/03/22(金) 21:14:53.89ID:97922Y7I
まだ見にくいなあ。線を繋いで矢印を入れることはできないかな。
2019/03/22(金) 21:41:47.96ID:nZ/OoXFx
罫線
│┌─┐
└┘┌┘
┌┐└┐
★└─┘

直線部に矢印
│┌→┐
└┘┌┘
┌┐└┐
★└←┘

こんな感じ?
2019/03/22(金) 21:43:03.63ID:nZ/OoXFx
スタート部も矢印に出来るやん…

↓┌→┐
└┘┌┘
┌┐└┐
★└←┘
755747
垢版 |
2019/03/22(金) 23:30:54.68ID:DMg7GUli
code、プリーズ
756デフォルトの名無しさん
垢版 |
2019/03/23(土) 01:24:21.91ID:Bvojjkpo
>>754
Kotlin
https://paiza.io/projects/jjP3AHDkfJ4t_Lfsd3wmlA

>>749 を改造して作った。
757デフォルトの名無しさん
垢版 |
2019/03/23(土) 01:27:24.77ID:Bvojjkpo
罫線や矢印が半角で★が全角で表示されてしまうとずれるな。
ま、しょうがないか。
758デフォルトの名無しさん
垢版 |
2019/03/23(土) 02:35:34.66ID:FcxASXew
>>746 Common Lisp
https://ideone.com/7h7HT4
2019/03/23(土) 05:47:57.62ID:ZlGSstH0
>>754 Squeak Smalltalk

| fn |
fn := [:str |
| map range signs sign goal position from next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
goal := #★. signs := #(┌ ┌ ← → └ └ ┐ ┐ ↑ ↓ ┘ ┘) readStream.
sign := Dictionary new.
0 asPoint fourNeighbors combinations: 2 atATimeDo: [:combi |
sign at: combi copy put: signs next; at: combi reversed put: signs next].
position := 1@1. from := nil. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found delta |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
delta := found - position.
(map at: position y) at: position x put: (sign at: {from ifNil: [delta negated]. delta} ifAbsent: goal).
position := found. from := delta negated. 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' .
"=>
'↓┌→┐
└┘┌┘
┌┐└┐
★└←┘' "
2019/03/23(土) 06:18:42.67ID:ZlGSstH0
>>759 758の入力例を拝借

fn value: '1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9'.

"=>
'→→→→┐
┌→→┐↓
↑┌★↓↓
↑└←┘↓
└←←←┘' "

fn value: '1 4 5 8 9 12
2 3 6 7 10 11'.

"=>
'↓┌┐┌┐★
└┘└┘└┘' "

fn value: '1 4 5 6
2 3 8 7
16 14 9 10
15 13 12 11' .

"=> 繋げられるところまでで終点にする。
'↓┌→┐
└┘┌┘
16★└┐
15└←┘' "
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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