İşaretçiler, işaretçiler, işaretçiler!


46

Giriş

Java gibi bazı dillerin hata çıktılarında , programcıya hatanın tam olarak nerede yanlış gittiği hakkında bir fikir vermek için bir işaretçi gösterilir.

Bu örneği Ideone'da ele alalım:

Main.java:12: error: ';' expected
    Invalid Java!
                ^

Şapka, geçersiz kodun nerede olduğunu gösterir.

Meydan okuma

Buradaki zorluk ise: Verilen sayı N ve dize S , üzerinde bir işaretçi yerleştirmek N içinde inci karakter S .

Örnekler

Giriş :2, "Lorem ipsum, dollar sit amet."

Çıktı :

Lorem ipsum, dollar sit amet.
 ^

kurallar

  • Giriş STDIN veya fonksiyon parametreleri ile alınır
  • Çıktı konsola yazdırılır veya returned
  • Çıktıda yeni satırları, boşlukları vb. İzlemeye izin verilir
  • İşaretçi karakter olmalıdır bir olmak ^ şapka ve yeni bir satırda olmalıdır.
  • Bu kod golf, bu yüzden en kısa cevap kazanır. İyi şanslar!

16
Bunun son derece basit bir sorun olduğunu hissediyorum, bu yüzden aşırı iyi alınacağından emin değilim. Sanal alanı bir kez denedikten sonra denemek isteyebilirsiniz .
FryAmTheEggman

6
Bunun yapılmış olabilir düşünüyorum biraz doğru pozisyon (lar) bir yeni satır, boşluklar ve kırat eklemek zorunda olduğunu, girdi birden fazla satır olsaydı daha ilginç. Dürüst olmak gerekirse, teknik gerçekten tek bir satır olacağını söylemez ama bence bunu şimdi uygulamanın bunu birkaç örnek geçersiz kılar, çünkü bunu gösteren hiçbir örnek yok.
Geobits,

3
Dediğim gibi, kedi muhtemelen bu çantada. Geçerli cevaplar gönderildikten sonra kural değişiklikleri genellikle iyi sonuç vermez. Yaşa ve öğren;)
Geobits 3

1
@SohamChowdhury Sadece kasıtlı olduğunu iddia edeceğim;) Düzeltmemi ister misiniz?
monkeyonkeyboard 10:15

9
Bu çok basit olsa da, ilk zorluk için kesinlikle iyi iş çıkardınız! + 16 / -0 oy, 1.300 görüntülenme ve 28 cevabın var (bu yazı itibariyle) ve Sıcak Ağ Soruları listesini yaptın. İyi iş!
Alex A.

Yanıtlar:


36

C 33

Sadece bir fonksiyona izin verilirse, o zaman bile c rekabet edebilir.

(Kayıt için, 2 byte @ Cool Guy'a thx kaydetti. Mt thx yorum beklenmedik bir şekilde buharlaştırıldı.)

1 karakter daha kaydedildi thx @Mig

f(a,c){printf("%s\n%*c",a,c,94);}

19
C her zaman rekabet edebilir, her zaman kazanamaz. ;)
Alex A.

3
@AlexA. <shrug> bana kazanıyor gibi görünüyor ;-)
Digital Trauma,

3
1 karakter kazanın:f(a,c){printf("%s\n%*c",a,c,94);}
Michael M.

Eğer alaycı bir insan olsaydım, bir golf dilinde en kısa cevabın hala 4 katı kadar olduğunu söyleyebilirim. Bu her zamanki gibi işle ilgili. ;) Yine de zekice. Sanırım daha *önce format dizesindeki seçeneği görmüştüm , ancak tamamen unutmuştum. Gelecekte bazı sanat meseleleri için kullanışlı olabilir.
Reto Koradi

35

Brainf * ck - 133 bayt

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

Girdiyi [0-9]{2}.*örneğin "02 Merhaba dünya !!!" olarak bekliyor. üretmek

Selam Dünya!!!
 ^

