繰り返してください


64

出力するプログラムを書く

Do not repeat yourself!

プログラムコードは次の制約を順守する必要があります。

  • その長さは偶数でなければなりません
  • positionにある各文字2nn整数は0より大きい)は、positionにある文字と等しくなければなりません2n-1。プログラムの2番目の文字は最初の文字と等しく、4番目は3番目と等しくなります。

改行は文字としてカウントされます!

これはコードゴルフなので、最短のコードが勝ちです!

HHeellllooWWoorrlldd 有効なプログラムです

123またはAAABBBHHeello正しくない

検証

このCJamスクリプトを使用して、ソースコードが有効であることを確認できます。コードを「入力」ボックスに貼り付けて、スクリプトを実行するだけです。


51
おもしろい事実:問題に代わりにトリプレットDDDooo nnnooottt rrreeepppeeeaaattt yyyooouuurrrssseeelllfff!!!があった場合、トリガー
-Sp3000

14
これは制限が厳しすぎるかもしれないと思っていましたが、答えが急増していることは間違っていることを証明しています。いい質問です!
trichoplax

Haskellでこれらの要件を満たすには、かなり深刻なストレッチが必要です。すべてのバインディングフォーム、すべての形式の条件式、文字と文字列を入力するすべての方法、および出力を生成するすべての方法が排除されます。
dfeuer

1
誰かが得点スニペットを追加できますか?私はそれらを持っているのが好きです、そして、私はすべての質問がそれらを持っていたことを望みます。
mbomb007

現在の答えはすべて難解な言語です。これは通常の言語で可能だろうか?
DankMemes

回答:


51

Hexagony166の 126 124バイト

\\;;;;33rr''22DD..));;;;;;oo;;}}eeoo\\@@nn;;;;ee;;;;aass&&;;uuoo;;;;..\\\\;;ttee..pp;;tt;;;;..rr;;''ll..'';;;;..;;}}ff..}}yy

暗黙のno-opと空白を挿入すると、これは次のソースコードに対応します。

       \ \ ; ; ; ; 3
      3 r r ' ' 2 2 D
     D . . ) ) ; ; ; ;
    ; ; o o ; ; } } e e
   o o \ \ @ @ n n ; ; ;
  ; e e ; ; ; ; a a s s &
 & ; ; u u o o ; ; ; ; . .
  \ \ \ \ ; ; t t e e . .
   p p ; ; t t ; ; ; ; .
    . r r ; ; ' ' l l .
     . ' ' ; ; ; ; . .
      ; ; } } f f . .
       } } y y . . .

これをさらに短くすることは可能だと確信しており、おそらくサイドレングス6で解決することもできますが、トリッキーになっています...

使い方

ここに画像の説明を入力してください

TimwiのHexagony Colorerで生成された図。

コードは完全に線形です。\開始時の権利は、IPを対角線にリダイレクトするため、二重文字を心配する必要はまったくありません。色付きのパスは、オレンジ/赤、青/グレー、緑、紫の順に実行されます(同じ色のパスが2つある場合、左側のパスが最初に実行されてから、右側のパスに折り返されます)。

他のユーザーによって上書きされるノーオペレーション、ミラー、コマンドを無視すると、線形コードは次のようになります。

D;o;&32;}n;o;t;';}r;e;p;e;a;t;';}y;o;u;r;s;e;l;f;');@

Hexagonyの文字は、現在のメモリエッジの値を文字の文字コードに設定するだけです。;現在のメモリエッジを文字として出力します。を使用&してメモリエッジをリセットし0、でスペースを印刷し32;ます。}別の端に移動して、32さらにスペースを確保できるようにします。コードの残りの部分は、新しいエッジに文字を印刷するだけで、ときどき前後に移動して';}スペースを印刷します。最後に、で再びスペースエッジに移動し'、値を33 )に増やして感嘆符を印刷します。@プログラムを終了します。


4
これは本当に印象的です!!!
WizardOfMenlo

サイズ6 または5でも可能だという結論に達しましたか?サイズ7は、かろうじてフィットしているように見えます。
ティムウィ

@Timwi 5はおそらく少し野心的でしたが、単一の例外を除い;て、コード内の文字ペア間での再利用はまだありません。現在のコードは私の頭に浮かんだ最初のものですので、十分に努力すれば、これに合うようにセミコロンとおそらくいくつかの文字を再利用するはるかに複雑なソリューションを見つけることができるはずです辺の長さが6に
マーティン・エンダー

