Instruksi
Mengingat string input yang tidak diketahui i
dengan nilai baik kepala atau ekor , kembali 1
untuk kepala atau -1
untuk ekor dengan kode terpendek.
Contoh bukan kode golf (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Contoh kode golf (16b):
print("t">i||-1)
Javascript digunakan untuk contoh tetapi itu bukan keharusan . Maaf jika terlalu sederhana untuk sebagian besar pengguna, ini dapat ditingkatkan.
Jawaban:
CJam, 4 byte
Diasumsikan bahwa variabel
I
menyimpan input, karenai
bukan pengidentifikasi yang valid di CJam.Cobalah online.
Ini setara dengan kode JavaScript
I.indexOf('e')
.sumber
p
dalam ini? Apakah standar di CJam tidak?p
tidak diperlukan.C, 18 byte
Cukup mudah, tapi mari kita lakukan hanya untuk bersenang-senang ...
Mengingat string
char *i
yang dicetaknya 1 untukheads
dan -1 untuktails
, dengan mengekor baris baru.Penjelasan
Di C,
"-1" + 1
arahkan ke 1 karakter ke depan, jadi itu sama dengan"1"
. Mari kita lihat karakter pertama:Jika kita menghitung bit dari yang paling kanan mulai dari nol, bit 3 adalah 1 in
heads
dan 0 intails
: menjumlahkannya untuk"-1"
memberikan string yang tepat. Ini terlihat seperti ini:Sekarang, gantikan
i[0]
dengan*i
dan pergeseran kanan dengan kekuatan dua divisi untuk menghemat beberapa byte. Juga hapus tanda kurung yang tidak berguna:Sekarang,
& 1
bisa diganti dengan% 2
. Hitungan karakter sama, tetapi modulus memiliki prioritas lebih tinggi, memungkinkan untuk menjatuhkan tanda kurung. Hapus spasi putih:Bonus
Saya pikir cara terpendek untuk mendapatkan integer 1 atau -1 (bukan string) di C adalah:
Penjelasan:
sumber
Ruby, 8 (6 tanpa output)
Operator Rocketship!
sumber
PHP - 11 Bytes
Ini berfungsi karena
'tails' ^ 'F'
→'2'
dan'heads' ^ 'F'
→'.'
, yang ketika diketik sebagai integer0
.Anda dapat menguji solusi ini (atau salah satu di bawah ini) dengan cara berikut:
Tautan Ideone
Alternatif
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
sumber
TI-BASIC, 9-10 byte
Mudah. "t" ada di posisi 1 dari "tails", tetapi "t" tidak ada dalam string "head", jadi inString (mengembalikan 1 untuk tails dan 0 untuk head.
Jika kalkulator Anda dalam mode radian (seperti yang seharusnya dilakukan oleh seorang ahli matematika), hanya dibutuhkan sembilan byte:
Perhatikan bahwa kalkulator TI tidak memiliki nama string, sehingga inputnya ada dalam variabel jawaban kalkulator. Juga perhatikan bahwa huruf kecil masing-masing dua byte, jadi solusi ini sebenarnya membutuhkan lebih sedikit memori daripada kata "kepala".
sumber
t
daninString(
masing-masing dua byte.Fission ,
2621 BytesMartin (dan jawabannya yang luar biasa di sini ) meyakinkan saya untuk belajar bahasa baru, dan tempat apa yang lebih baik daripada golf cepat? Ini hampir pasti tidak optimal, tapi hei, itu menyenangkan! Setelah saya merasa baik tentang itu, saya dapat memberikan beberapa bentuk penjelasan jika diminta.
sumber
Python 2, 16 byte
sumber
Pyth - 4 byte
Jalankan dengan kepala atau ekor . Seperti
i
yangint
di Pyth, menggunakan iniz
sebagai nama variabel, yang berisi setiap input pengguna. Ini sama dengan Pythonprint(z.find("e"))
, jadi gunakan metode @ Dennis.sumber
VBA (Excel), 12 byte
Bukan golf yang fantastis, tapi menyenangkan untuk mencoba dengan VBA untuk mendekati bahasa pemrograman yang tepat ...
i adalah string, dan itu hanya mengeksploitasi nilai ASCII dari karakter pertama, dibagi 6 dan dikurangi dari 13 untuk memberikan 1 atau -1. Sangat sederhana.
Contoh dijalankan di jendela langsung (10 byte tambahan untuk mengatur variabel input):
sumber
C, 22 byte
Kredit pergi ke @TheE karena memberitahuku tentang ini !
Penjelasan:
Jika karakter pertama dari string lebih besar daripada
'h'
, string"-1"
dicetak. Jika tidak, string"1"
akan dicetak. Perhatikan bahwa pendekatan ini dilengkapi dengan karakter baris baru.Versi lama (25 byte):
Penjelasan:
Jika karakter pertama dari string lebih besar dari
'h'
, -1 dicetak. Kalau tidak, 1 dicetak.sumber
h
dan 7 untukt
.puts(*i>'h'?"-1":"1");
tidak lebih baik? (22 byte)Tr:
1713 karakter(Atau
1410 jika Anda hanya menghitung argumen ...)Contoh dijalankan:
Penjelasan singkat:
tr
singkatan transliterate, yang berarti, menggantikan setiap karakter dari input yang ditemukan dalam argumen pertama dengan karakter pada posisi yang sama dalam argumen kedua:Jika argumen pertama lebih panjang, karakter tanpa kecocokan posisional dalam argumen kedua diganti dengan karakter terakhir argumen kedua:
Ketika opsi
-s
(--squeeze-repeats
) digunakan, karakter berturut-turut yang akan diganti dengan karakter yang sama diganti sekaligus:Jadi jika kita menghitung semua karakter dalam "ekor", kita mendapatkan apa yang kita butuhkan:
Sama untuk "kepala", tetapi kita harus menjaga "t" di depan untuk mengkonsumsi minus (karakter diurutkan menurut abjad untuk creepiness):
Menggabungkan semua karakter unik "ekor" dan "kepala" dalam satu argumen pertama, menjaga "t" di depan mengarah ke solusi akhir:
Untuk menghindari penghitungan karakter, interval dalam format dari - ke dapat digunakan sebagai gantinya.
sumber
tr
. POSIXly:tr -s ta-s '-[1*]'
Perakitan 8088, IBM PC DOS, 17 byte
Belum dirakit:
Penjelasan:
Gunakan flag parity CPU untuk menentukan apakah karakter pertama adalah
'h'
(bahkan jumlah biner1
) atau't'
(jumlah ganjil dari biner1
). Ini menghemat satu byte dibandingkan membandingkan char di ASCII.Input dari baris perintah, output ke konsol.
Input output:
sumber
Japt , 2 byte
Cobalah online
sumber
shell (portable / POSIX), 16 byte
expr $i : he - 1
Cobalah secara Online!
Terima kasih kepada @ StéphaneChazelas di unix.stackexchange.com
Solusi lain mencoba:
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Coba Online!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Cobalah secara Online!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Cobalah secara Online!a=${i%h*};echo ${a:+-}1 # 23 .
portabel. Cobalah secara Online!he=2;echo $((${i%a*}-1)) # 24 bytes .
portabel. Cobalah secara Online!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
portabel. Cobalah secara Online!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
portabel. Cobalah secara Online!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
portabel. Cobalah secara Online!Catatan: Menggunakan
dash
sebagai perumpamaan wajar dari shell tester portabel.expr $i : he - 1
berfungsi dengan menghitung jumlah karakter yang cocokhe
dengan$i : he
. Aheads
match2
and atails
match 0 (tidak ada). Lalu kurangi1
dengan- 1
.$[30#$i%7-1]
bekerja dengan mengonversi string ke integer. Basis 30 dan mod oleh 7 dipilih untuk mendapatkan perbedaan 2 antaraheads
dantails
. Kemudian kurangi 1 mengkonversi angka menjadi1
dan-1
.Perhatikan bahwa a
$[...]
adalah bentuk kuno dari ekspresi aritmatika yang$((...))
hanya valid di beberapa shell.he=2;echo $[${i%a*}-1]
bekerja dengan membuat variabel dari beberapa nilai dan kemudian menggunakan Ekspansi Aritmatika untuk memperluas variabel itu (dari nilai teks). The${i%a*}
bertobatheads
untukhe
dantails
untukt
(yang, sebagai variabel, memiliki nilai 0).IFS=h;set $i;echo ${1:+-}1
bekerja dalam dua langkah. Pengaturan IFS untukh
istirahat yang kuotasi$i
diset $i
dalam bagian-bagian dibagi dengan karakterh
,heads
dibagi untuk''
dan'eads'
, dengan demikian pengaturan$1
untuk null.tail
tidak dibagi denganh
, sehingga$1
sama dengantails
. Kemudian,${1:+-}
menghasilkan a-
jika nilai$1
non-null (seperti dalamtails
) atau tidak sama sekali (seperti dengan nol$1
). Tanda itu (atau tidak sama sekali) digabungkan dengan1
.(IFS=h;set $i;echo $(($#*2-3)))
bekerja dengan cara yang serupa tetapi menggunakan jumlah bagian ($#
) yang$i
dipecah oleh string .sumber
Python 2, 17 byte
'heads'
kurang dari't'
, jadi ini mengevaluasi keTrue == 1
, dan mencetak string setelah karakter pertama.'tails'
lebih besar dari't'
, jadi dievaluasi menjadiFalse == 0
dan seluruh string dicetak.Jika kita melakukan ini dari baris perintah, dengan pencetakan implisit, itu hanya menjadi:
... untuk 12 byte, tetapi ia menambahkan tanda kutip tunggal ke output.
sumber
QBasic, 11 byte
Ini harus menjadi bagian terpendek dari QBasic yang pernah saya tulis.
Penjelasan:
Di atas adalah beberapa QBasic cukup golf. Setelah autoformatter menyelesaikannya, akan terlihat seperti ini:
Baris pertama membandingkan string
i
dengan"t"
. Jikai
is"heads"
,i > "t"
false danc = 0
. Jikai
benar"tails"
,i > "t"
itu benar danc = -1
. Ya,-1
apakah nilai default untuk boolean benar dalam QBasic!Baris kedua peta
-1
untuk-1
dan0
untuk1
melalui trik matematika:(-1)^(-1) == 1/(-1) == -1
, dan0^0
, meskipun secara teknis matematis terdefinisi, pengembalian1
.Kode ini mengharuskan yang
i
dinyatakan secara eksplisit sebagai variabel string; jika tidak, itu harus terjadii$
. Program uji penuh (diuji pada QB64 ):sumber
Gaia ,
54 byteMirip dengan jawaban Dennis 'CJam , menemukan indeks
e
dalam string inputDisimpan satu byte karena saya tidak menyadari input secara otomatis digunakan sebagai argumen jika tidak ada nilai stack yang cukup
Bagaimana itu bekerja
Cobalah secara Online!
sumber
Bash , 22
Mengambil huruf ke-2 (
e
ataua
) dan menafsirkannya sebagai digit hex (14 atau 10), kemudian bagi dengan 2 dan kurangi 6 untuk mendapatkan jawaban yang benar.Cobalah online!
sumber
echo $[30#$i%7-1]
hanya 17 byte. :-)ed ,
272521 byteed
memberi saya sakit kepala. Akhirnya menemukan jawabannya dengan bantuan dari@ed1conf
di twitter dan beberapa mengintipunix.se
. Anda tidak bisa hanya mencocokkan hal-hal dengans/re/newtext/
, Anda harus awalan dengan paketg
jika tidaked
sedih. Ini seperti program unix 50 tahun pemarah yang mengatakan "turun dari halaman saya".Cobalah online!
-2 bytes dengan menjatuhkan final
/
s-4 bytes berkat @manatwork (& yang
sed
jawabannya dijiplak)Versi lama:
g/t/s//- g/\w\+/s//1 wq .
sumber
q
, itu akan berhenti dengan sendirinya ketika tidak ada yang tersisa untuk dilakukan. Dan Anda hanya perlu baris baru setelah mereka, "." (Atau "roblogic" ...) tidak perlu. Cobalah online!Python, 20 byte
Ini akan kembali
False
jika tidak, danTrue
jika ya. Dalam pythonFalse
dan0
sama, danTrue
dan1
juga.Begitu:
sumber
golflua
252018Mungkin bisa bermain golf lagi dengan menggunakan beberapa trik yang saya tidak pikirkan saat ini.(lihat riwayat untuk versi lama) Menyimpan 5 karakter dengan memindahkan input kewrite
dan mengabaikanif
pernyataan di sana. Dua karakter lagi disimpan dengan mengabaikan tanda kurung opsional aktiffind
. Itu tidak memeriksa kondisi gagal (yaitu, input yang bukan kepala atau ekor ).Setara Lua akan
sumber
Haskell, 18 byte
Setiap string yang dimulai dengan surat
h
dipetakan ke1
, semua yang lain-1
.sumber
Sed: 16 karakter
Contoh dijalankan:
sumber
ed
solusi saya , tetapi masih butuh 23 byte, karenaed
sudah tua dan pemarah!\w
dan\+
merupakan ekstensi GNU.Stax , 3 byte
Jalankan dan debug itu
sumber
Stax , 4 byte
Jalankan dan debug itu
Ini adalah codepoint dari karakter pertama mod 7 minus 5.
sumber
PowerShell , 15 byte
Cobalah online!
Mengambil input melalui splatting. Menggunakan
e
vsa
untuk melakukan matematika ASCIIsumber
dc , 8 byte
dc tidak dapat melakukan sesuatu yang bermakna dengan string selain membacanya dan berusaha untuk mengevaluasinya. Melakukan ini, "kepala" menampilkan beberapa peringatan tentang perintah yang tidak dilaksanakan dan tumpukan kosong, yang kita abaikan, tetapi yang penting tumpukan tetap kosong. "tails" melakukan hampir sama dengan pengecualian penting bahwa "ls" terakhir memuat nilai dari register s ke stack.
Kami kemudian menggunakan "z" untuk mendapatkan panjang tumpukan dan biola secara acak untuk mendapatkan jawaban yang benar.
Cobalah online!
sumber
Segitiga , 10 byte
Cobalah online!
Membagi nilai ASCII dari input karakter oleh 7. Kurangi hasil bagi dari 15. Eksekusi berhenti ketika IP kehabisan ruang program. Ini berfungsi karena Triangular hanya dapat mengelola divisi integer. Mudahnya, "h" memiliki nilai 104, yaitu 14 ketika integer dibagi dengan 7; "t" adalah 116, yaitu 16 ketika integer dibagi dengan 7.
Tidak Disatukan / Penjelasan:
Versi sebelumnya (14 byte):
Baca karakter dari input; jika nilai ASCII karakter yang dibagi 8 memiliki sisa, cetak -1, jika tidak cetak 1.
sumber
Tong ,
8128 byteCobalah online!
Penjelasan (tidak valid secara sintaksis)
sumber
^
.Vitsy , 13 byte
Jadi apa, saya terlambat ke pesta. ¯ \ _ (ツ) _ / ¯
sumber