[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/09 01:44 / Filesize : 338 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 13:53:46 ID:jW5p6F/e.net]
プログラミングのお題スレです。

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

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

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

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

※前スレ
プログラミングのお題スレ Part17
https://mevius.5ch.net/test/read.cgi/tech/1584031367/

802 名前:デフォルトの名無しさん mailto:sage [2020/10/28(水) 01:43:43.54 ID:3yQQm3er.net]
教科書ないから高校数学 確率で一番上に出たやつ。
https://studysapuri.jp/contents/high/article/subject/sp/math00003.html

やっぱ高校の教科書に載ってたよなあww

仮に載ってなかったとして大学で使う書籍にもP載ってないって?w

> 俺が大学の頃まではこういう記法は見た記憶が無いんだけど

803 名前:253 mailto:sage [2020/10/28(水) 01:56:33.39 ID:Jno143Es.net]
ゆとり以降だなそりゃ

804 名前:デフォルトの名無しさん mailto:sage [2020/10/28(水) 02:11:35.07 ID:d52OC3St.net]
恥の上塗りするくらいなら黙ってればいいのに

805 名前:253 mailto:sage [2020/10/28(水) 02:16:39.09 ID:FRCNqyyj.net]
じゃあ何か自慢の回答でもしてよ

806 名前:742 mailto:sage [2020/10/28(水) 05:10:48.17 ID:MEeLXnFm.net]
>>770
2/(1/x+1/y)

2*x*y/(x+y)
と変形した場合だと、36%位です(100万回試行してみた)。

807 名前:デフォルトの名無しさん mailto:sage [2020/10/28(水) 06:02:02.77 ID:W3KKdO+Q.net]
>>752 C
https://ideone.com/iPEwg8
2 / (1 / x + 1 / y) のエラー率は 38.5%
2 * x * y / (x + y) のエラー率は 40.4%
と出た

808 名前:742 mailto:sage [2020/10/28(水) 12:23:39.00 ID:jim4KuYP.net]
>>794
h0の計算は、xdやxdをlong doubleにcastする感じで!
>double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));

809 名前:742 mailto:sage [2020/10/28(水) 13:16:35.16 ID:jim4KuYP.net]
間違えました
double h0 = ( xd == 0. || yd == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));

810 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 00:16:48.93 ID:GFOWX4AY.net]
お題:言語機能のみを使い単方向リストを実装しメソッドpush



811 名前:とpopを実装せよ
pushはリスト末尾にノードをプッシュし、popはリスト末尾からノードをポップする
ノードの持つ値は整数とする
[]
[ここ壊れてます]

812 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 00:52:01.80 ID:wtq/xrTf.net]
複数pushできるの?
popも個数指定できるの?一個ずつ?
pushの戻り値はリスト自身?入れた値?成否?

813 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 01:01:50.46 ID:GFOWX4AY.net]
>>797
>>798
pushもpopも値は1つずつ
pushの戻り値はなんでもいい

814 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 10:47:03.25 ID:jsAu6jIB.net]
>>797 js
入出力のサンプルケース書いてないやつ絶対自分はやってないだろ

class SinglyLinkedList {
push(value) {
this.head = { next: this.head, value }
}
pop() {
if (!this.head) return
this.head = this.head.next
}
str() {
let { head } = this, s = ""
while (head) {
s += head.value + ", "
head = head.next
}
return s
}
}

815 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:03:58.95 ID:GFOWX4AY.net]
>>800
なんで>>797,799の仕様でこんな実装になるんだ?
お題ちゃんと読んでる?

816 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:11:08.30 ID:moZIRBYC.net]
>>801
「言語機能のみを使い」は引っかかる表現だったけどそれのことかい?

817 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:16:22.08 ID:95aSRVZj.net]
オレもこの「言語機能のみを使い」がわからなかった
「ライブラリ関数使うな」か「文字列操作関数のみを使い」かどっちかかなと
わからんから様子見