サイズ6を取得するには、あなたは、現時点ではあなたが持っている6つの未使用のスロットを使用する場合でも、あなたはまだ30を保存する必要があると思いますが、すべて再利用できるサイズ7に比べて36個の文字を保存する必要があると思い;ますので、一度だけそれらを水平方向に移動することはできません。;コードには23 秒しかなく、6文字の繰り返し(2xo、1xt、1xr、2xe)しかありません。29だけです。個人的には、これはサイズ6は不可能だと確信しています。 。
Timwi

44

GolfScript、130 84 76バイト

22..!!..00)){{DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff}}``%%>><<[[33]]++

Web GolfScriptでオンラインで試してください。

使い方

GolfScriptインタープリターは、空の文字列をスタックに配置することから開始します。

22 # Push 22.
.. # Push two copies.
!! # Negate the last copy twice. Pushes 1.
.. # Push two copies.
00 # Push 0.
)) # Increment twice. Pushes 2.

   # STACK: "" 22 22 1 1 1 2

{{DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff}}

`` # Push a string representation of the string representation of the block.

   # This pushes "{{DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff}}" (with quotes).

%% # Take every second element of that string, then every element of the result.
>> # Discard the first element of the result. Repeat.
<< # Truncate the result to length 22. Repeat.
[[ # Begin a two-dimensional array.
33 # Push 33, the character code of '!'.
]] # End the two-dimensional array.
++ # Concatenate the empty string, the 22-character string and the array [[33]].

配列と文字列を連結すると、結果が目的の出力になります。


38

単項、〜1.86×10 222

シンプルなブレインファック->単項回答。非常に準最適;)。

プログラムは、偶数の0で構成されています。具体的には:

1859184544332157890058930014286871430407663071311497107104094967305277041316183368068453689248902193437218996388375178680482526116349347828767066983174362041491257725282304432256118059236484741485455046352611468332836658716

そのうちの。

元のブレインコード:

++++[++++>---<]>+.[--->+<]>+++.[--->+<]>-----.+[----->+<]>+.+.+++++.[---->+<]>+++.---[----->++<]>.-------------.+++++++++++.-----------.----.--[--->+<]>-.[---->+<]>+++.--[->++++<]>+.----------.++++++.---.+.++++[->+++<]>.+++++++.------.[--->+<]>-.

3
指定したコードブロックはいずれもダブルアップルールを満たしていません。私は何が欠けていますか?
doppelgreener

26
@doppelgreener:「コード」の最初のブロックは、単に大きな数字です。具体的には1、要求された文字列を出力する単項プログラムのs の数。2番目のコードブロックは、それを生成するために使用されたBFプログラムです。単項プログラムは完全に1sで構成されているため、繰り返しの要件を簡単に満たします。
エレンディアスターマン

8
また、ゼロの数は(幸運なことに?)偶数です:-)
Arnaud

1
数値がコードのように見えないように、自由に答えを編集しました。
ティムウィ

2
@Kametrixomそれは単項プログラムのゴルナーの記述です。書かれたGolunarプログラムは条件を満たしていません。
パエロエベルマン

34

ルビー- 2100 1428 1032 820 670バイト

これは、出力が関数からの戻り値になる可能性があることを前提としています(出力がSTDOUTである必要があることは指定されていませんでした)

コード:

((((((((((((((((((((((((((((((((((((((((((((((""<<66++11**00++11**00))<<99++11++11**00))<<((55>>11**00))++((11>>11**00))))<<99++11))<<99++11++11**00))<<99++((33>>11**00))++11**00))<<((55>>11**00))++((11>>11**00))))<<99++11++((11**00<<11**00<<11**00))))<<99++11**00++11**00))<<99++11++11**00++11**00))<<99++11**00++11**00))<<88++((11>>11**00))++((11**00<<11**00<<11**00))))<<99++((33>>11**00))++11**00))<<((55>>11**00))++((11>>11**00))))<<99++22))<<99++11++11**00))<<99++((33>>11**00))++11**00++11**00))<<99++11++((11**00<<11**00<<11**00))))<<99++((33>>11**00))))<<99++11**00++11**00))<<99++((11>>11**00))++((11**00<<11**00<<11**00))))<<99++11**00++11**00++11**00))<<33))

トリックは""、追加操作<<と文字のASCIIコードを使用して、空の文字列から文字列を作成することです。

ASCIIコードの数値を取得するために、簡単に生成できる値に数値を分解しようとしています。たとえば、ASCII 90はjustで88+1+1、次のとおりです。

  • 88 それだけで大丈夫です
  • 11**0011^0、単に1

