Terinspirasi oleh artikel WTF Harian terbaru ...
Tulis program atau fungsi yang menggunakan GUID (string dalam format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
, di mana masing-masing X mewakili digit heksadesimal), dan output GUID bertambah satu.
Contohnya
>>> increment_guid('7f128bd4-b0ba-4597-8f35-3a2f2756dfbb')
'7f128bd4-b0ba-4597-8f35-3a2f2756dfbc'
>>> increment_guid('06b86883-f3e7-4f9d-87c5-a047e89a19fa')
'06b86883-f3e7-4f9d-87c5-a047e89a19fb'
>>> increment_guid('89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2cf')
'89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2d0'
>>> increment_guid('89f25f2f-2f7b-4aa6-b9d7-46a98e3cb29f')
'89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2a0'
>>> increment_guid('8e0f9835-4086-406b-b7a4-532da46963ff')
'8e0f9835-4086-406b-b7a4-532da4696400'
>>> increment_guid('7f128bd4-b0ba-4597-ffff-ffffffffffff')
'7f128bd4-b0ba-4598-0000-000000000000'
Catatan
- Tidak seperti dalam artikel yang ditautkan, menambahkan GUID yang berakhir dengan F harus “membawa” ke digit hex sebelumnya. Lihat contoh di atas.
- Anda mungkin berasumsi bahwa input tidak akan
ffffffff-ffff-ffff-ffff-ffffffffffff
. - Untuk digit hex di atas 9, Anda dapat menggunakan case atas (AF) atau bawah (af).
- Ya, GUID dapat dimulai dengan a
0
. - Output Anda harus terdiri dari tepat 32 digit hex dan 4 tanda hubung dalam format yang diharapkan, termasuk setiap lead yang diperlukan
0
. - Anda tidak harus menyimpan nomor versi atau bit tetap GUID lainnya. Asumsikan itu hanya integer 128-bit di mana tidak ada bit yang memiliki arti khusus. Demikian pula, GUID diasumsikan mengurutkan dalam urutan leksikografis langsung daripada dalam urutan biner Windows
GUID
struct. - Jika menulis fungsi, input mungkin dari setiap urutan-of-
char
tipe data:string
,char[]
,List<char>
, dll
GUID
struct.89f25f2f-2f7b-4aa6-b9d7-46a98e3cb29f
untuk memastikan bahwa jawaban dapat melakukan transisi9 -> a
.foreach (char ch in theInput)
.Jawaban:
05AB1E ,
171518 byteDisimpan 2 byte berkat Kevin Cruijssen
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
žKÃ
bukannya'-K
. Btw, Anda dapat menyimpan 2 byte dengan mengubah•É]•S3+
keŽ¦˜S·
.Ž
hal itu sekarang ...Python 2 , 50
Cobalah online!
sumber
JavaScript (ES6), 85 byte
String output dalam huruf kecil.
Cobalah online!
Berkomentar
sumber
Python 2 , 82 byte
Cobalah online!
Tidak ada impor atau konversi hex.
Ini memindai dari bagian belakang string, menggerakkan setiap karakter di sepanjang siklus
0123456789abcdef
, dengan-
pergi ke dirinya sendiri. Setelah itu hits simbol selainf
atau-
, itu berhenti memindai ke kiri, dan hanya mengembalikan sisanya tidak berubah. Solusi ini tidak spesifik untuk format UUID - sejumlah blok dari sejumlah huruf hex akan berfungsi.Kasing dasar
[str,f][s[-1]in'f-'](s[:-1])
adalah trik yang belum pernah saya lihat digunakan dalam golf sebelumnya. Ini berakhir rekursi tanpaif
,and
,or
, atau aliran kontrol eksplisit lainnya.Berdasarkan kondisi
[s[-1]in'f-']
karakter terakhir, kode dapat kembalif(s[:-1])
ataus[:-1]
tidak berubah. Karenastr
identitas pada string, kita dapat memilih salah satu fungsi[str,f]
dan menerapkannyas[:-1]
. Perhatikan bahwa panggilan rekursif denganf
tidak dilakukan jika tidak dipilih, mengatasi masalah masalah umum yang Python bersemangat mengevaluasi opsi yang tidak digunakan, yang mengarah ke kemunduran tak terbatas dalam rekursi.sumber
APL (Dyalog Unicode) , 46 byte SBCS
Fungsi awalan diam-diam anonim.
Cobalah online!
⎕CY'dfns'
c op y perpustakaan "dfns" (untuk mendapatkanhex
dandec
)(
...)
⊢
argumen≠
berbeda dari'-'
tanda hubung(
...)@
pada himpunan bagian yang terdiri dari lokasi di mana kriteria di atas adalah benar, terapkan:dec¨
konversi setiap karakter heksadesimal menjadi angka desimal...
@32
pada posisi 32 (digit terakhir), terapkan:1+
kenaikan16(
...)⍣≡
berulang kali berlaku dengan argumen kiri 16 hingga stabil:=
bandingkan (beri mask di mana digit heksadesimal adalah 16)1⌽
putar satu langkah ke kiri (ini adalah carry bit)|+
, tambahkan sisa pembagian ketika dibagi (dengan enam belas, sehingga membuat semua 16 menjadi 0) berbelok digit menjadi panjang-satu representasi karakter heksadesimal ϵ daftar (ratakan)1hex
∊
sumber
Java 11,
152149111108 byte-38 byte terima kasih kepada @ OlivierGrégoire .
-3 byte terima kasih hanya untuk @ ASCII .
Cobalah online.
Penjelasan:
Old 149 byte jawaban:
Cobalah online.
Penjelasan:
sumber
Ruby
-pl
,625755 byteCobalah online!
sumber
Python 3 , 50 byte
Cobalah online!
sumber
Python 2 ,
113112 byteCobalah online!
Tanpa impor
sumber
Retina 0.8.2 , 21 byte
Cobalah online! Tautan termasuk kasus uji.
9
menjadia
. Penjelasan: Regex cocok dengan semua trailingf
s dan-
s ditambah satu karakter sebelumnya. Transliterasi kemudian secara siklis menambah karakter-karakter itu seolah-olah mereka adalah digit hex Pendekatan alternatif, juga 21 byte:Cobalah online! Tautan termasuk kasus uji. Bekerja dengan menurunkan input untuk menyederhanakan transliterasi. Karena itu akan menjadi 15 byte jika hanya harus mendukung huruf kecil. Cobalah online! Tautan termasuk kasus uji.
sumber
MATLAB, 138 byte
Memperbaiki bug seandainya sebagian besar nol. Juga bermain golf banyak dengan menyalahgunakan coba / tangkap. Hasil bersih: 0 byte disimpan.
Upaya untuk 'menipu' dengan menggunakan
java.util.UUID
gagal karenalong
nilai yang dikembalikan darijava.util.UUID.get[Most/Least]SignificantBits
akan dikonversi kedouble
yang menimbulkan kehilangan presisi. Saya mengundang Anda untuk melihat tabel ini dan diam-diam mengucapkan "... tapi mengapa? "Penjelasan
The
hex2dec
meludah fungsi keluardouble
, sehingga tidak dapat memproses seluruh GUID sekaligus untuk menghindari melebihiflintmax
. Sebagai gantinya, kita harus memproses chid GUID dengan chunck, menggunakansplit
. Variabela
memeriksa apakah kita perlu membawa satu, dan dengan curang juga merupakan kenaikan awal yang kita tambahkan. Kondisi untuk terbawa adalah apakah panjang string asli dan tambahan tidak lagi sama.Versi aslinya hanya di bawah 160 byte jadi saya ingin berpikir ini seharusnya tidak mudah untuk mengalahkan.
sumber
Python 2 , 99 byte
Cobalah online!
Tidak ada
uuid.UUID
penggunaan.sumber
C # (Visual C # Interactive Compiler) , 77 byte
Cobalah online!
-1 byte terima kasih kepada @ASCIIHanya!
Fungsi anonim yang mengambil
char[]
input dan output sebagai dengan memodifikasi argumen .Input dipindai dari kanan ke kiri dan diganti menggunakan aturan berikut.
-
karakter diabaikan dan pengolahan terusF
karakter dikonversi ke0
dan pengolahan terus9
karakter dikonversi keA
dan pengolahan berhentiA-E
dan0-8
ditambahkan 1 dan pemrosesan berhentisumber
==70
->>69
Powershell, 101 byte
Cobalah online!
Tidak ada perpustakaan eksternal atau konversi hex. Panjang tali apa pun. Huruf kecil dan huruf besar diizinkan. Pencocokan string input
^[f-]*$
juga diizinkan.Script ini memindai dari belakang string dan menambahkan setiap karakter dengan nilai dari hashtable:
-
: increment = 1-19
: increment = 1 + 7, result =A
F
: increment = 1-23, result =0
f
: increment = 1-55, result =0
Selanjutnya, skrip menggunakan
$p
untuk menentukan apakah akan menambah karakter saat ini.Skrip uji:
Keluaran:
sumber
Perl 6 , 65 byte
Menguji
sumber
Jelly , 20 byte
-2 (dan perbaikan bug) berkat Dennis!
Cobalah online!
sumber
PowerShell , 126 byte
Cobalah online!
Jawaban yang cukup sepele. Hanya berpikir saya akan mendapatkan PowerShell yang dicintai ditambahkan ke daftar :)
sumber
JavaScript (Node.js) , 78 byte
Cobalah online!
sumber
Perl 5, 64 byte
Jumlah tanda kurung yang diperlukan di sini membuatku sedih, tapi
->
mengikat sangat erat, seperti->as_hex
cara tercepat yang bisa saya temukan untuk mendapatkan output berformat heksadesimal.Jalankan dengan
perl -Mbigint -p
. Pada dasarnya, itu hanya mengubah angka menjadi heksadesimal bigint, menambahkan satu, dan kemudian menggantikan digit hasil kembali ke nilai asli, meninggalkan garis tidak tersentuh.sumber
Rust, 258 byte
ya itu panjang .. tapi secara teknis hanya satu baris dengan 1 ekspresi? dan tidak ada perpustakaan mewah? dan itu tidak akan crash pada input fuzz? ungolf:
coba di taman bermain karat
sumber
Kode perakitan x86 16/32/64-bit, 28 byte
byte: 83C623FDAC3C2D74FB403C3A7502B0613C677502B03088460173E9C3
kode:
Panggil dengan ESI yang menunjuk ke GUID. Ganti ESI dengan SI untuk 16-bit, atau RSI untuk 64-bit (dan +2 byte).
sumber
C (dentang) , 62 byte
Cobalah online!
sumber
Gangguan Umum, 166 byte
Cobalah online!
sumber