pengantar
Sebagian terinspirasi oleh pertanyaan StackOverflow ini , mari kita menggambar ASCII Lightning Bolt.
Tulis program yang menggunakan Integer positif n
melalui STDIN atau baris perintah dan output ASCII Lightning Bolt di bawah ini.
Memasukkan
Integer Positif yang n
mewakili jumlah tingkatan petir zig-zag untuk menggambar.
Contoh Output
n = 1
__
\ \
\ \
\ \
\/
n = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
n = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
n = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
. . . dll
Catatan tambahan
- Anda dapat menulis fungsi yang
n
hanya sebagai argumen dan mencetak atau mengembalikan string. - Ruang tambahan dan garis baru tidak apa-apa.
- Tidak ada spasi mengarah kecuali jika sesuai untuk pola yang ditunjuk.
- Kode terpendek dalam byte menang.
Jawaban:
Java,
201196189186182 byteJelas bukan yang terbaik, tetapi adalah di Jawa.
sumber
main
metode Anda .main
seharusnya tidak dihitung terhadap jumlah byte, dan beberapa bahasa yang memiliki kata kunci verbose mungkin boleh makro. Maka itu akan menarikCJam, 41 byte
Saya mungkin dapat memeras beberapa byte lagi, tetapi inilah beberapa kompresi. Saya memilih sebuah pangkalan yang tidak akan menghasilkan apa-apa.
Cobalah online .
Petir dibagi menjadi
top + middle * (input-1) + bottom
, di manatop
,middle
,bottom
(dikompresi menggunakan konversi dasar) yang(Spasi ditandai dengan
.
s)40 byte
Terima kasih kepada Pengoptimal
sumber
top + middle * (input-1) + bottom
, itu mengingatkan saya bahwa PowerShell dapat melipatgandakan string: PJavaScript ( ES6 ) 76
Menggunakan string template, 3 baris baru signifikan dan dihitung.
Tes menjalankan cuplikan (khusus Firefox)
sumber
PowerShell,
7263 byteWindows yang bodoh dan \ r \ n ... Anda bisa mencapai
6759 byte!sumber
PHP -
84 7978 byteLihat sumber hasil atau bungkus
<pre />
untuk memeriksa hasil. Baris baru diperlukan dalam kode.-1 dapat dipindahkan ke
define
, tetapi saya menganggap itu sebagai cheat.Peningkatan 1: ganti
\n
dengan baris baru yang sebenarnya2: Karena saya bisa mendefinisikan var, saya menggunakan KONTAN, menyimpannya
$
. + ruang yang tidak dibutuhkan di str_repeatke-3: Secara tidak sengaja menghapus -1, tetapi menyimpan byte dengan menggunakan
<?=
gantinya.sumber
Pyth,
6054 byte (Terima kasih @isaacg)Upaya pertama saya di Pyth, mungkin sangat buruk.
Verifikasi di sini .
sumber
\n
. Juga, yang pertama\\
dalam program ini bisa saja a\
.CJam, 50 byte
Coba di sini
sumber
Brainfuck, 164 byte
Dengan komentar:
Oke, bagaimana jawaban Brainfuck ini mengalahkan Java dan C #?
sumber
> <> (Ikan), 409 byte
Dijalankan oleh
fish.py bolt.fish --value n
manabolt.fish
nama program dann
merupakan input bilangan bulat positif Anda.Ini tidak pendek, tetapi terlihat keren. Upaya saya adalah mencoba membuatnya tampak seperti sambaran petir. Selain itu, selalu ada kesalahan saat selesai.
sumber
Perl, 69 +1
69 karakter, ditambah 1 untuk
-n
saklar baris perintah untuk mengambil input dari stdin.Contoh penggunaan:
sumber
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
. Juga\n
dapat diganti dengan istirahat garis literal untuk 3 karakter lain yang disimpan.Javascript (ES6), 86
Tidak akan menang, tapi saya suka solusi 1-line dan saya benci tebasan.
sumber
atob
dokumentasiC, 101 byte
Implementasi saya tidak begitu asli di c
sumber
C #, 221 Bytes
Ini bukan yang terbaik, atau jawaban terkecil, tetapi saya pikir saya akan mencobanya. Jawaban Fsacer jauh lebih pendek dan saya pikir Anda harus memeriksanya. Saya baru saja memutuskan untuk melakukan ini hanya sebagai metode alternatif.
sumber
class C{static void Main(string[]n){var e=int.Parse(n[0]);var o=@"__{0}\ \{0} \ \{0}";while(e-->1){o+=@"__\ \{0}\ __\{0} \ \{0}";}System.Console.Write(o+@" \ \{0} \/{0}","\n");}}
C #, 166 byte
EDIT 1: meningkatkan hasil dari 186B menjadi 173B
EDIT 2: menyelamatkan 1B dengan menggunakan
PadLeft
bukannyaPadRight
EDIT 3: menyelamatkan 8B dengan menjatuhkan
PadLeft
parameter kedua dan menggunakan string literal kata demi katasumber
public
di awal, dan alih-alih menggunakan array char, Anda dapat menggunakanString.PadRight(int, char)
, yang lebih pendek dan akan membiarkan Anda menggunakan char ascii yang tidak perlu melarikan diri.Awk, 101 + 8 byte
101 karakter, ditambah 8 untuk
-v n=$1
mendapatkan integer dari shell.Baru di situs SE ini, tidak jelas apakah parameter tersebut harus dihitung.
Tidak disatukan
Contoh penggunaan:
sumber
-v
bagian itu. Tidak menyebutkan bahwa seluruh gagasan variabel tidak perlu, sama sepertiEND
blok terpisah . 89 karakter:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278char:Ini golf kode pertamaku
@ (^ _ ^) @
Tes di sini
sumber
C,
119108 byteUpaya pertama, 150 byte
main
menerima argumen int, jadi jalankan seperti ini:./lightning . . .
untuk lulus4
sebagai argumen.sumber
Python 3,
126118117 byteHanya sesuatu yang bisa kita mulai.
sumber
[0]*(n-1)
untuk mendapatkann-1
iterasi. Anda juga dapat menulis(n-1)
sebagai~-n
.i in [0]
kei in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 byte
Cukup cetak tiga baris pertama, lalu cetak tiga baris berikutnya
n-1
kali, dan kemudian cetak 2 baris terakhir. Semuanya sekaligus.Dan ini adalah percobaan yang bagus untuk alternatif yang (sayangnya) menggunakan jumlah byte yang persis sama:
sumber
*
, yang memberi saya 77 byte - atau tidak inlining, tapi harganya 79 byte. :(F #, 98 karakter, 105 byte
sumber
CJam 54 Chars
bukan yang terpendek, tapi karena saya memulai CJam hari ini, saya senang dengan itu.
Cobalah
sumber
Pascal:
149142141137 karakterBagaimanapun, satu-satunya kekuatan golf Pascal adalah backslash tidak perlu melarikan diri ...
sumber
for n:=2 to n do
juga berfungsi.Google Sheets, 60 Bytes
Fungsi lembar kerja anonim yang mengambil input dari jangkauan
[A1]
dan keluaran ke sel panggilan.sumber
Perl 5 , 58 + 1 (
-n
) = 59 byteCobalah online!
sumber
SpecBAS -
135104 byteApostrof dalam pernyataan PRINT memindahkan kursor ke baris baru.
SpecBAS memungkinkan Anda menggabungkan karakter ASCII dalam string melalui cara
#n
, jadi beberapa carriage return (ASCII 13).Membangun string menggunakan carriage return dan karakter lain, lalu digunakan
REP$
untuk mengulanginya beberapa kali.sumber
PHP 155
Versi Tidak Serigala
sumber
echo$l=PHP_EOL,"__$l";$g="\\ \\$l";for($i=0;$i<$argv[1];$i++){echo($i?"__$g\\ __\\$l":$g)," $g";}echo" $g",' \\/',$l;
$i=0
; lepaskan tanda kurung untukfor
loop; increment counter di dalam loop (echo($i++?"…
).Jawa,
183180 byteLua, 110 byte
sumber
Retina , 46 byte
Mengambil input sebagai unary.
Setiap baris harus menuju ke file sendiri dan
#
harus diubah ke baris baru di file. Ini tidak praktis tetapi Anda dapat menjalankan kode sebagaimana adanya, sebagai satu file, dengan-s
bendera, menjaga#
spidol. Anda dapat mengubah#
's ke baris baru di output untuk dibaca jika Anda inginkan. Misalnya:Algoritma ini sangat sederhana. Pasangan garis (regex - pasangan pengganti) melakukan langkah-langkah substitusi berikut:
1
dari input unary.\ \
dari petir untuk mendapatkan hasil yang diinginkan.sumber
Powershell, 59 byte
Skrip uji:
Keluaran:
Penjelasan:
Skrip ini tradisional
top
+middle
+bottom
. Hanya ada satu hal yang cerdas: koma sebelum kekuatan string tengah untuk mengulang elemen array daripada string. Oleh karena itu, masingmiddle
- masing ditampilkan pada baris baru.sumber