幸いにも両方++--を意味しますaddルビーでは、私は書くことができます90ように88++11**00++11**00

1を追加するよりも簡単にいくつかの数字を取得するためのいくつかのトリックがあります。ここに、上記の生成に使用しているコードを示します(使用しているすべてのマッピングが含まれます)。

d = "Do not repeat yourself!"

d.each_char do |c|
  print "(("
end

print '""'

VALUES = [
  [0,'00'],
  [1,'11**00'],
  [4,'((11**00<<11**00<<11**00))'],
  [5,'((11>>11**00))'],
  [11,'11'],
  [16,'((33>>11**00))'],
  [22,'22'],
  [27,'((55>>11**00))'],
  [33,'33'],
  [38,'((77>>11**00))'],
  [44,'44'],
  [49,'((99>>11**00))'],
  [55,'55'],
  [66,'66'],
  [77,'77'],
  [88,'88'],
  [99,'99']
].reverse

d.each_char do |c|
  print "<<"
  num = c.ord
  while num != 0
    convert = VALUES.find{|val|val.first<=num}
    print convert.last
    num -= convert.first
    print "++" unless num == 0
  end
  print "))"
end

私はまだ、数字に到達するために必要なキャラクターを減らす他のトリックについて考えています。

-rppフラグを使用し、次のppようにコードの先頭に追加する場合に注意してください。

pp((((((((((((((((((((((((((((((((((((((((((((((""<<66++11**00++11**00))<<99++11++11**00))<<((55>>11**00))++((11>>11**00))))<<99++11))<<99++11++11**00))<<99++((33>>11**00))++11**00))<<((55>>11**00))++((11>>11**00))))<<99++11++((11**00<<11**00<<11**00))))<<99++11**00++11**00))<<99++11++11**00++11**00))<<99++11**00++11**00))<<88++((11>>11**00))++((11**00<<11**00<<11**00))))<<99++((33>>11**00))++11**00))<<((55>>11**00))++((11>>11**00))))<<99++22))<<99++11++11**00))<<99++((33>>11**00))++11**00++11**00))<<99++11++((11**00<<11**00<<11**00))))<<99++((33>>11**00))))<<99++11**00++11**00))<<99++((11>>11**00))++((11**00<<11**00<<11**00))))<<99++11**00++11**00++11**00))<<33))

余分な2 + 4バイトの場合、これは完全なプログラムとして機能しますが"、必要な文字列の前後に余分なものを出力します。

例:

$ ruby -rpp golf.rb
"Do not repeat yourself!"

これが完全に準拠していない理由を明確にできますか?それは私には完璧に見える、とさえpp宝石はダブルレターです...
センモウヒラムシ

3
1.追加:@trichoplax:それはポストにい"た出力内の文字をし、2の必要性-rpp(好きされていないフラグ--rrpp
SztupY

1
この回答はクールですが、仕様を満たさない回答は削除の対象となります。
小麦ウィザード

1
@SztupY明確にするために、チャレンジのルールに従わない応答を削除するのがサイトポリシーです。
マイクブファルデチ


23

> <>、174バイト

vv

77

99

**

00

77

bb

**

pp

""

!!

ff

ll

ee

ss

rr

uu

oo

yy



tt

aa

ee

pp

ee

rr



tt

oo

nn



oo

DD

""

~~

oo

ll

11

==

;;

00

66

bb

**

..

ありがたいことに、ある意味で制限は垂直に適用されません。ただし、最大の問題は、すべての改行を2倍にする必要があることです。

大まかに実行するコードは次のようになります。

v            Redirect instruction pointer to move downwards
79*07b*p     Place a ? on row 77 before the first ;
"..."        Push "Do not repeat yourself!" backwards, riffled between spaces

[main loop]
~o           Pop a space and output a char
l1=?;        If there is only the final space left, halt
06b*.        Jump back to the start of the loop

プログラムには二重スペースがありません。文字列モードの場合、> <>は空のセルにスペースをプッシュします。ただし、逆に、これはg(ソースコードから単一セルを読み取る)を使用するソリューションは、プログラム内のスペースが読み取られるとNULになるため、扱いにくいことを意味します。

(注:エラー終了する場合、これは50バイト短くなりますが、私はこの方法が好きです。)


1
仕事
に最適な

20

スクリッピング186 146バイト

끄끄닶닶긂긂닦닦닶닶덇덇긂긂댧댧뉖뉖댇댇뉖뉖눖눖덇덇긂긂뎗뎗닶닶덗덗댧댧댷댷뉖뉖닆닆뉦뉦긒긒

