!インサート!!n!b!e!t!w!e!e!n!


24

ここから投稿。

この課題は、この質問から高度に「抽出」されています。@Akababaに感謝します!

このタスクでは、文字列の先頭とすべての文字の後に感嘆符を挿入する必要があります。

ルール

  • 空でない文字列の入力が常にあります。入力にもタブは含まれません。入力には、非拡張ASCII印刷可能文字と改行のみが含まれると想定できます。
  • 言語が改行を検出できない限り、入力には末尾の改行は含まれません。
  • これは、コンテストです。最短の答えが勝つはずです。

  • 4つの改行は、改行で区切られた5つの感嘆符になります。これをマークダウンテキストとして配置するのは非常に難しいため、代わりにこれを記載します。
1 2 3 4 5 6
129591 129012 129127 129582

0

出力

!1!!2!!3!!4!!5!!6!
!1!2!9!5!9!1!!1!2!9!0!1!2!!1!2!9!1!2!7!!1!2!9!5!8!2!
!
!0!
asd afjoK ak:e
kPrLd
    フォジョ;
    KFO
KFkepjgop sgpaoj faj

出力

!a!s!d!!a!f!j!o!K!!a!k!:!e!
!k!P!r!L!d!
!!!!!f!O!J!O!E!;!
!!!!!K!F!O!
!K!F!k!e!p!j!g!o!p!!s!g!p!a!o!j!!!!f!a!j!

1文字のみの基本テストケース:

a

出力

!a!

(オートコンプリート!冗談です、そのようなことはありません。)感嘆符が含まれています:

!!
!!
!!
!!
!!

出力:

!!!!!
!!!!!
!!!!!
!!!!!
!!!!!


7
私は本当に投票権を理解していません-これは明確でよく書かれた挑戦です。Re:重複している-違いはありません(「!」の前に大きな違いがあります)。
ジョナサンアラン

1
言語の違いを伝えることができない場合a\na、我々は末尾に改行が存在しないことを要求することができますか?
ジュゼッペ

13
チャレンジが説明するように、すべてのアップ投票の間にダウン投票が挿入されます。
A̲̲

2
これは死んでいます。
V.クルトワ

回答:



12

Python 3、27バイト

lambda s:f"!{'!'.join(s)}!"

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

正直なところ、バイト数を減らしてこれを行うクールな方法を誰かが見せてくれることを願っています。


これは空行のケースを正しく処理しません
フレーク

@flakesどういう意味ですか?空の文字列を意味する場合:空の文字列を処理する必要はありません(!!その場合のこの出力に関係なく、私にとっては理にかなっています)。文字列を意味する場合\n:正しい出力はであるため、そうです!\n!
ジョナサンアラン

3
@JAD私の知る限り、例では空の文字列はありません。それだけでなく、最初のルールは「常に空ではない文字列入力があります」と文字通り述べています。
モニカを

1
ああ、私は間違っていました。最初の例では、入力の中央に空の行があります。しかし、この答えは感嘆符をその中央に配置することを処理し!\n!\n!ます。よくやった。
フレーク



10

Retina 0.8.2、2バイト


!

オンラインでお試しください!ついに、Retinaが組み込まれたチャレンジ!


1
実際、このRetinaビルトインに基づいてこの課題を作成しました。
A̲̲


QuadRでは-1バイト。
A̲̲

2
@A__そうです、その機能を忘れていました非関数行が1つしかない場合は…)。チェックマーク再検討することもできます
アダム



8

JavaScript(ES6)、19バイト

入力を文字の配列として受け取ります。

s=>`!${s.join`!`}!`

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


JavaScript(ES6)、 23  20バイト

@ShieruAsakotoのおかげで3バイト節約

入力を文字列として受け取ります。

s=>[,...s,,].join`!`

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


JavaScript(ES6)、22バイト

@tjjfviによる提案

入力を文字列として受け取ります。

s=>s.replace(/|/g,"!")

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



@tjjfvi気の利いたもの!
アーナウルド

5
:私はあなたの23のために20を持っているs=>[,...s,,].join`!`
Shieru Asakoto

