Jolly Jumper Sequence

15

Urutan bilangan bulat n> 0 disebut jolly jumper jika nilai absolut dari perbedaan antara elemen berturut-turut mengambil semua nilai 1 hingga n-1.

Jadi urutan [4,1,2,4] memiliki perbedaan absolut [3,1,2] yang setara dengan himpunan [1,2,3] (1 hingga n-1 di mana n adalah panjang urutan asli) jadi karena itu pelompat riang.

Urutan memiliki panjang n> 0.

Asumsikan n = 1 adalah pelompat riang.

Mode mudah: Jangan khawatir tentang stdin / stdout. Namun, hanya fungsi yang menerima argumen dan mengembalikan sesuatu yang menunjukkan riang atau tidak

Hard mode: Input pada stdin (dipisahkan ruang), dan outputnya "Jolly" / "Not jolly". Huruf besar penting.

Ini golf kode.

EDIT: Urutan dapat berisi bilangan bulat negatif dan input pada stdin dipisahkan oleh ruang.

$ jolly 2 -1 0 2
Jolly

$ jolly 19 22 24 25
Jolly

$ jolly 19 22 24 21
Not jolly
eternalmatt
sumber
1
Bagaimana urutannya diberikan? Sebagai string? "4124"?
Steven Rumbalski
Saya pikir dipisahkan oleh ruang akan menjadi konvensi yang paling umum, jadi saya akan mengatakan itu.
eternalmatt
6
Anda mengatakan input ada di stdin, tetapi contoh Anda mengambil input sebagai argumen baris perintah. Yang mana yang harus kita harapkan?
Gareth

Jawaban:

3

Haskell

Mudah 4 karakter

Mengembalikan daftar integer riang jika dan hanya jika daftar integer riang diberikan sebagai input. Ini legal berdasarkan pada "Hanya fungsi yang menerima argumen namun mengembalikan sesuatu yang menunjukkan riang atau tidak".

j=id

Solusi mudah alternatif dengan 61 karakter:

Mengambil daftar dan mengembalikan daftar kosong jika urutannya riang.

import List
j n=zipWith(\x->abs.(x-))n(tail n)\\[1..length n]
Thomas Eding
sumber
1
+1 Pengacara aturan yang baik. Meskipun saya harus menunjukkan bahwa dalam GolfScript program kosong sudah cukup ...
Peter Taylor
Solusi alternatif tampaknya memberikan hasil yang salah. [1,3]bukan riang, kan? Saya kira Anda harus mengulanginya length n-1sebagai gantinya.
Rotsor
2

Ruby, 92 93 karakter

Versi sulit dengan input pada STDIN.

f=gets.split.each_cons(2).map{|a|eval(a*?-).abs}.sort
$><<(f==[*1..f.size]??J:"Not j")+"olly"

Jika Anda memulainya dengan -pa(dihitung sebagai 4), Anda dapat menyimpan 5 karakter:

f=$F.each_cons(2).map{|a|eval(a*?-).abs}.sort
$_=(f==[*1..f.size]??J:"Not j")+"olly"
Howard
sumber
Ah, peningkatan yang bagus. Tidak menyadari ada metode Each_cons.
migimaru
Saya baru menyadari bahwa ini gagal ketika urutannya adalah satu digit. Anda harus tetap menggunakan f.size sebagai gantinya f [-1].
migimaru
Oh, Anda juga dapat menyimpan 5 karakter jika Anda menjalankannya dengan opsi -pa.
migimaru
2

Jawa (Keras)

Asumsikan bahwa input diberikan melalui stdin. (tidak melalui argumen baris perintah seperti contoh)

Golf - 325

class JollyJumper {
public static void main(String[] args) {
String[] in = new Scanner(System.in).nextLine().split(" ");
int[] j=new int[in.length-1],k=j.clone();
for(int i=0;i<in.length-1;i++){j[i]=Math.abs(Integer.parseInt(in[i])-Integer.parseInt(in[i+1]));k[i]=i+1;}
Arrays.sort(j);System.out.println(Arrays.equals(j, k)?"Jolly":"Not jolly");
}
}

Tidak Golf

public class JollyJumper {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] jolly;
    String[] in;

    in = sc.nextLine().split(" ");
    jolly = new int[in.length-1];

    for (int i = 0; i < in.length-1; i++)
        jolly[i] = Math.abs(Integer.parseInt(in[i]) - Integer.parseInt(in[i+1]));

    Arrays.sort(jolly);

    for (int i = 1; i <= in.length-1; i++) {
        if (jolly[i-1] != i) {
            System.out.println("Not jolly");
            return;
        }
    }
    System.out.println("Jolly");
}
}
josh-fuggle
sumber
2