껢껢鎵鎵❶❶合合虛虛替替標標現現併併一一終終

明確にするために、改行を複製する必要があるため、3行のコードがあり、その中央は空です。バイトカウントはUTF-16エンコーディングに基づいています。

説明

開始時の韓国文字のブロックが文字列をプッシュします"DDDof� \"\u0002nf�of�twG \"\u0002rw'efVpw\aefVaf\u0016twG \"\u0002yw�of�uwWrw'sw7efVlf�fff!\"\u0012"3文字ごとに私たちが望むキャラクターであることに気付くでしょう。残りは意味不明です。その理由は次のとおりです。

Scliptingでは、2つの韓国語文字が3バイトをエンコードします。したがって、各韓国語文字は12ビットを効果的にエンコードします。で始まる文字列を取得するDには、最初の8ビットが必要0x44です。残りは重要ではありませんが、すべての文字を繰り返す必要があるため、12番目から20番目のビットもになります0x44。したがって、我々は、フォームの値を有することになる0x44n44nいくつかのためにn個の3バイトに分解します、0x44 0xn4 0x4n

以下のためoである、0x6F我々は、バイトを取得します0x6F 0xn6 0xFn

私は怠け者ので、私は、エンコーディングによって開始"DDDooo nnnooottt (etc.)"し、その後、私が得る理由です前回と他のすべての文字、置き換え0x444444= "DDD"D0x6F66F6= "of�"のためにo。これ0xF6、それ自体が無効なUTF-8エンコーディングであるためです。

さて、プログラムに戻りましょう。プログラムの残りの部分は次のように進みます。

껢껢—文字列をプッシュします ".\"�"

鎵鎵—最後の文字を2回削除します。 "."

❶❶— 2つの重複。今すぐスタック:[".", ".", "."]

合合— 2回連結します。今すぐスタック:["..."]

さて、次にやりたいことは"..."、正規表現として使用することです。これにより、代替...終ループ構造を使用して、元の文字列の3文字を一度に一致させることができます。ただし、すべての命令が複製されるため、このような2つの正規表現ループを相互にネストする必要があり、スタックがアンダーランするとランタイムエラーが発生します。したがって、

虛虛—空の文字列を2回プッシュする

そして、ループ開始します。この方法では、正規表現""とstringが一致するため、外側のループは1回だけ反復され""、単一の一致が生成されます。内側のループは"..."、大きな文字列と一致するたびに1回実行されます。ループの本体は次のとおりです。

標章— 2つのマークをスタックにプッシュします。今すぐスタック:[mark mark]

現現—現在の正規表現マッチの2つのコピーをプッシュします。今すぐスタック:[mark mark "DDD" "DDD"]

併併—最初のマークまで連結します。今すぐスタック:["DDDDDD"]

一一—その文字列の最初の文字を取得し、次に(冗長的に)その文字列の最初の文字を取得します。スタックに必要な文字が追加されました。

内側のループはここで終了するため、正規表現のすべての一致は、その一致の最初の文字に置き換えられます。これにより、スタックに目的の文字列が残ります。

その後、外側のループが終了し、その時点で目的の文字列がスタックから削除さ""れ、文字列内の唯一の一致が""それで置き換えられ、目的の文字列が再びスタックに残ります。


3
うーん...なぜここでコード形式を使用しなかったのですか?漢字ですか?
エリックアウトゴルファー16

@EriktheOutgolfer私は同じことを疑問に思っていました(そしてそれらは中国語ではなく韓国文字です)。
ケビンCruijssen

@KevinCruijssen私もそこにいくつかの漢字があると思います。実際、仕様では、データにはハングルを使用し、指示には中国語を使用していると書かれています。
エリックアウトゴルファー

@EriktheOutgolferああ、あなたは本当に正しい。私はrtfmを持っている必要があります。:)
ケビンCruijssen

12

ラビリンス、528バイト

