これを作るのに時間がかかりました。(YouTubeコメント#1)


84

ちょっと待ってください。これはトローリングではありません。


バックグラウンド

最近のYouTubeでは、コメントセクションに次のようなパターンが散らばっています。

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

where Stringは単なるプレースホルダーであり、文字の任意の組み合わせを指します。通常、これらのパターンには1 It took me a lot of time to make this, pls likeつまたは何かが付随し、多くの場合、OPは多くのいいねを集めることに成功します。


タスク

あなたは魅力的なゴルフスキルでPPCGにアップボットを蓄積する素晴らしい才能を持っていますが、YouTubeコメントセクションで機知に富んだ発言をしたり、ミームを参照したりするための絶対的な選択肢ではありません。このように、意図的な考えで作られた建設的なコメントは、YouTubeに「いいね」が少ししかありません。これを変更したいです。そのため、上記の決まりきったパターンを作成して、最終的な野心を達成することに頼ります。

簡単に言えばs、次のパターンに適合するように、あなたの仕事は、たとえば、文字列を取得し、改行で区切られたの2*s.length - 1部分文字列を出力sすることです。

(for s= "Hello")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

入力

単一の文字列s。コミュニティの入力デフォルトが適用されます。入力文字列には印刷可能なASCII文字のみが含まれると想定できます。


出力

改行で区切られた複数の行は、上記で説明した適切なパターンを構成します。コミュニティの出力デフォルトが適用されます。出力の先頭および末尾の空白(スペースなどの文字または見えない文字を含まない)行は許可されます。


テストケース

複数ワードのテストケース:

Input => "Oh yeah yeah"

Output =>

O
Oh
Oh 
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah 
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah 
Oh yeah
Oh yea
Oh ye
Oh y
Oh 
Oh
O

上記のテストケースの出力の形状には明らかな歪みがあることに注意してください(たとえば、出力の2行目と3行目は同じように見えます)。これは、末尾の空白が見えないためです。プログラムは、これらの歪みを修正する必要はありません。


受賞基準

これはなので、各言語のバイト単位の最短コードが勝ちです!


19
将来的には、YouTubeのコメントに関連する課題にさらに取り組む予定です。したがって、YouTube Comments #1タイトルに。
アルジュン

1
行の配列を返すことは許可されていますか?
誰か

2
入力を文字の配列として受け取り、文字の配列の配列を返すことはできますか?
シャギー


3
入力は可能""ですか?単一のキャラクターは"H"どうですか?もしそうなら、これらの両方の場合の出力は何ですか?
AdmBorkBork

回答:


103

brainfuck、32バイト

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

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

パターンの両方の半分に同じループが使用されます。

説明:

,             Take first input character as initial line
[             Until line to output is empty:
  [<]>        Move to beginning of line
  [.>]        Output all characters in line
  ++++++++++. Output newline
  ,           Input next character
  [>>]        Move two cells right if input character nonzero
  <[-]        Otherwise remove last character in line
  <           Move to new last character in line
]

2
それは素晴らしかったです。私はブレインファックで何かをしようとしていましたが、それはこの長さの約10倍出て、それでも適切に動作しませんでした。
エルペドロ

34
ブレインファックの答えが実際に競争力のある素晴らしい仕事であるという挑戦を見るとは思わなかった!
疑問符

54

JavaScript(ES6)、36バイト

f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s

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

コメント済み

f = (             // f is a recursive function taking:
                  //   the input string split into:
  [c,             //     c   = next character (may be undefined if we've reached the end)
      ...r],      //     r[] = array of remaining characters
  s = `\n`        //   the output string s, initialized to a linefeed
) =>              // 
  c ?             // if c is defined:
    s +           //   append s (top of the ASCII art)
    f(r, s + c) + //   append the result of a recursive call to f, using r[] and s + c
    s             //   append s again (bottom of the ASCII art)
  :               // else:
    s             //   append s just once (this is the final middle row) and stop recursion

3
非常に良い答え:D
lois6b

10
@MartinBarker Windowsでは、デフォルトの行末をに変更してNotepad ++を使用していますUnix (LF)。問題は完全に解決しました。:)
アーナウド

3
驚くばかり!JSの完全な初心者である人のために、この説明を書くことができますか?
Akhoy

3
@Akhoyコメント付きバージョンを追加しました。
アーナルド

3
ありがとうございました。より明確になりました。
Akhoy

47

05AB1E(レガシー) 4  3 バイト

取り消し線&nbsp;4&nbsp;は4ではなくなりました:)

η.∊

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

η     # Get the prefixes of the (implicit) input-string
 .∊   # Vertically mirror everything with the last line overlapping
      # (which implicitly joins by newlines in the legacy version of 05AB1E)
      # (and output the result implicitly)

05AB1Eの新しいバージョンで»η、の後に明示的に指定する必要があるため、ここでは05AB1Eのレガシーバージョンを使用してバイトを保存します。


7
うーん、これはUTF8で6バイトのようです:\xce\xb7\x2e\xe2\x88\x8a
rubenvb

10
@rubenvb UTF-8では、さらに多くのことができます。05AB1Eは、他の回答で使用されているプログラミング言語(Jelly、Japt、Charcoalなど)の一部と同様に、独自のソースコード(05AB1Eの場合はCP-1252)を使用します。シングルバイト。
ケビンクルーッセン

わかりました、十分に公平:)。
rubenvb

@KevinCruijssen PHPは、これらの文字は、CP-1252のために無効であると考えているようだが、ちょうどPHPのバグのようになります。3v4l.org/UC1QE
hanshenrik

7
@hanshenrik良い質問です。確かにCP-1252ではありませんが、実際には05AB1E encodingであり、これが使用するカスタムエンコーディングです。進でこのコードのバイトがある08 2e 17あなたが実行して確認することができ、--osabieフラグ:tio.run/...
アドナン・

21

IBM PC DOS、8088アセンブリ、  44  43

d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24

組み立てられていない:

    SHR  SI, 1              ; point SI to DOS PSP at 80H (SI intialized at 100H)
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  DX, SI             ; save start of string pointer
    MOV  AH, 9              ; DOS API display string function
    DEC  AX                 ; remove leading space from string length
    MOV  BH, AL             ; save string len in BH (AL gets mangled by INT 21H,9)
    MOV  CL, AL             ; set up loop counter in CL
    SHL  CL, 1              ; number of lines = 2 * string length - 1
    DEC  CX
    MOV  BL, '$'            ; end of string marker
LINE_LOOP:
    CMP  CL, BH             ; if CL >= string length, ascend
    JGE  ASCEND
    DEC  SI                 ; descend by backing up two places (always increments)
    DEC  SI                 ; (this is fewer bytes than 'SUB SI, 2' or two branches)
ASCEND:
    INC  SI                 ; increment current string position
    XCHG BL, [SI]           ; swap current string byte with end of string delimiter
    INT  21H                ; write substring to console
    XCHG BL, [SI]           ; restore string byte
    PUSH DX                 ; save output string pointer
    MOV  DX, OFFSET CRLF    ; load CRLF string
    INT  21H                ; write to console
    POP  DX                 ; restore output string pointer
    LOOP LINE_LOOP          ; move to next line
    RET
CRLF DB 0DH,0AH,'$'

説明

2 * input length - 1行ごとにループします。DOS APIの文字列表示関数(INT 21H,9)は- $終了文字列を画面に書き込むため、ループを通過するたびに、表示される最後の文字の後の文字が文字列の終端ターミネータと交換されます。

ループカウンターは文字列の長さと比較され、それが大きい場合(出力の昇順部分を意味する)、文字列/スワップの位置がインクリメントされます-1-1+1

スタンドアロンの実行可能プログラム。コマンドラインから入力文字列を受け取ります。

出力

enter image description here

YT2.COMをダウンロード(43バイト)


1
ほとんどのDOSフレーバーでは、COMファイルのロード時にSI = 100hになります。これにより、最初の命令をに置き換えることでバイトを節約できますSHR SI, 1
ガストロプナー

@gastropnerとても賢い!CHが0であるとカウントするため、元のファイルはDOS 1.0では実行されません(初期化に+2バイトかかりますが、DOS 1だけでは価値がありません)。新しいバージョンで更新されました!
640KB

ターミナルを開くたびに日付を入力する必要がありますか?
user14492

1
@ user14492 ha、いいえ!DOSスクリーンショットからその部分を切り抜くのを忘れました!
640KB

19

パイソン260の 52バイト

f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]

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

Python 3.8(プレリリース)、50バイト

f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]

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


2
これは、今後リリースされる3.8の機能に依存していますか?どの機能ですか?
アレクシス

7
@alexisこれは、割り当て式を使用していますx:=s[:n]
アーナウルド

1
ああ、今は感謝しています:-)私は前にこの機能について読んだことがあり、楽しみにしています。それでも...私のCの日からそれを欠場
アレクシス

1
ただし、これらは出力を出力しません。配列を作るだけですよね?
Jaden Travnik

コンソールを介して対話的に実行している場合@JadenTravnik Pythonは自動的に最後の式の結果をdupms
Xeverous

18

MATL、8バイト

nZv"G@:)

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

:)コードのスマイリーについては、この投稿を気に入ってください。

n  % Length of the input string
Zv % Symmetric range ([1 2 ... n ... 1])
"  % For each k in above range
G  % Push input
@: % Push [1 2 ... k]
)  % Index

17

J、11バイト

匿名の暗黙の接頭辞関数。スペースが埋め込まれた文字行列を返します。

[:(}:,|.)]\

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

]\ プレフィックスのリスト

[:() 次の関数をそのリストに適用します

|. 逆リスト

, を先頭に付けた

}: 縮小された(最後のアイテムなし)リスト


18
[:(そして}:,|...とても悲しい見て
アダム

しかし、それは(}:派手な口ひげを持つ幸せな人です
DonFusili

13

Perl 6、31バイト

{[\~](@_)[0...@_-1...0]}o*.comb

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

文字列を受け取り、行のリストを返す匿名コードブロック。

説明:

{                      }o*.comb   # Pass the list of characters into the codeblock
 [\~](@_)                 # Triangular reduce by concatenation
                          # e.g. The list [1,2,3,4] turns into [1,12,123,1234]
         [0...@_-1        # Return the elements from 0 to length of string minus 1
                  ...0]   # And back down to 0

5
最近では、ゴルフをしているPerlでさえ、最も読みやすい競技者の1人であることは面白いです。
反時計回りに回転するのをやめた

7
@ceasedtoturncounterclockwisさて、これはPerl 6です。Perl5の答えはまだ読めません
Jo King

12

Japt -R、4バイト

å+ ê

文字列の累積的な削減。

@Shaggyのおかげで-1バイト

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


文字列に含まれなければならない「-R」について懐疑的(それなしでは出力は機能しません)
Flying Thunder

3
何より懐疑的なことなら@FlyingThunder :) ここを参照してください
Quintec

@Quintec、これらの種類のコメントを先取りするために、ソリューションヘッダーのフラグをそのメタ投稿にリンクしました。
シャギー

1
規約は<language> + -flagまたは<language>であることを確認してください-flag。また、:| 私はものだった累積削減忘れて、私はそれの上に私はそれを見たびにスキップ誓う
ASCIIのみの

@ ASCII-only同じように、APLでこれをどのように解決するかを考えていて、「Japtにこの組み込み機能があるのだろうか」と言ったので、それを思い出しただけです。また、<language>を使用しませんでした-flagか?
14:01の​​Quintec

11

Japt -R9 7バイト

シャギーのおかげで-2バイト

Êõ@¯XÃê

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



1
@Shaggy oh wait ... Ãis thing
ASCIIのみ

この質問が報奨金の対象となるとすぐに、さらに300人の担当者が参加します。
シャギー


1
@Quintec、累積リデュースは文字列でも機能するため、最初に分割する必要はありません。また、それは自分で投稿するのに十分なほど違うと思います。
シャギー


10

ハスケル、 52 50 44バイト

f x=unlines$init<>reverse$scanr(\_->init)x x

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


サイトへようこそ。 initsインポートを使用する必要があるため、追加する必要があるimport Data.Listか、それに類似したものが必要です。
ウィートウィザード

@ SriotchilismO'Zaicそれがカウントに必要かどうかはわかりませんでした。追加、ありがとう!
ジョセフ・シブル

4
また Haskellゴルフを話すためのチャットルームあることにも触れておく必要があります。何か考えや質問がある場合、それは素晴らしい場所です。
ウィートウィザード

1
あなたが私が投稿しようとしていたものを正確に思いついたとは信じられません:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R79 65 62 58バイト

write(substring(s<-scan(,""),1,c(1:(r=nchar(s)),r-1:r)),1)

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

-14ジュゼッペの優れた機能知識

-3クリーンなインデックス付け

-4ニックケネディとジュゼッペの移籍scanwrite

ループ(およびsubstr)を避けるのはいいことです。


2
ループはそのままで完全に不要ですsapply- 必要なsubstringことを(追加の末尾の空行を使用して)実行します。ここでのsubstringあなたの素晴らしい使い方を見ていなかったら、私は絶対に考えなかっただろうsubstr
ジュゼッペ

1
ハハ、良いキャッチ!この時点で、他のどこよりもあなたの編集から同じ仕事の代替機能について多くを学んだと思います。
CriminallyVulgar

2
ハハ、Rには微妙な違いを伴う愚かな同義語があります。私は私が仕事に最適なツールを知っているように感じるたびに、私はそれが...奇妙なエッジケースではわずかに良いです何かを見つける
ジュゼッペ・

3
どのようにして、オンラインでそれを試してみてください!とを使用scanしてwrite?わずか59バイト!
ニックケネディ

1
あなたが交換した場合@NickKennedy 58のバイト""1
ジュゼッペ

7

ゼリー5 4バイト

@JonathanAllanのおかげで-1バイト!

¹ƤŒḄ

オンラインでお試しください!これは私の2番目のゼリーの答えだと思いますか?これが最適かどうかわかりません。私はそれが最適であることをより確信しています。行の配列を返します。

説明

¹ƤŒḄ     input: "Hi!"
¹Ƥ       prefixes of the input: [["H"], ["H", "i"], ["H", "i", "!"]]
  ŒḄ     bounce, using each array: [["H"], ["H", "i"], ["H", "i", "!"], ["H", "i"], ["H"]]

@JonathanAllanが提案するもう1つのアプローチは;\ŒḄ、であり、これは累積的に(\)連結(;)を削減します。これは、プレフィックスを生成する別の方法です。


行の配列を生成することが許可されているためY、コードから飛び出すことができます(フッターを作成するかÇYÇŒṘプログラム全体の暗黙的なスマッシングプリントを回避します)。サイドノートでは、これは;\ŒḄ同じバイトカウントと同じように実装されています("blah"Jellyがこれを文字のリストとして解釈するので、引数を渡すこともできます-あなたが見るように、実際には文字のリストのリストですフッターを作成する場合ÇŒṘ
ジョナサンアラン

@JonathanAllanありがとう!非常に興味深い:)
コナーオブライエン

7

Python 3.8(プレリリース)、48バイト

lambda s,r='':(l:=[r:=r+c for c in s])+l[-2::-1]

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

代入式 with :=を使用して接頭辞のリスト累積し、次に結果を保存してその逆を連結します(最初の文字なし)。

Python 2、51バイト

f=lambda s,l=[]:s and f(s[:-1],[s]+l)or l+l[-2::-1]

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

次の45バイトの解決策はほとんどありますが、元の文字列が2回あるため、これを修正する簡単な方法はありません。

f=lambda s,l=[]:s and f(s[:-1],[s]+l+[s])or l

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


目的の出力を得るには、改行と印刷を追加する必要はありませんか?
Jaden Travnik

のようなものprint('\n'.join(f(s)))
Jaden Travnik

@JadenTravnikコミュニティのデフォルト(このチャレンジの後に続く)は、プログラムに加えて機能許可します。そして、チャレンジの著者はコメントで、デフォルト許可されているように結合内の文字列のリストでOKだと述べましたが、私自身はこれをデフォルトとして好きではなく、それを否定しました。Pythonルールの概要もご覧ください。
xnor

ほら OK、それを指摘してくれてありがとう。Im新しい¯_(ツ)_ /¯。ケースのthats場合は、ここでは競合する45バイトのソリューションです:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
ジェイデントラヴニク

@JadenTravnik問題ありません、ルールは残念ながらその場所に散らばっています。あなたの例は許可されていないスニペットです。のような入出力を行う必要がありますs=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]上部例をご覧ください。
17:56の

6

木炭、5バイト

G^Lθθ

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:塗りつぶされた多角形を描画^し、辺が右下と左下にあることを指定し(多角形は自動的に閉じます)、Lθそれらの辺の長さを元の入力の長さとしてθ指定し、最後に塗り文字列を指定します。




5

Brachylog(v2)、6バイト

a₀ᶠ⊆.↔

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

関数の送信、行の配列を返します。@Fatalizeの回答に大まかに基づいています

説明

a₀ᶠ⊆.↔
    .↔  Find a palindrome
   ⊆      that contains, in order,
  ᶠ       all
a₀        prefixes of {the input}

ここでのタイブレークの順序はによって設定されます。このフローパターンで使用する場合、できるだけ早く出力を優先し、指定された要素をできるだけ早く配置してタイブレークします。最短の出力は、ここで必要なものです(重複するプレフィックスを使用できないため)。指定された要素(つまり、プレフィックス)をできるだけ早く配置すると、前半(切り上げ)に配置されます。出力。同じ順序で配置する必要があるため、Brachylogに与えた説明は非常に一般的ですが、必要なパターンを正確に取得することができます。タイブレークは正確に正しく機能するため、Brachylogは、説明に従った他の出力ではなく、必要な出力を選択します。


5

PowerShell、89 87 66バイト

@AdmBorkBorkのおかげで-2バイト

param($a)0..($d=$a.Length-1)|%{$b+=,-join$a[0..$_]};$b+$b[--$d..0]

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

