知恵袋で公開された回答をコピペして提出した学生の単位がどうなるか興味深いところではあります。質問者は、課題を解くための知識はおろか、公開質問したらどうなるのかすら理解が及んでいないにもかかわらず、このような手段に及んでいることでもあり、よほど追い込まれていたのだろうと思います。だからといって、奨励されるようなことでは全くありません。
その課題は、以下のような出力をするC言語プログラムを作る課題でした。
0
111
22222
3333333
444444444
55555555555
666666666
7777777
88888
999
0
0
111
22222
3333333
444444444
55555555555
666666666
7777777
88888
999
0
(課題の説明はこちらのリンク先にあります。http://www.kodama-lab.com/seminar/clang/summer/ex003.html)
参考になるプログラムが最初から与えられていて、これを改良しなさいということです。
Yahoo!知恵袋では、元のプログラムのつくりを維持したまま、最小限の改造ですむやり方を教えてくれた人の回答が、ベストアンサーでした。(そもそも回答は1件しかなかったようです)ある程度C言語が理解できる人であれば、順当に思いつく回答です。
だれが書いても同じであるプログラムにはなんの価値もかんじません!
商売ならまだしも、趣味で回答をしているのなら、技術の無駄遣い!
この課題では、元のプログラムの改良範囲に指定はありません。回答者は、元のプログラムを意識することなく、自由にプログラムを考えてよいのです。そこにはいろいろ工夫を入れられる余地があります。
課題の提出期限はとうに過ぎたはなしでもあるので、僕が考えた回答案を、ここに公開します。
その1:内側のループに含まれる条件分岐をなくす。
#include <stdio.h>
void pdegits(int n) {
int m = n % 10;
int p = m * ((m / 5) ^ 1) + (10 - m) * (m / 5);
for (int i = 0; i < 5 - p; i++) {
printf(" ");
}
for (int i = 0; i < p * 2 + 1; i++) {
printf("%1d", m);
}
printf("\n");
}
int main(void) {
for (int i = 0; i <= 10; i++) {
pdegits(i);
}
for (int i = 0; i <= 10; i++) {
pdegits(i);
}
}
児玉先生の元のプログラムは、初心者に説明しやすいアルゴリズムになっているのですが、多重ループの内側に条件分岐が存在することが、性格的にどうも気になってしょうがありません。これは、除去したい。バージョニングによって、条件分岐をループの外側に括り出すというのが、ひとつのやりかたで、パフォーマンスも良好と思われるのですが、あえて、1, 3, 5, 7, 9, 11, 9, 7, … という数列をつくりだす関数を考えるというアプローチをとりました。
その2:ループでfor文を使わない。
#include <stdio.h>
void pdegits(int n, int x) {
if (n == 0) {
printf("%1d", x);
return;
}
printf("%1d", x);
pdegits(n - 1, x);
printf("%1d", x);
}
void foo() {
for (int i = 0; i < 11; i++) {
int j = i % 10;
int k = j * ((j / 5) ^ 1) + (10 - j) * (j / 5);
if (k < 5) {
for (int s = 0; s < 5 - k; s++) {
printf(" ");
}
}
pdegits(k, j);
printf("\n");
}
}
int main(void) {
foo();
foo();
}
一部のループをfor文ではなく、再帰をつかって表現してみました。関数型言語でのプログラミングでは一般的な書き方だと思います。C言語において、こういう書き方をしても、あんまり得をすることはないんじゃないかと思ってます。最近のコンパイラだと、このコードをちゃんと理解して、オプティマイズしてくれるのかもしれません。forループの多用は、プログラムの見通しを悪くすることが多いので、こういう手法も個人的にはありだと思っています。
その3:printfのフォーマット文字列を動的に生成する
#include <stdio.h>
void foo() {
long n = 1;
char fmt[8];
for (int i = 0; i <= 10; i++) {
int j = i % 10;
int p = (j / 5) ^ 1;
int q = j / 5;
int k = j * p + (10 - j) * q;
sprintf(fmt, "%%%dld\n", 6 + k);
printf(fmt, n * j);
n = n * p * 100 + n * q / 100 + 11 * p;
}
}
int main(void) {
foo();
foo();
}
これはさらにアクロバティックな回答案です。うっかりこれを提出しようものなら、なんのために、このアプローチをとったのか、小一時間問い詰められることでしょう。なにをやるプログラムなのかわかりにくいし、パフォーマンス的にも得をしていません。ひとついえるメリットは、コード量が少ないということでしょう。これはメモリが少ないなどの事情でプログラムを短くしたいときに使えるテクニックです。しかし、メモリ単価が安い今の時代に、こういうリスキーなコーディングをして、ちょっとぐらい短くすることは全く奨励されません。でも、僕はこういうのが好きなんです。ロマンを感じるんです!
さて、以上、自分の3つの案を公開させていただきました。解いてみるとわかるのですが、解く前に思っていたよりかは複雑で面白い課題です。元のプログラムにこだわらないとすると、このようにいろんなやり方が考えられます。俺だったらもっとセンスのあるコードをかけるぜという方の回答案をお待ちしております。お問い合わせページからご投稿いただければ、ここに追記したいと思います。
2015年1月9日12:14 PM / 高橋
現行のiPad mini RatinaやiPad Airの電波対応は、SIMフリー機の中で抜群に対応範囲が広い。
幅広いLTEバンドに対応しているので、最強のSIMフリー端末だ。
実質的に最も世界で使える端末といえる。
海外に行かれる人ではオススメの端末なのだが、現在少しだけ問題がある。
ドコモのキャリアプロファイルがアップデートされ、テザリングや一部のLTE通信が規制された。
詳しくはここ
http://techlog.iij.ad.jp/archives/1088
MVNOでテザリングできないという仕様はかなりの制限だ。
今現在、iOS7.1.2であればキャリアアップデートしてしまっても再インストールすれば戻せるが
iOS8では最新プロファイルが強制適用のため将来的には保証されない。
これでは気持ちよく購入に踏み切れない人も多いと思う。
しかし、最新情報では、iOS 8 beta 4で、キャリアアップデートのバージョンが16.2.5でテザリングが復活した模様。
GMまでこのままだといいが・・という状況だが、今年後半に出るといわれている新型がきになる。
大きくは、
・次世代A8チップを搭載
・指紋認証
・5メガピクセルのカメラから8メガピクセルのカメラ搭載(iPhone5S相当)
という変化がありそうだ。
さらにはiPhone6の5.5インチ版も検討したいユーザーもいるだろう。
なかなか悩ましいアップデートだが、上記問題も含めiPadをモバイルで使う人には待ちがよいかもしれない。
#2014/08/13 追記
http://www.gizmodo.jp/2014/08/ipad_156.html
新型iPadの製造を開始したようです。
2014年8月8日7:31 AM / 長谷川
Amazon のクラウドサービス AWS において、SSDをつかったストレージも選択できるようになったニュースが昨日から飛び交っています。
クラウドでもSSDを本格的に使う時代
個人利用のパソコン(とくにノートパソコン)において、いまやSSDは当たり前。そしてレンタルサーバや国内クラウド事業者でもSSDを選択肢として用意している昨今でしたが、クラウド最大手のGoogleやAmazonが相次いでSSD対応してきました。Amazonはサービスに欠けている部分があったとしても、しばらくすると、こうやって埋めてきてしまいます。GoogleのSSDサービスも興味深いものですが、Amazonのほうが話題になっているような気がします。実際のソリューションで使われているのがAmazonのほうだからでしょうか。
SSDだから速い
リンク先のブログによれば、従来のMagnetic Volumeに比べて10倍以上高速で、レスポンス時間も1/10以下だとのこと。Windows 2008 R2の起動時間が50%速くなったとのこと。
Amazonのクラウドは、サーバの起動が気軽にできるという特徴がありましたが、実は、起動時間がそこそこかかり、問題に感じていたところです。特にWindowsの起動が遅かったため、通常は、一度立ち上げておいたものにSTOPをかけて、必要なときにSTARTするという使い方しか考えられなかったのですが、今後は、「必要なときに起動する」という本来の使い方ができるかもしれません。ブログにありましたが、起動時はLinuxにくらべてWindowsは10倍ディスクアクセスがあったようです。どおりで!
SSDでRAIDも組める
AWSでは1年ほどまえからEBSでRAIDを組めるサービスを提供していました。今回のSSDをつかったRAIDも組めるとのことです。さらに何倍もの性能を得ることができるわけですが、サーバインスタンスの性能も相応に要求されると思います。
でも、お高いんざましょ?
今までのMagnetic Volumeが1GBあたり月額$0.05だったのが、SSDでは月額$0.1になります。100GBのSSDが月額$10でレンタルできるイメージですね。妥当な金額かなと思うところです。
使いすぎちゃ駄目らしい
あまり、この面についてフォーカスしているブログはないのですが、いくらSSDが高速だからといって、ウハウハなサービスをつかってSSDのガンガンに回すことは出来ないようになってます。Token Bucketモデルで、アクセス総量を絞っているのです。ざっくりな理解で説明すると
- SSD Volume毎にバケツがあって、トークンが540万個まで入る
- Volumeのリード、ライトで、トークンが消費される
- トークンの消費は一秒あたり3000まで
- トークンがバケツに投入される速度はディスクの容量に比例。1GBあたり秒間3トークン
というわけで、100GBの容量のSSDを確保したときには、最低の速度が300IOPSとなるのです。このSSDを使ったとき、パフォーマンスが思ったより出なかったり、アクセス速度が速かったり遅かったり、「バーストだから速いんじゃない?」とかそういう議論があるときは、このトークンまわりを疑いましょう。
2014年6月18日8:23 AM / 高橋
iPhone5s 機種変の時に知った、auポイントの利用に関する制限のお話です。
auポイントプログラム利用規約を見ると、貯めたポイントは、au携帯電話の機器代金として使えるとあり、割賦で端末を購入するときには、頭金でポイントを使って、残りを分割払いにすることができそうな気がします。
auショップで話を聞いたところ(後日157にも確認してますが)割賦で端末を購入するときに、auポイントを頭金には出来ないとのこと。具体例として、iPhone5 64GBをauの下取りプログラムで下取りをすると、28000ポイント(28000円相当)がもらえるのですが、そのポイントは頭金には使えないのです。そのかわり、割賦の(月々の)支払でこのポイントを使うことはできます。なかなかわかりにくい。
157の人曰く、「auポイントは割賦販売における頭金に使えない」ことは、ホームページ等でお客様には案内していないが、KDDIとして販売店に「そういう売り方をしてください」と指示しているルールだそうです。これも悩ましいところですが、現状ではそうなっているとのこと。ポイントの利用について制限があるのであれば、明確に案内すべきですよね。
実際、auポイントは、割賦の支払で利用する(充当する)ことはでき、iPhone5の下取りでもらった28000ポイントは無駄にはならないのですが、それに損得があるのかはよくわからないところ。仕組みとしては、割賦契約時に、月々の支払に充当するポイントを「とりおき」することができて、この取り置き分が、毎月の割賦支払から取り崩されるようになります。
「とりおき」したポイントは、自分のauポイントの口座から、割賦契約時にさっぴかれて、自分のauポイントが消滅したかのように見えますが、毎月の支払で充当されていない余分は、毎月計算されて蓄積されるとのこと。仮に、割賦を途中で解約して一括清算することになった場合、この「余分」が残っていたら、これは割賦解約時に自分のauポイント口座に戻してもらえるそうです。そして、割賦解約時の一括清算においては、このauポイントが利用できるとのこと。
ちなみに、auポイントと紛らわしいものとして、「即時ポイント(契約書には即時Pと書かれている)」があります。今回のiPhone5からiPhone5sへの機種変では10500円割引のキャンペーンが行われていますが、この10500円は即時P扱いだそうです。即時Pはauポイントとは違って頭金に使えます。ですから、このキャンペーンで即時Pを貰える人は、割賦の月々払いが安くなります。
上記の話、157で問い合わせをして、事実であることを電話口で確認しておりますが、自分の聞き間違いや勘違いなどもありえます。ここを参考にされて契約される方は、念のためご自身でご確認下さい。
2013年9月26日6:17 PM / 高橋
いちはやく iPhone 5s を手にしたユーザーからの喜びの声をきき、やっぱり、iPhone 5sに機種変するか! と思っている人も多いと思います。そんな方々のために、auの「家族でスマホおトク割」について知ったことをここに書き留めておきます。
このキャンペーンですが、機種変する前に利用していた iPhone 5またはiPhone 4sを家族に使わせると、いろいろ割引があるよ、というものです。割引と、毎月割が家族に譲渡できることから、2年間で6万円近くメリットが受けられる人もいると思います。
このキャンペーン、古い iPhone を渡す相手(家族)は、新規契約でないといけないというのがネックで既に、au 携帯を持っている家族が 「古い iPhone でもいいから使いはじめたい!」と思っても使えないのです。こういうシチュエーションは非常に多いと思うのです。
それでもどうにかならないか、、、と思い、157(auのお客様相談室)に聞いてみました。そこで、判明した裏ワザ。
「家族のau携帯をMNP転出し、古いiPhoneをMNP新規で登録すればよい」
それまで自分は知らなかったのですが、MNP転出したあとに、転出元のキャリアで、MNP新規登録ができるようです。MNP転出においては、解約手数料とかMNPまわりの手数料がとられてしまうという問題はありますが、「家族でスマホおトク割」で得られるメリットはすごく大きいので、それぐらいは打ち消せてしまいます。
このワザを試されようとする方、念のため、ご自身で販売店なり157に再度お問い合わせください。どちらの担当者も、制度そのものを良く知らないことが多く、根気よく問い合わせる必要があると思います。
2013年9月23日3:25 PM / 高橋
目的
Visioで作成したシーケンス図は追加後に番号を振りなおしたり、複数人で更新するのに手間がかかります。
テキストベースでシーケンス図を作図できるツールを使うと、バージョン管理システムと相性がよく管理がしやすくなります。
オンラインで使えるもの
ブラウザー上でシーケンス図を編集するツールです。
オンラインであれば、どこでも編集可能になります。
PlantUMLがベースのツールですが、シーケンス図に特化して追加で簡略した表記が使えたり、拡張した表現が可能です。
特徴
- 日本語対応
- リアルタイムに入力が作図される
- ダイアグラムの補助入力あり
- 有料会員になると追加機能がある
フォームに入力したテキストファイルを変換してくれるだけのツールです。
シーケンス図以外にもPlanetUMLのフル機能が使えますが、リアルタイム性はありません。
オンライン用PlanetUMLも使いたいなら、websequencediagramsで作成したテキストがPlantUMLと互換の範囲で作成しているか、さっと確認するのに使えます。
特徴
- 日本語対応
- フォームにポストしてダイアグラムの表示が行われる。
- シーケンス図以外のUML図も作図可能。
続きを読む
2013年5月30日6:09 PM / 遊佐
Skypeを社内でつかっていますが、iPhoneやandroidの公式クライアントが動作上の問題というよりは
バッテリー消費の問題で使い物にならない。
1時間で数十パーセント消費するペースで実用性がまったくない。
仕方ないのでimoというマルチメッセンジャーを使ってきたが
今月にはいってスカイプにログインできなくなった。
かなり長期障害なので、早急に乗り換えが必要になり・・・
結局LINEを選択。
取引先や友人などもほとんどLINEなことと、プッシュ通知で到達性が高いので
どうしてもはずせなくなってきた。
マルチクライアントで利用できない、とか細かい不満点はあるものの、抜けが頻繁に発生するような
スカイプよりは実用性が高いようだ。
iPhoneクライアントにいたってはバッテリー消費も優秀になっており、問題なし。
チャット用途でもスカイプはなかなかイイ線いっていたが、モバイルでのツメが甘かったようだ。
模倣アプリとしてcommがあるが、ひっそりバージョンアップでマルチクライアントに対応したり、
出足は完全につまずいたものの、これからのLINEのスキャンダルや、突発的なリジェクトで
天下を狙う形か。
2013年5月12日11:06 PM / 長谷川
サポセンシリーズ(?)です。いろいろ皆さんサポートには関心があるようで、
とにく重要な道具(モバイル端末)についてはメーカーサポートがどうなるかで
仕事にも影響しますよね。
さて、今回はアップル社によるMacbook Pro(retina 13インチ)の対応です。
不良内容は、簡単なものですが開封後確認すると、
・「J」キーを押すと、バチバチと異音&変な感触がある
・トラックバッドの右下側全般のクリックによる異音&過度に沈み込む感触
といった程度のもの。動作はします。
まあ、さすがに新品でこれでは相談したくなるというもの。そのうち動作不良になってもいやですからね。
サポートセンターは対応がいまいちということも噂でききますので、
まずはジーニアスバーに訪問しました。
予約ですが、当日2時間前でも枠は十分空いています。(木曜日の平日)
さくっとネットで予約し、銀座アップルストアへ。
5分前でしたが、担当がきました(40分待たされたなんて話もききましたがすぐでした)
上記症状を伝え、みてもらうと「あーこれはおかしいですね。」との感想。
そして以下の説明。
・交換するには銀座店で店頭購入したものしかその場では交換できない、というルールがあり
いったんサポートセンターに電話してもらう必要がある
・キートップの交換は、部品在庫があればやるけどこのモデルのものはない
・サポートセンターに症状報告はジーニアスバーとして行うので、対応はスムーズなはずだ
・交換対象になるので、それまでは使っていただいて新品が届いたら交換を行って欲しい
・店頭購入の場合、量販店であれば数ヶ月前から店頭交換にも応じられるよう体制が変わった。
ヤマダ電機さんなどであれば交渉してみて欲しい。
ということでした。
私が買ったのは大手ショップではないので、交換には応じてもらえませんでした。
購入日についてうるさく聞かれることはありませんでしたがシリアルキーで参照するので、
本当に変なところで買うと保証されないかもしれません。
そしてコールセンターへ電話。
すると、原則はお預かり修理だと説明される(話が変わるのはよくある話)
いやいやジーニアスバーではそうはいってなかったし、出張で留守にするので急いで欲しい
と、しばし交渉。
すると、担当が替わり、交換に応じてくれました。
あとは交換プログラムになりますが、まずは在庫があれば24時間以内出荷で新品が先に発送されます。
その時クレジットカードの番号を控えられます。
初期不良交換は購入から14日以内に限られますので注意です。
(送付したものに問題がない、となると請求されるの?と一抹の不安がありますが、ジーニアスバー
の人間によると私が見て症状を登録したからそれはない、とのこと。)
ドライバに即引き渡し(不具合品)なのかとおもいきや、回収は別プロセスで
届いてから動作確認し、納得してから担当者に直接電話し、回収していくというプロセスのようです。
万が一不具合品が送られてきても何度でも送ってもらえます。(すばらしい)
万が一返品されなかったときの請求用としてのクレジットカードなのでしょうね。
ということで、致命的不具合でなければ新品がくるまで使えますし、環境もタイムマシンで
移行できますから、ほぼ完璧なサービスといえるのではないでしょうか。
若干の交渉が必要でしたが、私の不具合の程度がしれているので、ということもあるのでしょう。
ほかのメーカーでは大手でも電話すらつながらないメーカーも多々ある中、素晴らしい対応でした。
アップルでもいろいろ対応の不備は見聞きしますが、仕事マシンとして安心して
使えることが証明されました。
2013年4月11日2:11 PM / 長谷川
私流の方法です。
iPhoneで困るのがカメラ画像。
カメラロールにプライベートな写真や、webで拾ったムフフな画像があったりする場合
母艦のPCに同期して削除するなどしないと、うっかりカメラロールを友達にみせるときも気を遣いますよね?
(勝手にスワイプするひとは多いw)
しかもそうしてしまうと見たいときにiPhoneで見れません。
その場合は、やはりクラウドを利用しましょう。
Dropboxを活用します。
Dropboxは、カメラロールを自動で同期してくれる機能があります。自動といっても
Dropboxアプリを起動しておく必要がありますが、パケット制限を気にする場合は、wifi環境の時のみ、など制限がかけられます。
自動でバッテリーが少ないときもアップロードは行いません。
同期といっても、カメラロールにある新しいものだけをアップロードしてくれるので
dropbox側にあってカメラロールにないものを勝手に消したりはしません。
これで同期をとっておけば、カメラロール側は都合のよいものだけを残しておけばOK。
じゃ、dropbox側の画像みられたら終わりでしょ、となりますがDropboxアプリに起動パスワードをかけておきましょう。

また、Dropboxからカメラロールに書き戻すこともできるので、カメラロールの画像は気軽に消せます。
iPhoneの画像バックアップにもなりますし、PCなどにもdropboxはインストールしているでしょうから
自動バックアップになりますね。
難点といえば、Dropboxの容量を比較的圧迫すること。無料のプランではあっという間に埋まってしまいます。
ビジネスシーンでは必須なアプリとなりつつあるので有料プランな人はすでに多いと思いますが。
2013年2月11日9:41 AM / 長谷川
アルゴは先月12月で設立から丸10年を迎えることができました。
ひとえに皆様のおかげです。
心から感謝いたします。
さて、2013年は気持ち新たな出発、ということでゼロスタートをテーマとして進んで参りたいと思います。
「教育」をテーマに新規事業も考えております。
2012年は、日本は震災もあり激動の1年でしたが同時に混沌の1年でもありました。
政治も方向性が定まらず、まずは現状を取り戻し問題点を見いだすのにやっとだった1年だという印象です。
今年こそ!と思っている方々も非常に多いのではないでしょうか。
苦難の1年を乗り越え新しいチャンスをつかむため、まさに1からの思いで取り組んでいきたいと考えています。
そのためには社長も変わらなければなりません。
自問自答を繰り返しながら、自分をブラッシュアップしていこうと思います。
今後ともどうぞアルゴ一同をよろしくお願い申し上げます。
株式会社アルゴ 代表取締役 長谷川博之
2013年1月7日6:30 PM / 長谷川