Tantangan
Tulis program / fungsi p
yang tidak kosong yang, diberi string input yang tidak kosong s
, menampilkan posisi kemunculan pertama setiap karakter s
dalam kode sumber p
.
Misalnya, jika program Anda
main() { cout << magic << cin }
^0 ^5 ^10 ^15 ^20 ^25
dan menerima input abcd{
, hasilnya seharusnya
[1, x, 9, x, 7] (0-based) [2, x, 10, x, 8] (1-based)
Di sini, x
mewakili setiap output yang tidak output berlaku untuk posisi karakter (misalnya, angka negatif, 0
jika Anda menggunakan pengindeksan 1 berbasis, NaN
, Inf
, string potato
, sejumlah besar dari panjang program anda, dll).
Batasan
Membaca kode sumber tidak diperbolehkan (seperti pada quine yang tepat). Penggunaan komentar diperbolehkan, tetapi dihitung untuk skor Anda.
Input dan output dapat dilakukan dalam format yang masuk akal, tetapi harus tidak ambigu (hanya pembatas tambahan, tidak ada rand
aliran, dan mengklaim bahwa jawabannya ada di suatu tempat di sana), konsisten (misalnya, x
dari atas harus selalu bernilai sama) dan manusia dapat dibaca ; misalnya, string atau array karakter. Anda dapat mengasumsikan bahwa input adalah string (atau larik) karakter ASCII yang dapat dicetak; tidak perlu menangani seluruh set Unicode.
Halaman kode khusus atau ascii yang tidak dapat dicetak dalam kode Anda?
Jika bahasa Anda menggunakan halaman kode khusus (Jelly, APL, dll), Anda harus memperhitungkannya (sehingga program €æÆ
harus menampilkan [1, x, 2]
input €%æ
). Menggunakan hanya karakter non-ASCII untuk menghasilkan -1
selalu (karena input hanya ASCII) bukan solusi yang valid. Anda dapat berasumsi bahwa program Anda menerima codepage kustom Anda, yaitu, jika program Anda memiliki metode konversi karakter A
ke integer 65
(pengkodean ASCII), Anda dapat berasumsi bahwa itu sekarang mengkonversi karakter ke-65 dalam codepage Anda 65
.
Terinspirasi pada tantangan berikut: Kesadaran Posisi
01030708070
,?Jawaban:
Python2, 55 Bytes
Mulai dengan string yang berisi semua karakter yang digunakan dalam kode, dan kemudian cari indeksnya
sumber
raw_input
.Bahasa , 56.623 byte
Di bawah ini adalah hexdump dari 256 byte pertama. Byte yang tersisa dapat dipilih secara sewenang-wenang.
Output dalam byte, seperti kebiasaan untuk brainfuck et al.
Bagaimana itu bekerja
Ini adalah program kucing sederhana, khususnya
,[.,]
.Kode sumber berisi semua nilai 256 byte secara berurutan, sehingga setiap indeks byte di dalamnya cocok dengan nilainya.
sumber
+[,.]
menghasilkan skor yang jauh lebih baik?Bahasa , 1.22e7 byte
Terdiri dari
12263215
NUL
byte, (Hex 0x00) .Menghasilkan a
NUL
untuk setiap karakter yang tidak muncul di sumber.Ini berarti program Brainfuck berikut
Dan dengan gangguan ...
Ini hanya menunjukkan kekuatan Lenguage sebagai bahasa golf. Takut itu.
sumber
,[>.,]
lebih pendek?Jelly ,
109 byteCobalah online!
Bagaimana itu bekerja
sumber
pbrain,
402356340338329 byteFiuh, @KritixiLithos dan saya sudah mengerjakan ini selama 4 hari sekarang.
Mencetak
0x00
jika input char tidak dalam program, indeks char (berbasis 1) di hex sebaliknya. Cobalah online!Penjelasan:
Fungsi terakhir ini adalah loop. Itu loop melalui karakter yang dipilih
[(:<>)+,-.]
secara berurutan dan membandingkan input dengan karakter. Sekarang saya akan memberikan penjelasan yang lebih dalam tentang cara kerja loop ini.Tumpukan terlihat seperti itu dalam satu lingkaran. Loop akan berjalan hingga
12-n
is0
. Kemudian kita memiliki penghitungnyan+2
. Penghitung ini juga merupakan nomor fungsi untuk masing-masing karakter yang dipilih. Jadi kapann=0
,n+2
akan sesuai dengan karakter pertama, yaitu[
.>[->+>+<<]>>[-<<+>>]<:
tidak hanya itu, itu mengubah counter ke karakter.Setelah pointer berada di mana tanda sisipan berada, kita akan membandingkan karakter yang dihasilkan dari variabel penghitung dengan input sambil mempertahankannya.
Z
adalah0
ketika karakter sama dengan input, atau bilangan bulat bukan nol lainnya.Sekarang kita datang dengan pernyataan if untuk memeriksa kesetaraan ini.
Jika
Z
tidak nol, yaitu karakter dan input tidak sama, kami menambah tempat memori berikutnya.Setelah kita keluar dari pernyataan-if ini, kita mengurangi tempat memori berikutnya. Sekarang tempat memori ini berisi
!Z
. Akhirnya menggunakan ini, kami mengeluarkan indeks karakter jika cocok dengan input dan kemudian keluar dari loop secara paksa. Selain itu, kami melanjutkan dengan loop sampai selesai atau ditemukan kecocokan.sumber
CJam ,
1412 byteMenggunakan pengindeksan berbasis 0 dan
-1
untuk karakter yang tidak muncul di sumber.Cobalah online!
sumber
Javascript, 34 byte
Dibutuhkan input sebagai array string,
x
adalah-1
(pengindeksan berbasis 0).sumber
s='s=%s;print s%%s';print s%s
dengan Python. Itu tidak termasukf=
, jadi tidak apaa
seharusnya berupa string. Tidak adamap
fungsi untuk string.C,
153152143 byteCobalah online!
sumber
Ruby,
41 88 86 71 69 67 6156 byteThx Lynn karena membunuh 6 byte
sumber
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}
harus bekerja juga, mengambil masukan dari STDIN.> <> (Ikan) 70 byte
Mungkin yang terlama> <> 1 liner yang pernah saya buat.
Ini akan mencetak output untuk setiap karakter yang ditemukan pada baris terpisah (0 diindeks).
Karakter yang tidak ditemukan akan selalu mencetak panjang kode +1 (saya bisa mengubahnya jika dianggap tidak oke dalam keadaan saat ini) sehingga dalam kasus ini 71 akan selalu menjadi karakter "Tidak ditemukan".
Saya akan menjalankan penjelasan setelah saya mendapatkan waktu.
Beberapa kasus uji;
## K = 1 \ n1 \ n71
# "# = 1 \ n69 \ n1
Cobalah online
> <> bahasa
sumber
Perl 6 ,
5052 byteTerjemahan dari solusi Ruby GB dan solusi Rod's Python .
Lambda yang memasukkan daftar karakter dan menampilkan daftar indeks berbasis nol (
Nil
untuk karakter yang tidak ada).EDIT: Memperbaiki kesalahan - diperlukan penambahan 2 byte :(
sumber
Clojure,
435648 byteSunting: Sial saya lupa
2
! Meningkat dari 43 menjadi 56.Sunting 2: Memperbarui kode sampel di bawah teks ini, memperbarui jumlah byte yang tidak termasuk
(def f ...
) tetapi hanya bagian hash-map.Peta-hash hanya terdiri dari karakter
01234{\\}
, dan menyandikan lokasi mereka. Dalam Clojure hash-maps dapat digunakan fungsi, seperti yang ditunjukkan dalam contoh lengkap ini (f
bisa diganti dengan definisi peta hash):Saya kira ini penting :)
sumber
JavaScript, 39 byte
sumber
[...s]
please?Pyth, 11 byte
Sebuah program yang mengambil input dari a
"quoted string"
, dengan tanda kutip apa pun dalam string lolos dengan yang sebelumnya\
, dan mencetak daftar nilai-nilai yang diindeks nol dengan-1
untuk karakter yang tidak di sumber.Cobalah online!
Bagaimana itu bekerja
sumber
05AB1E , 19 byte
Cobalah online!
Ini menghasilkan -1 menggantikan karakter yang hilang.
Luis Mendo memposting ini (sedikit dimodifikasi) pada Golf Anda quine for good good! , menambahkan "s" dan "k" ke quine itu menghasilkan jawaban ini juga. Namun, saya tidak dapat mengambil kredit untuk sepele modifikasi ... Luis, Anda dapat mengirim pesan kepada saya jika Anda ingin memposting ulang ini dan saya hanya akan menghapusnya. Jika Anda ingin melihat kemajuan saya sebelum menemukan pertanyaan itu, lihat pengeditan. Yah ... Itu benar- benar seperti miliknya pada satu titik.
sumber
SmileBASIC,
128968886 byteSebuah hal penting untuk menyadari adalah bahwa ini bukan benar-benar tantangan Quine. Anda hanya perlu kode sumber hingga karakter unik terakhir .
Saya menempatkan setidaknya 1 karakter di awal kode:
?R<3+CD,4LINPUT(S$)WHILE"
jadi saya hanya perlu menyimpan salinan program hingga tanda kutip pertama.sumber
Python,
9088 byteKasus cobaan:
sumber
Ditumpuk , tidak bersaing, 36 byte
Ketika saya mengatakan bahasa ini masih dalam pengembangan, saya bersungguh-sungguh. Ternyata,
prompt
digunakan untuk mengonsumsi seluruh tumpukan. Inilah sebabnya saya tidak dapat memiliki hal-hal yang baik. Coba di sini!Ini adalah kerangka kerja standar quine. Pada dasarnya,
:
duplikat fungsi[...]
pada stack, yang kemudian dieksekusi dengan!
. Kemudian, bagian dalam[...]
dieksekusi dengan fungsi pada stack. Ini melemparkannya ke string, menambahkan:!
(program itu sendiri), kemudian mengambil input stringprompt
.CS
mengubahnya menjadi string karakter. String karakter sedikit berbeda dari string biasa karena memiliki operator yang melakukan vektorisasi. Dalam hal ini, melakukanindex
vektorisasi pada input, menghasilkan setiap indeks string input dalam program, akhirnya dimasukkanout
.Untuk input
Hello, World!
, ini memberi:Saya mencoba menggunakan yang tanpa quine (yaitu menyandikan string karakter yang muncul di sumber Anda), tetapi hanya ada satu jenis tanda kutip di Stacked, yaitu
'
, sehingga akan lebih lama untuk melakukan jenis solusi itu.sumber
Sekam , 12 byte
Cobalah online!
Penjelasan
Penjelasan digunakan
¨
untuk membatasi string dan'
untuk membatasi karakter:sumber
Java 8,
172122 byteDiindeks 0, dan diberikan
-1
untuk karakter yang bukan bagian dari kode sumber.Penjelasan:
Cobalah online.
sumber
J ,
3122 byteCobalah online!
1-diindeks, 0 untuk karakter yang tidak ada dalam kode.
''
singkatan dari satu kutipan. Temukan setiap karakter dalam string11|1+i.~&'
, tambahkan 1, modulo 11.sumber
> <> , 31 byte
Cobalah online!
Output adalah 1-diindeks, dengan
32
arti karakter tidak ada dalam kode.sumber
Perl 5 dengan
-pl
, 43 byteMenggunakan input yang dipisahkan baris baru dan mencetak
-1
untuk karakter yang tidak muncul dalam program.Cobalah online!
sumber
Stax , 19 byte
Jalankan dan debug itu
Menghasilkan indeks berbasis 0, satu karakter per baris. Ternyata ini lebih pendek daripada memodifikasi
"34bL"34bL
quine yang saya tulis sebelumnya.sumber