JavaRush /Java Blog /Random-JA /脳のフィットネス。プログラミングスキルの向上に向けた当面の課題

脳のフィットネス。プログラミングスキルの向上に向けた当面の課題

Random-JA グループに公開済み
ご存知のとおり、プログラマは定期的に考え、分析し、大小さまざまな問題に対する非自明な解決策を見つける必要があります。これを行うために、プログラマーは、すでに非常に「高価な」おもちゃである脳を積極的に使用する必要があります。人間の脳は、体重の 1.5 ~ 2% しかない質量で、全エネルギーの約 25% を消費します。そして、これは平均的な人の場合であり、複雑なプロジェクトに積極的に取り組んでいるプログラマーの脳がエネルギーの何パーセントを「消費」しているのか、想像するのは恐ろしいことです(そして科学者、おそらく英国人はまだ正確な指標を確立していません)。 脳のフィットネス。 プログラミングスキルの向上に向けた現在の課題 - 1これらすべてからどのような結論が導き出せるでしょうか? 優れたプログラマーになり、その後もプログラマーであり続けるためには、過度なストレスを与えずに定期的に考えて解決策を見つける方法を脳に教え込み、脳を活性化する必要があります。すべての本当に効果的な方法と同様、ありきたりですが、効果的です。頭蓋骨の灰白質を良好な状態に保つために、今日はプログラマー向けのパズルやパズルを含む優れたリソースを厳選し、いくつかの興味深い問題を英語から翻訳しました。

プログラマー向けのタスクが含まれる Web サイト

コレクション内のリソースのほとんどは英語であるため、コーディングの問題やパズルを解く練習をするだけでなく、プログラミングで英語を使用する追加の練習をする機会もあります。 脳のフィットネス。 プログラミングスキルアップに向けた当面の課題 - 2
  1. コーダーバイト

    プログラマー向けのタスクを含む最も人気のある英語リソースの 1 つ。そこには、さまざまなレベルの複雑さの 200 以上のタスクがあり、利用可能な 10 のプログラミング言語 (Java を含む) のいずれかを使用して、オンラインのサイト上で直接解決できます。

  2. プログラミングの実践

    Programming Praxis は、プログラマーにとって興味深い、そして最も重要なことに関連性のあるさまざまなタスクを定期的に公開する人気のブログです。さまざまなプログラミング言語に共通です。これらの課題は、プログラマーがテクノロジーの最新の変化や実際のプログラミングへのアプローチに慣れるのに役立つように設計されています。

  3. トップコーダー

    TopCoder は、さまざまな問題の開発と解決を愛するプログラマーのアクティブなコミュニティです。新しいタスクは定期的に公開され、その解決策が成功すると、練習して HR を向上させる機会が提供されるだけでなく、賞金も獲得できます。

  4. コードカタ

    CodeKata は、有名な本 Pragmatic Programmer (「The Pragmatic Programmer. The Path from Apprentice to Master」) の著者の 1 人である Dave Thomas によって発明された、プログラマー向けの非常に独創的で機知に富んだ問題を多数掲載するブログです。CodeKata Web サイトの問題は多岐にわたり、解決策は実際のプログラミング作業に関連しています。

  5. 北京大学 ACIP/ICPC 審査員オンライン

    ACIP/ICPC 用の Peking University JudgeOnline は、さまざまなコンテストや競技会からのプログラマー向けのタスクが含まれる北京大学のページです。サイトは定期的に更新され、問題はリアルタイムで解決され、解決策は北京大学の専門家の委員会によって評価されます。

  6. プロジェクト・オイラー

    これも古くから有名なサイトで、重大かつ重要なタスクを扱っています。「Project Euler は、解決するには数学の知識以上のものを必要とする複雑な数学およびプログラミングの問題を集めたものです。問題の複雑さはさまざまで、アプローチは帰納的連鎖学習に基づいています。つまり、1 つの問題を解決すると、これまで理解できなかった他の問題を解決できる新しい概念を発見できるようになります」とリソースの作成者は述べています。

  7. 毎日のすごいこと

    Daily WTF は、Bring Your Own Code (BYOC) 原則に基づいて運営されているもう 1 つの人気のあるプログラミング コミュニティです。つまり、開発者は独自のソース コードを共有して、さまざまな独自の問題を解決します。「BYOC の目的は単純です。ソフトウェア開発者として、通常の退屈な問題よりも少し興味深い問題を解決することで、プログラミング スキルを向上させる機会を提供することです」とサイトには記載されています。

  8. ツプロガー

    Google、Facebook などの企業の技術面接で専門家のスキルをテストするために使用されるアルゴリズム タスクを備えた優れたロシア語サイト。オリジナル問題を含め、さまざまな難易度の問題が多数出題されます。

  9. アル・ジマーマンのプログラミング・コンテスト

    「クレイジーなプログラマーが名声と素晴らしい賞品を求めて競い合う」有名な著者のサイト。コンテストは年に 1 ~ 2 回開催され、著名なプログラマーの名前がリソースのメイン ページに掲載されるため、将来有望な雇用主の関心を確実に集めています。

  10. ティマスオンラインジャッジ

    自動チェック システムを備えた、プログラミングの問題に関する最大のロシア語アーカイブの 1 つ。アーカイブの主なタスクのソースは、ウラル連邦大学での競技会、ウラル選手権、その他の地域のプログラミング イベントです。Timus Online Judge を使用すると、ウラル連邦大学で定期的に開催されるほとんどのコンテストのオンライン バージョンに参加することもできます。

5 つの興味深いタスク