818 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:18:16.67 ID:GFOWX4AY.net]
>>802
>>800
は787の仕様としてただしかったわ
すまんな
こっちのお題の定義があいまいすぎたらしい
言語機能は問題ない

819 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:21:59.18 ID:GFOWX4AY.net]
>>803
ライブラリ使うなって言いたかった
あとお題提出前の実装については>>800に比べるとかなり冗長な実装をしてある
ここに晒す気はないが

820 名前:デフォルトの名無しさん [2020/10/29(木) 12:33:09.26 ID:AOpu1Zek.net]
stdlib.h使わずに作るの?



821 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:36:05.93 ID:jsAu6jIB.net]
>>804
まあええわ
俺もclassは久々に使ったけどできれば使わずに実装したかったわ

822 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 12:50:57.59 ID:GFOWX4AY.net]
>>807
こっちの実装したコードに比べるとそっちのコードはえらくシンプルなんだよな
軽くショックだわ
>>801みたいな口きいてすまんかったな

823 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 13:24:14.72 ID:GFOWX4AY.net]
>>806
リスト以外の実装は自由の想定
stdio.hも使っておk

824 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 13:27:39.52 ID:GFOWX4AY.net]
>>806
C/C++などの言語はmallocなどを使っても良いことにする

825 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 15:09:10.20 ID:dNWGwdex.net]
Haskellみたいな純粋関数だとそもそも標準ライブラリだけだと“状態”を作るのも難しいんだよな
同じ表現は永遠に同じ答えを返すからスタックの“状態”を変化させるというのがそもそもできない
それをなんとかするのに“モナド”というのがあるんだけど状態を処理する“ステートモナド”は標準ライブラリではないんだよな
ほとんど“準標準”だけど

826 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 16:24:06.73 ID:95aSRVZj.net]
State モナドを“準標準”と認めてもらえるなら簡単
Haskell

import Control.Monad.State

pop :: State [a] a
pop = do
a <- get
modify tail
return $ head a

push :: a -> State [a] ()
push x = do
modify ((x :))
return ()

test = do
push 1
push 2
push 3
a <- pop
b <- pop
c <- pop
return ([a,b,c])

main = print $ evalState test []
---
出力
[3,2,1]

827 名前: mailto:sage [2020/10/29(木) 19:01:42.56 ID:7aED6VYA.net]
>>797
双方向リストの方が、後々いろいろ流用できてありがたいんですけど、それでも端方向リストでインプリしないといけないのですか?

828 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 19:02:59.18 ID:c1P6mcgH.net]
持て余すくらいなら「なるべく使わない」とか評価基準を示すだけにしとけばいいのに

829 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 19:32:46.09 ID:EQ9lcE/o.net]
>>803
全く同じこと思ってたわw

830 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 19:34:40.84 ID:EQ9lcE/o.net]
>>807
どうでもいいけどお前のIDもjsだsな



831 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 19:40:10.12 ID:Pf0NRL7D.net]
>>797 Brainfuck

push: <[>],
pop: <[>]<[-]<

832 名前:デフォルトの名無しさん [2020/10/29(木) 20:59:03.61 ID:zgfLAX1f.net]
>>797
push,popってリストじゃなくてスタックの機能じゃ?
リストにさせるなら、先頭に追加してく方が速くて楽なのに。
push xs a = a:xs
pop (x:xs) = (xs,x)
反転させたいなら最後の最後にすべきだよ。

Haskell

― 使用例用main関数
main = do pushlist <- (return.push (Cons 1 (Cons 2 Null))) 3
(poplst, popval) <- (return.pop) pushlist
print pushlist
print popval
print poplst

― ここからお題のコード(整数に限定じゃないとダメならdataのList a/Cons aのaをIntに)
data List a = Null | Cons a (List a) deriving (Show)

push xs a = xs +++ (Cons a Null)

pop xs = (myinit xs, mylast xs)

Null +++ ys = ys
(Cons x xs) +++ ys = Cons x (xs +++ ys)

