Wprowadzenie
W wynikach błędów niektórych języków, takich jak Java, wyświetlany jest wskaźnik , który daje programiście pojęcie, gdzie dokładnie popełnił błąd.
Weź ten przykład na Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
Zauważ, że kursor pokazuje, gdzie jest nieprawidłowy kod?
Wyzwanie
Twoim wyzwaniem jest: dana liczba N i łańcuch S , umieść wskaźnik na N th znaków w S .
Przykłady
Wejście :2, "Lorem ipsum, dollar sit amet."
Wyjście :
Lorem ipsum, dollar sit amet.
^
Zasady
- Wejście jest odbierane przez STDIN lub parametry funkcji
- Dane wyjściowe są drukowane na konsoli lub
return
edytowane - Końcowe nowe wiersze, spacje itp. Są dozwolone w danych wyjściowych
- Znak wskaźnika musi być ^ daszkiem i musi znajdować się w nowej linii.
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź. Powodzenia!
Odpowiedzi:
C 33
Jeśli dozwolona jest tylko funkcja, nawet c może konkurować.
(Dla przypomnienia, 2 bajty zapisane dzięki @Cool Guy. Komentarz Mt dzięki niespodziewanie wyparował.)
Jeszcze 1 znak oszczędzony dzięki @Mig
źródło
f(a,c){printf("%s\n%*c",a,c,94);}
*
opcję w ciągu formatu, ale zupełnie o niej zapomniałem. Może się przydać w przypadku niektórych wyzwań związanych ze sztuką ascii w przyszłości.Brainf * ck - 133 bajty
Oczekuje danych wejściowych takich jak
[0-9]{2}.*
np. „02Hello world !!!” produkujeźródło
e
tym przykładem. Kosztem 1 bajtu można to naprawić, dodając-
przed[->.<]
Kod maszynowy IA-32, 24 bajty
Hexdump:
Jest to funkcja (wykorzystująca
fastcall
konwencję MS ), która aktualizuje ciąg w miejscu:Kod zestawu:
W
WORD
kilku miejscach wykorzystuje dane o rozmiarze (16 bitów). Ma to karę (przedrostek 1-bajtowy) w kodzie 32-bitowym, ale i tak zmniejsza kod - użycie danych 32-bitowych spowodowałoby umieszczenie dwóch zerowych bajtów w kodzie!Na koniec zapisuje 4 bajty (
eax
) zamiast 2 bajtów (ax
) - kod jest w ten sposób mniejszy, a 2 dodatkowe bajty śmieci przechodzą po zakończeniu łańcucha, więc nikt ich nie zauważa.Stosowanie:
źródło
66 b8 5e 00
przesuwa się0x5e
doal
, a nie doah
, a zero doah
zamiastal
, więc Twój komentarz w kodzie zestawu jest mylący.naked
tam jest I dlaczego to pierwsza rzecz, którą zobaczyłem?naked
pierwszym miejscu: msdn.microsoft.com/en-us/library/h5w10wxs.aspxPyth , 8
To rozwiązanie już nie działa, ponieważ zatwierdzenie po tym, z którym się połączyłem, gdy nazwa języka zmieniła się
p
na arity 1. Istnieje kilka innych sposobów na uzyskanie podobnego wyniku w Pyth, które nadal działają, na przykładzp+*dQ\^
.Jeśli ciąg wymaga cudzysłowu, dodawanie
v
na początku kodu działa. Jeśli musi być oddzielony przecinkami, idzie do 10 bajtów:źródło
^
zawsze będzie pod pierwszym znakiem. A tak na marginesie, parametry wejściowe są podawane tłumaczowi online w niewłaściwej kolejności (więc nie działa).p
istniał arity 1. To spowodowało, że pierwszy wiersz wydruku został wydrukowany jako pierwszy, a następnie daszek w następnym wierszu, a po nim spacje. Teraz możesz zrobićz+*dQ\^
dla krótszego wyniku, ale z końcowym znakiem nowej linii lub dodaćp
przed,+
aby go usunąć. Nie jestem pewien, co robić tutaj, ponieważ ludzie ocenili tę wersję odpowiedzi, myślę, że spróbuję znaleźć wersję, nad którą działała.T-SQL, 90
Chociaż jest to dość proste pytanie, zawsze interesujące jest wypróbowanie ich w językach, które tak naprawdę nie wspierają ich dobrze lub golfa w tej kwestii.
Ta odpowiedź jest prawie na pewno najdłuższa.
Tworzy to wbudowaną funkcję tabel dla SQL Server, która przyjmuje @n i @ jako parametry i zwraca wyniki jako kolumnę. Zwrot karetki jest znaczący, w przeciwnym razie musiałbym użyć char (13).
Jest używany w następujący sposób
I wraca
źródło
Python, 27
Wykorzystuje dwa poziomy formatowania ciągów.
A oto 25-bajtowe rozwiązanie częściowo skradzione z odpowiedzi feersum (z odwróconą kolejnością argumentów):
źródło
Bash, 27
Wynik
źródło
$
na końcu jest znak zachęty powłoki. Pytanie określa, że końcowe znaki nowej linii są dozwolone, ale nie mówi, że są konieczne.Python, 29
Łączy ciąg, nowy wiersz,
n-1
spacje i a^
.źródło
rjust
nie było tak długo ...sed, 16
To coś w rodzaju testu tej meta odpowiedzi . W szczególności wymagam, aby liczba N była wprowadzana jednostronnie. Np. Dla karetki w pozycji 2 wejściem dla N byłoby
11
. Również nie jest ściśle określone, która kolejność S i N powinna być, więc tutaj S jest pierwsze, a następnie jednoargumentowe N w nowej linii, wszystkie przez STDIN.Wynik:
źródło
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 bajtyDzięki nderscore za znaczne zmniejszenie rozmiaru kodu.
Wersja działająca w większej liczbie przeglądarek (47 bajtów):
źródło
Array(a-1)
. 2. Funkcje anonimowe są domyślnie dozwolone, więc nie potrzebujeszpoint=
. 3. W przypadku wersji ES6 możesz pozbyć sięreturn
instrukcji i nawiasów klamrowych. Po prostu użyj(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
na nowy wiersz)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
skutkuje pustym ciągiem :)CJam, 9 bajtów
Wypróbuj online.
Jak to działa
źródło
Python, 29
Oto zabawniejszy sposób na zrobienie tego w 29:
Przykładowe użycie:
źródło
TI-BASIC, 10 (?) Bajtów
Dane wejściowe podano w zmiennej N, jak pyta pytanie, ale nie można użyć litery var S jako łańcucha. W miejscu, że to trwa wejście ciąg z Ans, tak aby uruchomić przykład w PO:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Wiem jednak, że to chyba się nie liczy, ponieważ każdy segment rozdzielany dwukropkami jest technicznie odrębnym stwierdzeniem; oto 46-bajtowy program, który pobiera dane wejściowe jako
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Oba zakładają, że ekran został wyczyszczony przed uruchomieniem.
źródło
dc, 19
Dane wejściowe pochodzą ze STDIN.
dc
ciągi są definicjami makr i są zawarte w[
]
. Ciąg spacji jest generowany przez obliczenie liczby, która wyrażona jako podstawowy strumień 256 bajtów daje potrzebny ciąg. Obliczenia są następujące((n ^ 256) / 255) * 32)
. Daje ton
spacje (znak ASCII 32), alen-1
po nim^
musimy dodać, więc po prostu dodajemy 62 do ostatniej podstawowej 256 cyfry.Wynik
źródło
C,
595747 bajtówCałkiem proste. Wersja bez golfa:
Przetestuj tutaj
Dzięki @anatolyg za zapisanie 10 bajtów!
źródło
puts(a)
iputchar(32)
do nawiasów wfor
pętli - są tam dokładnie 2 pustych miejsc! Ponadto nie sądzę, że musisz zadeklarować typa
ic
- po prostu użyjint
dla nich ukrytego - zadziała, jeśli tego nie zrobisz#include <stdio.h>
.C # 55
Funkcja, koncepcja podobna do mojej odpowiedzi w języku C, ale ten czas powrotu jest krótszy niż wynik.
źródło
SAS, 35 bajtów
To jest odpowiednik nagiej funkcji SAS; dodanie kroku danych w celu jego wywołania (odpowiednik głównej funkcji C do wywołania go) byłoby nieco więcej (9 bajtów więcej - Ty Alex), ale myślę, że nie jest to konieczne w tym celu. Jak by to się nazywało:
Istnieje implementacja zawierająca tylko makra, ale jest znacznie dłuższa, nawet jeśli pozwalasz ostrzec ją o niepoprawnych parametrach na n = 1.
Gdybyśmy mogli użyć predefiniowanych parametrów, SAS byłby stosunkowo krótki w stosunku do tego, co jest rzadkością dla języka, który zdecydowanie nie jest krótki.
Jeśli zestaw danych może być źródłem danych wejściowych, tak właśnie zrobiłbyś to w SAS (lub za pomocą instrukcji% let), ale prawdopodobnie nie jest dozwolony, jest to nawet krótszy ( 27 bajtów , co w rzeczywistości mogłoby wynosić 25 jeśli masz pewność, że zestaw danych został zbudowany bezpośrednio przed uruchomieniem tego [jak możesz wtedy po prostu użyć
set;
]):(wcześniej istniejący zestaw danych)
(aktualny kod)
źródło
data a;
, możesz po prostu zrobić,data;
co pozwoli zaoszczędzić 2 bajty. Ale jak powiedziałeś, i tak nie jest to konieczne.Matlab / Octave, 41
Jest to anonimowa funkcja zwracająca ciąg. Powoduje to wyświetlenie ostrzeżenia, które można wyłączyć przez wcześniejsze wywołanie
warning off
.źródło
ans =
kawałek, więc po naprawieniu różnica wynosi tylko 10 znaków.K, 21 bajtów
Przykład:
Objaśnienie (
x
jest liczbą,y
jest łańcuchem):źródło
R,
494846Jako nienazwana funkcja, która wyświetla dane wyjściowe do STDOUT. Dzięki @Flounderer za ulepszenie.
używa teraz strwrap do identyfikacji karetki na n-1. cat używa separatora \ n zamiast pustego ciągu.
Testowe uruchomienie
źródło
function(n,x)cat(" ",x,"\n",rep("",n),"^")
i zapisuje kilka znakówstrwrap
funkcji. Czy istnieje prosty sposób powiedzenia, co robi? Nie mogę tego rozgryźć na podstawie dokumentacji.Python3,
3836 bajtówPrzetestuj tutaj
Dzięki @Dennis za zapisanie 2 bajtów!
źródło
(i-1)
->~-i
Julia, 27 bajtów
Spowoduje to utworzenie nienazwanej funkcji, która przyjmuje liczbę całkowitą i ciąg jako dane wejściowe i zwraca ciąg. Aby to nazwać, nadaj mu nazwę, np
f=(n,s)->...
.Wszystko, co się tutaj dzieje, polega na dodawaniu nowego wiersza,
n-1
spacji i karetki. Łączenie łańcuchów odbywa się za pomocą*
i powtarzania łańcuchów za pomocą^
.Nie golfowany:
Przykład:
źródło
PHP (CLI) - 42
Wywołaj to z wiersza poleceń:
źródło
<?printf("$S\n%{$P}s",'^');
. Wymienić\n
z rzeczywistym linią. Łącznie jest to 5 bajtów. Działa to tylko na PBP4.1 i niższych.Matlab, 25
Ten jest wyjątkowo bezczelny. Najwyraźniej wyświetla znaki niedrukowalne jako spacje. Poniższy kod definiuje funkcję o nazwie
ans
spełniającą specyfikację.więc wywołanie tej funkcji w ten sposób:
daje wynik:
Zawsze nie podoba mi się ta
ans =
część odpowiedzi Matlaba. Jeśli jest to problem, muszę dodać 6 bajtów ... ale zawsze widziałem to w odpowiedziach Matlaba. Zauważ, że uruchomienie tego kodu zastępuje zmiennąans
, więc musisz ponownie zdefiniować funkcję, jeśli chcesz użyć jej po raz drugi!źródło
x=ans(2, 'asdf');
, nie dostaniesz ans = rzecz.Mój pierwszy strzał w codegolf
Java,
13365Jestem pewien, że można to jeszcze bardziej zmniejszyć.
Stary kod
źródło
System.out
gdzieś przechowywać ?public
. I zmieńIntStream.range(1,i).forEach(j->System.out.print(" "));
nafor(;--i>0;)System.out.print(" ");
s+="\n"
wewnątrzfor()
inicjalizacji, aby użyć tam średnika?Szybki, 41
To rozczarowujące, że Swift nie ma operatora
*
naArray
lubString
.źródło
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
SpecBAS - 34
Apostrof
PRINT
wymusza nową linię, a następnie wystarczy przesunąć kursor do właściwej pozycji.źródło
GolfScript 11
Przetestuj tutaj .
źródło
JavaScript - 52 bajty
Oto moje, to całkiem proste.
Stosowanie:
Wskazuje siódmą postać.
źródło
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. I oszczędzasz 2 bajty. Możesz także przekształcić go w stasksnippet, aby pokazać działający kod. Oczekuje się, że najpierw pojawi się struna, a potem pozycjaPerl 5, 31
źródło