Scala, mode mudah, 123 karakter

def j(s:String)={var a=s.sliding(2,1).map(x=>math.abs(x(0)-x(1))).toList
for(c<-1 to a.size)
if(!a.contains(c))false
true}

Untuk menjalankan atau menguji di ideone.com:

object Main
{
   def main(args:Array[String])
   {
      def j(s:String):Boolean=
      {
         var a=s.sliding(2,1).map(x=>math.abs(x(0)-x(1))).toList
         for(c<-1 to a.size)
            if(!a.contains(c)) false
         true
      }
      println(j("4124"))
   }
}
Gareth
sumber
Nama bisa j bukan melompat.
pengguna tidak diketahui
@ pengguna tidak diketahui Ya, saya tahu. Saya menyadari sekitar setengah jam setelah saya mempostingnya bahwa a) saya dapat mempersingkat nama metode, dan b) saya perlu menggunakan Daftar daripada Set, atau itu tidak akan berfungsi dengan baik. : -S
Gareth
Dan aturan yang diperbarui mengharapkan angka untuk dibagi dengan ruang, 4124 bisa menjadi satu, dua, tiga atau 4 angka.
pengguna tidak diketahui
@ pengguna tidak diketahui Oh, bagus. Orang lain memposting pertanyaan dan kemudian mengubah aturan setengah jalan.
Gareth
Saya menghapus kembali tipe Boolean, 'kembali' literal sebelum `salah 'dan mengubah Matematika menjadi matematika. Menyimpan dari 137 hingga 123.
pengguna tidak dikenal
2

Skrip golf, mode mudah, 21 18 karakter

{.@-abs\}*;0]$.,,=

Menerima argumen sebagai array int pada stack, dengan tidak ada yang lain pada stack; meninggalkan 1 pada tumpukan jika itu riang dan 0 sebaliknya. Untuk mengambil input pada stdin sebagai daftar int yang dipisahkan ruang, tambahkan dulu

~]

dan untuk menampilkan "Jolly" / "Tidak riang" (dengan asumsi bahwa kita mengubah ini menjadi sebuah program) postpend

"Not jJ"5/="olly"
Peter Taylor
sumber
Saya bertanya-tanya bagaimana ini bisa bekerja - butuh beberapa saat untuk menyadari bahwa ketika Anda menulis "daftar int di stack", Anda benar-benar berarti daftar int (yaitu [4 1 2 4], tidak 4 1 2 4).
Ilmari Karonen
@IlmariKaronen, tidak yakin sekarang mengapa saya menulis "daftar". Saya telah mengedit ke "array" untuk membuatnya lebih jelas.
Peter Taylor
2

J (mudah), 18

(i.@#-:<:/:])|2-/\
   (i. @ # -: <: /:]) | 2 - / \ 2 _1 0 2
1
   (i. @ # -: <: /:]) | 2 - / \ 19 22 24 25
1
   (i. @ # -: <: /:]) | 2 - / \ 19 22 24 21
0

J (keras), 68

2!:55]1!:2&2'olly',~>('Not j';'J'){~(i.@#-:<:/:])|2-/\".@>2}.ARGV_j_
$ jconsole jumper.ijs 2 -1 0 2
riang
$ jconsole jumper.ijs 19 22 24 25
riang
$ jconsole jumper.ijs 2 19 22 24 21
Tidak periang
singkat
sumber
2

Brachylog , 11 byte (mudah)

s₂ᶠ-ᵐȧᵐo~⟦₁

Cobalah online!

s₂ᶠ-ᵐ - Perbedaan berurutan

ȧᵐ - Nilai absolut

o - Sortir

~⟦₁ - Apakah hasilnya kisaran 1 ke sesuatu?

sundar - Pasang kembali Monica
sumber
1

J, 30 26 mode mudah, mode 81 76 hard

sunting: menangani daftar yang lebih pendek dari 3, perbaiki stdin membaca

Baris pertama menangani mode mudah, kedua menambahkan mode keras.

j=:[:*/[:(>:@i.@#=/:~)[:|2-/\]
exit('olly',~[:>('Not j';'J'){~[:j 0".}:)&.stdin''

J umumnya berbunyi kanan-ke-kiri:

2-/\ : untuk setiap dua nomor berurutan dalam daftar, ambil perbedaannya

| : nilai mutlak

/:~ : urutkan dalam urutan menaik

>:@i.@#: 1 hingga n , untuk daftar n angka

= : bandingkan perbedaan yang diurutkan dengan urutan (menggunakan J "garpu")

*/: kalikan semua boolean elemen-bijaksana; jika semua perbandingan adalah 1, produk mereka adalah 1, jadi itu periang

DCharness
sumber
Pertimbangkan input 1 3.
Peter Taylor
Terima kasih, @Peter. Diperbaiki ... dan masih belum kompetitif dengan Golfscript Anda. Sudah selesai dilakukan dengan baik.
DCharness
1

Ruby, 97 102 106 (sulit)

Mungkin juga, karena semua orang adalah:

h,*t=gets.split
d=t.map{|i|h,i=i,h;eval(i+?-+h).abs}.sort
$><<(d==[*1..d.size]??J:"Not j")+"olly"

Masukan diambil pada stdin.

migimaru
sumber
Anda bisa menggantinya (1..d.size).to_adengan [*1..d.size]. Switching operan sekarang mungkin, simpan yang lain (total -5 karakter).
Howard
@ Bagaimana Oh, jadi begitulah cara Anda melakukannya! Saya sudah mencoba mencari cara golf untuk mengubah rentang menjadi array untuk sementara waktu sekarang. Terima kasih!
migimaru
1

D

mudah ( 103 83 karakter)

mengembalikan jumlah 1..i.panjang pada Jolly beberapa nomor lain jika tidak (sedikit aturan laywering di sini)

import std.math;auto jolly(I)(I i){int t,l;foreach(r;i){t+=abs(l-r);l=r;}return t;}

hard (142 chars)

input dibatasi oleh spasi dan berakhir pada EOF

import std.stdio;import std.math; void main(){int i,j,l,t;while(readf("%d ",&i)>0){t+=abs(l-i);l=i;j++;}write(t==j*++j/2?"J":"Not j","olly");}
orang aneh
sumber
1

Asyik

Mudah: 78

j={m=[];it[1..-1].inject(it[0]){p,n->m<<p-n;n};m*.abs().sort()==1..<it.size()}

assert [[2, -1, 0, 2,], [19, 22, 24, 25], [19, 22, 24, 21]].collect { j(it) } == [true, true, false]

Keras: 151

j={m=[];it[1..-1].inject(it[0]){p,n->m<<p-n;n};m*.abs().sort()==1..<it.size()};System.in.eachLine{println "${j(it.split()*.toLong())?'J':'Not j'}olly"}
Armand
sumber
1

PowerShell, keras, 117 126

('Not j','J')["$(($a=-split$input)|%{if($x-ne$0){[math]::abs($x-$_)}$x=$_}|sort)"-eq"$(1..($a.Count-1)|sort)"]+'olly'

Sejarah:

  • 2011-11-18 17:54 ( 123 , −3) - Berubah $nullmenjadi variabel yang tidak ada
  • 2011-11-18 18:02 ( 117 , −6) - inline semua deklarasi variabel
Joey
sumber
1

Scala

Tusukan cepat - mungkin ada perbaikan yang mungkin dilakukan.

Mudah: 77

def j(? :Int*)=(?tail,?).zipped.map(_-_).map(math.abs).sorted==(1 to?.size-1)

Keras: 124

val? =args.map(_.toInt)toSeq;print(if((?tail,?).zipped.map(_-_).map(math.abs).sorted==(1 to?.size-1))"Jolly"else"Not jolly")
Luigi Plinge
sumber
Oke - kita tersesat, Luigi menemukan kita! :) Selamat datang di CodeGolf. Segera saya mulai belajar sesuatu. Tanda tanya sebagai pengidentifikasi? Whooo - siapa yang mengizinkan itu? :)
pengguna tidak dikenal
Ya, dan semuanya untuk mencukur 1 karakter! Ini adalah perbedaan antara karakter alfanumerik dan karakter operator (lihat stackoverflow.com/q/7656937/770361 ) yang berarti Anda terkadang dapat menghilangkan spasi (tetapi terkadang membutuhkan yang ekstra) dan titik. Code golf sangat bagus untuk belajar - agak seperti aerobatik untuk terbang.
Luigi Plinge
1

Q, 64 (sulit), 30 (mudah)

keras

{$[(1_(!)(#)x)~asc abs 1_(-':)x;(-1"Jolly";);(-1"Not jolly";)];}

mudah

{(1_(!)(#)x)~asc abs 1_(-':)x}
tmartin
sumber
1

J (mudah), 19 karakter

*/(=i.@#)<:/:~|2-/\

Pemakaian:

    */(=i.@#)<:/:~|2-/\4 2 1 4
1

Berbeda dengan jawaban DCharness , dan saya hanya akan menambahkannya sebagai komentar tetapi karena dia belum pernah berkunjung sejak tanggal 23 Februari.

2-/\ mengambil perbedaan antara pasangan angka yang berurutan,

| mendapatkan nilai absolut dari setiap angka,

/:~ mengurutkan dalam urutan menaik,

<: mengurangi setiap angka dengan 1,

(=i.@#)sebuah kait J yang menghasilkan urutan angka 0 dengan panjang daftar perbedaan - 1 ( i.@#) dan membandingkannya dengan daftar yang =.

*/mengalikan daftar 1s dan 0s yang dihasilkan oleh kata kerja sebelumnya.

Gareth
sumber
Tidak menyadari sampai setelah saya mengirimkan jawaban saya: kami mengambil pendekatan yang sama, tetapi saya menggunakan x-:ybukannya */x=ymenyimpan karakter.
ephemient
1

Scala mudah: 138 153, 170 (keliru, diperbaiki nanti)

def j(i:String)={
def a(s:Seq[Int])=(s zip s.tail).map(x=>(x._2-x._1))
a(a(i.split(" ").map(_.toInt)).map(math.abs).sorted).toSet.size==1}

ungolfed:

def jolly (input: String) = { 
      val list = input.split (" ").map (_.toInt)

      def stepsize (s: Seq[Int]) = 
        (s zip s.tail).map (x=> (x._2 - x._1))

      val first = stepsize (input.split (" ").map (_.toInt))
      val pos = first.map (math.abs)
      val unique = stepsize (pos.sorted).toSet
      (unique.size) == 1
}

Idenya adalah, kita membangun derivasi kedua:

Original: 4 1 2 4
Stepsize:  -3 1 2 (first)
     abs:   3 1 2
  sorted:   1 2 3 
Stepsize:     1 1 
  to Set:       1 
    size:       1

Scala hard 172 182, 205 (salah / ditingkatkan):

def j{
def a(s:Seq[Int])=(s zip s.tail).map(x=>(x._2-x._1))
println((if(a(a(readLine.split(" ").map(_.toInt)).map(math.abs).sorted).toSet.size==1)"J"else"Not j")+"olly")}
j

kurang lebih sama dengan di atas.

Pengguna tidak diketahui
sumber
Input 4 1 2 5mengembalikan true. Masih belum berhasil mendapatkan kepalaku di sekitar lipatan kiri ...
Gareth
Oh ya, saya menemukan kesalahan saya. Perlu memperbaikinya.
pengguna tidak diketahui
readLinemengambil input dari konsol, bukan stdin ... (tetapi Anda dapat menggunakannya argssebagai gantinya)
Luigi Plinge
Dan j("1")melemparUnsupportedOperationException: empty.max
Luigi Plinge
Maaf - bagaimana Anda mendefinisikan perbedaan antara stdin dan "input dari konsol"?
pengguna tidak diketahui
1

PHP, mudah, 129

Untuk array $sbilangan bulat yang diberikan :

for($i=1;$i<count($s);$i++)$a[abs($s[$i]-$s[$i-1])]=1;
for($i=1;$i<count($s);$i++)if(!isset($a[$i]))die('Not Jolly');echo 'Jolly';

Versi ungolfed:

for( $i=1; $i<count( $s ); $i++ )
    $a[ abs( $s[$i] - $s[$i-1] ) ] = 1;

for( $i=1; $i < count($s); $i++ )
    if( !isset( $a[$i] ) )
        die( 'Not Jolly' );

echo "Jolly";        
Barry O'Donovan
sumber
1

Jelly , 7 6 byte (mudah)

IAṢ⁼J$

Cobalah online!

IAṢ⁼J$    jolly function on N:
IAṢ       the increment list: get all the Increments, take their Absolute values, and Ṣort them
   ⁼      compare that to...
    J$    range from 1 to len(N) -- this has an extra number, but that's fine because...
          ...the increment list is one shorter, and ⁼ will only compare that many values

Mengambil input sebagai angka yang dipisahkan koma dalam argumen pertama. Mengembalikan 1 jika urutannya riang, dan 0 jika tidak!

Solusi 7-byte:

LRṖḟIA$

Cobalah online!

Mengambil input sebagai angka yang dipisahkan koma dalam argumen pertama. Tidak menghasilkan apa-apa jika daftar adalah urutan jolly jumper, dan sesuatu jika tidak.

Menambahkan baris ini membuatnya bekerja dengan spesifikasi keras:

Jelly , 27 22 byte (sulit, umpan balik selamat datang!)

ɠḲVIAṢ⁼J$ị“¢⁼D“¡KṀȥƘạ»

Cobalah online!

ɠḲVIAṢ⁼J$ị“¢⁼D“¡KṀȥƘạ»
ɠḲV                     read a line, split on spaces and eValuate the numbers
   IAṢ⁼J$               jolly function: see above!
         ị              ịndex the result into (remember Jelly is one-indexed, so 0 wraps around to the back):
          “¢⁼D“          "Jolly" compressed if true,
              ¡KṀȥƘạ»   or, "Not jolly" compressed if false!

Solusi 27-byte (keras):

LRṖḟIA$
ɠḲVÇ“¡KṀȥƘạ»“¢⁼D»L?

Cobalah online!

Menghidupkan nomor yang dipisahkan ruang stdin, dan menampilkan "Jolly" atau "Not jolly".

Penjelasan:

LRṖḟIA$               jolly function:
LRP                   make a range (R) from 1 to the input length (L), popping off (P) the last number to make it 1 to N-1.
   ḟ                  reverse filter: remove all the elements from that range that are members of...
    IA$               the increment list: get all the increments, take their absolute values (expressed as one monad via '$').
ɠḲVÇ“¡KṀȥƘạ»“¢⁼D»L?    i/o main function:
ɠḲV                   read a line from stdin, split it on spaces and have Python parse each number (handling negative signs)
   Ç             ?    run the above, and use the result on the following conditional:
                L?    if the length of the result is truthy (non-empty):
    “¡KṀȥƘạ»          then, return Jelly compressed string "Not jolly",
            “¢⁼D»     else, return Jelly compressed string "Jolly".

Umpan balik sangat dihargai!

Harry
sumber
1
LRadalah J. Jika Anda menulis sesuatu seperti IAṢ⁼J$Anda mendapatkan hasil 1/0 yang bagus, dan Anda dapat menggunakannya untuk mengindeks ke “Not jolly“Jolly”:ɠḲVIAṢ⁼J$ị“¢⁼D“¡KṀȥƘạ»
Lynn
@ Lynn Terima kasih, itu jauh lebih baik! Trik cerdas dengan membungkus satu-indeks, dan saya belajar lebih banyak tentang atom, berguna untuk membandingkan hanya bagian dari daftar.
Harry
1

Haskell , 59 57 byte

f n=all(`elem`map abs(zipWith(-)n$tail n))[1..length n-1]

Mode mudah, mengembalikan keceriaan sebagai boolean. Terima kasih kepada @Laikoni untuk dua byte.

Cobalah online!

Angs
sumber
1

Japt , 32 30 byte Hard

-2 Bytes dari @Shaggy

`not jo¥y`s4*Näa n äa e¥1
hUÎu

Cobalah online!

Luis felipe De jesus Munoz
sumber
1
30 byte . Saya hanya memperhatikan persyaratan kapitalisasi pada detik terakhir sehingga mungkin dapat ditingkatkan lebih lanjut.
Shaggy
1

Python 3, 117 (sulit)

l=[*map(int,input().split())]
print(["Not j","J"][{abs(a-b)for a,b in zip(l[1:],l[:-1])}=={*range(1,len(l))}]+"olly")

Cobalah online!

Андрей Ломакин
sumber
Ada kesalahan dalam program Anda. Cobalah online
mbomb007
Ini memberikan jawaban yang salah untuk test case pertama. Silakan periksa program Anda untuk test case yang terkandung dalam pertanyaan.
mbomb007
Merasa malu, karena ketika versi yang salah diperbaiki lupa untuk membalikkan output; (
Андрей Ломакин
Selamat datang di PPCG !!
Luis felipe De jesus Munoz
0

JavaScript: 105 (mode mudah)

Golf:

function a(l){for(r=i=1;i<(m=l.length);i++){for(j=t=0;j+1<m;)t+=(d=l[j]-l[++j])*d==i*i;t||(r=0)}return r}

Tidak golf:

function isJolly(list){
    //Iterate over i to list.length-1
    for(r=i=1;i<(length=list.length);i++){
        //Check the differences between all consecutive elements squared minus i squared.  Set t to true if one was found.
        for(j=t=0;j+1<length;)t+=(diff=list[j]-list[++j])*diff==i*i;

        //if t is not true, return value is 0
        t||(r=0)
    }
    return r
}
Briguy37
sumber
0

Perl, 89 (sulit)

Kode 86 karakter + 3 untuk berjalan dengan -popsi

@a=0;$a[abs($1-$2)]=1while s/(\S+) (\S+)/$2/;$_='Jolly';(grep{!defined}@a)&&s/J/Not j/
DCharness
sumber
0

Javascript (sulit): 138

a=prompt().split(" ")
i=0;b=[];c=[]
while(b[i]=Math.abs(a[i]-a[++i]),c[i-1]=i,i<a.length-1);b.sort()
alert(b+""==c+""?"Jolly":"Not jolly")
Peter Olson
sumber
0
    #!/usr/bin/env python

def main():
    pass

if __name__ == '__main__':
    main()

numbers = []
jolly_list = []

numbers = raw_input("Enter Numbers: ").split()
for count in range ( len(numbers)-1 ) :
    jolly_list.append ( abs( int(numbers[count]) - int(numbers[count+1]) ) )

jolly_list = sorted(jolly_list)
for count in range(len(jolly_list)) :
    flag = 0
    if count+1 == jolly_list[count] :
        flag = 1
    else :
        flag = 0
        print "Not Jolly"
        break
if flag == 1:
    print "Jolly"
john miller
sumber
2
Halo John dan selamat datang. Gagasan golf kode adalah, untuk mengurangi ukuran sejauh yang Anda bisa. Saya bukan orang pyhtonian, tapi "Masukkan Angka" jelas sangat berlebihan.
pengguna tidak diketahui
0

R, Mudah, 110

f=function(s){p=NULL;l=length;for (i in 2:l(s))p=c(p,abs(s[i]-s[i-1]));ifelse(all(sort(p)==(1:(l(s)-1))),1,0)}

Pemakaian:

f(c(2, -1, 0, 2))
[1] 1
f(c(19, 22, 24, 25))
[1] 1
f(c(19, 22, 24, 21))
[1] 0
Paolo
sumber
0

Python, 72 (mudah), 114 (sulit)

Mudah:

def f(a):return len(set(map(lambda x,y:abs(x-y),a[1:],a[:-1])))>len(a)-2

Sulit :

a=map(int,raw_input().split())
print('Not j','J')[len(set(map(lambda x,y:abs(x-y),a[1:],a[:-1])))>len(a)-2]+'olly'
hallvabo
sumber
0

Python, 255 karakter

r=[19,22,24,25]
i=0
k=[ i+1 for i in range(len(r)-1)]
def jolly(a):
    p=[]
    i=0
    while i<len(a)-1: 
       p.append(abs(a[i+1]-a[i]))
       i+=1
    p.sort() 
    if p==k:
       return 'jolly'
    else:
       return 'Not jolly'

print(jolly(r))
Ashwini Chaudhary
sumber
Saya telah menambahkan nama bahasa dan jumlah karakter ke jawaban Anda (ini berjalan sebagai Python sehingga saya menganggapnya). Hitungan karakter yang saya berikan adalah yang diberikan oleh naskah pengguna . Anda mungkin dapat mengurangi level indentasi pertama ke satu ruang untuk menyimpan beberapa karakter di sini.
Gareth
0

C, 119 (sulit), 97 (mudah)

b,c,a[];main(k){while(~scanf("%d",a+c))k=c++;for(c=k;b<c*c;)k-abs(a[b%c]-a[b++%c+1])?:k--;puts(k?"Not jolly":"Jolly");}

Solusi mudah membaca input dari argumen dan mengembalikan 0 sebagai kode keluar jika inputnya adalah urutan jolly jumper:

i,k;main(int c,char**a){for(k=c-=2,a++;i<c*c;)k-abs(atoi(a[i%c])-atoi(a[i++%c+1]))?:k--;exit(k);}
quasimodo
sumber
0

APL ( 50 49 47, sulit)

'Not jolly' 'Jolly'[1+K[⍋K←¯1↓|Z-1⌽Z]≡¯1↓⍳⍴Z←⎕]

Mudah (24):

{K[⍋K←¯1↓|⍵-1⌽⍵]≡¯1↓⍳⍴⍵}

Fungsi ini mengambil array dan mengembalikan 0 atau 1.

marinus
sumber