myinit (Cons x Null) = Null
myinit (Cons x xs) = Cons x (myinit xs)

mylast (Cons x Null) = x
mylast (Cons _ xs) = mylast xs

833 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 21:10:47.05 ID:wtq/xrTf.net]
>>797 JavaScript
class List {
#data = []
push(n) {
this.#data = [n, this.#data]
return this
}
pop() {
const [head, tail] = this.#data
if (tail) this.#data = tail;
return head
}
toArray() { return this.#data.flat(Infinity) }
toString() { return String(this.toArray()) }
toJSON() { return this.toArray() }
}

const list = new List
list
.push(0)
.push(7)
.push(2)
console.log('文字列: ' + list) //=> 文字列: 2,7,0
console.log('JSON: ' + JSON.stringify(list))
//=> JSON: {"test":[2,7,0]}
list.pop() //=> 2
list.pop() //=> 7
list.pop() //=> 0
list.pop() //=> undefined

834 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 21:13:39.21 ID:wtq/xrTf.net]
うわ
console.log('JSON: ' + JSON.stringify({'test': list})) //=> JSON: {"test":[2,7,0]}
だった

835 名前:デフォルトの名無しさん [2020/10/29(木) 23:09:01.60 ID:MaNQDMIt.net]
>>813
お題
双方向リストをC89で実装してください

836 名前:253 mailto:sage [2020/10/29(木) 23:20:15.73 ID:UgpGZWA4.net]
>>817

837 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:24:39.19 ID:3o7XtB23.net]
>>797 ocaml
https://ideone.com/8ceFxk
type 'a _list = Nil | Cons of 'a * 'a _list
exception EmptyListException
let push xs x = Cons(x, xs)
let pop = function Nil -> raise EmptyListException | Cons (x, c) -> (x, c)
let rec each f = function Nil -> () | Cons (x, xs) -> f x; each f xs
let x, xs = pop (push (push (push Nil 1) 2) 3)
let () = print_int x; each print_int xs

838 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:26:08.36 ID:GFOWX4AY.net]
>>813
双方向書きたいってことなら書けば
お題は単方向だけど

839 名前:デフォルトの名無しさん mailto:sage [2020/10/30(金) 00:06:20.24 ID:aDtUVDPI.net]
>>812を改良?
State [Int] だとあらかじめ用意した一個のstackしか使えない
噂に聞いたことあつたST monadで複数のスタック使えるように改造
Haskell

import Control.Monad
import Control.Monad.ST
import Data.STRef

data Stack a = Empty | N { car :: a, cdr :: Stack a } deriving (Show)

push stk val = modifySTRef stk (N val)
pop stk = car <$> readSTRef stk <* modifySTRef stk cdr

main = print $ runST $

840 名前: do
sA <- newSTRef Empty
sB <- newSTRef Empty
push sA 'o' >> push sA 'o' >>push sA 'f'
push sB 'r' >> push sB 'a' >> push sB 'b'
a1<-pop sA
a2<-pop sA
a3<-pop sA
b1<-pop sB
b2<-pop sB
b3<-pop sB
return [a1,a2,a2,b1,b2,b3]
----
出力
"foobar"
[]
[ここ壊れてます]



841 名前:253 mailto:sage [2020/10/30(金) 00:07:47.66 ID:hMjmzAXb.net]
>>797 Perl5

公式マニュアルに書かれている通りsplice関数を使ってpush, popを記述できる。
 splice(@a,@a,0,$x); # push(@a, $x)
 splice(@a,-1);    # pop(@a)
なんだけどspliceを使わず言語のstatementだけでpush, pop関数を記述すると…こんな感じ