Programlama Bulmacaları ve Code Golf'a Hoş Geldiniz! Bu harika bir ilk yazı, güzel iş! : D
Alex A.

Sorun şu ki, kimse bunun bile geçerli bir kod olup olmadığını bilmiyor, problemi
Simon

Evet, burada birer birer hata olduğunu düşünüyorum. Şapka e, örnekte olduğu gibi olmalıdır. 1 byte pahasına bir -ön ekleyerek bu düzeltilebilir[->.<]
FryAmTheEggman

@FryAmTheEggman haklısın - düzenlemeye bakın. Aslında şimdi olduğu gibi e'nin altındaydım, ancak farklı yazı tiplerine sahip iki IDE kullanarak kafam karıştı.
sudo rm -rf slash

25

IA-32 makine kodu, 24 bayt

HexDump:

66 b8 5e 00 42 38 22 75 fb 66 c7 02 0d 0a 42 42
c6 02 20 e2 fa 89 02 c3

fastcallDizeyi yerinde güncelleyen bir işlevdir (MS kurallarını kullanarak ):

__declspec(naked) void __fastcall carrot(int n, char* s)

Montaj kodu:

    mov ax, '^'; // ah = 0, al = '^'

mystrlen:
    inc edx;
    cmp [edx], ah;
    jne mystrlen;

    mov word ptr [edx], '\r\n'; // append a newline
    inc edx;

mymemset:
    inc edx;
    mov byte ptr [edx], ' ';
    loop mymemset;

    mov [edx], eax; // append a caret and terminate the string
    ret;

WORDBirkaç yerde -boyutlu (16 bit) veri kullanır . Bu, 32 bit kodunda bir ceza (1 bayt öneki) içerir, ancak kodu yine de daha küçük yapar - 32 bit veri kullanmak iki sıfır baytı koda koyar!

Sonunda, 2 bayt ( eax) yerine 4 bayt ( ) yazar ax- kod bu şekilde daha küçüktür ve dize sonlandırıldıktan sonra 2 fazla önemsiz bayt gider, bu nedenle kimse fark etmez.

Kullanımı:

int main()
{
    char s[100] = "Lorem ipsum, euro sit amet.";
    carrot(2, s); // credit to Digital Trauma for the name
    puts(s);
}

1
Talimat 66 b8 5e 00hamle 0x5eiçin al, değil ah, ve sıfıra ahyerine almontaj kodunda yorumunuz yanıltıcıdır yüzden.
Ruslan

@Ruslan Teşekkürler! Sabit. Bu önceki bir sürümden kalanıydı.
anatolyg

Neden nakedorada? Ve neden ilk gördüğüm şey bu?
Caird coinheringaahing

nakedÖne koymaya karar veren Microsoft : msdn.microsoft.com/en-us/library/h5w10wxs.aspx
anatolyg

20

Pyth , 8

zp\^*tQd

Bu çözüm artık işe pyaramıyor , çünkü dil adıyla bağlantı kurduğumdan sonraki taahhüdün ariteyi değiştirmesi gerekiyordu. Pyth'ta bugün hala çalışan benzer bir skor elde etmenin başka yolları da var zp+*dQ\^.

Dize tırnak gerekiyorsa v, kodun başına ekleme çalışır. Virgülle ayrılması gerekiyorsa, 10 bayta kadar çıkar:

eQp\^*dthQ

Bence bu şimdiye kadarki en kısa olan. Aferin.
monkeyonkeyboard

Algoritma bana yanlış geliyor, ^her zaman ilk karakter altında olacağını düşünüyorum . Bu arada, giriş parametreleri çevrimiçi tercümana yanlış sırayla verilir (bu nedenle çalıştırılamaz).
Jim

1
@Jim Bu cevap, paritenin 1 olduğu eski bir pyth sürümü kullandı . Şimdi z+*dQ\^daha kısa bir puan için yapabilir ancak izleyen bir yeni satır ile veya kaldırmak için pönce bir tane ekleyin +. Burada ne yapacağımdan emin değilim, insanlar cevabın bu versiyonunu yenilediğinden, üzerinde çalıştığı sürümü bulmaya çalışacağımı düşünüyorum.
FryAmTheEggman

16

T-SQL, 90

Oldukça basit bir soru olsa da, bunları gerçekten iyi destekleme eğiliminde olmayan ya da bu konuda iyi golf oynamayan dillerde denemek her zaman ilginçtir.

Bu cevabın neredeyse en uzun olması garantidir.

Bu, @n ve @ parametrelerini alan ve sonuçları sütun olarak döndüren SQL Server için satır içi tablo işlevi oluşturur. Satır başı önemlidir, aksi halde char (13) kullanmam gerekir.

CREATE FUNCTION G(@N INT,@ VARCHAR(MAX))RETURNS TABLE RETURN SELECT @+'
'+SPACE(@n-1)+'^'R

Aşağıdaki şekilde kullanılır

SELECT R 
FROM (VALUES
    (1,'This is test 1'),
    (2,'This is test 2'),
    (3,'This is test 3'),
    (4,'This is test 4'),
    (5,'This is test 5')
    )T(n,S)
    CROSS APPLY G(n,S)

Ve döner

R
---------------
This is test 1
^
This is test 2
 ^
This is test 3
  ^
This is test 4
   ^
This is test 5
    ^

Gerçekten golf
oynamak

14

Python, 27

lambda n,s:s+'\n%%%dc'%n%94

Bu, iki dize formatı seviyesi kullanır.

Ve işte, kısmen feersum'un cevabından çalınan 25 baytlık bir çözüm (argüman sırası tersine çevrildiğinde):

lambda*p:'%s\n%%%dc'%p%94

12

Bash, 27

printf %s\\n%$[$1-1]s^ "$2"

Çıktı

$ ./carrot.sh 2 "Lorem ipsum, dollar sit amet."
Lorem ipsum, dollar sit amet.
 ^$ 

Havuç? Ayrıca, sonunda dolar nedir?
Scimonster

7
Dolar kabuğun istemi gibi görünüyor.
M.Herzkamp

3
@Scimonster Havuç benim bir şakaydı , soruyu değiştirdim . Ve evet, en $sonunda kabuk istemi. Soru, takip eden yeni satırlara izin verildiğini ancak gerekli olduklarını söylemediğini belirtir.
Dijital Travma,


10

sed, 16

2y/1/ /;2s/ $/^/

Bu, bu meta cevabının bir test durumudur . Özellikle, N sayısının unary olarak girilmesini talep ediyorum . Örneğin, pozisyon 2'deki şapka için, N'nin girişi olacaktır 11. Ayrıca hangi S ve N sırasının olması gerektiği de tam olarak belirtilmemiştir , bu yüzden burada S önce gelir, ardından STDIN aracılığıyla yeni bir satırda unary N izlenir .

Çıktı:

$ { echo "Lorem ipsum, dollar sit amet."; echo 11; } | sed '2y/1/ /;2s/ $/^/'
Lorem ipsum, dollar sit amet.
 ^
$

1
2y/1/ /;2s/ $/^/
Manatwork

@ manatwork İyi arama!
Dijital Travma,

9

JavaScript (ES6): 63 62 56 52 32 bayt

Kod boyutunu büyük ölçüde düşürdüğü için nderscore'a teşekkürler.

p=(a,b)=>b+`\n${' '.repeat(a)}^`

Daha fazla tarayıcıda çalışan sürüm (47 bayt):

p=function(a,b){return b+`\n${' '.repeat(a)}^`}

1. Soru 1 tabanlı indeksleme kullanıyor, bu yüzden ihtiyacınız var Array(a-1). 2. Adsız işleve varsayılan olarak izin verilir, bu yüzden gerek yok point=. 3. ES6 sürümü için, deyimden returnve ayraçlardan kurtulabilirsiniz . Sadece kullan (a,b)=>b+"\n"+Array(a-1).join(" ")+" ^".
Dennis,

1
33 bayt: ( \ngerçek bir yeni p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
satırla

@dennis İndeksleme benim için mükemmel çalışıyor: i.stack.imgur.com/Tdejc.png
adroitwhiz 10:15 te

@Dennis Array(1).join(' '):) boş bir dize sonuçları
nderscore

@nderscore Kod pasajında ​​satır kopmasına neden olmadan gerçek bir yeni satır kullanmanın bir yolunu bulamıyorum ve endeksleme verilen örneği izliyor: i.stack.imgur.com/Tdejc.png
adroitwhiz

7

CJam, 9 bayt

q~N@(S*'^

Çevrimiçi deneyin.

Nasıl çalışır

q~  e# Read the input from STDIN and interpret it.
    e# This pushes the integer and the string on the stack.
N@  e# Push a linefeed an rotate the integer on top of it.
(S* e# Subtract 1 and push a string consisting of that many spaces.
'^  e# Push a caret.

6

Python, 29

İşte 29'da yapmanın daha eğlenceli bir yolu:

lambda*p:'%s\n%*s'%(p+('^',))

Örnek kullanım:

>>> f=lambda*p:'%s\n%*s'%(p+('^',))
>>> print f('lorem',5)
lorem
    ^

5

TI-BASIC, 10 (?) Bayt

Disp Ans
Output(3,N,"^

Giriş, N değişkeninde, soru sorulduğunda verilir, ancak var S harfini bir dize olarak kullanamazsınız. Bunun yerine, o kadar OP örnek çalıştırmak için, Ans dize girdi alır: 2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>.

Her kolon sınırlı bölüm teknik olarak ayrı bir ifade olduğundan, muhtemelen sayılmadığını biliyorum; işte ( ) olarak girdi alan 46 baytlık bir programN "S"2 "Lorem ipsum, dollar sit amet."

Input Str1
2+inString(Str1," 
//^there's a space after the quote
Disp sub(Str1,Ans,length(Str1)-Ans
Output(4,expr(sub(Str1,1,1)),"^

Bunların her ikisi de, ekranın çalıştırılmadan önce temizlendiğini varsayar.


Sayı için Input ve dize için Ans girişini alarak daha iyi olurdu.
lirtosiast

Bunlardan ilki, birleştirilmiş program adı, ödev ve dizginin 16 karakterden uzun olması durumunda çalışmaz.
lirtosiast

@ThomasKwa 26, aslında, bir renk hesaplayıcım olduğu için: P Girilen kısmın üzerine yazılan kısmını 'çalışıyor' olarak sayarsanız, teknik olarak işe yarar.
MI Wright,

İlki, eğer bir ClrHome eklerseniz işe yarar: Giriş N, çünkü G / Ç yöntemlerini karıştırmak için metada geçerli oylama +7'dır.
lirtosiast 12:15 te

5

dc, 19

?pr256r^255/32*62+P

Giriş STDIN'den. dcdizeler makro tanımlarıdır ve içinde bulunurlar [ ]. Boşluk dizisi, bir baz 256 bayt akışı olarak ifade edildiğinde ihtiyaç duyduğumuz dizeye verilen sayı hesaplanarak üretilir. Hesaplama ((n ^ 256) / 255) * 32). Bu verir n(ASCII karakter 32) boşluk, ama biz gerek n-1izledi ^biz sadece son taban 256 haneye 62 eklemek, böylece.

Çıktı

$ dc -e '?pr256r^255/32*62+P' <<< "2 [Lorem ipsum, dollar sit amet.]"
Lorem ipsum, dollar sit amet.
 ^$

4

C, 59 57 47 bayt

f(a,c){for(puts(a);--c;putchar(32));puts("^");}

Oldukça basit. Ungolfed versiyonu:

f(char* a,int c){
    puts(a);        //Print the string first

    for(;--c;)      //Until number-1 is not 0
        putchar(32);//Print a space
    puts("^");      //Print a caret
}

Burada test edin 10 byte tasarruf
için @anatolyg sayesinde !


Döngünün parantez içine alınması puts(a)ve putchar(32)içine alınması daha güzel for- orada tam olarak 2 boş yer var! Ayrıca, türünü beyan etmeniz ave c- sadece intonlar için zımni kullanın - yapmazsanız işe yarayacağını sanmıyorum #include <stdio.h>.
anatolyg

@anatolyg, Teşekkürler! Türleri atlamanın işe yarayacağını düşünmemiştim, ama benim için sürprizdi.
Spikatrix

4

C # 55

Bir fonksiyon, benim C cevabına benzer bir kavram, fakat bu sefer dönüş, çıktıdan daha kısa.

string f(string a,int b){return a+'\n'+"^".PadLeft(b);}

4

SAS, 35 bayt

%macro a(n,s);put &s/@&n."^";%mend;

Bu, çıplak bir işlevin SAS eşdeğeridir; onu çağırmak için veri basamağını eklemek (onu aramak için C ana işlevine eşdeğer) biraz daha fazla olurdu (9 bayt daha - Ty Alex), ancak bunun bu amaç için gerekli olmadığını düşünüyorum. Nasıl denirdi:

data;
%a(3,"My String");
run;

Yalnızca makro uygulaması vardır, ancak n = 1'de geçersiz parametrelerle ilgili bir uyarı vermesine izin verseniz bile, çok daha uzundur.

Önceden tanımlanmış parametreleri kullanabilseydik, SAS nispeten kısa olurdu, bu da kesinlikle kısa olması amaçlanmayan bir dil için nadirdi.


Bir veri kümesinin girdi kaynağı olmasına izin verilirse, SAS'ta 'nasıl yapacağınız' (veya% let ifadesiyle) ancak büyük olasılıkla izin verilmezse, bu daha kısadır ( 27 bayt , aslında 25 olabilir Veri setini çalıştırmadan hemen önce oluşturulduğunu garanti ettiyseniz [o zaman kullanabileceğiniz gibi set;]):

(önceden var olan veri kümesi)

data b;
  n=3;
  s="My String";
run;

(gerçek kod)

data;set b;put s/@n"^";run;

SO'nun yerleşik SAS uzmanını PPCG'de görmek güzel. :)
Alex A.

DM komut dosyası yazmayı bilen eski zamanlayıcılardan bazılarının bu skoru en iyi şekilde alabildiğinden eminim ... Ve cmdmac becerilerim berbat.
Joe,

DM'nin var olduğunu bile her zaman unutuyorum ve cmdmac'ın ne olduğunu bile bilmiyorum! BTW, tüm veri adımı için bayt sayarken, gerek yok data a;, sadece data;2 bayt kazandıracak şekilde yapabilirsiniz. Ama dediğin gibi, bu amaç için zaten gerekli değil.
Alex A.

Evet, benim SAS yerleşik reflekslerim sezgisel olarak kullanmama izin vermiyor sanırım :). Teşekkürler.
Joe,

Eski zamanlayıcılardan bahsetmişken, tüm SAS sezgisine meydan okuyarak ve eski tip bir makro kullanarak birkaç bayttan tasarruf edebileceğinizi düşünüyorum. Yine de parametreleri kabul edip edemediklerini hatırlayamıyorum.
Alex A.

3

Matlab / Octave, 41

@(n,s)sprintf('%s\n%s^',s,ones(1,n-1)+31)

Bu, dizeyi döndüren anonim bir işlevdir. Bu daha önce arayarak bastırabileceğiniz bir uyarı verir warning off.


Editör uyarısını mı kastediyorsunuz, yoksa gerçekten sizin için bir uyarı yazdırıyor mu? Ayrıca, 16 karakterle seni yenerim ;-) Ama benimki ans =biraz yazdırıyor , bu yüzden bunu düzelttikten sonra, sadece 10 karakterlik fark var.
Oebele

@Oebele bir uyarı yazdırır, ancak döndürülen dize etkilenmez.
FryAmTheEggman 10:15

3

K, 21 bayt

{y,"\n",1_|"^",x#" "}

Örnek:

ryan@DevPC-LX:~/golf/caret$ rlwrap k
K Console - Enter \ for help

  `0:{y,"\n",1_|"^",x#" "}[2;"Lorem ipsum, dollar sit amet."]
Lorem ipsum, dollar sit amet.
 ^  

Açıklama ( xsayı, ydizedir):

{                   }   enclosing function
               x#" "    repeat the space `x` times
           "^",         prepend the caret
          |             reverse the string to put the caret at the end
        1_              drop the extra space
   "\n",                prepend a newline
 y,                     prepend the text

3

R, 49 48 46

STDOUT çıkışına atanan adsız bir işlev olarak. İyileştirme için @ Flounderer'a teşekkürler.

şimdiki işareti n-1 olarak tanımlamak için strwrap komutunu kullanır. cat, boş dize yerine \ n ayırıcısını kullanır.

function(n,s)cat(s,strwrap('^',,n-1),sep='\n')

Test sürüşü

> f=function(n,s)cat(s,strwrap('^',,n-1),sep='\n')
> f(29,'The caret should point here v hopefully')
The caret should point here v hopefully
                            ^
>

işlevi (n, x) cat (x, "\ n", rep ("", n-1), "^", sep = "") 48 karakterdir
Flounderer

@Flounderer Bunun için teşekkürler ... benim orijinal fikrim buna benzerdi, ama ben o kadar iyi
yapmadım

İki ilk boşluğa izin verilirse, bu işe function(n,x)cat(" ",x,"\n",rep("",n),"^")
Flounderer

@ Flounderer sanmıyorum. strwrap'ın bazı olasılıkları da var ama muhtemelen daha uzun sürecek.
MickyT

1
Bu iyi! strwrapFonksiyonu daha önce hiç görmedim . Ne yaptığını söylemenin basit bir yolu var mı? Belgelerden çözemiyorum.
Flounderer

3

Python3, 38 bayt

def f(s,i):return s+'\n'+' '*~-i+'^'

# OR 

def f(s,i):print(s+'\n'+' '*~-i+'^')

Burada test edin 2 byte tasarruf
için @Dennis teşekkürler !


(i-1)->~-i
Dennis,

Bit işlemleri ve matematik ile zayıfım .... Yine de teşekkürler! :-D
Spikatrix

2

Julia, 27 bayt

(n,s)->s*"\n"*" "^(n-1)*"^"

Bu, bir tamsayı ve dizgiyi girdi olarak kabul eden ve bir dize döndüren adsız bir işlev oluşturur. Aramak için bir isim verin, örneğin f=(n,s)->....

Burada olan tek şey, yeni bir satır, n-1boşluk ve şapka ekliyoruz. Dize bitiştirme *ve ile dize tekrarı kullanılarak gerçekleştirilir ^.

Ungolfed:

function f(n, s)
    s * "\n" * " "^(n-1) * "^"
end

Örnek:

julia> println(f(2, "Lorem ipsum, dollar sit amet."))
Lorem ipsum, dollar sit amet.
 ^

2

PHP (CLI) - 42

<?=sprintf("%s\n%$argv[1]s",$argv[2],'^');

Komut satırından arayın:

php pointer.php 2 "Lorem ipsum, dollar sit amet."

Sadece şimdi farkettim. Fakat cevabınız aynen 2. seçeneğim gibi. Onu sana teklif ediyorum: <?printf("$S\n%{$P}s",'^');. Gerçek bir newline \nile değiştirin . Toplam 5 bayttır. Bu sadece PBP4.1 ve altında çalışır.
Ismael Miguel,

Vay canına, bu yorumda pek çok hata var ... 26 bayt uzunluğunda ve sadece PHP4.1'de çalıştığını söyledim. Ve bu senin!
Ismael Miguel,

2

Matlab, 25

Bu son derece arsız. Görünen o ki, yazdırılamayan karakterleri boşluk olarak yazdırır. Aşağıdaki kod ans, özellikleri karşılayan adlı bir işlevi tanımlar .

@(N,S)[S 10 ones(N-1) 94]

öyleyse bu işlevi şu şekilde çağırmak:

ans(2, 'Lorem ipsum, dollar sit amet.')

çıktı verir:

ans =

Lorem ipsum, dollar sit amet.
 ^

Her zaman ans =Matlab cevaplarındaki kısmı beğenmedim . Eğer bu bir problemse, 6 byte eklemeliyim ... ama Matlab cevaplarında hep böyle gördüm. Bu kodu çalıştırmanın değişkenin üzerine yazıldığını unutmayın, bu ansnedenle ikinci kez kullanmak istiyorsanız işlevi yeniden tanımlamanız gerekir!


Çok hoş! Bir vektöre dize koymak gibi bir şey olduğunu bilmiyordum. Benim anladığım şuydu, bu bir fonksiyon olduğu için, dizgeye anlamlı bir değer verir ve MATLAB'ın repl ortamının basımı gerçekleşir. yani eğer yaparsanız x=ans(2, 'asdf');bir ans = şey alamazsınız.
FryAmTheEggman 10:15

2

Codegolf'teki ilk atışım

Java, 133 65

String g(int i,String s){for(s+="\n";--i>0;)s+=" ";return s+"^";}

Eminim daha da azaltılabilir.

Eski kod

public void go(int i,String s){System.out.println(s);IntStream.range(1,i).forEach(j->System.out.print(" "));System.out.println("^");}

Bir yerde saklayabilir misin System.out?
Ismael Miguel,

2
Gerek yok public. Ve değişim IntStream.range(1,i).forEach(j->System.out.print(" "));içinfor(;--i>0;)System.out.print(" ");
Spikatrix

@ CoolGuy aha! bazen basit daha iyidir
pallavt 11:00

Buradaki noktalı virgül kullanmak için ilklendirmenin s+="\n"içine hareket edebilir misiniz for()?
lirtosiast 11:15

@ThomasKwa 1 byte az
pallavt

2

Swift, 41

Swift'in veya *üzerinde operatörü olmaması hayal kırıklığı yaratıyor .ArrayString

{$1+reduce(0..<$0,"\n",{$0.0+" "})+"^"}

Swift 2.0 için:{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
Kametrixom

1

SpecBAS - 34

1 INPUT n,s$: PRINT s$'TAB n-1;"^"

Kesme işareti PRINTyeni bir çizgiyi zorlar, ardından imleci doğru konuma getirmek için hareket ettirmeniz yeterlidir.



1

JavaScript - 52 bayt

İşte benim, oldukça basit.

function f(n,s){return s+"\n"+Array(n).join(" ")+"^"}

Kullanımı:

$ console.log(f(7, "Any string at all"))

Any string at all
      ^

Yedinci karaktere işaret eder.


Güzel tasarruf Scimonster O_O
Florrie

1
Gibi yazabilirsiniz alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^"). Ve 2 bayt kurtarıyorsunuz. Ayrıca, çalışan kodu göstermek için bir stasksnippet haline getirebilirsiniz. Bu dizgenin önce gelmesini bekler, sonra pozisyonu
Ismael Miguel 19

1

Perl 5, 31

sub{"$_[0]
"." "x($_[1]-1)."^"}

2-3 karakter kaydedebilirsiniz. Son yeni satırı gerekmedikçe bırakın, ardından ilk yeni satırı değişmez bir yeni satıra değiştirin. (Perl çok satırlı dizelerle tamamdır)
Bay Llama

@ Mr.Llama teşekkürler, bunlar iyi.
Ocaklar
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.