Diberikan bilangan bulat positif, menghasilkan nilai kebenaran / kepalsuan, apakah bilangan itu dapat dimakan sendiri.
Aturan
Paling kiri adalah kepala, paling kanan adalah ekor
Jika kepala lebih besar atau sama dengan ekor, kepala memakan ekor dan kepala baru menjadi jumlah mereka.
Jika maka kepala diganti dengan .
tidak dapat diabaikan, namun nomor input tidak akan pernah memiliki nol terkemuka.
Contoh:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Jika suatu saat kepala tidak bisa makan ekor, jawabannya akan salah.
number=6724
072
False (0<2)
Kasus uji:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
Ini adalah kode-golf sehingga kode terpendek menang.
code-golf
decision-problem
Vedant Kandoi
sumber
sumber
Jawaban:
JavaScript (ES6),
52 5150 byteDisimpan 1 byte berkat @tsh
Mengambil input sebagai string. Mengembalikan nilai Boolean.
Cobalah online!
Berkomentar
sumber
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]
Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Perl 6 ,
6362 byteCobalah online!
Penjelasan:
sumber
Java (JDK) , 83 byte
Cobalah online!
Kredit
sumber
/10
dan%10
dalam satu lingkaran. Sangat bagus mengalahkan jawaban Python; +1 dari saya. :)r+=
untukr=
dan?1:0
untuk?1:r
.r=1
r&=h<n%10?0:r;return r;
Mathematica, 62 byte
Pertama-tama panggil
IntegerDigits
input untuk mendapatkan daftar digitnya, lalu berulang kali menerapkan aturan berikut:Aturan diterapkan hingga pola tidak lagi cocok, dalam hal ini hanya ada satu digit yang tersisa (benar) atau kepala kurang dari ekor (kepalsuan).
Alih-alih memanggil
Length[__]==1
, kita dapat menyimpan beberapa byte0(__)=={0}
, mengalikan semua elemen dalam daftar dengan0
dan kemudian membandingkan dengan daftar{0}
.sumber
Python 3 , 50 byte
Baris pertama dicuri dari jawaban Black Owl Kai .
Cobalah online!
Output melalui kode keluar. Gagal (1) untuk input palsu dan selesai (0) untuk input jujur.
sumber
p%10<k>q
tidak melempar NameError jikap%10 >= k
?p%10<k>q
melakukan hal yang sama denganp%10<k and k>q
.Python 2 ,
1058281 byteCobalah online!
Terima kasih banyak untuk -23 dari @ ØrjanJohansen
Terima kasih kepada @VedantKandoi (dan @ ØrjanJohansen) untuk -1 lainnya
sumber
for
dengan irisan terbalik, dan juga melakukan%10
hanya saat pengujian: Cobalah online!if i[0]<i[-1]:x=0
laluelse:....
. @ ØrjanJohansen, dalam jawaban Anda juga.True
kasus tetapi tidak untuk semuaFalse
.Brachylog , 23 byte
Cobalah online!
Ini adalah penghematan 1 byte dari solusi Fatalize . Ini menggunakan pendekatan rekursif dan bukan iteratif
Penjelasan
sumber
APL (Dyalog Unicode) , 33 byte SBCS
Fungsi awalan diam-diam anonim mengambil string sebagai argumen.
Cobalah online!
⍎¨
mengevaluasi setiap karakter (ini memberi kami daftar angka){
...}
terapkan "dfn" berikut untuk itu;⍵
adalah argumen (daftar angka):⌽⍵
membalikkan argumen⊃
pilih elemen pertama (ini adalah ekornya)t←
menetapkan ket
(untuk t ail)⍵<
untuk masing-masing digit asli, lihat apakah jumlahnya kurang dari itu⊃
pilih yang benar / salah pertama:
jika begitu:0
kembali salah⋄
kemudian:3::
jika mulai sekarang, kesalahan indeks (di luar batas) terjadi:1
kembali benar¯1↓⍵
letakkan digit terakhir⊢
hasilkan itu (pisahkan1
dan¯1
mereka tidak akan membentuk satu array)t+@1
tambahkan ekor ke digit pertama (kepala)10|
mod-10∇
berulangSetelah kami menekan satu digit,
¯1↓
akan membuat daftar itu kosong, dan@1
akan menyebabkan kesalahan indeks karena tidak ada digit pertama, menyebabkan fungsi untuk mengembalikan true.sumber
Python 3 , 77 byte
Cobalah online!
Dan solusi lama saya dengan pendekatan rekursif
Python 3 , 90 byte
Cobalah online!
Mengambil input sebagai string.
sumber
Brachylog , 24 byte
Cobalah online!
Saya harus mengubah
ⁱ
perilaku default sehingga mengulang beberapa kali tidak diketahui (saat ini, ia mengulang 1 kali secara default yang sama sekali tidak berguna). Saya kemudian tidak akan membutuhkan[…];I[…]⁾
, menghemat 3 bytePenjelasan
Program ini berisi garpu jelek di dalam garpu. Ada juga beberapa pipa ledeng yang diperlukan untuk mengerjakan daftar angka alih-alih angka (karena jika kita melepas kepala dan ekor
76
kita dibiarkan0
, yang tidak bekerja berlawanan dengan[7,6]
tempat kita berakhir[]
).sumber
,
sebagai gantinya saya bisa menghapus 1 byte Cobalah online!Haskell,
706460 byteInput diambil sebagai string.
Cobalah online!
Sunting: -6 byte dengan menggunakan trik @ Laikoni untuk menggunakan
||
alih-alih penjaga terpisah. Lain -4 byte berkat @Laikoni.sumber
read[l b]
bisa jadi hanyaread b
karena Anda hanya melihat angka terakhir saja. Menghemat 4 byte lebih banyak dengan juga sejalanlast
: Coba online!Perl 5 , 64 byte
Cobalah online!
sumber
Python 2 ,
7567 byteCobalah online!
Pendekatan lambda rekursif. Mengambil input sebagai string. Terima kasih banyak untuk Dennis karena telah menghemat 8 byte!
sumber
Haskell ,
6964 byteCobalah online! Contoh penggunaan:
f 2632
hasilTrue
.Edit: -5 byte karena
mod (h + mod n 10) 10 = mod (h + n) 10
sumber
||
, yang membantu saya mempersingkat jawaban saya juga. Terima kasih!Ruby, 139 byte
Cobalah online! (memiliki beberapa kode tambahan untuk memproses input, karena ini berfungsi)
Kode tidak dikunci:
sumber
Retina 0.8.2 , 42 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Ubah digit menjadi unary dan masukkan pemisah.
Jika digit terakhir tidak lebih besar dari yang pertama, maka tambahkan bersama-sama.
Kurangi modulo 10 jika perlu.
Ulangi hingga digit terakhir lebih besar dari digit pertama atau hanya tersisa satu digit.
Uji apakah hanya ada satu digit yang tersisa.
sumber
05AB1E ,
262524 byteMungkin bisa bermain golf sedikit lebih .. Rasanya terlalu lama, tapi mungkin tantangannya dalam hal kode lebih kompleks daripada yang saya pikir sebelumnya.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
C ++ (gcc) , 144 byte
Cobalah online!
Pertama kali saya mencoba sesuatu seperti ini jadi jika saya memformat sesuatu yang salah tolong beri tahu saya. Saya tidak 100% yakin pada aturan untuk hal-hal seperti menggunakan namespace untuk menghilangkan 5 byte "std ::" jadi saya meninggalkannya.
Tidak Terkumpul:
sumber
#include
pernyataan. Namun, saya akan mengusulkan pemrograman di subdialect fasilitas std lib dari C + + dengan#include "std_lib_facilities.h"
prepended, yang juga tidak ausing namespace std;
. Header itu ditulis oleh penulis bahasa jalan kembali (versi terbaru adalah 2010) untuk siswa yang baru mengenal C ++.#import<string>
. Cobalah online!#!/usr/bin/sh
newlinegcc -include "std_lib_facilities.h" $@
- jika saya menemukan kursus C ++ yang menyediakan skrip shell, apakah itu akan diperhitungkan?-include iostream
, ini memang 144 byte.C #, 114 byte
Cobalah online
sumber
C (gcc) (dengan string.h) ,
110108 byteCobalah online!
Masih relatif baru untuk PPCG, jadi sintaks yang benar untuk menghubungkan perpustakaan sebagai bahasa baru asing bagi saya. Perhatikan juga bahwa fungsi mengembalikan 0 atau 1 untuk false / true, dan mencetak hasil itu ke stdout memang membutuhkan stdio. Jika kita menjadi orang yang bertele-tele dan latihan itu membutuhkan keluaran, bahasanya membutuhkan stdio juga.
Secara konseptual mirip dengan jawaban @ BenH, tetapi dalam C, begitu pujian di mana mereka seharusnya (Selamat datang di PPCG, btw), tetapi menggunakan rekursi. Ini juga menggunakan array pointer aritmatika, karena kode kotor lebih pendek dari kode bersih.
Fungsinya ekor rekursif, dengan kondisi keluar jika angka pertama tidak bisa makan yang terakhir atau panjangnya 1, masing-masing mengembalikan false atau true. Nilai-nilai ini ditemukan dengan mereferensikan pointer ke C-String (yang memberikan char) di awal dan akhir string, dan melakukan perbandingan pada mereka. Aritmatika pointer dilakukan untuk menemukan ujung string. akhirnya, karakter terakhir "dihapus" dengan menggantinya dengan terminator nol (0).
Mungkin saja aritmatika modulus dapat dipersingkat dengan satu atau dua byte, tetapi saya sudah perlu mandi setelah manipulasi pointer.
Versi Tidak Terkunci Di Sini
Pembaruan: Menyimpan dua byte dengan mengganti c == 1 dengan! C. Ini pada dasarnya adalah c == 0. Ini akan menjalankan waktu tambahan, dan tidak perlu akan menggandakan dirinya sendiri sebelum menghapus dirinya sendiri, tetapi menghemat dua byte. Efek sampingnya adalah string panjang nol atau nol tidak akan menyebabkan rekursi tak terbatas (meskipun kita tidak seharusnya mendapatkan string nol seperti yang dikatakan latihan bilangan bulat positif).
sumber
gcc
- meskipun peringatan akan dihasilkan,gcc
dengan senang hati akan mengkompilasi kode Anda tanpa#include
s. Anda juga dapat menyimpan 4 byte dengan-DR=return
. Akhirnya, dalam kode pengujian Anda,\0
s tidak diperlukan, karena string secara harfiah sudah memasukkannya secara implisit.b=case1?res1:case2?res2:res_else;
sama denganif(case1)return res1;if(case2)return res2;return res_else;
c
: Anda dapat menentukan apakah string tersebut memiliki panjang nolhead-tail
.Powershell, 89 byte
Penting! Script menyebut dirinya secara rekursif. Jadi simpan skrip sebagai
g.ps1
file di direktori saat ini. Anda juga dapat memanggil variabel blok skrip alih-alih file skrip (lihat skrip pengujian di bawah). Panggilan itu memiliki panjang yang sama.Catatan 1: Skrip menggunakan evaluasi malas dari operator logika
-or
dan-and
. Jika"$args"-notmatch'(.)(.*)(.)'
adalahTrue
maka subexpression kanan-or
tidak dievaluasi. Juga jika($m=$Matches).1-ge$m.3
adalahFalse
maka subexpression kanan-and
tidak dievaluasi juga. Jadi kita menghindari rekursi tak terbatas.Catatan 2: Ekspresi reguler
'(.)(.*)(.)'
tidak mengandung jangkar awal dan akhir karena ekspresinya(.*)
serakah secara default.Skrip uji
Keluaran:
Powershell, 90 byte
Tidak ada rekursi. Tidak ada ketergantungan nama file dan tidak ada ketergantungan nama blok skrip.
Powershell secara implisit mengubah operan kanan ke jenis operan kiri. Oleh karena itu,
$s-ge$s%10
hitung operan kanan$s%10
sebagaiinteger
dan bandingkan sebagaistring
jenis operan kiristring
. Dan2+$s[0]+$s
mengkonversi char$s[0]
dan string$s
keinteger
karena operan kiri2
adalah bilangan bulat.$s|% S*g 1($s.Length-2)
adalah jalan pintas ke$s.Substring(1,($s.Length-2))
sumber
C # (Visual C # Interactive Compiler) , 69 byte
Cobalah online!
Keberhasilan atau kegagalan ditentukan oleh ada atau tidak adanya pengecualian . Input dalam bentuk string.
Kurang bermain golf ...
Ada beberapa byte tambahan untuk menangani konversi antara karakter dan digit, tetapi secara keseluruhan itu tidak terlalu mempengaruhi ukuran.
sumber
Perl 5
-pF
, 53 byteCobalah online!
sumber
Brachylog , 18 byte
Cobalah online!
Mengambil tiga byte off solusi Fatalize ini hanya berdasarkan non-deterministik superscriptless
ⁱ
yang ada sekarang, tapi kehilangan tiga dengan melakukan hal-hal samar-samar Jelly terinspirasi denganz₁
untuk menghindari menggunakanc
,g
atau bahkanh
. (Juga terinspirasi dengan mencoba, dan gagal, untuk menggunakan fitur baru yang berbeda:ʰ
metapredicate.)sumber
PowerShell ,
9491 byteCobalah online!
Skrip Tes
Kode tidak dikunci:
sumber
$n[0]
Andafor
- cukup mengecek$n
saja.-6
sebagai gantinya-96
karena cukup untukreturn
dan menyimpan 7 byteparam($n)
ataufunction f($n)
.["1","2","3"]
input yang tidak valid tetapi"123"
sebenarnya. jika @VedantKandoi memiliki masalah dengannya, saya pasti dapat mengubahnya!