Jolly Jumper Sequence


15

ลำดับของจำนวนเต็ม n> 0 เรียกว่าจัมเปอร์จัลลี่ถ้าค่าสัมบูรณ์ของความแตกต่างระหว่างองค์ประกอบที่ต่อเนื่องจะใช้กับค่าทั้งหมด 1 ถึง n-1

ดังนั้นลำดับ [4,1,2,4] จึงมีความแตกต่างแน่นอน [3,1,2] ซึ่งเท่ากับชุด [1,2,3] (1 ถึง n-1 โดยที่ n คือความยาวของลำดับดั้งเดิม) ดังนั้นจึงเป็นจัมเปอร์ที่ร่าเริง

ลำดับมีความยาว n> 0

สมมติว่า n = 1 เป็นจัมเปอร์ jolly

โหมดง่าย ๆ :ไม่ต้องกังวลกับ stdin / stdout เพียงแค่ฟังก์ชั่นที่ยอมรับการโต้เถียงและส่งคืนบางสิ่งที่บ่งบอกว่าร่าเริงหรือไม่

โหมดฮาร์ด:อินพุตบน stdin (คั่นด้วยช่องว่าง) และเอาต์พุตคือ "Jolly" / "Not jolly" การใช้อักษรตัวพิมพ์ใหญ่มีความสำคัญ

นี่คือรหัสกอล์ฟ

แก้ไข: ลำดับสามารถมีจำนวนเต็มลบและอินพุตบน stdin คือการเว้นวรรค

$ jolly 2 -1 0 2
Jolly

$ jolly 19 22 24 25
Jolly

$ jolly 19 22 24 21
Not jolly

1
มีการจัดลำดับอย่างไร เป็นสตริงหรือไม่? "4124"?
Steven Rumbalski

ฉันคิดว่าการเว้นวรรคเป็นเรื่องธรรมดาที่สุดดังนั้นฉันจะบอกว่า
eternalmatt

6
คุณบอกว่าอินพุตอยู่บน stdin แต่ตัวอย่างของคุณรับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง เราควรคาดหวังอะไร
Gareth

คำตอบ:


3

Haskell

ง่าย 4 ตัวอักษร

ส่งคืนรายการของจำนวนเต็ม jolly ถ้าหากกำหนดให้รายการของจำนวนเต็ม jolly เป็นอินพุต สิ่งนี้ถูกกฎหมายตาม "เพียงแค่ฟังก์ชั่นที่ยอมรับข้อโต้แย้งอย่างไรก็ตามและส่งคืนสิ่งที่บ่งบอกว่าร่าเริงหรือไม่"

j=id

ทางเลือกง่ายๆด้วยตัวอักษร 61 ตัว:

ใช้เวลาในรายการและส่งกลับรายการว่างถ้าลำดับคือครึกครื้น

import List
j n=zipWith(\x->abs.(x-))n(tail n)\\[1..length n]

1
+1 กฏหมายที่ดี ถึงแม้ว่าผมจะชี้ให้เห็นว่าใน GolfScript โปรแกรมที่ว่างเปล่าจะพอเพียง ...
ปีเตอร์เทย์เลอร์

ทางเลือกอื่นดูเหมือนจะให้ผลลัพธ์ที่ผิด [1,3]ไม่ร่าเริงใช่ไหม ผมคิดว่าคุณต้องย้ำไปlength n-1แทน
Rotsor

2

Ruby, 92 93 ตัวอักษร

รุ่นที่ยากกับการป้อนข้อมูลใน STDIN

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

หากคุณเริ่มต้นด้วย-pa(นับเป็น 4) คุณสามารถบันทึก 5 ตัวอักษร:

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

อ่าดีมาก ไม่ทราบว่ามีเมธอด each_cons
migimaru

ฉันเพิ่งรู้ว่าสิ่งนี้ล้มเหลวเมื่อลำดับเป็นตัวเลขหลักเดียว คุณจะต้องติดกับ f.size แทน f [-1]
migimaru

โอ้คุณยังสามารถบันทึก 5 -paตัวอักษรถ้าคุณใช้มันมีตัวเลือก
migimaru

2

Java (ยาก)

สมมติว่าอินพุตได้รับผ่าน stdin (ไม่ผ่านอาร์กิวเมนต์บรรทัดคำสั่งตามตัวอย่าง)

Golfed - 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");
}
}

ยกเลิกแข็งแรงเล่นกอล์ฟ

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");
}
}

2

Scala, โหมดง่าย, 123 ตัวอักษร

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}

วิธีเรียกใช้หรือทดสอบบน 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"))
   }
}

ชื่ออาจเป็น j แทนการกระโดด
ผู้ใช้ที่ไม่รู้จัก

