Diilhami secara acak oleh Angka yang Meningkat Saat Surat Menurun
Diberikan daftar campuran huruf dan bilangan bulat (misalnya, ['a', 2, 3, 'b']
) menambah huruf dengan satu posisi dalam alfabet (membungkus z
ke a
) dan mengurangi angka dengan 1. Untuk contoh di atas, output harus ['b', 1, 2, 'c']
.
- Input dapat berupa daftar tipe campuran, string terbatas, daftar string, dll.
z
membungkus kea
, tetapi1
pergi ke0
, dan0
pergi ke-1
, dll.- Masukan hanya akan menjadi
[a-z]
dan bilangan bulat. Anda dapat memilih huruf kapital[A-Z]
sebagai input jika itu lebih mudah bagi Anda. - Input dijamin tidak kosong.
- Input mungkin hanya berisi angka atau huruf saja.
Contoh:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Aturan dan Klarifikasi
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Anda dapat mencetak hasilnya ke STDOUT atau mengembalikannya sebagai hasil fungsi.
- Output tidak harus memiliki format yang sama dengan input (misalnya, Anda bisa mengambil input sebagai string dan output sebagai daftar).
- Program lengkap atau fungsi dapat diterima.
- Jika berlaku, Anda dapat menganggap bilangan bulat input / output sesuai dengan
int
rentang asli bahasa Anda . - Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
int
rentang asli bahasa Anda , sehingga Anda tidak akan pernah mendapatkanInteger.MinValue
sebagai input.Jawaban:
05AB1E , 5 byte
Cobalah online!
sumber
Python 3 , 59 byte
Cobalah online!
-1 byte terima kasih kepada Erik the Outgolfer
sumber
-96
dengan+8
menghemat satu byte.''!=i*0
tiga byte lebih pendek daristr(i)>'9'
pekerjaan saya yang baikPerl 5 (-p), 17 byte
Cobalah online!
Bonus 19-byter:
TIO . Yang ini menampilkan beberapa trik keren, tetapi gagal mengalahkan solusi langsung di atas.
sumber
Ruby , 34 byte
Untuk setiap elemen, cobalah untuk mengembalikan elemen -1. String tidak dapat melakukan ini, sehingga mereka salah dan diambil oleh
rescue
klausa, yang sebaliknya memanggilnyasucc
untuk mengembalikan huruf berikutnya dalam alfabet.succ
"berguling"z
dan kembaliaa
, jadi kami cukup mengambil karakter pertama dalam string yang dikembalikan.Cobalah online!
sumber
JavaScript (Node.js) , 55 byte
Cobalah online!
sumber
Python 3 ,
182130118 byte-51 byte berkat @AdmBorkBork dan @Black Owl Kai, -1 byte berkat @Black Owl Kai, -12 byte dengan mengganti
.append()
dengan+=[]
dan menggantin+1
dengan-~n
Cobalah online!
Saya membuat ini ketika pertanyaannya ada di Sandbox tetapi tidak melihatnya diposting sampai sekarang. : P
Tidak disatukan
Penjelasan
Untuk setiap elemen dalam daftar yang dimasukkan
x
, ia mencoba untuk mengurangi 1 dan menambahkannya ke daftar akhirnya dikembalikan. Jika kesalahan terjadi (karena elemennya adalah string), indeks huruf dalam alfabet ditambahkan oleh 1 dan mod 26 diambil. Mod 26 membungkus indeks 26 kembali ke 0.sumber
(x+27)%26
memiliki hasil yang sama dengan(x+1)%26
str(d)==d
untuk memeriksa apakah string atau tidak, alih-alih bergantung pada coba / kecuali. Kemudian, karena Anda tidak perlu lagi mencoba / kecuali, Anda dapat melakukan semuanya dalam daftar pemahaman! Saya akan membiarkan Anda memikirkannya sedikit lebih banyak tetapi Anda dapat dengan mudah mendapatkan di bawah 100 byte dengan cara ini;)J , 30 byte
Cobalah online!
sumber
Gema , 55 karakter
Solusi kotor. Membungkus kenaikan huruf sangat panjang, jadi dapatkan aturan yang terpisah.
Input bisa berupa apa saja, cukup gunakan beberapa pemisah. (Anda bahkan dapat menghilangkan pemisah antara angka dan huruf. Dengan harga 1 karakter untuk diubah,
<L1>
Anda dapat menghilangkan pemisah antara huruf juga.)Contoh dijalankan:
Cobalah online!
Gema, 66 karakter
Solusi bersih. Setengah relatif efisien, kemudian setengah murni kesakitan.
Contoh dijalankan:
Cobalah online!
sumber
R , 77
85byteTerima kasih @Giuseppe untuk rejan 8 byte
Cobalah online!
Mengambil input sebagai daftar. Setelah perubahan besar oleh @Giuseppe, ini menggunakan
Map
untuk menerapkan fungsi ke daftar. Itu digunakanmatch
untuk menguji karakter. Selama pengujian daftar surat yang diperluas dan indeks disimpan untuk pengembalian.sumber
character
s tidak terbatas karena mereka dilemparkannumeric
olehis.finite
dan begituNA
?is.finite
, kupikir aku akan melakukannya sendiriMap
danmatch
. Adalah baik untuk mempelajari sesuatu setiap hari :)MathGolf , 14 byte
Cobalah online!
Mengambil huruf sebagai huruf kecil.
Penjelasan
sumber
Retina ,
525048584137 byte-4 byte terima kasih kepada @FryAmTheEggman (dan untuk menyebutkan saya punya bug:
1 → -1
bukannya1 → 0
).+10 byte untuk memperbaiki bug dengan
1
dan0
.. Kasus tepi yang menjengkelkan yang mengacaukan saya cukup lama .. Tapi sekarang golf menjadi 41 byte. (Sekarang aku ingin tahu tentang <40 byte versi @ Neil dan @CowsQuack disebutkan di komentar .. Terima kasih @ Neil untuk ujung mengkonversi0
ke-
, dan berurusan dengan nilai-nilai negatif pertama. Konversi mereka kembali langsung dari unary ke bilangan bulat banyak membantu.)Rupanya saya tidak membutuhkan batas pada saat ini, jadi -4 byte ..>.>
I / O dipisahkan oleh koma.
Cobalah online.
Penjelasan:
Transliterasikan semua
"zabcdefghijklmnopqrstuvwxy(z)"
ke"abcdefghijklmnopqrstuvwxyz"
:Ganti semua mandiri
0
dengan-
:Ubah semua angka menjadi unary, dengan menggantinya dengan jumlah garis bawah itu:
Untuk semua nilai negatif, dengan nol atau lebih garis unary di belakangnya: pertahankan tanda minus, dan dapatkan panjang total kecocokan ini (termasuk
-
), dikonversi kembali ke integer:Sedangkan untuk bilangan bulat positif: cocokkan bilangan bulat positif dengan mencocokkan satu garis unary, diikuti oleh nol atau lebih garis unary. Dan kemudian menggantinya dengan panjang grup tangkap untuk menghapus satu baris unary dan mengubahnya kembali menjadi bilangan bulat secara bersamaan:
sumber
SNOBOL4 (CSNOBOL4) , 103 byte
Cobalah online!
sumber
PHP , 50 byte
Cobalah online!
Tes
Keluaran huruf / bilangan bulat dipisahkan dengan
_
dengan trailing separator.Di PHP Anda dapat menambahkan huruf secara langsung, jadi saya memanfaatkannya. Tetapi nilai tambah
z
untukaa
, untuk mengubahnya menjadia
,(++$a)[0]
digunakan yang hanya menghasilkan karakter pertama dari nilai tambah.sumber
Japt
-m
,1312 byte-1 byte terima kasih kepada Shaggy
Cobalah
Penjelasan:
Catatan :
;
berubahC
menjadi alfabet huruf kecilsumber
z
kea
.o
->¤
akan menghemat satu byte di sini.+2
dan kemudian-1
terima kasih kepada Shaggy akan lebih akurat! : D+2
berkat berkat Oliver: PHaskell,
5251 byteKarena Haskell tidak mengizinkan daftar tipe campuran, huruf dan angka diambil dan dikembalikan sebagai string.
Cobalah online!
Periksa setiap elemen daftar: jika stringnya
"z"
, kembali"a"
; jika karakter pertama dari string adalah>'`'
(yaitu huruf, bukan angka), kembalikan penerus karakter dalam string; selain itu harus angka, jadi konversikan ke integer, kurangi 1 dan berubah menjadi string lagi.Sunting: -1 byte berkat @cole.
sumber
Jelly , 13 byte
Cobalah online!
Perbaikan pintar oleh Jonathan Allan .
Catatan: Ini bukan program lengkap, catatan kaki di atas TIO memungkinkan untuk dimasukkan menggunakan argumen baris perintah untuk menguji fungsi.
sumber
®i‘ị®µ’e?€Øa©
adalah perbaikan untuk nol saya percaya.Ọ
tidak bekerja dalam kasus itu. Ironis, karena saya menghindari menggunakan~
sebagai syarat untuk menghitung-1
dalam input ... Juga, bagaimana saya akan mempersingkat®i‘ị®
...C ++ 17 (gcc) , 120 byte
Berikut
f
adalah fungsi yang diperlukan;l
adalah parameter input dan output, dan diharapkan menjadi wadah objek yang kompatibel denganstd::variant<char, int>
atau sebaliknya.Cobalah online!
sumber
dzaima / APL,
2120 byteCobalah online!
-1 terima kasih kepada ngn.
sumber
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK) , 27 byte
Cobalah online!
-8 Terima kasih kepada ngn dan dzaima :)
sumber
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
menguraikan case khusus & menggunakan huruf besar (dan'
harus dihitung sebagai input harus daftar)'
harus dihitung. inilah ungkapan yang sedikit lebih panjang yang tidak perlu'
dan juga menangani "z" -> "a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. di sini-96
(yang +1 dikurangi kode ascii "a") dapat diganti dengan8
saat diambil mod 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Pesona Rise , 36 byte
Cobalah online!
Proses umum adalah membaca input, diawali dengan 0 (koersi ke string), konversikan kembali ke angka (karakter tunggal akan selalu mengembalikan -1), bandingkan dengan input. Jika sama, itu harus berupa nilai numerik, kurangi 1 dan cetak. Jika tidak sama, itu haruslah char, kurangi 1, bandingkan dengan
{
. Jika kurang dari, cetak, ganti dengana
dan cetak.Ulangi sampai program melakukan stack underflow.
Output dipisahkan oleh
;
untuk menghemat 1 byte (dan memiliki satu trailing). Input dipisahkan oleh ruang.sumber
Stax , 17 byte
Jalankan dan debug itu
Ini terasa seperti itu mungkin untuk dilakukan lebih pendek, tapi saya tidak bisa menahan kesempatan untuk menggunakan fitur stax baru dari rilis terakhir.
Memperlakukan seluruh input sebagai string:
eval(match) - 1
. Ini adalah fitur baru, karena penggantian blok regex bukan string, tetapi bilangan bulat.sumber
Python 3, 66 byte
Edit:
Saya tidak melihat solusi Jitse sampai sekarang. Caranya if ''! = I * 0 is awesome!
sumber
C #, 148 byte
Tautan replit
Tidak Disatukan:
sumber
Arang , 16 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input pada STDIN, setiap baris dapat berupa huruf kecil tunggal atau integer, dan output pada baris terpisah pada STDOUT. Penjelasan:
Masukan berulang-ulang dari STDIN hingga saluran kosong tercapai.
Buat output ekspresi ini pada barisnya sendiri.
Apakah ini substring dari huruf kecil yang sudah ditentukan sebelumnya?
Jika demikian maka cetak huruf berikutnya yang diindeks secara siklis.
Kalau tidak, kurangi nilainya dan kembalikan ke string untuk hasil cetak implisit.
sumber
Zsh , 47 byte
Cobalah online!
sumber
C (gcc) ,
9386 byteCobalah online!
Inputnya adalah
NULL
array'\0'
-minminasi dari string -minminasi, mis{"a", "b", "c", "17", NULL}
.-7 byte terima kasih kepada @ceilingcat
sumber
Perl 6 , 31 byte
Cobalah online!
Anonim Apa pun lambda yang memetakan setiap elemen ke daftar dan mencoba untuk mengurangi satu darinya, jika tidak menambahnya dan mengambil karakter pertama dalam kasus yang
z
membungkus keaa
.sumber
T-SQL 2012, 61 byte
Huruf kapital diperlukan dalam input.
Menggunakan variabel tabel sebagai input.
Cobalah online
sumber
SimpleTemplate, 80 byte
Ini ditulis pada bahasa yang saya buat.
Karena keterbatasan dalam kompiler, saya tidak bisa menguranginya lagi.
Dan sekarang, ungolfed:
Dan penjelasannya:
{@each argv as value}
- loop melalui semua nilai dalamargv
. (argv
berisi semua argumen yang diteruskan).Jika
as <var>
tidak ada,_
variabel default diasumsikan.{@if value is matches "@\d+@"}
- memeriksa yangvalue
cocok dengan ekspresi reguler"@\d+@"
.{@inc by -1 value}
- menambah nilai dengan -1 (pada dasarnya, penurunan).{@echo value, "\n"}
dan{@echol_}
-echol
menampilkan nilai yang diteruskan dan menambahkan garis di akhir.{@else}
- Cukup jelas{@inc by 1 value}
- menambah nilainya dengan 1. Jikaby <value>
hilang, maka dianggap 1.{@echo value.0, "\n"}
dan{@echol_.0}
-echol
menampilkan nilai yang diteruskan dan menambahkan garis di akhir.Hal ini diperlukan karena aturan tantangan:
z wraps to a
.Ketika sebuah
@inc
digunakan pada string, itu menambah karakter dan, setelah itu memukulz
, itu membungkusaa
.Mengeluarkan karakter pertama memenuhi tantangan, dengan biaya 7 byte.
{@/}
- menutup yang di{@else}
atas (opsional).{@/}
- menutup yang di{@each}
atas (opsional).Anda dapat mencobanya di: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Setiap argumen yang diteruskan
render()
akan menjadi nilai baru yang dipertimbangkan.sumber
Perl, 64 byte
sumber