こんにちは世界!繰り返しなし


27

この質問が尋ねられる前に存在したプログラミング言語では、文字のHello world!後に改行を出力するプログラム(関数ではない)を書きます。あなたのプログラム:

  • 文字を複数回使用しないでください(空白を含む)
  • ASCII文字のみを使用する必要があります
  • 組み込みライブラリを使用しないでください
  • 入力(ユーザー、ファイル、ファイル名、システム変数、インターネットなど)を取得しないでください
  • 何も出力しないでください

勝者は、14日後に最も票を集めた人で、6つのルールを順守します。

6番目のルールは、H9 +、HQ9 +、HQ9 + B、HQ9 ++、HQ9 + 2D、Hello、Hello +、Hello ++、Hexish、CHIQRSX9 +、またはFugueを使用できないことです。また、このチャレンジよりも新しい実装を必要とするすべての回答は、非競合としてマークする必要があります。


免責事項:この質問は、Hello world!限られた繰り返しで、答えを考え出す過程でコンピューターや脳に損傷を与えることはありませんでした。


文字コードをエスケープする場合、「\」文字を複数回使用できますか?
WallyWest 14年

4
pietはどうですか?
ビクターStafusa 14年

@Victor「ASCII文字のみを使用する必要があります」
Timtech

3
それは素晴らしいパズルで、私はそれを楽しんでいた:-)。
コンラッドボロフスキ14年

9
「ASCII文字のみを使用する必要があります」—厳格な制限です。これにより、たまたまASCIIを使用しない言語のクラス全体が削除されます。
ティムウィ14年

回答:


33

Perl 6(29 28文字)

これはやや面倒でしたが、私はついにこのタスクのためのプログラムを作成することができました。このタスクを手伝ってくれてありがとう#perl6コミュニティに感謝します。2時間かかりました。楽しんでください。出力は、改行を含めて完全に仕様次第です。

say
Q[@A`DO world!]~|<HeLhg>

関心のある4つのトークンがあります。

  • say

    これにより、引数の末尾に改行が出力されます。コマンド自体の後の新しい行は、スペースの置換として必要です。

  • Q[@A`DO world!]

    これが最初の文字列です。Q[]r""Pythonのような)生の文字列用です。この場合、任意の区切り文字(またはそれらのペア)を取ることができます[]。この場合、引用にこれを使用します。生の文字列の動作は必要ありません。

  • ~|

    これは、ストリング~単位の()ビット単位または(|)演算子です。

  • <HeLhg>

    <>スペースで区切られた要素のリストを取るリストリテラルです。この場合、1つの要素があり、スカラーとして使用され、文字列を提供します。


3
すごい!学習する必要があります。いくつかのPerl 6構文!私もあなたのコメントに同意します、間違いなく楽しい問題でした!
ドムヘイスティングス14年

4
うわー、私の心は吹き飛ばされました:O +1
ドアノブ


11

Perl 5.10以降:24文字

say+He,YZX^q(567 world!)

わかりました、これはPerlで得られるのと同じくらい短いと思います。

perl -M5.010(または単にperl -E)実行して、Perl 5.10+ say機能を有効にします。


本当に感動しました!私は周りを取得しようとしている年齢を過ごしたll...秒
ドムヘイスティングス

9

Golfscript 42 33

いくつかのコードとすべてのデータを同じブロックに収めなければならないことを考えると、これをゴルフすることもできますが、2つを区切る方法はありませんが、これはかなり短い結果だと思います。最初のサブミットとは異なり、ブロックコードはデータの完全に統合された部分であるため{1、ブロックを開始1してスタックに配置するだけでなくH、などを定義するデータでもあります。配列の作成には、空の入力文字列が含まれるようになりましたH。つまり、空の文字列との間に文字が1つしかないため、最初の文字をトリミングする必要はありません。文字列は最終的には何も出力されません。

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

オンラインデモ:http : //golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

コードブロックを定義します。コードブロックのコピーを作成し、文字列に変換します。コードブロックを使用して、文字列を反復処理します。反復ごとに、コードは前のchar値のコピーを作成し、現在のchar値とxorし、1を減算します。結果の文字列では、最初の6文字が削除され、2文字ごとに削除されます。最後に改行が追加されます。

「r iFNGDJUHv98oIMgtplbh4m」は、宣言されていない2つの変数であり、何も行いませんが、目的の結果が得られるように注意深く構築されています。

オンラインデモ:http : //golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r



6

Befunge-9834の 31バイト

f"v!dlrow
+c<>a,kb@#*98e':g05-3

オンラインでお試しください!

文字の重複を避けるために、かなり多くの異なる方法を使用します。

まず、ラッピング文字列リテラルを使用して、2つ"のsの使用を避けます。これにより、「世界!」スタックに。

2行目を左に移動して、「Hello」fを作成するためにエクストラに9を追加しoます。当社gらのセル5,0(の文字l)し、それを複製します。'手紙をフェッチするために使用されますe。9を8で乗算して、72のASCII値を取得しますH。次にck,、を使用してすべてを印刷し、>を使用して方向を反転し,、改行を印刷します(a)。


非常に良いが、この課題はコンマなしです。
Ørjanヨハンセン

笑ああ、それはそれは簡単に...ØrjanJohansen@おかげます
ジョー・キング

との2つが+ありdます。
Ørjanヨハンセン

@ØrjanJohansenおっと。今すぐ修正する必要があります
ジョーキング

3

エリクサー、37バイト

IO.puts~c(He#{[?n-2,108]}\x6f world!)

オンラインでお試しください!

このチャレンジが投稿された2014年にこれが機能したことを保証することはできません。エリクサーはまだ1.0より前でした(したがって、正式に「競合」しているかどうかはわかりませんが、リリースノートを見ると、 OK)。とにかく、Perl以外の従来の汎用言語を使用してこのタスクの有効な解決策を見つけたことがうれしいです!

ウォークスルー

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.