Tantangan
Dalam tugas ini Anda harus menulis sebuah program yang akan mengambil input bilangan bulat N (-1e9 <= N <0 && 0 <N <= + 1e9) , lalu menghitung T = (abs (N)% M +1) , jika N bernilai positif, lalu mengeluarkan karakter T-th dari awal yang lain, mengeluarkan karakter T-th dari akhir sumber Anda.
M adalah ukuran sumber Anda dalam byte.
Contoh: Jika sumber Anda adalah:abcd efg/hi
Memasukkan:
2
Keluaran:
c
Masukan :
-3
Keluaran:
g
Masukan :
-9249678
Keluaran:
b
Masukan :
-11
Keluaran:
i
Kendala
- Jangan gunakan operasi FILE
- Anda dapat menggunakan bahasa pilihan Anda
- Cobalah untuk menghindari atau lebih tepatnya tidak menggunakan pengiriman 1 byte, karena itu merusak semua kesenangan.
- Solusi terpendek menang!
EDIT: Pernyataan masalah telah dimodifikasi sehingga solusi dapat dinilai menggunakan data uji acak (dan data yang sama untuk semua solusi) maka silakan perbarui solusi Anda, mohon maaf atas ketidaknyamanan (jika ada).
-2 -> /
-1 -> h
0 -> i
1 -> b
2 -> c
. Tetapi setidaknya pemetaan sekarang dengan suara bulat.&&
dalam kalimat pertama dimaksudkan menjadi||
?Jawaban:
rakitan x86 (Linux 32-bit, sintaks AT&T): 548
Tidak ada baris baru di akhir file:
Saya kompilasi dengan
gcc -nostartfiles -m32 qc1.S -o qc1
Verifikasi, angka positif:
Verifikasi, angka negatif:
Edit sudah benar tentang skema penomoran yang aneh. Kupikir. Itu tidak mengubah panjangnya.
sumber
Whaddaya tahu, HQ9 + menghasilkan keuntungan besar!
Tidak perlu repot-repot mengindeks ketika hanya ada satu karakter untuk dipilih!
sumber
echo '-1' | hq9+ qc1
Ruby 1.9, 66 karakter
Sebenarnya tidak banyak perbedaan dengan quine normal.
sumber
GolfScript 26 karakter
Quines lebih menyenangkan sebelum ditemukannya bahasa yang dinamis.
Sunting: Untuk pengeluh, ini adalah quine GolfScript "asli", tidak `dan ~ hanya digunakan untuk mem-parsing input.
Cacat GolfScript 44 karakter
Perhatikan betapa baiknya itu adalah string yang sama diulang dua kali, jadi string literal hanya perlu
'
diretas di depannya dan siap digunakan.sumber
Quines were more fun before the invention of dynamic languages.
:-)Bahasa, 4 byte
Kode sumber terdiri dari 4 byte nol. Terlepas dari input, output harus menjadi byte nol, yang dilakukan oleh satu
.
instruksi.sumber
Smalltalk,
94 90 5952misalnya, di kelas Object, kompilasi:
lalu kirim q: <n> ke objek apa pun; di sini bilangan bulat:
verifikasi:
1 q: 0 -> q
1 q: 1 ->:
1 q: 2 -> n
...
1 q: -1 ->)
1 q: -2 ->)
1 q: -3 -> 1
atau lebih baik:
(0 hingga: 100) kumpulkan: [: n | 1 q: n] sebagai: String
->
')q:n|s m|s:=thisContext method source.m:=s size.^s at:(n>=0ifTrue:n-1\\m+1ifFalse:m-(0-n\\m))q:n|s m|'
(-1 downTo: -500) kumpulkan: [: n | 1 q: n] sebagai: String
->
')m\\n-0(-m:eslaFfi1+m\\1-n:eurTfi0=>n(:ta s^.ezis s=:m.ecruos dohtem txetnoCsiht=:s|m s|n:q))m\\n-0('
penjelasan untuk non-Smalltalkers:
konteks ini adalah kerangka tumpukan saat ini, yang dapat diminta untuk metode ini , yang dapat ditanyakan sumbernya .
sumber
Pesona Rise , 17 byte
Cobalah online!
Hanya menggunakan standar quine untuk menghasilkan string program, kemudian menggunakan operator modulo berbasis string 1 untuk mendapatkan karakter pada indeks yang diberikan (yang secara alami mendukung indeks negatif dan positif, perilaku yang dipengaruhi oleh Python).
,
"bagi" memotong string menjadi potongan-potongan (kebalikan yang cukup logis dari*
menduplikasi waktu stringx
),+
menggabungkan, dan-
menghapusx
karakter dari akhir (kebalikan yang cukup logis dari+
). Jadi%
perintah mengambil perancharAt(x)
: satu-satunya operasi string dasar yang tersisa (setelah operasi stack-like ditangani oleh perintah yang sama yang berhubungan dengan stack; mis.l
Adalah ukuran stack sehinggal͍
panjang string).sumber
JavaScript (ES6), 28 byte
Sebuah quine yang dimodifikasi.
Nilai yang lebih besar dari 28 ditangani oleh
%28
, nilai yang kurang dari 0 ditangani oleh.substr()
.sumber