Час домашнього завдання! Знайдіть мені найнижчу рівну цифру в рядку


12

Ще одне блискуче запитання від Stack Overflow перетворилося на !

Напишіть програму, яка:

  1. Приймає рядок як введення користувача (не вводиться в аргумент або аргумент командного рядка). Тип даних введення повинен бути рядком, якщо мова автоматично вводиться при введенні, вона повинна бути передана в рядок.
  2. Знаходить індекс (0 або 1 на основі) першого найнижчого парного числа .
  3. Друкує 2 цілих числа , індекс та найнижчу парну цифру .
  4. Якщо немає парної цифри , поверніть -1 як індекс, другим числом може бути що завгодно.
  5. Для цілей цей нуль не є рівним .

Приклади тестування з урахуванням рядка зліва виводять значення праворуч:

25376  -->  0,2
523726 -->  1,2
583746 -->  4,4
53771  --> -1,0
_4___2 -->  5,2

Переможець: це програма з найменшим числом символів. Ні бонусів, ні штрафних санкцій.

редагувати: (про stdin) Я накрутив частину введення користувача, в основному немає даних про трубопроводи та аргументів командного рядка. Ви повинні надати запит користувача певного типу в межах самої програми.


4
Що робити, якщо найнижнє парне ціле число має дві цифри? Гаразд, жарт.
Доктор Белісарій

5
Що не так із stdin?
Джон Дворак

1
@JanDvorak Оскільки довільні правила, ось чому.

7
Чому обмеження нуля не є рівним? Це здається дивним.
Іссі

3
Ваші вимоги щодо введення дійсно не мають сенсу: для більшості систем введення надходить із stdin, будь то запит програми чи ні. Незалежно від того, вводиться чи ні вхід, чи не, це не контролюється програмою. - Якщо ваша мета полягала в тому, щоб користувачі створили інтерактивну програму, ви повинні бути точними щодо введення та виведення даних (включаючи форматування) та необхідної взаємодії.
MtnViewMark

Відповіді:


6

Гольфскрипт, 26 (28) символів

'#{gets}'.'246'&8+$1<.@\?

Приклад:

;'583746'
.'246'&8+$1<.@\?
#44

;'53771'
.'246'&8+$1<.@\?
#8-1

тест наживо: http://golfscript.apphb.com/?c=Oyc1Mzc3MScKLicyNDYnJjgrJDE8LjA9QD8%3D

Пояснення:

  • '#{gets}'- це вихід на рубін для задоволення вимог вводу / виводу; STDIN вважається порожнім
  • . клонує вхід
  • '246'&8+знахідки, які навіть цифр присутні у вводі, за винятком того 8, що завжди зберігаються
  • $1< сортує список, потім бере першу цифру, але зберігає його як рядок
  • .@\?упорядковує стек {цифра, введення, цифра}, потім знаходить цифру на вході; дякую @peterTaylor, що помітив мене підписом [масив, масив] ?.