use v5.18;
use feature 'signatures';
no warnings "experimental::signatures";
sub Push($a, $x) {
 @$a = (@$a, $x);
}
sub Pop($a) {
 my @a = @$a;
 my $b = $a[-1];
 @$a = @a[0..$#a-1];
 $b;
}
my @s = (1,2,3); # test main
Push(\@s, 4);
say "@s";
my $y = Pop(\@s);
say $y;


実行結果
~ $ perl 18_787_push_pop.pl
1 2 3 4
4
1 2 3

842 名前:253 mailto:sage [2020/10/30(金) 00:09:56.81 ID:hMjmzAXb.net]
>>826
say $y;
の下に書いてあった最後の行
say "@s";
をコピペしそびれた…orz

843 名前:253 mailto:sage [2020/10/30(金) 00:22:38.86 ID:hMjmzAXb.net]
>>826 Pop関数はこっちの方がいいな、無駄なコピーもないし。

sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
 $b;
}

844 名前:253 mailto:sage [2020/10/30(金) 00:32:51.98 ID:hMjmzAXb.net]
>>828 deleteは削除したスカラー値を返すわ。だから以下でいいんだ

sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
}

845 名前:253 mailto:sage [2020/10/30(金) 00:34:30.90 ID:hMjmzAXb.net]
>>829 my $b = @$a[-1]; 不要だった…orz

sub Pop($a) {
 delete @$a[-1];
}

846 名前:デフォルトの名無しさん [2020/10/30(金) 00:50:28.84 ID:9RgBA+ge.net]
>>797
Java
https://paiza.io/projects/JKwjWCxSc6dHv_ItEaqwlQ

847 名前:デフォルトの名無しさん [2020/10/30(金) 02:22:50.19 ID:9RgBA+ge.net]
>>821
Java
https://paiza.io/projects/wtaAasQr_Nu5Zw2D1KoPwg

848 名前:デフォルトの名無しさん mailto:sage [2020/10/30(金) 07:07:30.18 ID:cChJ6BWU.net]
>>822
あ?

849 名前:デフォルトの名無しさん mailto:sage [2020/10/30(金) 23:30:40.86 ID:hYhF3+Ov.net]
Brainfuck読めないわ
覚えようかな

850 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:49:55.42 ID:QnYm1bfS.net]
お題
与えられた文字列を一文字ずつ見ていき"trick"と"treat"の5文字でどちらが先に揃うか判定してください(順序込み)
どちらもヒットしないときは考慮しなくていいです

treakOrTreat("trick or treat")
// => trick
treakOrTreat(". tr ick")
// => trick
treakOrTreat("ttrriecatk")
// => treat
treakOrTreat("tri kc eat")
// => treat
treakOrTreat("my money")
// => none



851 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:51:26.24 ID:QnYm1bfS.net]
>>835 js(self)
function treakOrTreat(text) {
const [tri] = /t.*r.*i.*c.*k/.exec(text) || []
const [tre] = /t.*r.*e.*a.*t/.exec(text) || []
if (!tri && !tre) return 'none'
if (!tri) return 'treat'
if (!tre) return 'trick'
return tri.length < tre.length ? "trick" : "treat"
}

852 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 14:54:50.69 ID:HHhQTZ6R.net]
関数名のミススペリングは修正していいですか

853 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 15:02:04.99 ID:QnYm1bfS.net]
ごっつtypoしてたすまんFIXME

854 名前:デフォルトの名無しさん [2020/10/31(土) 15:07:31.21 ID:DmLmDhBA.net]
>>835 Common Lisp
https://ideone.com/L8wigO

855 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 15:33:31.91 ID:I05R+wBh.net]
相変わらずキモいなあ、いつもの勝手に認定キッズ
ミュートにしてるという情報から相手が雑魚であるというぶっ飛んだ推論をする知性の欠片も持ち合わせない負け組

856 名前:デフォルトの名無しさん [2020/10/31(土) 15:36:09.16 ID:DmLmDhBA.net]
>>835 Common Lisp
https://ideone.com/qHuipq

>>839は無駄な条件判定(二つめの (null a))があったので修正