66))__vv          ..33::00&&__vv          ..44__99||__vv          ..33::00&&__vv            ..99))__vv            ..99))__vv      ..44__88$$__vv          ..22__99++__vv          ..22__99$$__vv            ..22__99))$$__vv      ..33__77$$__vv            ..33__vv

      ..44__99||__^^          ..11__99++__^^          ..44__88$$__^^          ..44((__88$$__^^      ..11))__99++__^^      ..99((__^^          ..33::00&&__^^          ..44__99||__^^          ..44((__88$$__^^            ..99))__^^          ..11__99$$((__^^    ..@@

xx

二重改行は痛いですが、少なくともこれは実行可能であることを証明しています!

各文字は、最初にコードポイントを形成し、次に単一の文字を印刷することにより、1つずつ印刷されます。コードポイントは、以下によって形成されます。

D 68  66))
o 111 44__99||
  32  33::00&&
n 110 11__99++
t 116 44__88$$
r 114 44((__88$$
e 101 99))
p 112 11))__99++
a 97  99((
y 121 22__99++
u 117 22__99$$
s 115 22__99))$$
l 108 33__77$$
f 102 11__99$$((
! 33  33

どこ

)(        Increment/decrement by 1 respectively
&|$       Bitwise AND/OR/XOR respectively
+         Add
:         Duplicate
_         Push zero
0-9       Pop n and push n*10+<digit>

Labyrinthの数字の異常な動作33::00&&は、実際に

[33] -> [33 33] -> [33 33 33] -> [33 33 330] -> [33 33 3300] -> [33 32] -> [32]
     :          :             0              0               &          &

それぞれの単一の文字はメカニズムで印刷されます

__vv

  ..

xx

xxそれは5高いですのみパッドするために存在し、グリッドように。最初に__2つのゼロをプッシュしてから、グリッド回転演算子を押しvます。ゼロをポップして回転します:

__ v
  v
   .
  .
xx

そしてまた:

__ v

  v.

xx.

次に.、3行目の右に移動して、印刷コマンドを1回だけ実行します。


printコマンドを1回だけ実行するために使用したトリックが大好きです。それは非常に賢いです。
ティムウィ

11

CJam - 176の 136バイト

66))HH77++GG00++BB88++HH77++EE88++GG00++DD88++99))CC88++99))AA77++EE88++GG00++BB99++HH77++KK77++DD88++JJ77++99))AA88++II66++33]]{{cc}}//

プログラムサイズを2で割ったSp3000に感謝します:-)

説明

  • コードはHH77++GG00++(:これらの3つの数字を追加し、 'HH77は++」スタックに17、17及び77を押すなど)、...の数字を追加することにより、文字の整数ASCIIコードを計算します
  • 末尾のコード部分は]]{{cc}}//、ASCIIコードをループし、それらを文字に変換します。

ここで試してみてください


1
これをプログラムで生成しましたか?少なくとも、最後はである可能性が33ccありますが、他のいくつかには良い方法があると確信しています
-Sp3000

@ Sp3000はい、さまざまな組み合わせで++を試したプログラムを実行しました。他のオペレーターを試したことはありません
...-アルノー

3
別のメモ:ccどこでもではなく]]{{cc}}//、最後に行う
-Sp3000

11

自己修正Brainf ***、72バイト

\x00はリテラルのNUL16進バイト(空のセル)を表すことに注意してください。ソースコードは、開始セルの左側のテープに配置されます。

!!fflleessrruuooyy  ttaaeeppeerr  ttoonn  ooDD\0\0<<<<<<++[[<<]]<<[[..<<]]

説明

!!fflleessrruuooyy  ttaaeeppeerr  ttoonn  ooDD  The string on the tape for easy printing
\x00\x00                                        A separator to make printing shorter
<<<<<<++                                        Change first '.' to '0' (comment)
[[<<]]<<                                        Move to separator, then left to string
[[0.<<]]                                        Print string

また、このプログラムを作成する前に、ソースでBF文字のみを使用して作成していました。それが可能だ!また、ASCII値が奇数の場合は値を2倍にしてから2で除算するため、さらに長くなります。少し短くすると、ソース全体が変更され、最初から奇数の値が生成されます。


この出力DDoo nnoott rreeppeeaatt yyoouurrsseellff!!(二重スペース)ではありませんか?私は2を見る.
エリックアウトゴルファー

@EriktheGolferあなたが私の答えを読む時間。Change first '.' to '0'。説明を変更して(最初に)最初のもの.がゼロに変更されることを示しました。
mbomb007

7

ゼリー、66 バイト(非競合)

““DDoo  nn““oott  rreepp““eeaatt  yyoouurrss““eellff!!””ṛṛḷḷWWQQ€€

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

ファクトイド

1文字おきに削除しても、プログラムは機能します。

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

使い方

““DDoo  nn““oott  rreepp““eeaatt  yyoouurrss““eellff!!”

文字列の配列を返します。リテラルはa で始まり、a で終わり、文字列はで内部的に区切られます。結果は

