Koordinat di dunia flat-Earth terdiri dari garis lintang (x) dan garis bujur (y), yang merupakan bilangan bulat dalam kisaran 0 ... 9999. Sama seperti bilangan bulat Gaussian , tetapi selalu ditulis menggunakan notasi ini:
411S 370E
Yaitu, dengan S
atau N
ditambahkan ke garis lintang, dan E
atau W
ditambahkan ke garis bujur, dengan spasi di antara dua komponen.
Tujuan
Tulis program (bukan fungsi) yang membaca dua koordinat, dipisahkan oleh spasi, dan hasilkan jumlahnya. Koordinat pertama adalah titik awal, yang kedua adalah perpindahan, dan output adalah posisi yang dihasilkan.
Input output
Karena tantangan ini sebagian tentang pemformatan, saya akan mencoba menentukan format input dan output secara jelas.
Format input yang disukai memiliki 1 ruang antara komponen koordinat, tanpa nol di depan, dan karakter baris baru di antara dua koordinat. Program harus dapat membaca format yang diinginkan.
Outputnya dapat berisi jumlah spasi putih dan angka nol di depan. Jika berbeda dari format input yang disukai, program harus dapat membaca format ini juga.
Hanya untuk memperjelas, input tidak dapat (tidak akan) berisi karakter pemformatan tambahan. Cukup spasi dan baris baru jika diperlukan.
Mencetak gol
Ini adalah percobaan pada kondisi kemenangan baru. Saya akan memilih pemenang dengan menerima jawaban dalam beberapa minggu. Jika jawaban yang lebih baik muncul setelah itu, saya akan mengubah jawaban yang diterima.
Nilai untuk program ini adalah jumlah byte-nya. Program yang menang adalah yang lebih pendek dari 400 byte, memiliki jumlah byte paling sedikit, tetapi ditulis dalam bahasa pemrograman paling verbose . Untuk menentukan pemenang:
- Hapus program dengan jumlah byte 400 atau lebih (mereka dapat berpartisipasi tetapi tidak dapat menang)
- Pertimbangkan hanya program terpendek untuk setiap bahasa pemrograman
- Program terlama menang
Polyglots bersaing dengan program dalam semua bahasa yang valid (mis. Jika suatu program valid dalam keduanya bash
dan sh
, ia bersaing dengan program dalam kedua bahasa).
Uji kasus
Dalam kasus uji, dua baris pertama adalah input, dan baris ketiga adalah output.
0S 0E
0S 0W
0N 0E
(arah nol tidak masalah, baik dalam input maupun output)
0S 9999E
9999N 9999W
9999N 0E
(nilai maksimal)
42S 314W
42N 2718W
0N 3032W
(arah nol tidak masalah dalam output)
5555N 8888W
7777S 0E
2222S 8888W
(tidak ada nilai negatif; ubah arah jika Anda perlu mengubah tanda)
0001N 4545W
0999N 5454W
1000N 9999W
(jika program menghasilkan angka nol di depan dan beberapa spasi, ia harus bisa membacanya; ia juga harus bisa membaca input yang tidak mengandungnya)
8888N 8888W
9999N 9999W
(input tidak valid - perilaku apa pun dapat diterima, termasuk crash dan infinite loop)
sumber
Jawaban:
ABAP,
377365 byteTidak Disatukan:
Sebenarnya menantang berada dalam 400 karakter.
Beberapa catatan:
ADD c TO a.
yang merupakan salah satu pernyataan verbose favorit saya.FORM
danPERFORM
meledak jumlah arang, jadi saya terus makro+
tanpa ruang sebelumnya adalah operator ofset, yang membutuhkan banyak ruang dalam kodeRIGHTPLUS
ekspresi yang diperlukan menjadi angka, jadi perlu mulitply dengan 1, tetapi kemudian format tersebut memiliki desimal.DECIMALS
sumber
JavaScript (ES6), 118 byte
sumber
MATLAB,
327304296290282276267259255253 byteSaya pikir saya mendekati batas sekarang. Saya telah berhasil menghapus
51, 60687274 byte dari jawaban yang saya pikir sudah golf. =)Dihapus 8 byte dengan mengambil bagian
input
dalamstrsplit
, terima kasih kepada Luis Mendo. Dihapus 6 byte lagi dengan mengambil semua input ke dalam satu array sel, bukan dua. Dihapus 8 byte lagi dengan mengambil kedua pernyataan terakhir di dalamdisp()
. Dihapus 6 byte dengan menghapuschar
dan beberapa tanda kurung. Ini tidak mungkin dalam revisi jawaban sebelumnya. Memisahkan elemen sel menjadi empat variabel berharga 15 byte, tetapi disimpan 24, sehingga 9 byte disimpan! 8 byte tambahan karenadisp
skema yang ditingkatkan .5*~~s
menghemat dua byte dibandingkan dengan(s>0)*5
. Jadi 4 byte baru disimpan (untuk s dan t). Mengambil kebalikan dari ungkapan terakhir ini menyimpan 2 byte lagi,83-5*~s
lebih pendek dari78+5*~~s
Kode golf:
Kode yang sama, tetapi dengan jeda baris:
Kasus uji:
Simpan di atas sebagai
flat_earth.m
sumber
R, 196 byte
R sangat cantik, dengan standar golf. Ayo lihat...
Tidak Disatukan:
Sunting untuk ditambahkan: Saya baru saja melihat jawaban yang lain, dan saya terkejut bahwa entri saya adalah yang terpendek! Mungkin R tidak bertele-tele seperti yang saya kira ...
sumber
Java, 372 byte
Tidak disatukan
Catatan
A.java
, kompilasi denganjavac A.java
, jalankan denganjava A
. Kemudian masukkan baris input terpisah atau sebagai dua input terpisah pada stdin.Output:
sumber
SQL (PostGreSQL 9.4), 305 byte
Diimplementasikan sebagai pernyataan siap yang mengambil 2 parameter karakter. Satu parameter untuk setiap jalur input.
Ini disebut sebagai berikut
dan menghasilkan baris yang berisi kolom karakter tunggal untuk hasilnya.
9999N 0E
sumber
Java, 308 byte
Versi yang lebih mudah dibaca:
Golf di Jawa adalah jenis kesenangan khusus. Dua baris kode berikut melakukan hal yang sama, tetapi yang pertama lebih pendek:
Kode membaca 4 token dari input standar. Untuk setiap token, bagian hingga karakter terakhir dikonversi menjadi
int
, dan karakter terakhir secara opsional membalik tandanya.Kemudian itu menambah nilai yang dibaca 2 iterasi yang lalu. Java menginisialisasi array ke 0, jadi pada dua iterasi pertama ini akan melakukan hal yang benar.
Kemudian akan memformat nilai dan mencetaknya. Namun, dalam dua iterasi pertama, ia mencetak string kosong sebagai gantinya (jadi dua linebreak tambahan muncul di output).
Ini menggunakan beberapa aritmatika funky sehingga variabel iterasi (4,3,2 atau 1) dan tanda (-1 atau 1) dapat digabungkan ke indeks berbasis nol ke dalam string
"ENWS"
.sumber
Perl 6, 130 byte
sumber
Ruby, 186 byte
Terlalu pendek, maaf. Saya melakukan yang terbaik.
sumber
C - 267 byte
Saya pikir C akan lama ... mungkin saja memasangnya. ; _;
sumber
Befunge-93 , 240 byte
Perhatikan bahwa penerjemah memiliki kotak input satu baris. Menempelkan format yang disukai menggantikan baris baru dengan spasi. Mendapatkan nilai integer dengan
&
sudah mengkonsumsi spasi dan nol terkemuka, sehingga format yang disukai dapat dibaca ke stack dengan&~&~&~&~
sendirian. Menambahkan langkah-langkah untuk meletakkan nilai-nilai dalam baris kosong sehingga orang dapat mengambil dan membandingkan vektor satu koordinat pada suatu waktu, program 136 byte berikut (tidak termasuk catatan right of line) dapat digunakan:Catch: Output memaksa spasi tambahan setelah integer, jadi tidak mungkin untuk output dalam format yang disukai . Misalnya, output akan muncul sebagai
1000 N 9999 W
gantinya1000N 9999W
. Untuk memeriksa dan mengabaikan spasi sebelum arah koordinat pada input, diperlukan empat loop tambahan (satu untuk setiap koordinat). Satu loop ditunjukkan di bawah ini:Program yang dihasilkan dapat memiliki beberapa ruang di mana saja di input (kecuali antara digit).
Input Contoh:
0001 N 4545 W 0999 N 5454 W
sumber
Lua,
333328 byteFitur sistem input tingkat tinggi yang tidak valid dan loop infinite yang benar-benar inovatif untuk penggunaan berulang.
Nikmati ;)
Edit: menyimpan 5 byte dari pengubahan nama
math.abs
menjadim
danprint
sebagaip
sumber
PHP 291 Bytes.
Tidak melakukan apa pun yang pintar, hanya plods melalui masalah.
Aturan harus memiliki klausul tambahan yang mengatakan hanya bahasa dengan setidaknya 2 entri dapat menang.
sumber
PHP, 169 byte
Terinspirasi oleh @Paul Drewett:
kerusakan
PHP,
206197195 bytesecara harfiah, "moste verbose" mungkin akan Mathematica atau Mathlab?
Sekarang, bagaimana saya bisa menggandakan ukuran ini ...
kerusakan
sumber
GolfScript - 111 byte
Penjelasan
sumber
Python 2.7 -
232175 byteBerfungsi untuk semua kasus uji. Selalu menyisipkan N atau W untuk 0. Saya yakin pegolf Python yang lebih baik daripada saya bisa mencukur beberapa byte lebih baik.
EDIT
Golf off 57 byte perkasa karena beberapa tips dari @ mbomb007 dan @Titus plus dengan melihat fakta bahwa saya bisa menggabungkan dua raw_inputs dengan spasi kemudian gunakan saja .split () yang terbagi pada ruang tanpa menentukannya. Algoritmanya sama tetapi hanya golf yang jauh lebih baik.
sumber
...str(x)...
dengan...`x`...
; ganti("E" if q<0 else "W")
dengan"WE"[q<0]
"S" in i or "E" in i
pasti bisa ditulisi in "ES"
atau serupa.