857 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 15:44:11.18 ID:pGrSKCPz.net]
>>835 JavaScript
function trickOrTreat(str = '') {
const trick = [...'trick']
const treat = [...'treat']
let result = 'none'
for (const c of str) {
if (c === trick[0]) trick.shift()
if (c === treat[0]) treat.shift()
if (!trick.length || !treat.length) {
result = trick.length ? 'treat' : 'trick'
break;
}
}
console.log(result)
}

858 名前:デフォルトの名無しさん [2020/10/31(土) 15:54:22.22 ID:i0S/O8KX.net]
>>797
C
https://paiza.io/projects/7O3xqQfCoYOhAz-48TxxWw

859 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 16:42:52.45 ID:B0ELcd4k.net]
>>835
Haskell

https://ideone.com/2Rb2sz

860 名前:デフォルトの名無しさん [2020/10/31(土) 17:10:35.46 ID:M62mfk9p.net]
>>797
Perl
https://paiza.io/projects/E1ha4EgvaVhalIRuJ_To-g



861 名前:デフォルトの名無しさん [2020/10/31(土) 17:42:14.32 ID:/zmNVLOW.net]
>>797
Kotlin
https://paiza.io/projects/mB7s1uC_4FJk1MFTDpLYsA

862 名前:デフォルトの名無しさん [2020/10/31(土) 21:33:28.24 ID:g64iH70d.net]
>>835
Java
https://paiza.io/projects/jCNOEenrSmdOMXo6Fl2wyQ

863 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 21:58:58.47 ID:t2sIU1o6.net]
>>835 Ruby
def trickOrTreat( str )
trick = str.match( /\A.*?t.*?r.*?i.*?c.*?k/ )
treat = str.match( /\A.*?t.*?r.*?e.*?a.*?t/ )
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick[0].size < treat[0].size)? 'trick' : 'treat'
end

[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}

864 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 22:19:45.63 ID:B0ELcd4k.net]
>>844
改定
やはりHaskellerがこのお題でparsec使わないのはダメという事で

Haskell

import Text.ParserCombinators.Parsec

makeP cs = foldl1 (<>) $ map (\c -> (many $ noneOf [c]) <> (return <$> anyChar) ) cs :: Parser String

first xs ys = case (runParser (makeP xs) () "" ys) of
Left _ -> (1, 0)
Right x -> (0, length x)

trickOrTreat x = case compare (first "trick" x) (first "treat" x) of
LT -> "trick"
GT -> "treat"
otherwise -> "Happy Halloween"

main = do
mapM_ (print.trickOrTreat) ["trick or treat", ". tr ick","ttrriecatk","tri kc eat","my money"]

865 名前:デフォルトの名無しさん [2020/10/31(土) 22:49:38.34 ID:pe+8/Oyn.net]
>>835
C

#include<stdio.h>

char* trickOrTreat(char*s, char*tk, char*tt){
if(!*tk)return "trick";
if(!*tt)return "treat";
if(!*s) return "none";

if(*s == *tk)tk++;
if(*s == *tt)tt++;

return trickOrTreat(s+1, tk, tt);
}

int main(void){
char* str[] = {"trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",};
const int size = sizeof(str)/sizeof(str[0]);

char tk[] = "trick";
char tt[] = "treat";

int i;
for(i=0; i<size; i++){
printf("%s\n", trickOrTreat(str[i], tk, tt));
}

return 0;
}

866 名前:253 mailto:sage [2020/10/31(土) 22:58:55.98 ID:i+h07tFB.net]
>>835 Perl5

for (<DATA>) {
 chomp;
 %h = map{$_ => [split'']} qw{trick treat};
 $k = 'none';
 for $c (split'') {
  for (keys %h) {
   $r = $h{$_};
   shift(@$r) if $c eq $$r[0];
   unless (@$r) { $k = $_; goto L }
  }
 }
L: print "$_ -> $k\n";
}
__DATA__
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money

実行結果
~ $ perl 18_825_trickOrTreat.pl
trick or treat -> trick
. tr ick -> trick
ttrriecatk -> treat
tri kc eat -> treat
my money -> none

