5つの単純なプログラム間で文字を繰り返すことを避けます


12

あなたが挑戦しているのは、次の5つのタスクのために5つの異なる完全なプログラムを書くことです。

  1. 印刷する Hello, World!

  2. 入力がSTDINの場合、階乗を出力し、入力が0以上の整数であると仮定できます。

  3. 整数Nが与えられた場合、素数の合計<= N

  4. STDINで入力が与えられた場合、入力で使用された文字を出力します。たとえば、入力はHello world、出力する必要がありますhelowrd。出力は小文字であることに注意してください。入力は常に空白を含むアルファベットであり、空白は無視されると想定できます。

  5. このように、次のダイヤモンドを出力します。

       *
      ***
     *****
    *******
     *****
      ***
       *
    

これらすべての課題はおそらく非常に簡単ですが、キャッチがあります。使用するすべての文字を他のプログラムで再び使用することはできません。これは禁止されていませんが、+ 8バイトのペナルティが与えられます。たとえば、これが最初のタスクのプログラムである場合:

print("Hello, World!");

そして、あなたは(大文字または小文字の形で)次の文字を使用することはできません:printhelowd他のプログラムインチ それらを使用する必要がある場合は、各文字を8バイトで「購入」できます。したがってl、別のプログラムでその文字を再度使用する場合、8バイトのペナルティが発生します。罰金を支払った後、このプログラムで必要なだけ各文字を使用できます。他のキャラクターは関係ありません。また、5つのプログラムはすべて同じ言語である必要があります。

これはなので、最小バイト数が勝ちです!


3
これは、私たちがすでに経験した課題のわずかに異なるスピンですが、私の目にはマルチデュープにならないほどの違いはありません。
メゴ

3
@Mego私はこれを制限なしで複数複製として閉じることに投票しますが、制限によりまったく新しいゲームになります。
-trichoplax

1
3つのプログラムで特定の文字を使用する場合、8バイトのペナルティを2回(16バイト)支払いますか?
-trichoplax

1
@trichoplax、はいあなたは16バイト支払う
アドナン・

1
@trichoplaxほとんどありません。重複した問題に対する既存のソリューションは、依然として競争力があります。ここでの上位の解決策は、ペナルティからのより高いスコアを持つ、重複した質問の解決策を連結したものになります。
Mego

回答:


10

CJam、73バイト

"Obkkh+'Phukc&"7f^
q~m!
ri){'j3+_3++~},:+
lS-el_&
4{_' *4@-Y*('**+}%_1>W%\+N*

各行は完全なプログラムです。オンラインで試してください:1 | 2 | 3 | 4 | 5

レターマップ

 bc  f h  k   op    u       18
            m   q            4
        ij       r          17
    e      l      s          7
             n        w y   27

必要な場合(および各プログラムが1行に収まる場合)、このCJamプログラムを使用して、独自の提出用のレターマップを作成できます。


osascriptがこのために作成されたものではないことの証明:あなたの提出物全体が私のプログラムの2未満です。XD +1、いい仕事だ。
アディソンクランプ

4

Pyth、90バイト

最初の試み...

タスク1:20バイト

+"Hello, "+C87"orld!

タスク2、3バイト

.!Q

タスク3、9バイト

sf}TPTSvz

タスク4、6 + 8 = 14バイト

@G{rw0

タスク5、44バイト

"   *
  ***
 *****
*******
 *****
  ***
   *

3

osascript、759バイト

私が始めたとき、これが多くなることを知っていました。ああ

タスク1:15バイト

"こんにちは世界!"

この時点から悪いことになることはわかっていました。

タスク2:64 + 8 * 4 = 96バイト

実行中
oを1に設定
繰り返す
oをa * oに設定します
aをa-1に設定します
終わり
o
終わり

ああ、すごい。

タスク3:170 + 8 * 13 = 274バイト

実行中
oを0に設定します
tをfalseに設定します
iを2からaまで繰り返します
tをtrueに設定します
cを2からi-1まで繰り返します
i mod c = 0の場合、tをfalseに設定します
終わり
tの場合、oをo + iに設定します
終わり
終わり

デニス≠アウトゴルフ。

タスク4:225 + 8 * 13 = 329

実行中
oを「」に設定
aの項目でiを繰り返します
iの文字をcで繰り返します
cがoにない場合
c <91のASCII番号の場合
oをo&(ASCII文字の(ASCIIコードのc + 32))に設定します
そうしないと
oをo&cに設定
終わり
終わり
終わり
終わり
o
終わり

...

タスク5:45バイト

「*
  ***
 *****
*******
 *****
  ***
   * "

ええ 最初から負けそうだとわかっていた。しかし、面白かったです。もっと少ないキャラクターでこれを行う方法があるかどうか知りたいです。文字マップ(デニス提供):

   de hlorw 15
cdef hi lmnop rstu w 160
a de nop rstu 57
abcdef hi lmnop rstu w 214
                            39
                             0

上記の文字カウントはわずかにオフです-改行はカウントされないため、改行で問題が発生しました。

注:ようなものを使用していない理由a's charactersなどがあることである'文字がosascriptをコマンドラインから実行するときに使用する必要があります。を使用していた場合'は、使用する\'必要がありますか、または同様のものを使用する必要がありますが、それはまったく役に立ちませんでした。また、"文字列キャプチャとしてのみ認識されるため、私もそこにちょっとねじ込まれました。しかし、それは楽しかったです。


1

NARS2000 APL、144バイト(85文字)

タスク1、21バイト(17文字)

⎕←"Hello, World!"

タスク2、10バイト(4文字)

⎕←!⎕

タスク3、22バイト(11文字)

⎕←+/¯2π⍳2π⎕

タスク4、53バイト(29文字)

⎕←∪Q[26∣Q⍸⍞∩Q←⎕AV[97+⍳26]∪⎕A]

タスク5、38バイト(24文字)

⎕←" *"[1+4<∘.+⍨(⍳3),⊖⍳4]

1
これらは実際に完全なプログラムですか?私はNARS2000を知りません(そして私のプラットフォームでは利用できません)が、知っているすべての方言はREPLの外で印刷するために割り当てる必要があります。
デニス

@Dennis申し訳ありませんが、REPLの内部をいじっていることを忘れていました。
オベロン

ダイヤモンドの末尾のスペースを出力することはできません。
リスト管理者

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