始めるのが待ちきれない人のために、いくつかの興味深いパズルを紹介します。 脳のフィットネス。 プログラミングスキルアップに向けた当面の課題 - 3
  1. スティーブ・ジョブズのブレンダーのなぞなぞ

    課題:あなたはニッケル サイズまで縮小され、ミキサーに放り込まれます。体重が減少したため、体の密度は変わりません。60 秒後にブレードが回転し始めます。あなたの行動は?

    これは通常、Apple の創設者である Steve Jobs に関連する古典的なタスクです。ジョブズが 1997 年に Apple に戻ったとき、彼は社内のすべての従業員に個人的にインタビューし、このタスクを最初のテストの 1 つとして使用しました。

    解決:

    У данной задачи больше одного решения, так How она служит для того, чтобы оценить креативность сотрудника, умение быстро находить выход из стрессовой ситуации и неординарно мыслить. Вот наиболее классический вариант решения: лечь How можно плотнее к днищу блендера, чтобы его лезвия крутorсь над вами.

  2. Сколько людей было на конференции?

    Задача: На конференции каждый гость пожал руку всем остальным. Было 66 рукопожатий. Сколько человек было на научной конференции?

    Другая классическая программистская задача из тех, которые часто дают на первых этапах технических собеседований.

    Классическое решение:

    Допустим, на конференции было n человек. Первый человек пожимает руку всем остальным: n-1 раз (n-1 человек). Второй человек пожимает руку всем остальным (но не первому, так How это уже было сделано): n-2 раза. 3-й человек пожимает руку всем остальным: n-3.

    Таким образом, общее количество рукопожатий будет = (n-1) + (n-2) + (n-3) + …… 0;
    = (n-1) * (n-1 + 1) / 2 = (n-1) * n / 2 = 66
    = n ^ 2 -n = 132
    = (n-12) (n + 11) = 0;
    = n = 12 ИЛИ n = -11

    Вариант -11 исключен, поэтому ответ: 12 человек.

  3. Бар и 25 стульев.

    Еще одна классическая и весьма остроумная задачка, на этот раз посложнее.

    Задача: Есть бар с 25-ю стульями, которые расположены в линию. Посетители этого бара — антисоциальные личности, поэтому, когда они заходят в бар, то всегда стараются найти место How можно дальше от остальных. Если постоянный посетитель заходит в бар и обнаруживает, что свободного места без соседства с кем-либо нет, он разворачивается и уходит. Владелец бара, естественно, хочет видеть можно больше посетителей. Владелец может указать место, на которое нужно сесть, только первому клиенту, тогда How все остальные сами выберут себе самое дальнее место от других. Предположим, что места пронумерованы от 1 до 25. Какое место должно быть занято первым?

    Решение:

    Первый человек должен сесть на стул 9 or 17 (из-за симметрии, не имеет значения, Howое именно из двух мест). Предположим, он выбирает место 9. Следующий человек выберет место 25, так How оно самое дальнее от места 9. Следующие два человека займут места 1 и 17. Следующие три займут 5, 13 и 21. Следующие шесть будут занимать стулья 3, 7, 11, 15, 19 и 23. Таким образом, в баре разместится максимум 13 человек, и никто не будет сидеть рядом с другим человеком. Если место, отличное от 9 or 17, будет выбрано первым, общее количество посетителей бара будет меньше 13.

  4. Деньги в карманах и религия.

    Интересно составленная задача на нахождение алгоритма.

    問題:男性はポケットにお金を持っていますが、その総額は 90 ドルから 95 ドルです。途中、いくつかの寺院を訪れます。彼は寺院に入るとすぐにお金が 2 倍になり、最終的に各寺院に 100 ドルを寄付することになります。その結果、最後の寺院を訪れた後、彼のポケットは空になってしまいました。ここで問題は、彼が最初にどれくらいのお金を持っていて、どれだけの寺院を訪れたかということです。

    解決:

    最後の寺院から数え始めます。

    最後の寺院 (1) を訪問した後、彼にはお金が 0 ドル残っていたので、 => (0 + 100) / 2 = 50 となります。最後の寺院を訪問する前に、彼は 50 ドルを持っていました。

    前の寺院 (2) を訪れる前は、(50 + 100) / 2 = 75 でした。
    前の寺院 (3) を訪れる前は、(75 + 100) / 2 = 87.5 でした。
    前の寺院 (4) を訪れる前は、(87.5 + 100) / 2 = 93.75 でした。
    前の寺院 (5) を訪問する前に、彼は (93.75 + 100) / 2 = 96.875 を持っていました。この金額は初期条件を超えています。
    回答: その人はもともと 93.75 ドルを持っていて、4 つの寺院を訪れました。

  5. 現場での出来事。

    そして最後に、もう 1 つの古い古典的な、アコーディオンのような論理的思考の問題です。

    問題:麦畑で男性の死体が発見されました。彼はマッチを手にしっかりと握った。なぜその人は亡くなったのでしょうか?

    解決:

    男性は乗客3名とともに飛行機に乗っていた。エンジンが停止し、飛行機は落下し始めた。男たちは4人に対してパラシュートが3つしかないことに気づき、マッチを引き始めた。そのうちの1人は短いパラシュートを引き抜き、パラシュートなしで飛び降りることを余儀なくされました。

エピローグ

これらの問題が単純すぎる、または一般的すぎると感じる人のために、 Java プログラマーの面接でよく出題される難しい問題を含む、より複雑なJava の問題を用意しています。プログラマー向けの興味深いパズルを知っている場合、またはお気に入りのタスクを共有したい場合は、コメントに書き込んでください。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION