4
1

paiza×Qiita記事投稿キャンペーンで
「プログラミング問題をやってみて書いたコードを投稿しよう!」
というお題が出ているのを見て
ふと皆でコードゴルフをしてみたくなり
投稿してみる事にしました。

コードゴルフとは問題文に対して
「より短いコード」を目指す遊びです。
正常に動作するならば
35 文字のコードより
34 文字のコードが優れているという事です。

「もっと短くできるよ!」
というのがあればコメント頂けると幸いです。

対戦よろしくお願いします。


条件

項目「じゃんけんの手の出し方 (paizaランク A 相当)」で最短のコードを探す。
使用する言語「paiza で使える任意の言語(なるべく短く済む言語を使用する)」
成功条件「paiza が用意しているチェックに全て通過する(paiza が用意していない入力で正常に動作しない分にはかまいません)(理論上 95% 以上の確率で、全てのチェックを通過するコードである必要があります。)」

タブと改行と空白文字は 1 文字相当でお願いします。
cシャープの Main メソッドや php の "<?php ?> も文字数にカウントして下さい。

問題文の URL
https://paiza.jp/works/mondai/a_rank_skillcheck_sample/janken


問題文

下記の問題をプログラミングしてみよう!

あなたはこれから友人と N 回じゃんけんをします。しかし、あなたは全てを見通す千里眼の持ち主なので、友人がこれから出す N 回のじゃんけんの手が全て分かってしまいました。

ただただ全勝してしまうのは面白くないので、あなたは、N 回のじゃんけんで出した指の本数の合計がちょうど M 本になるようにじゃんけんをすることにしました。このとき、あなたは最高で何回じゃんけんに勝つことができるでしょうか。

ここで、上の文中に出てくる「出した指の本数」というのは、じゃんけんで出した手の何本の指が立っていたか、ということであり、グー、チョキ、パーそれぞれ

  • グー のとき ... 0 本
  • チョキのとき ... 2 本
  • パー のとき ... 5 本

の指を出していたということになります。

例えば、あなたが 4 回のじゃんけんで グー、パー、チョキ、グー と出したとすると、出した指の本数の合計は、

0 + 5 + 2 + 0 = 7

で 7 本となります。


入力例:

4 7
CGPC

出力例:

4

入力例:

5 10
GPCPC

出力例:

3


私の回答(Python3)

私の回答(Python3)
a=int(input().split(" ")[1])
b=input()
o=len(b)
m=0
for i in range(o):
    for j in range(o):
        k=o-i-j
        if 5*i+2*j==a and i+j<=o:
            m=max(m,min(k,b.count("C"))+min(i,b.count("G"))+min(j,b.count("P")))
print(m)

これはあくまでもコードゴルフなので
試行回数が長いコードになってしまっています。

コードを長くすれば処理時間を短く出来ますが
今回は paiza のチェックを通過する事ができるコードで
短いコードを作成する事が目的なので
このコードでいきます。

また正確には
range(o): の部分は
range(o+1): が正しいです。
私の回答はレギュレーションの穴を付いたコードなので
レギュレーションによっては
range(o+1): にして下さい。


私の回答はいかがでしたか?

私は色んな言語を使ってみて
233 文字より短くすることが出来ませんでした。

paiza で使えるならば
どんな言語でも良いため
もっと短くできるという意見があれば
コメント頂けると幸いです。

個人的にコードゴルフの記事は大好物なので
paiza×Qiita記事投稿キャンペーンを機に
コードゴルフのゴルフの記事が増えたら嬉しいです。

皆でこのお題を楽しんでいきましょう。

この記事が皆さんの暇つぶしになりますように。
閲覧ありがとうございました。


追記

コメント欄で、かなり文字数が短いコードを頂けました。
この問題はこんなに文字数を削れるのかと驚愕しました。

是非コメント欄も閲覧頂けると助かります。

4
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1