プログラミングのお題スレ Part13
■ このスレッドは過去ログ倉庫に格納されています
>>176 回転なしなら縦の長さの因数と横の長さの因数それぞれの組み合わせの四角を列挙すればええんよな? 回転ありだとどうすればええんじゃろ >>176 必要なパーツの種類と個数を出せば良いんだろう。 回転させて使おうがどうしようが自由。 >>178 パターン全てって書いてあるから単に 2^ドット数 だと思ってたんだが、人間が見た時に何らかの意味がありそうなパターンって事なの? しかし何に意味がありそうと感じるかは主観の問題だからここでのお題としては適切ではないよね。 >>156 R cat(a) Error in cat(a) : object 'a' not found Execution halted パーツの対称性を見るくらいしかなさそうだけどなぁ 90度回転で不変ならパーツ自体が正方形の場合しか充填し得ないし180度回転で不変なら長方形しかない 問題は対称性なしの場合で, 回転で得られる4通りの図形の組み合わせで少なくとも適当な長方形が作れる必要がある。 出題者です、同じ1種類のパーツのみで敷き詰めるのを意図してた 回転なしは因数でおk、有りは一応解法は浮かんだが証明詰めきれなかったので好きに定めて良いって書いた >>192 2x3 の時は、1種類のパーツのみで埋めるとすると 111 111 の時は 111 x2個 1,1,1 1,1,1 の時は 1,1(2段) x3個 11,1 1,11 の時は 110,100(2段) 2個とするのか 11 が 2個と 1 が2個 は2種類のパーツだからダメ? >>195 90度回転を認めると、11が、3個で良いね。 回転なしなら、111 2個と 1が6個 1 1 2段のパーツが3個 の3種類が解? 上でもう出てんだろ 回転なしなら辺の約数の組み合わせで全部だっつーの abcd badc abab cdcd aaba babb abbb aaab 同じパターンで埋めるのって色々できそうだけどこういうの全部いいの? >>199 それ何種類も使ってるじゃん。 最低何れかの縦横が連続していないとダメだろ。 パズソーのピースじゃないの? 先ずは2x3で1種類のパーツのみで探せという問題の回答を決めてほしい。 いや全部一種類だよ マスがくっついてないだけで 連続してるとは書かれてなかったし お題を正しく理解できてない模様 >>176 をもう1度確認 1つ目の#は6個、2つ目の###は2個、 3つ目の# 4つ目の### #は3個、 ###は1個で2行3列が全て埋まります >>210 例えば、 最初の基本バーツは何? どうしてこれが1種類なのかな? abcd badc -----| >>202 全く理解できない。 >>176 はどうして一つ目が6個なのかな? 1個しかないじゃん? 一つ目って何? 二つ目って何? https://i.imgur.com/GzvMfWg.jpg 自分が今見てるのは、iPhone BB2C 回答の良し悪しだけじゃない、良問悪問ってあるよね… >>204 1つ目の # は6個で2行3列が全て埋まります ### ### 2つ目の ### は2個で2行3列が全て埋まります ### ### 3つ目の # # は3個で2行3列が全て埋まります ### ### 4つ目の ### ### は1個で2行3列が全て埋まります ### ### >>203 回転を許す立場なら @_ _@ って言うパーツ一種類だけからできてんじゃん 頭大丈夫か? >>207 b と d が同じに見えるそっちこそ頭大丈夫か? abcd badc これのどこが、 --@ @― なんだよ。 90度回転ありなら # # # # # と # と # と # で敷きつめられる(=全て埋まる)という意味だろうけど >>179 に抵触するので、これは無しでしょ >>208 回転を許すっつってんだろ氏ねよ糞無能が @_ _@ を90度回転させたら _@ @_ だろうが 市ね糞野郎 >>209 ようやくわかった。 a_ _a _b b_ などと並んでるものは、全て同じパーツとみなすという意味か。 >>176 のお題をよく見ると、2 x 3 の正解の回答が書かれてる。 斜めは許していないからダメだろ。 また、回転も許していない。 回転を許すなら ■ ■ ■ というパーツも入るがそれは除外されてるから、回転も無しだ。 >>199 のような飛び飛びのパターンまで含めると5x5くらいのサイズなら解けそうでも 10x10くらいの大きさになるとほぼ解けなくなるか? ... d0<-a a->b b->c c->d c'<-d b'<-c' a<-b' d->a2 d<-a2 a2->b2 .... に対して 任意の英数字から初めて右向きの矢印をnこ進んだ英数字を一瞬で割り出す簡単な計算方法を教えろ 左向きの矢印のときも答えろ ここで英数字には好きな整数の値を対応させろ 新問題 ... g0<-a a->b b->c c->d c'<-d b'<-c' a<-b' d->e e->f f->g f'<-g e'<-f' g->a1 g<-a1 a1->b1 .... に対して 任意の英数字から初めて右向きの矢印をnこ進んだ英数字を一瞬で割り出す簡単な計算方法を教えろ 左向きの矢印のときも教えろ ここで英数字には好きな整数の値を対応させろ 自己解決しました この問題には答えなくていいです >>217 これからは英語で書くので許して下さい しかしこの問題は回転を考えないと、曲がったパーツは不可能だね。 かなり単純化される。 なんかスレが新しくなってから湧いてきたPythonのクソみたいなコード連投してる日本語がめちゃくちゃのやつうざい 2行3列で回転無しなら以下の4つが答え # ### # # ### ### 回転ありなら更に以下の2つも ## # # ## >>226 > ## > # > > # > ## この二つは90度回転した同じものやが 煽りではなく本当に発達障害またはそれに準ずる知的ボーダーを疑うレベルで頭悪いな >>228 煽りじゃん。 プログラムを出してくれた方が良い。 >>230 Perl5 use feature qw{current_sub say}; sub bblsort { for (0..@_) { sub { if (@_ >= 2) { __SUB__->(@_[1..$#_]); ($_[1], $_[0]) = ($_[0], $_[1]) if $_[0] > $_[1] } }->(@_[$_..$#_]); } } use List::Util shuffle; @a = shuffle 1..20; say "1) @a"; bblsort @a; say "2) @a"; 実行結果 ~ $ perl 13_230_bblsort.pl 1) 13 6 18 7 15 1 11 8 20 16 14 4 9 10 12 17 2 19 5 3 2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 お題:数値Xを4つの方法で整数に丸めよ (1) 0に向かう (2) 0から遠ざかる (3) 正の無限大に向かう (4) 負の無限大に向かう X = 0.5 => 0 1 1 0 X = -1.1 => -1 -2 -1 -2 X = 3 => 3 3 3 3 ふたたび、円の内部の整数点を求めるやつ。個数ごとその最小半径を求める。 41個、47個とかが難し目だった気が。 >>232 組み込み使っていいんだよね? (面倒になるけど、使わなくても書けるけどサ…) Perl5 use POSIX qw(floor ceil); for (0.5, -1.1, 3) { @a = ("$_ => ", sprintf('%d', $_), #int($_), ($_ > 0 ? ceil($_) : ceil($_-1)), ceil($_), floor($_) ); print "@a\n"; } 実行結果 ~ $ perl 13_232_round.pl 0.5 => 0 1 1 0 -1.1 => -1 -2 -1 -2 3 => 3 3 3 3 >>230 Ruby def bs(ary) ary.tap do |a| (a.size**2).times do (a.size - 1).times do |i| a[i + 1], a[i] = a[i, 2] if a[i] > a[i + 1] end end end end p bs([3, 1, 4, 15, 92]) # => [1, 3, 4, 15, 92] >>232 sgn = -> n {n <=> 0} r4 = -> n {n.floor} r3 = -> n {-r4[-n]} r2 = -> n {sgn[n] * r3[n.abs]} r1 = -> n {sgn[n] * r4[n.abs]} [0.5, -1.1, 3].each{|i| puts 'x = %p => %p %p %p %p' % [i, r1[i], r2[i], r3[i], r4[i]]} # => x = 0.5 => 0 1 1 0 x = -1.1 => -1 -2 -1 -2 x = 3 => 3 3 3 3 >>236 これだと 入力が0のとき >(2) 0から遠ざかる が-1になっちゃう。 ($_ > 0 ? ceil($_) : ceil($_-1)), ↓を ($_ >= 0 ? ceil($_) : ceil($_-1)), とすべきでしょうね。スマソ >>262 J f =: (**<.@|),(**>.@|),<.,>. f 0.5 0 1 1 0 f _1.1 _1 _2 _1 _2 f 3 3 3 3 3 >>240 間違えました 262ではなく>>232 でした >>232 をやろうとおもって、IEEE754 の float/double を直接触る方法を探しているのですが、なにかいい方法はないでしょうか… >>233 これ 「Nに対し平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」 例) x^2 + y^2 = 1の整数点は4つだが、最小半径ではない。 (x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。 >>248 網羅的は、きりがなく一つの予想をたてた。 一つ半径を求めたら、次のような操作で半径を縮めたものと、真の最小半径が一致する予想。 半径rの整数点がNだとして。 rを整数比で縮小して中心をずらす。 たとえば上の例だと、r=1で、r → 2/4 r で、 (2x -1)^2 + (2y -1)^2 = 2r 両辺4倍して中心ずらした式 整数比かけるので有理数半径ならすべて作り出せるから当たり前か 無駄なく高速に半径縮められる手法が大事か あと半径は間違いで、半径でなく右辺、半径^2 だった >>252 Perl5 (効率の良いアルゴリズムではないけれど、まずは…) use List::Util shuffle; @a = shuffle 1..20; print "shuffled) @a\n"; sub flip { ($m, $n) = @_; @a[0..$m] = reverse @a[0..$m]; @a[0..$n] = reverse @a[0..$n]; } for $i (reverse 1..$#a) { $k = undef; for (0..$i) { $k = $_ if (!defined($k) or $a[$k] < $a[$_]) } flip($k, $i) if $k < $i; } print "sorted ) @a\n"; 実行例 ~ $ perl 13_252_clumsy_pancake_sort.pl shuffled) 18 6 2 13 16 1 12 15 10 4 17 20 9 7 19 14 5 11 3 8 sorted ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; Common Lisp (defun flip (seq n) (concatenate (type-of seq) (nreverse (subseq seq 0 (1+ n))) (subseq seq (1+ n)))) (defun pancake-sort (seq predicate) (loop for s = seq then (if j (flip (flip (flip (flip s (1- j)) (1- i)) i) j) s) for i from 1 to (1- (length seq)) for j = (position (elt s i) s :end i :test predicate) finally (return s))) お題:1から8までのカードを混ぜ、2枚そこから引いた時1枚目*10+2枚目が素数になる確率を求める。 ただし、 1. 小数第3位で四捨五入した後に回答すること。 2. 数学的な証明は禁止。 3. 各カードは9-その数字の数だけ存在する。 (例:1ならば8枚存在する) 4. 各カードが出る確率はまだ引かれていないカードの枚数に比例する。 >>255 Perl5 $R = 0.0; @s = map{($_) x (9-$_)} 1..8; #say "@s"; $t = @s; #say $t; for (qw{11 13 17 23 31 37 41 43 47 53 61 67 71 73 83}) { @o = split''; my %h; $h{$_}++ for @s; my $r = $h{$o[0]}-- / $t; $r *= $h{$o[1]}-- / ($t - 1); $R += $r; } printf "%3.2f\n", $R; 実行結果 ~ $ perl 13_255.pl 0.31 お題: URLで場所を指定された、インターネット上のテキストファイルをダウンロードするプログラム。 >>258 Perl5 require LWP::UserAgent; $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)'); use HTTP::Cookies; $ua->cookie_jar(HTTP::Cookies->new(file => 'lwp-cookies.txt', autosave => 1)); $url = 'http://ftp.iij.ad.jp/pub/linux/centos/7.6.1810/isos/x86_64/0_README.txt' ; $file = './0_README.txt'; $res = $ua->mirror($url, $file); print $res->status_line, "\n"; 実行例 ~ $ perl 13_258.pl 200 OK (※こういうのは、別に今急に考えたわけじゃなく、日常的に作って使っているのですぐ投稿できました) >>260 wget.exe か curl 使えば? >>260 download.js var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp.Open("GET", "http://ftp.iij.ad.jp/pub/linux/centos/7.6.1810/isos/x86_64/0_README.txt" ;, false); xmlhttp.Send(); var stream = new ActiveXObject("Adodb.Stream"); stream.Type = 1; stream.Open(); stream.Write(xmlhttp.responseBody); stream.SaveToFile("0_README.txt", 2); pythonista stash 反則? $ wget http://ftp.iij.ad.jp/pub/linux/centos/7.6.1810/isos/x86_64/0_README.txt $ ls -la *.txt 0_README.txt (2.4K) 2019-02-20 02:21:45 >>255 ;; Common Lisp (let ((prime (list 2))) (defun primep (n) (loop for i from (1+ (car prime)) upto n unless (find-if (lambda (j) (zerop (mod i j))) prime :from-end t) do (push i prime)) (find n prime))) (defun nearest (i j) (/ (floor (+ (* i (expt 10 j)) 0.5)) (expt 10 j))) (loop with cards = (loop for i from 1 to 8 nconc (make-list (- 9 i) :initial-element i)) and n = 0 and p = 0 for one in cards do (loop for two in (remove one cards :count 1) do (incf n) if (primep (+ (* 10 one) two)) do (incf p)) finally (format t "~,3F~%" (nearest (* (/ p n)) 3))) わーい、これでダウンロード制限された端末でDLできるぞ。やったー! >>265 できるかなあ?どういう制限しているかにもよるぞ。 PowerShell にも、curl, wget ある get-alias (gal) curl -> Invoke-WebRequest wget -> Invoke-WebRequest と言うことは、Ruby からも、そのコマンドを呼べる なんと、コマンドプロンプトで、 where curl と入力すると、 C:\Windows\System32\curl.exe PowerShell の、curl, wget は、Invoke-WebRequest のエイリアスだけど、 curl.exe は、本物のcurl ! >>258 >>265 なんだ下心があったのか。 pythonista stash は以下のコマンドが使える。 help(StaSh) v0.7.1 alias, cat, cd, clear, cowsay, cp, crypt, curl, cut, dropbox_setup, du, easy_config, echo, edit, exit, fg, find, ftpserver, gci, gh, git, grep, head, httpserver, jobs, kill, latte, ls, mail, man, mc, md5sum, mkdir, monkeylord, more, mount, mv, openin, pbcopy, pbpaste, ping, Usage, pip, printenv, printhex, ptinstaller, pwd, py-tree, python, python3, quicklook, rm, rmdir, scp, selfupdate, sha1sum, sha256sum, sort, source, sqlite, ssh, ssh-keygen, stashconf, tail, tar, telnet, totd, touch, umount, uniq, unzip, version, wc, webviewer, wget, whatis, which, wol, xargs, zip ftpserver や、httpserverは簡易的なサーバーになる。 ssh やscp 、tar zip などは使い道多そう。 webviewer てpython の下でブラウザが立ち上がってるみたいなんだがどんな使い道があるんだろう? なお、標準python用のシェルは、xonsh と言うのがあるらしい。 xonsh では、標準的なshellコマンドと並行してpython スクリプトも実行できるから強力。 stash ではそれはできない。 WSH はわからないけど、Ruby では、 require 'nokogiri' html = `curl http://www.example.com/ ` # curl は書き込めないので、全角に変換した doc = Nokogiri::HTML( html ) elements = doc.css( "h1" ) puts elements.first.content #=> Example Domain >>269 なんかね。UNIX系OSで昔からよく使われてたコマンドを移植したようで、tarとか他にも色々あったと思った。 >>263 今度は反則なしで。python import requests as r url = 'http://ftp.iij.ad.jp/pub/linux/centos/7.6.1810/isos/x86_64/0_README.txt' g= r.get( url ) print('読んだサイズは',len(g.text) ) # 読んだサイズは 2495 >>276 ありがとう。 そんな言語も出てきてたんだ。 でも普及は難しいのかも。 お題:リスト等を", "で結合して表示せよ。ただし最後は" and "で結合する。 https://ideone.com/pVuO7T >>279 JavaScript const arr = ['apple', 'banana', 'orange', 'mango']; const last = ' and ' + arr.pop(); console.log(arr.join`, ` + last); //=> apple, banana, orange and mango >>279 python l = [ 1,2,3,4,5] print( *l[0:-1] ,'and' , l[-1]) # 1 2 3 4 and 5 >>279 Haskell main = putStrLn.concat.concat $ [map addCanma (init lst),["and,"],[last lst]] addCanma s = s ++ "," lst = ["apple","banana","orange","mango"] output: apple,banana,orange,and,mango 題意は list = ["red","green","black","white"] print(", ".join(list[:-1]),"and",list[-1]) # red, green, black and white だろ そこそこ優秀なのに肝心なところでいい加減だから試験に落ちるタイプだな >>283 あ、そうか。 不恰好だけどこれで一応対応。 (putStrLn.concat.concat) [init $ map addCanma $ init lst,[last $ init lst],[" and "],[last lst]] スマートな解答も考えてみるよ。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる