Bunu yapmak çok zaman aldı, pls gibi. (YouTube Yorumları # 1)


84

Durun ..... bu trolling değil.


Arka fon

Bugünlerde YouTube'da, yorum bölümleri şu kalıplarla doludur:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

nerede Stringsadece bir yer tutucudur ve herhangi bir karakter kombinasyonunu ifade eder. Bu kalıplara genellikle bir It took me a lot of time to make this, pls likeşey veya bir şey eşlik eder ve genellikle OP bir dizi beğeniyi bir araya getirir.


Görev

Büyüleyici golf becerilerinizle PPCG'de üst düzey oy biriktirme kabiliyetine sahip olsanız da, YouTube yorum bölümlerinde esprili açıklamalar yapmak ya da memlere gönderme yapmak için kesinlikle en iyi seçenek değilsiniz. Bu nedenle, kasıtlı düşünce ile yapılan yapıcı yorumlarınız YouTube'da 'hiç' beğenilmeyecek kadar azdır. Bunun değişmesini istiyorsun. Bu yüzden, nihai hırsınıza ulaşmak için yukarıda belirtilen klişe kalıplarını oluşturmaya başvuruyorsunuz, ancak bunları elle yazmaya çalışmakla zaman kaybetmeden.

Basitçe söylemek gerekirse, göreviniz, aşağıdaki kalıba uymak için yeni bir satırla sınırlandırılmış bir dize, dize sve çıktı 2*s.length - 1alt dizelerini almaktır s:

( s= "Merhaba" için)

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Giriş

Tek bir dize s. Topluluğun giriş varsayılanları uygulanır. Giriş dizesinin yalnızca yazdırılabilir ASCII karakterleri içereceğini varsayabilirsiniz.


Çıktı

Yukarıda açıklandığı gibi uygun bir desen oluşturan, yeni bir çizgiyle ayrılmış birkaç satır. Topluluğun çıktı varsayılanları uygulanır. Çıktıda boş bırakma ve boş bırakma (boşluk veya boşluk gibi görülemeyen karakter veya karakter içermeyen) satırlara izin verilir.


Test durumu

Çok kelimeli bir test durumu:

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

Yukarıdaki test senaryosunun çıktısının biçiminde belirgin çarpıtmalar olduğunu unutmayın (örneğin, ikinci satır ve çıktının üçüncü satırı aynı görünür). Çünkü izleyen boşlukları göremiyoruz. Programınızın bu bozulmaları düzeltmeyi denememesi GEREKİR.


Kazanan Kriter

Bu , yani her dilde bayt cinsinden en kısa kod kazanır!


19
Gelecekte YouTube hakkında daha fazla sayıda yorumla ilgili zorluk çıkarmayı planlıyorum; bu yüzden YouTube Comments #1başlıkta.
Arjun

1
Bir dizi satırı döndürmeye izin var mı?
Biri

2
Girdiyi bir karakter dizisi olarak alıp bir dizi karakter dizisi döndürür mü?
Shaggy


3
Giriş olabilir ""mi? Peki ya tek karakter gibi "H"? Eğer öyleyse, her iki durumda da çıktı ne olmalıdır?
AdmBorkBork

Yanıtlar:


103

brainfuck , 32 bayt

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

Çevrimiçi deneyin!

Aynı döngü, desenin her iki yarısı için de kullanılır.

Açıklama:

,             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
Bu sadece düz müthiş. Beyninde bir şeyler yapmaya çalışıyordum ama bu kadar 10 kez çıktı ve hala düzgün çalışmadı.
ElPedro

34
Brainfuck'ın cevabının aslında rekabetçi bir şekilde puan aldığı bir meydan okuma göreceğimi asla düşünmedim, harika iş!
Question Marks,

54

JavaScript (ES6), 36 bayt

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

Çevrimiçi deneyin!

Yorumlananlar

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
çok güzel bir cevap: D
lois6b

10
@MartinBarker Windows'ta Not Defteri ++ ile varsayılan Satır Bitişi seçiliyim Unix (LF). Sorun bir kez ve herkes için çözüldü. :)
Arnauld

3
Korku veren! JS'ye yenileri olanlar için bunun için bir açıklama yazabilir misiniz?
Akhoy

3
@Akhoy Yorumlanmış bir sürüm ekledim.
Arnauld

3
Teşekkür ederim. Şimdi çok daha net.
Akhoy

47

05AB1E (eski) ,  4  3 bayt

Geçti &nbsp;4&nbsp;artık 4 değil :)

η.∊

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

η     # 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'nin yeni sürümünde, ve »sonra açık olması gerekir η, bu yüzden byte'ı kurtarmak için burada 05AB1E'nin eski sürümünü kullanıyorum.


7
Hmm, bu \xce\xb7\x2e\xe2\x88\x8a
UTF8’de

10
@ rubenvb UTF-8'de gerçekten daha fazlası var. 05AB1E, diğer cevaplarda kullanılan bazı programlama dillerinde olduğu gibi (örneğin Jelly; Japt; Kömür), kendi kaynak kodunu kullanır ( 05AB1E'de CP- 1252'dir). tek bayt.
Kevin Cruijssen

Tamam, yeterince adil :).
rubenvb

@KevinCruijssen PHP, bu karakterlerin CP-1252 için geçersiz olduğunu düşünüyor, ancak sadece PHP hatası olabilir: 3v4l.org/UC1QE
hanshenrik

7
@ hanshenrik Güzel bir soru. Gerçekten de CP-1252 değil, aslında kullandığı özel kodlama olan 05AB1E kodlaması . Bu kodun onaltılı değeri bayt cinsindendir 08 2e 17ve --osabiebayrakla doğrulayabilirsiniz : tio.run/…
Adnan

21

IBM PC DOS, 8088 derlemesi,  44  43

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

unassembled:

    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,'$'

açıklama

2 * input length - 1Her satır için döngü . DOS API'sinin string display işlevi ( INT 21H,9) $, ekrana sonlandırılmış bir dize yazar , bu yüzden döngü boyunca her seferinde gösterilecek olan son karakterden sonra karakter dizge sonu sonlandırıcı ile değiştirilir.

Döngü sayacı dize uzunluğu ile karşılaştırılır ve eğer büyükse (çıktının yükselen kısmı anlamına gelir) dize / takas konumu artırılır, aksi takdirde azalır (aslında -1-1+1bir if / else dallanma yapısından daha az bayt olan).

Bağımsız çalıştırılabilir program, girdi dizesini komut satırından alır.

Çıktı

enter image description here

İndir YT2.COM (43 bayt)


1
Çoğu DOS çeşidi bir COM dosyası yüklendiğinde SI = 100h değerine sahiptir. Bu, ilk talimatı değiştirerek size bir bayt kazandırabilir SHR SI, 1.
gastropner

@gastropner çok zeki! Orijinalin DOS 1.0 üzerinde çalışmayacağına, çünkü CH'nin 0 olduğu sayılır (başlangıçta +2 bayta mal olur, sadece DOS 1 için buna değmez). Yeni sürümle güncellendi!
640KB

Terminali her açtığınızda tarih girmek zorunda mısınız?
user14492

1
@ user14492 ha, hayır! DOS bölümünü ekrandan kesmeyi unuttum!
640KB

19

Python 2 , 60 52 bayt

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

Çevrimiçi deneyin!

Python 3.8 (yayın öncesi) , 50 bayt

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

Çevrimiçi deneyin!


2
Bu, gelecekteki 3.8 özelliğine mi bağlı? Hangi özellik?
alexis,

7
@alexis Bu kullanarak atama ekspresyonunu : x:=s[:n].
Arnauld

1
Ah, şimdi görüyorum teşekkürler :-) Daha önce bekliyorum, bu özelliği daha önce okudum. Hala C günlerimden özledim ...
alexis

1
Bunlar çıktıyı basmıyorlar. Sadece diziyi yapıyorlar, değil mi?
Jaden Travnik

@JadenTravnik Python, etkileşimli olarak bir konsoldan çalışıyorsa, son ifade sonucunu otomatik olarak çoğaltır
Xeverous

18

MATL , 8 bayt

nZv"G@:)

Çevrimiçi deneyin!

Lütfen :)koddaki surat için bu yazı gibi bana yapmak için çok zaman aldı.

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 bayt

Anonim zımni önek işlevi. Boşluk dolgulu bir karakter matrisi döndürür.

[:(}:,|.)]\

Çevrimiçi deneyin!

]\ önek listesi

[:() Aşağıdaki işlevi bu listeye uygulayın

|. ters liste

, ile hazır

}: sınırlandırılmış (son öğe olmadan) listesi


18
[:(ve }:,|bak çok üzücü ...
Adam

Ama bu (}: süslü bıyığı olan mutlu bir insan
DonFusili

13

Perl 6 , 31 bayt

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

Çevrimiçi deneyin!

Bir dize alan ve satır listesini döndüren adsız kod bloğu.

Açıklama:

{                      }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
Bugünlerde bile Golf Perl'in en okunaklı yarışmacılar arasında olması komik.
counterclockwis

7
Ceasedtoturncounterclockwis Peki, bu Perl 6. Perl 5 cevabı hala okunamıyor
Jo King

12

Japt -R , 4 bayt

å+ ê

Bir dize kümülatif azalma.

@Shaggy sayesinde -1 bayt

Çevrimiçi deneyin!


Dize dahil edilmesi gereken "-R" hakkında şüpheci (onsuz çalışmaz)
Flying Thunder

3
@FlyingThunder Daha fazla şüpheci olmak :) burada görmek
Quintec

@ Quintec, bu tür yorumlardan kaçınmayı denemek için çözüm başlığımdaki bayrakları bu meta gönderiye bağlamaya çalıştım.
Shaggy

1
Oldukça kesin bir kongre <language> + -flagveya <language> -flag. Ayrıca,: | Ben birikimli, ben üzerine onu her gördüğünde atlanır bir şey yemin edildi azaltmak unuttum
ASCII sadece

@ ASCII-only Aynı, sadece hatırladım çünkü APL'de bunu nasıl çözeceğimi düşünüyordum ve “Japt'un bu yerleşimi olup olmadığını merak ediyorum” dedi. Ayrıca, <dil> kullanmamış mıydım -flag?
Quintec

11

Japt -R , 9 7 bayt

Shaggy sayesinde -2 bayt

Êõ@¯XÃê

Çevrimiçi deneyin!



1
@Shaggy oh bekle ... Ãbir şey
ASCII-sadece

Bu soru, en kısa sürede bir ödül almaya uygun olur olmaz yolunda bir 300 yedek daha.
Shaggy


1
@ Quintec, kümülatif, dizelerdeki çalışmaları da azaltır, böylece başlangıçta ayrılmanıza gerek kalmaz. Ayrıca kendin göndermeyi garanti etmek için yeterince farklı olduğunu söyleyebilirim.
Shaggy


10

Haskell, 52 50 44 bayt

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

Çevrimiçi deneyin!


Siteye Hoşgeldiniz. initskullanılmak üzere bir içe aktarma gerektirdiğinden, ekleyeceğiniz import Data.Listbenzer bir şey gerekir .
Buğday Sihirbazı

@ SriotchilismO'Zaic Bunun sayılması gerekip gerekmediğinden emin değildi. Eklendi, teşekkürler!
Joseph Sible

4
Ayrıca Haskell golf oynamak için sohbet odamız olduğunu da belirtmeliyim . Herhangi bir düşünce veya sorunuz varsa bu harika bir yer.
Buğday Sihirbazı

1
Tam olarak ne import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
yazacağım

9

R , 79 65 62 58 bayt

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

Çevrimiçi deneyin!

-14 Giuseppe'nin üstün fonksiyon bilgisi

-3 daha temiz indekslemeli

-4 Nick Kennedy ve Giuseppe'nin hamlesine teşekkürler scan vewrite

Döngülerden kaçınma (ve substr) güzeldir.


2
döngüler tamamen gereksizdir, aynen sapply- substringistediğinizi yapacak (ek olarak boş bir boş satırla) ve 65 bayt ! Buradan substringhoşlandığını görmeseydim kesinlikle düşünmezdim substr.
Giuseppe

1
Haha, iyi yakalar! Sanırım aynı iş için alternatif işlevler hakkında düzenlemelerinizden bu noktada başka bir yerde daha fazla şey öğrendim.
CriminallyVulgar

2
Haha, R'nin ince farklılıkları olan aptalca bir eş anlamlısı var. Ne zaman iş için en iyi aracı bildiğimi hissediyorum, tuhaf bir durumda biraz daha iyi başka bir şey buluyorum ...
Giuseppe

3
Peki ya çevrimiçi deneyin! scanve kullanarak write? Sadece 59 bayt!
Nick Kennedy

1
58 bayt @NickKennedy Değiştirmek eğer ""ile 1.
Giuseppe

7

Jöle , 5 4 bayt

@JonathanAllan ! -1 sayesinde !

¹ƤŒḄ

Çevrimiçi deneyin! Sanırım bu benim ikinci Jelly cevabım mı? Bunun optimal olup olmadığını bilmiyorum. Daha iyi olduğuna ikna oldum. Satır dizisini döndürür.

açıklama

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

@JonathanAllan tarafından önerilen bir başka yaklaşım, önekleri oluşturmanın başka bir yolu olan ;\ŒḄ( \) bitiştirmeyi ( ;) kümülatif olarak azaltan yöntemdir.


Bir dizi satır vermemize izin verilir, böylece Ykodun dışına çıkabilirsiniz (altbilgiyi ya ÇYda ÇŒṘtam bir programın örtük bir parçalama baskısından kaçınmak için kullanılır). Bir yan notta, bu ;\ŒḄaynı byte-count için de aynı şekilde uygulanır (aynı zamanda "blah"Jelly'in bunu bir karakter listesi olarak yorumladığı gibi argümanı iletebilirsiniz - sizinki aslında göreceğiniz gibi bir karakter listesidir) altbilgiyi yaparsanız ÇŒṘ)
Jonathan Allan

@JonathanAllan teşekkürler! çok ilginç :)
Conor O'Brien,

7

Python 3.8 (yayın öncesi) , 48 bayt

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

Çevrimiçi deneyin!

Kullanımları atama ifadeleri ile :=karşı önekleri bir listesini birikir ve daha sonra tekrar (ilk karakter olmadan), ters bitiştirmek sonucu kaydedin.

Python 2 , 51 bayt

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

Çevrimiçi deneyin!

Neredeyse aşağıdaki güzel 45-byte çözümümüz var, ancak iki kez orijinal dizgisine sahip ve bunu düzeltmenin kısa bir yolunu göremiyorum.

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

Çevrimiçi deneyin!


İstenilen çıktıyı elde etmek için yeni satır ekleyip yazdırmanıza gerek yok mu?
Jaden Travnik