7

R、25バイト

function(x)gsub("","!",x)

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

文字ベクトルを受け入れて返す関数。


tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…のscan(,'')ように関数形式をに切り替えることで3バイトを削ることができます
Sumner18

@ Sumner18ありがとう。私はそれから始めましたが、入力をスペースで分割します。
ニックケネディ

1
@ Sumner18チャレンジでは、入力を改行で処理するように求められますが、これは処理できませんscan(ただし、少なくとも出力をcat。で表示する場合、Nickのソリューションは処理します)
Robin Ryder

7

8086マシンコード、.COM形式(MS-DOS 2 +)、32バイト

(エミュレータに応じて-1:以下を参照)

最適な結果を得るために、入力はファイルからリダイレクトされます。入力すると、バッファリングが行われないため、見た目が奇妙になります。また、改行は次のように保存されているため、少し奇妙に見えますCR LFそのCR部分は出力を台無しにします。

このプログラムは、実際のMS-DOSエミュレーション(例えばPCjs)に罰金を振る舞うものののでDOSBoxをは、Ctrlキー+ Z EOF(アセンブリリスト内のコメントを参照してください)との問題を持っているように見えたDOではないあなたがない限りDOSBoxを、コンソールを使用して入力を入力しよう余分なチェックを追加してください!

BB 01 00 53 59 BA 0B 01 B4 40 CD 21 4A 4B B4 3F CD 21 85 C0 74 09 B4 40 43 41 CD 21 49 EB EE C3

いくつかの興味深いビット:

  • 私はすでに実行されていたメモリを再利用することで、いくつかのデータ・スペースを保存した(21H中にはINT 21Hあることを起こります!

  • 私がいたほとんど私がページ上で見つけた面白いトリックを使用することができ、「BCD命令の隠された力」私が使用することを許可されていたAAA標準の代わりにTEST比較することをAL 1つのバイトを保存、0にします。残念ながら、これは完全には文書化されていないため、私はそれに頼ることができませんでした。たとえば、PCjsはキャリーフラグと補助キャリーフラグ以外は何も調整しません。:-(

アセンブリコード(TASM理想モード):

IDEAL
MODEL   TINY

CODESEG
ORG 100H

;; DOSBox (tested with 0.74-2) didn't seem to handle Ctrl-Z as EOF
;; so uncomment the ";;" lines to run it there.
MAIN:
    MOV     BX,1
    PUSH    BX
    POP     CX
    MOV     DX,OFFSET MAIN_1+1  ; The 21H in INT 21H
    MOV     AH,40H
MAIN_1:
    INT     21H
    DEC     DX
    ;;PUSH  DX
    ;;POP   SI
IO_LOOP:
    DEC     BX
    MOV     AH,3FH
    INT     21H
    ;;; This should work on an non-emulated PC. 
    ;;;AAA      ; AL=0?
    TEST    AX,AX
    JZ      DONE
    ;;CMP   [BYTE PTR SI],1AH
    ;;JZ    DONE
    MOV     AH,40H
    INC     BX
    INC     CX
    INT     21H
    DEC     CX
    JMP     IO_LOOP
DONE:
    RET
ENDS
END MAIN


6

Pepe、47バイト

REREEeRErEErREeeEeeeeEREEeeREEeereeREEEEeeEReee

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

説明:

REREEeRE # Push 0,then input (str),then 0 -> (R)
         # The zeroes are pushed to correct the inserting
rEE # Begin loop labelled 0 -> (r)
  rREeeEeeeeE # Push "!" -> (R)
              # r flag inserts it instead of pushing
  REEeeREEee # Move pointer pos 2 steps forward -> (R)
ree # Loop while (R) != 0
REEEEeeE # Remove characters of (R) that are in stack of (r)
         # Removes the 0 in (R)
Reee # Output (R)

このコードをどのように記述しますか?使用するコードコンバーターはありますか?これは試してみて、書き込みに狂ったようだ
たけ

1
@Cruncher 1)これをガイドとして使用します。2)いいえ、コードコンバータは使用しません。ガイドを使用してコードを記述します。
u_ndefined

6

ラビリンス 19 11 10  9バイト

33
..
",@

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

どうやって?

ゼロの無限のスタックで右向きの迷路に入ります...

                         I / O    stack
                                  0,0,0,...
3 - pop * 10 + 3                  3,0,0,0,...
  - 2 neighbours, forward
3 - pop * 10 + 3                  33,0,0,0,...
  - 2 neighbours, forward
. - pop & print chr          !    0,0,0,...
  - T junction from the side
  -   TOS==0, forward
, - read chr or -1       L        76,0,0,0,...   or   -1,0,0,0
  - T junction from the base
  -   if TOS > 0 right:
" -     no-op                     76,0,0,0,...
  -     2 neighbours, forward
. -     pop & print chr      L    0,0,0,...
  -     T junction from the side
  -       TOS==0, forward
3 -       ...back to the start
  -   elif TOS == -1 left:
@ -     exit                                          we're out!


  * right, but on the first occasion (from above) we hit the wall and turn
    around, so that's like a left

幸いなことに、印刷不可能なものを処理する必要はありません。そうしないと、最初のゼロバイト,で混乱してしまいます。




4

Perl 5の -p0、17の 6バイト

s,,!,g

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

私のオリジナルの答えだった-p$_='!'.s,.,$&!,gr。11バイトをカットしてくれた@Nahuel Fouilleulと、ヒントをくれた@Grimyに感謝し-p0ます。



1
@NahuelFouilleul -lpは、\n\n\n\nテストケースに対して誤った出力を返します(!指定された5つではなく、4つの改行区切りを返します)。-p0正常に動作します。
グリムミー

4

6502、12バイト(Apple IIの場合は13バイト)

6502

マシンコードは、ゼロページの場所のペアが文字入力($ FE)および出力(FF)ハードウェアに接続されていることを前提としています。I / Oアドレスは通常ゼロページではありませんが、6502ベースのシステムの多くはこの方法でI / Oを促進します。

簡単にするために、Pythonで作成された6502マイクロコンピューターシステムシミュレーターPy65を使用しました

Py65のメモリダンプを次に示します。次のコードをゼロページの任意の場所にロードして、$ FEと$ FFが重ならないようにすることができます。

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000:  a9  21  85  ff  a5  fe  f0  fc  85  ff  d0  f4

Windowsコマンドウィンドウで実行し、必要なテキストを貼り付ける(Ctrl + V)か、単に入力することができます。入力する場合は、Ctrl + Jを押して改行を入力します(同じASCII文字)。Ctrl + Cを押してプロセッサを中断し、Py65コマンドプロンプトに戻ります。

当然、アセンブリコードは読みやすいです。

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000  a9 21     LDA #$21
$0002  85 ff     STA $ff
$0004  a5 fe     LDA $fe
$0006  f0 fc     BEQ $0004
$0008  85 ff     STA $ff
$000a  d0 f4     BNE $0000

わかりやすくするために、ここにCBA65形式のアセンブリコードを示します。

; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000

        .FILES  BIN=256

; I/O LOCATIONS
GETC    .EQU    $FE             ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC    .EQU    $FF             ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES

        .ORG    $0000

VROOM   LDA     #'!'
        STA     PUTC
VROOM2  LDA     GETC
        BEQ     VROOM2
        STA     PUTC
        BNE     VROOM

        .END

アップルII

上記のコードでは、nullは入力がないことを示しているため、null以外の値が返されるまでポーリングを続けます。

比較のために、Apple IおよびApple IIは、キーボードI / Oアドレスのビット7を設定することにより、新しい文字が利用可能になったことを通知します。これらのシステムでは、通常、ハードウェアに直接アクセスする代わりに、システムモニタールーチンを呼び出すことにより、文字I / Oが実行されます。

RDKEY($ FD0C)およびCOUT($ FDED)を呼び出すことにより、上記と同等のApple IIは13バイトでコーディングでき、RAMのどこでも実行可能です。これが、Apple // eエミュレーター、Android 9のa2ixで実行したコードです。

Returnキーを押すと、改行と同じ効果があります。