@ ไม่ทราบผู้ใช้ใช่ฉันรู้ ฉันรู้ว่าประมาณครึ่งชั่วโมงหลังจากที่โพสต์ไว้ก) ฉันสามารถย่อชื่อเมธอดและข) ฉันต้องใช้รายการแทนชุดหรือไม่ทำงานอย่างถูกต้อง : -S
Gareth

และกฎที่อัปเดตคาดว่าตัวเลขจะถูกหารด้วยช่องว่าง 4124 อาจเป็นตัวเลขหนึ่งสองสามหรือสี่
ผู้ใช้ที่ไม่รู้จัก

@user ไม่รู้จักดีมาก อีกคนโพสต์คำถามแล้วเปลี่ยนกฎไปครึ่งทาง
Gareth

ฉันลบประเภทผลตอบแทน Boolean ซึ่งเป็น 'ผลตอบแทน' ตามตัวอักษรก่อน `เท็จ 'และเปลี่ยนคณิตศาสตร์เป็นคณิตศาสตร์ ออมทรัพย์ตั้งแต่ 137 ถึง 123.
ผู้ใช้ไม่รู้จัก

2

Golfscript โหมดง่าย21 18 ตัวอักษร

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

ยอมรับอาร์กิวเมนต์เป็นอาร์เรย์ของ ints บนสแต็กโดยไม่มีอะไรอยู่บนสแต็ก ทิ้ง 1 บนสแต็กถ้ามันเป็น jolly และ 0 เป็นอย่างอื่น ในการรับอินพุตบน stdin เป็นรายการของ ints ที่คั่นด้วยช่องว่างให้เติม

~]

และส่งออก "Jolly" / "Not jolly" (สมมติว่าเราเปลี่ยนสิ่งนี้เป็นโปรแกรม) เลื่อนออกไป

"Not jJ"5/="olly"

ฉันสงสัยว่ามันอาจทำงานได้อย่างไร - ฉันใช้เวลาสักครู่เพื่อตระหนักว่าเมื่อคุณเขียน "รายการของ ints ใน stack" คุณหมายถึงรายการของ ints (เช่น[4 1 2 4]ไม่ใช่4 1 2 4)
Ilmari Karonen

@IlmariKaronen ไม่แน่ใจว่าตอนนี้ทำไมฉันจึงเขียน "รายการ" ฉันได้แก้ไข "อาร์เรย์" เพื่อให้ชัดเจนขึ้น
Peter Taylor

2

J (ง่าย), 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 (ยาก), 68

2!:55]1!:2&2'olly',~>('Not j';'J'){~(i.@#-:<:/:])|2-/\".@>2}.ARGV_j_
$ jconsole jumper.ijs 2 -1 0 2
ครึกครื้น
$ jconsole jumper.ijs 19 22 24 25
ครึกครื้น
$ jconsole jumper.ijs 2 19 22 24 21
ไม่ร่าเริง


1

J, 30, 26โหมดง่าย 81 76โหมดยาก

แก้ไข:จัดการรายการที่สั้นกว่า 3 แก้ไขการอ่าน stdin

บรรทัดแรกดูแลโหมดง่าย ๆ ที่สองเพิ่มโหมดยาก

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

โดยทั่วไป J อ่านจากขวาไปซ้าย:

2-/\ : สำหรับทุก ๆ เลขสองตัวที่ต่อเนื่องกันในรายการ

| : ค่าสัมบูรณ์

/:~ : เรียงตามลำดับจากน้อยไปหามาก

>:@i.@#: 1 ถึงnสำหรับรายการตัวเลขn

= : เปรียบเทียบความแตกต่างที่เรียงลำดับกับลำดับ (โดยใช้ J "fork")

*/: คูณบูลีนที่ชาญฉลาด หากการเปรียบเทียบทั้งหมดเป็น 1 ผลิตภัณฑ์ของพวกเขาคือ 1 ดังนั้นมันจึงร่าเริง


1 3พิจารณาการป้อนข้อมูล
Peter Taylor

ขอบคุณ @Peter แก้ไข ... และยังไม่สามารถแข่งขันกับ Golfscript ของคุณ ทำได้ดี.
DCharness

1

Ruby, 97 102 106 (ยาก)

อาจเช่นกันเนื่องจากคนอื่นคือ:

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"

อินพุตถูกใช้บน stdin


คุณสามารถแทนที่โดย(1..d.size).to_a [*1..d.size]ตัวถูกดำเนินการสลับเป็นไปได้บันทึกอีกอันหนึ่ง (รวม -5 ตัวอักษร)
โฮเวิร์ด

@Howard โอ้นั่นเป็นวิธีที่คุณทำมัน! ฉันได้พยายามหาวิธีตีกอล์ฟเพื่อแปลงช่วงระยะเวลาหนึ่งไปยังอาร์เรย์ในขณะนี้ ขอบคุณ!
migimaru

1

D

ง่าย ( 103 83 ตัวอักษร)

ส่งคืนผลรวมของ 1..i.length บน Jolly บางหมายเลขอื่น ๆ หากไม่ใช่ (บิตของกฎที่วางไว้ที่นี่)

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

ยาก (142 ตัวอักษร)

อินพุตเป็นตัวคั่นช่องว่างและสิ้นสุดบน 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");}

1

Groovy

ง่าย: 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]

ยาก: 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"}

1

PowerShell, ยาก, 117 126

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

ประวัติความเป็นมา:

  • 2011-11-18 17:54 ( 123 , −3) - เปลี่ยน$nullเป็นตัวแปรที่ไม่มีอยู่จริง
  • 2011-11-18 18:02 ( 117 , −6) - อินไลน์การประกาศตัวแปรทั้งหมด

1

สกาล่า

แทงอย่างรวดเร็ว - อาจมีการปรับปรุงที่เป็นไปได้

ง่าย: 77

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

ยาก: 124

val? =args.map(_.toInt)toSeq;print(if((?tail,?).zipped.map(_-_).map(math.abs).sorted==(1 to?.size-1))"Jolly"else"Not jolly")

ตกลง - เราหลงทาง Luigi พบเรา! ยินดีต้อนรับสู่ CodeGolf ทันทีที่ฉันเริ่มเรียนรู้บางสิ่ง เครื่องหมายคำถามเป็นตัวระบุหรือไม่ Whooo - ใครอนุญาตให้ :)
ผู้ใช้ไม่รู้จัก

ใช่แล้วทุกอย่างจะกำจัดตัวละคร 1 ตัวออกไป! ความแตกต่างระหว่างตัวอักษรและตัวเลขกับตัวดำเนินการ (ดูstackoverflow.com/q/7656937/770361 ) ซึ่งหมายความว่าบางครั้งคุณสามารถเว้นช่องว่างได้ (แต่บางครั้งก็ต้องการจุดพิเศษ) และจุด รหัสกอล์ฟนั้นยอดเยี่ยมสำหรับการเรียนรู้ - เล็กน้อยเช่นไม้ลอยสำหรับการบิน
Luigi Plinge

1

Q, 64 (ยาก), 30 (ง่าย)

ยาก

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

ง่าย

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

1

J (ง่าย) 19 ตัวอักษร

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

การใช้งาน:

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

แตกต่างกันไปตามคำตอบของ DCharnessและฉันจะเพิ่มมันเป็นความคิดเห็น แต่สำหรับความจริงที่ว่าเขาไม่ได้เยี่ยมชมตั้งแต่วันที่ 23 กุมภาพันธ์

2-/\ ใช้ความแตกต่างระหว่างคู่ของตัวเลขที่ต่อเนื่องกัน

| รับค่าสัมบูรณ์ของแต่ละหมายเลข

/:~ เรียงลำดับจากน้อยไปมาก

<: ลดจำนวนแต่ละครั้งด้วย 1

(=i.@#)เบ็ด Jซึ่งจะสร้างลำดับของตัวเลขจาก 0 ถึงความยาวของรายการที่แตกต่างกัน - 1 ( i.@#) =และเปรียบเทียบกับรายการนั้น

*/ทวีคูณรายการ1s และ0s ที่สร้างโดยกริยาก่อนหน้า


ไม่ทราบจนกระทั่งหลังจากฉันส่งคำตอบ: เราใช้วิธีการเดียวกัน แต่ฉันใช้x-:yแทนที่จะ*/x=yบันทึกตัวละคร
ephemient

1

เรื่องง่าย: 138 153, 170 (ผิดพลาด, ปรับปรุงภายหลัง)

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
}

ความคิดคือว่าเราสร้างที่มาที่สอง:

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

สกาล่าฮาร์ด 172 182, 205 (ผิดพลาด / ปรับปรุง):

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

มากหรือน้อยเช่นเดียวกับข้างต้น


อินพุต4 1 2 5ส่งคืนจริง ยังไม่ได้มีการจัดการที่จะได้รับหัวของฉันรอบที่เหลือเท่าแม้ว่า ...
แกเร็ ธ

โอ้ใช่ฉันพบข้อผิดพลาด จำเป็นต้องแก้ไข
ผู้ใช้ที่ไม่รู้จัก

readLineใช้เวลาการป้อนข้อมูลจากคอนโซลไม่ stdin และ ... ( แต่คุณสามารถใช้argsแทน)
Luigi Plinge

และj("1")พ่นUnsupportedOperationException: empty.max
Luigi Plinge

ให้อภัย - คุณจะกำหนดความแตกต่างระหว่าง stdin และ "อินพุตจากคอนโซล" ได้อย่างไร?
ผู้ใช้ที่ไม่รู้จัก

1

PHP, ง่าย, 129

สำหรับอาร์เรย์$sจำนวนเต็มที่กำหนด:

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';

เวอร์ชันที่ไม่ดีงาม:

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";        

1

เยลลี่ , 7 6 ไบต์ (ง่าย)

IAṢ⁼J$

ลองออนไลน์!

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

รับอินพุตเป็นตัวเลขคั่นด้วยเครื่องหมายจุลภาคในอาร์กิวเมนต์แรก ส่งคืน 1 ถ้าลำดับเป็น jolly และ 0 ถ้าไม่ใช่!

โซลูชัน 7 ไบต์:

LRṖḟIA$

ลองออนไลน์!

รับอินพุตเป็นตัวเลขคั่นด้วยเครื่องหมายจุลภาคในอาร์กิวเมนต์แรก ไม่มีอะไรส่งคืนถ้ารายการเป็นลำดับจัมเปอร์ jolly และบางสิ่งบางอย่างถ้าไม่ใช่

การเพิ่มบรรทัดนี้ทำให้ใช้งานได้กับฮาร์ด spec:

เยลลี่ , 27 22 ไบต์ (ยากยินดีรับข้อเสนอแนะ!)

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

ลองออนไลน์!

ɠḲ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!

โซลูชัน 27 ไบต์ (ยาก):

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

ลองออนไลน์!

ใช้หมายเลขคั่นด้วยช่องว่างบน stdinและส่งออก "Jolly" หรือ "Not jolly"

คำอธิบาย:

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".

ข้อเสนอแนะใด ๆ ชื่นชมมาก!


1
LRJเป็น ถ้าคุณเขียนสิ่งที่ต้องการIAṢ⁼J$คุณจะได้รับความสุข 1/0 ผลและคุณสามารถใช้ที่ดัชนีลง“Not jolly“Jolly”:ɠḲVIAṢ⁼J$ị“¢⁼D“¡KṀȥƘạ»
ลินน์

@ ลินน์ขอบคุณมากดีกว่า! เคล็ดลับที่ชาญฉลาดพร้อมการห่อดัชนีหนึ่งรอบและฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับอะตอมเช่นกันมีประโยชน์ในการเปรียบเทียบเพียงบางส่วนของรายการ
แฮร์รี่



1

Python 3, 117 (ยาก)

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")

ลองออนไลน์!


มีข้อผิดพลาดในโปรแกรมของคุณ ลองออนไลน์
mbomb007

นี่เป็นคำตอบที่ผิดสำหรับกรณีทดสอบครั้งแรก โปรดตรวจสอบโปรแกรมของคุณสำหรับกรณีทดสอบที่มีอยู่ในคำถาม
mbomb007

รู้สึกละอายใจทำให้รุ่นที่แก้ไขผิดพลาดลืมที่จะย้อนกลับเอาต์พุต (
АндрейЛомакин

ยินดีต้อนรับสู่ PPCG !!
Luis felipe De jesus Munoz

0

JavaScript: 105 (โหมดง่าย)

แข็งแรงเล่นกอล์ฟ:

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}

ยกเลิกแข็งแรงเล่นกอล์ฟ:

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
}

0

Perl, 89 (ยาก)

86 ตัวอักษรของรหัส + 3 สำหรับการทำงานกับ-pตัวเลือก

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


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"

2
สวัสดีจอห์นและยินดีต้อนรับ แนวคิดของรหัสกอล์ฟคือการลดขนาดเท่าที่คุณจะทำได้ ฉันไม่ใช่ pyhtonian แต่ "Enter Numbers" นั้นยอดเยี่ยมมาก
ผู้ใช้ที่ไม่รู้จัก

0

R, ง่าย, 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)}

การใช้งาน:

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

0

Python, 72 (ง่าย), 114 (ยาก)

ง่าย:

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

ยาก :

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'

0

Python 255 อักขระ

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))

ฉันได้เพิ่มชื่อภาษาและจำนวนตัวละครในคำตอบของคุณ (มันทำงานเป็น Python นั่นคือสิ่งที่ฉันคิดว่ามันเป็น) จำนวนอักขระที่ฉันได้รับเป็นอย่างใดอย่างหนึ่งให้โดยUserScript คุณสามารถลดระดับการเยื้องแรกเป็นหนึ่งช่องว่างเพื่อบันทึกอักขระบางตัวที่นี่
Gareth

0

C, 119 (ยาก) 97 (ง่าย)

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");}

ทางออกที่ง่ายอ่านอินพุตจากอาร์กิวเมนต์และส่งคืน 0 เป็นโค้ดออกหากอินพุตเป็นลำดับ 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);}

0

APL ( 50 49 47, ยาก)

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

ง่าย (24):

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

ฟังก์ชันรับอาร์เรย์และส่งคืนค่า 0 หรือ 1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.