pengantar
Dalam output kesalahan dari beberapa bahasa seperti Java, sebuah pointer ditampilkan untuk memberikan programmer ide dari mana kesalahan itu terjadi.
Ambil contoh ini di Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
Perhatikan tanda sisipan menunjukkan di mana kode yang tidak valid?
Tantangan
Tantangan Anda adalah: diberi nomor N dan tali S , menempatkan pointer pada N th karakter dalam S .
Contohnya
Masukan :2, "Lorem ipsum, dollar sit amet."
Keluaran :
Lorem ipsum, dollar sit amet.
^
Aturan
- Input diterima melalui STDIN atau parameter fungsi
- Output dicetak ke konsol atau
return
ed - Mengejar baris baru, spasi dll diizinkan dalam output
- Karakter pointer harus a ^ caret dan harus di baris baru.
- Ini kode golf, jadi jawaban tersingkat menang. Semoga berhasil!
Jawaban:
C 33
Jika hanya fungsi yang diizinkan, maka bahkan c dapat bersaing.
(Sebagai catatan, 2 byte disimpan thx ke @Cool Guy. Komentar Mt thx tiba-tiba menguap.)
1 char lainnya disimpan thx @Mig
sumber
f(a,c){printf("%s\n%*c",a,c,94);}
*
opsi dalam format string sebelumnya, tetapi telah sepenuhnya melupakannya. Mungkin berguna untuk beberapa tantangan seni ascii di masa depan.Brainf * ck - 133 byte
Harapkan input sebagai
[0-9]{2}.*
mis. "02Hello world !!!" akan menghasilkansumber
e
dalam contoh. Dengan biaya 1 byte ini dapat diperbaiki dengan menambahkan-
di depan[->.<]
Kode mesin IA-32, 24 byte
Hexdump:
Ini adalah fungsi (menggunakan
fastcall
konvensi MS ) yang memperbarui string di tempat:Kode perakitan:
Ini menggunakan
WORD
-sized (16-bit) data di beberapa tempat. Ini memiliki penalti (awalan 1-byte) dalam kode 32-bit, tetapi tetap membuat kode lebih kecil - menggunakan data 32-bit akan menempatkan dua byte nol ke dalam kode!Pada akhirnya, ia menulis 4 byte (
eax
) dan bukannya 2 byte (ax
) - kodenya lebih kecil seperti itu, dan 2 byte tambahan junk digunakan setelah pemutusan string, jadi tidak ada yang memperhatikannya.Pemakaian:
sumber
66 b8 5e 00
bergerak0x5e
keal
, bukan keah
, dan nol keah
bukanal
, sehingga komentar Anda dalam kode assembly menyesatkan.naked
di sana? Dan mengapa ini hal pertama yang saya lihat?naked
di depan: msdn.microsoft.com/en-us/library/h5w10wxs.aspxPyth , 8
Solusi ini tidak lagi berfungsi, karena komit setelah yang saya
p
tautkan sebagai nama bahasa diubah menjadi arity 1. Ada beberapa cara lain untuk mencapai skor serupa di Pyth yang masih berfungsi hingga sekarangzp+*dQ\^
.Jika string membutuhkan tanda kutip, menambah
v
awal kode berfungsi. Jika itu harus dipisahkan koma, itu naik hingga 10 byte:sumber
^
akan selalu berada di bawah karakter pertama. Dan omong-omong parameter input diberikan dalam urutan yang salah ke penerjemah online (sehingga gagal mengeksekusi).p
memiliki arity 1. Ini menyebabkan baris pertama dari output dicetak pertama dan kemudian tanda sisipan pada baris berikutnya diikuti oleh spasi. Sekarang Anda dapat melakukannyaz+*dQ\^
untuk skor yang lebih pendek tetapi dengan baris baru, atau tambahkanp
sebelum+
untuk menghapusnya. Saya tidak yakin apa yang harus saya lakukan di sini, karena orang mengangkat versi jawaban ini, saya pikir saya akan mencoba menemukan versi yang berfungsi.T-SQL, 90
Sementara pertanyaan yang cukup sederhana, selalu menarik untuk mencoba ini dalam bahasa yang benar-benar tidak cenderung mendukung mereka dengan baik atau golf dengan baik dalam hal ini.
Jawaban ini hampir pasti yang paling lama.
Ini menciptakan fungsi tabel inline untuk SQL Server yang mengambil parameter @n dan @ sebagai dan mengembalikan hasilnya sebagai kolom. Pengembalian kereta signifikan, jika tidak saya harus menggunakan char (13).
Ini digunakan dengan cara berikut
Dan kembali
sumber
Python, 27
Ini menggunakan dua tingkat pemformatan string.
Dan inilah solusi 25 byte yang sebagian dicuri dari jawaban feersum (dengan urutan argumen terbalik):
sumber
Bash, 27
Keluaran
sumber
$
pada akhirnya adalah prompt shell. Pertanyaannya menentukan bahwa membuntuti baris baru diperbolehkan, tetapi tidak mengatakan itu perlu.Python, 29
Menggabungkan string, baris baru,
n-1
spasi, dan a^
.sumber
rjust
tidak begitu lama ...sed, 16
Ini adalah semacam testcase dari jawaban meta ini . Khususnya saya mensyaratkan bahwa angka N adalah input di unary. Misalnya untuk tanda sisipan di posisi 2, input untuk N adalah
11
. Juga tidak ditentukan secara spesifik urutan S dan N mana yang seharusnya, jadi di sini S berlaku terlebih dahulu, diikuti oleh unary N pada baris baru, semua melalui STDIN.Keluaran:
sumber
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 byteTerima kasih kepada nderscore untuk sangat mengurangi ukuran kode.
Versi yang berfungsi di lebih banyak browser (47 byte):
sumber
Array(a-1)
. 2. Fungsi anonim diizinkan secara default, jadi Anda tidak perlupoint=
. 3. Untuk versi ES6, Anda dapat menyingkirkanreturn
pernyataan dan kawat gigi. Gunakan saja(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
dengan baris baru yang sebenarnya)p=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
menghasilkan string kosong :)CJam, 9 byte
Cobalah online.
Bagaimana itu bekerja
sumber
Python, 29
Berikut cara yang lebih menyenangkan untuk melakukannya di 29:
Contoh penggunaan:
sumber
TI-BASIC, 10 (?) Byte
Input diberikan dalam variabel N, saat pertanyaan diajukan, tetapi Anda tidak dapat menggunakan huruf var S sebagai string. Di tempat itu, dibutuhkan masukan string dari Ans, sehingga untuk menjalankan contoh di OP:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Saya sadar bahwa itu mungkin tidak masuk hitungan, karena setiap segmen yang dibatasi usus besar secara teknis merupakan pernyataan yang terpisah; inilah program 46-byte yang mengambil input sebagai
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Keduanya berasumsi bahwa layar telah dibersihkan sebelum berjalan.
sumber
dc, 19
Masukan dari STDIN.
dc
string adalah definisi makro dan terkandung dalam[
]
. String spasi dihasilkan dengan menghitung angka yang ketika dinyatakan sebagai basis 256 byte stream memberikan string yang kita butuhkan. Perhitungannya adalah((n ^ 256) / 255) * 32)
. Ini memberikann
spasi (karakter ASCII 32), tetapi kita perlun-1
diikuti oleh^
, jadi kita cukup menambahkan 62 ke basis terakhir 256 digit.Keluaran
sumber
C,
595747 byteCukup mudah. Versi tidak disatukan:
Uji di sini
Terima kasih kepada @anatolyg karena telah menghemat 10 byte!
sumber
puts(a)
danputchar(32)
masuk ke kurungfor
loop - ada persis 2 tempat kosong di sana! Juga, saya tidak berpikir Anda perlu menyatakan jenisa
danc
- cukup gunakan implisitint
untuk mereka - akan bekerja jika Anda tidak melakukannya#include <stdio.h>
.C # 55
Sebuah fungsi, konsep yang mirip dengan jawaban C saya, tetapi pengembalian kali ini lebih pendek dari output.
sumber
SAS, 35 byte
Itu setara dengan SAS dari fungsi telanjang; menambahkan langkah data untuk memanggilnya (setara dengan fungsi utama C menyebutnya) akan menjadi sedikit lebih (9 byte lebih - Ty Alex), tapi saya pikir itu tidak perlu untuk tujuan ini. Bagaimana itu disebut:
Ada implementasi makro saja tetapi jauh lebih lama, bahkan jika Anda mengizinkannya memberikan peringatan tentang parameter yang tidak valid pada n = 1.
Jika kita bisa menggunakan parameter yang telah ditentukan, SAS akan cukup pendek untuk yang satu ini, yang merupakan kelangkaan untuk bahasa yang pasti tidak dimaksudkan untuk menjadi pendek.
Jika dataset diizinkan menjadi sumber input, itulah cara Anda akan 'melakukannya' di SAS (atau dengan% biarkan pernyataan), tetapi mungkin tidak diizinkan, ini bahkan lebih pendek ( 27 byte , yang sebenarnya bisa 25 jika Anda menjamin dataset telah dibangun segera sebelum menjalankan ini [karena Anda dapat menggunakannya
set;
]):(dataset yang sudah ada sebelumnya)
(kode aktual)
sumber
data a;
, Anda bisa melakukandata;
yang akan menghemat 2 byte. Tetapi seperti yang Anda katakan, toh itu tidak perlu untuk tujuan ini.Matlab / Oktaf, 41
Ini adalah fungsi anonim yang mengembalikan string. Ini menghasilkan peringatan, yang dapat ditekan dengan menelepon sebelumnya
warning off
.sumber
ans =
sedikit, jadi setelah memperbaikinya, itu hanya perbedaan 10 karakter.K, 21 byte
Contoh:
Penjelasan (
x
adalah nomor,y
adalah string):sumber
R,
494846Sebagai fungsi tanpa nama yang di-output ke STDOUT. Terima kasih kepada @Flounderer untuk peningkatannya.
menggunakan strwrap sekarang untuk mengidentifikasi tanda sisipan ke n-1. cat menggunakan pemisah \ n daripada string kosong.
Uji coba
sumber
function(n,x)cat(" ",x,"\n",rep("",n),"^")
dan menyimpan beberapa karakterstrwrap
fungsinya sebelumnya. Apakah ada cara sederhana untuk mengatakan apa fungsinya? Saya tidak bisa mengetahuinya dari dokumentasi.Python3,
3836 byteUji di sini
Terima kasih kepada @ Dennis karena telah menghemat 2 byte!
sumber
(i-1)
->~-i
Julia, 27 byte
Ini menciptakan fungsi tanpa nama yang menerima integer dan string sebagai input dan mengembalikan string. Untuk menyebutnya, berikan nama, mis
f=(n,s)->...
.Semua yang terjadi di sini adalah kita menambahkan baris baru,
n-1
spasi, dan tanda sisipan. Penggabungan string dilakukan menggunakan*
dan pengulangan string dengan^
.Tidak Disatukan:
Contoh:
sumber
PHP (CLI) - 42
Sebut saja dari baris perintah:
sumber
<?printf("$S\n%{$P}s",'^');
. Ganti\n
dengan baris baru nyata . Totalnya adalah 5 byte. Itu hanya bekerja pada PBP4.1 dan di bawah ini.Matlab, 25
Yang ini sangat kurang ajar. Tampaknya menampilkan cetakan karakter yang tidak dapat dicetak sebagai spasi. Kode berikut mendefinisikan fungsi bernama
ans
, yang memenuhi spesifikasi.begitu memanggil fungsi ini seperti ini:
memberikan output:
Saya selalu tidak suka
ans =
bagian dalam jawaban Matlab. Jika ini masalah, saya perlu menambahkan 6 byte ... tapi saya selalu melihatnya seperti ini di jawaban Matlab. Perhatikan bahwa menjalankan kode ini menimpa variabelans
, jadi Anda perlu mendefinisikan ulang fungsi jika Anda ingin menggunakannya untuk kedua kalinya!sumber
x=ans(2, 'asdf');
Anda tidak mendapatkan ans = hal.Tembakan pertamaku pada codegolf
Jawa,
13365Saya yakin itu bisa dikurangi lebih banyak lagi.
Kode lama
sumber
System.out
?public
. Dan ubahIntStream.range(1,i).forEach(j->System.out.print(" "));
kefor(;--i>0;)System.out.print(" ");
s+="\n"
dalamfor()
inisialisasi untuk menggunakan titik koma di sana?Swift, 41
Sangat mengecewakan bahwa Swift tidak memiliki operator
*
padaArray
atauString
.sumber
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
SpecBAS - 34
Tanda pangkat
PRINT
memaksa baris baru, maka hanya perlu memindahkan kursor ke posisi yang benar.sumber
GolfScript 11
Tes di sini .
sumber
JavaScript - 52 byte
Ini milik saya, sangat sederhana.
Pemakaian:
Ini menunjuk pada karakter ketujuh.
sumber
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. Dan Anda menghemat 2 byte. Anda juga dapat membuatnya menjadi stasksnippet untuk menampilkan kode yang sedang berjalan. Yang mengharapkan string untuk menjadi yang pertama, kemudian posisiPerl 5, 31
sumber