*300L

0300-   A9 A1       LDA   #$A1
0302-   20 ED FD    JSR   $FDED
0305-   20 0C FD    JSR   $FD0C
0308-   20 ED FD    JSR   $FDED
030B-   F0 F3       BEQ   $0300

感嘆符の通常のASCII値#$ 21の代わりに、#$ A1が代わりに使用されることに気付きましたか?これは、標準のASCII値をCOUTに送信すると、それらが「反転モード」で表示され、白が黒になるためです。黒の上に通常の白でASCIIを表示するには、COUTを呼び出す前にアキュムレータの文字値に#$ 80を追加する必要があります。RDKEYはhi-bitセットの文字を返すため、アセンブリプログラムは通常、文字のビットをクリアしてASCII値を取得してから使用します。


1
サイトへようこそ!:)
Rahul Bharadwaj

ありがとう、@ Rahul!
リー

4

Bash、36バイト

while read -n1 c;do printf \!$c;done

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

これは、最後の入力を終了する改行に依存します!マーク。


ようこそ!コードのみの回答には自動的に低品質のフラグが付けられるため、説明やインタプリタなどへのリンクを追加することを検討してください。
mbomb007

@ mbomb007、ポインターに感謝します。
22:42に開始

1
残念ながら、これは!入力の最後に追加されません。
Kritixi Lithos

@Cowsquack:私の端末では、入力を終了する改行に!追加されました。tio.runでは、入力をキャリッジリターンで終了する必要があります。それを反映するために、Try it Onlineへのリンクを更新しました。
spuck

4

MarioLANG95 94 90 89 69バイト

++++++
======< >)
>+++++++",+[
=======<.==<
>+++++++!(.-
========#===

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

MarioLANGを初めて試したときは、とても楽しかったです!

ジョー・キングに感謝-20バイトの

説明:

そのため、名前が示すように、MarioLANGはスーパーマリオブラザーズのゲームのように実行されます。BFと同様に動作し、メモリがテープのセルに配置されます。現在のメモリセルにインクリメント、デクリメント、印刷(ASCIIまたは数値として)および読み取りを行う演算子と、テープに沿って左右に移動する演算子があります。

マリオ(命令ポインター)は常にプログラムの左上のセルから始まり、動きの方向は右に設定されます。マリオの下に床のようなオブジェクト(=、 "、または#)がない場合、床のようなオブジェクトに到達するまで落下します。マリオがプログラムスペースを離れると、ゲームオーバーによりプログラムが終了します:(

この特定のプログラムは、基本的に、セットアップとループの2つの半分に分割できます。

   Setup                          Loop
-----------------------------------------------
                       |
++++++                 |          
======<                |          >)
>+++++++               |          ",+[
=======<               |          .==<
>+++++++               |          !(.-
========               |          #===

[セットアップ]セクションでは、33に達するまで最初のメモリセルをインクリメントします-"!"のASCII値です。簡単です; これがゴルフできるなら、それは純粋に形の問題です。マリオは左上から始まり、10枚のコインを拾い、11枚目を拾うと落下し始め、方向を切り替えてから繰り返します。彼は方向を変えずに最後の11枚のコインを拾います。彼は右下の「+」でセットアップセクションを終了します。

ループセクションでは、マリオはエレベーターに到達することから始めます。「!」オペレータは彼に動きを止めさせるので、彼はエレベーターにとどまります。途中で、対応するASCII文字を現在のメモリセルの値(これは常に33、「!」)に出力し、メモリ内の次のセルに切り替えます。マリオはトップに到達し、彼の方向を右に設定します。彼は倒れ、入力からASCII値として文字を読み取ります(文字がない場合は-1)。MarioLANGの制御の唯一の手段は、現在のメモリセルの値が0である場合に命令をスキップすることです。その場合、マリオの方向の変更をスキップします。そうでない場合は、方向を左に設定します。下の床から左に歩くと、現在のセルがデクリメントされて以前の値に戻り、


以前のバージョン(89バイト):

+++++++++++>,
==========@"+
+++++++++++)[
@==========.==<
+++++++++++!(.-
===========#===

カウンターだけでなく乗算ループを使用して62バイト
Jo King

さて、それはクールです。説明をやり直す時間があるとすぐに更新します。
モニカを

1
あぁ!8 * 4 + 1の代わりに5 * 6 + 3を乗算して60バイト
ジョーキング

男、それはちょうどあなたの最初のロデオではないことを知っていますが、これは本当に印象的です。xD
モニカの復活

実際、これは私が初めてMarioLANGをゴルフするのです。私は他の2D言語と同様にBrainfuckの経験があります
Jo King





3

三角15 13バイト

B\3;#*~.,</@<

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

Triangularには条件付き停止演算子があることを思い出してから-2バイト。

これはこれにかかるほど短いと思います。三角に条件付きの方向変更演算子がありますが、残念ながら他の条件とは異なる働きをします。他のすべてはToS <= 0かどうかをチェックしますが、方向変更条件はToS!= 0をチェックします。そうでない場合、次の形式の10バイトになります。Bq3~#*/@<<

ゴルフをしていない:

    B
   \ 3
  ; # *
 ~ . , <
/ @ <
----------------------------------------------------
B3*              - Push 11 and 3, then pop both and push their product.
    <,<          - Change directions 3 times (to save 2 bytes on last line)
        @/       - Print Top of Stack value as a character, do not pop
          ~;\    - Push a character from input to ToS. Halt if ToS <= 0. Change Direction.
              #  - Print ToS as a character and pop

以前のバージョン(15バイト):

B.3\.*#).(/?~@<

3

SimpleTemplate、23バイト

これは私が書いた言語であり、テンプレート用であるはずでしたが、うまくいきました。

!{@eachargv.0}{@echo_}!

改変されていないコードを見ると、ほとんど一目瞭然です。

!{@each argv.0 as char} {@echo char}!{@/}

そして説明:

  • !-リテラル!文字を出力します
  • {@each argv.0 as char}-値を変数に設定して、すべての文字をループしますcharオプション、デフォルト変数は_)。
    argv.0に渡される最初のパラメーターですrender()コンパイラのメソッドにです。
  • {@echo char}!- char変数とリテラル!文字を出力します。
    ゴルフバージョンの場合、デフォルト変数_代わりにが使用されます。
  • {@/}-ループを閉じます(オプション

純粋なSimpleTemplateソリューション:

{@fn x}!{@eachargv.0}{@echo_}!{@/}{@/}

関数を作成します x同じ結果を出力を。

次のように使用できます。

{@call x "this is an example"}

以下のすべてを試すことができます。 http //sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa

ライン908上では、変数を使用することができ$golfed$ungolfedおよび$fnすべてのバージョンをテストします。



ただし、文字配列の使用が許可されている場合、コードは単純化されます(20バイト)。

!{@echoj"!" argv.0}!

そして、無制限:

!{@echo separator "!" argv.0}!

基本的に、"!"リテラルで囲まれたで結合された配列内のすべてのアイテムを出力します!
コンパイラクラスの制限により、スペースは必須です(ゴルフバージョン)。

このコードは、純粋なSimpleTemplateで使用するのが非常に困難です(例として関数を使用):

{@fn x}!{@echoj"!" argv.0}!{@/}

{@// alternative: @call str_split into a "a char array"}
{@set a "a", " ", "c", "h", "a", "r", " ", "a", "r", "r", "a", "y"}

{@call x a}

@callそれは純粋ではないことを意味し、PHPに存在する関数を呼び出すことができSimpleTemplateのソリューション。



2

ゲマ、11文字

\A=\!
?=?\!

残念ながら ! Gemaでコメントを開始するため、エスケープする必要があります。

サンプル実行:

bash-5.0$ echo -ne '1 2 3 4 5 6\n129591 129012 129127 129582\n\n0' | gema '\A=\!;?=?\!'
!1! !2! !3! !4! !5! !6!
!1!2!9!5!9!1! !1!2!9!0!1!2! !1!2!9!1!2!7! !1!2!9!5!8!2!
!
!0!

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





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