Yang sederhana hari ini. Tuliskan program terpendek yang menggambar "alfabet gigi gergaji" yang diberi bilangan bulat positif untuk ketinggian. Anda harus menulis nama bahasa pemrograman Anda ketika Anda datang ke surat itu dimulai dengan.
Misalnya, jika bahasa Anda adalah Python dan inputnya adalah 1
outputnya harus:
ABCDEFGHIJKLMNOPythonQRSTUVWXYZ
Jika inputnya adalah 2
output harus:
B D F H J L N Python R T V X Z
A C E G I K M O Q S U W Y
Jika inputnya adalah 4
output harus:
D J Python V
C E I K O Q U W
B F H L N R T X Z
A G M S Y
Catatan
A
selalu dimulai di kiri bawah.- Input dapat melalui stdin atau panggilan fungsi atau yang serupa. Output ke stdout.
- Masukan di atas
26
tidak perlu bekerja. - Tidak ada spasi tambahan.
Jawaban:
jika n menahan tinggi:
C + kode pelarian: 81
C: 110
sumber
cc
memberikan kesalahan "<bebe.c: 1: 17: error: 'n' tidak dideklarasikan (digunakan pertama kali dalam fungsi ini)".n
adalah variabel global yang disetel ke sejumlah pilihan Anda (seperti yang ditanyakan Martin).C, 134
Kompilasi pada gcc dengan beberapa peringatan. Baris baru tidak termasuk dalam jumlah karakter.
122 karakter jika input sudah tersimpan
n
.Terima kasih kepada user2992539 , tolos dan edc65 untuk peningkatan.
sumber
puts("")
bukanprintf("\n")
.p-=(c-n+r)%m*((c-n-r)%m)?0:printf("%*c",p,c+65);
alih - alihif((c-...
n,m,c,p; main(r){ for(scanf("%d",&n),m=--n?n*2:1;n+r--;puts("")) for(c=-1,p=1;c++<25;) p+=(c-n-r)%m*((c-n+r)%m)?1:1-printf("%*c",p,c+65); }
TI-BASIC - 148 byte (teks mentah), 186 byte (grafik)
Menanggapi OP, TI-83 yang luar biasa (dan yang lebih baru) hadir dengan ukuran 16 x 8 (hanya menggunakan teks besar standar) atau dengan ukuran 94 x 62 piksel (yang dengan teks kecil bernilai sekitar 10 baris) ).
Sekarang, ini memiliki sedikit masalah (yang ingin saya klarifikasi). Penentuan ukuran tidak dapat "diabaikan" oleh penerjemah; dengan kata lain, jika kita mencoba mengatur ketinggian gigi gergaji pada 20, itu akan memberikan kesalahan mencegah eksekusi penuh kode. Saya dapat menulis kode yang akan, dalam lingkungan yang tak terbatas, menghasilkan output yang benar, kecuali itu tidak akan berjalan pada mesin.
Dengan ini dikatakan, saya hadir Anda versi (menjalankan) program. Semuanya tergantung pada variabel
N
yang disetel ke ketinggian yang diinginkan dalam baris sebelum dijalankan:Pendekatan teks mentah
Dalam rangka untuk membuat karya ini terlepas dari terminal, perubahan
For(C,1,16
untukFor(C,1,33
dan menghapus pengecekan batas atas (R<2 or
). Ini adalah output dengan5→N
:Pendekatan grafis (ini mungkin juga perlu
AxisOff
kejelasan)Yang ini berfungsi OK, dengan dua quirks kecil. Ketinggian masih menjadi masalah, meskipun lebarnya tidak. Namun, saya tidak memberi spasi pada surat-surat itu, jadi dalam beberapa kasus (ketika surat itu mulai naik atau turun dari gigi gergaji), surat-surat itu mungkin dipotong oleh penerusnya. Untuk membuatnya berfungsi terlepas dari terminal, hapus centang batas atas (
R<7 or
). Kemudian ikuti grafik:sumber
0→F
Anda dapat melakukanDelvar F
yang menghemat 1 byte sekali tokenized. Juga, saya yakin Anda dapat memfaktorkan Output / Teks menjelang akhir berkat kondisi uji boolean sebaris untuk koordinat tersebut, dan untuk ituC+7→C
, tuliskan dalam waktu singkat if (no then / else / end)Bash Murni (tanpa coreutils), 181 byte
Keluaran:
Diputar
cat -E
hanya untuk membuktikan bahwa tidak ada baris baru yang tertinggal.sumber
JavaScript (ES6) 231
244Edit perbaikan Bug, beberapa pemesanan ulang dan cara mengelola ketinggian yang berbeda == 1
Selain itu, diubah ke fungsi karena diizinkan oleh OP, jadi tidak ada prompt () untuk input
Tidak ada perubahan pada algoritma umum yang mungkin BUKAN yang terbaik untuk tantangan ini
Dijelaskan
Contohnya
1
3 naik
4 di atas
7 turun
sumber
JAVA (393)
Seperti biasa bahasa yang bagus untuk bermain golf:
sumber
java.util.Arrays;
. :-(String x="ABC...Z";
dan menggantifor(char c...
loop header denganfor (char c=65;++c<91;){
, saya suka karakter di Java =)c=='J'
denganc==74
, menyimpan total dua byte lagi.public class p{public static void main(String[]a){int h=Integer.valueOf(a[0]),i=h-1,d=-1,n;String[]l=new String[h];for(n=0;n<h;l[n++]="");for(char c=64;++c<91;){for(n=0;n<h;n++){String k=n==i?c==74?"Java":c+"":c==74?" ":" ";l[n]+=k;}if(i==0&d==-1)d=1;if(i==h-1&d==1)d=-1;i+=h>1?d:0;}for(String s:l)System.out.println(s);}}
@ Quincunx: tidak perlu lagi untuk import.util.Arrays; =)Ruby, 112 byte
Diharapkan input untuk disimpan
h
.Beri tahu saya jika ini membutuhkan klarifikasi.
sumber
%
.puts o...
dengan$><<o...
.J: 75 byte
Menggunakan perubahan Amand yang indah . Seperti biasa IO jelek dan kikuk, tidak masuk ke detail di sana. Solusi inti mengambil 3 gerunds (semacam kata benda-ified kata kerja (alias. Function)):
c) menghasilkan matriks untuk menebus kesalahan
x (a
b
c}) ya) adalah pencarian yang cukup sepele di tabel ascii
c) bahkan lebih sepele
b) yang menarik. Moralnya adalah bahwa indeks horizontal seharusnya mulai dari 0 hingga y-1 dan mundur, mengulangi ini sebanyak 26 kali. Misalnya. untuk y == 4:
Menerapkan ini memberi untuk b):
Dan oh ya, fakta praktis: nama J adalah ... "J".
sumber
3 :'|:(26$1+(i.1=y),}:|i:<:y)|.@{."+u:65+i.26'
Bagian buruk dalam solusi itu adalah 8 karakter hanya untuk kasus khusus tinggi 1, tetapi ini mungkin dapat dipersingkat sedikit.R (204)
Hasil
sumber
for
pernyataan Anda (for(i in 1:x)cat(...
misalnya) atau yang ada di sekitar%in%
.Javascript -
248224235Berikut ini tautan ke jsfiddle, tempat Anda dapat mengujinya.
sunting: Membuat log konsol untuk font monospace dan menghapus koma jika input == 1.
sumber
|0
atau~~
. 2: lebih pendek untuk membangun array w secara langsung, tanpasplit
.for(w=[],v=0;v<z;v++)w[v]="\n";
(i==9?" ":" ")
bisa Anda gunakan(i^9?" ":" ")
, yang menyimpan karakter.Perl 119
Program ini mengambil input dari
STDIN
dan mencetak hasilnyaSTDOUT
.Dan bonus - versi yang melanggar aturan saat mencetak spasi tambahan, tetapi menambahkan beberapa interaksi:
... dan beberapa tes di bawah ini:
sumber
J,
67 5761 karakterGunakan sebagai fungsi:
Penjelasan: solusi ini menggunakan pendekatan yang berbeda dari solusi J lainnya. Alih-alih menghasilkan gelombang gigi gergaji 0 1 2 3 2 1 0 1 ... , saya melihat jarak antara huruf berturut-turut. Misalnya, untuk n = 4 jika Anda pergi dari A ke atas, bungkus ke kolom kedua dan jangkauan B, maka Anda menemukan empat ruang antara A dan B. Pola jarak antara huruf sangat biasa: untuk n = 4 yang pola adalah 4 4 4 2 2 2 4 4 4 ... .
Jadi idenya adalah untuk pertama-tama membangun array yang rata (dan ditransposisikan), dan kemudian membentuk kembali dan membalikkannya sehingga terlihat benar. Rutin output langsung (untuk menjadi J, setidaknya): dtb adalah "delete trailing blanks" dan
"1
mengatakan "operasikan pada setiap baris". dtb dan echo keduanya disediakan oleh perpustakaan standar.Terima kasih kepada Zsbán Ambrus atas bantuan golfnya.
sumber
MetaPost (207)
Anda bisa mencobanya di sini.
sumber
Bash (213)
(223)Perubahan kecil dan kita turun ke 213.
Yang asli memiliki bug kecil. Diuji dan dikonfirmasi untuk bekerja pada bash versi 4.2.37.
Terima kasih kepada @manatwork karena menunjukkan bug dan beberapa tips.
sumber
;
hanya untuk membuatnya sedikit lebih mudah dibaca? Ini tidak akan memengaruhi skor golf AndaHaskell - 432 Bytes (sayangnya ...)
Ini ternyata jauh lebih sulit daripada yang saya harapkan untuk diselesaikan murni, karena itu jumlah byte yang lumayan. Saya yakin saya (atau seseorang) bisa melakukan yang lebih baik, tetapi saya telah menghabiskan terlalu banyak waktu untuk hal ini. Versi golf adalah sebagai berikut:
Untuk menjalankan, muat kode ke dalam
ghci
dan jalankan diputStr $ s Int
manaInt
ketinggian yang Anda inginkan. Anda juga bisa menambahkandi bawah
import
s dalam file teks, kompilasi denganghc
, dan berikan ketinggian sebagai argumen baris perintah. Versi tidak disatukan:sumber
const
denganpure
(menggunakan instance Applicative untuk fungsi) untuk menyimpan beberapa byte.C # / LINQ:
Penjelasan singkat:
Enumerable.Range(0, N).Select(...)
menyebabkan string dihasilkan untuk setiap baris yang akhirnya digabungkan menjadi satu string denganString.Join(Environment.NewLine, ...)
. Untuk setiap baris dengan siklus 26 karakterEnumerable.Range(0, 26).Select(...)
, pengujian di awal ekspresi lambda menentukan apakah akan menghasilkan karakter atau spasi sementarai==2
memeriksa untuk "C" dan mengubahnya menjadi "C #" atau dua spasi tergantung pada garis . TheString.Concat(...)
bertobat yang dihasilkanIEnumerable<char>
untuk setiap baris ke dalam string sebelum diteruskan keTrimEnd(...)
ke strip bersih diri setiap Trailing spasi.sumber
PHP
(216)(205)Versi baru:
Versi lama:
mengharapkan variabel $ i menjadi tinggi.
sumber
C,
214169 byte, tanpa spasi tambahanTerima kasih kepada @ edc65 dan @tolos atas sarannya yang bermanfaat.
sumber
scanf
danprintf
) diberikan prototipe, jika tidak Anda akan mendapatkan perilaku yang tidak terdefinisi.#include <stdio.h>
adalah, tentu saja, cara terpendek untuk memberikan prototipe untuk keduanyascanf
danprintf
.int
deklarasi untuk utama jika Anda tidak mengembalikan apa pun. Dapat memberikan paren tambahan, ganti' '
dengan32
danif(!C)m=c
dengan pernyataan ternarny, dan seperti yang baru saja saya pelajari (di atas) gantiprintf("\n")
denganputs("")
untuk 18 karakter:n,i,m,c,z;main(){;scanf("%d",&n);z=n<2?1:2*n-2;for(;i<n;i++){for(m=c=65;c<91;c++)m=C?m:c;for(c=65;c<=m;c++)printf("%c",C?32:c);puts("");}}
Javascript (
204 185150)EDIT
Disimpan 13 byte dengan tidak membangun array dan .join ("\ n"). Diperlukan membalik loop. Kemudian, dengan bantuan dari putra C coding, membuat kode sepenuhnya terlalu pintar untuk menyimpan 12 byte lagi.
Ini adalah versi yang dapat dibaca yang menunjukkan perubahan logika.
Golf (161):
Golf dan dikaburkan (149):
sumber
.substr(a,1)
=>[a]
h=m=4;d=1<h?-1:0;o=[];for(a=0;35>a;a++){for(r=h;r;r--)o[r]=(o[r]||"")+(r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ");if(9>a|17<a)if(m+=d,2>m||m==h)d=-d}console.log(o.join("\n"))
K, 60 byte
Cukup mudah, dan sepertinya saya baru saja keluar solusi J. :)
Pertama, buat alfabet:
Dan gelombang gigi gergaji dengan panjang yang sesuai:
Pad setiap huruf alfabet dengan spasi:
Zip alfabet dan gelombang persegi bersama, dan putar setiap baris:
Dan transposisi dari itu adalah jawaban kita:
Coba di sini di OK .
sumber
C:142139 karakterSangat lama, saya berharap dapat mempersingkat sedikit:Sedikit lebih mudah dibaca:
Sunting: Saya merindukan aturan "tanpa spasi tambahan", tetapi saya akan kembali.
sumber
Scala, 246 byte
diformat ulang dan dikomentari:
Hasil:
sumber
Python - 137
Input untuk disimpan di ieg
i=8
sumber
Raket
Berikut ini adalah versi fungsional yang bersih: saran untuk mempersingkat sambutan.
Keluaran
sumber