["", "DDoo  nn", "", "oott  rreepp", "", "eeaatt  yyoouurrss", "", "eellff!!"]

リンクの引数と戻り値はこの文字列の配列に設定され、ソースコードの残りが実行されます。

<literal>”ṛṛḷḷWWQQ€€  Argument/return value: A (string array)

         ”ṛ           Yield the character 'ṛ'.
           ṛ          Select the right argument of 'ṛ' and A: A.
            ḷ         Select the left argument of A and A: A.
              W       Wrap; yield [A].
             ḷ        Select the left argument of A and [A]: A.
               W      Wrap; yield [A].
                Q     Unique; deduplicate [A]. Yields [A].
                 Q€€  Unique each each; for each string s in A, deduplicate s.

競合しない理由
16

1
Jellyは2015年12月に作成されたため、この課題は3か月先送りされています。
デニス

おっと、これが古い挑戦であることに気づかなかった
ちょうど半分

5

ガンマプレックス、66バイト

\\

XX""!!fflleessrruuooyy  ttaaeeppeerr  ttoonn  ooDD""XXXXrrRREE

Gammaplexは2D言語で、最初の改行の位置を行の長さとして使用し、他のすべての改行を無視します。


5

MSM270 160バイト

!!'',,ff'',,ll'',,ee'',,ss'',,rr'',,uu'',,oo'',,yy'',,  '',,tt'',,aa'',,ee'',,pp'',,ee'',,rr'',,  '',,tt'',,oo'',,nn'',,  '',,oo'',,DD'',,......................

私の最初のMSMプログラム!

MSMでの文字列の出力は、スタック上に個々の文字をプッシュを介して単一の文字列にそれらを結合することにより行われる.など、

!olleH.....

の数は.、文字数よりも1つ少ない数です。以下のためにDo not repeat yourself!、私たちは22必要な.のを。幸いなことに、これは偶数であるため、11個のダブルがあります。

......................

文字をその前に置くには、さらに努力が必要です。パターン

cc'',,

キャラクターごとにトリックをしますc。次のように評価されます

cc'',,            push c (remember: commands are taken from the left and operate on the right)
c'',,c            push c
'',,cc            quote ' and push
,,cc'             pop
,cc               pop
c                 voilà!

私たちは、23のこのようなパターンで始まる必要!!'',,で終わるDD'',,22は、コマンドへの参加が続きます.


5

Befunge 98、70 66バイト

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

私の無効な答えの後、実際に課題に合ったより良いものがあります!

2200**xx""!!fflleessrruuooyy  ttaaeeppeerr  ttoonn  ooDD��""kk,,@@