867 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 23:10:35.06 ID:8FYB/kmH.net]
>>851
なんでお前ずっとコテハンつけてんの?

868 名前:253 mailto:sage [2020/10/31(土) 23:20:38.29 ID:i+h07tFB.net]
>>852 IPアドレスがたまに変わるのと自分のレスを見分けやすくするため。固定ではなく番号はたまに変えてる
気にしないで

869 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 23:26:17.77 ID:OVAIfmUR.net]
>>797 c
https://ideone.com/9grZQe

870 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 23:27:34.12 ID:wd4K8eMC.net]
>>853
専ブラ使えばいいのに



871 名前:253 mailto:sage [2020/10/31(土) 23:32:26.70 ID:i+h07tFB.net]
>>855
IPアドレスが変わったり日にちがたった自分のレスを簡単に表示し分けられる専ブラで良いのある?
出来ればLinuxで。ちなStyleは好みではない

872 名前:253 mailto:sage [2020/10/31(土) 23:38:27.89 ID:i+h07tFB.net]
>>854
教科書に載っているようなきれいなコード書くね

873 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 23:54:01.35 ID:OVAIfmUR.net]
>>857
サンクスコ

でも、引数の評価順については正直お行儀悪いんで
勉強してるみんなはそのへん各自ぐぐってみてね

874 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 00:59:27.52 ID:KABEK1ar.net]
>>835
Ruby

text = <<'TEXT'
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money
TEXT

# 配列化
Trick = "trick".chars
Treat = "treat".chars

次へ続く

875 名前:849 mailto:sage [2020/11/01(日) 01:00:32.73 ID:KABEK1ar.net]
>>859
の続き

def find_index( str, original )
idx_2 = 0

str.each_char.with_index do |char, idx| # 1文字ずつ処理する
idx_2 += 1 if char == original[ idx_2 ]
return idx if idx_2 == original.length # すべての文字が一致
end
nil
end

results = text.each_line.map do |line|
trick = find_index( line, Trick )
treat = find_index( line, Treat )

if !( trick || treat ) then "none"
elsif !trick then "treat"
elsif !treat then "trick"
elsif trick < treat then "trick"
elsif trick > treat then "treat"
else "same"
end
end

p results
#=> ["trick", "trick", "treat", "treat", "none"]

876 名前:デフォルトの名無しさん [2020/11/01(日) 01:29:12.30 ID:17LNcGyj.net]
>>835
Kotlin
https://paiza.io/projects/pLXGwy1V_3FlM4eqH2w5tg

877 名前:デフォルトの名無しさん [2020/11/01(日) 01:49:31.61 ID:17LNcGyj.net]
>>835
C
https://paiza.io/projects/hjm6unXa-mcUi6cx1mTJ9g

878 名前:838 mailto:sage [2020/11/01(日) 12:58:01.92 ID:g/v4ZA9S.net]
>>835 Ruby
正規表現を捨てて index+inject に
def trickOrTreat( str )
trick = 'trick'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
treat = 'treat'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick < treat)? 'trick' : 'treat'
end

[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}

879 名前:蟻人間 mailto:sage [2020/11/01(日) 14:40:36.23 ID:wOVD56Lv.net]
お題:大阪都構想が実現すると、現在の大阪市は消滅すると予想される。都構想実現前の住所を実現後の住所に変換しなさい。

880 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 16:05:05.76 ID:+nQAPqAx.net]
次行ってみよう



881 名前:蟻人間 mailto:sage [2020/11/01(日) 16:41:27.74 ID:wOVD56Lv.net]
参考:https://www.asahi.com/articles/ASNBS733ZNBMPTIL00Q.html

882 名前:蟻人間 mailto:sage [2020/11/01(日) 16:44:49.88 ID:wOVD56Lv.net]
これも:https://maidonanews.jp/article/13879682

883 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 16:51:14.83 ID:VQGUeFT5.net]
お前らは競技プログラミングとかやってる?

