パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?」記事へのコメント

  • by Anonymous Coward

    上級がおかしい
    (1-x)^2→(1-x)^-2
    999^-2/1000→1000/999^2
    前者は写し間違いで後者は元が間違ってる。
    ちなみに「そうすると…」の段で1000で割ってる。(1/1000)^0=1だからね。

    上級がやっぱり一番エレガントだとは思う
    C#勢としては初級〜中級と中級〜上級が分かり辛いが、まぁだいたいわかるし常識的な発想だな。
    上級も1/81を知ってれば思いつくかもしれんが、少なくとも自分が問われた時には思い浮かばない答えだ。
    決して難しくはないだけに悔しい感はあるな。こういう答えを思いつきたい。

    • by Anonymous Coward on 2019年06月18日 14時23分 (#3635556)

      追記:
      他にC++でできそうで中級~上級っぽいもの。

      • インラインアセンブラ(普通だけどぱっと見上級感ある)
      • インラインアセンブラだけど半端な場所にジャンプさせて一見全く別のコードに見せかける(難読化ではたまに見るテクニック。逆アセンブルすれば割と簡単?)
      • コンパイル結果を定数で持っておいてジャンプする(できるの?)。
      • zlibかなんかで圧縮する。libpngとか画像圧縮を介するのも面白いかも。
      • telnetとかで拾う。
      • ちょっとしたインタープリターを作る(ループなしでどうやって?)

      ついでにジャンプは明示的に禁止した方が良いと思う。
      std::make_integer_sequence{}
      とかも便利過ぎてちょっとな。Enumerable.Range()使うようなもんでしょ。
      できて当然。

      親コメント
      • by Anonymous Coward

        追記:もしかして関数ポインタへの加算とか使えばアセンブラなしでループやジャンプを隠蔽できる?と思ったけど関数ポインタへの算術演算は流石に禁止されてた。
        コンパイラによってはオプションで可能らしい。
        エレガントにやれば超上級だと思うな。

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

処理中...