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

■ このスレッドは過去ログ倉庫に格納されています
2020/07/14(火) 13:53:46.47ID:jW5p6F/e
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

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

※前スレ
プログラミングのお題スレ Part17
https://mevius.5ch.net/test/read.cgi/tech/1584031367/
2020/08/06(木) 22:38:17.00ID:8sSWlLgK
>>216
呼んでねえよハゲ消えろ
2020/08/06(木) 23:02:55.51ID:mzjhTFla
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。

(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
2020/08/07(金) 00:08:41.77ID:TzYKRTqH
よく、ラズパイコンテストでやってる

水槽の中の金魚に、エサをやる装置とか
2020/08/07(金) 11:29:33.41ID:uQ4nbdFf
債務が多い
221デフォルトの名無しさん
垢版 |
2020/08/07(金) 12:51:36.49ID:lb7vo/Jy
お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください

入力: 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)
222デフォルトの名無しさん
垢版 |
2020/08/07(金) 13:43:57.69ID:uQ4nbdFf
>>221 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)
223デフォルトの名無しさん
垢版 |
2020/08/07(金) 13:48:23.69ID:uQ4nbdFf
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 いらなかった
2020/08/07(金) 14:51:48.30ID:5vmbSLbR
>>221 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 )}"
2020/08/07(金) 14:52:06.69ID:5vmbSLbR
>>221 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 )}"
2020/08/07(金) 16:23:53.54ID:uQ4nbdFf
<<=って演算子ほしいな
2020/08/07(金) 19:28:59.75ID:P4+Ga4Bm
>>221 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)
2020/08/08(土) 00:04:29.62ID:b55CcwAR
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い

Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式

そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
2020/08/08(土) 07:24:36.17ID:u/td9dv4
lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど
2020/08/08(土) 07:26:45.92ID:u/td9dv4
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
231デフォルトの名無しさん
垢版 |
2020/08/08(土) 09:18:46.19ID:b55CcwAR
>>221
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
2020/08/08(土) 14:04:33.02ID:JvTsLjL+
>>221
Python3
https://ideone.com/6VvEbi

全然短くならなかったんだけど皆どういう脳みそしてるの
233デフォルトの名無しさん
垢版 |
2020/08/08(土) 14:58:00.03ID:gFRxrH0y
>>221
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;


>>232
オブ脳ならぬラムダ脳なんだろうなぁ
同値でグループ化、代表元でソート、出力、これを関数でやってる

それかワンライナーへの偏執的な愛
2020/08/08(土) 15:53:05.60ID:xsg1wzC9
>>221 Ruby

gets.split.group_by(&:upcase).sort.map{|_,v|$><<"(#{v*' '}) "}
2020/08/08(土) 16:11:32.49ID:yUCBpeXj
>>232
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
https://ideone.com/Tsio0O
236デフォルトの名無しさん
垢版 |
2020/08/08(土) 17:07:51.92ID:HH2BebFt
>>232
Pythonだとどうしても短くはならないな。
https://ideone.com/iFc6eL
groupbyのところは、defaultdictで書く方法もあるけど大差なし。
2020/08/08(土) 21:09:30.55ID:JvTsLjL+
>>233
Rubyの人もワンライナーだな
Rubyってショートコーディングに向いてるのかな?

>>235,232
なるほど
2020/08/08(土) 21:20:24.22ID:bf+w2Xl6
code golfなら基本はperlで、次点がRubyじゃないですかね
2020/08/08(土) 21:56:24.61ID:JvTsLjL+
>>238
そういうものなのね
240231
垢版 |
2020/08/08(土) 22:49:25.00ID:b55CcwAR
関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから

Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる

str = "a b c"

# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )

str
|> String.split
|> IO.inspect

出力は、どちらも
["a", "b", "c"]
241231
垢版 |
2020/08/08(土) 22:54:29.83ID:b55CcwAR
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ

Python の内包表記みたいなのは、可読性が悪い
2020/08/08(土) 23:09:35.53ID:n6UBlQy6
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
243デフォルトの名無しさん
垢版 |
2020/08/08(土) 23:14:07.63ID:ifN2bgU4
>>184
Java
https://paiza.io/projects/__QcFHuBny33chXSMMTA4Q
244デフォルトの名無しさん
垢版 |
2020/08/08(土) 23:32:15.70ID:ifN2bgU4
>>221
Java
https://paiza.io/projects/20JVV_t6hmPUha0B9AuKOA
2020/08/09(日) 00:17:54.90ID:/K790vfJ
javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな
2020/08/09(日) 00:41:46.15ID:uywZ9h5A
>>184
Python3
https://ideone.com/1aordC
2020/08/09(日) 02:47:46.35ID:Mt0Kh35r
>>221
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) + ") ");
}
}
}
248デフォルトの名無しさん
垢版 |
2020/08/09(日) 04:58:28.52ID:bQgrv4ZF
>>221
Kotlin
https://paiza.io/projects/zR3XGW4DaUAMXfqNq1oZ8A
249デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:07:42.42ID:HZ7sqguG
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる

2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください

入力: abcde deabc
出力: true

入力: abcde cdeba
出力: false
250デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:42:31.20ID:/K790vfJ
>>249 js

const isRotateStr = (a, b) => (a + a).indexOf(b) != -1

console.log(isRotateStr("abcde", "deabc"))
// true

console.log(isRotateStr("abcde", "cdeba"))
// false
251デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:56:20.10ID:DzMx1xPb
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
2020/08/09(日) 16:59:23.64ID:Uo9rXbdx
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
253253
垢版 |
2020/08/09(日) 19:01:45.47ID:UiQUiAYf
>>221 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)
254253
垢版 |
2020/08/09(日) 19:17:23.16ID:A1LNtpwx
>>249 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
2020/08/09(日) 20:09:27.60ID:sb6ynJ/q
Jニキも披露してくれよ
2020/08/09(日) 22:00:05.82ID:BOQzPYI8
>>221 octave
https://ideone.com/qHkxnH

>>249 octave
https://ideone.com/oKqnrA
257253
垢版 |
2020/08/09(日) 22:27:07.62ID:iNMqPGBy
>>253 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正

>>249 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
2020/08/09(日) 22:40:05.17ID:/K790vfJ
octave文法好みだけど結構古い言語なんだな
259253
垢版 |
2020/08/09(日) 23:21:31.30ID:dFp53gtH
>>221 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)
260デフォルトの名無しさん
垢版 |
2020/08/09(日) 23:56:04.43ID:DzMx1xPb
Perlだとこの程度でも正規表現使わないといかんのか?
261253
垢版 |
2020/08/10(月) 00:02:07.64ID:5Aj+dIHX
>>259 を少し簡略化

>>221 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()) )))
262253
垢版 |
2020/08/10(月) 00:03:02.27ID:5Aj+dIHX
>>260
substrとかでも書ける
263253
垢版 |
2020/08/10(月) 01:07:06.98ID:mTkq56mc
>>260
>>257は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので

>>249 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も実は正規表現で分離する機能を持つので、起きていることは実は>>257と一緒なんだよね
264253
垢版 |
2020/08/10(月) 01:18:32.03ID:mTkq56mc
>>263 ゴメン、$a[2]$a[0]はbug、訂正

>>249 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};
265253
垢版 |
2020/08/10(月) 01:58:56.02ID:5YDTUTIu
>>264 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;
2020/08/10(月) 02:53:12.35ID:JYoLJZbs
>>249 C
https://mevius.5ch.net/test/read.cgi/tech/1434079972/68
267デフォルトの名無しさん
垢版 |
2020/08/10(月) 05:44:26.44ID:SKFyjjt9
お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください

入力: https://github.com/pablojorge/brainfuck/blob/master/programs/hello.bf
出力: "Hello World!"
2020/08/10(月) 08:49:19.32ID:SwBLGnEH
>>267 Ruby

require 'open-uri'
str = open('https://raw.githubusercontent.com/pablojorge/brainfuck/master/programs/hello.bf').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!
2020/08/10(月) 08:49:26.47ID:OSJh6/O/
>>267 Ruby
https://ideone.com/A0JIsc
270デフォルトの名無しさん
垢版 |
2020/08/10(月) 17:10:10.24ID:Z7zFlWuQ
>>249
Kotlin

簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。

https://paiza.io/projects/TxupVLPTStBv7o1MiTuDEQ
271デフォルトの名無しさん
垢版 |
2020/08/10(月) 17:10:16.38ID:SKFyjjt9
>>267 C++
https://ideone.com/Lpmngq
2020/08/10(月) 18:01:14.12ID:Z7zFlWuQ
>>267
Kotlin

とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。

https://paiza.io/projects/q8vkgGoAei9W2gfLA4xP4Q

こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)

$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
2020/08/10(月) 18:43:36.36ID:TsKVv45J
>>249
Python3
https://ideone.com/DvaLMh
274デフォルトの名無しさん
垢版 |
2020/08/10(月) 21:10:04.86ID:EfqLUS40
>>249 Python3
def f(a, b): return len(a) == len(b) and a in b + b
2020/08/10(月) 22:32:27.25ID:tDeKMBiv
>>249 c
https://ideone.com/BcT5su
276デフォルトの名無しさん
垢版 |
2020/08/10(月) 23:41:40.77ID:SKFyjjt9
>>249 C++
https://ideone.com/p6Y7W4
2020/08/10(月) 23:46:58.70ID:lJp+wmfa
bfってループの入れ子できたっけ?
2020/08/10(月) 23:47:11.22ID:SwBLGnEH
>>277
できる
279272
垢版 |
2020/08/11(火) 01:47:49.41ID:RwCZynCZ
>>267
Kotlin

これはインタープリタ版。

https://paiza.io/projects/J-pCgNSAEcATixwsNPmyGQ
2020/08/11(火) 01:50:50.24ID:RwCZynCZ
>>277
知らんけど >>279 は出来るように作った。
>>272 のやつはコンバータだが Kotlin が出来るので出来る。(というか出来ないように作る方が面倒かな?)
2020/08/11(火) 07:40:40.35ID:RSsrE9PW
>>249
>>273をリファクタリング
https://ideone.com/gR6WqL
282デフォルトの名無しさん
垢版 |
2020/08/11(火) 14:40:27.33ID:psN1NwFJ
こんなに暑いと座禅プログラムで涼みたい。
283デフォルトの名無しさん
垢版 |
2020/08/12(水) 10:55:20.81ID:WiVroiaz
警策を上から振り下ろす動作の機械を作り、そこにマイコンを接続。更に行ったり
来たりするルンバのようなものの上にそれを乗せ、そこにもマイコンを接続。
そのマイコンのコントロールプログラムを作成。
284デフォルトの名無しさん
垢版 |
2020/08/12(水) 11:07:50.98ID:WiVroiaz
既にこんなの作ってる人が居た。

座禅で動いたら棒で叩かれるやつを全自動化する
https://dailyportalz.jp/kiji/zazen-bou-automation
285デフォルトの名無しさん
垢版 |
2020/08/12(水) 16:50:07.72ID:xjprAYba
令和のコペルニクス
https://youtu.be/7DbdPKWhrpY
286デフォルトの名無しさん
垢版 |
2020/08/12(水) 19:58:36.03ID:j5y8ZKQl
お題
Brainfuckのの'+','-','.'の 3つの命令のみで
特定の文字列を表示するBrainfucの
ソースコードを生成するプログラム。
2020/08/12(水) 20:07:13.01ID:kGuev0jH
>>286 Ruby

puts "Hello, World!\n".codepoints.unshift(0).each_cons(2).map{|a, b| '%s.' % ((b > a ? ?+ : ?-) * (b - a).abs)}*''

# =>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.+++++++..+++.[略]
2020/08/12(水) 23:55:21.87ID:WiVroiaz
差分出すっていうと ADPCM の圧縮を思い出すな。
2020/08/13(木) 01:08:54.66ID:TUx4JMNp
>>286
Perl5

プログラムの構造は >>287 と同じだがワンライナー。
行単位で標準入力から入力して標準出力に出力する。入力の最後の改行は削除している。行ごとに直前の文字は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.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
--------.
+++.
------.
--------.
------------------------------------------------------.
$
2020/08/13(木) 01:49:54.11ID:CZu90IWX
>>286 Ruby
"Hello World!\n".codepoints.inject(''){|r,c| r << '+' * c + '.[-]' }
2020/08/13(木) 03:32:09.93ID:CZu90IWX
>>286 Ruby
"Hello World!\n".codepoints.map{|c| '+' * c + '.' }.join( '[-]' )
2020/08/13(木) 05:51:07.18ID:CZu90IWX
>>286
>>290,291 は出題条件の「'+','-','.'の 3つの命令のみ」を忘れてましたご免なさい
2020/08/13(木) 06:48:39.25ID:9ZM4Lmsz
>>286 Ruby

gets.each_char{|c|d=$.-$.=c.ord;$><<(d<0? ?+*-d:?-*d)+?.}
294デフォルトの名無しさん
垢版 |
2020/08/13(木) 12:37:03.85ID:8zEuDtsy
なるほどbrainfuckでは[-]で現在指してるメモリの値を0クリアできるのか
2020/08/14(金) 01:20:11.50ID:CuxcYYZ5
お題:変数a, b, cを32ビット符号付き整数の最大値で初期化、または代入せよ。

octave
https://ideone.com/62dSzC

ada95
https://ideone.com/26IGLZ
2020/08/14(金) 03:17:07.09ID:cCFmHkiX
>>295 Ruby
# 初期化だけ
a = b = c = 2**31 - 1

# 初期化して表示
p *(a,b,c = [2**31-1] * 3) #=> 2147483647\n2147483647\n2147483647\n
2020/08/14(金) 07:01:38.27ID:cCFmHkiX
>>295 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
2020/08/14(金) 08:01:01.07ID:sgFs/qSh
>>295 JavaScript
a=b=c=-1>>>1
299デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:17:19.00ID:jifd8sPx
>>295 C++
int32_t max = 1 << 31;
int32_t min = ~max;
300デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:18:37.41ID:jifd8sPx
あ maxとminが逆だった
301デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:20:39.60ID:jifd8sPx
しかもお題と関係ない スマソ
2020/08/14(金) 08:21:04.21ID:hpI++Bi7
>>295 Python では整数に制限がないからnumpyで、

import numpy as np
a=b=c=np.iinfo(np.int32).max
303デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:38:19.44ID:jifd8sPx
>>295 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;
}
304デフォルトの名無しさん
垢版 |
2020/08/14(金) 09:05:58.49ID:jifd8sPx
const auto [a, b, c] = std::tie(max, max, max);
これだけでよかったorz
305デフォルトの名無しさん
垢版 |
2020/08/14(金) 14:02:54.65ID:9qHjnK+i
お題:任意文字列を含むビットコインアドレスを生成するスクリプト

BitCoinDescriptionAddress

1BitCoinDescriptionAddressadTvGDH
306デフォルトの名無しさん
垢版 |
2020/08/15(土) 16:58:24.79ID:gFfdk9Ij
>>295
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 が代入される。

まあしかしこのような形式でまとめて複数の変数を初期化をするのは変数が多くなればなるほど
見辛くなってどれがどれに代入されるか分かり辛くなるのであまりお勧めする気は起きない。
307295
垢版 |
2020/08/15(土) 17:28:56.25ID:nnj+MvqH
>>295 octave
https://ideone.com/FgfsWd
単に[a, b, c] = deal(intmax)でよかった
2020/08/15(土) 17:57:15.54ID:uqmyrozg
お題
長さNの順列を全列挙してください

入力: N
出力: N!行の1からNの整数を用いた順列


入力: 3
出力:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
2020/08/15(土) 18:04:12.38ID:WnA8LB9O
>>308 Ruby

[*1..gets.to_i].permutation{|a| puts a*' '}
2020/08/15(土) 18:07:06.59ID:nnj+MvqH
>>308 octave
https://ideone.com/dC1LGs
f = @(n) perms(1:n);
f(3)
2020/08/15(土) 19:24:16.43ID:4GsEJ4Sf
お題
HTMLドキュメントをwebブラウアザ上に表示するプログラムを作りなさい。

内容は、html、head、meta、title、body、h1 を含み、
UTF-8で表示するものとする、

Hello World!
2020/08/15(土) 20:07:59.51ID:nR02Shr3
お題: 整数の0,1を真偽値のfalse,trueに変換しなさい
2020/08/15(土) 20:22:45.39ID:BUqVCKAW
>>311 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}" http://127.0.0.1:55080/} ) }

srv.start
2020/08/15(土) 20:34:31.85ID:BUqVCKAW
>>312 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
{} : {}
315314
垢版 |
2020/08/15(土) 20:37:12.09ID:BUqVCKAW
>>314
0 : false
が一行余分に付いてしまった
2020/08/15(土) 20:49:55.10ID:WnA8LB9O
>>312 Ruby

n.nonzero?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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