(の��代わりに、文字0x17の使用を提案してくれたMartin Enderに感謝します88ff++

説明:

2200          Push 2, 2, 0, and 0 onto the stack
*             Multiply 0 and 0, yielding 0
*             Multiply 2 and 0, yielding 0
              The stack is now [2, 0]
x             Pop a vector off the stack and set the instruction pointer delta to that
              The instruction pointer is now skipping over every other character, since the delta is (2, 0)
"!f ... oD�" Push the string onto the stack, with the number 23 (number of characters in the string) at the top
k,            Pop characters off the stack and print them, 23 times
@             End the program

あなたは、文字列の代わりに、内側に印刷できない文字(コード・ポイント23)を使用して、4つのバイトを保存することができます8f+tio.run/nexus/...
マーティン・エンダー

4

DC348の 346 342 306 290 278バイト

ファイルdnr6.short.dc(末尾の改行なし):

AAzz--22222222vvPPAAAAAAAAvvPP88vvFFFFFFFFvv00++AAzz--PP11vvFFFFFFFFvv00++AAAAAAvvPP11vvEEEEEEEEvv00++OOOO//44999999vv++PP77II++OOOO//44999999vv++PPAAAAAAvv88vvFFFFFFFFvv00++PPAAzz--BBPP11vvFFFFFFFFvv00++77OOOO++++PPOOOO//44999999vv++66vvFFFFFFFFvv00++PP99zz++OO88++PPAAAAvv33PP

実行:

$ dc < dnr6.short.dc 
Do not repeat yourself!

3

BotEngine、6x49 = 294

vv  PP

  !!ee

  ffee

  llee

  eeee

  ssee

  rree

  uuee

  ooee

  yyee

    ee

  ttee

  aaee

  eeee

  ppee

  eeee

  rree

    ee

  ttee

  ooee

  nnee

    ee

  ooee

  DDee

>>  ^^


2

網状、非競合、62バイト

2200**UU""DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!""oo;;

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

部分的な説明:

2200**
2200    the stack looks like [2 2 0 0]
    *   [2 2 0*0]
     *  [2 2*0*0]
        [2 0]

Uポインタの方向をに設定します(2, 0)。つまり、2xユニットと0y ユニットを移動Uします。そのため、次にスキップされる文字から他のすべての文字がスキップされます。次に、1つおきの文字が記録されます。これは次と同等です。

"Do not repeat yourself!"o;

これは単純な出力プログラムです。

その他

これは、WallyWestのJavaScriptバウンティと競合しています。

この制限の下で数値を構築できる一方で、文字列は構築できないことを証明できます。リテラルは使用できないため、リテラル構築文字を配置すると空の文字列が作成されます。

""
''
``

その場合、一部の演算子のみを使用できます。使用される唯一の「ペア」演算子は次のとおりです。

++ -- << >> ** ~~ || && !! ==

そして、これらのどれも数字/その他を文字列にキャストできません。そのため、文字列は出力できません。


賞金は5日で終了します、@ ConorOBrien、待っていても構いません!しかし、報奨金はあなたのものです。
-WallyWest

2

アリス、74バイト

aa00tt,,JJ""DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!//@@""ooYY;;tt


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

説明

最初の問題は、文字列を入力できる必要があること"です。そのため、firstのみをスキップします。これは、最初の"セルにジャンプすることで行います。IPが現在のセルを再度見る前に1つのセルを移動し、2番目のセルが"文字列モードに入るためです。しかし、そこにジャンプできるようにする10, 0には、スタックの一番上に、この順番(2番目、一番上)が必要です。これは以下で行われaa00tt,,ます:

                          Stack:
aa   Push two 10s.        [... 10 10]
00   Push two 0s.         [... 10 10 0 0]
tt   Decrement twice.     [... 10 10 0 -2]
,    Rotate(-2).          [... 0 10 10]
,    Rotate(10).          [... 0 10 0]

この回転関数は引数をポップします。その引数が負の場合、スタックの一番上の値をその数だけ押し下げます。引数が正の場合、最上部よりも下の位置にある要素を探し、最上部に引き上げます。の場合Rotate(10)、スタックには十分な要素がありませんが、暗黙の無限量のゼロが下部にあることに注意してください。これがゼロが上部にある理由です。

これでJ"これらの2つの引数を使用して最初のものにジャンプできます。2番目"は文字列モードに入り、すべてを記録しDDoo nnoott...ます。がヒットする/と、IPは南東にリダイレクトされ、順序モードに入ります。今のところ、IPは3行(2行は空)で上下に跳ね返るので、最初に2行目と3行目にさらに3つのスペースを記録し、次にを押すと文字列モードを終了します"。現時点では順序モードになっているため、記録されたすべての文字は単一の文字列としてスタックにプッシュされます(ほとんどの文字はCardinalモードで記録されていますが)。したがって、この文字列になります(末尾のスペースに注意してください) :

DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!   

これで、IPは上下にバウンドし続けます。つまり、IPは他のすべてのペア、つまりYとの1つのコマンドを実行しtます。次に、IPは2行目のグリッドの終わりに到達し、グリッドを逆方向に跳ね返り始めます。これにより、IPが最初の行にヒットする文字のペアも切り替わるため、戻るときにIPが実行されるよう;oなり@ます。したがって、すべてのスペースと暗黙的なIPリダイレクトを無視すると、実行されたコードはYt;o@順序モードになります。

これYは、文字列を交互の位置の文字に分離する「unzip」コマンドです。最初のコピーには2つの末尾スペースがあり、2番目のコピーには1つの末尾スペースがありますが、各文字が繰り返されるため、実際に目的の文字列の2つのコピーが得られます。tその末尾のスペースを分割して;破棄します。最後にo、文字列を出力し@てプログラムを終了します。


2

05AB1E100 58 52バイト

Kevin Cruijssenのおかげで-6バイト

„„€€··™™……€€––  ……¹¹‚‚  ……––‚‚))εε##θθáá}}»»……!!θθJJ

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

„„€€·              # dictionary string "g do"
     ·             # double (no effect on strings)
      ™            # title case: "G Do"
       ™           # title case again (no effect)
……€€––             # dictionary string "tools not–"
                   # spaces necessary so "–…" isn't parsed as a dictionary word
……¹¹‚‚             # dictionary string "team repeat‚"
                   # spaces necessary again
