Pedoman
Tugas
Tulis metode yang menggunakan larik huruf berurutan (meningkat) sebagai input dan mengembalikan huruf yang hilang dalam larik (daftar dalam beberapa bahasa).
Aturan
- Ini adalah kode golf sehingga jawaban tersingkat dalam byte menang!
- Anda akan selalu mendapatkan array yang valid
- Akan selalu ada satu huruf yang hilang
- Panjang array akan selalu minimal 2.
- Array akan selalu berisi huruf hanya dalam satu kasus (huruf besar atau kecil)
- Anda harus menampilkan dalam kasus yang sama (huruf besar atau kecil) dengan input
- Array hanya akan selalu berjalan satu huruf per waktu (melewatkan huruf yang hilang)
- Panjang array akan antara 2 dan 25
- Elemen pertama atau terakhir dari array tidak akan pernah hilang
Contohnya
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
['x','z'] -> 'y'
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'] -> 'v'
code-golf
array-manipulation
alphabet
Amorris
sumber
sumber
['a','b','c','d','f','g']
, output['e']
, jika itu membuat kode lebih pendek?Jawaban:
Pyth , 5 byte
Cobalah online!
sumber
C # (.NET Core) ,
48 4746 byte, input sebagai array charCobalah online!
Penjelasan: elemen pertama dalam array ditambahkan serta pointer yang mengulangi elemen-elemen berikut. Ketika elemen pertama dan elemen saat ini berbeda, itu mengembalikan elemen pertama.
C # (.NET Core) ,
58 5650 byte, dimasukkan sebagai stringCobalah online!
Solusi 58 byte sebelumnya (dirujuk dalam komentar pertama):
Algoritma menggunakan System.Linq
Algoritma berikut harus menambahkan
using System.Linq;
(18 byte) ke jumlah byte dan oleh karena itu lebih panjang.Saya cukup menyukai yang ini (52 + 18 byte):
Dan Anda juga memiliki solusi one-liner (45 + 18) -byte:
Dan solusi yang sangat pintar (37 + 18) -byte, milik Ed'ka:
sumber
s[i]-s[0]
, cukup pintar!for
loop tidak memiliki kondisi berhenti, jadi itu akan tetap berulang sampaiif
kondisi dievaluasitrue
.a=>{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
(ketika Anda mengambil input sebagaichar[]
). Tidak terima kasih btw, terima kasih pada komentar @Nevay pada jawaban Java 8 saya .s=>s.Select(e=>++e).Except(s).First()
Alice , 10 byte
Cobalah online!
Penjelasan
Ini hanya kerangka kerja untuk program linier yang beroperasi sepenuhnya dalam mode Ordinal (pemrosesan string):
Kode linear aktual adalah:
Yang tidak:
sumber
Haskell ,
3330 byteCobalah online!
sumber
until
menghemat satu byte:f(a:b)=until(`notElem`a:b)succ a
Ruby, 21 karakter
Mengembalikan array elemen tunggal, sesuai dengan komentar pemilik pertanyaan .
Contoh dijalankan:
Cobalah online!
sumber
Java 8,
7057564846 byte-14 (70 → 56) dan -2 (48 → 46) bytes berkat @CarlosAlejo .
-8 (56 → 48) byte berkat @Nevay .
Penjelasan:
Coba di sini.
sumber
a->{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
.C (gcc) , 33
35364860byteSemua optimasi harus dimatikan dan hanya pada GCC 32-bit.
Ambil input sebagai string.
Cobalah online!
sumber
foo(char*a){return*a+1==a[1]?foo(a+1):++*a;}
cukup bagus; Hanya 1 char lebih pendek dari yang lebih alamifoo(char*a){while(*a+1==a[1])a++;return++*a;}
Python 3 ,
7462584440 byte-12 byte terima kasih kepada Erik the Outgolfer. -18 byte berkat Leaky Nun. -4 byte terima kasih kepada musicman523.
Mengambil input sebagai pengujian.
Cobalah online!
Solusi keren lainnya:
sumber
.difference({*s})
->-{*s}
Mathematica, 46 byte
sumber
Min@Complement[CharacterRange@@#[[{1,-1}]],#]&
akan menghemat satu byte.JavaScript (ES6), 70 byte
Input sebagai array karakter
Kurang golf
Uji
sumber
PHP> = 7.1, 46 byte
Ambil input sebagai string
PHP Sandbox Online
sumber
Retina ,
3325 byteCobalah online! Bekerja dengan berbagai karakter ASCII. Sunting: Disimpan 8 byte berkat @MartinEnder. Penjelasan: Tahap pertama menduplikasi input. Yang kedua mengurangi semua karakter dalam salinan dengan 1 titik kode. Tahap ketiga menghapus semua karakter dalam salinan yang masih muncul dalam aslinya. Ini hanya meninggalkan input asli, karakter yang mendahului karakter pertama dari input asli dan karakter yang hilang. Tahap terakhir hanya cocok dengan karakter yang hilang.
sumber
Prolog SWI, 124 byte
Contoh:
Sedikit penjelasan:
Ini
m
adalah prosedur "utama",n
menghasilkan karakter yang diharapkan berikutnya dalam daftar. Thec
tidak perbandingan - jika harapan cocok item berikutnya, terus, yang lain mencetak diharapkan karakter dan melompat keluar dari jendela.sumber
fail
:0=1
.C ++ 14, perpustakaan standar, tipe wadah generik (
8786 byte)Jenis kontainer dari namespace
::std
diasumsikan (misalnyastd::string
,std::list
ataustd::vector
. Kalau tidak,using namespace std;
atau serupa akan diasumsikan.Lihat itu Live On Coliru
C ++ 14 tanpa pustaka standar (masih generik,
6463 byte)Sekali lagi, perlu membantu pencarian nama hanya jika jenis wadah tidak dari namespace
::std
(atau terkait dengannya)Live On Coliruuntuk
std::string
misalnyaLive On Coliruuntuk
char const[]
misalnyasumber
Arang , 18 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai string. Bekerja dengan urutan karakter ASCII yang berdekatan.
sumber
C #, 104 byte
Versi Lengkap / Terformat:
sumber
s=>s.Select(e=>++e).Except(s).First()
MATL,
87 byte1 byte disimpan berkat @Luis
Cobalah di MATL Online
Penjelasan
sumber
Excel, 110 + 2 = 112 byte
Harus dimasukkan sebagai rumus array ( Ctrl+ Shift+ Enter) yang menambahkan kurung keriting
{ }
di setiap ujung, menambahkan dua byte. Input adalah sebagai stringA1
, yang OK per OP .Ini bukan jawaban terpendek sejauh ini (jarang Excel) tapi saya suka melihat apakah itu bisa dilakukan.
sumber
Rexx (Regina) , 56 byte
Cobalah online!
Akhirnya yang memungkinkan REXX untuk menggunakan manipulasi-string yang kuat.
sumber
CJam , 6 byte (program penuh) / 7 byte (blok kode)
Cobalah online!
Ini adalah program CJam lengkap yang membaca string input dari input standar dan mencetak huruf yang hilang ke output standar. CJam sebenarnya tidak memiliki "metode", yang merupakan tantangan yang diminta, tetapi hal terdekat mungkin akan menjadi blok kode yang dapat dieksekusi, seperti ini:
Cobalah online!
Blok kode ini, ketika dievaluasi, mengambil input sebagai string (yaitu array karakter) pada stack, dan mengembalikan karakter yang hilang juga pada stack.
Penjelasan: Dalam program lengkap,
q
baca string input dan letakkan di tumpukan.)
kemudian memunculkan karakter terakhir dari string input, dan operator jangkauan,
mengubahnya menjadi array yang berisi semua karakter dengan titik kode di bawahnya (termasuk semua huruf sebelum itu dalam alfabet). Jadi, misalnya, jika inputnya adalahcdfgh
, maka setelah),
stack akan berisi stringcdfg
(yaitu input dengan huruf terakhir dihapus) dan...abcdefg
, di mana...
singkatan dari sekelompok karakter dengan kode ASCII di bawah inia
(yaitu semua karakter di bawah input terakhir dihapus surat).Operator set perbedaan simetris
^
kemudian menggabungkan string-string ini ke dalam string tunggal yang berisi persis karakter-karakter yang muncul di salah satu string, tetapi tidak di keduanya. Ini mempertahankan urutan di mana karakter muncul dalam string, jadi untuk input contohcdfg
, hasilnya setelah),^
akan...abe
, di mana...
lagi singkatan dari sekelompok karakter dengan kode ASCII di bawah inia
. Akhirnya,W=
ekstrak karakter terakhir dari string ini, yang merupakan karakter hilange
yang ingin kita temukan (dan buang sisanya). Ketika program berakhir, juru bahasa CJam secara implisit mencetak isi tumpukan.Bonus: GolfScript , 6 byte (program lengkap)
Cobalah online!
Ternyata kode yang hampir sama juga berfungsi di GolfScript. Kami menyimpan satu byte dalam versi program lengkap karena input tersirat dari GolfScript, tetapi kehilangan satu byte karena, tidak seperti CJam
W
, GolfScript tidak memiliki variabel huruf tunggal berguna yang diinisialisasi ke -1.Juga, CJam memiliki tipe integer dan karakter yang terpisah (dan string hanyalah array yang mengandung karakter), sedangkan GolfScript hanya memiliki tipe integer tunggal (dan memiliki tipe string khusus yang berperilaku agak berbeda dari array normal). Hasil dari semua ini adalah, jika kita ingin penerjemah GolfScript mencetak huruf yang hilang dan bukan nomor kode ASCII, kita perlu mengembalikan string karakter tunggal alih-alih hanya karakter itu sendiri. Untungnya, melakukan perubahan di sini hanya perlu mengganti operator pengindeksan
=
dengan operator pemotongan array / string>
.Tentu saja, berkat I / O tersirat dari GolfScript, kode di atas juga dapat digunakan sebagai cuplikan yang membaca string dari tumpukan dan mengembalikan string karakter tunggal yang berisi huruf yang hilang. Atau, lebih tepatnya, potongan apa pun yang menggunakan string tunggal pada stack sebagai argumen, dan mengembalikan hasilnya sebagai string yang dapat dicetak pada stack, juga merupakan program GolfScript lengkap.
sumber
q
(program), atau{...}
(blok). +1 untuk pendekatan iniSekam , 6 byte
Cobalah online!
Fungsi ini mengambil string (daftar karakter) sebagai input, dan mengembalikan karakter sebagai output.
Penjelasan
sumber
Python 2 - 76 byte
Kehilangan solusi python 2 yang sudah ada tetapi pendekatannya sedikit berbeda jadi saya pikir saya akan mempostingnya:
sumber
8 , 99 byte
Alasan
Jika jarak antar huruf lebih besar dari dua, maka ada huruf yang hilang. Jarak huruf diperoleh dengan menghitung perbedaan antara kode ASCII dari setiap huruf.
Kode
Versi tidak disatukan
Penggunaan dan contoh
sumber
JavaScript (ES6), 64 byte
Mengambil input sebagai string.
Bagaimana?
Inisialisasi: Kita mulai dengan n = 0 dan p = 0 dan memanggil fungsi rekursif g () .
Langkah # 1: Kami menambah n sampai
c = String.fromCharCode(n)
sama dengan karakter pertama dari string input s [0] .Langkah # 2: Sekarang kita disinkronkan, kita menambah n dan p sekaligus sampai
c = String.fromCharCode(n)
tidak lagi sama dengan s [p] lagi.Langkah # 3: Kami mengembalikan c : karakter yang diharapkan yang tidak ditemukan.
Uji kasus
Tampilkan cuplikan kode
sumber
J, 20 byte
a.e.
topeng boolean untuk huruf input di charset ascii1 0 1&E.
topeng boolean baru yang menunjukkan apakah urutan101
dimulai pada indeks itu, yaitu, menemukan tempat urutan "melompat" dimulaiI.
indeks kecocokan itu, yaitu karakter sebelum yang dilewati>:
selisih 1, yaitu, indeks char dilewati dalam ascii charset{&a.
pilih indeks itu dari charset ascii, yaitu, kembalikan char yang dilewatiCobalah online!
sumber
ES6, 125 byte:
http://jsbin.com/vasoqidawe/edit?console
Fungsi yang dikembalikan perlu dipanggil dengan array
seseorang dapat menyimpan 9 byte lainnya dengan menghapus .join ("") dan meneruskan sebuah string:
ES6, 108 byte:
http://jsbin.com/tudiribiye/edit?console
sumber
a.join("")
bisa menjadia.join``
Common Lisp, 88 byte
Cobalah online!
sumber
Python 2 , 69 byte
Cobalah online!
Beberapa penjelasan Seperti yang kita ketahui elemen pertama dan terakhir dari daftar, kita dapat dengan mudah menghitung jumlah kode dari semua karakter di
list + the missed char
(menggunakan rumus ringkasan dari perkembangan aritmatika ). Perbedaan antara jumlah ini dan jumlah kode dari semua karakter dalamlist
kode memberikan kode surat yang terlewat.sumber
05AB1E ,
97 byteCobalah online!
sumber
2
itu kita menggunakan algoritma yang sama, meskipun saya hampir tidak tahu 05AB1E :)APL (Dyalog) , 17 byte
Cobalah online!
⎕AV∘∊
Boolean: setiap karakter dalam A tomic V ector (set karakter) anggota argumen?(
...)
terapkan fungsi diam-diam berikut:⊃
elemen pertama dari⎕AV
yang A tomic V ektor (set karakter)/⍨
yang∨\
mengikuti inisial (anggota argumen)∧
tapi~
bukan (anggota argumen)sumber