884 名前:253 mailto:sage [2020/11/01(日) 16:54:48.84 ID:I8lyxV1q.net]
>>868
やろうとしたことはあるがまだ未経験
何か受験勉強みたいになっちゃってるコンテストには魅力を感じない
でも世界トップレベルは年間4000万くらい賞金稼ぐとい話をきいてそういうのにはちょっと惹かれる

885 名前:蟻人間 mailto:sage [2020/11/01(日) 17:00:25.77 ID:wOVD56Lv.net]
>>865
あんまりバカにするなよ。住所変換できないと大坂大混乱になるよ。

886 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:18:29.18 ID:EgIfcLXC.net]
バカにしてるのはおまえ
他所の住所変更地の状況知らんのか?50年前の住所でも年賀届くわ
数年〜十数年或いはそれ以上旧住所で配送可能。舐めすぎ

887 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:31:11.77 ID:+nQAPqAx.net]
>>870
ここでそのお題といても大混乱が回避できるわけでもなし
そういう問題じゃなくてそろそろ自分にいい問題作るセンスがない事自覚すべき

888 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:35:33.69 ID:S9fsJ+JS.net]
データ引っ張ってくるだけじゃん
ただの知識問題は悪問

889 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 18:32:31.31 ID:erpRcPg0.net]
やってみたが
競技系はプログラミングのスキル向上には役立たんよ

890 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 18:50:53.93 ID:4+fLUvoM.net]
>>867
このサイト気持ち悪いな



891 名前:蟻人間 mailto:sage [2020/11/01(日) 19:52:59.24 ID:wOVD56Lv.net]
>>875
太陽風を読めよ。

892 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 19:57:24.03 ID:wWMHVvTS.net]
>>876
消えろ

893 名前:蟻人間 mailto:sage [2020/11/01(日) 20:04:08.68 ID:wOVD56Lv.net]
>>877
お前がえろ

894 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 00:22:13.64 ID:bEILeQs7.net]
>>835 octave
https://ideone.com/BkciwT

895 名前:デフォルトの名無しさん [2020/11/02(月) 04:28:03.49 ID:2/AbCXtL.net]
>>835
Perl
https://paiza.io/projects/Ol_sOAbb2ZYW4hIDFLj2wQ

正規表現使ってみました。

896 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 04:45:05.89 ID:BfD57ecO.net]
"trick"と"treat"を受理するオートマトンを作って
入力文字列から1文字ずつ与えて状態遷移(または待機)させていく
末尾まで先に受理されたほうを答えとする
みたいなことだけ考えた

897 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 04:48:28.19 ID:BfD57ecO.net]
けど実装すると無駄にでかくなりそう

898 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 10:04:22.80 ID:/BOVDIIM.net]
オートマトンって言語でなんか表現できる構造ある?

899 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 10:41:03.91 ID:5JhQS2vf.net]
正規表現で表現できる⇔オートマトンで受理できる
でしょ?
今回なら入力xに対し出力がtrickである場合を

[^t]*t[^r]*r[^ie]*i[^ce]*c[^ke]*k.*
|[^t]*t[^r]*r[^ie]*i[^ce]*c[^ke]*e[^ka]*k.*
...
(10パターン)
....

と正規表現だけで表現できてしまう

900 名前:蟻人間 mailto:sage [2020/11/02(月) 12:23:25.05 ID:iXWhExA8.net]
お題:パラボラアンテナが理論上の焦点に電波を集めることを示しなさい。

パラボラアンテナの半径を100とし、原点を中心にx軸上に焦点が来るように配置する。x軸と平行に電波がアンテナに入ってきて、入射角と反射角が等しくなるように電波が反射する。
このとき、どの場所で反射しても、反射した電波を表す直線が理論上の焦点に十分近づくことを示せ。



901 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 12:23:58.15 ID:UfGVYnOo.net]
まじでセンスないな

902 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 12:36:09.22 ID:zo3ZJgwO.net]
パラボラアンテナの半径ってどこのことだよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<338KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef