Temukan Surat Hilang


27

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'


Bisakah saya mengambil string saja?
Leaky Nun

@LeakyNun Strings adalah array karakter, jadi ya.
Amorris

1
Bisakah output menjadi array yang berisi karakter yang hilang (mis: untuk input ['a','b','c','d','f','g'], output ['e'], jika itu membuat kode lebih pendek?
Tn. Xcoder

1
@ Mr.Xcoder String hanyalah serangkaian karakter, jadi ya
Amorris

2
Aturan empat hanyalah bagian dari aturan delapan dan dapat dihapus (setidaknya, jika Anda meletakkan kata "inklusif" di akhir aturan delapan).
NH.

Jawaban:



11

C # (.NET Core) , 48 47 46 byte, input sebagai array char

s=>{for(int i=0;s[++i]==++s[0];);return s[0];}

Cobalah 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 56 50 byte, dimasukkan sebagai string

s=>{var c=s[0];while(s.IndexOf(++c)>=0);return c;}

Cobalah online!

Solusi 58 byte sebelumnya (dirujuk dalam komentar pertama):

s=>{for(int i=1;;i++)if(s[i]-s[0]>i)return(char)(s[i]-1);}

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):

s=>{int i=0;return(char)(s.First(c=>c-s[0]>i++)-1);}

Dan Anda juga memiliki solusi one-liner (45 + 18) -byte:

s=>(char)(s.Where((c,i)=>c-s[0]>i).First()-1)

Dan solusi yang sangat pintar (37 + 18) -byte, milik Ed'ka:

s=>s.Select(e=>++e).Except(s).First()

1
Tidakkah ini gagal dikompilasi dengan tidak semua jalur kode mengembalikan nilai? Tapi +1 untuk perbandingan dengan cek s[i]-s[0], cukup pintar!
TheLethalCoder

@TheLethalCoder Ini tidak akan gagal karena forloop tidak memiliki kondisi berhenti, jadi itu akan tetap berulang sampai ifkondisi dievaluasi true.
Charlie

1
Anda dapat menyimpan 8 byte seperti ini: a=>{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}(ketika Anda mengambil input sebagai char[]). Tidak terima kasih btw, terima kasih pada komentar @Nevay pada jawaban Java 8 saya .
Kevin Cruijssen

1
@KevinCruijssen menemukan cara untuk menyimpan dua byte lagi dengan mengambil input sebagai array char.
Charlie

1
Versi Linq lebih pendek:s=>s.Select(e=>++e).Except(s).First()
Ed'ka

8

Alice , 10 byte

/X.
\ior@/

Cobalah online!

Penjelasan

Ini hanya kerangka kerja untuk program linier yang beroperasi sepenuhnya dalam mode Ordinal (pemrosesan string):

/...
\.../

Kode linear aktual adalah:

i.rXo@

Yang tidak:

i   Read all input.
.   Duplicate.
r   Range expansion. If adjacent letters don't have adjacent code points, the
    intermediate code points are filled in between them. E.g. "ae" would turn
    into "abcde". For the inputs in this challenge, this will simply insert
    the missing letter.
X   Symmetric set difference. Drops all the letters that appear in both strings,
    i.e. everything except the one that was inserted by the range expansion.
o   Output the result.
@   Terminate the program.


7

Ruby, 21 karakter

->a{[*a[0]..a[-1]]-a}

Mengembalikan array elemen tunggal, sesuai dengan komentar pemilik pertanyaan .

Contoh dijalankan:

irb(main):001:0> ->a{[*a[0]..a[-1]]-a}[['a','b','c','d','f']]
=> ["e"]

Cobalah online!


7

Java 8, 70 57 56 48 46 byte

a->{for(int i=0;++a[0]==a[++i];);return a[0];}

-14 (70 → 56) dan -2 (48 → 46) bytes berkat @CarlosAlejo .
-8 (56 → 48) byte berkat @Nevay .

Penjelasan:

Coba di sini.

a->{            // Method with char-array parameter and char return-type
  for(int i=0;  //  Start index-integer at 0 and loop as long as
    ++a[0]      //   the previous character + 1 (by modifying the character at index 0)
    ==a[++i];   //   equals the next character (by raising the index by 1 before checking)
  );            //  End of loop
  return a[0];  //  Return the now modified character at index 0 in the array
}               // End of method

1
Anda dapat menggunakan pemeran implisit alih-alih pemeran eksplisit untuk menyimpan 8 byte a->{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}.
Nevay

6

C (gcc) , 3335 36 48 60 byte

Semua optimasi harus dimatikan dan hanya pada GCC 32-bit.

f(char*v){v=*v+++1-*v?*v-1:f(v);}

Ambil input sebagai string.

Cobalah online!


2
"Semua optimasi harus dimatikan dan hanya pada GCC 32-bit." adalah cara yang sangat tidak pasti untuk mengatakan ini tidak berhasil (hanya terlihat berhasil karena UB)
sehe

Saya katakan 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;}
sehe

@sehe perilaku tidak terdefinisi konstan dianggap dapat diterima di PPCG
Keyu Gan

5

Python 3 , 74 62 58 44 40 byte

-12 byte terima kasih kepada Erik the Outgolfer. -18 byte berkat Leaky Nun. -4 byte terima kasih kepada musicman523.

Mengambil input sebagai pengujian.

lambda s:chr(*{*range(s[0],s[-1])}-{*s})

Cobalah online!

Solusi keren lainnya:

lambda s:chr(*{*range(*s[::~-len(s)])}-{*s})

1
.difference({*s})->-{*s}
Erik the Outgolfer




1
Solusi Anda adalah apa yang saya cari tetapi dengan cara yang jauh lebih elegan
Pureferret

4

Mathematica, 46 byte

Min@Complement[CharacterRange@@#[[{1,-1}]],#]&

Saya percaya itu Min@Complement[CharacterRange@@#[[{1,-1}]],#]&akan menghemat satu byte.
LegionMammal978

@ LegionMammal978 sebenarnya 2!
J42161217

3

JavaScript (ES6), 70 byte

Input sebagai array karakter

(a,p)=>a.some(c=>(q=p+1,p=c.charCodeAt(),p>q))&&String.fromCharCode(q)

Kurang golf

a=>{
  p = undefined;
  for(i = 0; c = a[i]; i++)
  {
    q = p+1
    p = c.charCodeAt()
    if (p>q)
      return String.fromCharCode(q)
  }
}

Uji

F=(a,p)=>a.some(c=>(q=p+1,p=c.charCodeAt(),p>q))&&String.fromCharCode(q)

function update() {
  var a0=A0.value.charCodeAt()
  var a1=A1.value.charCodeAt()
  if (a1>a0) {
    var r = [...Array(a1-a0+1)]
      .map((x,i)=>String.fromCharCode(a0+i))
      .filter(x => x != AX.value)
    I.textContent = r.join('') + " => " + F(r)
  }
  else {
    I.textContent=''
  }
}

update()
input { width: 1em }
Range from <input id=A0 value='O' pattern='[a-zA-Z]' length=1 oninput='update()'>
to <input id=A1 value='T' pattern='[a-zA-Z]' length=1 oninput='update()'>
excluding <input id=AX value='Q' pattern='[a-zA-Z]' length=1 oninput='update()'>
<pre id=I></pre>



3

Retina , 33 25 byte

$
¶$_
T`p`_p`.*$
D`.
!`.$

Cobalah 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.


Berikut ini adalah 25, menggunakan ide dasar yang sama: tio.run/##K0otycxL/P9fhevQNpV4rpCEgoT4ggQ9LRUulwQ9LsUEPZX///… (Saya mengurangi baris kedua karena menghemat satu byte dan kemudian saya menemukan char unik menggunakan deduplikasi.)
Martin Ender

@MartinEnder Deduplication adalah apa yang saya inginkan selama ini, dan saya sudah lupa Retina memilikinya, huh ... (Saya tahu menambahkan baris pertama membutuhkan satu byte lebih banyak daripada mengurangi baris kedua tetapi itu membuat pertandingan regex lebih pendek.)
Neil

3

Prolog SWI, 124 byte

m([H|T]):-n(H,N),c(T,N),!,m(T).
n(I,N):-o(I,C),D is C+1,o(N,D).
c([N|_],N).
c(_,N):-print(N),!,fail.
o(C,O):-char_code(C,O).

Contoh:

?- m(['a','b','c','d','f']).
e
false.

?- m(['O','Q','R','S']).
'P'
false.

?- m(['x','z']).
y
false.

?- m(['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
false.

Sedikit penjelasan:

Ini madalah prosedur "utama", nmenghasilkan karakter yang diharapkan berikutnya dalam daftar. The ctidak perbandingan - jika harapan cocok item berikutnya, terus, yang lain mencetak diharapkan karakter dan melompat keluar dari jendela.


1
Lebih pendek dari fail: 0=1.
mat

3

C ++ 14, perpustakaan standar, tipe wadah generik ( 87 86 byte)

[](auto a){return++*adjacent_find(begin(a),end(a),[](auto a,auto b){return a+1!=b;});}

Jenis kontainer dari namespace ::stddiasumsikan (misalnya std::string, std::listatau std::vector. Kalau tidak, using namespace std;atau serupa akan diasumsikan.

Berkat @Ven, dengan sedikit peretasan preprocessor, Anda bisa mendapatkannya hingga 82 byte (1 baris baru)

#define x [](auto a,int b=0){return++
x *adjacent_find(begin(a),end(a),x a!=b;});}

Lihat itu Live On Coliru

C ++ 14 tanpa pustaka standar (masih generik, 64 63 byte)

[](auto& a){auto p=*begin(a);for(auto c:a)if(c!=p++)return--p;}

Sekali lagi, perlu membantu pencarian nama hanya jika jenis wadah tidak dari namespace ::std(atau terkait dengannya)

Live On Coliruuntuk std::stringmisalnya

Live On Coliruuntuk char const[]misalnya


Anda harus memberi spasi antara teks mogok dan teks berikutnya.
CJ Dennis

@CJDennis Selesai. Omong-omong, perwakilan Anda saat ini (2469) adalah angka yang indah (menjadi 3 * 823 dan juga secara visual dipasangkan sebagai (24) (69) yaitu (2 2 2 3) (3 23))
sehe

2

Arang , 18 byte

Fγ¿¬∨∨‹ι⌊θ›ι⌈θ№θιι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai string. Bekerja dengan urutan karakter ASCII yang berdekatan.


2

C #, 104 byte

using System.Linq;a=>(char)Enumerable.Range(a.Min(),a.Max()-a.Min()).Except(a.Select(c=>(int)c)).First()

Versi Lengkap / Terformat:

using System.Linq;

namespace System
{
    class P
    {
        static void Main()
        {
            Func<char[], char> f = a =>
                (char)Enumerable.Range(a.Min(), a.Max() - a.Min())
                                .Except(a.Select(c=>(int)c))
                                .First();

            Console.WriteLine(f(new[] { 'a', 'b', 'c', 'd', 'f' }));

            Console.ReadLine();
        }
    }
}

Versi Linq yang sangat pintar oleh Ed'ka :s=>s.Select(e=>++e).Except(s).First()
Charlie

@CarlosAlejo saya melihat Anda menambahkannya ke jawaban Anda jadi saya tidak akan memperbarui saya tapi ya itu sangat pintar. Jauh lebih pendek daripada versi saya yang melakukannya.
TheLethalCoder

2

MATL, 8 7 byte

1 byte disimpan berkat @Luis

tdqf)Qc

Cobalah di MATL Online

Penjelasan

      % Implicitly grab the input as a string
t     % Duplicate the string
d     % Compute the differences between successive characters
q     % Subtract 1 from each element
f     % Get the locations of all non-zero characters (1-based index)
)     % Extract that character from the string
Q     % Add one to get the next character (the missing one)
c     % Convert to character and display

@LuisMendo Luar Biasa, terima kasih!
Suever

2

Excel, 110 + 2 = 112 byte

=CHAR(CODE(LEFT(A1))-1+MATCH(0,IFERROR(FIND(CHAR(ROW(INDIRECT(CODE(LEFT(A1))&":"&CODE(RIGHT(A1))))),A1),0),0))

Harus dimasukkan sebagai rumus array ( Ctrl+ Shift+ Enter) yang menambahkan kurung keriting { }di setiap ujung, menambahkan dua byte. Input adalah sebagai string A1, yang OK per OP .

Ini bukan jawaban terpendek sejauh ini (jarang Excel) tapi saya suka melihat apakah itu bisa dilakukan.



2

CJam , 6 byte (program penuh) / 7 byte (blok kode)

q),^W=

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:

{),^W=}

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, qbaca 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 adalah cdfgh, maka setelah ),stack akan berisi string cdfg(yaitu input dengan huruf terakhir dihapus) dan ...abcdefg, di mana ...singkatan dari sekelompok karakter dengan kode ASCII di bawah ini a(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 contoh cdfg, hasilnya setelah ),^akan ...abe, di mana ...lagi singkatan dari sekelompok karakter dengan kode ASCII di bawah ini a. Akhirnya, W=ekstrak karakter terakhir dari string ini, yang merupakan karakter hilang eyang ingin kita temukan (dan buang sisanya). Ketika program berakhir, juru bahasa CJam secara implisit mencetak isi tumpukan.


Bonus: GolfScript , 6 byte (program lengkap)

),^-1>

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.


6
Cuplikan kode tidak diizinkan secara default ; hanya fungsi dan program lengkap. Jadi Anda mungkin perlu itu q(program), atau {...}(blok). +1 untuk pendekatan ini
Luis Mendo

Ini sangat pintar!
Buah Esolanging

2

Sekam , 6 byte

→S-(ḣ→

Cobalah online!

Fungsi ini mengambil string (daftar karakter) sebagai input, dan mengembalikan karakter sebagai output.

Penjelasan

→S-(ḣ→
    ḣ→    Get the list of all characters from the null byte to the last character of the input
 S-       Subtract the input from this list
→         Get the last element of the result

2

Python 2 - 76 byte

Kehilangan solusi python 2 yang sudah ada tetapi pendekatannya sedikit berbeda jadi saya pikir saya akan mempostingnya:

lambda c:[chr(x)for x in range(ord(c[0]),ord(c[0]+26)if chr(x)not in c][0]

2

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

: f ' nip s:each repeat over n:- 2 n:= if n:1+ "" swap s:+ . reset 1 then depth n:1- while! reset ;

Versi tidak disatukan

: f \ s -- c 
  ' nip s:each    \ convert each letter into its ASCII code and put them on stack
  repeat
    over
    n:- 2 n:=     \ check if there is a missing letter 
    if            
      n:1+        \ compute the ASCII code of missing letter
      "" swap s:+ \ convert ASCII code into printable character
      .           \ print out the missing letter
      reset 1     \ set condition to exit from while!
    then
    depth n:1-    \ verify if there are letters to check
  while!          
  reset           \ clean stack
;

Penggunaan dan contoh

ok> "abcdf" f
e
ok> "OQRS" f
P
ok> "xz" f
y
ok> "abcdefghijklmnopqrstuwxyz" f
v
ok> "ab" f

ok> "def" f

ok>

2

JavaScript (ES6), 64 byte

Mengambil input sebagai string.

s=>(g=p=>(c=String.fromCharCode(n++))<s[p]?p?c:g(p):g(p+1))(n=0)

Bagaimana?

  • Inisialisasi: Kita mulai dengan n = 0 dan p = 0 dan memanggil fungsi rekursif g () .

    g = p =>                                   // given p
      (c = String.fromCharCode(n++)) < s[p] ?  // if the next char. c is not equal to s[p]:
        p ?                                    //   if p is not equal to zero:
          c                                    //     step #3
        :                                      //   else:
          g(p)                                 //     step #1
      :                                        // else:
        g(p + 1)                               //   step #2
  • 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


1

J, 20 byte

{&a.>:I.1 0 1&E.a.e.
  • a.e. topeng boolean untuk huruf input di charset ascii
  • 1 0 1&E.topeng boolean baru yang menunjukkan apakah urutan 101dimulai pada indeks itu, yaitu, menemukan tempat urutan "melompat" dimulai
  • I. 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 dilewati

Cobalah online!


Bagiku itu seperti potongan.
Adám

@ Adám Ini ditulis dalam gaya diam-diam (point-free), yang saya percaya dianggap sebagai "seperti fungsi" yang bertentangan dengan cuplikan. Sebaik yang saya tahu, itu tidak lebih dari potongan dari solusi APL Anda (tapi saya tidak tahu dyalog, jadi ambil apa yang saya katakan dengan sebutir garam).
zgrep

@ Adm ya, dalam arti bahwa itu tidak dapat ditugaskan ke variabel tetapi mengasumsikan input di sisi kanannya. apakah ini tidak legal? Saya bertanya tentang hal itu di suatu tempat dan diberitahu bahwa itu baik
Jonah

Pemahaman saya untuk APL / J / K adalah bahwa kode harus dapat berada dalam nama, apakah dengan penugasan atau sebagai badan kata kerja / fungsi eksplisit (namun, bentuk eksplisit kemudian harus memiliki input eksplisit juga). Cuplikan adalah kode yang mengasumsikan nilai-nilai dalam variabel dan / atau perlu menempel ke sebuah baris, tetapi tidak dapat berdiri sendiri.
Adám

@ zgrep Tidak, kode ini eksplisit (non-diam-diam), tetapi tidak memiliki referensi untuk argumennya di paling kanan. Fungsi APL saya adalah fungsi tacit lengkap yang dapat ditugaskan atau dimasukkan dalam tanda kurung.
Adám

1

ES6, 125 byte:

(a=>((s,f)=>(r=(i,b)=>a[i]?r(i+1,b||(s[f](i)-s[f](i-1)-1&&String.fromCharCode(s[f](i-1)+1))):b)(1,0))(a.join(""),"charCodeAt"))

http://jsbin.com/vasoqidawe/edit?console

Fungsi yang dikembalikan perlu dipanggil dengan array

(["a","c"])

seseorang dapat menyimpan 9 byte lainnya dengan menghapus .join ("") dan meneruskan sebuah string:

("ac")

ES6, 108 byte:

(a=>((s,f,o)=>(a.find((_,i)=>(o?++o:o=s[f](i))!==s[f](i)),String.fromCharCode(o)))(a.join(""),'charCodeAt'),0))

http://jsbin.com/tudiribiye/edit?console


1
mengikat ??? dalam kode golf?
edc65

@ edc65 ada apa dengan itu? (maaf jika ini n00b, tapi itu golf pertama saya :))
Jonas Wilms

@ edc65 tetapi Anda mungkin benar, menghapusnya menyelamatkan 4 byte ...
Jonas Wilms

a.join("")bisa menjadia.join``
user2428118

1

Common Lisp, 88 byte

(lambda(s)(loop as(x y)on s if(>(#1=char-code y)(1+(#1#x)))return(code-char(1+(#1#x)))))

Cobalah online!


1

Python 2 , 69 byte

lambda a:chr((ord(a[0])+ord(a[-1]))*-~len(a)/2-sum(ord(x)for x in a))

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 dalam listkode memberikan kode surat yang terlewat.



1

APL (Dyalog) , 17 byte

(⊃⎕AV/⍨∨\∧~)⎕AV∘∊

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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.