На цей раз я був дуже сміливий з інтерпретацією спец; а саме:

  • Специфікація не наказує, в якому порядку виводяться цілі числа; Використовуйте пропозицію іншого @ peter :x?xдля виправлення (мені не подобаються тимчасові змінні.
  • Специфікація не вимагає жодного роздільника між двома цілими числами; оскільки знайдена цифра завжди є однозначною, це не має великого значення. Якщо це так, додайте n@(що також виконує своп), n\(що не робить) або ]`(що форматує висновок як ["8" -1]).

Вони не шалені вимоги, вони довільні вимоги: P

Крім того, специфікація вимагає, щоб індекс був першим, але я не можу прочитати GolfScript досить добре, щоб сказати, чи не так

@LegoStormtroopr Єдиною точкою специфікації, в якій згадується порядок, є №4: "Якщо немає жодної цифри, поверніть -1 як індекс, другим числом може бути що завгодно". №3 не визначає замовлення; як щодо сміливості "без роздільника"?
Джон Дворак

О, хапай, ти прав, сер! Я згадав про два числа для виведення, але не про порядок. Я стою виправлений!

Ви можете замінити .0=@?з .@\?або :x?xзберегти один символ і уникнути сумнівів з приводу замовлення. Гарне використання 8в якості резервного.
Пітер Тейлор

5

APL (37)

(За замовчуванням 1, але підкоряється ⎕IO)

{×⍴m←⍵/⍨⍵∊'2468':z,⍨⍵⍳⍕z←⌊/⍎¨m⋄¯1,0}⍞

Пояснення:

  • : читати введення користувача
  • m←⍵/⍨⍵∊'2468': видаліть усіх символів, яких немає 2468, зберігайте m.
  • ×⍴m: подивіться, чи є такі
  • :: Якщо так:
    • z←⌊/⍎¨m: оцініть кожен символ у m, знайдіть найменше число та зберігайте z.
    • z,⍨⍵⍳⍕z: повертає індекс zв , після чого z.
  • : Якщо ні:
    • ¯1,0: повернення (-1, 0)

1
Нічого собі, я переміг APL (не з рішенням J, але все ж ...)
Джон Дворак

Пояснення? APL так
самопояснюється

3

Пітон 3, 69

поєднання ідей звідси .

s=input();print(([(s.find(x),x)for x in'2468'if x in s]+[(-1,0)])[0]) 

Мені подобається використання рядка, а не списку, і опущення отриманих (тепер видалених) `цитат.
SimonT

@boothby Я думаю, ви не помітили, що я використовую python 3. У python 3 input () Приймає рядок як введення користувача.
Васі