……––‚‚             # dictionary string "j yourself‚"
)                  # wrap the entire stack in an array
 )                 # and again: [["G Do", "tools not–", "team repeat‚", "j yourself‚"]]
  ε        }       # for each:
   ε      }        #  for each:
    #              #   split on spaces: ["tools", "not–"]
     #             #   and again: [["tools", "not–"]]
      θ            #   get the last element: ["tools", "not–"]
       θ           #   and again: "not–"
        á          #   keep only letters: "not"
         á         #   and again (no effect)
            »      # join the list by newlines, joining sublists by spaces:
                   # "Do not repeat yourself"
             »     # join the stack by newlines, joining lists by spaces (no effect)
……!!               # literal string "…!!"
    θ              # get the last character: "!"
     θ             # and again (no effect)
      J            # join the stack without separators: "Do not repeat yourself!"
       J           # and again (no effect)
                   # implicit output

べき等規則。


1
いい答えです、あなたはそのような辞書の文字列を絞ることができたことに感銘を受けました!残念ながらá、内部文字列でベクトル化されません。そうでなければ、))..の後に使用できます。すべてáを削除しεεáá}}))作業の後に代替として使用できますが、残念ながら、バイトを節約できません(ただし、インスピレーションを見つけることができますか? )...そして„„!!代わりの……!!仕事だけでなく、以来、!組み込みは明らかに同じ文字列を残します。ああ、私は試した。xD
ケビンクルーッセン

1
@KevinCruijssen私は##θθááしばらくの間繰り返されたものをリファクタリングしようとしましたが、何らかの理由で私は考慮しませんでしたεε}}...私は試しましたが€€、それはまったく機能しません...これは今、最短回答です、ありがとう!
グリムシー

1

スタックス、70バイト

GG11hh::zzaapp..}}..""DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!""

staxlang.xyzで実行してデバッグしてください!

Staxには幸運にも::n回ごとの組み込み機能があります。必要なのは、文字列を2倍にプッシュし、2をプッシュして、実行することだけ::です。簡単ですね。

違う。

その文字列をプッシュするのは難しいです。最初の引用符は、で2倍にできます..""。これは."、意味のある引用符が続くための長さ2のリテラルです。問題は、新しい文字列を開始せずに文字列を終了する方法がないことです(これが必要です。そうしないと、2倍のバージョンが出力されます)。

プログラムの終わりは、文字列リテラルを終了します。この2倍になったリテラルをそこに置くことができれば、おそらく素晴らしい回避策があるでしょう。ただし、プログラムの最後からどこかにジャンプするにはが必要なG}ので、最低限、これを見ています。

GG [deduplicate] }}""DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!""

これは...何もしません。Gブロックを開始しないので、どちらも2番目にジャンプしません}。繰り返しますが、1つの文字を無視する必要があります..}}。実行は、最初Gから2番目}にジャンプし、最後まで続行し、2番目に戻りG、そこから2番目に戻り、}もう一度[deduplicate]スタックの最上部にある2重の文字列でセクションの先頭に戻ります。

重複排除は簡単です。11hh11をプッシュして2倍にし、両方を切り捨てて2にすると、::必要な出力が得られます。

GG11hh::..}}..""DDoo  nnoott  rreeppeeaatt  yyoouurrsseellff!!""

ええとああ。これは何も印刷しません。ここには2つの問題があります。1つ目..}は、文字列.}がプログラムの最後のスタックの上にあることを意味し、2つ目は、Staxの通常の暗黙的な出力が無効になっていることです。

最悪の問題は出力です。Staxプログラムが何も印刷せずに正常に終了すると、スタックの最上部が暗黙的に印刷されます。しかし、何も印刷していません...?ああ、でもあります。終端されていない文字列リテラルはプッシュされるのではなく出力され、空"であるにもかかわらず(末尾の不一致の)これらの2つの空の文字列でさえ、このチェックをトリップするのに十分です。印刷はすべて手作業で行う必要があります。

ppまたはのいずれかが必要です。PPこの場合、最初のスルーを無視する..ppことは、文字列を出力するため、受け入れられません.p。つまり、スタック上で単独で、または空の文字列とともに上位2つで、必要な出力が必要です。この後者はzzaa印刷前に2つの空の文字列()を押して、上位3つのアイテムを2回回転()することで実現されます。

これが完了すると、4文字の高さのスタックができます。第五は、.}プログラムが正常に終了する前に、その後、プッシュされます。この時点で、暗黙の出力の欠如は、余分なものは何も印刷されないため、祝福と呪いになります!

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