Gibi bir şey print('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik Topluluk varsayılanları (bu zorluğun ardından gelir) programlara ek olarak işlevlere izin verir . Meydan yazarı, yorumlarında, varsayılan olarak izin verildiği şekilde birleştirme içindeki dizelerin bir listesini içeren TAMAM olduğunu söyledi; Ayrıca Python kuralları özetine bakın .
xnor

Huh. Tamam, işaret ettiğin için teşekkürler. Ben yeni ¯_ (ツ) _ /. Eğer durum buysa, işte rakip 45 baytlık bir çözüm:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@JadenTravnik Sorun değil, maalesef kuralların dağıtıldığı yer. Örnek olarak, izin verilmeyen bir pasaj var. Gibi giriş ve çıkış yapmak gerekiyor s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. En üstteki örneklere bakınız .
xnor

6

Kömür , 5 bayt

G^Lθθ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama: dolgulu bir çokgen çizer ^, kenarların sağ aşağı ve soldan aşağıya doğru olduğunu belirtir (çokgen daha sonra otomatik olarak kapanır), Lθbu tarafların uzunluğunu orijinal girişin uzunluğu olarak θbelirtir ve son da dolgu dizesini belirtir.


6

C # (Visual C # Etkileşimli Derleyici) , 123 109 94 84 74 bayt

Bir char dizi dizisini döndürebileceğimizi varsayalım (char dizisinin bir dize için geçerli bir temsil ve dize dizisinin birden fazla satır için geçerli bir temsil olabileceğine inanıyorum)

a=>new int[a.Length*2-1].Select((b,i)=>a.SkipLast(Math.Abs(a.Length-i-1)))

Çevrimiçi deneyin!



5

Brachylog (v2), 6 bayt

a₀ᶠ⊆.↔

Çevrimiçi deneyin!

İşlev gönderme, bir dizi diziyi döndürme. Gevşek dayalı @ Fatalize'nin cevabı kuruludur .

açıklama

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

Buradaki Tiebreak düzeni , bu akış düzeniyle kullanıldığında, mümkün olan en kısa sürede çıktısını tercih eden, verilen elemanları mümkün olduğu kadar erken yerleştirerek tiebroken ile ayarlanır . Mümkün olan en kısa çıktı, istediğimiz şeydir (yinelenen öneklere sahip olmanın mümkün olmaması nedeniyle) ve verilen öğeleri (yani önekleri) mümkün olduğunca erken yerleştirmek, bunları ilk yarıya (yuvarlatılmış) yerleştirir. çıktı. Onları aynı sıraya koymalarını istediğimiz göz önüne alındığında, Brachylog'a verdiğimiz tanım çok genel olsa bile tam olarak ihtiyaç duyduğumuz modeli elde ettik; Tiebreaks tam olarak doğru çalışır ve Brachylog'un açıklamaya uyan başka bir çıktı yerine istediğimiz çıktıyı seçmesine neden olur.


5

PowerShell, 89 87 66 bayt

@AdmBorkBork sayesinde -2 bayt

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

Çevrimiçi deneyin!

Aslında daha önce belirtildiği gibi çalışmadı, bunun için üzgünüm! Düzenledim ve ayrıca bazı baytları tıraş etmeyi de başardım.


Sonunda bir çift kaydetmek --$dyerine yapabilirsiniz ($d-1).
AdmBorkBork

@AdmBorkBork Teşekkürler.
Gabriel Mills

Bu ne yazık ki, tek karakter girişi için işe yaramaz.
AdmBorkBork


4

APL (Dyalog Unicode) , 9 bayt SBCS

Anonim zımni önek işlevi. Dizelerin listesini döndürür.

(⊢,1↓⌽),\

Çevrimiçi deneyin!

,\ öneklerin listesi (yaktı, kümülatif bitiştirme)

(… Bu ) fonksiyonu aşağıdaki listeye uygulayın:

 tersine çevrilmiş liste

1↓ ilk öğeyi bırak

, başa getirebilir

 değiştirilmemiş liste




4

SNOBOL4 (CSNOBOL4) , 118 bayt

	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

Çevrimiçi deneyin!

SNOBOL'un bu uygulamasında bir hata var gibi görünüyor; Vanilya SNOBOL el kitabında bunu belirtmekle Dbirlikte, etiketi etiket ile değiştirmeye çalışmak 2bir hataya neden oluyor

Bir etiket varsa, satırın ilk karakteriyle başlamalıdır. Etiketler, ifade için bir ad sağlar ve herhangi bir ifadenin GOTO alanından kontrolün aktarılması için hedef görevi görür. Etiketler isteğe bağlı olarak isteğe bağlı bir karakter dizisi tarafından takip edilen bir harf veya rakam ile başlamalıdır. Etiket alanı boş karakter, sekme veya noktalı virgül ile sonlandırılır. Bir satırın ilk karakteri boşsa veya sekme ise, etiket alanı yoktur.

Benim varsayımım, CSNOBOL yorumlayıcısının yalnızca bir tamsayı ile başlayan tek bir etiketi desteklemesidir.


4

APL + WIN, 31 bayt

Dize girişi için bilgi istemi:

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

Açıklama:

(¯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

F # (.NET Core) , 67 61 bayt

let l=s.Length
[1..l*2-1]|>Seq.map(fun i->s.[..l-abs(i-l)-1])

Çevrimiçi deneyin!

Giriş bir stringve çıkış birseq<string>

let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]80ish bayt için başka bir çözüm olabilir ... Araştırmaya değer olduğuna emin değilim.


4

sed , 31 35 bayt

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

Çevrimiçi deneyin!

açıklama

Döngünün her yinelemesinin başlangıcında, desen alanı istenen çıktının bir miktar "merkezi öbeği" dir ve her döngü üste ve alta kısaltılmış bir kopya ekler.

: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
Güzel olanı, ancak ortadaki çizgi (tam orijinal girdi) 3 kez çıktı gibi görünüyor. En azından GNU ile sed. TIO'da aynı. Hangi seduygulamayı kullanıyorsunuz ve girişi nasıl geçiyorsunuz? (BTW, s/.\n.*\|.$//düzeltmeyi değiştirenleri değiştiriyor .)
manatwork

2
Ah haklısın. Uygulamamda bir sorun değil sed(GNU sürüm 4.2.1 kullanarak), hatayı farketmedim. Bazı diğer düzeltmelerle oynadım ve dört bayttan daha az ekleyen hiçbir şey bulamadım bu yüzden düzeltmenizi benimsiyorum, teşekkür ederim.
Sophia Lechner

4

Python 2 , 131 100 84 bayt

Code Golf hakkındaki ilk cevabım!

@ SriotchilismO'Zaic sayesinde -47 bayt genel

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

Çevrimiçi deneyin!


1
PCG'ye Hoşgeldiniz! Turu ve davranış kurallarını mutlaka okuyun . Güzel çözüm!
akozi

2
;Python'da, girintiyi önlemek için newlines yerine s kullanabilirsiniz . Ayrıca printve arasındaki boşluklara da gerek yok''
Buğday Sihirbazı

SriotchilismO'Zaic @ ipuçları için teşekkürler, gerçekten bayt sayımı azaltmaya yardımcı oldu!
Yoni Matz

2
Ve son bir şey, abir listeden ziyade bir dize yaparsanız, artık joinhepsine ihtiyacınız olmaz ve sadece yapabilirsiniz print a.
Buğday Sihirbazı

4
Geçersiz, tam bir program ya da işlev olması gerekir, oysa girdi girişinde olduğunu varsayarsınız x.
ASCII-yalnızca

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.