@SimonT `(бекстик) - це не просто цитати. Це застарілий псевдонім для repr () у python 2. Але його більше не доступно в Python 3. Отже, якщо я хочу використовувати `` на щось у python 3, мені доведеться написати repr (щось), що коштує ще 4 символи. Ось чому я позбувся цього;)
Васі

@Wasi так, моя помилка.
виставка

@Wasi, так дякую. Мені це було відомо, і "тепер видалено" я фактично мав на увазі видалення як частину мови взагалі. Ура.
SimonT

3

Рубін, 60 символів

x=gets.chars.sort.find{|c|c=~/[2468]/};p x ?$_.index(x):-1,x
  • $_містить останній вхід, прочитаний користувачем gets.
  • pзакликає inspectаргументи та друкує результати.

3

perl - - 94 - 53 символів (або 48)

Замість index()нульового підходу ми використовуємо posта починаємо з одного; немає CPAN. Запустіть це, perl -nEі він буде чекати введення даних (який він також може отримати від STDIN).

Перша //операція match ( ) працює на значенні за замовчуванням ( $_) від введення, співставляючи задані парні числа, sortпереводячи сірники в масив, а потім зберігаючи їх у "скалярному списку" ($m). У скалярному контексті значення списку відсортованого масиву є одним елементом і, таким чином, складається з найнижчого відповідного парного числа в цифрі.

Виділивши найнижчу рівномірну цифру, ми використовуємо $mдля другої операції відповідності, яка знайде перше виникнення значення $mу вихідному рядку. Ми по - , як і раніше використовуємо значення за замовчуванням тут $_і ми рятуємо матч проти змісту $mв $1(причини для ()навколо $mв другому заяві). Після цього posі sayзробіть все інше (причому менше символів, ніж indexі print).

perl -nE'($m)=sort/[2468]/g;/($m)/g;$1?say pos.",$1":say"-1,0"'
33467
3,4

Якщо порядок виводу або коми не мають значення, тоді можна скоротити ці 5 символів:

($m)=sort/[2468]/g;/($m)/g;$1?say$1.pos:say"-10"

У своїй попередній спробі я кинувся і допустив помилку - просто хотів бити пітона і рубіну (але не вдалося) ... зітхнув.

Подяка переможцю та іншим учасникам за їх круті рішення - особливо за perl6:-) Можлива адаптація такого підходу Perl6 " .comb(запропонована на екрані freenode від Masak et.al. ).

$_=get;my $n=.comb(/<[2468]>/).min;/$n/;say $/.from//-1,",$/"

Був настільки зосереджений на побитті пітона / рубіну, що я опублікував один лайнер, який не працював, коли не було навіть парних чисел: охоче використовував більш ранню версію вищезгаданого з моєї $SHELLісторії для "виграшу". Ця робоча версія смішно довга і бентежна. Служить мені правильно: скоротить пізніше, щоб уникнути ганьби :-(
G. Cito

старший хак:if(/[2468]/){for$i(2,4,6,8){if(index($_,$i)>-1){say$i,",",index($_,$i)+1;last}}}else{say"0,-1"}
G. Cito

2
Добре, але залишається місце для подальшого проведення гольфу: ($m)=sort/[2468]/g;/$m/g;say$&?pos.",$&":"-1,0"(47 + 1 байт, AFAIK -nкоштує додатковий байт).
Хайко Обердік

NB. posповертає зміщення. Таким чином, це фактично повертає 1-базисний індекс у вашому прикладі.
draegtun

@draegtun oopsie :-) дякую. @Heiko правда , що: вимикачі повинні розраховувати інакше perl«s -Mб виграти кожен раз ;-)
Г. ЦІТО

3

Perl 6, 37 55 60 символів

$_=get;say m/<{~.comb(/<[2468]>/).min}>/.from//-1,',',$/.Int

EDIT: Я вперше зрозумів це питання. Це оновлення має бути правильним. Він знаходить найменше число 2,4,6 або 8, яке містить вхід, а потім збігається регулярний вираз проти введення з цим найменшим числом. $/.fromотримує позицію матчу і ',', $/.Intє комою плюс самій відповідності, або 0, якщо текст не збігався.

Поки ви тут, перейдіть на зустріч G. Cito , який допоміг мені виправити свій запис у коментарях та в irc :)


1
На жаль, це друкує перше парне число (2468), знайдене, а не найнижче :( Примітка. Також існує проблема, $/.fromколи нічого не знайдено (це може бути помилка в моїй старій версії Rakudo). Ось варіант вашого рішення, яке працює ( для мене!) my$x=get;for 2,4,6,8 ->$n{if $x~~/$n/ {say $/.from,",$/";exit}};say "-1 0"; Займається на 75 символів, але я впевнений, що коротше рішення perl6 можна зробити
draegtun

@draegtun ... Учора я зробив подібну помилку зі своєю спробою perl5 (див. нижче). Моє виправлення додало 70 символів! Щойно оновив його на ~ 50 char версії - яка, здається, працює. Я думаю, якщо ви сортуєте всі парні цифри за номером, то зможете зіставити, використовуючи (зараз) першу цифру в сортуванні, і будьте впевнені, що у вас найнижча і перша. Я правий?
Г. Чито

@ G.Cito Мені добре виглядає і вже поставив +1 своїй відповіді. Я можу побачити спосіб поголити декілька марок, але бачу Хейко як зроблено навіть краще, ніж те, що я збирався запропонувати!
draegtun

@draegtun О, боже, я повністю зрозумів питання тоді :( Дякую тобі! Я
оновлю

@mouq Ось підхід , який використовує один і той же підхід, що й perl5 прикладу я розмістив нижче my $n; $_="333992";$n=.comb(/<[2468]>/).min;/$n/;say $/.from//-1,",$/". Я дізнався близько .comb20 хвилин тому, і мені вже подобається :-)
G. Cito

2

J, 44 символи

echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1

виводить останній символ вводу, якщо не знайдено жодної цифри

Приклад:

   echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1
523726
+-+-+
|1|2|
+-+-+
   echo(;{&i){._1,~(#~(#i)&>)'2468'i.~i=.1!:1]1
53771
+--+-+
|_1|1|
+--+-+

Пояснення:

  • echo ... i=.1!:1]1є вхід / вихід. Шлях довший, ніж я хочу. Вхід також приховується i.
  • '2468'i.~ знаходить перше виникнення кожної парної цифри на вході, повертаючи вхідну довжину, якщо цифру неможливо знайти
  • (#~(#i)&>)читає "вибрати за довжиною введення, яка перевищує цю"; іншими словами, виберіть ті показники, які вказують на вхід. Шлях довший, ніж я хочу.
  • _1,~додає -1 до спинки. Підкреслення - спосіб представлення негативних значень J.
  • {. вибирає перший елемент
  • (;{&i)з'єднує його з вхідним символом у цій позиції у двох полях; оскільки ми поєднуємо число з символом, конкатенація без боксу ( ,) не обійдеться. Якщо потрібен некомплектний дисплей, індекс потрібно ":спершу відформатувати ( ) вартістю двох знаків.

2

Пітон 2.7 - 76

Орієнтовну відповідь, яку я повністю очікую, буде побито. Але для запуску людей:

s=raw_input()
print[(s.index(`e`),e)for e in[2,4,6,8]if`e`in s][:1]or(-1,0)

3
ви можете поголити персонажа, перейшовши indexна find; Ви можете також змінити [2,4,6,8]до 2,4,6,8(з простором спереду).
Джастін

4
Коротше:print[(s.find(`e`),e)for e in 2,4,6,8if`e`in s+'8'][0]
grc

4
Я думаю, ти порушив своє власне правило ... З тих пір, коли raw_input не stdin?
Cruncher

1
print[(s.index(c),c)for c in'2468'if c in s][0]or(-1,0)
Ерік

2

R, 104

y=as.integer(strsplit(scan(,""),"")[[1]]);z=which(!y%%2&y);a=z[which.min(y[z])];cat(a,"-1 0"[!sum(a)],y[a])

Приклади (в R індекс починається з 1):

_4_502
6  2

_3_501
-1 0 

583746
5  4

2

Powershell, 76 73 71

$s=read-host;2,4,6,8|%{if($i=$s.indexof("$_")+1){"$i,$_";break}};"-1,0"
  • $s=read-host зберігає введення користувачів у $s
  • 2,4,6,8|%{...} виконує те, що знаходиться всередині {}цифр 2,4,6 та 8
  • $i=$s.indexof("$_")+1 встановлює $iіндекс цифри на основі 1 $sабо 0якщо цифра не знайдена
  • if( $i=... ){...} умова буде правдою, коли $iїї немає0
  • "$i,$_";break виводить індекс і цифру і зупиняє виконання
  • "-1,0" інакше виводи -1,0

Це не виводить відповідний індекс. В PowerShell, як і в тестових випадках, наведених для питання, індекси починаються з нуля.
Ізі

1
Правило №2 говорить, що індекс може бути 0 або 1 на основі.
Данько Дурбич

Ой. Не помітив цього. Так чи інакше, ось нульовий варіант, який довше лише на 5 символів. $s=read-host;(2,4,6,8)|%{if(($i=$s.indexof("$_"))-gt-1){"$i,$_";break}};'-1,0'
Ізі

Крім того, я впевнений, що дужки навколо 2,4,6,8не потрібні.
Іссі

Нульовий варіант можна зробити на два символи довше, якщо змінити умова if на:if(1+($i=$s.indexof("$_")))
Данко Дурбич

2

C ++ 11, 173 (включаючи два символи нового рядка)

Ось стисла версія:

#include<iostream> 
#include<string> 
int main(){std::string s;std::cin>>s;for(char c:"2468")for(char&k:s)if(k==c){std::cout<<(&k-&s[0])<<','<<c;return 0;}std::cout<<"-1,8";}

Ось прочитана версія:

#include<iostream>
#include<string>
int main() {
    std::string s; // auto s = ""s; (since C++14: -3 characters)
    std::cin >> s;
    for (char c : "2468")
        for (char& k : s)
            if (k == c) {
                std::cout << (&k - &s[0]) << ',' << c;
                return 0;
            }
    std::cout << "-1,8";
}

Ось стара версія:

C ++ 11, 175 (включаючи два символи нового рядка)

Ось стисла версія:

#include<iostream>
#include<string>
int main(){std::string s;std::cin>>s;for(char c:"2468"){int i=s.find(c);if(i<s.size()){std::cout<<i<<','<<c;return 0;}}std::cout<<"-1,8";}

Ось прочитана версія:

#include<iostream>
#include<string>
int main() {
    std::string s;
    std::cin >> s;
    for (char c : "2468") {
        int i = s.find(c);
        if (i < s.size()) {
            std::cout << i << ',' << c; 
            return 0;
        }
    }
    std::cout << "-1,8";
}

Спробуйте #define o std::cout<<. Я думаю, що вона обрізає ваш код на 1 символ.

@ user2509848, ні, насправді на 2 символи довше. Але все одно дякую :)
Взуття

k==c?std::cout<<(...),throw 0:0;- умовний оператор може замінити if, коли все, що вам потрібно, - це вирази. throw- це вираз, а також на один символ коротший return.
MSalters


1

C # - 124

Я трохи запізнююся на вечірку

void Main(string[]a){var x=a[0].Where(w=>char.IsDigit(w));var y=x.Min();Console.Write(y%2==0?a[0].IndexOf(y)+","+y:"-1,0");}

0

Haskell, 79 символів

s&d=filter((==d).snd)$zip[-1..]$'0':s
main=interact$show.head.("24680">>=).(&)

Це працює трохи швидко і вільно з вихідним форматуванням:

& echo 523726 | runhaskell 16083-LowEven.hs 
(1,'2')
& echo 583746 | runhaskell 16083-LowEven.hs 
(4,'4')
& echo 53771 | runhaskell 16083-LowEven.hs 
(-1,'0')
& echo _4___2 | runhaskell 16083-LowEven.hs 
(5,'2')
& echo 25376 | runhaskell 16083-LowEven.hs 
(0,'2')

0

PowerShell: 145 103

Зміни від оригіналу
Видалену помилку вгамують за коментар від запитувача.

Код:

"$([array]::IndexOf(($s=(read-host)-split''|?{$_}),($x=$s|?{$_%2-eq0}|?{$_-gt0}|sort|select -f 1))),$x"

Покрокова інструкція:

"... "Все, що входить до котирувань, буде включено у висновок.

$(... )Все між дужками буде розглядатися як команди, а вихід цього коду буде включений замість самих команд.

[array]::IndexOf(... )Це використовується для отримання індексу елемента з масивом. Перший її параметр - це об'єкт масиву, який потрібно шукати. Другий параметр - об'єкт, який потрібно знайти. Це виводить лише індекс першого відповідного елемента. Я спробував просто використовувати IndexOfметод безпосередньо проти $s(наприклад:, $s.IndexOf($x)але це не вдається з якихось причин я ще не з'ясував - він стверджує, що методу на цьому об'єкті не існує.

(... )Вираз у круглих дужках буде першим параметром для IndexOf.

$s= $ s буде змінною для зберігання вводу користувача.

(read-host)-split'' Отримує введення користувача та розбиває його на масив символів. "

|?{$_}Фільтрує зайві порожні елементи масиву, які генеруються -split''.

,(... )Вираз у круглих дужках буде другим параметром для IndexOf.

$x= $ s буде змінною для зберігання найнижчої парної цифри від введення користувача.

$s|?{$_%2-eq0} Витягає парні числа з $ s.

|?{$_-gt0} Недійсний нуль.

|sort Сортує решта об'єктів, по замовчуванню - по порядку зростання.

|select -f 1 Вибирає перший об’єкт, який на сьогоднішній день буде найнижчою парною цифрою.

,$xВищевказаний код виведе індекс нашої найнижчої рівної цифри. До цього додається кома, а потім виводиться сама цифра.

Примітки:

Це, можливо, трохи розтягує правило №4. Якщо немає парної цифри, вихід не буде включати друге число.

Також це призведе до деяких помилок, що не закінчуються, якщо вхід містить нечислові елементи. Сценарій все ще буде працювати і давати належний вихід, але ви, можливо, захочете встановити $ErrorActionPreferenceйого 'SilentlyContinue'перед його запуском


@ DankoDurbić Тепер, коли ти міцно перемогла мене, ти б не проти допомогти мені зрозуміти, чому я не можу $s.IndexOfтут скористатися ? Це дало мені помилку, сказавши, що метод не існує для цього об'єкта, хоча $s|gmвін сказав, що це так. Він працює в системі, в якій я зараз, але не в тій, на якій я намагався це зробити раніше. Це питання сумісності версій? Раніше система була PSv2, поточна - PSv4.
Іссі

Ви $sє string[], і $s.indexofне працює, тому ...[System.String[]] doesn't contain a method named 'indexOf'що здається розумним (я працюю з PS 2.0). $s|gmповертає членів System.String, не System.String[]. Я не впевнений, чому це робиться.
Данько Дурбич

0

vb.net (108c)

Sub Main()
t=ReadLine()                          '12c
For Each c In "2468"                  '20c  
i=t.IndexOf(c)                        '14c
If i>=0 Then Exit For                 '21c
Next                                  ' 4c
WriteLine("{0},{1}",i,If(i<0,0,t(i))) '37c
End Sub

Трохи пахне, тому що використовує динамічні налаштування VB. Опція Явне вимкнення та імпорт System.Console .


0

VB.net (193c) за допомогою LINQ

Для цього в основному використовується запит LINQ.

Dim r = From d In "2468" Group Join q In ReadLine.Select(Function(c, p) New With {.c = c, .i = p})
                              On d Equals q.c Into g = Group
                                        Skip While g.Count = 0 ' 138c
WriteLine(If(r.Any,r(0).g(0).i&","&r(0).g(0).c,"-1,0"))        '  55c

0

Golf-Basic 84, 91 символ

:L1/L1_L2i`L1:fpart(L1,2)2_L1:SortA(L1)@cumSum(L1)=length(L1):Thend`-1#d`cumSum(L1):Endd`L1
  • Переконайтесь, що немає 0вхідних даних (це навіть не, хто сказав, що це має бути непарним?)
  • Отримати вхід до L1 (Список 1)
  • Модуль знаходження циклу 2 для кожного значення
  • Сортувати L1 від найменшого до найвищого
  • Відобразить індекс (-1 або сукупну суму) та найменше число

0

Оболонка Борна (ш), 88 символів

(echo 88;sed 's/./\n&/g')|nl -v-1|awk '{print $2,$1}'|sed '/^[^2468]/d'|sort -n|head -n1

Я думав, що буду займатися обробкою рядків для розваги. Технічно він читає з stdin, але якщо ви запускаєте його інтерактивно, він запропонує користувачеві ввести, оскільки клавіатура є потоком stdin за замовчуванням. Використовує основні команди оболонки, щоб розділити вхід на рядки, пронумерувати їх (використовуючи невідому nlутиліту), відфільтрувати рядки, що відповідають критеріям, сортувати їх та вивести найнижчу цифру. Друкує, 88 -1якщо жодної цифри не знайдено.


0

C ++ - 223 221 Персонажі:

#include<iostream>
#include<string>using namespace std;
int main(){int s=9;int p=-1;string x;cout<<"Enter characters: ";cin>>x;for(int i=0;i<x.length();i++){int n=x[i]-48;if(n%2==0&n<s){s=n;p=i;}}cout<<p<<", "<<s;return 0;}

Читаема версія:

#include<iostream>
#include<string>
using namespace std;

int main() {
    int s = 9;
    int p= - 1;
    string x;

    cout << "Enter characters: ";
    cin >> x;

    for (int i = 0; i < x.length(); i++) {
        int n = x[i] - 48;

        if (n % 2 == 0 & n < s) {
            s = n;
            p = i;
        }
    }

    cout << p << ", " << s;

    return 0;
}

Він довгий, але не такий поганий, як Java.


Це насправді 221 + 2 (нові символи рядка), інакше він не збирається.
взуття

Ой. Слово виявлено лише 221, я його зміню.

0

Символи Javascript 93

b=prompt();((r=b.match(/[2468]/g)||[-1]).sort(function(a,b){return a-b})[0])+","+b.indexOf(r)

Отримайте всі номери подій, відсортуйте масив та надрукуйте першу цифру.


0

Математика, 157 символів

f = Row@{If[(x = Min@#) == Infinity, -1, Position[#, x][[1, 1]]],
      ",", x} &[IntegerDigits@ToExpression@StringReplace[#,
       {"0" -> "1", x_?DigitQ :> x, _ -> "1"}] /. _?OddQ -> Infinity] &

inputs = {"25376", "523726", "583746", "53771", "_4___2"}

f /@ inputs // Column

1,2

2,2

5,4

-1, ∞

6,2


0

Юлія, 84

julia> f(a)=(for i=2:2:8;(k=search(a,'0'+i))==0||return(k,i);end;(-1,0))
julia> f(readline(STDIN))
583746
(5,4)
julia> f(readline(STDIN))
_4___2
(6,2)

Джулії дійсно потрібен коротший спосіб отримати внесок у гольф. Я порахував визначення fта один заклик до f. Одне індексація на основі того, чому відповіді відрізняються від прикладів.


0

JavaScript - 53 символів

for(y=prompt(x=0);x<8&&(i=y.indexOf(x+=2))<0;);x+''+i

Читає вхід із запиту та видає (на консоль) найнижчий рівний символ, а потім (без розмежувача) перший індекс цього символу; якщо немає ненульових рівних символів, то вони виводяться 8-1.


0

C, 110 символів

i,f,r,c,m=9;main(){while(r=getchar()>31){c=r-48;i++;if(c>=0&&~c&1&&c<m)m=c,f=i;}printf("%i,%i",m>8?-1:f-1,m);}

неозорений:

i,f,r,c,m=9;
main(){
  while(r=getchar()>31){
    c=r-48;
    i++;
    if(c>=0&&~c&1&&c<m) m=c,f=i;
  }
  printf("%i,%i",m>8?-1:f-1,m);
}

0

Javascript, 69

a=prompt(),b=[-1,9];for(i in a)if(+a[i]%2==0&&+a[i]<b[1])b=[+i,+a[i]]

Читає значення, повторюється через кожен символ, якщо число представлення моди 2 дорівнює 0, а число менше, ніж те, що вже зберігається b, замініть значення вb




0

JavaScript / jQuery 149

Гольф

$(function(){
var i=prompt(),k=-1,n=0,c,e="2468";
while(n<i.length){c=i.charAt(n);k=e.indexOf(c);if(k>=0){break;}n++;}$('#d').append(k+","+n);
});

Повне джерело

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<div id="d"></div>
<script type="text/javascript">
$(function(){
var i=prompt();
var k=-1;
var n=0;
var c;
var e="2468";
while(n<i.length){
c=i.charAt(n);
k=e.indexOf(c);
if(k>=0){
break;
}
n++;
}
$('#d').append(k+","+n);
});
</script>
</body>
</html>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.