以前は指定どおりに機能しませんでした、ごめんなさい!私はそれを編集し、いくつかのバイトを削ることもできました。


最後にカップルを保存する--$d代わりにでき($d-1)ます。
AdmBorkBork

@AdmBorkBorkありがとう。
ガブリエルミルズ

残念ながら、これは単一文字の入力では機能しません。
AdmBorkBork





4

SNOBOL4(CSNOBOL4)、118バイト

	N =INPUT
	L =1
1	X =LT(X,SIZE(N)) X + 1	:F(D)
O	N ARB . OUTPUT POS(X)	:($L)
D	X =GT(X) X - 1	:F(END)
	L ='D'	:(O)
END

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

SNOBOLのこの実装にはバグがあるようです。ラベルDをラベルに置き換えよう2とするとエラーが発生しますが、Vanilla SNOBOLのマニュアルには次のように記載されています(強調を追加)

ラベルが存在する場合は、行の最初の文字で始まる必要があります。ラベルはステートメントの名前を提供し、任意のステートメントのGOTOフィールドから制御を移すためのターゲットとして機能します。ラベルは文字または数字で始まり、オプションで任意の文字列が後に続く必要があります。ラベルフィールドは、空白文字、タブ、またはセミコロンで終了します。行の最初の文字が空白またはタブの場合、ラベルフィールドはありません。

私の推測では、CSNOBOLインタープリターは整数で始まる単一のラベルのみをサポートしています。


4

APL + WIN、31バイト

文字列の入力を求めるプロンプト:

 ⊃((⍳n),1↓⌽⍳n)↑¨(¯1+2×n←⍴s)⍴⊂s←⎕

説明:

(¯1+2×n←⍴s)⍴⊂s create a nested vector of the string of length =1+2x length of string

((⍳n),1↓⌽⍳n)↑¨ progressively select elements from each element of the nested vector 
              following the pattern 1  2 ...to n to n-1 ... 1

⊃ convert nested vector into a 2d array.


4

sed31 35バイト

:x
h
s/.\n.*\|.$//
/^$/{x;q}
H
G
bx

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

説明

ループの各反復の開始時に、パターンスペースは目的の出力の「中央チャンク」であり、各ループは短縮コピーを上部と下部に追加します。

:x                 
h                  Copy the current chunk to hold space
s/.\n.*\|.$//      Remove the last letter of the first line, and all other lines (if there are any)
/^$/{x;q}          If pattern space is empty we're done; output hold space
H                  Add the shortened line to the end of hold space
G                  and add the new hold space to pattern space.
bx                 

1
良いものですが、中央の行(完全な元の入力)は3回出力されるようです。少なくともGNUではsed。TIOでも同じです。どのsed実装を使用し、どのように入力を渡しますか?(ところで、s/.\n.*\|.$//それを修正するために置換を変更します。)
manatwork

2
ああ、あなたは正しい。私のsed実装(GNUバージョン4.2.1を使用)の問題ではありませんが、バグに気づきませんでした。私は他のいくつかの修正を試しましたが、4バイト未満しか追加されないものが見つからないため、修正を採用しています。ありがとうございます。
ソフィア・レヒナー

4

パイソン2131の 100 84バイト

コードゴルフに関する私の最初の答え!

@ SriotchilismO'Zaicのおかげで全体で-47バイト

a,b=[],len(x)
for i in range(2*b-1):
 if i<b:a+=x[i]
 else:a=a[:-1]
 print''.join(a)

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


1
PCGへようこそ!ツアー行動規範を必ずお読みください。良い解決策!
akozi

2
Python ;では、インデントを回避するために改行の代わりにs を使用できます。また、間にスペースは必要ありませんprintし、''
小麦ウィザード

@ SriotchilismO'Zaicのヒントをありがとう、本当にバイト数を減らすのに役立ちました!
ヨニマッツ

2
そして、あなたが作る場合は、1つの最後の事は、a文字列ではなくリストを、あなたは、もはや必要ありませんjoinすべてで、あなただけのことができますprint a
ウィートウィザード

4
入力はであると仮定しますが、無効です。完全なプログラムまたは関数である必要がありますx
ASCIIのみ

4

J、12バイト

]\,[:}.@|.]\

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

まだAdámよりも1バイト長い

K(oK)12 11バイト

ngnのおかげで-1バイト

{x,1_|x}@,\

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


2
私はマスターアウトゴルフしましたか?
アダム

@Adám私はJマスターには程遠い:)ここよりも多くのJコーダーがいる。
ガレンイワノフ

1
oKの場合は-1バイト:{x,1_|x}@,\
ngn

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